From ca1d5130d5085497f646ead2c35a84d7da9db5a2 Mon Sep 17 00:00:00 2001 From: shreyash Date: Mon, 2 Oct 2023 23:34:48 +0530 Subject: [PATCH 01/71] a dino game --- chrome-dino/.DS_Store | Bin 0 -> 6148 bytes chrome-dino/img/.DS_Store | Bin 0 -> 6148 bytes chrome-dino/img/cactus.png | Bin 0 -> 1301 bytes chrome-dino/img/trex.png | Bin 0 -> 3910 bytes chrome-dino/index.html | 16 ++++++++++ chrome-dino/scripts.js | 27 ++++++++++++++++ chrome-dino/styles.css | 64 +++++++++++++++++++++++++++++++++++++ 7 files changed, 107 insertions(+) create mode 100644 chrome-dino/.DS_Store create mode 100644 chrome-dino/img/.DS_Store create mode 100644 chrome-dino/img/cactus.png create mode 100644 chrome-dino/img/trex.png create mode 100644 chrome-dino/index.html create mode 100644 chrome-dino/scripts.js create mode 100644 chrome-dino/styles.css diff --git a/chrome-dino/.DS_Store b/chrome-dino/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..8d7cfe2d32d7deb7ef6c9ead196712375d98e364 GIT binary patch literal 6148 zcmeHKOHKko5PbzK5H~Dc&IvGVU5#X1xaIolH*wkip})4|D;vSri*5tPYs^wd`5LM${=fN12a`a>Sla=XMMV z=-oAOi#ev(Mg9KdlAiOgVBsJZRZRQCyqqs;hcnN-%rd+G_Q%`H>w5C8b8NihU%ZRi z-mD$&>K)3X71$`C--m=nF*U3rhEE5pkOB}}91g~I`1vO$ zIzUVftB4$-Nu&}ZRV>92%N-=r=}#@biWupTurlYdmBlg?vD8D75DrNrdhH6h0^15S zW4EjC|JBd=|2D~cu7E4>uN070Hp~V*lD(~ahtsz-s>6Es&+?hBCk!6^zwYCZr7h$bS45Q*}-JR8Pq2j#dRItmy|_S||s zXWbO%T>v)S-d_PNfQIgforkgczWc~dGUI6V9b0U0iDx|Faa4Ug;oLJUaYui}0e`+) zFBhxzg8S|J7h|qr^$Q;Gw(s{t{qgR~N&zV#1*Cu!_Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D1gc3yK~!i%?b_K= z<46#N;eIqO2+Y3k7!$w^Z_jFWhWYGcYaAoF8#9)=C&K5VI%`qYPi9uBMDyeGPtuHL zy#9wYe+~8i{{Hs%#?Z)6etdk4R$pIVGltDjPNd0bQhj-Ou`1*F`58@&e$PMZcDn;> z5=}gf@9pjF?(V|UXqd7bzF%r$-y~@`V1IxA;^Klo*4Nh$4-b`S zlv`U{_`Vmc$!Ln?m81w(S62@X4j3ydE1gb}0EW@r?k1kSjYoJ5WGy z%+b+NtJN~*8}9iMO`!lKPZ4lK{J~CDsY)4R{N3FhBj*s~>FG&1PW94IQeGLFRL5zW zG>lX!W3sITw}7LcL~uGZ%7P|Fv3w$>IzK_NSbY`y6!Ynn7#IH1Qeq%o3mBxe6-OmD6#)k~8sHh_DS#ygxiNn@p|X{=g# zPT&ZTR4{4IJVb@?d`@W0lg-ia%D8hvZ=S3@QvZ@!JT|%j6m`uyw9QK9M3 z5Zk9`P`px3PfvCEO4qftw4_(NDirO5SxTA?jWL$t7?05L@v(adPqf=@RR%Z%78VxH z&(G)P=0vbk)1fhvKN!l`fb{Z;VIYKZadDBI8|`56lIo?=%PV}wzP!9-8UuzvxCJ;syB-vN}bSn#Dn>Ti^(fB9hz}FJRd;$9h6IceB*A^U%Em+_@_7h zh_twE>5KEt?k5XbCNjnXdaWuPu);cuo?(-!nnr0lM;4AE8*Gs5*!Um`OUYlF0?pvx zp`cK1qORytK?ZPugA0MhL<9j)WU=*zpe~wZoKk26!hwMd0Xr9Dh6u)HgrF9hOq8!X zvc}cbm1QJKAo!yRnxGIvHM{Zt{$9=snH;jb^{lEYaM?$7MXI2&6~(Cd1)XZ#gTRs& zbH2$WHs#ew?CH}aX(D$1cjNl{TFFT$89FR2j3NPB4fc$MnS zRiz&uD{JsjNggPEcj1_^Dh~yP$~67SDm0j`r0@79%GwgSPtp^J!Z%{2B}PCxGl%Y&eThDJB$*Y%%#1IQbrpkWj{yipo~ki`hN zCn(f3jZLUbPFONP0z`objcOBlGou-=8O?ajXvXW$q9M!VPU!0H1{ff6hgZ$5*#X_e z=~rC*y4|izyM;kO!NDc2r0iC!rEB!>VZN@3eG>u79XX$&?p#Vhxi2f5h?Jk$hhILY z`2ays1PDZ@)4`XwX+wEK!URZiBvE`3`yS;OWC90B^*euK^7;8UGDRo&i@5gw00000 LNkvXXu0mjfFAQ=T literal 0 HcmV?d00001 diff --git a/chrome-dino/img/trex.png b/chrome-dino/img/trex.png new file mode 100644 index 0000000000000000000000000000000000000000..60f466538a2229046a7a61b7998f16d72dfb720e GIT binary patch literal 3910 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 U1zm9!j{pDw07*qoM6N<$f=bnD%m4rY literal 0 HcmV?d00001 diff --git a/chrome-dino/index.html b/chrome-dino/index.html new file mode 100644 index 0000000..768cf6b --- /dev/null +++ b/chrome-dino/index.html @@ -0,0 +1,16 @@ + + + + + + Document + + + +
+
+
+
+ + + \ No newline at end of file diff --git a/chrome-dino/scripts.js b/chrome-dino/scripts.js new file mode 100644 index 0000000..c968697 --- /dev/null +++ b/chrome-dino/scripts.js @@ -0,0 +1,27 @@ + +const dino = document.getElementById("dino"); +const cactus = document.getElementById("cactus"); + +function jump() { + if (!dino.classList.contains("jump")) { + dino.classList.add("jump"); + + setTimeout(function () { + dino.classList.remove("jump"); + }, 300); + } +} + + +function checkCollision() { + let dinoTop = parseInt(window.getComputedStyle(dino).getPropertyValue("top")); + let cactusLeft = parseInt(window.getComputedStyle(cactus).getPropertyValue("left")); + + if (cactusLeft < 50 && cactusLeft > 0 && dinoTop >= 140) { + alert("Game Over!"); + } +} + +let isAlive = setInterval(checkCollision, 10); + +document.addEventListener("keydown", jump); diff --git a/chrome-dino/styles.css b/chrome-dino/styles.css new file mode 100644 index 0000000..addb0df --- /dev/null +++ b/chrome-dino/styles.css @@ -0,0 +1,64 @@ +.game { + width: 800px; + height: 200px; + border: 1px solid black; + margin: auto; + } + + #dino { + width: 50px; + height: 50px; + background-image: url(img/trex.png); + background-size: 50px 50px; + position: relative; + top: 150px; + } + + .jump { + animation: jump 0.3s linear; + } + + @keyframes jump { + 0% { + top: 150px; + } + + 30% { + top: 130px; + } + + 50% { + top: 80px; + } + + 80% { + top: 130px; + } + + 100% { + top: 150px; + } + } + + #cactus { + width: 20px; + height: 40px; + position: relative; + top: 110px; + left: 580px; + + background-image: url("img/cactus.png"); + background-size: 20px 40px; + + animation: block 1s infinite linear; + } + + @keyframes block { + 0% { + left: 580px; + } + + 100% { + left: -20px; + } + } \ No newline at end of file From faa5b88405c0bba8a49659fe5c0261c4784b3b42 Mon Sep 17 00:00:00 2001 From: Muhammad Shahzaib Date: Mon, 2 Oct 2023 23:52:07 +0500 Subject: [PATCH 02/71] Added navbar section --- contributors.html | 0 css/style.css | 10 +++++++++ index.html | 52 ++++++++++++++++++++++++++++++++++++++++++++++- 3 files changed, 61 insertions(+), 1 deletion(-) create mode 100644 contributors.html diff --git a/contributors.html b/contributors.html new file mode 100644 index 0000000..e69de29 diff --git a/css/style.css b/css/style.css index ff057ff..2871711 100644 --- a/css/style.css +++ b/css/style.css @@ -8,6 +8,14 @@ padding: 0; box-sizing: border-box; } + +/*navbar-text-item styling*/ +.display-7{ + font-size: 1.5em; + font-weight: 500; +} + + a, a:hover, a:link, a:visited, a:active{ text-decoration: none; color: var(--white-color-lv5); @@ -22,6 +30,8 @@ body { row-gap: 30px; height: 100vh; background: linear-gradient(135deg, rgb(212, 0, 240), rgb(0, 101, 216)); + + background-repeat: no-repeat; color: var(--white-color-lv5); } diff --git a/index.html b/index.html index 39677ea..0ac1329 100644 --- a/index.html +++ b/index.html @@ -5,10 +5,59 @@ JS Beginner Projects + + -

Small Javascript related Projects

+ +
+
+
+ + + +
+

small javascript projects

+
+
+
+
+ + + + + + + + + + + +
Analog Clock
@@ -101,5 +150,6 @@

Small Javascript related Projects

+ From 1babddf029e23054b291ae5fc6ba0a15bbe2f325 Mon Sep 17 00:00:00 2001 From: prafull singh Date: Tue, 3 Oct 2023 00:27:59 +0530 Subject: [PATCH 03/71] added home page --- Home Page/i1.jpg | Bin 0 -> 213641 bytes Home Page/index.html | 83 +++++++++++++++++++++++++++++++++++++++++++ Home Page/style.css | 64 +++++++++++++++++++++++++++++++++ 3 files changed, 147 insertions(+) create mode 100644 Home Page/i1.jpg create mode 100644 Home Page/index.html create mode 100644 Home Page/style.css diff --git a/Home Page/i1.jpg b/Home Page/i1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..55a1a9e2bc4de168418099c9aad8ba5a1833751c GIT binary patch literal 213641 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

pI^)ZL*GDKS@Gz+$hhem?125qvt&9-4{ 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Ð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 + + + + + JavaScript_projects + + + + + +
+

JavaScript_projects

+
+
+
+
+ + + 2D archery game + + + + + Blackjack_game + Blackjack_game + Bouncing Balls + Chatroom Application + Color Changing Background + CountDown Timer + Credit Card Validate + Currency Converter + Dice-Game + DrumKit + GitHub Card + Guess The Number + HangMan + Heart pop up + JS Calculator + JS bubble Game + JavaScript Pairs Game + Joke_generator + MovieApp + Music App + Music Player + Quote Generator + Race Game + RockPaperScissor + Scramble words + Simon_Game + Snake Game + Speech_detection + Text-to-Speech + Tic Tac Toe + Timer + To Do List + Unlimited Color + Weather App + Wekipidia_clone + analog clock + authentication + calender + code visualizer + lineheight and letter spacing + css shadow generator + video-calling application + +
+
+ + + + + + + + + + diff --git a/Home Page/style.css b/Home Page/style.css new file mode 100644 index 0000000..9fe0be1 --- /dev/null +++ b/Home Page/style.css @@ -0,0 +1,64 @@ + +body, h1 { + margin: 0; + padding: 0; + +} +body { + font-family: Arial, sans-serif; + background:url("i1.jpg"); + background-size: cover; + background-repeat: no-repeat; + background-attachment: fixed; } + + + +header { + background-color: #115794; + color: white; + text-align: center; + padding: 25px; +} + +main { + display: flex; + justify-content: center; + align-items: center; + min-height: 100vh; +} + +.project-container { + display: flex; + flex-wrap: wrap; + justify-content: center; + gap: 10px; +} + +.project-label { + padding: 10px 20px; + border-radius: 50px; + cursor: pointer; + text-align: center; + transition: background-color 0.3s ease; +} + + +.blue-label { + background-color: #0074D9; + color: rgb(247, 246, 246); +} + +.red-label { + background-color: #ad712c; + color: white; +} + +.green-label { + background-color: #3CB371; + color: white; +} + + +.project-label:hover { + background-color: #7e3434; +} From 7a6c8839068060a6d9cf9ea4f3c875c80d076bea Mon Sep 17 00:00:00 2001 From: Piyush_Shukla Date: Tue, 3 Oct 2023 00:31:17 +0530 Subject: [PATCH 04/71] Added image guessing game --- .../Sumatran_Tiger_Berlin_Tierpark.webp | Bin 0 -> 265178 bytes Guess The Image/default.jpg | Bin 0 -> 50977 bytes Guess The Image/forest.jpg | Bin 0 -> 28974 bytes Guess The Image/gti.css | 92 ++++++++++++++++++ Guess The Image/gti.js | 73 ++++++++++++++ Guess The Image/gueestheimage.html | 21 ++++ Guess The Image/img0.jpg | Bin 0 -> 21851 bytes Guess The Image/img1.jpg | Bin 0 -> 26639 bytes Guess The Image/img2.jpg | Bin 0 -> 28058 bytes Guess The Image/img3.jpg | Bin 0 -> 102184 bytes Guess The Image/success.mp3 | Bin 0 -> 78240 bytes Guess The Image/wrong.mp3 | Bin 0 -> 56832 bytes 12 files changed, 186 insertions(+) create mode 100644 Guess The Image/Sumatran_Tiger_Berlin_Tierpark.webp create mode 100644 Guess The Image/default.jpg create mode 100644 Guess The Image/forest.jpg create mode 100644 Guess The Image/gti.css create mode 100644 Guess The Image/gti.js create mode 100644 Guess The Image/gueestheimage.html create mode 100644 Guess The Image/img0.jpg create mode 100644 Guess The Image/img1.jpg create mode 100644 Guess The Image/img2.jpg create mode 100644 Guess The Image/img3.jpg create mode 100644 Guess The Image/success.mp3 create mode 100644 Guess The Image/wrong.mp3 diff --git a/Guess The Image/Sumatran_Tiger_Berlin_Tierpark.webp b/Guess The Image/Sumatran_Tiger_Berlin_Tierpark.webp new file mode 100644 index 0000000000000000000000000000000000000000..8a55f90fbf37d34898b2f1c4804ca37a12bf1b6b GIT binary patch literal 265178 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

c>t}hpHa070Ro7b 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%0D8cg) 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 Q#UMGpF literal 0 HcmV?d00001 diff --git a/Guess The Image/default.jpg b/Guess The Image/default.jpg new file mode 100644 index 0000000000000000000000000000000000000000..16eaf8c96bdddce534e1537d67305a175df9819f GIT binary patch literal 50977 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 PArs|smymuQd7uB;rB?`L literal 0 HcmV?d00001 diff --git a/Guess The Image/gti.css b/Guess The Image/gti.css new file mode 100644 index 0000000..a2341be --- /dev/null +++ b/Guess The Image/gti.css @@ -0,0 +1,92 @@ +/* gti.css */ + +/* Reset some default styles */ +* { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +/* Set a base font size for better responsiveness */ +html { + font-size: 62.5%; +} + +/* Apply background and text styles */ +body { + background-image: url("forest.jpg"); + background-repeat: no-repeat; + background-size: cover; + font-family: 'Roboto'; + /* Added Google Font */ +} + +/* Header styles */ +.heading { + width: 100vw; + color: white; + display: flex; + justify-content: center; + align-items: center; + background-color: rgba(5, 5, 66,0); + margin-top: 20vh; + margin-right: auto; + margin-left: auto; + font-size: 5rem; +} + +/* Game container styles */ +.main { + width: 80rem; + /* Increased width */ + height: 20rem; + /* Increased height */ + margin-top: 12vh; + margin-right: auto; + margin-left: auto; + display: flex; + align-items: center; + justify-content: center; + background-color: rgb(5, 5, 66); + border-radius: 10px; + padding: 2rem; + box-shadow: 0px 0px 20px rgba(0, 0, 0, 0.3); +} + +/* Image grid styles */ +.cImage { + width: 16rem; + height: 16rem; + cursor: pointer; + margin: 1rem; + border-radius: 50%; + transition: transform 0.2s ease-in-out; +} + +.cImage:hover { + transform: scale(1.1); +} + +/* Play again button styles */ +.playagain { + width: 25rem; + /* Increased width */ + padding: 1.5rem 2rem; + /* Increased padding */ + margin-right: auto; + margin-left: auto; + background-color: rgb(5, 5, 66); + margin-top: 2rem; + /* Increased top margin */ + font-size: 2rem; + display: flex; + color:white; + border-radius:4px; + justify-content: center; + cursor: pointer; + transition: background-color 0.2s; +} + +.playagain:hover { + background-color: #007bff; +} \ No newline at end of file diff --git a/Guess The Image/gti.js b/Guess The Image/gti.js new file mode 100644 index 0000000..1ae5eae --- /dev/null +++ b/Guess The Image/gti.js @@ -0,0 +1,73 @@ +let imagesno = [0, 1, 2, 3]; +let animals = ["deer", "tiger", "lion", "elephant"]; +let secretNumber = Math.trunc(Math.random() * 4); +let head = document.querySelector(".heading"); +head.textContent = `Guess the image of ${animals[secretNumber]}`; +const audio1 = new Audio("success.mp3"); +const audio2 = new Audio("wrong.mp3"); +let images = document.getElementsByClassName("cImage"); +let aimages = Array.from(images); +let images1 = document.querySelector("#I1"); +let images2 = document.querySelector("#I2"); +let images3 = document.querySelector("#I3"); +let images4 = document.querySelector("#I4"); +let flag = 0; +let pg = document.querySelector(".playagain"); + +pg.addEventListener("click", function () { + images1.addEventListener("click", game); + images2.addEventListener("click", game); + images3.addEventListener("click", game); + images4.addEventListener("click", game); + secretNumber = Math.trunc(Math.random() * 4); + head.textContent = `Guess the image of ${animals[secretNumber]}`; + // images1.src="default.jpg"; + // images2.src="default.jpg"; + // images3.src="default.jpg"; + aimages.forEach(function (i) { + i.src = "default.jpg"; + i.style.width = "16rem"; + i.style.height = "16rem"; + i.style.border = "none"; + i.style.margin = "1rem"; + + }); +}); +let game = function () { + function random_sort(a, b) { + return Math.random() - 0.5; + } + imagesno.sort(random_sort); + this.src = `img${imagesno[0]}.jpg`; + if (secretNumber === imagesno[0]) { + this.style.width = "10rem"; + this.style.height = "10rem"; + this.style.border = "2px solid yellow"; + this.style.marginRight = "10px"; + this.style.marginLeft = "10px"; + head.textContent = `Your guess was correct 🎉 }`; + audio1.play(); + images1.removeEventListener("click", game); + images2.removeEventListener("click", game); + images3.removeEventListener("click", game); + images4.removeEventListener("click", game); + flag = 1; + } else { + audio2.play(); + this.style.width = "10rem"; + this.style.height = "10rem"; + this.style.border = "2px solid red"; + this.style.marginRight = "10px"; + this.style.marginLeft = "10px"; + head.textContent = `sorry you lost 😞 `; + images1.removeEventListener("click", game); + images2.removeEventListener("click", game); + images3.removeEventListener("click", game); + images4.removeEventListener("click", game); + flag = 1; + } +}; +images1.addEventListener("click", game); +images2.addEventListener("click", game); +images3.addEventListener("click", game); +images4.addEventListener("click", game); diff --git a/Guess The Image/gueestheimage.html b/Guess The Image/gueestheimage.html new file mode 100644 index 0000000..c8a0b97 --- /dev/null +++ b/Guess The Image/gueestheimage.html @@ -0,0 +1,21 @@ + + + + + + + Document + + + +

+
+ + + + +
+
Playagain
+ + + \ No newline at end of file diff --git a/Guess The Image/img0.jpg b/Guess The Image/img0.jpg new file mode 100644 index 0000000000000000000000000000000000000000..65860079b4dde67d9d216260de1242ca37c9b7fb GIT binary patch literal 21851 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

SBU^w8V+z=A_CrQw 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

yp*#e{Marylh0-LTo1li>^dmEUiy{68WW*v0PT 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 literal 0 HcmV?d00001 diff --git a/Guess The Image/img3.jpg b/Guess The Image/img3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..eb78980347fa0a4292c45f3352c87bc137b7ac03 GIT binary patch literal 102184 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≪ChM06S1)g*bsk@4gdpe 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 literal 0 HcmV?d00001 diff --git a/Guess The Image/success.mp3 b/Guess The Image/success.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..68dad2d8a1134c6818f45ab4501ddd1fc0fa0f49 GIT binary patch literal 78240 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 zⅈ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 literal 0 HcmV?d00001 diff --git a/Guess The Image/wrong.mp3 b/Guess The Image/wrong.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..cbc41a1c336b338137294bbe23694c04353c4980 GIT binary patch literal 56832 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 F{tG_zG8g~= literal 0 HcmV?d00001 From 6b6c0dc6d44996eb646bbcc12ade692599e85012 Mon Sep 17 00:00:00 2001 From: Dhruv Dhari Date: Tue, 3 Oct 2023 01:37:46 +0530 Subject: [PATCH 05/71] Added Feature of showing date as well, and improved UI and added transitions --- Digital Clock/css/style.css | 44 +++++++++++++++++++++++++++++++-- Digital Clock/digitalClock.html | 2 ++ Digital Clock/js/script.js | 4 +++ 3 files changed, 48 insertions(+), 2 deletions(-) diff --git a/Digital Clock/css/style.css b/Digital Clock/css/style.css index 2980af3..88003ac 100644 --- a/Digital Clock/css/style.css +++ b/Digital Clock/css/style.css @@ -15,7 +15,7 @@ body{ font-family: "Outfit", sans-serif; } .clock{ - background-color: rgb(255, 198, 9); + background:linear-gradient(135deg,#14ffe9,#ffeb3b,#ff00e0); height: 90px; width: 200px; border: 1px solid black; @@ -34,8 +34,30 @@ body{ align-items: center; } .text{ - font-size: 2rem; + display: flex; + justify-content: center; + align-items: center; + font-size: 3rem; + height: 100px; + width: 400px; + border: 1px solid rgb(111, 111, 111); + box-shadow: 10px 10px 3px #273938; + transition: .4s all ease; + +} + +.text:hover{ + display: flex; + justify-content: center; + align-items: center; + font-size: 3rem; + height: 100px; + width: 400px; + border: 1px solid rgb(111, 111, 111); + box-shadow: 15px 15px 3px #273938 ; } + + .texts{ display: flex ; @@ -50,4 +72,22 @@ body{ font-weight: 500; font-size:1.5rem; margin: 2px 15px; +} + +.day{ + background:linear-gradient(135deg,#14ffe9,#ffeb3b,#ff00e0); + + padding: 10px; + border: 3px solid rgb(206, 200, 200); + border-radius: 10px; + color: rgb(59, 59, 59); + + font-size: 1.5rem; + transition: .3s all ease-in; + +} + +.day:hover{ + border-radius: 0; + font-size: 1.55rem; } \ No newline at end of file diff --git a/Digital Clock/digitalClock.html b/Digital Clock/digitalClock.html index 28ed9f0..762d7bf 100644 --- a/Digital Clock/digitalClock.html +++ b/Digital Clock/digitalClock.html @@ -17,6 +17,8 @@

+
hi +
diff --git a/Digital Clock/js/script.js b/Digital Clock/js/script.js index f9e07a6..27e2681 100644 --- a/Digital Clock/js/script.js +++ b/Digital Clock/js/script.js @@ -6,6 +6,8 @@ const clock = document.querySelector(".clock"); +const day = document.querySelector(".day"); + function updateClock() { let date = new Date(); @@ -18,6 +20,8 @@ function updateClock() { const time12Hour = date.toLocaleTimeString(undefined, options12Hour); clock.innerHTML = ` ${time24Hour}
${time12Hour}`; + day.innerHTML = ` ${date}`; + } setInterval(updateClock, 1000); From c72081af8f644586c4ea1d05acf88db119acf836 Mon Sep 17 00:00:00 2001 From: kalash Date: Tue, 3 Oct 2023 02:01:09 +0530 Subject: [PATCH 06/71] Adding Rock Paper Game :) --- Rock Paper/index.html | 14 +++++++++++ Rock Paper/script.js | 56 +++++++++++++++++++++++++++++++++++++++++++ index.html | 4 ++++ 3 files changed, 74 insertions(+) create mode 100644 Rock Paper/index.html create mode 100644 Rock Paper/script.js diff --git a/Rock Paper/index.html b/Rock Paper/index.html new file mode 100644 index 0000000..351201e --- /dev/null +++ b/Rock Paper/index.html @@ -0,0 +1,14 @@ + + + + + + + Rock Paper + + + + + + + \ No newline at end of file diff --git a/Rock Paper/script.js b/Rock Paper/script.js new file mode 100644 index 0000000..915aa42 --- /dev/null +++ b/Rock Paper/script.js @@ -0,0 +1,56 @@ +var userChoice = prompt("Do you choose rock, paper or scissors?"); + +var computerChoice = Math.random(); +if (computerChoice < 0.34) { + computerChoice = "rock"; +} else if (computerChoice <= 0.67) { + computerChoice = "paper"; +} else { + computerChoice = "scissors"; +} +//console.log("Computer chooses: " + computerChoice); + +var compare = function (choice1, choice2) { + + if (choice1 === choice2) { + + return "The result is a tie!" + " " + "Lets play again."; + } + + else if (choice1 === "rock") { + + if (choice2 === "scissors") { + return "rock wins" + "
" + "You beat the computer, nice job!"; + } + else { + return "paper wins" + "
" + "Your really smart computer beat you."; + } + } + + else if (choice1 === "paper") { + + if (choice2 === "rock") { + return "paper wins" + "
" + "You beat the computer, nice job!"; + } + else { + return "scissors wins" + "
" + "Your really smart computer beat you."; + } + + } + + else if (choice1 === "scissors") { + + if (choice2 === "rock") { + return "rock wins" + "
" + "Your really smart computer beat you."; + } + else { + return "scissors win" + "
" + "You beat the computer, nice job!"; + } + } + + +} //closes compare function + + +document.write("Computer chose: " + computerChoice + "
"); +document.write(compare(userChoice, computerChoice)); diff --git a/index.html b/index.html index 88c7c67..1a9c444 100644 --- a/index.html +++ b/index.html @@ -154,6 +154,10 @@

Small JavaScript Projects

Drawing App
+ +
+
Rock Paper
+
From f6a9f409b2a7c61f3f6748b4ad51f2c19720d5b4 Mon Sep 17 00:00:00 2001 From: shourya Date: Tue, 3 Oct 2023 02:20:08 +0530 Subject: [PATCH 07/71] "improved ui with search user feature" --- GitHub Card/css/style.css | 84 ++++++++++++++++++++++++++------- GitHub Card/js/script.js | 39 ++++++++++----- GitHub Card/workingwithapi.html | 18 ++++++- 3 files changed, 108 insertions(+), 33 deletions(-) diff --git a/GitHub Card/css/style.css b/GitHub Card/css/style.css index 101083f..b3f9640 100644 --- a/GitHub Card/css/style.css +++ b/GitHub Card/css/style.css @@ -1,41 +1,89 @@ -*{ +* { margin: 0; padding: 0; box-sizing: border-box; + font-family: "Space Mono", monospace; } -body{ - background-color: #212121; + +body { height: 100vh; + background-color: #141D2F; display: flex; + gap: 20px; + flex-direction: column; align-items: center; justify-content: center; font-family: "Outfit", sans-serif; } -.container{ + +.heading { + color: white; +} + +.container { + color: white; height: 300px; width: 500px; - background-color: rgb(0, 0, 0); - box-shadow: 10px 30px 40px rgba(87, 87, 87, 0.158); + gap: 1px; + background-color: #1e2a47; + + box-shadow: 10px 30px 40px rgba(43, 28, 94, 0.158); border-radius: 10px; display: flex; align-items: center; - justify-content: center; - flex-direction: column; - color: rgb(255, 249, 165); + justify-content: space-around; + + row-gap: 20px; } -.details{ + +.search-container { + box-shadow: 10px 30px 40px rgba(75, 69, 92, 0.194); + display: flex; + align-items: center; + border-radius: 20px; + justify-content: space-between; + padding: 8px 10px; + width: 500px; + background-color: #1e2a47; + +} + +.search-container input { + border: none; + outline: none; + background: transparent; + color: white; + font-size: 15px; + padding: 20px 15PX; +} + +.search-container button { + padding: 20px 20px; + color: white; + width: 100PX; + border-radius: 8px; + border: none; + outline: none; + cursor: pointer; + background-color: rgb(38, 75, 196); +} + +.search-container button:hover { + scale: 95%; +} + + +.details { display: flex; flex-direction: column; row-gap: 20px; } -.images{ - height: 100px; - width: 100px; - border-radius: 50%; -} -.images img{ - height: 100px; - width: 100px; + + + +.images img { + height: 150px; + width: 150px; border-radius: 50%; } \ No newline at end of file diff --git a/GitHub Card/js/script.js b/GitHub Card/js/script.js index 75d4f7d..fcf84e7 100644 --- a/GitHub Card/js/script.js +++ b/GitHub Card/js/script.js @@ -1,17 +1,30 @@ -const requestURL = 'https://api.github.com/users/git21221'; + const image = document.querySelector('#image'); -const name = document.querySelector('.insertname'); +const newname = document.querySelector('.insertname'); +const following = document.querySelector('.insertfollowing'); const followers = document.querySelector('.insertfollowers'); const id = document.querySelector('.insertID'); -const xhr = new XMLHttpRequest(); -xhr.open('GET', requestURL); -xhr.onreadystatechange = () => { - if(xhr.readyState === 4){ - const apiInfo = JSON.parse(xhr.responseText); - image.setAttribute('src', apiInfo.avatar_url); - name.innerHTML = apiInfo.name; - followers.innerHTML = apiInfo.followers; - id.innerHTML = apiInfo.id; - } + + + +async function profile(name="shouryasinghrathore") { + + let quotes = await fetch(`https://api.github.com/users/${name}`) + let apiInfo = await quotes.json(); + console.log(apiInfo) + image.setAttribute('src', apiInfo.avatar_url); + newname.innerHTML =apiInfo.login; + console.log(apiInfo.login) + following.innerHTML = apiInfo.following; + followers.innerHTML = apiInfo.followers; + id.innerHTML = apiInfo.id; + } -xhr.send(); \ No newline at end of file + + +function processInput() { + let inputValue = document.getElementById("inputValue").value; + profile(inputValue); +} + +profile(); \ No newline at end of file diff --git a/GitHub Card/workingwithapi.html b/GitHub Card/workingwithapi.html index aa8488f..8cbbefb 100644 --- a/GitHub Card/workingwithapi.html +++ b/GitHub Card/workingwithapi.html @@ -1,12 +1,19 @@ + - Card using API + Github Dev Finder + +

Github Dev Finder

+
+ + +
user image @@ -16,13 +23,20 @@ Name:
- Followers: + Followers: + +
+
+ following: +
+ + \ No newline at end of file From 53abdc026bda4ad3e568d83312393a2c6927e6fb Mon Sep 17 00:00:00 2001 From: Dhruv Dhari Date: Tue, 3 Oct 2023 02:42:22 +0530 Subject: [PATCH 08/71] Adding feature --- Digital Clock/digitalClock.html | 2 +- Flappy_Bird/app.js | 178 ++++++++++++++++++++++ Flappy_Bird/images/bottom-background.png | Bin 0 -> 18577 bytes Flappy_Bird/images/fb-game-background.png | Bin 0 -> 110342 bytes Flappy_Bird/images/flappy-bird.png | Bin 0 -> 2216 bytes Flappy_Bird/images/flappybird-pipe.png | Bin 0 -> 1528 bytes Flappy_Bird/images/flappybird-pipe2.png | Bin 0 -> 1534 bytes Flappy_Bird/index.html | 16 ++ Flappy_Bird/style.css | 16 ++ 9 files changed, 211 insertions(+), 1 deletion(-) create mode 100644 Flappy_Bird/app.js create mode 100644 Flappy_Bird/images/bottom-background.png create mode 100644 Flappy_Bird/images/fb-game-background.png create mode 100644 Flappy_Bird/images/flappy-bird.png create mode 100644 Flappy_Bird/images/flappybird-pipe.png create mode 100644 Flappy_Bird/images/flappybird-pipe2.png create mode 100644 Flappy_Bird/index.html create mode 100644 Flappy_Bird/style.css diff --git a/Digital Clock/digitalClock.html b/Digital Clock/digitalClock.html index 762d7bf..e598ea6 100644 --- a/Digital Clock/digitalClock.html +++ b/Digital Clock/digitalClock.html @@ -17,7 +17,7 @@
-
hi +
diff --git a/Flappy_Bird/app.js b/Flappy_Bird/app.js new file mode 100644 index 0000000..31a7cde --- /dev/null +++ b/Flappy_Bird/app.js @@ -0,0 +1,178 @@ +//===============board=============== + +let board; +let boardWidth=360; +let boardHeight=640; +let context; + +//==================bird======================= +let birdWidth=32;// width/height=60/45=4/3 +let birdHeight=24; +let birdX=boardWidth/8; +let birdY=boardHeight/2 ; +let birdImg; + +let bird = { + x:birdX, + y:birdY, + width:birdWidth, + height:birdHeight + +} + +//==================pipes==================== +let pipeArray=[]; +let pipeWidth=80; +let pipeHeight=500; +let pipeX=boardWidth; +let pipeY=0; + +let topPipeImg; +let bottomPipeImg; + +//=========physics========= +let velocityX= -2; //pipes moving left direction +let velocityY = 0; +let gravity = 0.4; + +let gameOver = false; +let score=0; + +window.onload= function(){ + board=document.getElementById("board"); + board.height =boardHeight; + board.width =boardWidth; + context= board.getContext("2d"); + + //=============draw flappy bird====================== + + // context.fillStyle="red"; + // context.fillRect(bird.x,bird.y,bird.width,bird.height); + + //loading image + birdImg = new Image(); + birdImg.src="./images/flappy-bird.png"; + birdImg.onload = function(){ + context.drawImage(birdImg,bird.x,bird.y,bird.width,bird.height); + } + //=========for pipes============== + + topPipeImg=new Image(); + topPipeImg.src="./images/flappybird-pipe.png"; + + bottomPipeImg=new Image(); + bottomPipeImg.src="./images/flappybird-pipe2.png"; + + requestAnimationFrame(update); + setInterval(placePipes,1500);// every 1.5s the pipe will be placed + document.addEventListener("keydown",moveBird); +} + +function update(){ + requestAnimationFrame(update); + + if(gameOver){ + return; + } + context.clearRect(0,0,board.width,board.height); + + //bird + velocityY+=gravity; + // bird.y+=velocityY; + bird.y=Math.max(bird.y+velocityY,0); + context.drawImage(birdImg,bird.x,bird.y,bird.width,bird.height); + + if(bird.y > board.height){ + gameOver=true; + } + + //pipes + for(let i=0;i< pipeArray.length;i++){ + let pipe=pipeArray[i]; + pipe.x +=velocityX; + context.drawImage(pipe.img,pipe.x,pipe.y,pipe.width,pipe.height); + + + if(!pipe.passed && bird.x > pipe.x +pipe.width){ + score+=.5; + pipe.passed=true; + } + + if(detectCollision(bird,pipe)){ + gameOver=true; + } + } + + //clear pipes + while(pipeArray.length >0 && pipeArray[0].x<-pipeWidth){ + pipeArray.shift();//remves the first element of the array + } + + //score + + context.fillStyle = "white"; + context.font = "45px sans-serif"; + context.fillText(score ,5,45); + + if(gameOver){ + context.fillText("GAME OVER",5,90); + // context.fillText("YOUR SCORE IS "+score,5,135 ); + } + +} + +function placePipes(){ + + if(gameOver){ + return; + } + let randomPipeY =pipeY - pipeHeight/4 - Math.random()*(pipeHeight/2); + let openingSpace=board.height/4; + + + + let topPipe={ + img :topPipeImg, + x: pipeX, + y:randomPipeY , + width :pipeWidth, + height:pipeHeight, + passed :false + } + + pipeArray.push(topPipe); + + let bottomPipe={ + img :bottomPipeImg, + x :pipeX, + y : randomPipeY +pipeHeight+openingSpace, + width:pipeWidth, + height:pipeHeight, + passed:false + + } + + pipeArray.push(bottomPipe); +} + +function moveBird(e){ + if(e.code=="Space" || e.code=="ArrowUp" || e.code=="KeyX"){ + //jump + velocityY=-6; + + if(gameOver){ + bird.y=birdY; + pipeArray=[]; + score=0; + gameOver=false; + } + + } +} + +function detectCollision(a,b){ + return a.x < b.x + b.width && + a.x + a.width > b.x && + a.y < b.y + b.height && + a.y +a.height> b.y +} \ No newline at end of file diff --git a/Flappy_Bird/images/bottom-background.png b/Flappy_Bird/images/bottom-background.png new file mode 100644 index 0000000000000000000000000000000000000000..623c1a7de530c126f6349977e19aed3f35a44d6b GIT binary patch literal 18577 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 Rz@vs3JYD@<);T3K0RVg51bzSj literal 0 HcmV?d00001 diff --git a/Flappy_Bird/images/fb-game-background.png b/Flappy_Bird/images/fb-game-background.png new file mode 100644 index 0000000000000000000000000000000000000000..2d878c69d2d4baec0988b475d93fc3ea39e0b3c5 GIT binary patch literal 110342 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

82ObCMh5LEmaaWo*Oozij$YV*b5+N%ND{v?P(Y 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

A$EYl)IQd-!R>6AJ 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 literal 0 HcmV?d00001 diff --git a/Flappy_Bird/index.html b/Flappy_Bird/index.html new file mode 100644 index 0000000..b3f9898 --- /dev/null +++ b/Flappy_Bird/index.html @@ -0,0 +1,16 @@ + + + + + + Flappy Bird Game + + + + + + +

+ + + \ No newline at end of file diff --git a/Flappy_Bird/style.css b/Flappy_Bird/style.css new file mode 100644 index 0000000..68cf372 --- /dev/null +++ b/Flappy_Bird/style.css @@ -0,0 +1,16 @@ +body{ + text-align: center; +} + +#board{ + position: absolute; + background-image: url("./images/fb-game-background.png"); +} +#ground{ + position: relative; + background-image: url("./images/bottom-background.png"); + width: 360px; + height: 50px; + display: inline-block; + bottom: -635px; +} \ No newline at end of file From 3f49a764b0ae28c29b1eccdb3e0874775c1b04f0 Mon Sep 17 00:00:00 2001 From: Priyesh Mishra Date: Tue, 3 Oct 2023 02:46:41 +0530 Subject: [PATCH 09/71] Add "Leap Year Generator" [HTML + CSS + JS] --- Leap Year Generator/icon.jpg | Bin 0 -> 14469 bytes Leap Year Generator/index.html | 22 ++++++++++ Leap Year Generator/script.js | 19 +++++++++ Leap Year Generator/style.css | 74 +++++++++++++++++++++++++++++++++ 4 files changed, 115 insertions(+) create mode 100644 Leap Year Generator/icon.jpg create mode 100644 Leap Year Generator/index.html create mode 100644 Leap Year Generator/script.js create mode 100644 Leap Year Generator/style.css diff --git a/Leap Year Generator/icon.jpg b/Leap Year Generator/icon.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e6123e69ee790a63667895d98d63af1a412a1f2b GIT binary patch literal 14469 zcmeHu2UHW=zV~479u!cj_b9!J^nOGE0SS^ofCPey2qA_@3B7o1C{?M_rGywDM0!g= zKtQ@c2oRd|5<-#Qzv#L5zIWfZzW2^u-~HD5-db-@X68RL|M~5`|1*33ZD+rCe*_@w zcp@JHfWE#sa0~!|BfvSfg8&>O{0hgfH>UX#7b_Vy2&jfDWb|Lb|#t5@0H|ADx_4*&<=|A83A zs_Nih>BJw9tg_z^+yIWS%F!c7j~zRD;v{Q1d*;-sGiSMeVP`E|mpQpPS-;Byf&zT3 zRZ(16SX@z4{+hhz?VC4m+rVsmeepj)*#56UJ^}2<*b)y!9b~%<9AIZV$j-L^8Q^2} z{lGysw!b#_N0W~nWjlQA(1C-jtG9ju4zL|$J9O~$k;4ZL9bt(8UajRC)zHsCIqM+PO+o$=84@Q2}!>Zvw)N|kv z+rh&usj#kIXJ=hyV;!D4cKFc2pKbY3&tdj+oWII~M~5_PyWV zMsys#V&d$o_%yFt@W%bLeL8T8b=v{nZuI-oLsEjCc__savpH;CKKnx&-sB`jF(1IoKG`@sLkbmq#diQ5!|6y0s5p@Kc^|M2_=A^!K5 zkMp+FK2WGCGRsk^b$#ubj;HlLU^r@e@ga}#2bWv~&T>nsFL^a(A84Pe5Vh&E()ul% zOg|#=;Oo@FfYuhXTx#RC)Gz+>5*?*D5RrSK1|=K8K={}Dx6I!BT)*Kvxv>zohGWz^ zZYqwh0tZF^?6|wS;jBV$d(V3XvZOmev z?^4onL-QzmhyycJI(cc_*%`il6EnDxDn|el^-U8CR46k_brYMP+7ks3_C6~JRcI7Z z0>MKCF5U*5zX0}~cY%}P7ER3Gh7NN3IeY=+-ZFWg0Klouy@L{OfP?K|;6S?ta7wA+ zN%P#nzt~-D_WHyPJOH>GEC9BbyW9u=BFyU5DHr6D)ss`VF$TrvrtUpS46sdg&NAnC zd+Us3Ln1j>Wo$+?+N3K=$`SW`mxVAy!XH=5^!rcgky)!;?j>aD=_ zljHD?&XQKnBG1$*A3SxcYc415>UfdN1yZ!lJOL{Kb1x5NQWV#b(8MdTv9HLIm0b-q zw8Fp!2C_GgZ|RQC*PV+A-%ASRB>D*?(~7s@oB<>9y{$=kJ>oXnvu2k+)SOWZ6&^@v zb4j_UnEdGxSxD4ijcg}?><((MKgAOkOtv>&u8G~$TnoRqnq&wkSG;F-tA?o&8u8W6 zm_Ru~Aipm!|JYIf%=VLoMP5@*vx_#4Hby~3uSr^pyB#f?G~vh$Xw~b>ymK8%-w>jSm|v~l2b!smR9lcF z|2s+6XpHc1*SvwE-fu6iac-@+Gf*$ba$T&tsP3Nz^UX~34V|B5lFe< zNtCjgL=-rZlPl1uO^9?hm!YR{ih?Y?lCYPbD&XARd%IZ9ey*rLxXA;OeX%nHHV`8h z8>Z5DzO0ylazzZKeV#F@K}2oF80!kCWI68xv1j9q^$prG#T+TnLF#yBJ=MNC@}(!r zkzVCn>!&D^LsyCGt2VdZ64r2`@1xURVZau znYojI9UZ(B!C#ah_uj#s19zMj-ECfBq#~SORvcl)p3^&+oKIs6X-}G6CTL#+otB&! z3xj+^7C*BjHCE~DDG^A!AAI|AlNiGJMY&p6@&Zh(Q&ZHSeO`Yx;m?SP0n7*t-onSdbSCtdM)by zY#m;(ROCgBe+48DR!Jb5SCqJ^C8lz|*3Vp`zdb@LhM0DsXL`z$M7Z0XMfEF{Jtr}( z?4ZqkAb7li?&6LneJGBxFF(27ytog@EUY#dD3?j|TfLTUa*%*g@!IK$4qeZp_4T-o z3Bp}BkuEwDA896?Yc9A|OoezKQF7TN=vxr%wrr%7Cz-wp^>&(GUGI3*50VH_5=s}) zVpRG$)OXJrWkzSJRj72wx+eOhB^b|Fa$6X_hN;K4walWBZfdh;6LBit&ttUuHD%X@ zO-i8MXzA>J)3#Odi09-D-%F)^Id!+bHHWvvXL%?Psr@yD-Yt=jHqdJnXE8+mG#8B7 zIw*k$i$^OrDjS}a5t}G%99TPOmns4>$3`-OvpIHKdCr8W2S8Ri_8xslzkEitW^#6; z{4|L$aEQ`_4_<4*F7d6&)PW7m*+ph8LjwB6T&zS9~`$HaALYC~f zv(0dDbE-JF!8PggfRAh>sDM-AwmDH*O3N;wtTi>eHH(IHnOY3Gx9qA%O8N%yt>*!N zuOaDcpWBShjJsBU?Krq|AMjYopY06joC_!k{K9xd(%c8m?pE6G7;MD^?-Z~OJOO5< z=ATs^oSD7*Kvvfe-O>DSy2I`?>%p$y==V6d_a48I%TgR_G8F*8|Dw4g@U+&QiLsO8 z5Sci&KB=7iuS_Q-v?N;zoEBpnVtbLnkeVjJ?1K>lSCFh z@s%(_G2U=RRc5J=ELpDb#AN0V2uDoPkv@x70ZTG^vt8Mhkq(N(x4Y%DgAJfq zBsJdPnxnF@rtL#3Rpe-)BWhFJK{2d11Nrem--V!_m&H|lu6nw=?HHW_X$2bvRT~un z^apxqdO;6Kis_W48^Wi=fz&k&8qFW=m-o3+7$q+rn@`jwf*2PwQp4A#N;-`$>8q;e z4<%Wbv=&{6^p_Y*k`f!<5NhgiSdH$FPcjzTfU40h=b`({ucV{|tU%*4Da6?*ThJQC z;4MySBX=@Au>W1gaN)88jZ;Ai)Yf@?A2^pb6tI%Zvd^A2lV{G}A|Vk`k0kKoXpvX= z#K*s?iRAP;c$hgkIhYZ^ckX14g_oyr?cz}87yKLQQo=;q3i9w&RQkhNM!21)#>}PW z2J3-kjE&;_i{UKF5iZA?J&LNEy^+rK*6PxRwvVm;L2J4-g#=`YsjVtg4-0j5K}8rC zEv<0WcQH`#ZnX(*6C96osB$IJUPd@(sF2C%An84yX*EzUmH%#0S(z6bA06M*T0(LS z&zv{ZSPNKIh$Hy)1oc+7Ul>YR3C5|Rq0uY0J8G})8@UVz!dKG!JG@&bvu9^WugB>c zA3Il*u267jgn}!#HikFLFxh)4>`2Ok;)tH>L?6`^N8<`@aq)}oN2h+Rds$8&&o#b0 zoZs!XZ7Ac)U08P2rm71ofhg2TyAKIX?QdqvK+E%Sb|A-?c_Cq%OF<*&US1KsEzhWv z1eKrBbeoxwK~46&TS9F`OPO1gQ}D-iIXR$0A(=6%p(=Pyybv)WFS2nIs|c$3IY>J@UYoOq4RQ3_dgw$_odcjiSk!@e8UM>`nd+S$E?6X3;M-V>oGy}4G?Ma>~j z77d4bHf3hM)5;&MCb+i8e}}{Er`k&tANqPK6O8qpoSgj8)8|Gb?b175`Yb~X7gLw* ztV#u6yEmfwi=QFpu>{i;YzWw-0kRxlSVC0bC?b}t@oQA!n?LlaCMr8G4fU6z_NJp^ zQSK=Yk_wDqAH%FSY3ZkXvz#NEtvn0+j!=u3u4cFsN=36~AtF^_lj$#GEhpV^`-N?_yqE zW{{j6Hi4gKt!Sc-;u!gOATvFLI2F_0?1=5oofRh|i*yq?kTq6aj7L5A*5D&2;cb-4 zrg>UlIWxQHvF*D`$&1Lk;VT{~>wb)2oo#-+*@r?#IXeOFek~|xio7W)rW82+7mX`O zr%Ur8U9` z;v|yEJm1BDORs@Wn3-0tnD(f9`yY1BSJOeKT3J&`1~?D{Bx@k>aQF+2$%VgRMw7;f zbtV1^mW7j21}*NFC$HlgI7(vcCU+Yh75NzMdnDm>V`TLs_S%3dH$A1H68A|SoZn@I zmF+lHc6fK{DJ5mi!p%iS^^LlFKC<)7#V{SjTg98C>&wryn>FlB`ld};tu z4GZAlsLlLdj5W-7%Q}2*ag!sbYH(Mwyf9^@;u3S@yK28gdsXc|fQe&$%PMhc`+(#= zP&)*uVZvFi(w{1ak;PiGh5JBpcuRg$*Q0=L%>pIy@NmvaP4l>NNsl9lZ%5#H-IC*u{dqr zE`F-<{mK@33{Yw;y=dX@@BjG7;zcWEmv2v4fkyS+mnlS_VXqi)=k*t+3&iu-}Qug z=sOk0|HJrGfd3<&|E4cR1P=#Coq1p7!+!8rsVwVo3XTGtPDg({n=)mqnxa>X9(&XN4yvMn9Dm8!rj88!^2cNGcZpFg-3Nw0J!K4DdDIpv)=6+-^aR(Y>tG7EdB;QQ9(I*q zjC(a>?Du4@uQ5spiGrq9z!xPD}<-cAN)(r zZvdca^)Vl%pkZs&NgVWHWVs=8%gBmLi9)S;d}FA{!(v%(9XJ!0uq1p>S#3=s9d~rf zve|!BK{_5AD>#;6iR+GQt@1zpHfVVbHYKIn_V$Y?uRwxOW%ODQRdqr;(*}Rea1!RD zRjkVORZQY!A~gu)mXRpJIqkdq9BpWxnL}GG(TVuzi%%Bm;P}LH7Z;=@K6apd4AZCG zd@@r#PFU_)*vrMP;ObtzjvG96dwvGtSjbSl$pK2~GCQs>bwiH;l3GgQCS+7RUTn6}p=(^RDlseEE;X}& zcNm`!o{N}#1?SK1g5K{g(MedeRS$W4oAutX1^)eQNUnTvVxfLs<3Z(v)KzmE{wZ)#=-CRV>KfJHhHhtgT4P!be==RJRJX;x#>v5ZbI4NT}Dot&p5go$T##-Kh+CzAmm@;V-wjR9$!t%|kKZb`cf=YckmuJTUDAasijMR@kA)i&#y&2hR5j*9 z304-?b>dO3q38EQKl{23gW??DgFRn;ohd$HeTLaNTJXjtB11zonGW!Fo*}8OPpvv zAt4#$5Z1>GO>XHGYs3t6H>DaTV2U>1Ho+bD1P3;)DL^0ap+=o1tOnX4~E6B0dvJ8VyT2%@;b$ zs)Ij>8%>%MW}Ydz-SWA=1FU8xSk?!RmHbHAE0|M`GGw8 zrV#UCX(%&N?G1&}-vn2?4x`Vv-^u2ymkB|V#Pz+x?vg9Xm1WVbgP$4DSk*``Oh@0G z<|@B715B01I6a(zktf6|KeIA<73U_N)mD2&$k;Y;hEqUm35H^0%8d0xbp5sMlQQ?W zlq-5>>bK@Ih;s?>cYEI1#WL9gFa=fqK0RH7^W>1lC6n&vc9cb}tP0X{P_ka_HYQM3 zki2QE!cgRSh!4OGfh+P!;%4_GGfTy=3PQB_Z6ViAdodNa zBG4`(=ea@`pMR!#4F=~WnB73S1$melaDH2t=wyWSAmkD?(;m2(>#BBjDQ40mW5f`n zFK(@>*v@MipyFuAN)<6X{NWPqAvI^S6+oewHEZBsr6~UR9^49wApTHX-2d=BxSLyk zqYn*1N)n~!vOAvQ%*#Ova_h-g%ebyq$J0@2Biv!4gVK8B>Dot32+H`ygV>|GX=u{T z((&FofiJTus2s8gZlD8?;fDHkN;nr*&NhA9SW=BWsZyONePn1K@Ou3kwV?2NXj5M~ zXG!zpOYo%Uf(-Eyan{PJ=Y{wk%c$|i2>B9~?aUyKbOMqSY~Yfr+_+kFAvz*P*vG4| zgRbE`0A7NzN2~efs7ROj_>Rjy9(9xbOpAUECV!@P9go$kVEIag)@|jTm@O*-f6+Ne z{FcDiEGx$%toNIUbo5bBFp9S;27>yUd?vEdT>bN4)hVYBL+9<_oozXD#R%wPjEEOZ zKCl1qI)2eYO61EFDBfwHi2rhr&!*Ir8A&~P{?;gob2eFj&`|95JzKugOE?}*X^GBM zeZQ@Okjt@;lC>H)D=mb4PCg_lR_SDPBF$YCUDQ z4qM%*`#awoxV8~S_3R`HbxwW@MC|Ss|7A8>Uy!`Pc)(L-u+6KR9T;Fr2;-&BC~-1H zor=oEE977+85Ndk6x8*qk74t>uz=bjPXpw{wXou8TSR;?=|dmb!qNniV9e*kj_P%b z&Rg$ROT;R7MShF6DEC^cJTw{&Gkc!}A#m4QIGP|cDWcKnh{VBTtw?_?=Z#cVbigI6 zlr#=7V>y4hFm*u6!Nk>d{&9#>@_CI8V>#0{6VNA(VzP5)XeR?b zNXMF6`6i7A9LoePDeUy@P?DJk1iDs~u}mGOLN;QUPCRroBrnqfd$_2G*O6noBQq70 zXnK#cTChye`)a6ScJ2(!=mK9x|Iay*W zQ_OKSN{}M=1#Ro4Nf_E2S!owKf}?NG=c>DgsRyMEr}{bCY;F-VF2SDLiOfq;)H3)Z zsC>41rg-kgjC6>6zkjDaH$kwg2_=>*Mv}Xk?OPZo@KQLcZ~+VpxZy_3CFY8wuvXLE zp*K_YB}>VCSX*P z=#a;rXu$~MuYK2t89cc-!37dy;NIeJ0@C}!<(8SJ6hmTWVG+&%E2Q13bWudHq~AAU zne&CU3?$Wvntcy@OsL)kCm8#wBB(IP3?kS!BWIaHs?v0{Vz6?ywRR3c?`f)8Sy#hDUMJ0Z&<=z*>xHt%CaAo#Fq>bz z{zVc_2ox>!s)3||t}Nc_E0Wj^>963=OfQW{_c99L8eAob%Mj0hfByONd~!6sN` zslo~WSn)EZPuTh~OR&DXT^YZz)`b7F$SpIke)y0&aT+)I4P8A|^l;g%2YIE>+9l@q zY@&f%l0GEW1pJgiP$(~$9Mx@^3Ywa>>Yqj2ANYLRDcT}wfSH*`boB0~&MTaJZI*yx zZ+`sL*W-SfV5p7Ii}{qpqQpM=8pYdz4K1wdF*nI@lS%}vmw+*>CowxSMCXD6mx@X&B zHR4H!T`QpUoIHb3ZvDzeY5e3({Us}BdLxE7wpF8PCParT6_&eyomr|VND--kChR%7 zG;lOt9uHIQ4aH>_Y%zKI+bIm?no$)`Bw0*>)`RSI8?XbNkrBfMPR`n?zuOQ=NJa6N zrYCJ_7KEu$KdDQqi&<5vkeMx|sq( zqIGqZIk~k~6LppYiMEt2xDnZqbvHRvzV`aOA8_S)zYPTIF&k)E&uy+So5 z!lTs%@1a^1OFUGo(Zn6!KPhkRyRjDej>uTQ!e<)$czTNxMzYmjYsyOE`DmoRgm_pU zSF8e0+r<-bDCdtv$Ubn~M}wN|&%FH@iM3l+jZ<3Oh;o5E?T?vp67_p>j5Ud&_V2E% zvCXx^9%CK?`8LO~p2cNbAqgYcqu1D#Jtgi@vq zv-v$m5q#xg6W!<$*UaHN@hy(4ehp@Dk)!)Sy`{q4mC(3! zKaQns_*V}l4pF_$tnN^SeV{dC@6=9ceOqDiGd=V^z;IaJ%dk#|Ks!=QA(UG#fQI!`DG81ifUM1k7dh9uzA;BTI3p*WX z!_MSOpBK!-y=v$YhG6Qsok7grTtQ}vDvw-4f((~jqHDv!Jokep-eF&6I5YNE9M)Cr zixVF214sG2b{b4pe(Ud@7U}k|l+lHVdZT)}F} zH-qlp*qu#O#(QO)l>L{))xUS19L;~iqJl{KgM{V26Rjt-c&Ac@Z9(4 zh_pc$rsz0T?H0qy^F$mXud@3!7RO^c1Hpq5Iqq>pfvwIpTv@NFenIu)n^^Vg1ce$x z`rv({cqmO{D00quYOcD`SKt!nlKm-P?g8&kV_j<3I8!2E#r{-RgKLmggw5rlWZwks zT+cxT|Dg1YZi_0)k&Jj|u<;ImZ8}1NDP2F~Ld1aZ#fGnI!y{L;BGoS4)!I?JvDc}k zsKDN8X@6+BPZr?h`VII$2W|e@XbJIbogFJ$q7Mxm&0meUqH*%CQHmeIql*mD`A9_) zvQPs-3w_aogqxQPfd`Bh>c~s}k1o81xD~x`zVkKJPxp*j&VyMeT&y_ed2B&k0oT0h z!VSUOJ#ji#%wpOAeo&z~N7M22b)N{KByJ`@RWXZ$M9MY`9pr`tXDexqN=u|jeiz4u z9oM}0ZQFNhKt$C{tSvFo{g&(}@wdp=!=D#)8o8T9cVlOqYKSM? zw}w`EmJBq8#7d1%@^&@|Zy$fruJ6N*F)-sIo+!0x)K}5pV%K#Z67e`OfGFVINJz@* zMk0MQvaH)|8Zin2$}JfsU~7`h+d9I%^MfV*!9*O9$247B(KH#^={qIexB2SwB)nE1 z=e6tDC&QI|&l%OW!EfH7Q}|&Hofwa*Fv~U%sy9tOkFXE3mz{xGw-G}Yyv#oE$NZwgbUsL`!PTJgJkIdf{5oZ&kZOeAg3ma_`r1rbWuTqk#SLNu zE7#f$C;M<2zN4~cbMV9UDIarUnBL%*UL&howxdv7DcTZ4c81>je0Ji~b~*yO`hga{ z3?}ddw|%4LEo!0qRo5< zgF&1GUDRp$1S|71wa6$Jr&{!`UxE{DGBK;yz|zFhHDhbQ9On08#yBH1IO!tQyH2^d zpiGe36PM#EI?S1^-ffj>(BjqTpNa)_Hcd{t1ci#rC7?&{i&fg6Hp^nrvaRtHs7pfo zuCY)-3FS&Hti;qYbfx9gJ`nIN?`h<%xD+@D{<&>h zWw8O$UdjN4NKT;hU{2pZXRAiXPwXtCeb2x;SDNU#=}3HM@Ng;NqMb8R6Z19pe2FAl zw9m4i-f4l?O}xiB8C1;@arW`MBn=!xPtC0>(?F>liaWHV40@gdUGe{ph$)jUNPFep zKYbF>$LPP+u+iuNJDXtkYqLP~r;e~4rJUj+vRR?>ltgylv=Xld!BfJz3q$uQboy0H zsI_4ewk~HP3OfIoaDlt7NVM{_{9+fv{?q0ZQ>F!z73Hc{9}2?~YH%t9ZGGiN^~?&0 zmebK|b29pfqv^(=ZZm_Jk0ZJ{P# zvuQl1ewUftH+!{f&Bi=;JfDa^mfL6KltJF{;HTc=HsTjZ_+K(zlojw>I1drZ&~!c2d@vZ8M5(Qpzw$ zlP?e2E|Y>6d*uE?!_`3&?E%Me*W>J4MfJij>G!?S7mTRqIya|F(IL}|?}n?|ya#eV z{!8_)zl4nCWmZ&7i!(OoE%&t5*Ddcosc%3q%h$dXGQv&JHUUZ9!`I1g<@Nek|K3y) z@KH%ss2kNUE=RZr23Z6(zaQpGRvuH&qe5kob@Dx&)vI#kEXa#nrETIS5uejKkt7vU z#_la0zd^JpwkE`CVj=dxXdg5D>za2&XlRxh&*yBzGZ_@g z7X>s`mCj6FV*{0ry;?nc;sn;CLPI;>z~x)FvhGsDvK z@e~`1v<-6(@j$zez`kpl%aVsyM_Wy^_WOl}5rKVxbh?`}aNzF7{FV<)%I-_exZl4M zi6#s~%Go+{?vAzKiXWJ0P)>`!-eerwO;#>bXmYmBCc4_4Y?nD3sHKGexNzIm&ZCgR zb&x@o$(W3Zz4oG7BT+7GEl?&4CkCKB6sA@?s(n6AzW*a9n zQs9`K%UtaiVNPz0mt9>g-H(JDO!|l#gi+jt2gTXEeY~ON^{6J;SFYDDYVu)MCG`H~ zymEjw$M;_rux9&V3j62ZWaXC-Vyq#m`0q#N53{;nIga%ohQArues{RceX{GHwwq4Y z+3h|G8WT*{j&NVS(x=GE?{M$=1#oTr4CMb;{a__H@(+9c;imXV{=)lO%nFK%OicOA zN;T=VW@!EL=QB-gA>aBP)=z}CjVE8x6c|c3z4y5OQhMioNP|~HL`gWf?)H{^ygQDE z0LfZ1k@Siyza2t3q8{Cd5YGp${)|WbXN|ph&7U*7EB%64qu`tS4=*bdRLNjVJ=tfEGwC%#37~fXgQNIoE*l+DauRiffEfJ~MN`0+B zg8!-AY0tl%7I`_VIxLt{ORYNMzoM>TxM;s{^X{4RwOD>kgz?C%%`+`;0Rh~G+=?)^ke{R93A@Hmx*t|GdGNKSYpn)?|l!=h!E{ zpRyF*%Pmu^3e*$u(pp3^2Fy#5-3hTUiyFkU#RI=)Z7x5UqZdGn7C^uO8B(fz*v E1r3N%FaQ7m literal 0 HcmV?d00001 diff --git a/Leap Year Generator/index.html b/Leap Year Generator/index.html new file mode 100644 index 0000000..c09d97a --- /dev/null +++ b/Leap Year Generator/index.html @@ -0,0 +1,22 @@ + + + + + + Leap Year Generator + + + + +
+

Leap Year Generator

+ +
+ +
+ +
+
+ + + \ No newline at end of file diff --git a/Leap Year Generator/script.js b/Leap Year Generator/script.js new file mode 100644 index 0000000..98d2914 --- /dev/null +++ b/Leap Year Generator/script.js @@ -0,0 +1,19 @@ +function generateLeapYears() +{ + const startYear = parseInt(document.getElementById("startYear").value); + const endYear = parseInt(document.getElementById("endYear").value); + let leapYears = []; + + for(let year = startYear; year <= endYear; year++) + { + if((year % 4 === 0 && year % 100 !== 0) || (year % 400 === 0)) + { + leapYears.push(year); + } + } + + const resultDiv = document.getElementById("result"); + + if(leapYears.length === 0) resultDiv.innerHTML = "No leap years in the range exist!"; + else resultDiv.innerHTML = "Leap years in the range: " + leapYears.join(", "); +} \ No newline at end of file diff --git a/Leap Year Generator/style.css b/Leap Year Generator/style.css new file mode 100644 index 0000000..818d6f3 --- /dev/null +++ b/Leap Year Generator/style.css @@ -0,0 +1,74 @@ +body +{ + font-family: Arial, sans-serif; + text-align: center; + background: linear-gradient(45deg, #007BFF, #00BFFF); + background-size: cover; + background-attachment: fixed; + color: #fff; +} + +h1 +{ + font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif; + color: #007BFF; + margin-bottom: 20px; +} + +.container +{ + max-width: 400px; + margin: 0 auto; + padding: 20px; + background-color: #ffffff; + border-radius: 8px; + box-shadow: 0px 4px 6px rgba(0, 0, 0, 0.1); +} + +input[type = "number"] { + width: calc(100% - 20px); + padding: 10px; + margin: 5px 0; + border: none; + border-radius: 4px; + box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.1); + transition: box-shadow 0.3s ease-in-out; +} + +input[type = "number"]:focus +{ + outline: none; + box-shadow: 0px 4px 8px rgba(0, 0, 0, 0.2); + border: 2px solid #007BFF; +} + +button +{ + background-color: #007BFF; + color: white; + border: none; + padding: 10px 20px; + margin-top: 10px; + border-radius: 4px; + box-shadow: 0px 4px 6px rgba(0, 0, 0, 0.1); + cursor: pointer; + transition: box-shadow 0.3s ease-in-out; +} + +button:hover +{ + transform: scale(1.05); +} + +.transition +{ + transition: all 0.3s ease; +} + +#result +{ + margin-top: 20px; + background-color: #007BFF; + padding: 10px; + border-radius: 4px; +} \ No newline at end of file From 72c7df85fb806241eaac83e5e10eb531a2279fc8 Mon Sep 17 00:00:00 2001 From: Dhruv Dhari Date: Tue, 3 Oct 2023 02:49:19 +0530 Subject: [PATCH 10/71] adding flappy bird game --- Flappy_Bird/app.js | 178 ---------------------- Flappy_Bird/images/bottom-background.png | Bin 18577 -> 0 bytes Flappy_Bird/images/fb-game-background.png | Bin 110342 -> 0 bytes Flappy_Bird/images/flappy-bird.png | Bin 2216 -> 0 bytes Flappy_Bird/images/flappybird-pipe.png | Bin 1528 -> 0 bytes Flappy_Bird/images/flappybird-pipe2.png | Bin 1534 -> 0 bytes Flappy_Bird/index.html | 16 -- Flappy_Bird/style.css | 16 -- 8 files changed, 210 deletions(-) delete mode 100644 Flappy_Bird/app.js delete mode 100644 Flappy_Bird/images/bottom-background.png delete mode 100644 Flappy_Bird/images/fb-game-background.png delete mode 100644 Flappy_Bird/images/flappy-bird.png delete mode 100644 Flappy_Bird/images/flappybird-pipe.png delete mode 100644 Flappy_Bird/images/flappybird-pipe2.png delete mode 100644 Flappy_Bird/index.html delete mode 100644 Flappy_Bird/style.css diff --git a/Flappy_Bird/app.js b/Flappy_Bird/app.js deleted file mode 100644 index 31a7cde..0000000 --- a/Flappy_Bird/app.js +++ /dev/null @@ -1,178 +0,0 @@ -//===============board=============== - -let board; -let boardWidth=360; -let boardHeight=640; -let context; - -//==================bird======================= -let birdWidth=32;// width/height=60/45=4/3 -let birdHeight=24; -let birdX=boardWidth/8; -let birdY=boardHeight/2 ; -let birdImg; - -let bird = { - x:birdX, - y:birdY, - width:birdWidth, - height:birdHeight - -} - -//==================pipes==================== -let pipeArray=[]; -let pipeWidth=80; -let pipeHeight=500; -let pipeX=boardWidth; -let pipeY=0; - -let topPipeImg; -let bottomPipeImg; - -//=========physics========= -let velocityX= -2; //pipes moving left direction -let velocityY = 0; -let gravity = 0.4; - -let gameOver = false; -let score=0; - -window.onload= function(){ - board=document.getElementById("board"); - board.height =boardHeight; - board.width =boardWidth; - context= board.getContext("2d"); - - //=============draw flappy bird====================== - - // context.fillStyle="red"; - // context.fillRect(bird.x,bird.y,bird.width,bird.height); - - //loading image - birdImg = new Image(); - birdImg.src="./images/flappy-bird.png"; - birdImg.onload = function(){ - context.drawImage(birdImg,bird.x,bird.y,bird.width,bird.height); - } - //=========for pipes============== - - topPipeImg=new Image(); - topPipeImg.src="./images/flappybird-pipe.png"; - - bottomPipeImg=new Image(); - bottomPipeImg.src="./images/flappybird-pipe2.png"; - - requestAnimationFrame(update); - setInterval(placePipes,1500);// every 1.5s the pipe will be placed - document.addEventListener("keydown",moveBird); -} - -function update(){ - requestAnimationFrame(update); - - if(gameOver){ - return; - } - context.clearRect(0,0,board.width,board.height); - - //bird - velocityY+=gravity; - // bird.y+=velocityY; - bird.y=Math.max(bird.y+velocityY,0); - context.drawImage(birdImg,bird.x,bird.y,bird.width,bird.height); - - if(bird.y > board.height){ - gameOver=true; - } - - //pipes - for(let i=0;i< pipeArray.length;i++){ - let pipe=pipeArray[i]; - pipe.x +=velocityX; - context.drawImage(pipe.img,pipe.x,pipe.y,pipe.width,pipe.height); - - - if(!pipe.passed && bird.x > pipe.x +pipe.width){ - score+=.5; - pipe.passed=true; - } - - if(detectCollision(bird,pipe)){ - gameOver=true; - } - } - - //clear pipes - while(pipeArray.length >0 && pipeArray[0].x<-pipeWidth){ - pipeArray.shift();//remves the first element of the array - } - - //score - - context.fillStyle = "white"; - context.font = "45px sans-serif"; - context.fillText(score ,5,45); - - if(gameOver){ - context.fillText("GAME OVER",5,90); - // context.fillText("YOUR SCORE IS "+score,5,135 ); - } - -} - -function placePipes(){ - - if(gameOver){ - return; - } - let randomPipeY =pipeY - pipeHeight/4 - Math.random()*(pipeHeight/2); - let openingSpace=board.height/4; - - - - let topPipe={ - img :topPipeImg, - x: pipeX, - y:randomPipeY , - width :pipeWidth, - height:pipeHeight, - passed :false - } - - pipeArray.push(topPipe); - - let bottomPipe={ - img :bottomPipeImg, - x :pipeX, - y : randomPipeY +pipeHeight+openingSpace, - width:pipeWidth, - height:pipeHeight, - passed:false - - } - - pipeArray.push(bottomPipe); -} - -function moveBird(e){ - if(e.code=="Space" || e.code=="ArrowUp" || e.code=="KeyX"){ - //jump - velocityY=-6; - - if(gameOver){ - bird.y=birdY; - pipeArray=[]; - score=0; - gameOver=false; - } - - } -} - -function detectCollision(a,b){ - return a.x < b.x + b.width && - a.x + a.width > b.x && - a.y < b.y + b.height && - a.y +a.height> b.y -} \ No newline at end of file diff --git a/Flappy_Bird/images/bottom-background.png b/Flappy_Bird/images/bottom-background.png deleted file mode 100644 index 623c1a7de530c126f6349977e19aed3f35a44d6b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18577 zcmV)NK)1h%P)005Q<1^@s6D4lw5001BWNklRBKIe)(@ef!f*bu~)4Y8-4YAN^tTiPoGL2O6~q9{~D%a#orcB*B^ zh6t9}5bOz-P(@LeXiMwfvv+33JJwnu-#5lsYer<`Ywx|{o_!es=Vb1Ti23;DnB(z{ zG3Ux8UV%U$5C{YUfj}Ve%_ER~^D~GE1OkCTAP@)y0)c>JzxIFr>G4~{p|L^d_A@(* z9Dii)NtR`DJbsh#ev2aUqZu>S9BcoJ^7<+tCve5E_bg4+oiKBgy{JZ@tr1}-zAf>#PrLK+i)4)6HuL8{b-qSF-!*fk`|_T9ZZ@gRe=Yg{ zQhblc`rXb?cFf=5yuTMK#Td#R4#?Xa^7r)78O|mXdAl$0w2$*OJeAGM2Kwdode1z( zrM~;=*5f?^Taz_!#P;>^W1X_5bJDM?11_yeF5CmyI|vw$xl~mpqii7AKm5&Kd(pi- z7idiGYrN2Io-3HoZ5jaAG>u4>N!zVOyJ*_R5zC1Xo`&|fkFET$Xe zW7E7_S)K#p!qFOeV;sJ8K3^U93k|xAy-g{9-iU~I`c;q2O%D3(`#mH6to2Iv-Ivbe zi30(gpaYJbyuLOc=$?~tBvH#t-+itRbta0Fuhw!w9VY#p;Anrx-}2+-nC{$YWBfD_ z*t-IS{JKGDP3Hxyo^uK?k0-ME3c&7MwEE)(rpedgE%t!pNF&U49vx=h-npFAh81Lm zw!-#XyAF^ewYVpmDe ze(SoH@o*y9-}vR9c_%21Ym*)Cj#rT{e_WnAWNIf>Z93%CGY$KcrRyuEA#pmXL zzx#W1uu`YtRe{Z)#YWez6Tg=*d~R1jGSN=zy}!mVyk}ifdGodKKDl4bntPisIjJu> zuDbVMqUzz5D+=h-*ZR`ho%iGGm;U{^zO)ZSz@0Pr;`bV0k2UtOcXEifuy5JFMb-Yd z0^h;At^B+k9iokzt`ph^RS!M%dPK?3(Qq1ej&ZIAHE&K0DzQ!I=W~7H>y+Y-me770 zZ9g@1DZ7%lZiC~~%8$8+E>~{wxle3=cWYP%^mCYFx0fuqYcitW>Klq9C57X{cYLfJcC}8N zDIJf@pUOt7^L)>`qhWgwZM$(VOs|~lI@bX{AIQ-8>pA_C+Nftg!+=!>sPjCE24?t2 zAvqkFx^rxg#I=^XKFa*&PO@M5vw!ZQK|cZ1MvTQlzNk*L=W~?NYhE5bqch`>0^^=C zfW_oe6DZlBXt-q8Ju&&kN(ovYm{MXI4(I6DSnqW#!KIM4!bnUIv-y;-}B#n^S-3S zTZQ?8BLm!BF{J&!=4iaM7U%NgUi&5IP-eIi3nm7W`$3m~=md_>%4cCx0BS`MmUp-@}L z0Bej0N%sSdP~vbsY2L<;9f}#DtrW*gdhSH0Wu5c$vg3E!bHj{lr$h1GB7+Xs!D9Tm zvji_VNay>wl_x1IKvw;EDauDbo&3V!cKKj+^vvK}U4`mUT@Ba6mzaQbpQ(dub7g8+ z`#9%KD90Xw1D1n1oUk!xv@hlY+08}ULHns(pRe&HM;hP9ch2_!_KSZ$wK?7G|-rUvGc;=5#Y@VDm_>j_3E3_20+*XQw?5ulHI5`}k> zz-!9>Ee8BG{4TZe(yU&e&*g8w)KA*xCBxMklf)Q3aa5i$(7t|ypfze*V%kah_5+aAoXDC*%!@XOncG6{nM%#?{$#~sa zOZ0}frLqTS=2ULeeVp#C^mmM}bD%r+L+914P0{i=xj8nq;g?HE#zOy&86$_jK!pCU ze)BIM35I#t%*k5rOn>(rlL~B>sV79Ck_u#sdS#ZJPYqbA_%5mGClR_)Cj2Z{vh!kf z6C?#IuiHX3o{a)dq0S4*ATT)=*=UUue#z$u;nKXlPR)eHJ-?*y^ZB0q+vuUDaExl! z14u)W)8Es!{PXk*eSAhKA3f)$U*H;1LzOx{L<`Uk9IIxUT4g|wPIK*i$0+nC8zqVS zQ=`-=gpN*yytFjkYinV+u|M-n+cu$8L5XHqn^W5PToI+lq%}}W~XQ= zKcK4G*sB}#`6le%fo~4PoHFd*fg%J2+- zBi`V7?$wMgDdeW&xZH4HoRk~r$wUWm|DCmqxhRGwNS!!CT#FnsstO!>_GC}{{6Ifr zPs3=O;ojwD^&NlTr>A-=)i1!g=HFCJs6o&@Y5hO9j}5C9Z;Ke|9C7a^{aBdJzTLeEv$_>OPnX>3pvZcx~Ma#FH0vk z4Y5i0zv5(6KXFhU#yQ*kQU|MbtRb7&?YB=D9wRFw}#h)6d)To|-Z3eRydiyuWVDq5@GNJIrfx>v2S2~-K88|hr zjS3b7^O&EGoeEop;iB@r090yR(|Ni8^L?YO+V@{5wn;Ieay-Mul}js}XY$b*z$9P# z)~JDtnCu$nV2v2#@0wThF|^A2nf&sJ$6Tlbs5$1ODm9@((>&aBGMR2@=2>B!>eHMu zBX(0Ij%SxAZiG%;t;&+KvGq82qS7${hbMcet>{)IkmlhaLl{Tupq;jFiUaL3B0Vht zQzzF9&>3CKIoX^~ur#H4s*+N~66(@q+zo--7t5Y^Uosh>ljF*tirkegRrC`FvXxKU zd-~~a-SNKGG?;^z>MYQxM>sC0mL<)#`vBXub^`@xAw!I0`m)V?sxy?X;nVeYg$#u+ ztpRFfh{1+Zt8F{BY)(JxxO@dn2b(l{R7$6b%HJY-qtl(@W?L0vi%bS+tANh(;3ZvM z`#o6?kQ#Y5pnSOgaJt=PMI%jE4s-Wf`p0!f7v-N9CTg)4&_S@G7*obiWYiqb))uG} zs`>q+ph(Q^nx|6Jbpg|RYS3|dt2zl9&&dkcOXgKyEapDft!?0gbm$rR;p08m53PR1 zJRr|xHY`=)^#yb+%;+O2v`1i2O7_2-e|C{%IbyYqtM?p7$%t8j(uGq=1CI}I=s}2j zZSXjp%HY6lLE8nl2!r0mF=L*=h0(uvs&G568=gMsGL61e;re&HeL{gqqxGWTmFd_) zmAF@?eW)VUe6+tOEHuElom%NANfpyph%L(ExUxdZOymGJJSpygR|XuaW5xC`7J91` z(i6AvWZFtq6{~pE=1MP#6s-EwX-ZE^ z_}D#CJRb2E{az;%4ae(In&($NIz#{1P`c*MmNastTiqQuIrXB?X+Hfob4bi_W7?Rh&cpH8opS;_Ul79~c|u75a%oQ3_J!7jmQyh8s2H(>yn*g-Es@Fc8fBV(?Y6Cv-nC8mFvw zbbcy;-Coqst6ZgP(f#hJxRg>XF;+9O{yncQZ_L?&%+}Z!uoPDPerm7~g%pz2iYfM_ zvj{ZWFYF;!NfQg~w=-vwAeD-Xu}6>~7!=3Zb&J!*+<%PN)JagC;;e=n;mZZXsxO_* zFb5H=g|VE}olPZWHf*sz*;h(owQGgS`n0CQ<;&NP>rfl}W!5ldS9EQ4T^&c=gXznR zc1vFy^9KWCX#vN-GdkV4R9+y)(Amn;qz2q6f2W&|#{+RKiUG9>ji}XHIdRWoNN5fxJV2$^6}kMwp=K_G3JpSc;V6hkVoI}OQiH)jih)Q`j7X8S zelsY36aZM>LEAsDAA*!)6Lgz{hQuN~_YnzxQOaOYNLdc8PZ-z^aNRgGkJkR4eWcNZ z3xG2f?xCXnJTGNbDn`cw-ky5k{yLKCS7orT4zk;Ax^X+5=TZK-CubOy!+{J6T?5?! z{=qKF0OnP5;2i1${*EFXjaqa)tk{CA3!)%%iVzbFhB6uqIZj4?7xGt5neX>|srJ}> z>cHXU8&%IodKIe{644Bt$c;)b)#2gDyZ z5u+qZ=UUNV9OYQUgI8IF0##=TZb8RT>G*&FC@-v?I%I>QpsZ#E6aiF$QpM`D0!wvf zDx{;TntMSb1GHl*il;}kPsa+fii*_|PRU>(L+rJD&>CjX;ZsI4D4<4~1NOqMjTD@j zNYyd=#{PAMNvCI!D^6@5W6|*)8{0Y18FeFvdQUlWe1Jvj$U9!V=mNAMoFgd6qLATm zs16nl^r^#25-StgHG8RR>}5Fhj*mGio_=CxO4+U)5lD8VvM)=WgBo6yCpueag|^Gx z$}sYLDkxtlOLNMPs2o=3TIV*P>{3@ijB^_+v`!I# z@*T;rgf1$%C(wr*9^FTtT7iLRWVhMUFyk|IVU#knl1a%IoOs?5qA%zp?6thqAdIOA z&asOh@O`v@*i~|%v!vDQDXXA{5$me@0Q&{_1H+;m%CH>CAV(kOi^0WVN~v>Pu+K35 zL#?{#>cEfj%kj4kjbzda1F2?96y{D z?qLL+#(+1CK%dr!E(kbhr#wTO&JB)!S&U><45hA)a;yfD{rZ3V^G7P>3>1V`EYeds z4(YW(@eD>InT>`rpU-757^$LTK?(AV3y~qS62S%il-F7XTB@}^Hw<&;T`?>}-8bu(C7P+CVJ?ifGKh4qJj&E^xC&u(Nin$RPJGt*L1j4-rtYqwd+a|94pBwKb*>Mx+HPdCd~6M3x|vn!F#*|b61s<@ zF_jqBcr=+(;dzc1YweLb))_MTuv|-1ZD~-{7<5(3=d6kLpR?@`w>MIhWAm=zSU^V& z+vpMP?5kR~%X?Wamr}tW0HxV_@6Ik+uFxW6?1%BNl<8tFv++bSL@9K_bZs^AhRjw{ zA9k|YY-G7vo1CVRl**GcCtmo4zrl#iXLmB07BVO&ZRNJJ17yj#x1s2F@)3J&vm)z+ zzLin2Fo2jXCwB9wQSdqvfJ!rS2ry5fkO@D+O0Ry z)uK zy?}*IKm(^7EKebm;YemT3mK25>d2YgyHmlvmmg)f+tD5%2;0}j=8_rG)EXRhr|*@) zE2$R;HyN78O92)7ysd-Q3*Ba57E`%2Y7g+n$<6?w1ep z`1r`lyP|Z%=iVdQ%uvb?uL8gfa+xn?^5N!AhT|zWlq+}tj`sm2_UZnkJU-sHv@Vpj zQ;^&YusfuTVI6gI55^-J6U+gg6E=q`JuQ&H;?!9#`~6bZk1Kgxn?W@1%kv#-OiqhU znmVI!EEWs7y}gxk1dNPQMezl^IgU}I!PV+fe)_XNq(S#c(j5{v92#+`;)ho|I1c3I zb}qLcKFDx9LCVYK+*NUszNulX*0Nqcw#uH)4XbH|>scN5%un(5BcxIAuR%@)Mgbp> z>3vfT(3{k%N^D2G_J^H(`t(U2S4*i6Xv?T`sA5wB^i&O78t$XWWHgfRzxyLHovPDw zXbzU5&?880P_gkJO^&wP?FqGRR+EZ~F4~8J@$@7=>l8T&{<@KBSIIrr;NcV5 z04elniOP?%77g=YFhWLU=ebNr6Pex2<#v8!%E;wFBT*PB6gO4%f%^;&0~C(3R4xl@ z;H;=xolmB~Y8ebmxxKlQ+r>i4@knxHP$B!yY8j1-_V(+I{J&2>l{K7aR@PgM0`_bP zrq27*NHNP1iR3bwOyusn4>Frhj1ej+mu(8h490e|l-0w%tk+xF?04<>+h~RnlT!Rp ztSlhQGnvgMvRK?wC($9cRE-+~y?-I20l9zpK|X%`C^eim>;a=&xejDZG_r?-OF2UN zZwN(v$GuEO5=z|U2Jh1#7D7jAyI#o;kN1qCJwkWvkF^#tk+5semuFl91V^*!oN_89 zlzURkLbkJ!tjuKlxRRfJe2~p{X|%YeklGXpzDMW2piyTz4RrQ+D&Ku~M>!oB)5BC8 zSinkUy~%5-b_e-*Z;ofZb9HM!p|{iyK$r4&VwKBiG?K+^CO3;aI?^m8Y;)Z((5M4I z?Mcn{SC5af-S4HLUhJ5KE{&wa(lOs@pNkGNzJQ69uBNm(E`uyX3f0@y^3JQ z13bSyPV4P7?Se08l%6pV{_x$MET(fQiy?IYWh6Q6gmpO7jjZlJ$;XEus5kIAb$6UG zgwv+^a>iL!PrxAZ_D&YFJGME>7Lxs)|Mbh?AhoXAXeYlMqX4~|XHpJ^GM$X6%tphp zfzGglN~${SapI=Wjq+Q^n|8;8mZtN zqL1TIHoJ{HJUkHGQ^WeSLRx9#jKT+6;aL zKVvH5`EXby1H7|>iV|aA%-l zl$KL!6xhHk-fcH}+ny~%ikH`O4~mhL19cRqvx(f^eV})Y85~K0Dl@|WNVD%qpDoub zd0aiVj^`7MU>ITCu@{O=igLh|$8YB!Uz23+k>yn%# zXyr&XEcY4OqGLN4(0QKER8IL>6o;`O2y2Tu95|2FZY_@w53=2bvbqWt2CBb(B7+Zzy{tDdA9QT67@8F`N>xd82j?8gUABL#$ym+PfGJ|aR_W9Tn9 z9*|{>pXsx#p?zWEC(mfmVRN!!sZJeFEMOVn&^Fpnb&$<|OJly-?5ub@IXS>omR6h> zpy8>r3zgHskot%iS$%_Ek_3Bzl$`2otij`ENxcn&&O+B5PO8%DYC{^f3nwNo5l!bZ z8V_Z0^FgNL5%(RFu%JZ>)z^?Erm6P_w*UC)o({Vgy1J93wi$IfTC0XN#%G3u0qxCf ze8Y7b%3KXP7s9+N=AbQ4I3CYrG%7hzMCn81KeMts8;bBB%6GNVh#Z&1@AtCbA?i^D z=P!ENewLScu!2ejo05YY4mC1FbeO?a1d&>`-_e-B8;0Sfva+bOHCRS1p-r@h z|FB@}V>}{V?VxH!`;lW_Z#S|xih6h0@oxZ$E=7V57tad5Mw6jT$1@p}Lq?1cM$E%= z+)^WYPz461wcR12)qE1YJ!~K=0#YMr=Q+%=D$9XPCS#deG&mfovV<_YqM*ln%qVR5 z4?+TLa9Ka-G;Sa*STJR2>;j6}ii}DZ?V`;=Ig{bABu(d4wirKRNZXGqPp= z7RN2DZQrb%i+R})zR7ql!?EW7hr_YfOL&gk@~?+#C!5uhV~4`w9N^I()JsO5SLbqi zr!v}_jHilAiS~!2k{Ma~X@d-m&qmgp6^(cerC1%9qX$l>a;j_Y1`A4ZKAXy9I^*Aw z6PwJYg4$p>46N9|*s4rGA!8pvR2JQ*H1Qb-5wWW}8D zfr^Y6C2PPjVbFerve8rx_AXfwtZ^}v0pw{gXp09+JI@V=2YU-jn0ea+^wEk8k>~w* zywg;ZpQ=EO&}1@`(Qrn2A5SMT8V~eHA*o?CM5u|t8dTdobrEUz{hIX#x)Id4LTA9q z)Nny-kf3{pg(~;KxU{`IwBvBdQzIR04msE_MBa5JtIdiSSw%w@5qkHL<(xzvj-;mN`JykK5 za-w_A13)etk4PR!QLnb3@sD&uS<^$OO6N%@Td(8MQZGc{MJYFPtieE<4367`7xdCN^;ub{eY82@`z#k!pUs4$0LE=C6yz8bjBwD%dXF$8WEEMjCyE~cA7F52B zAfNz9v%%15fdn@GYJIQK)DA)c1q}S**=glW8?9Q!6#7F^3vvtd>4E~t0v&qc=1t0> zrJ-R6F@9BKHQPp{$ea{4f!0%{iXMH>=2N*@+-gpn1x*D#H=VCmuR>w&&4YY+{A5wN z(t#;WN=hlmW>7i}V@18fVliVh0s-MVK&avHw8dnNRP|n#k84@39@Ge0p_e-!>MU4# zgPy2Hl%#AH-!by1&<)g6CgWpsKmiA+_T7F%>Jro+i?6Lf3JwJ`NJ(J`(|SmI6fjN` zQkQhxGRRRb*jSVcC_8$(2afyx;iK%=E7@5!bL$jhv)S2H)dprnk4Gw)#qAw8KO-P) zRI8S59Sn;UkfTB$Ze&%KApGj|xbjt_f}=^;LL){BnyRsA8mD~VF!-UIJY!)LsN?1G zldLzo7fA7vIZ@eZ^ZA8F`>e19M&qf>Ze~;jppZR6N$Wu{CdlW*r+Y@VOn_A8G#dk< z0;)2r<5RhX^7?T1M`enqShM0}E)W8`Gm!+9y()!?Ci1>P$gL_&hYjtwyw#x>0rtdGl%qqo=7TrK;`4 zLkXr=YZ&UB1&-6jNbVNj)0i`@13Aq!Wd|1>borrK%X+n!)pp5rf$Jf41U+q|`kIEC zEFA(TIE52gpoYiNqIrQDDy(;M*GH4l(Z@bpuE9=;GzZM0(jva}q8C$Qq>!bgGlhMI zl#1G-k_DV7S_D2?<$d5jSgrT6Sue?4xSrGfu60O$3c-ur@Lkve=u+$hI&NTUoguST z(7mtw;2!lO>y4%-EI?HzLQ~E9Qs%{V4eC>FZ{{+zs2_Gn{THom@I4L3|6z5{_Q|?g zA1#AnS1S9G>spjDnT=&JpHkmp&9U|{^>8#NjL?7Umr(N8=E$^)6yDK{l+$81SGp;^ zx{#C80wM?mbJ`C}-T3K^Plh8m>j7PK6O9a}Y5>%RlTG=xP<4%uLqM-TkYH4E z!Z2=nyqQ-0LjchSnFYTq*{ZAEStGNMb4%T9 zS|gvTd0jv2>TBYd@puxB02W{vCRzwL9=De=@a%J?$B20J2T{U)!@3AWS2VcE`QVhM zOV-uYHr=rFd#k;(3f-!A5lcMZ`XhZ7Yez()8BIR zj2a3?hA>v3kx?u~d8RX=pVJ6mohPt7*au)o;E)){L9Be=k=k$6sl^L>dVVvL+r^!x zxZ2CE%#biGhc(tn5cM5c3%)W{##m$4X1e3a3s%(mR+eWW^V^9`xtH}K8NbC1&ImE8 z)bS(*zJVNRBu<5$)JJe#py#;P)Nx|I_7={+MpnKjX$;XmQyoV+96{kf%KZ=bj6{jK z*ZlcWvGyEKBSo%w02k;9)GnZiOy{f)kp~VKM^$U&2}W`a$1r74?fO(2E5jHLIP3#t zAM!It;qnm9vsSv3_%LHfoq@b|wUzsiSc6B-OXW)>Lonj!>?yiRZ}ZfP8T1c7xzS=o zuoH0RD5e_xsLnf(NnNftWb{~LQ+6kK5XrJSk!!DapEI<|GU}iyDe5_yLcQF}96ixs z(a(0T9+&dz0efwyIJUK7UAnU~wtD&k0o@dN|JyrdF5qRF6UpP*JVJ=HO+zLR`kIWP zJO2q2%=EcAZMyzL781|LBblLSc7j?neT-^(9LR3Bmr*_i<^Ct>Z$m7HplJrkH!JOj zNq0vdw3tA-{{t(*_n>=_&|j^nWK!y~wY;|AZp2BS(TmSyK39(zIWjkvSTwW`3Koau zp>VKh>y=S|R9L#@{N)Cb6vRNO6wGBf9BK49vOL+w>!LoP!xFr>M}^X;B>30Msk0=0VM= zW92Lfi@~s|^8uA4+H9Hw=_eF0Ew`HEaf&Tn1E=VL^=LFCPEZ7(Mv*pvSFf+`xC!V= z9uu^+fHLL=;`w1cORvXMw9*zBl|?RtA=W^TkU@b#(RkzrIta3gE$mdB9!1>Cdi5yV z3TG-&ET?&Rdc-ViE2@#M zLEQx%H_*LE8*ok12T|m*uaq9e3v)qE7&&b!$)iSv{_-}sAKE*Ip{5KEJ{NyKz`IUM$Hk@qUC@EcIbo0 z9YK93=eM_8-ODgq*u$t_fD`R{LD#`p0N!7rdIp82*l&mf$5XIKzzlUm#w3CLYEW~5 zIqX@i2}f=D@TisZX%R8^v>pS)t2h=?j*!a5@jawahOEv<9|&MH0D*H<%VCQY(1B^n z-Fl~c%~FhBv2WzEQu(X_5*b>$xS*^KSulKm$n1db;n9;b}FqhR~F!rHt77- zGJjxYVRLYd5_x`0XTkBwkyfg0QFcD zywsf?>jD){kN%kpQXnXv-}GV@ZrF0jeo?u6t@yV9h;5@OE)blc<*i&bR3xKfYAlrj%d;&0r+Wq935NpSk8`$0E%-% zynK^#On%{}(NKuiKxvT@;yGTehy^pyMU{veYGMQW70wTpjpf-C3pf~liIH7%%5$mJbJL4JSj#R+ma_D=JP2PBorCa z5ycP&0Yz$dxkr{UzYL|a-C(o2^HbSr1}`ErBbYq*dxT;ZrfNo%Q^-(ZMT1J|>9Im6 zco+|O@*V|&MMD1VJUVX={V=7GaqQFioE6*UQH$YVgt>OS!3_sMj!bbZ*HG}9Zek5a zwUeAz@}8dMplGQ%2!zRWeBt!XVp4Lr2Pf5Txw#Ow|~a{ss|f%75rZC9$c zRa>J}vXMHdjGw8xzMk+{+Vu5^<6h~!%q|v>* zu5kPf3?cNW7R7m?qw-Xmf`mI?+2uTN3=mK(rVHZE;zy=~)Hw3^Aycpi?lA<8hiWUk zJsd_2_A1oahy?%^iFXeV%V^VXW^<0+bp;$Dw(nQPB6{BMttk|L22pqd~FRL0=oq_KGmnj`76dz7m z9|5D}DQaSRDCq2r^SNZd`XBxj-9&f+pcdyi&H^Llmo+dS0Sd!&Lk-WR{^3u5&}fZ? zAIN7T*Kv9gerHHDCpDf-{0NU`umU#C zUntZxV!7s1Z*M=y6rM0Nw&jccnpMAe1A_eU@QI2hHL?(BQ(HF9Z;@8UAbQ z30RuTyM{=+(Hpa(x5tMcw9;G$*;Rp_RC;z7IShtV=BQ9Pim2J6sq|JXzjhxA^5gv{ zS+5@~YCQEMX&8_>qXF_10`j$E`To1_C?L5V59IKWLTR5*pBc5N)a8D+(Y(7~oZ%-I z?2d5VeEMu&{|Ae_UEsQip>Q9S;5{FZ@gE9GmwFT+rCMT4zeTUW5R*^rRp*CX1wP-1J3?Lw~h;nY!A_db49CJ0fSz10!nD$nf-X z4m+A=I6zM*g*?$?nY_RR`%?`nj8>DQkZ;R00rs2HyLJO5j%Hy``*AxcFxMY>Mp_p& zHb^;)Z=aKz3I=|VFSyeOQto?xvE*cr)c;Esl#T#Wtcq}b_ znw#Q*mG60q4@=?6Vx&mQwCUUlj2$3$+x);@7_<){V$hm*-KRq%xuZ671 z6~kUXX0@{{#IzF=1MIc$ZuMvyQaEt8Clhw zmzLQx6KqFvJHP>{>?rPo>C;wj+}^m$+?jV8bgL0sAS!3-z|uAC<9+p#F&OX1`v-Yk zYQZM4v6B=27~yvA?e)QM#0#w-nccLtU_8HXDU1Aw2ij=Ypr%o7tpT=62d6u1z=3hS_bY|C=@o*%=_W!Q(q z!APc~TbayJjj2wLUz16dOm9&sI5<5Y@09`Yx`p;?O{+qtfk1r%@>oU*La<>>NNZsd z>0RC|K2e1LDjDaGS=oL-L5mem7Aj17p4aZUH_Xrn=;IO23D0k2043jEm1&QVpt91u z9%wln?E+oeJuS&Dc_Ez-T1=HbuNB2HkzzonZGK~GjB!~JUb|MTZWnGGjK9tM!&631 z4GIrYDrocE?sSG6BfkoYYdkR)VBY1CaoZ1+U!6-+;5)gjcUztlM)kbjwB^tKHb?W! zDB7*=tg^kkxfN8z;(WZ;2HDMV{(J!z8#c^!e*E||+3suR6UnC8p7HrI-)Qe~opM}4 zG?m+%?|8DHeZUNZS99s%SpQ=V^YvbudL~Kh~#Az+$LF4X2h0 zmM2c)XWA zj*h{h;Tqe;OSt{cE+O*U@GxHN1Ef*N=Hap|%$bAfo&`Wrm5lgc{D^{>p2RxaXWgh! z+u2JjAAQ%U8hWYI4vWIUUI&&+{N zN3mdcp%iHFwG|_x@*F3AlxeDYd{+Z0y$gdHjMotBB}Yhe+|F^g2GW>GaUIXFE9DM$ z4aZBDk1JX2w-&*w{-;e$Zg`~gZ)=HNx|ogi{uBfkB^(hg5>$Q0P?Tv*=zR6n3p`oF`X5yJ*9RG8Hz zfS;Z_$5A3EGYnE`xa64686EEa3>A@GI>GAEv$MacQ=s(gPWGgFJ1?)jOyR=Q!a#rJ zxGE6&NaVCzhe90-ougeB%B%LavIos*PrBigW$nIVHKbPE-a0GYg$lqaHMH!(p6LQ{ zsc?x$t;eofD*wX6OV0an3fzx%o#aPbW1%!3B1+IVq|J;vR;D6(%8@xEJ~s5{n}|-E zKRg4MYT$TU?I#jI#Z}BFRl7as(?)sbq>*lfShWxJ$z{N(EF(Qi8hqgQ^J}|)54>*n zqf}S}9D_5*%qd-78AA$CFaBXV!eSGRbV!ph9H0ECKtj_%@ zTIPr#62$M(Ya!SRDLWKSd1B30c#xS30{#rlGB@#CN_r}|_lyMV?X%ZYizkf4x>&N3Vy z9>q0fmt5DXhbxro*Q-l4?Wa!4P%j@My{d{CSdwtv`IXa$b{}fpc!!zaS*~$ghMPrX zTwskgEvL#C+7c-PO&|L0U;D$Bm!k054z8#zHHWKuQys@!0Y#Y($kA}3r&BVV%3(#g zN3J--tT&pWC=|yJaSYKU*yiCk9ctA!Fw^~}5ir&ml&l`#vqx#RPr36#u>)@^#I1kO zr%Wf95vMbPlo_aPoO8y-SA4Qt&g)5`XK;eSk2v~8QEAFk3ykeTE9A`KFqjTvOT6M# z8CF&ySr7odi_4fuDUVc6+lZdu*E{G{ZW}pPdV&EuN!K0v2MnYZhqm<*U?XLui~yb~ zf+L`&k6f>-K~zbuc?Mn?kj)N#psuP*TfSs-xHEFm;qqAeKOEr~CsesKq9Au9m z(x3chcC{5Emk(Y8-Y_-DJ1^`wDA;nnj`+y^O0AleOgD|o8_9m66pPY$3k;in1d=-ZPv%lWB^vq=8RBD3-NGV zL^qE69mpRsZvt_`SnU=*W*E-qigtPLFZ(hVgmnZqEq|(0@^m?T4)fHjuf5XWuW?0t z?DFIR8hWvnpMzxO9><8vF@LBDZ(w6o)}>9jQEVs>9mhkjjn(&b-gb*rTMJ=N=7e&w zYgL^sX*U&)D53}m8_TdID{r?&p%1PdA2y?TWy&S4S+pZrpzt^j8ss#$U)V!%Y;Ei) z3uU`FO3s_I6bCO3YmWi)CaI2kZKG~CJgmId2b!o{s)A&E*I`Rtpfd+8HmVbmywYo<4 z5Djgimo>TU=^pa+RHneA)MEyNip(wW=+*+VrMJiF+%<^NiK`B<;#=nX^>;*^JPBfW zSwVY?z1Q==sNohvKk8SZ8kzUPs4VMaoD(BPJ)v0oC354hE6?p88z(Idp(tcj_4}Ut_It(M&w5(^Z=I#6H`HC^FSC`5pOM zU*&kXLUdiG``)gu1#8HCt28`sPt~5;v>U}iwPal4yV^=$e$8lqC-%P)k?63X3KL%g3J?`BYiE z0Z98ie@az~!#U2E=BZcH8eMOX2BosMO7L?mT48@Ouct`74ae@x<#`J(WZaJC33X4n zJI|$c-%h>!x2(@gpK%OR?74AI9*=Xmg%qpPP21hy-)>yP)7yUTyYHD#Y6LII#arg^ z*8Y6F=}*?aSOFC!ynA}^$@Q6U?Sm0uvX|a6{&RVCnM`Htl8j?aueWcJyn9=AB10oI zd#q}bGCXJJPOwUz1gN^8djg$fcaD=kKfr(D{Y!s)4&Uc==DFTzqg!jp_t#tYH%*s4 zh0(NqdwJOT6{>G(?{qG93g*cK_3v-de{Yq&=RW6q%w;A0_e*>DJ^MQiT74YpnmpBa zs#EpP_8IQ`BD`cbj=mMK@LUP1eXu=t~4(>gx+FO!Y-+0DQ!QRwHgb|#0H@O??|aG$o1tTowhLqdkKE&5%uz*q8Z z3*%$*htRwa_s^Hbw~g*Ae=2$GayoK1_%trbUPx0gFOHyPNwG z`*g`Jw)DH__!D{5^o~9(=H%5nR(=$?dzaaN%g;MI3MLbbOnsc&QvemF+XlLb~s@*XcZ6 zHq!B(kM$DU^U~*E9)ZfArZseL@c%6Zdh(!WzS*S?UYpzJ;PJjTe_Wrwq=UZB2%nSJ z_sa2?ji$f(T^?7er}2r@RHW&#^xL|hPH{?c(+D@9QuF%H-GW_LndcpWo~2-~6$T>-CX;-A|kxsyJ)D5AA5L*O}D_RCuR8sBbf zD=swliy>b>UhKcd`hDwd_%j6B+=LaZowQC+8R5 z(9TO*;SFE^aed_ZeEN@ToH3ej27zy4fBg6jUsqxMHB|bKf4<+0e7}339rmq3PugI? zC#xQDG+PTrcQ{&HE+qTC|N8g8#_GR&$lux*A|g&!>=z?6`PM}6v&Z|Q>^@n`=c+b7 zyZdkEi!bl-6qj#iN-@xH4T1Chs0Zfl2!>b2*#$;ChmT`{c(gTYswR^C-f#bU81&Cw zbmq}Nw*>2RJAM6oVQ*i@=*RtuexsvrMn3x9Ul-bcu_mPN@%&tbvR_&IxlHLt*Xc8b zp%-jN$Fkr^rXH5`%Oj|Imy;ejL=GKS?&c%Oe*brVBMkZr0&u#)&xQZTxf#-< zM?Wvw4o2hWh5YONrbl63J2v!sYri<3cwS~-K6>?wgFwur4+P$?3)6c0 zM^E!=q6*IsImi)DLOL+ z_4n*TymtPt3wRgLQCwpSQ}u$MaeX!W)4t@aS*hoLnpoMzmGvJN;s<(oJIlo)xQ9yx z9td;$@$8cN+Hqk&-@c1pFqsS1Of?Ns^Ea*&tm@@Xee*Kc;DxE)w3EkxZrLYv(GjNX zLo0_(?}e!y{TzR}8++HY!+dkyMSBYW%FoDK-0vyfvgg0EwfoU!9WjVAUUij?` zZMd5`8x3CAGD@F?2g;~1qhT|eZlEQ^Xl5AA45OK0G&2xUYd+9r`}?2yZ(`S^>|D*w Rz@vs3JYD@<);T3K0RVg51bzSj diff --git a/Flappy_Bird/images/fb-game-background.png b/Flappy_Bird/images/fb-game-background.png deleted file mode 100644 index 2d878c69d2d4baec0988b475d93fc3ea39e0b3c5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 110342 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

82ObCMh5LEmaaWo*Oozij$YV*b5+N%ND{v?P(Y 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

A$EYl)IQd-!R>6AJ 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 diff --git a/Flappy_Bird/index.html b/Flappy_Bird/index.html deleted file mode 100644 index b3f9898..0000000 --- a/Flappy_Bird/index.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - Flappy Bird Game - - - - - - -

- - - \ No newline at end of file diff --git a/Flappy_Bird/style.css b/Flappy_Bird/style.css deleted file mode 100644 index 68cf372..0000000 --- a/Flappy_Bird/style.css +++ /dev/null @@ -1,16 +0,0 @@ -body{ - text-align: center; -} - -#board{ - position: absolute; - background-image: url("./images/fb-game-background.png"); -} -#ground{ - position: relative; - background-image: url("./images/bottom-background.png"); - width: 360px; - height: 50px; - display: inline-block; - bottom: -635px; -} \ No newline at end of file From 86828b57fc34844a9423074d11bfa26b8dffedfd Mon Sep 17 00:00:00 2001 From: Dhruv Dhari Date: Tue, 3 Oct 2023 02:51:28 +0530 Subject: [PATCH 11/71] added flappy bird game --- Flappy_Bird/app.js | 178 ++++++++++++++++++++++ Flappy_Bird/images/bottom-background.png | Bin 0 -> 18577 bytes Flappy_Bird/images/fb-game-background.png | Bin 0 -> 110342 bytes Flappy_Bird/images/flappy-bird.png | Bin 0 -> 2216 bytes Flappy_Bird/images/flappybird-pipe.png | Bin 0 -> 1528 bytes Flappy_Bird/images/flappybird-pipe2.png | Bin 0 -> 1534 bytes Flappy_Bird/index.html | 16 ++ Flappy_Bird/style.css | 16 ++ 8 files changed, 210 insertions(+) create mode 100644 Flappy_Bird/app.js create mode 100644 Flappy_Bird/images/bottom-background.png create mode 100644 Flappy_Bird/images/fb-game-background.png create mode 100644 Flappy_Bird/images/flappy-bird.png create mode 100644 Flappy_Bird/images/flappybird-pipe.png create mode 100644 Flappy_Bird/images/flappybird-pipe2.png create mode 100644 Flappy_Bird/index.html create mode 100644 Flappy_Bird/style.css diff --git a/Flappy_Bird/app.js b/Flappy_Bird/app.js new file mode 100644 index 0000000..31a7cde --- /dev/null +++ b/Flappy_Bird/app.js @@ -0,0 +1,178 @@ +//===============board=============== + +let board; +let boardWidth=360; +let boardHeight=640; +let context; + +//==================bird======================= +let birdWidth=32;// width/height=60/45=4/3 +let birdHeight=24; +let birdX=boardWidth/8; +let birdY=boardHeight/2 ; +let birdImg; + +let bird = { + x:birdX, + y:birdY, + width:birdWidth, + height:birdHeight + +} + +//==================pipes==================== +let pipeArray=[]; +let pipeWidth=80; +let pipeHeight=500; +let pipeX=boardWidth; +let pipeY=0; + +let topPipeImg; +let bottomPipeImg; + +//=========physics========= +let velocityX= -2; //pipes moving left direction +let velocityY = 0; +let gravity = 0.4; + +let gameOver = false; +let score=0; + +window.onload= function(){ + board=document.getElementById("board"); + board.height =boardHeight; + board.width =boardWidth; + context= board.getContext("2d"); + + //=============draw flappy bird====================== + + // context.fillStyle="red"; + // context.fillRect(bird.x,bird.y,bird.width,bird.height); + + //loading image + birdImg = new Image(); + birdImg.src="./images/flappy-bird.png"; + birdImg.onload = function(){ + context.drawImage(birdImg,bird.x,bird.y,bird.width,bird.height); + } + //=========for pipes============== + + topPipeImg=new Image(); + topPipeImg.src="./images/flappybird-pipe.png"; + + bottomPipeImg=new Image(); + bottomPipeImg.src="./images/flappybird-pipe2.png"; + + requestAnimationFrame(update); + setInterval(placePipes,1500);// every 1.5s the pipe will be placed + document.addEventListener("keydown",moveBird); +} + +function update(){ + requestAnimationFrame(update); + + if(gameOver){ + return; + } + context.clearRect(0,0,board.width,board.height); + + //bird + velocityY+=gravity; + // bird.y+=velocityY; + bird.y=Math.max(bird.y+velocityY,0); + context.drawImage(birdImg,bird.x,bird.y,bird.width,bird.height); + + if(bird.y > board.height){ + gameOver=true; + } + + //pipes + for(let i=0;i< pipeArray.length;i++){ + let pipe=pipeArray[i]; + pipe.x +=velocityX; + context.drawImage(pipe.img,pipe.x,pipe.y,pipe.width,pipe.height); + + + if(!pipe.passed && bird.x > pipe.x +pipe.width){ + score+=.5; + pipe.passed=true; + } + + if(detectCollision(bird,pipe)){ + gameOver=true; + } + } + + //clear pipes + while(pipeArray.length >0 && pipeArray[0].x<-pipeWidth){ + pipeArray.shift();//remves the first element of the array + } + + //score + + context.fillStyle = "white"; + context.font = "45px sans-serif"; + context.fillText(score ,5,45); + + if(gameOver){ + context.fillText("GAME OVER",5,90); + // context.fillText("YOUR SCORE IS "+score,5,135 ); + } + +} + +function placePipes(){ + + if(gameOver){ + return; + } + let randomPipeY =pipeY - pipeHeight/4 - Math.random()*(pipeHeight/2); + let openingSpace=board.height/4; + + + + let topPipe={ + img :topPipeImg, + x: pipeX, + y:randomPipeY , + width :pipeWidth, + height:pipeHeight, + passed :false + } + + pipeArray.push(topPipe); + + let bottomPipe={ + img :bottomPipeImg, + x :pipeX, + y : randomPipeY +pipeHeight+openingSpace, + width:pipeWidth, + height:pipeHeight, + passed:false + + } + + pipeArray.push(bottomPipe); +} + +function moveBird(e){ + if(e.code=="Space" || e.code=="ArrowUp" || e.code=="KeyX"){ + //jump + velocityY=-6; + + if(gameOver){ + bird.y=birdY; + pipeArray=[]; + score=0; + gameOver=false; + } + + } +} + +function detectCollision(a,b){ + return a.x < b.x + b.width && + a.x + a.width > b.x && + a.y < b.y + b.height && + a.y +a.height> b.y +} \ No newline at end of file diff --git a/Flappy_Bird/images/bottom-background.png b/Flappy_Bird/images/bottom-background.png new file mode 100644 index 0000000000000000000000000000000000000000..623c1a7de530c126f6349977e19aed3f35a44d6b GIT binary patch literal 18577 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 Rz@vs3JYD@<);T3K0RVg51bzSj literal 0 HcmV?d00001 diff --git a/Flappy_Bird/images/fb-game-background.png b/Flappy_Bird/images/fb-game-background.png new file mode 100644 index 0000000000000000000000000000000000000000..2d878c69d2d4baec0988b475d93fc3ea39e0b3c5 GIT binary patch literal 110342 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

82ObCMh5LEmaaWo*Oozij$YV*b5+N%ND{v?P(Y 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

A$EYl)IQd-!R>6AJ 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 literal 0 HcmV?d00001 diff --git a/Flappy_Bird/index.html b/Flappy_Bird/index.html new file mode 100644 index 0000000..b3f9898 --- /dev/null +++ b/Flappy_Bird/index.html @@ -0,0 +1,16 @@ + + + + + + Flappy Bird Game + + + + + + +

+ + + \ No newline at end of file diff --git a/Flappy_Bird/style.css b/Flappy_Bird/style.css new file mode 100644 index 0000000..68cf372 --- /dev/null +++ b/Flappy_Bird/style.css @@ -0,0 +1,16 @@ +body{ + text-align: center; +} + +#board{ + position: absolute; + background-image: url("./images/fb-game-background.png"); +} +#ground{ + position: relative; + background-image: url("./images/bottom-background.png"); + width: 360px; + height: 50px; + display: inline-block; + bottom: -635px; +} \ No newline at end of file From bce6aeb082e6903c9094692f08a6dd688923cbb2 Mon Sep 17 00:00:00 2001 From: Muhammad Shahzaib Date: Tue, 3 Oct 2023 09:08:25 +0500 Subject: [PATCH 12/71] added contributors via github api --- contributors.html | 110 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 110 insertions(+) diff --git a/contributors.html b/contributors.html index e69de29..dc0c7c9 100644 --- a/contributors.html +++ b/contributors.html @@ -0,0 +1,110 @@ + + + + + + JS Beginner Projects + + + + + + + + + + + +
+
+
+ + + +
+

small javascript projects

+
+
+
+
+ + + +

Contributors

+
+ +
+
+
    + +
+
+
+
+ + + + + + + + + + + + + \ No newline at end of file From 9f63a61c83d812eca7c4ccdd908ba99bb799643e Mon Sep 17 00:00:00 2001 From: Muhammad Shahzaib Date: Tue, 3 Oct 2023 09:10:00 +0500 Subject: [PATCH 13/71] added links to the other pages --- index.html | 17 ++++------------- 1 file changed, 4 insertions(+), 13 deletions(-) diff --git a/index.html b/index.html index 0ac1329..b2278a6 100644 --- a/index.html +++ b/index.html @@ -24,10 +24,10 @@

- - - - - - - - - - + -
+
Analog Clock
From efdc3edd729001b2da8696476e0729ae30fa99d9 Mon Sep 17 00:00:00 2001 From: Dhruv Dhari Date: Tue, 3 Oct 2023 09:49:13 +0530 Subject: [PATCH 14/71] adding flappy bird --- Flappy_Bird/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Flappy_Bird/index.html b/Flappy_Bird/index.html index b3f9898..e2ee32f 100644 --- a/Flappy_Bird/index.html +++ b/Flappy_Bird/index.html @@ -11,6 +11,6 @@
- + \ No newline at end of file From a739657f3e4a5e8465001b648c9615e367781b60 Mon Sep 17 00:00:00 2001 From: Dhruv Dhari Date: Tue, 3 Oct 2023 09:54:28 +0530 Subject: [PATCH 15/71] added game to the main website --- index.html | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/index.html b/index.html index 88c7c67..007fe8c 100644 --- a/index.html +++ b/index.html @@ -67,6 +67,10 @@

Small JavaScript Projects

Digital Clock
+ +
+
Flappy Bird
+
Game of Life
From 83f36d21b5e0ad25165284621407a7207ff65fcf Mon Sep 17 00:00:00 2001 From: Muhammad Shahzaib Date: Tue, 3 Oct 2023 09:35:16 +0500 Subject: [PATCH 16/71] added bootstrap js link --- contributors.html | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/contributors.html b/contributors.html index dc0c7c9..9c83088 100644 --- a/contributors.html +++ b/contributors.html @@ -85,12 +85,12 @@

listItem.classList.add('d-inline-block', 'mr-2', 'mb-2'); const badge = document.createElement('span'); - badge.classList.add('badge', 'bg-dark'); + badge.classList.add('badge', 'bg-dark','m-2'); badge.innerHTML = ` - - ${contributor.login} - ${contributor.login} - + + ${contributor.login} + ${contributor.login} + `; listItem.appendChild(badge); @@ -101,6 +101,8 @@

console.error(error); }); + + From 6f122f8e68e34cd62369cee38a3d86fe44e51577 Mon Sep 17 00:00:00 2001 From: Muhammad Shahzaib Date: Tue, 3 Oct 2023 09:35:35 +0500 Subject: [PATCH 17/71] changed the height of body tag --- css/style.css | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/css/style.css b/css/style.css index 2871711..276613f 100644 --- a/css/style.css +++ b/css/style.css @@ -16,6 +16,7 @@ } + a, a:hover, a:link, a:visited, a:active{ text-decoration: none; color: var(--white-color-lv5); @@ -28,10 +29,10 @@ body { align-items: center; flex-direction: column; row-gap: 30px; - height: 100vh; + /*changed background height*/ + height: 100%; + width: 100%; background: linear-gradient(135deg, rgb(212, 0, 240), rgb(0, 101, 216)); - - background-repeat: no-repeat; color: var(--white-color-lv5); } @@ -46,7 +47,7 @@ body { transition: 0.3s ease-in-out; } .projectsName:hover { - background: rgba(255, 255, 255, 0.295); + background: rgba(80, 75, 75, 0.295); cursor: pointer; } From ce2bb79058e5902b56969a88efde9324f026da61 Mon Sep 17 00:00:00 2001 From: rjangid9080 Date: Tue, 3 Oct 2023 10:49:41 +0530 Subject: [PATCH 18/71] fix:todolist link --- index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.html b/index.html index ed673e2..28262e7 100644 --- a/index.html +++ b/index.html @@ -142,7 +142,7 @@

Small JavaScript Projects

Timer
- +
To Do List
From a13f6398f339d103b88803309db292a151215648 Mon Sep 17 00:00:00 2001 From: Muhammad Shahzaib <111436809+m-shazaib@users.noreply.github.com> Date: Tue, 3 Oct 2023 11:01:18 +0500 Subject: [PATCH 19/71] removed conflicts --- index.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/index.html b/index.html index 87ac7d4..a6d9736 100644 --- a/index.html +++ b/index.html @@ -62,7 +62,7 @@

small javascript proj
BMI calculator
-======= + @@ -128,7 +128,7 @@

Small JavaScript Projects

-======= +
Digital Clock
From 455a32ff11cb7c565ed95c107e53d20c287a7432 Mon Sep 17 00:00:00 2001 From: kalash Date: Tue, 3 Oct 2023 14:00:22 +0530 Subject: [PATCH 20/71] Add Image Slider :) --- Image Slider/index.html | 60 +++++++++++++++++++++++++++++++++++++++++ Image Slider/script.js | 4 +++ Image Slider/style.css | 54 +++++++++++++++++++++++++++++++++++++ index.html | 4 +++ 4 files changed, 122 insertions(+) create mode 100644 Image Slider/index.html create mode 100644 Image Slider/script.js create mode 100644 Image Slider/style.css diff --git a/Image Slider/index.html b/Image Slider/index.html new file mode 100644 index 0000000..fd2dea2 --- /dev/null +++ b/Image Slider/index.html @@ -0,0 +1,60 @@ + + + + + + + + Image Slider + + + +
+ + + +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+ + + + \ No newline at end of file diff --git a/Image Slider/script.js b/Image Slider/script.js new file mode 100644 index 0000000..561e226 --- /dev/null +++ b/Image Slider/script.js @@ -0,0 +1,4 @@ +var imageFunction = (backgroundImg) => { + var fullContainerImg = document.getElementById("image-container") + fullContainerImg.src = backgroundImg.src +} \ No newline at end of file diff --git a/Image Slider/style.css b/Image Slider/style.css new file mode 100644 index 0000000..e327ada --- /dev/null +++ b/Image Slider/style.css @@ -0,0 +1,54 @@ +*{ + margin: 0; + padding: 0; + box-sizing: border-box; +} + +body{ + height: 100vh; + width: 100%; + display: flex; + justify-content: center; + align-items: center; + background: #141414; +} + +.shared{ + border: 3px solid whitesmoke; + border-radius: 10px; + overflow: hidden; +} + +img{ + height: 100%; + filter: grayscale(100%) +} + +.container{ + position: relative; + height: 600px; + width: 600px; + display: flex; + justify-content: center; + align-items: center; +} + +.container > img{ + position: absolute; + left: 0; + width: 100%; + object-fit: cover; +} + +.container .box{ + width: 50%; + height: 50%; + display: flex; + z-index: 1; +} + +.container .box .image-box{ + height: 100%; + width: calc(100% / 7); + cursor: pointer; +} \ No newline at end of file diff --git a/index.html b/index.html index a6d9736..47fd5cb 100644 --- a/index.html +++ b/index.html @@ -228,6 +228,10 @@

Small JavaScript Projects

Rock Paper
+ +
+
Image Slider
+

From 464bdf2f1d072f497a1930325cf7e445ce7a5198 Mon Sep 17 00:00:00 2001 From: Akhilender Date: Tue, 3 Oct 2023 14:24:55 +0530 Subject: [PATCH 21/71] Added New Game Emoji Charades - Implemented new and fun emoji guessing game. - Implemented sounds for the good user experience in the game. - Enhanced the game view for the good looking ui. - Added more than 45 emoji's corresponding to their answers. Fixes #191 --- Emoji_Charades/images/Emoji_Charades.jpg | Bin 0 -> 2576174 bytes Emoji_Charades/index.html | 23 ++++++ Emoji_Charades/script.js | 99 +++++++++++++++++++++++ Emoji_Charades/sounds/correct.mp3 | Bin 0 -> 18720 bytes Emoji_Charades/sounds/wrong.mp3 | Bin 0 -> 16718 bytes Emoji_Charades/style.css | 56 +++++++++++++ 6 files changed, 178 insertions(+) create mode 100644 Emoji_Charades/images/Emoji_Charades.jpg create mode 100644 Emoji_Charades/index.html create mode 100644 Emoji_Charades/script.js create mode 100644 Emoji_Charades/sounds/correct.mp3 create mode 100644 Emoji_Charades/sounds/wrong.mp3 create mode 100644 Emoji_Charades/style.css diff --git a/Emoji_Charades/images/Emoji_Charades.jpg b/Emoji_Charades/images/Emoji_Charades.jpg new file mode 100644 index 0000000000000000000000000000000000000000..66afd018c1463847925a18373124d9cf11ec9c90 GIT binary patch literal 2576174 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�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%0A;9mW2G%U|TMKLmp!F%< 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%0AK&nN56^!DJ3{ia%Pw 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

N1hy* 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

S`0Xg1!d|}rm7mxws22P;TR4mRv~bERTI~u z`8MR+Bl8HYprjugdZ#)Ul|JY2p8`S>c$%=Q0;*X%Q?vP5G>oGyuAahuM{C%NG14(< z{XEaj$Ol1!gNeT?@&Nj$u$4o1L&icyx%2R>KoUFJfuVgO^vhYySn=%fW6Snb%M$__EI1lzka|~rO}7^qnMEWwQq+bAFk4y3V$nY1Ff5&bB#e8jI7B$03w!*z-CLy zn_2R1fv5xplFKz(&TLw}p#0;HGnxYRgkKKVK?59mKXpYHNbZK?#iTrhPhbd+^UEew zgV$Mr=_pp~5lab!a`2D`Q@A4rjsY z7FXp{+EMV74%^U7nAzhGJ5U^C`B34NfWo~6tZ7Gv(?wj3r^CD3FA#F9HyE#gz?Bh@ z@vAf$GnU;fKx}{Vya z!A|p{|81v0w;*)})Ln>yz(C$vOO zLW3eS20~*XGzR~gF<33v0n3XO!=uFsM|FUUl9uiXR?h`KA;f2J|Khz!F=~l{rnHBE zN(aY46+Eb0jwMzv_v0x-fCA<2bU|4)rEwrghfXqm`t4!NFETlVn%zQ5priVcFeJk! z!0XE^jlr-Jj@!SBk9{%F^3$76Wy$$jmC4o(AIZ9Hr#z>UxWr9rb?3KVp zMC;KH`QY5*=j>A@JTiw48kg->(L%<=_KsUAKLJV;Fz3k_s}0>e#va0nUn!c;G3PcP z{K4QKWXlCxQ0`8^s&zi zxk&sBM41>AaE&7zMcO=RSW0MNHH(cyn^8;fkY_IAhyd(%R$D}P6jl&) z4iS6g1*Wiehplc0&L*C{8noavDF;AODiH9)o*67e<9G|;@$ZodG#_N7Q^3`oIIxNl z3bvdV;oo`jkY+sCwpliXYek1LD>(Bw;LUC;bZa4xzZKNat2uWYJiRn{Yt?seikv~> zy1?o^5JVX+7cf}Z#3ehR_DyHiS~SHHe6SZ@P~BiU-&t zSP|*EiU~9iUhvNin%wU_Q@CHpGC+9&h#a)|@c@0mqiISUV{G{5%)yU~g762N#yQ@E zKtX!Sn?LJeJw|{2EvNZ+eP|!iiQ9t8*TrFo8PI*hj9%0Iw;5wdKb)3ZELl{lpQf!7@LH-PO_P?t%HVEFTkkt@!d|;SBlP??&!rAcO z5!V))9HGe(nw;MFl=t5A1)Bt%F^peE) z@irp@fM6}J84B?cKuj^oNG<%;E1(&mC_(KSd`mNyF>HQtwUa9JofgdF3G_$Balc%* z;tweBj(;ugWeT4R~CdI0^P2l+~b4MBs;pPM& znZ19tl{}_0CV&xicOX6mmz?_EH0?$APZTUXiXp}w<`GCOXdv_-y&`8&CTgJz`0lHx z9SE~ym9frlLA?N5AkZ%tpXHkIx+zQyGWsJOc(8H_Jk|d>AyA1w@~hNr9HENWf#ySK z7P;Dy$chj=!!y7z*zxNbm@do4o2$g9R`GJ6 zdwcZ(SCLPp^RQw?cf7esJqfLc-K(dY!^V$$bM?Sc)px*vID*7sRHb3Cq$Y*JK(Xp) zF|s!nA|0ERc<^zb=n}Ll;QBZi%^>}XPcvXZPy9{wio4xh1F)5r@n8gM_u!q^JE4Wx zAac-r3U7G!5|S{5I|DCtHyUWW@mTiX+256VSF5n2ez9EE7eFN-8kY=*Te!h6ZNd|t zbidS-rUf7T{1MF;Ttla_ivb{Sq8m!d@9D4n3R)C;A?KP z*~!HNbcq#I^MbG_RZz?ca8X3b$^ThjTX@H-)RA_6M0d5P+dI*Jeo%-@|}P^ z&Q%*iHH8V%A>oY}Cck03E6kGowGu7&Hp~QtT}02L^y>&X*gwU7&43jG1TcW95Y+-U zsTV$bZ6JCdo}eVh`F*Z(Amwuj78-G`L8Rckc^t+?!5qRW!UqDKAeR1Ix{dM~i+9$Pw$ zbY_lx`#u?l1?eTMmcW5hfwVyQ`^QM?=Wf}^jp(BQt|Jzr=Xa@!Bu%}oJN`IbU-Xus z3rvNJmB-TZSXw?DUQb7Fpm1ShK_SFb0b4XJ_}uTM;du&)4Zcb9g%3L2205E0Cv zUH|}FjiR|bp#V=D`pX*!hPdj}$lUgwClW+mMbAY}mSpe-?!lWlBpr5{-uOqbl%6Hs z1th}{bcm$8w9m}n)`$a}vevWC@SWG8CDY^~b1JGjTPn5=DF-Pifw8W<3%V z#*V$pfD+B)=tgB`;KA8z2)MM(a?)73v`RN?Iupp~Q9cD@9RC|AT!x zMZ_k`qTTaY7_IF-LI#<@ie<8dp>S2nLruB?Z=g!3_@SI{bn$pcxDj@y^qxdfhO~x2 z@hjkhG!cueb}}oSZUGT|3l&y6XqqH}rP6A+ugx3Yormrvq+hF7Ovjp9DalOv-C;}y z_ZE^7(R_BD%_aqE4+fDqDtoYX36HoUkr}0o%am?+mw|M3cnYMV^IhIxFkunlAEa;> zZU**Itgv^`P#G@4bZS8<$@;vr23;JCNgAAxEtE#Vb;Pb@65dw0IyQ>7^Sl3e6^u+J@YrG*^l^o71`Y46zxG`GuAibFj0zndSM#DLU zl6N#|szI%c13#Zzv91rWZEE4u|m(K<~4VM{h zo<(|e|5SmqheBDXe@1ujrwWn6B=Hvr@Km6!6|9L&jDi5yqrZPtQRvbq^9!>W7@I7> zvKzf7Hn!i;)+QS@mJxTO`xunf-vRr;IM<~_DtfFB?XXgGeP(*r5~^(I&pOrHKpGXB zmC`$tU__T5@P*8PqEtX~$?-!JrMOJ7*U;Uc;V9khm<@wk2KF8-TP;I%QDktbRHhmtHHy?ZMwz9?NWl*CDwci=Oi zCJMz=gNKSvp&;pit_U=D2&_!i6UqW1(~rz-ByO@Cj?>8myY2Em%5D-p$twO?pJo00 zO4Vs%`k&QQB>k2Cf(o@RD5T{M4DRAscOb#l>(87TtiOz8f^t&Hg7KAlwehqJE2C_s;$8o-pG$n{c2PPG)Dfv2D_fB#{RUWyb;Cqcwbh(Z+z zzBa6MwN_9sik^VentAR!LF{2X2FU51fS1UP{j}yN}9Pm{N=RHQxf@nOhb0 zf{DXt##(fuw<(J_ZGb-z%uye}(?Id}yL<+nl&Xy|+~?5K?~}Z5sT5pXV6_-^sY4DK z4rk`~lE8GkYEQKc)+~Zn5x!EH`_j8lSQLrYC#iPJf3I+=t;3pS zpfUA7`0LGRaFLL8>)6{1fS42lwr2zBhoEEfFhv;t9GO^;B%>CSP%&D!3{L| zptxa*lF3cbKv>2kS>gSp^ljB@06K7~W_rv5Me;>7Qy8;Gi`1=_?#2NGA^n}18;Cbi zzJm>WJ!nEaLVG`8(%^=kVBCv7ig5vC9=y>Uvc?w-P0)K_RzlpX!$0(*OW0TC1tXDc zvGfsuEz*IS?Jj^ch&8zbH-(2YgU9d>O+|mii)duFxK?rjZve( z+sqL*J28LBaWae^$O1)69)m9ibPp-(H{)*~hOA1@ zi4yh=JJ!r~#*I(mgHpmXY1T+LX>8IGUd(h%f*4?C443{0P2zIDwEbKqX5rPsC z{UlX%eUuMOcy6)k79_h-s))D9`VlH%JdD&U&V0aPEA+cKJVa!UOyn2ylEnh@&H^sl z)SUhn&Ipc9p5eF#5yby8TFyyW*MFCQDgw_vbawOTouEfV+udOSph8FjNT^~ko{-^- zOgr$fC5e;B#j`j(tj(SDMNwWVgjE#CW`(BT^neLPL-KgLzgkaWKDx`vV5tE&lS@T)M{flYfbdtan(5*!)I;W>A;D=iMEj|Y zMEDm4`ANN0k<6EY?ff766|D;%FP;6c;+-D!Z5*xLe5n(v*~YP8F+e*PL0T$zHhERb zGQwrU4mv;xbD4dK*&sIwBpvCO<*ts%zA+(5EB5lnWaNxn%DEvJ!;Zrre;C;N;XJhOk^ zE>^yV{07P27x{D{x6hEzmhz9qzw}%A^obNfo7lUUr>xK;{q_kG>-Z_6z$JPx7KEsS zBtOhMOH_fTpsBh-B+{`w4VGsDH?+>&Vb$S~NJl}EtjY;Ry{|uGgZc{~F6;Gxevhp2 zp-l!(ii|lQWc4UZ1*8a!`8QNji!LCGe*3-@6QV$zEsLH1stJM>#`h%?@9gtgKo5{9 zc!>#-1421{5*htYGlAqu45!VJwNsFVXnkL*D7QOY5kh++3-c{U9)#L0(jnl^2gTyC zWR&*divoeQNbz#C1NYm~P%^h~x$Po;7-yq^j;k;RaZV(0M4jC41@I53uKsiQxBtQc zl7vsvdRMJm6bJ=$gEMh(6ii1)nT_t+DI5YyyRpoI{xT@6kpuKkjXPSk1Y^^x5g;ho z;z>3F9LcRdfstVA<^w8(-J$SAV&WO7w5fDlW+y4mdj~N*DYKl(>Y|Doh?VGm%w&o1 zSgaO7nQa-Ua>-Sw1Tk8A0a%Tf!=X&40v?PZ0%6%ZOI9fQTV_7+RM!2l%N{-T7_|6Z zA@0G+AhlkLRe|quBm^=C$y$lw?}pivd_hczF4lD06I5O1C{vtnpN(;)%vzEjiMdbn z#RXL;h~K}0)~tvI<5Wf7JXvdVQ-34joT@f7qGDf$bi$RM@26(eXV36;Bz1w+2RL;s z9$A0$0|1+>%IXB#7pYWZ|8CEabpLNFl`a%mwJ`7E?vlIO?U3pPbVco*Pkx4t2wK+; z^k`CoC0Jb$isqg5g?Nq?TzGxm?+q0*-8u~5QVFFV!>*aoF8&_z1u_ge0+voHDD4Os zdhRlK+}{`8^6C}IIE*d+f!->HF%gExl7MDW2>yXXK54T-8C`Ib$l)IORF?_9_hU%wT^$0@gQI;pd321EG@oDNUp5Hdwac73J0_Z_1GK}9~U zcz09-hmHVia=l4+(An0a04BNYW2P%sgVHXgXF#OaY0XCm&Wpm?GOvm#9x1|IHjCtQ z+uHgh7>5fR_x<&3q7ms)&@(4hn>dQYP6f2mu)|M1*L$ zc^%dRxWF2o;r>HJC}`10QJWdCM>0=0v}zEEY0^JoGyq+)UG=6Gh_gt8JR4HmhC=n2 zl^kZMh-9Gl*<)aKhgbmcc?cDsl2x~ruJ-K!_#EXovjO#y9-oW6Qpe^W)}7} zDz7hTh(D!T$DXe(2)1yz?UEW=XjU-yVyUV!zmQe%Jm=hRLzJJzorq1n!OWSh*wSP4 z3#(vs24*{iM5bgNoo%&n=)FB%Sx3fNd#MHu<|JCSo!sp4dXr-Q%P_*h^GO;n{aH`0 z@q!r_?ClgJi_GC3m#r4GySDm;%^8vV;`+pQW_bgCtbe}#61VM1P}K4-c{-oFUxrMb zeQTNh2Rp3u+au>b%95vPlFV>T`xoEwi1));9Wm#WGS1Ol9ghU1mYm?Q#1Qr7@s+JwO*!^QD%N zE;=>2b@ak3jL)k3F#9HR@yxtI=PE7Sx;m*6p=OI%3h4>8iL9<&w4QUX`zUWSvaNd# zRNxMYQitZMmYLw^^3j3Q>PuX1;j~K?e_lzHx~+F0R+qHfwr6B-ymZzfohrJnO0b6) zd8jRH*8IZ97+ooeShtr+_h)-C)y$Z&-y^};B#d~zW(w`SbR6yA4p+W*v|sq*>kVTj zc)8ZAB%ItIL*+4@5&?m{Pl z%+>fs+JPm9Rg>RbYFK(`!33qWDNfz&CylT1L%pR~Yt1cs+yPo=^NHq*7Hr2PikIN-O@d(6j*p_-S)Lu-3Yo}L{% z%;c?-z9L^KZWz5N5DOwWKYo2b8qKf<($U6IR>gP|9*>92)drZrV6r3-Vd4j;WWMl| z=$(l&{}gXK%$hB#z*EpWbzmIw7Io@>38Bhty3CY*8F0pk{5IRO_1gz9TI@v=(Wkg7 zu%qm^xzWt&iA{j_5bfol3C%hP;aeM3UIVEejgNG1aUmT@<3m`rPEt%6?ac3*Pz#-u z8mF41Z*QS_X#MYpDrtLLhokuj_`@P^n9jn71MKc(=#vgGW+gCl6-vSaN8OgvOS^c&~9X<~VPt7Fzcl>_<*H${AM}zH&ZQ&Zo*J0~eToE9Gy4d@_(v z2LEp+gMExAze8w89!hFuX5r5`B!O|=2Y?obv^{8KHp}b;J^e`92}vn$AXWthVlBVB zzt;wFpn65NkbfPlI8c~nxdq=Xql38S`XuM|k93&-FMiBezaGd&=i<{+i6H^ zT?$dE<}0x_6-_>`sQX*bsFuZ#gZhxd-C@KGX|$w3_vq7seM~d*z~?FG%Gco%oa` zsBJ!iKfAMBvCh7b5sH_tdOvf}*bxER8`aniryopTwB;R`w~ykSXQ{z`}2wdvZ>_|6;M ze%}jP!>n_+YaX~4_v%UIg@~J+cV_iYM1~Pi^Px$;XMg^3sLEOQv+10(C6Ss}NX=g7 zrL$|oj0IUi*Pee#aHwAF@p4CzP#I*xo|g$)dGW~s8guF{pLB*+3>nXKH3L@h8Z&nd zA36GsAZ>;wB#%Jf`HvIP7a%u@tV=AK@JS2HjotWpf0YZgr0zHLZH@vaSy zyj$n)bY}6X@u}#yc&qF@ewya-yrnvjcl8JM7Rx<|Z0f~BE;8l_EOHsM| z){uIKZ>2*2naj64r+=C>N0+XXcY#McZpleImg!MgXu9BMHq4Ew2XNMJb9PcCJ0TgQ z-_p9*(&VYrqtS7ZiIOS_mDa8!Kt3&flyO*Dr;Kh7DiA^MZ?dnz9(p>4tTxG_*4=lR zY{^k65)&6+^HOqj+ zi_}@~gz2D+)#dgMs}E zDuCpofT}rNx=9LgQwy~bD@VxiLWYP+x;I+I5N@O~BR3KQ9pW(*UH$c1D3<9f{+B`B zz2hj!e+_dT)3FwokYr0H9kryg5q+v|;hTdl)3cpNa7aUrJMBF1w?Prz$kIB(6;AVV zl}L&s0^8^zXi<~N@H0K1G{X#C3blpnti%|1DD-tpt#_r>p1n{%jS9d+@t=i#F+Mm(V@fB9LEYr!W(s{>3P zILA!T&c8*$~BEO&+HTPZb}gETrqOx14E*EW*E&TdY@WcJW|gq5nDtiDTgMIc;0PZ zSn0}qJmCJmH`G4LhzItVn!y9iMz{O;y$6y?jX6)gl)hKiD4nOX_HG{~VbffH5a2SM z9diO(UC#U(uJF+%a`FnLWs^F7O|JWF_*npG;DjUOamWL1_jr!hYaNhen{ja+=xVRP;q$@ zL+@6|LTIdzg}i#3H$Y3f%b=O@KzS~pJ4q7t%by@{VlUxNnxBRbhcqCma0bA+Rq6#yoVMYSyEeg*~5odxygDy=*k*^r(aouR*(b4|MnM5 z9t6m5;r|0nKpjhR94BF%Ix!3+gy}MypyES50$Mvw*7X9FK8gpBY;$@c zzLP@Y&3AkG?Kab8+A@HoqHQN_))mP=`zVul;_hHV#{U^7o@4ktt7yEdJ99F(F*eIPsq0Jhy zfV&5kdnSsA@+ZyJ12WhyRew1ve}zs6hC~5o-K-DAt~(4h_06N!fOuP?ZD4L5I(dt; z0TDDRjZ<9yt#Nh!$7kk)t@t+Ay>Zf;`Z zTp}GX(G9++%i)Qz!MAHTmQ(Uu!%`n+19$ed=d@p6IpvUCxxsJXVUAjMzP)%r#N&^) zb(-zM#Tt^+EMkkbFf=ugULLLssRmZ}8Fr;QKAiZJ^l0u{TEjsOuLpmx-6CSy)Gq=^ zE%|=zxG{A$cf8x}PAxa-89jpM=%6vroYmTZ=Pl@?4AzYKuF|b55oMOCOZ~lx0Z$Xf z*^WY{y|ph*I=Y&17=Jfi^4Rh?E0a|q^^AEnDTMKGwj(bWHg%rF_vqDgGBU06NZY*+ z_b=-0X{@N0tY?DHcSra$Drp6wrH5HR_Tf4)aPMd>Rt-{H$IzGQ z+?i`eIdN0lqj>G`Uj6~vAp?*Gg$K=4os>1RFVDW;6SMjNRy?-dDPC`u|2U)K;$|i8%oS376;#Q%belHcguPO3aJS&gd9cdD*z_PfGVNeX-Hx@qtA1zT*xx^aHuT|xfN5X^A77+k*-{mhIWv~vJ0z9A$0=whLW)p#DBC!hWN!lyV~k4P6IFwXhO$4Gv+ zbf?bqDpDJ>a}qtjl`eLK`+mqw=YBOfPos+V;;UZF@WdiiNsX*vcN(?t*GYrVffu_+ zqS24ZJ(y&376i{@uph`pw)h&9fU^lPiOx+34p~+{*OD+C0#08{IE29-j$(_f)kDzvpkUdKN!f#LEK-4 z3-VL~ilZxGI+RZa^2tE{HvBJn8#sNX{}Q-ub1*fX^iUbUDv4(OJ3vZo7wc$+v3MyO7Ma$v|MOj&_I)-eUtRZ^acaU%oKx7ZX-&W53l*&20 zvjJ8>Z4R1YU91Jc@UZr|9H4a(qZ7PNy1f-sB};784T;qtJ%nk?v#U&s*BHWn2=u=~ z*W<^i;!_B~k5cVfO)EuHn`gUYK3J2A9WShWenDUq@?idf8-8Un{=B@i~|3ez#1TEw5 zw-9eE#p(1Du1x}3MGl?EI)Oj0c@;x=L^RMsLU}`p1zQtNE+`h~R@~2h6z3*5kkqMF z&*-I#_pj5>nXgmnuP@n!$A~N{%qau!Hkz$xxc&i)Qh||b506RKq9}4%9fH@B-rZv9 zX0p6$OK(1j!X1t0WR-5y9ur564j-z!e`z|@L&jTdcR%xHqQNbuNt54KZ0R=X^YX}$|j9nLKO?Y{o0ksJjDLJ2tZOjp;SCL*cy_2dw2!Fc`7YlVaE4>UiFPb=WxNvkyP{gny7id3<0+v>;pJu+=vAMIW6TexH zmx^2ptQ~YjTB&b@7Kf70R=rs=YI1YXNWSO!JqF#2CUz@l>iX`YC@?Q_TYqcXKdsyE zfGFw1#mTb|DtJsxo2otkbYi)A&m!a98OGyw8PjKO95>1+f8^~sn%+EcZ-=%9IB(i%`q<7Rt7q@9A%Tp2#bbts?$9oYD)GoLx61so<@z1ZXQs3V zE0yamN@9ykyl89|Ii$y~rBmM=va{4fQNUAs;6)!Yz$OWGG*ieFn+!~rUz$Av# zFGSmu5H_}&fg%0#T^|K7fX1=b^(1)p^>n6j$#RGA`3=m1Iavt#PVA#7wlEO09kP%B zX9on7_sjyfEaV2)yd|-^8%Nre;%kUw-Y07c^w_F`7RrM|ql)33yE%ipg=o(6iDFQ> zq*~dmgach)$ij!6WB>SRrVF$=YOYdx!jY8pkZ(F1@ULHe`2zX<_-oe=`TdaJ5BN;V zrwh3ul>B1>pWJ^(1NeV?jnf7+W58L_35a7Q?LhenB(qAIerDxB3vv{!2z(_n-=xyt zTkHMNWABe20xtsU1j%OI&^j-J)YtB9vF@bxx6^B}ZXrl}-S6N+O6KtY6-v53?tdF2 z-z@LYVIh{n=3wIQsJM?}3FWn@tju(3RE`M!b@SOoFvQ)2@N6U)&32R0>vZHgMYeG_ z`rby6rMb-uR|#o!S^4hK=~SqegS{9%ZfD?JbSv)^NY~JiQI*kS;+4q4SBhs;GDoKZ zy! z8}NcEG~bt){di%6ar(97V+4IkAEka=V`ysOz3Cwot6HeJJKRUPJ-$7lvficY*W}m6 zai<1Ld}$OwLEeqk(VQ9b2T0n8inY*)EaZqi(2p; zcN%^RUvhn=f->7Bu|K_;y34kK`=U5${*j2ap7V-`DCscbdm5)z`{CEta?c-ngAUO< zHI5KPSzTi`_+MX%HAjJ9bpMBjvZv+8W8!Evv1%8aSb6@ehQeX< z?pb@>Y}QXmU~lJfQ~v>0{X6jbpIDI9B!&KqOpeprAKcgO+JhHWx7=7rYx^+Bk;r6A zjK6NL%u1;IdH9m8(D!8@Wf84F8=F{?r=JkpcvAB)YiP~SVS1Od&4%2ASJ}V@kch3L zjYZ}5hic^)gR(l3f~3KU-3o1u@3iw~Y~?1CZhCGy@9MY1f$Bu@8mutC2hoL- zU&p0a?q<_H%b$RsaD->oB zsuJyz`zF6_QrDYx=0`&}t@%gcq{CLjtfo%h8Z_&&3yuGTUM+QO^O=7E^W5aUDwOq` zaPRy3<=w-a&Nz%~9f(y? z_XZ9Cuvu+h7j@Xn_h?y_XN?YD}@tdZk`1CxGI^Q1a zYF&)8djc}RIJryAr;3kmC*amk*(+uk~>3O!W|Di zGH@_HqM;phK~Wo?LWU&Pe71l|hEuP*@B|uZvg?wKmHh3mbM<|cBQnnsZVIQ(x?N^O zbaEW6nJNZlB<%JiSBm(9H>DT~nk?Oz85UBqoy)Se<5V$Jn2{$k3tUR@SXw6?ZBfjT z6y<{C4pwza|wY0$*JYdIw2(A zJJUadDdS@qip69{%BS(xmm%yY8HXW%mf;qk#o1UZYO)y?4a9E~(d9rk;+RRE5&NGulD8!t~K#meW)rqu5M&w@Wqg>y@DN`Q3 zeB;r&LJhM8AC-#Q)=jaxyE46WLa00-&s+r0pWcd9i0Unh9&&zD`yxv`KNBjIzx7dA z5khr*fYd#D!(oe_{PFl(J3XSu_4Sgd=|B9aV%Pxyvg|eCH1C#Kv!p|@mNBj=&#dR` zibvsZOGb~PT7fe#PjEyj!N~kf3u&HagEK-cTB_PP0Gq6T6Avh@HDfhGySlmN{`RA8^=WU$lL*QlP~HLl`ua3&F&dW(KR3 z8UuXhg0c$Vxj`M4y-wC&uVBi=@%ws7+ouEzm<{3!`@@66pQ+|dT~P2VG(x?gPO2}a z?R(MY4-Dnt=y74#v|=Wp^1RayqbkOGX6Pa9?u*uD$p2KiVwFZRNLRZ znZp?qn~>_{YM|VuUkj#8`V+I84&42@VCC{Q$2!*w24fwgIOS5jl+V?7J&k59){^@c zNAUx%dOiL3tX;I>5^299!ygY_MNv!L8f7z{`BpogJ%AtXfR_S)sY? zymr>@f+E)sD?+yHqH3#q`R!`eZ}J~^e646%66V$(TKU~2IET^XV4b>lOY4>$)M<(X zmdvuPU$k3gc(rD;2WNy*?81k=`i%PNRl$`(^QXO5nYi3Q(O-K$y=VIrXV1G^RmF~- zF&xb8*M_N$tBi{M@Ml05qiN+To~(+V?+8>E(VVXpyQOZpWk~szn*&~aTzJvr@FiFhZqM5*f?b$H1h0m|L-3jl6ObiW- z?PXbaUBJv>A%H$ihMS4d0OS||__~3#m6~l{3r_znh$h|;;0ee&8P2uTPPvIJBFTYO z<(f`;VnGg*|M?e64jullLkIczkmudx-%5mdpROlq$rDSZGArcEr;gLfkR|p$?f1T| z*^WE~$r==Ctf-ZqBE$$MMi0)0o|Ta1myxi*@fKs{mkA#F(>z@wjMY&GQA*2YFRJh> zq8lwQayqQ}1bmtrVO2#@DeR7G^(Wj;?FZETCNGtL{^bn-aVp7CBG8TOL%FkOVNCu9 zw6i)D+HGcMAH^G83+o<`JpjrTNI{(CRaOg%qE3x-)p=UgN;WUuzX3VTxGTYyKWU== zMoABBgjoA(9axqk8C?N%AjLIbm1Jnt z6Kiif6`Wq;> z$Az4_PO0pu1k@|T6Amj}i)|f;RRV)7rZH+gQ!|(bDZg5uy}uV4T4drSny^Ree@c2} z1_OUe<*T^72T)CPTgJ9M-5Psrn#T6lQS)Y%T=^RQp`Lqt^qfKM?`L`)3dej><12da zMoFa(kxAF*_-xTuHcqDrenj+9h919iB=4Hlmb2kek3+rF?$@k&Tc_gWIRU=}gRfih zk#o5}z+Y!qalrA)U-dViZCAc|(PyZ;ozdmD#y?GceeX_Rot1D>`k!~)g_wUE4qTyTFR?#%(9hQH+Q#uZTfhBs?iRG zWgVH$#TmsJ(jdHMdn&6fB^hT7@}Uk<7Cx}+qdc=5r(<`S-vMyDbHi!&De7#(xbT+$ z^}v7!pC>2WVK$$V9-|jYFDYfcVdN&Zy*xaQEpfOfNyV1jnwRWfZIrM0uKurh77jJ=QE=%uT9vTuQ_S*>t}UZ zt~fm|z(Zi4u=3tM`cna(bp&H=8CO~_oGs}ro~nL=*==O-6GoZZB>*5ImVjv&-|gqK z%ObOY?-eWw?HzshdHDkER>d}~Zl>PF?|O_IKj^#+tf8Bs?YH%l#xLxB?M9_!TkB75 zy{E&^X4_W)q=zm_za{rkzKa}%8#mEf*8s@p?_IjQeMKK7*uIalg#td|^u^aAh-uOg z-pq(2GrotyQ*rl82lz^j>(v<1i@)^OBffLqnx7WE9VnTP?Q0pkpAo|1Y%!`0V1VIb7Aklj*Js5pm#zmzdCbYEt)P(OR3vxAb1k1Cb6E9Yw9G;fDU< z*4!C8sU0J)!UR+P^^Rrj#p}KwnEc)Jt}tS+szcoPj^(t1aHob@%7WS6quNf#vqh3J z@oKk6$I2&zRnj;p(WB9nopYzUwdPOrkhkH<&g9`=g?X4&o8HL zH0*Gl4$S?B@WQo=kJ}Cj!xu5@E<6}&b3#|K@m(gZ=_u`Bgx>J*u-<7s?@#GvMN46F zXonf`taEkO+G;6`8>-8^1jWl;EydkUPhX6uullx7SGBY`_(N9X8P(5tOk&K3+K>Fn zelCumPf3(tN?&yM8bAANojW#IKxNU&35G9k!l^=^x!dPRwygC?l8hz3WwG`xls*?6 zb=6q@gDd?Q75AAGx@nU(x^3olt>0nZ50f`#U#0~>BUV!hR*R}u~;2fVEB$NYuT$j!CCw@HDmv%*C#)_ zyjXtk&d9yEBgC4858{RVlqL7r@pCtKhxk)ugDnv|nS^pU8PzYX%q;IAix z8cS*?^oc>y#0OAATTlUpqW@%m!nhc>Q`V0tk5!{6>utM##Rw;&8wDh#>Z)QB;L;Jg zjeUsK*+B%;a{0alFQ*C-?{BlB`{-@_W`hjuYgGX>#z_z6^pA8X!E+!Dw4#dQfJ zWPA-QKk9|q!d4aU=x6R_`3Kn7nL1iCQ;fusZ(y~4F#zY!6`>8NHLP~7PPHin?IU(J zBuCQAAwDx3RK=C(a5{}p;$y!B!$f*H5q1-|C{)DaYcV@e3}-e7G7&r`S`6~e%Tisq zI_`2+Q6}z=mfgg@aY(+$jw(G52^I2+<6e|EIuc57qq1i(U@3~}xEP$nzg?L1kD4$4 z+iN3w5`ls90VB{A4bad)_k7aPPLgUrd)$FHgF$lYV3<9_6sH%UD>0f0lyeNMSbWwo z9J3anEKacr&To*SWQma(M?rcM?MCsa6Zv3a3C*Y%YsZ*yq|IkV-RZIoau7;uPJYtz zedDRv94CyNVX~^h3rz&w>Nm*ZQowm!z*4JYVf7b zXOqWRvq1fQHzI=X9XtvqY5c%nzqpPGJ|be%^`UoDeAW%xxM||SgKKsx++5R?{q&ym zp31>Xey!iV!_?Z3%6SnpH2Syl8@ zzn|^3Cs_$6UrxFnzPeg1E^p1mglgM6y?OS^)Jt>fP!Iyy4n;y8m{ZtONlP)A&tKTkZEtp-LXQ)!=bJ9>%B~T?$$Mv`L!P9o_ z7-{^G)#`i!J(Sa-sNAIZ))BMjN0EjnbfPOZ2RCokkmx78VU#;3=R7SrvhW@@oVgRv z@$G85`D@Ol-Je{w`Y4CCY|*k?S$bC5bpB0JPdIp;9lU#^{t*$iEAUYpbZXW!F8obaNerXm@8)q1qn7(ROC>gQRqmV*!2$7u z6{SbJiSlw|OWk8>b2B2AzL<9Afc~jx161paEPMSA=Zqclz*Ad!OJ&7lP+*VIc3;vP z?{Kv#afog65I^i;zE1iDi%H+tNe->=?fJT7fAnw43n-kDUF+~1SbYM2+UuYBg(o&n zv!Q*Nh$Xy`xNo&Be`4*)mT>NiwKWVE#RcRlr>6Or#n4(5diZ+UCEtr$lD%1N`|rDE`Op%+}$Yn~Q_c{4f-tXfn~Z5=Vh zQ(uoL%%rw_lxlNEmE^}CN%Z!TJh(+zVvgHWjI!rfD?PHw+Z{SO91HvYWYoB6I{y}xccN*+o70Qb+zq9{p{D8+;!L+p8zQ=pdYCSRtumSWx9S`% zKR!SH`ZdloKWVTeIAldz_jBWHl91wWE>RYpgrMVz6Q zLz1*`-X7y;*Ql1MZvqpz+af;hzPloDxYy8G(5X#eveA3wNy^9bSJbHA)|`nsd}P^$ z-|9NX?$%RF-{7vu5AZ8yc#PGU#cXtS)A((t=Z+!=_pQ#sGiWh^v_n+Z=2tEuUaud< z)0Y!Q4g8*QyN&6ajOMP|<}e|4`j~VNJ@JyILS--gB+>bK33oG2Jezvn&5d9`$kKbD z>iKi_O4Xe#tc$T%pUm))s(F&PG9f9*?$*)XBaIVI ztQ?=`&HSjO&&NYk-tiZ<(^I-;yZiNahE%M!+34xmw&Ymxz8!&0)kefs!_x{qHx)9L zF_Wx5n|6;*t-8OV+}g=bxc^aS{$ORV&eC zw%=Gyu@M3P`0yn3r6m0ke*ZlD`yUYb8uH>mh)v`JMmC|r`z@~(l@Evh=vqEG%HM|n zJ(Hv5*2_I4tv{Y@;|o)r>79Eb^QvNmAV;hbN$Elt_%+^8s6v%>E*j=V4Hf6m+S(xE zh}^zZ=u4ELm}LJ7aO%Qp(jZiMXNOr~WoQR(h6L7%c;?utiwRmGidZbSacZzK&7#1Vm2KM(4CFx=9sBSaekzIHkc|cp7h6)kqdG7(GtwhyRBlR+T9XR=Jbf z1W+1ulZ~=&v=LfR2?|Hpd{#nWNW-w>JCV}eOSqv!?M(~5?UavLsY!-wR%1m>IItxQ znr3BWyG|CVNAikyInvc*gX1vyWiv>^Itmuv3Ow*e=FAIuX zCHg66#mkF5H3g|BAY;P>nGEy+E3>G~nl`++7E~6jsBxMu!I@hAcHt@ZCpPN2<3T)D zRxIPo$2iNK4JRX1$FOb`afSMA*r845CO0P-tZ==^S#sCtgST49;jkAUycPk0PPJ_e zx;6CbviTdWK#Akrvm@`*nYH2CC;1KL{|LatiAc1ChuqD>nn!JNUA3yD4t(uz)bccX zVnO+#`gIdu{Hl#-7E)Z>!FCc;eTajp3vQJLswHSN#&=tY~@Pa({1j|KIEm>cu5 zh<@UyVOg@yF+;3C@<6Oqg$Cr@TN33N+Df>hpLXAb{$nbgfM--cQh+_$XtF?gVL z{7a%%&@3sI@x3~*=Bvcw(DK9x|1qig)?aqr+I%~p>G6`&taMCID46m~!f{Sm?khG(c{JR($RtQhTXVWY`OC>t z)}XsWdM}kFWb9Ri*@g;PB69&>_tvhSqZx`bp}lsMmBfiRgBi+|IJVnHP3t}V;+y!* z+*fK#M@+kO@zbb1+K;ZDz<0&?ic}K$?%YPlU-o>*Dy1WQ{496h_DZh0!YRAf4Opc2 zc%uomIq9>729XQaPu6mAjqi?nIC+-dxhWyWVK1ngoP@RPA8f~oK{W?D9)29zHqONM z(74R={;Lb)igKT~joOHRwGk32W1ZTgwcLJD7rFT5#-3WL_G#WV@!nB`Vhq=tFYxU! zNa%ere8r@lR8xz*iwSSKp4W-@bWe7lQ*U}e#ah*aGmiC*YEQX!n(!H|Sk#PV;_TL= zMj20)o+-O3ifv(@b9D(fRMje%I--d^{BR$ojmed0!|b#`DHGpXfhNjr`VuC)jzJ}- zxt&;@E2az+*-r1MtXk55a%Tc~jSD!i=Aq4!@uYpmvtSmxL4>=DD&c$M^_;IPB@5#h z(7J`IIp`DFY_3t;DMU!!%R`9KW$qqkp9zdDu7VjiWFeFb$kLpp*05uF6#4g`z`y$@ z$`{B{mmGDq%cl$ZY$=~D|My_-zx%B1ouoi4=mkhxI>|+Pp4Og*P;{oX2v0=uM0!C1 z4@1Uare?(R8nE|5Kh3Q{BJV(w3}+F6eiBDcvn|8Cx_f9fz*e9g6ygxnRwC3KI~C8w zV-Wm?4O<-f^T?myEC{+N0|B(igL(vlb(SMpZPsm^S}WMR+72-v7HF?G?@Mh6RG0V{ z=p6Vgrg#MY-W4Wj?gR86RGR;np!_cuazH;!BK5kth@r?Fi(t9r_ws?dxsz+9)nuvq z75XPOiKZ>Dx{KThF&VgdZP5p~<>-V?^r>~Ivh;E+x>rUTuoP_6c0u&jqLz)-+M??6 z$ftDFW+?^1)q`eOmh`f$w)0b*#qDwlRhjH479Z)>;zA=U5Drp7J8uEkZssSXZBP{B zXgk2|5(h{-Qe+LK6R9BKi5|b<69STxkb71}ex$ z;VK|>rp#1s)7hU@OgI(&vl6gfhXWhU1fYHit$Zh+=U5;nb^PiaF3YH&JU4L!cIY^I z9Am3mh){`6s1!Z=rv?q3JPCdY?pU$DV^~eaDRhM!edy3oo7zI^D4xE7QefHP`N)r5 z7z*1xjB{2yc3_d;86SI(QGPp)I6q=;Gg=^ug`>GwazZ~-P7JTthuz8{*+-W8^`A# zjOacytzqthS{2=GA&njke;6iiNWFUo^5;HqRTPRZlzwyhx^YtWUS=z8#l=g!HO)Q--m`u5)@$xI zvQ>UQQ2(VL?Y=_MRLPBY=qt={&6%#Tq`d9PcI~;W(#H`{1VQV`(z*LglUiY=U2vqt zxQGiWA&uXx+c`6!xsl_39iLl8+JE=iy3j{~0&`NYD-gHC@GTdY4f0IbF_^xcXQp<< z!7yy=d`?@CqBjxFp|vxz6P5PGl;?P+EpqF4HcF=`-Sr{1RhsN}&?Bg6G5U z`0d`rHMylOy>WA=eo=9)Z!0zF)TDZR7x%|($uJ}4h7(y`vo5|~b^XIo5Bo5tRY0V3 zEYO8kIG3**x(b@5<0ZX4FGs%-9RD8=HKn!EqvEhZtJy+Mc~+Eh=(J;xcWd8G3|#KG zF{Fap$mY>n9b0u1yXV!~Y_zQj4R(?QFu$7j+;SOuV4@X3zmJ+bjP2~3BO~6e#cF-a zmSfh2BAS3>`#2FVPgK*Ne%Onc^j4C>1Xw(wz<%Xa8>42d#Oit6i|{?W&+OancXvgc zclIo)zR==pu3Fq(uid70v}Fvd$8!h$xcmRH_vZ0X{eS=PluC=zLM6*6N}_yHA~BO> zPZN?gilm6iRZkm>=N>%tBvB*6juIi?A03W>>|woaEM9U*l5aB=zFJM^l|X`vFW`*6o3-@lgw3 z+7_Kts)AHd8oS)2WtWsvu6xU$D8xI~+iUJOINx^Y*%~9&Nv`>~UizQtaqk;G<)Zr> zrgCDwd*prXnsgkUisE`D7WCA`W}K^~QDDS=U;LdHNgNlR4v&7#SNUcdRp@wg^d76q zMdYUVgZ&3}1{Hj^ZSyO@rPYUPVw>pZb4!b2dNbR+qqWrNYw;}ZVp>+B>H<9mN~R&P z>qRDNtb@j91eD*NK z&_FLp7(A2^<~w*inX})$-?#(jZs|Z?HkJjCNVZB$^9p4?AB$UY(n~iV0k@kSyOsw{ zaR8VuBAbuN%l5Glc2@!NM;AE5|L-8GRsN{Q>NQ*7cfX+*2p>w zrWeChkgyo;!;OM$qm`XpdTNEIeqEYaY62A@C-4yIb_*cSR=!AtDQJQCH-XB0iMW6q8ELRX zKagTMYl8*oKI}w#)*okypyL->jG(E9LDjqf&uhysn*Dio+#2{=MKPg%1Zs5LiA-mm z1}tN+ag7!XGSDnV@N0J@yoJpGN4nx7EVkdTSR~T`9MWjFF5t_XgEw34^r4X%U^;L7&(IhJl400rv}B_E8Zs!wG>Nz+qMI<&eR0C_-MAAotM; zIHcsxGY#|N1i!==!Vvl_@(Fgdk78FU{Ge_k6(L-ViV}gpR2h4aP)ZOOs0(+1{mg(9 zPYG3gxVD>pIhF4*S%$D{A95ms6M%rvgfR0*+!rqtm}Z_j5}uaU^>veBpZQ#vx?0lV z$XO_r&RtvlkX63O9Z~#tAk{7EWn#m=g^Ha`75S0V6+2@jUBjl|e1Gw&Um4co6F?N-n{n$#aL_Wk znIwE7QI*G1G_2{?ZkRF-7T1?P0r_1n2&6*Ny?y&odf0i3uUOMZf*UbKq%l~i=0k1P zm@}#Dkq&41kT-EQte=yicqsp4P^ZlC)L9|xL@OD|%ejx9Z3$rnsb&7~(tt@l^NWWk z+O4wMIUm~>V0WSYi8a4b58RxUPS%~VaVqnxPBp8MXfnrq{D+krvfBSqqBm>4`f+=W zG&Ti((o!?QB8UuQ%NfTy?%N*Cbh&!U^SKpqpdWKHT5)R;nREV&;zdq+$yG6%w=TT0 zI=8N4Ra6WAf-}HsbXe%CiCpZj;G4Frv6U_MmiJR?o(GivJIgUCfh&L0|=SvB@jl@BUSCRfzpnU zu*tZ9iayKR>+a{dCcyDymOxve@?lPf7I=U}ix)~R;vOcyT;3Pp96S+hs&Ur&_%F}& zIU$m@roufl9|?45fR%;h4gZX=^Xha3sE4H_!X#Ak-y5^~sFqb*DiSb#eStU|K)mRm zHEusnQu!LJ@Z>8Aa0wJo4t=QM)3KAe&i6M9>GROD9DlM(0Zl~`}?est;L z9#fNA+vDCnnjdF4nKAM8K_YQA(g`#EZ)EfkC3{1;i%+}a8HD}nJmgp1dM*7;rRCsE z-5#zCT)>+{n0ztZS2Clt->ELw@4(!UG{d3h(i~O-*JFDA)>kKihF3PeH-62$mvhil z)#X!K=UGu*XnxYp(e6xn0yJ@(7BDzkw;MSF_=Syi8o5SDT zDNRgz4sWIC$}X7C!Nt^)3J;aZsiPi+)mlY&YJ0ApyhC^bksW zCb&K>;wHoY(3L+A#MhRtbkBh#-8>GI*z8SrWKx$pR_yAJ?qxwD?5@0K_qk2Tu^yii zhJlkO*wbr%LnMq_uLJCWKe79tZ_iaO@`|+UAK_~CdaPcLe|mbYE{E0Su(}*pgX4d; zC;yEfp5;IS3P#v~^=x6CKlo`I0i*{HNn^EsG$v9vozb8%SJ=qcZXacFf@YTa0@7Lt zXkg6JPZ9m3bfOaW0jz*2Dbfl1B}CAn~k^Z4jTjX>0NAj z`tHb4DQKZ(g*KkC0co+{!LkMDkE&_?Q0@v*UW*2-wR&CAJs?rZxC!Q%jUx%nlNxO1 zZ&WLS15k%RaR@x;5#C=u-)|I^)z7_vRE|LFKC6jXTZ3QyLB0KB&3~b{4+1|p4u2@?Qb&KIB;Z*ryEy;xf>;Tto-jCMr5H8@Ii066CBT+DkkXDMQ&zh` z5(z%TPUQSTtU%9WfeIr`N25o8gWt8HUhl?bGx)b7TfDUD8>2EDR%q>yB7q;@%EhXA z3n@FWu*fI-_7-XMbF7?ob9f|T3~vZ*q(Ls%Vg-%RU_T^j+>M(dFQJhpa-!&K?qqs5 z37m{N=&7?C((LKG@Fy5dH^quD2%NdvK0dUB5i%F0yue$3ic9L2)k0) zaDgPzwquSaM(1`vPy|Z%pOS&criELeB9;yP7I1l`1Q%PWIA0?$!%ND5A5DG!h8 z`vOfhO|GYMHgDcs^j5Z%OG_t9O-|>5bj`U`MgBV;hk9zxJomWr<5fb~>Cb6I{};=L z`NU>Xp`2&$nM>)vOt(q%N!&StTN|ae&LE$IrRQY`l zz7Fg9^lXpmW!hx&rTQuZVbSLg)m!?7aP&uDd0CrasxcFXEq`uiYLAVkk9v7>lGGZDQXYH4OBRCCu zO{si*Jf+^}j5vr8wFyAnft@IRxM**Cr}RC+R~hK7iKH2Hb-WgVvVRiWr34l>de-?% z%{Q&nlI0zt8lvDGn9_?A5-)EYd@&;?wlIGuE$#3dpDfH6Y?k>im2fp&`jn2k?7b0t zZetz?DCI>&i0W>ko-R(VR-t?rwxvf-MK+f6$fA2n(YOVn;m|7lUlF^HRDXK5qha*L zskZ21ai{qmjM(~B3-8P{rpd|4C zXgjsKF1D+ux}4*vFBIzv6!947I;&V*ddXdKKst0dZ+-F6JNIlkD%Yjv#WBInlv$U% zZS0*fV7I5MCh97Yrad(Y62xNxccdmyRi$v+c?1Lg{U_iTSQqR2(KlJ}QuBMA=OJ#K zjGYI^-=6Od$Iisp<-b|@GK9~!wM}d+Ti7wm{Q_J4aM;7nX=}&1TiQynT0LDTj-k;Q zgmhbyO;1@At~cMU>aD%A{LV1GH)bc{?#0-rfE#a*i4PgKu2f*uc(pr8Dl}E^a&@Zk zQ%wzU_21X?QmulYn3EbG#}zxTT=Tl{{oKW-LvIxHHVQ>B8 zl%_EjwgroGyrS@NGwtX;(DF7#vrShc`B~W3eh9}Nneh(H`T&t0ku^0}cEhKzy=qAK zjW;f1AzZ2EceVhqwS8wjD_vRBmI6!0cKiN4XaY%yrzbNcy09+pDOZHMLTgwc!@fy=>pIPmP8!u$V*2 zNi{b&CX@@*u1FCV)Hp{&|KTm?C{X&~ZZ@g?s0>9U28)8oVDBv(UV*(o0q;Tn*d+ss zzHy`s-=bBw1TuX(gjk@pa)5WR{MbEh!wW!4-U=o*vB#I?^HEx`6B`OB9>k9NF~B&amH#+VMOgVmY&!Z| z&~PbZ^|5>5S?8`ppnn5I=VC~uegzNGIzacXL{3{tir&gJY+tG1!KYlY5wbE0EEr;~ zjC!k_S|CNTaOGv;)OC#KC^Y zPS69};Y4E^0x)897gFr!AS>$06ivaLHN1v~5DK)v>tAY8KB{uw`|tsC(V)SvySszE z5@61LhIse=&g6)D9-uHFMB8N^y;LO`bc^>aDYWDWXdgMtox4&Aold2vxFWPneFNjPfB8AkWip{Xg(6H(OG z4XrjtcP5^C9=Y43b%Adn_L$?2+xvd){Q0y>;H7O9!~B8x!RA=LL>flD#NuQo=gXy_ zi+rGPHor?2n3omwfK{lJyLHBja+fYCT8`Q#N=Kc6OxEyO`l<5Qy0wh?LS1Bx=-@w zGY?}9F^e9|DW2ilX(}V~OOAwFaM#pt#a-#jOZtm&TwMOLmlV`Y_~MZ?v{k@G^H@Wd zY#(DQotwcyWuWimb6|?4+6VU6s6DJ?xNE`KZZ9bN!|=9k?s6l*kv+4#&z3Hmx(_z9^2T)(Lg3qKACw=JhpHDd<$!iVd^32NCPv}`36*>=J2 z>S-jY&t?6dPgwCyv1E~;lrNXxAJrWRxnt>45Om9bzm+QX5|~QP*<6u*6WfQFw{PkVuAgR9y8xfL>P%J~Gv4mZccNXSL-0M=6rz>Y}+VQbu&=*Lha-~Tm8P?fyEpOKhzPK6B*ga5fl2M2m zeRb#wz%{H+8z>KENOSi)a^rF-OLJb_3IL_ZH9ybNQf1DthqS%q?|_O|THMF^hyS#= zL&yjZ-J=yS(q)#JK5%yzeNk^m38}uFje;h!D`&RS1{BfQA4Cw?v_Y*s1BQ1Xkyk$h z0%%AHI|_$T0Ap+i5@K()qF{hjv28sb%jTk|*tTz|Zgz+twU+|hWSN2R^Uxr!29} zwpBr!91Duy0Hnl`r~*luJ9A}<3|}`W(%AJ*z$~Q8&8P=OX0vrz7y|Rpz-1s0(P>kv ztB+#g*bUMy+{_St2EWp6p9KX3(}2a+72k`D>gt|?nh@G`O6^}1a0s`RmS|9u`7E}* z0~`gZUpIgTJZSx`OhbEaI?D~JkS|CdA?GC#OGFwOExV);h5HDoF9A0Z)O};Sv{>pn zaMFq$xllfzA8m-vZktcZBf54Npa(_Wtb8Gs8Q{Q6?O6+wF3_LeHC3i?qQ#$sXnFw* zlBWP(z@qX1Cw<1%n{BmW#9*H;!TLKqv zHVAN&Zq6#e&R{^|7#hkt3YSfn$Rt=d+q#@;b zf+XppJ!iiogsc`_U9fCOQ%}G#n#1qfv7l^Z-ROqm0N%jnT|5uncDgS{4zVOol;~=u zL*{kt3fugDJnG)?bw@iLVgn0XVve%q5`1-iY!oG4y_+~fqj0blp$H~`okG@D{0T$I zAJGpWM}2b|$mx*}8c^$~K?m(+HnPwR_FHU5yXT0#AiV-McgF#Q$M{plNaYZQmb`I9jBx{HP!dzr3%*&u3vbv=b_B={!D3d`?2!^ z1vg}`)?%s2IzF(spFC%LPMj0m_-;e0u%u#dPS3@}yW*{0i!JmhbYOybX3CC zenI{)rI`_a-B-f(%EmpK!m)y!FJE>Pz6zsenRSd^{d)oKv9{Q~SjON+Us92dF}Pu{ zqm~p@6ahF(a!q+w?CvzN)fIx;QsF3ozNjtGojIOJqy_e#bxjMz>FTFia3mwE*h8&f5hiBzN4{r8;;I<7t17R`w9{6PWf9XehZtc!m zo)FoQ5F^}@sk=I8!Ol&cUn~Fic#x8C?^bv2=nM7@IeGCs_$BFSLej8m#@-D=1c$}G z?;pdo4D?hKTuwGAoKUqF#5F^y*Ib2RB|5{aZM65>b;UfM>wv<3$!Bn@(#XqS0fQ&F zM)`2tq0ihQ%k#oYCdAI?BunGnVTS^YH=%kGn8k|AK;2_6?M1>R=Z?#^Lo&uJ-d{U9 zQJOI*l0Jr1UShetKJi20k7Rn3P1U9)zv_BcjCNV&%m{~x8U~YOtogh_@@9ARv7;^_ zds)g`LdLhaSvg$4+tMnbYW_nl1T8WEmk#ULIq`NJaNVlJif=~e)uqHV&c_2Wr16OL z+r=C0H%l7xFvoJeTR$D^!hZh#nKIhSIO~;|k5!r^0G)mH)GfEzqkRg62j>nKJ-R$B zx5Z^Mao*7H%Z3}ooaRRf_(|M;lerJy4G%{y{CXjZ@w&MO`+4Z0OnqnB`m|fAX$N8s zCwpIx*c5Uw;IeJ{mtWHA$@Cp~LO^cG+fK>ej(b0^c(^s(2s$sLA>yF#g0WFr2Vru& zd%JoYdnW9IsiJrEzdzpm_7$&4rB71;7?8Lu^xe5mw*ig-@E{wtF1K*&MWUSE4wzI= zVk@xpbST&m@C-zQ@T{du=PvyNp@JrTKLLR$k0P}BzGWdK;09Kb>!(+uCoqd^N5YUM z0C7(v|9la+j8-m1qG{r(Q%nR-Pu+OOZVAhdrQedMOm5BNz|97`3Ke?GZxt{^jgcI17ZXDaTYaG<;pI{2xCd>@Cyys8u zao%m~5}n08k7l!eS$VqOVQEF^K6;`W z(S8@RyYz0SLCu$oo#8+*0W+OCKn_=c^w@gAD-nx;4?pGwvAOR-jWfWvX~hTrS>w!g zeC-6gS9>pV4D>K;|Iv%@)&hD%P;oAR+W%yC6Ny#;AcMsoQgya~P}Gq*o|8&}SFIEk z{Uk)=4FsZ8i&&V~9vhvc@&y8`a$lZKzyCg`slw{zdD7gIU58vb-aJ~Kcla<1FBfe; zRj6T|{VJ{rp1(z@OQ^U=FIP^{3rNd@Gy;zExM#vyx|`6=4+woj#|g89#I`Led6`|K zy|H`acBtw6MsY>Qi$WT_dHwFe_quN`znvwzTfEm}+NDyuF8#&y=S^N7Q|Z zWl@nQfxMhQJ4|60wDpCisja0l69xh();gY<{phh1ql-K3L8{2@DQoRtr36bfnHFRewa)gBX;(Zk>Jo;&G~5PO^?lLR zU1%4wh4ydM@yV?z)+#l@KC?|*RNv8flE-;=8qeN8^7DakduD~)6&WXn>2a8#!qvXr& zy%NGaI>KPuc(!TsQ}Tq^!jPi)#`qqT*Hu>sC>uLQa+#bJOW(H)r7yd5f&o|nHxTJ6 zQZN#V(k;{g9lWw@6RfpE-k#j4h2Onj~}&pvflwe)5uxC zeT&iL(f1BuPxsf3ORaIjuOrp!o>*=vc|UyS{)B-@r}z4oz9kM-2S|f8@-J9Euano} za$+-;@S+AWo9=L?l=nOVyzz6~OCF&Ml#<2#dqL?%c31W|^j#tC+av7IsQhuQ>%c~# zbJ3hh3$hW`Y3-dIXQ@3|{<}-`*DGK0e3Gqq%LBhdyeXL4+Sj#k=!D=6O(_eLi++@) zjdcZKkzS0B$DY;b6LyhN4q|=JsQ32@CF35;c%9p|Fu%Kl^>FZvL-y@L?_u}9ZW)q- zl8o>*y#z3DuDv#+elH0tTHWzMS*vyjYT-oz; zn_r(}MZkDlsW-tzjMG~_xlw;mn1rvgX5?EV<2;Kd(xU*tTnhzcjuI6IOT zpmb*Rx((V2^ly3QbMwr*P#0ks2s%VR&h4>cCt81UtefjzeDnP^8Ajj7-|+;6?Zo5|wnd=E1zd5Qwc*76(fey#V45g5rRo zSR1IUU&uz98uLRezrK~`swfG!m|X|b;Y5+P?j`_dAzK)0z;iJ2+t}}hZX}TXhnM3N z2!nrzEWiuSUp^sFDndu0!{AuJqY=N@jfj3yzI`cY8$#~*gFL;-1>tKA%-#&hM1atM z%}SYJxgjU{Y+{M&g-}`msH6vfLgMLp;OdBLWskYMlmIQ&!<0T`zmBp1{OrZCM>NC% zT;L)W@Uyu`38OEw+2GX7G6pyWJeFYHfy!9d5%9~IZ%T6J8Ad2@d@_EjUv+Vy4`Lv#lg;TP1^+P$G&IIPXfAWFMt3?8>qe$jhf|NRxt_xwSE|XOLP3yE5 z=S#wOOKVhZBsI6sLL5JRTR+r&?A+p-L-8+q4n3!HpJ?=W`k1V(MhvEnSaFH3yUk-! z>D>Y+u#70wj`y~9Tf;xLn*?`rz_Rx|^H(y!CC%bei?v zS#xu8!pu;ZqrG;WX!oqf!ur!Pr?CUH;r`8cLDAeo|Cdh`vsh!gXdl^ z>t+0y&gRNMj5HC6Iwdcc6Re=30I;(P=i15Wz3iD)j$D`1*D8yzH`2JGn>4C~4u&ub zTg17N9_=HB(1fBdr(9FMArv0cT1raPZUvrsQc~QEM`w(amGHoAm{m zXIS|;9Z$3pc>?rGDY0<)ET*8Z+&|N*ZBX{gwRc-1iM47oQkja_BYNJ(u7{FdX}Z-{ zoRrj6|6!P(+7Ik(xQBjN+)D7i;%#+g%$qx8c=ELFjh*E#5}Uo{D<(=_k9E(OkY<4G z1i4r*b33=tXsni*;OF(K2{A)j0hNe=AOgT1po>`Pc0>f;E34TX@Mcz|Yb_z#R1sFp?33isRhqUTizU>(k}U#*boq*y(|x1u zTnw(=z%NN^je_xiIrn8fe5w@uZsAW;oV+V;>l;Adq4|)_m0d544R~pCZKpjvx|6m~ z?0$RE^J`E8{IbphzDYS2{G9>wrT0c4|#n=6ftxEe#h*+bOWC7@B`0}ouEaH;@n1VEuKQwz-+d0cBI)tS2oEc z+YF51%SpdG_Fbs>z9oyBVL4eUs-S`u`R?LLy()w$g0iU}cPE={coUy(>M?CkjwxL9 zdT&Yt-*`zOD3btA#{`|n%X1@16kb6?DfAmam3O~!ijvKQ;uclUDv1!6+zs%q)6tSg zNWU2J>eW2K1sVqDpWONSx!j>t=!b}mf~s02Jt(MA#d-Z!rTMv$A-;mVAC8o=+4q-J zDYHSde5o%8nyjL>VDq_aV2D#~2YCRX=A1|wkSI#&1LACO zK;&K)KiG$)_=x?*sIk^Ou*jq##lUT`rV*I(>yJ75yRaF=x`Qp~ejnOLN~STv7mJ`4 zy1KYz;NZ5DjqI2zhMfZ9lNB>IG~%48241H8Zu}nr92QOh=`}|n4ky6FLMCOVOhQ5c zun3rde?T}SlmMT%70rz*GFtKvej|%dr9VW3M2L?D6IA7+5`c;0MPWlDLEYwTUClOC z02m{>uhC+Ulw$z*_~FrQHYyN!y^h}hNAD$OX#t55m-m1Zj;mbYeEJa2#&opo6`Eb$ z#lkP9RngQmb~$oI&@{_fnrk=xM)7ms^`i()8Z)%29PR&lTQYJ#jeqY&+oNZa9EgqN zb!Xg8@LU)jwyS&{FDr}JvZt9C-fGH$_w}rSPfK&Y@x>o|u;_L$WFY)$l}Kc$DogiF zXbp}bM40(FOP_Npj&kU@aXUHxUZ{q^_ZT%9Ys*2ySEN~&m#3zc?KYd3q^S2@N{e5k zuY%&}-+;O5us}+tR|)7|7~|1O?RbFg)xbWq$B{E91`DH)#`4}j$-xw*qvT?uLeKkO z2)f0obwpl$WdDxX^?}asiew+~@s&?L=>a+!1jDHjMK+@}G zA?roSskntR&Ee+W>AaS@o#}1z7EayrLjTFuVWYdk;nvoO_O% zcb$EztJbNP^x}x|V$6Ek?U#k@FGErIkrA=sb0b+^S=*0kTRlT%4^}g!=FpFe|8h9D zOO3m!vUVd&_O!WbPpX$%jh9z3ki(fTwk$kwPWR;oNEo@*;+OZfu)9hd%6H5Q!$+5} zM34188+4V|ZWONfmfP<6NME4P^lJjok9 zWs?Rq@mdh8;2NLl4$}9jEa)E2-JoOg@|jc1!e_dg)55NV7x--vtY2;kse7iOCKv4T z*lXO8Z$NQqY=M^exaSa7J)yUrq_h-|Ez@U;#U13Iffc%+qLYiFN5w{O*il;+02l+h zHHsdox#T7$uwP~P;s8t`15Nd#i|vg8_y4QF`4z1rVhO~y2KA-ziSzbsgad2xO1(C8C zH3zFLMIq}=7VLAi3A)+@{dWmH|2{!-^-TXwo@T3G)an-n9+HdyKYS8q*mnazd!#ft zL1}hiPhw8_1~R7=$-M^Xe<0<>x%>1v>WW}RB^1~YwlX!4L_*dh44#G9nMlBt?L(0E zV^{3^s$j-2Lbs2r5^Dw1nCI9El}lY_N2yFT2HR``FV-3b5r|B5yl^opOUgwXDKoH-Fx)x&Zp~tqk^9-Zf68eC6hrp ztX#9_vq}9{$%)jXRhVbtTLcMK&O)B@duE3Y%!!@IvE8`&oNMht-Qx>8j|}z4QI7dM zi=kDu*aSV{ay|qnU^FB2Dr(A&pyUJx7KE9W=)je5=6g1pl|9$LCvmFc(o&?o!r1Yv z$D7^G`vl4~8>Eg!5=a9RDVbj;wdc#K3N6;Tt8O)674Dbyrs_70niC?q3R-6(EO5~p*}CO_Dd9Jl+CSYVwO)U7 z{J4%1^J5>(V39wFn<>hjRd8RVIMkWM3OcIyhrIieH8j0L3nG)r2fRJ}8tfm}y$K*K z$fwK4roZB@PMzsZzrmp^Y4ICnw3h=vmSFz#J6RIHYf*lq-+VjMJHhK)$a~g1&u!T` z5Gi%$7wl{71551Nh7~v=1hso8_=J}7etgXecn4cEI}Z}-Umx*mg6$KN4g{*_hn~YE z_6zf~B-8PWl$#BXNex0qMs>A;*lWoeZE$}~BMRfgEY>vMcan8-2Fkq(%`399i8tD= zFCA@~+eaxgduf~QyY%`u%7-a<)9|`^6OS#F^`aRn=C)~U1l}FJDhyt=B~I;^0y7p6 z<}He|ehq$FsC#q#1CCk2E6Ld&G*08OH*4q*pjH%PM*qMgj^%A+T{)LerCYpGEbz2G zWq3g`XCWfgLOrD9yB>ToLp1oV1@=S>XKXz5T^r5x-VCP0C3vVajx~uEfB(MhkQtJHT@v-6DG^1mjOz+l(t5V_Wl5)?{DI>T%wtE;1K|YhKFXs4CFv=`L#RJLSnr_D8ky@#A=mxP&oar+m zyY11A%FwKLGMpJ0)^}!VDrwv}=8U5NBcucaH3C zo&;?@re>fz+BR59;t1;~FK!tWs}_Lbu*IVivIo43QAbojRTjm=@F=!oYK!_gx|)Oe zK6wLFUP>$vhoGuJ?Sz=v+@aJ^^qYJUhT+Lr>?z_ee9Rir*R65!V4mp~nLb}5im$<6 zISH9ohMj)Bo3nT+p9IC2n3%b#cBx|S4>3J278nH-r%4gwiIJ_}4!AFGnC?bz zP;sb!#Yz|~G1}_H1zoklHe6r#mbi4o$c4I7CKKATZ=<+u6YE!~8pA@d|Gv(B-B2Yk zGL)D-Kh&Li5mZ#SWf}M}fS}m1QJllVgrjv$Y?ph7YM8bRKtTkx(G!VS0Q2KV44+|$SgYFGp&Rt+hk)H|_9 zy*7*UkFjuU9Qn-|g31zl3K;;~EWWS*;WB`B%0Uq~$`eS#nyi^$>;t3}5z{CjTS5-+ z3m7ot>sf%D(ypf?a9r!;x1EP|5<=P*^mQC@4E$2^JN~SZ>$ww={NKh7d$+WliZI&S zpnGy%F6QQgYg}PxrQLOGZ5=#Z1f$dTL|oY%AeXo6tT=P*lY^WfsvskyAYj?1t5;$; zkw|QNARD`bWkQo(B26z=5M7JEbr60GJ&m#Ym}Z zCzsEJPb}kZ5bb;e#isxXE$E!ISH+TU$+;qpk-Uzp_1RgJALdcqfI-=^n3O^VTj-2+ z5su_Ko8$LHC^2T&Knst+Yxo&D$q|3-&e(O%=5Oy_DU~hlsq$*_?#`=@rO~Qlw6{#B zvXWV*@-7PpN6>%g8L<`_c!2ksrHsggRK47y*A&t#pdtLLQmt7WCN;wZDzmKSkYmg4 zt><~S_071a0Zml%GAVLb6u)q+w$!dq?ob}Q?IkCAR_a>4ctdjJRYv!}TOQSSV3UYz z`+ViIKsaxUM>+$I+Hx!d5*;Fp0DL-pRT4Z@uMw;&JG0*wa3`!4YC4LWzrY-FWvOd zl{}`$sQo5Ac>M7vx-@?(x@U^)8CP2M?1q3ivR!z%mh^;If+S z7uQUAC@xA(=8ZE#M_zRXkmJygpD(9p^5I@6VpLn#w)6sW*N$K<~pCd%dlwj5h0s--%_uV~hd< z!D@eYwLiPspDhN^<<#okuo?_jgTZPr_%{y*rEULk=ZrsL@(?axnXmzjLV{LY6t<~> z`3%=tNVjHF_gEbVYY0>=I)Wh6H>b0Q8O9ZYj(O84Zexu3W6!9005RI_BXQ5%CQ6NbTo7yEBs*!Me$YQcT z@5IiU8rKL*T@9LO*iiHPeUdgiP@DfkeL`70;9ApafNo_iwss!DS{sbzY}wAU+w#-q zV;X?;p!kz_;JU!sJR#It4W^&|O?_TV964G2IIr%{#HO{gZh({X=@uvOF5U5CHmlD` zEhboM{w;MVVIOzRyzkX7JQJF^usJ!|@HkKIgBx4VIKX#*0ymI#W`J(M+vfP;yItqu z6SDI}d_U*1ZG&^Ml=%FtLF zdI>kK=(x>qcob^626Ywxy!kjMD|sA%9g&&5*UN&7Zr{9N<}7W@7_l|*4Ldw%Duc0cgbujxG@e?}iT%G#LIURnZe5sEdMm@~wW!a<*O`=$ZgBP_U&HDB{y@RtWcez#T$`SCTyWy@P&j)TT(dXu47Ere%cR^6}8v66l z_SrSSP4^S9^+968snc!(#KmqzvZ!YnHUiJC0RljzJc$yZT!gw@>0Sh|mGo)ghpD!N zKob`0(b^F zs_#T8oQwp#*E1_9AuyXccUlO1 zEHZWm2To4uKR7eWA(_zhAFAFSFr#KC@`*MZfOE%wVxP?Vs6Lrg-+j@=M|K;}CTzVz zQ^7>UK5ibZfU_$+FO-Z7BBk2l2ZnwezK48}xcNv;1gQLe`(n4{-{!UJo1*AFLjz zN;C16b5o#@J|#El2&gIjphFd2CDW+8W5S?j-gU9K>C2&~U=FH-*m8bg7%NMu_Umty zN*{}uYb{}SXcXVIXA9jysQcWK0{8YJ!V#~lyUjbEo3EE6ql1AY@HdK66G|=+m>G`D z23D5rJ07XT3m2zIK#U_c`*MqK;)59voG^U`9y^Ea!sUobPZix8+ui5C7ou`9nGVC; zsvl0h-1QaPNSp;oWdf^!!X*9>IE)^h9q!BaAphr1|9$8Hg^RjJ#9N8mLfoEs>NiGh zKe*-aZ(C%06!phs#(zPBnNf zX!;?(s>)p}>`hEbOCx8Gl>nq|45co<>~`k9Pn2*HU+D9Qh~Uo~{cuw;r>pUmjW(}+ z#1qdV{bzl8S2iw^Lm>}4MZz$`a=UUiac_ml`b zGtjN?FabVH2zsE4@I91~fzNC*2%8y}($)cnM*ZQhmD?-*u`x+FbqZ$7{+?rX;Bu%O zd5XyM^F!wBStC{;9r&B@>p!p6pU2MX3#%6h1ktJ0<*-_l|5GGgT@I_uVRbqD3qCv@ zZsvgg1KSpKvSo;^WI-k~phKZ{B$*ZzjoTQu`YXF$T2{7Dcw$ zRXkOP4rALqZqvY0N0z{VMFcbu3vC6R4L7zA3QwppP_tyhNF^AjAwEP}-or2ezsFV` z&8}Uhv*eIBAhrP}U>pWx4bm2MtXUiC_2BALe#31V7Op6de@qY*4LytE3e|{R`!ZEn zwu-GoJC zw7&Ir(1Ww{>YWQSLgK&nh^XE_RC?JI(Duim?1{?#uLhWBoR4)qxQtMDtp!ibirS`~ zL(vo!^{yKg>*Ep#=ham}PxK}e%20f|FnK9tmBd;ZI#iEWe?) zyf8R>=({|ECHzN**UjLV>U57!dE25}28qsiW8dyQv5R#wb9uqsrO@t!{+?YaB9;5d z~=L4C^~Pz^y~c2}bMT7l}9KoVWhSyT2b_tFA^wK(u4bGk$Irr1#5HBYf`?{z3-YaXCV?*QdQ!!H|XubSwG7sc!p@HRj-kC8dT8p?;$jarn`Od~n;$lbHrT-w6x_AB&~N zM4*4!Kz<3?@5yxj)_yg;zOOo3)Tl4ir|OBIT=XG;88OlAPRAM?&K{huiw}S>=(>bZ zL(?qHX3w|oeMUs8RmkJ>e>D@6LpCq(VeY;miykv)IZU|J2DN{r8Z}r6U6fY)QI@9U z;$}g69I&HbmAl`ekzed>+JU0{Ds4?e(ubGf*6SP+(T{Bj>&FS+WFhUCBPBn&gy9Wk zu-ZddElwr!c!ltet}Gv>vdEl(+JH{u0YfWqRbST_zRSTgm5GAtFev+r(ATOgA~td9 z?N{CK=&v{!>K{HIs&d57-$#6ILwttU@KzOfifLa+Z^$A4uG5y+W~%sK^auKlxOPe^ z?f%8^Y8f5b&96qeH&ds?wr@~>ElDtHGpk&6HE1XY+ zo40$GQmf;9Y!*D5;Uj`nw^)>@n_=^-Cw}#Wep@<~VN9o_VCK?)W|tgX=(s-6eJ|a~ z{%~sko0ePDHMHZ|3tx{LUD~9oCHY!aajy04?#2C!m7BMWO?)Wm%_}QzuKJwN)B1kv4WSaagf8;IKI+~gxuS4Ygj7s7Nw8^SvvP3h5aB> z??8{@q3PY=IE|2O*o7;YH}A)dP(d4k{^|53rivh?wI4)gOdrLCP@1z)7J_#xncv`Q zaDE4A-XwCuSKcC)>_k`1T$tZKaMjz(y8Bw2aLP7Y5w77t$6Cf;m>bR<+M;3Al1;gx zMpyeo>J~cN_0YiQf#|8xd0&gQ=#<~JXvEcO;HdDnpvpSr>2X#v#{(Xnv*ImwKif=x z8mn2~iaX$c?oH5|%a^$4m~`sI9?g$+IF9C;;NT6N)_vdbDfg70I)ST?&Q_wk*n$7JK&q%+3 zEe94Yr4(~=gb{u9Wk-yQmV0a!SzgSFT&xZLon`$Itf4Ydb6fhwCv|r2Q(tOZ{LU7{*;kLy)tv z4%ij2JU}M$&!780FT{JvjG$-wAwKcq`$L*XwHb)NMbro>7xo6gMwd|31lG=un7Xile z>o^v7q%<7nm^tv1y42w@!3`|AI(ZiL+S>_jBc&ag;&$%&oYYI=GFaap@x#Al_FO_4 zyLg-R&HBtj($&`60i5%K&#t|?OibLoH!zK4wawl1ODoVNK3SA?UIR=|hFE~D8|VS< zt~+)fUUu*-a*xXJ2dk~Px9f$J_^}=$_ittU3^aq_t}oaW76#&el&XFQ`ZV(gGJ1#Y z13VZ{+ugBkS!PV=rdObk+`j0-xYPeVp7pu#m3p}X*4?aALwApMD!KhIx zdy+}~881i-Jp3;uc$k{Qr=Vm6_fhXQ^P-rusqClGWAMsgJ|B@TCh$xIr|&NUDn0@y z<0tZmk0{AJjyYo+hCo5m)wCf*q2Z3CBj7)XQ3D#OJCq{Kv#}%^g^g5gsiM*6;Eol| zbCRd8W`uY2X!^nJXMG|SLUAMN&5nlfQQE@3!EgA1Z>m2A1~In_wM^7q^Q>MH%LH!E zXoz_6T+*0d`|fz#y})YE6752pC$%Tw9iO;Q-IUWeJLr!hKtYpk2hWdO-c{+I3{K$c8yZ=D;3wFEK?R| z>o6yn`_sGWq$vPl$V`^&E9WT<{|Gzj%VwhV;oqox`E&v{51JYJk$z{u_Gyk-afS}5 z?BXn@W`whOXrRI6%dga*+i=;D48_Ae$-dERmG>%v%IY%otCohLeu&r|<>|Hc%{ufk z1o~N0L=DFniN1WQZUcQEXu;bo?W1YBwEjuVvVNnwA%H)acTvsiB6S8+y`#0XkBH5i zbhg8reZnSq2YW29ea!0LG@EJ2dT?XD-$Cnmf(>p7i@(q`I5Cp^l&KIJjG;7Qm%4Kj zyXAH{=+nGxp{(Q#pfQ$+gq_%jSvuj(JURa^(lf+}s_3E-cIysG##DQ%~ChdRLhPpp> zIomAxsz*zRrpsiML~JUN`PSPgHZ@Q+dtD%3gv?;M_#W~+88aEy(Jt$6Gr{kkDopzD z8j_!Xv*97-+<mvblxCF^3M}{r1l< zP!wb**7{9|WSY*>5~AyO@v+hw+aQvr((`r?-{Uyr-7&Vt$8~q}T?)gurJ4A^xqWn^ z1-k2Xam~j4MMC_`w)@mE0ZeQRLH;mZuMM{t&f&yZp35kkQL<}7SDN?0Is`Q|!C<>t|QY1?6 zy^0hC2}O!@2u*tEEeWLgKf%5CIs2Y+&pr3-d(IfY-}uJ&Y2G)5@I32TYp%KG3_)cj zuGG;oz*yJ8rJ)>m^Ml{s*aU@&q_b+B4M#{)558@5!S6W^8SAPb507Gq+`yRMTBN zPn5&MTh^$at2>E>hsDL>>70j;>Ijd8i@ugQ*`vhiYIAz|UR*iX!9iGWUXW-v_RNH? z#SHb`q!M&l*MZ5p-u3GZM_#+K{Akv#4x~xw3`wgZ16hT(gcWK z+7ppbZvhe3V1({R*zH}x*bHGD;u?h zH3(Np$w%4y31-UQBG<^Ft^yLl@*7hhv>QBEeogj@eWb}~!7)X|bG2T`?aePM&rX^0 z-3Z!+zN^0oJxibI2Q{Cum^d=v{#-u#vH#7iY+4q+6FzeK5RaP0j`yB%E}*h=%lM|{ z$+xBg_dx2Ri5BEUV2ZT`n{2x~NDpqGn}%jd`PYxL4BBgNxj}2nS5rD*96&{P>vPZ@ zdi^l}-%;2UuIFYO%DB@rOvVN2IW!|O69Lxz=zXtPYDcrHfDS(yW4e)5--l*}MH%5r z>hNPMN7uG|+Yg0jHz?V1&w1Dvf$!@x<>lntyUDiJLhoM+CJ15(7E>J|9Gcf9nEFic zJ^!62=YKMNW$4Yi;og1!NnC;@NtC;6em->ijk~VZ#h8=wN*7|p{In-8NN|hLD`kj@ zgS~S^tJ1=d)bMgq5f8X|x**+HQlVaIH7508aD`wj6OsDq6s?5X<xdqkfaqVTF!3j(X>sz2ZA?!h^TJ z?P>6bu57RkdHsUCk?PbNC+t7)gY^ZXapyry@u94v74V-oF;K}coe8o{5(Qo`r-6Bt~l$y3Inj2u!9L+8VKEI1HT~c*y+#}TeJBgVQu$AG6e>q zXB~Ty+&^CUzrU-{Cm)^^+4KM(b)HHfrbg0jL4cj}A z5`RDDM^K-NPqUrh?w8!_cy>XOrBAa9Z4958O__$rwyz&wkSx5^ykx7xuWHv6=^{o*uEtBQ z?~?9I<+ae7a6$KrKwDl4IW16{c|QR&NnH4@$Q~ksU2@pn)TZ(MyW;uu^@(F1yL&rN zL-zOYr+|LbQqO`T)k<(`(_Bzn=fa)WyCiSj(t&E}Rhf(q(Y+tnV?GP8;?U8(hTOl;Wf2=I z*b+etqQ3J&EMrbVM$qcY)}j|AoMi>NH7VQ0 z=KGFYC%u?bKa0wQgjGxWR?fnsE5*w4RFK{dWX*GDE2OHgO9qcr!V29#{aErV(-<)j zcPh|P&P~u_4Yt`qUx5!n9b~(32ZtQxhpq2RnC`QZ8;fWC#{R+9&iQQ6Jv-fbzAa>& z)E)aGa@AWT8-|T{;4oQ^8(kKtffqdVx{R{q7a+&RIQjj4x7?RuC7rnYORQs@jW^oU zpy5B1jXX|iYoj7{pxBS?@G->1$aTL#zaOBDV(L6*{8gRH1fSYFSFUreuC^Se`&@Bo zbh#{yjY&AYeb_{cyQg`L%f083)!mQZ3_ARiE!si@p`E&4uu2h9B{h8$CxXRC5Dlusc^V6&iq)`0f!fr7Q7N*c?bqowo0x6B z*9C=5Djiiv-5v^SB$n4e(c2Eg&jc|>+ZjqQE2v1XzExu=r5>R(GhRwClIjRdi5aQG z4plfvWEyG!ZDzaUcOb$5if^BEK{D(VI$bZvC)I1m%o(mJ)U(f`ygvp^s8G+)yLed$ zRG-&=og|w#ekuKj*1un{kG+*sm3d_1UZc!T==1Za;y2Hq@@DI*VBTyY+^4H*?=H@# z9DA;6z;h%oBkdUc*=|ImPJs5==|<%%X|2)`<_1qzoAWl_n?JAfpSOLCvGWC zijr5uGaqA>{6OW&z}~|~AE}ZV<1?#`!%Lp;PhD+EFqksVdgI`ab}}r|u74A-Du~pB z#Xm?Y)_IGQo9G_sz4B3Haj&pU^R5?B0=6bQ6eM zcNccYTv!*)#8_l@HNP{U-PYz8MDONT)R*I{!0&4)ym*a}&@ZpdD>z!O#L}c3K9K;2 zy~sscm0#k?!p{>oW?X?cSn_*Die=1bY+!*%3%>8uEA6|8+clqvsPqtpJE%11s;N~p zrR4cwNrnHi(7gic=jzU@`2L)!_#e9!yb;|~b3)}o#G~X_m!A6jnXV$t{OV$tbM1LP ztY`q{8U-oQ=S9X&#`~A$8TdzUEIaQ$wFbY>AAGvVhd)v362<*$#X~YdP_A`lF z?ma=DI-KYI9sy&Z+^YYJERi9kkygda}`MiRqyk798Y|+c_Vv?*w39u5fV#Rl{*Ky@Tin-v~?-h$W&>V zSTfMuV16V*{anKjZ|U6MTG~dsDEw&k0CW)E()F2e;x;Ms>brX%$t_LTJJ?w(QSoGu z-J^05MYc{-A*2gTHZG`RzQO{1o2qRnxr8uf-l1WSlts<8}~U@Pfplw3TZ_-pbsdLdioS1=@h-QjD?0W7uT5{F`o<} z^IA^%q!w2O{Ol8L_QZtL-}5- z>g%zoB|W;~N(XxDrzYr^E=TbDJT{cAgFo~u9jf4;m=nlp7(JD!e*2?5o7wps>bWbX z%|T@!_sKfJ0D=>a%A>G)?d`Vh?w=~D#;mFVq!7dhL?|K!4PDk}kOnqWsQ3K+G26U> zUw!{JUe+rtk7IWR&m@uln>A+YT@iq18zT8a(?GR6X7>1Ubh ztD4UuT;Wk8=?ds?rRNB&63XxhqVPPOx2*!@NSi2!Ol(Xnp%NaRT^AtgCqF9MJp3Mh z)C`3IzXw42`s}CByuoYClJR#Z@;$+D^N>l`6b)naCTmX63=QdsxTN>v()vl!eW0xX z7xgBTXe}IZK^zKyqbs3*@fL|W{G>nIc|QRfs)=;O$>%lhJ?>u9v$3QfzCpP8Id3*x zZRzS$Zr}EdIq6~^_}{(R-zcL0W3uBk$}$jq@&?m9adu9Mk)u*iE@25|^CeZZ!MK*#;hD!F0N=Pwz9`VJ}J6WqJ6@$a{*K zv4L`F!yUsV_t)r{Q24QX)X1%kJyj(AsB@2XV$uYf1;w`P1|wjw!9zgsEw632$9 za^nU|4e4UMgzDahe1;Qs*EHz^CDIE5YjfpgBu9@ldrKpUL7wOu%2B~Zfy+*$kt;!N z-K-*&$&RtrGd@8^Q5fq=_AIQ-385;_jS(Ag_|}zVPdYkPzZ)U2~@0-kmth5t6v^ zP|~nR#sQZ!N{d9S410IZw0wE+VY$)Kapk6*=(Y8aQp#QnQIwO8P3mHYCUJ$gi+UXo zPQ7$iuaNp?kyCQgi>9G=f9mo0+u8!nZ%9|a>fx%w8MQWzVani+lOhkUx9)uZ<5qQS z^nr^hb!Se$k!@*?$J(~~2pYBKG6%~gi17b>TO&X;fBvM3Q^HLA>2?C*JK1L%!XKLaR&H1m)s!l*o^ft36&RLL4wCMZgsSR^ZF|c0US2X%ic^b? z%y^?uHLx=NXLQ!MMb(4qX&}k8r2{8+p#Z>%K$y=fEs5^6sIYTB38#hLxF*Eg#!XN zBNx5Q6;5LX7gJ7AQQMyHjqP|i@Hk~$6FG?fZK!H#^O(*8js&gl{y^Z+uFUwOPCt&k zO;cmRv$l2mQHiAZzc)5FJ6ezsV3)V0ij2LlFSFL4dOK zdN{piv3>J5r!4&fyl({sAA@sK0Ft&d0u;KPfWfg1nIVBVHhd8bQqFH*E2K-%v2?+0 z_8OZiVFphp&x~fukyIUs{&B2#tirZzqK>HDKKMFYrn}znFzNvq=_9fFV3&o(Dc4%C z4~O=Y4~a7wsh#(kcHSI`Q4xT1ZBh5?DIAc!5?RLka0r%w+gO}P3z0mbf!ar|STiMJ znfXH8-Sw0*=H`ViG*8mcg{Q;bO=#9?zyfJ6D@cvvZZmf*Ni6TIrk(7{rH^Zyc?sH@ z^qZrfI;Z$top@_*5CKwl%K@n+(|q+ZJ9OPkxII+L_1n8GOrwT|`|*CAG5sX($6e2k z!ESx!o#H#b8$mGbu>jI6uy!fGV832f%hmNJ^pi*J2&lzI1%{NeF)V=f*kkn0uvJmi&LH&H0nVd9vWSK{&iIx|QN}l_5W#9jWY=F1enx5W zFoYhzN+)br1E#+^{vDudhtsy;y)|5$PN6cY3C{MNbi_7N^|4}lvLab~eT+7IdIS(D@&wbt4D3DVH(QH4C=?}3mu6gLgLb3xpxbcSGXXH1VAeL+wFT3@2_OH7liN~qnC1y{KR9w6p$$q9Uh<9K9v4V_<2BmWPE2}ax zeao0sOFF!+U%tPIsAX5w-<{MIXxzy3ZmX|OBV7E!9{-*B^P)hsestJ}X+->3r0Gd? z)Gd{3^!}dq9OVyqo@F+7vcd;?)G}AGHw8*zKGgGgCOM*MlYinDy{>50^BYE`fvz^b zjpDYbz(v=)axGtYWsiVWVd{ba$HG$3<&Fg-j>$~doR1G8FyC^G_oq$o<=MTw)$-Qk zyNSt-Wc`zm;miCv)KA$uQgk0o@U&+q1H4lhVFf zChQ3u6W>(QB4kQt{7op)6ih{@I(e?$Ua_9@_M0y0gboZ9_ffeRC3)8lKreplh=s0(J2R zZ)0!owB2OhcYVF7`P4Tv31w&XwZpSxZTH#=MWhxCw@3=U6?3KewH&_5k!^m~(x7AC zuA6(37P=5CZpXrk^K!2nV5Ef5iE!yyr*A|3S(~Z#{ekBfi<> zI086hp<5?|UrO~^Ij&ZF^vL!IDID4w2!l@SzEl;t{BSDPhB;Ds-{1n`GaqGP?YfhE z%Kdg?^G=*Y;)wN_;m8>M-PWdS0LzCrtNyCZmp zb_0q}%J|rjq8;n@U_y$H=>t*+tbRd11A7k#nxqM!N~IVwkKj-%knX~7ni6?Ie16Xf z)~PIXVw;ew1Sa)80SdisVb+cOIFZ1*xh>A74(Lv0yXoNmw`sGeUPfSl8x-fijRSoI zuWHc$+cmWj7fzR|A#dBh8v>Vh^tMn|%BeAEBN&X_Cewzo9tWo_2=9DsDOf#k4#{OCH(2`gx+m={v$DdPE+r2oa2%yb zHejAH&jRtI)xLNy>^m>YJ8{{hn3;>i_hJ)H9Z~+mZu?cH#{~=o-V9b=-w9f4ox>-~=l*!Uz#)tSKWPu8zWY)oPa&e+~j4R{|(nS%pw z95urI3D8Y~l2L$zKwn=BMY9|NKR)vBlB-HyT5sr0xuyeaU1~h)@)3%f%-LZrTpXU0 zdY=lzY4B0!MXTpO{fb8wD;8Z9s#+_9f^P`QI~~-Gdi{iT(v$mWr%#-LgxF+J<+XEK zPjX+2av}~Zzen{XysmB>30o3HmS&0^vyMG)$ImTfdF!0L2$trcNk&jqdC5OXk4Q@` z!y)kwINUk;FV=w#XeOs5LuU6q8yUQp%u`RFswpz_{<`eyS6)6@`NPNTK%B$mQ-{d? zCo%gJ=dp_1=h+o%fe}#3&i!1VSOtpFBew_~Gwo?7lDSQ0R^TZ$jD7X%$G?uU+%w(4 zZ0G!;fCb0cau zbCCh|y<+sYRVuG)Y`^m@5Rbf>&mkui;_g#Z@h6iLSaNLAI!{*VY za*xsuSiy&MQ}foHSp}c;RfUA3aKKz~U`E2g&tvk_H!aaC{`Xj>QDF)K)zM!Ax?Y)~ zqPN`gNumh~EZYL`e`Dk@3+RcM33924bxLlLz2j*27b5+K8gQ0(5py+mzUUZg%~$1H zj(ite6<1zk*8Tm!RJI@;(GAS&wqWD&@$nc_*i$p@zpEYpx|jbuQbQDCRf>ERnApz; z61N9#_~F)3vI? zZj&2vJUx}Jz%x^)0X`;Rxw0|+@*eH-<*V16A2AONw~Tt2dT#{_CGf=LSa=`qb5TZW zc!uSEY2>y|)Bm8rEK&7+YX7k_PB)&Khd=kFW$vTBuba7(^@zdUQSq}0HOw>#+nlO; zWPDZM@ZPBPk^`&_doF-%((=cWNK6kP-<`?AjD8e;J+z(5_7q_&=4IOLQjOZ1P z!QbH(Okm5{dg|OE;Y`YG)RoGTMk$5A5n1oN90BWO)r|wie0$MM-+jMUSbGbh?3RV_ zE{j+97s_1*GLgAKf$*y2Mj1Zn$ADMsNNmMKboC6q&Eb=&Yw(PF7^?Zk;9*+9m!GR^ zOB_5*(yZc+0r=tAn)19E$dlJmrr{ zU3}R}megUm)VJr{r1{uRrCe1u|G(MLV4Gg?t@8Lf3a?e(yPUGle{Ko$3 z(Xy)Vn33Zy&8(4EY=M^KPKmYIoqK}Y=3eBT`W(t`A4XRz>mFT4S?u_Jb8qd>HHzGs z54)?t7WKn^iVx;3L(KHm)X_+AKvNt=8vFboo3Q2DG3683)B}JiUS}=Jh`|#%kdTAf zx~FVhRBb~weG;rHl67G?kb33(kCNBjUO81p2mQFh3EDhK0{AbmpP0{%QO8Zbt&0vp zzFyH34UARgF5nQD-jhCicd@lQ-*tLeaQD+jonMfY2SZ1CSE@I&dcFRBWZfe0p@TBt ztDz&U-)dk~(LJIMl;4fR%(k>M^R>VvwzMpoSP^f;N8=j7Vid_n9Bb#$nz<7`Ib&=Xh?`0=%WWBnSR(*}5J^T&&0Iz!>aLKq+ z3!2WjDT-{g4X-B)cc5Eo;2>xR@B6p#^*@GC2!09%W&6(u`!o0f*65#Q`DZu$2?ij1 z{|~2u|B2fFj}I*tDWG7p?WlaygN$YjTrgaVH!466v244Pvqa{AfrQNn1rSAd>*Y&P zQQNiI0kjWIY+D!V@mU&b1Xb$;GK8I>z+mXJ0SXQ9o4BdS2skrsg3*+B!<~zV&Tj~i zQ4E?-+!Pp8*&l}r>M#Wd^zFM2@1>;P+BHXaaVtLC$r7tgKJ@|$RBCIm`Hx_(ZFP%% zXNT7HC7TlWu-NU8S4~DP{CvSHaSD5qN$-*dLYZqf7WLgI+vv_vNrd9tG&{b{_f;Ie zG<68)?4D-JITwP9o=#bML|9^kR>CQ=`D-YC3m(~CeZePu=`;{%2)c}D<*prW#~lzw z1R?hb-;fNPy|CDzEYya$`@TiKvTUuPi?`2AbhmM1k_z2v6d6Y44{#gZ_ysW>sr6c) z{RNros+Q&<9ZPVg@R5POXQhf1nC%0iG{}X!EtI`gDT`w?=vVn6wCOC`^dcH_vn)D+ z!~6w_SGbFo@CIV^xR#q~6Y>y364)|b6k(vcw2-!au@qK=6R~^X{1*#Sm!oIY&&wwnPyn znP+4|)tZjL)dh!genHaZQKiJXeZ1%#o7F@Pg*ukhUl4b^K1kdC#V0H2jurhB@2A62 ztX0gRvn2RjN9t5`g7PFZiTMk+k95EEBJNFDmec)yYkPZ~G}}%7RXyJ7%({|pVj)|O zW~W$-Q{nJ}5bn_>wl5d(?#T1L^dI%Sd;!WzNe`T2{aQl}pYA{CaMGeti~0M-BlQJ= zO`&SWtP^2gycCfI^ye#x&+@62+1_SDj>T9Xhl97ZVmoiFpI5v7BjK!4NM%IYt}RLg zQdYoIDnfTLwYzr>(}4Lp5+QW;e(lfatZEOEXXfAyqsu#eVm>hwes%uqV2eTgI+B5! zWFPVm-1Y@bk_Cf6ASm7lqvsJvR~hVh4aPmcag#zWHdIO#*qD3UJATvZZCR;tV6ErUJqMCY�=<-%-AP#8VikBvjFK+8graT`y$@GOD>xHkJI(e8sc|4`;X z$+{&jb^=HVy=jvz+nKz_@fYNjG`W}5K3YAha9+I#_e!}Anp45tp(_?f_ZLits`R^u z@isXahV)4`e}-Qdr7K;BPn@N1$Q@ExpU-|ikENlfdjV)Wf<9E$S#%WfGv(0NP6Q-JaDAlzN`PqI^UTB5+vE)syT8myd4xPcb_Xj2W{nO6ax7Wgq z2~fhW?rN`LV`pm!(21Octj~7~b~r2WXJy9beoO#Vmfi1yI-6N{0+kOxzj~wINnFa- zJKz0-fj^WnjS0dZd9rtmh{1dj6sV1+-Ea`r;fs?(G~U(X9>Vmu0#6;%2Q5}&uWI)^AvjjYP>flA(9K6>9f zdROe|(cl-GcD622;WyDQfJb^nHW0efZLg?&OJ9I(tn=MH{y<9d{7!|TmynO^9rcZ) zd>N+ESF?UWT)h;Lf?OER=a=eJ6^T7|62*aVr z0<(gloMM(YPLOc20R-{^@&Wu8 z!dlBbkkQT?L1>{1k9=Bf=dD74K_+*w+5T@9-GZMonbG4gcDOCPDxaPe!>l>MX=7G9 z85`rU*8&R@GhOIJOpC}#kGS59VUc1czv|1!uKH8MdcDl9=vP31*8%J{nt5y}WNq-L~ z8q$e!r0eZE)(2s?iViG3C_F-Im66WROf@xtt~^+7r>IO|yedhjXCh11jekM-Milsm z#>p>sJroxU^5niKxN~*<{!I-#?*IkL)KB*!BUeHGya#mlAUcQ0qA=}TR9ds*B#RQ8 zz{cdt&E?ISULvUrR-l-%ib?+k;bOoOZjR1KB7DJdn}*Vln?=%?fE1b^h>i-Z5a3Y( zA7P|0msz|2GJv#=gpl$;fK*d#t;wS@W|x3Dn@NrHoinY zkWOI)R8>U_`Zi`BmWrkMGhQ|BuV*$R82_m?|J0g)YRx~j=07&G{#!EiC*=HzxPP$j z|KtHoW~iaM16}M<45^M$4Gq^o`y%NhjI=87Y^WEYoqT2mNB%VrGG>0GW@DR~qVfwe z?+g%tZAJ;_$*-e~VE_h`1t1%sr2Psm(|`Xpa!#fOx|{>@yi~j;c^$NF_0T{)%DHJKYX#FrWdkLWEdqVVR(MTOz1+);ZW+CtWW^GT|Lp$`fYpWJqVlB__RNgO^>_qW1&|lqD>&gBJf_L{ABb>;Jc(mv$yl-Y1NaB6>4@n%nmM$ zalZ5NdeKJ~sm0XWd1@!qY8b;)eK4RWxp@NL&U4kywB-zJCo*Nh5}6yoGUkscI4-f^ zSfNHZexghfgAac%FbO{bx53;bm6;2!bdaD^z}Rc5v#|Cd1YjLw0P$dTdB}8Cmz^2% zFhzkS`o=vMZ(wAz%@4|rd81QwIFm^T&2*I-xs*K@Y`ns*6Z!SM=Z@BE5#F~gFF3-| z?@K))ikasK(*)?GEfV)~d_AdtaDXj;<#dz;Vnw3m<+z`mTyf!%PF0tY1VvgxtirPg zB6nVs|N18XH+lE}p2x+YEvb9inN}oQYaGbO@S|QZ_p$;Z>3*N2V02N+vB*7XNe>-R zaa$X&h}i24w#mO*2(;w5kpkNE9I5fLqFM$*N$F`~sdAa-D387HzGI>e4p(85tPWM! zQH7joioe6ai2`(?r)uK8+Ir8h8eYB~udhiqa@2m?V-qK9ikx1IFpi~ao4O(I%qBzk zXHXv2os0_qQCM#!;?jL-Kvd*LREY`?Ts(xn@C^GiYUn%_O5~;JHx1zmUHioDuA54z zjvJa_bIx9ERN|H1Q5+$>i^uoH7rwyW-OF*8L6P88@gZr!&)jLmy78n`_G3P{#+^2`XaSJ4?d~o<$2_Wb~Y@ zeN>j;qkso;clC#TbW-Dj$V`G)yhex3Er7Wl#hZ`_=c~I_FK=*8^nQISr=t_A;f*1n zvJ{SgZ?$c*oIfj(VHNeFhVL45@vAJ=z+`k{If%aK8Wj&PMc87iVaZMTg?!di$m950 zi2N0H1sUBJ^D?r^R$MINhK_DbNmos01W14acT$iwj7Qoh^b;F_|LsvtO?ExOi{6Wb zJ-Yz-Qc5gyEViHD%wgFryLF}sUX&KELQj3mh@@{3BY6PMw zKd=L)ccK?pJR?0rzM$%+C~~(^dF{+Y$R7ZTtp2ZV8l-!ZOn`+v97pLh$uj}oL%$&X zJ_KdM^m%N+L3&LWVD1spo#%UayeH;SX;r@t zjvwmSdc3Ni@-aQGn0~{J-r}w2mj1B`na!hQ%_%_BtlocI?53Ihss&^QZ4qip#0`nt zx|^5|AjJc%?ut$BvHt}*V3vV^ze+q<7ehQ)49%_#*)zUBN10;SO}|Po@=K#q={pxB zwGl;y#_xv)&fE@uSx|brJX@{#&^z2FofOBpzurIfma_;mWmh>#dI9P>>M0$NSCNw2 z$H|es9^}o9>3VEs=6_p%G1YswDW#(M?T1&cLQT-+;!Cu`2hhTr$+^->BRc!b0WWAp z5?&$%CvAVVMNq@q=c0$zqvtop_uOhMxZ=-kEGmtMaaz4smi8c1;wyZXr1QU|n%Iq= zE|(D!yRV|ptyFPRAC7C@Z+>jLy$?y~*|A0PN%4PW1$*QxylIlnYa ziS>yi#}ZO)^Ub!R5D^mFK`Gx#fOq~Wvyr+Z0X3R5Ou zT^IcPsQmI)R`?Oh0h_4~z?2+0_Vxbb|_v&Oi zw5aRDvu~}fxEQBoTkiOx0&|qq=`@-yUIySO+y5}pA*}X=F5dRJG)m6joDcrX0(uQN z?k!*Ps2~)}INlQ*mF#Sve3l++rFp_R5f}?mby0q z+K!U7*)0D-vr!MDoY;w<6)(GBH$uDUJ?SX%P_av^-8T>35X(IIqSK(?g;VJ2EXZb_ z?153fl#UKMRr+$}j(k~MN>WX{|0OA0@gtN!nYRMxioE>3{_P{a?64vM=K2c}*>HZ= zJI-Yt3?J0qjdtxsASMRg{K1I4lYbFA)=u)Fq2Swog73Nf_R>q?tES+4R|mY4#|)5L ztDDA3#xnlUv5o{@B;bI|c;UoE2UcZ_dPn?XBTy6r|DwQ?ZYw&|%XmS;7LhszB@IEr zL#ix*=E4Al7@*F-b-Ml;l>pz_|2~)bbH|?*^slFTvc4fH2E{D}_#fap*zJ3hJq z%4J5)_Zp5vfg%6_&h_hI0FPNi^={XDJ9Au=34aj|6)~D`?|KX>M+Vfg#Wjb*F;JVU z;fp9zAE+BXA>Yu`R%Ag2(&d15CCsd%NYxDJ1$PbuWJvlL(2Z3X1e9aGuy~)9rVsO@ z;!oZ$VyuN(RVMRN=7){u9NkkVR%FD0(T}Mwfig;IGf^T&zfD;*7ORls6&?@mOpKQl zoVYA^l-+JpxS0Fhj!?&;=<;qO5$@fJYFks)a5|-w@29c~t|RMj(kP9*|l+clh9$!~j$l8aLD7{yy1!Il_Btu`O#mcO1X| z>v9;CHWPvG9Q}3 zDAE4zjNcoUN-@k3;8rsDtVsK~#SIn+DxVm?D)4bval$!KESkAn!W)nHH+jHr0`AiQ zt_wRc*QD~z(o)yj$2KX;B314cCb4Y4Fok)O^akag=Zz@y?V;(8PIVP7wPk+qH?mK{ zanlVgB9F9rYTteyyLXP8gbIgeQTf;jNZLsfA>uEi$gWPy8k5( z;->zXu{c8!JL!&$OjZfii5m51Ad;NzzquQVVf_X4w~WkLnI_DDJtpmeKNSNubU)b6 zLdI-j@)!_^EY+Wd@k)WGq<%r}t%FUFu7$~?fCeZV=rc730Lf7wC!hXi=yoII-WBkN~2i-(L8 z2kPQCqi@s$2vm*JL(tM}%T1a%Z_PC-V`x;K?JNl=1=kLT;Vat)1W zYN#e*%*rt;h4^u%w}cf|_3;;^Tbdey1^((KtScy3RgPz0`sE6456NS<-}@bslJ1-E zeP(r;O?AT9<$?EG4Yw!z4OX{^3mUCgY#(zruIUP+4?$Mv(3dnr?$okkt`W5><&1Xc zZdH%Z`Ch;tPf%(hDz!9ZKRn)X+SSM~Kxnhqv*vhBQI?bLbllfnsRLf(N!Jnwturg_TAMue)nf$=9T%T!!|JtNI*-PbcaV?ef-U#T!wV;8Vk| zV)*j5UUi;V6TEJzJEZG=D(RdKk6UqDQkW;8+x=WnWX*>W?xZA6#f|S~#XrW}&d-}d zi}oeXkXWKD91r^N_}@vR`{Tv#Qip2ZPI2i7_?FBEC*9_bytaELM|I*_Er_H zpvDFq@ieMetw%@4>rtPRLr;c;uhuRj-Wp}hp90qP#`2q1Pon6;-jg=3a3-Ert zwjbTOm*~hce0-GiMc;kL6Z|FiI0xSs`lqXvPpsp)e9D?y=&xrMg0<=F%v&3Q&7f!S z#Gkq2WgG0!O1o#wPX3^r@kB~~Z}%#St5FNT-{1F>Y8hnJ)dyLT_xYkWR_c6jNso(R z)EbN%Y1;h3Ya;>S>7}|$zX4e&ijuOLm1{wL4S}8N;*31fRU_cC%>5!<6(*3g>K0k= zU>RfR_)V}WZI%Q7MbPi+WP%Z`NukkC%(Y^%pqrbe!i6I39*xz!E!ywn85d zfB6O3cVz2lBpYf+og1uMY;x7F`b(3|&XX@z@tpCm>^hj3^?RvnECrXNhw28;y1;Uc zC}9dt$K=3yq#R7Gk`u!Wx7od|W~+np?weT{ryK8xi{2VRT~KJ^E=Y49ld6f5S#zKl z4!o=2>-|=uU3xvCu->F4lll-zAc_`HGJLo!uQ_I_1$(KxUJNASACSc`LrX3|(&^1T z?NY(KMYGZ3?hVyS_*7r>9sIh49rf8FZ5bisEPhd}+SS>NtBLM6aQ^(UQ4P`y3HHmv1YXAl6|`c~`dBTx05W>BAN$7h*Et8MG*I zwlPQG_L%%4A*TCM4qZ&Z7)?Q0INm;b^%CzJ?846CZ^TM5V;hQ9&Y~zC!S%A$bs_P%)>-z4eWky9~2D(!g`l0iWZRinTg8YO) z&ey6{O7`%-{Fz6)XwJ(cN>x5EW6sdxX4GNarIkh!=J>fN2^ZB>zO}AnH55f7@-%n9qaYNvBlSNaH!bE@rlSa|K3tJTK$l|NIUOa6~y$Ayyh8;kPD z76W|H#c2JE428YUacKM&Q0SWVn;g|t))s)L(F%U2%w10{SKFtt+ltDm^eZXo|u`pFJzH?Ro#_3Jd?4uKFQQNC7=Ck}l7R-y$X2_NXyo zc?4%k#IKFhQ#hH$^`Z-0Z&^HNa8XyXnD3UK@(f8)eOTOcP%8y7ckr;lI?~$J0oPjf zp(dftEg<;iNs(h0Sog_lRIIhD9(6A8YR$ZrdhMJ0K6J5LHUMb?X~3=hty}&{2JyvD z(#EXkfIGxE(eWU1b9&|#qhv4QV-`rE_{LgFCLF9=#GhTP4)y+bx)!VLCiA~~{v}rD z46wQW-?NWb=#gMAFgRYC@vBI%TDQHea)AnKFLbpAB+J*sR_PUh>Bs0mpT&Ftvw(lO z=K?Rh4@@?KTW-2;Ko=O;+&;yJ2!R=+0q%4*fbAhS8OYxgz$P#_P<)9gXfdg$8GaH&9Ix4YoJFgte&n}VQCvlDX*#y} zB0_CIhuhw}?x4TjE6I(sdBn6qk zmvev&7k6k`XKyfc*EtchLt(8*0&>nCC~{U+wNNg9D8!kUt#@+PbV(t$YQzJNvw0R3 z(G?d?@Z2KWbSW_C$;JVQj-#7nY(VE{dH6y8j0fTy7k(zuy2!Jykd)Y>?xr5BbWN(v)X*WSc=Ko*i}~9w!PQ*B9Lw>SAKHW!sUX_b=Oltw>?7>7WP_%Tf$O93v(k*+|3T)8r3Btom?jnLSj&@E9v-08R45sBnix>k^*o0m+uqaSi z#_UklxXfxY@gPtsdiDEmq{uC|s`8z7&_U*b#hRh^;Q>@xBr=F&slu9C$?pU$>Z}ro z91+*iR_T325n!gvPtfk!b{GM2*E3$K@iXo*@8gq)RH>&DIbC}z9>d8V|>M zvF$odeL$rg#?czRsF>B(2`9Ad4+7$58t<$?tMeUR_t|QMcj?u$9LX~@>E~b($A_RX zYqJ+x07ey6%6?#ic~#hZvd_>n)TlK7#Pt>Y=g@iOr;WB|p8NLhbTRN#z!>>8NPDF9 zx(Z58$eo+?hDro`&dGQ~0s2V#)PpL(4Ob87pdK4ht9HvGH?`i*NBn}+!h{x^uli3Q zR&#rsCSTN0cOIm|kEoKp)^G%rjdBqMRo*c2u6kOQE9lFE40_yn%<9*K1ou1@K~f<; zXtsaXM1vtMUI4nVaonorr;6$6Oy=C96E%t!y5qX4E}XEsW}TZ-S;dbna-Uo%&EMCk zLLQVa}hL>!^dS!mz-eS4Li-EGrfe#7C9AAevoy9`U+?|B(3SNCUtWbuZLi(RO$LB@4PEIAj`LX@97bq)yeu zz$}`O5f$>1;pV0!rb4;3AnZ7~*wpn^dI4%N(uXd#K<`_sTd>N353{M=0i{s~o3|zD}8%=AaK^icP0@Ux7`G?VFtleg~Px9b0+LE1+nb-p?7$y*gy|!cM-k>c=`Hc;WjFDeydVRHS$5QB>+{G3?kfY<<;;e; zd79Y$nb~V9Sb`z-RQ@5ayDx#7 z4wXCq>;yaU!TZBx0TQhcjXMy=c%v|Q{fHPieUcU{!PpIt!lFhuXS`4cWcq@ERiY@d zaWp^z4U07`2L)DsA1aGT>9$&$?+fcCA^~@5b8%P#n0cnvATz zcpJhb0-QJ=@k9t|0~h$8kt?$m4^)zU%aPbJbN}=y^Av}G49f2uwVK&m=U!3;uMgSvc7bLTtP7_ zYe5gMi^pLM7uw-bUt!2u)26r5h{Ar~EdH0G8|U5M77gBnrWG&X2~ran)JYZQhEaK? z#mYix_-p8f*5-o#wyBiQE*bo|CUU0l3&rBJqbW1|0T%H}bWne9ngq+Z0E! zC{Mpss9v}CXP!f+?z1+uq@gZMR0IP#D`Kp21Kgg83&3D?|tgdFpkEwVK`BCVwN!qMh@{n+lEcIc!xpc^ju z$W4;)x)4$!Vf!E)p3e;K8j^vT3P(ml+X|4|W28DkD@Bsv!A6uNT~qL2!|y3KW%hyE z&=fYxw|5oba;1BqXgW(x6cM&ALaHf>K(U=C1xgMM=|BQ}PX$5&u|c{J1wM5jgxK$o z!K1L>AO92m@%}d6e!AGl*Q)o^#s5Ru@@re*o)kpT@(!Mg1Pr`W7(N4ZnMil!pze{M zz>)gbgf8=RX*c`>aO?qv#N%Z&Z0XmcqC>tU7*r3FgneB{c;E;uYMn$kQi=R9i-lr< zCIjHg3B@Bbx{da9v*S7aC@!M9has>mcB0f=VREdC?7`HxkRytmO`6r->_05G$X09% zTBcGxhU1h>)HMY<3}gt+2s|Sqe~S#oKwOueZ(a#3(=s-YexL8q<6udCLU=w|KKa=&E9)ONhKF3p{k$K_GUhSVOtmRs&)|xIOHc;0J1JTi+4jD6Su8K_soF5nIN^-p;b0aB-Y)X3!5wSq6=P@j4nd3=q zh)9snFp7k;3nchH-LS~R^eI2$ch3My?8=&B8~P^}UqxpN;qvo83Mq$$@ipoav*VU@ zw4LhEg?>}(YDdGXg4s&>Yqk@A*j7EQG1%1O{>+#ANH@ar$zisDnagyqUzxMLQ8cIf zd`0+D+VyW#56f#XJ|E*BjzGU84k^l8=z6qW@Aes>cxMrFNUuy#v`Ao=mhCBV2lwS< zx>8@R))&qIeYMV8_iDE|w@Ptj4qoOOJt-E9{xVZuR0FObxd=*1r4y|uf=YM1)qX_i zUq0kHnGfD8@`kBx`?v=JwXX6^VC7@lCf+ zba3FTcG;~mm|>U?o|vzwDyR_XFRLd|qF3#lZi*KN^`^*Xt~pJw=ShT>A|kLZ$?@^ZgmG$9)tiJnFRg0D^ikRvDd98M|Afw{AxP_d7!}T z(0bfn}OKhKu_m89p&l#@*n-klBOX z_+ihQ}Je(VvwcF2wV38%+0!!6&99QdgyZ%%x_&U1RbJ)UviR9w>M z$-8u9?InPcQGIuK6Is&k;Wnb_p*+q};9^?qq7k5aqqq5MqGWa{z8#KU^(M7D0WicO$}R#DI+7$A~w zX_-eAamP(`xoa*Z`*XH?PL_2=7JE)kL};^~4qJD3>G-(MO^GDimqF} zIdhj`u`*i2ZX$|{P`oB;iM$$L(Ico@2~a(|Ell=FChyt4d|=v^S5rgiZ4h%CA=XX; zLNydkz|Hp7_0E6`m)5Si3I1K&G?4YIsvr_#3(OIH#k3*eis|Vzuvf%iQ=TlJx zsfA}_ZWC5K9sUFHj^>wqdMJ)473(b6^WS;Fq|y0wr??)5c0gCxgr@pn<=GamZZPrg zDX#a8VD}sX76##wJqLSyT4QoM6~({0UBqS^J`2-RqRom6WwhpS-AZy2eSB^#mQtK; zl%24ZA?Pg;ainVkHAJbclUZ03PDTH)M<$MPjXW#1zv_qb8gAVgK6iZ@#MK z8$Ixznl*?5-!|BR1rhtVjfN|_^a}a8#4mlLEr(sDO>K`~`4D1aHl7;ki>S_-c{J7T zETa10(Ba~$XU&?|*AlA4-L%%`oWFR^&k21uQb398ISvM~w;Y>KS1qRRL`o?^a9*Nw zvMVP(m66Xop~+FMIQW6=U8u$sT(D2-tIt;|Rq9d_rU0q|HxV{aP?(~Y3E;J~P$RZ+ z&oD7-odDb0yK{Yj+`0UF0%8nDtU2tUK;}v3T!1e9DoUlvw$r?Ll+Sk(y&BHm1?iL2@hyM^%2&<8+%Edq`&VARM^AQ^tNgd4T;#xqvKqi4hzsvPKC{L+=?L5WbcgO@rBIfO&u86+}&)?Yu zk^pw3UoSV_B-Y}Z!8^eQ4@QA+KISUjOnUHpt?-L9AH7l@!;xT+;+R74lTKWJv}(3u zKIPzGbZ6*ZN7-uJa+l&tSU=VJ8<~ylh*Q#q^t#W2Zw`hT5OA%m#AzEl3wi4oR|C?o z;8kKVD?? z(Y2`(JQ+VcnG4^30OzIV277YU{L7ec?UHLTWi~{eq;A1@ppI;~B0KY)y87`0bJAw~ zPkmI>kbf0nIa!gZdBYeA*wj3Y0%)Ls`xxwip$Zdb-4G9pgzhx;%c7-g@2W-O11 zo_>gDLktkx6+X8veFtPFT3&dOS~t>(M>0~OQ^~r`FzO4IkO+5}{t>NrowADD6l2N+ zYTEy?4a@(OBm_1fF$JncDiX;Kvz+**+5v|FVKYVvBS&_r-TpEM%+{<^&$-+M-zU*Q z4QMB2>Zg_-_484e9md-g-j61^=vY1zH*px_C zzP=+_c@LvHlXmjJ)rg)(6)$tPCs@o(A*tnylEn#s$SG ze7;G|M*odAqAw&z-jw}#;I`V`@{nr@SVvv)$6=B_*H4?w&l_HnwiJz~GU7*IP|G!m zYob{@j*E?Zd!rcL@m{R#^t-j*Z`TW3X*GzIj*WzB!UwNw1-|MB@M7~HM=Ol}abpJm z+4o1J!5rR0EUuj(HT%HfD~I5)3k4CCQVwW#&^V z9SKXQU4ShC1{TQvr%6PnQgAJ)$rCmP+jB>!)G{Xy|Ac%cbqohpA<#Y|8|nA&!OYOh z#G$>Y7wMMYfs@|g+8&;H_Eogo#a{nJ15c51g=QTf5@ahC=vnC#8Y8afG^1FexhH3T zLW;%9X9;(FLw7|`Cf%i+gcGiaVjxt+L}Ra}5DB|tgOkwm4##pX)WF^Zem`zjxB9~S zY0<-!ci*=Crn8AtTcZQ{2bFBocbYX7#agDaJ{|9-3$cu4(HHBR3_JGpa#g~zXla*s zXj_3Duae;{NuxL9G{Fk=dRXVv)V|zCkEITa*S0Luo3NyK&)zHUi7aOu&Y_q59qd4 zr5YBV#9J{siDv#f^z0b?0~YsrwU&(vT`<_!x)SjdGRT3_${)eQn+lhHLRwP5+SHua zpdN}3+miRkwN%oV$}F2t#NnlSK9Vr6<;BlQ-2nPBHABj6+5))j^ryQv&D~uZGSe1l zA-Tk(Ks~HUX%vTC7PulRihEeF$@nsB#dduC=tO6OwAy|p`glgarST}kBo+EG%Uo}|z_iFE;@r=(`y z=Ot*-PXe1PZ?u^M$&Mn`k^(%tp_G%0ndz){9!L zCEI(cm_D&hOpP}jjz{`sKhcx8KH&k8Qrto>c4t8-w;=Ys5#Oe>Igf0uiw<=n<_{SI z5`;kt}5jhw7KUk z8n!~!Y!#>IKMqB(9Pt^|y~@%>9da_7W+Tk_b=HsIi<%cQjbdca_d5*Lf8drD*D}bgEo2xS^{D!IjN{vRN#+UJ$?>o1*T*&ko{iQ}z2aceKtAZ@dF9<47StI;JQ-%$hJE{BUm66v4XFWVIaCw;P8I>~=H zyFbwYb%CfJ>e7REBu<KVjRK~TT5+e>BmHXC7f zNRvwXh5Ic1Agn#Ly`(|}q@Z5xpB~7yKY#oQz5vvnQNCiN;obwu0>EJ)MXv@Fn2P_Z z@q>OsG>D}nD4~2D0pPu0X>i^L%!b1<_7X|5I6)q{3*7??hY949dzhdmw1-%`_v577 zezi-#Q;q^j!~otv08ql{%q+4_^e<9Ksvf`q4Yo)UR&os*b(20$qvTJfqkKZFytrqo z7buIZnR$$03TCK={l3}L&bii1^3tYU%`Wm+giTUMZM(61tKAVO?;Vw+F>;GE`;a|v zHZwv-1{T0rk6f3!x3-s)wZ~Js6sKSYmhPoM@7D~IvZ6fA04KLz4|*3Jj1RQ>2{|zL z)X`UKo=DwQfQ8hnB^|*QY3`snBw}7>sd0Yr&LF!tUdBhZQ<&=(#}qgW1S}!JCUC+ir-&S+i!R z>c;zu$LyoK2%O?<%Q~7o+hI~RDB@?-`07Qkusv`4e^HPAPoGCiAnBh4k3eVp9dx6) zd&y+l0KvSV^nv+Gb{##^!M63JyyGr*qapC zwZkg|zKu9qCdvle%pHr!92>W8c+JH9v9M~GgLa!*vJ?6_M4wo9Lb^+4bD^a~enXyU zf$M{+L`9`t9^y_+7jaUl^*(oh8DDjX{~ePqjrD^}Ihd+u9YL*(#}(J>4J~f%U970? z;yPHe-PIJhePuNJx`t`5delrB$9&(giHQ_uOpICm5fDh|d66i^r*ZmXX{4VZr z)<$o0%4QxCdD|4{_MKK^2VrFi{c-O;?nbvD^p2En3EW|JJN{@XUi{*>c;*6(!zq{*|ct>ZOE^nlLxk8y6A<@iml15Kc zC$Qh^NZZ-o4LW=36t{_7$`3f1cT88|HF$4rYq2fVUr~#H)#&08ILq_uYH{sT@KRD7 z>n-zryy%x(ls*3<{hoDJt>UZD%c()@Ex?4Suy#Vel6yf)lNW#yyF-t@40 zpJJ*R2sySv23Ng|SZ%w^jI!-T)A)WVmc;Shr^!g_Ll(J7`=V0vub8%|(smOH8{o63 zDX&2W)a8m6=|2ZvK-D$Z;AUc;IpnN$W+5p*k!5%5c8cmRR@@{KKBev4lV)o`JCX3wv3E*X?b3SV$t)8G$rB$%rDI zr3_>|5{#*^koBux@IL3_Ypyff3dMD#ehq_s!JSep?NqQ1k z6n;w;tr|!p!mV{? z$a$Mz<(h4DZEr1Zk;?CUqvcc@hui`g4V zh{lX!5?L#fC9wt$y-d`17ij&yKJ44luhpV_LQ9&{(vBkIp_380rDkhe(2&?y5zR5d zxQe7pLfuu7m!}R4LT#nW2BdPQFNvF3(!cS}<77oRi9;mw=RZfhw~BbKQ5W?b-`=V> z+)>e7KFWMCBF%~ZpjFE3Ok-QH^edjkDPB)kne8nppZhzL12CRS+tTHPL9ZdIh4hKfM=j9!uo?@RUqGv2K-EElb6%Q$Cl`=V>{LBIeF3? zTO}Ry{2!79?`)5VBYECrg>bYwoM_X3w;5jvle}Y-o%70=i{tJ~i|4!%nP7Rr(R0%W zBNVsdS^Ao}@Viwel_fQwkC+9s!qd(B-EA>a_YwTIw35ZejV1bF-RCXVg^W*Y7>a z2cvZS5k`@h+*5V_4!o{@LiRR3c!z^qDF3`L1-^ zhqgl*lmr$$XC3BUHRz$c;?-knD5N)6@y1UGKMS$fC^QDTsdD;K`|QLw7~5huX6as# zO?ADq`5Lbi8S%}Vp`{(Y?XB}q%pH7I7g@2Zz!bbnR#w8OQ+^`dAC~?)5;NN^mk$2U z{1wX~bF5tr#lst!#W;m5;)A53R?9cY?!=Fz`Lgfsc9qlo$G-O2-PxN)=Qgjd!mA%h z8$G zstVn)U?YsVX)@2`J*oZ=*B0>A+9^|XA3`?`UjmCpS>jiRQ`}}|n%yuBgwjZBmA?L# zL+~#cX{FaW?H?;v;&MF}xR+deE$M`%PO+&+I)8ZUh3Nv|`5*&yWc!K3qvj}W-Ja!O z)k7E#=OC(2OgCGm)2v6R#04T8%JbmNN?#wGUx{i9!c$|TX7FcboO+j0&>G<__}8`w z#lGq@ePw*lOXnw^^KdqHN z8!_^nSsdV>;V25QmOn+LOJ*v#RCnNdCXMymw9O$SPGOYxf7rrpCATa5-D5K=Ia5Cg4q!|%lMo%=g+pfbj z>Wzz@z5(v!%Zdnm_$CJf?TS{X=~o*Wl+DTn*7_9#4C- z;G#gs-P`r7cv#)eq*3JVu^#QCe0HX&kdRB)LTxN2k0{2a9Jp~vyouGw)JNaYUm))V z#H8Zfvi#`eEAg+%1LY%H_l6Ba*t0}53%0@&)M+JY4bwc76IdZL2(?iAtif@hQsL4ov=gD8xmhveF1OhUqs^z z$0Bz6_OMpKbUBhEWnA=ujFEz7k^5WZtMx<={5j5NW?+y5@mbs zZ_lO%w{Cgx=hb(%O_|dLvPFE?vt+fz(()8qyMn$#IjL z2FdwCH=BjDx^yzOj+{S!nt^IZ0$zeiG;?~n`WfZ)AT4Hk_@fV5{ozy)|dX;!|+mIw18QUQ=YPqlF2 zCqxxKDg|cQC@zBWPsnw0EXoKR@(YJD7J)PBHmR|*dld$6sDpn1AKqo$YH#a@L}Eg5 zBtDG=C>??UuU-w*5pgs2RA_eST4@*3n@)I9uBh>P9wr}`o7|CO%1yU*nYJJ^rc>G5 zmx5j%2lvUxO}doNP&wb7zV_&SO(TUIO(r&Lt6BKrOz^mT;#q4S`P|HH2TNMUvZ12n zNHb~Bpk0m3Mn>4F>^_<96nbL5GmH0~5Ro6~u2oZw7PFFcUA}fqau%_}dYTrs$~heM zP1p2rM5WV+VCGMVQWg1(wcj^a*|L^AbGotG@p)8#M)ICxPu}UK4-FgTg~>6n#glf# z#yP2CsW0vyq*_tO?-byxYC0Vy3R4uu&jm}d%tT~!c&1J#1eapN{X$^9Snq(mJod`+ z$Qj#@amWp-kJCRAFZEvfVp9i)A&sRn=D%0`>)nq3w@3VD)0ETB3-_CRG5IN9CknK6 zJb4q(IT2c(1BCu&dyn7xRmry7YQ2#zVb!WO~ zK&iqv^cKB>Dq)z~I;Cm*zV%75*Vcj5WQc(@iMF)Nm=R}OIgW+An6VVs;(2{&W#aL$ z2<+?RRUVu3#IWN_TzN_YpF?|Dyo0~zw;3V24C4%pBH0cWMHC(n+{l!fD!zI+i00ZV zyF^%p=TPM%SS9Aj8EZRZk(-Vyb}iBG0B41kJ7HnN^KFCbyN7~13zSwX?d*k@)ycae zZIi-du-F#c!dR!_d-@li&?~Y#(@>wXzJJ#W0)d)+PjX#4rR*YMWR&H}&Z48o@j4Dd zo+ahri!UHT?0^qh!j-JI0ik>-sh7$!ua;kSQH0%Vl;BK!n(t0fKWFTIx%_k?gO2uM zLg=MuoXi9wCLJ>}Y7H<*KIZnj2DTGo-6!d1WM%preX8Bu6gywMQTQ8`&JAfa9QcWuvK3*?`je-Ha~V4-LP2-B3ma_NQsOL*Aw zw=M`5toSz-CRq`L_MYg6^JWgg5hMsVYT~b9Fs0e@UM}e7#3In3Fn2|9^1<7Faq`}Y zkL_gyQqq~Px!H)F-P`2Pyn@Wfj)A=eqEz=m`Pn|i^R?Arjx<_v|E3YRAm2Cyuw{>a+>3VMSXn zFhSMI1m~BxBOB?6-9Z_I`*)~ts8YLRp%Hlq{&o`K*%O=xT9M(FZDZ4!&MnB{!19vE zlqdbGy$Kk+)@a50qO#hKCY6$|om#Ys$!O79rMY)h&V?ZzH)&Do`U(!Uh=McBUU=Q9b9Kc+&x3L@Lt0PNy zyMWZy(%Lo;9NKluD_(7fE`edX)D+PN`=asWzdtkl^+BkeGFybJ`7wE*!PEV%ao5t` z>}}=xqwlzNqXvjA!FTeYpe6iAWhA5hny&3 zta|sucI*Q}Pf>I{yi(~CbqZgVW!J(*L&R=jApd~WNua21-%Kf-w4FTOC~_G5c_t5c;8H6l!HVlJz2^e!05%adIeAQ2iuV>}~BL*YL;W z(+O=O!ylVkms&jqE9@&{FlB9(E1T7AJ@w~e4Cp>qCbAc_H=QJ{HXi8J9T*tWAL2+z zrkH#I$-WF>l+YR)JoyU!mrBqCJcEll5qC?ES7kxf<$r{FcR<2cn5-VlFjs4HXivApcjn>cw@vgb-N(FJiAi)W zw~wB6%Fj%p?7MJSLJ$9BXK~n!wvtDndt~HePKo>K*U{v+N`9+H%hvg)xgH(q`F=x^ zW=qJZu-kwZ>-N>cPDP-F7rhd(SCY|96S#$Lhf@k#&+25rglvt_?3yxR^ z*C4Lu!Z_Cn`ryH0RsoQ-$4#TS*TN{1cy zYZqmx%z_7voa4fj?!i<}>9&KtJ{CbR!Ewf|wp8);m3iy7Fh*l}PN*V3Z?-N`y*CuT zjXlt7KtL@GG84R;6vJE!i%}BWPI@e8&?NFsn9*wJ`ZL}zc-lHkzK?g zA{zS=0i251+~Wot?#{GYAdC@VhL(DLw7rga7>GApHw}iJ|>>?9-6;ABX*D*vA(3v*q7n3xBOH_YaGI z?^&raOwfl1;#1dZ_4649AX`Ywm zMoAWGX6fQ4}CZfByKyJ#`{eF(bmd8WPSf#ga6Nz;C-fxM$p;a zO)7U=AO3GU&kLM|>8!4a+9}rHY&hgrPngPEU9`TfJ3Qc|EhnSEynMaX9jFcJ3fqv-pwfro5bUYX$D-b)>E*Zo2TbWy`j> zr)DPHjx5c#?#vXLk?GrjI9{ws?x#vRIPBC2U6R_e$#vb`d(fe^(?c7m9O-iy+l2al z6E>aU^ZHH#L4yX|d@ag>&2GcRUz1x`j?)UTsR;9#*sf9EetGpnk;WTI=XVi^GMiCQ z-+G3Qm})WR7uwg`zNjgWPJW=Aa8 z#BrTGSD*joI_vYGx-2@*tDNsYRNUNc_Muowk(Cj(QR%LX{Mc}0bcI)PNLl4}z~?x= z7BU_4X@~Y@y>RkwgwNOvs$#Y3Z8o#pP{8y-Jv1+}p^^S|kmBR^w{Bbc2291?8Q&P* z9YaG^XP(}!muZj5ZSea+Fi1oVi=F5TNo%*W-9G0smJ{22Gk)le;qe*f_k1my(}K>* zhaSVVT~-cP6;ut`8@4+IFVEbR3)8k5@#}HSrJ9m}4h?^DI~6x78=-bE^_1T?I5GqA z&`Sdd{Qj=60Scj3?Y0sw9GaY$2J3F)#5H%rMhWS2vi5^xa?(%nOmdiN#@es=vm z!1MJd1k8uci5L=HSOXTq>;y8mL{Hyt=!{>giW|d9#8L9Gp{&)@E#N+52zeIiX zQRac~kw)8;TaoCkA#r@IgR+2gpUfyJ1hcJ)-e$}Q51+%Ml_@mWZA2e6F0F8uIo8m< zh_-u{#POA2}$5c^|?C&$yuEb8k;6z_)etEpQcX9K>VejG0QMxVfczhmWY4I3i#I+ zQSNMb7|LbU#5?6HzP9G{s#=1{Zr~y#kIuLVEj8<~Z)wfDpjU(OS18j0tgH+^$v00i z64E7T$I2fXdn88$~o3_fkHG zghYlUE^V|6EX1XI9&6Xp;21S9nQ}G=#x(fdL1DtINAt=9{az27nv_Q>(oIFxQC-Ns zL~}hk6XLjdxn!iG%epY^bMrxY`sWaz+HW3_&Wh|a)f8m&1X%rmn({wh-cLqs3XH>5 zeMT0%h#!}YHDw~xLb7wr-DxFa5=tFR?77rE3U|1(AOeS81QqY>GSq9)QI1J8vMP-B zd%tTXc5l)<3|De!WR}t{sXcW$H4!PWP8r4cv_eFfj{Q`-&_>Bn8|{(rXsddz3uK0( znXtm-A~y1-mxugxeGHb(0!`Y=yv#}p%-&652aSk!p}cSke^In`TU6+oxj0 zW!K5g8!hm8<;4*CYVCvQVFo+g8Bx0MvM82*8nyBZ5l;%_u4-xIG{BVu%mAknT4i=M zUj)}yvqD``mJ~m4ag|P4on=A{L2Y?q*PjY$FtQxbj*E|2y5LCGOc#w`xJQst_n^N_ zH?A7CTBepo{*TXG^<@b}(QrRk`}}!2>T+zbVhBoYJKq^mcrDvDadl&KW+FRwjf*Dj z*0Zllvu&GU{$OS5zQZo3TM?t-NYkzrJxFN}=Y}(m%kMxjwZ5OsQzJGrz%1=Z64dnV znMGp#Xa!0OAT~j;Jsp~O=p>$D4;Ig$0Q$&ds9%r1ek*Mo|CYpwMBW70J?WOFa{lG!mXjdRQBWfO;R)Eku&;r! zuYuvcA0GSJVLv$nQ(#at|KkI4|FHP?eL;EgbMRhia72g9BG3fTK2e$q!%P0sX*DjA zmL|X{K3}5+;E6j@zlb_!K&3(t^mHnn$o!pf(#3&mz6xN6VTXhV*}MimlyyMnmW1!z zZX|LNYDv@|1*T=A?f!>sHy^x@kubME8M+t;wEhlbULd{gZ6qs~(BDUnY1)liy+7Bo zwK&ms12*o|HEYN$rC8Hx2dgS?;2PH9qfUoiOn*kSGy7IeX1dF^_7)v0?R(99d_(6v zRp(hw;!Ovob>cAY>_$Rnyo*pNg>LO~82K(x(e#_X`1%Ib7kK!*){3&E7b}zZC_q%% zA&Mf9(~2S=pjxZ9zlE5*gf!!hc%iwiByMScx8{t|BBZm(_kOFoREr%Qul~HAziL_O z@TCFCL8r0Nc*Dj6Pj}1jt>0)0PQHuqpMfN;m-l>jKh-!7Ury0c6EEy}FkNzkyFa2* zyr(7F&6H9r(RVRTSlhO(Bj%H=dZwa6j@3i7CL$G!&BDB_8o`KdfAsAU6%cM{ z6C7iWYIqD~8NYoDh!81Xk`8RiVt9yw$MI4qkHuPXt@8(FH09q@dvnRFj6aI#2jrN& z$(Ec5`Tk4%fvw#Xoyj=@FICn*vSx<&2VpMunpNoc;WT?Dvby~gvA70)YuptKko}oih<(f-3!r8%KposAf5rO*frKrq4Jj@-gmy=%f1yv5&U)%}mL8yb!jq zz>gl{s;aOlbboZ;&OO51r>4D4b2=$4p}SDa(mW_Q>)xHC`q>sQo2CwmV_pn5etX;U z?cA)*Oz8O~ezCbXl&8t#q5_$7Q$r?-7t{tZFF$&fV&50udn2XuRBQR&RjH#BqxFRI z%uK9TvXX1y+sXMm#7?S*?eg3AOBRXw((%=cX(oUAY@7Y;{-+Qi*}u5|uwzSqcNPJF z=m*<#1Y(y2uI8{wKae(_{kIp@(};b)B_Kpw2>IKjMDs+nix7w#AfZR+{su`pdZOQj z2(W4CZ7$=rMfpJ4MVoDoq76E_Wz!#Om@i=!7MJWZ)GrdufB0i)1C3r+Z&1@aFt`4Nfn7<9#Z>|GZ)dWjr|D&XXjV|c_5 zrxYXNol!^w7w%M6{k`dUg7-pVm zXbx)8gzYG*T@BvCmoP9-gqh++#x+V=LuOCr1AUy;Ze)iVf-4OfO5k5po{X>3fHP!b| z@Abc84sQbF#(=r4>0%{xr|;LeAhwbrf3tE?AoMHntl{BknVS31|IJX$&{PXgPodGaawLHrjS?tM()P7Q#8~E9^4nM(>WA1B{3Mx9?dtV zxdC{FVliUs(w1xJ#kq5ULV4b<_BoUp9BF1<>Oa6np-RK6A!Nzs*0)H-sFC8U+jLeu z{9r-nb^KD+V>|v^QIC%=ufCAp^?vWU(kH1>l|nQ0KJ=zJb>>lsctik9)18?;Aeu(I zNv8LXvjBJfHypQ7obZ<-&-kA9SgbZv&a{6&ua{KKcuhc(RvxfYL;tta+YV~t9r&RN z%q(1~*H)!|8<<^fck14k2rXz6si;mXk2@$`&&IBFFaAUX3rln7vGrtEt*e5#SgAOS zgXeZ=T&zc7kMIku=Ejf?tyRuCp9-zjMu)VJHm7pwb)wTWkE+ek%c56`QG(64bF|u9 zv&QOMed;pWH%qYbA0z|{Md6z6i6c3Kl^BcZjQZKN9&6je#>Mm|iv?cV_bfJTE=9cy z(|<_^os!wqy!1_u;=&e__qE>&an=9SFrTEwT}f##Gl4QPB6x!)Y5qZpyYGFc=eMwP z>)fN+0kkoh`5as{&ui`zJIWC9Zm)#+ z1%0Ca20Xv?IvH7NS}1*D8V+Un=coje^cB~UM@`UhDYdRG*G-ip>m&VhLaV3St))`J zT%t#!yOdSWPiQ9vI9@D{7*M=m)_-i|q*GwHRPBgog)U{Uqj*5kN*TQCiL9ey^sD)a zx>FL=&WX*Of-W@a-;)a4SQo)+F-E~DqMsr^i^;)PO+`gkMNL-z^e096Lswsgv$C>Z zE$Rs3n$QNm+#yL2UcS|5`D`t0DuTQ#%7T*0f;ndv6x(;a<}@$8Ja_@H&@zs@#g2H@ z{^RiE4=_9Ic6@U2upRGk7*)tSOPD6?-L^wZX`}UwRIM9yopxc+q4e_`_IGHea+>xQ zge>lTZO?M7$lF67z9HiqT5v8MtuOOahfSUXLMFAd6lP9w0zvz#=O)ey-cK}f35Zig zjyEnfs#5>r3ynU`FkNsp15iFQURK_8{DsqJ9Y}W=kFSy=Ft2Tat560>AO_WW$=1$*gt>(E8|^+sdds1ni1@9BX|{Q zFeTjD(1-`psrDrEh4k{5PyOJNH;CX?k(Z)%E56ZRwr6>=z<#beHKFMJPe|`ECom?% zwB-XGapk;#_zJUT;{pN`jgSX@aZ$4~60apW6vq)sT-&5h{z2j6^`)?9H1{|R6fXGFsrz&J zpO9&4S5Z9coDq2Gc*Y^-L!M6;Byzs55mn3%R(|NyYwU?aGf%z0(n1)UA1=Zvab!p7 zWW?GiaDKV0Y0nxKc6IEa)RX|1@4WBSw92W3CVO>0m@4{E!_y{Zo!4jZvds&UBZS;( zzMeSkr}GKfHb*-mFI{tf{S%_#mGONQI3TUKmmFKY0%NYMwQ)bpXv14nY4%aD%l75B zg;>GPuVs!C`R6rwynJ15$}+8b8@-L2hSkjSn?5X^wM)0TXnWp{QSIE|-KbmHV&jHd z-S;YS9OZS#D}_71laIeT3;%FsL2EbLO)X()?dA+sqbE1AL>jhz@(i_NZga(2fBGnc zcuL5O;q&1k?Vc|78(-esx9UY9GpZ7%VIIB(vv*QrFgXt`?WwQr2XjwU{B?m~! zF=SlY+3>OwMN^_-QW7^OAC#VM@w)#HuYM(9`7d$ zg*-2p`pL#i!Id|DShj zKYRWjfBFQ(kN>jpwTgxJ{bm!vGoj-k$TA~;LTmtBv`1M40MrvANp&Mt_{t;NF^`>*ShQDm%+=77rAS0@V zU?k;IX5c+|tfqJPUkDjH!w7FODJyg;75c zQIx$H@ZE!<;MEAXm1i&C7u?HRw-gery2^Pwyra0&>mB-tL#q>Vm#dbRd06Lcj%$6} zZ2_ZGaCTUzHX&-{4I-Q&@cfyj(Pv?ld@0B3ttCb~+BHfC6i+|wgg>1e$nLj3d_ObQ z=E~x+K&Vf?b9}701eL?~Y?oWLPDTdJ$KcAq0jEnxHx;Ij1SBY%wr~6x#ss4H1LqBX zaDKnf2p{D43F1$E@V*epJ?(4~QAnRkx<&&z2pBhD{|SL&6I@5TVTN`AezG=JMW7`y zC3EFu{-;LHrj?|69i54H$pKe$mzfYZUK&LAyV;j)>UL#%<+2rYvr{Qa36rU6`VRQ6 zIN0rmI|HhmNJ5m0n;x$sZB#Lh{aH^ob51h)hn!~@crlz&=ioy>A)a>4L~#iFfreWX z>WGQWn~i$*ZuC}TH@WV)MvBT?dQ8cMDU6(q4b!&2N%o0+&KDh$H0>Z8!c>y!^EN!M&jqFb*F%G3`tpLrAmR( zi&g|>cBsQBQN5M7WAZ?E%7*lMWA{%;Tk+)Dmkp_ktlOoEiPqy@G#xspxG!lRYHghg_{tc&*b z?5TBwXyH%Cq;ZT^CckJ|C|0?xVR0w=AaPjdf>3IzfVebHdis428d)4~{3K@h{m4ob z@~l7Kn6*X0`7}q>^OIK(A9jA!Z?Cg9j*J&L^_1hTf6CfHNyWqP;K#CT&4$kw7Vp43 z$PCeuod13QP^DPPNZpQu=2we;_F6kXH>aWWv8%K70J9a#D^rx>DKQAbmpCAx=QQwM zl%nSRSip52L-Ln~(PJL#V_q}U_#=Z@o4eK)5#W0(z6)#aDuNH}rK|y@q6G5XB=H2; z!poZ90^aHXTKfzGg35lI`KAlD4|2`{A)49{b_( ze;6K&$S0&O$r-rO{95}~zb6TA;w0=@Rdq6$;SZCz!0|I+sp~Ox^$}@Z%Lj!-2jWQ6 zy7+rApwa;&$@9%;TeKJv(4Mo;E;{#x5&n?YbQd+&`x!&v&AiyN1v^6n>5=^5V|s`L*5RKl|PgR*Ly zQio@Joj+oudf_$_dq%MHf^T9?ZrnQYh0A4&;LIdXc=>)sVg{Fg&QV$8Ge_3$#|L-_ zTso|zX`cEOsEdxn1JfP(me>zV2>tuLT>qp#>@#Go_Ue;=flUrKRCrCs@DzPK<0&uz zdrZbg-Z#4-MK#cK+iFmmV#ukoYz3Bpw*cI<%tnw-t(8r@j;*Q?A;~4dPfMa-NOoW`r~fT zfoIl8q4xCX{iK}LI>fZ(giDObeQ-E_v!>EU^-{Y=g_I5r#r7v_l6|X`@dLB+uX0&9 z?QW>P%CyWJ;PG@IhJw)^t(Ubrr=2zu+cHf8cJk=KO8OD&D>o-#Z_3{YC$ggyy`r=V zptwgF@w=3RvTklWaO`>?OJSvH61*Q3<9nap(RoAv!t&Xy!1$bakbWZHC8H&_~Q=+qCUDgJ6(p$+RfFyfMi~Rv@&n32GG;kAq#R5J#PIOAs&+oR&kZ;8~ z=cc2lxx?L$cIlt9>jaEfhgPDxv_wP3MW??QJi0{<1zK*e3cBB!PP*|Ebe5HDeAmk5 zd9_i&#H(P3%OOB}ny+Dm*f*ucI7&HpmN>fex42Xo^nCQe&zLX5zYqE$_#$4(yxt{g zs#GjD@?<4bd!aG>YJ4K6X~pVEpq+eB^ITfHYPmz~4rh2CN7S>SSgYhGFD=}XG`PLX zIX2tsjKGx)@vdd}vRvweXUeKb>D0dFH%eu*rE3|OW+p#5aZ0thKT<*)m*AFtpB17; zp4WMuv0R%nfbwLIhA(ujo9a99gM5V2>lstS6T=Li1xeMXO1b?<4{syp zDw)O{6uwVR;C+6A)IBUQ_d+HAa4Bv2IrKNg#Q;2js3MkhZLHpqB1i zKmfTw7V(W#B0&~8OXPsLP&~CWm|Z5|h@`;VZqM-ua4!%nRv0oG^f|V%vcPo$Sq;gn z7KsJi3U$7WY03eSEV4pgT#cs8LKANkv~lOgVl*Cz6Tln0$gl{Gzr6A1smenxAN+>% z2uYw}vdCit=@&UM=}tAprZjBu<1E zdgMrgH@}A27n>`YaBTZdc7#X`>zyY<5$?q>wV6;KQ$L*VXd2?FX#smLXl)&7*oSJ6 zDh|YkUeWCz&J`xOPn`D5`jNRdDL!`Dp!Sg5e#Y}D?RQpH?SreMl>|&in8m3CBd{Tw zoh(cD%;M3AY%9`*!ik}5lay9WAoIdHTR8%Hap;cWR?4N!kV6S37#VDE^xJetx3GE9 zvrqD?a>CU=K`+^WLXh!U(MJY^ob81TN`M7Z9|3#5N^=PKH~jpCnGbd zG*!~t&@?sGB9qfX``bDJ1ScDaZe~EjQ=}!gna?E!6qJ;tv|U}@>4+7X9j1X?($S_` zS(xbq&>g))`9ss;{gn(M5B1&4V-06QmQ@eEQd4N2^>{PiZb~e zIP`mJTPtM%eG^ZBpV*0VE^G16PJOLuIR%Zqq~!5HEInONrpx9sv!oo;K>@~RQGcowG8_DzXX8R<(FoF$bC^oR($Dech(NNGf&bo#ei< zrYR{SJDn8B_>a+}j=g`9B}na6n8VMo?jqo`5ymdsr=y47HuZq9UR8>&FOb}aS){#t zi}p{(T`9yE)oBBZq%1hDCt1gaP(5=%`Bx0wetBnAv3Gmnm6)dNa^o(-Sd?mg^Jb?> z&x?p7lZ4!1(PvzlSvS-kDM_ooR(Prw8QQq)=rbnp4R78wGt4)6`lRY=%ZY<<5|fwK zB)Oyj_YUZ7FSEeU6P_yHQutR5=pT&$WACOP+h_uE9S=}@b3fYfR=&uORM;<9^c}3= z?xg3OJGg?rgUC!0z!$md@%7tr7xkp%kyHx4CH)Cv4{F!#Ag!pNwGLoiDM1Ad<1-K= zQxUfQHm>gj!jlMrUx%N0csZYUkJimU@1VNDia|~kAjc>)qhSsGd~0J-9b@IUxKxYKBvgtd1@iiA}Xfr?g4apqy6~_n4F>Uoqnhr=doLYYp)ghpW%l3j#}v z_o^>smESCvLfAc8>Sd$8TJOwqhP8TrBHz^N!8%)LpTyHA7OfhK?&H|kuGLd+IqzmR zHk9M;)3eVxX~PxTRY1v{Akb;I^?lmJ$Du~BkTcW%G= z%%8L$JZ92H05dfowzMVl(qU=(2Sei(iZ-0#xF^C?gWDd8W0JwRp{yPtY_V|H8Jx{) z@ZChiJZPN9B0@Mb{K>clIAG-myd8NY!#Q(=_}CEUaec+h%xs_Mc#kaykjMgXI1r_? zTK51}WYaNn^8q}F0I)-%%ywX;3A|+oL~C{E0A%DRsDT)+EzKeh#DLFaa;yN>=99!9 zOz4mBpE=;_H=nu|d{mv3A7tqgtfY1kgmWO6zINWhu5i4MQt$5;F5^luyIg2LKB*Y zpCOEt1g_Ybd&4=ju(}3VgRD%Oi)Dut@sLfX1wSai?`)Chu<7d5CKEnFw&CtBMG`%TK+A7Tt-7oPAL!jX7&tK_XM zOiGE_+PYi05Sl8Z#WbYYe}W|MG%b#P8}2gxSdz!z33GS?p1BC+mBXisY9eGKO>7cv z)@3UvCCaykLI!XmB+$+b*(+qPP%k@-Z;ZE?yArPXJ8PNWe7Pchk3S4D&^Noi%pe%C zrO4E|QMgf5cx_|f;GO-}>0Y?#<{IUpML$R7;mtqB{(lZnZr%rES-{A(=fgvB#4%VX84r-h zKmV4yt}=x4H8%mYbYLF6W=({V4Ff}0i|x%gj10Wl*a#f;zeOlA*gHZU4{A-zM-Hw{ zU?3SLP6j1c6BPhpfE;)3PIoCj0-DeL#y9uli7*)62FyW#t7(1!OmHC3Edudsz8mRq z704Ud@HWB3Gn-=7u4wTPyu1NGtlGs#A~oPdxXd7&sbPSNu|ZC}q52Tqb}%&oOs3dy z_+)yNaEN=bv=dI5&@Pb>>;BxqP59){kLV>*0UfM!)eF)M{bmOt;OT%(y}@2ore$+3 zo35)9oc4&!bfDB%BJ54J8Na1?9lZrHFeL+52#*Iv+HWCxdY_wf!TuQ;7KX!3P zm;f2x4|GP5zetjw3xzz(!g{!#x*){0%bJ|%x^B#m8%s>Hw0$64gsSVYU8u~22Pl^g zPP@?x8Ov(FubMT!e5dO0wci2evP~7nQ+d{|&ag7Lz*5zMb*r5|Q2!`FS$cW#J9?tr z&2{I&Hy(zNj+Q|~&4@0GqJ$zxbbwPj&aU*()8W&jZgkwicp`Uwx!uKVafbIX&K27# z9N9{GppabhaEnOj;*=ZK0#UxuXk5HtL}F<7BgEya@HX`=K9w2eT(K^y`Js!p`aJejUWe z9^NMd52HF#lqBzN7!Pa#l&B@LgK)sQeRX3(C#7l@qO0qM{A!!9B7PkgBsOJkGcKzS z5zGWnjN~b+IICiq1w%ufMIJDX%SK|EKAO($Dtg6!m1+|%=^N6Is(%uTHy2h=+QsYN z{RvVrQ1Pm(BpgifiS}`qcBE7vk<@&Xxp)oyz-8~EVIR9;Ds2Ee)o04#wyWe|Tw5d6 zU_u4ta`gUU{<6Fh2q+W{4x2s>!`BB7|7+FCGTE5S;}RUQNGwp#RsUqP^9v2^t2`7c zk?aA)x(I9-C#1lPR+8qwpzi++@t!Lsjd}fW>ygHn}!#Og?C+8))T-WN=2Rm03FL#a_&;VV034ZO=3b^Y|W!C<=`eo>dAOlqELn(L_u$f18h6hG@ zb_UYIKaTaQ|3Yb@sTwdUp8M9o)74f#Jf-r>P^MFUpHA&EZY?J0Y*t(IVZ;R6%% zbuN`c7~FQ9ff{_fRoP>lXBOEeTXIk{BwkpsGOng=!FAQ(>8*;q^NE4(wshuH!?qgj zCYOrhQjM&_Z<1;%(q7fmdhrssAy8f4y@9x;*3IypKgX<6d?=OYr4Rcfe^p6M12&A5 z-gwzH^t+>i4xAa6ja9|^YdN7VIEO{+TWmBAcuF9W6x7I-6fl5gR{eeC$rO{;jNS;_ zAFFA8Xon_T4*dxl7sgB=o`9voAhWd*WufU+1MIRQ4yggipku~SZFD{z7z5m+&Yrx3dq0^>%9 zg$ULFKNTNB6JYK9)-qlFuU*g8!CHjs->;tjZ=_ML{`UIcb(sIp{;&TpwVnMh;@JNf z)cfnAzbvYO+4_e&A-_h@|M}geU(fW{GyT_JwETa9056J11T?WAgYJP>fn;&z{FK=~ z>u-=sAJ7Z^H~oU>S6c)M=vE4pls{=0`+By4$7$TPJ4Utip!tFcgPt=NaYF#}ke6in(esP$CKgdlKV=x_fVz ztkX!{xlS3W$CoiP`^fB2PGn6$?JKh}6SYH9QgkuGIwtMYFZ1TUdP|4C8j46$Ww>x= zMP{m@YaZsioSzk$87s>c>=G**s(OyHQ@=>7*R2GRq_VR=sXAr|hAk1a* zM`l_8A?j(@Lxbze$uNxt03z6v{f3FCg)|sx3K`v(_wWnspHNhl^p%CjNG+%4;* zCn18p;S#B_3SU0@{E%PKnq74uRI}n|QF;uLj%h`vGqcN^gG>z`spYG~Oh+2x=-Ti) zKU}8oP887wqcmtr6zf3$!Kme=<96#G~5nLK;DC`daq6>xPivUjm?fA zSqeU&LwKSdv3w#3r}OkxI$p4XSBlfxYOX3*SW- zI9K2*M;~N8uk9He7Z7AO#-2T081pT{xiWplMux0K>uhTwtQfgVX=?8t?nPjz_gJTg zVt#_Ql5GL3Sh-2Sp7DD~%1xWiH+3xWtY%sal3Xan3otEe+}e^b(Dz-IJ5!+z+syY7 zGtg91BmpPv57`=2+vu#7#ggxGWO{iL^lphZ3T zO7Z%evKZ#IO0x@;lmlKBGS10ql*Hg@D8*(s8#9nrpw^A>^HFjB^ z6MRPGv$q$=;ubP;oyJw-3Q$v1ZdW(7HuOxKkS7Z?21c<51i4R!2ZEf5Xa1Jed^>8EjYq$xv>V(ctp8%^rt`M_75{Wh8VP}(Jgw7sZ%phCj8Kn2jH@n zP+xb&UdzU`Y0NXw)Aq${?(Yv>E4j-=qTj7u{A!i073z?~YTQQ?CY%4mlY6qNJ3ej= z?6N>#oo|zNkddSmcADpI$%e&Tp1!QyUSXSU;{?A_5{kTs$NtVh8RELnt}sbgcoE4A zV#jF0D8S2f7i$q~lj39GTPmAAhCRdW_T+&OX= z_M1R928>p<@prE)LiFsdo6IC*{VC*c-X5@uxKzX+^ySR`6WK_2sS#9NRQ&h^hyT?S z+9m7t#mU)oGJ4$O@{d^yf-Cu3Mn71TZ=o(1xqbsbUBfrrjd^L)2V6H@7xp8Bir2>$K#~8ro<)|6RNDLzCEn*?CcESW9wtQ2W$~AlbzB_&Gn{{1Gz-u zY*CNP@3%dwQY>z{nwlE|f^?|nunk06J3{aFJeK)~6^;!|WJS()mBUAd_GbGzUl1D% za9q*)Q@j*~(N9o@>C{iqvq+bodv-mdwt)oG4aCasUe;@1kvP3CwInfc(AczQfZrrS zLbCuHkr<1BW5~5DzrjRlhkx;DPCS-$0d3QR4+C+4!43dTt3@mW)L`I~WCMsoz|kLw zaDqVNEyS^j^G%ovuyaSeuy!=y4o%=7z9RZWAHTW}`&G^UD&{ACmD#__?0@|-``1MN zHIe@>Fx>x#gX7SZAJGKdGO?5tf3m_m8PNefD+)VpVG! z|N1BBBVw`}*jI8!3G6qGAc$4za;8oj(59zRhG^i-1(d2qcKbjMS*y5#Re#Bla8$4L z8Pa0h377eZbbsFRXw8ov>cX+CHbg1Y>PBXFv6P3Ku8>1T0poLZA%Fnc%$hoi;utb zPzAWB=tI|TkDl!GUfO4HG@}A{jkBJ;lriA@AM=t6H%|c1nlOm6)rtAz{^e zcLpuOZs&SabAnC*TaYKcPk5ge9J(B(%KIh#T@=t;M#Jl1dw2E90YRmIqITHu-PI4V zNt`1&wQ+J?O})N|tXX_S-Dze`3p_w=u_)4l#;b*8jNpTdpPyDRx5ICj<_)B=+xAVM z0&Vqplx;&Ru6n#RrV(QfnB88>avZ7TTM!^|E3K+k-|s%}7`mMuX?P7goZ&i*8L}z- zX2oKs>#B1Uv^2d2SqMIAmR$VEL^glLd@hIigwpB#c$%i11wFYCZf-Xh5fdXrkS(_l zN3@fpIeu{iyY>Z}J?V%pe=!v@E>pww#P^CK`iKd3)<)td=>3aqmT@+F>GXbqT^A1Q zp0g|Xh?8<*VQf2d2L)pvEn(Ky`)4}uE1bD06&LWK0H#RW&crL598F^fc6eREjzzrH3XC#F2@ytF+`wqHjs|kx zhV5`4H}ca=`B5Y|npni_grUK0gk*%@hxHnJoFGPjb%pPHQWCec2H5t8mA$w}*Q*T{ zKQMm1WpH?AI!^z(ISq|Nz>VPs{HOYPj2^}=dX0TTsb1P$rP1Wow;WyS*hSSRNaUgE3 zT&`&Xv}6z>gGA8H(6hIA92;$q!XZUX3?YEISUY>fVBi2T z`J+m9u5tTP*&b%J%sZ0(lt|RzfzZU;ke7V~~`HYG4*LA`R z&vs<3om3GQuH-bz`Ov27ZFgFfJ-f{Qnrf?;QZHrttMgHkp)!M`;me(rPM3z%lrKdT zpA&D3yluD`5+PfzM|$xLv+s#&F;XUZQqNTv8HXVrKhwX2*S|lC{&;}AxdH(ACxK=F zM#p`ix$TYAI6iQ(X~8OJ@GgVrKCzII%Ei|Q;%y;q6R~Pc*?rvGOV%H4LQPNKw9@R> z)$h~qd6F%5n2&g6wxva=k)1q8MiEsWI_?4Nmq3dcU@s4+mN#KKf4%u4sfeD7?w+o2 zzy8pWuDq&}k{WgNpuWCtM{!?Yzx+ks9W_>7hg9FL&wzMyf;~#y+$!^7kayXwi!^%j zY$d`V&{?)0Al2!?Sh^9Gb7dDnBy8_NGOFTPOjX4P7q&BGxsD#LP8JsguuZz?_Sx~b z=PHFJV1^d;3OY5hX?$}LOi8@X8U-;yBJ8og;Ws>|H&{JWHk7BkA}`s{yrT6UrtKZH zc+syKU8~(~;olR?B6s)$N*V=d!!>g!T4lthY7Jhum#v2vD1AlR`n&c2Pc5qsC=4-eA>gPtdq5a7Lv_T5*1>Lt2%8IMFHtPY3!r={8X2~ zi^c=5(N0s^!JhB%gHm}Y-Lv@bMJM!y)k1Y}Cj4IWvxa_e@#&~4MmHn+*Z0Gn89u!< z_sx)1x(V^iJ+Ton|6xaAR(kN3tKHp=wYYO{qyxRy(_!l+b6GxKrFv>HsFO+=ifYoC zmEyjpJx{9XCfb=Wo_ZT6S=Q*wS*E*BReU`340#V?jlbh~k1U`^TQEGiU@;n-Wyyyg zD%3(SSbVDD)~MHI^lq46ILue|hK` ljcS-ohE40v* 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

%4O}GRF|u&-$xAuxnrYiO5nTJHN@F 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

f#7=&KcE~P`UHeig)}ge|guZU+ru(SMG@7X+a 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�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

H9I* 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�fCUf|uC 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

nughRgmj_NFDfw5%1_EK2c$mT=#(DIpQaGhhB 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%0A+Mzcc^L9o%d3G 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%0A1g1gC_y()1S}J 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ቼ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°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 TNSOR*KHV`t2OvRk-#-5vzbGoG literal 0 HcmV?d00001 diff --git a/Emoji_Charades/index.html b/Emoji_Charades/index.html new file mode 100644 index 0000000..5eda488 --- /dev/null +++ b/Emoji_Charades/index.html @@ -0,0 +1,23 @@ + + + + + + + Emoji Charades + + + + +

Emoji Charades

+

Score: 0

+
+ +
+ + +
+ + + + \ No newline at end of file diff --git a/Emoji_Charades/script.js b/Emoji_Charades/script.js new file mode 100644 index 0000000..b525f61 --- /dev/null +++ b/Emoji_Charades/script.js @@ -0,0 +1,99 @@ +// List of emoji and corresponding answers +const emojiList = [ + { emoji: "🍎🍏", answer: "apple" }, + { emoji: "🐱🐶", answer: "pets" }, + { emoji: "🌞🏖️", answer: "summer" }, + { emoji: "📚🎓", answer: "education" }, + { emoji: "🍕🍔", answer: "fast food" }, + { emoji: "🌈🦄", answer: "rainbow" }, + { emoji: "🎮🕹️", answer: "video games" }, + { emoji: "📷📸", answer: "photography" }, + { emoji: "🚗🛣️", answer: "road trip" }, + { emoji: "🌙🌟", answer: "starry night" }, + { emoji: "🎉🎊", answer: "celebration" }, + { emoji: "🌍🌱", answer: "environment" }, + { emoji: "☕📚", answer: "coffee and books" }, + { emoji: "🌼🐝", answer: "flowers and bees" }, + { emoji: "🍦🎂", answer: "ice cream cake" }, + { emoji: "🌺🌴", answer: "tropical paradise" }, + { emoji: "🎈🎁", answer: "birthday party" }, + { emoji: "🌞🌊", answer: "sunshine and beach" }, + { emoji: "🐼🎋", answer: "panda and bamboo" }, + { emoji: "🚀🌕", answer: "moon landing" }, + { emoji: "🎭🎟️", answer: "theater tickets" }, + { emoji: "📺🍿", answer: "movie night" }, + { emoji: "🌮🌯", answer: "taco and burrito" }, + { emoji: "🎵🎶", answer: "music festival" }, + { emoji: "🌈🍀", answer: "luck of the Irish" }, + { emoji: "📚📝", answer: "study notes" }, + { emoji: "🎮👾", answer: "video game characters" }, + { emoji: "🏰👑", answer: "royal castle" }, + { emoji: "🎤🎵", answer: "singing performance" }, + { emoji: "🍩☕", answer: "coffee and donuts" }, + { emoji: "🐠🐟", answer: "underwater world" }, + { emoji: "🌴🏖️", answer: "palm tree beach" }, + { emoji: "🎭🎬", answer: "theater play" }, + { emoji: "🍔🍟", answer: "burger and fries" }, + { emoji: "🌞🌻", answer: "sunflower" }, + { emoji: "🎣🐠", answer: "fishing" }, + { emoji: "📸🌇", answer: "cityscape photography" }, + { emoji: "🍩🍫", answer: "chocolate donut" }, + { emoji: "🚲🌳", answer: "bike ride in the park" }, + { emoji: "🎭🤡", answer: "circus performance" }, + { emoji: "🎉🎁", answer: "birthday celebration" }, + { emoji: "🏰👸", answer: "fairytale castle" }, + { emoji: "🌍✈️", answer: "world travel" }, + { emoji: "🍦🍨", answer: "ice cream delight" }, + { emoji: "🎮🕹️", answer: "gaming session" }, + { emoji: "🎭🎟️", answer: "theater show" }, + { emoji: "🌴🍹", answer: "tropical cocktail" }, +]; + +let currentQuestion; // Stores the current question +let score = 0; // Stores the player's score + +let winSound = new Audio("./sounds/correct.mp3"); +let wrongSound = new Audio("./sounds/wrong.mp3"); + +const guessInput = document.getElementById("guess-input"); + +// Select random emoji and set it as the current question +function selectRandomQuestion() { + currentQuestion = emojiList[Math.floor(Math.random() * emojiList.length)]; + document.getElementById("emoji").textContent = currentQuestion.emoji; +} + +guessInput.addEventListener("keypress", function (e) { + // If the user presses the "Enter" key on the keyboard + if (e.key === "Enter") { + e.preventDefault(); + document.getElementById("submit-btn").click(); + } +}); + +// Get user input and compare with the answer +document.getElementById("submit-btn").addEventListener("click", function () { + const resultDiv = document.getElementById("result"); + + const userGuess = guessInput.value.toLowerCase(); + const answer = currentQuestion.answer.toLowerCase(); + + if (userGuess === answer) { + winSound.play(); + resultDiv.textContent = "Correct!"; + resultDiv.style.color = "green"; + score++; + document.getElementById("score").textContent = score; + } else { + wrongSound.play(); + resultDiv.textContent = "Incorrect. Try again!"; + resultDiv.style.color = "red"; + } + + // Reset input field and select new random question + guessInput.value = ""; + selectRandomQuestion(); +}); + +// Call selectRandomQuestion() when the page loads +window.addEventListener("load", selectRandomQuestion); diff --git a/Emoji_Charades/sounds/correct.mp3 b/Emoji_Charades/sounds/correct.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..5c82f39bd84f9b28cddf12f573982ee63a2ac1a5 GIT binary patch literal 18720 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 UY&E(3|Nj@v_0O<%&?AEe0Ah_dy8r+H literal 0 HcmV?d00001 diff --git a/Emoji_Charades/sounds/wrong.mp3 b/Emoji_Charades/sounds/wrong.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..164e96e9c33f7efa94422371666dd350522c628d GIT binary patch literal 16718 zcmcJ$c|cP~+Xs5G5=g)#1V{iiVP7JgEFd6i2#YL1*~FkAfv_qnBDHF*CWM`!VKv|u z0dYec+=|s#5|#iG6~S6;ZHp+l)Yb)UK`Gpc?f2dHyZ_(AlUbi-&P- zCj@6=-QsQ?^beh|msRS$;rq=omEm60@sZ7uo4GB+HNN_1oFjKQ(Q+M!+8;=iLriG~ zJ_|`p8+1xw57g&eo*49`ZNZB+@SoC278Fvdm+t0+ANHJzdwKNBOW%GyyWh5i(Vw@l z@11Slk3TI)`fVX7^;lf8xbJQM{>A-y3CvSvSFSF)K6*I0rYoFE*0ng@VO}x;k#i*phByooaH(LD*2nGjTGBNkvzX(6vZ(WY>f-VG+4p z#VbTuM#Y7t@o{IgX%Y5VRnSFOs)>Wp?T!=~!?KUfcDToIi8@InM>lxhKf$kuZ`5C^ zPOykun@@{(c4ftFTHq18ER0eajXtoK9A^Ku{kr?Xjc3l?=x>ajw@6nn`+NQ3I+sm< zWZ!oDl6%HIE&J}L)!E4o`)gUPmrwq3{jmGT;SHSC`;R~SGkosansZ4z)1yysI?v3w z!aaMQ*?NV0ZXP_puH0*g{^$Ao&0kuIVX%nzM+LZn{2N`b_TJ}Ef3_Bl24>xL5cW#x zLkLYDLe>9xm%bZDA5@N^sr7t$Spe^8@7tD_fj+qh=RXbi&>_|)(~yThL)gK9ETiRW zC_;M0$klZ)FO%H(TyFK$BksMKpfHuk+Z&!RGA97!pZx8V{rc0I8t$Kpk;S^(&ifbtH5cJLz4U*E!w}Cc`0w2O zyi5aeg6)2V3kc?MRYR8RcEoFfS&z_xmc#;<39;E)eSl>`(1dzXixAp^HzKMX6d+S) zP)&*g3Uj@bu9!25CTqJY#T8}1Ky`#oIH}L%@cL=`+8{y^rOWEh@?Ce#1nqmfFoY|V zI}wordN1WRi8zQcCB_lgS7-3uj2SGRY>6?OY|dm_x?p@Of(sNyNPs45Ij@U+Y*q~7HO)Wzyi>h8tcn>cRiV3_QY)|VRuR3F$Se)Br?9}Ay zaAz@M%p5|5*Nr~>VQtJdnp3!M-iYfbw0{I1!d@fht>r$@kC4v?-H+VK z)ius@pM6~8OoGlZ#+;5^|8>Uh_5O96S0~+ei*TCXd;Gr#>95=G_ICc)p#A-h4nYXk z0_W}&ZY7J3nj%GCV%K78u##w22Ze*oMZuQl96WRw4nbTp-o6wrMH}W2RoZTGW!b{t zCD?ecjIRHv5kry$GnYUF-2%2Wtuax!!J1gk6w7Xh%aY}GC?t*3t6mx{kuST>6AQo+UR(W z6tA}p2&1Nwilv^S{8_3`ylu-hN$J4e_2QMNl-@=oMlxJo_|l}th}2Fe?eg(jt#2VQ z3Y{o|)4jTN?$v_J1)?yrCBsM4^Uy85f^xYTkKVB=u%c_SNEdTOQeo2>c%qx{ar*R6 zU9Bf%RZsW0km@mrM^&1*s4|&!IQY5c!Y@Nmsc(dI<9ib0q9l?e-sx2-WW8gR3+9Wc z2Mvldwb{;$hWo+`C(eeiE(t4-Ydib&%x!CFT99Da9 zqFF#K{VfOO6lh3On4uR3Jn}J@dt

H!SpMExp$k)|+Z-ar8+Wx}`~wzZuGk$Sx88 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 OV2%e1hS&c8_544wKkwZD literal 0 HcmV?d00001 diff --git a/Emoji_Charades/style.css b/Emoji_Charades/style.css new file mode 100644 index 0000000..d892fb9 --- /dev/null +++ b/Emoji_Charades/style.css @@ -0,0 +1,56 @@ +body { + text-align: center; + font-family: Arial, sans-serif; + background-image: url("./images/Emoji_Charades.jpg"); + background-size: cover; + background-position: center; + background-repeat: no-repeat; +} + +h1 { + color: #e57c23; + margin-top: 20px; +} + +#emoji-container { + font-size: 72px; + margin: 50px 0; +} + +#guess-input { + padding: 12px; + font-size: 16px; + width: 300px; + margin: 10px; +} + +.score { + color: #025464; +} + +#submit-btn { + padding: 12px 20px; + font-size: 16px; + background-color: #bebb0a; + color: #fff; + border: none; + cursor: pointer; + transition: background-color 0.3s ease; +} + +#submit-btn:hover { + background-color: #fffb09; +} + +#result { + margin-top: 20px; + font-weight: bold; + font-size: 21px; + color: #e8aa42; +} + +#score { + color: #e8aa42; + font-weight: bold; + font-size: 24px; +} From b31286ef3702fdcea0a3f0abd830565faf22760a Mon Sep 17 00:00:00 2001 From: Gobinath B Date: Tue, 3 Oct 2023 14:42:04 +0530 Subject: [PATCH 22/71] feat: index and assets --- 3D_maze_Game/index.html | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 3D_maze_Game/index.html diff --git a/3D_maze_Game/index.html b/3D_maze_Game/index.html new file mode 100644 index 0000000..e69de29 From f8e0d5486ed8da1ef3955b10d61726dd6b7b2ed3 Mon Sep 17 00:00:00 2001 From: Gobinath B Date: Tue, 3 Oct 2023 14:43:39 +0530 Subject: [PATCH 23/71] refactor: index --- 3D_maze_Game/index.html | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/3D_maze_Game/index.html b/3D_maze_Game/index.html index e69de29..bc789af 100644 --- a/3D_maze_Game/index.html +++ b/3D_maze_Game/index.html @@ -0,0 +1,36 @@ + + + + + + Maze 3D + + + + + + + sharing image +

+
+
+ +
+
+ + + +
+
+
+ + + + + + + + \ No newline at end of file From bd54be70c362840305027500d3b1897ff09cfaa5 Mon Sep 17 00:00:00 2001 From: Gobinath B Date: Tue, 3 Oct 2023 14:44:22 +0530 Subject: [PATCH 24/71] feat: style sheet --- 3D_maze_Game/assets/css/style.css | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 3D_maze_Game/assets/css/style.css diff --git a/3D_maze_Game/assets/css/style.css b/3D_maze_Game/assets/css/style.css new file mode 100644 index 0000000..0609fb0 --- /dev/null +++ b/3D_maze_Game/assets/css/style.css @@ -0,0 +1,24 @@ +body { + margin: 0; +} + +#canvasContainer { + position: relative; +} + +/* JOYPAD */ +#joypad { + position: absolute; + bottom: 0; + right: 0; + width: 145px; +} + +#joypad .top { + text-align: center; + width: inherit; +} + +#joypad .bottom { + width: inherit; +} \ No newline at end of file From 22755da73161c1c7f8f02b3e4a870700374959d3 Mon Sep 17 00:00:00 2001 From: Gobinath B Date: Tue, 3 Oct 2023 14:45:02 +0530 Subject: [PATCH 25/71] feat: images for game --- 3D_maze_Game/assets/images/html5-logo.png | Bin 0 -> 1580 bytes 3D_maze_Game/assets/images/pad/kbdown.png | Bin 0 -> 2227 bytes 3D_maze_Game/assets/images/pad/kbempty.png | Bin 0 -> 1555 bytes 3D_maze_Game/assets/images/pad/kbleft.png | Bin 0 -> 2233 bytes 3D_maze_Game/assets/images/pad/kbright.png | Bin 0 -> 2251 bytes 3D_maze_Game/assets/images/pad/kbup.png | Bin 0 -> 2193 bytes 3D_maze_Game/assets/images/preview-laby.png | Bin 0 -> 1275491 bytes .../assets/images/textures/ground_diffuse.jpg | Bin 0 -> 417657 bytes .../assets/images/textures/roof_diffuse.jpg | Bin 0 -> 36348 bytes .../assets/images/textures/wall_diffuse.jpg | Bin 0 -> 547878 bytes 3D_maze_Game/assets/images/webgl-logo.png | Bin 0 -> 8155 bytes 11 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 3D_maze_Game/assets/images/html5-logo.png create mode 100644 3D_maze_Game/assets/images/pad/kbdown.png create mode 100644 3D_maze_Game/assets/images/pad/kbempty.png create mode 100644 3D_maze_Game/assets/images/pad/kbleft.png create mode 100644 3D_maze_Game/assets/images/pad/kbright.png create mode 100644 3D_maze_Game/assets/images/pad/kbup.png create mode 100644 3D_maze_Game/assets/images/preview-laby.png create mode 100644 3D_maze_Game/assets/images/textures/ground_diffuse.jpg create mode 100644 3D_maze_Game/assets/images/textures/roof_diffuse.jpg create mode 100644 3D_maze_Game/assets/images/textures/wall_diffuse.jpg create mode 100644 3D_maze_Game/assets/images/webgl-logo.png diff --git a/3D_maze_Game/assets/images/html5-logo.png b/3D_maze_Game/assets/images/html5-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..b703d60aace0c322e0936e2008ddbcc82641a73e GIT binary patch literal 1580 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 literal 0 HcmV?d00001 diff --git a/3D_maze_Game/assets/images/pad/kbempty.png b/3D_maze_Game/assets/images/pad/kbempty.png new file mode 100644 index 0000000000000000000000000000000000000000..cfa09bff432b61cb1601f796d7243519ef8f0d79 GIT binary patch literal 1555 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 Hu0mjfJE~5Z literal 0 HcmV?d00001 diff --git a/3D_maze_Game/assets/images/pad/kbright.png b/3D_maze_Game/assets/images/pad/kbright.png new file mode 100644 index 0000000000000000000000000000000000000000..134eafaf90e8db8805944245853bb2a73ecb655c GIT binary patch literal 2251 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 T6DgGp00000NkvXXu0mjfLuW3B literal 0 HcmV?d00001 diff --git a/3D_maze_Game/assets/images/preview-laby.png b/3D_maze_Game/assets/images/preview-laby.png new file mode 100644 index 0000000000000000000000000000000000000000..44105f8efffdc9b076a430a97b8c4804ac626e95 GIT binary patch literal 1275491 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 lV_s5;x^T9z&ZrsKkkQD|7Ab zYULG>fb=&*`PFjiTm9L^t&s_Uujs4yS0(ldbF69&~OGy0FFE8E|g*+BXMWJKzB|8~_6x_TvkL zA*o}p*Rj{{CJC74{UrckRtk4DsZhOts{io_L?B9hFo0Ts0cHZQapGrKolYeI4_8x( zHVgm*$S5FwK9jm!%s=DkNJSV9?~h@Pnxu$7==1M&dw~J12ae`_d*iNU{f?>j$kFQY z>~uM{9@|>?R%)Nl=D+~=R;yncD_@!`-GLo4hWo+?-AE~vA{pwDU;r$SV&H*8Fo2`XFR;WkUAN#RsOWw^uuoEGtN6;fHB{r>FDFx81|rD zi}CK2)S#<|a$quXGMPH#eVEJM%x7*G1waa#ikQ9 zd9*`!T89*w#N^#KH^6^ETrYWnfQN>3nJh}w+9PTnvM-q6%h(mgQ z#^{_mzU;`_f@_{cE1bs!@Jjolt{wi2mL4$(@1u^k-jJ41qWMS85y1%L^}?{<0P~11 zYCGph@ARY`U?R!vMU7vmFGVBUwg95o$2dq}L4_Q#$CGnJ=Mq#y@-D4DA)T*Z;Qj&em&pL`sF5;5 z3FrqT93ebCj@Hf+IHj&%Gu06XNpVC~NI)kXwf(8yJECeIeHzlb5a}#Y58ui(DG>Ec z24j{5a2FOv{)$ZuOl5+^H2}y_Ma&*p4v%x*nKph?F;$9_Cg@ZPg_R?!^r4A2nj~b+ z$)&gsqEL);O-qxU4ayYeFq&yC@kRg`HLsxO{hpJiJghWGQx{|#n+ZEhna}W6YcEti z3Q%6Cnv*8HbIJ3@14l(z$RtV$SAd;-aMYE?SRgGk0qjsMX+p$cH!V7-{>v-GD#J-5 zSsBK8q{%P}#yQfIk2z^4(duceDx5U(wzLr{aow7b7VQ{)Di>6ag8GtA7GhI+x6fgt z2`Pn??glIlhCF;-SW?PB4E!KsXz1p8kir>ka|l&Xw^2z>C9B&92!vd9?Ly=@|WjF&Bjg~V!6Wq7J z0Pzj7nfaJ=rGb+Hhhl7{NNDX*p_&|Wb7&8sAf$E1Py%V%`EDYs75^@l@;^Q1qGAX@ z`+vbv1~KB61`iE38g6M5#uRxPSfyzy8mStr73CtT-O?891?E@FuHuTjWcIH)A`Ne9 zC!nm-l31mYe@wZrSDTH-#YUSSejt2EvCz>eZ`vn~8-lV9Q|70djV2brDuYibj_oCE zG?jrMf$l-xbFMM%lP2~FqHhK;AcazbDDEdr2HNJQo+^SUF+UZ?Cbu<4xQe5t*l0=< zmDZuo;*OxkP^2KMSZ=XBC6hal-N7U+Ryj`9FEfoN>4x0RWHCR)Bn^)QHM)@_5<@K+ z19Bh!eh%=vsmyG^!+#o}5U41fWQt*=*GUw@AQ{s1w+xVzqK%+W=D zv>5AJighi7A5MGjj9TxG+8#{0y5@p|=G=s@F&95t&R!YIFHM!#=IUE(?Hxz}JOB(} zF%}RQP<**me6>>j%GUe~Yva#(vQ&79$0;~B#N3TR-!boz2Eems#ln@pY)AJ*mC>~e2)xp}1b-+Ewg+_$cS0s6eV z-HZb82r|~cSS;N&R34aWcZ}7~O_grah?A#Xf!+JgW*1>(-dz;KLjzxso!T^!(x%lH* zMgegm0`LWzh(P*3on)ktxtz=K`k&0Ep+e!Ws^$PW1RMMznK>+^&X&^`<3R>2+bELZ zBN=n&!8OIRuR+1511-HkA)sq^1U0l|9>GEp_P;WhQ0Y#x*{@@;WAL%r<0=CMmZ&34 zqcOy&D&x)#v}MZ1o^D@NEGEQdf`+j&%EEvzKYWiOM-T5e%SUfZFV3n-}(ZXTMj< zTG{V)5U(bpP?&-QB=9J@jr?@MS)H+v0Yu|j2E@I_6nzeue=$5K-!8#3j1 zDzRuAFn`1~kFKqXbY(8DcvYnyXzj>-4}q5}Ip^e62uDhAR=jTt&yxT#nZ^rT85P&5=`kagW`mDuFV0N4~WeEuo&%yyWQGSCRCLH3m}@8lGUCsd(pYPMUT^ zz2&4SDw^0Gs&_!e*3#TPhNRAMsmLw34GcY`(XJfd+pa;9H6}U-QEgH~kAv2rodD8| zlI0{p7D{LfNrR)q4%HYy{6G_ZQ^5(5F@y+1SbqZP9L70>G#*tWmXVb5LTwY$M289& z>*Er$Eql-d5M^m4JaUNU9mcu1pi14ZtgFXvjaSx!3e4pt0(apq2tO!N{lH#uVN zc2>7EdI{}TjB_ERG4tX4M!_2p&}){EjrZK^iIR{i zHkzOsrA3jfZrEt76afeyu+c<6Al|Py)xeYKh)s2>fS3&^q7RgHjRQ z+NG+n|F+FW6AM(-u}>uj4Mhr5GMRb_I8mlLEaj)!Nvq|k)yH4kaB1gL<$|iYd8*~1 zMg+_^cyQFbTd>fXa!b6h%W`7Bp6^acQcW_p3GfO7oN-%pU#z^FH~Pb1Tt*AU1@&xJqGv#!~heXjb2mX z-hAxgLj3Vk;xVM4DH#Ra8+SaM@;sgm44AUx-i_JV!D8lOwe-SVd2Ok_wN&33ORo(1 z=gax$E5#Qpr5Az+%CDD;uNDi;1l}!|-|}QZzTw$Y>T1%rH(;*!u2hDM^>J%+(y=|| z+MV_sOipg~YpSeC@Z?<88Yg=iB55+0Se?06vru6T%?+>`a z10(>P3Ii0+jPCuDW-%K+x zfX-BS1`GfaOh5`^DdG?dLeYHY3GiSX0D!wr>ayRr_t3iW$lfGG3;+Ng;PIio@t8S) zd;77y_0Y0`Eco6^^}ccKp{0J;wD!5N(oJeu@~kVcch8BlkU)sX){P$P#*k}!+`m5& zI-H4}EM?*CU~IaJ{1+HN`@hRt??z4_7+_~Ia=4gQ7@*hs;~vvz{pLHv&U<6t`{My% zz~h<7<2lAS$r1PZRP10nbvBi`m`I&XXD{dTH|T?>lY#-J<7ZHVP)Lh6QR;j?dA7iD zg$~Dp`}3&_7GIo6otlc*;dRyX!?RzR*^39FvY2T5OQVtErhvy>%=(6S0>LcpN%bzGgIHn0l zJ*Q3RYcyq75CXa@tKKTxzdgFi2G359#~(@nYOk=A7x=Ugsztdhtv*r53MU?>@;QCJ za2Ya&Sf=uVb=r~8P9QHq&4RYk4g(Sewlv5keO9TN#o~j}3Qbm}fsViLH}jsu)KdGs zazyplR)ctb@Rjnc9o~Xu0I9{epVD9N`Z$HlmM;oac;{ks4)+)FMiFm&NvDd^^ILc0 zh??077Y}GK!)DHJz7XoU+VXSTu!BT(O8&00LlvGqMU_y`mC1~_%Fy)(RchXadh>On zFk}+S0!_J5i4fZ2y-i3XXAMh4*eS?Qsc9%^+PM%?^shnBP=$;1%Qf{}c+3U}X`#_Y zgr_m^06KNPQ{D&ZQsWJU7iv*^p+ZP=3n7hgw`05-fiY0gI2IwK;R|#dZzNu*0^8__ zbJmm|oeQr`NP~?A52`(bdT)d(YGCDss+=pu#9da0jV63(l}@Ee=ORjB!lMaknrnB< zM$>r+%HB%#m{|@Y(g@{H)N}EHB{G@mjU?Hb&&b13F z2@g=w=tJ|LYCHuSO-Sdo|0T8K1I@kGNN6gW9xE|*5h4l~p@eM<>0Da_$y`E&&YE=I z4(b;7eIc+Z#(BpARU*0r5VXqk_AE1~2?LDt(6lk4C8ta7ES5D~bt`fpW&BS)$tM1% zFw5bWOFsABYpf?>oOh^beD>i%$?4-1Kq>r?ZVrG{zPj3BQ3FPy1`5ulaaa<`KT@#hTCiB})UYm;G z&~{ZF=Tor((1Il){mbn_Oq`GhcuAmBncOlZ*pM`CH5TC0L^p?-435ddL*wqJY)`fG zDWs-vd80u>Bl1E4&ZaxL?aM#~JW@Qgb3Q@wIx{rJW$;L$pK${e5*l{{R7~PX0f5P% z#u0c%|K)oO@VlwZe}BJKFu+vqdLnx@p1vH?e;GdGvuGH zerzHq%8Y>~|dbgp} zw^AK~4rFeO*|sKKd(-}-$-t3@0e$B6AU=!1IgI(8Wmjd^94VVB>MR>7)gV=_m4Eh(Ocvr&F<~!@-L|;tRqT za2&B^+)`tx%P#z`q;BM6hG+>?A>)XA2?f& zSp4g1wZ~i^a&C@M;)f3A64dBNWCM?ec8~-NdbhjzwbnY*fMNeGe4+W|@sPdx!(Piz zdQD#pTE7^y-5qh?8S&g3_dlEpJ)DU?oJ)*)8hC@w$PnOSJasymIiJm=;YJv6Hk~*{ zdw>FAR*3}WfdPs0In>XXAO#N)3@m1u4_wZs&*yVj%hhLw{JDz)S}IX0R2sK3^l$go z#9U8rGtg#eShn+Ggo7Sp)#-lOWXstS14Knz7fQD__vrX1gK=i7nOEq zYR5y(hYmqW5uhBc5>|qP#8g%D1Bg(uu z;i+Whihz$Ly;bECuK|e)Mo^BZ$`sX=78Rzj&y{3W!xi296Ad3T8KIZZQkB~4))7^V zCf_@v!oaRDje&g*?}hzdj6@anyyJ-4jyht?#}O40v&t3_vvV9#Ic3Tbm9(RZHB2hP zrlOuBbjJRuZHEdc8v;6W3>AiO7OOx7mWCg?UP$Loz)3;?0BXzkWxbv_i5KcMnOu<0 zDf-pYs?!hbP}{9psoSKEM4^rkQu{rJvPBCstJpp|3_*I9LOpjdaVn8lwdjU=E^IV> ztCU0%P*ef~z&rntjTR{E#@3G0jmyH$^UC4d%F$QK zG|Z6%252^#QV6Kk78P(!>S4%->~o$A8!dGR>D(HTgg$5|BC`<^S_!d@u+J6sypz(6 zEj^_32vjtzbtI)*Eh4&QfMbklDjHf8s{c^_Fj2k8wO&;A-c=7eE~rYBqSE?aqfwE> zZe|^uI3r2F7Ul+8044_GWuYg*S(poP*MAz3f&yiU}{6cxiuAy zaBg_#;(uDl{}i~$6@_9!vcohFO`Qeq35x&IN#>SxXZ5NSI@L=^WhzQc$nkAkVe!Z8 zSY$$Nl2~prG$R9nOHn?;Qe@wnpGwTL>Z}*>4^?e-A=2n0g)}HUG%-I-;hn&*WtK(4 zH<{e<&_vxNBs8%ZXuzyZBK=ShN%NN z!32X84)H>Wlo>jm;(4k`XmUd!+8GiZA9-br)>-0t`aK5t{Z;F~o4=$m07HQ6^+e`U zV1Pmbli4d~0(v0uJqGyShabN;3^3-Xjl0)}9cz8&V$VwU(PH9@aqmz1Ex3X{m=5$T z#rjRz5m#+0yfcS%HG8!{1sT7bi(SsgujbTd#TjBRPJA?4H`E_Y+K`=0|Erb{fEQuok4qR7&;JXVun)J zT)KC;Ai2WstufCIZu;X$1;V(3N*367=$vrkVc!`5U_68+==DVGdOUVD9={xqUqA}N z^M`oge$W1J01fW-MC4{TcsUR_8w#C|M)@Af`s?ZJ)7kv9h0;rs>=ueIrc&4Z>=;7; zoqZO+o=H8O%RHM&KjEKdAl8$09X}^-jAsAc)wTPk+I@5FzNO9r1N6GKA6Xk;8Y=e% z00=?=8{9)QY^*-Q^Tro#88qa*GH z!-Sd4`80EY^cfgnI(IpnMeuMsoj`tYEUN1m5@AjvnG6@R_!N6a1>^ftB`T5|@=N%6b;tp(^5~N!jU8%HFTM&*7l!ZWAn&wgbB6po0Nq zmlZehZJj%I>wT^ZmuWM~0m?O5IMOUi*BJtOZpD)~iPWqP$23woX4eM^m;Nb@&31avV8fwrzvlc`FTFDfPJDtkW?0%Ce0 zpl9j)!I`FIsK_U2N`&_fh70aC6T~GgS z9Z?m%L7x|p5AgTfA#(LejWj-Kt

lggQrZ~Oh-gxWZ`8Is`r`Xv)hED!U?f>LE_*3{8LE%4pP!uqD zW9z+fuYQAH$F=dTdF8EV_xsrSU$f8tE&KGp;}7Q9`~j9BRbuZGw&zm>IXF0}h0TRM zZ~wWza5Qhiml?c3P~98W!k#I=r;Lx-t_Ib3=xaZ6*B|=3uRZNomda!7nLtyu7lGB6RPPaFfV+W&0FKV5?$xi+eTF&(V*{(K3vd6Kv2cjx4bR@VFOA$2`A|WP z8~qINl?6e1o>wQi)}l5t09i;HKo3hx?r-p|S)2G{nA}cMz?XK6~MaoF=HbcH;}#P*Q(RTIEJ=0)Ngp%c<%TqBH^N!!#F@|*;b8NWWp zI8tp!4CU}dF>;ICBF1ZDrrqqr80&{sQ%uj)xMYf{R3p9)#yUdG`eStIq-2W3SQ)v+ zluR)aYrHR~wHB%PO|AgG30oIFhm+QV$?x(ja1f14qI1&Z(1GEb#6tf40BeOLF;Fjs z04rUafB-A3U*XbLl)F4>D(DMr88FIQbur*P~0feRoT{ZhME_R4O8cRjaFIP5w ze6UPhb@DK@R=Vr=n$`-EM8sC2Iq~NV2}ghOwFLPw{wlgWL|kbtn7){TTjKiyrim`} zCDt#x(09xW8W;M~sc72jM#|&Rlt>aEQ@dS4PhhI(q~nB>X>kU4`jiTR5;bAKE*Qkq@SK|F|>10l6RFQUJ>gUIPS# z2X8tE@`ChWXgn~tADP>aHP8SFq5%-2lA~NUz6WUm4S+2SksoQa*y3i6imqL8Y?Dt{ zYawEbAs8W4L=Ln7Jy%XKjLNb*`sPDw^DF<}x7aSJ;YTVRtMZ46^qw#>5~AEUhsLW{ zF5+o7R`Vg(av&Pz@xxulw#lE3DJc57$g9un2?!j>KB*K4Zq306Wb5!;13qj;xGDtJXpMvm z45=zZFdCs=4HQV`SdlqIBpSag90A~d8fs5m4vbW=mbTlex?hsE8K^1;LG)(KS~ zs-h*9B{-|~+=m8`Km%B3caQhk zymVe_lUZYGXIgHJON?Qj+A}9I-(e|lEy|W;7KJ@z3FRba@2pV$@x7(r-(CFet@+>H zod0x+ePfn?drmO5B$?+aK?KrRd{iW#uJl7$l!q4~9<0#OMh{}6htB4fI)z@kEZZJgG+zuCRt?d75dCYMP^75E&)r zfIgTvMoX$dR_aR`k`-TLHN9~VTiL-A?rm9f$n^ru8dLZ)`gmC#K{s^_Su;cf;4!6^ zbcrPmoJdI)N@SHW#Pg>S8&JlO96(|1tS+@+&MjJtOSUS@-ax<~Ss%LOZw0UWDE*ej zceLQvS1;_XXSm7AGKbRiz6kjNSW^lI%FMPnwkAz(D)al=@(En~pr=8R1Dk-!o|OKg z9vF)m*egK-1)~isZTtkZc+@XQk67*)=>pV&;XYvRk~UxG5Y4-9v6aWL4)~9%axTMu zrSTXRe6qP|J#(Y+cl$du14K@s0sdS10yh1BHuc^pDi>;u$gRhw?qgYYOB5TJYlp__ zDHIEC7tX;OBZLR6O1-fLfD%9?z%%;J2P^;f55ev4yrZw2t1$OJN4)^rh_$#~)E|1_ zO{5qb^?;ZFB_kT(}{^!D* z|Go0=|C4?C|MH=Pxc^2G-}#*9|AKA*e9?HDX9IcDUOV%2pCT6}3-r|CfhIc8CfC)N z+LK$7$hyDxJhA>Z1iW4Kkqr=1_*Sc+Qe3z@&oRftlM48;rE=z7c^TaJGP3nHy@zwb zBYX9jYCiCGAA7owEmdUTcC?udMGQR{$8c@oXoCnE-k*&4X}u@z&IQ$Z=;=JNR3188 zFRblXZiM7k-=dFMi^xIqA-Ys>qX*)1UV|En2)0o3n&f>&^sX2iyWm}Egk>s7y={rN zDGPO_0kp~Ba+O?Ehd?htDu8Q>!8J$M0K-#Gr&>wg@mi`i&ZJt2!J0AcFvUP0qJ$XE z=4GVy|GdGP`1oOFz@$jZrvkwI*X#tZNut96(m~4*(8um-L@m=@jEVn$-PPA>r^Z#R zglcl#T|Jo~FRj&+x+26Zs2@FEaf_$R27-lPz(3m7yNiQr$RoX*B zyGP(ACr%_lONkSS&ag6nr!D+RaEria8`duX^?kY3U}?f^1*vK90EuA$TmKz!(3mAU z$q7u1D|Ci+((j85D=aJ5Gps~tG1MSykO(crqp>DudJMovqOD&~Xih6BGMfZgA+*NL zzO>M~xmb8meT%KF2pxrSfa(b-Mgk-Y zn8Kbu&kGP_7fv4dyfNitXMZ2@P)n8LYLUFA2NhQ%AmO0_u(+kY;C;TQkN+tPZ@{Jq z2&N*2UD76~^G3LFu)L20BY~CqNE8`LV(Zw}tCE{@hRh#8x)Xb0Se;kKmr0LGnr#Gg zuc}UOX^Tg2lhQTw$6B;WR?pyOM5PRP_J{>LJJ0c$@m4}O{qV2u)42T&fG$7|wYDBu zTNk(kz)gzOtfNone#ihXy52Y52Q~@r8OLXg(QvC8P%?#FY4fqRbgIh0Cqu~n7;u>; z0XUHm7$Baa>=7;lxH%vV3^y#4fC|WbGX0+*uWSLnqIilwA=Q6wY&>ubUj`4pOFZ~F zu=lME#A?i`O@hKRBZ1I=?c4euWi`guD_sTl+H-00P!z|};|zRK49)1D(dAF?t5P?4 z)GXAIBs?QS>nI9Xsz{4TBSU#|OI0|6uLlSV3{a`@ynO6H)<@l>eMDQ@nz zP9D~e9#oGWR*o(*TPLpCiXvQCF#4y}?kTyGXaJ#YT82A7kZVjx>^W!vToF-WR^e73U9C!OA3d=kK|alGJ{8S#xtiHY+p;v~IM0@znNd zp7PWC%b!hiKcC@!KF#}Lns;kfaBo3;e^ETMEM4F#6b6?wm`;{Dfi&>j1s#>tPzkLs zWegXb>87vL4^>zFSjHDuT*aZkwG$qmhS$#BtzCT{+lVsH6<-7e)e(V!i`MZ@*-$&< zY*3uUX51y_MJA;a+2XdR)Hf%=P|sP?wLo(q7#n%swiwy2nj%Y12Q z0ByXYiB}Bi2323fp~hA0*)t8Q(D9bK{&F`^>H14;XQpaRlpOfgD#K)V&l+#A_5LZb zm2L1V{aIV4>8q@`3tg2bwXAZAOhK(Dqx0rPrs%BL1r0F8w=Ky%QcGOx$xE#XjxNYI zC(!*Y^HdPKM0#chCTzYF?*A_q44=*+3T(Q=v%v_2^6+JS42Cu-RTjAbhA&BdFw((9 z-U1(n>nK74EL+oTYldTiXDNktDz+Zyh%6qCKC`4rE~w*Z97A$oiELcTTvv4&8UP_4 zn*W8cKVm%#mfC`~&i4Qry6~?xN@hwqeOP1bN=XUWZGh1@h#HM#tg+mnj zLa$p1te58bRL-%6K@1C4PTJOwqLwH44g>%mLk$fqc)>l=70+Q1!ig4uHfs--`sY~o zLj$0+OI>}SD4ytQ4^a(h>%D~Z_iue0f@OdIN4Wgq&q-bUTm0-_EGu8BYfp4A0s;-x zLs7t~y0mX=KY#`hCw8!qz@=4>Gi&oHHbCAH>_*=@hHr3B^lp6XAAKL*{xNy*r|9kv zh#ey;z!Z^SAci-|KYEXbU`zL9=-^MO$N!dn`M*UU|0}isqXY3}{N%NFI0d-YzV?j1 z^=<#)+5Hh3AaM4V#M6IGJ^SyeNB`>I{iCD%8hz}a@%{I)LFc<}vaPoze$Wh3+h1dC zuTPCks0_<)88Vw%bOxhip?Ko!zl02+K=P?Pu$G~9pSwG+m`gVnUHBH^Hmt+~>t9B8 z-uc#FBzM0`ZodnyJPoft&mDf7J@_`V@ycF5G8MM9d$6Pq=eP3a8c7$tPIIYyNjnT#jTxRZ6v5em1Bzw%gL zEz7}tBpe~YUV!;0uKmkME6x#P!X{ledl_jR8}}#6at4J?bJ>59XC;ll#65D|U`tR&J(It`d}#Fd>LQR(qzfY_7BGl{ekh!D2sbTop@$4rtH z=Lq_9OH5GEKMwq+2+_tmq|hKkrz2q3X`dp=ng=_mPuM|>%F28Q)+9mFt8)bDYh%t1 zm-Va6h|C103EnY;5;suZCx-~y_Z2EKhlsK73)U~_5RAx)#sT6ASJWU_lCH|##AK2dfHTNNjG3)K!U^H<7 z_#39LYZy%?dckxTFi0rWnIX1oXG~vN)EA6RU*P8;^#RA%xHgVHM8v8G_~@Vn@HI@^ zgislQhd~C>v4Kmpe-<$eQmRE)XhAIl5Jdag=ntPjlW15Fl^!_p*O6JXq&6JcEzJ75 z#FigCiKe<>5_Dau?=okio=$(9q%SZgb2PwyDgufRxf$G?v)*me2;E zXpI#HM;IB!$YMseg`rKJf1M5NBh_WQJ8WkglRewnSuoe<43!1^I*uk>{`e8#;UyvT zLv6wygI;jl1hDDnQLu?`s8JV#HwfG$bNhzE5zzn{Y>Rg=xk}^f;^?Y0zCnyJiP5w! z_4`Hhj4UuK3oR(ogOp)uQcK!2>>}izSvZ0hNQIK!)E-{RLC=Ka6xbh-;N86!u=>z| zAhdm98@&w(GVMsga(YK!I@Ff2iaxOriwFUIB72H05?nxdm+`EB?HhgLAALgyQlD7C zdhWb{BOmWjx+2Iwr+AGufb3Z~2f>1P^x?nWLIW%*qjS>mlrV6ELrp7U96JW+0XR7ri}4FW z11J$@z?%XcUsk~glqNh6WHWHG(54RzS%OZol<;c*1nr;l=&sn0{MfcKvMUR1iTvvV z-zo>ze^(D*Jg@)}j6`rl79y7xQWlgtlAsPOen9?&NyLaD21aAC&$g^=Bb@a_6DGn7XjjU;M`%q8_12A_0xOs^N=)Zyn5PRwlq5-gZBpSfp z#@ifjK_o8@8A&vNKFv1e=G8H_F^5w&+E=;Ol*myKIkF0WMH6kX^Z^mk00jk=l-fcn zFKG#Y29SA6N*^>pT;)&b;vl;u)Zok8qg=UF1w*`yWjUPjvnu-?k^Y|8Fe5W9Y3y=W)DkNNNXt|UfVnJp$X1h{Gnset=j-R(uieXe#%V&ttIZpW7n;6A#Tv+IoN=)!z|(m+Itl}{Em8LsSA6AFZ+XpA zS@$)!1HGf*$|=>^w^Zp)00}6s`G=CEr$r^I~WNDlTwf z^&UV-+>x$Q`G&993{^Y6V#A#&Q@L8SKFqD`L$2^mFzZ_uRW5-gXb6{lr4@g9sPpGh zG9WewHB?%U%!V@~FvRAi?z>#`w9v{?d!-g+zC&z{k7taE9Uu$kS^792q4!0edpyTo zj_vlc<;IfnvjzQUi~8GKFry#?{MfmojBF8)KE}47WV*8rImh+A>1@=E}UWIHSu?X|hY$ z7=_lfxkG#75!NkeQ|E`*Pz@$Vgdnq}&hKL5qR4DZ5}U9CDYN@@!xw75NI^PY4MAsv z62Qacdhx)2X{A1YL-GicVY@Ef|kAJt$v*CIsXD*hVsT&JY{PxOetfgiU5drXlF$96{PxKZvxF z{V};k&~2=Awb=)q23G-zv0Vp2UOKu^nXokp>4m`uF=5t84=dpakrGzs!$g=BLd%!A zDq+QZj46Lo!a7bz5S4{r`C7v+ZP8&85wOb>$Nad;U_#Zz1%OdmAZgNv2+}r1Z_3do z28!rd2>{SUlB_L~WF^hYwCU^DDvNB&>4*6k$A%e(@lVHCF(SjZ4nq#`AFgtPr z@Bt+cCA%32fYnfG6s^%Ji=ay%@Ov@YS(>B?i04>k{nGJ8 zgcd3H#Y(>Ih`^`={}m`n$m}APaD+qzqp!vi3j``!V&Th}t}UZkJ=Yvx(6KZFcOtPs z(u@M836kcjF}AJ^^_AcS`vyFBU+l-m9kJ9+VQ>@UJKzl%+4%wNWk(2lV($yXw=}dV zC!TCfHr#_{OMOY{Trgt7JeyI%t8Qg zy{pUa0f)lVV>>z=S9i(MSTIx<0EjeWTh!pXI%0%?p#iY+j{zxhs0E-izJuS93F7NT%iCrzhtEQfmX_E9^rU z`T?`9J+`%9z|(^F4s5CL;HqryJU2F~CX=px?quICgP*r}UC|wwuFAVkP$_#coh&!JF@UO@nYbqD=!b3&w zfh>M-LlnNjb#rye1x5HS-}C!f)5lA;8zMj3S%c=m$sME(4bsvu=;n^482WQ(2m>fm z$H?+Q0BBOEm4pB|l1H{+?=hkWpmbr(o=N@N67NXlUR}`FmrM<0g*lEcg1`6{_#lJ_ zBtCoBjL#Up$06A73G~1|YW)Mgssnf*%*5iHz#7ZBYN2P)fW4PdIBSsSQa05b{_?u=_MLjx@7Q_F@7 zVr?_GAXw+m7$XR3(i&i1Xt+5m`uG+Lr+_kc%4$bL@@7KeLI z?psm?Il36)zcPCs4+H=% zDbmTtS-Dwk4VuD*K&fvE=iv*w#ZlZ7Xt+8`Lq0Vbu{i`h=mJ3lnP>QhDUN2EtC<(* zSrX%dP&dO-+?f|nFUyyNdM=9Ag!(zIYGzqZG{BO0c1b8!n#`_HI9>6^OZH%1=S~Ur zK7jeZSW>XH9<4u5<$Au-YM?d>G*GIr<7*%Id&j=+5!K!^7l*P?5l$+;J)#d6eZ{^x zToxIFGXfJ|=T|zCdT-tut@=uXP-D$g?pZT6Cp17~P*~gXm)nL&7BLBd)z8wo*hVit za2Z;kgLy-uYDiXv?$~{`{f0>QIZt_mr{r5aXnt^{O7>*Ikt~=aX*41mf=N%Vk!p`z z=>|SaGZOPGx&;(=6_xVl`=RohAz0$+0%A)Vy#}dQa@VCv>Ai7&2gr=eWbRe!igpWKR9rg7zlcbWdQPmbj;-)Re@1 zPvV|Y1s0GWFsHElUnWTa%=d6?1KpVATe3V84y=hqb(CXBqqLY~$N<5%piQ8Mm}4u5 zJq?1&q8bRzAe4hU9m`xoihov@oyJziRs+^el_ZVaFgwDj!u9uAo|XXT$n>T%yR9zl z5e*RA5YrE+#`t$`M7u3y0O--y zos=>{1K0FxvnvUCbEfHz7|W$Ry|ftVV-2cd}C`N4be$H2*7sNEmkTi=C&E$Y3LMmBDULL5_ZK^6ak zWxX%*-k17W=za7zUDZQ>=OGyXRQn>j^)7e*=hX2ZDM%n3Gz*9BHu-UP>#?nNA&cRy zeO;T{K@S7f2SV;SH3Tc^v8j3N=sk>Xe;MC;?d{??c4Dg@noHOVZt63e#e?_lCx6W! zeHY(+?dzjW{n$Ii0sRrxd+bFdpmPCBQgr=m@8GSe_SDgNMrQA z^V&4qQo>qp9v382(SU`VcZk>@dgIm6ks`dRPHbtC+iJK}18p@N;faAZ*wA82ifuPD z?u`A`V9u-&E<25$B#YZP(C@%*(x^>v=p$rx4IDc&JBG`|Pm+M09o~I1B|plo03~z= zl+b1K*N4=XOXSOCIV%aaGGiQbj+j6;8CMByWeFlK+=UqMWuO62ibNAOYuHu8Zw&|e zxYmG4d``|0SG!wU)i6MtNv#3n)TjA2WI6}XW^JB#$K)>|TgN&^Z5z_Nb1(exR~) zB=vC_KxfSQ41|ilLXeMitgrADOKd{;0O|Syq{$hH#lST2F!2C7EkM42>CU(zI^*y# z7)??b2UIKW08DoQ6S|}w%W)3?b)kD(*CpXCo@a%N zA8`*rcAr(@Jq1h98fssW=@b&Funk{0;-Or0NO@LK8Oue_E0_@EJ8L}O8s85`(2(uy zv22}1Q)AIkW0|4<8}JcvooMD6A_}Yk)H1n`*ci6X2!o=P9MMlv0BM09qQe4I$kVX_ zRLDarpePq)dO=_XN6213~cwj#JE$D22o{j|Ko0VO1l@OR~9GMVT8&zQN5xg2+s4myQvC=^nmwW8Je( zuDxCzOwY6n$0U(kfX@KKH{fVmdL=ZikHn(p|qEpf!$BBW= zWlH-o+cj@4L484TsK7-fhW-mp@qrqZn&rnD=!eu1zHG=vC^RCT{>YBNgTL-AUHaIV zJJTkPMAU}Jy(V-GIaUvbD^0*1!%D_y^FC7$I!E7eoW#9d`7!d*ds- z+XB9~pi4pnVE2!W7?7{9idkxBCX5^)#%2yVa5&Q%fTd5(DNvV`!Ysr#06Y~J*wP|< z8XZmQNR4L>Ga5kcOUa-CJTdtGHQ@?q?`R8_xf6zHP8R`oKdto@wVpH|Zhr?n9Vu9b z41pZc04$mH?vnhoDelb~;oSwv%(8+bG3ji8+2}oRCfz8b|JA@9O%!6w{78*e2Nn$C^(xHgTdQW7yC)D$d zKAk`7&2`L?lGGlams?nBhtwW1;S&)A5HL6|wM_AK=+=ezW=>$3;cBq*pXI86Qd$z~ z7Wo={hb1yV1F$6~{Ky84Qg1yA`oTe_&SsJ&5hG-C)Rv|cbweFBqHWO3{L33sM$3g^TYP*bh&N}*|3 zY6*MN-AH-E9I6Qn5wRtqBtglVBi*O+t4bY4udr$a_8oC z;oD;OU7_n9-K#e(a82>-Uo7f>e_#Il`?8OxvJ|(8RJS$%9t3WCZ36&yZSFMP@K}YGMN1!i+=%pksJmn_!u;NXZBhzOfcznB!QA z*!Z$cdGKoHbr}#FfcO>odQk0H3@c(A!oYw{wdU;=ZlEhm0a3iA$ZpHixbSX>qd)a2bf@(0twpQQT z`(IjGFZA`tjDsH@eJBA404(oKxPEqDKn8>lf6hPqf2JS*_xOW<_3iz|zWN>-Km!<2 z;}Hz~Rusjzfg6H9k}#n`bug9AoTT6PnH~Q*q{!fvJbMT{Gi)}|(RcB!@3CRx1lJHs zjvf6B{Ag(Z=fLitLi>M4Xc)##_r^DYgP-FU|B`+6|4uylZ^4tF!>2z74}bClB)att zIZf>T0Bopp^d63&z~Rr1jrTTKiLkWjzf{CWHzi^0)Nu;&0{Aoz?y5 z+Vjxr3$S`Zo9~iGKc-Iq^nB-ACTuGgteGI=!nz%M5ryg+pM49BsT~ zAwY&Vs(n>)TVL6;){iWeeN$lv)4wDH3||vnjMl=guk#?Z@;JWnJi7keKYW@${VB2g zKC=GW3jxr27+w1^Hu@^G@!r*a?d-ht^j~=aX&roNE}h}!c-dH3)aMXf##{A$ReV~L zM$<6dqFA}#&(wK9awAm(zYCZL3>q|@N4&|rdmp$iQVji6hWnMf<$vdqM4 zX*EK(EECuZLA=w*m#a1d+FR1Zdfv?-=ZlC(Gi?U+A!2wjmRQ%ym9HcgJtZ@=)^U%) z*v^hRGtxdg9+WXFkHMO_d(eKQ2~{(IO0WDVSl9{`cOvCI{K+Ss%44eLrQM6^(xP|& zlPkpEuzNB3>Z-wjw0d2}A($&fvgZdS3CUf;)7(v=&WuJg{f#Tchs@A%GGS6N_5nf$ z_;k^Fi-T8k?>(?_WKoX0g+ZCN>5l|~b&iL`XW`K&KN23v;&5pL%6uRQY=QqMkL^id z)D8jwu)}e|(a{$WlMlgkaxuZvKfQt;|2HvpUkv~#?D$F8@fjliu_U&GFT{NN z^gDj+h9oo%95amH=nIni{>we(4FScnmSNN7QUf%2N@IJN__ak`)Snn?&orec^31t7 zdLZzRgx)o=Zyk@wyDp$srNJ#t;!qXamj|~+)H)s^g(`q98pOl_Y?lt?kwZn~K;qwm z5RRMxbMP8goA`6~whmGyr)>5rHam0thKm$T0sH(YV}wqp#zmJIBW*N*t0FO*ncx6va=#ooJZJ#BM?!&iS!Fxdx{Yybb8z);w${zj zdxW+y{<7f=16CEXXI^DPF#5JYeHZa)p?X1K5}GNcE2O3(YFrPD&IP${UZxcoT_`kA zyQ30|kBf!@m3>)Z6&ZX6Z_W{I=sZQC5r1DPxjT<;0e@{PH9U3Z`Z9M4Rciu+PoVRl zdxE8Oh^%2{0E_wDoGy4nZ2*iZ*B`dnUUXN8}9S1 zQ+NbeEz^oo;hk3pXO)2&g?~;J#FsnYlmcCpr%%kw0+17PvH)ot&?Q(}+*@OF>KK$X zdNjB|387U0mjQ@oLmD=_1zl=ho0`+6pvVQD4$`aAFxE>w9@Szws&i=X^R;Ek4Jn=! z7zHC)0%gNPFoK`~bQtp8|Vm2KbJ!N+BB#{%GvI)V81bvHoBG8emfxdpv^|@WtMeNASXj%Jfeb z%=1$Jg4~ZL=|w}#0Ha0g+}(Xd4W9cq-h?roAAIKl8nyS#)_qK^JoT+U1IEX<^3s87 zoBX~$IRZb_(R^gBKhzcvbftY`?MPQ4-_hoGG?`6RV%?C3J$DsL6bU%o08#r|MwDlD zPGTF+q8l$uXMf7Co(Xw0+TAbJ*ywQ(u66B-9st zIB?6LzJOFLlb&NzbxfA@^oE|n2aU<0WEoE%BG9i)Dwd(F=yGMc$AEDnUAqa8E5wyo z2dUQVN(iY|B&3<1uNG3RIDp_YiO=VixT4qCi~tyegGd$vWm`Bw&~`7#DpIR_jXKZ# zrX&{uqZjFM15y*>s^?AuIe$sjJb=ZEd9JZFnJdJEs!1oL$8E~={b789prJ{0w-;UX zOT1p>p;a9I63K=hzn3Sq0;(oX5HRW>4neLE_{4&!1D@uk*Xw$f^7ShOoch^k@ovc`w#zSTt#C)>1Sx3rmUO=^Q&N7L}7Y_Xi}C0mW-tP4C{HKLQzT~qNPK$9?O z04@pmiOAbWm+I#{u-aUA`0o1>KfpM1`YgxO6@cUzCDs>yV4aPnEHEe@EL(lqQsG#uTsxTSZA5tS z6Ho_<jS@9JVtOrIKv zABnaPt>HU32*4DCJT8WQWqb=uXfamNfC6FNTSCD+rgm~J#wh@LLlD5WXb0~O=mY+Y zWxcg*xx=;3N_>1nns3Uo^h5(FabQFn0L_h{nKNXpM=vi90wT29ClBx=D(unGVu>Vc z=>Y~xSaDS75z7IA@Bp6y1uAZGXZk9c@-eO2+PFf$HZ`9B+Yjmk^PYlh0J340?rUT7 z8BPS|_A`)zkO9-fs)}_IQfebKz5FqJ@F$#tecM0!cm7DNe@CrB0KA1@Fwy865PtBB z;4#7dQoc~+a7K8n#(KVX0Sy4iwYL61gNz)0X6G$rfH01p&8=ns8jBh%I@-`qQe<$m zM|jJ#b-py!U(GvK{%(P~DGi|-jBSjed>t^rPgv&rsu&k}Sr?)j1GXDSl}%Y3pCW+u zz!-h0DLs{E9|~iKJl_V78j5^tB9K6-{~u-l!Q2L#W^01KU?*m-?Y><$oxCVIfQ0wn zd+)s?K!POby|;3dcd7KYvbwta_RMa?{4)FIRC=)SbhJU2}}(bpa-QK$K1ZRwnlfV=zBG4sOIc%;l7 zD^j}(j!UsM&ROt(*e70UfPTt?XP$gHf{;EhR!;qIIz3S>m)Rtu?V5QgGysdL?QaH0 zfY|PLft6Rd{8f<|08qa9N7RHdUAU%BUF68YH|2Mv?z+$b_A;F|!+Nm*RbY{@<|f@a zg%@sq35uq@II9U3wZS|Zz?!TWfrQ42#t0f<23K}p1C-sRmLp%YrJ9b^j4Rbt+ah{z z(h@4zQ*|VPxC1C1u~CidhSYddYP=;i4FRH2+GPfh&KYq;vhGB|5zCr`F_qJ2OQfUC zc4d8I_UwG_!NvTOXT6ti7T$cZ_~xsnH{UG3{l0Q^;jAx=x>A3hu-(uEC<#`&3R-VP z>#b^iHJ!hv_LTWA3TIB~&TIY9OiK*k&P+2{olVZH<`;KLpfk5mYx@kx=cVn_;?{9? zbvHb-MC8|$E_uqWXnQu_TS<3&foj8+%IHE7Z7{6%hm>A4KvWY>>En50vTRIpD5=7> zpL8aN4Xh~K6V|vfR0$O3eEF_3Jw-$s85F8ui{D7LSKZk*@XZNpSYix}J#wR0qOy)m=(q#Ov{s8d97>f!nR+NU6)Mcw zqE)p!BQZy%=IEp?PN3Ept~jVa%g@>}v&K}{n3;D}R)f>~;qHOEzG_Idb#Z{NO*?0b zNLgaXNaL2;;-+xLpPva7rvt^duh8-rTY)mkijvA1x}!3W>mBqJ$gF;~JI=pfjiJb$ zQh3u!Uq(qkfHO8~@-zKkS6YU&j!}baMDH9oxRs6&EoQb@QRTwL=(wY`DV$+*BnJhR zl4Ff4s&a&t){ug$f-`CK74+Vs3Jj>XYzQ};xw+Kb{?x&f{L&Hm4SS|#Pt=Kb!P@I^n%4W4{s}1}J1mK^EeD_NFpCiXgV;Cmbbck9SO2 znnxtgGU)eFYrfy%M^j?~dB9iKu(e33htxZzh|J3)bF#?%WT-3kcSb#}At&Fc=Jlmb zZE-_gSl5-dj3stL8>-X_22cmZE)~YmT~lEjkeL9f-L7 zv;|{fKh}E@Wk1w~uM8#g^VGq2qJrS$ubJb&r4RoW+xZaz5Zw4Gy7ztJ_~+!wUlMSE z&VI?={~LFJ#KCvTgYW4WMgwF|{z6Zgta2DXqS}$N0y&iYx`Htd1;_CVz2xO zFOVuatdHN}VNRKHORm9FJ+vvRQTXrFjz@4CBpee(|q^4h>@b2)7snM=DC9)(?Pe2LVQ39Eg3 zH@ESqvi~^{p#V9J`mv+9gMr7@I1J3(ORRn#S$gfqm)X5QU6A7N%{;Icw&1BzI-ySV zr2aM}Sq}8p%AvqtwD0?{!HZ0M>(l5d|9aQ|#SqEEm!TYYF#v5;ptfnf@UHGkrf+`|cL;A^1gLcKUiiWEFlrMEn-~a@jxiu3337 zB@4Sw->WkyH0UQH-d!R3Jzrs_TW?iy@QgkzF)uJYxb^YxPOJ{A0h^w%7a9NKi3QPjb4ey zdjATsSLDfDIIW4|TLBIt4pDx0h4^2Jt3l}%-ChHv4=m9St`JDL0a#PCDGx&D@N+Ih z=N}e(ae_cG4ocJB7kgcPIPXH|gJQ4RcA&K3FKu|il2rF8)bryvXak42tAnqC-@3&r z6f^n>9ow<>x8~-VBDbL_Y*-tjN_HZ)EDd6tp}2zJj2x4NWOKy&P zXFpY?Z;0tXHEhfd8S{7SHCU6n;(@MsNbC}4j#4mK1fzywh`);!xF(DLXIBA-l zPy)8kj_?sB!1-_Ub7X)fOX!m||1Na6VR!eYr9NbD5e85tFf8z~fXP25$4N+3SaGT+ zpgDPWg{ULq0rfNJ(q<7VJ!JY1_8yz-M|u$m-bDi_XsZ=)&m(*7c-+X-gyI)E9t&-okqri0O6xLDUdcZu`$bLT8K z0e=1hPF?z#7Mi!#Y3N3G`AfsAA~mZipGk3Wr7+fR@HyhyFjbC;A|NNc^RFzeCz9ya z6;tDuIMkOY9nu6FlkV~j%3-}z_%P{4;5C2_)Pwo2-nTSCfXUoc;)y=9&-8E19_abxk^muFl7$3?D7|Mc1DJkj%$;cxd+G#H zZ=k3bG>!>kY4bj=Doz1(kl9<0wZ$_<=1`G7;3uZWg}w9KKJ(JneaSz-*tpP?0f(Hb z@+Z3TT~qy`wscRKJCUXKWpONL>%hk+IX6MX?rQ)S0sue=O>Hw5d|dRL(&xp^Sw<~D zd=W9J&Tir6<=6Bzz}KQDc>Al^uFwFugNDsHWq8InOWu!_;uB#!ZX7wACuRs#>21f?ySO7(D;j{c->i^W6IYF4bbRofSe^xkyO>1o53t(iqYa) zM*}$XHAfo5OV^R8X&h0VJ7Egs>_lw`c>t|9J!uJ1kvpPxkqsDCImb1w31(cgPiYHi zoI!&xY7SBx9QPM1xw(b*{=v$l$1BfYtiFD`{^d7oUw^;)<##J@c?b>QYA%ksQh$_K zZfN{cTT1V*S;8$#WJ)|B#srW7Tm!NSXGRw&vX2K*6?eMp$zpoxIx|!hcf+-X%*-Y-fHsqOhq9K9m41AOzBc&aE){sRonjoTGBXtue)<#$s{>{qcMt zRe=i>$WKG^!6JWK?HSbvq^8iMC8BhubpC=dTvPeW6K?UfAq&#vNOu8f+mN~|~K?ja4Z(eQ{N3WWX-x6S`}&G3)c^uNDp`eej$P3pZ)wXoECb;8TL z?HyfQV$1P`LD|!gF+F0*5kDBUWa%BF<4Hp4m^q6cKptQgl6sqhvE^%zx|<`e#;~I{ zWUJgX7svf=O?E|{T~TC~b%k|v8E@#OF1rTF3#%VBRq6x@wq;EcyJ45oM>=1m!HyQ7 zL2chNea_ddZ;o8oBWee{vrqhU&w>XaHOLTpC?;G|xh;e>xX|dEx=DBI|D=n_M2gNFDx^KKdnf@C)q!!1`DI z)h}Xu-@zmm^Zn6}iPN9y0mz>JA~eAMceD%V&<6Y8(?e`uc*1`qRV+Z%E3bl!Pt4Wb zYnB2?(A(z1pQNJWc?h_ZA#qzDH>MZdg4Khi=e~dWS#0Y~bmvX!?#~4t_kM1@{GX+V zKWC4>jq^`he#PwWZk)IpC(*^1Y~o2=cnS5+-1T$?kPa>~P-F{!S<=HL%)Z;^;;xD7 zO>9;Zo3<5~eeL}qd4R>I=EDA@2Os3LF1F;X9R{XxNj(eAKNs~n%~M>J0q}NW z9wLYiQ;7TS5YfLyTyp5~>WI#-9_itG1(5;$5Y~P+a>)jP%z!IfqiyB(t@`AAG z&-PvWmx*D#IstQG4OZw z6T|ex?c{{T>sZ*ydUw+^C+X?q5C^gLNw{@{?sb%QF|M#mBv}hQ2lS1p3-p{K+>WjUzh!$ezCux}G&m2?Qvts}wZQ}5zYKFx zmWljGP=JsDab&>OL4&ba<@nQv$Vi+G%(_8 z%J1UgCd$cf9&V<)OBNPPCysn%(z$4stesh^90yKVD9|LM2P08FfIW(X2=Tx#a5m0C z4F6%+`I*E+^6jQ3c1xR>aFn@7-?5c6sU_#sDF`5kC<%TDK92BMKQ;T%CHN38+4Z<^ z&r^;&O=j$ozI9JiI}!7J_lcv!{7OCWT|RLDA-FT+_VM=Els}T^4$Sc5yO>oTvnt|f z>|S{4qG*;N8Dao?I;5K3Gn9a9@fGNv$j%Skfqko=3r5AvBm3-=;M(U9>O_?{1TTVfP`>SUqbc%;f5;{lrhwBWDEz1UZZREUnbDysMrYS20L$kwiqJF}09qrc38OL7 zUOk{8#{il(u`FCbLIV`X`Qp+fDvDxo8DW&kzI9Ib#|p6~Gy1romt-G=MQ!P`jCZqm$G}4n*E?^&-2M9dy&wLv^TRKj z-~PPz<&P_Gf2bTjbTt-6oyk9pnQy3lQftcKuUaEhJZ#anJw9y;H?-c8+>w?$Qifmw zM328P6)3esmFY;M8*lfLvn!d!&HVa)VdH=YKS?cZ1*Yb$d0ggcOS(i9IM$vGH`=az z$rz2J0qp6lzg&qlT7gQ#Q>6H|<}5Vbr4D6ju!fA$Isl?^V?u7v>3mhftZwRW@(Y2| zqOaKV73YIxyg>7wT!&<^K9HkBVbT&Dfdw>Sq@wH7Te9oJsv(JfTyB-BooE25&aJcr zbk3;RpHf=`QjPVFR4vn44bGq^n(-z}zD&cH@8|&g=>4Bb%tK12MCX^A!wO4OWlw+~ zRk(6AC)_q+os8cw#7CWZ4D{yow7-TMYPYt2mg;W0^D~-20c(xMmo)@)?CibiswY*l zgi<)e$R4dbKBTf4V@1je>W2?bm7RFt*3IEintBxJ~25t}t@%ro)3LULw=ECtnXO!NJ!~*6MV}9L~-@tsu$D4(Hl4p!HzmaFwuH_IEGnrWLvV?gRF1tfB=* zpmWc=_%yioD!NUO_Y1B8QI-Kh1`rGWI)1=n{+Iai-#qKzxRyD^e!+V>rvo$q55iu^ z01MlxK5+6c17NeC`jI+h(RjbE zh)5jnVO?&^jeV#}GHlsWfaHUPciB?hb5@Qm7zP6K`q;9oejI|i)VdcTdO-$m>dZS! z<`{R-7v9$Kn7c{2IvQXi*ctaUCjv9<`@xAKGgR44X=q-PTw&wF-o@QI_fSF5Itfjm zN4w{#<%fwmJT1qSc{-cU2DMFCT>7*`@wlWV&i$5_*w0P&T{Hp(!Hi%qaezu> zXdWb7`?SsN{D%QhX!QN&ugVAR_V>4lch#+z0ZkFEeRqf$^~O=wBf|#Lx3# z_VM%Yc>l0&cy9TZ5Qkt^9>gIom*s-*9C?;CIjJzss7mmo6r_0>C<7xx@oI%FY4 zyYM?-P#;*dj`?k~-SqSRAe!W5nDZ;Y~SLb16@j>as?pyIO3O~|&57OZB z@OLK&Z)we2UUybDo#oA7`#3cJ$Uj4u>Rq7?n7-2c#HUzB7RCFrg6sXo7(vXJ2>w%yuDbP=Y2x?JwWwn07z?! z$O7zq4du9u;E4^q__{3D0Fas|_%VhZQy4Ob^hqEP*R?6`01WZ^(h;tA!mnT`aqQr? z;ToV}dM+IF_wFYwfOQ3Q_yc}Iv=`z#L%ag>H|zZ5rZmcSW*Z*`Rb28IEdON$fH3Rx zo=`kcVFaQAvJCW{Iq#G|9J>+qv6GQCNoaX8y2h*~jjqYal@<>)wd0B0)_8ht927)y z1u-xhpp$2v6@xZQ@L*TC(!t3Sy8;3+{}_x9E*<`S27MC4Tv;L0+p33(*doPG)CS`q z;xFZvf{r4%3IFG#arb8u*G*NJ{M#Q#T_3Y0QO75|Eoc4EOQ?)*1XK5QSb&HHb9rbm zOh3k3AKdty)jRHatUjixhuZpGW%X1|V1OME?Ys+MY91pV0DVIE;ms4ZfWNfwwttMA z<6I2YhhHYj(fi>s-y&&&=Pn#O96~Xdvsa$S6a=L13lB$WJVHV(JmLFMbmMbQ)|6d} z7%_jsGAk$8)-Oc;FlaltpUa=Kkir5K+xs$e@?CiQa}EN~u02byY_rd}6}WqRpL*fw zKDA9h2B`0u1Bvm9t+}~@!}F=7`9xPblSWt30CLv8VOp*#Qcs0_oEkny^~~9R;%Yy0 zww~znr^?KsGRJH3p}Pn6`WM&yTUqv0mfTmwca^bib$ri|I>~Jkt}mZy$T6q()%i1H?ZVuE zw825$S-W@qBd42K3@=B9}va1cb*t)_vEQvB&A#&J(eYr1$hV! zutma+9wDA^(BYH_(ME>`koh`Xo-qPxQmf|5fd=XnC82YV{X{s#_x-Qv553d?OE2yi z(yG`T-~M=@0i0OQN;?*iQ^{3zWPZ$6L<30dVxAdN1t%P6fYPWTCTE6p=QRGjIZ^Y} zd*)47KyW?tm)Dp~l3h-U} z8h~ZIDO}R|^J-5<=}gLPF@-%2+S2IHTEhh@h3)a8BT;mvivD6FJ~dlhUT+_s%s+U% z`ttLwZ+_hU;jcU2|8?W*pV0v2!-oKLK#RY^3*<=rVbpX(<&|2JLIZ@FX6g(Aph@c* z4*~#(3^{?Q#+$LnE1_~HT%8V8+QG_HsMZNLyV1^ke0Dk6TT3r)W|y~8z4g#k&sn6f zwgBkVk*)g5nC9z*0d(PrE*SO}OR4FZ>I#j#i^=KvNV6Mh&BdVLPcxyex^i7ZuqJop zRqnFRS2u_Gu;)p+#Tr|I@`@|dwI-%OCRyVROSH-!9T}kUBo(%>MCT?Ge0@a2}fjp|FtM%t@t6hJ%rMxaR zkE`8EV^D4g$n*iZDXem4)V{L9TON1hhRg(EGpb!|^5-kjgpLF$VN0ZfUW!dEC#P34v+J4eTB^AaF0?hy==BMME}YA+9Za1) zDej#o*7hU4P54fM)}p&KV~W>QK1w0tw>92RCFYMu^q<_(eR@at$sO%yBSHg==|c)f zTIWaU#y%Of|KXOA#~*JQKN=#eV*Pa3c6H48r`x7~xS}Fh{F%ggTOA%VrAJL^7Scm{ zluu+>AEk7H+A@hHJz_|578tYUM@bG44{%m#`6eDf(f3V5?y4$z6&YY=vM*dS<;Q$2 zbz(s@dT=rDwuhaU=K}Ft?4_IL>@`E`x-oUznwN*C4cS$D6>j|zej#i1&`~?)fsMpO z*>Gk}*Kd{~D+W~>zMHjq;#+tWTzwu{f6aR|s~Y0G9B_lUgLc1RE1x*}OZ4Cu@5Z;T z6|TB(#dn3i0HArq&V>=+z`_gR$=UdV*cSg2CunH>^TZylUIN&R87Uxy$79lFTqJpC z=PlmDU&J|LOO%n(p36pu`>%ms`o)(*en690dF5OGyg*U$!+*=2{l&lfn&vVnqF|@_ zV-p7`0c?wO9e_%Bj9XwLw)lH_g!>>Y=D^5gSBM*?ayOhWiKZ7SHppqe?7n*H%98*3W{~Q)hb1p4kp}FVeidb{~hi zQ_m4ex`?g5Nbh`AKl_=)@UWvQ3r-^gCWF)C-WJX6j`|6jjkj+j^t}vxz;#_3AHp_g zeP{E`**NvK&Z2V<@*6KAGsmF<6=008q9vEX4&bK1(!<#t)He0!X6*Y+%y?<~2BBYL z#P5KKADXa#ot{NMZUzJmEm5rM`^-(z|HW4m?)G0hn+UwZr+;6L`y1NkZw>AP=Xc*& z-=8Bd2lT-qLgWYf#(F^bmsg1XAz~3SJyUh6wM*dPl149lLBBafyz@R?I(FXC==+C= zcZmqzQAHwx_581i2oX7DgU&|^T8G?ls<}NV#4Wxn#Ko~Qh(ic-%dGJ24BBwtT_FZl zxF1|0L>xjmcHYGy28oD%93nqx#uX(7kqVZ5Vb`Gt_tLJ@zd~G=;QlY{I)k3Cep+DQ z@A{3bg7Ht3_Jb@$8mV*HFE)TO@zIeO&UX%rmstqWfcqZGL>A%_%JgCVE%9r#4RPV} zI=*~gY28!Z_EffpaRsGTN?D2lXn!*0yk8dx)?+}y~oZz)YwWHEmeIDfCp3~J>VTi;AJqG zkVb7kV5zA`glD%P>r?wF^0O-rjx6c{x2%ZXr@ z!2Mu1Z0m2b;j+t9+f+C)vSZ&zv{-BR%oV&YH0EAtb0?bYA(n38-pL62J`c?0eED;! zgR4kI0AHs945IhJ0N<+g5kX2!{|W_J)6M0@3&6k_XAHrDirRrd9*Gii2vBD*s|)RnHu5S+(l zC9$H&!W|nSx8}I7JL2z+g_p-8tD~WnTdwIVy6iQe7pfpTk*kW}f4yq>hnwar$|%-w z$_=6K^BJ*q9_kx+HPtgs`ILv1_dwn-S6}f~PmtF+L%HuG5x}Jdl4J7bTVVX21t|6R z3^nLUJ4iASaKf$woO+qm8A-DXJBp?ED7^kEvhjwqFzuG^uE1Dhuw=0!2r~j(_XyC9 zd+wzVqUbW;fL?eQ<$F&fYoCW{9OFMOzJep<)^ zb^JX9x!~59w)tn8#$CRfgg7j(y!9-;@h*KHT>a89_d?J5yhQpIALa|s%u9K4=TGXw zki9GqG<0#WY&D6y#zmbT23PyS+IVQH-Zz%c4aGCo^Rmp2zJAx$dlldQ$Sy@irfNnmB(>Nt4qNVTS)xJTc`@^!%36tb%~I(iKm zXn>A0(=mr~Mo)s~D`%qWt8|^Is?Y%VxrGJ@+MB_Af*3Fci`H0`0D&jdbY~i# zOx=^MxpOs7f$FHK==6McWwW|ZEcnUnlh<=kKc9R0cJApH`R#LiWp2b4|NXGxy22wh zCyc&|C0IB3sv1~8uEL}(J#LKM(UP9=Q9H%xX%6R{sj@d$_m>)hax+k!^3|q%^>%1# zHr8EC^;VN}tKq4hw>)i2*UX8M2_+COSQ2?tJVPMZ5RC^awL)*9yMHjXwOd==%J)|D zz4g-KPG$M9*xQfPSL~@7oxiRRGz`HO6tj04U^`Sfy_=;wP0P+$Aqa6PlGQqb6IvUE%GN;AM;@TiVlN(V zE;GK%?D6X|+iiLVR8ED?HwipPZkMQBS|_0WrZv&QuqAP3rLLSVQge#L@Irceqp^P4 zSUV{#?4{bP;mRC_Epxcwh!#DGk~dy(gwkeDOlEN1l4w7=F1an$%k*xYBcko!cT}#p zQuu%3lddFP%gP{y%1w8X`MV;ug>EP;qXrM>9Swca20!g%5@S%|h!g5nxDsk#Mjy-? zLRqahK52H3s0?zG!|Vy$195{hq%`}~wvf&lH~P{@Nq43mq_m+v8?VjAO4C7LtoHC{ zV`@z>UEDaDdGMlo^dP-?6rNxAH0S9s_SfefR2K*H6ZZI+DRfKax+=ANI->t{L`NOl z)p65prF+a6QMvQxXjA6MT$^-%GHU$Ap>v<4ViNz1Zx0{dK#17mek!Cx04&L zNw5al%GZH9+sc!H4qlf#w#p4-?lVpDsxE!qkU;>9IQRvrPt}pDy4a94s|a`W>1AUM zRM|T9AA&fP!B4Vj$#3xWe8*fwV@NzLOHugLX_2%w4*k7{!R06Pf!isJY@CXB+r{UB z)t9{2C-%RK@BbLy`w0!;#_P%ZvY`II78hO|^Sx(WY-5{WQ3}ReMri#DZn(HVS=-0= zz7cEz!pHbQmw6KhZ;Ti7v44q$5O?9Hd@l*Ce@^xY84%n4#o~OhB(e1-xx;PY>*PN9hqoY%*fw#; zaCRV^KKGGtYh7@q6{$f^rO*}HXa4Sk$ij>8!YlvmGng2H*2mGK2`T7aeEDf;?t#B^ z&UEf=(MIyn$E039bfmXz+3nc;lj`2LrLAv#?FYUNrl5=D#+$;?53|qy-;Ja1nEORn zOJo+-GC!9FX2<~G_ce(6&qL;Z{wEWLA-`=y%W=2isEsqYaT211VCtYBu@&7$gGMKO z8nA1am~+#I!bblNn|KMFxy%WCP?S3`xQo^DJKxSF<@3V;v1rMqkP8z(41Rn&^l-7K z7w&fU%2+<;PB=k)7$By$so3pzHubL%?`xa#LWjT=eWybjkah%+et<3&#|N65#E<{4d7k%R+-eZde>5`V74);GI@v#i90b*0mZoWLo4Zqh>ecuj2i2e!U9hXT|;ZmzS z0Q~o}5bN)=5L_WHvk)KnyFP$2eW(FMVi+*%dnnW3{y-pG5ShxN=lHU3I4%50mw^BL zJNrK2@4lvb=hvtE_8{Ke^%hn~5a% zbwMjCH%5j?7RiD^E}};lG)B2P4@_02nIl|?@wK;3#+RuJ$217Ym*KUy5XpeIFwhH} zJgrhouPB!C%wRPZzZcdpGJuj3?gpINEVWZihL}M3VrR|V2ehAyKGdoE_;9e@YtrjD zBym3?NUU`+`g2&oJcF?Z13eZCYwetH@c$TbUQ>l{5nFWE4cT=~mZsZ1QQBIkWF7R% zg({D|hp}Fm?^y$j#cc(qBzKIv%+LbJxw4E0+2-N9UGzZaA>`sj>2rBKFCo_p=EX(X}fR{{MDG|FOh(LzgBK zY^~Bub&BVnq2EpgCt_p%8I{z$8hX8a@aX@&62H*k^JNPEF z_qAvJt!3f4e&&&3>LLnXXyaM^9ntH7YOr@u_^3Wp5Ds|aBoEAuunGDw_72?a{##7&u7 z=0pP&m~a%X6kd8XfHheSOfA~db!{L+7(f@uXkAHHzU8mY_BBAs9BYN4$-mP8j?5HP zP?I;IutvQ3Rwl8)|jKQ*+UF zFVgA}8usMdmRMOEAofbF7&xG$KANjH?}!Mh{+jgD>HT<^B1(gZ!~CuC#b{uCOhf@n>t%%1ml%Dc9x5FlUOC zCoB;X#%KVk(vF*GbkZ^=w`mIUUJ6@o><-$&e;7)mC-{r!Jn>--5k?SXkA)c#NbA5rL~?E8bIbuOuAAN z-mEH8wH0PVQ)}+hENNYdH8^Pt3!Pw(@vpi$VI9-?RgR?Ao0U5gx;d`ugkEU=_i(CeqbKXLS+r&`0Mq;jTQ;VSHDx zC+_>*KU2kjH|F`%g#S}jWW-UL^f!mBxzDuGPt>97#)Kl=)~6Tw3ZD$k4LO^`&Zg8i zO$~2x4uZ@+u5ZU_}fAA7f$`y-Zx|kf(-7wr)<3C zm!T+pOPE2QvW&-RN~pj|b-<=*{sR0T-~O6+`H9SymcEsFOrkG5f<5{wfBsAT@xM2o z{GYMiujy;#+#JO2xrF2MReVPzm=n9-W%hn#IRxPBKMy%Sl6XHIb^P&${?jqrHJRs{ zBKVm+XiO~lTgQR<$NK7_iu`n8!_qtmFF%d0QE4eI+AN<~UxA%wA4V5UzvkvOoh%fy z<4<7Fw-cFa(^P*C@@Z1Aecpr@Uc$__R!=bwxu@=?)?X#pUJwHio}b2f8z8#SszMPoF(9DUzpT*`* zfOsWQ+W;t3oWYfJ4wL>v-_BrkW_LblZt90?2c2Jnd_O?z^dIlbn=Xgu%PWLP@v^F) z4di;^(h?}4%i>|$sW9#I`qAP4hbzPfj2+zVg95e7I^KSI_7|0?GjQw#1icir zzc@i)*Wn5wpiCk#AVR~OAo`ELCo=ttE)`EH&aS>C2|@LD?GSxsI7mV8V7T|@m)YVw zvP-_|mT&6VKgATwxoKCGT4D)`FOiC$ac7--qpJlr_W_ViUT;1u+6`QV>;fMW*yT0s z1SpBuMVRA{9L;kIgBaOel!dd%XTqC;ZGzM0$T$BaxBo+8{p-lmTbeP%5*O0TszAHo z6>$z891_9BbRKbkP5Mj&uHLbn^@9PO+?r#;EBFI;UV?YBC%6 z9&HuY8GCengnG}c^>Z<8Q*=demVau$!q!yY|HonbRb}v&Au07XbeUB&00M&{o+N;K zMnLNc!fH7k6oi2X7Nn_iPL5Na*pbCIZ#ibheDmtmCf5TP{F>Y@VPAYi4gtzM1;q%* zQxSpwz9ts-@wM^9ikyy@%+_RTlW|{>-tKn-Y%0?jhc+hSYci-o$g1YKs&=BN9x3Z5 zO!mskfi$ymGdO?Kzi=nKIu_d;i>^ze8^gZETdwX{XlW?elcYCQmBZ20`e=e*u)@;! zreo^1YiiWf9&xpZJ$z;;T(efLI~uorvtyB!iTK7xy5dL5_;pR>s@x+qz@-0w+_K)* zr*E6`*UcqyxWH&sI|s1i!N#-r+SYw$z|tvN!%hsfV-szLt#i6xcmeQ<_Rc)S*oili zHgtHA;9@*8fMVEZ?;6Uxc5pGx6Kjjp5I~y)bMwUBy>FU2wRG-MQ{$ew7(A#(abis& zbz7uOh3=H+SL8+Eq- zU!R%K08sl>q3H>R51MC0NeRK7~ z*5C#I)YGM1;e~SsliN$@%q!c}b7Sq15Ci;z=2L5f`xqZJkpTJuUXr-L{1aKFy8b%^ z0LAkh0r)ShtK_LIX=E70^Gc0fHM}h9C!$2iWy3{fP0AF!n@j3W%U1C8Ko0t3A6VB=g`9>$r z(@ahA8&1@Fu zwhMEch1vC7cQsgmE3w8}sIubDE!dN@me`Cb(s7^x3M)~PSdGm{Z7o=$F`(;6wyd$5 zEnan{oBmuokZ-#ZHEW=tcO?5Vz&)z4OSLYU$*Xb%c^+-Cyf;Tew`d7xbnd9$8yB?; z@nWFZNlvYBe@INN`U+iBxQyfyonlf0k2?|rGC*UCx#CTKe$JL?X#*vdH*XA=-RYJy zQPX*nGP57UmOYa9rmE3WCsmtGR=a^z)fvjzeF>WP|0IdgV8)ZX;hmu=}OPCcrDNU%gk)Sep>%c$Bbx5ia2 zZ1jmSOGM#GLzOay^Al#zb*XYpW7Ijk7H?SZ2&hb+Ni9bV>x9OxG<&s<5O)tWi6@eC z_>vZ9RB80xky!|qg!u5c&WpSE@;hgd-nz5ef$JKdUJf_rHGT@nTyjTLAINGvDLF7x zONf`F%o-&hqV(jAQR<@S&55SWomTtv&P>~z@7m%Gy{|BC2wj!fu1(l^4q&}?~%+R149c91AGCG(Lii3lh(h9y;YZxxT#p49(9$j>SKSDdyxUM(3Bywq)je? z%eZZ?!J52nE)QGEQb!Fe#tmiojxIqWnZM4ISu|#rt;G#r`50#1FrV?0w_kcKkz@SbCwY9O^|+ z*<;(>6VL>?lb>r3|E>P$-zyLPHM+z5-3u4H!|6xl&-iEHGD3>bG+a3TYi{ocQ~BV( zpaI4`S4JJ5+%{a3*g-s9k@-KK@Eenho;uf9c5>^A)QT#-tj(``yY~V;ZqpYuz~e^1 zrND!G0_#cc8yqwOD_;isqzl%QEISbZSf?DVyG$xU{^biVZ1rZL8JHHS3_L|-vXk3i6PAee9*;U3cdS*J zk8eVR!W)y}S-K7|An6M18h7-7L4_@N%UY#`l5e;79c<3nHqlSnICj_f`qQ(Rp-G)W z^%2&cbk~=Cw_~me-j2YxvtWk5xp3CE?qG8lQP)0i=Y56K|AM!J6=YDv`=ND*!JVPD zzt|Sm9UMErVFptsn|t6qg8JVPHuqo4oBI7tm+Z?+y&-s%eKCO7oUkc=`Ykaoi}dhd zhdoFSi*fmV&+#S3w6Zq9n7%jdFfM->9p(fvz?h;v29JL6a6dZSuaCW~#pR=WZ`yem z9Uj~t`ll5VuK4L``x1hxAOsaPgmy|F|m6;nJQlgi7I|BEjTzAhY7)Jrkd z9pe!KBoaWhQ(`*Hs`z;jDm<;^WL@~NP4Ciu+;@!l6iY!YaPr!wmx>EmNkm|I0ILB= z&w%3SUT{D3Ej$Z@E?IfQub)V)PsZp}As@AB&M%pZYw(f9K*Mr9v&&AD7;$R*YuNMp z>ajMz^^q)y6&?*B@znI$6@2!%`Ee5gi!?XxQd~%2l<+9O5di>`kxVeeT%n9Ob~a=Q%u zk}$*B5|zM;#Hs>hP+{LtKhrhN#Rj{84TYA+VjGj>hT|Kf z!R3*_q9nR999kSptWIJXO0JB=mrxqA^u}HpnM@YS=*lq_#D9*&LW^`<6b6lvaDXv{b2evKjOSn1uG@dP98}g(~-hE3avv z)c0%1FoqF3cF#OQl@UG$g4svlpL2CV1BmoO?VO@qbCccw6Pz#%zQ_P9??#}RyaQuK zCoY1mg~j%qsIrM}f15b?F?sx#`0+2{!=L?oKRDLDa8Q@K{Doug6&`x$^m9Y)9w>cH z<=jZqR`UVCQ%qch(L>YsrQXi}cEvx#V3Uzn?p zEVV~u1FS7%0Oyg1d=xaYk-g@3VF&Upymrq#Gga?OB5Pw*5l5D-l_P)WK6+-L0Z?D` zfAJZiEf7TE! z`%2yP%tmANq_cJ2**crvI-RDjYlc%Mq@BdL%}*PbyE+}6T~91*M`ky|-HpiX7N8=9 zKYv5*`Q0t`Cu3${FA`luVNGkC1)Y};vzpAF9npoa$y`@}hsy0kO2@FuK56lTy7y+Q ziPmg!exT0OA?#lMev5q#-&jT&Ifgx)`8*llVYo6)?h$QhTMgwpqu!L## zx;}0mR=Oum5rrM-eqz)bQ~Ge2L0qk?Jn<2&Rid}4Z62d5ptJc@Mz=&^x;>_*4`D)M z(^!2LZ`>2jJA-MXJ)|~xWE3hxPjV()h1vN0UUvPouyZ%Du;p)dL(Oh-W-(l!QTtGU zR)sTakC%yp;JGq~i+q}FsILTV4;@c&KHOaOR~BrU7M02IspZ1_4&+vUVMg!Ij~Rn> z6`P_}eF#EPN$yJFDC3|+y5OTx}J#`p*G=ZL$E;3_`%^({lTxBJ-*0JdcKPaKhr`qtx zn$TpZY0NF_(wIbhu!f{w!2wX=I1jYP%-LJ25XUaLvmp0WAF zb4~M>iv8(a$6Bs-gn<D}b17d<*CbopizHb%*K$Y_I2)?GxFF4WK zD|0z!AeJsr1Um?WMynO#%dib4h=hrL50Ang9=1U~yuj%1S zoBQASc5v|bNjrTL|GS|X($2uQ^MPYWn06SNvAcXQG_x-kCy0L2@Na!PzcuZ+MLSiO zEX07ZGiX-M5R3-6IeR!T?VzSEbHg91sTtw{zrp+u06Tr1BLJqCrkz2ew|^fH$DDql zGCvt4hWm{F%`}dknSo;m)aKtOh6zQ)8asw~k9H9))v(Dm#3!*ojOmzRNV_`8YqB_R zp5q3_SWkqVq^T;tLdz@~z);-Q=E#q3nG3sPuBmJ4)TFDX^fo0pA`%NMcWH`sFzMp# zZ{K6Q20>%1aTcJL5Vth26lTFQ%rNi=G2w6}z-|Y5jJ2_akN`9Sm|DH3XaLXbQ#akQ zod^71^a&c9=bHM7zJ3gm5GDbmp>P4=3vZkm3QR~lXaI_&e2?vT%Dc(p9F{NjHMo(Up%GF+JT!!6jVjPx%m_{(mfs-qIy* zXk+89iaEEc&GgH3i_|Zkk}*(;c2%*BwhJ=jg{}zHe`f-+dw_S*bwzYlJa4H@RccGb z42s9(2l~aa4|FA!}$<_8*JEV?4Wu9G0+yC%=VrW7vi@es)Q1vN0Y>^62F zP3aJkFcM$66J59y=}9wdWP*niD?`zxVaEN)$~ctw%nqLZv5;`~^FK!-%ahqHP4!?n zvM>@|lx4ScwPR&rS5w?k=QbvzJ%o(`Vkuc_?l8?W6KMbGC(_i`h_5qj%Z*x7!{*c- z0i!DnnTx~rI#^X*agWV9rxiUly6mv~b|6Ea3d&&zLl>_iK5=aBJz|~AXHYZ*Gw2(u zhrB#Eq!7Bm?@nd1p#WYA-^2+0lfT4XG`2exLd^r9)aG&A3k3PGu2va>Vqm3`( z4c2EjOr?FknIe+k-vMyv(!e0f-RK9{{)%t+XaGZIRqVeSC%6Of-KjzyxxXc`m!O}I z3Js8x+S2Sahc#XWjk@0am?6yaRBlh`{AnB2t}}Rnga*+1a7_5+CMvwzLIV^A8lVxI zS#jmj0JOWdow=ro-Mu$Kn^U^CmYm-NHQCPt(5My8tNm%L8nn!6Lm-E0f$CgtZhLy? z{^H5g)$R;(LWA+Wytv-k zK3qJ#PZ5}>SetYPMolhFAmvEcLzOvKre%s0v8>=ZF-G(DY}H$7g_<*|nT7I_Z~>*; zy;v1gWz7`G(0wMeL~XHVxVD;{-t!ihjIp-d&6As*VCuCe^`WvSHyx`lQ5@#ZOqnAk zbEN3awqn(}RD+sEWI)>$t*WfiJ968ncT|vq#CVrKRrHM0|&S`XD1y}7oHtOmeMi*HiroYXq?&X_A!^%K#EH%uX75`6N4 z;~KX_;&%knk#sejt|ao!bgAv9|Jfc^>pd!{L>l)v-37y%KVOv+R3L3^ za;MF{tQ9VhF9YA{j@Elq}j-lExY%)-s|Gd?vMG4Z1?}fF?9*O{;@VYo@0c8lXApr9LbtC7=>+ zX`<9J%xI(2s!)5vUFBY{^ugHb@-Rd?hUm0`-x6+3_^V^QbbVz*u4k`qFwk?tQ%2^r z@dZm}&5`G|x~BHm$m~zp@TwIiUBxj+{<x zl{|(f^h4y}y8yd{%`XE~k8OX&tsn_(bn`750D6Oe?F%mnu<0L;Ue|)9%1qc zZC{MAp?-@aM z_8!@w?=1~9z>mp;pQ4-Jgs5bvUTyXn!^ zx$2n*!XQyQ(I(ansZD?DUTF3S&S~C-gY%Do3;E`rGMz-$-mor(&u~MVy{6)#+SbMR zDxiJ*MQ-bh;QSNlhgfDEEvSF@gXAcHZIj94R*rk2^N4?pr*l6zeJ(c5_|e%1H+K7w zA4;7-H~t3y&%T-Y@;7sH3oHL2WSH8*{SSCM0=Y8?5WlzX47T-`$eq8p?p%6!`h~Ir zPdONxh0{GRobCjO)6`=LFeQK2F{YjV<3rdER|u&8e}94)q=!ZKa35Ow-n7%t6XQ)1 zPWMX_)F42dTjEk7NIQcQ#5;y*A7eVe{EJ5)V>-|q0`@Q5LGNJy0<$C1!|%$}!0Zqm z7J}-s+n5g!)6SqtE#2DAet3ltb{$bVCXNqtcl!%_QJ}`-oe4^)0+E7v$JmMVE&C!T zP+YluymRdIL&Hm?AVf}J!1(9c0|L8vPT4Smiu(i1O>xGVJE1>I9+@XKE+%_kZ=mbb zTVN$&S!%L7ba^tjAp?XMXx`K1_CV&V607?BmPYi0vNIOltrMnjh6CXz?%ZRHu)xGD9AdAhX@p@8e!s18S1j*Y{5NTkJr6EC>vwOngofvM zfxCd$IUpC&4m9~iiB&p#p^WNx3U3)^Z2k>Wl=f&&6PF1E-%P8vN<{$ZPZa^*=(?17J+vf^uTP{m#}nB4m!*ki zWo83rKbJjqW<#6fUn}Ye6q#*FT*Q1QQfvGgb$M4=+?~j7;r5wGZAz0HwA)T5Hpjv% z2mncJeJs8+!mY&m;D{P8Yx|+8^H`SM z9S?RT?y@RCz$`y(&5gOL;HM`-v&cXES{y&Qt6;)m7_~B#&po3El4}44AuvIlN8H2% z+IU5tx#k{QJNID7n0Rw59&kX=9FxHrAaBm*DaWXOVFK^=&n$yvaN$&$+(iRS z#pEv*j|MW>j zK~&n%k}gKS>N>??ipaJk$ZLty*#knr>in^;EE?8q9nNAG_U^O5@|UjJ*OnGl#22PI zxb2tZ0qj#q=;t1qm?>rJA58d>&zHSTxPtFWuiWit=E^;Je23Hu!j+v=p!-A_o;MXX zEnH(dB=V6lbe1s>%&Vev`sA{?uuY5}J}>VNdd#lVmtG)Pt28i#)`bBWLf}9HkN{@i zWUcHI2hwL&$xcl0E@5SaD36*`46D#J$Bf}IeL&gQ02m@ubkTTW9U9)0yqF`Te`~C9n)#&@mE=&s}JhR`-`L-mE0j3$8JuTe}7H-*{J%C(u`Lg4dBUC z`0Hrwa-^!}Xu+DOSd&DSYmRKkUtLPh>{F(jp504!x8qYQ5zIWOg=o&?i<2C%1Tr2z zqb0LnYJlj#bKs&M&xF%Oz)gj+of{roiW|Do3d-S zWQYN!!KJqaIZasHQMtx`dqg=ZGfFiMZcH>+n=>7MYbCL;8<}1X)H{J{D_m>&3Kg}R zwqTvY?zhMC&`!-rqd->c%NRlhXSN-zEheTnbG`l2@?m51w6wGvZ!h{wZ6p?w7p1Fo zCtSIy?EFq*dOc8^cVwEn07VlqnLR>9@vzo=Tjjo^@p3L0){zi!3Y(D3iBprxYRWZi znVuoW^UzTEYm=UmB2d#rTdHtF8LBJ!kAcRhHFrZpt6E0kEE_^o!Z{X0159foQ>w_6 zAw6r(_uS1*e`lW|9+QtDy`)brS~4r1@@8~u&z9;=*yv@;$US+Pr#R^?OFZQpru6Tm z-v2S~`NuK$e;;vvq=-no4d6l&UrQ0~a#C0<&Bp@;%#uw9C`0KX73X}NYMju_n*-KIcmc8zb9Ud?-Pg+hG35S7=>Bet4oL4 z`U(G$JOCP?a{P;{b?^VUX}>BDjA}z8O7F13H>?Q*V4wE$p74nn=h%t`D-y|c)G z7lerkeBachuPf8z_9;zd*_hh!G|!VOZxSnSihJJ$=Fkj}qD#+0>{B6dGuHHN)1lsr zaPK){gRX!NYGp-2^nH!gZ|ZEtXe;`;22OVoBksF*nB7^2CkO2Rnd83S{c>D>XLf&| zul)eI^B>s%fg;Q7L6vOZ>>j`5?R+>l_Zx`!3N!r%V$AOSx%q?oVMb@c`xnUnU)hwG zbMxg1VlX!|Gz**iW$~~uAQk$)9WkI^`gR5kQ(RA^hk^aS2blI-vEH{1{~8_cpCI~D zN@NCvwdU7itU>Fr2tu%@@3&$NVzt7-&t2u9!1LBGQ5MLc_mBSZq2Hk>i9b51ko&; z-ccns(sPOy%o(G(j*!+rUCVwCr0~e4O_=p|~^wx7^gM0RZ*k~B8 z3#>4#1@t-rbL1;%;VD!uzS4m_TF?NHd;sTeJ=Mx3%gHdEGHf$6@l%xnp} z4jQ0J6rL-@k+=I$Uq7(U+z&%B-u=pq!=ZI%t_!D=3=VJUC`1k4`j`A&q>TxcvT_bC zeeRumu1aqF(}?$~JaR*o7_(M&u|)`JmfF6ddSD{DGy9kUkG?O+Fj^TL3PJz+#IBFe-WmfCV7~Fum|Rb4S8<#q*4b zD7f;5+yZ4X@q?cW_y0Y6_use!WY7OKfA8P2=YMlAlV^BL!kc85&@H`Z;^k8o(4~q)uzO5k!FPlpzg)a6tpa z+be~IokDLrJF}W@FQ!`aOxW&pMIT5`+5@&!In`aAJ$!$j#kEbL#Px1eH`i3WOzV6M`JgJH^ zRMj<7N;ZmP9WXXyAs0++n;aBu8e7h6lSTxg%^lGFu{XRg@kd<5X!r< zEn3FJxZhlfwANzn?NDP4-oLN95N$1`I!l?(LbTfPWh;(Y&Xu4;pzg~wt>Kc^ot9f7 zQk`#DW*d^2hQaDRuS{iDr0Qb8A>NDmCd$K_{gF#vm@BKYk_| zQ#j1ttT$eFgi9uWRwc@M>DF~ojXYwBk2|x*ZZR0bj8j6 zgcOT6DYb_9SHUoK6{aJtWk&q${C0MJGtpW0m)l&sw7!JY;*&YT3RfJ?X|UdN7pF~$ ziawH8`;y3Cn$8rC=!7LSq;_ACny*Y)xP*)tgLicPTN-f^xv34x+yzUjYlyW~fx0>< z9=d4Lm~5-Vb(yau^Oa@Z%BUrCT}h>J_>Lx~@zm^zS#xYgAL*z94Y|LjiZqScS#Jy4 z=|P}<;BD;LitEM{{-Rk+dcjj#wIrq$O#kkz%#-8KREF!?#5CTao7UVdYyP&qcvYYJ zOq&>XlmYGkQ5NJxaE*!sdy%~0ZFBC1AtiNJ?S<9C%0;NPZ_lq<^DDN(n!UIo@ilMR zijq*rP}*?MoF#VO6z=|*J^v|w{9|bEyYTL}Y!?LaZS{3*<1K+;GyvB|1c00D?;7`F zh@uaia}S{jl^*bh{x8X+pRgoyJzydy9L(t;w)JK1;5#>GWuVk^PuKaq^RBza7XKNJY9K%1-jfi!(zf_>{PT|k-TR-) zqa#NAly#+lP8VC%&}SLnuvgE0(~slJZ}8x94M>uxp2LcIfdCl%hz1~m5a>RL&i=;o zK5&X-tzoDgl-j;`@1OzRXG8mQvzVcSzfyO$pzajJzWIcGGs|Wk)ysXe=*oRJI-e8- zq4N0e{q7$Ih{a7{&?ft<-@RWTwHzg1TL)CXTbMq2=XV!dbIuO$AB@g@hUuV9cA#pu z2YAX$>&}4pFItBMO~}{3Kj46(Aq(U`4ATG%)AuI`J}BnqS&;w#cfOr>z|Fo4==1&s z4xf2FP8_Qy9)s-iKt%OnsW5itE=@Z;f#tOiTd{EL(A+$*?!0&J3{DVz%TqrEAwD%C z2*K$lhU5^i|4o7rA~)PmK>#U2P4VO4c|&qUD{H6@SWM~WHkf~bW9kwbJ_F!05u8;- zXbD_aCxifij7eQCgFci@VBSmsCXw%?AV~mxNMT~tph-%dTQin-&;XnQ)ajK`Z%dn4 zl(?G`M}<3pF1_fUKBHETSS_v+;q0Hi;L=5AH^O`m+N+B>LF9?q+3V=BF7LW#?n2!a z)ECh5gzN#xth|YDeVrn;zyAY)e$3p?{&9f!0XD?^Gt5;?ZYQ(^01t&A1j5{cJHJYt z^n}_heMtn4iJ}g=OJ_7?&A=Mu(dDU^RKK^ zkF@1e`l0BtqO;cBeF|d#595KGs^o1=X4qJo^mG_&^!ZI)dC%Iu2M|oS)x}iJ?D#-* zHkD5R`H%T}(%^z7wJ8e4=njMON!AnGJ0`&TnW=WlBAkCJgA@*I%DhYfg-RzD5hpli zYG>20EA4COVHM908RFx2HDvf?#2><@nU9*trlEeq-;PyX5?#CF>)i>6$4CgsBSm9d z905k6tK-RyaU#X#LqqE>_WFT?vHvV_HrZ#wgYyVHKu-c8w!$GuliH#oL6_bAr-|st z%Baj+Rfn3RHUM_ut8cw4pIf_6^$j$}eMC{; zgHB5LTvt2QR^c)sz4-6<8AgdxSew9Y9+@%j*F;=|G6xIk;m!jX(4p1WTmS^i0f=1h zIZZOIdAOn^$9_oR;W_?GboV<_VY(W=7k<};v;CAm3R4gQz#>3WPY?jyVEsTE`jL{* z;_JvNwKG(_lREq7vB{0y#jmbcD$d(;(l?=HRZrz-=ut?#&M;Do?6riZ9de2Tj zK>Mk8?v;Q3jko*4S~}Aww&nf>WnfVoTGfTu^@$y0?ns~B*HRkbTb4WLC+%}8|FSB$ zBJ(e)W26H3jPUt76N;-PUTk2I5MV5ryjc8axmn?Z;tcY}zsUUkxn=69u6kcxJVh;7 z#Mj7Eylq@L^!0nX>Rlv?rSZU0CtiHdAnFAU2{2GPVc}AT28hg?@rTK4#=%hEz!_;0dS5jStc7GHTy@^4w*S@ zPgKHnmoQkGV53W8fIC-515gxTi)H{natBCs7X$TPq&D5}2n%Oa-k97S(FQYU z06Q?y;iDY7_;jzhwB6b|&G)vW%|#c0phVRWDMF(cj}Rf| zv@V#U=GGA}x#DF)M}46AHXqettGI${MBkvH40 zfhzK4I8fwfx287l78ec@(_7)zhO0PlPEF~fRad?fY0RbCJtUVqU9v^9&P3583cqRy z6%`y$6TE-_xY9K|VYxkKxH+tuRNAbLNQ4xGFQGNMN2S`EcNCvplinWD8my6UvT4Bz zFERb@<57v)<%*Q!rP(0qg=Ezf%#jxv25D*xkK4e57F5BSE6oB(B?}z{3)G1EI0Y6SDUaC)hN2lv+?c*zBED|h6t!4kIe2; zxqNC@z!A?y%k5}&CRCoWr)mm!LShZ!L$hTXZ1>Z%Tk+0HxIXX6w@lHz)}PRNVoG~R zZVRGxF|8p`b&=wvJ0^2Sm7b{59Z|X>YIh7K5>BLBN(VB4LMp*x1)kRdeT z%<3aeU8JcEApmM>q)}qZmYvars}t_*gexa?=ErE_(8X@4BDa;)CS+)n&<9)EU`y_; zNZDujit1?HUS9Cj*PW$RYj)X?>}g|NMWCe#w@rzzG2Ye&D{@b6(w$KRE82M5l3y_9 z78F?El5>Xa(qynR>Z(b7O-=zfOxaIVkw3`;AIXECC_*=2?Q3K3CGMEga$imAD2`fk z5=T+tYZ#*4Te{>Q#yy|#uktq>_3ilTqr&l*#q%FBCqKmwek8dSSpA&yGz>u?aUMw0 zE3YFvU*kS>Ej@EBJ@w!PT7Di}f0I7`x%BYgGk5Yq4M-w1@!!k?a+PMAW5i6}gR#B|Bp=Ns#>Kd{e zbO3V**5)@{)8|;2f=f^NMn!pzd;TK0^0aXLUE%bn6tvI{7K)!!ZNnmjf3xUDnZfTw zmpjlvzUv=y2k-$gTzCrWFtPm|T#?-Vk15(!Xt4om)OqafJdQ8E49z{UW6P%ZpmV|6 zKFD5w4nGe|yE8wa()`9B#yq3OoGv(PN~{@@8`}7qCb0=V!dANnVgiH(?2!niY{JVS zeAqXG_sgAft30meLH>A&N-%?eueV~_Xpue z8X!Ig5s3GpVR3vw*a(tO9#Sfge&6umZqq+L#HyQ!sAOX&-Q3Ge9pt8uJcV^i<>aBB zDzc1gMUVeSI5EVaPc#z)kH7+wdI#wGs5&~ND~Y-#Zd7PkzgUBZG4k<#ESa4NvT zqn08BeSLO0xNza>(i(flx>_(g>!+9s{0mP5*t;?41C?h1pM%Q3g8|)2ytsL6CZIxC za}K}9b1l|5xt?UrK@~N|^xUM~rRr0MUhYhhM``!uW;% zn+5=WjTAQjjE|8mZiHAZ>D*^dN;lT`QYGgJGKfo|XqJ9XjX z=U-^+08W7Af5AH6KFyd;cz_*04*nOOxmRXp{DDobkfHl zKF>W#?S4bb3y^>8@ca1D4~fGcyh}7oK2+1dRUwS=*fE9k2b&P(GcWKm8SCeqAR^13 zr#HXh5nUw}1_$E%nF zvipM5pV>tuqmdM`o~^p6h)-X$B*wiZiMMpynz~_(57~06_^hG0$#IFYOP2I-_tAv5 z<^vc0do)S+d35cY@XD9Ke0Ybqm5zC;Cp`0$o_PgRev~QyKu7aeY**o1mAjV}-erAk zTc6y~#J5z@br}hhF!gYR*C_$O&<_vy5f9u}{`r^QxtGXS>l6_PzI@&i3~rGV`d<)#Zx*xpC@=9%a(xD+STTcO?Kyci}rJvwOUR+}$Vf^)D|qKnYkA{G~&E zeuLwlmb%HziaEdOs2wuaUupopwBOwUd@!x8#yTLnQ@oRlCf1zHO zU+x|pw|Dl-s~d^#d~A9)zesu3@$At>ed8oEx5*~hmToXLPB@}tmcS?i$mAO_deoi- zA3rs{u0#b

f6a{*1Rclb+kIZr#hT9>?dleXS*XVTwSr%pFquqqbx|Tm{Ej*ZHEu zYRfIT5%i}kUWx&~FY;(daxJSrEjM~^O&IRTEj-H;MxW9a;#^>l7A?4^ylHmoj(9E6 zSZ=PKlot;(vpb>YnkChi`yd8H_0f{A)JaVB{6(Zx9uZ{()C`nL{72Bhb*;5#>|mXOKjYpmU)X})$J_|=>s1VYc}|d!5sAvj%e8)E|Ma@ zqvZMb=)>pt)R(hK9A{6DFD3p)vav zZ2h%%wZ-QMrh~}}&yvbYgh1d&b)kHy(JQSSk$Q-no`LwQx-W^p?$!zlB9dc!- z)c(wn!98N~$bgo*LrPaj=ZjNjM^iGDXH>Jv95LFn2|pkM#^I2fBT~3SzM?i%)khlY zKt5rs)MFm*zIsKq!=$0TpmI(vAp@U46h;6)a zEz(K(f-VA_Kl!`=TDthZlBfS1+5dsQ5-e-knnv7_&R!G_m%Dt^NSpfM@D%khUWxu;x9?Ldi7|6=0odM@2vmtsKzN^AER$ zP_e*Xh%c%mi<jysK@u5araB%F>u`l)2E|Um{N!oh^)(NFlNP-k zoyGM0E@;bcd%tf)=~v9Y+d5ww-vdf-Tu-7ax3ZC_Z>JcYTbHA=s4oyHUZFHf@1C^x zzMXzlV8GqKO!2;#Qe-U#X#}d=-({~m{n`XXR3G+V>%;y#G#rZv1iqbq_L_b%Q8b3b zYVhE>>Qj>X7ZpAn!4>UC6b8bB?De2FL9m{XPXh4&J}%r3UISm+%Cy1xuTJ{A^3c38 z2JBC4tnryJuo_ty1Noggb5GyzCwfKOF1cQ`0qzuK3OD>ZO2FPc9Ux!SiM1R0+--e! z%v!o*DH5A;&)hWveyIxQH$HDx*Jufr)@)eW+>1;wrgPEZb#8C6yvG;5%U+y0hC)`? z%u{x;LJ2IsMgwpS;4Hu>31AU}iXSkj2>S|Hq#%8DpD?bW9B|wPMFs3@uQ(cDJ;#Oe zzzLbYO=c9=%>x<+IRpBZU&Qyns$Tppu>Q)w`pVvYWNh6xcODzDM=!jF=PPoS&HFe& ztnCM;)&+D(%=-T@M68wQ6@NEli=G&HLEgE$xSf=3PBi!Q6B3AZ0dH@nwiWW4>vLmpAS1gnv#N5U&Sq3gbiX zzYf{|IN_7HO5@JLsG~UUttn!&n#`&?i)U$*K4VhUd|sTC=`!oH=IA^m70Nqyc>Qbl z0u79VNN%5)449v4-j&b2)Ko3K<_t?yuV;zk-mhHquWd6=xK2Qmq`W1*|1EfEHaH}V zF}gtXPjK>`c>w&4(iq;ogF9aZw!feSGPw4If8n(b?Nk=+U5@rsG=OK0`~Z$1x&oet zDET6(%)T7QJWG)7)9}XE(VZWnyFbVF{*pNQYx3l;k-Z-%(AAXAT+>+RpKxHYvS$&x z_YndBkSoU-T=Et)SRNqe;A=$uX+#}_5$hp$05ZO`v+1iOE)deMIS5!ek}C?@ z)AH-`KnoDiqzm3jK@+TvTL@|<(Et)-Kp`|hM&ZdY;XtQk*4MaWrby0HVyYAxKx*`{ zvE`SUnZD{Xq3Jb+JCDoSUuiqDOH4K{@nhELoQA%YMZHab63=x^xkx>zC9 zTqv#_hFdH8NcE0B_|d5Oy4*dY3o$V$T{)#2DrHgQuT0p}L%I+s_m9Q|%jM4_`ace- z|8z(7@u=pCRCh;f(*^j)HHwQX<(2i~@>+IbIkT`*UfXT$o^_8Ol~xaf2h z^oY@aMP~U#YWzfE_*kNsm;=;lg^C?dn!SFSd&h(=jI}A!SuL!eWR?%&+$*M6z4fj= zUpFPPwp8AeuS9BSfU3?L8CIKb$qi~p$eS!DYh8$(scJV~>NtQdnf*gD)2PZW)p=y5 z01vq(NQs!r7E#c)YY3S9`Cxv!Ftb_cZfCpOK!KdOX)rr?i~$v6YpxY*&2x@1hSMr{ zSnZBzJnXIG)O9I@1_+F)+{2UhTVtkc+)u8`ZVsuXGKFhm|LHEu|Xs!NL@G39_>i*r3Mnuqh_R4iuYx5N z^x3t^QHfEZc4|yMgCk5`fK+2w7(HfB+!fBz8!)DENDQ6{OMtG5Xmg>ncXw*%gj`3U z+C&4~(i+Ci4wX9yP&Hof=BAg+^IPfmvNKcHheg44pfVk%bgaD?tahE528dFHGcrjx z8HEh4h|=sI*E)6Hlsh{mcf~)QG+tMkr8bY!MaeO=*0?KKawV(0xDm>Hn6@Ov898~s zEdhIy9QcyIpbJ&Nk7~rWo;=A^xVdCb)TNF%0r5$DdeWMnpkP=NxjE^(Dsg`@V!t*? z;5bSH@eOV8iqdn_5Y$j2k)1InItpLyjxjT2Opn_0s$h$-fh{v{P0gqR6%-fEh?acM zRa*~E?}ulP+^ua}dEHuCH|JMP*=1d_hY}d~)~}mVY)3|&g*(;^jnOys(W~m|y-(@NF zWLCgi%!Dnt&KsX+4!=w8(Kq=xD0u&0XODl*onh|$x9Gu7;l1x6hr%g?QcUvz-*4y- zj_-ZX^??7#&xN!gX|T$+{%v&qJ8$$!fCYEFozA5$q z>ib{;weM<6d*SsLsl6{^TewuulN&G7Td|c6LHh^Nw@al`;(lbmuK7x!( zd^4lM{TKuXUTVkmnPc{zcloIZKp%Y1rZc+sMSSDS)YdoY?QgC1hw{XhvA7$Uxf{a& z(7wPO6kmSshM!$MYtUOY-r0$PiK`B+5xBy=8xdQ z3tZiTz1V%~gCq^|qIMTufeC>YrySmQJmL$djL!WAfd20Ja`8OyzJJh}^?rID#C&nN zFg*)X4Ssa7d+sx8-c8Toi7V^BnVvgG@1|!#%I{Clm-wJdROSEk^xSW)64P^Xfct!3 zI>z+8(yz+ezKp>3r|0*`o%f^jWqSBsU9Om(2L_%?og=39K}YYvUf=ia%nLD)7op(@ zj+#0JYTH?o30>sV3D1>y#>A5*3_S1S5Fez62h+JoU1Q+sUm@PtCJX?kgNiXu971vk z>kcA{F&%(ueKR{n1VYHC%KTlhMSW%wCps>1RL}0mnKNb|Sn?1IH|Y zRq0hZB|*6jJP%~e-R%d~(!muq+?WD+03e~Xi{K-|L4@T4KRVWbhJGG>o+D$&eSP@^ z|GgNtI6Dxl#jj63xXnz@==Q<}$8btG=D7yoEoLR`S$ts=jj)f{A~Q|)gTgcf-$z$d z{KWsHXE3^n1(~Wrw!A-}99TwTBF8N)*5nX-392?J2Y84NFdz zWsj6_{jso@jv4#-$7sr6z8+bppDGKdHyzzi6!CFeL1M{Ym4*N7HS>QPat^zvNF%U) zH-U5{l-YWK|Aa*>(>At#U3%M;KfvOTDTvA5j_;y;riyNBqMH-GMaDjcKbWBtfdzR8 zn+NARnhI!I048$=U6exvKeG78F%L&b$MnhKzez7Le+5m2&|O&HUf8Fe*xQH@(C^$v z9x%zl;gMxFN2AL_!G+s_g=_A)tIqCla77qDPzwY@XP-NI&vngnWnoX9+mwWapRvPo{tm(Vy{w9dDu}HahE5_dWE}`DvpI0mDwFl z@qm9Djz>!yDRtjI`M5U@iu^&-qq#~RdD(az^rZzTY%CIfs`xMI;Bn0ohJlMkc=bs5bQujGLAARXuSAg?&4`k3}bVC;2P((I) zXi{L@&MlR@B0wD9Gv-bl)%&I*zmggm;s?i~QlM~R?E{fqUGfi4nBX}IaUJ5HjoSx) zkq!wug_nu4nkSmlJtIV*_EYi7?B8Js3~(0U|FTRCYSbwIg5U)5=vY@d@Gd+noct2s z{VurimCyj$b<#crg3Z-^p#dQLWPycj+RA$z!-)&`HNbtkARPUUzrF^b`tv#5ZQQVt z&9|P}3+@KA0dQ4-ORi5Z$-MPR0Tl#)g2|;mZi&epNf1C1qhINWQr@L-qXC#dg$7`N zG=;OyT$O00&X++0NDW>Ru;yScRGW^?Z^05Z1arY!$DN-t$4bt8+h3cuhSO>nLENM( zQzlWF>h$_~fKWza2Bc^iGy7G(6hren4bY3Vm!ORrqFITJ(2sW1WY_p2j#ME~YS@wm zO&~FD_e-21Q?e47TB>iIXXbY7nU2JoV9kGvBY+tTIQ7FNwYRA9QifF=wpS)Bqp5>?GbfL; zi@TocoHh!yF{kjRCmiun!k`AWWLjWWf zcVhFK;qI!hIqNJo%&ELRQ}C5)u|_*ssu=^ZQLW{+T(5P7{F!RDIiGEbN4h@iiWQXB z02*MNQ;R7;L|6gR-V~fP`X}^0iIxg5x5gHCMyv74e5SRUpV=zR?fQycZ6H6wulHxr zVUapeBfKSPxdTrN%ksb^<`!Fs&!yB57*;rMj+w6x={~)o{PSlMS8pnY$MkZgO|5eo zEPmjdkT-9P>EV;AED>L_X$|D1TK8u|3YxjX*=DJ;l4~s_>uk%KmS{oYW~hygm?A@l z@R&6zCmIrKxwA9=Lf4<~1Pjw1x`+K4dVdv`0NQa(@6q@(u42bo>X@?)b+jn=!cB^* z-AM`uw2s)F3Co{9m0TZENo6*r&Z9PZu>h&eKB?9|sdwrfAv3foz3aL}H>9+3lTx~3 zmUt=Ln9I$t)z)?*jn1UYcU7qw(p#izQL|KpDJcf;2IbVd1pTv2=^cMl_~Q?s_#A)6rw zySn-*@IDjZOThdTOm2xIKyvr1#MWEi;^XMX=jpxgif4b#9RCvE|2eoNzPp4sg(E+? z_ig&{2l4}Ogrd7YMEAa@Hb zH`Q@-c0-d~Wlu&4JZ)&6X~1fH``ihxy+|E=mE7aF{4}@wHp@+5;i0LrZEKy_sREdL zBy0x#dSf&I{g z{!e^&pQIQviH&l{*#P8!57=C^_t;TC;7!?DIY0wQJnhfai6LV~?yfrWE2{7`MFA{y zb?Hr4lisn1M&RY814lzlX(T3n;>V}%>1Q6e*LBjJ@*G_w$V(YPG^*(KqEN@rDIIbB52zm&<6uF-uHgoRsb;vLEAyynCLhYe+%~d62gPTEqVa=j&Qxx zJN6%^=e~94oDZ!Ze(3Z5`*~KP@B*@ zMHTdG6Mk(@82I=<3|@;90Sz~pH4iSJF|j{r<)3VR+} zdc(L+y%%>pVdnz?0A_dog}dMHL0;1}|JXM35I;#`=iB`0Ul}g@Fs`5DyFZBA8cBUR zxoH;bw~tdLrmvne0@|1nNeAtHe<@{T%Cy4Fk*!eve1!1X{_V*Gpn6w|sLqymONsusrrM$~S8HZ%LOs6;xI1Mlxg6*SEHPI{j znABgD_$s&U*&%yg8kicRFy7O?mj_-UI+xpJG^f}9T zM&Z!nOMEqaMlwej@qdmV{uDj9eU|s{@lOvHn{#J*#JJ*hz)KIp_Q*f%U?!Tzv4B+>xu_TiChO` zu{^Z{B8eZhOOZ+=$kv!q>zQAfclwxfFBZQms-fCk`CAn9?b0ajjlmtP8wFH{%70kO?-1GBzrzB6%&tu-QLp_N!eIb{t92Y7H)Qu-Cllat+Kh-+&gU_Kb$^!oS5G-XIrDr_$ZN94>eLbjUUT+o`z#J zC0X%Ws61QfawVU`^?pNTzaqCxdXtXwOnhNG*4vEEuSaHA{Zn(U3iO+zGgk^!>hWeL zQfoSsS&ciOw0UgdRHWD}bQTJoMIO1So+nvW*+N5dvlKL^En;M#6oJ|xFrRU)2d3wk z%B8kNZJ}Z)*GW`+xz2iJVJ}>nBP)!oq8N)N=1_Ikk*dMBVeXe&0uqyd+~niaDX5@2 z-|b1;l{>mmZm9lzMfQh}C7)cKyg8&A_nLqcMs__^%LOeY#E$>wshzTl%= z+8G&DS{U4Ayq;`9s5=&F$O>&Y9{v23E?ks5rKJhRBzBL?6;#qX z9L~5hwIHCU8eL0mbBMfn!keoTnMm@OnkRo^3g>yQXiQVu!c?=3D{WFWf2mXB0NhmJ zh5FIB_M>stEwxc%wkw?;V<7BK<-D092LXjWfOsG!gC@MA^Uz7GbW`1sGlYu9NCjG! zHPN&tTAl)uW5t>f8bD$SON`+OQ&eV(k88t2a_^`*IHnDc>!T7AiDd37iD46Wm5?e> zuq3B!X*vYj1a~C%{G_`KXh;`n>7!GIXq&XLGEleYms}Ng12e|#yr;3@o7(oac0%2w zQ1{r=*s+&3Oc|I$J$-V{nqPDjmkh}nb)=~X)_ABwHBF>pNzeG}Yrfisv$QtB&B2zJ z`5Pnl{6`A^pOwCkaN}sgw|z|&M1snZy0kCPtQ)HPPBg$OXy>=7gKuJ+pVKgaDL=jQ zW$EOn`u%^+9{xn+%eTTei8p-9No;?W+W9K8_f2vKRM|JNJ)#9axtCv=K=so%DWZq3 zF{FlPXTwAodA^Vop~=w9GHBDdfm$cV#r=3$VA<2l+%3E^$&OPikg zd!hBG$%8M7_y1CT^snW6e=DB;HGv&y``g0dFM)+OEdLZqu;NR&bs5%$nTOH8$Z=rH zR^129cE?uxy(BPf%F0|-TV|1d=wW+x0$)dT$y7M73GnDXC?Olo0L?RB_d;j@4(q_+ zW?%83VA4`Ow-)xrp8Nd*c7X05 zA}))@ejT7I>%sxw#}<(a_-&)vz)Le2px+s3n!AGm8l^$X_Je}n_spWpx-pv6`plwb z@mw{xvh7`fMWrqa`(pwFePEGzpfT_ZLHy*w#e<&@IuqVc?ZRZ$cRlf>4V+Gc&V;^$ zpUCz5!i23f+Gz&u#M6a#IulU={7(JO=68k7A6{$*?jWIU1^`p>5tV;!OBk4)P*CQ0 zPaRvf6!+<%ptu)UI|6|9Hf?kuy^#SdM9Hn1h_2R-{j(40b2U{+46hK2Bos?c7+qj& z2d^87x6MVq%})T1v=%2rv)KLF+A^uT=bz!#p+V0~X17C-QIKO%iA(?hb%FJaFT%UG@>+p)!2^E!17-{4>YgQzx9z1zG}0_CKc~ggG*Y{cro5 z5GdY_Z$j%|1(x5i_2dCRz_-HY_zQRMr5TF+^fNpsXn^G5clNo57QQyY$0osdTPQ?<*oK z8n*H8;Ui+=XSvHf*T=S;V{tKp&B3?beq^U)YVNtI`A}0hRb`K0=@8%S+d^Kb3#W?o zo+7y=k8g}emT!1wuR3S%1lNWm8?yYNmPqdOg|>B}X*}dd)AS>0W_z6MZ+e4C&QjgS z*I~nsl_L1Gu1(`g-!kU59M%2c%;|`yI^-%yf>lYVdfT44$r;&M9`!Vb-K`OSSA;zX zH`C!&Kk<{uT7Bt;Td?{D!;f$2^UyLzotHs+Ay;1`4Df1ZPW}?!`8K-uJ{oJH)s=Y zlqZmLyCU=6;9z3U>k>Uj{m4K2ILINZ^VrEty?WPOyYH#r=SO$-p|gBpF5EX3@97J7 zd8pFIviSaFd|#EtGRIfkLu(y8^nFVO|JYqx1&EjM?{Q5*ba+DOnGfGFOM>M~NTBxi zQ+m+oqd*C8H8N3`)?~yNR}nOTrg*9?V^O;&jt1Rle9`Gjr#Q{XClI|5Au%vbpm>?` zYXFOO3AC`k5AoRI4lr-Xtn@X&31CpZ*s1#B`;M);$2}Yk(9Zgq$k0@A|`^y?1e9nf{7E`*=05Poc4DKoq8XzSl z5G*u66gH?Kn6|`oreKy)O=b;#59yrWT0>m)B3y^E;k$57+gmIWcZYPS`nK6x6;lE+9>yq7IZL z_T&wX?@#0A-wkU&lA5onop((BI|f*mj++|Gkj^&Y@aw|~SHA44G(yczY}asnOhH|0owEK>Xa>Cb`>kZS~D@#NwnIbQq`5n*rTaHww!Lvl)FpC znWe(a63%sZqC`;m)}%?o3fvL128&u}l5u=QeuLFIVTGFN8I5+61o#*$iJ(UE8c^3(Jlc#>76#eaQFIj*s)?E$?PrhZZv$~yC{ zaBDH#T(qZ~$SUwbq#bn5#JI}&*)7HJgh`1WHTuRB=9>~V)dBW!+DB7et{F_%Ck>uI zT$f&z=qGrM+9P+ga5)VVcE2-Qap!B6M9vURTT?|U9jKbN#041C8Yx&pd7US&aYuc` z!MjV@>4kKs=gHPIo`l*J=VeK783i&bvy3T(3{cx5=0E`g>1Pw%k(8fGRJT-miOH&V z`E1doGm$m;0m25jc0mdnQaeAB7>9Kp(M%l7+vtExHteaEF#8jKnj4|%z2wq)a_O$Su?_IYoL(eMJZj6U!!2uW z-d^b0^7E$j%;2FOKrmKXd=a>)`rp?;>lV3*X#DcIV61y?>s5^zZroA0jJ!?|Bu%mAL#o zzV<4<{wlNmMeXdD{L#I`5jesMIMHUw&1MolcVK*4Yx5NW1vHE>Ww*kQ(!!QVJ>e2Ndy)IFx1z3 z#y2p~Ll_T4h42)f2MiA!ZQ*=xI@`y-h5PaC7sd1M%Mbqwq9k?reeUQdP5}utz|k+6 zy`S(mQ+1?Httk_<5pCn(CyU1HWiId7YX_F%&X}w9-|x6a%sI+dOz}Boup@D|Ch_tH zdq7>NBc*qfw`nt}&B_5JBB~6?QwA1Z`{!Q==HCS8-|!v9-8dh3Mfz@d2GITzIxm*c z?84cIV}&O|ibr3dKi_Yl@uLrtssCYye#gu2&(Qt$u|9i8z-r#NkMR?)XaHEG$0|{y zdThH7{XFc?&>s%aee@>-^!(k@oQT^FX6W~SX@7YynzPO5lP3k+r;FY|J_Y+NWAD#3 zqGe26Y))`(3FB7(KJc!@;P2WJew(+ZWvsd}h$*8njNzF(=CV8h!x#9~u0FR1U!T_u z7bjk3c9MToy;i{QP)*7={xe->1x%JHw*e&ATIQD>I%@~=;Ow6!Bg3|eEI>P9W5|-1 z_}diyl9zS&nCgUM9@{5rZ0p{$@O2^9&###dWtlxPk)ZcU(vyhbpG23c zwe@5&v3uLq8F3XAfeI-`iIaM)vOwdP*}qb8g)v%KP>h(-yRY57FSO+clE}J3XaEd* zTgvdJF?(nrRGQvp)2~Gg&_kSMVb5sAAaz%tJ=P>eajdz*y9AX__w8VFM3LWxxptw< zouW?wxtOMS4qw=3o{LjM@l2UHz^C4)44t#{aHRmixfU)?t zymYK>-q*DsDr)y8i>DI|#JPQ<#>&(>EeDqJHi$DrVb=_xDJ$9`bQ#VU8;ax&&|Q0E%Ae`7C;9^Bx(h@3zNTI!=%c7 zYRq0?U8Rmp!z)+$OPWAg>o1z(4gA>5{g6(^**@dGb|=vQpcmy9KOSmg{Cw9u7X{haCl|AH)7Y%_Jd(uFm&jw|w zY>$);-mI3*x`)j@jGeqCRl^(-X!iV#d1tw8%2t$-lrdBE)Z5AV6?XIam95nLT6B6T z++K=z*V9l$SC3NjI{-1w$u|BInJYi(6c4HjG=Zu<+%UwjNtEE#+|>H7fpRwnB=)Gn zmzH}H6HYibzA=k?(iPB#;{R#eO`Sb2Zr_W}@7joRrrVJ0 z*~mIF9Zzm1Sej2XSIWJ;>CJn+{YQn_ZBw*#RcZT^L_h9~S&MCs0Fk+k@a$TsyW(rj zxr7F&xC)hEwV7yjlC4g>PBmCP09`<$zgDiN8=c~GuR6a{o?R|>morm6XQD)t@inRb zj>^H>Uh7H$U>enWZpy5q6np8p2DlZLkkOx^=)jk428$dPW^w-Lf*GkTs10NW8o-ri zy)RI!w`vF<~yO z(tC^P))-Mb(zZx7nCrM=C7IFn*^qQxV>Wogws0CWDkaB`Oe5Zg&bb{Z&zZty{;7PV z60PT!)cEoB2{eGl9ME&e(AaNEHA<`3lPo5y)8YzIpI2Ifzq=~ACNU@-F_OD-M`YCK zfg!64CasBrBVBgq>!C(B+U_~BSaCA2KF19n9BerL6*fQhb^d&fN1#x5B#H{*k_wvx zd3u`V2LH&UWds=@w<*mbvp+v+4qcrjOrreborzDzWJ4;Q%M0wa398=~c>Q_RXzb`^<@N<#7_%%>m~A*TjEa zi%)`^Z+vSn9lb}E>2qU)2FE>T=RCAPC-H00`@We+v8CtHMM(S)gR|#UmARXTiREY6 zov+h-KNL>?Ry_Voa`OukW^Cv&s$$j*^jPYgVsDU#TKag~p6T8(#6FRFuPWozH>#jy zM3-p^@U)IoYcDf9Ux6)Wvq-2Qy7hHr?JG*Vc%w9wAVVL~^A*Nuv_LBHiDUk$clj09 z2BMJtrd8h7Npx*SmmdWd?*&&bl6#*Q?*5cJ|Cu#sYVW)3!H;->Qrq7V$pUGIL4wj# z8b;NbUF`d&GK}gSYwgh9IO4q+e)E63?HsifkOAtzl+sT?e?}gJ@3ElI?{Wm-?;_Eq z&*3xPf}3t{ppe%JF68!t_BuZ;f^mdTBr_!s*1tW)QaSmkhiQTfY|`;#|YiWe7}-|Nr><&*w%G zY|9h;wlmw)^>nG!p@UjMYYn(VIvj8S?$BB*LJ%ZDf?8{ajtnhQXQ@}+uY0=3dS`a5 zXKZbEKkoiFdmJE{k=d`;3>FrZ6@meP4;XV8;YFW&|jq1?&r_EScL%PRe(R7e#0xv}et!RsSN4 zH200wb6x2~o!z(8@57IWC=LvGIKE+eGnDSBaz`q7ubUXoo%&3mS%l~0B_uS4c+dP( z&m!_Ud>R#26O4d;FF5SxZzKC(TV~JjTi`h7qpK}Af{+}5xgSS~dk9>DHiIeFTzZJH zOcP(1F-4ghtTx;_GEz^?$TKk?0Ml;DoND99JtO%5n$1_9rElcPBcX3a$>DyuspdAd z!7WV)v-JkBKS=5DO;~(=EI-x3VZvwkGpG6(SfbGRJirkN3TPpm0YTd|WX`p)bc0h= zx^IH-zxkY+dkyLf*zjt!YbCb(tKSoRgtG7!nu!(RHL!-{p)~>1o%Afuuq%Slnk2ca zz~5CkRpw9S=|dSb02%-ifV!@!!;8iwa-W+dUrKmrLOWPu%aGVq1ec|L{sKwnw`M%$ zF=uAVos;;=qo(j}rFU5EpR&ZKZCL?b(<3OKx-mXXqzvJCDO~~i8qE7CQ+QI3F)yPEGFZ! z6bD-zd{8ZC%$;a6uw6ZH&LKkm1c7zz_+bn~#{yVV{j!Av+yvkgg9gCIk7$jn4LjUR z@8T=({7a^Tul P(novz+5))dUjl0Zt7N?WA9*cVZ$^IG_PSV4(Lk0H&-6P61|r6lfX5UsZOW%Hh*{ z5~#;TeQj)cS7wW-onfxp_7vyTRLmNy5WyVW>~OW%xRlYu!7f2X`yF8xZ(8e!C`nH3 z2tzmEZ-rzZz&R`RZN&>@wS2 z4Yg4`w&p2zZHbm1?Mrk{=17UGaj89}@f1K#B%@6uS5bR25(hevgGzVI06I;yhzbL1 zBuj>|9*%1m0&e;5xWF>$kK(og*mOS-Esst}k#oE^Zbha2M zR{Xi5JD$cJz!{49Qn_fUo}QggHy4tPMHCN{TnZldTLSHf%mRdw#Own|XGBKaoYBG3 zV?g9LQgDRxP9XmiWoqz9meFjbp;7bZ(|Kc7Xn@o#3WM#Tq6O<@Iu6^G!iw4iw33Cy zM(>c={K=5yvmxowj9vgxj}$mg{m_JJOk|i;5Re%NxjN!?U#S~yZWdQgqqFN)t|&5i zfmHKhARb=utSF&V{AZwcvn0}Bs?q?N?HSPc*_VbLnUkI;k0t7gn9=PjaId|9C-;K|HWoJXxO8M!ys?%a;V;0fB>Kne_VZ> zTz|@S&;1MM-gy+opZiuGhIe1pU;NAbH~)L>)qjZ`|AE(tJ-$<2368ygYS zl%8VdaL?XD-RWIpOu}QZ3x+^((#XR2J7dmJsC*Bv>q0%$gt_ZSsjYYAv%g?x&u*Z6 z;4A;iJNR}0>i|T>nB5HZo^jph0o)eQ>Q#f+=vluw{SDuC2_{MP3|};1=%-sJ-g#if zPrS>Iqx;{)4}avpW37Fa*!>}j)H24D#TOuH;8siEZ^yPTbpWg<8jisUwUv({SIF$H zDYEj(3_U}n$8>1#&PrWqc&Mv<3v&M=>KoC?V##gdZVMkL{zglF4|zeHdik6j5Owt@ z=!eI02>rzTDmv2#fDWkneR$=E%X?63el|uAeDMADSzZ$SG)DLL(3jMjOL*mAjOMF? z2h@BZYx=Yt{%^cQ=3kT$d-@O_L~^-2a<}N~-A*?4pe}wvF1o7hy@G!Bk^EQO&w;gu z|HB8pV~E>2LIC6N$pi=+KgM(O z?hgp{E+C-H<@+9?J|h*~0=#?YQZ-$z?fY4aOVH;)HSwLw7sm}8VR%{*|61@b#{l%n zOD0qr_p8}>n^V3I`Ydllt|aRF_|qux1lqEN+PvF1YkW#m0o?!*dfibZoFR7IK`^O^pHAUdI zCN!iC-&L|hDppEWaPb$~b2GLaP6X`o3*PF};EQARu=>nCz?hC5JipOzqsZwolB}+| z=eP_Y*u!nSMgJFp!6LH*YAua2?D;2%(*OjFmNE2xpg}ya@)83*uwXo8s|wc2Dcr_r z^R?C=;m_fF#J~@Q2AF^9#}KmsHxd2|uwDF7&JWD!(ku7;bF7Ey<>$fO_tC>|{hRN+ zYi}&gN2c0+&k`~NZ(Z}?{NmRJJypkcN5~S)iuiJ;^cEykLE&%rO*jw8 zBCi27@qI;X2LqXR=_`8iD_IncOS{N);-QP}+wx~hZUwk~BD0ThKM9^s1_5h6wGU3H zKC!Qf>?%0ec(zrEJ(Ozk6;3=62!JNgKku1w4S*V{KL)gP(1vSofRz6LCTx8kP<#L} z@54O;Bal42E<;C{zbj-G#}Ea!&fax2MbS-pW?zv%QX_|5xu+|DcXR-efD&l%ZGZ$- zu=DEBk|xvx2uK}T1||siLp~>v+%V;L?3FzMQ=g*CVt-v8m>oAq@l|ok5aeNTbXgi` z@%>`6K=Pj(bB8ErKxdf_ha-HMsv*(w3=OsT37D;TY3#U&qVK$oyUkm&{Y+nb=m4p6 z3uW-%xzLLO4Y11_HIYW;bHMX_`MRxv80#76Qr0?nK@U+5jra%dKX?(TIkW;l<6nA2 zK9*iPQR@bo2f)MXTeK4(EfC)RA-eyk*wJ5;=l_A*{v)&UExUm`@SnrGe+ljWnJ)*} z`*UFX2L@c`<#*=UM;4?++F!zLh3DBl_tM#XMwB1uQb&*hrsT0Lb4sR9EExnd&|&w) zUcYzKkeaX-tjSfWr!H_5B~)cZ7arCGrBq4oYs$HKWoStqT+*>!Q>bSSubGhjfH#a= z^VS|aisuL!tD;+qC=9Ndk(;Whfyyi0HJ>4vZTzJ(XaGk9@l zLqBx+#90EjivL!k#XG^jAZ9wc_y#DtXz@c0rP9}g2EgdgYk&fLYnwn(0}1M^9J;E< z&dM=*f(NT5W0}7LfapriLy|oL55v2JJHRXN;+NL)frf2JU4?O7XvPv#`N}FL2LWL4 zK?5XBTpo*mn0a_E3sCG9kHXGD14u1CIeu*3yJd~G+ibr4_O2`?gLyW*Q&25g6^Ei=`gx6<>J zmR-57H9n^cRIv~hka0Zt&8WXZMq5N=7FPlzi%BAnkI9WHu2Lshoe$OK!?g}qX?b%M zDup_OER`;zVwNd4xn?)9vR6EK)Oh%=e(!DV{B8aGU2gjc+uXs%6z2uGJ%%Osq}r{p zg)D(ArfoV^M}dIM8Jq&H-W}0Liq2Apsw}t>ajq`7icLqRVvXnQiL5(a@a0N$Doe6q zoeMjDnqY!dBpFDTLdDr=buL_)L+!wf!Fg>;bw_L*RamjSACeL`W^|v7DG*Kt_cOb= z8Ef^p+PuHq_LcYtxcKf&-5SF`GigR&L8M5hW<9BfCke|wXm>@@pS3V)^aR_3MYA`B z#rBBAJS;L!%1OLPLbU@i+~Fzhgp@xu$gC_GF8M3HaBDl%+KzViyoDvbFE_1c)UKE< zRHTzNoE^}nY>i})(@4*+1gmp&riQ;-VD{b=8SjWKQ))_T^eZd@y(6S|urh;vL@1LP z2)jSX#536F!y;y45@vte96*{jAx9vcQ5dFInGxEm*g~ed^lXM6%0I|Ua4PbP$ z28z?zcsSC8ocMHDdPk^-QOCq2Eg*IJK_c=`Xh^Bm3xusFT|+3sSC~UWTIY?6%rxfs z5vc*4YjO)E(2*GBZwnRICdDG712!Sjm(t@fW#wdgdRk^36B>u7b$Dj9_Mp`084??= zO)5VbmE4$CPN@leJYqd5HQMB6r;4P_-mn9>QuGkhQT(GU{*=F|nX(!tPv@417hV4{ zy74Ts^(?aUJa+Ip|M17=yZ>eJ$Nxv=&HpWa|F6mW|1SIJU-FOtL*ePaB+q{Iub~Zb zR~GCH6Pa83*cVFfhB|aZ!`(H6#8hs^8Xq?VMUJc~w&ZW$4|bm=*I#EgUxyYRdS_3; z`lRdUbp2Gt&HZl10Sq>f1yWl~YKu>y5!0L|qnjqa#eD-oC{N=gx%IAa{3qm(!`t5> z_vY`t1L;{E-vTVc)j07lJPPCc8CIAWO-g5&=D{ifynjhX z`9nu`e@GL@9bilsoUtUt_AE4jmR-a*a@=-pWt?}BC*H*!030C-(McZ5c;5~ofyVd( zfREs2JV9YuA2a^}S+dWrxu~7u-7gpH8cfnil)^;bkKQ6S@UzaTWF1Z(m{NWL&gZH5 zeRj>oDw^NlUpnA3`PRJMh8(Ja^kS!2Dv2?(2<#N9b~l z?z?LSCkTFw9;Ao+V{~?fyBMRlV%1&voi4}d3q8|sOyig6gXtV&bpKCYXLI}{Js6{b zMd~MRuW+9=ByRhG0lqK+4FkUj41ACl-~$7L%m6%2{buDWd(}n8_rsbtUI|=QHS=bt zeo4ZB@)@b}d?%y@2B@O`iDpnNaFrIgN?L#La+kJD{`!!Lo76|A^)aD24beNP2O=*u zicwF;P3yxmrr4w@HfD;BTM}dD_)R%|192TWb4|rwSFv|A+^9Z;x$u^hp0=dL4s?X& zCoCydXc5CYWj^)@%JN;aJQ82#Za*Czm6=N~#4KO#Gd&<=dz zFm=GZ0n;|dbWL&}Jp=qUy@CV6P-8FWW<1-A6K4v>@=YTDo> zTX^XKacJ{<-_{SljqlmbAESH!99aL+)BDE1@dIBDu=i(r?Q0t0vAzZ%U=>?8c*$4F8b2x%-YEz@ej4{+TgaN@@Q1}{ShS;zs zBymCmv;ogmM^|)_o}ODW2A7}#%+YONVNLN}4-x{WUHXq@e#tlpom^-fOAy>D(eUWK$AI8p;$V;txfTbzbGPr^4+XpN^TZYJ~F|;&G(lv>nPIOVLR)-=8C7fM3ojC`FX0?^^{k<0tjPLaEFT0h#I zN?P=%db9Ya+M*S2t`(^-rRG+Pz3uwOL1lF((eARPS$C?y6lz?p6KOA}dpqU*2knP% zmtX&>^YpvMgRiQmZ?juZLUa36wyXD*gytX`$37lb-VvE+477#{1B66`@<=sk{b>~} zF>F>BDVvkCwp`m;oVTWG=15K-h?|26do)9*^3F(7M=>G;F|9VrEe^elu?3>uL?Kvg zLIVK8I;pjNGA0|6nPK0@(>kej-4Yo-8kNbNY^c#)dHk|*crUxQ8|kcs=6XTsfo6|u zEVK2l4}ps8ENJ)6c-e{aHE>rWC0Doz|CKvZVKePeVZonj5==^FMmQMW7&pM9QiB^& z<7v57X+eTJVGoy>{6cJgH@SQqZ0~xi8$@DGL1)Hw42o&3;i@OorZY_{RR?09N>^dI zVG0d8TL*AcYV!lTbW?zKGpEet=Zgp+Dh!m0a4YdIb$aZ9urnApx;gZ4X`De2byUuX zgkS|mMoO?MTS!H+AfisnOj1CK?0$P6_Jtfq?@)#Sm64T(;6%A|0X&pHNlFb9}=mr zPfBOBRx40eY!>KJa91TdBoOQ)Gy0pOicz5ftWpFsrc|~evGLlZ3ip|5txcqNOvnrq zQoUGbg*eeu91%!b{K$GBQk4f#^4`U(+Ydk8Le4Z6ki18HdJo} zq*hk$2rF>Dpb`RW2+lW!BdYbnm0olgm)NfS7|mbbPQ>Ym3pzD(`EN*%pU9lwqrzbQTc z=jA{DKbQXU|89QsUkgwFWAV%XSbzOr7JmFc7ys~oHedf|cI7DwhNqo{32SDINDdjJ zUnrQ5M2_2P-*u_$Q-Sr4+BZR_Bn(g%vqOv_ zf;yz$Ys3lIrB^7YM6W8~>)zH=Z|em*Cea0hT2MrLU9Y>fmknzsTM4 zAkNHBz#^XbiQ@)8Mju{I(jSh|S7xWH#O=?_PRzjU6z?~4^%J)jxX;7_e|)$wJHfqk zQF45d8Mq1z@M4Lt82e>l;6qN);3eS2K&M|h+(fd1PRudsg+OkJM-^2!cvMky4`FLu zX)bRLd|+U3rMc)AyEJQA{PhuaP)uYbWJXM6g_f+C%t?sEj1ifuw1O&4Tau%O2u#n4 zKtn_qWlTxNRCJLApuXV^uq1n~+?qYHct^#I>cT=>UTDpZ7~^to!O?nX1G=a4B@((A z*Z3$fY6ox!%kP3V=$U&6Yn;7&?5v$auY#s!tASRIHZg#Sy67PWMb}gWL=$AL$!(-*JTynj&vr@6-CfM6|=!cW?hYCyP)fFRiV|#u6Ih4shAv;~9Cr;@6B} zJ-(+)!2bTozxW1UldmhHH)KJnvto*L;gM4?^-&%6Zb7A|t_gKDv2``yxQz0RmY!QS zhj0hjCUMTqpSsaez?a0K{!?^sFqlw$^6TH@d_F&%+eyF7Ypfj!kAO#I5 z{s_#R;#dUI5ppu>^qw}o55_LgKvpCfpurFWs6Iqun8c}}`OMMcwUBS+ZDbqYeclCn zh{=8FZauJ9(O7(dRg^KdZUSyQzN+%K;Aj%N%QDZb(%;dBm(f^vr2+8S+Q)tj8Hh58!c6pGQ=xDNpUp$-k;fd*K9PPHG9r9BN>M=>zKsbU*n=ZeNs z6Pq{qU}1=wG5@$D25(GmVT3w6T+^5?RL-!B49E#DLIPSUG|&JB{4zRfWFQzg3!An0 zlI~Q=Kid-%yv>BIwnObr%p_!_taT@423iek47#m+VS&zu6f3U*(BUIP8@wJ1%+`4zR$IPyH z>nk*l0F@P{wjP+>;hOulR9ES%OjrO83r(0oJWNVlS(z)VpfU=+D**fEJXr7kTqBTg z08tdKw4=37sND4Dt5h-{C^h2kUaq%O-M!a&@Ot(2A9ue0PrcWFX+8S3a`Gm#`8eD; z^b}UiTuo#N-xgbcdt3U&q;^#~MP z$Q2L z8&%mppHiW!)>mn_j_=p@PxG7m@#T%^(nhqq8C}{=t?uX65A$n>q2@9=7SPiMcaRyo zc25*sPP02=p`&Q&qJjl?xMU4vVCq6$fXWt7qH}=o$<2%m6d+$FkZH#O8}005S59+l z_YzAd!MS~VW>MkEjp_X|XA(?$PkzZ?T4t-ubiQqkm(Ag96pTxb~a+?q8277H6z|&l9)UOI&Nk%YG+geHZ6e$gNV+FWqg2_ z4Hg=leiI_RHk8G>;p0b4LS&>Sm9}BAWmHOzNQp5SF{!eO3>2n+YcOqM5G-bS9<4hB z)~CszvamTkjQ%th^D{aJ{t(!ZU?@@%FdgYeCAzypjZp7^mPNh-Ca4KHIjywMC~>tg zd@(G!F)ACH(V(b7W}*dJ=ZMriBDLTr0y5SkMKxt8!DUHLA$hk}_uqgdZWvp(Oxy0c5bMrIQLopG}@gjU8ES$N-cKKm*`YQR9lL?IE>| zgW5(+84Vpc3&^cuA(XR{5}5-?6+0qjGMGo+0~*ilPeI|BSX|N&fXOSVxP;&o4rFZ7 z?m{=bco^-SvYkC^3N7gQNdq@+#DOA$Tb9foL8Y*?zi$8M|IhY+{{Plr|1Xti|FQ7~ zmx2Fd@yGw#c=MlP+plb;EvdIE^^~OEve;9aa%4w|1j^gTEYaH<->@NgT^abDkp5Wa z`&=2gr4Nr<5(0Z3yK}jx=E{NFUH{b$xrj(;sJxVj8JUsl z@Pglqk|u!95jVv56~w|o!9%nw)z}|EY@h@#1GxM=Js{XzG==rq^L@MwZ?n0~t@bmx zeWX3Z6FGZe=Z8vw@N8Zr2Y%W~^OJO6Z2ULr+pE|>i3jIj+IV=Y{a~1enTMaGWBlI& zRwmbkgL)`#xOJy>cE>tnYy==aF*Lw~X-=bE0`eKNQ1tnS+@{6^4K zJ8=|u$z<=Ynj165rpfe#DLH0IqXo}{)$GD^%!L3%IQb= zL%^i2>r;CGn}Yt1)FzLT3~lNooBGg-A-rNqY*M8YN9h!Fc@#qNO;4e96}PGku4&O%;(f7;?zMnIg0~<6V+RwzSzJd1?(Th*Xg^zVQInX0>~KD{~u#Sx9KWT#n*`byKn@u;LC7M8&(%l}94hQrN+- zL^~KhDi~>ysX&JV^1+S<+(GwIg9R58{uOvdFp^pu&m40AyuN`W3qBttJbYT#TAnY*nG^vuy6Q*6haK71^!Vv)1hD{Ayli1TR%u5_8^f=*LKPCsgH;G}x%w})|z|@2) zDv{11(z|4&9~uCK!3rzGYXDbB2Rx`J0xpmNQ)M8k_i{j@lYun6=-x^f8UVlEUv5Pg zkPQIzpVt5ivsYseU`nz0A~PBik;}dp$PL(HRA6MK1hS6_lEX|>H3hONcT`~YDVUfG zp!b!%*?Z6CpT1pw_3ipsf7txyPtAv~Qd_6K_Bvhf`CA*o&Q4@uKh)U^w)eQ!UZAlD zE{fb+8Zm}%YXZai;FvKoX^Dd(%>RR}aRtvVO%j2OD^jp?Y0@9JFcI_@kbxM<#tAk? zC5s%|Wal?Zo2PTEMt5W&QoXbe{fLI)0PdcpRBO_LVoRk(QW@-V&1kcwO`{ zpgICWf7A=$CPHT#-a?0r*Hr$TkV+{0sBW!W(;aP~AhCx)jT9O|T@Can^01opinO)~ zsbN&C8x?CO6(+UKi}bWNRlztrqA>sVu3$`MHF^_)+#I640uy~hsFOPURIXOo+{b>p^AvQEB^8e&a!U<({{)hWzNbAt1KL zb-to4-lFr1Y;Bb;%$tDEr$UBc%E6ndsz``aiGto866>53V)MAjgr0#Jr4=3?Z?Zt4 zCn5+mXJA}u{&+})&@-qz&Tz%#&8X}^MIp2hQe#K%2L8t@t5UC?*g_~?(d=l^cu`~UmG5C41Z<-a6$ zUb*W?ZnX^2Ia3nz%7Q+=pbpO|LoG$Hq2L0;|OMF6I)Ds{O0)xZUp~;C^m@kMCG;PvQt`NUl?j zBYF-VhC{Nl?_2y51CV#_u^;@%O3x=$ApsMdi>Q zvR~*9!xRNeX#B!Te${#l4iEnr$bkO-o_CY~44>Z*4_vs_`HU}i-aPi_=gEQoTDroo zrTfD)zmxuHnC^2kf3}wXnI8$sfdS$EGB(g}?E0YTcKI@T3lGdrf0E|a#nt13%m8`@ z`fK}sK)D|q*y7ucbN%S;rHyAWOd~UJDK@aSN4pt@b)bH>&@+HZn$HaMCC63n_R{IZ zFYkZe(lxLNec*ITUg#w_o%j+1G#K!-qCsE)mj@)R`Qrml5Et!imziGPWIVRPbh$-K?U$~7nTz{?h7&Z3CSj%mVEhM2${ z8`TAcuCgw+iUf^W~0XkdSNV#;IO-vfb^A9PTWo7_dO zumw(K)Q9CkOWZ@8#*Gv~hi`u6C%+~@hmT315@(;{!B57hcWr?Yj0%pIxH(`X?TZ0K zU(gtJ4zLWh@WfO!Cwl`{@2jaUtCLX5U+$_02SAMA7L-0++^Lm$(Wu_PjRS4M0nDzC@E$e@4WJc4z~yGqxk+))d@23IR0e zS@SKZymQ*XqBFaXG%yzbYJM5KA#=CX{zXG{-3)+l_DG4iaC{HIN6Y`>Au1N0eBe{K43Nl zVG~LKXAQ^zBpIj$BrcGdeupDQ-|PR#-NB0m@c&a&I%{nGT#tO?hc|LFP+G_&OP&XUSdff1o(gbTLe6O zy{~-BU-1FoHi9BN7>Ztb$L{^;-Tp3g{MY#T|IF?G1vViZA}q5{h{jWE>q~9%RD%ds z0VT?Z=s!lr8t^4(0C;lj$Yi66q4I#nGoL^FWZLt^G$pa5MI;8?jMR}wUpoYn#FjHg zmU+@{a#zKz$h`|PcSr48HUkQTM+`6ep{sI_X+MQ8-`#kE#zto0t#9#bbMcWra|}JH zK|>$6BBkfm>^~l$k>2Ei#J1RplGg1O!A(=SL|}n~2V9 zk^OKNQR}OL2FPxr4+o7m`1V0$woonK*8u0(E9t^ZeGPC7HmJ3V3h?uOO#i_^19-bA zr$^=48Z-b}fhG2&4834nujwo7_1ZHMT=M>rkrbxlpSk7;sHts!NdhzwvH-9@twC$Vyx-+Gi;yC3VGgys(YvpeQ^N9@ku(X!X&p4)2wunxPB@Psiu zWeN$*A$X~kHlQb?gf|XWz0}}9%ydd&6dUbIE3I|;NiGRTduVnky|h=}dDy=9cKPL> zJ5Ro^oxRWPy@>Vhv(0@^VbvOLNyyj@0r|I|&HU!J^s{mGZLvvU^zbFg>4v|w;L5bj z(W-_kk%^YOxXd-St??$3pkpe>qzc4+kIu&FZJZLke~n{8V!AV>x;7%YJ}RA35?V*V zipni3Ga@&AJSrYj5*la7lc?cYR=YyLU&>vqEm?>z_To#c@!ndjx5jmP-o_$T0m*SC z*4@dj9Yy9=nPSr(%~{dr;KN$ok4&vZLki@^F`;^BN-+wizSb_|*{+rs-7kZ!U1O*=37EY#3MwTM*vMgfN=uGRTgzpI zkQ2Tb5zD%B*^l1X!7AohLM{cV3%RgHnoc zf+sd>=Sl{53Niqv00kKYGm7*jbq-Epq4|zFu>T2<${xU89OfC=W)Pg!Q3+SHiiT!q zDC6J~b}sG+CD7Yt4}t+2hg!uyN_L-59?$A)8T=5(6bM(n7skprgQP9Twj(>mRWEIFo(dfi%g?k0VQj468T_PqCs#4jXMf_ z&@_4&P=G-ApaBrRQIY|bHNabslva_}AvI7qO^EdP=Le;hAX@N7l+Fnq1!-YGtFe=n z+kCcg&Yi4S5UCI4z1bE{1X40ErFTym=rNOT+7&mZTIO_H?gMi$t)SE3=S~{}V=8I_ zadWH3987wOv&iA-5VNL}LVHZ@Et=RGK0O6`AA;RNGoLxuvL$;0BOX!(8xgrcSC#b@xH8V=2f!P0O+Id}0j~du%OXQZ!eOKWbQ8JU- zz+H*+(^12xBPN+8p>pITB|#i1vb9HH!7^&%{fE{SIFWHS;9BVZKAYC^EcCd4}y=Fw0I40 zqSW90l37GF?Vc`u>S?{gzQ=`=YyA`rteEK?#Y2g=iJ@eQfSD>IbLNzuvLV!V z_zKibtS2TCvsRLGMR;gu3#3BuYke0Mem>=oph0k=nwX4UWx42Dga}F50^g z!@ZcNKUhxphtXez2L`RTxz#If=D-6pXubV;asV6~1aNl{z~!+&m-NgFh|NXi?FX@e zD|BXme?Len!v=HJHUKlsWo)1qDy{ZCFnw$h=INhJ(jQa}`~)nz?9#fF8T?;y0Z8RH z_ZOJ~L~r{}Cq6S!>JQUs>1x2~G=L!WHB8^c|5M4pRc7F-WT1aG=^q5}%A)6h-jVwz4KcZ^1fe^mUutaUyo=&$U3^8GShbc8cso9tgR|%a+_Gg>NA#f?BB`Lu#>fJKgYe%6SHHoI z(^7eCMX%G!J6oT=Vg!7B_5p9)Z$2>9&VYYG&n~8axLLq9F=bCousic_QOuqDygbP7 zAsY%y52iqng0Sla^AVnSPZwdwci1JHE04+Q6W&POpZ4$zFhgUH4h?{WfUSmc`96*k zMDw9*@fF&jqDOy?9Q||r^xtP5{73uZ3llchNXS&ru~EjUL7f6`2VU)6Wq1uEPGIi7 zIn}#s3=1&Fxbidh9Qwlfy6)m3N{(Tu0~*MX#^?K?oZFDHYwGB(6IoL9e|Z*FR7dMw zv}39Ztx0`dIkTwucV+gP#y4+(4=0Q+;Y~RT1Y(%T&w%^vqufsn*h%M498DBmJuwyT zYrzjKJ^*wGQU~Qw1PmdlTgG7lK-JnkH@X*4qXuz>#^u@jWa|+k&X&ewUHKj;K+^1y zs&r3{>qPNX2e23x5S0^4`54ct5y}KM5*#AHmFLm&_!ph?VPz~Duw6!DLj}aiof)R( ztRG{wfpOp8K9kdxacxLwNz9NbbiVrM?gvrY&<3#o9#R2F9KlC~Y6XBM(JP1P5cTA^ z+rX-XR$~zTJ&SJ;3-R{=w#Nkk;_wMsdxU(m6;uY40Ia^IdoR7KZ(#Moxd#32fK>WX z^uCJU0$9xpru!wL;l33ho-k-W0pbhoU5cWM*+C#+qNtwq$fkgxx$56O(bN4f&sh(v>x_bpmBR zp{B}Hz|LO5%t8a8AsF*Lgft=n=%t}*r>^>`8{)ro1ThTiH2Oo(6O8+w1K*okJgp1q zZKn4eC?{iT#gtmnvQ?Qg4T`41ol&}zTJSmj84T`f?4|>#GeSD|LIdz#APa-)TP!G5 zj)2VK!yUlDQ$d4P4*O+j09@$<))2pibS2B~LPu(gXz94O*hsCNONgM(i#p+?*3Rmj zoPpN>5rx%j8fXAJ&c2ytS7HEYK$pK!?=4D*$fU+Qrf`ia9K&+N94+HImlCcOG&;3c z(`$#-qet_P->$s+zIp#ucKcqSv*npx3oYzr*6-JkURL&>XVxD?7LJ+vwlUhqmxdck z@26rHWWXJjZ$!t9>H_0B|Afvrt>@F0*mn05rL<5(j)}E*XB04mOsg#tlM}sB@Xs)X zcDS{cTsq8eKdPO)DIdPd?>V2VAhCo`sWjVl~tJ=XB7-WJr7tjffQRF1n- znvZYJ{QC2;o8t-;1LJOjwe+YA)^quo!Yn5lGLW(dvvx#IVKw2B=xX+$Wvt!`wim*S z%it!t%55T3cUR`w)@rP~9R!fH*mNa<2Q4wFA|1^bT>+WSHX}1m!u=vp;p_lomfX&0 z>5zp@qA?d@063uQqjH$H+`&S!vYeh>%gk+O=65p-`l@*am=2yJ5qCoD%L>3NT*fy2&9@3$AM76;0~jvU9eTtp7V*#w26t+$ts>hs91wLM1`{`W6spO zncAW|nAKW+nDy~CMG$^iVz@D-9F`cTHFgC7B2Z{jX8g_P!=K)s9D!v>i~q<-&E9G3 z=2g&;wn-T=CAXrkL8NyBqdTs$-WKY{l~%rm4WR{rPGt6&*p$W_mDmGQCID(}GDi@! zP+J(RPn6lk)X0&;RwOkG^!%qBvKey742VOyWm0a2@PHJNnGlBvNX?wk=m%F+VDcin zLj;j4KqZ;ghQfq=L+1fwH)xL*ov|_;P!cjQrgcpa?4%>A2$m)O>}_ZgFi!~aKE8Uu zbk;oco8INa;)C}KZ~wV?_A#{^m2`-+dcq3%j3jXQ4xXC~8g7q{$L^aix1$jluDnyTX>TS`pj z&GBVte&2+hTyzsuAEpcU>RVv%yc_R%B=*u9czJOjP)1huiJl?V15VU}zLmzgyK%1o1si~;{Tl8aX6~^Up)159>*p9y&|D^Tm9TsjkSW-K z6m-#wm2d?GpC<&W9Pw*%`vAbXYo{Q)qX`Js3wQf5zZ|XLE)0Y6zB#!8TY0~|t8>xb zRp8sZ;`OadLpk>MXa=}4!}P1W;P1bfr!Uc&eSiN|Om;9*Uu9Saq|rfg0P}RXv>B_R zZ~*gk-(Ayx@Pz~YMC|3-`>OSJK(pbMhA*>%!U05k2Laqc;Q-7$u=HTLjw%3b?okhX zNzA;Or+*rzGwlH`^8=?7Zy6d4)A;!L<^6>i=x^>X)5Co9wom-zOOE@QfeWQ{HBS!? z5rcoo)#kq6a6H)De`s^M$P7R%U6d%N&|?4(Pyd-g6$6yU?A6EIH#=QkW`3R)z%^sw zar#Ln4W9D>7j+P*;5|<11r{EszEVo^XBh+%(3pmob>9|jAQL=|dM|5E?yB6D`tb7! zOBzML+W49YwEzVu$z5XtT~{rMyG*9nFa)DHTOR}H2Bmcy#>9%futg@9CoM=1M+DZC zmTNmp2k^GBy{~LFc)_26-N~$d1*3%l8W``r>OFJ$6r+O{YyRRXtSs>Eqiz<)9yDZQ z(n3WpQ3QkK5YS1_B9^#MAOL7sKCqkyZfoIXXzTmf!Jkq4ZJ&FtFPs~4=k^*8q{l&k z>{p_~6M`!o1^N)260?t(?rYETTOJ2__|M_Pe-7>cDRTJd#K}LyeGc9{=2Yyw@waGm z``Ug{8a{v3=u3{R(KQe=yF=!X%!9u3;K#FSsWxE zeEf9d8PcCB@1n-DXl7T5$d)C!k9dGKxT^CmD4k7>cLB&qm48VaTGvLma7n-gK$qo5 ze;!d^xsO<|nNI^h?AH#U9qbXHL)iV>a3a7H2nt#LP=_HNFHHe7$pb}VOPSnJWe@a~ za~^fycxtRYR^`tH@qJnLRFOMXW>2(*6F8&rd-)Xr3J2jYFP>q##X0~D1C|2P)%PL2 zkgwp8N2OD&lc94&fev;P?BXM4?%dZrky90%iRAX2$cCQyWw!kQW<~fw3Q&Kol>6-W$r zu;786;D%KUs9Copo=GEU8M7+iyq@iugX=_S!^o~EskYh+g9cvuMQeJSLA!Q#M@lz8 z5e260bzN{>he~PhyvSZfhSEtsS zwz}exCbS3*fP0+*oVv=fy$)g$a{TvQ?R(713(vwM6M8~ZJ!k;FVu;SDJXxhXuE7w( zq_FH)kv=$?&4IYdhdh8+tanO~6g9)29D*HP?PM{WAQOz#rPj$h!dW8|g9cDL{kBlr zf!t}LMCIqu4*<%)CqIh?z1YHm9|P-+0T3aG2M`YZusXBGfd;VQ%VK)jomw(5Wsy02 zS7QHS!tlj}?u!Wx=IJ|9^9=rOZ`=;-eXW~V+AZzgZ=OA`96Zi!o`o0p*tzZS;(l`F zw6OgsyYVowd=}~)c&j+6G^cHe&!z5W z);q*Hn?PlmR+YtI}g zje(jkcL=o}B~Ur`u*n&<;5j0>8MzhN(@$>BKm$x52y1X5Z#tzShQzutxk+SjY8=|@qD7z zb_C)IgJW815Gu?;aK0pz?)H!8jR8An{CiLn;70 zMf%Yx^__7A{#cl8m>iy#8W}6<0%@5eJgxW2$e_ssMo#4ZWi&$+A z>13FcphrQf5*uB(K!r>5-qb8QB@mLH(o+JnM@;Z=PmRk%1cHum6z$9QP!bw|ie}*p zLf0K1MGqv=5KPBQW`=(UYn=gtiTRV2c)8<^7EM%8?_^ON2AP2;{H{nlp(GJ7z__n> za`0>2o{-%d2Sil~;}BYe6(qLf{7FY*^kO;}qjpW>#QSPS=bF(v;cgn26QC^(iy$Xd z0)x}&i=mxBBST0r6{2)ISkgrYvDK zoflZb(?-9*h^B~?&J&+D(Z*0V*j^#BHC?h|Dt029XSIiKiYHGpd-oHYXYBH+r*j-w zypIw9OQNR>&AEVu={-try~ymm&h5QVZoNuuz0B;tt3Ucv?a`mIN2ssA@0q{nTe#}*e3vnsak%=g&lp0luGh_)5p5*XOO8`1yjGtvL}+wuS5*JHo>MELjDWY?yx zU}C5}MRTaFXPZK6=8l}XBXLjZSUkqH97<9R92PBIb+8BgLUi+8bO%|t@A&U+NCvNc z1Lk@-ytf*p>IL)+?&{ z5^iI6ZDWg^Q;&Ewn`l;lYNBw}9*~g?_+MEy= zxLDp_p?>=F^m3@UI_L&QM)_)UKUm)PA0OD9eu-WB;Nyo(!g8vQ`nkB7^fMLw=Dy0; z3t)49`E2|omVS~M|Gk?Gsvi38ASk8&P3D5; zph9~JY>a6nY630rL+BPC1_fsw2}O4YjF%T=<1q+~@M=Q?nBZfc1r7xvS03(3)*oUP zbb?ygd=4u=s6JS7!&dI;zTh_AgE5Nqr*H8EgXWEeXDHR?w!h)_zXwc)UU~&YI%<{R z)4;=CM;h`85HukD1BS?UUq@EI3ax$xrwYhF;k`d|yMJbP|H$qBh@?J9pzx&tTglfE zw4cCKgXKCVKSgj=6e* zKnVN9x-jZHc&iC~ zO&IzSn}*W~HYXR-ob@Nj0VCxJ_rIy~K$ATJ&j-tCUcFaQ7jUYD9UKRN!YNkxs`w6H zg&W(^WKfHSu7el)(gRuYNEADiB#+Pwro?6PvUvb820jr~KF0%@C3ww|e1*k@&mZ?M zF#RJ8n#K9>s64cc#%N#rzN>P8rickc9L_O?y&$z04IJ=;``BL)pO1Fu0thlao1jj2@?&B_hOrGBjCxd;sWrFTX`Q?e&=6$iw-QPK5q3r zs+6Io0L@gwIv?XJ6c9wgi|bi_?FXCT;7`G$KZo%+{3G@<*2W`4{unS;IBoD$ppF+= zDf|S6G;M5C!8gNnmHtKCa5SM+U3^mu2N%?7a`QJM^J=7v?FUk?$VPP*?% zgOj@Sup)e2;GNXPrwz$rWe`D~DN|y?2r5^6)SS4b4PR4o*Hyt!rM_QJI{sml{QF@G z9{(_G`NtviKMWc1_{U-6uSZS4pCmpN+CLLHKLZs*t%vHcSOX9-O zxM&IiWIwC*mX)|6I{^VN8T}PQpbQ>8l|k|RtS-{Uii&sB0p|rSQ+5jifY$)62R3Mc z;DR}`jrwp@M57eKUPBu(vN})#XSmgP<{y~TJxjU=0yrOzWwIJ3$7=v@LhDV!P^}`o z=0Jki08I2J4PZq1DNsKgcEr#CdSn26aagaNk(}9|z&=`OW9;FSBUW<6i>_Q7%tOrj zbgmv6bY;`G6UuBzH+}u9fKENZ;I&>A*bb-16L|!R9EOFlvI&V%A zpN;4~x}*5*E%B!#iaR0`x_IH80>wq+jsxQEOf-Ylwfxd)u(D2Ym1!NgG?YN=k(+?a zjMxy_WQ$HFqcSqUP+lKKU6*o1sGC+2a+4d!ivG09>Jh@A!>({PTx?dlo3RRpgQUtq z8yF6q22`eKOB77uoEBD)M3pXfxaJBn!J*lOP^}%E?WEg_nbx8=meW}18L3gKwW%#` zlRM~&=GbzRDbCsxz!@cB&Vk=%3f6XwLr3^*be!^M7~nx;6<@5%#H*e-TsI|>%K>m&m zSta8o1D91&QK8wdcE+&&r$SXKRPjb@o+#SHiWVkg^rnqW8m(a_h*SrBHLeMqL?H#FVN@vi~9(y=yMroIaMR9>WoVKz_jngkRQ5Gh~p<6nM zQ$rHQeV~B^S{q~lo2jE}fbd2LZWxJja$KT=2AGta z0Lq0;A5mslePm`vNd(Z}44CPp(mtWE!6}4HJ%R+IBEyJCKP1oqux0Tl^xlZt9n#Qz z4+f@lwL6NR-~sd}TAU}*EB%CG1;TEBt}N(%iMwi>CD{lq9G zZV@6hUfXfAOQ~Ja8IwyuI2GQ2DV}DU^Od6q+}ygr9tI}J5U7Z4F`*?0WE0K50ZOBC zqul281kRF% zZIjt8xH)l71rt5cd2G$?pxM9yPSM{arG@y#Mc;%S!-g?p*m{u8L^~mY7RJ{DsZt0{heF&<{rH{#45E zr)|MHusw(A0=WF4elY+v0R`p{1V9&nJEgU9I?4FiLl%wTi>;Z27B$bWv2xhP@imjLv0 z$paM90E&8{GzQ%Qh*qP>%#HoMIek|XnI>~1y4a8^=*9)949o9B3(zP@AZ|903Q)82 zD(@`V=kT84tt+5vN^VgZT9&b0v9B%h*5%&nj5X1JBvCGAOspX+h+ra*%BjQeaSvRq z*xnxi356rhhV5_t0gbT?jtGDtfpdX0UE;}%?!|ZZ_6sD5Aqh}5imh;9^D8@;o~nImmtUmf2!WHE;!4)LWXcPdHj%hM;~_<;-sQa~hC zVAsJfKISz5Zv{kUA=**Su<{3XhTm{!_>?MoNci%y=mu;&2z#g^t1z5+X3t#3T^-vN z5Gi0}#bj1Md#^m808tQaLx z$yTf+kODFJenWr74$#8axT7rLL+Mrbm=`+Y*UxqgfU&8 zT0txUiK+0)i_q#TmZwj?purbHVyc590FDe_qTC7Z(BUbGbVUYV;Wy7UgJ5_GXmO?X|&^>onA;ot06u zB4<_Ls>=Nxskb$1O8xCk?cZEe{B}t9*);L#l=;^~>c71v{=cQb5lDi^-rtAVnaekr0+`T&&G*6VtPo50#NUmGBB><##G$(Y3g@(Ex*2P{QK*= zzxiDAZ$6U#n~$Y``-S3HpUeKuXOjQ%6Y>A`3;C~ZYkzfH_cwP8e|r}X{omg;{C?8< z>9qZ$apI#e%K(Fd{f}NYKFy!mbT`g{tN^$I zmk?A3no^tQ+@2x7j~5-AEc@)Kt#;&SocLBChVNMm>tuFC$5oV6N*~B;eR-7|b(V1r zolsf>N;3@?5H^V@Z&d(ruXjofw9E(tc2HqswJwe?jb&n%KvHG%J3<)?n*zcfBblSG z0qn7YGus041R8+K)Pi$+Ld1P7erN!gzyV4Dlm!|9%~zPRP z2#AkI)gOZaH*q9UhFZj~nr>m5E5#p<1Y4WByo0VxBRrY}FoR+fC_WpBAhmsj1TRjRlK0bq&EE8T@DeGnR8 zOwLRweUl32&W!cbVa-2X6aLe+nUC&BuT7}$icDzXoz_yop5hb&l)ER>p%N`<0F^U| z47Ak3$t|4L9wt30Pq5?-mduW@NNK-2slGFzLN;JjtXGqalS{MdI+G~V(E=68!}3l= za=ujA9nF&dh{i$dD15*{YbXIozs?s|(lK+m;L0}H+H$0|lAK>nFZ2@a#dxC=tF?W} z66uL*2%pyKH#j+40Gs1_YGEbPT6ASfx`c;z zt}7q1wh4eQt)Z+df$ptVxV@TO*+Y>+Xnup4U2^7|WTIpWrL|u4M8MZhD~wL5k{Fv& z-xw0!ol*fWWseo@iE^JKRM2=55|T5}DJoL)#Oj16rL_gk?zq*LA^p$*;5a2fz;s5d z$k$>ke`iKLDmCDRQ`#9F6Ebo!TO#MmmW)Ag?%h(m)97biiKL!EJvgPN0MAKTxfII3 z03bqQ*ukajc-JyO?)U{d`-IY>aRl7a0`kGOK-?Kj;fZyIQo#Hpf6N1j%rp*I{J)xx z7+owbC!-?GxKuAS0(R?%c@88cO#c#tN35p>8rb*klL{No0w_a3%wq_zqY#bDdZoo< zL+Zc{G3`@1gUA3t01RY+nvTH`HO`+D?BgGP!uF{(h2~&5*j;EXJ$V;h-f>jg-qw74ZM(F8p53^gSiVP>ckJm^V|ZT9 z)a=F0(DI}B)(a#AqU+Cc2T%g9LOpnC4yoB)M|Inj?Gd?EPXl<9RS-^aKnS$Y&{Ay6 zF2%a1VMKivPr3OMrjBa&j+`zUxdu+XLn_}jvHPP*5?^X>ie0y5^sk3>|Mqj~zx`DF z57*>hj2b^5)_rtK^~sR#me7el6x78Rci(2V-b7cP$JSrv4!_SH{19D#A6$70?k7Ea zK4FG)x?)RjILjyI%)Wc}zPEAThBJC>)n3>GW0Y>6v%O~lgyH4@+IvPdU%)c}!XUQz zID*4diyc^W<;)zOoDVYGmr;R%S?H&0Orn2{`6(^1;!1R3{u$9CK9qtf2rUzU{3rwS zK*giwRO0E#e8|@KG~q6MZhVx`3zzVMid(c~c9GdN=XufyfFWY4%nJY_Hf4^24kY)_ z!D(iz0t$p-?n@UqTAN=b4*$e$!g_%X_c^MyQ5_Xng#+Zfz}C0Ejjw$hUwQd5jchzJSMpipj+$T@>u;mOfvVu*u}CL z7Xah|oU>2#seNs7SD)qkUm5hp0t>VL9k=@jJebvQ40&{oJ;Vf$Ej6r1SO9Bc+W>dM zC2uR88q-(|Z#rxHn%LauD*6kB8`uCGI>rnk5h?=GTj;~$BLTI06gsfr%Ws1$^w^X? z$1rWq9jd~sQshBB*dniJqr3X#fi}9Q@U813FjnoEQwM+oskk*B|B^n07X>QCi4b!I zF>7FaztrbWL5YF8$&Scu`JshpKEe(Ju@ZZOZk-&AB5y1MmXz^~2eH z?CcdNo}hWTL=Ur-i^`* z5~Ts9Q(!}3t-+7_{2@ks&+?bFIO#Zxd0leN43x3%+mVuSsyBpjVDZg`$Q6fnx|B zV*z$DzQPQ>#n#Fh$|!tGh!(te&%cC}GUoSW!LFETi>O%%)tI(bMoihey5tRc=(8E- zh9q!P;=3X7d@gWa6H;U9;1@H_k0)(oy2z)~&cC^#`P*BX-;9{P5IR1cAwQZh{(emV zyAjPtqnaV9>-wbSw>K1j_lfBDw={QWuuSw%sacG0pO0BS9?}m>u+pXP2wkIcW>O7u zVC0sF{&>vx`!Ukff4Zx~UxdH(Gokwvf$MjZ*56H# zzaJw$pSFKKW&3#4bZyEyB*U(X9#VS8^xUK=G;NNEY)L5?mF}X_TR~h+?W-fyuJYBi zT*DBV!^0S!Glp7#Sfa-h!2pFL4X3Nbniw~*hG5NISVl(}8UO$V;ybzL04+sD8Z^MY zfd)X#OvQFk6>Q4x>T_t)I6!Tmt%l;feS7WDzw(T3pE;{Lwj3G~$|`rt7%b}i1+_Z{ z3=e*UwLxK`-~z(K;0eP8Eit%YaKKVhW#hmFf`wYtuN+G*SN+~cy2wmxRdA|#+MI+^Sl1$ zrl+=c@u*@_U)HkaDI)ZR*!J<1=?f8gQ|1^_xzW#hTV}l_w%nGOf!drJ^RDQf;W;Cd> zifL?Vk&YdaIIfNBz8F(qpU~W#(%qiX-w_yw0K<`5CV1c@gR=lig$WitzEy)auXe`e zWJqNVnW&hR70yW8iF{!MRQXq7+2%+li0SJIvcPHOojaL_f`6e`gkq)YCUOg2s z(E+2|r>A^+cfjBcTG#{;%o3r3B~&1zWh&DQHDwGYBnyKzuWUlMVm9=cx;13gl7%W33M?h(CN>rpm=hT=yxC!XsmACuhn8!Oq zYVoKL?_gq9?3>GTV3HY?M=63(lrkkI57K}Q0_sUkbSwB3STd+OAktMliRg zm3IWHI|AjT#-#Ugo?_?6mI~y=Yu>R%IpafOvHgicr=R#B!P;T0qAZ^coS7mtmF>oEuIJt z0#bt$U?p75w6=i88ju+18MPAv01rfjAp;ak@&}T;-sO!QlYo-@y9y$wawse@u_4fw}zv6926udltH4&X!u#1gcW1fU49XZRnba{(Rc;`HcM^@96&Sx(eHxzx!PF z+Z)PXeA6Z+sqO_@=lPv?neF$XrDvg~=fTAy~}%%5WV1SGyC?V=SJPx8fweF;J0Pcg_*@b0E)%j~P&m3glT zoFgj#O^JI%!)n>4ik;JjmvoU8nQva^pV!CN?1dd?amR%qduAIfDb!Pd&=2lD1~01p z$W=d61?PDzo-s6`x&J%Y1E!}r9LLM5J)e( zKd?LBv%BB3d+_%B7~cJZ3z(PAQ;Z$d!k50)x3F>J$MDX#C?3K%f*S(HWorJVr;ADP zU10qiZsS}3%GbUnctYMoFx%?);V{7h7zjmKXdU=Yb#jlul797_r}vKA{*m4J5!F%n z36Enh^A3Ak1vPwUXzf);wpC%?`Hgirg9fhFgUHG=M`e4$k(9sz7@dT92 zpsf$ThQS`X@rZ6bVlc#49vV}}n&`g0{0OukFoM*$F2szsSgoski<8X`2&6J+)zK)Vc682-A8NyhZ?90ZDie+-St-wz4?tXEnl5JWsE54lGs@^ zM3?AU)H0lyi$@42XuwlSBGtVOGZp>`=E6yT0ncX}bh#s4;n0h#<~kaD(GtMl0RVBI@A~TZH)))>f6-89}yPEM+;jHoRjKMPsPIW-Zn%QiDb_ZT`;Fs z$o#gec8GEbs8GHzt_i{Ulv#S|fw>Fs%mzMwz6r}#Jam+g-1Sos7kr(^Xi9;LQW{v8 zbX3R8xm$|Rr<1Oa$88@^IzAD&e>;IM?51CRs{FgpmH&8C^V?zF=hGyXKG$a)AM@*W z6TY?&EBPk@#(EV~LpE%Rh!5-7K|_?tnt;h3<$5<~Y#$Bju1%tDl@$QAWr$5^xM7)R zMCK8jqEaF*vEV<3$JOkx+;>~%yRBfyjmZgPazq^&RfEjyyEbDRQ~SkaVoZaopP1NQ z95u#=bRmHwH)@D}I_3CyjQstu>32hV!0ToVA=GgqlnfCrB;shf5t2z5MCDWonf*czI6ft23Q5J0p=cA3x^Pa1}v2_JNg_Tc>8z>tQEW#+qTNCpT}gMP<22^m!SdF z?vyE5(6fCF045~Gn}7NmAZqkQ4K%L-ct<*Fos6^+?L(v=yme3$5g0)ADy-?&0QR$R zYT!3|oRN$pRrUJ!7~gcE<0j+&~=Ok~!`wT_YO$uF`Q^O57Bi zZc9vKDssl)kYFNo1uVX(E0Xmjitbp!70Ek7Ik0!&b+Lv3t|?oBWg`bZYYFx#)DLU? z6-cxxLm2OyA+cLxj2hiVD%3VoIjJc)E_aMdZCKDECkk-nwAul1q(I{U)lp=iC1#(_ zov;S0p7f$K+B7hL{YOxUt8;`f@7kHT4Mr4XRc$`G!8xO}pc@OT`arT)oZC#+mV)^< zld8edt{^=lQt*68t=&U1oRI=?$*Zz?EdDr!Q%Qc#8ZKh8gs_90l`84pa`X6T=iQr?XJ5`99cR}!GOO#Em5s>U5>si} zlOWt@b>5hi^v-B)QZuEpdht-(eHh1~1o&{UCk!ELphGwa;Qzwm0>iX3n1luZO;u!Y z5WWPS{4iYa#f~pob+9R;i&JBdj%l8MxM9&jml*=V(<(b(DWGyF&3>aJq9yzaa9|b0 zlvpoRkvIh?NmQG8G)~UsjT^iPY~T4$iBLgeV}}&HMeVM@Gy?!A6r+XFlK2r6S0@C( zjM9w1QHKr(6C*R=Lgzu+SZHvA=!*BP*6y2->hyNT6V2g&;x>nLgv#lsVmUJ#7h361 zXSII%)LLpA)0Jdz8~u0oSRM*Q=|rDe$sPu8s;qRNa@ckkrXz-{AD!nn_F?+h_>x** z+7c|{8UyaFf@IVrZF2ej$zpPL-sF!slcnYRFFmD}kn)k)La?(~*xa|q>neASU|R}T zUhOS8b3K1^Kis_Fu*~9$AY$cWuMh+%YFR=6Kr_<=g#GU2cxG z{jcxcRz-x~^b`43SAPE%N}^yY8+WAba4g zABX23TB1u|Oxy2>-CA$WnT0C=DVH5bcE=Q1QTgT&^P*~4*KOk48@}cO(G3cot@Z$o z@ut+iA+?L077P!V0Cb7%k7itV6keGli#xB9sVe-lnox&GZdWN7F?Q{J%Mjld9PAJ418jf4fUM8_8BFbwHWlMz3H)H4TMiai z5mV-?uW)&|Sm9r|Vt)FV{~Jrp2ZQxRa$xX>Un-40U6k)Ny9y{@Ebo8X-}kG{1`r-z zAPoj<^aS(j<(FttRGZ=K06&j6x!}(%@w6Y_c8}%#Hov^@D~%6PKYW!z3jkI$1P{nU ze1RHYXI30Us|QaD|D0S!lW`}xiYD`QX7Ei71jfbVrzi#fqW>mZ{ekHEAV*>Jl!v7B zCu63Y0>^DJ_3^j`DHjbl2bVv(ewEyUBDi2eH&6+Z68o=HV6UvD6HM@)#piVQ1qSp0 z!tR|X$g+!_xgmuI1;b!RYS=l{&jA!;ojr@dw6pMp!4@AyylwdJU!n#ZsnGE5x3Qx? zV*T&mKws<+!Gj;eM}G+Ie2+g9+gw}op|$YRfV?!_QgIv#GmY*q4dLE-V%9=LT47hfFT7vruNC* z1>_?=%|{G$IO3%FQ&$n!$onpA?$hVSI4*nVy5x~Mx-aLprR&%4;i{kn-9LK(0f49gUwnpE zgc7LykL`Tl0xUP+{qLyINEPX6lj~T=LY3+B2h#Y4BDbrp9P6ql+VYVqx2K42;FswV zTY6Z$Qaix@=u+EeP%OaYx)~LeIxuCk#O) zU7WUNOz{&mg0dvyQfZ}uon7ZN1xgu3rI@v5o9=UaK12A&h_OJX8Dz`_X>Fc zkYUj$WuHAKO4uBux8&HE*)nIh@h~DERXU_w54q)6&@+e><5JQs3DpCXH6#>`!1!3L^QC57h4aYI<=tJ&jA3RhKZ zufUHaXIe1lc^!LFhr)2`n4n`4be#>z9VNP z&Z5FoGotY~yr2#=@o_>vsY7!zZ&i#Z(+Q6>54ym996#EV3sk-rXzYYLN9w>F$^k$H zg%Rjd1FX}C{5I|ZS`FkhG=M(ZGp4unpaX$KRN5ztyO!*_wYcT)J)xUNRBhXq>l%V3 zwL57J77QG|xyO{QkPwq>-=AOQ#@ z&_H0W5FTeVgD?OY&NwnnIh8`Musv3C<(33GKLV3_cLHM%ooyJ|EG9Qcv;Y(euL1n| zrEqm4THp5PmmTq@!Jn5oqXLV6Tu%+DtheN*8xq|$q3ZJ)*@(t0buyN43iv`F%7a0{ zU)%{V!b-bh&3AP1nkm_^=jPq8?o?KYcmu5mlO}dV;~CQd$Br+5feF25MD4sQCx?*K z#QbV;tDHD$L>!TfFI(k`4L09^t-_a{b%cv%^rg{pl`E!j#-#Qb{LpeLqxKZEOj+s5 z3C+lilZLoL)gpVWqAzLuvju)A9gYc)-b`Ec~86^Q|>4ZoNevuZ1251AYcu+qP zsVzn8%LXPsEH^40K6@k`sx`}-oAdY1=I@^^J$*ELa+F$KjV<-E8{5V0gUsqqyt~O% z=gr}~!i8>KYP664ht~_3QK`|XwlV}?)0VbzDDy%ho`v&gT0@RXwPJ&f^hIoe80bM~)dbA?gT4i!3UnaLl#HBK*yIL}4vc>jqtH0EvsA+_{=sRM|^$DFo?bf0r8E+o5N2Enb znPp00npT))MoNRC0E=H~#_=JfBv}zIbYRHB1LpL@FN6YSizkGC5y2**0R%>e#tG|Q zQ0EJ!dK<9!(9K0#sgYROj?Ax6nX1Ya78;>T(WizQ2lN?-rwz2&;WsC8^~2LdcTIr~ za9>>SPdXD-y*Dwgu}M(9Owe*Oi22PTTv+xY)TyI+fwJao-v2({>H8Ye!OJYUDf=HPNap7 z0(=)AjTk-|){9Iya4pK+Rdb}P3$(@d0?gS`cMZV+IZ~L|dnMQL{S1XZ@G4kPiHdfZ z$U5kvK%MZ#tC{_~x(L2oDBbYa&FZ<9J~XEd&gsGnWM&g~An@tznLQ6^ak(8we%GGe zHOC=ofSxxfp^k%EGSTKbH;@tndee^>(t~f%Vg)PyYG2 zF=l`j;`jHwF@{$fe0bohTFcqT_7A3ZC=HHpzd}LSFI+MG75-)W74*hs+wSF5eE}@G z6dTEl!I~E^$S7a-1cUh#!$G6JzyH}_eTC|uy*xYg7wv=S^Hqt#AfP@SDzV|;fQ^Tmf6A=94sL%N-u;eUdF84d&DhezO3#?uJ8h1FD1s(CoUnkQ z^vyqU!A8vYMj=@U`pOgU;tMowg9p#7zr%Xo*?nnScx+0~cM_CwHt$U5Jc3&Ri9c>zKwv+@-@MWOBQnBE%-h7i>4t$xMV zLN#EF!T)?6-u+|z=&xvm^{ha0eCJ*HifEv$0HtH+n7r{JIqOd`n(O0-GT*9_!yI!4 zhmUUo6t5j+sIBnVX6za4ddIc?DFbSu3Pg4T9UXkfR%F`}+a(kGpugKv$5i2wIdP(m zVcm|j?wLA%BnzX@^;nmJ#|8ra*pN6fBo9qE1?16@{20rAOXZ=x{oK9y2CIEz?o+^#0rw{`?0tk(PjfbFNA~eind;kxv-A7ZhwR~(T?!$$zimz#toBGT)`oAot zV`XAf5L_0Qdiun=HnwU?Z=!z!!()MvBQYZwM6#RxSpFfg{1bR68mFk-kMqsbsjj&d$tnTJKO5`IywjN zrw$OvNnq)jvyKqLAsQsC$eR{-iR>mC=&-p^2j|q> zoH@0MF*nlvl1Oj%-+Mh%VhJ%;cwKG-3SSR8OQYsHG&Q!*XV;SIWsHwHC0f^$yGzV zH%*mMAdR_M=qQdGV|P(5sql>(qA*R3n^RLHN~Rk+c1{;)3CIlo`>>k3A)@gZQUvhx zF+)t`$b&LBZb>58MisXm*$q#5-&5LG`{%^~fIxr0u7-$eApONHKFjQULsieFthL+9 z*fpW=mc%YF@tSHXSu7^i)<7O-=1O(8|(PuTC%s3SvyLu9~X4+J# z>#MHX)4+q2B#xMX2#TyB3D)h7s0c7b1HKeG$JBNKcDHt)jt&B);zlDFUlrWpiYCZNy0rYfSZ1GL$=n1W79700F2rXfSGmX29n(r%(Piq2`N=9l7>z!E#J8SiqO>|ac zhs!*obH$8w0xf7JcN9asfv>poE78AeVF+K=mzl?RGPbx%uoVdrn$e^2$^#XpvooY8 zNO5r*J9s*%CTNMyVWPsGXeCx&q9PR?6+`&|;PFa3r*yEW4p3NWlnNUtzs185ObD&F zxMKveO_MhEj&1m^+s7XR6`y z0MooKnAF0;YVxG3Y-tWb0wu*c;)Q5)v9`6h`t<4H zx9^vpK5U#FrPf!OX45;{O!U@^JBP_0K4(_E<&G^;L8g4#;2x5i@K4a%1Lzr;R+?od z7YtzjRE0@Z-S{<5c3efGuxw0j6zHr*nj?K^vTzJbv`VYj8Ojm9q|qHiXBmcgVvTv~&RQsLaax+=Iu#rB!#c1Is?@ zN}j?p*V+j!90un1 zgUd(J^^?Tbd1URFTgD)=q>+s617fxu#7%ff$`g$Ljq<)iqnsSV5; z*|vfzi)>kiyR2kt*zveadzkpu?2;kW!}{NX1z~Q_jmvvxpG@yM3y=p}+R!SISP$@X zDxVOImbZ{??Sm=%8|%wHticw)KUnwI)tFWXL*&3OG$8kb&(o(;_80AN-Sk)ZJgoDA zH2O0Oem~fHVeI)J)!J{{QkSP871#PQ1N-}5`0p=zlrPbu7qj){{vIFmzp}r-;`F0IIf5L; zAf0@X?)@p?J9t9iZn|nTyYll~eawR+%%DE`(j$Zr1+E!73ipT+4&dquST3RMZ(@f(#`nLY8Yk$-oYZq7GA4Fq_3>qt++l3xt=@%045kQx zg7$;huC?+IULbGxr5%`B;||!&yfsPQzq)JO3t2DAP#s5|uh zlW})-*pk$RIsyl1D)}i>WXc#uXRrpM9m6y*|J(`@-86(Yq@G1Gb;Q)3YQkIUC|X@l z(Cwv3oho97y3C0-eWXnS#(zfS?pboDW`4&H4$r9$eF(S)w9sV>oaMP8djbuhj&G}? zTblSTU^UPH@VndL@Il$g!V9z!^V5In#D*aoPigT0HVjh^0Gt&q0-A*b1bOiSNrOv5 zc3zQOQ>NDy$yHTy1sGy5$NDtMWp!{t7w+Qc+E7=;b+o~GE!Tm4ONW;@0`vW<1+~q& z9aus1kuH(IreF~a85q69BrdvX6_u5{OG2I3iOS)*+kX+%Zk*F>~@iTV$*)6n2 zppTZSoe74rK&#BshG0~HGYk(S0TauIJ7;06=j3GRxh?vG-v!{CA z(yoLmPuX)~FOs-fPE=)={Mb?kUwV#e_J{{BGzYj^>6Ncy%nH@E! z;h8~YFJFD7=SFma-;SF;o+Pddowp?PsD{I0Uhi*eJhNi5Fs_bG>Ec3Da@qi-3J`+p z3U3`teWrP6NGyuzGD@$<_3 z=PQ`HHr%0W2fo&svvNS!Pd)W}WCkZV80!xL3tuL-zE1CcN7e2LsrIlwds`8{Eei}G zTdWI7>^X^}FkwlJ>f^(j*q9+TO%}xNSv9w4hCGX|fDC~Hf+e+S&7rG!pXWwY4!zYw zrnc|Ot+{inf!a1ZyNgaLu6@YO^|3#>9aMAh8eqP!0g|hzvVpdT7l_F0f<~$hEuxJc z5)?NaOAaqONWonK-xs>~+_QW1?6w0MfGet8QA@C33YFmqP}o_yy{`daLiU8wDvOXI zG=SVh36uo3*jQD=0S*HNnDw?OVuS#!N1y>rewch%6*NFB3oj6rtvPdZa(5cscJvfk zqD`?eASe7f3S(y=P+K$v(iRTxgOrKQ@*02$6kM@ce{L~cTZ^@};&VHp<~o=*M53%_ z6EaUwOff5b%Kkv#f zkcozYgNZ67bH*;{)lRg&;LkOvc*PdX zLja&$X+q-~lG}!4_PbKY9jRkd>z9%-Jzdnf^Ga(%YzWS1{1P1Ch?v2ZF}kxxIs?y> zo=yO1Z)Q?vCTXHCG=Sd0YHh6A8nCm4U~##)bcWLh8LWxS!ErS;t#yI{s<60#(6Rf% zE-r3%vnccx>l|oRum!SAssZ1Q%7JMH-Kc(*3(tF6jVddW78z}N{4OrWB=UAPj+X>3 zF4X7_Nemwki)Zu>TQD83FGTC};c6#PXrN6NH2pEP3y)E?Ys%)Vd zW@labHb_Cx0C10tLvhK88R$rzU7{vtWI8;gI*ZoovieZbl@4Ufp<**u?^@aPwAy-m zN;xjl3T65UfnsP(aA$00OemXH>XbG&$;Ca{s;|`YmRs?~_1fOq!h@$9FW>Ba{dM>0 zlgiP4xVva86vSDKK zpavzhzB+u>7{`V7+^8OCwg|p?phNJw%=?9ezA5uupCLaR*Z+Q4^YOUpqjB>MF?C1o zy(y-yO*?K$munX>exk*vktU{n5rxMxZAE+Qrni)E}7YL;!=1;`Dyj4 zdACm*#lU(+(ZOE)%7uTC_r*bAV2|P3b~F7pU*0KnvBJNMDPJNr`?UuAY&}?nUs-y7 z-e&MYM)^W!U^oUjr|-Y#QAk(rraoZwa)tl1Zs4n%z{UQ4P>+D;0WzcCW5Ap5dFblJ z{vM@Z|DF9kxS|6H(nSeFKQ?fYtG;|TE@?j(1SGx=Y*6&ZpI;L22z_{d`5;H}%LE17 zZm~s?t8!i9yCcUcF+Xlh!IMVhcCj;-a&yu^OYCV#={7GWqig2mHf$uo#$(pRg3!JA zG_dhDdHkpR**|+b_ov9DfQ-XmXNYw$5D-`fR{^rbo*PAA@P9vG7G5!(*C@K;J^di} zqo)E4obDS`cR3bb`Zm4`AN_@1dmlddF|hRwxILcbH(=?y01Rz|igOIrLDo*ubPErX z3n0kO3*=;6Z5{<6Z|LC9{*CY1%^!nXe+;bu$Zq{1eDKdm z0?;e(oeQs!kp+3ihLO5oD@K&>8#2dm^OKoVTlUnFIf38CyYOPl-I%ZzEb)~YM^WOg z;&XY-5S4rCa&}%BUe*Mc48dh{7>>Jbg>RWiAG)g#kt$Y3wiMAFMf^aOJke$Eq3R2H zWpm-arGRRVC+6IlC4Y(pu(k3C)nEf(lM3_Ct=zmG`{W96k!547rwPuh*cR9Z2tOFO22)rQ z5={f5aYGdE#kMYh;o6?01t%T3@nW5gG7W`-)<)dxp( z?1V0GOJut%ag3=vlUm=9oVqTwem-rvDZ=1H-2e)6#`c?W%dc*!|L&IRH+MC6#7^|n zE8Us9Di8cT@KnQmKV!gbmR7*VV=oGE3NWO`b+KV}5RUv$XQRB}Kr0KG+JNm-?w-~7TISHABe}|ycKx$Q?A$$e z;bC9_4e?KWi_e$^^#0zXX3u?{N8y#1(Y4p?;!{xhg;YaEw>&)moALS@z?57WXaMA7Ea@GDhJgmcSxJ`yL3q=g!Hc_U zh<1p~l5gR}UEA?AcbtU<14hbz($X9%15GZs`Q`Q?_SAAfQ0S1}6UJl@7lz#I=6ASe zFJb`5Mrv$6*nwaqMj4TTj#_*%qYu@>*ot~FgkVJrSFkHTkKQqfnSss0$WketjERNG@9+rVIB@#BHnE^YB8O`fO$ zrOIe>bpnwY!UC8Imm}p~85*Fri8}!D4?{BBsDcEYMu;q?l_or#BM>oCpv}025C$Zp zcSjLUF#9rEcU%g4356#;jbbUdVw852o!Ru1pNgcSrCDt5;SQQqnukQ%Yva=2-JTwk zoAp%4m#X?Rb$@2oo2ps-X-s?Q)q=tqRXHZ~6uckmK*XBPbFDeVYQxPooz9YhAdEV= zEfBtlJ(xiSuPs#2dy_Ip2q;gZAK{N0foq9Bt@R}l0SPu&x#lWdK(@@RE7$TA=c!B! zz#oj2BQndVn0LZVN%hk*J%(nH+9WrSq=yZp3b9HvUYk!gmtn}6RFgNS6jL&zLT3}o zbR(1Ep$XxXR3*`wRJZ~$K`LF0bb6)T)Aqe*Yp=fDeD}lF`|q~if3xuTY5CwVw7A4; zfNX*5baR{gp*cj8n^dmpDa<(&b(CKqqybt#%Dkj{mj>0yROlbg zmPjwep#ygtD}&DgWJRo8f{qus+$@kdfPtc{cc1~3W=d|bDGk& z)|leXxN00V5vUB4Tc>abPys#*J?-TWK}^aUuUot+70|KvpbAkCF7L`TxmqvL*)e$2 zeGPz*EjS5lzDSS!08Vm~Dsn_>LM55f3Nja>%pn=tB#fS66^YNr&cQiboK;hR_XqVJ z+=%>oZxp2gpdkqjHk<+oE*fsl)sK$4&z`j(J<9DNT-zm6C4t3rTWF9Vdtd|hiyK#4 zKN**dpf$q5n8HasBu+2-C5kJ%nZ?aeZPA&in3$y25$4;%Jy9xCQG0_zD|z9>fpICa%HNcQdPxL!A?AYDr1s{!`Nj+PXkTU@eSj;mj%1*)=jU&zp1DCU#~s zL<)$8X;2qT(HU!6M&*D@Gx+jqcV@;Mxh?nHl)A489XCXdAvpwa5O->sYgS|{-&F>$ zi#$Uze4z*nEg8A1s%DzTaF|3nv9@a^uR2-%q%9FtyXz;$y0evnUjqC0E@Hm@X!Qr`rT5=75Dy?o{kpVb|9PnOOAIc1!TKczSNr>aC6qiUPVRRj z@S)^EBiJB8;Y%;_&%>ohsNY?1RXlu=)&9`p#nz7WvGrkN8j(bavpi|Zp&Y=8U2<+u zkNGCdcY#^bAph)H^G8k~-Z9PBVe&q8b)Ez^-iLO-iyr(Tb@V5g1SVm3wxyJT8j)Kg z%RKT00szDtGY|TF2yP=7ohZY?9RM^>lzG`O!J|7CU{Jop^##5B-n;U(WBz$~_j_23 zyen@p(A(Qz`c~e1d#|yKG=rd3I&roi`*^V98)qB+xWH&WgVEf-_70AJ_tI;!`Pf{0 zV4r(NuYT=XeoHN(arRsP+V{-bckIp|+1)>RH@@|(eeLSv4)Dma@QUib26&V&EaMx> z&MdhzYYvn!h=D^edAQ!YX=mfECa&l39cKfp-*IDnOb-pvP=-0G8;E zF}m$2oKlth`oyk2eWcHwnMyD+J@YKQL+OEI_DfssiKY0^UVCaTpmp_(*8tT=>eL}$ z4_r7=qLC`T4T=$X_E00L_%3jtp#4AtAoz=}R!|xNBt`!>q6kQ5BAo5WA7Yp@#5Vx9 zk#URI-ve{0iK5v6JM8MTBQK=NBgXhm8I0quPsXg*W?a`r$S!(r$Qc-8KAUm;(=F|9 z?qHj48c}&Ip{6adWJ~r){Fqv?r+d}}%-l^A*F<-$o-bC42#oBs-an!B%@EOPA`bNA zO(}&OIp$*_bcL%dbQZ<@n!F-$7X*&XBoQ0d_=nZZlsRaMHB`a!9i#vEGvo~g4SWq; z4=Puh2-b{2WSO#38aBwxU2Wi+l>SUeA?Y+_&)f1_laBnjIRTsd7@Rx`W=!Q1AyaEl z!^$~>U<%<@EHs8i=9q{d|%T9{oAC`vaPi-3xe=KlCj=;+DT; z7oRw*_=H`NdYhWSywcl*cXXP_h#f`fI)S}7Zcam5II??YX1;knWwV+J}<3esZ5lw3x;jwQY5n@1fDs&xU;S=I+~N=Jy-0O5+xg8{v- z0f@c^a0BNb0*@XVfHzJX08?T58UUzzpB5S*Ua$cH&*O6tYmC8GttP<+MZr|TUt6Gx ziwZg`BmGztYncKnO+j_nxuQr2ASnuVB@sd?Y7{mkUIW~m(cP7pr}Z?!nPy z_d&Y5gKZ*`rbHrVP33IqtSz0PiiJS4k?1Xzc6Z8q`;~*^>fw3)_+kC{QSJC~<>+x@ z^^lqES<`@!6f}OQXVf4kpaJBrq>@UjXndbez!W5~K;s6Ku86^xw1x9@sv0P?Vzb@Y z?2;!{H!?|~3GZegL@l3BA(yPZHe;39Hq=5p!?{Sct8#@tn^ayGXeXe00ZyeO(73i>l1>)5!fdj>05Ge{#=;Xdt+K(^ zud^YuOG|a6L`%T9rLi(74#OSe`iS(}UCBTOp!-=4wk~S+j2^y0OzTt-eiNNgTRDM- z5*s`slUMIcxpVDAXS=p_pJ4O1XN$X?*TRYwsgxKb05Z-#XYb$U0Xr4yE(G;V0^+qajWJg%IbNxi-$l2*9683XASG8BSAY(hKIh0~q{$z+08isTmDi~(3GoQ#m7 zj+La!YJUAJy?oP~UYfS}ja<$ZZP-GUAS{2|=-WC?Y~MnGK>hC1#@(mQdpO|S4=!!F z(={sJ4)^y`yJvy^PJHVqvws@u?__swCDuO<`D)uIoa7m?WS9rcFUK7^p}9Od{9S z!4X{;`#yeGn=K^-@E>&_^%+$1T2``UMOB@3#2EgsZ&8zcAu|y2VHNt~_CXh_`-N;a|jC ze?igt=$Ic;bS@k+GGi12_i(%pmoDuwgHIKc`iB+1+-7hI?7zVB$UVLvu|J=-?ZSl* z4iYDGkOoO#U^;92e`mp$(W3Il|3@VT11HiY1nF{izi1!^ZWTr>D58PJfKBL=1jVN% z$|s5DalCOPYb{x0Tyzg#2DRk|fJ=|iC!kfico-T37B6Uw3;fYXi`SqpIkxoBo<5rP zR1|bsjTTsU5it@T?7zyH75DwZiMRQ{+k7NfO4Z;<0qfJZnWM6X*fLc=1N{@Y8*lFg3ISxWef=K#tuXr{hAUh7+s_FQZ~N$ieFyBmuD+RcmH#-)FSv4!*ecvF=vqQ&lO+TT#J(ZE zrxN>Ge#su*LKwi6I)MhDfY-#-Ub=_HKiz&A*!;;=d*Z4*bXOiYi+7Ob&1OVM1y!>-KKh8lpfW3GJ*nUv<;k?RtgmHvp7LRE?NR>d9WD}Ise@n6^YGaNlA~v`i_YkjQ5;cw zCr#3fJ%;mz!dJ1T*16W1w|WH1(1a_6q?U?nXyrzT9Z%()Z9hV13kfo286D4?3!V~| zEMxlcoE>q9nllRW^$}OUgANvZd`H7|XPkv;dj>(TMY3QH_S~5rIA_e!4P9_e8(K%z znm)dX)CAqQ#dYrc;AbnJ;Q=uqwC=KCKNJt~;A^-1=t-#GMTjD@|1T;M98+;^lpB!6GqQ4yFGT)m5bX$n zC2@S%!+XXO+X6P4socURPvZ+jqcbWU@X3@<`NnOjdk^;SLRug{$0! zIU!m_Kj}aNV8e)kmV*oEQUeIEsY4Z@JQx<}3k^UApaIYe1`Xg2q%h6H2m}p4%2l&P znL1cr)v{TX3S(=m_hw`QJ`*v~aupJjZySY}E1EGPOAs!}8sNsF6*J^II(mKSwpduA;}!59rxQ`(o3S`i=Io)SB=HMg8D+lw5$DbwqIXrAgW)MM@LqG@tRGCE=Z}5ds z4d#xe31k4ExT0YH2aTl91|PXUN`*6grV**FN1EGWd5y^~xngxQBo+b>;Sx+NEVlmn zu2@>;i%ZyN6UmxO21=G)(GrL^NS)4@sBdQUpIw{%dO|rqZ-m|d`ius@pV2zxDh3#h zxEN&U@Li}xBLNkl#Dv+6A~VzEyhdYoIvC!?2R*@rSZow_Z>~Ij+j;P^dH;p{xc9tq z`$^#tg>n1-PM;`L+}Wbo>ZR6qxKhg+NWs2>n+za42xre~-4hDi$c#au_t=>bT7ef) znQU~Ux+_v!F?b`;0AI`)Ml?<}TwCD+>V#1)=JdyiK!OfuTyim9KxGF8l+@T+BqbbP z$$%BOgVMWMNMSSvz`lQD*7(hYc2Z$m(0Np5#^^%182&F73S?Y`N(wh9qBB}@T!~U@ zxa-1DcdlqTSYNN~oI^lf3n%}`?{Snd0ZOGx%CT5%ur z=A8UBJ$2RKyQbsjiTJ!bvfv6DeJObAMpT4`jM>9=OSrC=%7#E$&E*Y&raiH0 zjVy!6Hi{g-UO@Ark;nV9OC@V<}$SBX+qEqIe(vv|r0k)zq=K*|-AgPAY0ajppau>`{TXGj-04)LD(gmk7RvpH3 ze__Y}v?bt|kjjApeTc&!!azUZ@DZGqv$F#)zI+_G_<(YL;Fn%}^o2oV3_$n;nIV@0 zYz@ppKz9DU5r4SFmz_exN-r7N`H_Nuf$SW@h48=!^ye-*!enxP9ksjv@fQEWDI`Aw zgJA9lQs=N^YtWlEaN%ESj1Ng)IE9Yz#bSj&tTOoU_&`9q&_W+@tCuVMfny3nOAaLX zu)-hqf?c9T<%}=9Sn^}YS{?im%|X=Rf`D|v0R1FBarq<+?gIl{>9EpaaCL#kfO7lP z-!-_pgj;uw;hiaWSwWZNw7RF{${ynHcz5-d9bxnw9w+APu?bunuwsC~Z#|TYnU-Op zdE{Mr9>4jg!o7cu9etPBeLZ1=b2>WhL?E~qTzwMRen)qna{X6a|G7DX>?vF;z=wka z19m5-`6vAP_x$>I>%jfLCIb?(3px>=phXw)aBpe;e3%FKvD&ti6?RQs@9f^c)|PS$!=X{+ZqT zF>&{QhF}NU{h3~VZK>QRdoQfjd#2)BJ*63E1`eeuJ9gplfyA%ruy^<4oH(LJC{da; zNXUFoVuCk_qk2D#>hY4+gt;WRkJ?>gFZBXBT|9ISM3%xXaK;k4h|&%a1;;j00Pj6daU^g z6lWpY>jQ-x{s@!+I8dd^MTk&FrqrOt$i>2UKtu|WTIesF0sy0#B8eQf0*(%bdd*U5Ct5izGrG(M1nhndF5!#%M3N@0o@OD?*{eWm|Nj4$rZM0%rgo0Q+at<}Yyv zSajV`lT${3R{ZGpTCn;jHT1Pv`_*adtd21f5z>!}Sz!B9n2-Q`boes^4Uj=60-if` z{py@>cSshP8T>gR)xs%2%r2ocVN6SYKB52pi1N2rXTO?IVI&2QGLWlF`G#0%pof*s zHGFW`XPdxB8ill$iDLmzCmNW>@W~_3V4y{Z7=Z>5l6gLn2i2Yl!)L-xs;ys6EY9d% z_(Pdc3CvA98jI;D1OV_vi@?9w<%b%M7cT4$r(NNcMMQrs!oE2A_%wFP%1HQR0Gi~p ztw3c>s&4r5%kD(m5vf_EqJaYtrVRXxzuXrJOI)_&O}Ee)3?wM3e+_)nD5OBVq2g7O zHws_-SL3Q1vxaG8TUEA^Im1`u%5kM_5f*tnH)E#9^&~(>RzBqp%8BM@oF zQ7BwqLY*+G7}PGW%E_QB;8Fv4a3CXuC?P~Fpt8DsGH=u)=j9QpnNT^dL1v(3necycx}OKr?YudivU;P0IuVwJwt`+5<6PrsPYPfl*R9MJd-~ z<2CgBf#U?Uk&fnFkvLy2=QcN2AKb6*9|)x?Lc@~RY%RbLV7-jxm>931lq^uXp?JhCAUwd-iE)k>Z`TmtDC`QkIUC0trfn~<{Q1t z-cjM`G`oK+Ew8i96|uAFZ>?umcGz?ot#CLsIHP4H9shjRHD&QHxNr}lK)l7zsT=bq z6#vaw`DuikJt0%5sOHmZp=gfwEa9$($sxY>&AfZT9zwX^9&7-(Mr80g9FoOtl{YtL z;HJ#{n4X@t@^jAMJP||pkeY?Tv|{vE^n5`{K>#FXtZ^e(#UAdO#yf)(yfv`sOng1h z{Bef(Y{vDag1)lI0$cIrjOV(Nois;4mbmodMXUe-|MW>jK~$;@Ue!u)_s%*KXoZ|K zMF6$l3(lEcp|vaR(4_Jn&&L#JDT4+TX$83llurn$UJP1bRYapibD+eZ+6R z7Ph_>w%>@`@BG`}OK8R3_*U9{?caDMuD#$_pGjLU>7|Fl@(a{*i7T&zTi@eD3Cpjg z)wiLo?}e3bVKj1A(G2x~Lu{b`lHYz8x%Jn`-G7bW|DWNre;0Osrk7rO+E0-LuvPBD zhhr_=vY<{Y3RR2&^d5MfjsnQ{55?}2F_cElgNjy|a{{}bnluNefZ<|+4?eRe4~@Ys zov^0o*X)sfdvxEKI;JakgR9>PK=&5UvGV78Z|wQIa`$lZz!KhCAOVNjbfti=0d8p9 zmOTxvzYVRwp_}(*zj*nKso&w+5By-EHqaP&>P+rgBI}Oi213b5{vaBJ$ms$AGDPNv zDfA^8tQNdq%u#=wabH*aCe48fi*!xHTwNruDM$?QQ+nVWLenN`OvjHIL?GlROu-So z|96PVPB}iGbbLN;|8fQ#a}vd-V+Q;f;M>CHJ`1@>`Ws5|E^DY>d6y&?AQWsiPjIc(HnK+~GTre|PEjgYe#WvE!d&CqIXeeoWu}m)wJYkKg=D=H#EHrRUep z8KhjkQP5Wv?yCydm>#T`3dU2qypz~{8sB>n-Nj$-Z>0VMqOcD(ku8m$<84^>xz1y$ z{|YZ+p#MtfJ@+EDg71RFku|bojckC1{o!C?P8t74W#aGGf z7Lna`W)YA*bYu?Uw}k&54_k7Nsh<0xG5XJh9_p*_iAzs{YtJK_F9ItM{Y!TvtB)l( zZR&T$-ZOFeCEb4N>%G96IlA+`g!1G19T~I*RDT0kk$t_;Q!xP3!*f*!pVSaqnx%^4 z_!f4`^?a_}5ry#`{;}ezC5?porarW046h>(fXN=$U>kyM822l;kRGAXJApE_oZJ(K zIt6#}1S39Ezh#MUfjm3V08hc%!cD*$U-h={QuwM%xQ%RU_y*3)hVYs(hOBuX^^~^6 zk|ok`#M@$fmnm%u&27HXHwh^%A-aPFTd-)P5iW%W07L}n8s6*+LIVt{00hi7SY#V6 z#v2xd7!)g^1OP30w#2cVZx42Y|P0EB83>FTQI&onb5>Q?nZ1mEro6%lh zs5i)b-j;})V=+TGsttzq;kYAHWGeXDR--Gsnaz{p?ychXE%;Jgu^KeMq9+2|nSn2u z{Z;fVKm*J=BXiD>nu^0$;||Gyd?rz2({&sH_-q?RR7fUR#T;0o-zeRGoV9+n;JB)E zk7}t|i=ZaLW^YR8i7c47@kRH@9EgqRit;;sNh z7A;6~dXcR*k|B7(y^$Ifs#v-7qEi~zdSHn990rmp4QgxQKLK$iRPDyvtBIw}*wR*{ zyBTb65UIMJ$0sitI5;kjOl~!E!q`THg-HH`yuxtwy-O(!Mem>Xnr5bdsic$h+C=c+Hp2O2Fspt@ys74wa zOuPys`}H~Fgwl?1@Vvn@rE!cZEHKsBI2b(AxEW2Gy;>?lMk-Q%DN^dE5DAS{tYlE{ z;M{Cnh*bd7R3V~{6G6HjUpox1?1{ZCp|>S1?MU4%y4-UlE3S0alf|O~It>7_{&FW! z>>y?UExTYM=XLHGrEPM-JUXqPQ8}~@-b|w$APNZzod9E%g-;;vJa6Y0?7V@A;M3+( zb-dl@OzvsDeN1gyu#mC_aA2bk3MWSgl6cq{R0VTJ%5V0Cog(7kad>z}7SIX|>5{?; z2!K~akkJe%^A`j^YpiBNvdIgJ$bVtPKL>4l@moH>i*W%qJU#0+Ah1-Q0M=ChYqH<_sjl#|0r@_g9+E5EQ?Fc!PnC+k`@S z>t3k2dqv|>;2TXsg)>T9)~MY2m?LC~)dO8{;&R4t%9+e()_43BsI^?OyT%vm?o_UL zaNN9ouYLDn{nkCI(sN~7QhPJIcED$A^L8rUUN3Ik6pH;3t#{nuRk&bX6~s)@#)zYH z+Al`tJ{wbiHm$#=b6Ub_D&L@s%eZA5q?(3KkEp26#taiWM&*u}_<}v$bR?F@(hiZ| zM6LMelcqTfJE0}#ZM=$z;B2U23y=YezO0(dp`buTr@wjswF|+l%@wteNHD@1TL} z<0601z4dFq&}G-}1rZ;WWWVAIeTu{XWRd@Y+KELzG{zw6dKpLL3G!K20NBtnddmp{TsV|2vz|;5aZ)EEgW3 zj|~QwFVirWjDy36BgRD;^FtkAe) z0`?IF-nkuj88x(rMCH_7IYk>3gakegX!kfQz{!JNC$|3_{CoMxu=Xmj^9~~&8iH{O z@b3WZ^9F=ackK?Kq9-tu1 zkT^u~t*`r3SpPO~_+#SUzh0WFGkyR!@$&l$?O43Qmk ze9sa;uwqqTIJXtf`R>yZQ{u`TV`7SGxZ7>vQEbz7et=(0(vmT-W(jWDgFCjswt-tV z`B%)rbyxZ@*n5T=wMln%mhKRR+xFCnL0WU5sUy6ha93Q>Ev|g#Z`}(nKS^x9$sPV& zIQlug^UhnlC3WtHmL3Ls_eFR=5~vF4BB3$s%uE6IE<0+H6V}8$kpr85(wUq@J2;is zqPx%@y)sLT<6P+oFA&jLdjK1K{0JI@^#$a3gC8FH8(Lw~9D;xu(Fs`db{0Czx$zj`XJy$tTWjUIj+%p-@$apJQic8t+Y@LM4`sp=i7BDdo~uYxe)soaGgfGS|>Ks=pW z6Wd6kT;2g>4S=!*yuM`h7Ew5~#y4?^Qu%87(260lg3>W-1U(Gcf*~o<5Sm*|ah-YvoM0DFi77<4S1V+CM{T(N-$ zh}Dfyc&0F!|y6bO|YMr0ffNN%8 z0SDVrVP(|l`X&7^ez^h(0x}?&L_@IID`}kG1*2PS_d)-`Q%*)JOuB=zWOuS{4%f`V zialI)M{8uP#w6O_aUy3Y68D(uVsF6U;gw0v#*_fYBvDcwD)m{ANsh zZNf0FaLnqF4UixR7j4`%g$;K98I$Mg915*w#+6n*!~^#C2B(D$vZ<0(Z1VXU%r;=c zPH8=(3g?W5o>C(|VVN^~-2nipB3gpS1Lp`RJ&oP(V$(P}LFdQ^3QA&Pc|KFtGrZ2r zQHczl$T%c9@PLDZ-Yr>uu-cdL5+I3w8A(TlwBVNFUbAsK);s)CO{m$7J&GM$-4bjXrTRER zV4kQm)ll)#IZ`nCqs5JVs0cF`0=qWc?6Kuqa$_rthKJ*u&D#&$`KDURNbT(y694JC z0;SG;6zSw}V-5R$oR1b=J_3yv!H|vN<}~IjWApfSyRNie(^y@JbbMt!y?G=wwiFD? zS%j;&?2W3vo-u)fii$*|STcng`bb;luiP+kpH1ke4CIV~h7!heIyN`!h!}Atm&#LCam3(t#Txcdol32$>4GKDvZLdj&g!U~5fgwdiaJRwDQDd& zjnJ?}(0~J9M;?Vuz!Qy|!YCvLI0AP7V5%|aAv88i6czz83a^4z;qTo0H2ZtG%fA@4 zFYA6k7EXQY7y57|7#L=TbM|Ga?PdMeul+(pjWO^G4M07Y_M6L6TVxUjaG_5#2_1N5 zhC{ZTNx&k1kV%k>w+1-;^dOdS5&8Xus56Kuf09Y~q>1dZ$^bqY4B7G`{}S2xG4%XV zWBf->A-OR4!YOq5wXa?j`pR4Ue*o(oI)(nee)!_pGHhj*pUFYecc3vYO2kG0Y)IO$1?YDcJ6`voMR|Bu4>RbE0&Pj#y{u zoT%O5mmi1F@VfroxAX+PQLy#%OV8l#!S98&m(s?|$o6ZlaSo{Bv^l19XThfeiJU+g zMg5kma%|3Q8g>VNTt9R|lvo?Vpd`MyUxr8QckaKRKR~R4GxBS$* z`pmoboLPGb8xObo)|@-l!%dOd1B0BX95c<^iT!us?YEdL{cCT;RrvwX5Y7~snJoER zu-EJ22e$kf*?8z(ej#kX4;=qRI{r)a>~FXUxSD9;Jw=@@9+-RJP?C#slLuO9RWGe- z#T9*U!<^VdT`m^S-)KYsblozl;V=rz8bHsZPwhWn(fx6j88^jMMAgjp@X*n znp$ud^lVE_*HGbvAi=l+jfb^SEdu>{{5$jZj0puJxX1zN8(vlm9dK9Yy|pn%`id@i zMJs)&5c_xo~EIkiA zar~MJr^O()_&6bIy_so?IAM^B8YZ*?1i+|HnlMM_+-abA#!P`5S{xyzaYJy*99?uH zzF5?v_t#sPbYhIjC<(a#le3nv!U_HlFrdW+A_bh0uSBpgMZ*hv@O2V<&%(9{d!9gxGi^LEv?sN~^C!Tkil$ zLKCpif66XD5>}u1H=jv6uY!B;BL_bwj(*M@|G+j+e>+S3e$sYj&UI~(7&meXDrpQi znEF9zpQU8ql$PkhbW@ao_QLsc;T9++Z#I12e%=)Aw?(a_m9K&}E=w4Gm^D*$6X{!1WJBv;1_g*J z-t<;(yK*O}*Pv>5u*;_#w>|YUrgbhXKM1+iQOLHV)i6$-a6dsOr zo-WtL_HuL;jRE_)?c>V+t;WHfXnWHWuP%B*Smz@OY>_HNyleJXpaCYWfl&iLWdR*X zQWHTqF(3ngY4;}UzI2Ptbhz9Sm25d=v}j62M%7eIOUHCf9DQMCE``*l6Nnx%vS{{A ztK73{VqOdCB{Q!h!JHX~lLYHh71qX%3Gm?c82w2+=8ZIlZ-p6jNVHRd592q}F*M^c z(W+C*qlnuy$&NYwH zU%0qPyue}DtPy^Na$q7^a4=Bg<@shhn~c*3wp$9xIKJY=3bkO7S+ z-Q7mu80%*)(+XGDBK38MF0rf3#U^#sRfS^=#C?~z$b>aQ!V)f! z*_JmCbp!+fuSD-}5S@Zqs{|%JU`lB=Rz?9c8ZJg=_2UaBXn+}&Z4T46+Bv0mLyQrD zJex#CZVsmatk_|%LYBkG#DHLONjV#rn9{kw7+d^iMl+%?%$o=UDf5C9r^p~i(ibXz(j&Y3c-m{1xm`O8H005Z-)l(C5wLC0kTyc?VmCdqe}bef_+-$ znb$LNqp%CH4LR^I)X$K1TDz#ViVD5g;0ieTq=^CZM_^OsaHZo4Lg5Iq-HYOpCWq6B z3gqAoLuNlzT6OqyGiD!1wUh8}O=;1k?F?qEVqEEDuiz8=X6B1;=BMUudW%5vSxPD( zMvPRwPz3X*>x^aeTnHx}XaED9NOlkX^{p$|spAe1teN~Z6uZn3X{6A`?SVya%o;A} zxhSlG@zyF#J_gz!th5uo)lhpW*a3;TNtUWazG_XBtno^qvm@0|Y+OZr% z?M0Nw5uC~cRUmjmVY`=Cn_XAO=kc5yXldR_OZ8@9cfYuQ7VPfKQ;|^v`SqOPvyp}0 zeS?D#>k6P7rLySDOw%a^pSxC+&!Itl^F+)WuB}hjoP) z8X$*@fr`q5RX6X-D##+h5wq?rkkuoG$PGhe&Qr7}xA@wbyd+M*=`QccW&8Mtu7Cj( z^OLRsxrZww2T3m%`S1&&+v`8}3&|D~*)Jp;{r{0)Xt*7h9|Mp3V0e|`LNZk6qJHbc zE`Mm4kw3`~W+60@4Ho&$i(29f>(PbxW>^j&A2EiNSVQ-bI9Rt|bdX`lj&&MR~JW&%Rc5Iv2-XfE@?so3G_i=Ko7`-q5+<0SmQ9P0=U2v4UQO)RdS6( zsxMSeEvds9PkqKwoO4&FiJIEK;w+rOiSEdskhOEM|0uZeOk8;aZ;uBvdh-FscZ6sG ztq1;J>_3Zbz6^ElFsaQMb6DZZfViR$EP*a6PyFRmQyQH6U2EnDNdR{Ry5hFGdKZ>= zYvGhxdc>?eBA4zH?YqwExh;PaA0PGuP)EJ}C;ZlHZc}D`dOFXng>yYBY?C_{^f9G2 znc69QBhu7sH3d~!q$&$!d4?#$Q-O5EKaIKmk1sX=G(uhDZ)yT9J-j!O z4lo0A?i5D+NsHVSI8P*WJkVtRNo#P{5yg&w!W6_qE;Z zNx%{v)_kIT>?j?&YiDTx#k~k9Npbsa2*;e`pMnQJ`FDO0Hs1#K-UavG__tmO8?X8G zZ=nhRfI`%pU3r1^zqJ0Xu=-kDe+%f7>;c<(m%v{C^e?fapD@-(a1&U0SLSiI(_*4Awr^LZ~s(SoSGsIUa-;5m@V)Qv+3)4Yd z!Ij&lD@SDUz?Ip;^z2S;Ia6DxzH(%C@c`V$2GV6@6H-tgT(>3=tUry?>?aGx17ZTvT^F|-0^kp`d1!?*PaBHAB0yP$2VTYH($lK-o$slgGo$; z;SGIl1I^$?kYMRiXzhi+`+zJQDB0SKCyz>RL$IqATPm)OQvfu8Hn4=EG+X8XE+EqY z+G9!Y+Rz=5J%G;#>wi$cAOP6bBf5T{s@=!0T<3{@`9)~$m9+enYv1Ksx4GsmJQXkj zg2y$~065)PqJ2a)i1JNm8qd<2nysOPSWc)1Q9#zThFgesSb`Nyacree<@@mK(}k9S zjbRdlcO3~>nfc@7hZ+C_j6+I51K>A00t;)=#>cP@Ms2X(gD^l4zd>lwNc$cBm_tlp z>8Y}KOeE(DWvvL=X5hzL1(L_^Pvaw_cvNi{5kS>>f}Tv%9xd8}Xyt@a%=lysbiDUvvzI@GdG1SLdlarYgkpqq;UrrGYQZDb2d@o z^lPaw!plSmr+}I_)%0cBY_`Yd;FRdmsW!v_lWO}Q46+?SlyEoD(=hztxd>^UlFGs@ zU~8!L%&OhfO6R!3c5T-9<%Ih4QRN>-6n`97Uz<0>po}o+0?J}h?*%3)cC-%k)JisA z5&|GlSQfHfpf=~7Fa=UG4o*o2jsB!NS>db8(dFIb+F^Fq z<7)eifmpOLm}qTm*b_|A5m^9uqdAlfBdUu&U|cOG)UI*0TY;r1mv%&9=UC<|Tb@+M zB<56bJ+TQS9{{<>0BUAJcpE96`)dp zl$34`SEO)tDcN2Zb4?-yNNYV(UyU`_vF_`Q=b_m877o?Ljtt~4S??fJn*E= znTXLv`hz8syuKBoiVbzEbe(AjWq?VLNWfqNIrIB6GdvTj05Gd!O8jpatM7p~HI}Of0 zb7s$k#y+Aj<3=PVoARm76Ao9_K_>nEmzOaF z%#2SN7gQdV$p`xo9WT2gdA{7v?Hsx@MFlM=EX#u#}ukr+@Ek3m;EaX?&+=|wh zawl58{F)=&L@d|@_hh)ZNJzL`>1e1HVvfxX%A%gp~m}yK+&$<)}UE3K)VxhadCO z>5g6g2UyLpC14Os_*7%aWn`BcBR8C4SBI%zd7q8>H6sUqk)y>f|H9_}5nwtn3k?CL zpDgmh`~L?5W3V8H7Q&o8Xa)ce^m5K_d?GMp?9U*LFklLOI<?Ms|#=8&=A=gwW0(U;u#>9y3C9Mp%Oe$G{|Q6?1ck&^(NUkhXdQ0zsWT2 zTaX-^CJ(T2w*h)nI(Jp> zI?8t}`7=xLG_d!rxc!n^dH@Xo*eIk0*|>*8fva-nuAKu&B5u41?)_vco+FX03T=X~ zVhE$zYK1BSYr9U#2La%QAT4fr8g~&aY>O8BgRFoKtfLC0_fgV%kr{{pcA{6h$m zMX@(SR=`jnx2C_*M?Y5x|1{?LFV`IZb;R-c4Dp*$%awWht2z326Hb8he>ds=&6wkl z^VAKU@cEqk^I7L-Q?{=chzTwG`|F1P{Q2T%H(<78XAFS}t@!zv?duuOxP}Ln65pGs zp1q+G{xIqJ-K6KUDf)|Plxcc?cfFe zZEp-t+9M#3p|E*|$j-nMNSBNOK!m!$_G4<7>5b`4LwI?ffh4G-K32(8HC$cA)v!g@ ziA|NSI`7F(JJWcKS>xmOZCkAO$9@OrJkl6Kz(4!)E2-}C5)-g+t-}OCSc3iGzFL8qCp)y&^oTv zHsF|C6Px}!Lh}w73BJ-zzIsk0o`DLsGD00N{hxU&2s9t@m7BrV9UgUcr4xVWzSzC* zYo5FFduU0+GmJk4EFkR2J*8v1c1l)`sp=6`IUowVwCsR-7~Omx-+md{cnaqa(>x7t zJx?9JOC7vR@4ktxJ%!5%R|Q}7lx>^~od-d5-Yq@%H6O~cT|CeATe1Mye3d=^DYf@D zxby(rq$ziH0Ox7Ln!mu5QDHIft>Ua?h{at zn8ri8{s0;PI!C^BRPNv!!?y7i-31ECm6N#<__mV0KHNZ^}pWHaap_2}mknpP7 zS5?wQ$Pax0pi-E(8@4FA>Pz-e$y)@UblF?#)A{C51E3i|M`7(N${GL(M#2v(3J`xL zM%DoG5JmazFj>$T!?45k!w7`409+5y0Pv64IP|Ep&;S-jKp@yGWH8@D0~ln0P1@*7 z>ZmBzok~=Ud4ky3I-*5qB=3wB@n>CV04o<_Vp$SKD(A`vwE3jkf&LN%=q&{jai;Is=Wi4g2c80%qyfSnz*O=tjby6w$$(bg2G zZbVzV$=*R``8dCNQdm8KQw9Grid5&VtkxYc!%9R()HZ$|Rk%ucGYAZJb9$KFU89TE zZ)Ocwrgc~6;308LLjzb??EbO$MI=|}M*kN~AQ>^!Nw;^C?Hw-HwFdGU7Fe!?9;Iuc zoGVrJmU{lyMyR_T>+h%5kHXz;q1tD1Eq5GrP7s&EYD!#mF|$^umh?LOAugSxW5^;W z!H{9%MOfkE&2`is(|FRwB*F<)xBwY|x_~*8X9TVoofGi`t($`eph9U(|2{lW|0bpI z@5nAD8#`xWW-(B@1Bg(gOpeYhN%dWzfv^Xif~s+2{~g8jjM#&0k{N9G=ggGC0e8Eg z^M;@S0@dYEZN*>eA!~v7HQps49T|M+7#7{(j2wGtEMw1Y4F)cNs_1w^V7Ce5FlyX4c#LDgnibX;M5WjA<5(6y%VVL#IR>$D%)6S0FQeZCX2}v@YnK zb9fkCI08%=opv!QWUEkUPClY>vhYx$DQs3xfh@FOl&5?X8A5w81@>#KjAW1O_0o9e zw3N~eTxoznABU8(2{C*Vfqz9t@;LCps`SOE`nOkRooqT4&0Rdg)R{*a+PlP-V?G|n{YAn zZo!HQIu;IZK10Q^>ean+r()!YDu4k8W@(+Sg&I#ZWC248N zS8POAw#ZUlX!Y1?Q^iS!K*E!$OLcJZYPiMCfuux-=56$p$vL7m&pSyKiFN|g9gLyZ zS?Baw7)kcF1(Uu^xv_szKR&A*--)gqXvCC3h)ac*FOvK1SK~7p2mERFP;nlu5p>w! z+2m_|la!>hxT1z>1YpYGAgzm~KKQn_U_mIYk%`Wf&F_eoxkAt2i=k{AQfEx#n=COa%<36d`qc$P#*7Y{!Y)_ugHkgYTKcOf0zQpFJ;Eil^h4bFlBe|Hd@)E13=LNwZ9*t> z7+9nRJS9XXYX3nFVffP2hZSibFD=7o(qFl0kXEnhV^g+_lCCWt#cmN|8ZQJd?(;Fn*By(eUD56-k{vwu{}X}tyPsy+FAq5FU+ zpIHGEN&#wlY)%0)iX^}}Nc_&)UBG`VmGi*vd+*9Kl>XA~M{?&t<(z8XwaGB`LwoiB zY;vymB(VO*oI@4vEl=qT_5+M=dKlh3CHzC-<&P3aHOV9;V~3i zS;873rE(=^OhLp3u4}~``rratnzAMV>b;>6zh0n}?j+*=)7IpIr+D2Mn)To`7yW#O z{KL5GcOzEl2e5sSI+%6E=RK)`04TuYhuo(zyo`EXO9JK1tNLhP8}3<>>!#R>Il77p z*hxor1l&?5x(mu+Tq=bQO!h{!eZl^L&?;a6@l8W~T`BcuytR3@f%<2)*umO(o~bIh zx+c)ICDsk7i1zmkfn~IP>BB3g_=XG4Z*0diyJYD&+{sNla&|z#_K5lAtZNrKiDzAH&CJdVb|@AwB#Y zz93{p5F-{h-vsu)4#L3EpYZjc2L7Z?hQg_g*3COB8o9yDvKT|FZn_-x_!SoI84x-G7szpB)tRgT=o9K|75I`8f7X~&R$VwxF?R*+0%75m+t^bpgM%GTZ$oAIjeVEn^s{DdUZ-E zPhAS5!tB9>$|cKkhgW+&+FA`Y`~G^5uXfmK%Ufx14WL5TvfKOhlUtSjlkEC#qPq%H z0d|U*GDo$J8yYm2ie@oOrMs|00a3ExiOxa*cp?}nEL;j!9QfVYbQ8%}Hq%DP6%>5$ zz!8KXEI^0x_D**Bu(Wm)7JM`+106G}aia#=!KDdgDTvU#kr`7U?MfmKfF@wQ+pl&Y z7y#S7XA-M)EinmgVDidMOhiy-t2;%tU4RJ$I#>8*5I-jw#S2}!JH*Z6&tZbVBQ%HVLp)525R^ZTW zDyJXitWa_mA?pm4iFkv__NY_~1#em=f}S-U9YkHRo|N!$;4H#nLGCrf!HA1Gq%`*8 zzD%7#Vl{%0H<&YdBAmy;$c94_A8|)AU>^m`O)`=)P^?Reh`DmCxfJiL#=2{u`nY3x zlYq9u5IURDB{vK6mB~A8^-kNoO1u}Plq*sIdI+QBqD#82a-!=1Bv2xfhb_m*;B}!! zX3did`@B|Wbi!e8^#L%N64MnfULvK819uEI?%)z=L5AwZRSWJZDpEwnn~8~O2Lx5b ze@EvHV+)2!r5PCstvh~~q*AKBYoHRdCj1ESD{LHGKu9BuFPbM+R&Y+| zEZ$i&8U~mtrG0$XI6kGHUa&z^T^Z9t(8lWP-b}-fNY9-|V!N*v!#X~S5J;-K*Eo8V zSUFbWZYBW4iQ=uCn#^dZLaccv7PoBygxXi^QhwgXnPny{mUHB^m9j^(fCW+2c3^2O z+F!Rtk_ZggLs?(8Z56V(Dk{)ti~?_T$t`HFDRrYdlagRyZJM_d8o6dWz{T+LCCFGl zTwm&)+^-&-myhlxHqSItR^^Lu*?J(?xH6`kK;nW7n#Hs^loy-p@zs5<0z7EKldc+r z*%0VtJLm8d0*5MM$V+bE(eE)dC7^;gQvQxI> zUq%rIi~IplXqa^#Eb@mur4NE?`1M|>i$U+0d=imgmrvBi@O*KI=jwyH__VcP2vh}{ z>4ViuC>&_n4(g4jtO;E9(US`ByfLz2P3_<>djbLgi^?ybu`f8y*=}cYGh$BFGx{?UdPP-6tOV8MIBihJ_ zTAI|OGBzp{_C3jU178C~3+>vUPZQVG{FE6mk0f~ZGma>-H(I_v&s5ZaffleC-Ee2N zQKkzr@3b{?O(pZV=H1yDM_Pf-DXM@DT9A2X(44hEBc_is0d(di0n>rK)M3#+-H5g9F!m(E9Dq!Q`tG3vR#=oSGY+6tRo;fn74-D~LeGFx;`^F^D zH#?@}F51oP*+blU;16*Xj)yNaQ$Gh!2Fq_BQsB*dWEHWE+gP!KNCR39UArAYTzlmO zEjVBz2*tDm`H&Pnf+d35F88a&R>dTRqSC$eIXt`WEl6py9$z3AHWQ+o!)yL+kEElK>+OI zMBuF)i_J5kamv?^{q2*)#)I_k)9n7M+~GUCy^Wzwjjy93Yg)Qt4Xx3ooBsBLK<|ma z{YZd~t#)^y0q%?NAZ>jc-Tywc{U)&b+~2;ZWE&&qIL=uL5|H|3bXE{)@c8dWR-Pxe z-iB6zHhLA^c*C_H;rk9uAx!@W7SoOU_8c0E5de7TYd`h2p3;D5mG8NVchCXi$eo!J z2g3&<1RnGl;JX!ffTgFd(upa&Daz2PRSuV>-OtT8|$)eoqX$LRkaA0)T-B1LRNxfEJ1)03J4s zpk9fL=HN8O0YU4a0hA|`6(HlSfizo%bv6$T0Jsip)$qUI-+}Rg&bOS=Je{t|8UPhW ziQIq<>h_r#KL#nalb+VuuFj~wo>Yu3=%+PSh0z7(BQh^^HJ%gRibK z9q?Qnw;qh|cwOym7*i&V*5r5rg;~g$+5~WB?ry+{ zf`tW#`1QPX#^SXCG8->LX<*BaCmEya_?%U3@>vLcjZv3`q;J|AFQDAc2;JfofX>w6 z?IClo{1CqA$0h<1Z=hS+=pecg95}jpI6Wm8y^=Rkkn(jW7e@4cN@W98$;BmX-Y5drh*>X~X!I4} zF5yd*Vg178WK8D*DF~)^+;Cvj!{v^Iz)PYVE&=!#lE*g`)=8ynUQa76ypZgqTL&fv zv7Qhi6^wKkDG{7I7K|>9jRrCZ?^P5DUsu@Bab|M+twg}+6cq;g%TYCMS*g~xkneF%^tba#CW_ zV4u)g6*lVnf_~QEB>eGoebpN;V%Cqf)=HoZ_xICVx8j?(bP-rWgH*B_D)nY`o(Yu` zDInBYxRTY}=1IK2%jBDS{9Kc*M;%A9X2n}5l$A>DaIFh4D>?)Nr6tg-792vPw&@C# z%xs#Dx7?vR@OG10&!Sy0^4Ucu4KC1_PMFjQU(GmwKcc^`AjZKj(!-P}O<6;udU4tu zT6DxmRV>zuN&3_(s89YAtXD%T0A6st+ zyX~PTXTac>*ZIR)7OwZ?rDbS1&VDqdTnLN{#L(XhjNvSMX?g#|it`UG@8I_Q!y2+- zpmr!Q2A21afrQdlw7M$?f8om?K=+X(9zgepqxQuv|L+j-OmFxK2h;BC zB41PZic{9$jYab789SgilSV+X>|e~-zMQsxJ?9ulcP!#AR2f%@Nm~>%^bLdfU&btd zn08%R^p5CpkWU$frkbownG(|`d2_ENi<$mIqtqhv+d}gMKDse;bVL_gaOX5IIUoy5 zW_3bMFTr-d3Ta_WZI8OLGbG}(wP{BhJAQoFDY#|Gl8S3021;ahQ4xsS!Zk#D=e<{z z{0*%%Y7E28KVpekV=F@ImbZK?Hf}rO+d8ptif;Lro+S6)qbq94QTj>|xT+LKwBn2{ zY7lC3o-9zUV;J&msadkD7Q2S%x;eEC`o04PnfxK3?{+L@OCZ6+t$xdh94bcG#0H*f zU0_WquBrl?`uM&kzNd}v8^?<dL<8{gvY#G*`k^%d?6F#Mo3B6jrW z=;5Emt?#&XLc<6 z00nX8$R69$2cYFZFyL+Ph^^ri;47VS0|F_81oRJV^mO^A3%JkpK8R1=`fZqM;(Kr7 z``-q)o+b~zE#3OD`{cjn4!;epAk=${u7C=GzG1NB&<O; zRA>Psdy_&=CgXQ11z1{iaY4 z@dg)ANFhM6dTPX=sVuS2N#ObX0E1Nh`?05pK$iDzXEfRha%;QE{$`}N8fY(vdMlaD-OAz3?)kmO z(P@5tC)QdP^EHqzwUk_XI<9xmI|UsM_YvGg%IFW)aA~zS2{#KWx8x&0q%zO|O98Z8 zWjjo=ffinOSe|zsL2R!gFaQw9nSB2e4s(ax*$jLQZgkIE@n*aW6nGTo#K;Nvbc z)fJ|;N>^8ieAk&qw7h1Elr6!$K}gNJ#p_zt@Aj&g|3QCKOzNo^<&sw||E+J&w;mQh3FAgz|i4qelA{}c-G!_Dm3}eNvCPD_Fa(oFhhYqQ@D_r0UooH(VfF~s-PFcxW8wGpD zqQk3lu^PN%co`e-O;u4G?F!{gd`#sLXYGuR2|A$-5@jY`WwKRQBxCgh%>9>k8GM=*slO})67Qm^YL`2GSHvY3o z{g|FK@(Hv8`%-n7`;jO9dQ3MuW6@dw7)?;YEFCL&B3T@;^prTQbB!%pvGbnNI&r~( z5W<_@$OO^qz$NO0l*jms6+U2CW=fbhI7a5wQ!1PSTo{od0H$@$8w*C%FF1r4pQ?!Y z2Jkpcs)Ex8zGP=W?uo-a0lATRlNYXiI#eX_55*`%@1)L(NG=)6vYB$Q+M$yL6B~2| zl3qOXI1X@8Cv-N7+o1I1X52IiGlD->P+5bq_{!_ z3y3>wonCzR8QeabH;70v6ztctCY{^w4HtviHXSVJ-GQ&hb?~+&s_SS{gVKw2)*;J7 zoz>*ZR(f?ejZ)#|J*L>3r^53@XpsQsA_|s;fi7D4x;MGX=QnME3NB0dE<+{>XTd2m zIbrtb#hAC!2`q00dh2w)HczlqR-Cy6Dq5O0GP7pRNXHj#!kE&5G)pMoMk?criN&v{ zaYfNhYixFJFjHS)E#O32x2_A7#MfhzzQz-;V%nU>i}m#{qFN@j!b2e$@K=5zDnXa%9na zZGl2&VA>KwN9MH2KW7fingZim0q%uaYf?+*Kk>d}q8&C;4JX=~-HlfF<3rc`Ad@hl z?_XHn|CgCs`F!!=f^oThM}P33d0>!u9(=vO==S<`p!OH_2*Z+N`GPS_BV5LvfiC@2 zU0k$!{R4F&cO%FL7AgOa)y2hYfdIzesf$7L+VEEMNtN4W&%lS<#n2oj#|BVefRuA_ z;I=}W8$RGgRq!Cm|4FOQzhDO+&P6&W}CuPB*s)I10| zD2^SqN5{><2_1J`;hE5}upV7i(qGQGzh3a5!RpHe@(*+5e;%>?rz@I2j9X{Sl36TW z)A+8de4`oxVP#yv^oTGLr5S4mF1Rs62(stPMFEa^b9_}D>P?XOd8$0;%Fny=$jivA2|3y z+{O`4Iu3O6gl}@_~@T~>+k#rKS{@b5{`Znj(+40zGt@IxR#&#Kz7>u z9#;a8K#?5aHeVw)5IRIu;0F{$xVw*xr85deU2Cuyy_N3?Tkqg9f+|3A0D>VPhYJ1@ zKK>W~&d>bXJA?{g8REdVL0F}HQ^VFKkdZJ*_VAJbs3kmRNa)7b5rXoTZ_=exvHd{A zpkKdD&KY9>%!al#iVER% zXL=K#i7T^DL^yFu30M*I&`i zyXN@D9FfP{c)}Q)wr12!(;Qec2iHu&H3ZzvkzIT8*pWGPWT9|w%GsXu5mCPFYdymG z4rd&^#2g|4==-Zb#Psj$ykI*ox$Y}*`3-)>KVe!=yzM8l7pQ)l>O7zjO71;&m5#ui zu*TP&xqW;s=%Uv6N-8R&@fCD@NzdjiQVA_!Xa$A_AmSBIstpZ5X5c=J!4HA~9ixs+ zYXr~|8-0%-Mj#rL4lG-t0bD#R9wu)X8o=ZYVWo(8Av6GP1r{!Z&LYG+Xx14p z_>x4p?9X-hbOX+NtX=Vx;VTCxXA;0c6M%!hMKF0x%mj+4&{VZxK|%6_fmFEtfPOll z%;5ZKqK{(-5B%PdteZncOQ--1fY(pMphwVmL+hAxc%cEPWP#09MU-JRm&9_DNtaOa z<%wpgSRP>jPdEqaj$5X@mw-J*+!;#7=!+u&4d)CjPyXUE8LOb1880)eJ1UHQ9v+pn zz9iZb%0#q?vyq-nAWAW7m*w#Bm0>eGDM*{zTR^?^^p8CV}IXtdRsxi|e?GB?n zt|ia_JZ?du5)Ne8wS$K165#1)rZuJ+jb%>ffJtU-(LAQKj$tcrrjUt&YVsv3&^(xi z@%0V_KpL=AkcGh8LE;t+C^R(FkpfN-7B(<%_1MG+kpEn+iU*T~Y)I0Hf+?l5F=TG^o`WF#KJNitD(9M?QA9z zpRH*1ie{Qe*<7r=1o;kH&Y0Q`k}RG>Fo;n0aYJE;t1VJkM&JR_5xWrg0$^HgC;J=m zW$5z_&}`{KcZLXz8htnP%sgtj$h6jzoi(F7utdeXAnMow*AJEOU8aYpkPsAj2gb5u zV>!^l5uoo*mL{y^1TG|Qo{5zQ_*ArK;8+ox(#eg>ZZS2jb>ii_GNDHO+?3L6Ch!XP zPTm1>ddGBiQ{jstPfy2dQ#!`wFW|dCsv&vV3RQcKU`pXawwObn z$s(m^9PAC9bJ9fE#h6oyFW5*m!J&%-AYJ$-Ene_*kvYN7vVMN+HjW8wq6$8mH;0yz zEnA{)6bp;4@U)r#e8TwEgaKu6qe?9{dZ{$a%Q^_&~)e^dpb zHfTcYoiPX_iwxofV>(IY#`{nnZHM_x!~=5w3K`@D9a~; z6n4^=-uKc4hW~^2{gdJ_dHa63dcOn#4cMR;$=X36VPN-PmIrRx_%83u2Svh|XfFZ$ zA7Zt?=+GSm5c5#t%9-J?DIHR&_@(WSg9zaV6b!G!+)bMtJS7GRk`d}0K zNK*QcLy()oWC=7hZsCuUl@FxUAbJ5e)UetazY#MV^1Vnc-;3~;xVk`1pyk>a)Uu$% zl^0=r*ZHr^K%cuOv1RGtBk-HNC&C;VUqzOitEH z090ka?-=~;IU@3{0Wsi`oKpw-MJB6J?1~=i4Yu)48 zfIOb~WO;T6Yd;la%XXi^?_tYe;=j#xpHcPuw%oBkx&^Zq z{QdakVbcN+9(54751=3dp>P}AGR?=(06qji)?bO6uSvu_n)iIYrxGe`2Q9YATYpQQ z|4aPrufTw!hk@OCL$18=ZoZ}0zx8dti=X{V>ipku3h=JI4IKVSI{Jy*eJ37#$L+pl zHeY!+U-|dH3nTJ-^e1uWJBh2*Q;}JRj2@h%SJ17c%>m7&2=#965ogWY&X8O;3 zI7eLM4StB7{%ic~e~7z(@%G=K@B!m8Q@@82^hp=MXlXT(p0NaR!U`=v1r~FWYb|;K zuUxf;S6r#h~klC*JZ2Uq?&B1F8FrZ9L-IPeh0cq;kQ@1elTze|6!y$8rXr8$1$L`uOQ9B_jDA+o3WcQJraTiXk>3zI#aI!&_Au7PuZ_?!h zILZb@(VI;9jBniK5I)Wxx?|h+5NHq^_UN`Pv4xLE z!}p({QotBm{#wb;STJan%|h1}T(gBYpaG1*HA8U28pB7p>B`-5=FV*CBU>8j8lXav zQ9ehO0}*+y^9V`_w;lAa@u=}$dc}5M^1aug_3!@KcnU`gQ{P(@+WjniL2=fk9gCg8GF%GhO=OxhK%k*T^TT^VWsET%!M zQCUH3_rfOv4FIk>ldFNBfng7K0F4Vv#sIuPvIf8ffRExJ0H+CN7<8~g1E66EWE6KO zPNi!WF-s(ie0{|hEWrq5mkQ7TGCu=zg*ObF0I-eTY||FXsi6U4X;}jdOysn}O5!nZ zaZei@a~6PZL@t@j_xjmRFPJYfQIJnWDuQriK3r=gI=w)(;meoZ$t;;I0w!44+V7s- zZ62N$R=4Ago|plyKCUDAX`_3>;GTo=oeAsxsL+E9D49cLbFgHQ@{lPuA>&5vZmi0u z+kB>tNeIRgGoJ$SM#n@oR9H)ekiNwfYvv+)&}L*Az^kaBK}g#pHCF=ERmAoSi%be_ zLC6zFYHL!Vi{&U9qcnt|bfIvHowcCrfSI#;7i_@h0KDi%Xjm>ZHBqp*sK}r}OxY4u zvb@B1w!&*i(Tx*dZOxv*N6wf6IV-mEp@LaVYP}(d5DdgdKI{mmhP^r9F`x6EDGvgYylV*x*P(5?9D~nN-6aF59HMI|A5$8@zv807glyVI+9^jXq5F zas0P1QFzleSh^kIlAcQ~5J7mLuPa?&qu_SIItvpNZaQ8FiKHi9#KDM2;B!ktlW1{F zp#0!T;Vpu?I4n)MbY0c}fsE0IEfmUtJzxRh_h^5E+l)z9=p<}KxE2Az!zyeJrQM}= zdJHs2L{nm=&E%`jL>@IyMk%IcgEly45=CFS%4RA&P9KTRu+BBylok9|hc_H7#*9f6hw1I5W5kU|nZN3N{O1Xrvnc}b-*E@Z4de_Lj5glif8YiSP?Ch{k0g;IZ zzE}t(v<{1dt!%Vva7l~ES~yX79N{vh zB=mW2MQC)hTPIR;V~z}sTlp~~x9E-;eFX!ZzpnJnq7xph-e}V*6?MME0s$B<77tZh zC`BX-i2Cp~G=X$%;p}ytLp~08Lnx6L*AbHj8bD99H^5mpqOfCiF}`RUTd>S(h{;9U zK0-b5T{f`u^+#U|Q(uIt6SJy$crh)8fi zCuz}!$i=iwXxd7T8<2&d<}H-dk12}MlJb)b5(0W5&~c%5228#TorLB&4AfSnY!k|g zFZZ$s=Yi!Np}yt_6;%ZABkpfzPz!AyQxT{aMCZVl)Ap-##JH0FddmLWYntne#I#AA z)broWxvtJRrqBthq(_xr^Z^-srOVo{Uz`4i4){+nl<=s0?9&Ct2S)ROLFE$+<%Jly z4A-V$?^(f6`>VFEp&{qOpmI6aUgU}8(CSAE&87W)Sbr;jhQIc{*AD+fb@6w}+Fz=R zq1PYKp5Z!wdl;+zurL3>E&XM;*GGuwhhndf>O!{S$WEaTw~OS*+r|IF86|T|hp7gv z^M@|~;a4hUhp5(z!-eefZwxcU@{@mI^#Aosu=z=^^X1_J(n7ur08g|L8cK^{ky+~) zf9QfO0u3-DUx)Z{EsFsfMi-M%AJK51jhX*&UH|zF{pX|lujXtfK4%gt3Qr2f)wsEh z={ZEwzg{5m>kTEU^u*7moeN~z6lj3bYv8aQ#LV4N@eMeO^r0n%&_p}z99@`)&E1s@ z_wFpRrEzC;fzB*YC>TyUVjUve_Y~II#(^WVt_ifA=`Ckwhwt7GZ@h394(I9ev;!M@ zW^Q=_`@yaR0Z@EYRqwwT^#&7>sI{ZF*^H1U9pM!_U`2H;Jy$>9GpFaOf zVDGK8^Co)qWAqr>;HSXBkHJIGMZf3P;Rt#sY`ldR2pRx>A>@w}r+-bH{d@T2-^Ja3 z_V(X09k7F*Gu69>;M(u!d{>otSHoYBB(pmx7*+IhAVz)&YZ$QW`ojP*+04@brpL3vdHtxI2=L7H7J-kH$Yx=_!N)LiM zZ;486TEoi=bVbEBwc?TiS|WW&m2T4r{+7=%{UctF)Q5BU$PKE&>PT^*`|mznUQFjH z-Fob)!TR-(sz0Ke=m2@spsK@(BhS!e(X5W;i?3oktt zL>@rxWB~<{y+B9sVxnX=GWv4u)DL<0PI6U-wr zP7_$62$QQja8b|HksDUKIZrGlYXI;^7wuk!jnj z6N3Kmxg@_Ykq8uv(ME&M7d?rTB^W_!P^h-D>pR`kyUl~s!pc^>-WAhDw?C>QI8-c6 z=$x~5-y#*#p(r<4vPEmoM9Ud(+TiHrGjQ|Ud3^kmFVSF=P1Hgm$Djum23CFoJz@aw zh!}dH0YFxP3^4dYaKP(OE-U4L$#dUlXL~#YP1}3=ZLSR>Z zEI3$P1E2xs5EM32Q#xW??U*r=a9)na=5WVXKDtJ>AgWMA2Glc z6V0;dqb;>CHw*cyFI^;}ctfY*>b40ePYGO85)($RhK_(ZNyZ=*T2?kWtE14!`}Kq# zp=}fnARQ5^E(fd27Cw4iVfy{`x!-&<^}FkHqbeK1vT8z9!Sc?hyom-AtK&b1kKZLE zkdqcLo5n%JkGt5A(n8&sH;gQpr?hTp07Od>v9KU=4c3r1jQ2WjUUoJ{!fuZ21it;a zl#NAyaMFj?C`e95>@;J&tCWvq2E4F)f!ITW|-E`cX?t%p z%O{FPk2I|%P+l>iaR3Iz#Pf;f3QY5n=2~ibS1R@9EetMwfqdN^h*8mGac!fqv)|l3 z@GXlr-(gA} zHrG}XK_s3>mCoz)R#aPnKw$G1W~}%rm(hEo*XEp`jT?C2goc_kvNz^k zHx#6f&bq_xA?9*8c@Lwa7b)Ap*gc5Y4sn@77$s~fhaX1U!BT$+3H`LK_5$$#ace#p zYCmkvFVzJc@I%P`u|`(JWwJKin>c>OyuOeX=qihKWA`gAS3PA40m}%7+qzkItw;4ncMb$%l&%oT7oz zKOuj#UmY%P%2{VQig4MLHV8TorNxjbG<*zP{vV{pC%KE^m-$J67@zY$cqs?Sqv7M% zmx0PYh^Pw8$9i!dAyjj4(g?p?z{J-UiS*ZVp5I^7{q~CT_gB?lOqj0BJFaVJ^kjW8 zNBnWx{^gA0t2r0`eHAKZ-AR*B0~BbH%2*>EM|{~DY9S`56UydD*PKB9{?t>wMS{K9 zx#w+y!Ge_JEsS4$^DNZAXNfOQxRWZOstYvD@g7y#k8VEWzznUO1=ip@zvt^dj_$n2 z7S@?NV&rn`bG`+b$sXE^rLEWAl_x~+e(>OZ^zcWRo)zrUmr68YiDP|=sf{|a8VQB3 zXDFq2dF0qgk_fL8GOBw;8!q;Sq|NZG}@jTzF|(NPpg?dk?%zXoG&j_8y{-nQ0@s zeIGD>@6r=r|0#|DBp@>@&;9WI_g|m{z`ObqNndDy`1!vi?)(cz{LKCTp1J=&0!M%H zZN6pJUW+^5$*|6Y?A(1(y#e7D1o;E=%2l(p5Bw}oqtcA z|M%eG-?*)x#LXY2_4mlR^6kgA_|AVBCx0_yMNhE7n_~+5F!v)KJ;$~tUGQl)9I+K( zL&?IPGq(qTCfrcy?nOD5(0+gOJuH@ZNZaq1l<;cc*uVEULbagw8{RDB!}P z>gP1x$@1eiLi2tU+ch5mwu6T=e+Hd~a}B)sgXGLP+rAgseCc0)gmiCo?L}bu2~)f6 z%pTg3xIY}2LL0{5I*~nQ>-VLl=ibHxqIAoVJ7Q5Lz4{!V7{b|dxfmk#`6Ix8#w@Wf z=4qtTjeONRfS*pf(hE#g#kExedK=a)ao~LqEGhH@>>y8X&+J;0Tb9HoGA(w*NCxi^ zoQBB813Wx+2n@Wt5DUTAg$OwG;az*_w%iX;yX9%3pBt922d?4){67Y%i&T%%-!S02 z)t6V3Ni~%~J+79HTf~erQnEn<_|vX%cBlc+&t>pNl`JUTLHLJJI;3{;*iPaIaB&9!JT#DW1`|XS8XyJ)i-{5K{xF%Sz(0cREzbD1AYd&8 zt3PMr;z05M0*>nena016rc)@@K{qbzi6&(YU}RvW<*-G=1nEr{!_`g%Lwo_Py#;SF zOUDu7j5;Oo{(P>0%vCM`_=@MJ4&KAcgIUZoPK->SGXRkGCf_cjyTC)g&2`#ZjJ&jtQEmin<0 zfnTFVu-Kj9EE*QfQUYT!9L$yg^h4Hye-Z#eC5}S@ocD_kZun5xS$y(l9@*Ifs)eBi zozaRX*`l*OGTkvrg#{1n+Cih3rcyPo*byK?s!MFKOJ!Ql1d3hp6=fF5=!}IQRYA89 z$c~t3IK#qFIC^h@jORo3UaY->-8_iw&H;kP7b|*D7stoo8*}-SglvKbJT!#26mCgC zN}(12CnO|jVP6pn=w`-$8&$g*oyTYKNvJA=B_`R~LJ8U;DNWkEDkf-_lF&J9zJbPQ zq`fVC$nM9xB5ubk0>2iMRJlUaCVt-L*HFN8Ch!2oRSPe^(L28AygF^VF>k}o3%L$V zen1uBb)3*TzL-${_WJB^ugzXnnC4MUjc3dWm4bUng^4%No9hx0?@nN@MDW)wMm+wQ zM~rJ7zL5nJG{B5bM!td&r6DB9EqLir3owgJtr>O5$N&UfTpWIS2jG(Ue0*^>RZq1y z9a0KWb)}27jCOmt(8j{&t_Q_p_qu`#{zkF)a@ zA=o*(g>PU3hl^9$B^7K;VnIhKw1nN`w|E4D+!PoMw|dp%)B4SOneCf1p5U07A2*2_ z3SVH8ih`_#1vz%@aXQ`d7J5{^<4)JnEEw-?hFi;Y23DM?iV@6#ggu;7c>Lo=5^7v5 zbTu%oF%i^+%{%xR&{1{d$c#y2_Nh^7rtvHoz=5?Y3{EDH@BI!pZ%>$}W+uhMQ}%RxcF37T7h^ zq|-4+s6?mR7Jnw)+v76rMW^2pK->tfA^(`hb6w$_God|D{A$8@W!ACa#F@1>OaKp@ zDu@dKARwfMk;#) zb#XLM7X!Qh->HkpWyCfxfN#o6{ax5xl-xWZ z8*(mCMIQ_~|Iy*%(&Tdyp1x>W7`kzOkwds}<6KCKkBw#*wx|!4$(JeTzTD$BUVgD1sDKzG5H7_4KF$Eox``l%(isQKQsGF03#HFs^1zNVn2jQ&M87!pY(ozwBP>jwXfJE`y% zC!EPI)a*5*s1_>PVAGb}5>Yk`oXf!vQCPjV--^r6r2aDlV#lRJVd;Uhbc{I+ThA$` zKIdy#)4M#J;wvv0G^B35r+d%fM~830*L{M9GO{Xr*0CIAdr#0uo4WPSnLGcIzWukt zs4p~ zTVme<0#9j}I3DzfvvwDt;1 zR?u3Q`W;7lPs4WwPgtYBETmu~7(`|8A=E_+j(I$Q{>&0|BH+?M;-@X@g3hT6dx z+C|>?3F@EO6~u5KdAfJm6*TWYquUQ52|Uf)ZjgfHSnwk>H*;uiUViLBm;rRo-S7C- zS14enmY-AoSJJ_sB4>Y-4u6WC|1EOsZ!rBwPX8K2T6gCMe)FBU^+wu#6WD(*9ef`< z|6A_y|0j6z*Vy^LX7B&MQ|JE;n|=wbo0~ri`|sGTm%`R_5%O>K3G{}rDRX{+7{cWQ zqrYrP>LHNut+4SPrDNWe*S@va**pK1I{O#@=6Cw+Db;-u-uqK<`$xzCt+e(}lN3Nt z<2qJLri9vYeET(C6nkb*>&HeF!C(3HrAh}-q$nB-Z@&p`ehaqjfQEF+b?!+0hrn@$ zH(mx;p9Pj4iOq8=zYlPye@XTlIgsVWjvOO$^%Ri|ymf`{BN08vOJH$6=Q>ZJ+-#W> zSN@c(KkyWh621d=EyCPj_D45fhS#3sEdg^56awFT$dqp*0{}b`UA;4ud|srkad2qk z?E&?824@ijgEh8=_sN7k4VWxUacVkem6~*B1GbzgXG+1;RBU^}*V0IUy6(VAj_Jl7w)+^}%v2MLe@y%jkotf)LpD<6+?TTuAo=(mMUT}wt_YsV598UQ8*OzrM?4H^JVy|M;y zurR0(G=L91wu?4d0}!#iE0V+B7Mm~h17Hy*&ofNO!Vc2FLKItFXE22fDiO&cAPNnD zF~ceZz(jF|3*N#|1K@8rL;_G_6}JZQXUR+<2oGBzMI|e6wICSj4krd0z!w`JU%c>9 zU`yKEJ8d1DB|0mEkTpQ57-`h`d|{{otiiZYZf4hZmd@_u zKP)V7#ZZ(R%R1R0YFsCQa{=PeLN8#q$E7Xdswab%t8Kotd+vq{2SCA&?uga}{tq7`fz5zPzm%wQzN&YO@mKvP=UNblV& z9^XlB90Xb`C_|t#RVq~`;bI47Ctd=M-4%tqD~Hj4@W|PL!i?nc8*3;FCxgl(&C8Q0 zjRXRI#aydGH7`nhg%pes)^L$P4_cw`E3UW`O`}vWAiEtY(b*{)ZP$keJ0;^ zB^&l=)eL4ln^vHo%YaA#K%&9HL<^u$KtuA_3Ww{xc)L%>^GMkuTWn(^s28xKSsJ7r ze1U9~#7zJoe;!QIF!Bbt4^S}_X_eV5Uc`o2l=u2fB9G$_Mo%Y(>`9uSx_3$R>kJeaB@8Zw0L0#HpC zEZmgFb8XIgbl&GJIKP~mw+F%p&%O;e*U=E?2%+D)Xk`);3j5fsQEQ=mffOIZNkSXh&0@2rgjt;-h3x*{chz~-N~u~S;&+LT_Qr&J~{+Bp`@ULgPHbq+U& zcVI^2lBTp^^#V&QDIDQ(lXP9jspvRpzp36HLgYpk@3(}@k1lHOHV*- z#?9#3K8u!vW`D{=AQXgn2^9eispGG#MOxc|YCl|CAtOaS6N$CALydKitUyUa7anc} zGX~~{!f{pMM6l8mZC{j34b3^fbmm+vmH)x+{9=y(U+vBZ6wU!Y{{qH8u&sZpE@TAf z#qNAyRv8`~!o$*lU&dI6(gKeG!{-;o%wHcaGQV1!W21iwEV{f84Dg`GkQ^5Uy`R|q z2iJy=i}Sz3ZvLvB_X49d^!k6S<{exu2Hu_zjb<06W-=9Y!0nMc2XIjtV1))0RD5+8 zMt>ksKP41>f&^Wc?*oIw#Xk@{pAw4Xc7=<}%m?ixD}l>)1vx4`$bqXYq`>l6APdcisxp*mBR07bj@bwh|~Z{*`Gm( zR_+XHVo*@{Dzi*+&R3r0s;EQ-LLSXcGWs3h$jx_{OYVc9q=2xD2dzeI@O6#v- zckz_YnFeBrPuTUh{+%D$jdz$M{UE+CzmUl=Jxr*N&;>>`?jf9to?vO?MQG=Ba93u< z#E*W?o&1Q>fIrND>Py^EdakQUTcjRcyPZ4vHhJ_qb@Xj=|218^iBzS~zAG#}ifz3K z^j|X7`<@c4(vN^rVXF6haL;3RTLA}s)qw?Y;mDc6v9SmECQzZa$TE@M1|kN&3nkan zh)7N!*pvG%>~UKU#HFXWczD~80go_8q76z~#w2$x_Mi&h0;fYZAM(r3gX^z@>n}qa zulUX*clHoqeprCeX=RM`wZSfc{qw$>3AA`5P;0ONouVOuz_?$&W6z^?;ijW-i>%)# zuyqFCy^4|a7FM}((^L62Q8_o~j*PiOL;hHkJuw!~bg5lccvTnQbi?l7dPoAe2?2mj z{}P@+82!QEf6lBvb~MlF-eWwyMD4Dpb+xm)P0Aa68`xzydmi9q4=M;Aj8tPhbI|2+X_s+}XTiEFQaikA&U# zk<-8NyFZEhZ~^^u^!P8J2?d}5PJZO~-tarGf(LH`yRTf$^O?Xh(Yh~gyq18%M9WwY zK${0_=efB04*Py#^T)v6&rx`gPW~J@_>o_IX)4@g*S?J%|1GrtXMXt=Dt^CI1;3nU zt|}-rIpCdXjI3t%ko0}bl#g(k5$dN>=Z?R7FTVS2;r2fl?))`z{38qf20zv6UHu`Z|PaiyCs+w_HW! zyzisNE4=!gZQgO^59NSC?tm-;UA2Px>aWz&HC+Js+C?Ix^PxR+3BW4_6eHKw;^5=$ z=t3K?0D)x$o0%iON1%|nbOf-KJ-r7xfy!ZT3+sQ`4g{|k-cFXx3C>E6ynH6YpAI7v zdi{VBlI>5GoA@S0P=s#Za~1aW{uUm#1gQK~17Fm$Sq+I%Fsz|b(~G~&Q?dr|r?JMu zBk>FEoIig9cDoWLTxb>cxPHMKiYbnEs&wkTz5T4`?LijxcBdFEl_558Tg* zSVq1Bpk@aez!xyHeqh<1p}aR=L8uQ_b0;kKLfQz6L?Dl?F)r;6kahe?g*{I^`A%o?wNHz@ptmfv7W5MXeg_O^__eT$%X@U^`U2$YyGEvWn-_ zirU~%$r7p9Vl{iB3Ge=l+y9NmaYOG~BzQ+40hfz2kTA2d3^2n31MwszY;4pFratzj zUbG^lktM}6j6t7BS3HHf2(rr7VgBGOzPckdmVCLIH&dlkWmw_qB=|p7Qm(~?jH}{w z;7XK%S+&D+FP{r4?gUKy2sr@t6NRS*?xPtqz33LSDDZ+|%bzl$2@A!#=_XfM^EbAA zrBzU(TyQ|i8`-WI3G7)+(jF1@w|IX8 zOOI;__V+jokg<{@m^BN)m?8&)2zVS>5x_kSWDvPqbk(5>KxL;LT-ZeUQG)<3%_MM7 zI%L^VqsC0aW}|XkpEq5d(O;j{kId<()i$LWAW?LRN$?BlsW4DQiPi>Ct)Lspxd;&z zdJ;4M-X7=*kez1UAPNcsg)VMKFyD`;Eej5c2&d2!jFt=)>|}BY9jS(C&&_EF4llvH zjZ_h=MU1!;dA8C9ptG=dlIm}TYF#pl3g;LOVs=1>VB887-BNMJ$bw@l>l3s%vmr0c zd6Dd#m72D|e}Zxe99Yn@jDWkJOk{{y+>GzLNLcUlK?A5fOnGzPUs-bDniOw%!WBE0 z8lAIT8CA}xY_WW^vb?FIe4b>wdU9I7b3c1{P5{J7ghmbgoGqkq#+2@ajz)K23VtoA z+E1)N0374N)q1c1Mcd21449aH9mDCl08U%*$j!T?IlJE(DC6=#pvW)VviU*c5)r5Q zW$NQN@FAxdII-Dp|KfR-a|$|+UQK`Z3D7X3Pp_Ij7e2^t`0IQd){;f z(RpMKydeKZi$)IkT?x*;Nj){9axFT9X+-d?f>kX2qxJa*>;HdbI{&afA3A&n&YXec z{39wy?$sK&Up`FUpN3g02dM1DY8=j-0Vn730}c&H*isLuqk|K{J|^{n>3?`4xR4gI zE$71e^1+rfa4`*lMMHIg#|J_V{-6tK@d@4k()2F}8wNg~k8}JG?LQp2FFvJ#L>buq z|DJ_<*_}L~pbiVjhEd%QU)`tD;#b;9{sKRG{XfC8{_12Qe{};x)MZn$`~?o;7K3w& zZ1k4}&(L%<%n)C|Pd|3IiTQ0Vz0Ri5Mz_jjw~So%hMFJM2WM=FXcQ9xQ#cM)nMuX!X>i%9Z)kcn)}cpwek{^y%X5-7W%>v zJbi@u(zo_49w7{r+iwx2^#c&O{6biL9Xa^PUc2L#s|FtM%a4SWN1>f>ftH5`NFRQu z3%37{tJ<&T-6LA>BAM2RRXd)s&bhC7>TBHe)lOWQ9Uu--dWC=ijQghOwpv`(g|>XH z#~AP6#t!x#hq3x?-1201e3hGG>yGRiPj49lZKbyi>BefTK*rGOp48keEl0I-?!C$$J9jzIKYp8IBJG}E4Pn4(eh=6$m z8U_NUi4`(b!EI~t#9YGkf1=AC+iSNS)mt{e-SdYKP8jild7-dihSjG7I?!#Zb;sL( z#H>DXwC>+K60YO#L&x7mPQH(w{un-d@9ExGC3k$w&-|OOaerW7K%B(ubYyHZjWk2^e*4fNi*(@ zE!wxoR*1}IXz6Zj{V~eC5Hg9Pqxa~$#LXWghu;Nu--Zs~r*8kL{OsQ{cmEtc{!ZG$ zpZE+0Gd!`r<|DjAJXM^n?%E6Iw(L#RX2U6jL^zFuK>5_3J3(3lwYxY~fgmK8;uX%^ zMRaSFpfbQkYfQ^#ZpMa6f7&Rwo`kEuV9v&iTNKrcc0 z7;qsNc+kv+k~>p)b%rQ?HqU;o78l&?Y`ibuZsEgZ*?RK}-@qZaBo9EB4*QY)2nNAVVt-ynw$PXY2x2@KiHp%pc7i7j{e z#9c*u_c@Iw@4}uQF#vzl7F#xo6(a|lOGZOt2n?!8*s!4ilK6`TlOY_-bgF_(Ff@Q8 z41Z2^(cuH^Zr+TdA>XW?L}Cz51jH;YVggBk;T-@A>sg)aQw;z=vn!M$6Imz<6Q7hd z0E?a|-W>u6D8ppS{>G9mkONH~*;=!Z0Mf?51Z4ENl*a$WBHM^|?0K9y+~#5L?~~wE93pdW%)QQuo&yfksoTRQX~F521*wdd?Y17{SF4$Qq!y zaj8y^w%&hD%lP zF==?aQzar-<(o^fwVm|#VX(96gBLuO13*)*0tlu^jLw+`o9_TW!ers+fqA;&PSzap z3X!T)nWp^D!5GC094-OvzvvXEOq2?7Y~UtA#E-+gRB|UPbgsph`(kz7TUhp_+eE5G zfrwh@iuKj#@?Li9CVmCpmB^q^u0v&dM53klre@5t1~4;mZ=^y7b5=I2^>7&dgJ8DS zx&p&j3h~5`qe@L3|biHzW<8Zw4y8P<=U6 zU&6y*YjnECr;Jy?Vp7>hW!{SiQ#fib+7Du= zGLXtWUl!W03=IHLI*Ed0D>rZDWaF0BIg4aD3c{dV*^t!>2`Azk1FPr>HGzHeq{cJ0 z2mxUEW?J{nlxA$fIHj`8YV8X}aK7SlgNIo`%Y*%#6qYF*q|b`*CJw zxm?W56be!>Lvm$Rbyd&Yxv(>~w)@|HrhSeSnOQa6*X)=~85tqDA3w+a2k-m5y0Bo3 z#_q z?)?|)SoO9pr1qBefx13WQ+W{7RovNDvb$7SKWH7C7dH<4%_&o=5Nl5X3ZMt@=F843 zh_M>HVN^pBTT1Wevgt8bFtW}P;0$Ew+y-Q}+Y-~D!iI~Qrdnae*yQJNFnZT`k`Q=h zS}$Z+i9s+1Yoq44B~)f7L+|ZQRf3E|aL!rZ>X1DMN@*?I;0_&P-EITAwGP@kNPm<1vE|Cbd!Sj7eZg zh3lWB=M=mD>jeFi^!!SnbEU8sYvoU6?$3nEt0MlYJpDy#@>hfEzp=D_(*27O1RPgj z{(nC{=jU8asV|R93g_kcTol0k&G`IhPR_pv{Qr#Lyqd>fjnDu6*5X$L=Vfd0*UJIq zNq-$fb`{h6bHj6mF8!Ie^GV@@vEfRS^Ggx`zdpfVBEv4z6)sQsuieg--D2;ThxAvL zhF>fAPY9sK)?c}$*TCQgOY0m^Xae=UKz-L&+45JmoW(6iann&;mqVA&ZK%_$>eQl) z3BA2UElcjKZ}N1{Fn_h6Y_Tvi=i3=c@R-ao(fdHlkl}iA;I>bx}^wSq^aRQC1>v$m;75|9tH& z5m9KtEuA~$nEIw41ZE#5Hs1iL%p825+5Vun}@NZ<31_9`c?t zi>k=97J_79!&cdKHV>SQJ$rS_Qrch`99?)6UwRUpzH6!P1ZM9Eix+5taw|`fkt7!$ zrk0@~SjrH#0E@di=?%Y<~yk*X-<1^ayyecs*k4(v9(}v>aWvzB% zt{&0@unNEufCLDn4}{0i{Ie)$Z{dX-TPI5rK>LvO5f@G0clPd@S|?go0hI%5=giT& z>zul0ow(!Z-opxPYoGgOFPQ9lk$U&;IVbN@LuU@Z!HMgdyicd$o4#P`f8_x7%{?Kb z7o1UM?`z;NplQMj&;2t`fC9xfKEmr{(w{m0ed_3kz~;N;;Sceh@BE8zg3IrOwf8K1 z5bh^-Ab3Lm{FvJNfrH(Se+35UHzisi_)YHQ`{LP8`QzW0 zPJT-7ejQwX?!iR6{4%}yF~0gfy!a-t@Fu+aF}?#e=sRr3vHfq$5B}15{Xe^J{y(i} z|1*8?Q)Ky#wQ~5Cp)g{rNFCL$_m}-Ej=Urj@Bi*{3f;eO=A562HfnvNmLTD!QGK$MmanZ(;_$ELy-iy#(O@c60Yk*+yPJDLDuK%KwH+-H)=HD#Pz zm3`e1>o_+$>KZ0>U37++Fq4=Jy=8CgV^r`>-XTN+UxBz2Xq@0PW)DCTA1T_p!Ukz^ z+@3gXh=3sK0bLNHAo`Ze>VF&B6&E>~0M5>_haP^Kjl`}tI;oG7`!TPNwDh5x4xgSU zBX`7<1Yx<7;2%j-HB(lFvVm$BPAENqHB~|3f&l=Xl@hX}cbF9ju z+Ze0R18AIK*yTurcrZ--WwsF0MzIHw`t#SdzTZe~gZ8K{Q4O@`Qwv*}rR~h}c6wx&rdEz(AEn%twTWY z@a2%^+K7I{5TuHA=9s!+L*$sTCVRR-Rc1}n1IUa~qbKi)wL;mcaB)tkE=8KF;rdd5 zK-}`IvoL8*iD|W(KoTcwv@umZKL*4>4MqtI|xTH)?&dT~9!x*h4x zxr+@G`1}Y4$~1>FQxDaq6Wx^v2+_tIZGfjTMfGnlOgM^NS8>vd@wYq`C{2gR@r_m$ zt^`?TKu#RldWhXfqZi;nQs11303d2Ecu@PKnn<F1rC{SB83bj$AKo4LJ7KK7DfI*q2$QN#z2UmNt|!|BXQXgM zZz}A48n>@JHGB4K`s8tY=T2pLC(}jx+=Pl_^u%&+&Tz3ugD9HI-i^04#Rx$~BdVpAKF4DxxIgNdO z%o^^~x^JsoU&*Xrj_SV}H;ibVl$bgK^Fk?GIAaTEwXPUKpvyR3fv-1l9uI1+4XUmW zDF1z`58c&#lobn#ct+_z@r}ZBe5?!@qJSOTi)yRmGkzxC?b3l$&}_XhFQ0L{g=3 z0X2%pxr%&|8{--tgCkydC7Zr<3$VXi$Z0G-I|%@xRG-2)YVu@yt3XAij_8#E26>V> zn$-qz76!*{9(FJNYAf6)nl#8!LTx(C^_J~`6cFvvN-Gj6Z?b3#$NZ)0{QU>ZuimV@ z`)2vgcZPK9mKL{9)0OPmVvN8ugzSdOU92F<-ePWPGrP3qt50$xdrJ*#B5M@l`RV!O z#Eih2Xky6{Z_qaA{1sPf(w=Bx)(0eNjhAQ?k^0bq(4k4pUZiMBhnRa!!h74^&?~=#g;RaRkI<~xv%vrSd19l37wk+V(%?|NEgMH z&{VmT^Z-&_U{o8>Ls(085YCD1huJqqYVwe_e@LS?diC~@9ZrA^+dvc%5rR6vR$~^s zAs{4b-E4OWT&yu#2-l|*6N@MbB^JLum;&hJN;L*S23x#ZpWuiWPzI{OQY9)HADcsB zwp*$8F9P&WL-b$f`XZXj)Uias4uB)!;Z&nsRyBdC8S^NT2{q)p+wKRyUk6$ef zpP;3GV@ggmcwP1q&Ao7aCtTkR*Z0DWeMe!-p5Jg3HVue_6RRWs8A*6rn_f2NHsK-a zvs=c(9-rc>!p!;n!$rwy5v0SJ}B3FPU@2tgKIMWm-oFOUePOD!__ww8AYtGd)1oLFjm_T~XO zrc^)RChbj%hI7JYJ)&IanRot)ed?ia{;7BNv1{tWJNqO!|C|{%!XAoO&-`=m+%qpi z|Al7()Y$V+J+n{!i(=_7!XH;(2dS7**UUbSZ-1a5!^TRV0E8Ydsbhw2;h`G^KOsuX zFA}@oh{BSM50qsnC|uQTx}9Mny@WYKX3daXl6cz^Pg@Xx;f?;@(f~sB63y%p=CJz z@6!iAaOTPG4Q;-K@)_Cq;D90b?{wspCSGC+5PXM zYwyELZ^O&)Vw-d<-|-U=ASF+JpMUUgm1qBF=@Gc0e`D1UU3m@b>81((4>R)a@5Y1u znz+=O8#X3}t!bIR<|aOJ;u!cnk|!Sx#_F@!#*5tHhwAz7i>Ke`kH3dXgc~6QdT8;5 z*aHCSnYzFRO*#P@q}2ZJ(+9s#l6toChKm`LKFcdQ0UCfHmwJ~3u}5*%7i?PQABR_7 z$2Q*sQAItK;8=g30-3t^ed+M`!Pyt)>X{k;DCGUs-V!*N2e@lgcTb!rOfO_=Y0=t&xz;} zXG7II^>*%r&@3Uq>m0jVM~IiwYp+vl*d$(sXt{9)x9%DWJKQhoxEO6_ru}FhINCVZ z&%6l3>O0y;5M}tv#4~u=1Gw@N*h)ntH#SIX zXzb@6fM$T<6sfEz0{G@r55VwIX2K6ZiE`Nku-3*~T;lUOQ0tjuWwD3~r}Y6O%|#>? zzEU$bIgkCok!)EBCr(rh(Gnv|l|3XT7lrb+RGl7x-UIJ}*aMieBz_nAY%wXm$!y!( zT8PbVrj~Z|8%J1UyXTMRAH7Odx4=9W?%bTuRM-$6vq8W{l1{q0SEcOMaYx(K5 z^aOLMo;aoUr-?oW+d>2I<%n@W8djLnO5~=kH)2r!;MS`waXAl%H?u?9G9;#5< z%zmWObQY?{ct#zJD!pN%pwMmWJQ1xctZ{@i_MpX|a7PQFOwAoD&=shhIAbCPA!A|K zpRcMbsCshdPkcN6O|z1G})N zJRNE-1e*)=1MV_=hG}nQ#$A}w1uypihN~W6D#Yd?Uc|rajAw)SDkRo01!$`5i5I<4 zL3zoYkx`{}U|cWNIt^S>&L~n1#@HmnIuZn~0mCWNYf|n5r70|Iv;2upE{jKZDMBYu zpAHr$fbAgS;#pwgY;2tu7WbkPOEd}5`c$kk;ZIjA5dA?`xl?*qMrMi(seJ=VcfZ2H z>pn(pM=+c(3o=jbFN|1Y{f5Ah(LZGH+*De=l<072lb!}9h*rc*OO|g%8Z+_E0>f#9 zUVv!u2B6r6k4ui5#N?M4u=)B?IvIU2+7Dl{VhLvDmayC`kX5BH3)qf-b3=B0PEis-&a2mZ z-~G7t?N9Uox>Vza+Gh?otr6B!)p1J{ni!8fP-^(g&2X!iWaC%w5he{`mJ8mR$Q0+6 zvOV@fGl_|1Pre6i=kv5{^;w59DWbkD{Yz=DcQXAAA-tPn$T&Uo*@cV@d z>3cftwh|MG$Y$LCcv=+BA-P3naJeE`y(`SciJMtt3SH}0;7%=lTeTLy+~5i&D@KO>4#8jQk~o%} znC{mbRi0q9+AYtlv-u$t(@6K;s3H95T93d z{jZ1mm(ruFxU^5{zkeIfb=5Lm;egh!!nv-FOSJzLL+NLi^Iz+ZrcRRW{Z#uf**fr- zx5cBf<11}>34hIQilgW}D)R%1dyw$j=n}XoZiV1o3WCMnJ96rdADwEp=*58C&Wz7y6Ak=$3L{ z3nZnzb84&Xsr=n>!f`_rjLFHPHDotT#a&11*w#F7cTU1YP(ht<1EV~qurQZ)h`1sT z3s#9Z1f6~aRNmP>VWb_Ne}c%^&3~dlAx)|GfC^r;_AWdNVnW4CiSB=q>hP6VSptn= zki79Bungz%B^7^Y^;Ky7HQ$HV-b6OuhSy#NDZ-Xt+9vM0W*;F35{I%=7xu{qzLl5I zBq7G6cE80}U~S*UH%z&iK#sEdR#t`y@Wm zrANi>SFO`;If^^4d=rO(iNnekyMh;)m5coPMQQt4ar;H%_}kdrBTz!R@T@v8Z7Xbo zo+Mw^+q#pW;GTXEnR}R8f0^6=rgHN8%E5Qh>4�`iwn$kXoU}b(smEX}6 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

IRKhAfFxEL}rygOwI*3rS(x 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�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®+!%=CPr;4b#Ot{u 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≷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⁢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ˆZC(C>*&cyjH1V*LZ1Hg8g7KX?FQO#RWaZjmgB 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

-RY`yIL9gI?Qj%29Yx|vN2CArmrXTaBp)+St7j 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ℑ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

)DulBA901)u>;r*&c`^w;9eqv&8Wqp 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�PH)?Rrd1{|N&85=Ne#AiPHah`Q}k>kG)SG%Ja z0=0P@5~>F`sYXBqee?VApV48~^i4jr@wCn#U`7 zeC*6|vFo4PJT+<~aijjFbn4BF9-a2z9CpaVHER7&66uXnznK!O-d&Uf)Qkab z^Ux9q;@w)le92Vc%MnJ*WO^F}t@4}WE z{-5JS)J@3-nIiuHK3oD2W70+jc|j*Vw>((}t6ICwBQ4^BHL$N7(eH%V1Gf9;ACJcc zO5azdNVP~&9KuMek_H_Z<+3|4{{XLkJFh~W`|obk1)Y#ZI!F3hl=BA9agD(o325qd zwGd!P#37EyA(#a?8*S7M4LBy9n+j^`HNt&FU>JtsaM&39bvX9v-hG;&+h}T7SnbB) z;^$H$Xqz6K4YwZN<6*xDL#;l=ElBh+!4!;Q~Uepixb~l7mTJR4-xYN zw0YZbRF8p;$GG?7HfvJ3@fL?9`c%3&hB%}dawBcWq-T6%u6?t&2vU_>!ItQ>h6`&1 zax~0&lz>1vJ$nFuJZlV!K^KG5LJB;Ij>UCGcl?0~RqE~`Q>%}n0e}aARaqsQLeHZDj)upRNOhqHqF(ho+ z$y^XiAGi7N<}SqZ^vlv$(=AGr=D!&7rB)acFI?yGkL~k1hMu~0I{H?+%PL!Ge2K~x z!v{R9I}DC({@i8!Q%1hAR))VcGDBviu1R4=Skz#ZEDmr6KtF@VzVs1T(y3PS(PXTR z9GuKKrByt@FI#CHuX2~lSb9q zZ9@}A{)}_rdO$t;4gN<7UuyQ?k50TLjc#*1Q?SUY2qgN3`2PUE1n|RIq9t1Pn(mk@ zm0(*EB%MHFK38MkZ1H4TYe=xsNj+(vE0V;xXN{K<$i(f8ZJgl#eYnl|t6jN9-3jW& z4CtTBdgaR%+m(PmK7$j6$Se- z@&*ODBFF`p9>fq2$m0H+OX^nOZ5FfAc|4h9XLeS}iCfajd+*!Ze!OXXHKWA@vregA z#c>*#jiJ7(EB5_SpT1&jq6$I+iR&M9(>QDo&mMS&NX;k=-%>@HSzV;xV#IoedUV0gdU52sZ2EtQ7VIpRdvbE%h(ITo zY~+A2Ki7h3^$Sv$>EqL@-<>?kXL#Xtz>yc5AoBMk82s_7&?Rdg99i!?O9+(mnHTjS zYyf_FhJPGqb-gLI%{}JQr-Z>?K+ETlu9F_Xp4>O#>a8NQP+gb#56k4qC}l25+c?{P zQ=A-*8z`13+p{^;EJI>K)@O($NX_YFBP5>L*bW7t#FllBsdt*MBq}Y!Mk0`$ZUH?2 z&is3+Jern`YV=i^Zo(a0Fdo1Xr`tRG_T!xbD-c!CBC?T51c>VHGBW1}mn8ScPA=dp zKCI0@QO6@h_oK>!6(-Mixlw@xeQ6cr-!Af8BknN~|mV?MbC`*g?Lb^Z9>a3^8v zwCA~EDXTKANZ3wfbs5TnL0s>)d-2_R>oqWAQylnrYOlIW%rc~(!P|nQ(Tl4hmoZBr zl2r#Q5~}w1&;DnLGtE}TST#zH?(1dYiQsOCy$>$i^xNBv#+0;qFHfgU6{##kGv~{Z zoDdH;=+D6IzQ>9>gb_^?a#ctpX;i!}4g|z0<{2CPzsrc)?2u{{%{!{poXV1{yM+#M zhR1C0`3G(XPV9}TSfw_n8HzI-QIX2zeUM?0jj){vle=I8R= zy(NJgU}S%n9nWM_)Mtn}wwjS5lzSWvvyA@$PD$adPP^B^kyxYI=XQe!Z~2F|z#I>5 zyi7=vJ9TvlA`?SJSV3YljzZxh%ep~^Qox2R4{{Wsm@f`*666qSHTP&QiWh_KDGauWs)HidVJ+i@+5ED zkI`hb9NrFR92GD}(c};~lM3Yu5gz2S%|%DLD~an9Rgvh6kqIKfe#ns;cTG zAX6#2kkfl0N|G_>4a|KY9)Oak9~=_&5NborNLG0vg!0Cj=SMpqz79{u{3?EvS%S2# z%N&u;CRPkKY;z9V;O*O|4%gA)qcrwt%OrBk%I>V+)J_Tgv$qZHonw42{9{js{aB*& zC5)AhH+(PzC1NZ;J0|CUZfQ2$}5RBAUjCyunqkr z;{^J5{{X)c?Iq1uT4<&bvR1NPx&2I6J0D^IKYpJ4BjQUpYFC~B(!5;k&YD87$IlO0luZ>|5SZ5}#F7piILT*c2@?c1( zV58sqyOK}aij-s0b$<)g<&GH@qmmfJ{<&s2sLN6qr?03)Jo6L{xavGOFPVqZg% zE(?->AcNSBEbDYE$)dFyPZCQKixp(%D#dU&CpioD8LH7) zG?Cq`MsR`K7(G8%-@bFhu?S|ZW{$H6ZAvyqSu^TjHvk+B_B}s50kogto^w%|>d87P zlDnwpB<#J;!~lQOf?S5g`ehicNUN9vmjHQ*Ha#SeI^<*LJV#z>wkkv6=ychnGNqW< z!wWArD=U-B%sY%@fAIFE(YgvPThCl5yfQHk|~XOWsxJ1 zN-FaSQ+L4|;Ez@h4MZ*Kb?RD?g>ob1U`bgbm4WpFdvw_Q?Zet1N3jL{B_6_*l4!EM z7x{`#SK$8uq3y!jtkrbwMptK=yq3a7jxa)UhB!a+oyQ(su4SekVgQB#AV`1#q@U!GzP_3QHp<7U^W|B;TS_U*wG0n@4r1xG^)8mIjwR;L#L~S-E%!Gciu>@mnhxZ&q@l_ct zq!%D&4L_ugVhnB@Voy*G<9)cLSc_T>S||>MW)USOm6hjJEXF^T`)6*PZR!62y6Ni@ zt|O}aiRUrQu?>m&IL_Vi^Ts-N`h9fi_KB}*^s&Pnu6gqK!NB-A?mKa7#Co=!^^wJD zNn-vNDv8ybbXM3%F}q{i=Z2x>nKbPIwBL z55OOvelwHVo(ZpMb*VvK%~y=Y7d{MtoD37x9#Mif1o5DsQA-Y*f<_=RqPtjMSy$!? z=zhRs@ObHO0(QmtzPQ!?lDu)rS>G~QQ_Ynb^z(b;1aG*=<41b5+JA(^5Xl_WUL*h` zH#`Ke1&JM0XTCV|#IkAf0rU|s*I0ioT0%o}^O4RQU~`NBdmbHHLK-QcQ6;GDM92i?s zs)9Ly*Z^_5kN`h!8N~|CGOl#mDog>3T8zjEhapCzq9Y|)g7>YipKXU{@Q2-tT&e*2CUS>V)eUV<+%C5cgHRwvTz zKp{!nlmUQ2_u zg)t(yxA6KN1?EVlXU zg?ShP%G;81dIQrNb^YGi$36;cl>9w@J2qjtep#nZXiuftduJcp+ouQcMJaTRL2xDV z?V~M^F-td?ppp(V(-_~_ci>vmPg_x%{+MgU1xrX}jzh`mU|0^|`mu)jIpEN0(Q`pH zuO)RWDrNeAEP}Ey>dX)6O`OV!|ptVRipxN;jIh{!BYQNMg=JT0W@ zT6606wMvrtv&9)nV~-wJGbuU8Ui~=gr5hSE-L-moo-*oSk&bx@Jfs!wPDf8+#$BM* zs`#c&UWD&WEs$n~Toz`}sYvKX2*Kiz+S_YY%jwmcf|*Le%M6iE$S?>eA7VfQxX&MW zJL#`@a7C!1#P!rQgqgpY&yZIGrViaU+k)zngF?Dij-0uV5l0cr6Osu)I-Iur4@<8U zI^6TmVnPfaK(0wClmz4MssZco*Mn9CWi76(+J$+hc;<5q5UQL;z+kaE6S{Y7F?p{QdiIO7Q8>Yvx+< zz>tX58UO(l6hJ< zOQdi&oZPMHb}fQ3J8m*NV~cux5`8mD6ts(mMVU`3=LeJ?-+T_Aek16T598XLQABHc z3Xof#CXt&VmAey_+uRN_rtn8q@dY~Cf>=Q#J+)Pe2$LR$BP`(bK9SS66}0vGcqF#- zne`Wqo>ozgY@gBy7#o9}Z=SqnG<)$UiYnz> zkgAEM^Wlg|%vY4|NIBma&N4s03_wx2ZjD!Xq%&4|N*I~5%aOAJy#_%YJA84J@#K+5 z;w>8WI9*-ZHZm%Vgl6l7-xxo)7NLssYSx*b%&#<$G*T*hk?=?u+!KuL`}=VxO_nWE zX)bv@x`cLu%>Zszi2CWDP*g1c}%fPayu?nz7Br=+!VBRo$E<8*NpuJTum^C&dlEk6et3R|Eb^?%;~<<83la$H-{*!j>i2X%3!1PAZ!-CTn6N%_D`0|q zAN=pberz{ng2V{{HKa#^6>M@TU9;>nw)rFS4;?Nu0*KExnKS~=oSsVsfzzAm-Ewl< zZoPpc+kw;*-_n~(yU33qRcwxJzr&s>&K_~2eb z>lV$bHjQXfp3fM-RvlFDu>&9Lj`*!ecEY4E$5J`G>IxPaA>Eq+R{&#uvAz#(CehR8 ziLOT1{N87(0QIZyVcXcjm*3wral!n7{923{DBYbCXZW{2c zmL#`v97P;HX=w6+LnGz49k52{{sEu`%pNr+oeM+o0q0 zL24+qXeNY3D{PX2a8*@{5(iU~agn!AzYx4nAddA^mNlN0g3Aobf!$q091LKBG4cj` zV{^`KCZRMh3VDf9g0C_DX22d(kDi|R;{O06S}M^lk2~6k!qG}u;}V0IN##2nevyN> z_TmjISL)cYYGNd%5}70tFlUq!*$POhRU{Ii_Rmm#$9^LhG)+dZvkX-pRnzBV7{cXFdJT?1=zdOk zYg`fOnr+=>fHnYCK#T!wZQKwtPI`O%age6gwD)?I;`1t2l_W_r27O+TztVf`dh9c} z<4LPYEzJsBa7QRv;xc(MAO%1pIUNt&dyW_@jVAZjpfg73lFS?#TPK$tGB+dU+#Xd(4T>H~}%b7UNl*d*j*za98muzeCqTE(~^=Mu!B@=K}Tkmqrb ze{K)rt#Vp?m#tHl-H|fT6Nz|$j9j#c!s&G1h(8zK_V?5jT$OmrRF$oNfES4{8Rb&tZO5h1SLm1x# zH~gO86`>1{{Sb9?}9DEM%9IR#EWr!{!%?h zn4OM)t2xd)9yDGinmQC@Fv9OVV5Ct-2<25DsAGMPw)^pKDIdl^!{E}yGF6hnmJkv( zZj5&3_dWjrZV~WCkuHhh)6Y7A%g!=-#!t7u7rZ?*H+0x8%+ZNjHc-Hl0650yeCLJj zOHW(UtVJAu&9J#MPQBMp`xFu*Am7r*a1_NF#iVcOLv` zQuJ4JNUT?o!WuC%D}YWqkjj70*zqSrYZ2+RD_ko)>CFj|$EY?o2R*Tlo%8L*=dE5Q zUT8BkYEPD_xlPmt?SqrXtx_gw72d2Gg-bFonDa5^W;}yza|75D*M(`@u-4L@zBSpjU6IVilOuHbG5PqFyp5urY>HPw>Syq`qauQHxu zRKCh~+!51@=IZ+4y`g4Tu{WIHmW;#~pjQO2IQa*!0C^2vOiB8xlj=a{mOgBAf-}A` zvH9S$*@jtCa${Ci5lBx)%Weqmwm0p~!dix#Bk8lc`InF}tHYkuYrZaxgdeARpg}%>!PiQdBP-%O^5L zf(r8FpZ@?3Ngr*y@P~)BS*%->7`&+~2a+;-Qskdd^s&er4~@US75qIUHtb7YYeD8_3|}BQP;f!{%AOn5 zk)YFWMHN`p}kqKWy~a=YVVe9C{Y1 zYFc{_Ii+al{LSE<+?17pE!{w*LSG53n2;nwj4c{asxahtsm^HHq~)!hFE2*(;pj{DbYqnWarD z!f=B}&xS~cD`R!ZBcb1Jn|tw3z|}PELaQ@C*jTw{h;E+@I^gF!js&%!ndH-FyDYKR z210qTRZEb_M#s~f=N+@dc6OjzQPwK>c7Yb6x8%Q5o>z?IFQ{*jGBJ$p@yD8#I}++~ z+@l)G9AnN00V6mh6Wci0@$ZLVw-p&Q`*Ac-$ux+bq5QNMWY4zbANw99L8{q zF-nm}WUu_d3Y8n<->LZP#(imetdQ!|mOVa5%-&Bef>#VM!C6nv4{i|FDcY}oI@Bs8 zaM}nYFgLC@O~a5od;R#!_!nNKZspBC&uW^JtBBoK3>&T(4y5D!xYI+d&EU0)ZC1)% zis25DCelW@0OvaqpKorQSAjWNqfeJcmX&9S$Oj~&r!1idK!1O3GL|EPI-YNcY)G=i z$LZ2hl##+@1K5n7oM`lILPM>h)?sFin1L*hx-dKB{fWkY+zVIH>g$-VC33MtFEY0% zWs!FNtd3rvo}WAuP2>?Bs~}j@-Zj&uKqZSiD-H6V`9I`1d9^(|&#g?Ut7ya;DCPw7 zp&fzmjwEPwpGNToivIvxB(%(~4M$#OQOlL(J#)YLaJB6&SJbTE)Gf@bLdc#TXIEtd zAIm2@Z|}Em5VqFfr{X%gUC93c-rf~uT#i;N%ou~yrcOS7IH^up)WXm&nG=_oPq8Wk z;45#j$;ab~8vR{UP@aUfrGm}M>*kE60R#dwkBx@obHW-OupZ*q7AsnN7=Cui2lRkI zAN=EqDd}@Y^feth;Z?q}F_&&u3jYA7Antng-@g$w%Cpi~%yLB-j^upV!$RaS$J-=> zf&L-I!KRqC2`7%LePo}@X=IZzv}AK(KG{1TW58ktj;M4OsU3|q;4R9-e=rS+KREsO z;Fhc{;=d7p39BTGs=v-vnl}Vs_aoeQ`(y9LNbW;lLeqt?@w9StBcKIvG8aC>a6cSO z@gy*6kyeJZLRjPEmPlnE%m~1*q@U{Tzp&%FFiC5}GSiw#Bto3#NLX_g+;ZWz&!lI+ z8b@_a8mNj(b_%wcDMoOTdKV>qc<3;9`N_`<=_-R!n&N6)%q^d*^F2rxkcA8Jf-(DW zYR0Cup*3ph=Rl}cq3C1A2P-dK$oBsLPBL}0YSgrTf2|V;99Nn(*r6n_8PDniZ1mxk zR^BSu(`13f2`4)Y^j0L3*XPyKzZvZ!g!Jr4i42TjxU8xiuyw-{Lt}hr1Y_HS_)A=C z`i=b=+&k2t%yAbgWPhgyX9-I5MfFcE z&~XyNh6ahS9rpxe_v^Q|ID@BEc$nI;T^b23lJJPS1}b^XT%rl2#>;FC%1)yD@I(vH0SP2^YT&g_}+>-KR6B zmj^lJ%AB}TdJ(a~{{T)ptzKI3O+}?9a_wfnI^lYd5R71{A8y6=r*P6z~%RHPYZ5~w`yjE%;`Zg&ScBaapvT7HY=qb!RF9L*-& z=`3F^j1K_l3m&jcZA^35#`MU@miX#CjKhbu@S{Wgus4=kwEqDoxE{>qH`93l(-8-m%Mu1LGY@;uf_HS~`TDB6>rY zc;|@^sh@M^a)G|&1Gn{YLapX`V$@1H#>xe>$-oPPl^;I;030JU^XeMBO3-EnluHDU zv1~CMx%VF3@x$^fJ)zc$+rz6u?vcoXG_5M*oq@pR+rLhmWAVn8;kaIOf?&>roJBI_ zfgl2z9f2fg=WZ5hV*WE7dEk?ptG%QHWg+qgG5h`Z@4@sk#+-HxjV*~}c2e!UimmEh z`rvf;J@|AJkk6>yM`%(A=*-Bh+2&vd2P9XC)dgtib#O z`{Ry$9F1CSN+~82QkF-bmjpC%%x! zDMfK=P)J-u9f;JpfG8M@90GE2&=22oYBAJ~PHAg}k$l{t2N_v`9x>4*Tcx#A|xZtu`w(ZKFM^?gVP!kt}60H|{flckS_x zBwIy-dfH>fb{i0XI3n_pN;W}KK<|up#^Z`wg*vzONc4*G8lFHhBf`N8mh0QD+xOq+ zW7Q_`NvLw9jTti6e2-B$Zo__u@$;S~9YojE)Z2xTmLm{ow`G$6=ceRi8=M^X--4L0 zMmE0!CbFSgDHH}*45gG~IU9qv2;)CWymWk744+(o-XbYo5<$*EIT`mG{y!W&qdIDu zq$VoDIyO<-z$YPO4BPM1JM`)gP9{;(p`qgi7MAqLBwG;4%oqj)`VMysgVW=Jc699U zO*B_;*KpLNLc%3;{E3Eh$^hL?`5&Gl(A1>V87k@1H8yJy$tiAS02Vn_1ml-D!RgnH zFNexlv8cxxVI7;UW90s)+aMoc2Sbg$_==hgAI3ELPj%uh(qd%?%Y2>JoPo-B#{GC_ z*OXYlsm*#S6jDmhh}#z2wpj=Co|}*lVmpo_L2+BfRrP7(FXha&=Y)a+xlD&WfE~MJ zo%Z7N?QB=ITUCV(Xv^i+Lys*-FHCjF&NJVPuBWE>g0`VoQqc*!LeekP#Kn1~Md-_& zzewAsT<}ABTC^jfsW6f@j%lZ6M~nU#>A7HfFc{z5^&B@GKuJB?wtPRmFPelWPbc5HSI+->E$($eoN$pm_!)1Z-L@(xkTVUV)#fbc$SoP?12g4B^Rh!EPn^cXU^BKdaDV3gxXk|mv`t}VuQlyBBzEXGlGAsS2OOB+mtuGS z04^zcSEqkRZ&HFu-bo{~r)nuW$YdpEjCH~9f(XyP-T1Wf*43!nn^C6kY3l$?$}=`W z86MoE=L2EC2+`Cb{tU28@g!%nKasdix$WM@ST?s`5L_6d=VSwlGTWN6${5 z_2XA-I>C5CjJ5nom14MTK^!d%sPD__=Jb*NFN5uzai^LJcc7N6P{S>%6DsnwfM5&& z181pG{(qU2G;=1a^^!Q9;BTrHD~>`6=a~wr#xTJ2=m!)`G_9FDK?s^D(3oT}AoU%J zmQ(t+BlGjYW>YT(JWXB;wW5t&*|#--(JZOu%@Z<`q@I`y`=6dZ)AdVm>F=SvTJWQS zw4`?ZaspXf-*dk=-#m7+CCTHNDb|+VLeY!@6-ZLtxY&$mBRdRr;ahhN-A1(1Eb!b& z)=Ow`>7HZyH{Uyx_8fHSmWo|E9cHx4W^?BGVcCueid=e>=Wbl%Y;E}ASk~p8LG>T2 z$z3Sdkz({LWD-N1oO-Z5wj+lti6dF$pb~hj6rOn@##Oz!Pf|h2$6@c(RIJvY#F~^d z60u5&=T?z>0qJb}6Q6#gIO)ea)I-1GYw=5^O&xS;Cz3d(3b+n~B~CMuoE^9K;^wN$ zPfJ;2Z21)=pOBCl2Ek7$*n!{vyhM`PCZ}={0$ZO&nP)N+g7A#s0ky**wV7xa735ouw0BP_hg z;QD|c1GmQ$?CVrC`>m&G^~}$AP!c+U>Vy(E=IBN?9k>RcLY|pcTUsq@klBV3_M}MH zmERrlx`CYU*CUQR9iZ0IG^^T%r5Y^yrGW8(Ju8*TRX*LpA8t2!>4cq=9k(aUkYAy|bOVV;U8Wi3#QfRhOI`ZVxcV{Q(5=sMX}B zXGyVj1OiB;Q$9Tm*f}Y-GqD(N&k=P?HRwh3)?zYg_nkRmX%Cwo%g&=ajGW--zitDD z{3_Aw8YRO#vP{sCjO~Z$#Ag^AoMUZ|0N2z~n@hE)6iFnU#DpEE-ItlZ!?*3Q;!lCv zQR2I?K_QPxRw-R%eqa#b^7QO+`*Eb#F?tF7K3Su-Th6Ti0H+(CVyrqG2L1TWra-je z51j^~R`1kWieD|`k$F^P25bxti@tl~zYW17*_wJbp+8e%CzcrkVmBGtPjF9Pd~mE( zscG^il=j~#U(9Z03h&Ig4hSPG0+q+VVZ*wGAE~WQN|O?)FlpmMf{0g_A8(EVFN7>f zU|jl&Mhme?%_{8PYT%u}axwPeCbLG-y<1y?X`jiEpD6;m#<<5I>5_5*A3q#Zo@t?4 z-%?|USD4N$s^CfLK7vLtJ@Pw#cnztV&VzD|nBE%|93nIfPcc5FE7#i>E%Yz5?0J@7^d>z>>e-MP-2UsImE zjSJWFgKwJbsyVhj+aPVzJbkKEYdSNwmSZVvoCscPl{B(X$Z%ubQSSr6(XpvTF~-3ZxL+wHnivoRHHr;3*QbWVUcO867qwhV=Mg zt0mh|!rxTjB$4@ko@@e62SRzi$A$EL3Jp3fUrp1m+=@vGT3$!kDH%MT{{U~>+l^vT z)Fq9iw2p>54+oTs8nUS}VpVQ3Vleqmock8zc z#*<4OiAi~-w#x(_U>IhMo@4EkjNs#@IIxBdUq`oXUwOcaLh5j=1mhw;pJ=6?A=K#+wTwM(-mX17{(uNdphIk$B8BRk`;--})-aFImR!$huHDKMwhIdVTehTHVw%vzh_ z)scKF9XXOjj>8fiPCSla4#%#*AI})bZBx-Tn{<-d{{ZR*+B*S9D-nVL_BqaR-;K|N zHK(Gax=bo zZDmf*r(;?0?wd!@_bf^yv>7)Mj=T073}cNY3bZs`31Fy8%_$-k=IU~HINX2;-{*|A zO*-C+@;tK$qGbzGXN-`!W9jR-^z(K0;*4_FeM(t18o7^7LnKnECHK@wL(;KVwAyn*hpO20y(4?BqonG9tNA<*xR9{yRFDC zou*D>mQ}c|Gjt7~j)VZ-`P<)#{t%L>vupX0M=eQN8pkOukWZ+u_x$i#$ef3ES>f>& zJCu?W7n|iz66IK+$5kf-7$+lRw-vlg4EOZs5H)!{C!I>*gT7c0cOZLr;4`l?($zVY zk`^A4zLE)SzI%GQ3})j=*DcgMpGyZM$%f(pRAbSE|7CMG+}xR7_!ZD~z0uQ-VP2xZgZx9^%XbrR`=7 zKD+%qwa?YGW;27aIRtzAe113&h*D+EXx_4|c_WM&SdMM-z@Fpu;GMQTcu&G;Dzw^) zT9QcbYc)+RLaB#u@>(#A8&dhdabnfq)r#}#R6 zbo5K`kmj+u{J7kPkz-;(Rv&(!0Avlg+G%$AXj#+fCOHELtEnY`*yTw%>(pZ%M+PUh zd1Z8nU0HOwm1b!?%#s1!a5}Fq6hp^7H`U>hWkX;2K8=7F0kPDc-FD(ngR8YV_GwEr zb|b3BIb9P3M~+~jdy|9vZO2+_y$w#?dhE>&h0JmCfsF0S4sbh?aqqtvt-N_3ORHwC zo{MtgIGTB%AI$H7N$LhN58uBKw5=^u(`saybr_aro+Sx}IZ~MDa1Q6&Zk%563#2U# zJ2RE$E>YqkSqousHrqKnp2LCv0JCb1Rc%t8L#z^WSI!A#2Mk6(=IDR096`-tW(^We zGIeMAe?@te9!%wrtG`b8AFJ=ee^G8vqM;;_8K(6}zJulr?XWu$k~Zs({j?gK&2nunKJKMP%;HoUDK<^N=p7tR?8k!%mEwzf6u26TuA<&#A3odg2X5F z`CzwAx9m^;Y?P@d^53S2AxI!(oM&;%vFn5Tof3W+Rnzq7De^Qk%3O}Dta-7K zo|)MFzTA0U2$tnZ-Y+~yIhV}N{J>}NzIOiruLjfZB$`+=hYwkcnIzws4D>$(95tk- zPN5t;(vV}6tDV9RW8be{HG_hhv{NK*Vvq?Mb(@*jCuYe2_aG10@y~{JxpjkfH;hMO z5F*HYVQN7YHp7#L08otMh*x+t0ds=cRO(pPW~-MX0hduBau{r zj%Hkgxjjh)0)3BeF($*f+cL!zD7L({s*!;>=G$?$J_g_TIFqMEUNi!vMp)*rB9a&~ zfDffe9rqnNZ^3*{r%=+FBbr68EPioJg@01)*f`j9Aou%cfOsZfC&SS}IxI7}0x1;! zpf||ht_S{SjeLvQ-xF!k8Z0F&7DriSagoYS#Dmuv$NvDAh1XI@YDE-?(kn>eBjp6i z$Tu13zB~2D4C?mdpHGHyA(1@5vvOnAxZCh?pN#M*B1=%gaB@9}2f_n7KRz)W#taP%a9F=1KS{v+ltz(5TwzfqH{@^ zFt~LpH(`U>z58Q@(hD!ASu+Pqu%h|t3ogh%mi)a#V{Nhd1KWVw_~5u=C2c0p(?@4dkv$R#V^v%R2OPi-i~5e(*qx6~C-|dM zviiH})|pK;s+ZxM;&2 zU1}KE)+7gLHs?mpat7zFc++@(d)MpgqWrBrVSM>PiAO><W-QRr|?wS*6u zl^;HwdUNg${{Xn)y62ZRs&y?YH+zvOjz@&&3KRp^r&HJ4ZoD2L0l!+!ny|fx3jvxV z{I=#$z>s$xJ-hI!UmC)Fa@AxCv6KxiIkO?<=rP+q+y4M=5b+u%is_~4_F5}T3Kv#W z%g7E1+Z+D?e38Vd1?@6P?rC-z-Z?Vp{XjbsLD-K;8+RGc3~IWU^X*MWyETX84-$`3 z;{@%T<2m0OrEObAP!42Lrv8 zOlP)pvCm!+MzEJ`Jkm$y#?kY~89rfQjC%$fjE{e9__L_rYL}{{aWC`RXDXqUaq3(W z3C2flvAONUo$3)*j=Efxhdj~Z5zWf6g4yZ*L;k!@)aQyFE~9AfV@`EdV!X={JCf(7 z4nMyYr8Ko_7HL_G6?9;v0y%&^KYX0+wm6?H1%pONlCi84l)E>pl}-pa?n(6j0G4`i zc9b;ar>E(6o{77oJ$3VM;a->wdLN{){;iDkbDiELjnlMy`0j$AM}+kE!; z;poL#sz6|G_gIv=j)A#)=WU6}-2VXc&XqKEwW$VD2+}_=#LB+Czytx`W*d8aaj644 zqUh=2&k)S9{WNVXK2ZTYzct%0*QUc^w)w|n!rEjyjcs7tuPRAeIbZ54x1_L84#TEM z$L*dp{wJ$)cxGgj+L~DmwUyK#DLwZdz@7enc!_3asp1&g;y==eO9{DoSIy~y8@>hx zI5=3psL3??eTb+sOzsItnMd-`fIH*2L-+p4XrEJB`_CjV^ro8mC#Yl3xDDSJ&iy{z zdrmpE7{$nDUpgs@ypiM{L4$?^slgaO9D0{i_+^Q!a|kQSv8ZL|9H`_zJCWC~efn`; z%z3OsCG8#zKHyW0kTCMn{t#N7$`iVo6j%FjF+jHA~3)+gt z%u#(L%0fddj3zIPWkFHu$QzZx2Ytu43Fww=L91$0Y76OSXyYnKArNd-dyHrDcpSPk z)-)@cbZW9i=c~lP^B4EVJA;FtzZ9q_dXEH*5rTyC8>6WJ95CokIv)H|*t1-Catmv& zYC5w`6VVDG~!@gG>%MEWf6RuT0A z+QFBP2>W4xJs5gV;PC#DcBF!Ob0fy^%8@vcd6mc@<#G4^-rP;EW`?DrU2_SJyd^*( zyLKzrm4gwIJNGZoM+Ng!FIsGf8V!(tSummXC7hstQ1l!MgZ56*ZMy3eTTZA3&-rYy!mkb38zJ$iERy&30& zQI5oui&}ctFnOSF9tS8SAC}nt_|=>Q&jee!XX#bhW%{ZvszUP;ayB^o=YRU~YsLDO zpQad$!bvO^QX3&yw=XCkaz{>wIq%1seF*f~W0o?jP%-kk$^8U+`M2Edp8dE_$NF3v zl_@O$0KL1R2^)e+ki>GaW3U;(+vl$tw8+s^ip|=UEk`>WV4~TLKw!z8$4&Z<{f|z( zEgS+pUVduPOEIux9O;75;I0GrBL@TiW5PZi)Z?KATDFpEwkk*$ z?Q7I;);?=_Gc(ELrX)_DrRl%7+l#KwBvk$%Qd>9UhRuUwRj+C^e6nEj=aig`9lkTu zekEIsYI??}BG^HC2^PFQVuGXGa*m|q2XD^YF{(#37<`)2Wo$CL%*QT=w=wQW*pu9G zo3%Eb4y|76*hn1j9C9uMjtOOK?oLVe+aP!1p|zm%Mz*9wTWr1ORZWNn;* zjCTVaczrL!Zk)427pV?8c>ph;)Ck|9&f~Zpc+ND(wy^~{s+zUhDCKW7#usRuf~7X< zq-5hCJYT0Sn*yaP^TqYLoLEPIVH|E$hyMVlxc1?l9%wmcl1W7C1{NUT3`>tt9rJ(( z&irv>PJ(T6lnI81l+6e#Jt1)1gB`d30OzL`euvu4J5{N}{2HrIH6pXg3b9izau|cy z^6&m*JOfs<^}qUl2o_ra$i8$Sj%5I6%wRVloz8eVTB}!F{uJ^`41!B5BeoDrgXuo# zK|5z-#OO6z(7f7(+LBh(X|mJ`ss8{8Smk8p{GVaKSL{4>e!I@D;bxFYXOq?G!*Yyw z<_ZDFzfKU)CDR@S)alH%>cH<>2$jeYI}y7n=s+j-;VnDFl=Ul?H1~Dpj7B7u6U`iq z8<#%|-yinj%?>JX%dFF@O3V37OsghYn3L3gHyzG6rR5o7Ev<_aMO=AuJatNJbA##c zjF1j^Q%!r$m1t@%v(|V(WRP;n=42e4ZOhyC;VElAlcUwSrAQbV%qtVOB1jkz0SENt z_dPN5!`gK1dWh3*)s6|Pg<&Ix5xz(nMjdwqefw|4Zze=v3`-WDtcx-na82tl&VImS&3k@_SRzyba{{S&xgMr1oh1HYF&@3~fvqH}i5jNx! zq&oa#)$#rKg?~iT>}yLk7OyN;E29}XfpY2q>5ow9oSo0xhPAotU+0JkX+avs?&=D- zaBu+WlYx!B_uy6N$sder)2(05s5vE=RF&({XB=ulX<78+2aN6+%GQzy zBC$1N`Xt{t^=;P&zkUzm?ORaN{5FF(5^Gg zryr}J`+odoXiOQUw_r_DXpbPS3bMQ;<#UhJF`fOu_~D-p_=$Bt7tSl&N3C>uNF&OK zhxK}P%Wiw^oN#lPeOaSop0nY}toe+l+|tc2nJ1R%$Uq7T^*b&|?06259Gw3EQ7fAl z?IB2Aj^;8lPJgHjXO#9Qw+z0Xr^Qum!#cfmg~W(YqnjAQuVy=LJ-GHZudV8&UeAiHv4gz!%XI-3>tb$CWFek6f0G&D8e%r91JH11`uSUwzl7qmq}tb3(sED|B#RTF{!Uv8LiQVi zaq-1lx(=VF*&2k762zoLvjqf$A@vdmQH*cEA!u~zF2kv`Hw}pWQeZ0(kGy<@@7Ji$ zP7SFf(CU!G2x%9PT!2fGig~lkf!qQ>{BfDVwc5n7>8%CWK$5$f_H3p{n30mmPTfcY z@P8aFTK1i&Hk}DF2qIZxo-gP?pr~w(j{Wx|Ba1ZPmMue4n$YtrTZuU$9;IA^&5vvn ze;>aYT}5nZnr(^ZsJ8BD#Fl!S3F2&?Z@~j`+dOpEFi+vk+JLF9eByqj{ddc530QtWwc!600KDWAfIgQ*S8itOI{j2W}fiRF`g(v zXF^&<8-mBN+~jq^9eAUmXploDo#peXLe;U z36@8Zfn-0c)t_<7bMf1Ysa>P<8nbzU;4&gSK$SS$gPpmF>Fu7JLaVAyDqp2)BzBU5 znx&r}YKAMy7-!@E0FEi7b3c)7Au-0ZmE5qzY@DZ=GCOQ>?UC5x^d`aiNYyqpld5MVal@G02hZ(qQ_W_C5W#&l8Mw%@|FjHif&2 zB!#3Ie4P4Uvf)X`u>;smbSB_Lg~m2d0|!u9fJYB-Oo(%ohB{VhFFY=aV4sj zQYaD@=4D_odHwO8zW)3dMY#m3tjEoQFwsizwpG-yQ0jlEXBl92$>Ee-uz9mW9fV?KA$^zR-HLj!tEg-o`+(2dS|asvEb0e#tAP= zEKt&wxlCk-A)6{0yMdhKc0Zm2;>{e~g1k~WmQ(!7p-AQoxZ64DvlIRJQm=%R$)m+W z!FX)PFg}B^?g(7>&f^_+-~!c_@qNgWDIU9^XOMtIOh8<(V0+`IQNbaN&xj!wPF;|p4@BE1o~*Fnn$TK zq^Q!dd=clerzj`30qi#Y_*Y3a{E=?lqPm+Sk(IdwQK03({HV|4ZaC9?$!;5vv$Y5T zEu6 z#?Cqezo=)MwnlsBV$_{9uM5uwXqrdsEKk-$%mGjRz#fB*EaXczEJ?0MTDx;SIT?(g z0I~<_pYo6n$KQrE3!_HSWNT3i5KihaK@7PAm}jb;fyvnC9DSwfkm)lmYKBAS0b<&) z&IZ}oblePJcH=kVYclKl&AmEVr7(wCVrWQLRb1tB)3`hJ+k(qe<6SiU4k2zcXU@X9 z@)PC;B*qRp5JAa5>%|>9pVQc_R#jK^mz5>|0Erv1*sC6^w=eC%ycJ4lL~z^+!X*qB z&i(W;Pv%?^TipXRM6+OG-(+Q$DMJ@GM`Y~ zp8Ut`MmQacwe{^5y@rxeJ4m8d3{`;&bItxCwsG;oqlKelYL-?pT1vLZmrVdIvGo@u z4~*xC^gP<$Df*}_NPt!dB4f+XCO=oO7y##PyjSo;+-o|GJ2rFWoWlDEvFcn5bQ^T{ z;w{+bf`2mCooqNM=MmL*nOiPbCvumjlb#)5d@mK{oXtIjnqHBq8fOaHbGmSi$-ZntaFu4hlxfvk!>7FwVs~K4ipA4@4Om#WZaIC8#AZ^#| zasL2*5sFFYuWGe&vbpt;2w={`zI$X0jkDqpB{5;%22BMnKrf=O-mj*#iXr z+#6X}sj5d}I?4RJMC=?G$OL+@a(_u1oB@%O#i`Ge4xe5PJj5ZEcPOSQJyEkLJivPb zNAL5+>as<0oqCm>;kyv!bupZ%0OSmf!RemCwj51uI8N@qQ) zIo37UG$CJ2x|6+=6059(24ZuSRsdzX06Gvjr}a?pSc;T7g~_YQFP9SiQR?1V<|EV8 zFeP)}9XI360)PJiW&Z$+KbG=Xfuu~87-l4d&tH#%c=tglzA3v_t=Ut|u82~{tRUqW zV8u;ObG zt`XUD*!SoL{fXz&5KZTE3$Jv>P?lky4P#1<_@J4JIcI)vmk2_d&CaBxBFcPEcw(xqEdYc^{}C#g0ob7e?D)E;hw z89N+j9r&YuSmKW3-G*4{*;Ppk9C>fdFf;6P*QR(mhBEs0pQ)SDz-5o=M1`by$1qLt z$&ULR;QVjxZ~dLd)hR!o?=P9m#iYu!DPzhodJcnp{{W{A-MbX2U|K^OOA|PC0Rk~3 z0r$o?JOjeAa`R5nI6z$ZX{NIK&`p9ijzazwC1oL``^9rv`@&V{^@OW3m$#Pb+Xe!y| z=46d`^sqfgPjU~(zT6yX@kX;$USxR)4I|5426>#3>I^ZrQhoqC@WzvP2uxV=7%}GN zU5gBKCu6n-KKvsKuA!(>n#62ohOv;SlhXX&oMavFJACjlg$# z&cx^br-yK3zYtLt<6APQVvdi@Nl;D*grJ1Vw?oc2*bi;K3lh^IX z8g-_VNO+4X1wK($!vw~`!1g=i9XNMIA*!0T&P<7gkwz7O+a&jIpSJuqjO49NO1<52 z4B$m>y>liGLglguKV!cYFPf5RO>>m`(4)GNdS`S00G+tT>$IcN=V|oYQu(qWNxadO z2oBgik6t>PQnyD;ts#WXQrP5Br1JAI^#XemMt#3LP}74@p02a}HWYWRXsn4Fspd!A zWDkG*`QnYwI%ubYln%9}L?PWk0nQbacL)Bt;dpCUhE>#TH`GW`zzL5-WMB_`4j9$% zPgc~vj!N#KqL~}@AJoCY=r-J*FF@MmWYnQeKD!l)D2YOc4zi)a!S*2U_ToJ@Tbh)* zjo6H94DnTngOJ(S75nY@Cx+pI5v9`!Xh~imWlJEDf=8!w-#O30;mu?%igCqS6j16~ zKQHt%WVUJDhKix6c-=6ULqyYZ}B8jX*`^r zkId7e=B+m}gUgcKrx@$_INW>VQnO|?m2NE5e~8zSqf0O=d2V-h7{d>py8XBhjWnYA zyf)*J+OU9$^Cu}A{-yipx5o`>unI{fI}x-?F+~M-89e~&xWEVBJUF%?)$3Tf%Ouf2 zuN+m-VSxZ=DslH6I`N#&TGBOdwOux(b}L4e)-;0HXBk!)KmPy;Kfm9E^+~H4W~_o= zsRRAYFX>=O$;j=7-GAxA+?8s0InrAW#b)PlP?nE4z+u}s#(w+)g=4Ass?B{qep>Og zQ-DggLB?_JH|e(&=~}7b5Ole2ME48Ov;Q(BmVGM4oK5=7K1q2vt(4RoU`41P}SY*Vyr!PYttb%O$Zi6Sb9+HzRS& zk{g&Fm@K$GbMj9Y&E6`j`h!)oRxhVeA+X2}GwJ3yCm#eH{(k4(R8^y1OE9Eyn4GMq z`kisranPJD-g zjsF12%W-mP-%zC{rzBV#bT(H~*1PzXQ{{Z3O z{{Sm%H4G_j7HhGbG@ne|`2};5r}y7J!;6~5VX3Y9Zl}zKFl(?-N{j_O+vk6N}Z&X$>l@qIv61kj)#nD{^ySm^xi+O< zR&E)^{?rJs4VAB7%vIT>u2(q?>KPqI;jjk%J@~9zK9v(w)S`8r8VgFH z(0W-A3@HO~&F_zH0phx3RKE45k`-9V=U?XY=W++SoG;rPcMOYmy{Mr^irgf`k%bXQ87WPL)lSB&{4Xa}yp}WaQ{} z>7QThIBsDQ(1KvWQgGi=W6v>G1%rES%y-~2YBekAvj(c{!HiP!g5}tf2?M(1kDPYx z#C;n3QY)n+w6Elsk#o_3BLzYxjWbp%%IzA+>l+|O3Sr%zj>?KgFA0F(vL$>5^(~H`O zhQN|kg=K(qD-t=F6l@Gd+hS9F2iIzofSfzjl%K2x^UQ%(?V|?`+et7pl)a=1h zYqQpsT2CxT9EcW0Qb1vXPFFa=2ftn@=>j=yMHKO@R@n^s=jLQh$Ok)el27b@co&GS z8kU}}e5s$+T{%N6ZaIfuoTqNy`*6?<8dL*Pn!?L02Go9ZXyYi(r1JxVvG*VH@e}>2 z4J%UcS-DbS4Uo|~#I7(I82VUXl7CS9c=K@A1T)EwsHBmAjM879+b22L{rJqQ7A1(mBh?ZJAgIyE&c{62IQ0&IzZUYDwr<9 zSUZ6WASIPlYzMYT{`^r37>>QjtHkm|<{VBY>|Qg08S@AH}aO0(kNLlIgpH; zi~xK4e114&3}u;bN?L`EM@TM6hb@*d^0*`ptVdsdoL#!`cxy;Y7G{?-#pJz}Ig`s# z%o~*T196|86MMf|YQ3o`sJk1;nMl1rj$tNy9$m=%adO&en#YD>scuFQJRq3R=1xK| zufBIXZSa2FZ|AltUjfS$+BDbVo6{ll0k531wpEE=d=h_dB-xZ{fu;#s)+KvYfj(G3 zM$MgvFu^DH-#k{DmY<=Tb?Mqlf=eQ04xW?gBhtVCHet89>Be)%bHhkOR$4aVj(EvQ z3iC!M&**H7VBj2kajXpr+NZ1OQp|;|%m8>%8<~SL^AJGlxh?kFhik#~{vNRNX~bBb zMV9ynDuyx(N@v4q*GfcGH@Kut$erYOCGL`Ae>_1QW9ubPkgG`f9 zvsLAS->rFpGC=Q@W1fTn4_=?Q1g8{!t)E-VnXA`@xthS`WtEtN%l`niM}L#YT5Cd* zY7J^S(ZcM77@>`yBbyw(u*-q{_?0E9gGQPrhv~ppNJ@aDOUPH44YEDPF|p(C2;RSM zOopbTP{DDT%*MJGF`V12ju<2F;TS*D*y)$86-W17N-NmsU`arl1RDyyb|s* z8y!IhxbMFZd_R6$(xsTEvm7+4C1PE@W=?*9jOU;m_Q>OK@Y+kys3gfGDF_imf)q9n zs5gI3dvW>Sg=KcJYOf4;o10aGufa8VI=B1+5NVP9Izag4whDl&s)Vb@^p!Uvs><Wv_v^-y?j=nUXe>mL%+b8EdV;fhhI(`vBR$4HeNG^}qi8evz88+i(}cHL za^g9al^2+tWCA@T1NP4u{{Rlow{&f3=LueCl(;d;h|7X-#~p~k&)eII7Od(PwHg9h z{JM^LZUGr35A+O=)G?jUPA*;1w7G56wOJv8tdfK=M;=w2ZJoPhVD-j0W`Z6j7G|O14SpNbR>x zxDJ}s)`f|5;I-iTNNh4s5{x`U1$yn>PB+J>@i$i0Z1{V^5sJsm63Ae$9gIfmt{b15 zI{*j-e|%?#^m!oDZA(4NT=UxB$xdcuQz1}!j^t-<-Lu^A&x$n9;`)5{Joy;OfT|o} z7-RI~-13vyp4=AchCC>c{{R7}ZfJP~SmlO6fLtK}kDkANCwMXor&jv=Wa zgfCEj_y-?;2YPm|ro|L%5S}~<;w#EXTxWdlMjNkVvE%I)(USdYvO;qVOjo})`6K6I zN52J%D$A)yUQ05qtR<^{Rb+H3RgpsDr%dOk--T^ieMe8bMl6znY)0&Z40Dm~?ep7x zj}tY!4{FaUB$8W`l~)CJ0Gx9x5V*m>$o%n6opg^*@>)p4x2JXAWh`;r?0SAa>eCTP zb@a)geqzzat{Ir~vklosbH3l@@xwHxu{t%jidg1K?5ZbTLy}47#yX!)M`NB5)9pz! z#X{GZww6_o>Qe+PgmW?-w;0a<06$~JOiY)ax0cuU<(xxpt9GGD*+$md1WQIC>ftwJicIBKrrDs)=Pe1Jp)UzDEB5+l1*% z(^`f~(SuytaFCLDrO8$;gRu%m@xxnGH6GP9vBdci$lA*vG>5~0hg_aJrYx8K%NYsXu^1ALEl_U}0n*;XyaO4KE zT(5d6@{2OY^^sd4kxHDi9AJ8v9r2v@;C>*|;d`roN0mfTlN>QH>cf<-@a*ymd zQLO=^`b#w4N#@vubB=aHlK4FiF}K@@wkMK56KU0>o;7}OwjgC7SS&qFgSH64?Y>7A z{3~LvqKLJB_jORP<+jSY@X1x_?uUE5g$r8gln&H=$M$hRuJwo)x+k@YP zcDpQaRi>~}s1!8*bk&OjrZzmJ;G7T-F5eq<;y#zCR-@ugN5lNw%L*SdNqb{tMzrs#dV}tKW~FMP7jb*ykO0&#~W*wfZq#txm?1H0vYST)Z#Ufyp3k zk<<~tUw#Kkn@EF8RF&j(m5X`IL5mHZQciNbfRDc~8Yv?B+b`sx2^)Ee$ef}y*f3ms zk@nv{++61&K6qP~P`K!_N}-z^nPwO{TocgavCiB%;h(1Q4uu`pR*9sI(8dYK!QAKH zvHt+)geu1IY2H*ye8*>%QbJryuvT2|cI)4B#N7`@nqhFjZ0Umib}b2%xsBB4DyOjk z3=AHg+&#t7?=EZAni?Q9f%~jyREGJd6r* zuQpevdAj>!@YjQHOKK4_hKh7U48E^Nr>PrtJCmLq@?N!>Ey#TDHWpLJxh(iQXBgWf zbL@D{n5AZXKW?O;Q!>getm{@o<|?qC$Ru1~s%~-d*XNF_NOf-&>F%()sD}){(!1ohU&qc)cr4(` zYe<^JdT@eyxo`QRSlUTBgLWA9I~$%`;2nnBJx_YD(TM8l%7=GQvEj#z{=>KpSJB_v!P(^N*v}ey~^|*o?vk%7#@WsLtSZ8y}9i z;j1@Bldb70;yBV;{!;~JBn%QrC-mdquBxpZ zk)CIbu<^$s<<4?g3~#)ifPuXIk^cAM&M)XU;e-b_Ze(32b)*ZY*Cy_G{{L zE5}7a%SPU@kZ@UgF)TM2>^S$tIz3HGNnJIhSfrA}O%jq-Ne4Yg>B{GQzIdcmT|>m8 z3wkb_Y87iUmHLdK^1$WwZg2-t{{Y7U@iDCrhGvEaCC*tvDh5%#O*EvtZFmrF-0m zS<3NMZbfDqa6ED%*px&H5LcWG^ymluPW)1~JnHr8)kKI_^~%x>h$r;@w*LV2x(*{y z(&LdOw_W*UqU6b4h7{u%z&-Kb1(xmVg!)$zaTBkkji!#?glsO*S`YPYDcI;WBhRSKxr>7EIcnZX01p1vYIY#~WBm41fTobw$gp$yeR%jkJ zY1zgxjFW{R?m_z;ch3{jU=}D@rIDi^b#`XY)G7vVFCZQAz+n3~UMpX<2Dz#&K#;>U zDml%E>Hn(>TX|CPU%((R{r#P_*&GVVCJ#xg`i}4!y|V@J4u%^~zJ0#y~E? z>&gJ-0~u`Ns03r}z-+Qf=3M1z9%oZLZb49fMmF0g{{S<^-CCV%6vZlvO>nHTBnm@D z!Mlu%ZV36<_Tfz`vZ`1~D#Ijl{{X?x0h5#f!w0xL#OGtcdu8cfgzGP*$g(P0oS6AQ z3QG1Z-?7L3-@h7*(`q%U+@0MguN0~y9GroaU=RrVo};gRhl#odom$-mw{S-!@J#9~ zD-yU?B~Cko(|>*%yKDH$Wa98xR6S!l(J}?gk?-5|S1s1+)<{~_rxNoyEL9n>tbPI8ueS_arrL#&Yuhg*4p~YZymJ~!Hr@|UGZcpY$!~o07++h25JX~~BsfePGl}G@e3xM5lSEu~nZWM}3wQfqbVQH(% zujParxC10MGNkW;_B?0a3%y0WyRclWO!cLWO1^o9GB*RLVyAq2aHf@JtX?E&;+dzf zJgfuqtemG|h9qs1&Ukv~&_0J*>z^(FoYmZd9xOL5+jZh@u}TdhZ9d@~mAQ-^5umj+Qr0QSGfA8*xCD?- zVnELf#X_Ax|o=>hs^4elBrwxw#b8nBi z;Pl>|Qq&S_l%B*=c}*+E@{daMw^amn$Rlj~`*Gg0rzARzDIBd@IArq~lw^<>Vtw|& z{rFYxydEBgzN-n2A2n7MQ<7K%hv*Le{{SC6QPU@u&X-i*of_p(%Hl-plsgXOoc8u3 zj+2%g{WPxyF*2-h$gaj%^T6hd!Gb&I!*$jk@F!*MN^**HF?Y zn$ol~fC8XyerSsCgP+uLNa81lDrvAyC7KYpxFP~sLmqALs*W@Ih7a4n7e1bzk)nAr z7H5^%`9$RNgR@}u9Xf6H>%vv^B&X)p(e1o4PCVz9X#pkQH~^8;o13nBVDWe`O%3Lb zSZ1>%i84ya?>gX2$aV*|;IYnnpT`esj@6b&M2xST+={D%9!MAi=PqzM?ZlmW8Rf3F zmg$U32Q1LHMrFth4^f@Y-MH?&D|W3n)vFOZ$dW|QkWq*v4YADIah8eI&~9n4M^$au zhJ)FatUOJLd2#%|u+9m_4mSDVR&QCa1wAr3Ud4zfmMLY8x8zbni5I9OZdiMKadqul ztkzVama0A?bz?U z-!~)I;fbn=D%FNE(uoh4&mjY0+zyAQZWr)eQ$V}e5A?H1n4Ef)md-mI;Gd1hw-%xG z#}a6>+Kv^C)lNAR)*G8`k8EJ|$M)hYol*Qgy7YhC^U09;Cj|cOx8vW6Y2jkD%JD~L zXxJ@VgA9LHMbEd-4#GsV%koUHGP83Iual6#fsu{BeiqabzmDnAz=7V)W`;=@9SZE~ zM^V({Ab);2@jX~8=pR8Tkye3L9Ihi{5YGD%?T>GdcEukMOpRuDbu-psFjKSSWD(Hq zu+RDMhJj)-&_PyJm0}#T703!(Va$JTjsrsc(df5bE6Pn4^42C$-0Dd=+uRU%JlbRb z0O`2zgEkd>_mU7v=E|Qe9QSM-W2&5X<587OFHccnpprC1cKVES5*&k#i32#t+v9#G z=+U@Orn0Q=Rn{pE=ga0T+hd%LyY=_tj-fb`+FWTFW~|)n5!kyF!C!ow1Jn$W*NOiC z#AK^>>zb@6g;ttH9IU&MjDPOP%IEQp3;Z!U=ZIHMm<#pVtWuK=R$}=ik~hKIuj=X3 zelF;`jF)T3upx<{Z!eRZo6IA)Z|c|rdyf1g;%zdnt)R;ku!+o415}9t9$?!54gP)i z9~qC~xit+Y?v)*TuN{YOa}yGIfdn@=APjt9{qx3bGN^cNJF9Jr*$SpWt8q?3Mx*rP z?7*GAC^g-&c}syP5g9h%1xo0BlYO#(!>{ zOwe7Xf<~sP4Atdjky!bGKp{^z&NI07?Z)V3sw@dRH*Mp+pP57nK@vFJH)M*T6yo(8FAXtfHm znI@D7TNoGvrrY-K!zxVGv}tvHRvI&u{udnV>=rz*W?iv^`gc9Hz|YMsJ5sMcrx%A^ z86u9bi_ID2Y#om=@9D<>06ZtGS-(alNJeJBMoBY=&q4jaza2#!rnR|cbrY#l&C8Bc zz5ye4!O0)|ad^Fa+C^=5NYtRRk;6GG)2M8-H$ZdPoF1Gi)U49*)RAjj-KD+iW>$euP zpI1|_9*Itc=w#E0c@;@~oT12kp2Ut1ERim(B{CBoK3g(F$UrR2d6^HeCvnsLBHq$t zv!*k`jnw80RsgXOw5C%XR6Gk;H0b-LEc{ zRypgW6O}%40={l?7w&ojK6vk5q+;;|7Gs(-9kdAL@_(7vB=*L3{{X|r{{Z7JE6Fya zSyNW9(}O!fG?9*8K+dHI+Y5u&Zs2jN)T;eohaQ~kR{sE)%)U`ltj`{DN3kRvaVq|u zWFvq=p}uTYjM>pwH8$76)l*1objWSEv^ zgTMWF)T%;LYI-^)J51IpWrml%>(FQJ>6|r!bGyzG{Qbl2^IO zCnL7pK-XfcB@Gs-=2?}z$R>~#3x>;NbAsEX#x21b^INPrT@N{=IZ34uTIID6uY)Fz2Sdb1$ z>_$#M_i#GeMBXEvtlLF~3N8^~k38kn;asY* zBfbd19e=kN+lx6RG&gJbo;vz#5Ilr=6yu&IR@|R_fOuMWrCV8=?NK~Z>Kydmy2cbd zq~w#Gwm29*`)9kl{h48*s_Rh5k;?GN1R$|0eUDCH#GafB!7{<(jV3F$tIGt!4tG*{ ziI@yDgFeF;`;TFRwv_DImb$~ISq%!DLwN`1CE@sez+xOgXtgfR<(kej0b&s3_ zFx)ESh8fuG598Y$DwNZWm8+-2a!k!T09`@PGp+&KzE1o10CeK5sSSh>Mv@tH{{ZDi zCFTz@GJcl(<6;Q}0mgEdF`cK5CN$!+B#IS@2Y*l*>5LAYTc$C_wWX{4L9Q%`FPjl` zRUfH=z`@8F%7Ko*BaK?jh_-x)^#f|`p&)qUtkHpmjz$byr(w)D8|QBPHR1a&6elBN^&DaD5w6dYZMF);ZoWDCd0oLo*Ph40=f##DzH+s>oP^B~gxJk-p=<`R9cE zRSMhDq%g_pidf1hQ|ZK*Zk-4HKRg+f__e9hQw6DGDJuy709!UWnUr$={Wjt^(%Y>B zvP)H3aSXZ?2IHFc<^)okgK`H{&V=y=I~P1~0M?s|W0aaQGpdU9Ki z4?I_3CFLc#(_roZ#yaQQW7CTckkXBNZu*sU06!wz^HhNnWNn?WMml!Re%cdm8xn_w z{Mtma%1^0`r2du2&JN@3IM3>IYE9t#@@Y>jrp#mMdC ze~u8L{{YdF?v)I_YRvK2m-9GS>+D#S3h#9$OHWDmuz10-;>T}<2 zI~H1LOwe*X)&y?Lfz1$c$_VL_7;o3N&jnFV0~71_>c;z`qRkmhml)+O_ZS}Ce>_U^ zZNUt72#9JBt2A+l&H}7^XMgGh9;1G}_->-r44S=Vku5Mql$-)%?~rkmkWS>C`|LR8 zPZH6ysottfkv}X@+KdiVWzPKHf$lT+<5(%^Caph*tF5Q{X{q^sd2RAam0Wx7dUoMk zvPPQ6HHn!cww$oULFO38Hz^&r&fdd``nAJDTbS7?W|F|8mmM7AmzUosuhF5E0uRY7xDA z*6{LHbj)ttqhw>T{;iJr&l;RFsah_n=j$(Gy3bN8z)|I6>6S%f%H-$JetYC`sPWAu z)-^b)*%8;h07!-_oGCxj%8v2%DJBo<9>;JtJN|go zOwvRll3R#OQb=Vg*f}R5Li}WHjs3W9DfykYv*JB6Ehcy#En+0+jAN8OHqWu?xcK8) zr@WBX@}9(TJy@gWn{dSM`i?eSbR9R~l;E!>yE0HyBrq-vh&gcQIRNw+$t6xOM#GPz zXz1Lz4B$yxNxqaO*~uABW7Gf#e%SkP&Y2}io@t~NFtI@k$rQ0}lXL!)jOVC1An&&e zY7$TM)|s8^u!uE?WIW~>Ik#nFf>e(EvBixRtXgP_G^(t`4pKLaF7CM3=dT4Z-N>eWe^9HWS8&Kx)0ldBx_(ItH|g8%ytDrR z>DXno%*m-zD(WL63|W0cl()g_$FZ6(c0E42#UvhSnyUg>DI@?$BmQRnhB#UX zIrRy32n>tIo0pPqW(1gk86fA?><{+I9Cuo6KHh;0Zon+0$WTNVlrBnv({e!h+kar?OIA&_ zs8;o**P7ZpX^6AFrG6d!cDa|!lf<(=L>;oJyJ&xD}_x9=2k7N=xiY@#= z$8}T8lMxU?kV9k=K^e!+2Lrb9)>(B#F19MfieO!po2GdQ>IP4L^5JyW=}>31QI>fE zoR9()famjUqltxF?pS9mKd23X$KQ@^4=%BtRe2U|TNX(U1Cbu7Gqg={ZCag2-~o+Pw!)wMNhsSI(M46@~Vlhfet zPBGJMz4*H{HfY1Bc}R5_naFt$DU_yEkCw>k?tdH~!;-e6rNyb)fq&sTv|)L<0LcBu zf9=7$%Fh$DTF)i9^(wY30d5f;gl8MbGwQ$?1OR^dCmeU8PiDV~rE9AcDQdr$%%xYE z)ppqRYz*)2HsS3aNk~CFfGp17M!uj4^(z2R_;bGB<-oK>gH*YGz-W+pU`8dz{G^Ux zdy)R5IpL8gRUDFY`K}!z^8ys;x%~`(tFG9`UNbdyn-px=sjHBpSy?N~j=bE!H~hQp z@5aTe!uo1CdE#e{ROUjwyMdBFZrgDR98$9clj+sWprgkaF8ttQm=F%fz6J>2am4*3 zMQcfVvc+P&_6`C_ytx=XbDZO*e%{)(vW3qm82 z`I%yLW?WaLKkI-EKv$B?Yb5^wNgAuj^7HzDY>-zyK__vJ-u-hX7IN(1=up;* z5RyzsHGp&FWVbd)^y8-6aj3iW$>I1`Y3#g+tB`UDJfL$9qXZA{#7#o9ceMCo&|{DJ zp}wjX-)#x}k~n&eh$gEQYmtXo#8sr`PF=#|2j?TG_~Tu{I|dZ1rz|$8I9k>b zmSTN=XvZ-m_1Sap#ab<;>P%sZWoVd3Br-%WH&S!#I{yH1!ibisS7;ugM}@KouQo(q4E_uORnbxd=LEJjOoUrzwNJ@6#01E z;BS-PrxD<`k@$iOb|ZLc$j>BA81oA_#uVp%<+v`Tc3P5FWIknyf<*Fra_mXQ;NXwj z99OW_N0NC$ttK99d0#@D4CAl>p1Wg>z(YS*uP&Q*5|0YBuuP5VoE0FDe?2(vNEBC( zOO|6ROof?=0Cnl^N%z~o32RYD2Z-s|trJKiOqk*Thm4Sd^v!&+hDQD>JA%Y?0Bc6*U|O*5LgjJ@-u%a z**!=U5DrH9$s~IoEI@0z4Q&D_HQJF*@g%}WfG&MF1Ex1S?~S_g-IT9Bxn7&6oU^1e zGJ(qV-5Wf>k+|QX`QzUSUiz;mMwaVKVjoPwWhF|SkU#fhq5lBmhU?d_QK{FOcA94| zC!H?bp$F&(IT`!y*Nb%HtCXi2%eT8mh#M)?EO*v=2>`+c}#^b9mH3ds~GYX#?H z&Y4lU$?Vw92SdXC8r6S@NYY+#3|Ah!rHIRHNGHC)jreoKGre6tW~~^sE1?btser~w z1K%IM{0SDyRg$C{gWEM_uw#6 zII%4FUQ?*+p{^@ftk^aA&;b|dvqIdu30bP zO#fRU@Y@RDoT{C1p+Xziel>8XEG}hTQjlnIeLeLO9Fr6PWG?z#{;5 z$?d|CR%=zQ7PcUk8N#XsAwsG3WNnZ^<^&%6EnZzlhM#hk_DSQXbOR)Z)ydDyq~LVH z13&lSw}lLN(uG*G%9xTED@APqhnFE#}oaMN^+_4$z;h_13mu$13Z0SUYk$VXz4a2^X*v9?-SRC2>c^hxjY2Ci<8YL4mptrwo4K4ah@Bqs?pRmLp()NR|Lkd=xE&joc{oa zd>``RjaI5owPlWXuPhQLmdm=hJM`!Q!Rx=z8QpU98lY_5m$xYPAk>||vok=9;Y^flRefVyb*mZa;Y4=c6v|^J+;!iE^yr!o4c3CoNepo>B!vj{zkU0Iled5E!X6}}sau#fn6&3K-Cr&_4=R8` zEIOXQejWpzLctn+8jEFPu=dG=CzPpDM=Li`oOjP&9q{Bysom6V*MBY1!ZXM@U6>zB zFh6W#rr$gvu4%CAvC}XYhOA{=$gDZg?sBb;{@&w zV|L1oj{Q3I;?3Ht^!9G@`Gvwv%2WXSr*uBRV{gBHGVd(9m2GEFjLjT`pi~&bdInf; z(C4=q>z0l*_Y+W;Nw_mg$Z&{P^q#z@8}#2e{{W{3t!f0&V6`+(wCl*|6k<$)wmx!m z&~)Mz2D@iksi)aC*s% zo|xesKE(tTG+Q!OnWn*zIouUc!GIkbJO2Lwo~hSqY|nPQt^BFEDmZ>%RF76hcif%& z?s#Mrhk#7i>uU5oi2TKzZ=Xp{;GcY8d;mDTq>rM~=c^;A@@%@H<|~j62iF8b zH1?rGX_Z857aw9b@9G=y-lQv+wIrOZv2v4!#DRb~+x(9fUd7A{inx`PLbKx}H{bhlX0671_>1bvPs4VeN_OE+d8G}EqOjRpzf-Y2 zkH;DvQH6$gpOQ-Pkupq~*r~|DUcae-ZkutN@k&))N6u9S84;F7jPjIhg}^^Q_2WWS zsJvC;Wsa-HRjO=MF;yjlY(VtmbJXxv2zX~$sQPu!s((6IoHS)qkc7zP&PmAIukW4D z6z+W`=QWJRGNoMr8_2jHvCqF5-wf4i8l1mS5z_?}rUJ?c{UhW3c-KLv)i);9WFd=& zh=vCRTN@mHcjHnGD=Nio)@TV{Rh6SfAhrqR(oq9SeDn}`TwIUoiB!Uh` z{{V6^!u}SgEooCz(T;)@<5$xQjBkhhojw#~Sr@E4%^PwNfW9S~PUS=NHJ-E(Ot*Kt1 zo@B4}RqUf6Wx$h^VV9e?#(ntI(r#Tcs_Jp5VPFJQY?WSYb@=)A<1_K7?pYv#EmbJ7 zyUdRJjB_x+VeB*c*zLmp5Upy3I}|QP=>GuBbmkjBHh0f)zxnawMJ%vQ6|xfNJ|UTQ z4#W@#++%;f-FW*?)g+fvdh(+!xKk2_{)}X($FV!-hctR$#(H4YG^3_grI}m-{ICNf zXRo#}Gx;0`!`ES~BGTfTE?11Kcur-Nf%O$VRPF&CvD>E;{;uc#r-9PUqLlVTa>{x! z#>1xG$3Da7hi!OeVb#p=NE%qCX(T_S`ED5Jr%d~CAn)pxG)uKzru5c6TwZcu9$;~X z_`w)Gb{)8HLBATe)yW#x6Ummz*p^X}bGSPyjORJ|;2P~zlC*k#rD<)(e8|p20HXw{ zQg%4UL68XSPYCNU86I5BF4tBozIx_p;bHoE+&AW*!3 z3}81-Z(v8c&G(&IrV<|<455&{u|-g;<+T24>LGV;F+3~^3{s0^6AqBD=Icj zJmt4j*OV~_ea8F>%&TD{S)uZ7)SfjGGULo**b*@Zb;dG3*Ntu=tZFox2`eqBqjmDY zwP5Vva*zod5$eZY`}E@_sDBir;&G`{sLe)bBv~U<=7`+4Dx8k_$M5$%Y@whhnzoRF zAE$Ea;~5;JWMKEs$9@t@Y&=kPI;@rCNd!{F2r#|qih8VyFwpG4vqX-(pBj2)>q^alBmNpTX)0jkC zBsSwXAP%1=j&!4{X&xT4TKlD|9HtR2OA@#|zmbsNBZo9<-%DooXl5c9hdq8w5Qmh8 z82+5&I45u0h>d0&+P(b(S$w&fiy>pQV5)(PV<6+-KK|Ti<{EZ(vk%eM)9{xn#~Mk^ z{{Ri68OpXdJv#RN_^$`5cD)`WQz?iiKR1`oK{@DuQv7~KIEUd0q><6*F7|1&tjoDM zBRt3Ng~1&<4lB^|8cQ}9wSO%Nx|bu&$rx}>!#Mu{^AEobm?hM!l~PIktMbT4o6P6| zAU@o!zA=IiVZ<-t`j3X}Np_6hYeM2#;pQ7gbCNUH`j2j)4xDRkQg|*^dzK3`vj~_k zFFKrOCp`-;cgDx2+)lMUnzpqeV65h7z(ymLqyGSx?Y|jl_M59qX05s8gPuPrO5lv; z$Ld^+bY9ruh^pI$-AHInis6WwLNmyu5)&tJ-}`5LaUyEcXm+5IxOsHgA!!UDy-$IT zhwq$s-;0`c%F@>j5-GyJ@}_jP5%IJ32zG<%D_a!4HRX`ATb+(vCkiPZYuu($8PFS%OnunhB*vvkgUf( zp_9{Z$J>HxO=j4$J$nlrw3&kW)yU^#f_sg&BdF{4;Ms*PXupTp@*=I~Lehi`L6Kc@ z*e4kG1K(`>aHgLW^3jt^vW;>151A*JOJ_T(bRcyb{{WHVl}mM-MXI+mRVST!znT}7 zupEqSoSf~!EXfQqM{dPwO!CS^W+RSd*do8%W5&K@X4D@J+<;Zo6xijf&avbURs@hS zjBHom8)x=gUeqSgEK<`s`T3cIkLGfoO^-0&89c*y8xQIZHvb9ov@XS4~~l$Oty zLEX2;2^~03SkrAuPO{xCC8Cjrv*m!$vj${M@v!CJ@$bfN%6wm@B-2HJ%{S1>4A3|k z5xZ@c9dL2m?~XLOG;vnbYk8^u@bUG=a!={$vtZ}^`|+I8HAye{a9MhZHEPSvKQ{hg z=jF&b+o?O_rxsd2Hf=hYmT2Ki0LLU@YG;NzQwo-31R1*OgM`IGR?e11lj9%gvrvD#zzPx3>;lr5(BctIFl%c^(3APdc5+ z`OZ4~o)@bjt7TqCtn_3q4B!CC$TC6Cd~68o_~C;EuVAgkL8r?tP-LA1TRbBwagTz> z{@h0Kq`GW6Y!W=r1v?Wpd6D8^WtFl#%>MvKL$Dk1q59(X8j`52WV*l?%VaU=cy} zU>@6{8~bC6RrJNNe^7U?2(2p#CHhuB&X8oUHhsZSxBd9e7I#{L-916{-9~qM@H~ z2BCNKvP>8s*VyCtBffa5D?EBtEk6Co=K8j5PZ9vZfGpdb;GAP0C#MwrN?L?aU%M+A z#C7hUEpo#rm@ouwvz!mc{{U%qp)&mvParceg_AALSfgMK`Z2)I&NJVOD@rR~6tat8 zK{-)nV|d4-0Z7N~jkuAc%_gT(13e^y>ee$r$VgR`6R>P_Y-b1OhIfeU7h;o0F#SnQ zMw>FoGr4n>PGQrjAKQoG417BVpJqtj+@+S=x1?Z`w>IDom>oU1SHsZOjiITiR9I)W zaMSr-myuXD$J-nJIQvntV!az4dc^XF4jGt!hQfk&#sL6~9r4$wH88G>y0U8KX0H-K zRzVd?@?=QEIOZp(C?tS-@48>v-rlTd_=D@A$$LjTe)bXv=k_z^It(j$&XGTH>3i@~F`xBls8U~-HczaW^ZJ>@7 zopT$x0EY#SA#SH)58rOwXlqDy3YTuANfo34lC0+ho=`^P8QA9|`|!%iZF66O3XNtu zu|0T{qsRyi85;$_{as1e^c;F>L0w|j=C~Sba)g8xJfM}`K_70X^Tc^!v0A6_X&{v# zdjtvPj1z!z0V95y!P}?fiZzxJw6TqKPQI%ge@(TQ_*!jJ_uPE zEV*f<1$^~W+phay<9vPiWJ6|84I~Bpn`s9uOpHphf^eYr2N=)B=Znixr0^;%DI41n zBdm}h&o+Nh_vyLe9a*kv`fO87iS<=^SjOL}m9`*l@-{v5?Z#x`qBnGzrLUs3*m>e8 z#zbOID-|RG_ym4_{C5_)I<&fFn(HjHM#~9}vN?b`1Y=@C0(auZo90hew=86}c*Ke% zV0i%l014=J!1o*dxXj#?+||}KXq6k9NIaqeoCDO1Zp+KJUGO%}#l9Imdq%y1Nv=R=RG|d&qk~^kE}aK4Tj5lh{+><;C1*u{5Nf)hAAhj8Ia4& zF(We;JfoKY?ztO%&(3&TO`0Jgie7mn3QUeS4Y@queY<>~GIT9Eve%A_47`xa-0b+u zuKC=5_;x;+)Cmc~bML!o1wkvJyIv zkVxC6I5R;JHh!Qht~N%&AQ6-K&o>#iQ#fYzsV0k4j)g`@7Q{YWW)|j5=OexW1%J5T zw;In5RF(}%EL#EP`e3bNn=Oojz#MKfgZut-^Jw~dslQpg`D0HwqT!e`9$@3!BrrQ2 zusEyX*{sZLO*v>6kP}#uvhB*}9XkI2m*0(aF-rA{w|waGvMg$OmvR)Q%6@mo{3|Aj z3ix&y0v3=L5eERSTx0?d^yC4)+kJ-!Lt5kgqB1hM0Oh$(cO!G(VS}C>^sL~+3SMpT1P&*mSL7CsT%(P@39y_F1_E_;NX7zQK3RJG+c#w z<9|$^X5{jAZ-4we7iydcC4*G2QbNimj%8_i4$+Z-#MNGOZaY+)_bYklwsr0b` zvB29Iz}Vw{1Yc2WEplI>hBa8nGdkgU2mo>ncJ0{bJ% z7k$qCPZsnYLXM&JH6UUo&pe3ZF1Z_x$4qqp0A3cQ43+6!cwlH*r&XCD%Bv%88@>mq z=b`@qE;SLIBEZxreN2{w} zdsIt0d<&=+r0H9dsF9EY7tH8it^oiHcK-ZKl1VCFglh&U;x-)3ESWLPy9Fb%leR&| z;Nx?>Eed#Ny>jQC(6ZQg);CgjDszB(jPmF0#Qy*r0Z9b+1`|ZG0 zE9p?w7rcoAtkN^8qv0}7>mMX+bN>KdCNoJSi>m4obGVC=2#yafeJ!5bo?Z_=sRpRA z!%o{)m+9JA$z0`2V*nBAJAL!O^!t(P7EDnGGtreqtn12S+YCPYaN^RkEv40|+0xXB z;FL!qZMqVLi(qxZ9Y5>CRjn*qnS~W&3QDUv&zeadz5f8IP7m+x$I7wP)UVak`GU%k zB(inHeAvh%xELAf@5LMSAzIN_X8MTbX3Urw9LxY;zQgau;3X7R=Y|-wA{GbFX@*FU z{hLA!#&oTxU!hAoPkRNkf%R!w`_3ISR^&XZ!S1&c~Zvl;4ma|kVo|LjsvJeE~#;a zcXEi!=k^Y#^!>4&xOP>EdPTbM_>C&wcL<7W)a7H&qZ>AQdWLuR<4GAx+G8w<7$cci zY=90<=eNo2o-;Zue_5%|TFgN$R*_i@>&RLWjIy?U_u>5(+$k-YCr(y*UI@!MWSHY4 z0Gtjh(u2tdCZx)|q9GV=Nf~lfbzFBHzkG2AOqNP-sj|}g8&Rl=op8sIkhbJ@&IW(K z4(hfMwPw>ksUe<5j#`}R2z{`@hjHKMic<)rxk8)899AoW7ze{fSbBL+Q~h4!u6TQc z)_xkRR?D@7#-j*iNh`_+of-8bkUHaWkK2bdTKb}B@r_Bu`kVg%IGO!ETzMG{_uPN@ zxLaGNB^r`X0yooDl_qGUIAmowWnaIxam9*Oqt&%Km(gX8HiA`1rC-(EvN6yOoMN>L zr5JyS*@VFp&0%6mo5oFB&!;MK0d{9{#IaVnZw;2Bb@|^e1et5b@*2_&; zU4lrYj!47A$hl--poMI2(4D()#A~`{ooa@kKA~q9-ewUIE`39%De01%;v{wE6EQ zuRSTD=BYC)PONhAkfS7?%5nie9^6%$Sm|APVz2ctS~dzvE>vgqjBmIE0(a@aXNWeY zE25~f@x?rH0qShA^q+rGJwd?6+&g*9lEfd$X(h7ELT}0!84_*qGmoA$%5U)o)25C} z(>1AW^2qVXGQoE{d-ekdJTanC)ubA$U74&`u_`?>jpj69U~+?uV=6{5#KaK`8mfnm z#rsovhPw zH6u)bfNdIvDnSFG&JTPX@uTu<*RbW9}kDfZbuvRin4<%{r z#>14IrG1+i=o@kSaJ*ybrM(R9>0TgZRtt|P>~ZbC_Q%NLYXsEG{{T7&4?Z8uR%SR{ zj=aOKsBV5S!qmmo)a>2@K3C+A%07{VPzheYKe*uERbHK2bJ>{+&NBuH00a6|pYao) z-|xbDecMuM)TF+#v~#bWR7Ou+0zqSejkXd#lWbM+Bsdd#LZ7_xR)VMv06zbYm1Ur;=Jo<35tAa9n3`)2CeV znb5RoTUnj3;-Y5=zdRs&lBir&8O70Q&XH-NQu1^!0i{WAwlXvJMZt)i;d*! zHln#VCCdIv;X~w^KdrX-Cu7qbX6@v|RO4G!E8XOckPj&^OJ$6y z%ww2Ls>C5DJj8a+K=ucUa}$pT)~8|-szp0Wv6&QM^UOkllZ}r|gU3?AVk+j%(OAUN zg9+#m9EMH1zBvF#E&|*5=9t0p2U&+ow{wKk`Lna(ixlS=F0hq z0A+KM#WVi^pXbJM)k``zh-0wwM`13?$|GD3LyUv4!5BY|E9xeEJm_VuWZ{CG`p+*? znfvZH$nV37P_)!Kc9~~Wh6aXdk&?tDU`9bZ;Pl%E+XHSXEo9WRC~Qj_rHLb1kfRvb zKPdGNbDw{XIfX}(@=a_M^3^8i8?g!r4f~Is{x~c$G!&{eh)_h*B1Wb8l~J?m2iW7G z_s0e&T5Lw;c%9SCc*67=m^nGDjatimNg+__c@jnBtGe>^MWSVb1Dl;d=cJS4Ty zN2;`XT$0=L%NXU2ea21{_Q}EHH?_E@EEFd2T*dyFPR!h z&OtpojN zG5Yh~t$L@_D=gZKys}8A)IQ%EWAnq6>`x>Ke^2w0?b_qcW(1y2Y;-*c+mEX&TfVjL zFDq4%gj0nj8AdlBW4RnxvD;O4zMn3iPB|ALC+CbR?5r0DKKq~T#6PFh;93N3ka zSOwlh&nzdR5_cU){Ns&U6k5;;Fx_9yL>Dzt`CH3WsmZMC-lFz9uY6A0Y2XK1ruq2L{9A-RWZt}qm>eWkq3z+6XxFiwH z@JH##+;Mg0i9CL>nOM8VV`UNga6!N)x4#xVM^8?xp<1UjW>`5-B8|%yJ7WiY7XJV) zDREefr)d?@P05jkx%%nHnnn%Bg;3YBx1*v4oD<+ z7zBHbyJv>HICU)}M>M1+%x#B(8cgyA#&^fD2OkIR!F)_(yB!&6&J6aMUC9_B$D?IA z$5tPow-oIv(qz4$!98geyouUHbR7KYj9~54e13h$6DVDh^~q|$ie}{m#Uf@jVfxT* zkVXp+f1Vid`4c&_8)FC_Z{@F8?_1(k@WyiIDC-1j#JD| z!y~92hZkwHOHtF)Ye`-?1XYikWRC|Cb8~XA#@m1~*ZjC&T6^#;Hfj?*bIz^n$N@>* z4)`FAk8}3pnN8=`^z$6bh9%~@#AR6+k46V?Puz9jvVi&{n(hp3o=JI2b9%5z0CxL* zz08O4DTdudnif%HmSh0`05MpcfsW0Mi2neXequ>d!s<2I<@%c8T0j(&Bw5^(gVP85 z;BUVV>(49Ij@3DZX(MpV?gJ0YxJN$9hjS|77g|HgDi2-L| zHk}YP{VSpaMZ45>K!{-+r7{)ZnEA5DDx-=1ybGWDilu>6~^PDW?kRA+GAasGrS~ z0D6=UPQz~7`yIWwR(Qs#VW4CUn(HhxVRpvgV;gOq#`wn#x}u%w?mcmJsr^-oo@di1 zFg(Fk4>v0v#^*bXn!05>HDy(?9hj~@VTI2rE4d}Ga=>7F5!bI7N;2u~HjNav zPAr31>3Vsao0ce4 zC{h>_20DS9jP}Rlj-r^tiYAyyWt7Ae#tNz)oiZ{oPv_^1`!%{3XVc@K%2WyD`NV+E zz-$gNxgU&fH{zY1ai;k&v^4Cy1)ZFXGi)+3)1ct6!nfh8dY#J9Odbg(S4WVk2vjPZ z4y%ohemGL5vReMBr_bd{YAH)Y2PRoaQMm`U!2IWfK?N$he2qVti!|!o>e&u?vA#A0 z?eo4mjv?!nQm2V#wLDP^mK(~h(kQ`IQ;d<D@7VltnZ2gJn*j3WT^oc1Gp z^y)L;ioP7MY#mD1)rnF?X)3rFXu$yE9RS#m{{RX1;y=<)bHsL_mE&3~GRP;!(<=Zl z-G(p*-8j^0wIZRU&vig~8UT_;M^Fyi`)9xW+wekg>In5Bk||C(=KwGRI32%M zf9=Lg#G36rCKX1hBSU6V9owj5oE(ndw{7?0{Rp)BqfdfJnkBN4mFM00hpUqycggOOKakCFyD@l>Z!Pc-SN+7U2?f0yQ!JnBhqZN|iG zaq*vH#VdMU9ag1iZ^WjwQb#ONgUZokI}!aLfWh<3G;mAEb!Qn3y{{RrJXHe91!nR>D zBRV%I<$iPM106BB`9F>t{vjLqemMS}ipJ_JD@r-JInHuO-}U$R2aQXE3Ttvfb5Rtl zJ(P;&x^0g6*!1AK#+vo~zYw>X9ftBuzCz_?P@wX#_5^M4PkuGvQoSQJg-Z%z zibxVlOzV`Dm3=|Ih#(J<(}+40vuax0^&UeC5zHMsDID0`V`4M-Kbtx&ny}G%?AwLb zX$-MPB%H9ujJ}h;2<$Pw{`+y8)HysSGz@tWEklzxnXn__by@uUVc2c%rW~L6L|d$_xV8JM2b(Z*C1y`KS9j zSgUxKR@5ulu?$Lu3=a?)x}V%}xYHY>BQW;n<@cIrKnS z(}0_SRM3W;k0QktaKtWixFmA-0ER2vllkL~PfxC^Qt*ifEDX^uni!S6OuSsU~@0|5DrNB;QEm^aV>XQR6aS- zf5j&`8y>`cw;gy}SgzAFZYP~AM%gk(agFh~=z5SkY@`FRU=>UQms z!aAIb9QEU{L?!Jh2Yzl*{Y-tvPw&H$v`uOxxCb{ea8zKFQG!73FbC)3kEdAXSgoTY zMY{l}sL5aeJ@7G(zqbd^D!jk-R|`W)0?8jSnmHTwjF6>B>(gPy2<8@9=Mk7?keG~E z$0@)q_v$%aSwvU|lXSE4u{m61=RWuY zZMuE%?ua&))jp-Fq>w0zE?`4*6g@$~&i>qST2zlqM20x0u`S2sWc2xYBcaEn<2xL6 z>+jZtl83c+YRD`&3bLbhMj-zHefI0$;EJ8dD9>g#TI*&=!Sh^&I?f}5|-2Cly zN0q=vsaMTVFv$1~xZ4Lkh7Ljd@5j1x%37?Jf8E+j%jP6)>B5|ozQY^fe}2V^!XGlU zo=Zn!SeiG<CMC~=Rs+aDu?S94mdqPHaU19K?Oe6%D0tlORUIQSe+zGS|1+gfuZZe63Z z8#kooPII2SJRyMz37E;D?Snnc{`mj#NrbovK_+aV>LcbNeD+ho%7p#FXKEZMeM^6jgKT1 z<`M_VCPeB$Jr2Ze({3y2g1)0H@y1zWi9&Lz&KH!0*!Cpje#3~moi}ULsm)>P$peIq zv$IBVj)MbyjBV43ZlfB6NOfxPA}wn1GL@46iDJ%uN46OM0DeBv9>pDA)c1a!Xv->( zJbD~C0}M&o#tu8+juP=dm}vh14XPuSR+T`8Lx$v13Bfyz>_&Rv#FF1ddV$+24kBA1a*kQMDv) zmLT)ujsE~jvgDFaW3VHBBlzc8(>ylIE~6o<2~}E%i@z{!!0ob;vG@D%&+!O#3i@@r zvLuk(iMa|Kvvz*j8xEgraCEyrR>I7YrH$5g5*2U{H!BjwPIt%oapkBbpPE`FR8^0B!+aNUH~%l3AtZlax0qJj*|(uJyjwwJI0k|2V&U=2iSUl`QesHEosnLvn7ho zA~G@M0f0lkK|39~f1Yu}Rc=GLO8UAu}FPco*?nA0e#NnC!y=N#yEs*=$e)0)@6kzSos4f zT)H?szkXbMd+|!l74OAeB8`wKjI6(;rdvF@?!%WD{rEn#&dclCm4&+vnsQaKPAO6; z&<*5loMFbmU}p#4ig#wIDn)Jz%KB(jn8fSqQ27PIdxCS3?0xu`q(StW%=V(M&q`~a zO`1RgBiNra9lIaN;-yA|RMV|N%<-|DrFh{uZdA`H$6RERdW?4BoT?M)4@Xc{CzPy9 zBs{0c0G@I)oD2-?J-Ynx)hi0i0gNk86v`!vDEG-icL#g}-|xozXQFFQO|z@MryOe( z?O4S+XL84VvAMy=ZY0^%B$d*t*z+Hd0R*d_V7Lb-s9X$;_9uokNo~(-P@@B*+KNJA zBO{oASgUQEcFsEO?ZGa_>r(60f@yUblgx~(4rteubMg`~=_RtKupKeQryLz>NiJHk zb~^Gi;eB^b;crLAZ#*WlHm5SXs2$g}zQd>TPHaPT?`5${PZ_bgT zy6aLU#5Q?Cj5t6;0(Kvc+2KJ@OAT8>#Bf-%8^6=}AR~ohPcZ631OA}x!zUuttqoPF z-@kG|`pogV#^~OO0)dn5j5bf-g=ezU>Xqcu*=Bg+CS?Es?wA9(Bzz7HTJ;mDrFbbv zR$6hNt9W0V0I>9^++duH{E@({(`xW0r>C+Bmhp{|7-6CWklx|5{$2QL@a6j=&(vte z8oL->=fe8bu)>jnxGj#G_v5ejcRInP!qZ_QuM5X101}L(u^$BB5yYKJ%}KSCvlEKd z?lVj0F!Xd@Y>vkyf1d*Ima$T$tMZO$G_R`-9f;eSApHh?fjjTE{8gF5L#^p>wTLg( zl1lQoC}u;;&a4I;kO;}ke2lwtC$>1|zto*#qz+(i zb^5TO*p6US9!}WUY_;KXkasxjbGApf#|{r(_-jv#Oww%V)@P1+ zVwcQ_^K+1Q(h=rE#e4uEduT9)yxJL z{&8V}w#1wa;{^Wz=6HX^ki)3x^zBzk9yDm$ywOX_M0*UKw-~|S{WHbtXZ$r*=9f&e zgpxaK#v_75DaWHe2`6KGdr?)L|2r z5kkgTnqj#kIoy9n2>auY640}(Hk2Z0+9>?R%zUC$INYDP>5Of~^nO$Hh^yc5Ty^bv zrR=#!Lnkw+^9jiN5;yIU!#cIYrRi`bZ>h&V}x}sA9l9?#Oz7K8l!HZtjnJrV9V7Si@-G(()*J+Ug;KIo)g9#u1M$Nj})$Bcb86 zO12bPF{G?9B7!nvIQ3&4iO2WhlV*o=S9H;5(;%8hogpg}Y)R%{kL~lY;!dBd+J?PU z)nPEmu&|C(`Z97iZ~dpg6mNOCZF3H2QJ#z`ZNJV~cY)ZNs2Wl0i5 zk-ta;9&gSD+*jxEa_Y{pBWks)O%N+>RbiK^2k*aO-=`mII&9JAXyU}tt_6O_a9Ok8 zZT|ou@f%0fboOy(p)xWlh2tYX%OqvjwnrPA1{Qc=om?C?2tJdH4!--1zBqA44^C_E zSj}2T6FU`6?}!t8gf(U2-E;Bbmqta6UiRk2JW_3)Y|`mYh%@ z)4I&9|)!xdfrf=Q{yVVYb6&9ERGl79aG06F1pX4P-^y6)>Ck{qaz z92o%xKtBEQK6u4wzmZ~1D&2J)m!m#qW>w`JqduRUa})1_lf?_O#jR7Cm@%cKjS^K; z{{RnT(%$El;{Zj-+=@u#J+d$cP6*$o{{UqF0EGEkr`AFn>8!W&-^?I0 zXKqpUCyew+UN(lDCypLzn0Y1~1JvMP{O(8n_~xK{R;xcU7(Stj#_flUfH0@vk>B6j zf=vpK5MrH`ZzgX!qF>Z@!5Gf{2itBq&}0$Ozjpj%%#y>bT%!#j8Bu}Q<8RL!WcZrA zmtM5XEN?4GAz-ABFcHjip4h<8O};q9czWf#9y_-+=ukRCfLVEYlx?u{f8QzAaz|&$nuuO0UE@f zsX8f;jfcoTJ^1UvmM6V4rIazjJSsvEGao4+ulE?nI^&MoSFv97m*ZPhgMfpV2b2tz z+uN}nc$=$_Ei+B$7-e}1ezjceHqKW79Q%&k2~$FX1lQRlV2DJ9I2azFt`7Y>aSz8; zHBS)19Xe6MV`uXgMs0{VJx6?;dvDu~9QI(JT3B1mjz}UtNdtKls0=y3#4vU{9k|Nt z@z~WbHk+l`nyi$hF-*XYRmtDfHaX6H`i>4xDrqu#pHoiMObrzBUB*W^3U>@Q`1^70 znP43<4N`BZB1}cdKcrx(Wo6l;dZGc!NsWlX03L_-@5Xkeh;PUj(JMk06MxFW;T3W9zr_aukAUvcD zE_dn(82oU06`+$(v*D=SRTf7wFm^nlaOacnzB^!i@NX4jnrYNxhDf7I?ID$))DI>( zesPh%ZZ#REZdI7+uq11XaZ_R>AP^j2a(w4F`Qa#R#ZJY9qykZq1Suf?Uz1?vN`K3_ z2Rw1%`!j2r1mf*COt_JPK6x2e0R4$jJ8>pk)U8vcBA1FA_YhcuKtV^0CGy%LnMxNQJzpwO}5X-8}TzoQ+DOb5knT8s7CD2yr7Vtu4BJ`zp>*Q z)P^+OK+A4`u^EwL<`PU$g;2XA5_)V86ZL>E>-VFolSw=?S7wM2fUS~A`5XTL-;D;j zr`Mv1b~%v>R%j+d{HVhpq>?j?fm($HD@IlQ|A$vn`ZByxd{ zqpmm44=ae+gaHG)AW(Ucf|KiP^&O90{jr`EuIXP;xq2GV!onZ;eE9Pif>@rzexKiA z!xcx>Cv5=3F<&;kjpSI5${++RPfT^@AfDR{3=_ni5?d5+$xUQbme6AYvV~?G%Z}YL zxW+q^zZ)lV(i;+;q!mN_RRWk@F&J@dgU8EE->TBLDF<+`eo>%c%mWOoN_dt-vr zBP-(jwd+-|E7Ijcit;NTOGvH*Z_iCH>~GF71zfw^MC zDP;o$uWamg_Rk13SEkk8ds2Zc3{R24K(@Sj){E8bCtH=5n!S!i*p4QZjSU z@u`B;Q0e0Jn@I79)np1bA=qG%xg8Jp;x@miR9yvTi6OlND6vZ$0Ly~hsCUi=f6qKf z({x!iW)j!)sYjMqug(0%+YFq;Vxs`#85!a>;=lVw(`{ey++Iz{(qx<}J04O2J7-`z z5uOG9&Pr9%q0%kVmIYQkvxXR#e^xih&ONwxl{rM_rI`hWN~j@e&PLc)Rvq)|IUe5} zPw|XTCatGwG?U7PFdB3Rlp+nph)&}h?UUPwFe&P%DOaAj(NX>+mPIq7w9nJ{r zx%c54+Naapr1h>%5{Q%|NIepcVUj<&&#~>rU1FMR`Xu#r8gVMg9wlIzVmZH1>ydyk zMtX5CL(_AmO{PgScVdBBHg_ED8iw0_uyA)f^x&jOuB`g*p*?D{tI+;(##|I-WdX2v z13M9o`tCTQ@Kdv?Wh6C~)1du97c0JdV0#{z?~WC?Y*T33wRxnoO$CO9Qzfw{&S7EBuw6q0n>FmPg;LZ)ER@R1W2PG z0KVDl)OGuDUeNRDNgL&4LLN^s01M5W5PD#8_s0yi2KF8U<^bbEC@ahQdpXvf%F69}TwI&%WG7Re3API#r#iN|Q=Fq;6dDsVDsh zQU3r;@@v=f(yg|5rFnVcQP73lW8cyMIrrhsD^pJ_$K**9@*$7T8E#homCJgL#|P)8 z*x_AcCf=A(B*qCjo>3XVkD&_R+kEFdYDouXB(G|O?NT2si6jygY=TGwBp$~Dr@siS z2Ugc=*pTIUTPwFRF$7~j17r92!MCa3gmX$IS(Y-OD9 zh^9k=ImpNzH|54UdvHpts`f3*<4>Yc(pC@$5@Z!eJ8XTn=zII)ie^goHCBoV1`@N& z5@QJ7u27_7s*c{riPbID)2TI9lr@JthCGD&vy2>c1K+0%TC%2-eKNV3;67ePHaHp1 zz*bZ zQ7zunAdw`k9FYlYznREYfjI;Y`{a(8_Qwv|v3)$7i>Jve%w9O-*oO?>q1P&TK{)y2 zY$}5ep%TbhB&#GNEzgfNyW_sWas9X9I}z8ncbcs6i!#az6>m!_5iM}1b z8X9_SSS`Tuv&k$nD=1aL7-DiWf;xKx$Faj&hO^9#VclVqkgD@xK-=5jru*%jaA|W6 zm|pdZlZJ-cIZjC55Y4e0fzaR%`($s&ktUmFxubeH8c591`OXQzCm3V)Is0(s^cJg& zPU@_*!{Q$wWPIr(o%*P z<*sGtyUNF>Vh1+>ZG9;Auct@l6@yiDs_=Fvfv;qk6Ik++gp&&NIQ%X!Po^*VQdq ztm?5Uc~Yu2>T{8{G1Q;mk9D~#SkxqBuCA4n&C3$Q%=H4N_uCo49k}|ns?zG0qJiCQ zM&OiIDo8u?V;k+aewgA^bnnr+ve}={i%`sxx}QSfJtPgWjm|;ee{L&Gg`&BqYhEdj zNs1SHP|KH|L%NVl0ruPv`|!ty=^DDE)5?z(qiCUw63G}NB(8dMf9Jmp!9p{n*wkdJ z8JUYQku!%>B;*6o?ZUcyeN4193W+kimXRQqTuCfvJr8m@M#DQE05^;LI}eK?I(DTT zMPrmmvPN;-a^&^F80p4#rCa)4TeYfJM6X)MJ!J!A!2{AyP(b)RYYNX-SJRhB(WCmFXQyJpS(;gJ!B0mA{{V5o>9NNIR+iBk-Ccgc^UT!ZP!r5j zt&-T^eaIkz`Qp~DBc8dEv5q-{28p?{5lA^CdmZzSZWh#Hu<+K3yy(^zQ4uV1WL{2T zlkM(t?d`!dOK{$ZEG;E?>qzkVImstD&gXG}Mm@(G5i?PgAgCZI&b7lv6ySUF2H5)l z0PB&r9a_}jO-8PtZ5?DQm6JTUEKc2hL~b%T_RY$2%#FuY$;P2pLjd|MQJy0gFR2Qs#sJ$G!Q)HyQ%A4f zp<$%06xBJQU~`<1GQQu_x5?r0G8eozrfPO=%U*dZT#kP(MN`P6VRJhPlC^8tc8V{V^3BjK9VZr7g8y)^w@g?G8G0lENibKHBL9?SsN1G7!;*H&uCrQtR*ZUmrHx@Fj6sW*Y!*-f>z3cAL)RQ2 z`nwytNo6TC)Y3nPia=y66fB2qt9Az@fxmtiv1r}Z;k~DU^le#rL15ckutABSM`7K#=f096D|7E%C8*mV}ipR5aCMT`;25`u1^`g zJ5#oFyHM*~l31xDFPH!YKyT7IcgFt5iIZB&Lo@vinCvZ(rdhntR8KJ+xH#B$*!0gA zD!`U}H62E=Dqe|sp*)|>Djee-`eP(}@hCj@JT~`jh~c`;ADGH{xuYwF0As08HwOgg zd~wdDs>C$ZhF6X`+B6kZg00LKCNO%hKzjUeag8NtO4HibLlo#0-I)XP4mo z_T$YeD^WvRN7p1zsAuP^G%N{K*mLdI;D6JCCv)lPsq6PYhmy5qaXL||olmy!EO~fLD$v+Dj4ghV>n}bMcJr^TcgD z%UfKM*P7BSj3Z#`K~AbR$3k(}8O}#djuBB;P7YoMB_XkZGDkBvU(&!}6~R0b?H8e{ zol3M)H>5R=TOd1u&4Jqorg&uGo7-t2`nt2%mLPZMP2?u^qhO0fX)WoIib`Pp?R6V{U&8{B*1QF0FXf2 z9S7%%e4W)@Zj^6F3p8f4J3Q#;1C$J4emb7KPi2-$YX+Mt3lSqdc8&KC_vXh{Kfc^M zD@~=xS~QF_8S@@DU|mpxMt z`i^@X?~XTY@kbAp=9cDQNnP0+U=LlhgV(UFDA)1hUIfnr2yLvNh*C%7N<;2sjQ zX4TzJEke7bbmd}_O^mmzsXpG`+&7hvwS@BOSanq#*eH2=5zUReA5r|{glf**(7jm_ zXk7%;MA+R%a5{Ajw-3n-7ACh^RCE*IfSJmbJxARC0G|b@WX+Dxg1%n)* z*q6`b5>MZ+8u68D6)Z|6^Dd91Se6qCf=W3jU`J2y+lbnBhLs-WiEA`*L;nESje!9{ zC0}mj5ADTDx1hZ(c7vW7yry|!=o|k4GI;Y()H6+)>cY3BAVr= zQ9LOiAyIRaw?okIbTY zDQ;j+!>-2!l12x=6t!!0BT6DfkDd9xh^Wf>iLmDV`f+0QDl%7w?A7^af+DFWH?BO4 z9OHA2ZZnA;cJQpjQ%M;inVn`--LiV^`giO0;J+$Wt$w&PB#NAVrjML~xGr)@9>5*( z^TSqUj)s+9h2~)|l&EAo^8?c-w{iL5KMb_%ror_^W{xED1i+ROlk@N~zsG(&)wLIE zQEFIO=+}_ON0Y#RPkDqQg^UMykp*4L=TSqJ-u_R-sVd)qje00ZN8`M&~R;yTw zQ5VtxuF@O{6^I={-<0i+CN8t(YVxI8rp(s=0GU^?i#w1`dV`+bK;x-&c{Pm=TAZ=O zi8C>(*$XV$4f?w;Z)3Ly5kAx}%RvRRN$gU#sugj94>8GaZlHYdJvUD}1h;CJ2^91B zi7R1%BomUod;9+YmkM9G2EX8&b=cUd)M5eRiT7C(r{kvF!^4>Yzy}vcUwXOn4QjRt*;a0IFOQwmRT9`S8MDRx73HwhXt2E6XDc@eOpGL%;}NhJ*aAW6{{S}s0N;R< zyl0ohDJ&B#b-dEdLf|>+zxam3;Ai88u4<7)=}<>1OKD%qXXPv;U+7`q9HfoT_{Ux{ zRxSxVT>5QTta(tpW(hf%kjlFZld$S>(_zyj@v*lRCb>?#AW;kXkvLK^ag(sqm?UZ;fRYqC<2k|^b%lL(<)^Le=>mBus50qNTr z;gC~ls=-p7yELl2vGXiV3|J10u`jvZb{^bBwc&|u>jLzap^QyoBxphp)q+DW+XvtC z$4r8Ts}j5n(CW%-OB_;chd!1BW7E@q$BPzYeIovmN^25L3rg`;nJ`%aUBMp1IQQ7_ zgw0N^`E*k>)`e|OuxU%6-c>Dt{HJUXxWO1796uE14HRmv30tems|yUUkcCox+dE_1 zuN*a*EbH^F!bdQA*9l17a~fF$NPIRu{jf;R1pcH@0P z*p}?rt9F;4Qd1F#t(a8vlP6HXe}`kZ_XoEP={{biN+&NH$pqYi$Lc~3d02MaVtzOc znQoY)u(n+gBZ;JF$Riy$!P}re_;@u+&{Wl0&}2dMZ8JpF0@`Du2RoN4VRDG@DY%NhF^f zvccrneq20qE_u0uJ$d^1URiB5VI)=?Fs+Fn{w!f|Rdb%Z6Q20vJ(6u5?I&KT zTCD8#WI(T6sBcjlF&ldi{Ldb079alrP%VcH)@u;HS}_0?P#EqAZMGjd_v5P*+`nSV z>UE^2<=D+T0}Q|_k5+N8$?w?lN}VZ{%(5_&djrjGj<60=d9mBB$LE8yrkG4L=;nyS zWnFnJd54sQZ&jrKbagTb`B$zG~7 zj)psun4^=MB18ZH%)5h=pV@lw#-T!6OFUKFMK&E_SKFI#LzNgEcgWuv#xirM^KUUGscwO5-ZwFl$7IcVcQ))aodgV zv6xp`)?UQAUWR!ake}E0F}t2`VC5Hk(s>pTDBOkMs7}1gYnIt zAZuDIpZe2D)FiH^y}IoKgNYS6aKwy_i32>t=ii6CTqle8h5Fi@b*;#%swV`aAp-=A zjley6en%KF?}(w&>S{Vpk_y&&C0N`c{!E~a(D%kb$F_6D+A!IS>NY}<%ZTDYbIjoE zL0aq&43k8K;0NMip5m83;W-p`3zpKfi82XE3aqA1sN1Al#qn&Oj&N z4Dqj-!1bH)Rr>PNfhtWKOJYS4VQ>?e95L>vfBtxOYF}ASb9JB0jSO;;vB^0jw_iyI z@$trU!jMaQ#@f90>los!sw)z59RS#!{{Z&`zg{Z8iQ>C%O*EvC%E~;z7I0XEVH{ZD6IEuAND_4>zY+X?yJNlIGk`GS9*na$GeQQ~Z z+D){UlOls+vP47R1}F#z2fxp;#~A+r2kEjwki^W>4TNQ|mu#lOfWn!g(3^I1; zdUgYcMgyt%mF3f{aw3Zmv`ZQ@43E@K4t4;qeB*z7@$|a1{vEa+>MzvlA!V?N-iX<{ zk=XSF`~G;3{@4}a)~Lw>Kp|;EPQ^J0UaUE`1ZREtsdP2(300As>L-pi7?@#^F}ErG zK#b%t8~4X*+1lkpQq|;LHfvC))4*)=bD`-F04XOUn|+2l4{Y&uC6cX*vl#sEGA1%v zBRzq^VUzwWXSp4^K=55T?f7D^@h>iPkCowNB#^k}Z2OIeUYP20#c!pS2ZAJyXQu8B z!=nMd#OJs6;?sm~)r3yJU1{YO7*vK_0Lr)|gRtC?aBvCF+l=}z@qJcUG>J@)3i`5y zZGhc&2N)wGak2U1Q}kr%x9i=q8mq?2B~~GaQMNW1z#aPb<2~W6X=wc=y+XWoL~|64 z-Eh(;F$5JKr@7ldr0hoo>{oO=XQt|UrJB-~ib|3ta~XU&+tk>>&Q4c5cIpoo7AL9U zhqLBIF;^=mBjc4+pHHZMYL^AA(E|y!WPFM>H4?NE^XqVGQmHeQ<2`#z9JG@5|~w1?KLt${DJxVWBoDgcq!ElMh4dBuUbSUtC*!n-9ZE#_wCqw z`{#?7q^zt+L)d2lxA@Op6v!SURRq>;>Houz*_nZ_97Y-|7>2SLJGX1I*k zwCSDVnAq~w-`Jm?y*qJqwM>{E+^CU=tcZ)jARDISE(q!RM_$_w{8^4OB5BDysT|4y z4Y^Y4odyO7-#xb6@h1MONl^^oMdr-Q&UWpw-?lsaaneg=1O~Bb79;-v4aZo>?sL$L zobT<^gemFEUVH7Q%B5a4ZcY6z2=tK0rpF&Ua9G8P8WoEO!p*?^(XatYBVvSh8xAqc zuE{m!u^*O@M9O)2Lbp+c!TzjwA7PAfv71nPmF8&DAseZ5jn3@A=kPZ@`tcw%+ch;C zaU>a$B#gX?oHsslMi1}z8*tQgD%X)MiBT=2WF&x`x^rY4Zh8*mew<9T43pOS>2V#1 z2wL(&0OV)e2bVa;d*inb>Q`AWn$eFg%1Lj%6*eJ;vSp zXFPM^X=D}YSGwsjJpTYqBFGrZIY%(-xX#({!<+*eskUL7I(~?$BytGJ%FKs38SGAT z_~D8bVM|(liDO5t%6ye16t2pr7{UAFj<3^Oe^~@B@^fYS;i7Oua*uz0yKpOzrlX@o zm95DbhzY|eB30xgnBe^6aADWTv7Zn@ZW{p2nOb-Ro07hhh3kxT@9)8_ma^7p8!@4f z0~S{Y1xM-~_B(X{06r(wYIZzDR!JmRkK&nM_clR+pI|i<~J8eQu(Ag z*M9l;;zny~D_-R~aS&=WW;lQt+-D%2#sJ^1Z?=5#CYF*%|KOAviZ4$L|aef~J4&2CpVW-IcMrD}z37Ic+lV`f%G2R@wt07%E_%Q5?K?}kiunP8B8EqJ-3 zkCz~CfK-E>$vMx@9(bw`p^lDTyig^ka*l<$^1hy5VUwP?`Qnh%^eIQDg_5d)2PZ2- zxL|p5N$xNQPx-jb!n5f1tyx%FKQ?4&Szj*LVs}&3Mn`@A{9Cs-)7`yamPeP&^PX41 zPEr@rKFp)elGMIcb}Ishkmn_p$pmhs0Do>P!WUeiwsl=Ty+v^%BhNG; z$X-@ZG4MJ8`QmSh>e;V7I~r=Z63U3;Hyp>f48PT$W!!N@L#fXVn5)jlN|L9OD2xeO zF@oFVZMoa=$C^M%p^-0F=CIbKmaK{oDCNl~{$2LR4{YK^+EU4+>DH>)i|Q!BB*mkA z2jwRu4|BNh(}c7Ot4i3``2Ktm`^J736S#~9k4p*i_ee>6ggLSa_YVlcG%-(F5BnO-N zSZ)pg?g1QRFC~pCIqTYj3oqw|Srmdqa!5hu2RS&x^*dvP^(l3#-UDoZ*L zzfSCWa~*;C_8e#_$fLtk*wiA57L|9BY?UsJ>B${NcLZ?8S^BrjUbXd zfb1I_q#cJ|zkhBbQ>lMR)UDOkP)3lrYUJcVW#siqkUH(t->(PxJB<`tZK>=eRI5iE zlCqgyPc$YnoAR7&cHvvsYw7WZxeB$29b)Aw3&9sI1K{)ku5t7B<3r(wFjY%XE3&!= zMQ+`s-?7Qa13fX0ButU&TE&Z6yM0I!3jEIqNeZ*!d9k*{V;!WrTSTB@ch>T z!6mhT%FgZj7>;FZ^ZNwu?_9R!|B*sYoVleIw$83*o3#}!(dW92DlElVl zi55eWgdTDv0~t6!+l^O|57TM(^x2e2B&*IzKg=vie1W>2r2U5zU6k<>-dMED&|Fy3 zDVNMkEThZ=ZbE&=_{SYI_4ON3Ux&<~si!gv&iif)%iTs z1oI4%MhASIi0n4u4OZ1nLLEw*&dKIXkiR;R(S_wIx$lxe`;)~R72&T8pTW$Ec~2;8 zw#)}FE_NI5wsy}6Po>3Q!)81gEE^3B%^3i>=Jq=u{KgLyO8OC~7Fb3SOtKXXo>9zC zIQ#o`>7Ej=3STt!Xu^q+iK`1Iq#gO4hjMrJ#@r_;p3B05Rx(E-#!@B#^A+YEVE4wy zI~|V}bo&+lqRdr?C76U_R9@_^0pFn+7$b(LhO(+jdrj1!fowT5%0b`OR00R*f5G1z zRkNzCI#AhoIgz6BW?%~e$=vPs?ccv?o;8^y)9gbCmPw&=9FheHWJOix=RaaUBZoBe zBFhzf5HywzV8|R}B&pqj=r-HjAF<-Ih3amHPDa%&Y8iBj#8~p9W6Ie6pa#RXe*8Z{ z>q`_4m80b(dSv}cotx*O8RC1}k!+<1f0CSv;y_7U^9KE0a6lh^530y6Q(Lr{BD948 z4po^saM&RA2XXPA&Zi9FEniBlEUzSyiJ?a!6C3Wk;GTd0dT^JBYF?MaF~g@?l-Pl} zqZl5prCEXO4m$T7Ta5i&D(t-xqn09e4Zaxs;~g>AfN7#f`k5L}K~89uj!FurJ zeDSZ~3bT!4My*Qxqn~ACgU<}0e%pMAR78w2m7ibRa3n9{D73n>{=xYjbO2 z5k^X~OBtwTmE%5^V5hEk#(1HmYn820TRL)N*NsHW8T6d>0C(@Vu;Sf_YoZZguhm#a zjy4AY%ARZ;{{ZuTF}@3{hIfBA%f{Q_ox2R5 zw#SEVNBl*g)N7U?#Kl4A&bYuo9e(||3o~0$F~eI>SCY9h%8~+kho!m4C+(g!RbS4x zS>X~bR}9Q@8=1%$1HXRTb>layyi;9S6W9HwG{2l)QekJ%ioR@8COs>aI znqN8=bGX4A!ASWVaPGAYJyC5^mL6biuQ1rwKyyy3zeb*++mg{4a&tp&#SRJ0)G4_s_N8q(#-z=%5wvADt@Tg z^e5o<;2r_hPPazHF-Xs51#jjYg_wcLSdVhMdu_s=A*m%LHD&2-MIQX)FH#EV?&ijgELPh@R9Q8eb-4og$2>E;(5lcEBUI zr~J6H;mJyAQ3ZFEU{Iu%$1nhTh#l}p97@o>uynUpZ>)^WBar9I8xOV)5AVi(YdB=Q zHLqCLEZ34d&8IVeF4{C+V|3-%WDJ}PpSNBr!=*RXNp&NNc_MWaOoMq7B&i=K3UGRF z#%IN_=-wOD=4_g?Sa2M(V08y?pJVWN)A&~6!QrT^9LXJ?WtMVDQllKB9eQLAH8Zg9 z!-Ybw>P?50Dmlg(cJM0Mik;7Vq9FjCFk(g&jTMDNY7^^Hw7g9FZqBb~zmh0Cd}j6FdIT!$DFgwJ6zc zI>_xORmp66fat)GemL1_)}5>ftraM>$PA6@1#^t9I$$<9LrJP%R%j&xTNUCGvkkCG z*+*la^x}O@PMlsiLo|wwau$g&aG-z=Sa$aJ-;B?lJBQk$Y4@!|6cD9bG7^kee4J%m zcLN+Wkn#o!vBO*d3~V;!C-rPL+qcID=dyMoSZWS7ksb#8| zWVEt#d6;lORL;PhU}qoShH=`jY=~RL+GVPU6+E*dGUt_)hR%C)5uALE9g>Y}(=C=r zo>GJf`kdhI4?}_2{Qe+N)ak>iSkqSX%#xv+vO0glI6T-rHun4R--j)U^jKE3BC-VY z)#mi`5s<_U`wjjZg8rx(hTPf#p&4brLDkw~nGzv#!0q-v{did{Y3T6Sc_oU>%k;1> zR#_P^GQ$LH4_|+Q#mbtRQ?+Gm#pTCfM6TTUR3{*XI312a@7s*_jit?ZSQZ_Ydev@n zt45$H!jc@2P7lA_@pn00C{03o8qFN*^bGlxdeG|M_&OB&UM`xpo5}o})h@)-_FTy;_f@>FD}g z?ymMc+&l~kQaOHkx7&R1--+jvr7GH9`Y<9=bb2-t7K1!?>XMVnHP%OSrFR9RNZ^s+f5l?rzNbR)hvv8g0p zeb}#9#8A9X7D47xPbpwP!jeeGQP(_0(&V+_p=VN+x!|)q`WjFjMsv%YZrLXvekO$MD8C({ObV;tM7;QD>Aa(ZvVvuY(g zK$=zA6`ILY6_gm?*p7spV3D@md#23}y9v}FjZ(x47BUYg4x}7sx#`&U98U2DrSxy2 zNY$QOro%~Tf&hrkk4p~6rVkd>ui|PqVrsH!j#6mbb0nY3Y@9cwcgIiP--moS*DK%D zA5&(6SzUaDT#%zBLHq7D_TQ%*hp#R!%^92NUm;JY)sO=N*I>i;&u%IPhxojenTwKQ zAuvn&fdqy*8}fs;{MJ7;imH|xbnt3^FS0&_pW#-~Rw^G50)2)MH%>NtI?;W{OKF%6DdrjGvDC=R0SFbopeh;@K$GzZCG# zUFDLzt~VjD7!JpLe2=#cs|-&)XP_RFgobBWWL99!6oBAow_Io39P!?hUd@^8Na-|h zs;O61Vb2>O+wgIMal)P-tx|noQq)pR*Z{GtHyHqhEJnob+dC1(9|qgKW9p#QRxhkf z*nx(|K*W_GbUj!cbR&#IRG?U=z5o$R%~hJjjMyQRj3^k!#EzcaX7x9@MoN|`7mj6M zEW*o%AnZvw!vZ>BeTNsMx8!*gk`+r5%4{Nzgc2L5`Ooda<*xVvlYuRUSL22 zws!dAhNnKL`ks-hK^)SMUN%9nJj5<>fDST1KKwB)VFZ!ano~V>jK?fwfWR&a7RCW2 z1M)HV<5@(nte9`mn90o5hn9TIWrRmLA$`Fu)2{n%#73m>gr{wkaqo8URC7$$?s|XCEllgslLFMWCfzR*v;SE}NX4TSuYVReJf|3qRvCEYs zp;L@t^~m7)s03v@wKzjf;V{HLxU5EG04n4EuOje1bT7D>m$U*-5Hj! z3}I{pAc9x|aDEQkbl-jy(rv|Bd9*7O-X;1_(V<>-&-G;Iu2^l~jN8$w_v=eudk{Ug zXo*>HAdnAlwhsGnTZ%@US+6n}WQuC0(it0{1Chr3o16?C{{S6&@tu~+MXCKL3tLcg z&XIsxDf56gBW(BVI5o@hO`)}W3@l2qlQ)(yc~@Xa?bkbe@V=R+S&v?h+u3_2I>baX zlvN-uKg)gp04I)Cw-h7`YIz~%Sfq$~V8@l^*nj{%cOCY@;2s(J4Nq9TZg@bqRPu6@ z*p2cC$HsT)F}DI>*67)-1)rv#IdZJtp&K^9sT-cX555l*rPFmSI_yS;!xP$&t4Q1P zVMYNzjAOq40E%*|+JzJ>Pg&$-e^3EH6}Osqh9(gGww zjm~-zuxuTMKRhE(RGUWeV(7+SuBT}Qh@2b_zNPEarr-SWsK2Md4gUZ)o?csV{W^1> zN;c=*`!7#!{5=lJeJuB$*}P29#)FX`Dpo_Bcg{!rz>n|3`ck|;84)5_c;(9uQ?bIKBB6zpM6W@BZB)=pAIYF%nZ}`YMjE;@e zj=ARJOXBIT#Uxj>`2?a8WKqqPd>>e0j=-F74R%oa&0=e>lU`F{$y~Nb1xk_qIols@ z9Tq!0>0kIva7X0C5;@WekyOG0WBs-TCPDu?tg{k^-Kf76Eb zi7m%^EAUm0%~)5>nPgxJV0v9P&e#JU*yHl~Ufr)4Nvlz~ZNp*%=c6woozJ9zdi(U; z@Q3JLZ=7e2gr-7M^|OXNz+^BTcj=#j-#llu%9o+>JTSE0Y*WIKtDz-H>`CqI_u{{X zC$9A(u@nL+=7EnRH>BY10qL9`71M+|O|0|FDnra&T|s!$-}gV?gLKtb)t#q0eddy! zva5MA2lSja2|sKNkK?)H>1YzK0GX8KmPt?!b!=rw9kLEF_Tjxol#|n*-I$WuYW%Wt z=Q+s7FYVWfnr%m?1hE+<^GNeioD!+O=waM+AGaI%oHF%Ah_2Ps;fM;zrIJzEmn7tO z$?K1fxjYwDg1xGZYAW$Pb_p!2%ae`0UmXul4Wim>wP%y*exAfrsfr)*oaB`~af8?3 zaY_bRWSYDYp+Lc0bSinWcJGYs#a1zOYrTpMN_mX2`MzYZxXbxLw+r7OakZvvSkfX9 zNP&4rkXYdIk~v0toL~>%kIwu{Le`VwB)D2h*2yjid=&MrQqSPsI6kM~=oh5CAe43`&e|u|I5lV~bi{-zsYoM=Syy298XT zki#UA)20ti_~z|M>DC`VJsUtWYF`dE3 z--|bstv;8D;4Uw01XZ*VG zu7)8yMLdEk>HNUoZ=Sdyj^Epc>Dhf>PfPIE{&zkZUjP&gMi_Te2>JQrHK?6N!nNBP zWa?fiL)eX&?HJ_*9s6u@I%A2N?QKr?lxdk}xfIJCm5ELzLP$HG=_98UwM(^D#L_`u z4GiWLensY9V}bYIVm8PFZv0S!+&X&AVluNyUI^ikAmt!*=FaCh+Z_fz{29VcouQvc zwJxSs!iIG6+z{~~Ban35gPixm>M^uH-!G>T%4V073cB<2*5} z#0Q>UpboRh8tx1s5X$$4-Z@$K3JV_E{!_Nw-v7rxIdmpY2c(5PMnfOB=Zwy2Q=980)DN1Z#!E*Sjer2)j30b;_Tf6!SsHj|cAn4E zyQ)gL5-{jN$r&30Hsgzy-W?1IQ%mO|K^nV&(gB0Fz5xK9{HKnziR7i8dr?VYCMt!= z=8Q4RM04$&0rSH#S2~08$);)bth5=XV>1#tV=OYQgR$6Pk;hu3)ntN8mdjW2V^|#* zar%Y_FZfOY$Ndi;>yqi3T#=;eiv<3LnTb9@I0~oOWpSOi;#8HU)Mk3}WvfXkj(6w@ zP+1suKR^3;&h19EC^fjNJe6!#Hzcte*_Ka8SjGozZL!93FnHxFRI@a*T6U`&k2Ym; zeM~=2G4OvoaZ;&Nht9PM$vw!-Bo9)wk^Y>i>9=pc9NmIPqgHv7%@NoC0C{-V4I2;$ zIBukSbsugoQ7u=~YfM?CNSbzTRb~$#lnzSt$1@GO=l0JXBgL%LYStq@ive9u*g$tG z4*UB9@50^@tsG|R>NuEIlbWDoy0dSCordF&A5kO3@zm2|gUhS@%Z-ewVh3#PhR+({ zX+2Hl6)9;|9e%CU7V_WMENiwv=y8nj_lV*)BC`d@i5jxUE6z}nAU%2v1CiI~gnT(v zMdKLh8UC_bF-Vcwc{yZQ@JK?q#@`%hw41+EQK7RDPbOCq)|d>c9N--Opl}F3^AW~x zH%uVSH5nnd1+yNQDwTOG0?evMHcxTa8+FLw^()eg!}nUeO#xc5w5lBP^A_d=A7FZ( zB%9@0_Zh>LonXK6|1IvTX$a1G1 z!z7*d+ksWts6!T->896-wCTt5X|inXw>P-zH^;tsgKJBdThsLoDk5X8Bnd571-V<3 zqL4QO0Q~GY(dhs$h3KTyl#$AxN??^8cJ2B{Oy>vZjK7WUUa1VTY14E4S1Tl_fkbj( zu2c=mkaLdN&l{35^TQSrTJdRCi`Ov-}}erx{7^}CieokK#^oXI4x$goIPVpni@{V!FPwVgh<)cHcfN*#I5 z0+2ceA8cpmip)%hgmov|ZpHcjss~o*XEF$+$1onH zVmrPY8QgI*MXfHO;=_LJH+gHZk#gUtIpqgE_|;RMztJ@YX_5+&NR5{D57mqwoyYdz zlb#E`4)iltmfUS5YLhBhk;%wFIauSS{J8kePB@RMYi@PfH1)2L!C{oEl0wWB95_8W zv-^%TT6(=<6?vgE7}g{<3S>(MDPT9i&s_WC=Zu$+l4#nET{bomLt;}a75y84xE(nT za6bH5lr*TH#cW%h<9gh}DC^mE!xjyk;O&F3`T66C@5`s^&1@+KU}R|uVL1lHTWse& z56{mOXiYR)60B9lzE$K-Rve{@o>QN>$NBJm;JWym9cjw6X;v*L?$2*q($G)bmJKDA{amOJxdhi`1~z@@0^ z@YnG*ZA>#O&6s2eHj$VSl6!OmKRGI@tE;$onoe! zdW~CZ)k%9X*LMNLpya9^;J0jT`P<7n_NK5``nu9mxo)soqhrjxq~n=$jIbH~@wRwz zYOS3w>L8lTjNeqS2%a_tQd5lc5I+67XPi&kK?lwJm z)%ba$i$PkjqZuIP024v%zKs}w!HB^Feeu)Vejyuln^CcT2!5hD6@hkAzy#*Xf$zBf z{0N;Cb-!w~%3&>;9#S?t4T;X!z#T_Yb_W7Q+f(Th)uv&2A$W++{K~9$B>MyNws_Oh znk`DdEH#NTH&#qXGUK1A+#Rukc!%OBrqt#7c4wnzAs!>&nH~Vtv8L{O!UzymDLf!b-D4EWT$t09p;YA8<$c{P12=+cy+y5xuAK>k=45 z=OBy$%%|j$`*EOZ(IZx$lu9|7+HPF39=HT{BRg^VmaAshmkytO5=h_xM`j#_MayTO z*z7-kHkuX3t1D?U^GXLRM<-BJ9E_iFkIxr#gQ?e{wwkrAU19*byiFW_rT_p`jC3S} z*Nr}fEqhvRR;~nb82Qz33D{(UJ@8Kd06Yg!HKKyl@sNgG6lEDa{ZIBiz4%8$j$J+N zNc^!uBB6|Q&e+B~9Dd~RFH-zdq_tI!#Xuv}y-Xy>E_&d59=PAH6m&4!mxqPjK^RDj zC?u~gaxixI$=vYz8k($;uAvcGpp2^meI(}t`|rSR+O1YAmh2Wpju3(dVaX^b`g72Z zQTH4akkP6U;#Nn1I!Jx8k0i+!~4Le;f>J_u{rr)t2G z!pBxXxj4pHuRv8M-fE(kW8+6Fw)tYMFE&55wp0w>E zhrkZ4oUlLQ0Bw=+!JyINlj-Xl0!V2}$%z~F0;3$iV}tiRZ;WBvtGpB~tS6b7mPe2J z6-mL*P^WL)anx3XwkDx*3OvNe88P8p6OLj#5_kLlc+dD=&4!a$(587Mk|`Xan1IYO zK?H%*IY0P#qoqjp1Z=J+tnBc4EC^)5EzA!?{(Ei3+NWL!>C}-5l$NXF0$T<7K_ed- zJw6EFb*4+Y5?Q*78%T}G$_OFOdgli?9Xfk<;q7)PENNy(jk2;vIapv4GE1Cff<0N{ zT3gd5mP&V>Rb#Q{K+m@@0FuCtqc{WOZ;mUfe@xVCI$otc*_DiQ)K`&!I9CT5{{Sz~ z5d2*lYGop=S;Uork>=&Zo?%jXLH0X;Z*DX?&htm7ERx4=ax7CNw#RVZ<8m?EZWz+z z9%Z<$iYAi>)H#6}1HK5)4c3KYh6$`s z7HQb>q-V$sq#TAIcFzvgf=b#nx7@IlpDlLvM5N~c`){9)8-;wm87jz&aol-V7=WR9Ridf8^Q#0CFNy;Mvay`IedVhp)@9<#$9BL0`f@|ZJA1H3W1k%i`2Ra0zxZbttAJbq>3{{RsP z^?^oM`2?={dlu>Q4o5w z>?2@+t^sWH{Pa2Lx6c{tf`*r`okzSm6z*8En;A zqrc`=M+wXH?y3ms*!*vt@N0tf5NS1hnC!-oHH$I{i8)QVQ1oIB`~2{3MR_NBtk0^) z0rO6oS}|wRK`O;md1M~@@o!Z!Y8ngFaENKivbqd1`}aQM@xb`K6~T#%SgGtE_Z zTn^aJOmSaJ342G5dy&Z{dD$9b%a$ytbCdr7oj6}fmfb%ZK`cMaqiH4{W9OF&bLsy8 zmy|CWxS>g*G$7B?N9HV(w$8Z(9#h=lV{zPZVk>u@yoyyyG>uz6OCfatx9U5MuszRG zFmuHV5WyA7wt}pZ2N2B8J$Vhb2T_mm`|+01zQ6wfQBQWXUr|QNFcJ_Hj9?#*;CtjB zzZ$JFYU5J1Q=B{kRdgXpC{L>&Z2rJ;u7_z_?U+#AEM&6+B1HA1L(3UCA@le<{BfVJ zRcv_HvdTQUBZD>HY%%xf4!{hIo`>IO-r-*t>KcF2%`Hh_kQRs>1Cj>*=NSC(&ZA-m zu>-AH7VB0qNCLA6iC;-@y@opu3E90oO*&e7-5Dr?lL;Ct5~?5O#>W|P?l<436f~Pw zY)Lk2B5E`n%LI}=A^Dlc+vE|q&fGuY{LiGU&K7wBBgK=kP@ryl?s9%}!dh&f{Z<*{ zkfe~uGC17xmOg+!en+<&&UqS6-ScZwX=q93+o-@lD9fVqoPsbq=de8p;*EId7$YlZ z%dM714Bn~35Kk_9Za#Qg%T%j6>M{V6&0(Q3q-3`%dQ={ufO`AwzY1ytPBpxpV8oMG zln*=tQF5b|x5mI={x~%#!z3wsdllcBa~zDsHsMrZK?IIsMhNft;x4-SlvQ6_dvMEH z)vKC~7zdSr$17u~$jBpZn{dvdMr}qY-npI{`do`N77;;Pi_4sY+-Gcm&5jGIOIKUb znop&A(ahY_Lc?Jo19oif)BgaR@qew03&8-bpwiPIV&Y#3l;IPtvFCcQr3uBm!=ivT0HnCmnPbr>9hn7~6Nf`)pyN_Z) z*nA!t)T=<1LO{@lUO=<1!Zagx+owaY>%w*=GC?37yMi10bvzTZ zNm;K>+)-baE=lVvO9BJQvoOy80M*c(dvTsW?8MmZ0cDhWtNK9&HEVZJ*Jzt@G~ zk_}oh49X()G(q+_ZNLDIqzoK)1BB)l>u6k+S~Yl|l6vaA*ckzo4gH&O@559rsLecA zs8=(AGQT`(a1gc$>)U1?;~@0u#-GCNMtCBWxIoc^9(E-Pl6&k)?~dF1@iKC@EXi4G zskaDMSzmb`I6&&m+W3&Sbc54Pw2+hrA^tEi;9i|Oq& zu=#FNnsN&=b7QF7?m^$Dez_~_@z>Ie)0x?W6Us4;R$z9LHX=1rj2?R2zNMU0uD<(q*1DkXA{`?iFTFh|Rf}MC>;zoq| zOm`R?71;Mbr(DVoZvivCfCMH}UY9F`u~@85&?t3itLNgBq|Eu|8c&KXF?2|a-KSn9jQ}Uhl=@hbJ~6|plS8Z+qva1R zj6A&CnDO?(BZ;$kg=$jsuE4;Fe5kzm@ytr+KaBqXZaVPH)&7y?S^4b8Wx+?^IN0O4 z+XL~zOi-IjiJ-8KM3o}j%a>+nQTmAkZNS`Z*KQQ4tR%Y4T`F1gC74m;AmE&nyN-u# zzXOXg>J@J(ts0hVJkqufL-slN`1s&8G`e+Wk5Nx6p1dI=7yyRJ$Oo=B&*O;Wn~JdB zin7Q=JiL;E2HOw`J@@|rFP<`*<$X&=jAK$LP!IzAyrjj zkaOIOXMTe}o(LpLb}U(zQ}pvjvb-Z4_{JEh-ymnU`}}dv&1xKae7+tO+F>m6Ovf*{ zG7rcef^|9fI7VV92V(7Eq(MdgtSOXCBLG`hCiAODuOG2o6a?C{CMF`tlVi`e-NyTozZuI)d?_MpQOPYdu~Jns*yLKhhw1CmWH0>N-TBBo~xqvEv8+75+zg|i!VrvpY zUPsIfPDTh&dVZjL{GGV=3zDqR!#qnUu;57H#!Ej;ss8}m_{R}0{{SiJeMLzw)*gHF z!7yG~6}Dmt9kZNwJY6hRTTrnO$|G3k?Nj^dqY{PP&YdCEGE zVtI0Y#gYSSl^c;OszNMt-^~4;~By+q?31CXX;~8D{ z!6*0j;Ki*xlNYaFP^{6(T_O_}3Rjtj>c_T0J$OcymA6rBOzw$hLQ*laIKfs2+;sl{ z^8D~UZqT8oHP(3z8G^ETF&rY26oLb8b_DJ3!unofl^%H3SmtjwyM_#itZ>I8r%|>y z<6QxDuZVZT8&t958g)a@xF+v<6z}lRQV%HuYpK$0r+~ zW5VleNtO>Ltj%aeCM1zpEr7Y@$6yH?bnC#S{{ZR`)u$b^UbMWi$o1taBYtKcSU4CX z{SOQY(ASeq)GTV2f8GRxmKhJAGlgJsF`RZCf6IgTaaOI{klL1cZdr#h!DV^MpveFn zoMWaB#{}^vqdiJGluXc>;jFeJGe`$H&KwidA0x3GF4DE@6!l7N&8a;&amq4^NXrAB ztNWe)c*QB2;s?|&M-xdE&n*#zt(A=&1J0v;v)iydRlg$YdUlU8&J5h`9Ij%+E&*I& zPQ>8v?0ap*?;UeRr@o*ph|y&~P|^?90mqgI8}2YO!rmRR9jdWvm1Ps8lSllg{Wx5P z^ykt>bNg|uXIK0srD~c)JesVE_9U7^ACz;?88`sv)Iju~ea8zL?WXGuQDbS#*9N4x z23Q7qa_x{?CmZw}Ueqi@s@q5_$|JiY6+lq>69Alpzc)?4>BrH^ud4q56}wD}aLFRc z&N0ZLcIEfq8~mOe{3Nd^)2c^mDNL1O%&wW-yNqBC!>6|tbqOk4)7HkGyz?_6yEtFc zqv|Oga(p?y)u75u|sLO`T)P6mU5sVtTP`fOFJw?x(A1Lh5NHBdFMCf1U-@exT9T)6whHk}NP_La(+6W#1S$B!i6c8qSqGJ|MR7++?dPVI)-> z7b6P5d*>T(_u@x}Mz=@9vTD~LSCSf{8BwGekp@bTbDfV-#;3xbF4MJLHd~6!(2>eV zC=DBr)VS_&HYf4Kk!)+SM^3e2EI`_}vDA?;P^y8D$(({W8TjGvB7H*5nP+t^U6wV8 z&+;4<$Rlz=85?`{@5EpBm!+W5r@2cqE6B1{5aA4AhUEuyoM#<={6FEzML!ExX=i7- zU~*!@^JYSDd6%)mkG6QKiV;1Elfz640U{<7f>?9puq;PIxZCf;x-IG!YS~);Tvs`8 z0Se6-2lN1Y06#h5jXYJ>G}tamsti(w1sl|_p1AniueY}e>snPvZ%J?Jz_}s_{Kf+b z+awLna(CN|TGTf)r!v=;7V~Y!WRwAwB|*VV?i&N9cFEst@fMYKWQ5hU&E*++q+FKf zCw%SLgPeo5I8VeD^&0w>Ns;V8={F$2z>y9CEC)h186A(`i@qG1wY2)GN#rz4&`1~# zRyfW`JA=M+!4di7sU$BXkdHZ2l2zs9DlwCR?UA>(c*H|KVaf(2^Xl#}~Yd0*25jW<} z!Ao+F&j#^j>Y^yoE40qG5M;JW06LFz_C5IOzLz!qU`ubzFgpMTJ{bl8B=*K}mEoPL zo#Q%Y{t1c|l-ULu@Nf`}fq~m6e~tM2UkM~M^%X|?nzIP(2}XaES90CJ8{m(Q7V#X< zZnZ|Q5pxBivqi8nWRd9y^pF(o@3`WQqWq4N&m$OTm7s(L0oSLmrr>Y4am6|24wdN0 z(E-VaTn{k@&Y8$(UuFLQrx}=FhxnIAA{h#klp{O)lHTJzcz0HkYV@Ik2T5HU z07d$q1|g43o>RES{dlQ))+sWmvUxEHJxTun4DylJ83!E1@9*!%r4)=6COTulvWUWU zSkF}%8Nv4luV3xN`ZIa;8(7o=$t`)kIbL5#^>XdkJN`!x$7&s3xi#Ecgh()|zpH<6 zf6wQId^ZGCE44=`@yg~HhIzxd@1KvK`tb4MR@GptE1B99!bi^PUk$$HPr>Q<;x%|J z3E)&SMv`*3nq%b;mKY7#`vK=F3!Y^ zp8d!7;mt2u((7Ka1f&S%a$uac(>ci@eY*^B8wpx%b5DkOex9v)KbFma3uKqy*pdg| zrxQQgEHq?jC>B`HoF^ zabVI;Xi;P5S(xXSZ_>lNZg@vWgxT?arkBxVO2i7oJ1{3C{qi_}h(>RxxRtd>Q0V!t zNF2oh$xwguJ@{JPsr1WbFW8CTMtKrR6MU7zXBp2^`+V?!6xWV#58o06c1O>e0Odr- ze*J&H9oN%hpG+-sVLe%$23%*FH9*>EHg*%7L5m}Hdqnl{5FhKYud~lYVQ&Q73DeDGiw_0}kNiYd`&Q1K5gYg=&RRu;vPk*&v?hukZ24 zRb6Mf4K#qqH~<=E!1{A$&-x6J9X*bel2P6 z)6_MpcB@%2t$O}kk)}ukamwDz2^jCT{1G5)u*)Zk6IF#$C+Aq@MaP-c0!SaI9-odc zYnBa)r5>}!(r1=MV8ls`WP|WQ+uv@P;ysnIFOAy0z^ls}h@@NsS7zlq`mlHWarMs- zHTw-!V-VthEeT!Jk&N%(1M!@3u15^7`)1Lnnk_CE7CB`l2R1RwoB#kB?Z4n-j_Jdx zY5Ki*qJizi)$r0`nKHW&$9|oE96Y*Ro4U2D)t*bSLl=}eG3hC?`U%^Zdv_dYB#|W1 zw8$#3GE2IESt2TAq)r ztwosGf>bj?(jH)6JAV!V7M39c zVdpNVl&(H|>%yz#?5aw~url(|+%$ikNY014#-@ICT(+RTYFwL^uLc-d4H z{(x|Cj@ZY^_TZ`_XjD)~%?yGqIu-piFB*s>ws;xLFth!{8JJ}sbExct$`+NMH@%E8+_4*gA#Zg9~8TCVa~@sN`iq7+`;>0i2Er zP6RH?r%!E#86^vAmkW)fVUojdoa3O!&ktAAWrtUL)Td>!I<8cY<+}d>Qy+3VWN(~s zsb!Y!jY1eyM_R(xjHv`nq<~a`oOK(Vwq5JwW~>FZ8cs@54^>~8C2Kqwmkl_ZV&L8RjL3v@DFbW(Mi1O^-n9aFp|r7Du%Ar4Nw*`bC}ia%6g{`c@4|CZ ztE%ammWLvnLMrjsJj0dLY!(i-EIRl#7vaj@z8 ze%yWGd!tp*0o0SrW+2G~h(=VB2QR;;JDu_|wm3eMYObUugH4&qrtze#%t62-Ds#CQ zKlkg#3MQLU-B}IhvFAhOky=(D7HxxXzb@ylefSM(l3uH(*_gFxl4g+=@}%ep)o5s#kVgBY#sV@6!Zutm}FY;U)aLaYrUtFu)AorB#Pf%rbMn zM-Hq@)-CGV9JVRdiEYKIFFf%#^tRmY4toCpZYZgX{{TqS(dmypj$(MEZHkh5=cYE? zd~nST)m+;N$+B zI5nVwp>%-4BWiL)Bi{!M2myBLbDp^3CaGUgsiiiaiS-5rGdN&541C=;><>@33wSE^ zy51a??yFK*i^@ zEQMPvNEzlJ^?y$P0B#TbPNHhGYaV*i+JR-u46KBVGUWb~juk4Lk(+wFHY+)a6*K25 z?IUA-$5FRKw_ZOy@y?eU_=cU@6Z7f@T-ZqWAyfcAxEyRWYp+XOi$Q@_de6-|vW)U% z>@s?c=kddfr0Mi0Ta%R*jD|Fs-#)D2SNrtfovYKT0?ajD2oWNYplJ>xQYAP&j^96? zAowc2nM=eoRF5&uI%n0^|ITUK#W+7bfP^HS+PQ`BM*4fz6%QsNWyC;q7Mg(Vng8 zKoVi&U{CVZnRglKjP%d8IO^O_UNa1mwA088NE>oN!6m)0S0g{`#4i`>l4z8m@}v5w zqALx^TPMuUH^3Mjaz6YU%U&sIl2xrAJTV_8Ne3ik;Depc{j>gjG&3bJZZ+h)G8T{^ zz-CMyQ@+^)ZXoz3WVr;D?5UQ$gU=fhdC(RU9^T`QbqkYecC1;p4=TKTqzv+7s5tH1eDR=q%@l@s?n08l zyv-cuFi)8tcINp9m4W;4O*>ffU}$fu!DlW2kYF<}OlPieyYa*qm9*IzADqg~C3y!z z0mkQ`{@wUf{h`opYL#WDBn9XvG|E8^1~ZUzw)=hfFGZuCjCUS5ri~(vStMm(85?cJ zPff_<22x5N?G{;iCGrB6eqYiY?T|ZU@uP=P^L#g2DEa3TzCz7z&IRcaMDdGQODxC+J$MkB6!1jY;l$w=WVy<>GQ?SVreaD z$SQJ&5(vtXzDWT80G@b>;^0#KFQ$z1R^^h)#+wz$_UqTCc&Xv_tt@uk9UY{T$|wlJ z71#spd;Z*5wG&dI5TkO$WVMSw$ZlrF7!lKc& z`)7tcVWiJ$ceb-l3)Bk86}f{G)Dho)1)*L40MrmzsPOr7LP`MMrO!U+m$&_~#Vr1IR+%0yZD|__&emF;34;HHj znLDIs%#1M`a)M6X$-&2L?Z$%Qnrf);9JSgaJicGlciY>z#(VxalR4piVv_0;X*DdS zEI%|%>y&8N;4fXzPW`@kwc=Nj0?AUx)5~$tnPX2tDsz*Mjq~x1xWRaOlr=S$ys$M` zLK$IhP1RJ4jr;6&&IbH$C$U0mmS%YaJ%t>{J94og9G;$^^6%4%s6$59AbnWq7TPtO z!pLTfkR~OL=j3cp-;272onF47N0f3{Spr5g{TLZL^#j}7@sYo$)W5GmdZMfkSCvDq z%P<|=*yFC;XmwSN9WPF|Zo_?SY32Fw5Wp7OI32#+7lR#CjjP9Y$16)Ak)0wr3!T^~ zJ^uh!2+#R&N=;stmpz&`85O{9DU|Y}@~dMVM!@vpUk^`mIHuEYvGW$n#TAx0FS+F) z=Q+;%?bqLjq?rbjH9Gu_W}Ji893*oU=)B#|I_HMeS5s>dX_Fl$a4f*WSMr$hI&K0S z_W*B^!yXmo9v+2~hb4wA&4wEsoUgtzGmgg`MA5CxZ_A{!D4JNsnIuv5-9(l|I*ioXXDmPwLU#&O^(20H zcf$<#6>8ld@19AKIn?rUow{~E<_O~XoFt7#c`dD9q=Hr!+(`wh_>HSMBbPYXsN1Rc z>&4Aj!j;-bGPU@533MQo=n2PQKqu|Ms#K1ii>OnLBop&988Oue7z405?bmJ)wQp6g zLrsS7l<+JGez?BKsxrhbcJ?^Oavlw^nd5E*yl%Hn-xEmF4v zG;9l2@{ZERcR0!Izqf7-!M2zy_Za>FHVJ4@to>B!?y>0O0SxHgop;aVNz#l{IZQRw?|BIOD^5ok%r5{W}jW z%Tm_!%ZULbZ-#92*o*`7!QVyYT|%sym73ZtC^d+P{{VM(3m=wS)Y->UGq!pT8lzNb zT7%Q03&}$Cpvydu<}`D*F@SdVBztl0k)>GDX)dE|!~96h!RB=3%teS)Vmbh)ufgEc z+ZuccG?1fKv1M8ktPdokC#dXjFmw0d=2Jgd9~oTK;PCXe5|FoLtO+7@i`0;Vzc}fP zfCvK}`tf7H+I@=Yr5Vm6Slkuo&y-vGfA;Zm{WrB0wWy5k6g;mFF2$IVe&CXF2e(ne z&_g5Gi$xUs zz@3jy+$W=Ia#W$4mLykgNUPNtY)A>_Z+|S2k@MW=jQzFp^Th9}(9*0_qiy8OLP+br zd6F*s?Z17xV}$fOvrnh#y0yA;$!?tHB2*4&*OVNdn;yXJzBsrdePhK^B&vxNb;M=S zxkHv4 z>HBd%MAMqCt!{hE9F?l`6_G|uu1H|44?)Yg>%SY{Sc|sw{W{l$kt3BNf^^9YJj7)H zb{qC5IN0sRU;Uoxmb9wYqY=i-69ho5&5&?8zWahR?s&C+3zBKAJr63ZkYK~g<#ucy zUf?MQaC&Ef_!`Ce64BOaqS%}yXv#{7QAoijq3Sxt2N`bMmZG4cCwM=HU~Q~ z*;Jf>0QbgtLbic^w9(jmjV(xtmM=g#E=ClL?~VE%+(Pl*xii~}w3FAn^pdxk<-|m& zMgiv-+2bgX~Khue^XhP4{+@F=A)Lm=F>Y%e> zvPc~>fwnsK{H88j#N%X=dWunVM-9 z1q2*KK?9q=DC_T>a2jkW(Y0QrGO>txWb<<@?SX;)i1z?}xEa*NZGMiLW0JIzL^;`5 zn9ubCgNz?h{{X?qS~NAatu|#c2*q1@rSsB}h0p%8mB_08S)dsdrQ%-Rsy# zocaL3h%Nzfz5xVqT{}^=N5rz#urqGNB3LHoz?M9IgNzj?2On{^+#}Pv%~)i)90;Wr zaPq);fm0_jJ-QBF{SOo=U$9mvY(~);E9K&1a*u{#f-~3s54Q_|LlWvuT^P_$j@$7se>IagI95sZ$Y6O8Ae-#kz7YtXN!SB)X^ zX|f|RK_E|G4aJu5LG&rSFKvik;`6mkQ5{w01B?#ZV4Ib`5ZE)JHi@`s{SO@ zbbV1IvsqNFc?iq$0zf&&bN>KNFF`Gu`o-E4;%BqSVPwF-ROmoEuq18VXXg%T8e}nC zeNt47F9jqpC4;J<<>do@W3~slJWZ)IRkQ^%!6C6$$NS@xi4-{;#e3%j{{Yu+HR~dH zeU_G<*3h(Zb2O5&oO-j6ar2%2dT{K1Y<9+=N;PRfV;ZI;k9-0LZ1+27g=N&@fUOZ1 zndZsmw8Hm5bJP|0eVEb&VqU|$@OxC9(~XCG|vU&AJa;{7vCvlN#l zu{?NBF+v{e(<9$M=6H#u*wp5l)2l4jqF!RL^(oPnN65!sHF8ERB@-eT;+1*jRv7+g zV170u_Toi7Hd?nESD{PjXOU!i6&smCgZf5x%YW00<$V;>)F(YYX$+tj)L01r1$zYxj+tTwQ`)#C`xhZ(|jBR?6=4^A34TK<(<^0W;d zj##ItqmY&@fWY?m-`|F)6}PC>V3s72j;H?Wkc8dY4>sqr^~oGtnze0LPk{O67a0tT zhV>@kZ}Kt3Dsi!JKa%1qi_igrxWMRnNg40MekamCvrnT(PqXyShtG~;NH2_^ z)IZmZZ8#f4Q^c}J*I_VNp&LgqQGp>j&feb}XMP6+Fu`%O%Jw|8lCVe&hYYfTu_xGa z{{WW<@PmX)6m0St2Qw^%`3!}L+vRoy5%0p$>GT@Kx|S?Dq%xVIUSK3H23X{b>__dB zzZ(AlS~CrJj*Qc3v%nG$G)Ip&l#$N6hQRC&`+ITur-}7jc5UeztjjbpNd8TcAs$k& z0ZR`1?oS`9ND>PX^R$FNE3-CvS#gd<{{WcdZ=b&z&-Q_$R5?OY{J1)G1ez zQ(nMiaUd9szv<-|+b5>~0B!-R*sq~$MghHRf>yVtAjK6CA;S<>e!BzUTHlZ+}>^7A<85BqGC`Dvrts z<_rU2K{?35&*O_88&saf+fK^?noelrC)Aq`huEF}0B$1dS}9Ku{{R;fJ1apN7;-%g zxg$8~@s1B_o3pCIc?620NYRO8e}9pXG5O;6K=)}}u}*JNLSdB}R1JlmJo9zvTdqOw zc(bZCiFBVeLZl(r%mbl`aNNs|hdXha@dfMVycg-k=c8sR)lPia_8i#mLBYqdJW{x6_JK=4{d?R{@yFeiqYyZYL#S~DVh^#a>foe!Ny0&fAr!XhxE%e zZQP4dRZCN4>q@u{f_ZX47|;5BxObUpU#h-ZeJjo-LRV<{l!6XAZg{awt;_b}l)6U) zMdc8B>`q6p+us|GGdEhPf5K7xNlwe8amgiShSRF@`Hi^*8@&!N(`EQ8zca&wg^+4gZhR(c+OeQr=ZxoPs|rBQdr>x zf)$2xa(%}e8m&)RsA7#4Naxu9~#`Kk{g&q95M+wrc~E7iTFM=WuxEG}Eit$4C)tBzJhBw>C=bB;H@8;a%4M$}gxCzqA{pGnG$ZoP7SkIx=` zXDN@%jFgiShvv&J3Fc6w^ymk{`(}_}ZzY0^BjqxAfwQ?dVS~^Nf_i^$Gikyvromst z6^w}qfz^o_2wC?7o0M;le0Ab(zhzfOuJ=RB46-aM=O_dwN!*XrK^;#~karwtVU7#& zB=U$Qu*@Yu=PL1%Par3JY!2hE8EGf8R{o%=PIr!=64#BCI-gDh1KV-9JvZX?)4Fzu zv};IfDm3>Qk|c<#C;;a_^AUi0jNtI*p)F4k(~^YkEK|YgmC%&sU~(Tl2>9#28J`Ia zZp9S-B+6%se1t3%$AOmHYz%C1@5a`xl)qS8krpTnywIv(d50upKE!tS#~Hh-Bx(BI zjjic$m_*G6oWUoAjz@`=TOBt!KHZ7nx}D>z=nDFD@kUsrNRFg1B%Gn_2qf*E+zQot z)Ga!StRd8F@yvXH!Cq029WA^#t<5qa4sz&wd#(cz(^SFF+j1j&LbMiQNh@P7S52SOY zMTXqTB1}}_W5(n^vu&~8f%tx{=^-)dax9$G5XU2qXXXWtLF=&C_v`uko~oCsFs7*< zsMvx?`YNjv=^5A@502b>Xgg?fRi49ESI5)3xs9Q7u}<5K@q@!dudRx)ktVb!pXv#% z9Igp$3=j|X3={9M@4;_Xkef8>ATmmT;m!~v4053Dk_P_(o)f92)wx0#ZmQdpOf0a> z{+5}y1-ZZWkKf;iw4|1+#JY{#7!Y#Lfy>E(p1-MZcH1D2jwu#_ru`%<=Bn6fYer#b zm4P9M^$hfEW3K&%_#8^ov}V!embEJec))~9dh*Al$o9UT7$!-5 zBrYCN$bBvBbHBG^z_lA1j*oI1iC#I;s~H{w+sOTh&rV$Q?~jfuk88_9o|jInr;vR@ zGb})oLwbVxj&NJ&x%=@N&Rbf06+KF?518EKGeX-k`{ZM{O!1MKP{h`U3s^0{wl4hM-i{8ED%S)#ya%J?ZvvW-mfeL&3I|KDTVpM0O+kIuA+?YD|7TS(ECNrK9Z z*yJPIJ-DTmS&z_kniXWe+O-+~0Nv`2UPf?B90SZx;P3PC#KS#{wCurRyM07fJm%*- zrB^#JJsTV34!ImyNMK6F%u&d`URwyes2~Pb9rw@e$1o&OT!F2s$S&p+BAf`w-x&GF zu<5@WWz~ACJzZ82n-ZHtk)=61_2tJwjs3UZfi|-Sk$%LsBa`XnSjcAe0_~Ceev`#c zMXz-rixNUfX*qGt%74^)amHuF^e$Pvv6S$>X2AG}G2)cquF& zqIk(H26iKGPv<%J98K0Vm@mf^>-@9l2$>FlnxuM3_xIo1IpBT`)D5bGPAaj?krBwp z1mNI-@3w!x#}j;2dg5!(wgK`7aAd z7Z_wCe}Xz^zvF<+CWBge%%ka*Qz%a1#^VRz6?RzoRC(_lj99kcC>^x^7SaIbdca@X@^cV}-gb{xYQ$mzHPKlR`?o=s-xsWf6c za1l42q!JGJUYY)&3F*P70r34pKZdGSmKkB0)sU=iMg~C#;EWC^YLSR)#}wen5v|KT zg%~0Ga}L9YDpZJ4TU6#LBPzz^CQmTQA+y^gkIxdOnn)}&8GOa(w3$<2w(YIFgi_R1w#)iQ#^%uEi{%` z8Kos8LXI(jPUo2Cr@s*N-g>(5ju^^CZbtJXO_v}HVD>(ePY1DckVw#3NozH57_r6) z*tUBNVDHCttk;r+MwD)XMs3_-q{;n5-1pmz<`o@AShYIy0o4R5`&3tsI|5LBL#Q}E z`SLhgrk>O-h^jPF+L6JSzC%c$_B}IzJ+sq9VWQ^^< z9@A^K?HZT-xTOFH=B{#MIAtd%xWf=Vj}_#Vr*SWM&Mhjj7Hh9HlH>mX-UG8|+Zi1_ zxO-ie{P4+1BaF0=qxqc2kTCs9anNA#C&_&?>T6Sz&A5zbuVGUlmg=nCPeaC%%JYO^ zi|2V^r9kC*n;f{$-1I-`z?14};$0?tO$*4&7n))x)MObXHa+(E7~i)LsRq|#isgw) zQ)O!Qlb?9VTnr7cPbl{Ufw<|#B(Y+@hpNhMuoH$d8AxV8PpMmOfcFGvhIHu6`gWzK z)>x&IRYi@&c~%Ug@qkJEXYlI8-78L{bei`p*mp@I@?~@sNwjN$kO!vBUFZ4FJ@MVOADMSQ-x;7Y@hNxGRY(A zDLnQ5s8bATS0zjhqATwlVN{ryP;V z^f5yqN#yfMmzb$2cL1O2R{c2t08z#%oIf|!Xv?E`x_I=t%2t2oIr9$Noxa%WI&u15 zi$*um2(biGIFrw?KgB3ahv|$Rjz0WDsX`5RSCT7S_57P`B4D5wRZ<758;~~n+ltk# z&p~6mUN5VPTvhU*1h7y@%LARk&wLTZcRG=XZ{~*PpD;Ok!F{irz2&u82lfD*NK{*sY}CJlvn=%hR)x_2a#e*;PXZ{ z2uS(wk8U3RDHflo3SzKEuy3V6vtWNdp%&-{_#s;d8y)^mc&6zkEuW^-kOqY%y(C<+K1581A&LEtagN7| z^sJ_vOHoy>^45uiFDnjzEtl2Hj;p=_9^3G=a{*^gDT6>O`Mk@PRyhTEak7kK_Tf!m zOtW(I5?3i&R--766kTC=99Us0J>*P6auVlY+W=yEZ!Ksx8Xcowmy zX_}pC)$A!}s*NmUDPYBN7z_;O=idjn42rnaJV#-CV-*=7cp#3eyGY~HCPq38@(rwZ#|Q&UEdQ!+0+4vi4z3>*SO#B;eIW8Z$9 hC!^4d6Y4WS@h#?gB8(nnR$>4wPwo5dw+?bO|Jfz<^)>(i literal 0 HcmV?d00001 diff --git a/3D_maze_Game/assets/images/textures/roof_diffuse.jpg b/3D_maze_Game/assets/images/textures/roof_diffuse.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d8d8d3dc00552ea3d493bb66349cf1e6130bbde7 GIT binary patch literal 36348 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 literal 0 HcmV?d00001 diff --git a/3D_maze_Game/assets/images/textures/wall_diffuse.jpg b/3D_maze_Game/assets/images/textures/wall_diffuse.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bac86e2cc60b5a494d898fae7394700ac90121d9 GIT binary patch literal 547878 zcmbTd1y~%x(y%*=ySux)I{|`+5ZrYaS!8hw5+Dh|HMoV~?kt|*4#Az^1OfyJgkZUw zbN=s~bMJG1`)YS)-l?vhuIldDsqJU?&(fbwfIveJa>+9^&!< zphF0tAPxw`Ce|VPHzRZiEhVCLS71{*~T$OoLjxn)mBk|ri=�C3cvL1Au41OVU)^Y+wLRb((WF=arX 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�+yB+zOZzopEDLD@W2yaPUfKhjKYy9NzEoWn8 zM^+FxROGiI#@HZpxQgRBmBy$iCJ}=SB=4y0b9I5E$5{D>#nFt(=U>&LJHlo{Jf1n- zq|~`J)zhJ%`q)@~8C2P!lXOU+`K#ua{)>G^dQLB|yROSU8~blv2-n4yiG+qD3-k-E z>9ZM#P2>sw0MLB=qh!TBhlk=R2uS+>xian+&4aX@(xkw-kk- z!Odd)gNzr2(NZQm?qp}ikGPIt{)4I>mI2!dnCisCbte`^npysDoL%nwT&lLRf?4u{QP_Y9p?FC@MUe;%*!R&#^waO zo4`AhqpZ_Xw^H~$D?yWxs$l$j0iBM|uxqkiCLlQ&Vy%L%U^!KI(>^3JKEKb>m#9TBYtLl8!MBHXa$Pnkl1{KYCOY?D>Y@$KCzPhmdjZL{d78`nlI&(2&VZEm?iF>GI)A zpBhLLeY}h zO`%?U;*!1eSWMS3j50de!ng71xaR%XMJNdkXD!Vn(kfT`Td?4hbjV1l)W0e*VHB4L0r>XpA8wEK(V`lnnenb!lfTIV?Z6-|)R zo;q8Bc+|-$FYj)w%A^Uz%w3QX%sxzt=Nl^bdw1vk`PY6cvZF!%;~#|2+U+V*sE-7z zl2j6gk(4E*{fAlWdOJH_)FliGuU2<@2#r4mm$fEKBt<>!L^wzQf_6RM-vU0>j2~5N zSJun~;s>4ep-8fADO}6;C}9^r7(Ic_SV%N;c(|XlJ!dL+9^Vwh}AEt znTw;U(VS4e7UzwyX8`JXQm~*%!P;YxK9#-46i z58-+~n*H917o_nF!)@(KU3BCz$KfCKdVT4x4qk!thKO6?vq5=HziVF_KCx?q1hDpi zGT@A1fIG&KbNbmqpRo(Q^bee1$nadODxGA1Fkw}&=-;JD z3j1x`{7}fyFcJF_t*n8=P1fi|EVIjAY9GJEkj3Zx!Pbjc4TzQQnyhUDURcO@yops9 zb0+nA=<@Jg_2kQyju}@U01~gh^-dpGw7=05w?RWq&Il!zuxWEMZoQ}Ku~@T$rc&*M z=aVBXk{coPj5od+t4`5)Ql^Q5YpgErw-G=(GR*RNkW15QMOt%l?}c|qR|D5z{0L=- zpCPLO@g7T#!|V9hdEBEeSE`L^N7!#xsfn0V!+7F_WBE6Bi3-`nmbPo5bwj28S(E1? zH#YEAroc)aVZq?44;j1iQU`k@lszG607#}g{UYfqig~ulY6We9yg682scSAbkGE`9 z$CfMf?fW!A+z&f4o~7^X%HyDS-x@I4)XId1&90H-Q{Q9Jonl*r3|t7g(FcfNA^w?*-b&xxvH7pv;)?UfDn zk#T6sM-Q+FE+?_?mGA7nJqp*s;mtEU?P>Gl@eK`qEIi2^hUyS{&K1h`9RMfU!;-gP zV<5nHwR&6KrwoE*y-G#)lRM?YnsiVwCErw}l{w{k^8UKL3Au|abd`; zp1<#@LByDGie6IO$fv+C4*y++bQYj8ESB_}QC(ROm$l|P8~)lKptvz$L&2^sStL>T zbCEUY3J9lj>+WaOY6rG9kzivycNEpph8-uz(DJlNOh91bX<}J|3~0_nkET0%rtfh?doD+FL_l^|l=u}CHZ`y9+37^|r@+;KESF0B$h$rrt%pMAoX!1J?-v+mhj7WUL z<8mYX##?YR!V7V0GIP>pGNU-Bma0g|rYmyD*O}7L<}D0(>eSR(ivoo}<(o zc-i4~#$>tNozED}AgKr2TG`+pvPX3S_T!oq?qqz+4~Kx_6BDLY&jyXE&!JV8f{9`W z5-bt02j__(Nt;roU=Px{WRoE#4Tz#y~0Z9q)Em* z_R9HkaYQX*)Z+W)+Cuw!^KAV($;-jP`BhMZ*}GQd^y6>UsfLQ$8$P`b=oGAN173de z&G0urC%EXPl~V51Pw23n3j^aIiC3;# z>>9WQJzM^6B1=z_YMAFkdT{$VjFOUMat2omby@``H!?-*$xmiKI>$H@uO7WE>@fSi z-`t(2K>figalC^{S>BJqhkd5ot?kRq%ITp2T-D9jz}^?DA^f3db4xWy$ELXHSIF~x z(lOB;%ECyg<7C#LI!XqKA%^(PooLU|GGCE+#-d;Y^pn1#L*1^c*fb(1F>z_RfosjT zt?h444CC3JG2kXEc$&22`B!|ub3KI0uP}Z2A^Nl)^-a3C?Sg(1oS0JDTvE3~jW?X) z(n|KQ{Go&4j)ogQL!&Cs#$hcJh3qqOxK|EnP+0dn9eMKJnifq3qeY3R9(#tz*cC$= z_+H{xUzPhqUeDD#*95z^hfY}GVlBmu$_8aY97{{9c< z;`sXd8_dSGIPN>#B;T;zs{UN5yl^)|fxI3*l3I+s@lqw);7ciiemn{w?VrVHfT5?I zejs}FE(c8iJoR0znTTIndRl`j=|zbeMO+)2);gZC^dv29 z{35PU;2kM_ezBF_vqc2YnJ+07b3P2Nucd=pV$psq?8n@_bi{_@5Zt`#_g!#_6(5uF z>J;F{ogwP;c(FdX{e*&|_Wf1^yfJ;e$=`KrtzINKLRyoVB_UBbbW%@Z1W#hS+Tt+T z{Og#Hhx@|CkW&O_GRAJq2#QLk1T{#XL0oT$CaW~{MKI=V-*K>#{K>DayLAo6^uDaB zYv1dO;4~8qI5blorO<_UG*o31U*_k8@*eEE7?)2gS8lv zS!`Ht(N50K-wT7Qn7FfFyzTl(X`<%fCaK%qMIKrHf^53>4ftc6rN#5xS;WfMMsA6c2aU&givxlA?^OT}l(X%z)f? zlQOY9SsCS`s20WgWqh-pH^yYWumy|Yu^xN+USh&~X$9^aq}3#9?N*AKV_E!y0&K?xTX z%)RwJfwWym)qPr6Gy`mVy80y6W4Y@M65mv3HVhQL+lDl=B-CHguL^&L-x@;T?Rik4 znISMuI@%VkiAha}K05aj89SG>k$BDHtR-r=;jH)XDpN7^(NAhMqp#m?n1~_&>bCUP z?L_|CcWfu+7B0$RU?^Q}vKz5vdZLx6vV>Nq zq=L<=x}eTYBz&M;TA?h>NM(f~p7C0BmL8Wkh`HjkPvpurzmVvh4b+EX=b}2*H(f|z zr9h*M>!n@&Mq4e>z4sYiQn{Kc5SA zkNsGUiWNtp;=a(U7~X`EYQ*D^9&5$XD6vY|WVMp#B6ZH9Ab2>a;PcV)B-%^J4k_b9 z-90y6Xl#Oy=)Gr9y|xE?_THAel^{;d_H$3K_*SIuz`PadI41jK%??SX%)N(+Mzsj7 z0gVV5#*0U5jT|to)bxzufE4QxiF9Hecg=E1PSI z!8F1=i#h=s(|yjUt3wTBBX;ca5`!w*y6&8>>}CS-Bud)posV9Ti^vl|H(YZBzZyRy z(_yhw&1FLa4N~N_4WoF>w3)nebR}2qx|3<|%B}8aQ($czXZx&^&>qv_K4pI1K_Pl! zpSc}%?A_v6lcv^;PWdTbb`hI$jAY~h*vS(J_Aoeg`%x__*3GpTLlY+wS%pSXVvxNz zhC76#u;wZ2^s1p8Ubet#x*%7vh!~T;qdK9;=dQ`nf25RPy=g~R7l$5fZ-al4;s80JB z&JN@?Ay>ye%m!lQr9mZBskM(juNF(7O=6fvs74bCYFg z;E>c_vvcWsgfB6uFx^h|Jikoc&5kCW9+Ji3x}Z*^c(T_Z6`@e)kgi*yk+L-Xkge$& zaxSB^F??N%6ZGQDx4dM?ec@LgZQ!8u2YykBEXVhDug{9#6IeO^e)+RphWh+nUr`ek z&*IA49hpeESwEI;&yQq|g*+su`atTSV4hb_&{pZtLyBWit9@Kiwv#IH$ubiWv!826 zMw+k1_%aG!C-}KU;hjb9dTb-D@<*b{Lb7Qkq0`SMB)h{JFosPq`~FCIni2Y3ZI!Y! zB=Ft6NM202QySAB;6&{D`m$;&uyh0Ml2DVL%g$OgO?;Q@AmVc+o$Sr@*_2UxyK_Xl zy>9OngSMFQqb*J86VfOOhMd=V{fkpl^RZdctIb_=$x1%OymJ>^iDxiRwM0NjlZHsn z1$9tiUvomp6>Qv?B`wLv1h334@Qx;xzVHfyCmxv;9JAdhlbPmF6SM5l&(&Fy0O=H40j``&3bw38iw={y!| zpm4}cHOUC0N>o8pBJMbSJ>k#gpZr~8y2@~JLuCe%hPmC6#s4$Fw;}O@0e#QCbQe9% zD_+HMI)v`KocL@FdvjyNBPP2zoM3=ZD_oL->4U;u(=NvdO5V+W{&`LB-*x z=D`%SVwn|KzF(>3^M)~*nqa#fRsRwf<1GOXk2DRfS!=-UI zlQU^oyj}hKK}hyk04vUUn*E9y4F{JVivteke$(SvLG#;_sREu?ZnAWmktZ%LqUAR2 zQ46+kTxv>WF(eN23n{UH-w_hkxWd=pr@fc@U!BF>L{JyM2`(GrknhA<4gUqwM^cvr z$IFJ;&jiW)@Q~H<<+5;NJdJ~cx)#|{Zc|cHek>X0HEwmpWZxP8AT?BZtD~V}D4rBH zUiz^f`z?DRf$*H}07Y zwv%=F^P&19S}a`DGQC( z;qdvUeg54LjiGEUXB+UdN=s~J8yng^wfB%2smitE9si*rued%LO}=YNLuZV`=jj;1 zM(LOO$EB8bgL?th;zo5?5*JT$Ba6+lBJR={imZ8Ph&9@CE!A!9Rk@9Ia8i>bU(G3a zl~c3S_#@2M)m>n<3qxYa%St|uO`Z9Y3Eu8pcHO|;Ypf!Gjr^7Nxw=FTt<%9fo*MS{ ztQU;Q)V^{qZ^P&`3Zxl@tQ+I;gz(TQD-Z*N__~K%N!R+drMRY+L`ZA%_l)G+3tmjIlfVf1J27qU;jn?r#~<|EL<3$;p;Ep>FE4^$^(C&< zhoIC9oV-4Sv{suZ{$3#S#iL`doNc zRH0dC^a7jva=xexVQIgO&y#)y?$`J`7(Di#HA3r8P>TchES7NJ=+pe%Igo1wPvCR+ zt=t!NK23nmyn=FeYSx%Rt?b)oVeD;&(Oyz5gDa~ksmS|}#CiBN&TZ$P21=)c1bMgG z)3%SsnLljIXw;v`^F%MNAmgb?A}=jYK2qgTb3cf{Gxnj|$?Rbl-!BOWPAO^CX+3cf zt1=&5oi`0jgWaft+g|sFyIsW+F76)WoFIP~*|hJxH^h5S)gVWLS!A^ptCpHrvV9RrIzbcX zZ*ebZKM7*>rNr*gcv+U98^5wtk?3N52*|Asl?fKB6`hYSpega!iS;9JT`MN3$VA2= z0PXrnZg)}lP-%=6r>1S$ByX|AZ?SW+aC{NOs`|t~5!oB+Z(DSkb^Zy%KdFRekYP2XSb@!LH|9{!xt zmWyod?)5c#1^QF+eXNCEpRUOb_oG6~*@mj;rMZd^(ytY_AAXorqP=Cz%*ih>b8L{ZsWX?oxN)d_otg#Euj?xM5@~|*m?$pCNqLRx;?aX&+iNi^% zTKIl3oH8JYRXtks^Xs6*0Y#0LYu5K(LFlh^t#af3S*MlwyeQg|LZXO%yfs5g#s~ehZh+B91Orr-mqK{bR!X9CsoA zA(eF@ukkyTYg|L|XmBRk5h@h9$zQK)p5jWL6D6;UX#Hcb)WYEDpmQc;mZtRUK<-MF zS>nC-f}t$DToSQ6x&2-p(OIx0pW-8K_G@afW@pyX_C5kIjJD+M8O{BGDN}rP>KJlT zlH#07M7`{FW1;EF5xrAa>uk{KL@Y`RCroUsu1LhwU8t~SGH0R4l4nlTY(ij>uJV z%dL#M6(au)6X%36wP0=ZxSny`MSXO4cZcTT`dx+NBT;jGTuFEAZ*dj>j}LPP-Z8tJ z3UBR{hC{YKOPbH6IJdjK_6}g1fruyb<$JinRx`n0+22o!dHw-7X@~+2P#j1yEN=;e z{LV?nw(|-7ZRe>_(oPoiu0tCwWNIiO8Rfl=!j-82Xcq9YvjN>ENkyzta>B8u{oL@eZ{T*n=5`a8Q+p&~R|@w=1|ijCadE+9XW!t;Hlthc0lUW%Nc7y23soFs)KCsZ1=4I6Q>129We$Q__yfjnA&<}J@Uz@ofn;+U(kNvqB z>j1oH=9piQks0bs=cUU_;u>|`YBBLsXV0Ka${`Ane*W^p%o~#RQ z>9U2T?C&jcuf@iDlRh>OP^dGbNpgLUCDQ-RBXu%ZP}}F@J}W!FNtl|fEf`*lJ&1-e z{7u?xqunhuy`wY0#{ruoUejP*7_mA-hu=zJXI*qMvW7`X!8{YuG)E4uIrr(Gu!8|L0f0tyAbN*zzI}YUsp$`natf>m!rkjony(YWob^PHXhq52q(7~ z=)#DmU zvDM{vyx=C}j;vC$>#z%IC=RuiU{5G3(Z;Ko;Yg*-pSC(*kM7IDiivv2!BUP$8h0 zkxC)9fIiDi-43YM621OV=TCR>c)LQmv0TH}qCR7?fAP^#5stE3$D2qJw&bx4MugX?} z)y|*Zx{zn3R@bCon*}`c4F1U21f$j@y{o<`r`FcmjMt*+`{r;+^|rNcX5o~2EXEub z&8fj%6$ZEnCA6D#9H3Lm3szrl-MBX0`9sVii#mMw;?2gED2*I9trNQP-n`7J-um9* z@51xHM`W zV|~lV^Q679F+PFk=oF&7VNuo8(1SErd1tc?mhKbB+^7VSkAkb9^-6 zGGqOQ$n7b3jzAzpZxT^YR>5`#7ymd0t3|}T-fRu7^^p+!o40Q-Gfs(adzEm+W;p!C+F~g^ z+Oipi&{QP9330+`we|0uogcB==4@sVH)7qPz|+OF0yzbS*VqCRyAu0TR#jQQs1c#U9T(P@(GF}?z6|}~qycqAi})DxRgay{f*W6t`{!v((!%Xb z3HnY??H-n8M<#J$j_ux3ErsQl7Ro+>VB8he{ZNydskNm|I*`4@O2{>O2}%{spk;0m zw0b9)U#)u%Ceq=mra)RaM4quA&&)+B~A!-}jt{tB0GsdyO zR+ptjzHG0zkFp}Sxdt%A?gg+H+uXcXO6DgUa`VD~iX6sOrJaA^>~OaSed_AKdhXAR z-fY_1(w<_T2W4;j^f=eSxi1211cvzevpg}~hdrj0hGnuGWzbLdqZdZ56y@R?+EGuR&wmp-^ocR zs3W*d>@;!9%sE~<#w!~Zhq_86&Zvd`3x4O)s1aLKXsBO9w6i*Tg>f!NPR!s^KJ)v< zKBXJn#v?X+zx|ki(exvF7iDY*=uYt)DNs~qTI#~-SI}V=S>kg ziAYlQ%=;7o?6V~8?b&TYxN8t^c0lv0G~!1{`=Qv-&K|6%6(jD{FbbqKK$6S9R$nty zByhq>rTYuyomQNm7TWcCEB}-LtOk<;0|WR~LqF8QU#)yCk_C429!`VHY5d;nzT}s1 z?ZLM5-%?~d!PMsNDw_Roh5BNNT>x^PtdqZ zc=HMO^d~+Fv}#s4fY}_AA+zso8i}Wx-LXG+BHkKU#wc@5lRbhte0y+zkYc+n(;?mf zi*`qm0F-o@%B4mdc_3rd79_h^!xtow?+AAlyZx?eqTEzZNv7;RQ?%811OejKu4s(# zY(fmc8q|4#6{bhzFVoU07Ov~p9Ce3hB87?T+4l@_uoA~5nQszA_sB!2=Yqs5mcI#o zH5<*ksNR;4e&5PhMBtH|VK+Q@9P1!@{EDzsr$T85S5ql@==l2L#-8$|w28jc+CWj5 zj(q;VMBpdSe=F&9CIZz&8snHk-PppRYqgJOhS|IcB4GiLxjj- zLd%u71@do23!Te(hn7~1Ej26s)oiQ!F_w)JGOX*EYiV{+?yxKW52 zZ6(O)%eIoNUY%HN9@1)kF@zlM5swOW-XNZ9at`!K<{s1Wp%EuXbHp?zr!HDi;On5+ zb-?<3f$E+1lC8YRw5Qs11nlEnIzWT(#=kK~xg6c(gl5Iv+Fmydd$TB8a0pL}U&%>v z5_`!*+*Cg%GC@8$K3+}e)>#Z^Rtek+oTjwWb+s*A87Uuef9fl?0AHwLwvz@Mf;{$^ zQYP2Jhfr{WId3Oo7s($Xua>XRha<&SIvSsl7gaCbG&TW3&(XMA3OU+i#u_jBy-wkv zlrfg1&W83_6dI(0I^Z*9%|~^fCW>n1U(0T&weM>I=`2#bRRfI+KjfU|Bl-%e~w}Rdw{?*$Yd}B#*H`~UuFz*v_&b4|37d*68L%&rnSG8&}<#=jh z`3xo`*yjp>e+14WGS+t9$BI0%z*`h?UT<5DQ{X0mB$Z<0B6E%^W8p3jyS*-aL28%-Y;AhL- zjaeJpLnjsa;NR=l=OIaU@CeN`<(Brq4>2x1;Th}b zqp_H}!r=-d-+Sn6#Iyp7iWc3Ms?vYOc_cKh-FJJJLStap602P*U(*@&^X60Bz;4bY zw?PZn7nTi?*<*~J--=_HbKsLj5Y8UK1RGO1+-{v=NO7~Xyt19$2hI9_ULlI(L+Ud4S` z*^}LP=?SqTOoFD2egzsg*YD#nbS^XQA%;aQpRF>RS>0QTG-_X8Julv&v|mweXh@-I zsfAFyy&Z`Wq||0?%`PU2nylVl&CG+A7o&=!>=>(SiTV|-df~vz((SjKkY8Gzv&H`p z0EIw$zgeM^M~30rDIk;P^6uG-?FWtuk-;hzLyUvgd6|6P9=usYA#mj%`WR z-C>MjVP7l`O2!v)9Cz!QlSsMpG)(BnBE{)cS756gKr9Qc>=n- zYb*P`b57H*q_l;jxHCfk0ApxvR{9U7cHN}iKe)k(@@ZD zW0K)z7b^$bt)hHJ>VSEQ8I=OErU?g(b5(n-O4z-3p+|G!TNSlfZ7(jPm7YNnXvBb= zpkN7)F@kfGjCJ*0BE`I3xoB-}En&S|IVAfiYkOu$Q)?u+53n)YgURIj*DXJeB(c{o za-V3jx{=;Xb(_q{e2svW$YIo+E<%pOC!+9j>zZYj(GA2mnrTH4-CUpzZon}z$LfTt zs|C*DNhh3Q?zb73z7)06yg?qIi?+_YGSqE+QR91?$nUQ1t?!g1 z2I?^*#N{{aIp8l02^yBitZq(<=CE;BNcM034kB+#FX~qFU)UHZn-^MI>;tqeR2^mgJ@k zp@U(zK7LYiK_k+m(S@Ig?UT#5)NN+Bfze%HR%?xt;eJKV+!9v@B%b&ni{`M=%WIlD zM(t~Eu}5&n4IH6NO8)>VnRy_U^D=)ta4T=Xz6sLwjaoT}meX5XW+=!xau^(jP@#7P zJ5C8CW4&lIFZ^kcaAHgCRA)>`F>N5m;-3fdavQlT^C%@uWjvbCAf`PPABr?Tb!UJ zGN2DE0ssU9&urqYSZS-Q_`>SLP?FN(Yv-19v5ZONT1LZgK)$&R#~&^THJg#8yBwE- zygJkBlE~Ko0BUVMAu~+#<8+ww1FE6OWhdtB2*xp*S#-P0O&;NIx6K@$a^>d@9_a}O zBpw%ZiVAUn4tg53cPIQH*V>yqt@fpHWgEP4l=9KH74qCVlFPF>*hUD>Zh0h)#ADaBNvdl1TF-~<!Ng3^m!u_gsg-ut)O)Qre3ig7{p^n__h%x)E9uF8&MhMRxJ8%BLS~bRt zsoWhxYsC`TOsJ>*Vvx~!n?roS4o2(%cAOk$oBK`czu2BL)grgBy}FX(CtKTuhvZwx;kT1?${7KUPnJebI&{ed4tNJX zm9JrIZueIHRl6_V5XrxVR9)L~{9Q&3Wa*Yr+1kk@aQ&ecP3rP5%)3rG89d{zJDQ%( zSCZ~%6=aq_yCRhySO90`Cnt=KYb2b$4&2++6AYaozj^Ll&pz~bK(X1TVKG|S#d6 z^JA6AJ!=QWcJJjGY-gJBQGA0VvPQ~?7m&n#;gUAwoux?cP0^cvnH<(*?C|YqQSi?Abrt(0O*1vV&obp09f}J9@_C!d10<2hYR1+r zY+=+qyZy-}yo(*cC}&m1QNe7DppYAmIVZJW)cjJ`cK1?V!m+gKvLl!CVU9-tvoJ** zFzOC*+OqEx?ONP+@yQ+9+&UuSGz%k~sQCamUB{I@2fYZRuK0=J>pQRP8;hCR8|_9R zYp6*G0oG`h+vhuuKX%Yyah#5rHNd8dvPExeG-gM*h2px6RPAD19pLxv*S8}zx8h5f zZ!Kok9d=w?Pb82;h#3+`8xl1j;Y4brfHGNmJq2Y*lHb`plW$ziyH+oinB!*DjPbd> zeLD(qy?~kZc`mfMVELn#;@BsggXL(`cP+^UgK^I%elx{I;SFsqb!{%=?DuiOW~fnS zPns|k`HqAU#^zz32S9pN{S!?7*woiek~UVjhB%;vDUs31+IFroL11x`MtQ4E;rpl4 z?7qinw>GjuBr)3%?;4pI1bdgEE=J@dKM-2QZ)15P-$s{8sV*dvKbV7pHmfk_1a-mg1#8;qP_B%UEH^V--EWL5&JkM! za;qF1&4geV0|X8;#dO{v{{V_$E~#U0ANG3NB&b$zILG&Pg06XR3oZvhGuEoXYbL#7 z(v?=!wF{QGhHG~+NffNi!~`UTEEVyF-N-c@!4z||_-9kMdsS6bx42;ijB!fakg(jP zSMP3RP)l*k;NzO;uk?vEZw@cm?ghQRmvS#9Y1oM_q>+{)tH$Oa1>-#9o=C0jH&0pg zt3|qlrH)*9dTZHlE$_EMGh4?!rrU2f5wH&&Ng`uAvIh3SUYX++e#_xL zp{hx7VA@^vjrN}-Th5Oc%FK%H6-x8+sb9KIcdiajYkN-Cjij2z^oxBRv|=e<=2?%K z98#kkDIg7)7{C|<7(8aWuNG^XlpYV$b&u^WRt;MB!_c+7w(`RaG7mA1?=P1OyFor) z&`Yjza4B;>gzvfLSGptkmQ7#J)54p`Rypm&MPY*FWJ1FL<)vjpS2-k(`>KYo;f8&3 z-bS~YIBo5g#w8IOILv`C9oHG%w3cAq%X(tHLd#gOhCMRs-&VJKogtPnlItDLR4^(& z@~(1RxpR|_{B!nmc{Y*S=}GomuQz4ZGX8XL84nzBv+Xb_5465XB%Jd}OeDLUPm68L zx0*f0<-XBxa`Gs%R8~YmvfLPm7*IJ3?0!-)+OzaMYU@k0k_|q4?LHN=Xx`@C#mRx> zh(_(SfZkii*eWnV$x=woZG2DEZ?!8aBU@=KWrp#r{Kg-8RfPPk!2R&NU~u0rPAi+& zv{+{FYRPdSmiic@EWUCTQ{?03Sk6PBVh(Z?05<|iI!4yi6`R!Qd^@QB0BUL1F~fTl zb~=8U7NPcdRH?g^Y=n}$mUUs0xC??xk6pVRZhr{qw<;rs;$(ze6>Y0LBWx19$g#Ft za3nV7EU0-4&0+W!4Lt%j8kT&&i+@Wq{;wWiwJt;<8LTB`l9 z%6z#&h&x87f_D6^)P}&%-oYt+)xUToX`onPkVaBS88wLPWGye*ShOqxpc6iD%&5u^)&yknfK6=M_+H~hxYQwIaVDPHqv21{}r zv}>FO-GCT?M?!t7o~3y-5?@Ch(xik5rQW$&qjQq2o=?ifh7a8%y)L=}GId)Szu_1# z$!8ol%vIxP(Uv{RHG*N4zY7pFN7V|usPnJ^N404rx1832HD(;1^wPpOkF!$qMj^l+`yBrgQg+(9PWQeB-&74E}&VE$dr%|_$< zTGAPsD_H)^I?V>0Pz2c6JH~U9_g6gUBzn`eIiZFvO2f>!nYGDZ2&w-79_fJTvw#S0 zRQe2L)_uo_?waH5w~D%bx`Pa}81Wi|wKkXR5R8m;=YyIzD`LNh?xoaptBV;e@VAqz z5fd|r_GBuYe-R80fBjX>-pwALqD0b0%_Ag!LntH8P{cXUBx5I&$S2dMU7@U(mr>i@ zT`X}iXq5*oCP@s#X!Qh);A0&+*Bj!v_Fc_9QOO_K*fu78zHSc<66fxN{397GP7P@u zz-CDV?w4Au%EsMThF>tUobsfT++dytc&Me)f>GFw-&`wwrI}=p4tj{U0>F9&&s+|)t{byr z8|yfHapAk05XJ6p;At$d(j-zV5%-%s@DI06fExBs66xBN=Y%y$Emc~dSHtK2=lXC^s9mLc3?^lng361rksEdxj12NyjF2m% z1FRpYVs*EnHRhPNI!2!jtXA_gT+A(QinMYIXjHlLSp1E!k%9mq3>@%k?||jHzSoD^ z7TV5h6o%4SBP9ty#r)!gWt%A5h|WrZ_f2W(5m?*H6b&7}Fhy@1(?^}d%i7yq5(ZnU z;Pxk>6}55U*6;_2q(ksh2-0BD>!tEb6`I0=!Ad zM=O1(okvZE=4kD#;EqM|wJq@-&!rczaZ|WwMIe(JW$`Uoa!>*^vZj{K!?# zc7yVa`ql@Jwb?Zr;MdpF-K;aq3P!WMu-F*dFckykh}w!lIRpjd;-i$Sqi4ig^LWDc z;!QTmqqku3Ey`Go+3h0XND-f&LNnBmtCn7b4zt77y4Q=mHF>0Hw=-RMi(HHCx}K?b ze;TxQ*^J2omKc<|Ad{Q|!yp`y=Jy^jd%a6ox{lvY{?KXC^3wL-e0Yd&Qe72-f%B%* zjC_Z;PJ+_@@qQWG+P1Z&`8QX$8cb2!LO#(FJX_y*f`?BtE7k)6PLny_e5Tf1IOC)$$UV-RSZm~PI{ z!!j=fa1MWn@qt#gJ9N0!7Wex@PsH=8PbIRva?a9Vy5kvDk8l8Iou?dPtXOJ#c-A9Z zhMv~WX_@Y1Vdl)Lcxe=mmxW?i1C5|{B%M77C)Mm$*6wY#_Hjvl8p|xLZVW{kgotoH zWfB4gb6`=UU*fXU>y_o}X&XEIyP*H-ru zTiaWGmf^ghzG4$2HJZZqtM-dVf?SnT9mI?<;NYJw zMaBkl2sy=OG*{3(Gh?IJO)}fZnM$v(3jfB9M(_RnOHnx)DM&{r~-APaq9oQf+Cm?jk;azv^{b^_Y zud7WqmvyMyT15=k?`IzNwvH(>eo{elK*8E_py#D>k?J=3ZO_=Iw!AVdF_9$C<+Mlm zfZ+V64agwm1L`Yd;e^^dTWZs5a+bBQcAC;VK>lu_B#}7#H<)-4?v5g4U~t0#0Mw?rW`Ba7Lk=W`C=Iuu3QVPK|kRl8fD1RKYG`)TgU#4Wg<2S zxlRJ_1&AD-yRZQjCyg{YuQbml;Vk!ULleO{$rU0i zb%(_BE@qD2-rP0hcJ~wc01beJ9Tk}1lh6#WYMFJ5JwI2ny}FV+IHnB9-)Ai$%q2@m z6?zgt=z4u>wxi+(gT+>G+umE)=Solp>SoxtOcCh;jFm_wp(boM>D*IUB{^iz>T0ElN^p} zyo5(%;)t&_n^<)ZCTG&wn%Sq3o5=)uZ5UPHDlpCn0FZe#E~Vnuz0~wSC4bT_;EV|+ zO|jfA-HQHM1yyzflhmBI9cqo3nb^a7ac5>4GbDGBleS!J%RBAQ-A)v7mOi!8j|%D% zLv^Zdw!Drx(4wTU$8fSRkd!dwI0~v*ag1lKaZ}5vUgt5X_>0KDxrXUkZlRrSA)X~v zj(Cc2f8BK;t~&$AH25`J?-A-`Nqrrex3ZQiQFMzUy#8KVJ?8)yReh(kh3TA)PxwZc zRnaVUMr&B@q_mL(u-?2zS>n1xlGZ4s`xD5K z$nqR3F#u;O1F<>u5>1%Ba z$Uex)yUdl@@<=3<*_?xuicLE~xA4ZRH=XBRTrZb#E}v-4BS|ERWCt5~NP^+Y^evEb zYJUdX+<1pV)TUi`?5m~Ny!RGz7LBhhBVe9XMO1yT zt#@^;TyPvn+&vIwGo*gRv`fm=Ti?Cfq0-OI-v zq-!UdjN~2gDwQ)1!K5lzZg2=;k4`sFgYDY3*`tE;Me`9ie6f{Wk>#9^omu$F&;&jd_lO> zA)T&nCB%C!t=A*Wg;cf)Za!_qGY;f;BAjEXN?H;4gIJGTit^^!EbZIPTbWR|ndj~W zS(S*|0M14}@Irf6xO^n=?YD-!6`|@4H2(l-SiFg?**^Xt&eqt;8x!Zo@&=YhQS&m#wE;uZa{3DG{B5LL$*g#S&dxYv zl07Cl5K8-j6Gqao4byPONcHC!HRPTn@dEg##Bhbvt!%B}vohaExQ}3pH)kcz0vxjE zs_>)Qyu80!jh&Srxv9$O*KzoAOQ@l+b+VAOk?+iJ2rIEA4yShFFxbch^&A@1)Th_H zH*Ilebs4k%&6#ek81FPX1lFOUYg?3#F>tqAm^u(~ z&-d9*4_tl~GmCyFI(%egXZ#lSIZ!GyiS@=5?oDixAEHZo6j-P2|bE;}KY^L8yTgOGa^UP4f zLEMtW%)vtuyq)6&Z0b#UZi@}Qj-d#e;_5qF$ma8z8MYy4*vS}B-0s>3ILJ9Y1$9U4 z^LR?u^3LLEZ1sK5a~V=fTqzBW#B#xxCA#fAW~Y|LbTzeq58qqMZ#0&1=z2Z#qQ~XT z%#y2ZFysP5k_O`6-Xw9rs60)kTKHlcfopQQf`~V{bT+}3Lc3zd<_@8-c_RQ3+l{?O z_SeL^9i*2MFP&zR>~O6dPZI!Cta)NSayGF0+>?SaRqkwUZM1c@d6(?>(lJPuLaJb5 z1dhBA&6NbGZ1cDD0)r~3%lTfyY z%eA&^Mv@ucLhXKqixN*p+CXuPVE`XDesO#=9gdfD(Gwt<8W`?XcQ{R(i-D3tA{_MK zoM${#o<6WmGWsihHaN^JWfY=m)Su;nBD>lWT^lQmE}kWo=sfVe7P;0&Gv;pON}ZR^Df<>?Jn3D1;)~I)aSiTVWL~# z-rUO+bKWd*86gh%7sRdr3^0CWW0gIIJJ(}j;3>Y|yDgO#JvpSBMQ62NFb2Y=8}7%w zNmcvI0_Qj)Wh8=3v!eJ5{t^#|^J=p~vD(~8_FH$EO8u)bItaneOkvSju^?^-8?(kA zgi_Z)(xWsFQx+bTnNVeV_Mo5LkPaoP! zhm*{bMBTK8z$ki_7$~+-o+~lDEvVU8+*`!glIj{0#%#Q( z(A&b?11yZVQsvd$^%ziaLCti27VuMei&)e&sIKkTN&7=kE%)&?{Nb?b304;YQDvOcX~0tVHa#k^JOfs=~kn!C+h-n?U~Pt9pH|`7bW50>^b~BUmSZ1S^GPF%7{( z052gxY7!oSqh*KU&5=Tebv zzRRmy-NLg;1;fUV1c<*X2KkBHg^ADJd|>b>xUS1y8oO@=YHMS*bb{(zcm>Lh`HEE{ zSjsaDsa^c3;kd~aLiYMdOq!fC-#j8|iY#ia2hJPHMv<7f1nwIN8+&!CI#-Le4SIBv z6C%kQ2IOvrIMij?6B~;i#4%o*usZQ_T}w~0Nu-WzY2x!>wsRZsc7>5kVOJy<>$j@6 zCV}%1-f5P))|}pC7Zz74(oZ>obLNx<$orrX8w45X0Pn%6CGo1=h-7QaTb*M12o~aJ zovx+WiXrmcFAAz7LP5zH&+!vYwbgYyy)RJF?fmHE*6t&W$X!-gkT6*`jB9-p| z&uXb}qQl|aKkW<4TYW;~RtSmbPO%h4B}%kJbd?+LbPLHKkScB58QW=kHO7TuBL4u# zvyZrrh#0OX@axdR|Bc&a+4lr%*AuK3c{`Bv9Y)9xWfxtBpng(%W0@RggC1SsWG| zGYk?2K-%7-yuZet5?wM$EiGC_ic5fZUE95+(~Mv)NEyo>NIdox=<~sKqWI3t!weU9 zR~DXql&peBFuVN6p=FLZ^SF|wo0Z7qf{i(+3+XoEOBIZFHBGJ9dQ0aj=+?{^~NQIob;JQa5KjX8_h~_>Hw2=9)h; zHHA`0Rw+&+`9^Tr%P~1Q&PF)tO}^Gz_es8r)i1Q^ox6s{G3L@gZQNh(9|3k)0*I2E?T^f>r->X&x$>J1`IaMGo$*bKKE z;FibCK|8r4I8{CKUa#R_6L@Aj3tN3dPm)Vnt|PVD>f0}7Ld&=n<&FwA4^H6mT$Z8X zyDeH4{>E73)U?}qAieXLMH4xVP_$%#Lk-6O@$w9EYgfab1J-oi3hq0#XyLfIK5&Ho z@+FJ`(}29X<(D6KtwgN)iRkn?8;vUOPtdRD(V?@q)T5SZ;@fU!K&c^T^Rfda99N!RAi{&1J<>*Jw8nq7;J2= zEzjLs z&|R#DX=zo8h}j6_0=%8r$6-@7>^lDdhppD))qL3Q$CzVX%;k%hXTbrO4TBBeJvz~2 zqu;}6YjGmoTFvG?l01=(f<#OoQJx*|O-=#kd*af$~+}B@fXLpYPFl;M1=Q$*t z0mgH;kvJW@)sOCu`nDp35SDN+LCZ>4W|lIHTuO@~X8 zz}fhUNuyMj_8+s{N*6JyT;$A-0Sq|F3R|sn_PVB_q-&Z@ifQr-sO}cZBW|0gxMpmK z+iQQUErsWA3ykqz&GDu!OX7y3aiq4JXAIhGEvH$5ERfy&m^X1FHyd}O;llt{GI`Bq zDcVZrw$npz_AA%*EphLrYwL!Z*4fs3xA~gccL=s%;3~6xiynB!K>%W~KW#q~-r7lV zC78Hhv>0rznNW@Bv9N3(`DPAqMovKMU3ctQ@_2v4dgacNx0-~{X4g#(z*Yi9xKEWx zA$D$TpEC|hf-*B)$L)hP#jd+`b*Ng(K$bhHm4hr70mqiICP)g(H=aAQU}C&!f4=B# zAAs=`$nmBw^t3O+uT|zJktbV zpkr$VUYTXb9P`gw_j#Ga)FZdwqD(Giju_+_Y?W3{aN9xUfa5%W7HfCF`fSsDMUKwr zNw~TaSv)6*N9NjXka- zG0Xywm5U)fU=jfD)E`Q<;qxW6&_t8XQyQB~fPqY^#O}a2-GXu4j8m_#Z8UrPud@8G zNj74VXigX~E>F$K?hbi89P^spzS17kMQf<+b%^evjnt~d8_1b(zFcGi6;AB+Bms{3 zrO>Wpk()~UBvW}Z#%<$S5JDLQhyvvajZX81=Of>arl{ISB>F)|g$$CSyiT!fjz$g` zhCFTD0Uf#yrnG!Lr$;WSadD~{?dO_M@(`oUQzLxAMb46fq(#tdK^_BX45M zCIXBE9FBIk2ZAeWL-85YrM0?Nb2RreUR%Lzt1Lmt0TrX%Pt2o+Za!X}>4nSQCZ5My z@s^>eTE(WpY^`q%y_^>2);oAo6?Aaqk`x`eEZdombIGT@t(+bt)8V(el108AVuh1@ zHu8cQ_L0F{fXyMscK|br%J9AV=w2L}`WR%sn^cu$Xy%Otxk#99k7ht-+Q4oAuILR6004q1R`W5t#2QIZ?<-=!tJU0@b zwA!Znu&8A7Fb6?~QTK;@ zjPyEs=za^-^%c6))41;e>43o}JhV;1nSeB`Od$LOv zdka)+UovKWrCTaMlQJA&9FiEG!k;%%bwc=SO`F3I8_6x>n%)_e1QV|0)U7~Z&lqJn z3RDtL83T+A9o?(CB3vPh zN4fLkCMgQB-yUOJH$bQk0~*M%`%aZ{Hlb;7w>J^PCC*E;8;MRghgJs;Ib|z?%BoIt z%=9a%ui@=8QrDrDJw3!D%~_$I8-0MFjF1*Qu*!xU9x%*LCy8}`99#I0!q#i#GD<8G z)2-Gls1Ca`rlHwOl*yZ+CF4wE^vA=Im-a6 zxNYoZy78Unop&vSdWFjQN`+;%g9PaAgcId7|NCXy|sjPM0b}c-PvH zg>02>HpOkH-T6rS*~iFHNpvKEkN^OJYZPmD9un2#jpV(a);nUi5kSiggou%DGRGlf zxkC^>=*Sr4j8%^cn^|>Rg-bhAB+ni`Z?`%?sOm^k3oN-AETjd?WPI7IJxo5mt?G|r z-)DzOXiBU&^1=x}c7t}}fVl;M3_u48LCq1=ndF;c}Q_pR(QMb$jL@F>r43Vmig@MLF zCbcKm8(h5C9?~maVoho|m7eM-Z0weGok2Fy$k{QeB?tv_KfBtsmYHXvYxepr)Ovlz zkB4qrGxkPmBa~kZjx!3Wg~2O;z#R7-D*m^l zGHCw*Wz+BA)~2_#3p3fqL$F}8?q+8Bl>lIVKtlt@GEILMB1>WBEv}nA-mPtR`gA&M zCCkTd9e#0>v<5RWFDfx1AaH2C%JeY2Pi_AI2|taj+Ucc=-s&KiFC@xiw}_?~Bq5o~ zm{m779I5uromig_z<$>h*8XUPJhza|Z~~&P;{Lk`J3;w+8ayC^<5|<;u`$EuMvA-T zGtY7-KQYS3wFAZ!V~_y<0BD*nuWqy-5?f0Y*0%Q>ks*oVGA*$OYdxst*+6%n4nTQ;O98U6;T`5nmchen{y??&1Vjp=-+2g-o|7ZXvrL4 zZaZ_^BduU*GD&}?z1(x^R;_J#lcZ-m;s0VRG@L4+JIf>s^2WfBa?OmE zErXD9F^)P>W=q_3mfn5451QIYl|j2;LY7tJ3>@}T)3NK{lhkx+H9II}f3m?0gqA0b z?VN%eo_2AA-1A*!zKFWsr8V?%#rwjt$vpBES8tz=nIMslG4lc1uXwuQw3w`Z!m=&B zi-}%0P^8KLTz*VJ{t^i9Pn)14l<^mcf3_xVwpOuilPfC38sUc0N6t<;+k=%Po@y-? z2sPcyar?W(V>g({7~CNsg&<*6XB?lcMdCzjJGMz0;x@P{cx_2!Y|WLtZ}o^Xr>-_-Hn zJB|q$>)xyQtHajq1eX?8?QRgTo zlU_C;bd#+o5^N%&T{-Z^&>qB=Z-Pfrr@Gd_-vLh<9iK0OIYqT z0dlUNHrHsvhGjhCfVmmTBRwnIHE*?PKMl3@V5=l{!dVq|myHM>RyjL);h6o1o31oKZ0$l(sk z&KRi13Xy})DluMeJK{*{!p8LyGJZRFV^Hyjg0HNs>_qcjc{^1i+bqCH7{o&ymcVh0 z^;P1$CrZ-d(6x)HK1+#|yP(|Av~qV{*c=r*NFKPae)y%WO{DxdkV$kc;*xuKUS@>I z)2xzw!)k(Z%G?ppKZSDt02w|Q+1ey4q04)#X)&T8xs8=VBjt-O7d({WMqcWqjzw*O zm$_l$dNa+{A-uGNM+}!1FxoZ!vWkrhFQa0$o6TMkMUYoieyjJjy zwXL9bo@n7YjiTA@htb#NFINBaL21ni9 zoMyQ_7s7IQr^8kTOCK^Dt;=X8x+|F@RW5;gj+jz#2_u}4DwKglaU*DQq0mDC{t1?6n61N^G_^hG?9vRReUp!INEyF z9C~h(r%!bq!pXXKFAtwK$YGCR*fI#q~cH%#W7n1%aQ*Nm=hY;AnFsA9l*PK0#0x$ z&XXpot?3YH`hAtezuA+0vO7ru^CTuv%Ni$Bf=T&#V1K(+_1!ARO?9x-OnQ!|b$HQT zd6N9rYvu-M;!-fm+sG}>(x8r~JC{EVHA_znSjhJiM=T;_j{QD(#F-BsPJUL&!6*1| z2<=(u3MVt+E4^uTxNU88yIaetA(rOu&r*lX1yVL=cjb86P7Xl?C?4=%c!j(~59jt0vNd^7fdQ8_g_STbKd9htg zTYO|^DAH%9TP(*oBp#Wn`i!yK=$Fx{xso=LJ0T}Qgkyj@U;qaV)aTlvw6HMjy#yt`@`k=fjRj)V9^z* z*?^Z4MW#t4ij&E6DT+4PfO5nIP)2ZfA3zOi=@MV~U&C^2TX~Bv=Te?xBL`LAgYxdm zcF#`L)M$SWwAnSCJuL1nFMiPk5=b5Zg4Sahkf+|njxo19dg8iGU%`>;cd}XOZ4L8X zOA}j{Q);rvcNIoyGv&s2ZQZ~p?{>twE7-nMjqujIx-O4BoyW{&nkn?-4qIfTG;GBH zBkt}T;2u2&Iz2h%jij^H_kU_FoxP&G-#E6~;JL$*w6S5z=K!8EO)bxZ9pwJW4-?%j z)KS}gsxPul1e?#8jgnM@u$+_5zySb}QR((Fc(27GHoV&orF8^Laudyx)>1cN4lo#T zfCwjy^`lM6E$E&XhCdIRi6Yc2uk7Y~IIfHfacoN#k_%8%9%QZ=gE7fZmm?SzeCb*& zIvvH&h%Sse?v{-#c2Ql1+!eyci~!ElxtJK+p>jt8vi>FbN9-D}*`d?#;nM8I!`n~g zyeTyC#skk1Gi(f7gx9HKX0g0++**XQlI0id^GsvRjkZ3_FjpL5GuEff zlbZg`j`nx8j%hyCcC9GS$qZ|>1wwJaywdFLewwp{6`(epK)d{tZr5|vz1s$ z<_*K-X8;fi?NCTOab3lSg%@4>bd1e2T}WaZqTDu_GNdZuoqk3`{44i}JXbGsrrkB% zcJb<3WsSsBLbnjKCPkWOe>6)oKgd;f$G9-+4mizK?i|G*7ENzz&10v@HN=ewnV~Y7 zlF&*?cvB#5;I0Yjh8a9oe7Zc*Yc_LjiaY5ojnhdYjiCu+w4R~H+-xHw0CXa+UD#Rb zme*1*mw9z?lH5$z_NU6W8<>%tfWTuQDZ&ir+ZR#s1ojs2t-PPPvO@A@%yHbaWlYkC zsRs>}L1hLK!70c+}BbBZ4-X;%liLRF@(&g|X!!2RlSV zcFkco=^x@NMzUnjG_DC-Gc5IZ{3{d0}k-kqb8|s8HzLZmbmifxAPKaf82mlA^a>h zHV$$D#!2R*@n!Fb{7Io``i87ywoPhVol8%Ta>*sb#=tzRoS4+PX8DNRNx%ZD+D{FN z-$K^*x{dawZM7~{KXnUoz(N4SDd#7)Kn9mU=y%>E)^6gk(&Dk2&uyz1XOam6HbWP8 z+T(fPAyQie_Un#QO4Ve%)9w}@FkMG4ox-E;jxYeo1P$ARk~)))pkUC~^&cubSs=ce z;MiGPz>_>fbW)HEk>s9%iNVR?xamfLiUFwfLQaAIU}IR z#&T$i3$sJR9wE07T{fl--kULwd$%P)APd&%b$X;+63F_+73dx{pcH zVu|i-r<6?!O0L{WGnH0S!+$tnp!0!VV=Q*Idfd}SlWdwf9S~fqeUyM3XmSFQ2=2Xd zImT#t64yvd9?okE;(b4VpI%(hZ)-@2@kvyIHfJXlTp-L#1>}G z-ul%>gwtL5s~jsJib6uF%s_c04U7}m@CFWZHE$W(-f6MiSXs+wH=Bv$1Z?vcVT)>o zUAxq?Fj3eLX_mfa)q=?+R_kg~OJK#scJrcckwb19nqN6a(gJUGjU$$H zLQYj#V;qj*haFD^sa?rua@Mk3Eby)!7U21kv?mIvrLt9mZ6MG%7~+#^v@Mg);s7|t<~-+)Hu5{0#QA*aCSfe?98r%l7YVTKAnw91 zUic@BQ5}UN4tSdFf6-)>=8{PmNJ8X!i;(QyIs7rlt!!y4Yc4E?Q1`ilSsSJq~ zy4%TTCzB#ZG9(-oEO^f&gMxYEilM~Q*IMhw)=jEUZ4%u{cwx48bdm&8o47^7vyIp% zI9y{KX1(W3xYeNeW2Wi%O224^$|D|aVjfJT4j7E7a!y!#a(eUg#5!O6Bpw{RYb(rO zU0=r(a2OQ07$9O3~!C*emvNR4N!zRMu_1wJf zOxN*_dMbi(`@bcMpjjh>NLtb9tK=CG6*49gI;ao z4MJEojUlFr)UCycF`~ZB(X$-n;N*e#x}0ORcE1;IF14*1-%VdOJ55@`(UqOUN4*)D z-B1yh5u)r!j~01eq`al>n3*6eO(p55MgWHRG1 z5V*^2-~tC3997+S?H8H_ot?$)jm%FM+9gF*l4zx63+58t2EeKbI2Z(U!R-7Ur5#6I zk#yZM2sJCs*Nju=wfs3nt>PG6WS0PVOQ#t1q=sqX- zeP`lJXSpktrz zY+wihlN*P)BzCTvbrg||qW3L$f5zH&p`lz`Dk|JZFt`lUZI1w}KvchPoLXKnhu^gT zeC2lV21%~NK{oy{j!~#drs=cVfpm{1<0ZtWl=Aj~n^!p7k-1dkn)2;Nc<*drlTVp! znmJib>Z3sG>x0!#%s|H(2b%9!<2-&V)b1`WJe1WMXyUVu)i%KhL`5?Y*#x@`fsxBM z9D!FP`V$*$&WiWK*WMPI9ZLG@E65`<$umYwyCF-DC7}Rz=WAf&51i$5T)q9|daj!B z&v6_QY1YxlJ+N(yX@}IpweR&<6mmWykuDqnwh}DGJYy#Dq=2t0~i50`Exn4FERlw(-J!@LR-aiuRG1`dEv8U_KKeH9)R78x( z3j#h?$a1bh#^ZtyVa#Y(HhN@msl2;b{?F&lCAFN5EOR3_?#DSX6=9s@VY7kFNoTMB z0A%ZM+$^ts_X2&%(hxsT{0U5~X(F2iyYfC+2Q@$1bBDm18BJ`c<}@Z+&w- z@p)x_+R}M%y_{u++_J7PzczX1q%3S`SN8rN()GrJO`A}+)Seh*j@xAN*))r}41tdA z&Pn-48B7|l;}3`9Td~va&DYwkqYPT(?MT-XTVds9*jPI-@`&0O9C5{Nd^o?;?);c^ z`@5lUt4Thie`ReJ(cRhl_1VAI-5JLqj+&bPa|lg^S88!;_~P&bv_cJ3r9fq{We(KTs2 zO{mEoj47TwPF+@(h<#lCREsmB=^s=k6W;nLnsLM!__$qdS~BvB-%Hj%a! zLnMQ?9k&es00`^FThP74VfSToGH-YW5n9#-$0ew*J;xO8L>+n5A1%7`%$z z56ToU-Gwo71!pNfg{xk}?Qbr0n=KmGPqk~`EQlLxJkmoVljVnu0HQTKaVOxxD*V*x|dH(i^L@A1J^qxO0#Tq3BU}6(c-m zvwCV)yBQub@lny%&h}|!zO}rHN4I60$+d!4gK2pr#&Q>P;0)()ILM|pj+$1zCYYf# z+j+jncO|58#^&j`DzQd~=2@c|DjbrEq=I(}p*7P>t6APz>agjNOvGKuBr7ahag=Pt zv6gH{APhPAl(#q>RM+1QFK@gPc{RS5u3KqxT*G-|Zub6n+NFvKfgfl>#T1lw!!JjO zDZ%EJ!5J>3T9%G3d`)lmIR3?`T)kQtBpj9u z0OF~1Dahqt!S=Sc(cH(VMIDT2Z0<}j`Q2kBQ(()sGm_aHo|ynvcY^g9H9r*C$7y3~ z8q@c3AG6@GV}M*^Cu)@&dMG`Jt&90CJm~DS`v`6Cq;ioEF*8c#K>NI8kU+*r=g?QC zcwF*CWdj$qZgvMCwR6W>Q^-IvflV4sKN}h)U-r@dEZw0N*B? z_84y`wy}>m(SdMyTntVyq^ldv&lTvilCPr!6BOs7QmIbuGvn$D+cmQh1t zBF`oKK6Tu3LLNJ4z}g1(9OYCHLCy%l=M=enkA06?hgQ+``=r$^G~H75?g~6H+c}0r zB5=ErUB2T08+il~$WfZX_^a^aRMPYnxYPWZv~($PEwGX(=R4bYCvY2zi~_v!GB_3I z{{RQPM|rFGw{pjOJ)N?%&XKNi)67g zN{<{{0}LIY9qglx+y=hqlN!PHTUg6Q<(xaC zZSxsO$;lZ!jO`~Co2S`+`s(WTNPf#4a!kniK`8(Ys&Vr%^8o{#j(b*@gZwLhe`6+~ zzH3|B#L-UDOY*|Z2>=2mYZVbZiTKNRY=cXtw6UTU_tQ$npg7W#uoFSm~=nX)%FcQ+i5-eZt!YF#e-R?)26 zPg^)H84F0Ve(iTgrHT#tS3Zk@yV9sdVA{r`V(oD>a$4J%ouMj|O!!}y4}s;Kr?(6< z#zj{uW9Df3>-H?P(o(``?BkhaYg2CcV2~uG(94w=+RK!{!2kh+o-50LX^m9nn`(>Ha_HKFY zhl1``Ns`gFtg95+pE_H|ZOMre=|^RO;an+1r;=tW^^7A<|N zUun_JV(tF`F3b>>+D7(J=NXY$ZO$>t!Nq%B4of?fEp(YLC9<_K-ddev*fbX~AKeC$ z;HfL}oSa937oG_3T3T<3rTBNKPbAkGNt1fX3`*sunf~;jx*JNXE077n1at&c+7F4Y zJUyc{mls}BTEf#t@q;52Lep-wZwXl2>Q|CpS=mk?xVDyP zNr-uJy0;1(0MC-d;moo1+lo26j@q7_uzjN56D7T^n(3?O%`(ZoZtcitLL$b|Bw@CK zPB$ELfCeU+;&$;W&kdS2+?JYcz%faB%N*$}i1CJAHc1%~bK7P+;;}UCKI+R|wT3H( zn$q$!iRQH`yMDc%M>heIoK?k={rqf&T#G&&x7MqZ!Y!IKqq(jMhs$I;HFhc^ljtsNM^7 zien4KDFX~xjBPo|Ty!LGX?33u&0(v>r^$4-_UmqD65QRRJic0#llPg!NtPpN0F#n1 z25Tqm7hmvW;PP|m1zPeeV%5&3Aev9NZ4>NiRvVjj zju|%YRwH`>mCgX#dE|`aI^GDh{p#V>uW{S{{Z0^)KyZ}3yG}V&BRu- zptsJ;u^H;Am)3wuzwJYm0p)$IZm{>H|E5 zRx)Ib#^6^ZZEw7HVxsY0jSY^W9mbb=H=P`@%JVzOhs;o-Oa%Zg=In8gEaZXBP`nqK z%zxU_39@C|dooKLcJRp=Dkf(_OEBOCLPvb%swJsW(b=5^l=inJWYq4YTj{512=o5{ zedQmXIMImz9h)1dVYG|Py|rfEy1ZM5F*4xB2;1}E@<-n3T)vaz4TOyLEsLJ1SYlbKklgQ0d^|VVc>N-Z-FHHYjbFJK=rAWGfa^v~b`7lT$~mN8#O3udgl){wSPY zTWS-@F^)JJ%?zbb4gPCL;!iN{Ap-z2U1j7~8s56Ht9g2TrL=R$aG_&qqw@mr%2W)U z*;mT0I&B%QN#eD(7BE3$bkaws-N<8sB8pKgSZGhnoUY)xDa?cbPbRK1xEnWyOIc)& zC~UV)ZjnuWb#NPMZVfD(R06R|>_VmsZ3nrm-DPFb^oxaStzyeqlGqp|iZp}m*5+A! zz}WfXjaTJh2x44}5s-8BMY_DyWYt}-qq;>_yx!8!HQehT%VmYfZFU z&kU}h);G%5QN;nfkv^r}c#v13e%*GRBgBf7Vi_T5FaS5e#p z9BMz+Bx}`=-W>)22a4rUE|G4fHup{}=JKV%GkIjGXq2B#**W|xxYM+2f9=~_tIJuu z{V#pnS`cHBB8#{yh5$1LICIVc9+cb3?{5*U;e{Rx`$P7jbQz<$HvVfO#VTW~9II5?pB(c2^Ay z(tW6HFYd&lHIBp}4%ko-6#qA+Y z%7nH6L!6Z*K?M8O)}ME4bFZY6+N`iM!!k(M5-deS?^w!(IR`2+$QVC&t!7zif7*sf z?^M}CGsP|hXc<3j`w!+oIvj4L<*N3e8M zUZ<%o)1_0^d^z*U9FgsfSX^5(9;k8w0G@M@dF};Hm((^e<*|bIQ?ria?NHoF8Yz)i zckc;iU@^#C75Z~sPM00jcW~S^Hos%IjIem%3fpC5IU}i4v;bRyxb)3t!wTrILf2PU zPaKabsSCGh1Z*T@Bk%O-{HpcE<CE!0ZbG4$;@Ixdd`6k=9U%wi}5&#b%WjFjY_-XBg$4ZxOM=M90F#;;ubw^>AF_N<(IdK=3kx{p^QAH3Ol?PC zqacn?2dK}tHT3dmPpW(=*RAYT7Av^fUEHM62{s4I7Rcn57y$FgIn8;wgKA6V`JFgl zjWk>Mli|hI{u^6gUusKZ9Ao!Q@<|-3cI`kL?zod~ILI5h7|nT_d_=y`<+`)6x}N^} zX89yAyMJX#KE`WeRAc5`?N#VV#tumA{yA&5pYVp;{iE2kGx6T2Be9MJmU!WmF6e*~FwWIGLm?R% z#zrez{{TXVL-94m_12XnntjAFLuGFxZu>Gyq@>O`^LFKi*W`oOfNH(byws-qWz5mt zUPBqRj!6DhmN3Cge1-#rEUp6QsL7+^3M=W$4TY|!X)Nuuw09dBq`||kcttz{2Ti_* z6qciBVc?6+7V>>QO>Hl(w7aNW!(}W_98=swAxO~}9NZ@uq^3RgbFS6!`IX!6_6 zV7H3W+B0FJqAo78R=BtGnmD0VxsoJ{ZgAUCobqwCxNf7L zm)30$#PQqTNpROz@QcNg)@FpMe=Go?l0eG0Jn+N}92Rvf4<e@mOJLyRCb_*1 zX0aF7qAOcHFHpah);!#KvO-sBcSH@ljqA0}1_|e_M|I*WtwMO_)RnDZ@}y*fQZ`+_ z@VtOFkV@_2pgdzWS4X^$%heV?vdwC-D?E=5$ragKFvfWilE8pUo;l#+j)fz(yZE6G zhCC+<-9u~k>v`4fZVl5*VjPMP4w~A8p#rDumd8kLITs6AH(!#N=ydW>h8!!N50mvgc_2ktJ zB)*ei(2LDtCYY++TSXXF;ZD{WzzeyEz!}dzwBr?FT<>J@#hv}un|)(5TiruBnF1rS z3ES@??!gBuk`5Ooh&aJEXYnSV;hV{qY*&o4#Ts16C!DX6l0_2+Re2jK;oGJM;aon5 zH7TvttZd&@l4X`8VIgg%GKH6DAL|P405@}y#a-}vOX3TAeKzhpJw6+&l`E)BrDL~Z z=PM$BL}#xc07nOdntZ7Xmgbh7tk~XZ*OOjI-df4_i)g%-kV}>f$`_+KK4%UT9G*bv zc)B=bhsjx?^DN}^A~V4j=>w+ZbJdRJWgBw9{MaV3{6(Zg;$*vP63qviT|BsqZdxKi z+@O*+u2^F~bl{raT_H3B_Is%8?;+F{DImS(A1iKEQT)DDP5?RQ4VCI@h0ECCf3j}0 zyP1B+4i~l; z>0PFypjmi-Thz2Ws~d@?NYNy}wYXP?a>>3m3d5r*>JL$jj%tOcfaTWoJ97)G-sq{m zJ27nMXmUeEAl?439!3Ux)8;Fb=WO(+m1n$(S(e2TTepxnnHAhchX?pe;c&fo4_fLq zjXK*v@a3|?9vhTQU7<$YP>re%K70jAGcel*r$j{vRq^mr?>?9gpK_$MmQ9tEs;k~(WQ=g zqSN8uB*dhV$2Rpy&?&@=_j_kO!0n3AZx7yU>bJ<(7cB*`ourVk5=2gRpR-sljr;>sxR=KJZ?>DvC>SqDvcU7Z&DEl_!7o>QT0| zSyA^_0EWRh9D3CH2&>`^4oy)RcUvOax~x$W6`jY-4&$B5z@Nx==C$;zYx|1{E;d}; zX|P+Yvl%W3I#R5mn8$|8GbCX)_R9CEHG4~Ww3}^NQKY+XF=Vxgwr#hMXi|(h1)Rx) zf&u_L)}EQ+eLBw8)B8r#P1G*DOB|C~O6<{31IHq=d2Cn>kGpQ;^Dx{xtuby`O&pu; z8MP^An%$fGRhP+Yi0@Wy;7Y3Pvv|yCS0IKge}@Fs^_@pi(e3O+dYm@i8;v8=Zgm@l zkr&E#4}pNZ6$%uV+7Ku?r$>LOTIug+ai>pjWnn0|TSk#~*v;qdog^)S`;~VN#Bwsk z)qO|DcOEmmT^>fehf9QkYv;q}+$$+K4I3P*F*(TV=yOm~*rVdBX3&%EjV+@tzGR$F z<*PbI(Sae8zU|?$(~;jbkEY1lGz;PzDdF>UtCVt5Mvhx@!J}EQM=A)x7$YnR`_+5I zy0(`dsc+^RQ2U;ktquVYZb^vz*bY7oaA*|)+z6sn0ZxM>H< zGt+1U`kr{*-&<)~wA-Uls_@;)97iE%C4h_!{HVYZqX4hctC)7|Q@PS?G`KCK)K+%9 zxG|VvQRJ*P%0pyr7y;WWk;ovPoqeCdg=P3FW}0l!`FED#QWqO0Nt!2Ot^6#9A9xP9 z;2Q7`7Ug7Y|PPd!kUY#Vdx7sw&CCEby z9HC`E-ho<8-AN@!O6A5Y#MYbCXT@_22SvQMn$%ocX#(cjYph0B_e_ic&o6@NSJ$B8 zytl=ccA6iL7eU9Mr|Wgo;^NAj>hF00l9Xvpl_BjmEdvIbJD#g!awYt3dUfcwjzFT1()vo1P(ni~Jo&zTXD!E~vRAB!AdcA2=zQ-Dw=vVrct<9mfXl|it zAr}_Y$02VwXp{2X2nDf>^}ytFJ~z^0lUui2i%}eL%4Q_(Kmh_x<(G}%4ZDwQ;~Z9( zhyEey7y4|r`qjL)K3$_cGTTSGR!~RCRF%%=$-w7n@6xh$pB1*T9M-eVZxyU@qsbM# ztg5avgDGM%dE^{`0*>70Pnk$M99^ZMlkE_w`z#jf9t^sj(Ut`;+4+g%vE*lg%`M!` z7VSyyB${aC5Xj>!UBLN%QJvUq907uHf@@Z76PV$Vj5mrHPOO=TA{+z^Gm^u1Ob(r@ zOI;32NiILoXG@>lE)YMv(55+t|N^$V%m6rRx`mNfmqX*aSEc@2`sC#!U; zdZwTM00^Dc!p)+__g4F@6(HE~s>u?xaw4z{%c%F- zSB(H!WdoKBgnWf?QI1Gr0q=@h3g=yIBnp>7AWzx!Sk9a^b2_SM0%vc;(6w%x2n#3<8qB!BW z5s4>)S4)<_V;c?$ZM*}}=e2g$w{~-Qhs07#edWhAsx1m3X(d40kQQ#9UKDf20l_#G zoRUM_n!?9Y{@J#VP+ikp6|>Y}lH@+v-9tqxKP6aTFyoAlKx*u@+o?1yK7X?5tEx?W z!qy|^`GhQdq5<~{hC8qb1%?j>r0`#cuRKNJ`I^d0GWvSQbA*?I`?%OLNyg;_lZ~N< zGt(+7bmyZZ{j@ocyo_sAJYBYBVavFv5MhP&E&*Cb0}T1MvPQA z!g3daFgqI9({A+N6?hiLYg_B3zR~X%(#%Zq!;5W&S=47Clgk9SEzCr5xYlU+a^5QO zMeGXpvT7R9dHlmMA8d{@xX&O`On*60OEy@uae;s<6?;3DBk_uh$+}}aJq_oGMfceuhURs?WYg`~M zcE+E($UOH0HKuh-7%XJfw3uw}rnNF#zMj{v!qL3Vsv`L_^GUfdSP~h!0h-kC&Z{)3 zaSgB7^sT|Bu)B)TPjhhsVf>FQZ1VnmvX>wLdfLE3uOEqRo zVe+DF-rJ`iGwvjiy!5FvajaNhKmNv%Mmnsx| z!(ayh^LEcshU(7h&icA06-x~+5w)r6%tPr3(LkXpXey@IdE9FvZ6_yh3dn%dK* zO*2f>R!h{hwbpJX&9&XEV%ApKoHG=_c{0Vf5EuiHNfpj(8sItsHJ7&Eckvp!9ozArl=am(_l7FGP$(Zeti5_D!F=4`vTbu$2=lo34cvDxJON+e~V3KGjnRL7D zk+&+rRd@ubLUx>l-P<*%{{RUrl0EhIfdm>Qt)#7MV9N(qd~_-?7DGF3IATEox>V{3 z_Zb(%EmHGH+pXKl;dtk~WS;J8;cp2(W+sVO<`V7s2ONS&JeunKb*fx=XG**9)|9%G zS~ZRNw2Ml(mOG}pjbh7rAQK^ku>_YqZ`v>y1IIjPtUczq(8YBH<3_MfKFJ_eo_A4$ z)a8arbH-TUjs-#Di>u2Sqq+XjySBU&9jax0$fM@t91Jl$V?QzV&1>x2)FZj-KMcM+ z-)mOax<0jG{i$PY64zY&e4FMlt1`1H>;oR4@=bYusp9zjRij$Zc@3PBO>!Cwi_2L2wm}1LSsoMS zzFTPXb{5?3i3D@U^5w9=oD8Ua**w$7iL5l=5J{>SJc! z8KZopSXC_>Fyz)o+kX-3I<(#(*KB67n%X-E;bS-}y2<_5Y zB|EpYoA(CjSpX;j807scvhd!6;r6)j>v)S$k44dJ)$B7{pMpDxx49kQnZNXf}3gIx|ptqds^PYda~c(l|c zxRMlTNfDwer_4wM{{R3bvyr%uO7zc!*Y_5d-d)6VG&de?#K;ciL%~uH@bozcIVYOQ z@dtx`-Kj2~x@?j*rXxsZ-Sb5za$jg2cB$a7;~6~F>o4tJ4R`|kQuAIPDmfvBNBK-_ zjLYT+>9_B3$lgc?HJr6A>S26GIzFX!CaBj}*6`j%_H>q163BL_R6d(g0 zmiGF@NSa=yd2KG79j>K~rHv6jOy_PFuF`N0GI+_Q@PyI$;>qNiYpG4%%jb8AS?6$h zXrWE>l)0UuXl5!UQplMAfHTO$5&`ETtH{fj zsfT&sjYbU(FE2d1%TzVmh!puQus*0l?dv&m~~W2YFQT)HHaqg*P&h)VN=xpTn*v7R$s z)ZQYp@uq`$_Ma{pA++))g>F2^VS9GTD&r-_!U-n@cN}gwqng??NUaV(OG&MCIhW4! zrnQO7ms7WPRY>`J795=PCm!7XwQ9*7>@jJ!*LRwF?vw1&Z&-j~kgdqhcH<{FEnA); z)8>6v;?XW7Xs3;CBL^j;LW)We)RhAqj`^;8#GV-qr8c0qmXX{|FPip>_>w5L9I;Wx zI2>e>3HPm{PUpS<0Kql%s~epc#sg5bcGTM8C1^x>MhYF-cLB9}<8QWU-?g5X9oNSV z7EMCcblWQhhFi6naAQ!L{z0DVgCAc?kNyec4V|KRm7{%#@g34Cd2pjMD+UkF82riT zR4A@T_Q#q_KNCdKG?Zz$$-- z(4Li@4QWE9puwqODxw66ev3t!;;QH95F4C?7rBkQRott*|VtWkm;5;N`Ap-JSt_1 zYl|Yr<(MkIdaD4zLa`uZXVlT*FAztf>pGRpmT~Hml#varlle)8+n3$BNgJa*NE~b|tHR)%jru%vLP`^BY<{> za0obT6<#{$JXc+D;kop={@V=K8hx$X-OpnYm&}gsVr{JwuIz>kt;-yAB=d?_)GlJ( zpSO9ENhh4sqFhO~(F;TS(IY7tVpO{jp~|t`fShn=@UEr(h}Tf*c5zzBu}rEVCfaFY zAyt)_l3xcuD~4?InzP~d)4Vm}Wwq2MwbSme^!XN8=ZodHR)mQ7UN;#6wqHANKDBD` zroGXo)8V+5-b?7#SsDf0vda`%4&V|ueEUZr<7O~9GT%T&(2~QW+W!E=uT;2>HW-~G zF~-XL$#t<*qyAo+(^OYvb>Ti)EC!UW|g&ki+gW5k`d-A?|9sN z6x|`GwcZ z5^nj(#~a5$ypdG3y$br`9X>U&k5{xnS+?8A&T`Te2xBL7flf*F4gKC{sZ!L`xz^$F z7Lhc~sN600lo?{UiESikiCD^DgPp;N00KIb&TAS=eN#yAj3X)KeW%`B=~uSVhlxu(zh+j9Z{4@$3fN}HQa~N6 zqVS{G-D(#4B}98%M30;G9>D*e{>L{D>9bJ&Upk>>`Bg8Yu7Mp6GwLh zIxA_BM3(m#_5w?RD2>8G+fh)ny6sZ^HY*H_*G^-DQt-XTsdQq#)o!Ii#?Q`}PbzK1 zbE_~`D;sYTCRFr14A%>&eX>h(Aiys=6lOW60_Op3!VZ_AK`ur2}Qu^)H=>KZ47 zHSIRSYa(tTk_$F#&$CAz#B&7%i4?I`5rmMVfw%5~f^$THKB3{ACdSKEia0IpW4+dG z?B=$L^J0j@10hU?2v>0pf}oPX4DC6!X?ynh?;*VVFZMc5dTc!OX{}7$f2oU>W0R1F z3Id$-ny(j!G?^aO>rd6LA+y(@i7pA-50Z)yZDPuQc&@vEP%;##IW;$p^$XW|Z;}SH znkk|~c#s=6zF7E*X&3ld;BNH zGM_HMFbHA@0}gYS9*e9;d0~HQE#nMPB97HJH5rFD9-3)n1umVobEXa>Y$OeMsdg(ej_%%A=R#=zlo)}v(y!CZKSt-@L2CC zBrcyS;lU&V7^pm+O=%JlUrn-?#P?Skq|J48r^;rMc?nqMxjO?9B1nGz_0BnL9Qs!0 ziFJ?oOa`BC9lzOQw<~ukf<_yQ#;$S+DphtB1OPC=bsW_mAHRJb&qr9GxLrPJ-rDxt zQy*qLwTl0;rrW*IW4cP-sr(Gd4i^0mCjHu6_a-02;+g% zII8P%WQWUf=3GY|&GeVH{{Ut$9I?4FGR&nJ-JctFu{lyQ`?1=cf38gqk7pgMZDPe1 z2bmWT)~>lNo}J(+G<$m$kgdvJLw?L8Xro1K%vf?x$4$8dBxkN` zKgC`VFljNRy}WVmebAehj$64{01BZ5jGPPu&Pxsnqd_RMs@CH2(?j`I#!JmDR!ex{ zG0kvHNhjKv0yrheBoGMa9C4H4T?u?U+^B_drvO6Pnf6A(OARr*XPzXZVJ;`Ml>S{=1xRX)3+SdzlYvxTYynA*= z!FP3BV*@1Z=te6(=0;1FXeGCX;uQ-d1bn+33`e<1#|lml&A9c&P!yz=-%yg@?GrM> zsIp7@vcX$<8On^QWf{Q8-RsS3={8pIOQyqk{#~;mSDqVnI2+F8E!-*Zj(U9EPDZ1r zwy>t(OcQ;gHDM*EGBmp(BieWeIrZyTG|T%ty%BWCQd`TfDPB9WS!0SK#DpM@ z4tdY1$7-OAv?JDaSoIBNYlvfkt#`ZH10K@A?j)VP{!o6S+L>W~vuWtje9!`sn26ld z5KrO&QIY`|Bvox*8LjmeiDQjpdAzn{$CJ5~w+oI3UB8W84=$agM-p4avcSQ_VUJ$q z5B7%#J$-2o1$`NM_ zuvNN(-*B$UN$_>B=`MmtXct~em_ zewE-q2DHWh0EGKUpX^H4*H>6rqn8hKtQ#Y0GYMn4Q!m6$)?ML#2>4=YVHa6cck<(J{?{!OypE8a$sh}+CtX!qfc zI38fy#0BZNdW!S^0EGIDzL%-XdCIcD##u$aZOxS5E3~oh`LM37dljt z&mmjdx-d)JX?GqXS821i@%M+Jk4Er*p=%wT^xBfi9Ls7Qq?S=X$XH`Pbe*liAfV?M zu72Oimfj2FBYl%@+lJa*WzKf9jA2d=a5)*zt#g+;wx%@Yv6e}9Lv&`fVLKLy_&Eou z+(PntGIbT)_!h$9JUF)UO1BZ*$uvSJNMa?x1!Pa+Cn~ByY#ahd80@u?&g^UWf5K8} z*RkGe5>KSVr`WlcIVTed({NRgZRcN)FBo8R!0(<&+wlF4qW&Nz z7LQAk%2@3rir_?>8X=HmIm<{v92|^f5^;)^rl90tYhE3<)>CY{>c-0)h{%- z?eBcaZ)S}pyN(7+W^(@kD@b;dyr#j=LIr4e`c=5OvDB|E)ogUzGqIJv(=DWm@B zv}Y`=*(%HXudR8$qax_~*s;`f{{TAf&f(;Z%zjLSGX@0Xh6FZ9+ut6Qn$%~bcz;Zf z$9^b>$hT;1?rep)jL5Oi5F4_Y$W7ae44#VI^r-JVQ6!M*_S%)kv1@B=HW*&#?B&4$ zqcScFGVcMtZUEp8L987oP>$AXtE*Kq`MQO_*)7-z<&NFa-{(va8A|=;IO;nL$KyX1 zOX5X}PqfBnw`H_!Zj$2R`DQNo`G8UzIXo{IqA}D)#)+vtzr?*B*5d0+xV~acGc19l zfwT`DQI)VWMrZLIK zO!V(0w^K>s%Ugdg-Zr*EA(|N%Z14sxxpVjAAT9~P1B`Q2G8=m+bUT~HlG&~=1`I5l zcHD*M%;%7VWaEtE98}k#bm^m-Yk1~vUPYEO8@Oz3*u6OW;NT89&T4HE($?boON2|y zHikJaHY*2Rn@J2tKs(rWBcRA5nz3`N-N`&MUECS0<7IHJo?}gi8>3tT3Hh=PakOCZ zgHNc2=~`v}vHSaZt@RJFNG>C{mVfkxSy&G(!vF{b0tZFj4@yhBYn^i8Z!J{}S5hm= zlK%h4jBS_d*1-UGtNdOUr$vjfuV7`TYU+l42*v#5IHwhih#IoXC zvqVcQak?q_SFS<9X6^y1WKH5-Hce?o#l4J|FQ*r@8$5>*7ldxfIohY{z>2wNZ{<&@ zTja#>$16x4W!rTaB!Ev%z%Jo}Lvhxj(T%!%IPn&rZ*&?(mcvoEl|v*qb0Cv^SvbS2 zbFm$=gnCs(4J%z$^t&s|JIN+pF8ay!2$s%&HBG`HRQpP|Dt8V}0RXAU=C-ZZQrEmW zt0a1Kb85FxK_$~mB89!MWM()HL07{mTxE)b&U*RJhb-Fr#1TztaU9X9^Ko>ICzj(M zF;&RqhWSJ6cELik|P^=eq3vYUn?x5X(Iy%8O14RQX%m_ zgQL;3{Uvm}AMB;Lw)+L$qsUoJ&=C~-J2@Z+%H_)vrHDPVsp5YMwS@bu+QnqLl@Q7= zS*`Cb0e$h#&InVt_e6pdDi85yvafXrW%!AY?Aypp43{o~F*6p86vu@l_g}mTkmL|S z&PPZ!KOWxbz8kt9XNKnT>f{LRj-=B2Xm1=g?jHJYVB$F(qO6F-%I@Hm z^Hh~l)G!0DBx}#&7;o+7x{pn~(=9AkOUreVQ*|@NX$x%gH{eJlk=G=E+4Zb=>@?d= zFyCpn7dlR-q7W|1Lo7D8AsDQY#8@_1Z#{y7RAh0OQe)-NvE%Os>Fsf@YEd<Nav+FOxivg`HLNz9`KDkA zZ!MQ+%n2Z=#sI7@3uw}Kru$Z#P?;mKwvHV}?iRThL|VE!DsCYB@+)D8#==3{(zUN{ zU^D%vOEYP@Y*r9h>JUWRRE1^(0FnY=L>nBI2P5V+TI@nId|jb5I_15-rG0MqHx{w7 zTt_jLW8`3QgOC8cKtsQK^$K|)(Wz*Ycxz8G-WX)MmR}-iXFJw7-8U+c)12ThQ;>RQ ztN7PmhT`5yR!4=Qm=PjGM4Q_Pz!m6>KsdkzCFx-)_BNN1y}W~M;EmcAe269+cSzC# z23fG`yb!I=-8H@7&1X#Ub=|d|sE?z^6r~b)Z3g3)i)2kOIc3Ih%my~~JBA(Xg2k(? zKTFo0)=BTJOxNWT?E)uNOPN3tML#EI!-Azj3{PBV3v;3^rnIt2u3JkCwxuW5>}{k$ z3mc7yvUz|wkf=~Gz}i60NgWr2WYBE%okBUZy&i2#PP?|#u71>wwp3{xxCMC(Jd{#! zNE?oQdF!9G=+N1lE6pxFK1gG^c_5NGWk!#k?xP@b)V9yn#Zf+?>w>v&_iG2BGnW#z;TA|}a3 z77iY|Ojczt56R{u^RZ)jKjxavxVcNGY^xJtnK?F-; z(|xf0pH7vh^5;q9WeF>}%zP7^50?#tjOPXj}HPEg8#-s@z6e3&(3NgDN9P$7MInFD??TFH~ z&pP7t?`yX+Ex-(fsUeZT$IHT;rZ$3c&3O1fisz$KRbrjByz^)g+FT`!mo|4h%lX91 z1W6c1^8o0ifwXnX^)+``*5UCAwe-_9#CGtd)!AXWwD4R;+Y0g{ZQPOu3BWlt>wPBk zSJhf2j^-Pgj#T}wFZ7IMgk1(%fLsDeCmy8L4KH8TG=C$>)f&}wwvi!udaou>g+lEs z<^poXu$@(3s90AjTK zAswcx8(6G1Q=6*;r{ds&{hpCxUSX4V}>2DO@3+#o_jDDvcO%(zw=3x&qvR=gqL zc-vZSLf&sUUCrcey9=@@lq-48yN1vO1EzJ5-uZtEf*jQb8ng zMyn*T+D4McAZ1eEfTxg*1c#6_lk;#YJ8;rNbl>R{F-MTAg3wIro2LPG;1W*YPB2iM z@-bp8P2s!i%{om=&Nj2Px4m|Z$ONkxljTg1LuBEy$A!q}CbVv2wYStX$ma7Qx3xrO z@@G=fF>IAq1eO`+jNpAuW=(T-t?01Zz}GiX%_vCagDL|bmNExWxyU?q$2ETP!HJD> zl1#Fp*)_l^9@2NIWxyXW3;OgXj!_q7@uk;?tQ92P8(dD;c~u5P3QDKlIAB;8#{_Zh zMzP|>y1ly97G%7))u1Ue%N`^yP@g$~Y=XoL_Q*VEisejG>iXrZ(9FwcyeWcdlWbou z;5|4U2<`51TlysM%Qm5XHKdH!7S}PlTc}0~=<$~ucpG8o`d zl3m`~%$d6v4y_b_KinKC5^r74o(iw`n!3*h_}UwjYbEro&4P;PyBZjP0OM~N+rJ|n za@^*y>~#%1U&$5ijm71x(Z>zD8^QadlmsbM!6G%=js{M8ioK&*cxzFUd&8_*t-BgjLn zQDaLOv|z6wM<4fz$Y93@JYe_5 z#>BIF>tC6)Yt1&+8+$wLQKXF~LFLB_g)Jf?VE*w?U~kR{TxUE}UlD0AeV0dDA#Wz0 z(VKSjV_6^NEV$e^CI&+h>zwmk&X27nrMjzZyN<+2meEcy7EkYnWB#=B$?c9ZD;LB5 z7Kg+i5N}@XUGCw6;qFx2FRcPvFumvUf)g_(!&v})0zi8x#- z2OyEk_{&$i(KTy`^jTqRYpXP~4RIde(fMjsNzUTwxkE7S2fbMEy0?rhWU^Urw7pYI zjna7RVJjWbDuF{4{{U+&z_R3n&>jUIpzqLjg*?rmO(fQewzhYYs@)6BPb8#n5*ALl zOrT&0`MEjZ>L$N_vRZ3bQb`@ukj8Bu?PFzZBZ3alMnD-GfX={Aw05_$Xc{bK1_|l z9C8K#6gb_L&^4`A&dT22?$O{&i0&l3xw(=iYpXEMo@^VKkam(llWA|88Nd}!Pr3(f zx~aR;n&NW=Gh7J#w{W`^ov>SP9I(cBZR0fEcGYyvJ{WGSmKb#lN0Q}a)IQMfc(Q}$ zVL>U$8i*0wWVT}oh{_IVteGz>mvMI({7dhwFP zfst0Pd}nUL{{U3gzAyrH-&;vh!u2?|eBhpozqWO#7+rFBg< z@@+QG&8^B=HOiS8*sCWYd0Bt~gJ+R}(DBJdqfUICF2?|JIu*xreB_?_Ht!eqrLAcBmJ zP=+Uvq#i1q+V$1{0F(BFy2h5T7m`%J*w}5~xZ`jP;5Vsqae-Yh@PCK=PiqD3mBVTJ ze430_k-JKZZnHPc!Z9G;!EukBa6@+-)L#@lKO9C&xG(=|chHFDr@fSP--#NbO|IUukbIa-W+Io_3A6UUQE9 zsn-(eEAdlB*DX9fBsX$PneEXWLhP%9A|^)C7?1(!uxBLZsqJG(qpH_zH4S3s4KCjL z?@QE|YryflKJ-;TGVWoyU2@!#Ksm{!_@Co>li{86U0hlz)FrpK6G?gYkG4pmUUl-q z;Uo_lHq(UyNAJyIcrRRv^HiGZOSZF?-^?i)iZ+Q@GLaK8JA_Js!2pK&2+mC&DDX6X zEtVZobe&qxc_I5n%yzb-WQJ8y$bG?8O0aL6883sH&NjZG=pGjF716QM^mt)6x0<5; zjuZ-p1-CK-lnwH zO~lD&#zf;L7{SlXt%A%CO}>~qY0zb_2J8O-*d8X+^$2aQVur>Mr@U|mxGe~dt7o2etXh-He1(-;kbj-xydr=Fiq@s^pd>(`cdz8C(~)8L72Y;BrG zO+>OIg2^Cltf})BM!+Bwl12_Pm6-W%jtftcZC6lvB8{$^)!sYyU9BbaK1U(Q!mk3HXjY%>9^6?Su)KQ zUfmq2f>lw!m&)xd=KvCZUVB#~CY62S4Nd0RVI22H;y4mZgTCu$?-8(6s8l~O1b_l} zz|QfJoveFL>=i0pM_LI;&MdH7R zmiE^-QA`$3B0`88e9@-!wZQp;kCeIVfJhbY-|$a;UvI!UWwecMq?=W{ZAKJPB+Dbn zp(V#r5kZV7BZA#H9!>jZ$M#PbtSfbN>mH`70Jl)91cC&_g|Zh6fC9PasTtzDXvw@| zI+wz6-)gqfd>*V16yxLzf~0U*w&F>~29~L(6X9Frxzn{x zG+AGWCYnb{86uHdMO9PD`H3NpOD+dto=Zvb1;N!Wn^LvX?<^pVMbtJCt%^5XmnfXE z>Ab1jIQOofP4NUi5Y*(4&A9TW*))aijLmKXf`<}ga8Rp)!F!Bg*R#sbX-P7j&c7a= z;tfHpWVlZZr1ue|dqXsq;g^8hl)E~z5{r)K1ZJzPtf#};gpkOdTu9fF+l5w|DN3tg zfH>T7j(QR~!LGu`QMB=-*0y3h8;g7U*!2aOZNwXAm5FWasImx*cvdU-MimHJ$(Gh_ zI>%Dgu5N9u?;*L4^xCv91d?0)o?X;=P|~a5F3>W#$>TJ03v(V_GEGX}-p5j86UiWy z2qW^84WD;$=Yrcv7#YAh>s!`$5crG5OC5#P#*b+>pF9%U-%9@gEMWly7|uw@QmdRd zt!Vh7#%~T-Lvv+)as8#KUK@B~fNp`2aLirE8@ICs$3Js9=xPrR%MXd|ZZ5yE?|webvwcbY~Ps}^Kt z5i_%SYNtI3-SR2iNTfl7cMQG_)PB!%3;zIVTF>*@w<%}?KE>L+zU6$97-!}fuAjr+ zH-^W+a%p$gLh{XS4ACfK9nPI9$hnT#;Hs$%Lk1@$iN-QE+Qv)vWt!hoO+!(V7PeSz!$}l`kc!F3*0G@`Ms3xCz;C9rNq?=H_zMWzbq8O!pp^W%q8c2||iZBTd$0vX) z&w};q9|>K{d1pM!Z+Npoa{+R;^7(OY+ng5M7$1~l?{&^9zL}?8>aSxb+at2m7GE+C zB$kj#EP+gn#5PP=Bn|`aZuvDGN|cd8#>PnX?M}^_X|9%6j%%20lHnqc3`2QpM%*h0 z3Yj>@21X1zkBjZ~$n^O%`-`h<`C*Dlr;ZSzSrvdxM}-@J11C8Q0XZa9pABgiZLi4# zY8MLyxbrP;t?kSk3YLsNmoCy>u#b>&g57!uM}+k^h}esJ?LYfX68cM<5|St=j7fE8c zPcr=@`$eo=q>qI=Hn{UaC#C_ZJUwmwv2|-EkElm)s9!Glrnr_lV_SEO;T74A$yZ|# zA0%UTK_CUo)CzB}*xY#X(%G~)(i;_c;JKD*7FQxb7^+|bp@ASaJLQQL>Xr)>Ghf(G zZ>PPpx=W{C51+`F%t5+Y6k)>zASovqA1Ma7I43LUnUJnNtS!4e8zTE zLfdy1mOPgSD&&F1Y+T!3MXqUfDK)H?@=Ws!2<}xOnNA(!k8WGc87crAg&=1fja-wb z)ci1>G>cXHMxwGTF0TZ8516YTl8g#)suRszjGThZ0X$Kvcyc{ZSu__~)xMMFpoS)t zZ2tg748_7TU~X3>MoWwl=qaBMEN>&Y*Ock->JhDzUuhAHM7J!2#Pcf{)pl(oA@lb! zfmoX5t@fj+$EXQ)4N}dLMU94GGM7~>RxjZt6#U)xf!30~z&}*5g7;0fywllQ<7~uS zD~-2tg)HjII8lWtxg3$y=AR|RdUuEQ4?5pc`()6`7334jA%@O3o)H`v$YsXtvX9|r z83!a=vP+AY&9kecrGJZuOKol+7MJH&yvouNf;JZ%E7rf=}D!{XRUZf_7P;#+`~P^+RH5H(TJOF#O&TSs3I&t%szN#wvJ zETV0Q(*Vo@Ha3>v4Dd!zQgc&r^BMY7GU|FZp>_6KnY^?1Nm>x9t0NG|?oKy(fI6H5 zf}oIdT3!?JRj-CMZ9h_q7KY!;-*pT5a$HRsunn}}Z(@vkj3@*SY8^HR?sV&`S)rTl z5+eCgJbN19@LiW6?k)n7g9Pw>4P{+uH(C^C;%ij9(ytF}#J%$(ez z49YkW;9zVd76gDnAaVfCEz-ki?WM@f%lp`bs;aFVgDj{>I6JX{oRRCzTD22unnTU@ zSk~`Lw-RiC5N@E{H?chY(S}k-q5lA8nIf&l#-TebDQ>OvZ;^{EfB*qF7#tom(?43t zZEEQ02^JbAr10Vdb;6*>k4 z=Z=MQ&j*f_$#1Qs*P*&#(L;Q%E9HE*vykU0&+xZZ!2_t`t6yJ6BHwKBt+bBD1$AbT zTlkcP93PZ*JmZ1EHLdXm!s^w9?ei>lvnYn)ABWt#a#tq+fOx>i1EA}712<8Q-cJn7 zB#~{9DtVH)68S{+CAy8vo>w`~UMnD9wXUAc3`%2H+vRy+kb@;i4V?Ae&JX8P#jV^) zXcbIQ+O$NkoXzHi?T|-)m>gtr#U;g!#)td6lq)sF>ckPcZRhwvKYa8agLh7pM0eEg zeg`Vuc#luG`z@?mev>2Iysfr7shi0w5~&=Q+%hqMLY(B2k9O9rVgCSyGj!7|mlG;A z%z%ztRSfk88X`Mgqz7jFqM9}TM zh;NWHZem9~4i$2E=rhK7uPZMS$8f5%OxAIkE-n(?gm%#h08Od8JSbq<=(zjBy(8nE zv2kzk^3FszEpIK~lQW3Z2(CuYnCAlvlb#4-4mV=F?^m?BvGCL~FosL5T3@zJs2fQw z#7rCwm;lCOU@(Pnep8%RW(VNczxfkgZRz@%{wer>d7^3Bb^WZ%eKgi*?IVKF29)d} zv%4ihW77e>>!82UF0F2KtIKHY-~=*#r{uTt-4rn=W*G?z%aAg_1A=*~c6xozrK8+Q z4V}gE+1M}IXGw7*tL{cnyK?NCgBAk-43oz`o!|{V#`EEai@w9A>CpItN4bfwEp2 zBRsj!dft0jb$x4Cd6YJlJk1@{u_7?jWZ0+5W&V0nJj=b?E1~+j((gZ>CzM%t}>uMQJq1!x7}|!TE6{4PHT_S{AiKtQZs57lYahKq?y%a@|8|<180)h zD%r@|I~v@*)|%(TT9$(>c8zm%k}R=9KHstkzHF%A?Pc4Q86>81YnAZ-0Ee|5M_JXA zN7HqELh1=4k~W6SOC_mnCjS60J#&B?BLlBfR~@Xy*5;7$&-^7mD!h|VjbcqoIb#q{ zGe%`#@q#36#4haaBY~1Y>suN}iJw)OV}{^a$7qwvS~x>VY-9i;0$2iy$^$XZ2LK%6 zxjStZ^>r1s)TZ-RIKdCb8=BPl!$$1lkM2EfJz zSWR88beni))GYqhrOhp(AW)XfQI&&`FkRP?yk~NSB%Vcby2aL~qWF4C7_IK&w$sSe zBlDAVmkT7ZsB;%1=E4jTFh^c_&rMt(Cg@FQ(6ODR0I=Q-Sh;b^=CU zpYG!Tj-*wsAIa9Qe$8;dXS=qy7aum)Xb;G!7B*!L<(@p_JU>H&T9>x^hMA=Q0A*@c zGs7fyjXX(pZRM@9?%kM10aXN&Fx>9vI24IjIh{IfHrvBDw+a5WkmX}0X>C}Z82I|Vbcx!oL$d3eiU z9Jw6^2Yigy_lP`GYva2~)@5xs%er}^vurJZEd~@gBP^mp#yP>pNacLSOL&AckkFimM%?%IC>NNYAbsrBk<6c7uf!+=BrY^4HFSh{WYpR4jPg8-^ zR$h;ze`=(@0na`2p@DP}^UCs@=va*M{_%?>sm5>r0FIt@Qr@G8vI# zY2&rGm4;XkyYn{Tf=1Fw6ki*n?9pBb)?%>F1Mc6y%V4e$9)NM4nPNG~pgNsJ=Z)?> zCE**pJvTzLni&vU-Cm8CaxIG?0!ZAp^R?NI?h1UMk^rY@dR^9^t~R%AK93_blS+s# z5@ohTlP+dulWTAjkCQC8J+s32w#|G`ZKuk%R-SH`7m)7KA2R960UE4)iC6o_0{{$F zdp!?P(DZ#G7$&oZ#^%<0n|5`UDQ;1S4AQF&zbnReu;hgXv*jz8_8kV!!sA5LBhf6b zwM#qMB%0kBNJvPOzQhr+5)2hyTY{$@jbq$>yGZcHv8!qp<4v=)yNzyQkrA109THTK zrz)WEzGo*Sf-{<50?%=#=rTgl+x>>}&&sjAws4Z!Tm>vHGBBrZ)gLwsY*ES0SBFW1 z#k!}|1upH-2aec7^0;O=aAh(Q9OM%CA9P}4*^vB>7ga;4L8(W4*Pd)G97Z_j z8;;S1%7K}XF&JezAdcCqdiQ{Iy*}qlk{i_3zSdq@5mbE35Qz$g#_TkOz(O}|UY*Xq zlcF}AJKW11-Mz|2C%O*k&2PRn3dlhDe8O964Dc7BG8Y%yjdQ-pf%*WeWaKAWz0~tI()@U zqAO{kj#JeaGP>k}fO7R`_qKt3>z|S=whO~V==wnicRE9gH zm8`FHt7VD!7BOW0{;Lal{qC} zX(VSDQoI^B*fl7};fO|?aGI8(sa-X_-`G+qEuDX|UPO7NK3t5UNo|9X&>Ua^ReXB( zqe;_dwx3VcwT5XYxQgBnJ$~|pc)-D9kZ`S$yCqK2D_g{o&8&Pb)V0Y{?Ic@)V+o2) zw(^NS{?p4jLm^TalA+N-!kXb=(&W3*CYIgfpHR29f_N=pee-519b{=U^YNSo0Oxm1 zB~({Y6>q#VapAdR`&3sJ+HR=J3dq1Tn<8-13<65>b`TCh7(EU>v%;~BN=VwdBNN;7blAH9}YpK>s}vY<;4w*P{%Z;Qzs#vgP6d{f1D^Ka#uJx z$**VlX%)wUejWHPP_>orq5BJ5%OnfBYZW1v7|7hnRI{-kb=Y9-#dG665!2kz@f>Y^ zug5j6=d(Hhc*-N_B@*L4~g~`uxpKU;^NXvi4`>qxoy5*F=33k zj!bjAAmA<+C!FHF*WwN3)xFj3pw?{Hdb1;5UT;Q<($eBd86${&@wDwY0}O$NdBu5W z#eEx6_<7<9=Z5L8G~HTeF(SLk6`bJ&d$Pf|FlCScz!C;Jb6ze6NmM;XpCd*ei#2Hc zSEaDjuD3th9&>g!tcsv310tpYk(IN!44=E4=DGb0HKf+9wVAEw7ZAxjW#bNd?_c8q zfH-V|54Cm|mMv=yot@I#*?(;65L{c_HlXy=O3G3EK9CT+Vx1gHW%+e2p#+zi!yZ(G&; zZQ=>MNpU8LH`~7C5JVkO6XtA38t?g7mE5Os2d{dVgqdGMwQUE%`lDLjNpU2PzRew( z14a-hp4s_E6^dYx0`ZOksr(kwcvnom)V9xOw$f`olc`yzL*>UjcJ0945&r;)HWxS? z=AhLq8^f2E7WXq*TiV|iTZrcthXQ8 zO?1{*5Xb$X%`Axdj^5$2>ZP%cgYJ{jNgXLKbr>Mf7VAw`v-1ip;pE>rVZ4Gk>9-#@ z9WmI{J{Qz2<+8iCxR&}AnnjQ#GA`SfUz;on@8r;0r_HP;n4-2?6Vq^feMSm7?Jacc`=#A)8EBvo$PQSB z48*E}nPHF*BrD?;TTs$t@h+t#kjV@yr`(ua#|c@~^ou`mjXZ-J_`+@{ZBH_eGETfxVW(}2+JkRGAX!>Al#`OWS(|~ zI63Lm@kk4P9?*36@bfOKaU)+zaPr%;e9U41m1oL?QM9vfB$glyFIw2rZY}iPKX#mx zx7mmmM)E%@d!`^Ey3Pu+w<(6kVv-iM=HzrVgZT?RogiTyLlZs zBN(o$M%LHH8b$N!6WhZaZ|D8G1>FgDK+U`;BrA}h5CHG;;-$x^BaLl3ZDUDoL16Q? z$so3JgU>rvTVT#Gp@+|aNZspO9vJbQuX!YLO(~heOa-|xrYHA&Cb;s3-fIx9wB`rlIyYZkFyl=`H-rhDOUKO7h5f-O+M+0|O%!iE((hc9+KL*X%Z{ z3rh@&8s#k=QB1o?{{B!B2g(!y>sP1N=e@j+!QR*wZXW00j%sWmM+?h9j}2_IS%J8W$1mKqZHANEGf~N6I(=@$+$3EPP32 zdE!ksP%ku-TFR^fknorl$PpE9MFqXi0L2AF-tn)8u8qd1no8DQNb!~g5thVVspKMx7X+$g)K2UleGc3fG=Bn$u z=AACFs7Zd)GRJBojUO$BJCTmn!NvkM@Nx?U0P|YD2Gt?ed_{S0E}>^*s7)*}*|ojP zTfDape8Ui9O6o&O9I60}=2*T9-2?}^$P1QA-t={(j?Vu+6GQ}ibQ+ac&QIcdN z@s=QO0D;=Iv=0JJKZlymQ zC+`Atl?;5mu_TDcPHR4Emb{KPSnzGtlyTU}U}U+HB#_Oi%C^wl6S@-Ys<`=|0DbKI zxyC`NIwykfyhE+rSwGoVQiY}$a^KyS@g>VvyejoHuT3k-Y58tri*<>#yvjz zYs;HZbX#L`(p$$GakfMRhTF7&I+jv#o@w*=j`LIS{fk3qBzGFMr10H&EMq&6g&Vpu zMo7;flg}6wN0?l}C5@_S`cmp2XPSGdqPCwgs@=e2W-v%u_`qG{HLja(-c%P0G%;*L=O}QQ0JDRS zQZmGU4l5GLNHeF4$pOHFeLHBjQ27A&UXVGgBp~;>!LowzImj(_^?R;bWPQL-@gsgD{(h-#ae3hFV%kZH*|aeb z=_kz1<}xDW1M?I~4stsYka@2x_?fM=*LICG8gcTbK47<5FyvtTpztymrZ@)&HB|cz z$5ZP60Qe@Iy!wBJJVU4bg;zzsRGV<(NmUt@4&(Qm1dccZZFw*4ub{(oe73g8$?IRtk->)3y1x3%zBz->PA>r%W`)U3|4DK1256HC1UYy_vusgejM zJdBP!XZEGM*{w@!s!8@csC5Yh6M2mB+@{Z-637_v#0-!L!RcN_898GcI%Nw&$1UI{ zx6yRFd;MZ*F0{MbXSTO%CXCMsNWXm%$pA_ZmIm$$u_LJ!E}Qnh2+yY6EOr;x@yf8U zlWdT;?0HA&kB8>JeCN^szyqUzd1XB zW7JmnhV=gcwrYBJhwn7^AKS89!)-hljRME#W69n=5`E7ZNU| zYTjr3Bvak2c7}NdMXkhX<%?tT?PBYLoPe!>bIoLU!%dF+Rnvdr6^{OUxoo1g7Kp8N zb7gI?hm0b*4Yky`An*>{U{^=ui%E2E5Zzx#GbWZ|!X_wE1+~s}VMbVJG@y!1k+lJl45o*x5TlXH2Qu<0l~2X_cvi;%ysJo5QwJ zTuElSGEB>BJeIDJ+l(s{zwZzmlBaOYgk<8dd^N2V$C74^8~yoT=1;%j?3{JT~8ZlnfJvc)0E zVA$KUaFnRVI*>+iF)rt}y;icfXS$BhGfh3jyOK6+Z7QRWEMZ3MeeCACS-fj);w?i` z-DM}*8q`{wC}k@ce7RW}Ixxdyo&jd#Jl836XttV^GTTRQr`|_(42Oj_>GC(o=)>j* z8+MXay6{P*5wiJ}uk3B@tT%nC+SY4mA>Gh}wU_7g$mgB`t6l_+1&y?`SZVrv zb~3CoT(0#LFwO@!*HNg;aXyn{_Bk#t zqqx~LXs2?(B4o>x^C`=0QX4odN3~6?QGl9d$B8fDjvHC7wMn-LkzBG(Aq9gShb4lp z>=H-HIOuECblDfg`pMUPMl|~v?CuuY_DCXMv|N^qG6-Re3?498pDb@AoZ`7p5B&PY zf+o!RnHLh{BoRT((so-j>xIvmlj zh7??RR__j^^L?UaFC=aX5hUYr9Pxmmj~rlR8k)pfeea5Iul1XItEn9fZv#dP z0?@|Ho=i7Kl#oX3P7+bH01ipW9qO1jp{1vIu01nP)~_a;&TUX2f>@>UR^2y`HPnze zcUAdDFrb#|Gk}`C)uqfzl7C~`t+13u71K(K2GbVQ4yBo-$sq5>NH_zgbbIC_CU*gwfH1>2ZaNR|VzfLpX>e};0DjTU95F4tYi%NbqsY-Rubhv#I>x^+ z;0y!lMXW9LMjhf_>F;8`bk_?Rjv*O^UDFIeiFXWPfGl?c4^lCT>2=Q;H;uG?UKW-M zf3#X#n53S~4BDUL3*>5Ahv%X2E^P1`xK5V1S2;@e) z94li30Ofs+VD7t3cHS1cYl1Z&vq@_VKP|vg(W|Uv24^FFOJjlwG`G}DcZ;K4J6D=J zz-3)DvzV`8AL&k0F63wAQsX|r;AaM-@NJNWB#Pqd7%rOB5~9tV-Lg!(BvMB8;lh?5 zGYyh|EUDC<7D8A+R~(iF`vXt7^@4eSd8< zaZ1unAzOQU>zQO=+tB>KG-qks^AgR9r{NtrZFJl1K}VdH*9$GUl20+&j^eS|vP3yp8W*BZjf_V+3pmQcKsqva%ybH^apK72ygnlzV|?L5tKBSR!E-!;k=k1<&m2Bd1@hY5#Vl?@#q&?hRgd=CWglC*ub+mTXJN>wl<8g8B*BpeREl&^6F{t@8g_Eu*S`LB8`IF zMq6uTxZsvkgTNW<#aAlb4{}K?AsUT}+(U4%TwJPcDT#SzP#9#Wb={M~-ndYPv#c@Y>s4 zv0D}>AeP+*)3mr(1BN&(+kqL!uS(~2tt@zX zjgg1p=xpsTqPM(~>6OVlA3rRa$bP?j8$mqvY*v?vuHm?vF>!Ycm-8{2Yk2`v2mqfm za{{Cu2mt3Fl{Zqc{@u7+?d@xA2qBR`E`(#{Zg7f8Bmv6|`c{1D4~VX2TUdX8X$*=X zjBGCu!+gZ#4Y?y8!>2W%r0zp=Vf~PhwEqC{^3e&QKm#lM*#U|B*aY+H0L55+G4)$Z zh4SZzjm;$P7C8!#LiFPb#NlvBJ$S0{TSIX_l&@=Yt&%Y8{#t{^dlS^~d)IBHYwdO6 z+jW{~WL0w+dt$J?)LYeoocGHhDhbX3;}|p$ia!i2?myu+NiJfK?G|UtF-XsGB9=!e ztHCHfM?2V(Fb)neUs8CJQ`9g20B4Bp?ljwtHu^hJG$7q=c^ybq#^LiTuQ*@{1EqZD z@cPi(_`l4sYp6ACN;X@MIo3#+5MD`4fPkp4v?wIxmOb%bP5elTJyYQ1I+SkAEnPt?IG%R;dHAP=6HAQMdEEf=SOQxTg^Jw)*VVQb%?y+ zCD{J}x{%}#m~9*!uHa7<=YAQwxVO;X=mdNS$zUgb4@@&fEjs9&5<_C92%&*E&2}#q!)+$1t^NCXC4) zy1vkI*&UM`hg<-9n(o1W4f>hZmZsL7t2UP$(pua?vs^&aDl)CY`P}c35a0yJ!BTO+ zJmQ@{iKNr5FBab1Nu%r01(3)KT*k>NN#&D}O9u+d&Bokdb*hV_+UgLs^}MjO7W3@6 zWIk$JMpWWJNygX4G0+o?XBEt8Gh1o#JdriTkx1(t(X*;bQBF*%TZO^NQP(5W71e9% zVx)AI`gP`%v5WAnVWnUy9cBv8A8v0s>}MP(|uA2B)NjX>PhyftItoi0lot9>s~x4M{59;ptX z-(`Xq`B!*B=4GYG8-T_FkOpg$lUvd6JUMA@vTGN2(@7%SNU_E|hIds|3Nf{QMI}Mw z9_FuT{w})k&x$PdoflHLTZnDLLo6S56(c4TSpZf|t&A|i#%fq@be|RK*H;%-I+dNw zx2j<__V(=#sFEpSh8!sKer#_C104@qU^7_ovRdnUlUi%m+TzV@{{U!`-#%h_NYb$} z70FoDR5K|c7U!*1)I2EP+19#*dW@(0O&I;5ZudRx`;%ll5waL%uvtbp?af@VpTqEK zw$hzDSZhg&+Cy<|G-)lz06NPV`4}DhPSynRo}f_&fHe8^i>WU)Z8lw^-s0WV1=+Y^%WhXfq+~HX*7tHKbQi z$K=I5r!OkcD_}IdEQ(u&WCOii@qfj8e-PN~R<~0TrP4o}Je z)Icl0I{WmfG;3KNSZ=Qr+$4;`C16%NfC%167+@FW85tmv$9kopBY)vWnW$Ux;w^V0r+f$ z3LQaQ08VlZbGmPc=J4CcePuQGnQv(8Zc^vVHqy39W{i$_0Wf)Cf(}O*{ynjS!=5_4 z(zLSDN2SFLqwR6B;_@Z=q}_lDoRYl{W1eblb_6~j@%^2ip(Vt6Nt!meK6ElW63et^ zKsegK=V?{Q;DQZ9t6r|9Zz9|7xUuBNBkfzL)Mo>^IA+{fXQ>9c`-3&JEY@-xTU)8z zFpcuk?dm`yE6;9+@T&_9i5$%Ob40S-6B5Mb<9(rqJC$BZ;DApgbgJd*NhF%g_u4#g ztjisoYNmGkYNYO$Dry>s_KEEkcE4^k^uFILUAiab5Srt$l3t zjY!QU%Uw+ZTU^4gx6C@v}?KvV(C0LsLxkVaT%7_5Ce!tJi=eq5H<%Vl8gb34PZs@p7p7gPL4C3wa% zdt{m}n7Y`nr(BVu+1lJsc(L2UBUmJPt>n7IsFFt~%eC?I9F71u&TFBAOS;v(JZ`P$ zvyMq_wigT}`BlD4g~!fUDmMbS8@m!Kn$+y(c&zn{JE;C?7S1yi%GVAXB$kWBA zjzBr@T?Uup87wqd^ti3o&TEU3hf$QbnvTTC&a84+68OLzZs$B=Sj}tS2gl<%1T3vR zwZ*!udU8sobh**Ka0Y&3DN=uT*~db-t$jY*OYv`kbU2>M`Z(}+|g}! zEI?HSNF?nbV|MD`tUOzJ;Vm*aZJIc*?d}W$?&Xz5${nR$m4@h?CZ&5z1IIC4Q%1cK-=K{x~o&QWD4A=X|VTb~8oX-w8Ji&*xEVUzch z9n48kNAAeuEyw!6NaC#D=@z!vPv&m7v$u_!_+8J4Qez}>$GJe=B9Wh*(O&F!q08=da0 zz>(P`95jrie(bLVXDgltD0}EiE81UbS}NULT_pCl`twgLX6p52Y2%E58Y7+9Tm`{i zIP|RRT~-ZOM7NIO+QiMgPi9!1(5!o-+aV(ubF}Rl=LC*v^WJFw5Y@EX2_}-^;U8$c zYxtv(FcJ{rFh)bVsofbrF*(L@SvN69VD^^n1UE6o1cpey(CrQ+-G&5l7yy7k=Z{`0 zkeOpp@V1`@wJh3CmMt!(FK2Hx*4DP&F3`=v3PAygV~hp*RM1S?Pl~Lr7G#F{bn@qt z^ZiLHm0-kU4B0qtfED&NhjXm|0A|=+8wjMjw}>Ig!+DHwB4Su>*xfUXPsugk0Elf#)!_c2FV^iofDPm;P zZT#y8mfW@Ry2pjRWFDcNR90-9-#c8pW*KdC}kk zxKW>#fII&H*Z}ZxQrBZh+{n?jSaeB>YSKrg+}%X)8Y(liqEOEfCzacQwC*{>52%9E z$CkQpg0!2axUsisuiD!7z}b0{#*sV78_&q(iAEG>n7QkUtD#=$qS8n5tVB_V;BRy)rhO~9ob(rIlnCF)I1-jEIv(& z$ni%ghC}v<1Z$Sr!BC}&xFC*r+Hsop4Ld-Dcq97`-UwuC*n->MT8znYw{v-dGB{Sj z&m%p0abG)X)~_AfY8qYgT}-HkG#&=OE~T9 zBv=|Cv#SS z8GiT3G8p8p;01a2#cPOl4IbG40Hf*gU0WSS(%viKi4;h1mlh1+SmcZRI)l6f2bQ-QO~R_XGpNXH|P034BCW8+lPWbki>{>!dkNvde@ zygMb0WU{$rh$~8%8{rIg0k@&#uTx$Y9^TOP6koGwcZPl)+UwTRLfWJ@tk$!&%DMjl zNxcdg!$d&9L7lsZ%Mg0@caK^dOM95~$)UB?A&OHwvTa+Nc>z?6mN*Qsh9iPpvh*Mt zqiw0pr|HsOTtm%WUKjux?>?6z%fZG5C6c}p9JvaB6TG3Rk3 zu1NagvTZFF!p`_JW`a#t!?4geiEC$jMei0yn64xwvrbq%Jm9n^6N?BaH7 zc#<47s!R7^*r%Liw)Y%h*CpaV3&EbqpZ5`xy`btXw0B5>QjSGwh4oZLw%3Vn+ z+d(QY2*pRX(_ir9H895$^$Urn zXPGW7nQdb-DP$0`RJo^3Bt znrnDP0l{NwuRjwY}VOT*)MN7REJ_c&B3_V4#LV2XY-o-UuDKR6iB9 ztw~|Cl6R7AO8N*crJHiRWGG;ai~v>`+^m1Ska-+vPknEy{64gfJyC8hA!}s0Yqn%i ziz6gbM#=KJrtFm}2wlUHD=)>c=#h9fRkgU(W7hOL#rqAE$92Ei0+*ITFjhUXWw2c2 z5=iuj{8tWJ8TMM0yh(1+wZyTqmV#H`7)Qe3D9#(M4myAjQ<|-*qicR4Lk+!!jFQ9^ zVQD^9V9gr>Sp1ohMiiU{Y}G9r_tM#1tZ}p!;iU3+0IaNc6gx;I&O2a$bI?_z1-*oy z+IL!Q)y{^O!LZr#-I>Yq!()u7eh()Z`cM*H_?AVoTYIKyukEBbAckvU_fMOHwWiE! zGmpBxPZ+1EYFF1jDEmh&q;@OP#>9gN>|lp13??AmXlE*xTt^w6e`=w~!h9 zwv!74X5A2A?I-U@oQB|y+~kld)~9IKBQ%P5cR(Xb5BG<*i%8kO1z>Zfofvpi*a9+$64dExjkwEZsX zOv`AI7(kU62@$zF*OlRqUY_|n&9YhD8d3BY* z0i#%>3)5~n>4jX3oy(kx&i=-RE2W8^-sUkdnO-S3C(HrZTOW7=r03t(uIMaJb}qCw zwX-m@M$eYmuB{x3;5OFi#DyGm8;BLwYfGkG=yw;BS>N1Rd5;hTtZJ^wn1d?h4=sy) zypk|0o7F8FS-KA-gj&NY{M!UK;8S|^DtZuHxkEbkPMvPl|9 zmhaHYHw~bO@O$9%oQlbn%b}^IYZ}C9d3diJc5%xbJFZH}8nBKx+Cc{ZDy}hrr1c#t zPY%zg_}1{jtu5l+UANiXx&!C4H^|M`axd_Vj0Fchsk)AXdEt#p-c3tLvuB#eHnPud zp|9=IMsJx1%ejjJe8N~{Wb!KtYrQ_&8-=s`QDsOYM4k6Y2to?85KomGV1-aVyo@V$ zDkoQ_c$Z7?&X;-idyP{1_B%v`n~QLZ50@&bat1++q>Y>&2wIO#p3hnE)xy8Q1SQhQ=8s5DP!FscV*X*rFw0n5#2qo&dnX zVNfQG0_qph5Vk1I3{4C(JQmjKB?0m|Gb)_nhy(b&YHidyokhl_ra=2_d_gv+YpO(I zxbm$Y)of)klC811W__Rz*e8L&u2;tjx^9yl%B_vteUjeZIU@f6MJPa74338k=j9ul zZUN&atKC46&$?-qEn`G^c5T}$2HLxO?%?na4-{+qbb6#Zgt0Qtu`RsP&Zj0LxF}pV z13h*iJ5C34PAbfO4820jP<=Mp?k(d>sL4yIB|ui-0$6jNSScTOupCtSUcUCX5$KGm z9gLT4D&3@Pepdw#_>EdxYtX7ypdiq~XlHg1#4^CJWTy~{H*fW29;a0V!HLN&Y-tZEvzi+MDc3pmo{ z3j`iOD6b=7B3up~@LPkBs7-6#d`r5Y!ZH5<#I;_|-a%-VmeWmau*9jj5UMt949sxZ zVpz9q*Ey^|*v+QXG;l+vpo|vgML}vn``M=1A!#+;ZiWT z0hF&8&vI0Z@+x}VFVMf@L|tn^i(HibidbyZPJ>Q{B#<#;Ow%SX+eX&;i5bTS0=X?e zU0r*`Ot6dTp5aF@fJ-PSUB+9b5Mm`1^alm;*tpOKp*sZhtINhzChvD?8lyefjqLveTK zTwFK=vt%8+3zPD%-N4OpmzVzlY1eILjyBv&-8s0*7-jFb2M)Lgp7}nNKB1-C>KA&$ zC6(h|M;qM3GQ}U46NAdW1_JC2^Dprau6geh&eqpbNip*N!DwJsh~UiX6k{Cn4)f{2 z1Y)i+R?xRQyPsoz!dJR)#IJ=~y^Z>_URe22LnxEWl1pYTJdEUI1`KdI=V{Xp z8a>U-W>2?S-dXA)AiIG9jiMy8BjvJ;06Pu{%Qkx&^l#WpMgIVV8{pN|=bfj>*YiVg zOCK<-OuP($K49M|QN~O9SD60ZSK6+HsYUkBv$Q(3`v_x;J5>Z6oDIdh3=_dzyyROzx9GpS}wz z1dgle^JMhJdZ&+#rKY{CSge;?I?Xz@m6@DR6RFz!*p<%hyNF^!>Nkt0U0gyhq_w+K8qU`x*4&ISa_53q3OF2vVb2xSUs^^)mUmZC#;md* zG#I3XNRX&1RP8D{@;M(sYmxB;7hWXrt(}|QMzccl1cE5e!oMith{)Z^9PQ(#YNGB) znoafeT3ygt?bZ!JqMlhJhkWt2_fOqzU|HN1xJ)Q*C#ct69}T0~ZtR=;7A>dNLdjV^&`WX9$^WNzG5N#tO2kU*}uX?GWv zn!(i#h1K=+-e{gevMU~3;Fb%8X5oQ6H+m%`nC)|$(bmIC{q(}&tx|CsTtz5JBVvGW z+QTE9bvua22a4`3k(UF*;r{>>e{8qdpU%08TYGOMq>)i#17kA}xQ^%Ve8&Le6@2)~rBC=sFH+sE zC5AiM1af&UTjq_oaCl`-CA3}Qu>B&i!82tgmh zco=VL!IMHEBa%rYytwlW3j=QXTWK6*XXQCiy>K^j2%&0EDX9hBzPqVj%VBQPGQ$(x z3>f1hAdRcW6&aWA{Ks==1o01u{B>!i>le<}raP;3mFKl+cKH&q`K1Fn+ByIjzl)(kDBRk<-4kx5l% z$^QU!a*44P|6D+i2+m4@Mf_{Iy2ag2Zu6)6rTt-a{*mx=WK zN9`JV-de#G+9kB1*2i;scyjBHF@j}r{1OHodDpnrY;?U*ZZ^hlE}m=ewnjwqKbiul zX2EU4V|$SOJJ&m=J-h3gZN=rB(dh8Vws8j$&2uDi$FPO$0uklzIVE~?R;>;^J!f$w z4RvF6KKnb1GB#uk0HuH|#E`f-DkAAsagxE|zqWZwWz%P}js+2_Nwzz1q>YWVZroh4 zVmb_NA!~2N@Xg}AW=GT37>$rfCzgC$s5g|pW#*Z6 zyj+WydwEL%8_Bhf6^`GScPzy}$wdgsII zr|WmI3*ja6GX$7OW{Psy*_HrgV4l2=IL{TmrOMMPrW_SudL2)s{Hqj!p6{#Ch{~5OcIM^b63IB;z@z+A~S3YN95K%D9Q6 zcZc_pLR$>j9|yT1plfOu<@g9)WS&9D|RW89df*hoSjV+U}ah#vMR3 zvEJM}d2Ym&Vgl~YHtpO1B=N}RoOE^Z1=}nP(8iMdk+8`l3%wIOZez&DLz=C{%yf3T ziPW??<&srqAvW)DvIZ=qU~mc(yYW18Sz4U7^4iS{85(O?yttVpQ8mObDvS;ZB}VVV zo-s}uIMQ_6i0%y65#26eP&Yo{a0p?X;0>g9AfB}CR^Hyxmg?PF3#&Z3$1YQDS7-$B zxm%o!_9M6yBVLC(bxS*aTHf4`J{yO`gsFy9JF*9GtQc@cK@0CvYnF0pleCsHK{whZ zGZ3+m%e6r(zX5(?4loYjJgd|RmUW(_bhJ1#>4Q0>nL z^OXUBF4#MAPT{wXdg8h5Qb-{27O85IAGBN*RcRsJwYQP?hFJgvji7SfdJ3(_9S+OD zc9$BL#!2mBv+(`py}#ND{geY{0<4}{3z7a z!Z$h}z}xLE;x>}uRFpfE!qQ2!vtt}>9l1I6=Dd7&#}(#|yf5)$d2h#?uk2q5TF8yM zD{J+RRVU8#l|w$@2PE#m$mav7uRWhu)I2rd!D(=@C7kk2HIi6k$&({;ZkFg<%PKg0Qow00^$mxfus%RAdeaH2VLaFaKZSPz{+$0YJNJCChy zX*w)xr(2^Q7L-V0Eo6Gg-XXbVx09*awqpBxtQ88$v}R2a}$zxd(zt893n8 zEm>r=R-4KBtyVSUWJBf^+DABUfclN6tx2R`*xc*$Tka60%Ceck2_Ed7(1-kpmb~%#0D4TO{&u z91+GDN3C14@Pg`gN^hFtXNEZv*)8GoR!yL|jY9&vMsm&Dc1Wb~d5>1`?y07Ht0tsX zt#08g&u;Msb-+9of0++)yFB9+S0u`_)h4~s?ct8quFmjeg@Y*qFdP|i^O6QmLEsL1 zR+gD{eWtC#Ez%1+=i78o@4nO=WT0jk7-d}aY^XWnx%sYI3qsqKTjg1!LU$-V@;Mzy z!QhN@Tbf>xYYcYR5wl&}>XACjZc{f9Mv7QS6KNw3)5SZWtqZNQG*qo3^C<1FyZR17d|{JF;f^v-iz z_ESly>6(#>N%Z&xYa2>n&H!L=4o=o3a9h4eCy`b4Z--4}_Ik8>)ve?g5h~4$Nx8}{ z=$#4w09dLz;~3;-x3ohZ-a0^w&_9pqvrOyd|IF79^c9<(`VJ8Dm@ z=r+C^(61x=R5uqoY>;_`v6K5i5=t=7Ay_a6JvR2uasL4Dhuul7-f5aE!>%Tt@XrO= zkL>qR1XAn_EZ;sD?P5t7T=EDt>e}Y7XYlnc*|ht;Lcw5!-rT(L-W!=Pz(W`T0>ULH z<|MZr@m@m@h1y6Rt$fzF^4t*3voE0E)d6(GxK`xUJqf$4r-yjw$gQpBa+5FV$?>_M;z0Y`#TT|Ned|( zm<7O7mFJ-(R-cg`ppo=BnOV{{X^66gKS) zQF(}bsbpQBHV6cTKX`xvVa8M%1YXoU8XI4pC2LuNqg}ys=7m;GhD8N)ki=(b>$re> zQg~|m<3iW$FC?*zSw3rDwPX)1K*VmD1fQ6W#2j=LH;877P_WbQCMk6+cIyQ9jR)D} zjK%;^bDhUw2yipFtxhcsj&N0g&H`cY_bn8JzFE^3z7iI&suUK!EbA49n_JVQjG%$ zg2tF{l1k3d##`?kj{SvCrQUt3$&%OYml9jSEO#T#-TQ)eJZzw4cV{GkPS)qvrHvg% zxooj8lT?>e`)u~!Y_d&ku0!A}umqO*b}-;$=3c;OD*HpZOW15|+{bl&^IEIOvL;vp zO1J=Xfq*&A2U@kMUw>)CX(0m5ytN1wo#J)Q7;fBgf(AWQoaYrkh_7_LZS>hL<&xku zafVn?9$R!)1=0u33Xzrs;9-wSo9HWDo`vxHU$bpa`LEUQEFq2?c~qFb(Hw}((z3^f z1iXN9*&A8&frD9E``P%4&+PmBwY0j6%#>UCO=&CdWp&u!F~LrNf)w@QxPK4ow;Df- zEvf=qe)MT0qE4z<4x`}rX>UonYz?K-~@-x!^ z0E+b8Chb|Q%!_wCk~~mL`{uh`ZCJ{Kw+hNsvgDQr1E8ksmv@kAt$Ar1T}Z1OODF)! ziO{9j}3*`>ZHs|I%3>v$;l8%4F zFcqf2-R&3$<=Ct9I<5frJ#r0C{g)n#rpGQWt}Lcu10ZG|QwC-$+ji1; zVT^|Zionu*O&yk#1-;Y?*Ah<7^6e~T2RYhv!R!aQ?~2s%G|B*)!uDw_?ygdJt<0Wd z&AAC|;C!So3Pu6I&o~(!?oqwsiR0E))qI^o6@;URp>~ckTyB$S?~{y!&N@<9YIjiC z>9;V3hUZD$YjJyQ@<;ZF-dM>J?dX7oB0Nh&u9c&k&$yl#?=9nw{WA9PM+}8Tj=*t*0gmhwy8{QMEr+K=kMTXt^|y$x zCcK%ZzO{CZF%XE}v=^-Zg~FB2PA0d1M{&GK}LPS(gKW zk<-6pq+&?~r}2chI z;OC6v81G#jj)V5eBv+D4eNyNKjoyDV%~u#3KyD8Qf(g&korHAv7hX?V5{?% zx7tf2nGBdci?9c7N6Ff{s3E@5J{|aKMz)$&w6a!}zR)67jI%|w5rXVhbI_lZ`sTQO zBH7bQjU!mn7_H64v(F)86YR^Jju;2^-~v4>+PpR4nY>HkEe_vMveY5I{>Pj}H0q^i zXkd~^ly%A6tG99GS%ASc%Zj#xfP7f-{q>K-D?J7~IqxBp!&+tKyRxFpv6YlNvfzLM zx#Ov2L&h?EeYJaS8{#sS^DK1FDP)0EACeUiuAV@@YL}n88*Ir? z8-vs?dRL1=Db3vUwdJ%)ynW*feRsuP9J-%P(>yemBsqFT6Q#r0J1dX(sC86Ei#)PGkl#7{fX`gUcKQI0L>sJ#<@t z3PpD%=H%MBQiD72*)ivg9iyS{E3^1R`$1iJO|LvP9<0!5x}~|W(ltABv5OXwx)zXO zVdR!4=FaSW?mb^;E>+5LyI)hO*7OC_EH*;7kjZZ|&30~Oj%B)==43Fcm1P(&mpC~K zkz*l@uB5THw3ZvDxCUuXLWtBh6dZ!ba0eqG1N5f+OZcBB+nZ00CGo(pnrN-H ziKLPlZeUj20Er6o9_be#90l9BsIH>N!kRqa4)pu0$nVCbtXaz@pEBKfV!)(;i5(en z?%19kyiV!3Ny59V~1{^~o=w@x=0fs1=H z{LIb4jYBt34l`RX%edVN> zjHnn!-U!O!azV~2-ixja+j}@|wA)+8x;{i!(A;A2iW9Y%G5zNyM)e8+L!I0T$=AF| zaiyD!sab67btx6Cu2}h^`H{dyK+E#1QLzLQh70RjF2o&vkp+&grM9hkb8)LIHgkQJ z=FL9GJhLzfxJl-2k%PWvB}gPN#yPCN0bEOYE#wJ1U1+~%H!lLtk~XTa1qEIrKruJW zMsQUQ0VPdw*B&9%pTqVxaok>cdVS2P40B8)wm?+n!eeSkK*JtS-OqZ~(>!VC>P@NN zO=o>2(<01RHq{8s-duS3krzKQr~rn*;L#|wGgD2onj1YrJHu-f)~^hv2fBDyF0F(_ zbtTG@r+(}JICDHZcq7Aez_>j!>-4jQ!KN=bpm=V!6#TRCKe9 zUEN(YGQ9H7BiW_H$G2-FidnZP+9L>xx_&T}3^70;o` z=AGf~FHhFBDXedG53xgT^W4PEXe5-$6fd<#TnsjO100cnO&tceGVMg39@UV?HL_mV z%GUQ%D=fiBm{$O>DC%~G<2c~e&3Pk>Nr-)-KQB-UQWB3Gj8M!K$Qc_GA--%Ajt5#@ zKTT*fDeoq=v$T?Ai^+#9T2jm$unamKj&gSADh6^Y`&e3PR~He-aFSm&y|YCWh=ff8 z;IQ8OM=Cd#Gq_}AdeAP1J}hIk)o$UQ-EI8X^DK7FnIk_d5E;1}unsa^)Qd}zP*GkCo&VNja;Yj1C-{f1{#0#D|`<Mw$O{y<^hOq{8s0OJYR5pFXY|{7wympjldwc zl^H{{E=l>qlZ6GDh#AF9yP@t?O$yF!GS6?@tyXCY+Xwm4jDIJ}t%9J+xg@D4JY&5Z z3*vQXZoI~OnGjtxQL4t!xN@x)2->+^zaaGkn&>=Pb8mU#Hn+34c=VX9{L2PO3hY;0 z@DI(kq~{sIImR)X=XL8TG`(i&hnq0Hky=D)KY0rfI1PiGU>u%$Q5`_u_=)0%@piQw zk!kH`3~~8oC6%8Al|wl>11zi2RY%G?n#*qhiYA6DSR|S665c5!o(<*y0D1!)9-kl^a7Q45J65K*;!$gHXtuY)MzOa=hD48Q z+%#aZW4U?;C3c=!6ce1)a@bd8#nr8JS!T1f(&1ZHMzoyDyH4U(!bG@Fnoo4W^{p%6O`hYSWX1#^~OEm3oE_UVg9cA`n5R#smy z;Q6Yf3K)UO133iu6{MQcv(oOPWW1B@5t~cp53+M^95KV^a8Q5%c>t5w6mpNLqoWvn zEqieJu+$o9{=;tpb=`3z0#ZohWEhQP+qJkS2Rs_of$a24ZAoLknhEUSHq+n*^G?N4 zvMs!^I9!vGOE(6wZzNqZPqHn#$8mKv#CA8)6`Dz4DS;Uvvp3!>Tc|t&J6p5U?zM?f zSlX?t>XC~{WVw|}tGfts`_5IB+j2*Z`$kJQY}&a-gcdgX5Y?=2rkhLD?5$%dYXpfu z+az}R)UM;ULAfwT17;37QK`M2ovmp)l(E}=mdfA>e$RQjSlM?eR1K9@R@(UfBCp8l zOt#VV-}p(|cno?SilfIb+AaS8d1~8{MCDKu^Mz*xh-GO3&H%1<+f*>fiuUp)y4?A5 z+q8HMCdc{Iwsw`z-XAte&svUKusRJ7OR>IN$r5W>ypnEFULPXv;r5fi1wP^&e1P@K z5HneKmoc4IE9IKvIVOwBnrF9V3SIFduGTp?H&gKJfB=JMW@QBJ$~XjM;O^;zS)Lx$?sab!Pb4~^(|*Z0xVG~c6%%>CagR_2 zE5ks{wG_ldd~Xd=F&qlGzLvR(h(ZO(d=X(1rDY#NgOxKdQ|xe!nTrh%Zpg% zMvX5aCO3BGSee*J<+2C>E*Blo8Lk7w*3in+Lbmr87fUN#vlhy20GGpHaxtB!uf2BA zY3-?MQL5a$Fx(dVJlEz(o@kQ+NLAg3WB`DEUcS|de`BY~;Ptj^&n2%WH!)kRZo2_V zHjw2>IAOF5@*g2{)D~8-g}lby<(-UJo)ufnBO6X}oPmMbe#f3AzVXk(Ego0Y zc3x@M(rLH0;DjiW%>hYQ<-(OdW&;9qk-)Ae_VCf}An|-NM$6^NDS}BrD$#FN84L&B zCyk)vk}+R9hl^OvPR?t@@qHs!xVhA0X|(%GhLT2Eq)~|@>E<2?D#s@WI3G6|#dek+ zGm`6A6US?9YbEm{!0-UFM{WkiQI zh%OXh76YCL=Ct%3HdB7fV|i~B-)MQ_yh#d`Y=C0}lfH6?UH(8FBRKQ1a}s!w^J-c{hld&r8gy? zmVKZdr-HkSHc!-6U-n$ujB5>@ymKv!11adz07=|ckKF-SWbyZX%}$JREhd)@ta2>V zLO#l(Vy$nvrC0g4Fx~SJg1KA)&*Kf&=&!F9W|G|Sp=LtUq#=gf_ZS>!pcpwgsC3`5 zYL>TAMRbd1lB)wMD#$4<**0@E_vkC_7_WUs7Y$-t2A6&h9pN}3aoNGA|Tif#Ngpu1obB%depYeKe4{gB-(j~MroSi zr7Wya16>&Lb<^axj^SrZ;cE=5Fuiu=6Msb`ATZ-;0GxEMJxkBF_=ZM; z-p<{e$gv?q_IQIa-20AkhU1gQI@Qk;c#g+WOFJ7#VV)SW8dwxF7H{>8#ASHe$9E*| z0CQQ&F6Bihsj=dljY{s>^!VOJxVv*a(Z<_hg@Z0&QW%4OW|^wOHm@ZdetP=;7jFouIb^s*D_s#lEy_ zn%<@3HMC~cu5TfZA}$g+L{a&rNe#RVH{DL46*%L)Tu@5g3AG!w)it|#{F$yMTPBb- z?4m<6C@vLnK~RbcfZ1ksIN;!IS=`t`ByDE|x6)rdx=$>yJRwQv{aJ1>2>@pdQzQ{w z_J@A=pJj(ogxrf2w~7?FiMPcFaU&v-Mz&Ql4XCHXv6vGS1($vZw0qxE(k(O^dy3y5_4LYFx+VRJMW&^ zEv{v0;6;RCwzeZz<+cXMI3$*A=Nwk{rQz!hJ6?v`^2YMnUr~+&s0klzV{RHfi;%3_ zkN~WBIUcp2XQyZpYZAt6ZZ8o`mkm9k+Z=&h@`Qu6`5A6U%16ClFwEP33C*f$@@sM! z?kufcgUxX$;n z3WLBK0LF4Fb5y_6Tg1@EZ3}sNUGm8hYle}59JePii5b*xDtSB%b4A{z4VQ=7#z=m~ zw~|2ZHpHG;w#rCGkQEFI6~lETxIJ@CcME7?SZLNhA=m8Q=I>Dk@g|l=o-l^k;E?T; z%H(96f$Fb*3hn-B(N&9O(e23i~)xP zoH7%fw_jX=M1`s`2A}?%dCA60V+7>w^rB5R7-NL1Tg@DjKb)mZZxe4g0373R=Yx#;^r=z^ zbscg@?&hL;e>}_u&aMyO2x7|2rw41cMh*xyb}camhi7@^ zt)11hn>WXHj|wZMRl?!R1>O!m^5dRyhiN)Cp0^OJlEt=cMz^ODrMnITl^l>jQ;rBN zo_bTUaYrwQ)9i4;S~h6Zc~N=LwqxD7I&C4la6K|A_LPvsntjxbGdAFXK2f!}8(R&P z>_{Mt4!Nbc(B^_W$Gna<^WD-P-zvKlU>|ot*lZ91&KJ!d3*x;Z;^R<&HlrL#V{dR| zF`F%e8-z+eVCcJkZbv8A2BS>V@mP~u`(^VpM`I+?OC%6NP)p_Jd&`@ttr?~sQf>!z#H@glvS)YRILH_~h6v46bO#n&_+=r7 z<0g{u?YElIZWGNa(Uc-4A2vzK72xsFyBhVMj5BJD@VeYu-ANXiYp7dXYBM74by;F@ zw1UHP3@I4kt~1bQ%zhW>F@M72lHw>uqFUL{GF&~^n;a5|fGorhm@^Z!e|gXm*1gN) zR)szP0PN$dEX#2m@ylZt{{SNcdGg;3dMOI(4gu-hX1ttqzk3s_3-P9K{{SD^HK)*Y zn-+%MFLet>d(bul-#UpUAmm^%&OjsP2j9+ruq`#0*QBxk07bmg8cVx*ZR7|p-CN2r z#|}Ud6$VUC?F~cC5J?LCiXxFK#Ii>`n~Sh-mBAbU25YMYFL1h%(Bok6#DL#f z-_3Dm>XC~_XoEpJI}OVt^Rc#)SN+^^#b@c!YEtUZ*|c%Y+Li2f$r>?{w=)G?lg~b! zS4@`I8cq3wQq?V$bpts2GnQEzD5M*SBw<;wO0ng3k6cuq9MdO<#4{WHM^7sZo?&UH zSynU)l_8fqi6uzJ0MwhU8Zxd!%^;%;_X76@c8OBtjc#z-(j;jE=Y*SEuT}C%E{FrO4NMw3^k$_2hPN zU1}FC3`nw>78Z8eN0zS_`nDjA;DN<*{y*@g)Sf7k{w+p3rnsJ2E-qz9o*125${7W6 z0T}8CJRZiTGHY;q75ojYNoC?2JBHM?W{xj7BEc|*bS?LOVhUg}T#R6=A4;chG&izb zTi-`#q|0k;@opQVmU&|=S92VLD{cyU1CB9U)|z&ab@2vUb_=50=@CgB2{p6K`izmN z1~dqx_wF1OB}WJ5=NZb=RXjM7Mz-Tnn}42DrZrDi16n_da1m!_JvCV3DVp**;JqrH-R)*!Y zoj&G7-((T4n%Y6;NeIq%?S6K$<7}>QYF$S}MV`ju)f(EKW#zEMuaf49wKxEJ1J8f1u z^-CKW{=*rCZDE9NhFKj;6?6BuD&!rb9FBv7)6e2$tjS9jkg{d zParotbKG@%_;TV~7AI0$4L0B?w?zET@cj9+jna8P)X*t9uP!>|TEPS`hn;uEQvIW zDzD7)M&BwvMm9DH+^xGf2a3wR^6d0kqq(()*79qEb!|I*?70B7x&i+HeE><%9XZUG z3HE(F{j$a@JyT9pOQR4k{ihQH5R)J3$c?t65LB>r?xfSKt*x!nX@kift-1R{G@we+ zyo~tFl?fe;a zC)yxe_~Z~JhmpT}EO=Q2y+bpU;d<~%6-ZfKYZ`_3lP1|6HcKp|1yX~F8HYT4tC9|P z)^447ojMzP=}x+tQLW$E zLve8>j2MnT(UIA?~6h#?m=%Qfhzk#@>l_tZU7*4HKPut99nIyy_|Pe zcYkR5XNuQrNFm``Cpg?xp2v25@y%B7oVK>Q zlG@8WmWgnK%tLG%aTfdm2*?4p;X`D5@y$s>&!)$xYL_F+Ygq(pMjeV?vr2({)#qmD znX*PX>^j!1{if-Lv_VO)76y5x)u}Wn2XVtYaswW81ye#nSDD zM!HC3x{NtkIXhTw3fsGaMk)Ottv<>~W`)}z6A2Hj|&#|Vbvf3v#F5nam?DI;Jn{9|ClDFctFsjn<;Z?(x0 zp^hFbVYFzj!igr3uGv6h+1-Zdc7XL4)OKUE-D!Wd;hi7tlUy>ab3Q!9bGcV2x!;4= zKc#J5=sIlPBTGBy)8=d2l$r^Zq$@mY{m@C;xcNvt@$1cD=)MZN)TX@hCGqVxgKx zytTKNb+psQOmeYV3kQ9zxsK+`Daq}V_}zw4TZ_F%aJP;{XOopbD?E+WNIkjFJ&z`} zv}peTv2^`OwFu+X9!pJ-+nI`_5MMy87-0TPeFMXVbXu$ zP-;4^o|d{j#FMm^P{*h?Zgli?5}BAOJjcL8%ADuE4+pEqapJk!!rs}<5pnM`72Stg!gyU$U8qkhssP{VTM1HnD2&EA_MUwCU+xc&5Z zWy~&4Zy(a1vKm(4?5G;wJlCq+Ts;?l*ne03r!oVE1sijFvleI z9Xi)*t;oYR)UjwHa+>k*=qSceRvC{P}W7 zr#bG6&M+z6Tsch777OF8NqIHYcMYTJtzeOPLO{?;tgq$Zl=%u^hByV#f_e|6d^X?k zu|5&$^DmIv(t~q5G>vZWY9dc9hd=8TSqh#T3`Zp5zFZg9_jXLNrk1D6`+Ui9zIiW$ z$gAZ9>k-_l#X%vqfxzOvqxf;GM}6=&O@`L;;f$6{Ah%Q!3vfrvfO-@w#&xF-iZ*9)y(!DDohY8q|CdVSO(WO6qBrd4w2WZTigp-^%$x2Aco9}8}Fk49Iv zyO=*3?ksf=9$PxJkjy~2xmIP8Ck-n}EJcuDU;~C3m8s zocX_IF=3if?xW0IyzoaPfmC9d(BJDV;tN=&y1BQ!n&L;jytw6ttvlNe@VFsld7nWWNgwD_j-Ek0u{xt2iasskjl;m{BDr2_zVkWMO}g)HXLW4e+U zt!8a8fQB}l&Am%un4%t8er60#K2kaFr#6LbL}ax#-gW2O3rS-GTZu?KyMXT_?j>Ww zlAr_2<8B3Ht^4O?A%B7ijVfS)y8zhd^+Um9`AA}ax-o_jA z6cO0PacZR&>Nt++7Bz5u$;%er!GT3m1_o=H(7Z7|wGGtK#dysmfLzKWGBV^Y-2A|o zQ=U^JZzSWIl)~uIk5T&`A-bDhwXp>)qq#-iBZ4($kpeCioqBoM;wRCMIv~40t?&P&tA-J6!2X`U7vl2pCK0~BsueYuP8fK=pO=&!kw0dl)46PcGBul%3gz}(n`f@T&Nv&VpeU1}( z3ryCrN~RV4+>x_w$p;zh<$?m71~|oUSwm}~cyIe!EkRoId|GU8CSw+`G-SIZU=Lg`Hqs^nWl+7C0 z-#!*O+CYtRWjq3`Pa8qQ3;;;aTDxtj+iCtIv9+;=8$Cf_^0K~kO%2NAjmlY}u~R~jYF4((cP+$l&XN6|CW#!F*JzUnNy~2F{M-zXDxReUmCW(^mhdc=hkGcM zT1iUnJK2ahLAy8uBc^*(8ag}sYZ;=oxQ$*pG}!!*vRShW*FX@<$tP)U4*UReK2(Wj(~u$u<6xueeJR#tI%cgc%iHnmesG7b4tR;^8E5 z7%@yvavkJStb~%KflyQdd&J%wi@}YmHO8U#$aM#nB#Z398qt7hqGo)M=;wDB<6?~Q zip!X;Rk^}yx^n3kf4j^V7h*V95gbIVmd8DaB;;cRV}faQZQ4$sr^#`&+)n^LX3@2V zTyvlLX55TqoOkJaQnR1L?RBbI+uXM3_elszV-mRxUf?E6G+~f2!92I{gTtfLBTL7( zSRuTc8+dQwl6#GXgRk!vBqT<~%J50ZH~<{xub4J6d_Une*EHLS5=(tOS{4c>w_o2P zZ6Q?WDKQ}9pdf+YoQvHyO+!(6t?m5fWi4DV1(d@7sAXz0mWB^AT5YTn0c;oRFF5O>1kAHod3Eai_&IYZ1*W zU9R6TEW~nR7lpW8imKUCcs%D7&n~TNtj~8ah8s7HMB9s#6EdnUamUQc2n1jZbji(X zSwVSs;Vo)4lFd!D&|XJyUn=Sb#xdi9g-U|ENhGKp4NK59EZoO+CaM!Ir6wL& zT<U zl2H3)MG`<+orsgHpelj}BkFt2ib)yQI<=pMZ`$E5h4z~F2Ilbnfb6+w&>}C?1 zsb(sna#Rv46I|BqHBCn8WYhl3rQI}TE;gxUj#n+_ItDzITmZN{k?U0aSK-*K9&1Up zICYDJ^J6V;Wsl5Lf(n;F(lG<>a1<|7x~8(!q|`L4#kxh3W^g81B;32aqZ-^UR3DS~ zm_fNlZCb(pQ)Cl%FAVOFv$=jTUBlrm5nx|w7ad7@6vA3EV$gS?Q*qSF} zz7>(gvLZ^X+_Qk;n72TjXBZs*w6ioedO6g-+ZDXhEHTEUub5aiQ#(k`^M*M6D}LPR zx@Fti+({jrP%Fpw_*6;ug=YbLu*W&cbHM}yochnNXcl_@x%PI`X0_9-c739F6tl7@ z+(2h+9I$r;_8=ZGDsQP;nObhCt9V*{M9SAN!*^{QFwMY%?Sp~`%tI*zmfOc{))?Kb z{OxL6i@2^`p6T0Y0Jq8rT;~L29fv1573UwfeVwm}qR}o9q|@(TTb9z|FC=bp3OtJ< z?jW7UKn@ND0rstr*dNAnN2BVCaRfHj_j0|&w*nVf;43g5R3W+oBxA61xDKNg$bQ$l zUG}f9$px#m#F6S{Jgb0KK`Dw{BDw5UTXKv5dChoq{{Y_E({FViS8sm5*)|L1%l3%i z62~LBX!1VrUAR1hkPjRhlf&AK*KsYJ4FrpIa~nw>079xp_K@dk&pSXP@T~6$MPqF3 z_Q{g&IMnTmX7bh7%PdNBoDMl1NbAj7@bWduY2&4TDE=ng{_+&Z77 zd%X@-x!WB^-7Rkx7%B%Xf(T%1$=phF_eVl${w0cUt)h-6T>aI^$sB@OvTVE^G*@=>N9IQa+51AvI_5LMIXyF#`F4(SIO8;EC8*T5 zfB2Wd42$*{++0T%H%JtnvyjIiwtna*A1M0Otym2!UwyY%Gh2v^a21R(xEpwlf`gC& zAd%INN_K&z$$J;s*<-r8ye8!nV-kvu%ueKu(fqk32JZPZ-x+H+8ji5A+S%D@YKn$f zH0Y$8VH}U0nVL3GGlFs4;)G99ynZc??@pRIBnlyN$Rgb!}$f0-)TOpW(h2L#}&E;t$dDmeTi_E6k3)^dNO4Bae~EG~?#z##qL zcLSB{yRAOcNnJYmbvR*5dF<3}jKuC)17ylUf0*C^M*x1bY0w>>q?2DosD_&0>XFHG ztoE?O6m!Ef5X#NCsflbuDbKIjGtzQ z)K(DBWp5>|ye+o&7Ygx}6Dp}2q~|Fo%FTu2k?Lw#Y!_VdRrGPoW35H=+?iljP5%Hf z-3+_->?{u$7%VUd&S==AOA^T?)OVJ%Lbu;Me>8tC^&@L^3R@W2Z(xtL%XzW(!#45sA zqqw^(8AG&#AILXtMUb#_&j&uO@Wi%q>o*bD!*K+T!r~ciF22q!#LeE?>UR$hpT85hn`IFs5=VVPNQleGZH?uGx9D=Ky`w8^DD&ogUhV``O(`+?c ztU#{FBUTYORXHARN|L~k6z(`Zz)qq-7SB#wjV-S=D_gTLwo9vmw=Hasl8?2HPFHXn zasscdbsiYAxYA|6ytua1udLZ%wz!g8ou(5e=@k6=Q?wxt2n2P?=CgEWlSG;+e$A#s zG|MW)WnHktC?KON9_2EaWY2>k%+G~R=pqe!bWLMlcBPZ^LY-b$? z+|;qgUC5yD?1JLwR5wX+XtzaezR`G6MrCcxv8n(RZDwHODxmO5BCPo1OSrxM&w}o2 ziEZO)%G{WeEGNs1{KTBGBoJ}OPE9^(u6#jfZ@DD8xW0vMBJz{>iyUm~#2jVD3HhfTxeVb@3=Q0|9R>mKf@#+CSy^A|T60}3rlD_h9{skNdyvRCf(}<|zR;m^Sy=P} ztZM>jQfqi_;*qRATZ!%Am6@5ocUP51%6EXg@tlxUj0k)zvFqB0_JYWkcJ{LTn2>}( z=orN=LCzGqhRI?MI+`T(8E#w2^!*0%)=P+nXGLQ4+Oe zT9=3$TerA?Mzb?KlgTuHD#-gzHjE7A!C*TQa=F2*tBYl{mK{Rk-sbB~mTycbGUVQ-mR?z0vokU+`XkSi|Y z$zU+)I)&A})y15@y|-(EUeGd)$V+V}0B!-)VBj82XrDmk5)*Nzq}Odd#ht^*NQ{?h zV~=4Z7XI@9$}x@=hA>5Rx<-ixud77`#p1<%eLR2J%Y2_@gdiv9bN7*32s&heoZ_(c zBMcK=Leeyr_IE83_^^B}dEwz}!mrH9hsbi7nOIwbYt5@+7K?7Dqg(5tIiw zUIE}^=rc`fD~qk&FNk$bN@*lj-prAnTt=N1Bp5gW&r^<1TEP~pqw4nQarRcVYxP+~ zWt()Wd0sgHZU=*mW16*h6gu9J_Yv9MM{@AVEYh@yRf@U9fl2$g#(R=T0-GD#+CP~v zj6%?bXkIR0WZAW_FiFV3C!MU^piXJYeSLeP1#uzmR-JczB0pf(0T zIP81WSC{K+D7S`r3~(V1BWFHjKmzN60ode>t~n=wDSSn$+UtpRB8#gzpk+%lAO%%6 zwo^Xj0g=-ut~rat+MF(_<{2iE5$9XpDRy{Sc@Qo*-H-t%0CS$8Qn=%CIljx{0}PiF zMQiq3Q}$^V6Sir0la^l0O8`e~DD|qgT8wsA?Cwmb!<+v|QYmd?*keNm%=;&@}<`-fN~ zX2~P?va7gsI43=hPLZtrn^T`&mrv34DW^!(!y1Uv`+H0$p)7DJ2%!;g9MU4?y@VPy99OUGD zr+{l$#rkAA=(E0#DB;^~(_R>Xib=yi$jB8!h9|HbW3N12)BGDOFvhpjS=h&Lf;gaK z=Qd>|?{c8|Xn0(nbAiV-e9FNR<>!MV9vb@$n%1p0p$wi>2%LFL4(yk11Vu|WK_{Nv zR)2`@?yjsMwagK&kLJP*r(?wBm6U?qvfwre92Y#`3fi?x*e&nA%Im646})gqD(UU9 zQ|_5j_b3PkN6nB%0UTEktwAN#_u8%|)U@kA-`G-<4J!|L>iZ?dbKMOU#F@V)=?ChhJ z*$XwJxQ*1Q&nF6USaHuJSIplBHJESwT?}(vTn*4l_h8(-Ya*Yxral7g>&D>N#zlP( z@zcigUVILZcAqpB_s}KG#xxK)WPP!M&6Yc(8OwCQ9Ok@?a{c5^j4#HIG5C?9YBygB zEt>N79YXflr1!Hzxs8;0n}E(4K;d$EKBl;MwItJZX!OxEGeYeKt7Hk<@-r1zDc>QK zKF)Vw9&&5C_~qd%?Gr;yYeUqZPmUOtYm12`+a0+^5=QDapWTTQgd^rG0p}Iux^}+0 z&WmTO$qkOBdExj)xVXBSSp0~ed6wL+0cK@p+6ehhFh_384zM~aXpyxAg}H-GTb(!U zk=w~EKiUz`C)vxHNx=kUva=vP_PFDLP?>KZzv!drYrXix6ZvaRzh zV=e=7O9kvrU4Ix}_~Ob-c=Y&fSj`;qi#*K>%^Yg2BmBg!6;4X?x9q zm!Gk&mvEFWFhSf#K^W=AGg5!TQ2L&os#=R!ZZEDNNt$IFS{PlNv~qK_zS$l<{E!9+|sn3oq2+L096YN1&Y{${_4gdA(}rqos5C7#!g&hADIFJ>NGR6GuYi~8nwN}#hdGw7Z&nb+oaI_nXga= zj!d{bG-{*wgOC&-?$$qw_jr=!HLHl*Pa2i1N^GtpYjJX_fCfe6GVUM-&R780>MCy% zUEN>n^Ba3vptV?LQ>VnMAK7DY7bpqgNW)-~a!)-f=ZAGCztm*6o_mFB$mCn8o+p#{ zNgn9g6|#J=zys<<3%Km|LUG^r`UR9-zWG%YHB5o#CLR(Fu4_K_3ZPOUME?Gd>VKG?8#6fc$?c7lB~ zQsc$DvaZ1npTkyBE$ z6HDg8Jn-513XV4r6L4iAuvFmloY6hCt*qK@^GRzBtbSRInpU}y11c6P>Y4LL_q*U# zJvKXyKH3?I+zX99+9r|hoE0tt>?9npz;LH0sN({A2Ro zx1P#K;f>iBmPlnGl;uV+!FlWm&OsfjhNGj|>H4F?BU`o8DRyAQ5%Q2hYFIL`00ajOlsU%i;2r@Lb3?PX)iimv zZ8@#IH;lKk<-OJhqz7hln>>@@p(%j+A<7;m05ONf+} zSb-a`bN8F(#zEx)Ju1$rBzKyX<>k%2v@Ff#A{@+QU;!+$003?jox_}*Vy^hFTE6j) znGTN~y_|Y|y|0}-vwW*6$DA<$ZcaW>nPm(~9cw07t!?3oIN_W@2r@0%ospC7hrt6M zD*$>D0}<~|Hx!WQEFl)pcqZJph1Tcyps_q*RhN&ulq7MH?^>2uRx)ZcUp>5feVmIK zPdPIjGHk#FR{_+pAoR#N>T93VwFZ{PCXxv4H3;rRkQBsF&yeSoKkGl<*!Jt3vha8gOLLBZbm>>-31ciU zqc!c7<|kn*qOz_)*v-Jl3z7~7GC4eGY5pI)*R|X0Sk+^K);S88omni^q$NDbzl~HK z-A@36j-iZpnc;@hyi;pus(GJjw}losqmLIhsQ&;sDyITPRbm;iOLXs=%hB!|#1PxH z(#)%4wIqrR!!#0u`?)dD6ObD@ECKWtrLQ8|_?+KJBek=%RcYp&d6H@Ffg=-O5@*R* z1x86#&Nv32;-RWds@k+Vb-k1^#9#&{j%J=RODnUkH~#>1GmL@8P6??N!ncff>sGhW zYZKjGLX0C1Wa;Hfp#JM5;1xeE?)mA|);-1TwAxSEZSCc=o){3v9Fh{dv$raKhmd&S zV;q{#)8n;h=Z5ce64{btbArs}i6}^Ja$GLu1OhXP(D28GH63?P)$g>AGgh|I;7PS8 zmA}$$;9>!jY5AR1hzwL5ZUo>_r$OB4yfx#CofpH=$M%ccUzwzxf^CBSF~WJI@X9uj zI5`}D7Hg;YhpNY@U&nQ46~%-O<}qgENCZVo5Uxl&BvTpZrhNz%z-UtW@LgKmZvM~v zEV9R$4CWS9Tm%`)?;~lz!RUAuBw{^#R<*U6)lK3-8JI7Ut%OuT?e{<@rUxdDUZQ5E ztKjJ_;Ye+oJ+j=!%31fucwiT>;c^F{9>W>;LgPlh)FF87{?&D|-4<{fOJ!ZESz9^U z&7OGNRgO5T+Ds5x>XH^#GP)aemSDbAQIWKr#B+uu__5B3y#h4t}{Wsq6N z98RDjtZYj-{{VXcVDiM~f=5ZNzKtEq+N@L0dWkIYwZKG4Iohd$H!^&{4ta7h=pxOh zK_2^<=e5&daU-j&lFutLqemDS`GXu|I6pDqjwy|H$HiKlw;yP@^R4dI7z#iG+@T?u zvkn13>;c=;9Z0PW4_9ax`fyf#$>-upJxxC{VhiN~#tO&f;NQ%*lX)rzME%x8)@?1Nhakn zt;C*WusyhRA~^;FF(ZXh$Y2LbC$!V`&xab!mhBa+))2!gY`2rkyv)q9A!0w)VbGq# z*Njncxz1~Pjh*A)L#65PjUG9JS=qeb>6W-W?voqecgg`QKw?fguci_!6Y!fwSniup zj@H-hk=!xc8HQ9$tZV(^ZO5CxIVdmzEuWUHtYaF-+9oYMyG7>VRf9;%xe7)BA2%I4 zl09qaZ59}B{0*R`y~9ejwnSV=yJL<1P08h;$MLs2vyG~AT)5AL6%Efi_}=e7i7aNZ zvXa*JO(|}zqJrmem77Yk7-`W~&X8$PIp+Ix=~{i6D98Ku3Ag|Z26 z352)H<&2UyF$A13+5!(kE1}gq7dE%>+S<-Lt67!?xQI&?$dzv#Hxf)p#6>|>Kt5K% z#z4ht=^9>-r3ARKvz6CN)I%+#k(bO&rT3W*S3h*BjFLBZsv5oBhM}VAe{O#|&fo1j z?xL1CBez*LsyCA#F^@BX4q1!4W196NT25LVl_{jPIjO!DSi=SUaNEggdkvIdWwG<3 zjOq^VnQhyMZK~M=ugG(O%~1Grp}5dtL#}sx%tn1N zU46crCyuoXt9G}NX=IKImGj{j5?wI)OlZgEP{;1%4hi6KnYC{ZE|YnyTG{C8(Y$u| z{{U%~nk$Jj0bd@}kFtJWFG%XuoBeOL&)aK#IzI+o^oS zWeme{+lP^t0~rKl0nXlueFxbix_hhnq0=If5mfM}R+jw_f(gnnpx=oz+{{Y)p5Lj8g z=`Or;`&A!}AT zg}|0eRgq1q7W*()8>3A6g1<528E>fM{6Ly*&4!+rS~^F4E!(`42|jC>M4Or>k0hx9 zQBW57a5@88#FrDC@Rjw(pW^#C;EH&gRonfiZ6Jh7-fXV3MI0;w00W2FjuRL;&0UMc zGF{zjGcBBYg{t0?GcbY~n4Kb75j-|#J{{Rx4^NOIc z()hDa)TZ#(gpyrfURvnlI4*81qe<;;r76odmJr6iSw-60nTxUY2A+?q+dqV4w3_ox zg{7Rla=;P1shDkY90MRyr~?ETkcgFVxvb4b{{U1vHP3})jjVM`8oQMGL|NVVMdaHwHCvk2t4RAaf71{Y}?cClVoAV+aiEOvHb8U<^%x_Xg2Q^Dy z(FVC=Joegs;@?alwy+I2j@_--Dy( zx@fKSSnrn6APa&%Q~s@;*CFI?nC(@3cYCf$;&~HVzPZ&k43wH=yElt2%!FeoEHU$8 zMsNu^1Gco2NG#gbU~4&axjfsWY{D2Ah>7zs{{T3UtZ}IT0CI3JPC1QRPt~tAIPWfD zSmcmSm`q}G{;&{LuyS3nMmq3K5s;bI$eI?Zpz7Lgr>HiYX)Kl(nt4c#$}Un>ZSByU zK1e*}agm%>eut*qSXfOg7WQleLL#ioDTXboKvJQCOY>)Q54@lfDlLD+ml8)|9f~!Z zECoyj)!J|zKh6dUyYJyn6sip5^HjC%PS?a1*P6}M^b9ZV8qmSysf~tIz08UmF_jI$ z3PC*%1}L}?O>c4Gohh{TwX?cg8>tngmIeXX0*+MUaLSYTIu)E+$=W| zLvjVh>Pr)DQ6Xd^HDbm@jHtof3mz~k8wn%OHR&4i)*HBHfEJPo6iEw}5=SBdkV7%$ zJB;TCrtCVk)z5}?$hC<6(|4>|tHSq4vPl~og<&*pfJ98$JOBf#@qj^@F^Lt$*MhF3 zjT-IkZzM*U$ci_dD*phZ$bbhC9ge3QoZxee*75N@j<=#*T3*`2Z*QbqfvPRKksYeV zgpUfukD54FCz1;uGS$Z1#b-8;3fo5ynS(XBcy~0VSgBGMD$H1n2L2p+)ythmSZ`-- zO4dK^S!ar0Cg#+~aOzb_M2vi~pl(B)43Wk%Dqf?%b5_SdlHFj?w>VOv?Q zHZueZkhc>Yj$=DOz+ySz4CZ*(QdzVuJ_)R6j#w_|wvD81(X@o73Khr9p=02ThHyUV z&2HV>uBqY8MWd5W)!@3dGRbZBrL~%MdA5mUP5_&6IQfYH@}m`I!q&`P>m%&CO@*$R zWi^J6Z>6xBIbKKyn#JTHWRWnre2kR*NqakkIFBM&uML2ipB$|;Q% z0-iFj)V4@2dkVL%_^}@D7*ZvYDG&fW;Nds)VtF~n2qgOvO}d8jMxOdBbymEB^4~9X5$A7$xMHH)}zxbwE6XW%c(xjw)%aTxMgXKEi1_Q0TIqvg(Q{8`CB;YS_O>X zE^RhnI%rv~P_vaFta2*02_wJE7+`aSt=V*I%|2LeFD!hUjY&bbk?!KRiT1?Ia-cET zRIb2C1g{w*hG|;U+{Ydu5H(`QnRWYZS9gJIeXP7ll#ln@wnB>NF-!k0F_3>TIV z?YFq|H_jw-o>8|1g2<%qVx`rFMn*g4rOAbgdgas-Xu@F9M{#8UU`)#FHaj9J5C%4a zc<4bLNXPqm`O#dyP7Fmkwl!;APst1`W3;KtCv9)}23xwLL=eWU+?$ z*xHY@+#j>~G6)rp*-UJHb~!u)&N>dYhkUx0m44fv@9on-(aj8s5t#WvNZg#^iO$p9 zjN<@P-$Au)Mr!&~_=3#d!3B&Hv$B{`vcgEwOS@r7+Cu@jeeCjj3g?#A;`hV9Wtt^v zAwZD`;Vk}HZgO}y`P}6}BX2#i(6pBNZ-}OvJLt6qmKg1>7SUvr&0>X_GRg?r%DDgq z`9?cdRr=}=sa!{NqQ>&^7HK4sQqpWAdLv{Fm;qM`Kqs#?Xr89p>GxhYxwVd8EH~NG zDL&BPs+1UA<+|-YXI44g&m$DR4qIgL6puBgrFk4Smkzct$15A66qVjXDMiT+Nc+Ka zn#umqx$-Y9#gtcaO#x88X6WKT#g5l3asvRvr$SD1RyHnibu) zEc2J-?#SWC@SI>^RI!@YzuB;Oia#$}(QagpIa=n>efcx1%PtWI(U0R)sIII8V& z9ClWBS5s;i7jHM%;Zbg95=D*98$4SG<`|)5u@z=O%h|UOask2osm0qy47X<-cgwkzEFz;rne(t?nDr4o+BXe7Or|&agqwa%`?~Bbybjp|gHyO%`p@^d|nvllwm2M!34x-%%pi zm)N2bPY3(K*z~{y0Qav-{e`TXTK%4+(<7D}Ta7mQ?TWlXj4Lbei?0v4O9S6L6UBM| z0PPOHWYk(4`>#4^H5G;%g^i<$V@OP7DsIajgaAPKbDHq!-|KDpoeg`s9zo$-OC5V& zxLfEXPc|sgr&w90lCs2oAw@wLNfnUCv<>{{B%fXg-PBckh@rl+wY-j2!mjjLEnD}> zz?po)U5P9KP<EimQb{t%ljm#f4UNQSfcPMAc;}4QWqS>}rJj=wmAv-8K)<Gb6J?*{Lw`UiKE$^882H~_H8!!8FE(dha|ouk7fda^;NTZq;K zOHk%GT|QwWspn`OUIsU948=xsGKy-#S4QQZ!>upk55{{{hD+-`F5^s&{KGtcOqU=Z zEfUw)cm~jkyI`k z*GayI?D~S-PNV0zhDTUtVTlBa?i68|6SryX0OVDz8pl@g1>CwVh2{Oa+(^;tS1!9^ ziU2SSha+;XSdoxMdSnWi#imQt#J0M!hGtzsT5EXD-}NriI+hzG8;>J7Bzlj+rn7BE zUlU0k;=y?hh!+mgLN;&$rNJyei*lZ%6N+cqrbsM)%I^$vN#*Zowk&+?+q{#voDy3n zoae1hn%SR9yjA&`W{zPblWvn@ZP>Bnl?#r8`?;!qLx^fopwM-FHXB_h?G~|#T6dAt z0J@KmnFjK?EtLl&w>6*ew@?beT^T23K` zH5X44Gs)INyoDVwRTrLkC2^jh*;uX1_HbLh%#*Z|Lp7bWvRn_cNjZ{HCeZKmW-t_u z&(Lk*O~Ce$H7nOcaSi(1eWeiMW>Jz(&PIMw*Nvyw6^|{wzTt1C+Uf(&+-J&^ z`y`wIHv_oj?*&O9sU3M0tWKXThMO#hRJdqvWR_cLRU%0tR~t&W+(Hnf6M_@~bJ~wE zXH{{kXgb3~arV0zuVZFmBE;ykv&)9s2_acju6X1QK4F@U?#D*Gzh<#tv{_tA{%4+6 z8SR`nR#@Kzn8yck1%QxooDo_GV^0uGsZC=nI(OP##igvxaV3(lLIKhZhfWi?+=1l@WkSyN*6zl#K9s#cgX_ZDM^9{B;1M2s(=1b zB%dLQ<`W8rk|QB?;Ed#qeAyfjIjxBFX|;$XlH*PDu5ThprZUO6Ov{5iMq_W4fH5+! zQUP2L2qgE5r08(k-F=<*KFQW4JE0`GLSz8sGKIin!9&135IJ-p*EK7RTJ52{wUf+y z5F%6 zNv%y!#y3|wJ-jRDTuo~fmi}C}<)pOout7&d*q&Lr&UvRUsJjE%#drjSNm%x?*3(s)^+y0yN#wuTY7vdUw7mz0Hx%kV)9k{kd6s*VFx zc6Sz{_UHRf&TF-_`$grm>K4l^moYP+E=I`tob7Mo7$+k&cJ|iR!&$etn925M0ObkV z6e(4V7g4#0{vYAn-0@DZylYc$8%1oKp}a{sQt|3;h6#C0CDp-JPNNcl&`Ul zh7CSXv`;h5Ycf1G^Slwuc4Umk%PGMPhukv6{Jf4xto!?GTkTR7x|dWpNp8&|Nimai zG>nR39Rm#Im9TIRCl$1OIVG;UZ>UK!**5bbl5EByWdWti@=GgxxnZ!7GgN0?L;F5k z>!e$jn|p*XmHR5l?4XqUyIso+6T!!N(j=CwZD7*$=2x{#$)rexw=Ak8vsqs;i1va3 zF^r$#0ILH3@XAWc><<{JCDCJ(#ioDl7LxKg z0#6JUjpig#u2t2+Ve*Ww2f5A#Wox$I+xG6-eBN|<^5XM1A&CPYlQ_>E&m0U6GeJJ2 zT8pli;%m!xf3VFAu^o;3<(eI=Lu6-m(nd(fMjcID^WnX)mF;3*HABe^;!_e_ZURBN zJb$e!0%RN#qmNu0)=#!gG=5~42(g$YUCR@p+^kOFyBr*6saENcQh07}?6_vPj9f!? zZvl&Bt+`ddiH1f1Yyzj(02-?o7p|deYa1lZ3@r@WgCLqnIfezcf+bBrJ$H-WMbe2PlFWI0 zk+G4;AYsNy9SJorh^Er@OL;DIo!Wdiw#_L3!$3U0x0Mt99!8MwjwX$BpP233Mghh} zJ5IT{OPF+f%gcFWiG#E-lpl?6_^4 zz|KjK;PMCvRO29un};dQ==Mpi{i4WSk2)K39Cp&i-|333cRR2k22{%cGEURqiiY6d zcwfV_!ylC$tYk+kEG5=Rnnf|TTjo$oo=<iq}5b9o5py5bDvNUsKZ;pCs{}%0VZAv~9&fXW{uT?dJZ^7dIAnj|7)b4d3qMDnLw##sSKc z^DyJDBA?-TwEcHRk4v{@YwOvF^JRtOx+jnn20I!s$1KML0(%X#-802^dTx%IU)b4_ z)G?CQHf4>$A3pr<7zZS|&jf*tP=;FgRAKQSiF~GWE*lUa1@Sqds+p@;ng2=qC-Ni@;s3SP9H?g$T zAn^39a3i>FN=dD3^)`_qg-fy-jEbWqByYoX8-N7hithgaYOfJTZQ*NJ?k&ua&3uwu z%yz~Q68pCx1Qy5~_uzG|6G+iDZwTpEcXsWi>J~FYCAGEHw0oeMH-aKtVFZ!xd(8{xEKU-2?TxYde+vR@wN>Q zQ_*CK*7_yWr$!OT#yg25J#iw8Y+?75k`F>KYXWZ~4FcZY`r_sSpi3N3fD(A!u^!Re z_=z3y^`yDcBA--ciWcz)*u+vKaR-m=fe?vH4ym-2Ae`h5hP#wg+~wwd4I6zrYY!0J z>UXzWZLcNrFH$p^uAq^Wx0ZwjeW0NW&@uz*R0Y|;y^Z|qhL6uaNHVL=6U;aaF~IME z{7g@J((y&+oozgKT3yAoKj^U}ibKh6@3^z7B%7ZHFN4PgMRV~(9n&S$a$BU9?#((F zjCd&`la0MY6O|o+Jvgcjw>miuydEC7n&K}u^HN~JqnSd(068x+a!<|&9)Q-inX^)v z8Kk(H9nUJP4kIvI{H3DUL0)jjcO0_PfCu@!?rp#^0%Kg!$l}ivRki{ zZvIhZZ!;eu0Pqh|IRhD^mrY7fu@0?&3SVv0)@$o{u3W&xqTDK$3bF7DWP|ez<0qi2 z7LYWS(nAHlrFVTCb3>@Yw&b(O#kQ0g+CrkQ%&JQ4JYyBnSa>T;`&2V(CTkhB1&;2} zJOKovSCLiK7jfS4#=`-K-27vTk4Lq)Yj(7?w~pa=$#ZjW9FnwFILe%EBYP2p+y-9# zYIG{&bUzS6Zlja!lUm)(V~XlGMMb>**#xj0F)|c69S=Nlj*rILRh-@(vimrW-Wxcg zj^$G1%?kOLljR7^5>4J@WDqfqNI4Z|KLqJ=SyDIRf8+E#dVRz?SJgTnpMyst=YEW@DSXBEp{+l^T1t#Hk!EMhoJvck@; zqa=cHoB(|@*NyxkQtwAV`%!3 zRj`a-2YB-04-i7KLk_hHUF9LxKjYo`+Pg3aECVsyjzBr-S2Z6Q+-lYqT860%@~w<< z#cpH)Besq+k`y2d_jhB1_k~AedwHbz+2p*`8q!M%wtcz?1Z2v*;Id~b*drSWWo~hU zQd^ks>|?gL)U719)uvmEZ8*mxEyI}GVhz9u(Q6k#va=+M8)qsJ7_)JL zN39kbfA+uHG^npGH2a0~L~zK>Cz=qrKv4n10Cw@5WYrtN=Rt8HTZ0Trs##7p&6aPO zuvh|ip1_RrRZYyZNXG0*_N%R=IyfZYlgS4p9x;x%99Dp9YPZd-U%NCm*08d9&uL|C zvIxM+xmbxLFy=-CfHv`g(w>`YwzDMBNsl(<%M(oBy13)ZWhtC(D&(AfIjHO}?=%a0 ztBbO;TuB^)DIz1uI6GZ_URV`4$8vl0rO?%NOJn8jhDh39ESQd5o_wZ7##ykVJaD)j zDoWhw;r`6Gx3jTJcG2WSBkWO$8 zYZiS`B%NFRE_hSSlo=)67?6hfPpH5gpK4o#i#BDo4LVE9e=cj8#J0&E!ty@-s!nl* z;Pl5pdT?oe5^9lnQ^r=e*P453S}Q?4o~LFdF$p7h%DNXB=&TzA^-;*+iuQVo*kAtu zXDs4lK{cu4Y zhI3rP?$xJ#%>>gjg$v9tA7DVvKJGxpXb7*ZbwJklGG1NI5pd*_o}or?-y*Jao|FZS z(^b)~ue1fVHnVPp+V0xj4pKto4X8&baKA5H5<$mW=6r7=$*A8=Jl7jsiJN3!>s5!z zo{Gg;NjL{2ka}jj==?>e*#7`!eX0XPKou6D=6min#C(6p9O-9p68aHY&Uj=~}!4i4<+Jvbiq z>7EoHZPeNr?e8Q_ItW3yiF}b_IK+UR+oDXW?mV5u@tT)d)8mraqto=ucwn=$wVLQF zsryL#rNZDe9IS+coR`Spj88BgRd=b~X;-parJT0+I#toRRE_@tbr6tq5PacRaN{30 z%)>kiyL%pzwpxACw94AEGqtt5Ge>Ny%e8kfA9+I#31U>_bIzxUbn8D9vf9F}9H!~g zX&d)P1Ss3HcEY@F%VD=-sA$l~CGCv2my0CUu$XRP5&gs*0HlM!$vMt;f-}WXSj)J% zwbbQpK2I_>l4cP}0&c{4V9s(tZ+qlZf#0`wAYO7ejRv&LABED?jp6< zG8{q7Duxbk~VZtG4@ELpXm+b^9KGa|R|6ozoP&cnPG;Bp%S zj%#D~nvT;|HoBxYMZdFj@oRf;8ig>IUCEQwF^fA?fE%ckI&Yum2r7hgjLb12nqxlvU8^ZkA1O+Dqg2%0MdY#0Y z-nDTolP%=X-HBd5HC8y4kQFjE-XjiU!+qQn(2UV$>kf$XktBxsm7$PD<%r!`*g&dV z=G@I2D{`O~13cr@r%f$RN|We!UJlhJ@y@YlZy^?%LYX6iRcP~W8+KMkJjjW(I__>U zv~}VOpAqTaIlhMC;@@VgG+qnyu0RL$I5g- z7{2193=DuyKqOY0CUYGH*N7PC8svuKNwct>q_T#}INE4X1>3kFV(U7_{B2}H@+iT{ zr~E(h#*3nOg6UwI*4?HFGx z4XT-*&`yvv@S*u06dTx&ITd%14i6jwjZ2RPE}f^`Y8R~65Ln$8nGpH%U92s*Tf~ak z*_nU@u31ExzyMURxvzMwcYO`sp{Z&XdY9TB+A9e3;C|CIWFQ87>{7mK5?hC3{>Ud6 z#Xbk$rQSnpABXNGw780Ivqw3)nIkGUh@@3u#im?_aNE_%&uYE>y?Lj2OHGGNhQ@tD z-Tbex8)+Ihg5a=# zUF?dR7?oxpz(~d_qb4R}_>W1umrk|vbtToVZjs&=w|vGXMHbv#msGmX+d4Tx(~GHs}_FQtq43;@8R1!`;A5IFYQuW z?LDHLd6KfoA;CMpcp5`5B?f%MgMexu9fPjR4fW)a!EdQIm3GKwcIj;i%9OE2`s)y&h-Jzk~Vj{Hq|>yoFt`xh}J#*@?Ch5 ztgo!?G?a-FGbP27EW5()k-v1AZ@dXYFh;^U9PeIO*+r@?l3CqHaMAgkX;vkM z^6D7aOD@RNMTXqvx~Wik+z%bV0;KT|gXGgJS+5r1p}qz!&5thO6yh=%VSKINu_|z! z1A=o>YSy}ah5enbk6|3pv&74Da|=x*?~pMb(pO;^!6SfudQ-C{5ZOKMvuUZ^Lt-B4 z%!%iaP9+gVx+PLhOJ!I98IQ~*eB=X0yWsU2rLL`|-o|YFgg$-biN`x*Nj$yVSTY3x z@tzOL2(7ILz}LyIM`bj(H&R|nBm&aj8Lg%gd0~(Nxpyu?F;^!z1a+)EYsIfU)RI_v zHuo10yUS~D7nc+P!YP>Jsq;Qy802IOU~;3rgL_y!JE>dV+eIbqyf-#>S5c&_`{I#_ zia?Pm1Yj20dj0S^^r|;8Pj_N;xi6%)x3!Wi#&l_emP;sQ@qu7Dfn*oE)#pKwbekI->s<}k zj4kzl5`DYMxANjJMQ+7enih`Tlt;a}E4hAS)wn$>EW+kCohG4qrQ9GtVwKwbCHE7BRK}Mygzko zcXMk4Ftb?h5_x>!8aaqyTE)w)*j=VZnn^HUBn5Q?E0TE0+t8ZlWYDA6 z?DYL&-aQ8T7Y+87`WS%p< zib?+}gBZ+D1Qja7R)I zT;v`BtQ|{9lh3?{YpY2U5?tIQNYTc!6v!y30*LaF?F8@{vx8L;_e33nXmdk@CMh9-&CU#ZI3U*4p0rhKFZx_iWcOTu#JEZRRN(lCa4_eo_GfwWhSO zi@^4iSx+U!zM&NNLGE_MzGCeQ5mnD;eaHyNUiHs;*3)Vb+%KBAe_hP(cmQ)O@jt-Z8TO=}O^tsuBjYp5%Tn5io!)>cyOgSY}t zKpgW|HElLK=-Najj?2O)Eb{R3Q*<33F)PhEOXKD8>ABpW@xQgoH-2$wQ6lx{%v-3(9BXfr2 zbAmwaT2`JLdzczH?wO{sdzEMmC8Q{k8C{w+2OD;<gM#ek>O@Pe;qOjZa%zY6`QTkrk@N6e$A;erPINvJBD4G zh-hRE3n>Ke1#mDz_04K)mT+k{k;ijusYvmzCxy_&&@su_pq!uGDt!0@CxO7vFQ{sF zkm)8@x|-W{#As48w8m4=WDsyYdwS8!*rV%D*+M-_TKEU0jRB#uxxLhlk|gY6!}*d( zp_RT|F)BzH=)U5-xAvgcwGCs(+FW;0h;FQ%)>v)i8(}KI?L&-UVTi#cRQgv%`xskl z+NZ*6i<>#F*<;lfM!56KGne6sNp~ykTx6ZO4BVVnZ|!HRt=Ej~W4OC%?M9<@7oPDf zDgLKm3d%Ag`9pE{h&ULp4vMxZqpD9s&l<-1O(ILgiZw>J24;)Rk@BEqbOl>$E_28S z*j4+T66;pemKL7fW{Z68h^q5kCPM%u8QSC%+?5>hTAmNJkHec})wNxE;l9T*goR7P zY+ERf#IfauK;s)^9Wh3dwz}t?9juYtP2?)f@h;YY0E#vb?`}COz{cUtdrC~>v2#L_ zJ#WM}7xB)v@yyb^?Fce7v7C=3RQ1W&dE^3HKP@bJJ8F`oep_Bi6xb3XVWojEB|*5C zV8`Sc$p`CJygJfYYRP7^h~fK5mgY&ISzvo&r{)6~E>wNp!H(gYe7-7<{yQeq;kY)| zlXB8Tv0Ppa;hgZqhdDnl3&6=d5-XBPFO_Gm%_6ntljY1_C&#O|+U_!&fLE|Q;@$XSGv9X!M+v~6gSg{DGj_sJ9G6VGl8B4I@Gfz zxx2Nwyk%=vQfGytbWV3J11HSNK37!8>5aUTNvCO71je@)X)oEWhuPzdxNj)PBipp# zj`$}(c~5RB1d_{2^7d=--bA7F_{1(_y-str^O5o#fwcYNax=`|ppKWp7s+L$U0cJe zD`}=LJ-3#QN!&@4-5J~nR(;rPt}~pTmj;hC*~&*(;n`{9eYV@Bc}PbvA3Nl7dEk`L>o5( z4ANzvJJ9Di1A)&-^()<4ca|@)+uJO+EfiKZsT|eA{leBmq3uKnjN>x5`)m6Cc7CR62g8H`(O8RE|$Ab0N4!Qm4(%3$Ax?Il&x}ny=xD9W3e> z+H*~Lde>0MvD@4#tdasUlSa&O8zYx;?anyIG+rgw`gN|W1dy-UzRzmcOeVRF+xLov zRlr#=xH$Qaa4GNN>0{DinhU}MvZkYIHp3)r>c6`rGknZ8{LXRm^v-D2qDZ_&;O$4l zFj!B0YpF{Pp>8fNo#14S;|HKQ`S5yR0@)q9Ji@yD)|%2=-A8eC2s6rM7SX@~C0P{k ztkHp-bv-&&p9X4ny03$#@bB8BYn!QL4+XYn`%c`E<#MBZh(|^PFyjX&Fh-^mgUKJwz@Y|%*ZG=aly0aJG?mTm##jE*pCr0`{huZm35ExxMr zSv0WSt2|N(9Z+vmBQOOCRwRN?&bY$h9#mN#Qh~(q%%VmJai5UxAY(ZjRDp`pHrSgpFHYARUWRY8 zxB5rgBQEnSW>t-l!s=Z{3bp|}XCH|*{4WIB{kMsvl1EnX(DF(}fI;M`BOHt?u10=m zU#)3Lphs=0{i6EbOIt};n8k!%bHEuk#&}=|FY@r^xhJwfYNW}nV96Zcmx5!tGaX- z&uulljcX(<*7Dn%w)q|+#2Hj5`|8R@IpB&V+?N137;UyuKWPQhQP7XVs2n<$}(E?hQRvq>q+P4~lwdS6} zH@7ZhmQbu+ojBY`2R(NT;Afh-;PGoL_t&;E7KC}9Vz!cBCPTU;R{(>IGdJA_sP!hH z)YXOgkIKBbxt(p9L~bTYFdbd9%Ldp1#^H=HtXuC9t*nsR?V4!qCq5m=Q+viSe`AnNp(Fg8?7NM zt!A;eD=ae&_YpHYmu}m#PaOcj9<-r$tio0s;hAK!@r|90#E$#zZX}WwAT)R?S0@Ld zQTI<#gN~K&UlFyqX80!@cNX(WEYQaU@%h9@EN`?$DGCXUE)LZk61dJrE9dVH+&6}& zlIr3~CcD$&ky_OuX4@I^!nXa}KqQfj@q)*S_AiQ_Be&ImXE{gDi7=5VWJJf!v>%vYG;M>Q zlnit=!t0verF-EhX1>wwm9&d?vw~OxdD29Yqhd(-{n~kvZEyf3_L4}iX8oXiXa4{Q z-+?UcY^1lkxV({VrL(wE3~@;!aCf)L2L7j$z#TcSDU$BrUTr33w6klbx%*Ystdn{1 z%^YeKqh=X7W>$Zf=E2{uRC{Rj2f|V@bc=y#?6~c)LIFyMZAh`h_jnwGHwjHJLCDjY~uqsCm>_$6aA}K zypC&s?CGxe2lMCh*`-w6spjx@Fi=1s?!f0Jy-wf6GFn;Mcvj-q?D5;cu)}X8q2o~| z8bF6RM39yyGD$`!7|9jWs?g)}Jkv?|Yp3fv#kx-4X!}EX^E8n?y4vR|u`A$w>&ET~ z!>JtRvghy>*M;n))2yevxw>c`Y3(Jn`Oy$&UzS5&o%{wsTnW1C2AS($-zv*r<~0gDVM1Xez= zdnJaie6hnF#5Y1%*6+&SXL46KG2{T`0k}EmJpJmfYv^WZ_;TLI#>6(8p_mfp!Q z(a03wZ&S)6ox7BJgTOUybnEZ+ot(YF1}$Xjp&1JDX@ z!#^88fON*u?kw%^6~5H>cFZG$UHPFrlv&f~`E~*UAZ36ewY3ikUTZp<-X-K3E%diw zAh~P_e6)@|f=)p#9$As_8zq4?5_WbfCT^cRmRdWVH&3@w&9pXUBe|N+CQmWExQ5np zk0Y4dAgJ`lYrMVw#na8imbVdHcwz1y(l{)T!!+}(MavX%=Ix0{UP)42$i_u-`d)_* z!gF<}+()Z4(q1vLQUb;#EPoji^=(Y={T{nZT^!r;YnC@>iO*&^~OLZSJl;keN zbURT)FbAHw)`Q006~FL})t;$kuUp&9(#LCi7uoY}jkHJtrWmf`ZR@nEwzmq>Z^;T+pSgp#<|~#1iptQnX`$ApxrzK+((CNf$; zim^zn0Cp-4<>j&)1-(xd1^0`B>Q*8~lE+P!;xwHlw{JOORUnvOl`03y0RV0X+?_mv zG3r{d@l}t7d?#^ld24wk<4fnucNNf<6_iHdH!c7&Wq|q43X(7w5nTSc;$1())>hCw z*LPZm_bcbhhS0>y;X|bGN0eA8 z0I3-ygH}Eo_>Rv@)Aem5SGbc&(sd}U?d5nZQ_L>K+%abbq9pAb)8zmWj`dHuOv1MC zQ#O-le?8k=>2gcu53`|d&I1w#_5*UL9XM^+s!2L(x>La&sM%_(=gDuiazi%+o(RWZ zl=bA`R`-Y^)U~Utt9vNpwVFw0y^BhUNanU^f{7()-yT`o6DJ3dn9h3hI>qxgxdp6W zW8Dgf-|VAkX?}bk?{FA(Cp>4ZR7}g0r`pm;U`6v2bg_uf?vK_P=;HW zrnqS4it+Y6!f_(7$OMj0K!49my1$1mC$YD>w}w`@Q5sw{XO)oT2FS+HQ;(P)gw=aJ z3PqYUNZL7(i46!Fp*xNSbI|SsuTk$*1QznG^pRS^b}(5yr9-s3oVoeBWR*U{6@TpW zS>8h(iM6;{f~apP<9m4-Rk5(+b0H)L=bVwnWZ6yj4Pjxww~cZPa-jq=jz$MO@Ooyn zEMUH#SjB>+)Ol%Sjo9H;7aVhuk<+*&P##6N^=rG^nJ=#IFASHH`IEe|m-|C!F2#;d znUD^8@+zcvQR({JcM9HA(Y8c@<~{p~`MUwP9^BOWjf9q05!&8jKO-#~{LL8+^Oa-C z+*cg+1wi+#%f*iSP?8wrh95RVorTMTj#az%A6gZF-g{Y|IWA$22D6ET&gq!thz_TB zN9Q0Bj4(R6|Vw2^Dh%g7a8EgjQKD7p@t9zyirX#~pE6R@RehHty=NUSW3JiKf{y#-Ih|dw@;=&jSX4)X!3}*-Z=E$$24U znDK>W91?qsbI|rRW;x6kRu@eScTmV(S~*JsNd+^wa~mmOa5>|k1XP|H)E`Q{lF}QX zkoirKv%_U-Y}Vv0#2buAVk*-}O7-2yY+&Gz=|NFDEh@s- zSi82kn)$qzwDTS}{p4^ehW*rq@J{WZ<0FC&NvyAlddK#SnZJw4Hz~Dc5$DP<^zu}W z7=i{#IqBafvhOtui~BdUvbZs_q-YC`gKFTN!-JAWdHl0dTWc{{1pd*E>8);#Vo28^ z$=Iw2Zhl-6ybqWu&IL*p%6i<8rki0jaI(6l_+}Gr1|EFH+sH1Y;N)PO^{p=f_`>cT zE=7%m(cDC1wUzmmU0Dy_>--6Y9mYjMJTG-MwxOf_mKFZSSuWaNBuOMtxLw5K7&rm8 zo|}llHG>zE{{Ra9YjF{dU$zB|+cSBS5Ocd};A7<-Pb@tu_d-3Rz*?l%mXcZqiV=Tg z-eKIx#j&|rm4_{i0fUU7BymsG{84!ZwWNKjDVAFhS{IR(oJg@S$z=euNJD+>jyTU+ z=dSh5BF9~~Tg!PY;kfcH(gmC4f(b3-I8lIEOvY1;j047MJsVuJ{>71Gj{4axXI8gp z({fs~xneuyj!4c%54~Y-r9UEH653o8y1s^Je$^+DZ@IR|Exe8xZX{$jcHy@GPDmtT zjULY3^`A0rLTfj=l_7hZSW;iJsgQY@1gK&Zk`F>x(xUL~-R707TDRHl(XNUqhX~$a zMg^t}#9@I9-n*Ni09Jmjsb2lMG_#J{CbP^)^4uhGTkK}}!!`!;2t4v}_*Rj92{L?9 zWpQg~9i*C_{-a}Yb#rSSrOYL59WJwT-QvoL8D%y@kD; zxARFq?sXX6J>khM)k~Gy0mvYh#%r7KMzwVn%UZ*04AV_*EZ-%#m0gpMlOJ~jY3q(X z&3aeI9V1cI;afLWiET6sTd73HXp$0$gt2dwl@4)$bGN4)c}dbgvY@e6mS|MlOFfuk zsFFhRItNzAA&O+2cH3Y=h`ezb1bt-MST9eN269h08aIhs!xHH$ z0z)R~9u$%o{NFK~17d=|F47m~2O)9K09Q|-O!{|(SM5;VT}3J^Q*KpYUvsI!1Q5YV z`A0Y*yVt4HLxxwm9iv@Nml64}EO#vO%>rAct+l{>6N1ETkZi~&k-Hu1L&1|BQt6|* zX)UZ~nrm0Nwu}XX9(qFVj1S0CLZA}I=4>8wRdmP_T}M=s#u=b%6c-m(=?DT9KmlE? z#y1h_O7ebgX|{eSx$xJGqtjMMVTVvf5y={f79h&GKuP(WY(F-54!{sbX>ya)+Oe^c zZ9+>MG2~Ba1e$aPSp~eW9F9nhQB)5pzq`vTV6OmH_|reJZsfC)<~=6ZUr(srEtTn6 zqRc8tj1U|60NUxwjP5)N#?ztuH;U%fp|_6W>cZFiMMB!;ZlZG%d6E}wGpPy~1CzL5 z=OB}=m0=d4t6W>^UuIk1wcFcyCR=#qJK8p7a$F?AN|Ff1z&4OZBX%84FA?~cQ1D-Y z?ORQbXl^a!c_z7<*UFlCCjwQF58e;D0QpoF!62yysNQMTcK##1)uX&wG@FSwM|PH` z<*kxUic`$o0!YsCXL=Km2T&_NQn_Cd_~P+w*6Q_cH3;XnOQ{p>0k&lsp9M;)lYyM) zIqzKu!wp8&_5C%V)9q#!GWoXGa9A|5B<~UToyvP2)Q74s@VqM%c{Y7E#{t= zRyu5&dimDqZB6fzurh{WAyN@oNy?m_TL7@EyW1TiQ?yL)T5Ho_R$ zSwyWib`nn@F~Bi}9P)Ry3FME&mlxWFt<}D-ZK*5IszGbS$l*d6JkZLcc1Xc1kGwYm zDbU<$dVYm#s!z5nF>yTC+E&lq&1*9m*UM)4LVjh=ZPlsJk?{gN0bVzTodK70OXpvH;1gXEe7LV)AZY0NMm=fOLTcL zaU!yoSv#UdHlP zX(X0O)U0Zt?%5e<&Q9E-@YprS{{X@)+RmMI;tMvC-uqm*nm;s@jz~^bU89U)NHP+E zn5a3&EHhO!D=S-7n|1Uk6y`Y%u~PXwZ6i2hdF_sCq|$s@cWJCx+1=i+*&?%BC`G&r z14Rz@VYg}@F-a_Pz@5aLgUwE;cJ6cjH}Ku)g8K7)z5V5?8wsMe5^f0_l4o+tpsJ=Y z@wN}kpO-nno++=i{X*91EMkV<(6n~yyILkbQ!!B(!(j&i9Byo6oY!mOe--}#Z&@|w zhFz~T^<6&RJ9{myZEOGy8?VpuKH@z-Ur5Wk0-V8W~FzcM|B>XD??{FjQOa=XCvi1NIx=+0CCX$ zMQg=-bVG=3Zkj8o6g07-Iy(W93gt!%Fv9`}*@0RfBZA`QIi!voTQ-{C48(?2M$TF- z!)gX9SO9azM*vnPovle@rCh^owy}$ZS0~J2A}SG#9-QQ0a&iY8R-2OUSzSWc!`h0+ z9Co+CqLEotw!i&^`&`ZRV8tzinm;Y4P(0U!w5w+b zuB4IeVSyg{(WJbPG<#!>0=Zu-@)3h$47g%*T|S$x-gs-q5^2c0ZV_G?E#Qd(bV(hW zRbmK{K0*h~q=H5}jGLWByf>&`TEf>FqiY^?1~#)eapqu1ttQclFocK8qbVTgrY@c0 zJ4mJ$FzEh#7go<4o^GHbSV2YHV{V{^AH|g=jx(Ch*DF&&wYYDdDRld<-Q7rSrH*AX z&jQN8iBl&HAyJGe3Xz`#4{;Gy+Yi3i+6km3Jup;3@zl zWb;=37-j}GjNHR;&1~gm@`P^6$IlPfm7E&=wP1-+Ouh}+iKIa(?=TJdG=yB?HH~k z8;h1ZPTU4iTt5|&t=PYXbyu~zM4A|G+A?8~o<=u-!~%L_IKU&ne%Hd9XZGf)d3j@R zXxI15m#|MY@-5A|i~VGq6e_pOLEK0U^Kf>Wz2ZMBP`r7pbqkBFLr|VLW`=PSGVXai zfK?lI=TjdmfJY2)c+ovceUBr)x|{6VVws^(?J8|gE&AYZ=dVMaF^;Dugpq8n#nM~J zc(Ia_JFew*$R}dpuWaO#irn%40ERB0@eJN|q-!R^v!Q>L9da87uHwMtbAo&GSpF5% z?QJj0&jLox$b=RO$({k~K_>%_$2Fz&B=qkN=(A}5018U#dY!>dT0?sFk;JUgTFi{8 zG>whKGl0PcIA#O}5iCStQlsYpGf<+(43n<-S$7$hbL;7kTOPWqBagUk>>4 z`sl5`=_VGI>tz7FP|(2}`G?76A1slvW*|2s1Je|<-otS6N4ia|W(p?V_-Ipc#@-c6 z5!)bedr=)UWoXA=>1}q}OqRcAduECyRFdHD34+S1K>>4?%AdMa{VQL>+Iq|4I4`gD z%WDR+0$W&ZTg#R?3bLr=ZQd9wKO8B=bDB(-5{s?F%(j{%ZubleZ7YMd7k~iWlE4yo zap_u~EK4ckhTS4qZ8ZB>&)Oty(uOLlmr%u6mQvsBk5kAzg6PN8zT4rAIvc2U2C>u( zE(}OKsjVVXin22+1GU3v10?4p^HI0M>yP+KG^H!0>GrpFkzJWCZak>%VUq$j-}8L= zn{Z49zyOZ*t>Xlm{(I;02kuth!G)P0W>wj=sNIvfih^)S4WDYw)U_**59oF?Y5sM+ z)}d(Em%nO7WNp#}Ml5;2P^_S54UUv^X`m5kI);2_9*=bY0NNIMcBdwumRS)Ljb&xt z&Y+d~j^a56xBN$8FZN~5p>-VAny!)(%Qng+^RNNIUBQSv0gEQSRM=T%U;;s zd1+<+sUs}yHO#>ykVYTO+}pGJ!a-t41dhDdd*J)nb@(-V%dhO&H7jd4?fyxOQS5mF zd9L^?8YaXHaz0kiIW?S~w?x^TMzdvmtDB4I87|{!MECBF(mJaRrCU7tq+pPsfH>e+ zB_-T%k956rOlyg4XVm6` zLkwHvk~rh?%MJljNX}GqxQ;Ph@53)0LkH}s;VX+d8%tXjh6O2a<{1cPS!Y)RI~jKp zPoW(}aQ^_bT#u>vt4g(jS!1}mxfqP>J6U8nJ4Vf;C6uRL<08B|I^tQ?Ewni~?%LAU zPcBInp}TnGfn?m5Lmw_l>OjaRur;IL-D+EDZzhb|LeoRIk1vUGNecM{Y;2#Y$4+Y+ z+GuXPMQO9ilG;d-E@OdMsYM$J9od+3*Co65tt~r5UkYjyD$jEbizt}vP{``TY6iv$ zb#7PyO77`i+qJB64U15}(|jv6zR4r|9l|Zl&<~e!=U`L))i@nVBk-y}XOS=AF~6B5 z!!(g@CNiu}e|W?W1_1+*Mt*}=Sg^R!wFT34XVfihty$9aCdk$1A$B^*PIhiQ@yT<| zN8woQ^*dPOYYA>%l(({AC^=lR;2w%`$4a9ak|S$t zG;1{1oGZN9NWM}Rh5jrP!RNOXy<;uJDJR-3W|3rYvb=w|R0Lr%PC*>)AdWNF(7u)v zR~_M*ZFH?(!r3IHI$jMv6HL zOyWEPy+#O4zz>%sFd$@S7rbR7cw9ED*0&Mqt0LQ4D3r8vzUE|RKX@I;cqH;Lagkb@ z&7GW@`rXHE1lprOmqI%t__B?nO{plAM*)c&K|69stxN7G-u5_k)3n>K4Xx_mMHh9Ok#9$w+QAP(NOlAa8`y1i>FsN}kW)^R_TH0cyE zA}dSFu1HWDJ5+)Q0DwpoXgdzjHES!2>0!8U?9aD(MdesL=;I}h=5gzsXKy$-?NV7^ zPvN$)xG;@I)*ET z0yngsnPyT5QasKH1@KP*WbwscK;<_VQMJ+hM{VTDwzElL4aKzXRf^mN4J2fPw{c^} zH(-0_fv>dJGD$ROvBef;xQrNXP^%2O5=!q}1;7{}W1+0AJ6O1|y|soLdp2paY^Y;d zc3cq6k-H$1h5(H89V&ZyE-keIHJrloHDQlAmNw(&WFg5Ml~6$Iz&unm5jH*{_;33Q zU55Kg)TX?TT0?hdC}fe{zF{KB`#?E7ZN^6MI5`zU??{H>zRtE%d0;Gzv*IyrhcUcm zfX+)Cp4?;jO+j_x#?au0RF)`gt?mO~SSWWdcA>)k)gL0GoNg=u9Rb0|MdJSe3*2}v z+E2Gw_{wr99W(Ki;K#XjQekGp#J4)8Lvrue9AmpCDNs|pKJdBL(_!TrRHxgRAU#Guo9m(K4M2ryACS1 zh_yQu(&R{PEo|FTjvH&>maI`kLNo>!LNcxk5;1^dW6$5r`> z&1!gJ&d0(U<9)IJ0JN;8oto%d%aoJ?SovkKv@pO7e(B&ID=us6twY31c_h)=HTeGk zNsI+Hu%s?~0+Fc0kuA|tN>E_&tS&U>eJYWDf3^vgS`Q%1b8))C;%#ka`>h{Ww>-O&^QoMRhtf@opNx{cPQw6oGLH3idc zl4vE2y_<)d_f9qe6NXZDG*6t9jH%9etkbHzdd%8g)G^*%7?SarBe7=KTLD)fxf#yh zIudCtbt`Q~{=&}Q)%V2`%B%LUkg)~SO)0@$$^hYt{blVfJk{}DlRkp*>37!;b*DuWt*@Oq zFzqr1kf8(tjz}l20morJL-QY_+C#4CGHLG(x?9_$yibLU!*RFwgr?xkp$Q`+C6ldU zJ+yl5#jn|IZxS|qM$DhQ4;RYH02tasDLwL|w_8?=a+epg-N<2%VvM(H7wtDHfQ7*$ zC39_o?`UkM@(iDCkD@z}S7!W-`gAlB z$7$Ag)^^fI_A6hrd5JVr5xm>XxI6H98-l3YoNnjoi{eW=meyf6QcEJ;i6tP$un0~L z5l|1hSd)&Nj)J!?X4CI9mxkYbnueau6~wHjGcL^IBRxR`0C??KbI7;${#Cp&i6-9G z@g`ZMaxinw2S5*|;BawNhqlGf15LkGjpU3pkXgK8E57l(7aGUx z{B?*e&9C--=z?hCoCwTr=yH*M(FO z6#y{LKyXi?^lOW#w9gI$C7R#cU0bF8!4caE83Pi;<8tl*oMVi3&3SmwjW0BG;gaT8 zGyec-4MH2A2x;$eZ+i?abb>cWU>R5uA>37h?FKd@7~9CtTJ!s_3eBs@V%koj0_ryx z5laD$hRb!8OXTgs=NK3`Af7Gg6j77SC;AxHs1dL&zg9`#PEj&c5h`~nYej-TQkeoL#3LgL+Ki7uHWhtK;?9N}VyGl1bqA&y4`@xZNH`yDiBH^CGYznNn04W>5*9!VfTpcG|^7Pp(j;MSQN|$3i$5?_R~Fd`Y>~Y*$LP`(^dO)h_iU zw4BEs!~%6I96~}ug^9zGgnY$0Do!iTd}uH9Pafah>JZxalJi;8pHkUqBlE1xiWSyi zhypOi;kP3U4o+%f_bJ5cvyyYyGdK z!)JMK4eL&Ph{DNrfFvk4Wl(&975V}(j5ceW@Xv;I1bay4n^4v@WVZ%CF_+70pDh+{AOYH8XnX zNy$rNscO0Kbff^U1eK62{r*YkWI0$kCQicj2+M8;#MArEuE6h~D<%1-jHOFD|s%wyo5}w9)UE z%z0Wu0}{FWqzoMU=VINiX1Tk)S2Nn%-0yj#bV$LBhJDx=1myhQr1i}jt-Zb9i!b#H z7;W_34rto)0d<*oBc0w^lWyrSqd8(WbR9-?jgc=>oELU~@Q`ZO_E5=rx_OGL-Yv39 z7D0vEf~?X23gF~zJaL+IdM)M5jV;aO6JJ6dRTDe9nVdvq{{W9>dzIXmVS@#Y)sEeXo}>Mf*0a1jtjnQJZW`k1&TTh+(p|wRR(2qdC=$3< z8DY6c@o|jOYgUlzuWK}#eS{4hCgEYV{o2YI&+hgC_my^okUs8t?z-5kbs4AVmRBsltCZ{)*oZ#;24 z%%p#U!Q-K%)Afk-Elf%F zJ8eSV-bHx?k?h>N)TDty=W8!K64w`Q%^%LTZBpC?MiR8 zM=XtRIE%`QbS)&PR3a>$BLtDoNIZ^}nP#73d#lg&Gh47su*ebu0aCmYdC#`qYW9KQ zskNPM#vsOM)?w!Pjy4_GUZgh@>7}<>b>UmcUK!%mDQ3kD;!J z_A_g#d&J%#lKiBX7gI{Qlw)MX?P*T!yyJ|54*-$Rd{sSaM2k?8Jw4|0e6beOfUO`u zHZjq7&U%BICWhW!I(v7>Z`=!6)Suld?>Gaf+;;LYjC<5~o)Vhs_xEt>6JK0~YgLI0 z2a((Fl_M-TZUzWB&rA}*>TGyd#2S{5q3XJHH`cAD>L`~|B=+$$O|b6S6q{N|^PCb2 zh5&*w%|SM=V|bQwM$*F_!np|=2Wap|-d~q#B<>wa9gSsLM>VdX*Aw~Hw-Cl=W-^s1 zr;HU~Gn0egjw_w@0m-GjnEcy_R7kdj(M+&4kf0|Sm~t*oO}(C;srWp)=ad7;N}Igk#lO7W6C zO*cY@;@eS*NOfk@=C^N_cafGr%)kaxqabmTdjY`BNqucS{F6pL%W-e#2%=*#^TB+A zzz@CHbB?4O8m+`h=F6(b30r?Ue>fr$7DApj5IHPB&U22w)igR~!oeP;W|7`o>FiDH zvJJjUi7>m#;gpkrSGy6`rn-{q#v8;)e#@s^OB$7#bL2V`{;ji|;JCo&40_`=&}a#x zodLA_$nGY!w~Ay~68OfbWenm$ox#9xj8x+o%KX_CE=5Gk(6s1h(_Zp@E^8?yuyq0n zBvq98gf8KbFb+ZautJ^>6}di)&|cWs1oOmT+*%3mK7S_Rk^I9R6|x_k^PQmf#cAn! zG#57ZQ0od7-r5->y_8xBBw6QgG$ZZ6+N#^YWhW}YADCjdjP!XlpAt=baRQA>#rH?{ z8Dss*tKv6h!3n`{lO4``RPz$kGjti_)fz9iH<;FXdui}Z08P&-Ht3Q<%1MuL=ytX< z+;eg-4_a!Pte#EFJ*;+Y@-c;$2|~BZRdKmNCxAOIJ$QRv+uP`OvDw6KF0~1M)NZAP zgtAH$e(h8e2F&t*i=Lciblnnb{{Rokb8)C?8cSNMMD~{+X4pY035+P*GP{=qkPhyK zi}e~Epy^h6POECy7IznR`8Q~(BPnl}fCFWMkV9k;7-yW|)z27tHu`QKoK_zCH1(cTY-RWV(ELfI9^D@5#0fGwr z-3S7c!=DgzxUZyPV{XR#Ahf6+L@ai*yBtu2SJ7u$s-pQN*`CVUubAl6}&rDykHM2_Oufr>fQb6qmXugs$yx z#jKWE8bz`Y1aTwB9N~j~@13_PQ;<3g1B1tmmC`h%tnP3>7kqIHy0o@;mxkX0W6A5Huq?g`|Fk9sTWM8K~bnAHhIigKxtJ_>(TE?(_n(i5Xc$zKYV_aYbZ@fSQ zBaEEZ7siW=i_eG}WHMqojkUAP3Nu4+UR}q`3OOoYZrlO#jB$$T{C#Wo{{SEB5v{kD zt9broHu8{=J8j-$7(XuZ(RfQjZ94gGTTr)~PtjUgrn`by&HQSi z-XXbnDo6t<9YK7Z*aEIWp{}uZS#La>duiLtj(dYQ*%X58sQrX$*v3BTUZ%O<3j9pI z@XgpiWwl8zB#LLWy4xfWp?^088zAH;$T&W{oKk65?e=!rbqI`0E6HmlYaC0Qm2I6k z8%Pb0l|ZjfH(Q*NwT_C$!F5{{3QAf zymwGdG%`-H+yrus8>!2&Y#pnHQ0#I^JPZ>}xbXeffeq5#G`3SqXl|Ak>d_TfQo|fz zHtYkPqXhNE&jv8kWsg*wP_?yRwV5sAOrbI|ITDvRSk+l0Bpm0bJu6;@Cvl-Bsb}DG z9)OxHjn%H5cYk>VB`&0Ky+Kw4bIPkA$s1P-oO9aQ{{Vj-t5;sVTPZDdU$dXIYYve~s+K-fgh)Knufl?^-29*pndZ5z3gT^6 z+fcl`o=C1VLd|ZzR`;2c_{@#@nWnK_8d5fYF6iCAbO( zGo0rG;!niI)Vxn`1ebB&S+%S-*H@PA+in<{H*6dQQMpF|45%WuEOjX*7V>I@-Cb%D zEb+k+@`J+6JfNrsCEX_O7nSnzc;dKU7ixO9h5SS-!+ZQR`9}-D`6uJkGP;cLXM#b=nAr?0gHL9oXM6DvY z5w__U2a~~KbKj>G&)I9*hNI#}kz==x<6wmzLaXJmZ@i}`ZwbXYF zYS2sOg;gV*Y&;bkazhOBkw+-`k!MNMm&Et7E}d_0G?NdrppI!GSb@ZEEP(UNFeI@6 zWAHSsY^I%|k(NkoqX-^$a?zm-Mo!#pZNZcthal&gurxUIN%ZUKCYm^JBYRt^BDgHh z#N_9Ie65B)8^2S{bDGA#8>qLBY>~o*+mOVG19OIB#|lZ#2R*Y%uEi#L7sLDATSV3` zbqy9cdOr!j5x+T(^b%Z7e^#NG>F`xQQYP>98RT2`ZfqFitbc7j1y+|*}W*NW&vehuTTJJ)+)jUHpYt!CX$qld(2_;L1xVSss z+}sl9Fo3|FqX~sl2Q|*g@M_1z8r;pN>K;TaRZ3eB(a9kW-!ATaydfZ-yR+LB*m#$~ zI()j~?KjeE6RXQ4a1XPXRG~m)ZJU?_fx`VUVcxs*Oi&2N?A@zY+L%`x`@wHMbvSx3F;1`RrCnRzRjCk8jMU0k^OOF2Gz(#U3p zLm&Z6fri2X4q1-e61h0%oYS>CG}g5JKTDS1T3f86M7Ef47jRUJ^gC6V@;EYvC$Oz~ zu8DCZ@b-|y!|=kEw-&auEONquM`61pnzx7|wT&;ov@F}~ zw$h{!I1tLC%<_)XLno9n2<33t0Fo&+`#a~o(a~+dR=Sb_9n^m-vPQwaV4;~+iv}!4 zSw=bj*8{+Ls_gT5R zw`o4va~sHP?ak3&vqBY-epLaCfi~_WjnZ}?HgbGT;v?d16Hb;}IP}?oh7#!jcD~4E zRt=1WQ5ng|Y@q`IupM`Ers+4z(_7p_CB*jf;eogP*1`&_eA`c*l_Zi%sNs37uL4`$ zNo#qfeX~V6Y=y4%2Zm4{=thki+wGGI6-z!#a@*QLyA?o-g5F6iH2c^?M-Hhlk~>Rh z@+G-(wUmvmxU)#A2w#y&T%HJ})grv{B-*rk#FAOwPYaVIu!TwFju7JoTg-M-AW&IY z@W8MFxjjcuyj?y!D+pqW>f$dn$hP}85ALe5DrFu}A=3xHQfc~X+;}5Jhf{{~-bk(P zNRV4ii6==E^1mkSn?6#cj27e8h^7u*8P@nWT(h$Aor#Smo*QecOPiSN-~tqpZa1WJ zti&vANN|4WBxgK*&flb*ENwxnB9T~huJ51(scyYrn^UN?ou+8MAJP^(#*+CayqakoHQ%8R`cat&6+M3wUizEo-c5 z47*TF3db9!)$|- zQu#b7;w!B^XO8j+t_VqP2?BK|uG7dQ3}dn6^%Z=#B-QY}y{?D|!34i5 zRQ=MR1Ir#MJ@p)QG@{XNwM%mxH_+PYwtIvVJfV61_D`AlSSnQS~B+RmQQ!y?Uj1o3}p&*X`jAHd>KNO1+9GL`tZNWSlmJLzS=fNUOB3ZY%2BP0&>xp5uB=wD;AhSuulA2R9x0CCkaK5+TVZQGs0g~;k@JX5PSk7uUX z+O@RWg9#%`gmEi8dx=`X&tAOxPiA!j(nmMg!ZCHZU7L!jQ)2-d~tl20voGKpSw45SmH?3xKMn>0m_0-a?DP85IN_e+Aip; zTT|-Kf|lCF&+Ln#JH>BqwzB!~$owtcqDsNt00%pxX2Q7{DaH;Bd2j6nr0Uuxz2TW8 zxVI^Ndh*!bn7+>K2~skw+>wFFBO925(!I0xf77)8033eDejR&RA!u~FQ|3q`V5Q@E zJjKD}F#w)3kVyk4kDop#__tB<<*5f$j`}?ZSuorA+vPB$$Df_s<_I~*@nwe`SBZze z)@1!n<*Kof6p>p>)2+C-j`CS8)L$}2(Z{%a#KxgikM>uS&{o%k^egY|YgUHy%(u05 zWR)RAxOIKN$bkIYRIeMlo`a=UPY_&Q_;$`K=`7&4vp|Mp7?MdCKH?7IK*sFn1JLIJ zujsnmYj2J7Y7H@pD_O+fyMd9xEU|_8+3*k&K?Al($F}x4?3){XqTFgf=&-8m2&)`t za=Wu*Au`K>xQt|Hw^3Qw)==2#c7A@H4VBc$5P?r%X`8rHLM zVW{0laRRJ!I*rYQ*(-3Z`@E06&mFVQb6NVwjpNp}NhOjP%+aekc4AgWBlwq)K;&Zw zttE0Lp$+}qGs9|cm7&3~!u~7MZZ8&ln_GD;*6TA)lKIg21&nS8 zV63O+X5E9?xaT*%CTVS_>k?gC+1^7HHK^Ex?VS=;6;N#KE=;<&vweLlk8 z#%rrvi+!`1oF&Rh2b2!iLYUkSILIV>9<|zDc!>Dk-tt&d+iujw%a)bqi9;hPE48rX zug$^A;{;IjmCM}~=h9<}!~03D^jUm~W4ik@VQ!?^AW%_9&$WXSk&n6BxStw$&Si6B`PKQ195pK`3$e%G()>-VT`!04Z0ziQz_;_Y{I6{#+=UdivL-%hRm*ZXbI8EJs){FbpU~~Cb$e#F zaND6&nmIz1SY=ireA0L-*&rUE;}wGU-fp^yYi|}dL|LT_;x*22M|_djHPmZ<8k*8Pv6}uUuE zQ3|T8K(0my%(&Wk?5*or-X6JTxYOBnD~A5ew~)lMjf!4E6{A)hwqqoc!}v(8ON}M8 zn|SpGI(tha%NoF!;ioE}CRhWxIvu3-3!e2d&=Bhtn^W`Tjyo89lsAl)jKVmTHxj@M z>@56%c>s3kHtc1CQL=()VUkkvCBa5slH;E+j(G=+b;-^+&n=+%dOcG7E#$#ux;vR7 zQ6^bqZK;oQvmoFBxwD$?{3&MA#H;en_L+maFPn%Jd1u;~ViPLIgU4!_5>I8MPjPHb zu90u{duimJ%uK_}`#251%y#)oUAllz+e@&9 z`%Rshrh-+LGi);Wj|IL{xpAG@$V~fIe77$B!&&j;Np#w!sImV5iGeoJB(|!bV<+zA z1_NL-V{Zg?&myMLVw+2l!>CR67%Ze1xC-|+(FHq6;quDd6?Mr2I0F=Fx@oja%Ztlh zS#A`oghDcfE4!rV(G zj1tfC!?=DB?adsuDntk~R6%^JlPpv(oaFyV&uIUsG$bB;5L>aTS>iS2J8 z(_?E0wOc_PamAQYC|ng0LlU-RA1KSpI+kKPhW8b(xmU$r9RADJ^gB&YQf)rM9kYF= z=HoKOmtiVLu?h0z!8s|sjDgm$>wFlC}6g1H>IU>6R90dNTz=LcBRZCAuFMKfIfeUdfQu8q{*S+-FP&D$Uaf!aV&yN(L=2C2@vmXI{5 zqY%w%@g$Ct@e(Lvtc}Sbc=?+>Pio4J(#ykeG>vr8%9rvhM+Sc0xI_vR5CVc<0}ap3 z#w%_sn`^yZYls(8o!;!Vv5f?3sGu2Rj~tfV2*^8FXN;PsphnvluAQ`PLdyCGWk}|g z{J3q8o~l%U&Os{3H#T;hjEwV|qpRIATDF-Y`FeQG(mX0Zee)`bJA(rB0l0ba?jI*~=SONb4j$mMcRF=tgKMXzHwY|eGn4f96StJ~! zyzO3xD(p^i>~oN5dW5to_+wgYje5@Bd6)OhRzK{0Tq^bZyd38_#s_=NdnUDU zsY++KXyKYhjx}IB&|DYC2au;c4srO^Jr36I!)85R77!68?Vk%N5M z86b>R?+r^Faoh=1D_sC(k)vZ8u~u~@V^g>iNjr`~?Zzm#Vs*ZzwY2($zK?Nd7@Ahq ztyKg?KY4W$l~Nb7qMU=bla5VhX;%LL*sUWX`ArOgLch-%fOsV2oxd;C8Z{QRv->lw ztM-cvk18jMO{kCtU-d+SPu_e3&jjG{QfW}Fj+cFSHO85*u9*#_keOA6+=%?p09F8> z`{a(}EKbKm;t6dMS?>&MYYw4uXJy#3ZBk1RBH2m-6PO*)7GSoW7Y1hR>muttr>-tim$C{3#3`e zYjyUovf6+GqpXd+h%zx&9s!=BiqESG}h8v$Gvu{$Rq`# zZNrS`a0ea0&M{roHePpwyhx@Qq-4}B?4g<~(yGv^2J-r2YN&2bGtaGgmxi_L%}>QQ zQ+bfhx;CC&knLGnak1HW7#TjfCp=e6ulSi^@Ghkr0UKUlMDq=&a7f}&yN|l07RVh* z9gT3}qwlYg(T9HWEPl|l+3TMVygOrWGU_*X7cnoDDQMYWX^k?yS%Q`5bH{w~&Hn&m zTR(^4xRX$leM&HiH<+7#&nMjh+@6gZh65NoeU5K@Y?@`!pmwh_*0ik#m5+XB)lv=DM&y!X~x( zj-TPxgx6PzaUz+ZwYK|2^Cami1#l672*8rL=OlHYmukY^FlCPKZOX&@pWU)2PoF2|emY?Fu5-fr zwzVT(Tg`oEb!TQH1)coGi89FfT%K&kna6zsY z!qMv=+txee)h3SOcaWQ9!^X_&vZ`k-vu@v*a!QPMtuGaLuy~h3*6wu;QcX7U`BvGy z#*oJ#bB6O4JgTm6NGrQIJprlZ1E|vVEk4s&)tc*4vAViz)|Ly%ztPNa@5zuZ-`+4I zAwj`lSm&i&(ygvF4-{SLu=`9xbxQQB*Q>eHB*AYvFYWEh7BJ+qE`N77(>TkFj> z_TNsjx3jf~h~XD=Pcww`8ZGRnaCB)ik-P#rHE7;^MbrElJ-*+yJ@uSrqc-zAGfR)X zyXM;pGL}=dwvgN@#V%gMUS~lLrsn)yTH5Ltl1(gd&n)n?Z9FO$F{+$~0f^2{O9Rus zk)KP|wCVM2TTt`u^ov$mqqm)eFwXl%1X=y(F5D<2vW@^1;1-`4^-HfktnGfsZ)}cZ zjVEHT9m>xBjq`;husO~<)D!FXS2}c}@twTsh1{~=FjjY5{_p|Q`@9?yM{!HovGXI= zA^5v*WFc5|yN|NnTt1&2?x1$QR1MGN;Fa8kND6qyGn(W4TjHDNv2iu?L1{Fu`4YH> zHS;jB?9SI*ws#(Y^UY)5-z#V~a?K+fb-R)RWPhFqbx9Kgq4^cK1Fkt0OGee8o*ybm zZSJoy!bOnCH!e44<;WZb$XpMUbN5n><@k{l7Zvm9)|@6TGVH-xNp1zkaH z;fCKZtUqT^+t32IV54gAgzwt!c6>cJaw4*<{@D-bELhB10Ow1y&)0 zZy&CCu8&F8G+jeRx03EpwcFXt5?rm)`7!rHzDcj7Ae3l#_vx#&S5~uW9}yy1KesdpkLy zXk`}(_IRD03NB2g##n#@F*xJtS{IsE*{vtBytR$wF7Qb!hLU&*kt7Fh4&?z{72y2Y z>seA8y)(qu(P=l5T3t;vwlcu165kRlt^<%)%i2g`kVo>Z$<*}QON}4J-YC^AuQiQ7 zP19~?np3I9Q*$W}A=_@a$u2_VU<~KAa4Bb{X}WgpQcH!u+a}9(i0^4KFeGi+00LVi zV}@ zOg4?ppHNqfdjUjr3k=k(rblQ$c^MD(b&f;ey-wk+TJyTMeEmKsF zO|_0TzPY-MzSERN{{U2=5s8Z&0(+cwHOC(jzM%7LUpmg-CzRXDHyDRdeTmu^+Z8^G zsoPxX_r;--)vrR7@}}XGHsQD&<+ms~UiGG-WOUlx(cQFh!EbACV)Bz`Ze%h@Vr-El zrHC%s0Bz0}X&B&|gTg*MyzuV5d;OVpaWl;kwQx`v@6+zIWgKlP+~gee2dD97TeX69In%}%Tk*#dQ=2eN8-(e@a0(0-k;+HMaHnY&` zVbY_&wGw@w?DH`)OCxPv@H2z}U~McIoD+_N9cwxZh;1zvWS+&^7BJjHw`f${04l=( zf=TDFIqYhuhWzb2PV!=rM3)kRP%{mRqjpMt(x-w4UzFEJrD?i*5k8@*Tj=r3WO#zx z3z;Pwa;3&V3eAn93{KOG5k>4Aw;_?w*j1Wg9gK6saNld%;R*RxMcbBS0f{&SoGHgR zt?RuOBR$l%uXVWF5pN~bsIgq{7>pIbx)Unp=gBLhydL zmR1^{{7)DAX<~{9wqcQm^+rwPjl=}`a5>I0bAe-0hU#k;)vvzUHQmIInI?}COw39+ zEt8YANDJFF!zR1`00`~1zMpk(ZmDY|vPdrNfVoEu-zE=6=s?dKi5N8P16x=;OL+~- z-0zOroR&UlfVvW-24Xmq8;R&MQrA+geGbn=Td6gLvA5fA7`GyFsL%FT9!;z;I)b1Q z4@0|=SUx-Wqja-fSz7M4-3Ye5SurG6EUTS`lmZiXJ9?76PAQrP#Aea&?dF>Q0QYd* zkclwcBCtP)v%T~6P8(buOO)9aCs}#Z5*Dpn?AGl>&a8heU}k$aU%j-A1)N*AQB13 zaf+)yh+D+BdPTI3u)%6wB0+7i68LW~36r;=9WjzVo8B0@wV%S*lV3?9$vc2#c-3Q- zR3kV;rm@8 z$5fv7>KJaIj^^S94!%H>YsTL&+`%_5Oyq_GrE!q#E$`6|4h5O3bA1*#;8Ne0b zo;~p9ui-x%U-*9F+DSDFN#%|Rp>rbKM!PrQ4qI~oGBbh*CyMj%H5=-8O(wJ^({;#$ ztK8d31<;IQk?L9bf(IUGrEq`J~|6^0pRYh6AS`)28v%}E1pRe|u$v}YU! z$WxJnN#Wlg-0An;b-}o3ZFiqO8?CY;W=D!Kyp;*O6M{3-y-N2Mc6tKeO=lDl&g{N* znE|4dGCJlmFsrvbV1Nl7aZIq$;j_^7Mwk0u*>09Qn1slQ9meu-arfNwBL+APg(M2v zGEEps57ZtFUq`V^jbW^A?yr39MdyHs;8{GgCB^|eaUo{yxkho)lT?x!Yy#=CY8O{h zB1Z|G5J_;w%9&L%aAW|0xIZg%$rTN@si*1dtyo{gw@DquEGLfS%MffdZ5ql`9$Pbm zji>!f4myYF^J&^Yh@pGSsjXTp!v)L6s~~c4iipJEGXmj>+!TUG6+M8i z+4jFMkj9`&p_$8x1~(Pj7Cia^+O<4Ubq=4Z8|ePk_8X`no+P+MU5=oviy-LIe6O4? z31C6wRb2wjygw(GHrVd0;D&uCbhgtd@}@GMISx1BLy*9deqX)CVaa|kqitCs({3bK zE@ib?UE5-ZV!Ssh>$`9a+3C+1sfyH(Gpf;`y0C)k(48w-Ro5gvq-o zW7?_&c*yDisQ&8q1Pdm?qgWi((-1MTrzGY+2p|aO8wARJTFj1VacvMdTe%a z{j&1n&Bf*|Kyv1hF){{TnT7U~B1OnJj>t;w7zc4>_phmum_X5 zfB=kD?RUkRcZ?qUUGVOy;u&>|i_zieo>LXLhSSRdrJ77_4KQX*srf<65yfev*f~tS zQp-`%EbS$0d&{dEh`_a-E#!{Y__Sf95Hk)6bjcauw6^+P#r?(alB^UY47-wY z`+)!s2FxivjyFsZGXKsAB?V-5O*|uZ>o<;*UPDV*)JZCkWqE(Kk z;qQ#~Yg_50S*|0AZOybYTq0dZ32o$oyZ8)+h*QuL)K=a7^wzo@zh}OV;`$dt*@w%H z;y9RYkR$Dks|gC6W9B0q0bFN=v>jW;+S<7eJZ~UnS7jzfCv1*HXCW8{0Zs`7Ry@A(q;Fy^cUzm{ zBpRldXKuRH$J!&d^W}@nxxR@q6}Ih6I+e$DIbg&d4?CrOs@*IjW&2l?6w7ee_hJt! zG+-BK$bT{>FO|b?9SIe7_Upu6B-QUBOFLadUXM*k;G0RF38zbZc}%6Z6C*PaT}dpV z&PS#eo2=>6S!waDjg88*=j@g$vc`0)l8CP%Bm&r2%YnJRW9)Oav?t8zHA@KOit+`$ zv$%C|7|AOvB3C#PvhF8hGYp=a*baJ9>vwWZr`ba;Zw8qX#w3S!=|1q>2_Tjm(DJGj z41C1!NOYO>xuaX}ChGCz^GuRQX2k-B-udT;P(mww@&F0OYaa7jlG<49?cr;CIHGH* zLdw?i2;*W^BqyYdNWnP(x|KN1NFsY%i^h?luTbO(_(9|{&QMnfuz(8r!j40Nk-YI;tu9g4~JnU?nO zv);=YBuXL$VOb0LQbY@K$CJ2~10jzd`n1;?Rg}_5uMDyja@Uf1abZ}hum|oC6^;Qs zW2vD#j>hJ#;w!tYIyIKg(@)dmQ60L+r>5gC5rt_!ZMkJ7U*#Vw5y-_ysd&9t!-B>e za?!4DLeB!RgsBSTzHsXQ05QhiKJO=*hWqULTyUh)NoRQaZM@Q3`JQ6md5+#$!sp8) zfBLorkh#W9Vq4m3R#r^9g5GJjQlC8pZlt=23UZC}Dc%b7<$UZlaP0C-x)(~82cg<}z(nlS_+iDZM zGQ$ffkTN2$3dKMq6UKdOpqE{@)-)?Ov$BTGS_zcJ3T~Ke07%kE6|s^= zMn0pY>RQgXt4DRE$#JXPIlZ?fM8f_M6&;W&?_(a|1Yv?8^DuIvwPMt~%eIqChB-8A z7@9fczF6P;K1mR7xJZjKi4-9vl$BzHkO|E%FjwkV@i&MUT}v74XWOb;hA9kxypW={ z)ysABG7AtC02qAS*CN_#>+ znu6+HUXgPv%GXodq9ftqAgg&2F>ve&2+5KeMR2|uvb?>HJ9~SmRvk1mt2zRUF&SVV z1A>8^@yG`qs-rCfmE6M@nwGf@y30FB4Uh%nJAAePY(&B8qi|!~oYv>VyL1 zTnni!bUD1+Lj-0uX&WU_F(HU-Zo%q1)gKdRtE1@A+(k5zS|@)4qA zxr+r2oB(o0C|>G1g~y9kp@dq)tXoAqmexfcS!9;nY)_bWCw|k^wtC{Bit6LVdZgcO zzFDpw+DOt_X9*D)FT(+iz=q%q5(YUn1#;?jo*SNROHYm#j`H5#>ecPm7GlH%hjGi~ z6pa*Z+}H%*H$0wOPnHR%NQ2xR2Dfsl8Du!4C900UPv%`QuO+4TKF z+)Zz%+AY=mVsG8NWtgY{vSf_y7&suDhBZ~KF1$&l-Cyb!v0O(D%nKY=NRj=twB<}F z!A{&NhAu%MFH@09!<0;Wt#%ZNp|{j6?iP54%T`m61cio6amGmio(BTF`^B2X zP-=2t+gtfEp;*)`WmWKUPdPa!=G;zs9+<7&PsFg#X=`tPX$+9tE6ok4gkhw0a~|gn zxsKvF;{i!IHN|Us<6g5Q(fN@_GtBHHc_Wrd6=imvQKZfaW;S4;ec%rRn)&1QmXqvX5%mk7Gj+nr8%cL(pR=rl zl_M>U&5fg;$2l0UUHA{-zYt6NF8n`jFxbQATw+UG^ra?8kzwcv%@8z&?2IGu_$KzcGgf&E-eY0B4b*9^y!G=B=g9Z`} z$DDu?LG;c#*R?2|w`q;N@cP(U$1VJ_K*j+rya7MgHy&FKcB=Jl!2bXa0OqaD;r6l7 zWYjJ0Ev`4VALMWJa(Gh8Mm}XwSYv^=)~Z`;_PU+4Rx>rco=PA|nnxxwqjG?H4t`u? z10?sV`d+iBY1-cTBa$S%A7)3%06772*&%w2Wq}-32(PT)e`Z9le6UFy7}?byYe1tQ z#79lL`8n~6lUJi0W=Acg%NoT65o)|R~s9SxG=`}C)Nht&g7j8DPrqYFu z0Vj%DmX?MujAgymr2Y2kFQZ9iby+fCY?CB~RD7c(Hym~26}|BH#%A8vOKGo%+3esxzE!4c8SH zg>NmAYa1KIj>S^(q`C8BW)}_euF$Hv#uI_iZa%c7st!|US6SasYk8m+{{VjKCutT_ z5iDD4FdJE$+zfGoFl#++ZZ!QRWVh6q!tP>c0PsK$zw*hFHB9{dbF}a>JqH~s-R86; ziW{4Pt#9QR%fw7CwEfV-7!BA3$-wQL)aj`WTTQyPYjV-u1T$Q;Eap6&qvZ!be`(Kr zv7$wqCCO}nIaz1aq#Evufjbxt<{{U;ek_VClbc=Hu$UMKa zF8!>hk7gMd>6{vZ+f%o&i&TQ@YvsI+p^r-o8u>C1X zGWtmFSl?QZpuMy;;Y}sQ&40leUl2`uWg``bbk5Oq-sCcX&$tW^kYk^_$j2nsJ*&-W;|QaU%TA7ewTbPv zI!O$~oT~xAZigYT2TTr?=o%h_ajZc!ki(~4Tk6*h4ARMQi0$wiR(t{nP6w&TJHN+Pd_K?m{T}2S`8g3V9C5ZdKHq~Rn^scK+dtFOY zYpd2+?U~VCV25t$Q!Ip!ls5wyV~$REsSZ=L(0os)>*-@=E~J^Q?jwN8=_J3|u*VtP z?;{d$8H*~%!<6cy0<(Ng;u!5b29|AaaXgKA_OF^^>n;@^a9{~nXvWgH$XsKSk&$C* z4Tar}&`B&~x!(=phcYxy2m}c6-)JKQjN}^Vd~c`P_&dc`>tlDTL#1kl4MsR8J6q>g zSpC`7U}ZK_Kh~_5lDs!x4~?vG99B_Gcg%f&hL{U zj(TJ1QQT(Tj=)|8sv8It*xw5 zZ;tKmrVA;H%x23c1yqpA0K;SJn$1rNTzGz4rkQS9MZ0MxSAr=^kjfN*+esx$aKmUL z+~m_>vot(EtIw%RG;48h4V}7{mhR>co%sbMJ3^P-+lQ$w&rH?LJ6(mfogz7*hB)-w zduxqKQ0|rWtA?0w<_wTi5^i-2bgx2#|$uo zpsY;-`hWODb-hB;>2Ea+N*L|z;Z+c$FP#%e#c~~6s8mpQk^Ca6=~{i|wUyf4Ngg)b zDVZH(OJ{I*7u-($_}lXQ!JKXRsdD!xQ>@lLDa)>E*B5h14YZ94mP=r(9i+;4F=ZGk z8~~(e41YSq)UV{8!Z}t;jXq1w_O~&m>oB;9&@fj3+$i#V$y+~OA zJRIx}#c_&UsT8(1G|e^`OwaZkhes`GZ8S`%&9rUZfTlCGR~ci;VsV@bcAuc>x7rjp zO?`DIlJ6r~%F7Gcpa90m%)woADI+)_?(2+KHf^KTUhRLU6cTz<>7R@B`K&26uR&CrYd`3nTZOVU&@$94XIIDouM?j@riYV}kD8W|3|l z-X>FT2^kV21{q*^3IW=ouu0od=~k0NpvkI5rrj=%8Wy=bg2%auF@SJNmt3iAbpZFR zStTzHEv}iU{i(v=GRSTty1?>w@wzq*jNss72R#qIrQO}B(!ASvQaJAQ6Edu^BFnIz zBHSD@@}vd9&eC#mS{A5uT|Q%RZ)GGl@=G)lTigI;fU3MvI3vtbvUPF8V6Uxn`YM0I zOJRAX+*{iJ0BYNRr#$fg0I!ZCkl|NwR^SYblgS_hnl}~Bg3M`fYoBank59W;Ba$sX z`Q4WBnbeR8T!h)UbAYnTHp>I#jqFyvuF0s-I-y{mi0nvC{#_WuB4@^rZETwEcyk)Pya zk%t73PH=a0=t=2ABJ65gNj|+}ADs(ns~g=V#?)6u5ab8lj!Li?QJjuBtxan}vD4r; zmiE7FwA2-oPnI^@3}KfpKpbvSwCB)vH0>Ylnx2b!eQLU5HI1pgSXEUnVI{c1IcJnE z;iAhdf4P@;0QD+CAH&z0&(m&}`$_)NNiAZHS)pq+%R4DT zj!Lk?gnU0aIgikTMfDTZXM%L;t+fq8@hwhdftDXL<`9QJcqk)tDb81?KT40rS|+6j z!mIh=(`1s*QM+kO&?|0X9#AP!l14B|>@(LDbHR3hZNJtmOmXTE#|lQlcX@IU#E+Y% zTdp(cI&octc)mSH;Oy3SS6Yp&_nh)ZLit3*I3_0U0A>shPs@yAyzEr1HR_I>Kg5oI z_LS3Z7r<5!TiEHzV{t9D&9jSG2*E%H72-@=3y(xwMcj+g~Kxr4;@BF zsq2cdY48ie*7tW7Q(4;DO$>pgHtNdG(*R>(ASWP$l6nka;NrO`=3dS=v9(Hk&zSi( zH<_TmGEln+NPmvacLO0Hc=3XC5(mT z0d|hBwFrIOVSy(Huiu()z^@7TUq_ldD?3|tc$MTC0l%#cL}ys4uu8^2Kr#7gfh3_N_kw2G87@4D+X_q zzB$Wr#eG3x;NK7UhQcW=>~F1SiZ8byT|Q$R#d5sA-BNORK7@{yryszN4(iaX*H*F4 z?T34HNBidh?NT=cRVNq+oYDQTyA|whx$%y*@rGSu&he}?yGD)}-)^q+ZTI-2-Y_cu%ko~EOt4K_7GLMsRC))==5ytG@Z6^_#5?Q%zQ%ewzXrzvHQFg{cKSSz=MJqZIMm-fB(i~GvB(BlP=~r~$f?7?r`n(@!dF{!D z7#i9z>Zk9gu_{SDFh|yx_Op9O@e`*L;hkm?tKay8&AGMGbxT=hvPkbFSnebdO54%~ zA0sh`I7?;VT{DF$0HC%SQ#8)PCmF5`XLX) z-wWQ$XK`_*S=>y;r6S(O1y~p+#$CLRn73}=8mp>!BS>v}IP~2=OkF1GbvG((e$Rwa zx6R6fkKhDw2weKo{?pRxKZxT5&(9r4!*b_yM3vcm1Bz zS}oPoY;G>rKRQUs+Dn&WFl24&dCm@UM-|ZN-v)I1y)RGx(2C0A`yL|%MJ?4pjhLJ$ zEAoE`$mzIajMaZ?HK#72?9utpW8(WYytw;jlMBrpN|61Y50X&8D!Vp8*xYgI*~WOM z+<1#pk6Vsw8>@xCvUCiv+4*2I6S!_I#?V+X+w~u?!=kE-Yc!8f zK4db#-}4zsQa5s>V{hYEHEj;hYfEQkq3Tg-Ua6#yxVD=}{qx)6w%lMV- z(eQ4YZFzBi(@Un@`FBuH4xWi=68VxTP^wh!%9RW^o(bAB+PVEtMVebnb9G~@d5)e$9Fn9#+!S%1PymJgb7>f2gSoC=$m6}g9g_bvcp@Nq|mQ@627&!-m zMQiv2#2S~3JTY}|bee3I-)K!bdv&){Atp2_AUl3lAfEeyUVs{y=MR2S@}uMfq-tI; z@RjY{Qd?-L9;cf006)_8bdaFHK4tmcSpo)b2ga;WxMpJ8a7jG;-FX04 z(z?IFe+_8fC(&%RFAm$uZ>YD~?b0yui-y|3=X>l%V5`F(H*uboXU1Q%pM{%TySN?? zw9>8$y_Cjzm7N4(PthAZ1JJ61KJ|2eX+)k+Bju~TK4YS`!6){FU%N4|8&x?V5y1zH zjQaI8HP3`EUe0B=)2<`Dj}jSMV|lTKRw^<;RUq(JJ@a2<_&@e=(=>auzFP}xZAuG4 zYPyxB+AYc+j_JuN#am-=Ml+08YvHc~>H4368s2F1{YmYkbb>h%8d&4rr6V$6{HJLf zM<70V6`Zq1z7!tKTT|e^LZmAp!7Kxuk}wDu>B#%1#l9xdJR09@Wz*fY2sXxH({nZL$&6$m zOsQ6KFhC@72_0(hhcwAGe+yiut#PBt09b&$;~lUzp8mD>j)CAECs($P61K3tf}=+z%7Z1mc_aoo&dl-8O#9b4H^NOD z#uv+DW8~W1M>x7!#p^Y-)MF|bs3kXLSZ(=v!Ok&RyyjgZKVu%J$d^A3^@uJDT zhAyom$(2lW`9Rx@bBff~e`Je&Ci>_@sb6cpT&Zf3*jm2X7~t|q4UN6PBL^cj>AFwB ztM3r$(dsvXXfCcVS#Kj>yBK38#SOUp>=Y0it~kzXw(zIJ@9dEZa!|1xO%w@dmwjqr*0@bEsR}`HL%F%B=T55xPWG0Z?Nq6y$~( zVZ?&ByI1*BFa1u6m0d{?e(KMV9bn{#h-{h2x&ZLB5+MQ1Ds z$s-JQlEkWvW2mb7AHr`4_y<9_)9v*A9xE%R{{TZqh2=v#Fo{*!i!t2n;Yc_HXNroM zi=@}1wo`0sQzc-rE52!*A&h%B?)OdP95!wa!YZgLKP)q|32KjHrX!wa7rYewGN zShJ4#U&ynC6z;lE7%@OW1(b7wMtR42`h!yVDd4wArh`XRhfi-bUPm;N&E`OJ<*w%} z%%zm}1QI(`w$>JZ4mB%yg}+qUIqEEHg1;4n2?#a zLj%`1sb}yXNs=q6EbZ)Xq*wD~3WzPPw;*B^5rA8E4o)&V^{b9(*Fy@WzR%E;^pY!w^=6B+7j>%9lzR*$LpHY+<+wXm^RzFTPHjm4v!w$K2;&Rc_yK_r^1 z<4=Zu9nhqQZn1A0e75mM?swk;7i2)G_s#%3u+BK9vrDZmHBL9N@cxge$9r_jy5!pT znHjOUiYsX5zIfIk8CQ4uqw?)iat7mpkzH<^aK0_@WyE@XKiIQctTuMgO<+FPagt+q zL{-339!ozVjyeJ>>jUu9NAVAZCb(TE!igH&Ht6o{qE@(2NOIdiEuDv!=PGkq9v}Ew zr2Ip$n)cVp)HKzLbQ0SzY(yL6A-5ltl`DbVdsdG&@?^@Dv}esa2Y~J*vXX0EM^ss- zf>^?x7UVSPEKeNFu7K^raz+aD&N&5U@RX2f+Lg4PB-Au`^ki6G)okYq@_f%41WntQ z0A;c^x!`9N^`49HddE$)wUcXk4Ku`~NWx2JE>GPYXXSk30Oy?5jXU98uZQ*4pIC-F z$fHL6^{bYWMv>K78CbIOyN19Un**Sw{i^qA*gc$2k@bkC@O^-{webWit6fM$)A@}Z z?4`ru-0#~E^2}u5mTZ7dMRK}kvo49O+}g*iX_l>LV>PYH<|tQVmEMtn2JOtsax!ol zzRZ*McJMyE9n{iVPrC8tj#4C!JBUM#yTL2ifI}6}BrRb4RsEOrJ!iufv1#z?*ZPFk z6T@Zam}i#g#@h_9FUm|#3K6wIT#R#yRP#%%i}rD6%JcY|&P!W+xb-a~%&>?f!n1CU zRQtHvdLFsPN!^@eW~k4u+v&G*M%smpKW3c40)ylgQhMQBN`!e`@l=pWSZ#X{hR(9$zrxMTHjgTTFk7Fr11jV zR1g|L{5S!L?n0^bss7lrvqScA-1y?pT+;7u;xBEQ8CW2lSLK!xKGDtk* zX*~xup{w|p>>gE})zZQl&7^~QmP9DykgbqVw>z`W8w85`b5#A7yc6QT2iw@Si(bQL zH`$lUWcxj=o?@2V;DR4%8NeiBx!eB$*|Wkrhls7?yqf;r*5XCFUnb+sTT5riRQXQ* z{{Sl-wnC}(>!WsNy&zO7z@tQ3j38aruv;NJ7>87|6UA4R4G-_5DNIeuW&O(9P zJn=_HeLr2*VzSh4wEGh!&dWK)>dzjJDmj^pm2_5()mkue#dmt1ezKqTcldwdtA#pz zeoPSViZIeA+9&zRW^|JyINM*vS3^y8lY64sfO|r<`j0{Kt0kDu z?TEIj)>qS6qqmYHj&O|O+AtqzCu2xduR+}AzMj(m0A_6q!@B4XW2;>)s3ItfK_8p| z`I$=Rt1d8dMnNK~*?0#PeWc560W26!(z9-6IUwx>9ohLn74`M6!2bXU>3Zdz^IG0amrpj!jW*sE zOQu!M!ayq;f^w|D^0+uPvwizEXwutljwSnaQf@5r1&VdfS)3j?1RM_DwLjXb+9J79 zJ{q&W@cqHl)wShVZX)yAdF|nbSky(8Mqwiz`^Zcd3yyQpRK61Nd&-ks=(f@87dO$i zonVh6OD>-){K(P7rHCu@s8PWrjtzaIpnL?=eI)2t7&SM_OMBL1-!x)VoGFupr|+jx&}U&tStw}QTRh#wbS*Xb);P)$8fgy zOXM}Vc@TMl*|5sX-AVhoIK_RTW$@2T@YUpZlSgjW{(kc+LJ6K&zE+U|Jmqp(PX~dH zYMtMQbblDjb$zYqwz^|j-bodyiomax8Bh_TKXrrhL0sVO&M{FO)>`vKsYWeXA06u7 z5w!UCIoBG_Yg=DF7DiZF;x>_lkOB|zuI3rYB;a+au0AGcYh`^dpQzcboz1jyTw9qo z$sC__1qd;M6c#4~aRZ?>^>(B1cfzaT`|IgHvUMq^h2?$rit`4HoD8`lHaQ&R0!3u0&s>gpHKNRx)+d!kpCONl@c14*TG(7^ zZEL55xt?|@CB!)jtf1%jfV`oKfLLI5%{Ssdk8Jgi4cuL6&!?=)vcYsCxQaP%Rkj%l zfJBS400IXp#2;_2wNHe86`E*t*}ONPt)1k4TsQH+V^JyEHnCilV18rB8+vXzu4h#E zIpFv;TN^zqMA22`Lv1DETZkfxZO`*aq%#EMgS#1EgN)TjGLH5Q)vSEMr+itpzO#v^ z)FivNj71f+>o_X}XLp$pE&)Q)7|2ox13jtwKaH+DH>J&Y3dt3tyM2;-n2EP}0VHj2 zx?kn{ry$_uabH_%zp=-IV4CV(OGDG{UGQcxT^EBRf}>~3u1-JzjPN~ax?k*b@cu~V zzPa#yj6PhD#~r*9nUPpVH*e%&gB)ax9^*XK{{U%2s%1eZq4NHt@n1~7x3#@LV;6C( z=_5RmDNAz)PhgLDhZnRB3W0rPOlP8p|8{=YujpT;NJ4hpgj02Ne{gyr#>Q|Q+ zE8*Q6O=#D7`!|@#@sI+z3fbL}*zEy<>r4Am9T8EZt?qnd;_n}9*F2xLTc@2EOOqR^ z3&_Ylh#U-))OF&UedBp9?WbgsZ{)Z^BYeJF!{%*8C{*nQl<=xDdC2cyS6_b4RyqSs zYo_Ra7u2oAwpVOQSc1$Hoy-{RC+KmU_NZd;Ka-_L_RTj+xVKWWBr2c0gBUF))%%4y z9)wkYX+>*eIY*)Kto|iO(&W?Tyz?Qrkzp3X?SL~T?X9!`%u6!>0UVqjIIYk4K=oZK zOHD^u({&3}^A#eV(L~npMpJ7%tB;g`$`^M#w`T(x`tw2X9-Dc3UgN{|=(n({T3jxf zwm2sH%tJ6Gw|{xDg18*lYvIogcwboX^tRWL-0AZ|v-sT=*g3y&pi-;nOc+y=S*BH%V}@ysiM;LVyN7c0VZ{I2FQt zWwKpQLejKmm2700OW$0@dbf!&C8R7s`JM8|aUXOA7#PKUL*cC#!9EhWYg;jE9puwT z3N(_%CB2=umH`M)F3#g-(ZYouxIDGT?A74^01;Z-OAXec_S;!X$8o1zm|U?xyC}#x z+D>vhp7^dhIE1IpX(g{UkAx=iToGSfVryd@d5FmqJ4YL2jiWeWlBz~|8RQ(-b>SZw ze`UiQlSsDkrq+eoi9sU`vJ7`8IXy6=*w?Qw?5&|&_~K`{@dIjlh261vq4T*~ro z0f|%2(eo<+z~=|0bsDGaji&gM!!Sjs+uT^`zGBZ6+*1#=Tdo5!cvm}PU~&VF1`kea z)Be(@Z44Y=W5aK4qlOJy5Y|l34(lmmmL)SYHte?t9S8wf91IGlb8yS1{hr=4ev?AR zb%i%Y3r28Qzur&?91)IBHS{IV?4P3eAH%wa>-($L)7C$<&1}oII3+p4f(YG!er4xA zf~{P9B=B92i&`y9L$|lQF~ezX_Km1ZkiJ+hcJ6jw#1Ma+e`-g4MH+6$%{o(C>rg{| zwmVj2XO2lD%5Fvo?TnlT8;^gO7RhU>Qdo{HwbI1ofl)QazbmjQGLzn|U>9B({<$ZEqvPD-#+L0b)93 zfl;2H!;eaf#MhC;-)(~SITuoemf_*u^DckXNuD{zMgTbP+P>uQr@=o5==w*Or|3Fv zp=wuYoh_DWE^-NJ3vhBs!NxI;FgUL@)&Brw`*C$Q+3vMzG@EB;xwM*Jvi+t^9gQ50 zxcNuSM?E;jKkZ08Y{F4#T=|uCk#VXt@f&orxKhsEcJ_`pV#*j}2*41(UNP3Y9Vss~ z{Z7TS+ig$Dl25e@cqH9D+*~Z7*Z@yWzz{&sZY$n&pM#zO)34#Twzb!E{XR(KS(e*U zH&fj3OKu?nE1VycV*vWspU3+(-+0T#P~7QyUB!-@HQ9pInnr7+xAQR>3Qpp!^KqY< zx^?E`m_l0<%F*Y3B=Bl#7Y#MMlWMMk;YE%R(Yqs+F%OsT7{a;!=^aU|ohsh@!P?~3 zuW+!fzCQQ?mCqJn8f_V zNUY6)(~YF_z^^sY{{UtU9_HTS*IfHPo2^|=Ahi)Up0>FM{b^tIivFO2I(0a!jxsH3 zJzqo0PN%2n?uQdGH-`IsqW>X?ZBO@2Wu?L=+2P&(@ zalRz@N8w)>c%s!jKW=QxBL=n8ZAX_VL&HiRaFC(-eqFw~Cb4+r-l)Hk^LC8}pW+Q2 zw0k{aVToB~)Ge+QMk97+*vRs5*^8+2}!o%Mg(qE1&2(6 z7d?YySJTPxU&7OC*7A6R&bWp+Ug2%R`H`XLFDVO`Do84-6l5N`uBrYDd^Oa(PaTe% z;kCYwIE<}(Z8Ak_Bwzqn5i-dkkOQO4#u)#`|9o-C513w2Q5I-bM5mD$OPomD}cZP}$%7IXLUmy_3g( zv!0*g3%yD`4#?^EF~+0L5=!4>Bw8zwd^RxpFiE)>E`s^o9$BZZWZGbm;LfEl@mLT z12H8XdY!NM)&BqxYctAp-Ae9huCAtag7yo6<_MYwWh~OED#FZ`boU0B74`E#8&%&Fl-w(+Z)xMP*+B#e$KWC3* ztWFq%$yHs%0!{$MXZ@(J@Rb2w_aI5U|A%bTP%`796W+R;Ng{1 zY2>#f85L1}FKT`p(WBGZe3N(}xlb-6xALTnvXTiI8B#-nK;RR*q58@XfcCeVjF(qN z*K8K*B=dGe)8sL1C>U7*IR(0m9ORm1@4=O^w({X!3tP1_Gpk+cxw?T{cI7UCMmRzI zOmo|4HA^#(@`H`KpCf6y=aH{!3va1hv=^mp(&i~P$mUr$#O_%`Dc%4$!N54hP(KhZ zKjA2i8&XZtp@dCwaOGsop}Ifb!w#STPZ-BF_6~>eLe@_Y-)Ylneh`7Djl#(k#!2NM zD;ACyZIW$ol(8U<`NwLPSNIQcqxgsI77*zt`$`yOPc>0j_c+8z*d!1_oQ#e;;-B`U zf0UQmpDNq@RF2;LRjuH+xSCV)p%Jk_T!P~}*>@-s25v#d05yT5&kmz=BgqtS`7!zL zhVtT-a21hM91=?m4hR|gSJ{_;2Jf}4GFFluG9nbLK(jgaJX8|8DHa5ns)@q$kg{izqwYAG|rBh@T^-dfdUvYD+y zY8I;-$sAV;g>NmLju5FG$t=gHtgTzbPo?Y9eTFM{YdIn-ArY(0FnKE?;E}b)+~n{v z&THuVZ->xmw?F9`b=AL}a**7S`?yv2Fe}#uhb#cW+k?UBr>}To4QE>WR-qeSHvP89 zQYjh;3J?Z1%Ir%{ZXNt}EpZhj=M)$?mE23&&*s?TH!8V?6<##PE=SBiT-!|29 zK{z0G#auH;zJ`3R=guvqL95#DXXf|??NS^ozT;PVs z$j9bfj!*D_I@c@U?H5V-i+5|NSn0719y^JyH8x2Ns$IyS1-2{Hf=ai_4@_~Iuk8;a zxlf<2d?%w-wZ{-bYx~+ z9848{W6l_Ga8+~GzQD2YhMD3USGTaYHnG_(aJ9ADI1wtjXDZ4_APxcOF@h_b*L*u+ zpy|4j+3Hu9w_3zv2;qjnCDsT`j(TI}9GtPN-B?<~qFqW-IqxRS(H6*^bC zgkB)Df+$`1D*&yYd-qk z>i&4$cSPGE)+Ig&kyper$4?I(^;_W zIhzsyP8p8?m0rDl>*&2Z;KqkFqR6*V$!wFy7SR&E+@kZuVD83q!Nz&4{a3@f zZ-G1%*0%O{hQe9W(pW4al4VWA=0K#Ks^=t?$OosTbJfLjyQFIfqr!Y$`&?@p)t%fb zrR=7%XyUq+o<^P*V(bf!!yEyRxN8+ZYhMvrT};b$efGeT6a^wWb01WzOy=dTQZDXI>I~tGsaQKeWf3rm-(`k&&8$~R*xXDl%*8ncx zW1cGJnfqw?n@4oIZA<$>T4{t(F6Agn^OnIY*ktDdyv`2}Tv~~4XSi4`L}k3Chs}2_ z)8y!^JDih_Kx`3CzR(ua#3sQ6moeVDwXs$TWK`>c{qCdvqsOIN%jk9&wvp;>`&wRV zR^Dm2@dVc%XPdX}%^BW0pDjiR!zjl96PmN9e%ja9)_-R@rm1CbBFO_sIe9l=ZCCRY zWqwo64nZe5u4}{A@!wy^Yk3LN*`xEKW=-SDkTR}ML-TFmW4P;F?}+>$l6Z?yc-d{E zXWqs*$T4KL_OMQO653}he> zFh1h~2M3O|O@C_p?KTKzj^o4-HoCV0|j+x`Fd8=qdX^S<*#5hqJ z&vM5Mr|y(I?EsQbTyO_9q;#1j((Np!wey)leWk|PKv08d_TYxkVaHmffun7Q?HTPJ zA^o7H)BFzFwVtu8U0la@9t-KN3~do*WN6V3%1Z50TR(L4u68flhs0L80Q+BwwRjlD zSTEb8V5|u_azS7+a(Dw712yL}T;1rN6oX9{9)6c~G2WRk8{{Y%%cE7cT&PCOd2q0UAd(!sz zvIR28tGzeIPTia^e1c9Z=~zmwWW%q+@G@C$}M(Atoh!|BxNTk3E&ky zhHJz%EiT<)x43C7))^$)gt1l%2?dIdAEz1T-;-7}om|T8abb0JZy{C!5X;14D(Inz z5`2e@o{D&7--AiQ7g>#MJ^uu~z4o*ymAQ@AS(4eq#e)DOMT z)=l5-h2o7bR=AO*noGvq_ZJey6f$MA@(csHl!hI7>0Fu^c#_ut09L-z?C#>pB&tG=h%`tOM}?Me%+T1)Hu#?xVItGme@d8o0*yt;s@r*8l#Jv*LHpL|Tz z?EVq>dJRI}@<_D(V%p;F*5VtNXj14d#h>OUYX$^;+-;3>*PdI$zZrC233$W7w-=Hs z>35OHHHq}rj!Cri8%7Ao2poVIgN7x+)Ztz&&{scFA%xw(a9?9GuS*^`&M{^ zRJV>>y<1I=;%%<%x(tL zX%;Y7cbYNxlr9^Npnd|rp+@(yA6RJh?+O0W=S*9_w;PGH){QSN7Tr&uaSWd>=WcVi zjHx+o`06q}OTeBy@E)V#`+HqK#eOEYT{Vs57ZFP;+gdPH%Sf2US35s>k%7?jkC^V> z-~JH2O)S%6-#Vg}RBiT=Ger}CN6H#TV!-p2TyPF|JWJyZTTbzwvHhOcQbVa&#?nF) z_iRP9dx!(>?#Ks_26}T?)XSj$9Sv#X7urYA9}&N3PYQfDvzq2>d#?~{I)-J_UI&sN z-=QH|bbdA|2P_9rK*1!}j`-W-=ZHLGy67d|mhmFIa9i4dix~>RM27?h!65QRYtL>p zmcNF^>fvJj#Ays!V;U~!3{xZK##!JWXQEZ!%1qj#0|p^Jur{_i*= zoN`F*#VUDiC@n`S&HO0tJPGl3J56%mQJY1#m2~S<2}ZqGKFJ!c#&nUF_ivJe1CzM* z70_7xXw)oxS2g4}u*ap`OdMKo7e94E3_k?%&J~B#psya(-W$DE@T*M~!w)hkUTm;% zzbPPmxmMlRu=U{SN^Uhvm6OXYad&a^G}tl8A!LnC-U9QxuT!@e6@O5reT5pG&tACr z^%l3`&4K>MB#*M_teA>$>NYDU&46-*V3J5Yii=JCqxCI2Lt7ioOYPG^ACns1S#2<7 zxMQ_O;m!c$0tYqcn#P>km72+L(kwReEG~%|Z=4f`^iryr$01Z_=t<8@KjmE!Vk?zW#Lfs#@(4+M^DhIW$l3yt$=jFQz+mkJX1qr3&ih5tCTly$*>ww*h%l5atL3iYl6fC_ zIpZXpX9lxYYwbGnORdH4rjeTNXr&_)1{(=D-TY^EGQ`$zFQ+G}E8C@|k9oNLrR^;4 z;nVM>((LXol1QZ6X>fkdfmEw`K!Di<5%Uh2Jd9Qsi2nd;_tjS7S%ucrZQ$v!v?{Dz zZdP|BoU!K$3XJp3c`KXkM@6xO+)XgGc114`4mO>tKqEVL=hd;#UJll)r0H=-YyFc3 zrEhMC6q~Y)<-}mQR$f{lcvfHu2RQ4EqnAs-fNnLoR<;FV|65?quJy@ zk}m`h`F!96AP^5z>qm%xXzV*J*CRR$!!+cW!lA^lx}A{jmHFm$;YO1dr*r@yVawH7-CqhN<$kYj8gRrFa^4x zlnj7S4x^`9uk894*oRr8veEuD9Y0Im99n&iz1C-j5Q`k`v@h@36p|KAiZH|xv>&do zgg!Sze{9jmcV~HX06}kSd*@CjW#!@vgbU^HLN0TVPDnN68oV~QRx7gJPdf7GMIEZK zGc1buQs*BrVp%~af)C1aF=E5RFrta$c?PIe!TUQ1zR2k00k|BOJ3-`tFnZ>qS#2K0 zdvn>7_P371P>;;Bvx*j&AGSkvCgoS%z)BS@&9JRlasFyNDr3o?v> z`rg&_#?&=Cc8&>d8s0YoOH5$I0=Wqqg~2N$Zt2HgnMNn2w{6_|Gh6+vwEY)R zYmfLxK<}U4p|yP;Wo${Yh+{|ECMQ&T&{7qwsY5v(*Dh&^=tDf);;6GAGQXId3FAa;k(N{Lh;=f9(xhD-qiA5blHHc#G`K0VbVyq{$vid}sTlO>%{b+B6VVIX zc^_VCf3|0abr>z;T|P)8Ru<8`x`0)bf(xl#r)rhJ49B0q=Zn4lv#d0oX5;LB8oZsR zkO@W3q>@7-sM;6gT%2tj`VU(1JL_mI;jzAvVTKu^^JImi4rE|hI8&V9WDrMirm1*i zMYz`On@WJP-!itNcNNG{kb2bG1f_0dx{he%Yjn%Z zh;b9R*r*VI8Jl<^M+1sKvnVYr3lPtIoA$Mq)5O;67l-u-7B-sJ;uX6w%RU)P?-(Se zGVBP;^U1-kpnln&5w)3ZV$tQ)qt*r6+of(N>7~ziWoVm}+IL5xPn#rWIj9BfzMv)psGRbZOVOMqs z&N<0Z$T=gSr5v`8V&hq!`>cN5fAEb@3tf0h;bo1ahHEi$puks!Vy-Z92sq$?pb=hS zq<+{MZj}sjHkYqj+4<5-H2(l;5;fD74#>~AlDq;?@qjoPuO`(It}hXhTgfir?KAFkIZT**rT?Or( z?t4Fn{{U-E6G_&uHA%FcSv5&n_pEBOM$$6{87y~URIuZ)0~ICD{1gj8p8o*MywLn% ze6D`aFlCKaR{(8chU!-wj2vRTSL`}|si0Y;HsapzVOXX6M$;_C*^*q5!m40x>+%D| zX+@(Eq1ftk&22TL(zU#sP^59}RV}r+01vsq=z4-{Hs@2~M}})ez58|4w>nueHeKVABBYi5*(FC#r#J_& zIIonhd>pgrcaS`B$8iXIi)RvUH(6d#05hBrK*>Cg_4KWh{j0AYKR5{( z1x5xLi0y%%GHcJpVPQ_q9aL&_R97qbtKyG@{1xLl(rYbR-6xxU!H)O$7OaJfKb958 zTm(*cZW%Qmz57b&DSzhw0BK!M3^yj)Ci2}Kt=}gc$GEOUXK2SO&wBE&+6k@OQP)~& zpjl+FOIt|FFpBkr>he1gjBQbzWO6|DuRhZ)Wbu%?^8BW~^8*acut=BzVN@6ja;36x zO>Kq2!lXHwb*n0Kv=Q|bpS4ei(@waG>i+3k4=OU}f0S8(5;0L82n<0xcpw~Lip_qnv5d7xWAC4f?HLSU~2 zn>i=13;acW>z}vOrqgaqHJeFqbY{3@LPwshxkK*H%mjtF9Y`H3qx&wCFnGt=A52<) z)t(XYUa1>jL8*zOgru@2po;*Ip!tj@+ydF$R~QS9PeETloeuKm@*9hWS(Z4_pq?}_t+Ok?{HyO@QIRY%V5 zn_L!GZJ>`zje;jq7X*T&j2u@Nr+(Cb53Md5#AyB|HuiY1 zj`8Qi%)&xQT;ee87{Z6D8$Hjv6@vm`JCVOVfi1ddb^I{H%n&!kht-=XwwyZdB#1}zHG>TNe#5lfh& z7q<;A{sv;N&TQJ-z!!3*%`ZCzpV^3zP(a zc<3v{JYAvBsd#m4ZDjjLoPN_9BrM8spt6+*JC~3N$;LB*TrR(1Z}xSCp;eCRH}INVz}$QiGX{4=c0 zrd~uYB%amPTI1x~wn4P1+2@iwnwyUf3`P+^t~<#buB-{S4}drX5HD8u1MY)qaP{cj-N`)zx}Je z7)yOLji&grTdQkG=leuQhL3WCf^tsIINO2SIn8|Y;@=NXJ-SWh3u`NPTXvD821w8Y zh}{fgna^b2pIThFRIK6T?mJVq!?Xbg`hmP3VAISIR=9YM+IRsEAe?{TX3=#O#L z{{U?N017srG?tb+v=*_CDj_l}85Oa(sK*;ea8&y-HMii;+fU)Py>)*L_M75sb+$-h z+aK=Zyxw_KjhGe2-lw1rLG52BLj~LFwwhd)^L?U8{I-E%1OwM;7{~-KzW|=5x)$)1 z43|-}+$Nf z2|4b0Ju^r4Z64p(+#gu-Uvc!B{@XtcrnhT(yes2KR^neZf74ZdKo4TUM*%?xI4p5Y zyZx}f5Wk1)Y_$&p>zC5`?{E$E(3)F$6~o4I>O)|t%n|{{SEvwJRnJTu&oQA(Mv7I4YZX zz+Iq^Tnh4^4(e7m3k()5GF}9Gfht6%Nni!OOp%h{1;7Ufp0y^A@XF7{8hkQcYI%=bGbnFO1qQnc|tQqub@i<~D>0VRiwEVVfmPVNQDP`F-n~)!~ysvq_`b6~uP4 zJh3p!-2#DGaf7#lNmJB-cqXxKRc5p^MHihDP6?GQ$hKA?vK3pEU!SH3s;7aZwlkGQ zZISGr5dEmUKcndrSlvUeY8LYeJf>~sqm>YB+Dqk8aOzZy<-y4nHJ9ysrP(K$VWsL& ztVO2%)WFCHRX=yk7~c6T%ltUbab6py=}+XW5`Uv@ASaa@O(o*6AhL|(fDa&y@5gGn zrs@9xV3yK5%YU*+5cx7FAy}39ayj3|K~eXQ2hxXtqu3)_+a!Beg}-desP5*lxY4yS zq{67{6{L>~OCw>T61MH4J=o-sNar1EqVRX^2jOij$+yGz{u_;FXSp-qt<|l}zc<`f zU>SI33=T3!ax3RiYcx7A(_mJ!xsu_p5)UsDoGuW7%kB!ycH^N0RM)y4zLl$7Ft~-G zhRqT=7H8V>vc9F4;96x=1Y=ThG2Zcr|`KoU)+H2@5{k-pK+~D}#;tT%(7+BiJr0R_NckdP( z6_w+C;Oto<-UOKgBRTuSz6ES(zqD4d;~jEnt@QmeZ8@&svD6kDhqlx$US`=I@Hb*T zz+~+?+(#I%pHGhUFA#Wc>KpG6-`ww!#D?c_xNyp#t1%r%$U_|9MsbRx@PAW}OZcgx zq(5j?ywzb)f;2;Ptti56&H)3SbI{`$=a!}ml{PPbECP zT3FH$K}G@9cYLfcPb6a=mB8xXv_;;L;ETptB)6MSUnN!V9^thJm9~(ig!zt68ykiP zOypen%dSVKM{d8_KVh-b?xHZrjAMdw?94WEjBa8HQZg4OjAQ1%8fn&=cZlw!w}#?v zIyDz@BFU2+k~Ug4RK1=CH4b(CZRMi>Jh}(7KpO6 zl3Yx3QKoE?q;w|)jt@NJzS6&J7%VO{xYtXCqq(&BP&cPVLkCYc;-B(iQ1uaw#O%kkzF^7;-X3<{|5x54(($kzN;faW&SVwRae= zfOtOE>YpfG&&GC+a-fma4l`D){3O@+-(}q$z1o9?XqGf)`@|RHW`10r=7pEjz1Y6F zC!y+>Kenypej;e~j|szdtHUyVx=*#Y40r(*qdRthR1m{=C(u_(dHYX)YU!GN#g2=i z+1^|U9$216x=Uq^ih(Bz6!DM-P73_Ko5*0C{k1%2p~G=`Cx>*2ZSDg3cGnUz+(y4PaV`M^a^#F)XWx!4 zCTMjgo>?}A+$AS1Dja;o1q9{T00+NrwFzkD(OINan&Lvr@p;?avj$8C95ylzJ9D0u zYXeI6aTBd8Zg*Gz0JistnIn?dMzgb;IM^)jbnL4WY%Hi4e8ipD!99)-HOj^NWq7Mi zfxohDts}a-PxPdnQd#YpS-wI{dwLz%UIs=71XU@#BMz0~DKt$+%|6D;E#iBae3_zl zA%NQ4E((MPKQKP^%XqiJQ>M1J3>RxDX$+$hj9?C(S#yqg0dwg`)ab3EC00ju;eXnX zQ;^@?c#_I(YT`K-TR1LtM-aZ(<0z30t;pI~5INvhy|?Xut3Bi~&7#}c>Gs!6cA;+G zONpdx{{S3`fr2x_;MbG*XW`eJS+CjCbWG7oLv5H1#1eXvKsi333e&c;`yR5&tu)aq zCg&-+kwL&+yaDV7IOO2-RrNYApuN10qu2J#x4P0JxVi9}scA-GO-N;2A!mg!!?If3^76l)-G;F_2s-k``ri3;^zS zz{^P3BW~ad=LCS<v=p<13XsD}1;eMtQ6r29IL>w5)qn zU$)nV{{Xb3U-(D$f0*GeR`f2$ZVB7BBayU$>z>tXK>fV5fv8U_cvAlW?H^`n;dZ=J zHOp?njBZdt#^dsjPg?oL%F(p#Q9jcQ-)Bh_I!55hv0FT6p(82@IQFZW&CQ+Hh;3%G z)4Yoo1)4b|-8_+rK391M-EcOm6&#b$;8gzrXVK`4{;?&w^d6V{Xz2I&xU%rA<=V_p zmHS|bw7UWO#9=`7BycpMeS~&G70Xkc8m86%jJwA3$SMlbDlUS z72rB__R#8gmazGDKWNRq(yqU0jJ8VfFcgiPkT@KUa4l%57U`Sq3e9qaS~Gt2)F>f> zjsRxBP!BoD5 zbtDSQzWugz-COL@Tj;aR4ZAer8Lv!t0!2J9d|+UL+eUNio(G8O7v6QdmA8%-x+XMY z{#zfHq0a|}$IH;M?@;NxPL$I`o6CS?K!zZeWwH-@JbdESK zWMzlRNard<@ei0JiQjKUIO;M?P0gw9FWT@$<>Hay*jVT z-Lc-ar0~s}YEj;QX8COM{_f#Pkj_93hyDVmliYxQoxSazhjVWWXzMks(%Wb3-eO9( zgJJU-KrCX|%EM%XB|_kHOW<_O_fl`RYdd%pwD!VBk)#Dag7RqWb#0Sb$dkRC=)zd$-gfNUyLx#=4sp@_P}MIOT3l&2uPwdgcg=WJt&_;i zh^}%$0Gu)444!$&&P95C&)PLz7A-F9TWR~Q?`|ybZK4^uaG@mmSFu>$JU7jpeb8%$ zveIn^sV&#`eV&aTBU@M*Sjy@F+IeloTMf&O2;-$xTk0Iz9KN+R*NC*(tk%{!uI=O| z>fg(4k`h9RH-X8+50|Gs>!Q{57Vt;z!&t=(P;E+ko^bXkgw$0Uo8pnr3N^9=HM z;;uTAac;bCb*X7r5M5rw40}}KSi>0?fENS!w|wN|*PNQmn@PO4)oj+*$_8@|_-339 zvJhAjGH}WQpU18{*-IN6nPNp@btS6^@W3RIlDx=YIKn<~r>G{Rmsf|x*D^^W&XJ^VT$gaa$xhlO+TZ=FO}@CZ zlGZKd?T&VdLm-T?9AO3&o)iw%>i+-(H3_^EsxFtQTg`E$-vybFPVj?s%Ez_Wjm%gB z$Qi*k!CGHNbv-uWpwzB4YnddH{yA1S)^ufNEs=o804s)2cXZ;eT-y1X^md^W%(N8!c~L>tvGFfuoBoL9Mcn#r%e9og#^;%P4RYa40qgmMAp z2RkNKKnWppkTL-{Cx9!(JV&L;Z{mOK*`&GoWidP2mU!fd65ER87u+yTNEkiwPMoe2 zidq;tCXcx$u~{Rvo=F!HNX1eT`4|T!aDG#cxf$(NHQgruO;by0zRz_P#xGjZIkzkr zm6Y!vbONefSC-nqk1+Bz(t#o4A zZd@IqGDs>;PI4HG;{fr_IlYOww{dG6I#uM?HqRV)8>LUQhJ->${oAe=Eg;*$ZVp== zYQBZ1t7%u)9(Bx5ZX+=v+vTAdVhLZDI6r%UGC?@28qM|Ritbk7rD@h{b+)$OCz!-1 zLaL+hAlrg7(fH(wi&NFDcd4TlOgM%UpPyUi(eO#1W4QTt_0gXDZJ+d5wdNeZagA;3N^>qy4u2 z&*AM)!&Kx`3!yMA5^ zD<45vx~{EpXW@IxTd5jTEa@5y?efBs8A9WN%vXiMAx3&ouWJ{vsj7`a&f4ouk&3Ov zScW*|4HHD6nKiYJBBeG%opzPS-RnHc|9q} zZSU^{ESC1NToj5EZwSfXw32`UmEF4;80+m;d^zBYtGjsG$!3itT=}tXc2x|(?hDV% zKvK9k8SB=kp*>9N8P;tzrnrvPT4|BjWP4U*P*`CXg=38506EX4UXt4|wx;T^+rw*- z3(Mz98z3U#cwQJBx#`dvj><^y?5)<#Syfa0bZfWmNDdnr3L7Njcc$Qa8t61{6aN5b zTcxGKM{gdZwI(qqnf5b-fLVb7o2Jo`xbe27k8_p1fv+clZEYf%=TU&~=1C3|77d>5 z)6qN~UFw<@zu9f$w=KNNBb2OBfOll`^GLfJAmi?V=}f)UrnD*wt-N-ixf@lm ze}EJxmQ#_1J+q41)gno>d#LnTA-9s=Yh!g{llhWvDDN;kfdm#0g~=gNTL%=crh<<8 zoW#*;T8hIR)N3qP*5Vsz13I(^`cxM%=BqZUZVDzCq{aUrMORZpS>)`Bv9f_eB@XfO#{= zZW{nN;Y#Bqk_XL<4*0E!{1+@xTtR=Q-CEsPmqtPc>46MDEITLwkh$T29Gumg4M)qK z?&0lbw|H7R!!Mii%Nyjf;EZvF4>GZ&Ff z9CoH3vj|kQCJ^tp0fOV6K6AUF-P~7KE~u8*QOuWKT$XB)0fQWu0Buls86f4d7?aRu zouMVF+s9{Mk885wh2aWGOJbviT5bH?V#+P+@YXp}j>E}t{ zkx`&X#ugBzMt3pD$@`<+S2?HNPZ~fh<-QPv49t=iSmb40P?<#_o=!eWmcKN#h?QG2_!cD(01K zacyvl)~$55_Uk(`LzlK2qj29ZP|cOYbBuK2r_;3P^{ql-WY)f9mc&}E$PgKD2;5t6 zQp^cB8O|3bv^4(!1WV*e_KQ`qy1ar%fq-O<0&H@CXAJvPsRfTLJB(7eDBLbIy*|rQ zfm92$)c4you}sMxNy?;SZvjiIu_p`%y>mKmhOMq_H4AB(THv57Z1O3NNkPeF$0UVD zIUNQ)Iq0>EZA#-&k?#!C&2+N)lQp`>1;!CsQGQ?Dtb1c6R2~9?03cRv=AmjiiAaDbGTvPy7U)lw3_&9BJ_DczLeXuP!BnA*6O7lOP{?f4WZ~dTu@V zr&;LYD=FZKB)m~6XlLW9BQqV&&7+>=GIkHArDb6EI;OVwKA%(V02Q)j6mZLKU#u}ZRJ5}}ACk3Fk0 z_2SaJGj(rqV6tkLhAW#pi+RrLXp}a3a2`iFJC6ZC$9hdq#CnI?t!;Hnty<=7BovYx z+nFXqB#cY1LKF^|7|C4p%}5znQY2bEjr4m9TDeIV$t$0jl|6HY!2oc0&M{gVcDp}? z?j*alxq{uijIEi2%x3dgD<KD+nM|B*KND&qizFRbSj|!jz z)B)IFX0oG=FQk}FG&YYLBxPK#=@5XVgP-9eBhx)9hq2xN0Kzuf_kyo2KFe!s4bHu5 zY#uqq-eZy$+#TC8mW%*?T##Ioft+!gu8n_XqeG}gaV4$2o0W+E@k9r3Tx5*!K_?>t zPvzQpQ^RYh{4doblkFFpgm>1^TS;krkzON-wo5vU7Aclh`A^+&asbH2_=wg~Yd2GA zziyIAnA_g8j?ltPg~@24B)^sFOC0ax7{x_5XJbQ+ztGYhe&bTOj$sUryJk$tvXXXW zF~)X~PUC~n^~F+62IA5gE+gFH;IOk&`(*hXWUx6u#k6A?JN*r5c$Vh!*4^#n^5k!_ zz|n?n-cS$8Cs+s6z!;>s*1R+okKOMMH&cU~2lZlbrnxwXGXpJ4k`dqfB@a`|C$`fpe$L3J0f_Wqjqa>a?8s?FtcQ-En9$#K) zt$iHdW@~i&LIs4#L5zlEV7X<&bAmB|Yv`+MnXh!~n~P{w0dkFYfq)>5NehyBs1`5id=)0J0wO8o%si+`#m`|^p=U>=(T&RyBnw@iYcIt z-O9XbKqRI%@-{MHpvMQE_2lLa+f%O#WmO&<`$^r~`PVnMT71%6S=$3`5|s&R;zeb7 z6^B1A^MTGn_OCtg!s$LBzSJ+4`r2E3goz!tNjB0pNCq%B9p8J9IqGZEziJ3BKHK8R zWRl@`A}otJENtUjnD~q~N-5csx08}M&3RA5uMkIXd#q`f7XEd;#qxci#UACE7ik+< zjQoQH6Y72I(98b-f{gK>8Ph+Hjnvl>6j2m=F4@F|3HpRU4qm!Qk~_#zrd##lH}i-(R=4D{FOcro|*tOS>XRU^b{2%Iq6R zbC5|raatZ0@syf=p)_kGaxe_gDrQIw!Z19&%rbWtUBG1V$8lZWXC=w3ZQD-MS~%f? zJILpirp?crC5R3V<^W&@-sNMrjvU{|8}ByFovq0 zjf~QptC%gIOI=PCN5p?OmK~y*We$oMs7`WfWv+pC%`Hmm?^D)wyLl{b;A`ngyMxYE z{q!obND2N3&L0>%NdV%ur_^HcU9vQBwxMUGppC7kK(bgNIc$Fugj^hvwr4Op96; zv3)J2tZ@mA#niD}$t|(-B#X(Hc$h@bw|XEW403j!rxe(H6?Nf_1538nJV9}JscPO$ z)OJ?dP@E#Xk}HRiSOowam6IiiUf_Owu?*Vv5tfqdpvER4Af zQ3xax>yUZH5?zIU<^KSP`ik7&Y8K+gYdJ4215PHpRC%UgH%L`+lFUPra57I7!1#t2 z8l|13szA4v?Y*an`Je@p_;&SN<1D9;y>VR^+H`-56KT?3M=$o}<;s6(+`!-^`Z!d{ zj4=vTHkD-{Hs6?JV!3;N5n5RIw))pmU$NckvYSA=0dF$(Sorq<&}h+bMuU%3rTQ!k%xIyT6!PA&tlVl`XdfkVq@k8tAm^m}0-Uia6n#${R+z zdwb%IZu(w+6j-+s8V5o*tGRHLtET z`>9$zPy1H;$%gBDsfsmY*Bt+YS zsEioPlb*O8shU$inPij&edmaA(j{G&F z-|Nx&i*IqI+*}zC*e(UByYnIvEM8**7iihI0g=yo=I6Dvi%t7n@YzK?GevI=rK2CS z#cbp#V&|8X^2L9b=s$#@J4Fx z*KH!S)GcggjyRg`MN~g%Bu2`+K*!25zbQ~ZnIU@-)aLB;X|!DnP}U@d6U&8`L*{*r z{J^2Mo*O%W$UR4Txi*PweQn{}x4ZLN+R0^vfwgB-D}y7pbDZT$@qnNVoYQsB1~b_< z=DHDY7#t07DFUQkfe@qSdw@> zeMM`&!!^8Pr9*nRH)##NqYccVrn(Wf=#Y}ELhw~`ROF7pbCXfty~XyWHPYMM+FRd9 zM0Qaq{p2je1wg^wjz>|DezmRO?-OWN!s;z=RMoWD??Fi9x3^Y>n{NTea#wK#f-}^L zqb00Yaok;K?WtX?Pne{cBJ-6PC{vVNb08pb(bSL$H9G9Zwk=rrZ^@KtB5QbcBB54k zlgo}Mlx_=^&eGeq^Uh8&P?#-ceL6;#VfM>*NID9QSz>GIVY2o*19bZONUpm(__3lB)1L~mOZG5q_9%i z0G#u982)gVfWTD`W z4(y(QR{f@m-XQSh{-vVF{fixpmlrp7(%+<)Gh323N5c)lgOv?{Gq`hAwW}r8USx_p z*{IhP zt=tc5Fc67=^4sP}%Z2%yk&%Opj>D}tp*yp%77*&b71WsN`dz$MaE~_K3+;9a2bjcy zS%?|=Pb@j@S^Cw?J|NYa8*;j3tj`=`FDGcWe;`ZK4^hLrs`$1J9Rly_^hGGIAZbmCL zA(?P^deyvH4Xpa5#fsfY7=~ns$t9vFAY_~XOKtnP139RCBdji$uEs7PkX~Bv1!N^= ziJL5`wDij4usn=pk_XHjfveR?mlK>0^_LZpIhD$k5JM4 zV4~VdrM|w6AUFP6nQi>z<;f;ncJ1-FTy;|Ha0ty)*pp+zH`0Pj7(xpIMkME;sqJ+Ius2Bx$!#6Q!!oVXiCWp@B&2NIvEz&!wtcFf ziu@mc;7wt)yQ_HY&C(@|i8*-f@1tZOO5uPfEr2};$>$Zbr+uqQ(e*7Z>6+5x&4y33 zDJmemLoNVK+53t~Zgz}ksHNsKV)(T0xk+URnWMKwGfRB~1er#itUDfWS_nL!F%?n3j;72C^0Gd!( zF?VL+oqCLCsHl8ZqQ~MN5Pg+LnGT~Uduh@QpD-bsFb>nuoZ}n}k=m{-Qjb(|x>kt3 zG}JBH*X=fUOq*mXvw z{GMO#`3s2%Cw30ssTJZn5?S~{J3Cw3i>teRL4My2w8cEDdD)mS67(y(pl)%%?Ow_8 z_gQUEN3zjubpHT3zR9_~m|a=GSjZys?_bdv_2vCXQsckjAnQ4oUm1l5@{Nj)guQ zYsM{OR?yyCi7a(3N6NN{yR%;bFcJB(E&~Np9Jj7O>ya(yhaQ!!-COEX$kDsvM}{(z z1;`>It%68B8@TRk+>g5KdGax}duM}Fyt=%MLK-EFNX(3iPB|p@05%k01B`J|Y8Lla zR?+#;n~;uxzVG#g;BJ-1da!}jv)~;9vO3tu_LJ` zsX6IbaOpB>L1dERXl&9al*=sJ0~3G*Ww?-J?PVP?=~^ieT=CAD_BztSVY;=2tm78u z?lKy9wu2Ok6k)fhAdp82IqOtzAZg;Yl{VZ*a$I>f@iyyJ4V=2?u{)usY;$J%9S_!o9qIfOb zv~!}n0p*4HkIFeC*Py88vectK+9_>yd2gVZW|}#7%EeXu#ZmJRIuN`Ak;yy}LtR5^ zvquWQ*=CX6Hi8z|Crt0zw12b*`WGC?>aI28G=CKoeYYc}!T-9-yc=7RCfBj)ZB z6<2hJoaEz#!mOgwjnlor5IN zUCPX^%DDu)WD-U6fqWT&2Cc4mWtnKaPTbt`y9tBir6v%L_PnJS`>=H%@`F7`~b5b1# z?3Y%tNV{&CjiOk^8Ako?3b}vvXXZHMk~ZU@u7ZCNu7PXzKPF3iiGqEdGE*mEc96C( z;}`&EKc!_ysBrv5&uQji)Xuu_l-hQsExfW{ zUQD5)R+1pHGb=PM8MBX-(BW~>bM?xx(-v!Mt5#o{-XQOW#M1$i!Z*RdIUBHX@{A6G zx-Az|xVp1;zMBnuaPYC7J<@=`yePnZ&{_8ko=bvw%}L|?XyfsG(6j#ltBNO*ar>C# zWc$&D=zypPJ@*dPSLnsm`nA*c#SiZ8J}uOfPer+1o@0I*%%oEJ?hoX<%E_Va^G27O(=K}PFSlK*f)mkRfa;9 z!5ew?wWVFgx>MW1YxX9)!8Yylv#?_11D})Td>j?vkbTD4dl-N4i32^i_Jzg6ZF#NI zXALZNYJ?SCtHQC!$j5x2TGY}tkL;fcjkl55{i@*&;xb1)z0`4$Bx?NSK60ce#_g?~ z4MoT0K)JIJq9~-TPdR6 zUf;tTEwk!{gfBAP{i!X=fQNG_VB2sQjGnAVQfl?*gs&`g+o)}pd34=CnKJI9$>R>Z zjJ8xBRE`(dipP^ih6q2j79{(0%@Q=NFjtFq=-7E})Vkmkjs^~M#b=`v^EwX+csqWp zs@mQ+%?R^tl@1A#Gn6g2INpWG0f6b(itFWHCe@j2?libV$@ZI;O_4+ll5)UnG9!CnO9}*Va(oSiHBE zQ`wm~U$Q7*#Z)-Lf)#PMoTmqzR29%}vEl7LT_)n*)?0}M!)^OxNQ%~Ju;*lP?QA(J zpsD3#10dwrGvXaKObZ=sB*$SA81le3D0`k)~%$|?BPqR zi@iYIM8USCyO^YbzyWZ$0ZtV9bm}U^mKPWIF|2nGCGJJXmK~pCe6kqJC<(M}kQ{({ zUO5$U*e#)h;u)h$R=J)D?yoS-0--7%Ktj304jGgyAE7>#!|Hw*Gaaa2Mr(%!W{b&o zK&n6;26B5IK;T!QO{212!*6e6W@f!lI^FVQXc5>63F^xlCsJ@vQIIoPejvZRuyl^z zOPk2-Zj?rjfFiWkZ*6vl&+NEio! z*OP&o#)@^1SX+qMzRVd}0LTp6Lve%iFl=?{+c>RjeP8=t8>m2%7H$y&ubT0Jf^spp z9XRI=yvx|?zqd%Z4oNA(nq)>sBG>GFgJ0W`T?CbDePfQdwH+jLv^W3 z{*$z?n#@0Xq?HcAMpylb3Oha0;;p7{Tv~ zsjXN;J)im;%W-?B+n8=Al@(WamJ2Y?JA)hy^w=@UsUq+Ov1z5z4!cFT)GTeUw2N5ueIh%CNM8A^1;Rqm$XITFn5=J*rTO_t_pV1p z@eTL9Z7dEuRUKbWhW-oVADwp{o%2lu5jc*{3s9uAi?zJvZVX!z&*V+Ub@PO{c{2G-LOR5Wy3LNir3P+TfAK(nqZi-I1rntauKl;@eZY zjw2*rV_!IjZN+d#(uX-6vI!XU;-~?CjvaMh@(psX{m#utjP3n*8X^_IPXso~dwF zF(lT$T!obial0)d$(`684hvvbZ-uq%odd-hOD>X^nv7*_iXs^$xj9j=#*Pbh34wu* zha-;n#-1a%@rCZQqTN{8#BOdysFG=(3yTefOukrgfEx^>3_euvQ7KuPTSKn>gRZ9W zAB^>fn6%&VC=GVb`<>BUqg25d3&9&l^2ipyZB1=QhP)F57?R>hr$8iA8;HE69%v&0 zK-+?+uTQ2Y?0RB8E7h+wc4-z36E`tPzG~C&+RfKB+7-nxeponaBv#{ zpRNbj7VgXKmdPy3^2s1Y#EZGW9IkpEMov8|qws=U>w4CgC+>5nvbm1g!kHA0n6l?3 z@&F@@4t?rnq7I`kS>V-Vj7f0}u$f4=3aU2blm&?6-`}?tGFeS!qiPox$IP|5^6i9& zY%WxM#Co>vta$$CC!AI7D^Y^OQjo#1Au>FwrF^rrBWDEUoG2jf0Gxx)b6WRsTf5Bv z0A##)RJlkA+>kI$sH=?hX*0BtpdOt?DC;z=gF zhDrBc+eRc3ZIV5uRg?S7s=-MZ$Q%x}USQ-@lG@)^@odvrMR6oB%@RU|3N$IRDo;{* z3{cduvGq&k9BlmUosKg_zf)BHnX(&}1TC`Az&V|IRr z%R{+}g$l^36r3E4`Si2lPZ%_Cvo)H><}RPSZ_{ER%N?|UfHyAXI0t^w$;cVk@P*8m za-APVj#kvQ?J&Ted+%LP#Uht>-G&HNGleQP#Gr!JpW>ZD#vcsG_7YnE0BLCYTzYlN zwB*fma%Vnl#Nm=gJYj(!AOQ3kg(8|K(6lDimc{LS$t1i(G>HNt2>T8JY~=uLr-75t zJXg8a;n(b~MVvPmpJ=vQ4M;$V3tU_hKnUa=q?c2*PatFio-6zy@b&)yjc!WmbLe(f zI)%&@uW@o#6&VW8EQ#1|%7O^PIbJheAIARx18QFc{vb`I+v<9x+HBE@Y_$Zp`QB*$ z>b5Wg1~~HpRtQk@M>XAvIqfbF>`hWQ<(a0`pv|I1Da2NiEIYUE#@(v<>Z9)9bta8A z*);zE5z3Q&q8R*=yB(d0j0pjaGQgAtm}C%fwBTTqPjY3eCW3$L z9}vlLI@_#@CAp9%mn4u}fLb{Nr^+I2@nDSo-gySGb=_X~#zD0&wcSFoMv1(~=0?lA zY@n}5PId(Y0Fd0A=CrK*Sh|M0sawemI+T~t`BJU$NMIAI^W_&KR)I)QfX1tj{&h)n(raUCegm?inFeV<5J3)~Krq9-g|A$hytMnrw~x*uK%Z2!5jh zLE2Bv$mb+vdRx=JDBWmUJ?xRsa}wLw+(g#XN>vf0+xyMCv$$ngZowxU@M^xTtHEbs zac2$0I<$~jg}0sv+9p0|5)2aAc2K)cQ>cD8%{o~c#x=YRV{q5dTt{pnhb6#?qiyOl zkh_};&fZQc3cq4KUTF1;>wQ24xVPqc5$=>mv8W#`ahBbd3Z;fde6l&>x!)8^HKfZ8 z!%VGoBl}2lURES$0QDniUIuy3HLs-Ie`wuV#iFgO1IS5M)>b!LnS_kdMMz1x{JxCcCNF}c4H_*;rrjKzMI^Lh6SrF@A){hmd`k++eTB~M-lwL6DG7S!77Nxx|% zXd<<_jia^*vPUezNQCgCYOVo1^S7MVXzIk<`8Pj1J4B&l5;N{;5qf!G{D2Ms0CzRHa`MfkHP!8kq%$I@@&Jt) zQ*WB;Pu*`!@xqTvT-IR|F84&d(sbD8m94hjOL1pp>`FA!##M+o<}%q*3k)zkA4^(i zh0llWZl<`0PxCKPA-1@TiIkESM;|x(y`%%3rMD5Z)@xqLtPMICe$ZaxX(IEU>&zk+ z;v_xK49v&BIN(-AamFgOCFpbdpqQnM zvQ0E|+UGN@*=Wz0OFII0Wr)DQ&&!f}jCwbG zhWT9Q<}61XhV<>nHC)SKtqApKr_l9i?wT99ucPwJ`mVf z_-|0ZyO!ypxzsKp*(8ug3;?!3Nx$D~Qo#Z*@UjLV920_b)2284Cd+SWHH$-j{{U=1 z>*Tq0LAYV$b?19vunYdztw(jP++67p+gmS~yW=SK#l*Jj^CPK3afSs!0AL-s!KLU^ zw?RBx3u!(hwKjrDEx}JMm~4@va72p7ugcqjJPpG<8r9G|YPNnW(C#6TAh*!U%&@?j zD608n0lM`K@{`q&z{mDj%#&n znWOoS$hpSSxNH(RIIp1m95qXQBUFy_%9`psd1Q?(PnOa`0NU;wATI6;CJEyt@+;)c zDI|+lf(W5kzw^@RqCj^Ljnj5><{Yp-_4Rbtt>DzvE|v{TRR35nGb-_Fg*Uh@Xw!0$PU|%i?3JDQ5lD&x-{_#CBE7Hq#qKL+8JCaXl z=Gj28#~U9$VfK=xa}p*>u_I~QkO3Vr^scYrUEzXD8_45^+HDZ5Z5Sb2YPR6}4=m#y zMtJ~qHAhKXHM3|j43}G?f;VL#xhb@$KI}&o+i4#Ru6`c)>9iec>RWwdOIc2(7*Q|w zejQ1QGn`E`d4YD0J^16jv~nYVRM2j8twQGZX>J%^O%=3pgk`n4c@vnCvLj;K*oO_q z+*G=khc7jKTS<>kj@weaxzg6s-JqG{SY(N#SmTxXC{`8=hWUQr?kdKew%!jGY4A3g z{htM-D+An<=g6_RbvtwW$q~Qhnftq#jxuV7w1hylk{bpO8D)Nc zbskt{Q;>dNP9svZFT>%8HP7wKYc;=VtO+*v(OZc2Hq$I?_r7&Fp!D)wO*_;x>{b+=5{fFgZp9>>LfjbAyWWt!u|R)}5|Ht9_3}zr4D6 zJjJv#TN{YBkl$!U{o55J6e>Pk^&n!qpNIF?9v}EoHj_2hnW)USKiRurl_$5785N{u zGdi>F^BVyUa(5NrWM<;SN3p>8qs13Gz0KCWr|Q=5wzGS_Y0Ud&kpdD`qu4N1_ffQs zz;zXiV+WgPE|jd3Gan%#a>`LiAmkkLv=BHZu3c%@9x>Nm<945=$8|6-6l!*rX%}!% zxFJw&$4ubksH@W4#}25`NfzkZCb{zqlRd){QRY$s;3Jj*j(`J#Ykd)!9+4OsRCcX1e1ZV;%-7JK4`GSI{u2;D=G4k|n9d9jdp=)`hPcAqK z{{TpM;~ha6-?*X9aBxRViki~G>rK0{xBEPImbaH83FpaACxcd;{{xm199V=5DiJKwBHY{rmc&~H5-VM zd2YViJh?JU?hvwNLoPpzf(hq}t!1jNuv=}^b3!9~XvNFE5x@r|kVx6JkPo_YLv0S}}~dW>5l*D9OjATt?QHHZ1kk(tK5@THZ--sKFJm zurZ5om19h7jTErR+rOT{y7aBj0a$68iXB?(`&MgtEyUMC$Ze9_%E^rzei@YERHE(2 zCpE&@iM&rG_V`-j@r2hZzEp5a3rDq_xy}yY@51sns5QCZi+w%x+q<1wSW4Tj=;Vq* zvtPRj2b8KtJg`zM?p%YMcc#{Wu6A11pCO*lO>4;4SGbsOwTkK5J9&$J{1qr15V=#w zUdJ^@Nz!3x{{XjFPriHRp5`n283ae{EL~ul;06l8ce45See^!@P)@}DB7Q1AT;gUx$ zkkR3TZO&AXI(pW&zpTw^ccMvaG?QA#aW0<`3BE~WjdLj-7b;E^ji78C9zo-p{{Z`D z=FOyyV7P{Mw7K6V=esNcJAnX<9F5$9dSbMUNjK%Op8o*s(nB4TGh4Ts;&_%%FZhl@ z;ek=X>NDT1Sh0dn4{9wnnz+=K%p!R?Q52qL0 z1dA`*^m`d@zRFIYb0mutk(S#oKY6uOZA8uv)12d+^r~lHyiHR_ac2l?FDyKA?%OH= z6&Qi?#u;}h?ha2F6nJj;8dvsx<=lR3ampsSol3~^FB{a1u;D@4atjiB;<{Z^Oun(w z-e}&{hN&nHHh~~HWTj z5Nj)GXLTLb<0GQmK#l&9Hhit67#uS&87Ca_2+tNSEw4N!;tPEjS+=~=uk9K?w=KjC zA5{5cZtSkWe88SMb*YmJ*xt2`bUz5`@~T}kH0ugZu>lRjFbw%@{M}b*^j7tzj|Iu0 z!#?SrHnhWCTSp@}c_bNEBOM|c-Twdq=O(m17v9}!Fv%Qu*Oqqn_Ad8U^2@i+g&2=6 zG0$Qb3_&DuTbljl=CPs6y7I+emT1r)GIVt0wg*BsV+RChgT+PlHsw}4M%PETyttCy zD_azj+TvGjQdu(Y17tSRGOM>e22OK=c%#C%vqD=>hSU39xQYlQwh}>x&Pwhflm$Dp z!0*^pnudurzPE6e@&5U7KN7)td1|x6api?EiA)EofJe%Ajh!~+=0lu;Nps;#{V&6oQ_B=~?QaaJF6(g& z@gn~1%QEyu`HAP|-@rACt!oED(Bo@Xxwl)99MLD7{%RNbnZq6sWCq&Vz{e(+pln#N zlTOq%7q!%yR!K7Rvbz#y+FURyaljn%JLCd6#n*4Xz_ME1NY_xu97qH*;bV3qq4e`$Q%iZLpAt#!ZhZ#uT_9hl2q>O zNY5GI*Jbc($|yc5>DKYwLvb0IZ6;-vhGg4_-zSV^ah@~C;aStxrz))#HWm zuY}>$FTBee<+Qk%2Zg1#yoby&l#Pc_sQCWq`q!EGuf=x0B-N49OQ|EZu!_`84ndnT zv&kbU#|ouWY3QMO;=3Q)HaKs77}>3k*kj){ub3_bkVzAK=%a5OGPdE=6JA8xs!git z_U~f0^IO}-_Y*vzg)0#(H-8H9I^=PV)#T;yzr1%WOQJXWe>}>Th|%JdJ$0GJo+x8+E$>gw@;a`2*&mbP`Z|E=0)4Iu1+w=p4Fe> z4-wk?l@&l6o7@<}brO_oUknjOm6 z5(Q$a+mkp4ka@=yr*vWQHk6vQf=NEnA&TlYVinzS^9+s-JB+Q8H5?HZ>U0Ncr&Y@|cSn0Z) z*B16cgpfck0a@*2DswWg%atH7AA1CzGf^wt9>!d)d3$kZ9Fg11-+3oiDlC_7NaXb( zw_J{R#b`H!aj8if+fAeC>u5|j265+VD%oM%=PUR4;ZUeK&QCr4nwo@jeV!o@WBZw* zZ{9L6Y;94yjtR#YQP(6^hlz|c_*EZBnmen@TR3joDQ;a>bl5kdMbDP}XR@3T$Q3V5 z5P6wcit6G!>wU|pLIcS8)<9THRr? zm-oy2v%3sJWsb#AT~Eu&IKk;efyia|gWFK>9h{eXdsx}IFhcT1`|kYB<6`tL7WGmX za1MEF@ypy6(_)eDBa#_pS51N~y838>@Og2e~ipI zg}t8Z?bB~~q_%ILW*CeHJ5fm+Guxi^2C3n@&+N#S-awj-h==UZ+rqDJZ}Ki!vXHyC zjl>-BjOUX^iQxlvu3uZVkX13HCpXJX>fbZa?dlHz$G zl}MbVukyQs1b_j??5YyPsoDn>R|TuE>rEd})tdFKA-A~lm`My0ER7`FR5Itkog&}> z2>JNvxv2CTcJT(4B(vWo#Beg4GVOQ^y9_STlE^{oNx<$aS5Li;_rb8)$0nj=hVlvS zrctsv)lx(uj@$$Us0Em@5);N2t@xi^)3r@rNuiZ2+DTSCK`-tCZQ2q%bGQS}0+YG2 zd8p=l70OoC?6i2Sq?xpHbLU*f@XZ?I%Rq%pB~$y-Wz>*(7|6vWH|FIv2p-{~FET1m zZRT3e+>AJ$3|N=dpn!UcWa_N zw3SW*j4{AdhGyrIF_HyG@jpTS!_=;3jyac2idKdhZIKq;Hzw39bHA3!!Reak^$jxj z#P4fs0?yJgkX#0B@Q6|-k=tMew;W}NH~<`1L_AWuvVDz~&R@1PDd)m-_Lz}YK_NIF zPC+}jbt4rztxD$TXh-7BK{Zvlf(Z1ou}J9fA(Ch#kQ8X-jq;2Fv23WvJ#)omr^C2> zd4D9AP~BRtnvs2?D`^J#qy8!71o8_JwT?oJ3}*(d-ssxB-L#Tv_F9M8ZW!B12p(*4 zg63Z@aX4T|ECBC;jw`Y7MU;LEx4xMypo3CqUNX%V>!TZP+~5K}Tw^(5w8k<84^4{S zMmB52v(faMO)}2urjppfe=KvBJHv3SoP5f9Q>hlT1>LZRzff^V6kV*F4KzLr{}XTR*Wz`z3drJd5Ta!me98aHBoV9GQ~G+*f~3S$pj4kRfpm01-|hGoYt_c(p#2}NRkj( z{Mb-I$zZBSUW2D1x36cG^4%k`u!7!w&E$efmgU@qJqFOgZUaAFqPl$(!nS@Dx$@rT z{#6$Od!&P85|~P?Zal&{a7kbQz#xogn%9_(%x!&b{2y@+oAx;Ft>Lvxp)7G9CPa1H zzIG%X%J~3-dE-93#pjBk(QG4Yi;Kx7QoB(m^A|gm1D46iQR*>_`e#Q`yiHF~)UTd@ zv`MNX+Rr09Dq59os4=NBtZ5KkLk0E4#lkJl$jA(!I8Df`;E>V~%tm-T4!EP@4+&p*E?Y~8mflS! z>H_x`pC_2hD-gi$!je}xQdkUej2hwo9_!b({w-LbndVyxn}Dsp@N zHRx9!Cepk~rrh6ZsLc$TfNMAwJ&@b&QmhEc89SLq(av+8DRQ*I*&~b9bQm=I*-@f} ztt=p#PcGVB#!NFZ#kd2VtafB&NEio-=)4uLOw zQc0^YjI3+?O}xC;HCS&Zw1dfo5(`*u(S&fr zw1iQBFyrP7-^A^cT&9&gdRu+C#~d>0@F$xaL*@;j<1B=5NF3nxQhV2{THagu=i#dB zI)%#EUFndsP9l#Rzs|5}ismwUEsu;t?&)x@?q48xF1{Jmlk$ahlRf=v>FQ{>~b--Wm9Za<(_0 zYP`C(i%FJ7U6y`AFfPl02_Gu37#t`Szx!EgE3Eu5&>@~{dG7T)`6NkVQmn>2m2IAx zQIp3Q9OPF6`z&2)T3^OJLr{|XAMAU51YBG*$c9*+M)IVMLw)BAazHu84tdRVU$mpE zTzF_(+T1a`lH%=t(&23H5C;+<>f3^ZT;vV_?V9oB8{(pLM%=9P*YModQ%RqGz8!%BLQ~~4&Q9owb0{=)Wx*6MAW02>eXzc)X+2impdcfHVE(8aj;;H4?|V$ zAN~>DV(v*UwDx~L3m9@`xRW87*e)=v8-u~)9kW~3J}ADn(e5tqCX6kt0iBjD%@g1% zV*_sloa3HY^%VaA30?mH!bjoTTYKAsGFaWIxU$_8Z4&KbH?SM9Go0rP8GWlZ`;?W< zO?J*pM@uofRgn4FbB{6(O6~_dfJphhF^Zbz^4j}JSakbagLMoOEyta7>m2aBpu*U| zRCLT|KkVZqoKoFr%RSU{>H36=rcWV#KH%H5H*&i+OEi1_P#JdTA#h3L)_ug%%{|0( zG#2;q+lW-k?H=qN5Gc-f6+d}S00)!O0mUX7_0-x_Pl#6DDA64l=Vj0tEs}GGeooPV zG5{SaJz?Rw(__56TZv>@O|($8!C9dgQ@=R-q!KoeI2h_qE8E)1cc@9GNU=p{3>(3k za7@7n5|I52oc9B-6(@*cXVY}wEw2}R4=Bm`W{?sI%8Z6w1GlCz>MKNpriHtE%X_Hd zl12Mft&OkR9cGitj^Tqp+}wHq!9W1yhHlxa)=MSUqHd%S+e75Xb>>NMJnj62W#buR zw;&9tBc)PnD~p>5?xBaylH%oU)>r-BN<^n>spPR)7m`5B4mqnD2AIjKyeec_Wl{_Z zrCG8!5*v_m!3ZPhDYPSB!ha1cqwowS=ITGSO&h(U+d3?_1>`X>SKfBKY!e^?NOj2p zu~~OIhM}z5O>Xz8Z)+P!*GSTsZP8y;)~93Y5KOEHMfK2(&AgYHMO{TH7VXK$X{?Ryb^quSlDvB zU}K)OI^R-@p9)jLcYhHggT;*vmxKO!CvTo1aC3;%vi|X74~E)1gPxpL(syXrdgZ;X z#huog*^wucW`A`mn7oILrETNk6KR(r=DZR@i zXkIBo7A~aZf^oHR)c4Ix9CSSkz}m)#7sM6RuXNo}rMT0kSZpM?S&VUr)Ru@Y(5bpP za#R+~hYCj{dtCT3zAX4js%oFxT5Xl4p?hsLo$s2r7gn&KRS+`eO9W;Nq+#~4&RAe# zd>OgW^$YK{UTW65TynqI?KI1TGf1}$6l`5sk^-}DKu^jUut@_I+o~vr%RzLvS>e&I*3@%qABDwEpp{13N1o01qE&Mm)xNIbnJJ0O< zoZU67t0Y<4ANME@<;ck-=k(2W9w_lbc%Iiu)$iWp?N-*1+FV)55LBMr5){T$1%6MI zxfvvP7{>#pYi+AprQFP`e5{f&xv?eUC{94yc!(<&BWn^t1ml|PG`km`&P3B>W`=21 z#4`MwqkLsO6rU`dt~P}Oo@=3RsgI$lXRg|5y2KZESC(z2#L9x)ph#e5QX^N$7>xY8 z&IdW~S{^#Rj$t*sDm})ZZ!^x&-T6_gdALIqWp^;cY*gGyKu$sF&B*rR@?)k#&E@%0 zc>;Es5Mw@ZTy5m@wB&BUKKI9oELzq}n|6_-kzw# zolNQUIrRNrMYyt_+zH{0qeoYWD=8{L!OFJvBMpWF89AyguEe&su-pc1VjFqw^*z(H zY!}Y+BMpFAn{z7$AmKp*x~VT?)I3Y}qj0wt^V@C85~#=-Rf3SiU>=RY8@d1uVCtGw z+GO#lSlzzODP}6MlI1}MXauqiq!vzFZ(o{-yOq$IZw=b5oYJi2X0`I|!MT{@21a?L zcanD@Tnn#DGO9}j|i{#WTVe^^-s65Cc+{{0{(NJJvzH*=*m4~nDb~>Mk zwF{{)rIHi6VA8a+O>r`zW0$}nH{Hn##xcO=O=ntP6KSn9k=!5jc&!A&HXcR5RcAu& zyX6_c8^Jqwdr%3bsOhbLv9GRttx6DW6UdI>mfG$PWSHqcx`NcjNgBWVDhdK_bn*Gb`v3vUc~j@6^My^iBWcfBB~j(Bzk0WyA9Eu5A) z;ez%xm#n@0yuV?YKFuUf=wrBTtXpUkBEFXirZgbj>lVN!* zs~l~)qhV_kAOV-0k;X>h&p6{a^sAb~&3&h85yKFXwD_D~EN)7WSOuFL4aB;RorN?V z3}`N7)2;0!SedPD(W8P%F&j*VLg29-SIpp$Hxq-{R<^U^%=l6mbokeGt)y|ZGJ>sd zDHtwWKQa5musgsiNUYspO1eIozA+;;%Ub3bzFT3qVD4jrry$^a^aGXCwD~oeSI@sb zWD}V-y}l!8R1C?J@{l%@fzxTnTAp2Q!u^HNw7ZKbq`XU|v0KUh!ENU@<_jV+IRuO% zgYp(U<&Qb2e%)sdqi&JKd1CTL>pXG9cE=*VIPMbx4&pLMC%$UVt$%N-Ph)V_@ka=^ zL1Yq7n8oI1J?nxQ$~h-IoCCq;oqKfJ&AgWLBSx2xAIuKYh@>gqj#>EbdmmmjxjUJj zPxgJK#k|(OT=!d+3y7F7g^5;nT=BH1ZoM;B?lpC|(=RRI)7ndkrH1O+Paoy>MtPjKH)iKW7u!!>ze4iEoQLXLceP%QK`I>NeZRIjmsMOXouzb%7K7#Il%rS*0kE@OUpLX z$$N!`jCQjXRFUBMiNPo3UNeq!laAoBk*RxV+Fp~VU(C-N-k|#uh{o$U4o>5aNs+f4 zo=6;H6`iWQH`;?VFojl=eWJ#4jJ;$SJmfPR0!BtXY1-AD_L&8%TdmA8Ll}|`*+C>E zl~W!@56m0p>PJ1zW!TDWuI%*tR&O(ZoF@QqufP&3pKliL^r9K?+v%}cuod_$sL zYLVv7;a!#EOnGk`V}F)OEDmsSlZ+pweG#Yln^w|1Q6zU-YR#d4X2JfMxH7A{znG~S zkVlufdi7nzbrtgj7YU&1%M^u7awAW$jOAM_R0i%Fs2;WT{{V#+Eg!?W#<3(?)~d^7 zvVUhPG~a0=AslHMfw4mZKtek2Jy$j3<~Pvl!v6pfG1G?HNL8+m(!WHA{X{*~oA_K{;VTf?TM^~c*;UN_h`VONQ&hde)yjGiz5D7VfZPXk9#wj;QN`OJf{l?H?`}b6t{WJX3m$ zrg)!CPZGFLx0X7Da>%yP#KY{U;E%ny6Xmy2ka6o%X&x!kZl_UwXXMFsADkkV*fc6u z5?#*RjE36a9y5WCab9aoN8?5 z+e-6;y8v_mEiUI5^qmmydVx%J5v*BvuUo(qVzC~a;o zw_J&BHn?bC<_L0!m2WN10m5dvy&FrLQt|hYyyc+1Quk0*yz@pi5;L zjhA3!AzoBJEsso&+|-iF);S}$lg_u?F>Gd?m0|^Us~&PrPDmIT7^Ty!?CdQrKHqh3 zG%6x%X`n}rMt5DxQ3)8>z$tcBNWkl}d*EA*FT|0u>J1N^4Z+^p%_J66@! zy1I1N4IkJV>rIJRn+tdH;!?$Y*!pFZIb7f{>(@BU@mO0+*)J_^A-9g^C5G5WpC~MW zWa@tCSIWPB+}Ancx#ZCmR@Z9_f*3I(Y{l~rm}IbEOZDmpt_iMN>^7`!X`1Gjr`!Jk zV#f;G+umF=#M8;Sqj8c;xWf*hlh~ZrY5=zrM%L=qqzD0L^8AEfn6}}93EBo5Je<}x zlWi`ic?@fF3rQoY?k%!I$x*cQ$@z1~IRmY4SV0h#nblT7@`xo(`?n921J#%n$JF$y z*^72y-J6X*&f;abk{g%1NOwZsTd$Zg!sB-s$UXMst!`Ut7aDhlHAyuK+jy=cW_10` zk|os2;3-j!pfLG?JxT0yT0SN4)}JMnh0;vd7Z-^e6`L^_q)fk-7bkh$fEeRHg=$`C zwzvDNZFMa-QFhsIr}vPmxdr^3$S^UyE_;#zJPZy+TE+*%`=^#0Xzo>Ho?Dcf!^xLw zM=s)zBOH=Q=Z-sZ(zoNaT}t98Z@k&AEYL|V0am{9UheWZo zvyS5WZ?kHaw(`jpp&OHDnj(h{oUmogfT`ea$iM{G@$By$vS}-0s4a|g{jvuG$XAh& zhh)@|ys?%WsO{$aJdKywCItM7&H!LG z-~vYjk9Z@VTbU-4?Ls)#PbT475=+OOp@t4lN|ed@R33Aht97d1THUIs(|pLDKQc0= zNJE)7?~oD~BW?L%$V3uxj^vDE zNzOqP1QJi;9a$q(n&G2R^U5K{#2+eSk%c1wbUgRsx(3(Ai*;*ppvO1a+IZFOb%7I z<+&V_&;e8>c$4j@A&yCIB54w7A8NOuQH%lijsWEG){E#3XmvB{*Fxgb>cyxX-bptmnu^|RXsfkY2P2`zGEX3!)w{NnLQt&tA82UG#Abz~`zI%EbITo|pO>aa zGn&j%Z1wF5{{TlDu9QPPozzg9m<#^^q`@{e?nWaE{qO@5l0gFlJwkYuJUf4;+(OWs zDB(eIZzO(nav0f|2IOo)2?MY2=cpCto(|XT^*;u*(=%G>X(VwnCd21k0ln27uo$Wh z-1RIMIUv_e+Pu1yFLQpHh2Mts+ldm}%(cp?1T<=^oGUQeBs+*9`Wymrl4V^Oo*~n0 zJash6vUw9)mbhu)*j5B$0{p~e?q*%i0XPH4=UjHR7oW#%G2@Z3NLv$w5NhB&SD%|gb{Qn|B=NS;#Hk)u3&R4j?PNyagQ zw~_}=wDuD@O={c`aUa{Eyts{wam=`AR52egeuR493>@=Tbb)Sy#@-c<>MP{f{$r4k zHcuhG?pp}J5I`BvUMWZbY4(-qWd9uw5Hh z<+p|eNfn)TLeGJici_s#FKx*RMtrxamO4hHMB_*%JV8X%voLwZC3fX zBLL>G#9!Gt8fd1G>EE=>*3)s%RpPOL<~La2;e+r=z) z_Y&*|88UDXkX$J^;~haf5IDtc_*=!Rbdc!xg(I_po!;gmS+LBjx4$5C>64S|Qp$^M z65C0rX>;4irddL{X(4u9xRZ8HcJ0P86yu)8#kPhmygT;GRcPeAXTsn!{D6g%IQyWu z1n_=hI#;bNjy;NABk-g;W}!5?Jl1zwYlVz3kQiA`a)fRmx{?Vezc}X=L&NtvrG~M1 z>$*7dES*DbQpY<}p~g1hK*{-iO-bQz5Zq}R{N8kyF|Fdf^4rL!DDDOZe7pm-faP(= z%Y$9EiQ$bt&%zOER&1tA$1+IqPGe;mA(l`+P=0N|f-pfeH_?;JeMl@dT`uoWkw4a6 zLn2C&JcLH^h9#5&26u3~k19rMr||T8cC{NrG`4p4%JIm{F8P_JAhdrlIKdzcag`jA z#dBUDu(*oW*x16>I)e!j!pQ3<%g-4__mOxyIv;hN98DO?uuR zx^L~c^sBp7js>;10vQe)aLZui4fq7$FyQ)Cy@D^06@9U$ zv9#MOO*D~4C1}DO!dxl9Rtf;m8RN00Y8nK7A=WL{X1Kh!yoxop^QHpc72UW3yzbiN z8;o*BIO4PP3+*Io@Yw1X62SieXEO)3iyLHCVpDE%Re>CI?~YAsK=yYUwY=8$O3h?^ z=$09&=x=gOWo&e9Y8IDG`&Ip_1h^t!v|U<1CN~o(!l&I{ zgz!gVYaVa(dx?DIR#6*SMKU;4i0mYt?T(6}fg>k8bIn}UC6X-!3x&LNvt@)_ov}^j zD}1n(B>w;tWC4J3PbaTGugMg;N7>_Pq0{1;OOu6MnP1Cexv)+KNE<*0AmrfE9gA}Y z)Aacxg>7CN<=E|G5tG!6GmPW|#VG8fyOv1oZvM@E z4Y)`|tsKjDmIEQW$F&$_F9Z$^LzbYlmWGyx;(PBDSgx0OA-a=OQm+(>(S{&zSsVg0 zi~)c>G7bng>~xJw#FjSqZ7tMKriBk`CupaLe5cMN;FTcYZeDSL%9`hOT_vvc`85x+ z-CfGjd62FYmPC*Sc2YqAI`T7<`18=|dYa4O_Zo$~R&S@D-d$R`CPzC=YF8P`s0_Q0 z1adK&nLfo%#zwPaEzOO*Q5fd8X7fwCd6F~6PFM_lq~Wp&Cku`^rfD{FYfE_6@@}-Z z3|=)r#gqivfx7U(9)|-M?^4=$k#6)wnV^}it?om~Y}1fhPcsQBfJPaVwm>}KA4=7^ zZ64k2($-BvAMHZxaz4}ycQS4*_F%5KC7Bi20#6-y!7tp;(Bm((%k3gK=CNkAypK?8 zXysfNM|61EK3)nGd=Psv`qpoUd`)-ZEjwksyphP!reb7F21X>tB_jeOQ` zG&sn{LEH!j1OvettyZXAPfXG+<Ylkyc_xBw34HI%h3 zNpunJZ*Q!xE-daOiXA?5f(gTjjEIjL2!aj4p~LqB0aqmRiyA(nnx%tZS=s7L@k$D5 zt8jkJG^F`aZEw9Kj=_gcRL-%SZTKNExoh-oqXtbfswc_6@V_p=Q$i6lxl+g%`1Ne-fGcJ4!Ljr zgEiI5EX#3vBl|0t9&8OBTg+fefWLSV?rWj=k!yM2O9?c47L8U*(1S~NN$$M3;tjEY z+`=$iFy2W!urLNI$o0Kc%>}&PZN8*!$axaa_Yk|Qj60F{oDAfXyK{Hqr148!M|t+! zIi$4^lFJ_UZ!`nTCsZBBs0?%7ua^3Z>O33q2I%S1Tijd4d2Jf3I-s6S(*zk-ZGesx zG3AHM4l$4oR=M%cn`z<^V{HzZKA9THJaP+2;*uxw+bV!`LQdVxGC&;nu47fyKeg=s z)g`jrH<+lh+{T_+Pc4fp7}zrd^5Z=~2iBprH{KwdZQL?0n{*0@Be9KEDB=NJ#lax$ zWe4Wx8R~IQlzyj2W1?v?$t2Lm(pqV(E+UpJ)pP8CPto2+KC?@HojQIXqaoy@u0PO+g^i?c3;1j`=JQNTQyw6iRT*Ri=Z?{*5ms^-rh+*&eBFA^5V;G1vor0Bc9pjxBMY=@1wL5 zY3p#Z&mG!0K4g$E%N?zsl^Atg6W5Syb6faD9$-wvxNX!P^Aw>`B0?=1g*l&G?Zl?zI^&tfqFinm2_( zVnSdu?A{D-ZUt zLEC^x&PHq9A@Q!8@xQ<`CZ#NJ>Vnc6IiiYEZQ4~NM>uYGAG^F9?IiUiV>ayWZ5^!7 zoqXm^3Pg_Q%(+m}+!=7K8zYQxrv+PpPqD0a(l4#w3t?+4(OR?0WRNb*Z99~L0b)vl z)N|00$93@s!j}FU@y5BQwT;!paKd64x+t-}W& z0FR5GE(Jt|@%Lib?mna*yw{U0F;-^#MV@h|$hRvDBL4Qz>@YmhO#|-vaKm6w3a;l; z3um5~C#qk>x^|IkHLbiYD#tW)DZL0mZxo(Qt;Nl=J6ylaO11z;Dyf0@RGxinGvW1(zNzBWy1dLGX7bFl z$+-Ywm3A2UR1jIP4l%&2gC3?VCev=Ax;m$x@`zXEj(Hp9UD<8FE?5o$!(-C4taT{# zT@q%sitZIu@+V8V3az@93{C(I^6p`l^#G1&*;slrM^m<@#Is3yvN;>C2s>W^ zcn(~XjN>^u=8J=|o2O}#MWx(bEXwoQ!m_kRC2mBUh}tuNq>^`SZ<%sNFiQ)MBSn(N z)+l3>%5&#Mapk%xNb(ywErTQlq0}O{x3!VszPP%( zjn_|RU88D}k}+U1jzO5=kUWYRol-rS$sZ{L)O6s|Zska9uO_)=AK30S1(It+ zEy25tMDQvw0lssI0)p581D7E4lT!Gr$C~fNsc$tI^y@D=)+w~-w2nXc^Hz0qmunn} znTn}&;Ddu%SGHH5@Qcf7EO(a{cX7up%Ud*(ED(tmk|%zE79rT=WRN-v*3)&nb&@G= zw5TkuZ#Td#?HST5lFPLjRgPm3vV|lQ&S`R@ZZ=DKq15DCvTPR45pG%SJmz-VT~UZo z33g4Y81w-1&0fCHrO|Yt_m>vBwbM9jpRv4>2(B0A5XcTU1y;^ea)u;()Rv7so|Q6} zigA@$qkEKn_eadc%^IBioTy?O1EHrow*lY_SXx6qIZM z%3~A-`j)&Uphj-wA8L-#X0U?p&|L*+k(en9v=N*$j^D-HFE;!&aM!lCkljgV1QFd& zZEA&DMBJ*!d})GP=3U?%DBKCbCmjC(hf3;3NiA-_(J!r|NW_6c222g4Fv}hT4W|bH zbrrL$3!s*_lj*YQ@)q+J@WfV2(~zEHf^fOOBoYUpJ%G7iK-6vY>ou`hgpYR=OLDge zVQ3=?3*&xFWDTqG(4sQYb#i+R^A4HMGd+%{zsZw7DBkmC|7AXIZip| zj}P3YqKkE?dCd=-DTY`h3edZdyFYlxE1irLa&hmPwXNvdZlML!T--x_aV5lY+@z5C zZ*OY}c!@5&C>vG2UzmnC$tI_$M`O=*8#yEw(oVAtHCg8eXYU?HRVoTG$nV^ro7$~v zc{+aUX{3TnbVs<6CM6^;72U`=1~|&9jiZKOJ!!hEx|X%4Y5F3`9-(Jpc_)!4+dR8* zxpJ)gusGejoB&xtJ*l&JZd)rmyLQv$d$>H3hDkPv9F}qAD&ZMO+#Bz79SN#4X07xx z+g(X&bvYK^;wCXm<}Le3Z#cmv|z06o7P5U z;4|fb^#Jk57#ftfnof%Fm{K?{A7t`wBYJ^^+;Q@-!7KIWps6nP%g4H!-%y%ci0xy- zsx*v&mvaN0fb63x0UQQBGgE7JlRlp`mr=6GZXF{rs^k1IcLD1;`Dwupf8$j~x8KoP))ydzq~4R^1_%X1qae^Jgq#ZUEbi zsAf{#&&a(2rrX}y4a&v+2S{lBA9lfMB zx{}GX5gIkT8&=*0buvm>arZ%CmK=h49qLfvFiO%5FEUO{qn8+ z4%m;L&JSv@4c?yD7fW$&wy`40qUtuw!4h!M?L7!>v93C?&w3fBk)x`3S`ACUULDjS zhswOvt}bRX23cBoA(%%H3J&E^%OP%@fPE|K4+-B`-|13V$*pQO`la2$lgsmEkU|zQ zBeMENGJ|OD4n_`Z<$G;;b$tpOcCfXQ`p(hx>mdZ2Bxs&lB!zf5W)CBBF_2V{a7}$B zt$Zod<$VdXn}v>RTcp+z#l*f?Q5Tgb%^R|pi;^u>8TovE&kG!d=J?h@_{is<@ej#b88 zIT7UMYw{h$xGnD{or_fdyX^FGfE ziy}pEA&p~6n{#Ei42E^ubBuLvdRJy$trW?{e0r8`bd`$w(^R^STb)-{3~uezqW=J- ztFTwjNWmeTk_SQ$9M@-OX$s!lTAN#_?d)ZjY}U-*Wn4DGu?9c9EZuhJ3d5e&#%dlP zjt||zaWruLyXqEI~~@vu+JuK{FIhSQHa7X&7Odfk&Jta(eRz3>Dt}(%#ckr zyIbtqz)Z34I9J-l2OJeS_2A@DsOcK3>T_7LG}qR$JQ6P0i$BbF#LO~2O}uT#UWXMH zyJHRHOJ}6m-&@I)g64H*U9uM3q!Yq{w-_8_chZ^(c^yB)Z?o!p{4J?NKiL$@76w*9 zJ;FIqsKgM#L*SBfGERF{i0xO!y8fa4i>BU3BI+@SVTOEd-x*OB>;uU_OB0NY^s3(u zua``}iW}%HW0Gh*m|~XVPc9@ogN{#@s7NOx7-N%;4I196{t?yuK(_KrXD5>j#T>GU zJjC-BL{NBmLbDF1g{|}p7Cb$#*{+_;sxD?eXp$Jh$fgqcIBa9hZn(})3Bat) zX2$zZzJpCSR%p{0n5ip^K*!4)wvIEvBRrm@=B@aUt&WF3`Wsv6*HcHjOQ_Jt4AQ9# zQF-7i3;=SZu5*%UHSZEHhVE=*c<&d)4AEKL&VeMex_}oCG;*G@5|MyUPG~f;wx(s& zQ0Q8mHuh@rHj?F(IV#rV5!tZVEH?m2#_qiHr(t~#t*S>bo@?o@ZQfgk@?Ax88_4NMV{bUC}sSEx_t=xHcVjkPl(V>`Tzj_=ftUc+%A0N94@p%$u!`F#;ARC+@Ht zc7xR5lg29!O)mMYT4&|g{HnJ?1_8mwE3DPD=yeSn?H3m^J6S}_ zYV5f#4274$bc`x>`VYV5()QE?0S|`qai;xdI4)xvmdMz*eRZ7z)LA;4vJIFe>kcy!rJzdpB(^8RoiZ z;=SL6G8SK*zlBb5jNv{~4n}H9RMRu`{{Rd}Wnpn8%C*$Wg7GD2pKR{&kKL6S0fQDD z06p_owI2*kZKcN}O&cYgi+ILsblq{eM%;C8nlds8$6R#HPjhc3pmh^(aW%{_v&xF7 zRndXue1w1(k};KFq>k0G6x(j&vYYI#8c0G;s$-69ZXY(m(1U^xJ;z*7-%)a-n3us9 zmiAL$S;)|Nk)&ox9TbDiiyqz^zi!w$>0Iu;r^%w(KyEE<=9r+_}zwZ{BHrW zFnOll~FU_(FANwVE4vcgGS;RzoXFt^)>9 zz$(BJ+j!^NktK~@RZk8!pJi`v_H8D1cnhI2yFT6R$vc4|Mt_H5j+M2bOxG8&>C5Lz zvMO6$MoNaUgU$@hCR{!a&Ajwew<5XAyO|D?XL%aN(p$$ck_edMGyyg+3;ad*fO)_e z`fh02a%r)7er2wqKCKLm72%PhxP|hiHZWj8VsJ^xBO`(_Q6Rn9V@;IBdlZ+8CDoja zZzM@!GesnAycbp62J{6NZ%|7S_iBXDf5KBWs>!zA-$}Fv(e(?R!f7LCQmineBMKMq z5CC4MiZw> zT16|Cnm$QpZP?lhl6gFz#-%oBwmL5q=}}n64eiFCqxm|N&vPF9NYTSE5f}M@B~_CE z5s|o`O6Es~?CfRxWOFnk2Q0$_&avDXRzR3Llt@6&xH#sExnq-4FiCMVh8cf(ZFs=P zZg>gQ5)9T=d7{CDxc$^42nZx&F@-@PQm6O~cOI6m9+FKmnX6Dh@pjN!;P} zFNc$OW5ZKNHJl<#iD6|>#bmM@3k6Y-+1kO#I0GXiIIBJi)@IYK{?B^SNo%H&G8Vfm zHmL|>QG>}WTXFeG;2yQr+IWJ-e-qfO@ZC)D&ai#1X%(c2RUH*%MFg~)N-5+Ilw=%p z&i?>yt);HH95Fn`B#OdBQa6A}V#>%f_m?F`K2Sv)txDTtKgTy(dg;p@#hh(BPOTFZ z@}o$&#x`-av)hosoE+9C!yPhv5v*&Aacif4WFo9K^Mf70lH)1@3}QtJua@JLTyt7F zmxvl$n}0GGV`ySROek2czyJx8w}lE0;rF+7rSP2XuXx>b_VZ_tR*F@;fxuHD@ZmB@ z3Rf(^^$o@`#Z75HX3z`B zj8}^;oo{8Usnc#HSgs(7DV8!0^W^~e9YW_lI+A-=s(g0v%V>WIZZChcZRA+vx3vAROE0;Cm63kF4?oQ z5zy*&m@R*|FaH3tF0AzZA5gSQc|Z)(TZAfG8R|;{-zn+Gu$s$XwQmZ~8p0=r)I6y? zZ0hWVgX~n~0iJL{1oPBZZN1A|>K|ny-r3W1gff*SjxfH183Ul`PimS?PU6tTbg(ox zo?h9Cx9+4}*&7BhI+4drAMaPLaTh#Iqb|FtU0yc(UDnXaXXaiBx2OdIHvlZ0s5?N% zL(?^-sG|5AUxpZEhDE%&B+8{;)_ZWga0lM`LC;^Cjzv_pu(yxGw+(p*nR8x4( z!uo~Pwc<2O<+At9@SPIMNxTx{!=plo74LX#pES`GSSP zBiIqeP3*#5%sVY+<3ZJ9kyhduIfgSVvHswx-SYJVb1**Onw!LzSBo5QpE@{J4bY;f zkyQyBn>qW%n?9V7J64ol3%Kyiw^Lkc(9GM)d0W@)_&5uU;F9aOmIvj zme%6pX(U~+JHq&vE`I31&Hy7BKXe}W6&WUHb4Nz;H}~Nl>RJ+hMRvz6%8s4(oL3{MSxT4C%`{(aw@I7I z-Ml3DAg~7ow{QU=m;N5nM7sXMWjo` zhG5cOy7?0MQ>(}2w%ke`hU|=P001&NfNQ7J1Rfr+jjiMRRmJRr2!V`C9MK|W6?!O; zKh6Ep#|Hwld@rKv8jhHg>9SZ!C7!~?jwDv-Sqb1_PSVG>Z%F)ErM8EA9Fp8KTdVz$ zEUWYGIc3=DaK(lWIOn}$IQJxL2Z$j|e}u22%eOJj}|cIS~>+HIt9d@5O=P?|P|{6icn#66TM z4rSv9KPF3L{mxI#S-Ma)0t(to~sI9!$o@NgL2bN`M%wackAvtlJj4?jK7Upt^#@uOtYVgE%_m>x!^DJl`CU|2JN?4E`qc{p! zGJrY4jN-8Ln=6ebS6jq@VP4m4ph z?OH`dWx0^_Br=evc_)4jHj&$&KGVffYt4A66^t;6(kNC;TgMY1$+tp^*bEq800GIz zOjfaai5t2t{r0J#wT!nd4x6Ul$t}CVbD4bi8+_77q8+<{AZHzTty#4T-6SriCjS6R zh9!6|Zmr`jCS%*d0D<##Bm z?E}C3d_Y5Cdf_U>LuVoLH31(()gytld4FP7$O>*%2xd{M}5BrDG87BC90`l9*C=nrFq zTbe|trucd**(Uo!Tf=X0rxR|i(OpBJQZPt#;kRTKR{&$2Q}9-tx*nx9n`%+N+9IAG zDn~v_Jczq@MxQq=$zzfi139TLFQKsT%x!$_XLP~jL@@z{E<#Tk92M9~zDEIx9FbYN zmx#3Xxw^HpwUFL@oo=J^K1No^^8#QUz~d`}j2!Z6&`8PfliX^0-KtENQd>x^WEc=v z3%G^{I984J^Xx}@gm|vwQ}V*whmO@=)^Q`9&~x)|91=?fZgLBH3caj&Uq{s&?RJ+} zHn!_LakG#kf+<_(aDa@EfDTCHA8ge>5NY=JT0Gj7wCf{U%l3PxA1XX$clqECn7?DzORXBM?vwZ5hTv801uP z>J~PhKhk_bX=!n3sQ|`XNY%t|C{3Y&KXm1ruT7x!=8>#+JKbdJ8a3Uo*zTr>R*qjT z36Pm2yxa1Sfr|XCgVNN9POj`D6fhagh?|2C{6eW|rw&$u_fC$mR%c zSr$}`{H_m1ZQD){PES1zN2A*PxH4(#*78j%BSw%vnQp2%LOOCr3j%T!1D=N1qhm`= zzxxKeY}UGc-fg3f6MF*5Kb!Len`p)vi?%SQ0P~#JVc;9veG=B{@>_fDYHJonxwnx< z*>_2kATgD8DkE$t+yDb7BC);_Xn$oPURm)+!?ND^@_B9S?W|+C zl0}6?rB-8%sTnMxMi`JzF_1p)D(TCiGVXQXuq^)o+26D(-(6|5HHFoU<&q}+yeDEv zF#NX$GBQR0_pZ5!Es}29n_FbaV)6!D4SK+VzvtmzIWlWqqhX->2pUvj;t@O^i|YW zXO2s)A_)sbW-=8P>Kk!*-29+7P}n?R)$Mo1m);w+)qF2=BS&tx>w9qx$`+GOx{MUq zgps%8K&-ecfG{zN^|k17%0a4MtU9H@g(i{?gJ(J{sSy+V%xcP8NG_R-( z)if1ZM_l$I_ax;t29g=(pJodErjQ? zfq=tzOdNGJBfRnGdUfP6>LXT??4`3R?}{}9P?3fteQEkcT8(*s~Ih0yu6Q8htIcZhnA_9AYgwM z9T;P{0OP%Ez5LcUFUKfGY%H!j0KE<2z4EyQy5Q&W&`-98yVrmUnaH?NYya-28!95rLfWIpAkQGc#P* z?lg&-E0mk-Q)#VAp=0^<#|vl0XR!~vXRB@Gm`do|T1isMid$!{cQaTgw1vlj#A+^3E| z1~|c^##&#Ke|cO7 zpS7j3$fySFNXVoWJ4rYkpOlW6H1w;#v|mH0L2+>mk;e&jjRbBQFja8Men3B#PR ztH(gw;t4E&v@F^FVHNah%K*S!5Uqg4*Daoz&nF_TOJ%8e=)-S&9oPCACAwbO+A7By zM%xgOFxXB)qi2uD4F@&Z$e$9;cV`?i-89X85lI#jV#2ZcgEvA{D)I&f;xWfNT85l; ztzk6?W@!G#yIF1%%D5;1V(bEd*Y=>|;2X1?Tnuo)B6ngdKiD9T(S>MecpBDB8*<$3j(#I(%D}@I+hr{1#)1kML;`-jsA1pJp;Q}mMoZ$)YxD**J*mcEP(Jw7zi&$u_qcO)I zy0wN#_X&2k!ro>82m>i9*~wnQv@}l--gxK4wy-lb-Oa?vzjQHKC20P5*OmEVQg;!L zl|eZ*I)?fbd_|_Vr*90_h{EbWHcN@^n1z)%B^h}eLaxEJLEfh)tzYp(RUkr&S03a-{^PFRXde()l)!w`zv5jPo&q=pyWs#<5P=z;{ z5k?3NCf}HF3k(vZR2t5=b#bi8b!{i^<5`f&aRGm{#y2iLZlo(9D~t_{axf~5zJ@f2 zZIb1!xBHzd1lV|6k|76B2f zWP(Nme54$*gMol3ztnCu{Vz?tTZvj@WcL@Ck(rT!F_!-TWR*@12kV-TPg{wnhhCdd zu(O9y)P=0OuD3|#<6z)L^AHrEP|c25ec_Ta?xC9LE+e;Dnn?7T34X>23{p_@^%v&mi^#o*<;077@g2K`r zR?ke1ONp){nHhY~E6a&U-0W4`hT2HT3OaF`akz67q6R%5Rku~WlGwu@`;e-erB?Yt zQbvAK{{SgJdjyQtZwl-1=&NdBSuO6NR*p@$l0{Md*DH*Wdf?z>4r*Hkx7Ee)F_{}| zF<>!;WN-C|#WR=AGk^gkcjp(cJP|L3?IYCZjjv{4~Q;ru5~}Ln~9y`P2Oy~u*#qf zpn3z4J;|pje8XzZE4rx}10ZeS5^}&EYd>7NxbbeN*HS8p zBezYcSb2sp8A6Vji~;vXa6L^3n;h-i-ae_2w$ZG_68rxEg}(9Q__#UfPvR=|o}3p` zQ4}`~aL($m#Dwh%zkP@IS8nD!@!0jJL2qwuI|(h%pDbaO(o7=^Z~~5={dwz(>V}7D zK8<(w$GC-cAu3tQgUonhT{)z(;6dzjeV zT_FwTw*zc=Ckc(f5+1SS{&*#PAIYJFQ* zvC_1-Y?JKsX}8-vyHu0S+rt(t!z>O)dF0@5aY=D`G`dy0CBK_*s1$%pAloG5hFz-1 zovN(49D;TZDHUaLE+WxZ%F^=1t`hp=PK)hmvTPBZ&U)mw0&OR0IXv--i^Pyee+9pj z9MW7#gQ=4qL+w>qKx~taPVD~x7d+rpdJ(X-@b;U3G}qIAX&E86wvBel1PZK=BNiv+ zL(xZE9?Oc*(dV-8W`(DT+<}(^ag%u}xa=hMHT5Tkt?ci-5VnI@b-q~QFJ%?N`JrRw*^x

k;cG^0%_4V@GLl>DeWkXFM+`B?6bS_E2Jq~a9tNVCG0vqufHJgX!9pa@X>&KWo4k)KX$$IP}zRu<~AJSXbN;h}cV`@m@x3P1G<(UC;^s(hEmX$BI73A7Gi)sTTjs*BV7B&rw(A=Gk}tEEn8E{@8+58Ta74RECnGr=itwwsM2jNG8Exi_-7Xw6 zEP=T^a363aj-Va|cjc1(%CQ)!UROJvcG}+B+f2N(xLe64ww12@jm7RIGZ4r7p>S|B zlEITX#sjqb)&9Y=Yiq^7fgxof8!w1mi%E06d=N#7?W#Op@iQ}-E{yDCsjiJPkglCbrM;QJd4hI}$oScg8p|X8nTWPf` zTS())y5DVL4%G?eo$MDohExoChR@Y3wHU2zrIPE+n(9N3FKV%uE~=~Mb=)#Z#~`mv znsJqpa_(e!yG0P|Ha2(5b$w}WRpj#SgGPl3V*7~)X6{HMuHFw?$?+zo3+oz%)GC)& zw^F-DY$Oec*s(*jf(AZefISZtd&L@!#m&5zcaV?ls~d9B?ID^5CF2Ki8Ndqc4l(j% z^sG~DZ)f|tVM~c2RAvA#mna8<<$c(pj6#taaVh}0 zU^xQ?w`80Ey|}GQJNv8cIymkwE++dtO(Pqdk1PZ+laj}hI4!iExERS8$J6GvHu{9q zv}*;$#3^p&6=r2%T;y9C|4><@TB1L&0g_8 z!+Vv3PP%=<>I6`+#(`vx5TQiU$Ie4}fk7OS4o^xnOj1nd-5nycvAVX7*5NKAo!T_> znh2W@D;U)0?i`NeZ%}I2h_sLFyX`t@8B*I(8|@^>-0=cbI{};$6CR+0$2qFHtIaO2 z442P!_Ip)XClfK)0}^_JxMw7L;FH)@+ua&(5@>BCcM-!ijz(aWe|;HpaT^_?Ndhk% za1`^LQE;&Zm93)Q-YZP98>a@{wuB+RQVKubAZ4?jndzREEntquNsC+NOIegWeovDj zMhq2z!QIFNEFAXEk8E1c&Q=${w775@MV_g%Hq z?XIM`ir&&Q=ib7*zTkOPkTJnl#?hVu@1GK2@Dx)r_3>#|*W7C>L4VyCgjS({LY1EJ1r&3d)&Tv?s!-{ihQ)+r#nw8eu zXj)&hNXX^YAIoVYIUJk?W5*c;b?G;SZB5Rls9M}0v$nkR;Lx`J)DYW8zk%FtTc z$Qm}47ixLg!vYGElZGLb`qk}H*HqWE`R%5R-d`JdAIvMUWq_+WMh*8IZUA*8bDvy& zD@#OKFIw{5V`&&7%o&x~wpV8aebCBx9@W`+dOcHB)b1`WV{J=xURAUc1>H0Z3EZls zepLXj?2@}j9PyiWG+l{~izcD3cy~{=RMAT>*sg5WWa595X+q6{PVA|69JuGDZTO?% zz2AcTQ+Z;xu*W66+>l7~Ok|1WSqMAXhXVybamFxvn#;7cvb6CX&DPCI&TS^*Cb*In ziguA1cR`22`Gcrku1P#|!LEnI9~A!GE$*W?+BFIFt6NCrlI*-KaOTkrj21Ju%Vtm* zoO7H~ZGuG$n;A5_JH?LGuBOuN*ldY*z>%C44&&xvjKx7b6P`_3w$g^BWi#B~T3Tva zrk-wKw%pmdc$f(su-v7WBaWvBsN6xWT*a;Ublt^oabmADX4)~j;o2K?VY*R}3}lc_ zPU1%y=Ck}t*IHJiJod8~?ljpV6VK&5F|()c=0pS>VOxNs8~}Maq_-Z((9~m%TU~2A zhO@s&{F}9g;S3KPg$%oJ*>ClL9hm#Qcp|9yZ^F%^UfeaVp=&gd!8Dgp+*z~78uN)? zImAvvaychBz^qldns~(0U$5C=jVGQ1awa0*=GzjI4jGk>Na0BYj+DB_wAV5%#f;xz zw{12nJLyB1%Y|d|vXhOtR41S%ea%-ZdJ%gV-XvL|*6mtJl#7H`XGY4V;&{mPBw%21 zx1p;;&Wk~2k{D-c!G=qlkC;UfUCI@XcJ=@cPH~JH#np9aZ-xAgZkLngR5T2+{Mk^f z#Qo^b+~G$jz6q)B{6Qtn#jI^L#GhwykqK0A017$`Fee;xeqIQ{qf$!N8m+~h&6KvW ztZWoZZjl2hm5I*M3G0#5pg7~xYfgZ@>}uAr<4}ai?)Ls^X%2CO3^1Y3IP9Z>4l5r? zxU-5Kw;ohbNUP@~kkVUBF_+!-%K$p==b^5fPS$kYX2()lrh`X{YlV^_Z)!HN44_0M z1mlB|oMUPA6iJ6Jg*BQTQbQb)SgxS2wn>qh(7dD_yGZ^V4x72hI0l)k!91orjY{_2 zq-lg=^2!MZmzP+-dAN)pmyB?5ah#J{c3P#3QN6$RUYjNLoc76aBa*SqGF78h7z-fs zmo3!f_3wdsZF#53Zw&eq~hQXN?Rs(U!Dzjt=>mPL={;bl^+Mt<<;7#v(m zMQQA#d$07%*zH+{U8IvSyOPRA;gIY??*wBfiig1S+*!m~=SGs~>ffeNpuXk2DD{d;f#v|mB;=O>abG=adJV3Js_F72%Uj2F3i*C;J4rapVM7y>o;`9874-M*C3*dy z;LjpUNi_>wGq@GRnS^61_&ah)+}Xzj4`cG3wavVmgBz)#nn)#6Hu6wPp@;*6g~%#S z-kjH;mvv`mB3DZNk-vW}ylZqVTG`AOB%{2nvK39Bh96VLJ1GaDt$RNhuZuOkLs-0# zZ!Q`|xxV=}FESOuRmRoa!|soljCD25>AEr0{6yBWNYToX7ZR2%9dnjaIQgH944<1G zq}Gi0x`mtC>GtU0IM?qAzZ89A@ z#&2gj$8T;M%4|)&P~|}?c|S4Q+0Q~nYeAq{%V}*JO(pM{9D$;D8=_H@zkYHVRGjYY zJ;r1?h;Lzy?JeZAxNDfh3u}300tS^(agagV$zU_VKbSIGBR*@l4WatNo4kx)>cC|>aMc8?^qca`PEyMk^TLU&#yCvX|hTIe)yiI*M`o;YqJntOX;F^Ql}&lI~qdVpZ3IW3cc zmB)P1uE-YFDEU@;*1h)ChB+g*xRT=PNkZJlUDc2(1Gfc;9GrmM`qoX1>wkYVEV0Ej zA!KpqWELP`A?QX|83#Dz;8ypH^cC0iMVm=B>uV&c!%GH2u&$lzdnwaVDT zXFT^0aLg_wkK~9-6l@t844@CLM>xkh%~VNuIt^O(>eEMFULQ1xL6yOfjGO|>a7IRO zI()bWv?cKsth%MF(L%F%)|)R`$!LV29h0gq-I&|+ZYPnP9+is;xYn=iWAnD8L1FSt z$>hhuDmP~s=eHTi>TymoGD&p>;ktO1+GyfL9%j{aaKwOcpbmKCU{tgx%}%1X{5xKbFELJkH)48DF{qmEjt==zPHh%PPSOIg0xr^-OL+|0_G8KfX6 z+m#ErDIHjx9OAI=FX6Vok~^oqn$PU;#UY01e)Mlp6M#cexlLlUL zp(d#vz0+z|upk!FiTPOYXWSd*Rs$@!%4Z$3QtDTb!KrEt_ZoMc!XXEpKG%%5&6wlr zL1sI$I5<9)7BgYadi?f!MU+~6+HBVG z*+Qk1Jbq=m$PA0MkIbc5g~&Mhhd4Et;d6Csqu*I-k;fgblQIBYZ!jw{211{BwsD?> z=Z=-aUB=gbIJ#S(K5a%}$d?hQU;sy9&fEYvKG{8KDC#w$I=>lQ{g&(Ow%2y|3oLoK z!)`}nP9_c4=gDHj2RY-VE{&`-*CO>|x6~wsgH4FGMRDapCfRY1zKDvrP%uKAlUN#_ zopr3aWU~bCq=K%YAYj|=9{7;~27V52Qs%f_C=e!Q^o50&s z8xK3f66^ygAh#IgRkXNkxlZp}{@S~m)@W6(E+JTv7w;=GfL!2`tVqJ-bmQsKX$A>A z3vsDlLYDGc+|04dW{if(gh=j;Paa_k0KmXpjO14*4fWQacXx4a%Oa%91hW4C48WMb1LTjtYvA|;o|b{i_I!BZuwbIJ1ZXC z4tnR(yGVRHec_(~Cx|U?B#HGSa|o6@-z_46Z5JcUUKMvr`4|KT+gu!aWKXJjo^`Bi zb`oogc|&fGk%0dI!Uv!|>(Zc@X`c^c(`@FonQkR(gobE>%Pdz=qKt;)e&~>s(;r%H zT8761W8w&JG~;iw3#5k8i#%`--!ll&kw^flutm#uAP_p!JTDt+i)UvIvdM7-24fq4 zth%;S&cIF!DuPFR2I8W9J68B-s^3}MlDAL^A%Z-sqLq=9lD!BAcHEER2c=iH)otv2 zUumgJ9E964yg@){=Ri(lWzSq>f$YC*6 z3-c)gGOWZACIHCgmX>B2=eo32^DRs1^DH*U%Y~XI#CaSs+#F@OBzCOFxUh#?lHTfA zrn0(#ghXNmvoZOIQU^T_?x36j#%puKvs&Laqj1+&vB_@n{IE&oIFZ9LsBM5S3_xzZ zdhs4O>vPw7AqRyoo%;c3X&ABevim<*>jh$-rO;?^|9T)#3XEl$IrJ z*6w)hi(Sv>EWkq|$-x;4>_G$%y|*|yrb{fB)?e{3h)CBKaYR!JKF-Z3#AU`e{H2(M z$Wl1xnr69oW2#%($z$hzk3?&jl#SkX+zq#6hCRg_V-kRnGOBqb+*R-aqGv%ZGj8ClvxETvz_F>VWo z$u3UfSZ%>OI$&m(i8Ux}?yoHFqqy_2=D`y``aXIG*bWaLbb5}Jr=>{VAdgSChR)V& ztLsTEh!ZSv{H~=~u{cE`bB4($@Ty6qE8U$HasH`qCKU{nFCxX3c(n2jFov0 z9dNnHt|~cZxznPOdx%nLh*yZQA!2CyvoATo&!{=z=Dh~P#`ZoNw$!Yzt)tc>xUiNf zQe);vYK4n_?BjObz$gR;13cgg^Iw})(_2uto=bn7XNgi1<+vCajQat`M<8c`N+923 zb4~Hp?w2l~bv4nrOERs+x~wWwYOyJtGPcg0^T-CZwH=AP`P*#cJAE>3YoV z9n{y5TEdatt*lB>=lO!m5)c?ERXdku##Zzc>ZtU*^&wB&5TuxgC~TNNa2{< zn4vM;%+a)xZ7vubuL?r&aybEqy>mVy@kA+o6|KCQdqS)VvMI!}9DKm%g(HGF#&Pr_ zQS2Y^O#yXb@qfg&(1*3tbuBy1i*s%+M2a!y5CLt3DcS%T2Nk*h00kzB%I8h+3dk;o zq?*0d3a^HmSegKOWP_GaxfstCYxXbDt^6b78Jat*#TVKMySjqmyp@a0xrsqsXJA!O zOAc5m$f|$0hNE=>@cdWEuYIQ7teR!ztiQVoQN(~`a@)cXPCnrEuQkj4tuti{L8HmM zCef#d;l8-k7yC8KI|$|mPu;Fw5O5evzzQ3Jq>y;!BG&FK^vfwOA%f|2tBDjehY;L} z51Lw2%CQ;1ByqsxfGag-i$u_Od2-!cI1=2<(J$F>cPZ>QHz;>x0ha4p+6}y3D7KOr zVo8?z;wwn!wvnNa&Y8Ci$AGM=p|Ya`?waFMVKb0Jz%=(tJ-7*{W)I6A#Y%J}TMVaL; zB2&gQ(_wN>266!-1e|8wG1g#Tv&t^INb*T3Rg5vhovr)?V3z1P=NPVv7)9ozsalIC z^BNvt!GwaO;1s~h=V;Fu!}{i{*!WK3C~Wa+t*PD>XPnHh60#$mtgnn^Q~;!qLgaGP zA@Z0uuJ=Yyv&SP`M+~;i?27TLZ`~x3usC&S$j3sYo_HDP1IIR=(tV!B)_WN~&Sw!A zRmlaHb1p*V2^@k+$0HS%)>jie&1!9Bg2LM7X;NLV>_AnptPUK2LD~jzy*a3EyhxgL zv@ad1+$o9VWsTA};%Po|ryRR(ZoLOUFa=iP>LgmK_}^ z5#{b+0M7@aeDjn8eDL^kjrr$(MvbV10HuM z!xX?$F}RZWQUR-9*}8-_Q(aox*xi3-YLBNi)Jf(vr3iTCXhR%%oVGx1!+7HuJnVOn zTupI3-WM3;=jA!Q@W)@g@MnwkyVhSiD?MMy@+Z1z<3d|@ zTLU;vp~=TV?Sndvv|85mTRVMbMYp=WgSh zhJ0BJB3wm3+H~1OB*vG~5_fs3fb7V?;{*lZAM{crQ1{BQ&-V ztZ}v#hs%)LROFWjI2Dx5_QM3;UZ1D`0BL!QmkV-5ywI-bghL^}c&?ZV06hT2Ks&!q zd0M^V0S>FC!)pzv*(TEL_p&5t8bHjf#lmp194WyW`BZg04Tapp|ytINj!^keg#E0^7?f1ZjbkF8Nsi1cp(7{ekEXYJ16{(d=RJ?rfxA zJ;PnJ%&l+>fMfx1z#I{g+praxtLay8c(ywm%jLRTd*!ncE=(u*6omtGFxuOR<2y;u zaRGZ!w_PJint9;3xSHDI$+j0@ppZ0fCY1BE10o%u@^-cX>sVK<5V^CBCZ66#jh5-9 zgny^7kZfg8H%8k?2OO|D;9yq%r3L1%;T5pGhfustBT*KxwTy(o9m}(CIoMbd{YvBz zL8^Wryc$zPkjXXdbEG##kubw)3;ahaK~4wFleA>ihUN~HXLSV8-c4$;t$`Tw{#Lbh z91z`pToN)qVi+E^V@|rfwYiz4OLHj!AXT>WCSv3gh|Pe!wp$$HL4lgoywWeH(ELZJ zO4HiIr^X&veX#wiN#-b-LN@ZGhAaKk^sJp0#OoSd*8(;8cW@v3tRuAdgPaC$W+T+jSwkSCVrJ#UeKfbBr!G zsXxMT)Q)p*Ebcr>1lI~6lx813!Vc4wbAmu@WMqtvX>4m72BDzo`a{^syUD%zrj`J$ z9AL%)OtW<*PV98*J5^n0Uy=)zk{JA*M%FL1CDI0Ufq@briFbu0H$%?c^gLHdV{sy- z)vI}eHkv1fON({$U@4Z)?Ck(M4aB|^Ojj%R5sz%Hc+)1cfe`veOZ!YU~hTqFrY$KEW*H?#e97W_3q2;!?KY6Lz2&MRq-?@yt5acdgPN|QwEFv5sPccT5EQO z);4b{ADT}t9P9))OpW{kTPGuvULI$>PTVSPw0qqjH2&DI$EOk&teI_{B4 zW@Zk9cJPjP?~V>~dGZ)ESa0u}PquH}nLcTZC4z)-sCKC*yD85gdgRxve%89yJXEpy zmlvL0g}tG<`$Tg5xo1TMMg}9=cJu>2qP*|J3f>RWEiV^M(sgMs8Fdzx?%q`qGCww2^c5~bbY_2YD(5#lo#E&>^Iak=SF7OF$zP#5Vt2CEOb9B0V*6^*Ya@<=+ z&w;;kl=<>yWy+FqwL$i-*Wt&E8plr73PWdasA%)sIkmg8GQn{c?TE*72L&>REx^uy zh}U%WM>^4s@GYIX-C12ikj&A|D#j&WG^^wt&KLu?oPc}eam{U7+1u*+wbZwl;wxz- z{{T*!0rrKlk7z8rSLZ6eSOG`O*}xqsH4SMa8m;hzVw;hPb zYN~Gj%QXK0Wly!osmC6|k_8e0kCE2{=HI|<=aP2-aaroh<*|O(#1hGRws(-*Nd@H4 z8+9vzbMkCZ#Qe$0$;L3Mrx~tK;$FRcy8fFTy|$C5+|83ba1y0wRao~cgS5uaxP!^g z0Vk7J^%?BV-KyR@S=&I;CzPlpw}IGgJ3t@>VYnOwag6$mR8@huvC3cB%{Pa2CP;3tW7ALB#Qy+lcJq*u1`oFKIOA^a zIjqeCUx!Y#Syz0GBap6{k*)R5ETlA&7Eo060JiJ_?tM*bN3Z_?X+p8dc-FSIyu&QJr27P(Uf9=gKXm{A z@Nt3bimRk}eXsl}w@|*7ZmiL6AzP&|{izwc=NSy7a5M7^bj3-i`Py!iZzM8ZT8rr8 z^8~1+pDLuN?Xz*{0O^yQX0v4-W%aI~t!YqA1io7`l$gv!GC5e)V_lZ5qPMWbnsp3pLbgAPeM3#Bk0* z{uSyt0hhfRK7k$Xu+d2IM1IEe1HqC<3=tF~5xXqw$m1Qzu7kzD+7>wO4mDNncbF8D7(aW79f1t$PuwEf^ggu znzyNVk2mWLw3qSOUR*^aQQC!9Cu)%35151v!sDh#1m>#VGU|HdbK1i<*{+yD7zBCJ zyD2Q+DGR)usa*8qu5w!VhC7=(sP!opJBVz=8I?iu2w=fM$oZ6(!u9Kl1auxF*KRyZ ztu@v4#F5J*2_=6ZmvEqk8@Ub81B30JD-!ABwM#W?d&py(&GJ@6*vee)8F7`t!7Iri z6P#7eKgBC&;#=u8T|VOCXzoO>G;&Guw+v7Ma9eiL0pkGhd8lua>dWmGmUkD6Z0a6G zTY!sp4-32j^9{|A2(5x8+Ia0u!%kxlVmi{aK_y3*}owS`*c=18sO2HGc*CD<8==WBz&&N6C&9Q#4%{fBc$ zG-}}a7O)+Ywo2qabGR#Z>-daoXx9<{0BEhn^m5H&Oi+DPM{?UzPhGFFC9J8L?Ot``ct0uIt~fC=Ljvty>qtm^UGo9l>m1-XLJl1S7= z3~UrExhDVx&R+uu2b|FS%kyVu+Hc!@DX&|zLuo5QE^SsoT3f`9;Xzd3gN4ZlB!C<0 zDEMyLOWPej-rMbq9iPbp-GyVgjjR+CgPdhS1ObqFtzQxA9vzRtT5K9!#rCPFX`8L? zCXr=PejY_tTVyyY0W5a>zj%-jTITIF3+uZ$WW2a*8>#0JJkq26pcPVABd9zANCT>j z@@jeqQ_&*VZ*=QpZDVU_(g_+TkPz}o6D~tU-FR|xINCV&teZHlqt!pPHrdM2JhCsC zeCu@^$!{>L?O>`GIotCAp4HCk+AH|WPKHf7&RFiW*!;_r_MEhhw2>mO@h*8e91L@l zRV=>Or+9Nsf;lZ=g5nt_w(|VQWt9mjBep?83x?-{LTBk5rSluQ{84KfU)glHaTudKxlrUWCcC$*&BIVIGdAZ(;kfii4wBTfQ2Q{^4;oD`^)!5Aitb3zpwJQl$x?n*$!5D3+k&lxsdK#urGZRB?KUvprG@*Rj zbhi)XHPzfk6)4S&7G3JOIB#K*oMx+NJ~GqWTD7!}WrZ~uNNu=atiQr|J$B@tGmv?w zcwfTy+Mbbhach}TtzL4HzGanSAjqY9{GjKI@#&hq;lBvmYPy}O+1kTvZzQrctAV+K zAkXqVY2>jz5GDRGNuIKYy7GMA*cFj&S ztvAEp5G}-!e{5Tre8h*#D<#~n0<3a$+ZUOZJ9#^LoYuF){bR#=E|R)W*!B2z*|kNQ z8;grL=8Uu@CWvpkYoWTv;BIM|nBj(U zpel?G2+na_`#Tq*qBY83dFkJ50&<-=`4La`9Ju=og6U0#6YEloj-hG-gB0GjvQ~+ape9eMC ziN0PAYfDzKp4Ug3(TrC%vB=i;a>X$6@WgHef6G9*Anxa;I2Cikx_mbt6S%suhSu|3 zwVK*U?4c!OWQCi1l?QnlYydHwXCEjvrrL$Cp~2qUT?kqmn|MWx%+ch)afNVvxX^s+ z;}{^40neup_-jbGzSsOkaSoXk#-9y|l1T0?$hKB#&?ICA8<1@cxsFJT=DO`KLjKv& zWQe?1l3U-yD@2O#I>#fGxO8EV>=`5IPTY~)*G2G?NpB6NvvF@P_N1308N?h*KiK~O zdXg{uPPi__0zP&aJ8@a!C2DTMjCDrG#19ZQq42_3tabQzX);W=F+iR~g!zhB%Rq3} zznE3hO?GHov zOZ~BDrLO&9fxLK`N_le4y-+f98!CVp00F@6E9O5OX}6vfyk_~XwB1X4K&>HmieHct z7?N12Mgw*Z1~FcKUu5i#%Da8WmF$bD+FVUF<9)Mps!2QT!Yc0CIl+@@&mD3Gaxqmc zBwKAxHlNG2`#h;|tf*vI&Oh&-qa+d2J?ib7CGfQK<6SyS>C#xGl&eW@#D*aXpOP|; zK@FT0$s-kGS%MqQ3_%M`3rQ@kEHg?!(i0?x-Ha~P#{=t=n)VJpf=6c^{MS>x!&~q2 zw_LjUBmw+O7|CLNxIJs2@a5#zlWmg9X*Ad(4;mBXnNC8hCtsT+6WbZhU_-5~*tqjP zU$MrEZV(L1o_=1(AdGXy=dm_nubkbgkog@HA(W3(1R?~tDv0RS(k7}7d zK5v&Zjm3fgMQ*!6_;)iMge9iyybXcG19WMLoT`YiK8*S;)jko?eG*h z8wL<`LP;YWuv{8`v2%HKBz7=KhrR>K3dRtR9zbFnJvNrWIKkr`D!+#()U59{YsQC5 zy1KvfRfWFUlq!w$GN>Du3%CLgM<>wMeF642JOSaT_1nd?k5am{co_YfUo8IiNTLqd z1+dN#x~L>|=zCuHso`BWz?SyGrluE{k~u)yOw8NU0fet-A%DCsrF*Zq{yw zx%)fF^gUgqkI9QNB28}zVBSC~>T|{j#~2)da7{PF_nM{WisaPp?iT33l+f>xO5s>; zRm$+gVO*X$ARN+-?jo0WmcaZrmc|>YmgR3!=L6;{$2s;Rio10UPV2j8q5>&4^&N4b?vF~GB?Hg^} zmiIcP;A^1!8Ca(6pb^t5!2bZfkx{;*(A2QJS;E|010zVzk;?<5WdK6Qow!ig$WxNU z9Ca0AP4M^pBzKomZ~HCfk6qD)lg(Z?2IFtaM_%|MuyiQmlG@>9xodlydt)RpBCy`z z?GY1z5=GA8o`XKw>g_KY}Ob5%%nS@&I>WZj1Av0CnRHzw7P^AH(E@7PM)@wtuA(5HtFASC(Tx1 zH>ttOlhIe}RdqY%)+{aL)0$>00;kzbU1P=@eh9+=m>>*v;;d=DA^T;d7g~gt@THp@ zmzN=xmuVqkfsWM+lB(q+|@AhU(W&P$iAH9$PRthnLfZc1c z(>!OWYdShv$#XQ2rR=xy+WBc8lQ>PK$=V#LM<9I11E8)SQemXWbnI>?n$0(ziMd&s zLn-3`WOCT`&MIgn+kJ1BxANEq@@>(YJ4W)*?_hI<4U%@`aBwkH;)=b7>rh;2w;os6 z=Kb7^aHw}ks&L56N$S5h9SO%lNvI~DV-(jH7WWsB#>&eh<7$^q3jxq6$O<_)9`&s) zvg@(jEyGz;E`_A8Xl)aJjux4oJ<8EwNw6D-mLw`vDoFm{4F4xgP(;OiYP#Wq)`TxovU z4XJ|7GQViNl0rgZe(MOvn*=g$ZNx?xWDqhjgVwWU#wIdxx++94&xkv7Q8QYaD-+k+!1D&B_&za58$?bpOQE~RTF^~Jrs@hYj#Bl8IYG-Jr} z$j(8)J4d~9F!&PRPm!YgLqTn5e3@)yy4@u0&i0IB?wp3tZkQxipw|WOhZ5;GeV;31 z`Lr`2NhXTr$NR7VUT~TY?dWr zn8gSY+{xx)WJMqxFvq99Ijr9qJTGEC&nMbG)g)$FWSMr^;PN>*C#Ds1fPS@6+&Ucf z^itZyP0FJ?NETLjgBNve%OO3E4lp}lRMtKqx`yf)<|}V*_XT8;qb(TU^0Nr>w`sr~ z#{-Jgw$g62+eNUvw}n(*2^vDiL_pC-AZ`o)v-wPw04pFD!5=2!yJ^TcIp=o+IH*%s^YqU% zQoLP3q_Yy1nalay2>iS;z#xK!UOc}%g#1gcg!5f(OO`3V@}PvOBN z5!W@tUd33uIoq_?mgVha)7~2)`ixKVlUx0 z1}28a5i42TM$wrA4cK5XRDsE1oM3g$b5ZE>U8FKY51D5i-@RDn!jfNVU=iJYx(wu1 zZf35HZFj}-c%fU%j{Y0Vgz`5Fp#K19e3H^gM+2+yIv>}Wip_Ve+-lK6spqEVA(WlU zs-=2^$;smY^f=9{y%p|ayq?x8=yytC4RHX&G-V1K$+XS3>!1yi~p>@f6ZbmeFdf1X>c^-0v*OF?NYQ zQV1E3ZhLM6j8{Sb00jf^<-=$`55ApbY2v@~W%Bq)l*hj$aySU;4o*vsFl#gZ3HRYk zjWO=E191|oY7nT7Ngm}|53R*R{sFtqB^bSnmjjaeYfl~YEt=@us$J` zQrv88uW^%|ry~uHO?b}VTF~i>e5~=mhOE!2>2or*^_$zgQrdY&UolFtSjrsdBo0>q z>?g6KK!z&?5#2LgLw1sE@}ti=Y_JQEp>V(z^~SAdbEM66 zZ<}}`oi;>~%&gBCe1%=)U>3Bb8)FjsrjF2vQov1X8@NYX>g+$!Qc#WS_474)4WGxrptAw*mH;; z;kKl1nQgO3K_G%c{KvZIv8_3*79j9cmimsg?Rn;>+o8CE2OVyv$!J6F$xzHTlaN5$ z(pK z$eSJ}3=6Q^l6Q;`UI6GTos!=43y5uR5wwSjIb8jj+)Fu7dSi?O$sKXP=QXWkVJsRf zizH00CyggjAzi3&#x*16?7e+Y0FE}iFQQF%qU!e-tjlj`$uuNLtd}x|3XyKy5Hce% zEs}Ab4rsbTxytBQtEbt>B(;#*+(@XCt9;8QPU%%!?wlXU9=YSOiEg|<;w!s-HbvDg zB)5_Yrdb4V$pB%ORd6=86dl9n?}BR^R%_e+PDfQp?v(&nS085s7=7&63DgAyjwu>%`K11hSiAwnDyGmL!9axqo46lAisU$n=0sXd*t&I%3kJ48%u ztib&07^XkEyS*sflSf9hPZ{esnrd3D?AEc1oBM>5V!B6?#ST>LRU6I;bI+;9f7|W! z4My%UZo^Q7NWwC^nipU|ae>@$st-9FjMhXNjCy^A|KEBxf1T zORQ?s_`6rNYt@x+mdYq)Fvx=5_Ee2x4*ZO7!kz#eW4&wIX-TYDwdAXDBS&lHT-|w3 zw$o~|My$YKhAFhMAY&f21w_TU)t5lkG--{+j%l%1Dcn;Ii_q*C($S=CA(%VqI&u zY*yk+>sycX<1*VECeoYHikxf#m3IXnF$0d2p5iieTib<~ZReeJXLEGsPc4joQ+a1| zZtZ|K00%oj&ow38-Oh(`3qvwVb#EY@U1w=6*fucRSO9k^1+$ICuy_KOR(r^Ftu`1Q zIhN{0lq7PZq%Ml17y~D0IV9jWm15Q?hnuaI}SMG@wO2r z)qF=EhYW(!NbfA=P))gJ@Ap}X?ID5u2?Lx}nLK8V3)|bO+&=YK%#q;6T&J8vE^8OsNbd9en>oeQh+xfQkF^%gfFB*Y6$hhl}#e(n-Lmt&td{J?# z>T*dN9X@NF!CuUHahC%nlaq!3uHra6ipTKjlHU5>Xy)>yjyYm!&Q8Lp3V(=#?Ir;n@;;G&uL|E zAwaW9Zwh9fyAAxAl=^*hb_ zeY;Hde`>RX%Zf-9e77X>@_!IupbV3q_#G=-#D5MhhNGe-zmsQms6?`?dC6BX?@1lp zV|%D4U>OJ8)_$bPnX7WPes-p}Hn7PuiAuaaV>U+TAoNYn$A!lLp7o!oSiHB>TwGjC z(cH$#nGc)gZpkbGByTv+UI)K5p{RIS?zDJgw!4L-^3R(gOfKdL@@*N~M&`>LVErnG zhZFlyY|Zhuh_8Jh>I1dyYb`BEe!pmXWYkoURGLVlbfcKs+96iP3D8CbhC* z{hey*=B>{v(vjR_IU$C64!EyL_$#Je{{X^Ms9fCXvT62^A3oOR;APCk!uf2gkG>e3 zuM3WISyr8p9OuM;0?qK7Uer7{HQ(B7ZlR8QN4t+?m@k~m$XsWsf_+U$DH zsif%l)^bB{J9$@e#-kD|$Q8I=LGsIz-AMwtx6{AjAJpxv;Gg{^&`3k3{{Sp*4b*Xr zFgWf=85pjEP4NBXm)DH4G%>R)&peS9Hva%SDuO^e3l$&^^h<3*nd(}%gjdAgAh^@4 z#hS+)sU4ar^5eT)1&Prgh`~?*48#JhkWXK1(zRQOeizRd*_!WKS)9#nGOAl67H8Nd zq ziq<|CjF_3ESt6F&2ugD#m@GDb8w7HEw)D@veEws5qtLi9c zptg!zTV|d$+bY2#`Kh!y+l4y-Do7u^B=ALfZ---RZ7M~3i^YQN9vN-cWNq;Qy+Rz4 zs;mxAJ^N=Kq5E`e@;Am9QKYuDmTf;`724uNV<5}?q$|EdU@Gup5DS30e`U1(5!s^3$9CDaJ7x(Q+d-=4dOh{z8L05}H~lY4UwrQ=?# zb42#8u*&B$ZaLaz$myJP!2{UVFNUt$NdC~8*5>*)k|`o+{LPz-F~R;4-zjFm@EeY3V@DI> z^|-jyb>_Ffu)LCEwrNMo#Pa0q+rUQTu*n3B;;75vcw)6Ta$W6N7gi7eOB)3(AwTlx(~NC z$z>&0XJld*EWqPwk#mlvTb^qkZEE*Ow=4E-LfX#ZUP$hIuPq~0&iOXuI|1Y6$mHO0 zQ+Fw8Z z$vy~;W|Jg**(5ONGlDZ(nm37WG_5La*7o-n_g144JP5`f8);3W8-{V8yast0kN_V)@vj)gjTq>LJ?z*@5~q>$u0_Q!jEz>#_JIInogZ@G?PZFIP%GI(*gIG;0&oM zG3)4gt&J~Sz0#698|#&tYnd7*aJyREk|Yo2^<#!PU*X&bJ(Q3g)#j6@c%sd<86=gh z>~!^lTS(;de#m2exC{4~KFsBL0mgb(PO|pCB(<|$J{a_!KEfGihYn1o9fr`1cN4ef zJ6MyR2L$7b)I4kd00{1vCA?AGt;Cz4X_*0e)8#AjH{CnAC$=-3)txKFmVP7KCZ^iQ zkgp}QZ|0#`nZpynz~R#v&wevfpbkjpu5{^bboLhT3lqPSH(x_VQhCNav1EG|YuV4a_l|_sP#e>swhFmNZ%Q z2q94?+l>0dPa8GG>fA=rgAyr>a#SlR2d4mZ!K~dXdw100v$&GR2_uwEZEzwblVBs} zC_Yf$gC_(Y^?Og$EqpyKy_|8GTkP#|J59C0Rg{)kw{9`89DW($_BQBt4ZO5dHsiReP)tM_S+;?St5c*0l_33ZXk2V z0|c7r;L|QV6R$g}TH9P&-4t!?$p~-?@(EIrA(|Ys;rq@?nh` zzSS!7iaHfn+HiOo>x#5*H4RSk=F?KsbnwzdunV_U`*pR#{KX_d#4iQDX6FMr$l@G9 zCXR+HYssRwyV5TuOLl;qDFWp|EQOCyc~xz>J$;Q$;pn9Cx?I55kgWE%54f2ajflIJ zM*GFl{!l^yR|DFs_&ZIpu+$bftz(`yMtiw#=3yedV{euUkRt@PLHFmluAfZS;_zMd zmZrA0`m;6JhC5)$acvw#yg;e>L3ST8BP9lM4k|jEE1b5!r(0;+EZRn_(CNChtkPYq zknWgIzCFl+K{>_(^#rSqrjG*KM;C`}q5Ex=HCZTN&u`sGe8c`>jKq>c?c7R4l z;ZV;!S9TKKU)lNdDIP>>$s~VfbX5+)K>49#&FwzJk&Q)3Je zNo8#_d5a9#{p_F;0_2h~Z~-Vzahlb=(;%BonT5m`7B_*?EBP+eH}2hoWl){VCeoiT z1CDZPwssVjmqvbt;%Kcj*e|rNGT&0T3zS)0+(f=htg=QGN~THO$4sA>f@<%*{@L?<{_lLyN}2^-H&KDCW_-Yo)pqv;QipA)0G z_$%Sx?3-I#i*0(^HMa8ARDrIeiDn9t z?p>vqsNIrC!OINb1Df^^i@q5ae*rWZFQk%hvPJfrdw7&b6^p5jV~5P>+apkd+#Hi5v}>HJbX7Uwh$P^Saas|>FNpO9v(jN7+R?)!Bv7DlIu}LbpMyw>tMnC;D`(<3MhPBXM{I&<{u zD`xA&@<Ds|5Bh?nkKc7%DIs%$He#Kt_)|~Seh=x5Zma#Z{jS39KeX(g zc!~mr5V1oTA=#T5&fIaDsj6%D5?xQFEyS$4ZQaEFPZ9l~0T7Ld1D4si4D-)go%JCn zatUr)@OE4fGx}a|WV0v|}?K8tM$)-tlY7)j-H3fp&=_g24 z0>*3rnK;n}wmsUm~B3i)HfU!9LRCX-hVQ$I%3W=kI=&oJ2>PbKB6hlInD zzy=uS4~%ud^x~*%T3oSeGkG^r-dnMCissx#=_-M{CvOHp-v?@(4!l*(3rL3Y?NU8T zOFd$1Zzd~kku9v@n*bcJA#uEJRsI}wtGd61EH8XNd8l6M%V(-wN*!Z1N9>qCY} zBwKlr_JozZ#s)c6opv(z$t}nO9epdbveOw}9a(3y^DLU)-DE~@wIas?D@KrGmCHHa zz+?;#hOxkg5f_}yE$0f50TU;hq=vvJ7zMWyP84Kg88t|q#M7;pPt+~uovy9bw#g>e z%&oT>G2n5=agL+dVy@hH%HqdTwP~Zck~^r9LmQPpF$4mv0M17pJx5x1{3H?U9tDbM zZyH<3S{P+ZqJMP3h>W8y6sm^ZjBvRek(#RndS11qLu+i;QQv8MqKe-c^CH+}ZaO9$ zWPHTn^p0ZQ)0{ZOIIB zg?P%o!kJ^nNX{|<2Q^t|xf(^8+O219j_x922n~;w#~Cex20LW-sybJR?QZYlyt=iL zeI-uEiaY{=*q^+6lngLWKJ=_netl+bKS*uGWYs>^E4W!VvICOG2Rol3PVAfoBa%ic z{{U!S4Qo(_NMl(V%|6o{V{A^v2I&~~4iByl><&1qT7A8}je=fkP^;R>6rVqr%uz8L zbJ!MK5srX?o^e(DS)zYo-rL*9_NgqxA=xCGq30x^J;LqA?wB2oD}k+LuQlh2re>Np zxYP-0=ZKXyvAFrrr$-pb3y@C)9Mv1U8N54q@<0~m;hf(rcLc(1-WCL@R^gcEAZO+y z9OkiX?qu-g+)@U&SuO!-VKSCwRaQP&$0I7ksrK!~j}hwd>&h%;p5bJ?W&1wYGdj5| zw}L=tAdqv606WnTu}{Q)F1gnu)SY~@eI>`6KFHZ($iQ!tJZA@voc#qyqu<9h+NIjP zq*E%}q>6ITlxE$656nLI9r1z18rAK`+paF7XvN3byt~DCHhFA5LNIz0fr2^^YR`fu zwbHd4t9yv;ufEX;NE|pmNn)(!4^J~_$2~V5Ye2VCq`K4JOiK%fwYaxih{VuGF#YV% z5=n4}8A7YZ?z@!w)oZ(pU){(cNxpTuhFA~IV>}p!KnlaIFmulbHIps!_>NgF8|@QE z3@-NOJD=Xe2w<_QE=lsh*?Vc!t%guebJyCoE_C@KhU&)Z8DaA-0jjk>>K|BV3E!q%Nvj@m!A1Z=I zd187FZAFI8#6BO?S4Y1WA8A|9F@DY?Gknq=n2ph0e(&7D$0U9?_Eu=agucYeILL`dUHlb~&4=mUxe!z08gY#ta!CwcA zR`$1{Sl_*m+aZTfgUV>#C5&M2!C4BfOBn#%a#W4OoB>?!nWfLC-r5-?YjkD|@g#m~ zsmp=2PbUkUfO0<`8WSVYr?a@cZ}f>a?rH7aVm9|I+cuX3r~y~*vV)V7NanURT@J@h z@b;6cTg@e<)YeaLHR7pVgwH5u66-KEr0T|)(&V30;tR5KY7 zS1h|(O7+JKaa~V|^kve#1z@Wh>J7f&l8ENrU7v+w2*x9Q#P#Yp#%Y9Zb8TqW@kMkJ zFSIP4P?bQ;yr~7Vf-|+qzzhdpTD-copNLxCc-~97B$cFu&k4eAEr^EI`J0TA-rf17 z@T8LIv0g07?{ve<$L_vXjWd&+kKyhC>%~=X56yL_NYP(J@z~ldxI?j_KtR~I z>+{G5T;p-ZIjJhvVW{d?7j0*5)5CQd#}O=#wNQWoQNSv}cJQMa-PWMI+bzAsw+V6N zpDIEjW%HY3ZvELg1e}n2^Y2!5TcI)CYa24X%L$`oZ4TnshN#_KTmJxU zrR>3e#c>-qmZ;3kqb<2ka*j9!NgaBSX`;2+nf@iy?fg@4Bh%r!wVC1bQaL5d0lN&O zo=?gTTmsy5ti575v`sU8tm_;NI3ZdLlNIzx*Af}* z*;6h^azZ!p4hiSqrDjckZE@m3b3MhYCA>RXEh0txNyZNtP|LJ(I{tO4MsLj0(Ncd8 z>eJe_z#T0|4+i?nPI*v$c~&w3^=eqWeO} zHQl>J*|(Q$tBu^30YYO0XK~=swxa5L$LyQqTaONE(CK=9j?I~trV8w8Nqex z2rB1xdkpriPut@BSn6IGTY2O2mht6nIwcRa#91w$;mBe~9)`HT**8_Z@ix7s#?srF zp}0$1psE#|{IxW*NL%VCGia&iZ1hDIk(Smsx{^3i)sxLAIYpCh8Gy;>kT|VtzZ5L6n;lLI;c$?X1AVc!%E`3+g9L}z zS&mLg&!`oJq1>HJ+1br_wmNJ#*^cV#d$cI$=5{C;b<2ykb&d$_ z{?RHyBBMzf_1nqMI42n(07n9|wxry%s{NcLtS5ByZi;Kd(<2a6pO9o^zS6m3F_VBe zt2+0H)it|on|rJ13A zTg&^z@qphpaZh_+H%$J=hflS=wRdGNI!Lm?$Zs&^vTz0mZ1y~w3Nq&K-Lu7OvfX03 zlOjuWjI{AHoC4sn8-~&M2LZX~HCtbmUsYjsD|xaaLa{uJ=AweC1C9>iw-{^;9OTpw zHNEp*Tf}7+doscH{D)vrxje2(Y%=s5Qnr&BwvrOxXZ_h|-|sQZdkTp=1J@)G^7D$T z*n=u9dh1nt`&%|keL_cf%SH&4@sqoT8*o>-;9|8RmKz@iU0B=*<1RnU9|fFe9<|Ks9wm;(Mqei0 zHCYR*M>uzYIn1#Prq(^TV*s$nwBGD{7q#6k*H+a$y*KSrXtPSMWb<61xVZ}3b~*ux z33X+`+Q98RimPRyKAGW5dsGlZB-6z!Llz`tb!-rMI18MS$INs5BC=>AD$ zk{33tFv%M;Zf7lnhX(^W1RV2LwdRLV7B-{GF+=mr>Q#y!jLbke+B455EGQb(>Mmo{ zHF)i`_}=MtHHYSo-d5QA4o=hzRZ8*?PN4D42gG{SrS05*GehNtnLM6$94zWMk((bkI5{8zj-BWmw?Vp|*VJQ&P%C?J96!5~=3h07bzP?b=0F+0?=Hef z!OzSH=xbsj3^T?oE$$?`z1a-@bPpJphG0sQk+&EG91=1?=~*`OHQmH_7f?gx*-VHZ zW0L|i2{x!40DI>-+%b+tbO_Mu7CV6eBfzHydFfw_|V~he^k=BcA zZ!5_PTU(#~N4&X3OIc?PCES8GV#Y-Z zO8l$xKN)7ilg(oIW#08Kfst&{L!@zClCUY-Sf)tGA~sN@43;?VDVO(aBr(Y)mF2y; zfe>3=Ks>#nRF)uZ+IJJc$s-x}hp1?_7WYn=*y*~2(%bpwN172KSr#&+l2?FLO9dpq z2a(#dJVAQ5Qd~~HOe< zTezfeEFfZv*~n%EfC_^IW4Pm;8u7e)KeQ}XYaaME$e1bE{D5%0V@Pe$js{$#bhV#h;ZBv0+0a*_;ZYB6}26*>34cvg^s5*i#DFt?k^o9jX-kveZX*z zcYk#8$s-k8R=ye}w${xgb4ZF7C-TI?&KVPIV{}coaZj5)j~z*?GUzbsu{4*l$Ebax zb%k0f);5g};ETFKSy;JJz~!*G>6))nQI~b4$EqZE_7b(@M;r=ax)^45G84!nq1(f9 zcPPmmQ*Laor0|u+ylV`0_aEtUNP{A97$6d;B*ulCKQ~sv9R+j^WV&65Ypp6dF0TIo zb>^eU65dRJ>{mG64$;Br++fu`I?mHZn)*QulWEf-wt4NgsFh1)T|?*R7-5mn6W<1u zrE-zX_;bLq&jj*nN(44Bu##Qmt4hl3s#Tb8I3WVAMn@p#qt@-A8a1t=Tt_9s+{6S? zMY7=ui5yAjRT~kLoNiu4b^ap1(W26PD!NUZ$22j#`i#bD9n9$~rVp4fhic@N<18`L zoNZR-SkguP^m5~HjzE_yBw^XfSyyRgW?|HFL8TpC$88K#poi5VxSQ<~YFCW%1eroB zFd>O&&p9Au@J{j2=Cw4tZ{*y=Q)>1@bB5+ z+vVR$t7`$I`!NPdV?x2AAOcG6ZR@n)V+S27eOCV7#whG=ru!RO$so8v8!KBo^o2`u zN-!mvi3OXFyH-ZUSmuYyF~E?KB>!Y$eICr#%0}cS}Sw?sOF5&?Kz1v=8wVK>Dygpsy5TUlB z$iNUn0(dIhPFP^zbJo0P!13x{8u*O{p&ydBc5k@(Wej+53rm8^7!)i3Qa)PtQ{$~a z#eWj*GRNJw0;4H$pABW{P4<2)YyR8^y)l#()Z-wDrsacgguK^8p&}w z#co{TQ_O5GesC}eKHLIpLf+0Pyewgh?HISaH}b-;N?`JeY~B+)k0T|xKQIL1o#EXX ztZ$;Yj^gX>4Ry185w_zXEH=j=;WpmS>9t#Rg9c}}k#$&VKBfwuuc z$#PUSM*z13^w(j;<#kx*xz@Eyjm!3Tg&h*aZS&l!kfl`Pa&iieavQE{<%+JE9B?d* zvs@LC+(t-=LmZL;1hXy%F^;F+pQK;iXqGp(7g5J0+RSbv43VTwy$bn^xcP|(j({8- z^%bS3rM%KjZ+G@N=D3von6n=+$f=Oqhahzf2*=IT9MYDt?XjodXnr@-q`QfCL2U}O zVm+&ueIPOux|Sle@>OhR%-5R;RhN{sR`pPr%DFD*4IO-g8DxYVpzED+%B zG4yOWI8(G>Z8`adIIl}DR;6NbTFT|AF7GXLMQtu=BU3#xh~E0*UI*Kw)WhMfq{&S;Bs+Y4wtFPB$qJS#|Uev_QMg{g4Hn0LXvX9hCvz2az4D@gOTm8 zE~IAt-MLUDNc_PL?oJmtZNz==QCpYB*|j8Vs98{ufwO{`;hP?wnEv;3NUoO|I<}Pz zkusx0WguB5$lURh@`1F2l_Q1i)~(pfHNBO@w(SwVhFGMYEPT;0;aLGWE!9cq2L_%0 z00`a1=9h0Jzu8LI#?K4va)v-l6#(P{tI0S6=H{~Wvfd=qZ^W~CcUS6WifDOgWQTK( z4hGj7hI7Vq$QY$`PNsFnu(xou-deT9Gb=T$l3}M|lgJ-7af6)W8O<(_ZL4bYi&Xo! zUo5W2%)&QdPXi2~9P$q}&*|5*YGIw>hTVLD<~LEh_+0JhcO(*j!nZUXEhmD;=gf|4 zS>uq)Zme2J*CcK&!tNMj!Ok}N)yY^Qbb5Wy+EK12x0x*4_eqixB#`d;v(dik&TF92 zEUm6DtyfyMhT__2*3~0|N8b~!BQg~Lm5hcYWMP{i8pPABY+|rx-taZhXSAAK!V`u0 z#?W_eYy-Ibpr5WOYLg|XTZ_%hs9ijFQAn)PIor4@rqTvCV<-4dcAhI6T&)d#b3w+H zdtoP&9-$16X_r=2J4RFHAMLAgkK*KtvEl6>{t{bxH4RqDQpOnH?P5s+wY|auQ3EDH zb_#oP4Lb8ogILxrbqk5DZX=L}xJVtJ%X}_l2X;4txyk2uB=ovnAkI zE+K;PcT0lgO2JM_fY{xR`01KbWpb;RJWUifHVrkCShGoQ332nvWQgF#tgX{={vr2B z=rhL;tl2}NwdBunr{CDfRb!Iv+(`HUlNz6x>|jvgfXE$q73v-#)HJUOX_m5^iD9?W z;9FI^fz8mI<(U@)1tM7;fpAN4jB$$de-n65OVm6B_x4(ayJ~RAvE5lT>e574aTh8+ z>m;0Ho<~woN|>;zrlcCauV;QCx>lI4l#ei5#WOncN62&KBp#VLinwX||E(D({q!cT)*~AaHwXP$&NACcAc29A z#}#N@TG`8MAK4Y4YjThye2p9K`|9X^@BoqyRJY+)Ej0Vb5I&x>_741=Xw?ySw>FPX!%f112E6mHF5JK&DT5?zf!ul zj!Si4FtlvS?a3L< zbW>bGe;hZGY4+yhm3AeSVki|tf_`K2oMh)Ea!)lv`sO#)H+lB*Tr|70DJrkV=3v7c zPA~{PSDL^{7%N*L~p7UG?ffo?nyGs86Hb}rt$2mC3+kw>7 zT4c*}uG!6R92T~>3_Q8kUpf%MzUv&1nt#y`OC2bDU-s0m^Q*UamJ-iJWZg&qgf#53S zgYxHg0XferfHsi|4o-9aSQc0XrgRxxjM0Nxfw zIU$C2XXPgfN4;~Gckie8f=e9+@tVJx^=djabva{O->nNZ?rb)2r5o_1bY0- zgPp^sDx)jvO^qJ}S;76OCA^EWeHJ-dFC=C~bjrsnV4dy3Tx4T|oC?m@9!R`Nqr$)~ zox=T^YpI|s8_B#gYTNp(dAt`O_}Z_1TvY-N|_SwZmctb_qf_JH)FkM zc*^?gPE9rBl1OZ>1d>AA#$#;lV9E#39N?UNDC$vTTZ&IE>vhC;Nj1Ad(KIC!f(Mu* z#&`^>4_=iF5=&vGSjsKgXVW2QC%Hs;nsDryXI_k-B9oGS@ia-P+iLdLSD$ZbztUPU z46CFXXY5ybG@0|FW_B)AE=eVEo-j~g;O406mvULz zHLaU@Yi^*0E+Y)hk^u)NYT%4<$>+5(mb7W2Yu!>Y9juaEf1;s|0HA`a^DkkQ3<2s6 zc;>6=Gk?M*A&yA2i6OhTWpt1>*2m4cSPk7q0psQe9Wz<_KAUlMVI**`l{qn__#ZL_ zD#fxoa!4J|KAEES7ru{x2G(o3i=F%w5201<%2K-yaXXK~}Hpk=u=1=2hd zaT=@I!qbP8z)_`<4g;!|?2l0uf-!C~)@Kc7gCLC|g%;>O}> zyvU@EWB^3bmL=8jGEO^Wbm?7}!_ODR;p-cXDK7lGeM;QfTVFvSwl*eAHr6eX z+F|ojSlD?IZXh&FNj|vfd#_GN&1(4X;y>Ev{>_3tKVB9$EhpO+85O39h$<0OfD{&C zk<%E?1#jpc613Gc2>j%obsMP5>CRt=3DVxp>+qNWNX91tep800&c%oboGANQe7hPPao9<*$}xmQ!d7$~Hn*aX91W z+NHP|Bw&HYewm;R6U46_!>`%(gjFoT)T^=m=nTJi_k#h47$DVH?&cS*rrYk)+PUdY>%MTRkFZFv-Svq+L9%vX1tg{t$lOFm0uApY!wfI8ZuZ1iz`c^c{hDUsZ?$$8~SiWek;sHn^dJTc>wQWs};7MBjS zqJM2Q%Ia3p#OrT0qKjFrTO|oD7(AadmXPBFKcFAp}mbD^Ii?=%Y2AN zHx3iaY-c2ms@=$}Jxj&<)t~lWoe$eJ3wsn{8D~|uW!aYC3`XE6$nTF+RpQrf5x=x2 zx{Bj*R%DUn+KL;P&|`2ZztpQ~g;{H8b?NGx9lJ@gVJl`Q8^FssyG4n3~ zf;t5qLssX*{{S7$;eQiDd1Gm7A+tYkjz)|x&XGTu22Khb^PX@%P%~WU)mq0-yN#rh zVKX$6vcMUMNffEv#GRyV0B3**&H<{CS)1)+&5eG-%O{&Mw4yZ!IM)TL2(Ka*?w z$Bt!9 z-A_L828n(4i}se*7%uLWrD&AwK6Y}-cMunzpmZ7fReSFV{{Uoa*78K&Lrrcj9!63e zOa~}4_gir3(;l_jOC*|&ywfbYdw*z8xhA-{QjxTXKX%)P-EElaKxQ3rP}^9jp4L5K zS~Ak2mV^%?Wqr&xsVnlGs=dmdagl;*7e_PUJt}=#@_jPtV3HQS^BF`tXWvZomzbd2?=qqeh}OQ^=Bb*Gp_ z^Ti4=Ep;Nd%A*4SaLyUCz`*2jz2M&w+1`Dc7;WyPWl>_c*+gbSRHzM{W94zrKQQNt zIhxcrIBj~u82-a0xxBY%;}MA^w%SVqe91Drj=O$uOyjj~==Yy)`$RVu!shzi7_8(` zx6g!(WFAYf#xgs80-fQFPCMCdr_*Bs2HrG?AX$NN?0l+oL?O#;Zv1h5E! zb>y5DIXf~*`sa@I+xTYQ$484uX&Gd@w6niAjVk?^Ne9e|hGnsD$s~# zl1Q3mYnDD(PC-7+*Er}$PAf{*!%o$1Ve*4rO>r;~Y?yqw+{H+4fC8hZIO3b7>DKnw ze{Z^luPtO}xKSf{E?DF`qjij&=Nyi_b63n~t;wa5+T&4$mf|w{m+uL8+nCkZZ)F+s z+a*3;t=Eb*``e9P-rj9GIa=!0;!m`+u^Az@A-{96h8F=tXLm#20;yeUR{E{2+}8_l zZF?N1UGq!jdIqP(MT>#Zt@k5G5)bsCUb+g0fq?goC*b+8f*7Y8M)SN3mZZnNI!E z0|-;Q1hFMRIpw&;WcaJZcJ|uDF|@4LO$dewplzyvDFsg%E0R?7BOvFDR?F&bHkQ%Y zw3ipqEDf0pg)p+bZ~MYSFDDA1;Oqk@y;wO+;+FRsqR()xHj^#kxSm69Khm8L4Wn`1 z*!h>8ssJQp)jtt<^ZQQT;Ul(+8y1#1M4MEyt2Z*rig?H$bRL-%rQ<0r^$kvFg}eM;Uf{4+4h+>rqEeSUxHl8oLM{x%sWJSFz%zM(0tY}z2a4n`RIWna0 zl{qB!+D9~4%P_FFypj*GY4cngc$>)y6P=!3K2x4JIU}w;aaGE!3P(q8slnpC8Z~Q~ zH2(mxMR7da9z~94k9dv#W0zz6MBo4iaf;+Gmh)L_TYFiinnjtQiWXLOXJQ*M9tlEE zQ(D*FAhEZ&wNhtEp@Zzta=4Zm%bXl3!6%mJMleY0QR{jUd74X0SzArBcxAb}h03+K zd@q*F$AavxLGBGrtjd(GS+lm2NVT|od&IZ7zJSFONJ>WA818lrjiiuBP5ylVBq5wt*6CrE{7CS+1*E|-T`xEFj2Q)Bzc&| zFl0;&pW)6s)_B&NO|hQp{9Oynh@E1MWtm*cNW(J%0|L2I&~uULLJi7y)@M%eyjsL@ z-A$$5N>bifA+V=*?g=Kaye8V0 zhqXJEv64$`i>S$pSipFQ9KXohyxpo806oa)Z)b6*q^r4Hp&w{MMl-?75*O>~TA%Py)l}E~J7$w5#Gh%H zkju10&lv?r7#o7;1EC#xuM<^`xAn2mz6+l_L29vR7IDa|*G&nOOvi(gPs@Xy-1qI$ zyDtG+UmH6+b-b~-mr!`;iYRUtMNO_y39<65nE8MQIK^RjTS|uUZ=suPiEV1$NV$I{ zWE*pp9;??mIl=Z7cfj9emI<{eZz7K3+D*a{7Fn@_l~MAO!R>*QoE%rOuF-|8&f5Na zffk`>Bq<%$^t0REJn(@iht5_+EOK+YJY@(ioN_8u@Ve=`EV_My&2=TkfIDvz7uzY^ z8Kc22tfPfYD-t;v!K~|q)aA7MW7^*oy115fx|Td`U5e~fE=C6gk@{w}B9r?O?!M18 z&)bqyiPkm@r-86~umc(Empy@{vJ{M+MXo$C9-DRjnKUwL79p)v0VHLSnm1qp%H)P5 z92F;yD<*5zD{ZKGlETjzQE#x#9l9nHl07$YM>z+Y+SjzHC9;R@7nZ9OjPpc^cs9c$ zK6bGn2>xM$4nuDTIHuZoWo@OkwPpJq$C&b5q^<{&1{^Uz#4rXnfEcz$YLgN&+fSAC zyLI`aSuq>|wyL>dwTNz=PC54L)~sqemDSd$w(>~K(p&ja0HbMgmm^17Hl3RrTA(xNouA>Gt+dyLd}Y@&zG_kD1)E z6&<$`$>NrbHfDaVB-DI3MZ}la8jMoOadGFnNM^wqQ;-N{PzEw{jCQP8ydh_=eWK!P zi1hn->>J3EMrr>5dKj>cm2r*5lxKmSeXF367+w{+x41J->hmhGUEGjz4^|@?BZHBX zPSkYRV7!h?NFj&MT*AIa=7u$w{bvqK77Ozn40HgFXkCIB1+ZH`YZiFIi( z!#Kz}+7Gq{RC?CLntMvC9-BMQG*h#*%89Xm>8S^VAYftl3@1s}ue0%jiu^Nq0B&n|oU=I##fQ zP?{TuoJaP#^6|#90&+p%;R_5XJ4QLpYF%pIW$_KcadUlZEHSf4vv310_Qv7MD9AbI zk6NLm>67?s3kYO|W0K&i&$#VaOD;nKaB{23&r`wUHGfsHnA-U^^4k9LY|6hX5+zn( z0{{x;lnh{#yBvd3$8#f3Y+GtqB0+R6kCAT^&*ez0C5}QP3ZN>K40GE&WRMJ+#JAes zooO3gUtGhqnOn(N(l#s#85n19$YL?jV09!@bv-OD<@2s3x?voGKQGCV0LWr^1g_Kc z&N;}ywWr!&OM22n43X`%0ia+}3k+j+NM+hGLXHLj?oA810jp~l+Lontb#9Saq<1YF zAcQTv(W;Dmpl}bS4Px26@ptx=iTC-fBK*=xoPoasBLI+2M_Q+&SUycVwYI$8@F8;=mR-e}6^0qS#!ckle8;8+Y0Ypx z-{jw6=d*%2m7>Z-W55J4kI)bS&Pm9@IW+`#vq@nMoOjm~TE}y73zb;eE{=DxR+AxA z@D2_eJ?iAz9iNBpZC5MyU8UzmPu?+7V=$iR=?`I2Q$(Zdij1!DM5Pt*0KdpqrN7P8XX zIKIeKw2c(5Qb|OI?(77)45v65=nW+7TaR*+ydG!v#r(|`)PbHikIap2cst9e067Qc zTygTS!2+pVw3_C+1kys^X^u#(mQ^vViVj1O_mN3p06E}w#cJMaFxu*0Ww==`G~E{I zTJ4lHYj+TopjR2nkQieC0l4RqYcA+abydFmEz((EnHJm`3kcajXyZKYApldz0EINu zxf_t_a6gN$5J?I%U^_}+4zo5JdU<0%F6Kd#fx84&ewm~lDhVut+sw8(7bH6gSqrFb zfq4gUQO^Kw&lR!adB3z^)FxY5E%i&R&2;;fSP%&&B^e?ECd%Z2_c>tfdnwdcQOSY*j@%X-S98PO-I6-g_^a+wXB+Lq&6CviUf*T zp%)5Se78e|F_7b?FvYQeE0d2_{?yf(n&KF4CD}A_+()`RM5Rc~e0|aQZovS8Ybx#m z1PiEJ!#CQbl+1j|*UNy&F|pet=jeR^?SqQXl|9W19zT}D#agbVsN4B5D3WQSj@?9( z{LEOqvoYlf$;seu0CeJgFJ9F&zXx4IXBm%2x-ea8azB*zvNXIAovqLn1ProcI0W&r z;J*Xt{w==oggSIE>R0yqLBF(l6@|3h9a?|7Fc>J$ex!Fb#Luf++xTuf=q9t&uC6Xo zWQ4|J`y%;>M#PWg!>&Ni2q5RNryj)V)XjNej_K@H;zkj(DtRQT?kq>m^g-7d&uZvp z^EHnR8#l07Wt!j_B@-A@Lx7gFww5o_P`^k$?bz*25WjHoW2#fv$D5wX{WjSY|~tB7X*?( zRUl!xC5}%E)DzFy7JfC3KMiT}T-wYnuE}Zb?Sly|q%mM`R#L>Ye=*JoU!{1Nl&v^F z>!H3Ke(@dy`*QeK{t};#3~!{icx1P*hUWQ7sytiekIb1+a?7)6BxQI9(D+W1;o+*> z>N8rzwz6p=OdmfBa?02!6ByXQ7Vbwqx_t}#ZurMZ@wTI<$D`Y#=nBxC_h855glW}6 zJ~xfW_nl7fmpzE_T{BGo0EEO_w6Nc_*Pdm}M1P{kY_W+W+_JWJGMuRd9u6{dUY=hs z-Hx<%F)Z$_ZnVYIW@k4+fw#PoAIROi9#el0-7U0j&PQBSGFeQwlfyE{I?1u3W*l7S zXjIAfARckS>x$ITZ2XOC++AJB(cDEmHx}uiFrvOPbMmP<;rfC<+NqPndZw4+3yXW_ zw~F%GQslJp%^XX&QN4i_MU$?M45 zUB_qQDW|+>-V<#rMIuIX5tDL;&UimCJdQ}gq@%8ZeKj&|W1mpct|o;_Tv?wsc2c33 z9tckC81ewf#c23udzdelHBhbP4Y-r$bt}Vvyc=o8F^-)ork5J%t9dNgxVoPzgq9vt z72K>;bHUG1jEZuvmwhCXd6CShvPQ_EW97LS>PFMlbDvBa)#@ayby_xn{xG+Z{{XXQ zy0y~bNu{{Y?rp<1#Tf6FE-*PKwgIghZ8q~x(zM%$j^aCbCY54nSNHD=faC^0C<@u& zjA4(pbJhv}00_9uJ3}YWKAajzfiuBzt$JQ4<4;I)LcaYu* z=0u)ZE!^;+MsN<_z35LHjw>l>Jq#^7!`BUGGh09UEOSI2B?n?k>y7vwPQXFJ;|GE( zqP-JAZ*dl%Jc(y!S}7B92^Y-=VGaKPEh7vY=Ij`ct;?MZUE9wx-{()%BmV$K8x@*a zl}Z&-tZ>Q`1z2Qp#&K1=L#Uh;$*tDK&DHiw~O~FlMzrpY&hHo13BB*Bv&dfbk7Axb#dg}!#9{)_k+%B zXJuAE0l>lKfFl54XD1cZc$-qwt@RDobIW~WY!z)<@f8?L$Sy*XTXx(ANt0C6uk@W->P5J=d4IFzi*%Qh zEX(_nROAOhTPw&I0OyL*ztZK_{70x-$)>HPsAVAAu`yeg1*6Mzxk?r1l0ffN<+508 zE*+t>Xybx7nsk;n@>eHr6fRqwf_Xf3Am*#++FII4Y|S*F2Y_ER5tGyK)ZW!(eg7c<6g8S%0%M>!gtRcUGHi=0%B1v}Q7jz%enl8|897Z<$E@ zxvqaz(`|1wc`pRgMlJq!ELKa1RlorYFBoRrKi$WAr6Lqem~{yt(=BZQlHxU-`H?IG zG2TO2S*7rf1b;YE!TU<4qR-zFhkOGjhtSbvnB39c4st^ zTaPHUy~JihsuEXZDn?^0pl2C;azQzsA4sot4L;8C8+Fk$mymwt3a$VOxjRlyNF4F$ znwM0PO*2rA*UYn3j!!lwyp5V0hXn2zC*%WQ7$fE+lg4loT(q6Ead#re5B6Ik+B|m* z(nhi_QKvuxo`g3z=Naa@>2+x?G+T`6@t-ZyGkA%*TTGwb1BM@X20t-8G0shMSB^C; zO4d2QaU9XSw$MUym@Z4SN(K>27ur}2+kTZkn{}oe%S}Mr%MH9NsJ7Q}G|ekU#Frpp zRB%FrfIvM)YD?&8=+O@l>Jizs^XYNiTbQMu;!oT!&IVn!k|TK6Xe)z~1zGV`<&1XA zYih79ovcqIT)Tyq>DAaPqVv=!01WWF^&+`@%ge{Sx3;&u$!GHzMFOOIz$KU{&&sL~ zBaSjL#ddxe)AdXH`C_r$mlx^hMqx*f&vin=H1kdbep@@SB~Ex5;+Ih+a|#Usqf2=q zXeA3Ec`yPjM3NV2&KO_=yNqY^&%K7@!djK(y@c`KTJ?r_w*;C#vLMLLW0VS(+}%bFPDjKek~mgZ>6B*9MR zk+58zLV&{@04QOt%NM>PU3*!ZP?GJgmKgzor7q43FkhLJmS)bvPI18_0}O|ipryNlqZaC1QEf(?~Xb94-8((V(mkcO zXLfdROc3_3+j?6&aA3WNh7wqF|<0f2XIJ$M+Zuv*{!qVnF}TYZvFl1inv z$vH2(JD8oyc9PAI276WLS3?rY>R4}NkL>LimP|fb&fuqS$+I7KKAl15+o$lRr3@At z#Ftk;B-V^VTb;`rw9&Ex3C1=DJ$OF+R(_=g#-pLlKiTBlm9}+A!FzqoOn4=UWnxYk zl5jKAgJVF_{{Z1AmTMN5biP=Bng0NGg;Ol34mrS51~N%dDA1VpG&F1V@Rk1ni8Sf7 z%NZxUo9xlce4C`ST$U#)age1zJdf*}bEi!DlUl0DG=kbTw{lT%*c(}gP#7E>9ysey zgGjSuHN1^HcM(PBT^EUb=3o_m_D=-A%n2R3@m(4x_Ko(DeHyfvnI)r<;zFexmw@gY zh(nK@0K8)(q_$eyQ=IVa^`F_6$57Noxzs`Pl-ib3(Y8q&feKd#l6rLYsI}XvY}Zd) z%V=zEH4DA5J*ZWV-Zji&-3RxWFyEYX>CJ6;k4V$6HaVL@%BxuYI2m=Vr7w!;Lwp5ilIj*Qr$;sCi&*o$C>23enO9v7*osO zf<47-`~uS~{6h?rTgNj^_KSOkj38*@P0~q*UQR=)0I|=?ne?o&O?x+SbI zuY(pkY=1SqzNKZUN-c+%A&8bhNCR#F2RS`C!LJMd0EEK9{7Jc?ywsU4q(V%K6aAkI z$coGkPt3%Vi~s`iYukTo3&`)j3QatZjX~1HOBy&>@Y}Yo*5%)lK2mxS#tnSGVRX^N z>|tpmjIa91HnE#2IXNA9&T&xacUH4o$M#@uR{~Xn=|Z$5xZ2I~fcrpR-!^h^Gn%?!y42#D;>OZw zBDI-*(=#DvUB_z3;PJU~KqDKzZ&6#?&w`gr@debr9iH*5*;q_wx7+4Nwj&ytPtL8L zdI9%I>t36((C51^cztA?L4BnCt53Vq;1^%Lkrp`|%t;}-D8XzmAoE&Rx~gC48f}XP zlIboR7ZRa%w^kl%sN-*u^A^d-3^)TdM&91nQ1C^QLbmb9?<9`!x0pnV2s?qm3-X>+ zb?#~258Hhd*9{zPXK;)5h}qTrupE5DkjEH24uk1gb-5SrYE64E(4f=p_RIEtNZ#As zE?7wC3hRadh8P*j;~v!S63+hs5SnX?HEAxa8ZmcqZLwiwh%@=pk_XIGHw(Z3gTbud z5NJ0OTFJBRO*D}iSV@o=z5pi&AHH zxCWgjr3q=SA)3uRI2JMqma4uRgPW#HMiRq)Db&La?@?k+tlS zLSmRSK4`)R+Idlpr#)K-fl_~BUVWa&OPV%|`$1xs+1hf^4cs%ZRr|+j7#QQ4-thzt ze{hxxvCWG&X=Ii?_b@sxcPmNrD)3)uU=Guoucbo{n;T6vn?3fQG*=e;E;l0u-S?FU zEOV2|1LZtcoW)+oeeBllWAj^^mHRqO(O?a%%n%bM>GZ{JC3 z$|AUuBrUK289*c-m~swI53fqOW=BtfRR=W=n}DGsJgEF+hMKN`utqs9#-8VQDlMI;1~p zx3@*Ri6#tg3x<=;NfV%7kTS8)QQEEeYFo`yRnyqqPZsGD%>->W;h8`q82~R(*x-@V zHKXEB4O`lLL6Y9qXj&WDo+~Sxs2VnSWn$Uf=%9rPL$C!vLyYrE{Q;bj5lN@Rr^#bH z%P|gtP^_u2Z`~Q~kXxw6NU1zRZahP!SpA+i^6dTlwDDsPkkC3VCXC(`x;~xmF}}I1W07 zsM+xH>YfdWjDqkBz83PdFovO;0V#)$VTJ_9*Qcma8R|<&DLy#gx|a{hDTiTeWuExWsXS#5OWZ0)ry})r~X3cDgpE z(p*QRt(Y?oSvjIyM+ z@TM*#D61Hc%IKjVyOMK^90QuS-aphYbenrNk&TpvS<^evPREH@@JpNm4o(LIRNAnY zM7+OAE+qR>$_3TJMf=CRAUI9?i6M(AEDr#VIOjja8eBeG>J1<6;e=gD7n|hAA#?JT z$;soKal>SaqK;ci)zZURwUNBbSS{q3jE%uCz#bd;Ne7R9E2h=rp2k~Sm$8Ln)Qiao zl5~PHLN-?zY)8+^4mnZZk&9((r|N;e)@HZ8owEu^T5Dhwr^%DZ1QNT3aC65)R{R@w zx-GTr7H+owOBHzDL$)+buneO+n1af{;NS|Yl7!YR*3(FUz;<0izGFu27%*2Th>eWo z43aU75y>Mpd%>6UXx=3j?+k|H%bLpKNdYT3D~tqCatF#nk&J?Bo7hRJ>Hh%evT8D= zv^(dI$S}zqLD;K0lk>RA0FIk_4z-mwx2P?E%x`A4vKC^ZC`@K@ zhdi+-lhuwu$P0tUD`MjLwH<17xV`&BLu|=7f);NwQ4oD6VqLC-Z&3zl@}lT_4}-4-R{80Klhw#fpJTP?=W+lER0 zAV|m*^q$`5QQdX+i>8l!hSuI9RoNGUS$%)j5;!CuYOSbhw^k8qK3%WcCYvbEr+1YW zcNGMZ0q943l6lQdrAWg}lHy-FNi5bl=WxY~#&-;oGxu17xccKAsetL$)_Vqm(^At` zP|h8k<}_@Am~0YDXBo&j7|tnS)t5@}ysJOjWLt+=)iLIUc+`Y<{t}?GVL><<=M|4X zovLbL&Pd=@j&^^u!~`-i^1$A>2alIMbDZE+w7X-eMylAEVt8f-M3Nbo2QCVXfxyWl zrZMSBpow!|2_J|g{oS-O$r?)-vcuW@>zpnL3fr3{dIPv|iiXp~ERsVXlLT|@WfC}I z^EOB*c{#@n2 zNV!>F*Jv>v!C!AoZph9LImJpWl1oOnx`Jzne5PoOlD*hhSx7C7z~?EFqYKNH=N+mp2{||l z4;{K!Cx4?ypm>Hj*L3s49^inGR45<3-O#2%6wHAwC(Dc|)CZ}V6Jo3H1BtWDNg!Ezy0top) z&sy650D@@UDbajcrrcaF`Ye%MG&=({NbeyHlfn5&ABh!{`+8|sad?{4N#;+lOLrI8 zz)=iv+mOiRl(F+2#xckMbKbl-{{X(W{{XEHkFd`-eIDOcfUk89XqPHN5 z_36s!=a%P9eH3$jntNM0mroW3()d08@~qMY&qI|e1`&7xa(mUiTWQnnZY-}ZXPV;j zN4lC;W&1tHDx^CTmDoXTs;4YQP64T7{{T;jMHkrEY4-mBYxAI08=M7DfmwMQNH`hE zB%TFl>Ka?i4a9nd!dxoGpiLaAv8Lm`Qp8{Y0rdXwYNSJv4EiVbSiZMurn5R~7vdG45a+13Z99wgymU|qj zI3OHju5(*{AZTs%8(A&Z#^Os^Nm8h?`IzStj#QEf4S}5GXVTT5gkW72b*mdYnDq9# zCM$N25UPelm2h()&f$!32uikIFj@ia~nzwVMCars^%`|^#RlAZ2E#wNUs8qP} z)NMHhNGy611~Ne`veR#LBV%-t!wY%s6jB!2445Y*;B8^Fp1d3Z(w|Edi8QSm-X)sh znqzTgXl1-fA};MF;sF3QK*KIu9ghZ~(eJJ1v-75gA38bF(Vh(a>_KKc{{VG-T7}OMiE-1O5eNK z$1J(YUhB^_I|Q{fh2EI=?RzYUW@TNH!j4ws3*JqOY-fMeRygp2Exp%i!z+opC1BT-pxIBzi z+m94mO{aO*aix@!Gx=8PxL_QW+GOh4^&@KF{{VKT;jv=UJH2ni(p)Oo#iwbJpR+_G z5c!X|D0a@{u@#$t%vT2>WahH&&DMy`i^#PJEo6>&Rc3S}g5`FcatBk7muTo}=C!Hb zX!bE_b6RQEEi`iFj>cjX1M_k7WPyS>Jd7OimvjB0sMt$=9o551&?VD`Mc&7Hsb4G| z-!AkHNcHKqltM{vUD0phfc=*8NTIcoJDB8UOnJ)rbrPgx5g2lW0m&P`8rD{?9l~Bg z95J_$UfX0xY2$YCgQ5lJE1m`jrr&C>HKcESXAA06NA^fO^;b)VWdcW5PRONMIu!)t zjw&DRInBsLVn6ZLX1A(63Ojyz-wu;tCt!9$pV~7Sq?gWaCs=_mZJk}Y`@rA)7CaB(PvM#Ev z8a3zkT6tq2<|G7UM#HY%#Y-?a$9xLW($HzPlT99_CCp(0TiQGuywt`(+IEJKdglZ% z=c%Y=#$C;5^a%7>E-shtHu23W;0d6EGB|@+%J~0HPZr0oxlh|Y!(|-oxj3I zbDGZ{B9d9H+TpDJ(HkQ?I|O6yWfDanGcG!Tzzu>=7@fjWzQzTd7Hz7*EE0K^6M(SE zbFr=^l~`rj&+tC%5>5a<)w8IrrugF$-4C$DE(*QCk|8K|Qn8WWKBtw*2aFdRD~pSU zyxzKWH=BS#t$4bW z?H#m=-)K2ymLmXwhGFHQ1cCuxxKr}y0)l-_i0x#u)FmbU!r%tW?U+1!S;=M}crHOF z11FBPPR8=zQACeVk|njZSuQOAVsK6vw%l$H+a%+s)};Q{{=$+tnV-zLhjLC6%gH2y z%ey2l?@`Ga^r~8Mv+&NFbk?@>!y`u4rLH3lBEscK2aEvB7pI^Z#%h+uT^3E_YH&%r z%wo>QX)s5c<19`w(Lmf!JGd2HwWPF`IMNv8nm1;R0ZB3oDZ$&q;koCL$l|8d+UroW zGkI}bNSNOu{O!O}06m*$%YoakO36rHSDG^mM+B`KhI|!eP*|Mp=x}{A^5&>|n>PL@ z)I1U5Ykf)^i7b!{kFtwm(Rrb^bI*RHR;R=HAn=B}9;JB;&2N1SffNAC zBuw}tJp9d$27f`+)QAGtI+=nR5&R66B^v_;F z(Aqt6;?~uT<-NRt-b{HY=ze(ECrq+|o-jMrbt)#1l1s>KX1TU^)1fFA%adqaKP0ve z8=g4F0AjSXi>t@BySKN3;ilADG`f!`%ZQ@3)_tpheqzKE$sl*dSkSyFZ>#tnV7ZzE ziWwiu{o4zhnYbZi#}1npea-W$X!?sO=l!A!z3~n`#EUh!P^@z5`4$z84N(@j8~1BM_8R$Z{j1x{{U_; z2kV+Qi|v|AroN8)$L+@93hoY!;o)G#OmT&gK4LOJ$Zk0B)xM8R@dO%w+GMznIO4gt zl0&!6JJ)%Lbt{pbx%si4bAjz2w$1d{{{R`U?<{r4wf@P|5L$hr;K>cD^D5v4z#*dt zX#}xs5_;E+=(lOFX!bgXkz;)}n*&7~-dwa_yI{rR3CGNSZMeob=hM3bZ)QA1Z1p6x z(pavO=Rq868%u2)p<}=2Aa5i9!*M`BTK4+C_WqKJB8nd}SfxvVzGQN`fF0d(NcmS89YTzbGgkD(m`>LxZlNh>7lAkJ zp4VwtISa{Om4~i5^{(DymDr!bR#A91)U2pBuBU=0O4ylU)41K0PL?a)@`qD%+N(=nHFu%$1WHt-;l$1Ctyyz(prR~ z%KDb8s7q^Uad3^QJTUoj?zi$q z0q_P09ZoPg=s*X(XzPaiU)1KfnmMMohT1~bw){c-kgA?`WGdwPR?$`?TNN#IB)W-1=J+fJUtAA$8d2q%R638?1v}5>)19n%EHlBGE zTHjIA#j5GoR|@v_Lj=LOZhX9`Y@Bnn<;MgbdU7kz^vhjJ&rpW)6DQkje6}+Qe7Ryc z8wfs%J^J*=N=Pjh%Ttq7wz^`r^0aZxP@ue>nSXclb?SK?k8aWI(LBu^vf11CyGXZ> zPB#~;r%1OKawF`_1h@>MOa)~G0-%ss?i`#}YTm83rEerMd4|^FYk?x!s)Y{3CSo~X zn*g2J$dDCRt5<-mU8&qdhieADjRJ&-%pKTv{7>`gEFvS>PrFgvB2X8 zI0OODO0jxA$!GIDoc{o4h`{d)h}IDvPGsqUwBtM$7zC5lY-GtQ_=0<>p}0|R4U1em zO&L=nD=MBkj04lK=Z>`I)>=zxA&=zwztUP{9$J{oZI5?XXM-} z$hP++$s%L|(a6|dLD+N1BLrmTw!Cp`cj9dl7&QB68We@4xVQt$i)?=~6$7Ic+`9-M z5OK|6YB6c|O{UDS++14QqRR6dhDi@7ue3N&tb}I+C!F#rq)dyx9JZ1X4dkNUIRmA% z$rZw^m^k?tqYj^YwnsP>de-9J{&_B=($)rKSC(l5xVE`cN;VaTEEI>y`MEgBCb|Cr z1w$>ys}0J-Vs9>Gk!@g}V{aUvB!x@6aLTL{9F-)60Mb8 z#A+BWTxSirkyx=jXCubda1K`l2EvvnA9(T6sGH&q_lRxM{%fnolS&cV z0Ss&BCd{N{f;O%J!9IZZ6^pJzG%+Wu~<<=JSdz<`Qy*V7EnRSBcM^wT3%u%)%B?V0Jp8?x7JokEiB_$)9mdK zx5)dExfpyl(Vs$a2pOt6ZIAjqR}yLMBoam~;rmE=6wkSaA_~KW`>Y$~8;4U=>?gX_ z8f9tf>+JA?239L0{)2#m69+>JcASGhBw2jy+WH=^3 z9FTVO?~0N1xv6{N=kV3AxVE0^7LRn73nKpRU7&3ac?C|)frj9b-n8}48BM3^_IJZb zhR)rlVH+$vglJKjh$98Ve(Yzqe+t0T?QK5KJ&bn(-rg9caK39uV%xO+%#sWJ-Z(w@ ztClvR{{UCh<{FaN`S3=rL>NewPUSdGg@6iw4ExrE$Zh11_>WYMYgac{mvStVq)29m z&O3k!fy$zQInHt1^kt>=x;~>NgCw!u-Og3yk+wR<7Xu*kv53wN0VAgsuVrPV+4z?7 zYfD?m?k|hlM$*h}(FV>WWn3s^V%Y@a^{Dl0SZ=PH?RvGE+%h?4c|5-%kS;vP{{Y}v zP>k6p&>9K#EX6&mYW`bY>3V#(QO5T-7bUhr;fYazK=0*&+jk(>A%o zmC%%smX~n~V~ZVICm7v~200k279J$Hi%^npv$I}WKJPXt_oxhbXUO1<$L7XzM}D&S zFIsO9>bDT3!ow4yMPo3841na8AqU=WMqB3hr)>-7=xg|b`r}LyrL<7n$#HOjCHwoC zLj`sO?JPj#41z+6wKs_)xxQH5Iex;I0U>5kRSN;UxeJvEoQ{O#4wcDxzTV?P@YTA( z7nywp+%aE5>a5QbgSFR!a=21l5%+-P3T}_$F&3)~Fgso>vcom(EUb)^sAc7jN6esQ zfa#3Xa+RUg%i>wIK(O1qmUoMAP0iAxNZwY(^6+||6L9AMIT-I;?~Hs@H3qbXNZ7T7 z)3uahTzPBf2b3x58HNVs#?Y9nTGWxjYk4K7oRU1Kra2$xjG<)N3x5)WjAN1t`cphx z9-FRsQSV{$zS(1Fl1xl5i?uS8U{5)43X)C;!8y+rS|M{Y6J6Hy+wCT2k58E_Y;M&t z7~gndc0O;+Idk%<8;;SvxXG@g;HIH&x|Z!e>f?2Zj!P(utZebkBK+9SS%;PLbr}GH zGIQoyRgdvYNC)gC!+tWw@zHLc6KNhA@f5w-SlmKjh1V7v_Uu7krK6}$MEcPuvdNgel{ zD%JXt1 zZ#1#mKvyZ59AuaK?0!W(2{_L&cq71<*4`o0+U989TYE-XZJ~fm4&*yd!Z5A3lboD4 zUWTstb}R26YXVh$+LqLY2;^YX6hA8%nv%V43V=UWBmwf*K z3D4ae80_>(HEl-TaWc(kZlFXOL4zjkq7q+eL&(7ZU;*7R}@h*jPr?T6ucJs>&LCV5~Uvr1dnLd|wQH53sV1P4Y<$EpcrA zPsSyCIKw}ESZVBy{z`)`= z&38bz{?9F>%J&m9o7aie43^C*?~h>{RQ~M(wtiADKnAWd6}p@sg|%B-pA*e_XLgG| zrETP2LwOKOh^3X8UNnG%8BnKw2;n{I=B;owopNcW(|+Ci$D7SUA%^gBsM{5`?f@tl z+^f$SB-caYoBsd~+8sYp()5itNj9r2X%)1S39mz=FPKVzRf;z}kQ8UW4G4DYkz2^W zXSj(iRDR*iliL^l*en8oS$7@*>N)LI<~19b8s(0qr|3Ew?!1N#JS1y61(FEcZtQ%3 zGOor>4oNKCIjcHOuMpENt=emQd&Y?Edr*=h%OD}!AQ?98QJuUo*cXh`ym#Vz?RHeq z;kLN5lTVXzOMs~&ERd*mZ!CpkRYB)CJaLMv;)@vUu5{J4^A~ANjPs4N1d|!rj4Cpf z+qiNg_acqfp=%fXRc{^cr3KuASJL2!zuEyCuE_h+ZIkb32wMTL0}c;NCV6#@Vna2& zm)~uJ$UKPSx!8>0mIFI-0Rl0}Kr@~zr0}c|$8vPrTRY3e)U>;sOL>fdNod59j}GP} zeCUDIMp;;Z1z}w1cOPSx;zhVVaE2R6OZk|Hvn-B486`*rfO0pJ?@~DKS?~!K+HIx8 zGT+(XT|xFks7H6?va&jo#SaPzk8jRKSMaM}67_vc#5Z!=>N=*SsazqqBIKx+7-Efa z51A%TFjx(s4u_HsDz2R+wY-yB#M*;f*gMNKs{UM4`EeNm+W!DL{m{4|b?zz~+k3wk zUEEw_9WV|QysSXM}+Sa@V1PTU7(-bpz@k(#-2 zrQKTSHmjwj-M*OyRuCswa?E~B?Z(nqBMtI}OrA(JpX1G6Pn$t~Nv;~{uBB+gh*mh` zaOZREQ}UJNPXsq(i~$i>MQEMOKNMYEK9h9}ntiL!W2rKuz!_DPe7;{QG6I$?{dWY< zz7^y)`W)Ag%^a3--Gym3IP)Wru@WpQ#FkLOaOAFAgN`e;x$z5Wx}}^}$_bmQPbj*AGUvJ-zB5N za2i7_M`2dUIYz)EAbsQ+^sGxuzwKQX#eAiYPm)x)yJ-_*w1voL9XD{;&uo5owaXSd z%SR>0lMK>FZtog1J;Z3>?o52=1gFX|kf*;C!02bax7K_yrs?qAUw>>{%`Lq1K_kqO z12ZgSF+t`&S<4;7Y+^?sgI@1Jj^n`#c^r1LO={Sa7V)jTfnVfoaLe-fiZTX6#tv~) zTi7kt!$o;xaMInknJu)_>={VQ85R;(F8q+Z72mc;X)v>CHBq_E|0LttGLRC{QHx#=HEvB|C6g zNFj1V5STrym(lEGzW5z!uSs=cT76ne27)<5G!h8Hm1O{A4S|O|DX!k{PSmuWSuFJ* zBH9K;S6HBqD3VCr`H#3`a8~(=T>b8yO>y2Ov$4`VZ>kH1wYZLEmg@4x(NB`|l)z+U z002%1!8qJW^sOS+#IrsPO()juUg>7HP(r*hqWNhe{_#qu8xzq^N!oHMDEw`4av5XN zEu_1?GsxTAw9rYlNh!2ohYkqo{6PKMivIvuk6hLDVI{P7*NRMv>nDtFLKS5@gBdwJ2jVkTrtF=G?zMIh+D&tGnuK=`_G#_eO6&|W zH}oGjBRzgzqrCQz!zYI==CioCDzHgBO+21j4)t$T@WWea@m~3JNearIUEGSOBus_? zj26cI%elG*?oCNM33Lcm?ZJ;#4I~dFesjr#C(9WG958LWp8#Nf6fGq>#;+KSf6ckEfLHG4AdGRG)oE-c zl4XwB?j!SGWyDHB5vv^aUQP;=k~$_$MWe&I-^^PpwvOv!Nb%>%mlCeoy@Nz)Eq>6kEaNQ@AQwARDZvg(wsFn@91M!2PNt`aG|8^5rt)TnMucyFkyQCh z_p*NW4tOKio=sre>%VL9J)YH?8*t@giUr#yH+;+w86=LJ433~y<-UnLwjX0rYv$X@ zBL}&K&)MQcFDJ@6@SAY_40HtMqt~<;;kDD!ON%(bQ7T+bFkzJn&j}IbmvKGL4*+qR zS`}j+&rw0CGjcxK-@TUMUE@;Eo$t`#5t2uzewAxcw3_AC@(Cc4Ip>y0@WoUpC5ce~ z0KlZ24CAN+gHtAz2B)b>YM0Q#4Xk2pT`{&Zzsx{YVtM4_I0GK_Cx|>jWvJ>#IjwE( zZWd7_(`^W6b_!lRAPT?40vr-aAk;AEV#9qQ)08axVU5YR^R}Jj{o#N!gPy%O=rdJs z?Cjp&L|AT2qGRW~ZjGZXGNW>mg$X&^fzB~kyho!)rrNdCt$6b^eqoK{^4M+#ik$QE zuED_Plh{>zIHl4wdwassqfH{*2;p(%>>HEk1Lj7^I2lv&=bkFMTyaOe{=*&;)wPS; zjZa6pjsrBKO_B!;ts#@mWik)Csks5#aB{2bSU;0zKY*gzKY?^ki3O2cQJOCF-Uh|!v@Axh-`3r@m4=>?MBvLiJlMC zCc2qnZ?)UWB#MahIRKrdc?q0jAQE$qE5l#!t$$k`E8skH#FI@vg$~P6v_=%PO6O-NKF>2-ua+EO z36mhmBL^&b1MdJ1?t0*3`PY6Mia6GI!Y|EoQ52&`(BvPy#05AcXEnKLt^WXRT-wcR zD%@JxxR4~Us!MZ*UFFv# zwB~U1_ZVn&NBqX=YH*=BdCatWMQc*n@$RIQ6Pz>R8qyzy8b@ z(p-6xOFI~rRosloxqQ2F`&FX=cHQY!@AM^mZ9Z+wZT9FfE5yC#u%H>NlGjhNv`FZ(w9OA4)_Aaxo80Im?t#E;a z8S@}h&&u3@xfsdMZoJmry_TtZwli6@mU2UBEwl_S78v}PgGyABg(R*{1{ju6-m>m) ztYe<}?W|H8f3wLQlm{6Pv=(Aj$Rmu7ah{kQR5scS(dkw(`N^4W(&5U>xxzCdvmyTg zo`b%7FQBLzG@HgMx^3m0kzCCS%MJ3+BILxyPEh0T0);@qBXSD0apEgm==CMccVA_8 zM2<|(0x~bm?~TBmvB2bVIKa(28*3}&`*o~$5hTSIp;J1Yi^aS)~Jvwu^_NM6* z{k5+qU$xrHt4e2UZz!yAfCyFtc2x3H1mggnXtFPuxu(ryC55P(<~_GrhItFOlLGw1 z%o#iaSpdNOO<1$iZM2^)Zns=R8iu$@B9as&<$@5uFjdar1~Y-jAc&>27ZbFbk*10= zNRM=d!#EhmGI<#o=nX@tS?0z_gxa;#nL?`zW*fjpS&W441S!Bkr0`ElM0uM28q^z4 z((dhH)FOL(;pYwNP|E7Z2;lAn4aDKI)Z~(Q(9|TCQ`avp5n5=O;+jt~GC_!JP$Xsf zRb9*V&I2DoT}=z=V%=O&O3bs1-(uv^cMRq&C+SH z+*^cEFs%QV%G7z8`v9*mMSC@;Gf;UaKMp_ z44l-KdUN=PMw-U%Ra;vY2#YMZHzeSo10aUPZS!M4G5{*3fj^NAoHH{uoYJwG0|l9Q z#BizHzy#xy!N*S3JBZO98f1>mBsb0C#e)Rr$CB2aGR=b%^89n?pyE)>$qXn`or-7FJ!vG=DO# z=26gN?r=Hgwy$>;g`blg(4=r&3zm}#>{mICC1aBrCx7nA$I1qKQe_$1MUCm6NoKmZ zhfuKz{hqL{!8`5*PF1*7T&o5=pGu_|`%b8_?YDdDj5?`8TYt&{4BvE&UGg6Y; z{p@B4&1>YDaSVH~*(7m*%aC))z^_X22A}<&*Ou(j&uolBgqTV!6jZ zyC8#+SUxE5UA^6|#b{z{bW+-=9&+BCkfG1;xM9E;CmHB-R~vN^fqQ3luIkHnWoagN zTR`tF7$XJ*XQ>(M#z?^Qt&8oJGk>PXCBV1EyRr-o%D;1H7#!y~$>f^9;Xj93ZPeQ5 z_LAIN-0AF+ERm^`83le(xCcg&*9@e$$a;6jl4*q34R7aekwnrw(;?gk9nM*a0G9mf zw=|B$%WJ75iX8cpGe{;z65*Vxa!WRH4$;qJ(~8hbE9=`9mNN{PM3G^YHz-W*E(Qrb z3FCw5lUePeTj~0%!q);Tm{376!sHW`!tE!F<17!&)1_Rq(`1>XQ##EusJB>L{KdM1 zjt0@rdf@FHjR_9LTWtziEM%F?*O0V@VQt$L$Y5GQv~FTS7~~KD9O0`=Pw@12Fx;xi zYaP5|SuNq7Wrkz>ypzD^AQjk1+}lQTQ{2mSYo|jEyf@6w&`GprNSJioN*r!wW7Oxp zSGT>m)R|#2Z2K&pT=L2S6#_%@qqhOG7#n&LPrVy~%nOSsrdPO&?7~?>#vRre#&Q_8 z4tdBq&mWCkir&Wm0920S$c5e*7{r$dS!8f`D}CXN#*=e-S@+dUheZrx6$=R zw}s+MdExWpo+noQ*mgNAHe`{5k&Xp(I&625zuGO@CApZ1V1Pg)LKyBWpp%AD+dw?y zpganoW*)bs#dqQhrPKVISkc6fJaV%L+ZiBa4m;#=(;l^>rbh7V7JqA!A39VBS;p3p z0_HU%JdA^a4>{;^GiSoS8Mt^R)MSZfhDq5JtY%h~)zukP0tiI}WsWj12UAwOH8!cK zY8MkMHh*hTd2}b4QY7BWL0ED=MpP^YIu^+3Rk@#2OU3pv>G0{gg}(T%wJT|z*v?eL zIydh@g+SYmNaS?}sp)!q-}q@fn~4k(PaDp^D@}7D=VFEpmW} zjuf|r?e2^Hx;akp7!XsEFfgF!l1J3l%@yos@NAaq7DI149i_arl0ZoV)B*^{BLzU` zt!E{nT}(UZ7JnAoTHd6Zd{-Bu%tLqt9!fg|HxdJ!1yX&7%-QFksPyZP5qPIjwX=s) z($hx~tS%M@xVS!Is+pCF?7%|k7BWE2Nyy{nZya5ug~aXtk$8yOpov|+Q2ziT+O)^;M?0&Efq9*52Cjbr|)9x@XkAs&FToHsu=pszRZ6!Twc5yH@Ypxl`);Jce*LhQwN zZ&Aqz8NV<)SEGNyL^Z3}zA-Z2LbG9P)&ig`s;wo#Wpw}y`t<|_9+l^R4sA6p7eu~k(}op2_4uiXe$$lzd5BIqYMT+f3-^tchY~Q2)3$) zAb`s1FgEu9byl`r@o^F?w2A%YPRvga0G8OafV~&NH_f0{{VDy z036pDI0OAEMRd3z`F7+FnHEBNe{|rGPaNa0s(?ttYs+|i>|99D$cq`8K(VkOjmg1p zl>EOp8S9GEo*P>YF4E>{uCF1D8g-v?`B1~3o;6*kIU|-h86&x^Z63jO<&rz)vAnml zw+%6A3@#x!ZLzS6U*u!; zzz4lio%J;C{5x@#zKT;cB2Z9AA|=F3pfeX8R1#MQxDAXES+U$)TIyFbUtL`;qVl`mNM?c6l(LV#hQg{bOptc;#sI5Y-Lw+J zJF!+(h82=9F&s1bV=^-?NNxezdXh;48KZs5zJxZOD73Ic4a8I3X=3%5M{goWa0$YJ zkO*uN4i8+MV4T&<`)Dn1q>jSMLndxb)R5Xf*CE>yBC-2{Hm>Y^yG{i+LeQ;r_F*H9 z)3)n*B#j~sxUg2+$=u4MeeSF}9xBG2Vg0!b7IthV@?GV*jh&j>(+3#&wuv~;9E^RLq}SIMUuBvEn#u^9&XQTdDkG7= z3ag*ITapd{&&(O2YL|^V+ubB>4EuM-gXBWk<7$irQHB`qJx(guj`hfIwX0c@-C&m5 zLo?jM`)wsBkC_Mqe$ak?MshGuH6DdJU1+mOa zTcUI<>sMB`npK^{O=)ow+BCOJn6|fB2VirPwQzIPOU+)W$CCQFNk z5!(W?Uu(`D?>3Z8*YSxlQue@-Y1h(k)*e@wuagbu{7&!vpHl!000I!l(z$bj7c>W z#*zJppu;`IznvsAH`@e~MR6dNKoPug?%Y!#0@))V@H0YUxtFEcE~WOZN_A)~t*??K ziHa&(%GqUdtT5mz;kM%hj1khcbj=DxlUcX6)GcGw;IP1K;Uq5 zxUPCsUMW~~NMX~)p%PwNqQxT^1j0#Vl2XLwPE@HMC>aFENmE{+m;~Y z4tfAFXGPN0^%Bc}XQr*>lB6?CU6FPlFES9h3PD^j9XAujL7-g2p?HExZ`bXgW78M5?zeK*3U&>c9bv{Jp3u=GKvMYvp~0 zIb(#wy{~U>6ipW8cL5haz(T8UQVtGrimopArM;(?msZh0L*1K}K!JiCzF+X|I0GDQ zIrXY3sx-Q%`gNV1tZix^?2^qSYTH3l&bc5l$sn*8BybLCH4C|Q%_b-sITjfvcKbuT zLWm0^d=% zva+?@g`F_X9&$IT=YH{pJoT=}NbxLIx0-w~>G8BWeW7VYP<+nDJ*>~q4j+sWf%4Y@ zrVq5~DL&?9!@5Ty^1PVH9UD7v0Y01$Q(Y&7wP}W@V3yg=1D7&zdO&)m#tN43S zytsyG86=Jf?v{4))R{J(MsUSnk;&)|IO6Tbn|TDQHrtC^Yq^yShA|u@p#?}DzcPY4 z=j&DVJGksEEkoPKG<#Y|*^^^PxMB+~bH~gx#s{z!(s)|d9b3cRU}30g5nH(nbQ%~I zFO>r0jq);(LC-lDC976vVhcOTCbhUS-A5BF>`MR}3^)qp@>6#!+!h38r_nTs?}X57 z(pu^n9(K6}}v%_+ns8buvBx!_xLvb(5_y*4nMWXTwnCf30h99QHK(oF zrlY8<>9R`=_0;AJ%z<|h0`gl5M9FJ}tFP*wQ~1rqAtP@e(;c z6Ess<+1blBtd_RoDBLi&iz>cgB&l{&87COz@toI!XpuB_kr$5Jb=1tVy09Ch&UUUo z>D)az9XRH_TlT2&gkB@~a|7C`YpoLMOAG6FWLYAW3Z55+3S%jTBN-Uz39lpYU9H6L zad9QW!{_hzBMq>QKs&3b@Xvy;H4PRYn%2fSoA)l)UQ=!kSIhF7=07nE4@?#u z_Vk^S)Z^6D@HOqN>~_tl2`sE}Bgn(%!nd;=e7HEtIq9Bw-?qJm>ek0plE+uI(PX%| zvx?$mOUUjRtG^NOeByDzViA-MR2t%}F0Q9Hk^Q1g)~tNSk-VuK`HTtm-SQj}(10U_Uh0wQEg_S1vdYm#GpIN*M}fVGR^W1>x$RloQVX6T@dD}^baxX?XAPJW zSxIdTxsoD8Y)8qR%OMT-RE6BbgPc}(!_OYu&8T@T9j)AwoJDhSZ{(C<2#f{XL0%iF z4VM1^X0yH}xAvEaX1KV#x4g8|&x*$WIP=KwdD0LtWz)a{`h+Mbu7_@3(HQna}73tL#pXLWIJHKh4fl1SHT zJHI=2w5O`Fxdan|n&A9NVS1hy5=z#0*6l9wvghp^##hW(%BDVPFhFG`fzEiV8fS^` zG%IU;Lr-g8?Oh@PYHTL6GDC44(RkP>`_9HV*(1(@?or;y;I)#H5X=EzGx&3yWD`oa}i3@_>w}!#bcL zzyM`%Kq9)$X3GBnM)38nj_nJ~wz6Ewrr4h-xRsPJ`2sJNq^oYuNOm2nj*sFAzq72h zE9;Aow_3+F<*KdUoie|esevPs8F%kF*a_ama1CC#v_3DilKT1=X1XE^)=lH=*cssC zb`&7b%6Vo!l{~|XWoUJ_d+)N^+%$H#5P5AmgvOFOplKMfJKuRx&eQVA+ay*D`oi9L zj^ftx81%idMH9UC>?U2HmdK5Acyo|J&JgxF=;9Xoz38`iZYFJpXSOg1?lBtei2590 zaGc;4BC1%~eYaAc8<3{r>DZOJnninN2XT@A0KM}D`FfB*7{)4;gMChWPkA(33qP~9 z)OWG6`IE|_WPlRO@~8)rpptW(kOmD?@Xfu>yQPfw+^u%x*D5>3Y}v zC0cFflW?*-TML!Bo>*lTNW_VYyK z0u^#b?ux`QIme-?G>uVPRaMg3NbaUtk>Rs|!i*e+^Ll~FIXlR}C$(l@kv5I1Pp$W!mtt@>^lcAtgx3;gNdh6`efsYn~Ulwf@w(^Yr%nOi;-R=l8A_ zKnOoB;fw*ERA(8iZA-){Yb1YXgxQOEqq%A1eexDeD>g^)ux_0O0mW!|qr^9sx>lQg zr%4>p-2=IqR9oB1j==)20Eoje&ma~#98*XLt(N1#*Y_3|7K+VhC{Y}#yUS-BfK(oK z;jxl1$Bg2y_zGeAJhXHU`kVZ4}1CI69U+RC_PPcK!yP;%A?q7GB9b(Cd1~@87+DIgvDep|1 zveo{OG+WIo>cq)B*H?a2uqoR$lSbRbdk$0w1qv}Bu`Dstv;0APnwF=lwDvMXGEQyY zCXh$5w-!K+jm9+~1}B_g1M_iK4SBpp7Nr!{*4NjcB2NfA;)Sw=4F3SDVn`#7>< zN%Z@DI@0>~`Zlw;R`PG5keMZko!&$%hQyt*~*Z(+zRk9 z-y=Iq*R5^u*4SC|k{{ zq{cF1WAiTHpy9GUV~mlSfZVUBUfcNX8%?#hj@H&GWz*xG=?R@|eh+(rukSPpwvE#e;x8!sB_RIC3h#Bue_Mf zNg$7-i`K)ohdFcM&+Q1UZX>*GxJyg9Cxv4vxi+>zZN#Wifm7$gIOfPE{`yc3~5t1sIvyuY=u`&?7YaTvLTAYkO63Zxdm$>99maaO!f z_I*m;JGk!x-c1~Kj}z(N(<-a$NoApz0V^)hn;^I>DM+_>d7bCE;nwTFxhC| z7?ZAgY{?lTB>Ght_2~Zqwj*iRciJQKBzYOsN`^83;C#ITj0_LLw_99;yYSY79A68q z;Aj?7BX~Mdf{x!cFd|(YDq=qy-Q2 zGmZ*#&|nJME|5HJa}0lLk*2pQG>dy#k{6O=jiWF3n}uQk&MMBQb9LeUD>iYqrmTL- zS>3)uatuHW34?OM>zpc1%`S64GQ4wY{TN+ zTTbxxz2(-kC6sXapXlgBZDvV~49Khw*I5f}3QJ>?&1Y&p7rMERL75jzwT^3F^qupI zc2q8Zc>8m>gmuOSK)^n=YhAXyywVz7(loHDSVslCarsw@@)EL^$sT4&$mE7xX9B3| znxg4iewZyI^R~qIGPLfKDRSEz_lN;#_}_t?5t?9A(tJ@Shpk6rbu=?tSl>%)6cb}U zUgC=9BZe7c$s?YhEmu=F{3F*79ju?)*3rihcvWN)?C4o{by&)mVmZec=B7FvdWDaf zaPY@)$R0&`K55xqfhC)!?Yp_h81=0W4qOY(OHkBr9vhp85pAEzc8M7z2t3lj6(7PI zk-;>sXD!Sdi|3zDlHkYonJ-w2vK+|B8)zH50&&-|IOuUzY_-3%Ml_h=5vfTw;4`A#_Jp1qB8dakOsA7_y7^Vk)A z&M-^zPjWy#k6cw)sL7vW{>XYIj)m~r!tU~WgKMs86UyF9yLY@%`Dh=UV5uhqA5N9Q ze%pG6lc@Z4&~9{VsU()p33tB0VUVh>Hk@Ogo4Ew399B=lzY#T;gER^5FFwa_FqYOo zCIHEGFP7Wo{{VCbCwCmF9Y7R*)qXFq)jl=oeoWEJYjDQAs8N!{wuQ{&{ zoPXNRsXuc=l+fTw=Y}Sc(%J50e=PE~A{g$qSvY3j(`+S%!CGIXvdHwL9rFWW4(w z+=?!b+6aaaQbCWETc5lL$>XU#Yu$a0Gjmaz;_t(e#T}_@Z9n%7F8+Lp1o}5+R3Eso0i+g#k?l)XOQSe8XlC7E8o)>EXy)l8BT>!Cv;suXw;Qs)R zxMbe`U}*^FC!H+-e$>jIw_8k1QqtI2j9^o)0bTD))e_bloyLrq``?4MNdbqK+FIlW#5@e3LV> zmD-FjQvjXcdjk|~iF%HUSzBFUZi-vQ`>8^;qN2$j?ySp>ScbuFxy5Fie>QfycaB(R zwwmfsDCMro;IlVEFit*Fa(Ef)H#}Vncv@*M9vJ|>KtaDX3mGOcT3v{Tm2=BtLCM;F zT;nGMVzG4{4jWx&7P4!7Lh3lohsc=9Eu(cCcjN`iBE%LATI+8{^eigB#_^Uj$3fjAZ2*VW!1(2 z`=jUqIXy*Y>sHHqukUMkw z*8c#8ygu50jpA>$+Fws&vQs2;7FpMf95BHln`yuRVB~RB*-af6jP$|aooR}~-)`9z zp~s1x*w|PP{XE6ZrHk#O~ergc>Rroz*H?8k8ONZ)CeH#o;X zA}f8-w4e7$9OoFTcy2sJsaxGNk=silRKF~s$LAgiX&C@eEuQWS;Usc4UutPzklN)_9jjlDV=ps`9hcW6>> zwfkI)AcsC!ZOM~`Suy}1p~C`C9l5IdWvsRnO{Lr=y~e4NaHRRH&^I`YE=rc;k~(sI z>q5>6H47taY`0mwiao>a3mh(Uw8@qQM@(`+KcUO}BI+9Hjb&t8WRC>OJ=N@)m>@oqULppvY{G-bhH{f#HET?Nl@!Nvtoe??la| zx7wIQqjkcr7Xx~apNQFp{iI~~Cajxiul1H`md*x|voOb;T6k?7Ff)s|`<*;GT&z-n9KDpy|ZwcSyNnTa1is9C3k;cm}&$80>V(t|plxySBQp2^_EH z31gRj^5q8IxooKia6Dl1T+Wi#dc3dAi!4bTix`x=WCdc-7?1vn!L90%BWLxOzcpxxGHe@&VEzSaaJJFTK-?`+jUlob`whTCLvM_ zub5<0h}U3TwiPt`ux_MKT80O;Yo*qP9|ILX+`Gq@a(G3pBDuxj-y zTGro##x!+TdpxmRNLaBlCNfus#sMtDgWj|CxF1KqxP(V4$fg*sr)Np7VmpkU zQj7w)Vx5WO1mhyKFFaMC-RYN?$s~5NTff-XO>1U`?pW2yNhFz*o#=820IqTKW1OE4 z>N9w!O?^LX(=0O0c_>?kkB1AmfWR3D34++k9Qx8tlKUG%Mv{1b%Wt}74rGoYwn+2q zj(aiVu1|bZH8~@^7gIIAmQ*;AA0u?6g(Wh1BxGQ980m`TbblVUl_^~{q+hioTSK|b zMo5{8um_BSIXT8i1KO=a;w#JVvhK8=d!&yro2irckmoofg(r*=$=VKanypOP)!uk+ zc{JTZdsK-u=+k_y=BmvUWGLP`mRx0c920|z#nTe=Nrf(!N4&O>`EtNyNPO7#Qs;k z$K3<2abHn}4^mdyphy{`+&)iNQU;LG};q*Q@w|>w3M8u(om7+nt(JmQm*N<|pB#oD#|xa_<>C zj^U66c{zgjqkiXR8{<58{t6V<^88P`XfD3lZF;t|KqiZM!8Zz7cdq17xDcS=pi|eH z@+~G!Q&PiEXAQ-zjk`j!K%r)l5kV|e@D(?v4nK^JNUvZ0yY%Uw$IOyymiL;at6ORJ z#6*_yUA`TG$jXDeDnaC98~`iIWz^%fi$n75*Unjl@~krN;Z;;bNd$bwS(_RA!n<%y z`y?zy)U_|cqAshY_^L~I;k9dfn?_p|XP)SwB{BnY2bkyp&qgBy0M|jOwXcOFHhOF~ z8pev#eUe+th&-6(-l$m$HufxzFdI3-_4$addqyzHV|8sb7V6iG;gV8NM&&moYS|5) z!3gJ^cg=6#>8)v`L!;allI4;(?Vx5=jwu;8w$eE&*&in*PDgSpqWak8T53?zG-&KK z$ZhWrnYI?5PdOb;g9d2)qPYYz9&k@hxT^5@ee?@EdsVucdx#jzEN=k+07n=b@Nv;=lLVO2cI2sND0tiLf@`tSUq_2m`#sg< zGx%oaX{{r*v>r{&vPT=T5?pc@fO2#5um`1PX&OYn3DmVKIBm6?rIO*KO^!T?4i#2s z=jAHS>`L>GOy;w%HT#Pn609=|d8E_kSWpK0r3l8(0NBCF@9JoJk7H*?@dl4+b!U3o zP3(VTnQrB{ie``mLA!7RASetzP%=R4$)eX@(%(p1S*>+=puBk_i6vOwL_}ghr3iha zB!(-HbAoYHBsx8-{grmso#`wb1_n;Ssl+N4SOw zx5)&yamD5&iU$7xI|t^7o#AlobByDyL$hIHo4tbGaH@|rjg`Jq-aE@wSbVeuM&*>A zS%?5IJd#PtrSQ$or-!WLlUB0SZA{SlQ9&I40A-FDIF2bLm4je5(hkr{?d5sm{+FkJ zXh&&z9jKbm$uLTfawAC<&)t!>lBlBNS%&kRLLPquGTw(fwz)40;>2c z$kz4rS)tUXv$&C7DD4=q3Z#I{bMkFFPVl%RwKm%2uQgNWX|}UjS=)=-mV^dG+78{I zazh*gp1I9-8a}&j7t4;uJ6jm$ic6=G7~|d@iOM!Y?NZ8tae`ThC`dypI{+ugVJa=xFmPvyj!a2ye6-JE@`jV?qSW3kEU5 zyO|Z+kj2#C?c=9C>PskM@%rD%HO8Fx7P@?+$ttSzY*NI;#B42r+vX?K*8c#LtZSYy zz0@sNO}Er;rA?j$hsGXkAK>(T;z111Bf=SRRKJ4VQ-QHCdyE8;LHj7)bL)a(6(0 zXLeW|=K}{LB#;GK7h4ppbuaBrRw;L;?;thf0`2yfQdyD7C77_lAx?08a%#<`wUv$R zI)s-kBS&esT`2FVc=m$^SvB?;$Snh71zPgU`AGAgDF`njN zpeAygN$dA`7~~F}Do|`#)8bfsF4pb3bg_|SV$rVBgQn%r11+3`$lb;&<{L@WrdZ;O z7gmKMw~00+tj+;-BbD397{}Zlaw=a4>6aS5i>OZwQMB4>Af7#``_y+JWO2%k`07bG z?khUx>N_8@tT#*MBQY>Yg-y_4j8rKZ=my=`?~*boDQI>d66Ln|r{j3FWxA5a#bSXtx~41SfMm>;b_C z2Yh3Yag2^l30Rw$dc3b`rbi0NG?GMkmPg)`LUZO}06#D}$OEoV7_N)qpNOv^@PV|o zyxP|#E$r?mh&tPbaMDN^i~y*Kv>f5EM?+O(&|$K))U@cJ7V+Cg_fi=ZWN6naSgr^; z#@5C=k&d+OKfwCOhCUz7aSoYv_FMVpivS(bs44s3P#b_UIx^y_R%*gWVc`8L>qCa& zZmezY^t*`6Ni4Sw9PH<7Mdq@d#AFSjaHOVBOjIb>8h)p4sx8vu7kOjy*teKMKK-h| z72L$H&&NWi88v7A6P+_l@f43FnuW97%WP8K2}jwXK@5K`(4m|&=RbF+eup?W*@V$g z9-y{y?mLzuki{g2aLW^xC3xiH91gXb&~oxD>ks{p;kh*k=Xt#47JH|hVo4Y=MhtV1 zHg@$K@ruN{z4J8~X8U#Aa$PE`JWJ*@OT4=V3__L)(h=*&W5&g*T=-$3XVT-ffE#%% zLO_oU#Y(H6-V6^eLCMD~Ted5Z@&2!={iS5Lvv0LYFYjf%xm1NFjqt;BU}qRRK+ZU! zYQT$E0NcX;Ya2$mbPDN&i3^sk7#5EtJ)D{J8z>lQbQsCj87pC!T83&@dTRx0EpJ%q`33u4+MZF{{S~U@7lwRk&UAm8RwexuYvv?yViUm zePcA%wl?2y^KBTZmEm=Pw<+3B5(w0KfzCQtJ~HZ=N!_AP+jeMX@C@30o|kiFCx-9r zWxKwT;xcd2=HGdd7dzAkETk%xILRZWd4I!sZj$5u9vH6-WXT*-#wHRfl1gX$yLpg>GcCo9&X#6|^rd7DSDJQiZz(d;ktdL+f5E;hhgq(WPxWb;N#5 zEYRCZfeLJMhuwmDsoX&5I2f*6zE_R>&dSkWf;&wX#xE6kPWsm0b(}Lh5gCd*k1a!p z{IzYtg5ZO@*KT@NjxRL^vzlqIFDBE9e)8JiaGE7zin20fh9D3!KIj?FPHE{jEpROF zZRBa8whIjR7Lx4SaO|aH!sl;2Tewlct*cEsZviXEFqFr9v9n7mDTjM583#gKD`x{3 z+z)#6S;p>3E|Yb0sN8vyMz;|^+M3!6bx6!?-eaekoaZ5iPDm#JQs{muZC83qa zc$>*^V%)x9R%BpKHn$4d;fM#CwJy7Fs9WDhXe73V-X?2=jTEdT5x9jQa9HDM$;Y7? ztepc?)if^>O<=)evc6QFSXeaiyLou)oSf}HFe4th8K@NxVnm>93_}uWp)e znn~6%HK|eZHc$m%4&bEx-G3Y32(;@~*0lcsvcj@lM~#!qY3A&dv0uEz4X(tpk(^-S zr=S~lS67l+O?z+sq_91z3qP~@2`q5zDtyAgI^lz`AmzCuk}D=Xc0D^sxVJVsgGY&O zRy&DV7CZ+6QtEjJB#i$6cO3Cu1+q51z*Mpj6%?5P;5f(wAPz{+ z6+qqTdL^t=TufrOiJ5f^8^Cb!N=%4Df*FC_tDJyLZ})iwh|(%uSk0t;vF;&)Yt=}v zWr8+m`$#f*o58|_`EWA8{J8+luP3vTd#GWC$`7z&D1=V7<1c{QetaF+EHl3xf^5T6aJ1ZzwNKz|V z8))++0g8~hCy)szo->N(8o9w~-V?fQI%$rdAcY;3Ns#TG0|kA9l2BoJ9XevVPX*uT zHxGTL>h}7M%eW>;fZ&i6?#Lu@iZuNaI};7osTQERZRBZmlG)CQcMM^f5s{xLer${pla4Xgt8@>r z%|huO=JGd^JE>WgNZ@oTWRR=HAi+N_R4E{5kPdjI@P4^t4ZKZtr+;i|HnLlZ$&uC@ z#bqU9R{QIa9|e6YHSDf+NbPSdp}U2leX>Z%OAI?U_F?oq1JGxSR@$OA4w-|{-`ZN!X)AOW1!xbWQ9{uZ^d)h=R!MVE9@s=d* z+tAi`FQFXMU+5ZjtU86v+K<@=1aZIa$jMUJUziXMPb9N21$Z^sTVLLI(?qd}E$_b3 z8%1vcOK|aBe6Ff_P<~%5uKv6g;B@od55zh>qTATXqB6dhc@50%dytnAgg+=zkh`Bh z#ge%P*1Hc2-T0%$njG3rn|*6_W9Cc!r5%*WvPh9Kk{%}76?VHF&B@7OxTzH~PUDMb zVSjBSt(=$I^j5LlLlv>Gx0^FxZa!+J#9}urimQQzLcr&W<-BpPNvbX6Z5vtKS|!9H zSAr24a~9{u(q2Xdhb|cMPC(+aFLlW^ts)br!Kd5Z-Arz;3R^5@RRAxPt_CuKAVESi zlHJX7x}B_k7j?L|n%?5p<8;!;Z7~~n?o;=dAQTweoPzuwYT|-Y(C9Sp7Ot;-9F}&g zbp@N-&8Q}qAD3%vT45@gRmjFzK0p9ub?7TUT!!w(>3_5m&O3IN=E#I$Gs(U|Cj8(t zZ7q-w04W{o2F}<15lvz+u-M(&s{O9^C^HL4j8;P(!DEc5D}XYmAZ{Gy9V=10v|AXO zTb7qckU0OtJWYw-MS)-DDLKs~)SsQoF ztWCI$#g}H*Rp*?7Yn;}!nKapzW|mgBS!Rs~%0n`^4V47#81+3W;=)To{vOjbyDc4M zxRdP{!sb?V-U2K?D#q*wEzWbv;PlORT0e+1-6KV@yN2o+rc^|ZCyXJ!=nucBrz8X zcCg<|s#|#m6r33@8Y8`r42LDuft)_v@^jB0b$xMhe zt*UAB$!8IJfJ{@M2)i{rM#7rMh}Ez^C-wXgS2~|IorFS$|jL_NhPuJT5cH# zkdOceAP}rMJQJEk$*qxc_R7llKsO3j-C<(W2@!CqAi{%{CQdhWXB`0mVzXqLNRmkuTz!^6>lpH|1C6Awax!vz5uEeVs@fMDA4dE%OIt67 z-wx!|BxqjF*6t#9dH#K~%P?0FpSlkAJCAf2%h)PuO5PbSo_VT@Yx*hm15Qw(B33! zsT8gwX`~U#!Ei*36m1^($2qNJhVJ|9vRm9t@%hoTgq22;TywM@HiqOD$?IAEAMq8` z?P(3vmhs!E^5AwwZREajo-^|{Fi7i+*G*+Rs>vUdaU`0IvD?B4AuQ%eKY56;^EObY z-s6tESF+B18Ij@}+sn;HX)h#?RglLMZrB0Bje&BY1M;ZPat?Exn$FZUKR!|BTE_*% zjpsH~Y+x{Bx0A-wanGsrt&b5!EED9r@@}^cAcf`mB?JI+6leRq=L0p$g50)mbE2W4E=K zx7ow6jv~h=88{64vy;#qA4-wU&W&PafmX+KOZ&ttz9I7GYLm*GsUrsjkHY4z6U5rK zsWf_pyfFDMb$2zyK3unMb{r^Qmv&nm;1WpBN@zDVG>dyFZSJOm+)b)my2~8#u}JL- zZr;ziPURqw05~U+OW?l`!+op^dwXBBG%k;9rBif#7GOakbG3LG2b>PP;!S$GW~R3c z?D~AgBwQfgP^t$Ymd@@OKqIe8ZT+Ry_SxU&M5>2Mfp>9S8BIHLa{k)j=t3QA!m znoF5w`#iGkD;V4`#lL`LZ6_zF>rU|gt9d=Ot+lPp*N`Mn#-Suj5LIU;G51xlfE?~8 z7z5I%-CE0id~RRu7Vys)m`Y+J&4{xv%-|Blo*RMN>rz=q4V=SHOGj2&*(I4J%36j$ zDwFp~J31U^80%AQ3QgRZyjeBv+&Apd-b`dzVw>#PC;%2gw@EQs8L|k@-V2frNx|oej_%f7Yi-t>HLb!;wplF%;ZMkf5xKUOWE+`) z&N`lI?yaS@{q5}0@p{+J=gpsK+Elxc5mg4vm&hX-z|LtjsU(x^@idG`YM% z44Qi^FCWcjjBPZ4E<}fsdFfpbV-(9M ze<-t!sDO>i4%cn~=N)lXEv(seq9<=IDW)=rpgZG^On@YlKRTX401!yv@r-O8L|k}s z>CCa}YO^$=8AD4nWw->lRlsIZw0q-`RAAF>lTcZ#=5a{Uzj$+TBXvbR>Mlu`QhAKGlh?SX`O<|~Mazfgl*`gAG3xMJwBN9?HcI8Sa;r8Pdr{EtKUU($SV+uj2 z-Cs$Fx5(-Cc3>k6ss8{ioGDY0gO zk~#thdZoRXMkGEIu(-L^Z8b=tTeBSUK@_d`rIJ0nmB>7!mFC_M@hy*n?lE!p#g1m#C|NOL0tA>(>SVe9BhZps5XIXr?gj^m)kB3>i$SF#?r@w zyo|2ZV8DP!-co*v;%^-4TGxkc>~1Epai+W$Ol6Z3+$Pdf{r!!fG0#J_dI3@Rg6=Dr zbeTTZ%x@UnUAdHrB;0nh9PyH%a5J^*jPeyr43Y@JIp{}TYL>!hVFl&6p5jYCvgzXH80HbY z0o7M%L4w5Y!Nw14^c+?l-K*Z}Q2n0PPqNsUqaw~kS#H>O4EO`@oD-fss!bq8s?Bu- z_Yy<qX zNE((t4_^~$f$k@^6Ka>~rpUS38aS0@Xj!^#F_Jpul1_1)eTDGfL5%8mx?GdrTuX6y zZ0(&N?t+FuBoTlFX&N7y&Q39sa4X}R{buT0q|@)T`0eg2E+G=w%?rl1ae{%Jhf}&S zw+w!4=f6KzY5py54oRpi8g0yx>QYN3)REwMBwHxu6z$GkdB7jLibze`+0Azl=4OGfy^}*U?QJ@OhD~&zOv_I`0Q)1gZJB=Z)QKjvgP6Qna>_Z>*N$ z;bPPvc8o~7n;~Om0D=ZjCmi+}`MUBefV$LXH_~~^zuHSY(nQ;gODEpI!gS*V5;41gd9K_Jw39?)elyW@T{hdp z8h)X6m&l52A;FvYT1-CO`bAQd2I($Bo^`B>JnYeEHQ}*kV4bP zDr{4V)GS=eO_g{|gJEqgxW)r(SUU%9gEsd&+ zkgTc!1Y`m;=qtL5!!|A9y9>#*sc$YW>^|KUcKW@|Gc_i}VK@&&`Bqm7V z$tj$0Kp6z{PF_JB>}z|xd?XzymZYgrj2 zD6)nKsvC?cG7KKOdZ{?BZdq?MPZercmyt=SPjzB$A~wq#`7Fu-S&$4NRU7gN{vLU# z)V^NhB5Qjc0hT*!V;pc5w^=TPtY2wnWjt?oRZ-3`Nb6k0J}A|-3)|~6Yjt58Mdl*i zL$wU2YH*|Ph1ysVoM5*-4a;jd-XRjqi)m^^(%a0kMJ2e96*yA80U+e=+mX~}u6XOg z(dy48%|dA5Xxt+Mow7IpGjLmClYmA6T<|kZX`usVy}#46tJ|xHU6s7QAui$B_K1{? z(jx)R84o>IAbRFaUQ0Wep}Mn;@0J^yf7;oupmpBS(U3 z?L$$Stv*;%Z{15U3V{5}^5C2|I5-6IYUTE$5xTXwx`u0@Hml1V0U}t_KQo`Zh3eQD z$s?Q!YzQuc>XAoxBpQ;%eX9MXjhrlz+N-O1$j`LlLFGn%Y^ldVQFyPzcQ$ZB(amhI z%<-FPB|8=2iZUAkhQ=tk%L9y6JVv=1ojv<-{G{mrTOMmF^5 zOX%iG0!c_)_IR-T~9uv`y0T`DhJJw z6#f~~ItKfYYSz~G7uQRt%N)h7rhUfYqR!SM93EN03<|b5>Bl-+HkO~;Fg(!SO>u4! z({nRP8id=)$7weZ8$2IcO>X|zPSO$^nJy%_)q!Xw`x#i^K*l}MXYYfwFHEi*zAHmV zo2oGrn?`yYfWx!?O6o5!jgI@-HZ%^xadY|lIwEWU0TNt z<;-$Irs3~x-)zUe0dKg+A9)9U)r+fL$*W#zQQE^}acc8RJ;TNhaz^Apry0fql6qvG zY55gvm%JfqV`VL}Y`AGHM7~}}Tq$N?rzQFxIvk#9#(Oo??e8J`MZA;9u#`B8Rc0V> zByLj~z#B&c2RW{r!`fBGlWR1VZFPMk+ANVq?4;SLappRQU7@%mf&mYl9OAhRYSU1b z%FR|A2_k{o=()+7V6C(+N8Q`Bx!{4%Q^f??of|HlWvtx6G;zTVi^(Oyp5fYS=8W+O zF`+6B8N9#>sBAYuS^8Istt_q0tahsQYSB+S%DYI;Mr7JDd1eKH>9Zj8sXSBStv+b2 zWwU#m>$HuobqSa*=XPzA3n1R}0D?T-!#%CF<+aVyOsN!s zONleNOEBz11v__i=M}~3n%DN1ilj%noBbY19w{PkFLShvLuHt4BXW)p01S$_lP>0m zf;CJukliGc{{Uz%$nhB-V~xrcGyG)Zk<%xs9BN+Q3tNkr;g8Il8)Ss33ll3~wtIum zUW8_{^j!lJMc^u-kH9b0M^=X}2=6yqKMkgV+2^r2Z zq-ECtuG52@XQwV(iaHt^9<8Ws)or4?7nTzU=XDm5uHhNsVrCoTAmcpqlbXr5*FU#) z8I}lE>hsEZ7ARodzwYi6@dAiIAgBVckf&i2405OM|u zMSGxMS@=^<)ihl?^5NmQHnQA6pYib=sug663@}uXv}E)p*El_9A*(3I|FBm{sRv(RU)be=2lww49M+v$^Ob3-M)u!GJrxHw}ovws#y zAY*{IBc*xmuY|Rm%b4WzCbx~HaU`?C=wL0;nSdl@uP1NtkUCZ9yg7ZNO)xr@s>9~G z{j9rkHsto+KZF5-22OhMR@XqgI?oQ>H;64h%eotR4Z;PQ;$PiEoa}W>^c@NBpGtj& zt)8uPHA@?aX1vg@Bo}Rrs=>HN8x|z10?bB70JaW6u2Wj@z1E=9UB{?LZDX@*O>lOr zINCg<*f$;Fh~ROaYqy{K9xVzjCPuhh7~oe+Xzz;ihQS1aSO(dZBr9N%%@^z)H7odf zI9mRD=F!=tni&QR&YMA#J6nT{a5r!Yt}sEa-^98sZ=&e>jg8j74a}F$v)Vn`m*kNn z@|}d*A{U90Hk@Pr)fpI#ryD>R1v8l;|fkx?*Mh$;&ljO|hv1C0Au9i?h^vT7!1?DX4scI-(7zYmuPW_N7oDtRg}pmGIVS5`nR zw0cd}n>L#54D2>WUR{c$9t3BT<+kDgJ9s9$pV_zK3iuPjn)URM+Fk1xvWV@o78>R+ z^=!M3PF08_Bq=@4E0pmjwHCJbi!?JqG!8z0Jj^8P)~x>4 z)*7wvg7lc?j$3&x?h;7uJiNs5yCFtAs-lp(6mdbA|2sR z1gQJ#&}6pmc&@(VNVD;;!&{l8n@sT9>2jpP?XI`MaPPm&Rb^5XD3Ac4e5yuC9XL+~ zO>t#?XppKOG7tna%dt{3wYR?P?^Cx0I<7e!;-=Ajd8zni*2dP>;cRZ!Ss5j?L1%Hp zoxwo`gD=W5dl6oYqRw7~X38%S+%(N`CDb=UOOZ4)jj@j`s3A!NxW)+U;ALm}XtJ<7hr^7nK+|X6{Zg!8L00!fkVCwzt!Lni(N=j@^LCj|$^4 zcZW2`K`Gzx<9;kFbugTk&ZwDxa~44F|12teWyLWtay$|qGCM7 zByCcSm0}4jNarA)IIg<)LbOY@zcFrW`-X^JxxruE|7$I)X%6?W}FugIFeFK-N29>2=_{&{*n&QT3p)*^PbGai($ilM_ zHnT5P8QsrA(xmYAnRRBC5=_?;SYB>|-JUmC7gB&Zb3^+ePdClo$gvi!+)-ywO zZ*Wimz1=Zwsl1Fh0G=TZr%BH}qc9hx_vtxiT2=M0n(1wH+2om9Qnrs!kxumTm+Y-14e~~CKh^@|;{cJfCp|0A z{CjQvm3a&|H$UkXkr<+aXi>0>^2P(EIl(#Hpy!@*L{_6C{{Vz)OTAC*kgO$G#_%j> z=5^XbGDpG22PEh28AE7_QPy2ihE1K}exv5&} zZ8o2AErs(g!E(%!Dkc|qm(i4wo=70{Bdu!>i5J$EQ9_30;qu-C6Zvc*6LE+U#6OC8&VvwY9x#z_hsl{sUQa@hcJ^fKGW_A7{QmTBgM#AA|Q zC?><^5HXGy7z7eXBz5N$&kx)PFJX{JJ1xXX6U`mLQ65=|!ea#rl^8tk?lLPk#W&My zws70R*HT?~g$JWya7P2F9G+@qjU(i2X?nHRoppIOlk-O*{{UHV-@6+C zc2)zNvhWE0AbQpPa`XNYnIpBD8++w=l**Qo2&3Ku?G9w&hC*NvatB^Ta-J#Iqwv>- z;D*#{aV*HIe`|6)r^>OzCsNb+Ses~2*^GH?7caLc z*&Pn=txKZmQfe|s8s6Q*Z*x0E=15V*axyl;R1x=%6LvQ!3)eL6>{L-=-%ndzHhnVb z8aSZ0bUVutD-uV_xcTD*CP~4@NEM6X6uPzW^wH`T5Us)zmQr3c(U}?JB+AGBT16VE zZo_d=&2Pw>exp5(pF9>fmoTHn9i`*SvNOoZ61=WBP#6Xz@J8YF=C!RBOMOdCmg7)u zV)E%>h{pbBoWXZuD3P}UyBVK`3BPuF;;u68Orpy=r;V`M5D8Jgcnci$+@$Q?^DqO}qSNkfF05`LvxSt}$0f>q<`-z;LgE*0 zitd>?HtzDnPx=(}k zt6R+u=KAtE?2w5smE+rSCBN?wj-$-mv=VdGh5_d)UlG{rklF5!QodW+g~LlCn2b}H zl!#G_Y<2IG)b1b*Ngj+ zH_*dt1)N#)p+RUPAf{0FASo*35=KIjIT)sR%fzwh8YC;a-r5FslHTHLMVn|K$19VP zB+gic+CV&Y8LJl|bauCyffHNV!z)`PilX6VEwzUvF5SVrvywn388uf}xVT$L*7iHw z7r2d{6q9DxQvO@=dS%Gt9Fo*Wxa7MS8gw|mYiaDxoVt8oX89vA3(d;z6p@?;0fOKX zco`g3OZ$bpPt|=1SJCiTWNBjbz2@^M$Y3ZPL|c5-LWix%R0W+1-d) z6cF1-BnHMw0M$##Zra}ZOUo4g*mV~c;wKEZss5@*P@{I}`1uJ6p`RTp&5pDu)8?8s zX{~IOK`fGmo9wROe)VJAM&Y#byd9k2oYRkTNHxt>H58BR(ll4m#AHb0C1riALXTfF z87H6s_2gD&nW!wg&Et7KO1zfK3W+y4Bjs{W3!bMZA6o9Tt7zd%w}J(`RT0_TZgV>- zVBye$35D3a$2?Ih9y6SXJA#qru##J&s2QoEo<@Hri#(A%rvCO=i*& z9l!4JfSXk0D2a(Dfu3*Az~Uy|;v7S*=R87-Mnc8GYLbBzj;GOd2KN)O85tkNp

K-Govy4Q{&fhJ{mm#oFGP4jE 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

lb)PpV!1oLF<`ik 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

~> zx2WLaq?R|-=Wj7BU(Hp`#8DJkM<8KXjxt71d=ffU3v`ao8+(%159dbF`EibU-~td^L`0t^L(M_z;-CDvwdvEg*AKjeW>b@h z^PJ>o>CIo!?qjmN5!VsW)1Cx_g550EpC#{(4mhK|$iS99G*Jka78ZM>qv z@}z(Qa-?LO@-vK{)g{KKXQS9^7V_Czyqdzqt0d6|Yf>3xQv?0wJQQ#51|aq|uQkJ$ zsdB;Q@jjglFsmQz=V^;N?YDz_Dyi%XGXg*z$FZ)O-$9u)=_a(eSnnidY%pcryP;Fa z%I6$`!9PmnG?=b5-5S?dTYDLyx}Ap2ftEK4HoS}cAacV$-D6&h;roxa>Q?ra=GRc4 zOP)rWWSEFFKE{>EGaTwlf9dtnN~z~1YoHqj`fV)P0D<8yfCbek@WQKUp`Z|4}rs4NgI~E@)!i*kp2Nc7pr=?oh zwe8i$ov6(+%^8_(UM#$lq=0PBdJqZ7=nn?2-(Dn|rPOm-{g%#1Q_GJ(BDT^&J$EYt zGBQcVdYZ}8p-6PEv_)?k!wgBjVC(YsD}XbCcVPPD)z7k<`ztnz2<+i(MTcV2mJV6m zFvdX+23w!H2NfkT)_0dpq)WQtqmtfI`HfZN&i&ifv&J@$yf6cCS$c+{cRsgptg|$h zrz;)9voxEJ4UV~BM~ zjz5viw1DeWz=)TE}^B_9mGmM4X8coJK*&Vbp<+c+PX`E<1z2 zLH2jednV?OYV2E5=0YJ-3l?PH1yaqE@1B*v;om0G=1Z4bmXh5S<9Jk-h^|a~{%%3R z;PeN*WWCznNe1YZUg=!J8hz9AlEo2t+FNi0j&W8N^3pqpxQT8gwNgxLA>HOkypr9K zdf*@cqT!t*TnB#njP#vLkHGa=^nHg*{mEBieyL9E^ZCu7ZCIwEiBx)D|&+ z1%oV?Hxlhdjfo-_+mhK}0^$Zr*=ouz;e~HM(AbxDM9ff=(1qt59+*7`t$IeA z%c80N6)Bcs#sI*{BBobFtxjiI@ZX&xNoN_3;cgY2 zhfo2=0Kq(rcg1s>?uY%4<-=;ot;;hO#Ctwplw*>>lb+ZDw5+^P+J*hZwyhL$T7$L7 z+r2k+`Gz?s!#Z~bJqWaC-G(tHpZkeT&24+)|H}>jC$0wm4ltXy1 z!oFJ+^IZ>^z+j>IiO2VI*Bt>rN}~;})}Y=OB~7#&Sn)N2O^I zG|7eJ`fMU!CS_zLL}~LZ$(0}yIO+%FI@RqvRGL=%3}(U$%*!>!%&+^W$jJ32&H?~1 z32sg@X___s(!Ip@HtTKnsEkoUxl*8Da;K+E1JvUtvn{Nomh`M_xS7jKhvm5hf_fD_ z&j5XBWppoG>T$m56-wF1A&pmOC<1~P2cYAq>x$LzuBoQ~0BpDRgwsP~bkWH(+D0Ui z7jm%yScS=4;GO{ju>?xmY|T2|M;w7;1i~{JEOz|czF>2~?mn2Q>|=$MtlBxQbq&$4 zpXZRFHlLGd>(pU^9P!U&9z~5)P_vE+K3OC;gL6EHo0U<@;2pymQ_B&Oc%=PFZe?ubCW{>P5oK7-)VG|mzbpfh zk_S!4&~etE;x7_?k55-yTUlY%i$PT&T{Ljv{H4oA;dsjqIm6`jJo8eDu)6*7-N$Ed zVG9v)6HSaqju`DNx9)?3#&gAY-UO3IxSAX5R+~?R3u&N+HD4(%OnzLBaB@|d7zNHo zTRnwwH`Xx4;rX>kytMxSN8h&HKxer?#bnB3r_7)dzzm+X)_eic?L13ljUB9wac6UF zu?u5tMoC*^t};Tt03i1O)Yi8loV04k(q1jsG`&0aanddIO;X;@-s1IUmn1^6gDa1^ z*jF5nl%C!C*T#Pl{5*U&d2y&*!*OsgwTru9EJPxPP_BS6+&_;WFaRhxC!Bqetaxir z@xScf18R}3p>b`g2#6cwjwwXU-d;)DBNRNVXDZEs+^f`@DODxZfdD&`iq>e5oUEiHpcpOCldD0Y?PxJC9TH@t$gX zolosQVzIHiX>6J>Cy3j$LPjSgfM6Q{sL!`21B#<#0np{TwDJYJTKuvZl)Q~7Diq-0 z@sL3sa%-l&&|`zgR}flBHO-^O)2thUd@cp8y&?N zj>Xu6t7icF4AeSY5%`w-%eUUrHo^q1BZnJ)cPBXAkWK;VoYri)ZDO6arw+HG3%R3v ztLu5;7WU0^x?>}uo6m9Fs7CbX+HG~%s*y<458|VVLg5iJ>?#WhDfZSy5 z0Frj+oYn0h#h`0;Hy_CG*Vq85?#;a8-$If6C>;r zc^Sw@T#d|l`LUg}`@JnD&@}%5Bg?f`Ssp_Jw8S03UC3ecHXH?2Kf})2-`4cCmVGi4 zbN0z3gsa^}7>?J?|k+(axk3uqY%|jegLpwtxHw!$to-^kKU8kJ4KX)NXZulAK zDcq~r#nx^=vLJ+k8H?eo9cNu@hK*smnIZdAu*vh3bMpo{%7)L)l16)C zwT+``{vVIejz5+&HtcgIz=z}~fb7SHAJU<*&{hj3hi%N-k`Rx$`Es}$cSgK)0~pBz z9V+s8lHSh3%w4M8M6fly)6N3yJ3=a`=(|Go_c*55M780CkNZy2er^OV5u@C8C^6)2 z>{*vQg1N^SH5Z8PW0qSvua{)fj9y$5=eL@tapat+3RHV=a(Tt^B+YpDR}&DilvyTp z*s&{}s@!~`S3G9|o8z4%!>(-7=2fz33^3eWrd1Y9o=)H1AXCeXf)_oiI+S5Ghn^$1 zhT7pSmT}~7Ts%crdoq%Gu-%TJbKe+7wOjuH3c+n|Z~n;*!^d|BA>KA5+A_;L+$>q~6~bD~{IG#7$NqHBwG>g>c5l`1kD3%e`;$Reof zIx<_|E}mnzj^@ZUw0AyHky$eZ>L;~fEloh<|!Z& z?5qaX9f1U#VzVstxjav;*;`wQZm#ugu!eOE+Ys{1(ToBIJn}Y=TGGAKW3sr4*u!Uk zBrqf~OJgEQ_MObzOB5s*Iq&me4k(iqknI-y>DqwxgnV|>O%}H)8~r`O7`5 z>L1CH+FXn|=WfOU2SQ2j#Yy3~v^ac6X1bNWqhoay>`~s?NZajF+4JTyFa`IP1MX*n zta3LBu=aI($$VLS%LyUE+uM+2w^E`~RZ8Rm zf-{qzl}}i`y1lw>7T-;^n%-!wB(%4*9(!C5pUWWfMoS&a2*LKNo-NdNX;$)FLmPdH z(L!9>$K=AHWgoP~Pt#b-zpOxFjU1=KA8hFLthQHV|3-4KrW$y^Umag0`p zEyZLdogE`Y;7)HIVUp@-fbT^$5XYF8%XRAJ!<98ize5!5#-tFw$W*;63puv zfX^q)WHP91vM?wB$qI9fW~*w~W^F~TBX*7Ey!%zrC<3>dyIh4FC?x&U*p6zY_+2vA zJIOB$(CbdkB#MAG;k!R5APsavx+`m1xYO( z#82if#zDIhDItI$9r@(0J*ut#nZ6r4h~bPwAy|xU7Q#ZPQ?w2S;8*K_a%%0NDVtw! z`)-;ex@jY~3p9*ga?b99)X zY01w+kuTr+8j%LLn{0 zzh_%$!HIwcN!^Su1Z0p#265Ah?KLZib=!E?>~|KoF}aXR&$=lgVe+z!XCc&#la2w! zb2c|CHl1-b%$GM8(-+#d%2sh9agv*k(#!$N5&Si^$wblVc5&!-_X}pQ!wiNGv>!3! znqCi=xShG$*&q_YbK0cV^w{r(ywRjKw@}6QX`nCWCRdXvd<6gl!1=jfPPe1+{r;Wd z2z)z}W7LrAt%$bpa{{U8* zCoPhB+;PS;gHo^5Qt~~!{t543B>24gN1U^W?B%sZ8FMeM3%SO(5mV6I$u|bSn;_B$6}{Nb`kw`CD5KE)MY*4pG;3uL!DXSgwx z1iu^DU~+T70Cb_d3P{fJzOSa~Fh>3v(r&Ebp4eMi+%)QBo=xo>vdQSqgs#QL-+IEg z@jE7=9p;|t9n?Wdc|lcx0gRFl%eUrigU}vx#cKG9$Ucv1l6fs8j7mmi-@bM@!6baW zy}8J$$3mXk2q*IAk5Wk_ig?wQU*1I+Dmm|h!x$=e3}-n6b|-VC(b^qfP_whVj7JTt zm;{izVox!T&$MNE>JD-2-vjp7ZF8W_ncyN*sq z4>`jUdeP`DnZoNDMc$L)hTjyIcXLlH*Hhi)mPN{u$saRq91e0vUe$8$${lB4)NNt6 zx6|$Z!b}sE5ilQmG?il^L!HWuK^Y-V0o_}EBTuy1NpX2K=b3n=cCHL+RwK7)z{@iz z1aJliUQKb)EP92kae0uk%CEV+p^%A?q-|`o6#%wCAdWNEv?bZZRYZ3h$=7cgl0be484WgN{r{`kmz;Q>xiWZ;3<9OUEI6;|TT-aRTd zibR@dBQe6z$MY)f0CjG7>JEDjwXfm@vwQaYFWB}+C|F>(w+rN*p^o+=<{OD!!>C-I zO<*4pN2FihZT|p65w`Ik*@Ge(fh(}KakQVMMa$(z*0*%2rNwa+l78Yh^Jj`BiKD<$ zPz5I&!6StyipHK9BwJRFX)ONE%`q&2Mt1?UGjol-PeGCOtvR*JEmGZO)1hf5g$~q# znnjJ!W>7{5V~yt_xE--s`qq~wo8j2ZF|FpGZzR!}7Ev5wn`>`Uak!qJdy({_Bk1x2t^x++;f6XMRNByvwgE{(=5##Y|aduSm1oc z3H~e&gVPo07M>_%cBRG_BcsCWY66rTx60#0P~E~i_=nki`uWlmAde@k*e9)!>8W(wmIc{ zHkF~ZwMgfQGZK(YaH{<5S&0R(1~4g?S{9)uxSD%^Yt3TQ67Yi7_H871-Vm!SdslOi z0R$;SjJ7MP__^Z^I{yH`J`K`V-s1jEEm{j}^-~NQnn(MVFt-@r<&Tu-_)c;KVcY7h ztoSokvHLNSGpIp%9fWr>#|50mCWz%qZf5(Bg>AS1o&`)K`iP~xyJ4P z0CZ=ZR`#3W8>`(mHNJ~f{{V?hGhEupK#VlzL=L5oSkD}A0a7{ZQ)@Z}=Zc;f{>v$~ zk%hIqz%0?cthkONz*EYc9)mvhPDp(&VA<#w8fB0CB$};^+gXj2P?(k&=SbCC2*hoX zRP}FBl6b{hi^P^!ck#m3FvBFwvqb*@X)PC*jFBfKlDWc_VZR&<)KGd;^re8Zu{?3h}jx|LP z`E%{^oU#@T`?YU;^HaFirR^(F`!2P0E#;n@b#T!6v)xE0NXCrLSsG$sMY!Hjs!9mjP(^ z5EwHR9EV_WyPPgLuJ8U5+dm80*v%)B)|!0KTumCj;dny^C{&!HoZw(%EOX6qwwnBs zeY5Rx$>rQg*3dIaCzTf_MRmh+!{#Iq2T(fGjl|h<%G%>!@bg(sZ+SI~BHZ6Hz^%E7 zX3Hkwj4{Y!M;$uRVv)gbHM|OD7M3j^ml(vWzE#T-&AVybImSmqFf&@0*7JCB>KmJP zjtx?5O7q}5$Jg$H4p$`Owg|@+ptmy*3`TA4E$-&Ck|Q){9!~wnIEwNZGxEfA9A~8* z#F;l<7n??Fm1#8nLLFklOBp=qS~&D_V;Nj@^VB0@mmrgzoYr4~^b37ANRm4n#J71K zPcD1lZOm}8Z3AqK0b)x5o^j6^HP+i-TI<)aX?7_LcMEc20Z*3F%hh*rwNOasJb{c1 z;;L%*B+k&oG&e%wJhk&CH;~E|*<>oCC6UVg{+Lf%u5ARbu}@ODlT5#Y;9WJw%Q&CR zyV$Z^M!wW#~O~Gsp+uEdZ$yjNbT<>F$m<5Oo|Gymm^_}f*FSZ z64<~MTxvF+E!8d-YjbgLYiL^7z@A;akftLIf!P<|100T~uw;_YLY1y>E~c@NNCcAH zp)lJiJ4(4%B*;Jm0Cefrr*l>2biO6JvDM#D)NI}D&7AVb0a<+MH!G}$P2>afl2~@e z02LOO<2&6W!Wx#JYi`y$ZN=jp{fcVL2QIUIsIohUU`GN71b8;l7GbF7JHsUB*?D1sKR!akm{0T<1M` zOR+B9OkEDzOWB$^WRe)JBUTbzTQjmc$V__|a0Gy)IU_vuCbz9LTN~{b^HP(^Xl4?L zCy76IHrc3n8&40%m5jq2tg^It7~BXh@4*@D-LPu8wFsB>i~C!R6}&`N z!p{3lm+Y4|@XoE~OjXbB(*XH<5OdkiE0?#>;lI6;P%<+agpLp*w#?;%^PDqeX9EK` zu8YUM3%bxW<+OWgt?#a}G^yu8zay^5f^B9j7BC&LjzRV0w~Eef6Hl8*KqOcVtB0CN z66M*j%v%E)3iuQnl1EuiKUtp4K>7yt!qCO8^MYPDXj)FSU4i zoRV;V*F&!f{8W#O{{Y~pIy(4c;$D-d!oo;qwKG9He=LUzLq_3<+7LS6k;oiZf!WOs zv@yvHjkeWRIRl-dWzKgh@>{6L&N%!l)<16#7|-KRjZn1Hc~=&es}ym#9$aOWM$i;s z9vAf|it=v^=`s@;^5Kxr5tzp_DgsnwkX}31=S^(KV zCci^-eKScc&$D&H{{X50o`7<4N%z3^sWhj1c~UL0Zdlq@P0AuFpkhG8WU=eC=QY=J zneSt@@Rx(F?tCw%-YJ^-p|-d;3T;SuiX4HvI4XHxp%u~G+v#m}=UVC)8dasx4|e82 zMY|SM-n&CGoDxVJ?O$rj@CKhJhwo)crZUTSyg627R*jBVaa?4MM+1(W;-yVtbp1*e zn$|gEj^$;0cv$}Q1IP`Lm0(J+JncRCu4zfOQ;ReFRj5yW;F%j^Lvv>$!1lK&Uu0-D zMdb$hij^#U#oSJFz|C+s;z;cxj^0I$Q5j^LA2f}|Q*Ht0us-;$kBgVL_nsrQ^O|`s zELKUSiYb}xVKNQztV+i*fULWear0z!#boO*acs8`$uzSF(HncG7a3i_iyZC+xESZB zO41u#H4?*7{=~Vu)Hcrz(l7cnw$n1p3jziKAAE6=de)AQsCa)$zFRF`C%A`FibB^= z$V))uBw-m?jpt@bR>*I|HAhpilEYS2W%H+n zUMxc=nT?+*0N`>62aY)-oEoJaMA_1KdsV(|M*B;RZYH(WArU-&QvCk_FUahG?OmjG z1o4n^4NkB&nSLaKby)2f#N~24)dOzi9Wm7Z0Q#zzg6uBZ%Ii|FwYh>hHd-?Rp<^Zd z(S`&NM&G;0``j9l{7RqN&at#?q=hRVKg3S$xaT?J>q=YbB#xuPz9MZ)Ky5cqj%jYJ z;FaaVsA;p^KfIwx^T+6=+-NJ zuf-zj3m9ogSxb>51m|mKfK+3g9x++=8k$>ciqK6UXs0pCWle?OlhY?W=Yi|mvr#~L z4ysqgH_|n~{C!NubLFp<97@bi06Y!3BLjj+JxLW5M`XWed81Oy?252%*c;^uv~kV` zbJyxByLgLFZw>sPXp1-^M{%}NcVz7y6;3~+4bmo5 zI!M@Yv56%}8KnHeEF@OY@or>Gc@{;vxo10>5Ft>6XXaD5eGMj!X4;A~F6UD_BJDfc zRX|%L@zjCI^c97yvs+u6bz?i6d5zH~Z*n?}e8Zs5Ypw8=qkm-F-d;rw#Bo97qT9ME z+wD0LK1kX&ouH}thZ#L8UWlhAXT~GdqLG?;BmV$LVA(cwpIU8|g!0RA z215Obwn;3G7Bm5Kf^o^g&m59!C)Q@t@1a#yowtcy_jxfeBjqYN^!_3ILlttzTa#6| z^QN`7jjhp>3Jh$p#-3qplk+wJ?URrPr56imWwLpejcXm#tTvJ~@;qj%|u&A?;{u|4~!F&$s;2f#Z9bzpIEnP%Qagzw1t2Ql zFv#x2ar%yHFHxPE_RZlxXnLY;1I&wL@nz>Q`3cONS_MlOgj1j(%2TE4z|0o;j!dH-b%H z#PeJ=j-MuCc#Jb#9l@J(24^_^+PPA4!2Gz*Dt{Gtes2+5-op*W)Q@WGGOW_9Ohk)< z@#8qa1o7F2UbR=$XCmGqlf>GbcNbDeJdB24Jr`_nqJkJka5Af$g*<{jl_k~7wY}xQ zw{?OS1}BTlQ6zZS4$;+#E0#FMNi~}+(CGK~Mmw3l&d{`0(5@N7k%e|%jh0Zv^~v_C zvv`J38s6IW;Zh_DvCN)akugP&=Ku`-+yFQ@9nTsdI*lgsDeWX?gu^A!P$P{_WE*gH zocHIRgs;9TzNxR?US6uL#nU~siEdN?#N*`jz~KEV9X{L5(rsjpX_@SU#7GLCCj5e- zj(HB;A5Jq}cYu5eXC0Ni_c4pd4JVfJ=gW|!ZrfyDG6*5D>^T{!a<-)GVBdY3&RA|f z)oX}QAc&H?K0f=&3!ehwTnuzLa)9|us?PzpW!?l;0@X4x<~Nb z(OSz4ZkJNwLy5|Kq%l&VPIypw$3T9S&)(Q-T2yxy^4W`styrHe@U3VWhUFWFCoE0@ z&U)je5oKv&o~f=4vNUn|YYLWhC(Hw(Y9DwhQ{VO2H?={UoFUO z%KQVlP66AI&tA1zY$MaH-DAXUZgw~l5?CDNijGEj0tn!?-PE!C8=+uyKB)?!kV>V;$i+{}&Di_k6Tltobv5f- z1h}?qTc)>?>L4X$4EFg?m@xzH@>>LCfChWlGpUxcR`MQVbQ)KN^$TkYrt>37FC_`( zM!1o%+$xjC21(~R7(C*S7WjVN_ePHSt>L(MQbwLa6g;DG0oViEX$ui4j?6gygo|W2Vs9IO|QNiP!z`?Wd0R3z6OQWA5QpgD=!v)%U7^``jlVVPVy|0ynbxL=OZnTz2%Y5v0Ueh z_)FpweW&8qy#|*Ycbhd?q#^B97)SE3Vlj^FImR)bwfAP7s6*k8+4oJi((SJ%MZJ7G zAQ8$Vl1U5_0(e#l{vu}`V7~fmapDR z`s#I7*<9Sw%rC4*aVchyJTEN931n!Y83$l|keMi;u^Gr53fS<@n{ln{(^y)KKHFH8 zyu$NtNdt_qj4^B|AH*0E2Tqlr;j6FsO!TIp{18vm&DraFE!`dt?eO@LnH5K z)k(`J7(Be6HzNaZ?^5o`Ne$HWw$$E9<7F~zLd;)uiy>XXKqoEJa~^S=@kt(qCZnqx z7*^gJS4H#XkmflFKPo>=C^-Y)x!_i=r!<1%Lv1vlE3!t!BC|&-;E~2x1wbe0ew63A zwbT|RxoEz}_JYpxmUaXMB0c>`T#h;R=A=a{=&tQ9Rc%hr+ewDZM(uF1Zj{2mETA8gIl#zlDQ`>;-0Aq5>-$!Fduuz1j8}H)@~my< zf+Q#uAO(W*P6k-#q3AAnS6r7))fY+7ii>@D7Q*&T$rA)JDPg^b$f1!*#yJEUE`g&q z+flLc1UDCU_fg(zld4-m6I#4-?mRmHq^4Ab$T{7(oM)sW(oJt&gf*;wbizh~J$Wl%D6gWsVUIjo&h z{%;sxO?|04-K(m}b1KYbl37Sn4{Wd-jt5M0MZz(;m8y7?{t+8(AX@#QZWtt~H_T*S zeptvV4pSLpo^m==Hu}tVu}N_X$R>qaHVYV&cI<0i$EdH_yvv!82a@A(D(whAc>^fVelRdWu0@*LQ@^^m^5IxzjBa*)u}We>!=AY< zf&kCITGY~GhTl_$8+&_sqlqSkXNPj#M<5}VM0Pt=D+9>qf;rA>7E4)$ubF<{RC0uk zb~aAt1)5T%Z%{xCM*#D;Ak@dO*K+=ccJNwmxfdI6Y-51jspJndur8P*_%?*&AQSCR z*EOH*JtoyY)p2(n#J)=th~te@Xidw&1P%`apyYxDScWTIIy<{-meoGb43RS(hC6$m zu@V%aJCrM9pg7J?B8j}4iwC%p7V_jW1t{Ze(#eHj$B&o*Nc97O$f;v1*jqK0pQ*!R zcjj8#T(okKOp527;kq4xmw>r!9uIo6tO#!WTjp83n#Pkfl5VyNvCD{)0X(zHvVpjb z-2LuOYf{$UO+&&zX|}PB<4=xtMpl%>yRgL=xxrQ7hGIe}A2u>7hl#ZaKeVmxEMv7~ zm^I{9Z1O39Z7Tl&I)4zu4ae^ccH*Wwi)M5B_P1{{TpLJHFC@8-%XpM+gdLIyoG>8Z zhr{*A!5HSF@d35df3l;0-Fdv(NNT3(2C{TtQ=~UB{{26?oy=V`*)ZdoxH_1_yvhUYF? zBzl#sFxg#5=p!+JTINMyLFWLk00D;F2^j}9W5b$!y56gNm)2=@ajQthzReGnBw-0Y zTxtPPlfwlW!#7cpRc=1Qx3(%8>rBWqEW$#_@&?};1!1$8^U!3RbjdYO%zNm{y6m?X zaYrLueX?8Vu^f0}JhDm<8a_tfnH2)Otq%2()=BqD)*A1#`5c$)~CDTG7nq2*x$+~1-3jkHXJBwi8Z9&&LZlQY}#+j-~8NRsHwJDbE zuI8V}l4)`nZvGZx+gt8}4>`y*a+HdCZSS2omcL`Ox3YFwX1JY;;z?Cw`95u<3;ZJ) zeCL2GN^cT1?}%i8YJ%qK@C!I(kg-^zMKSqCMgxF%N0J9s&lO)+yIFM29^YEH)S|qS z>RX*k;(L*GZz2o;HtpVyu1b^yjDWyms`z%}P>~@1twRqy2&%&}PZOGy$7?hmt zUPqoG`{aq#$ZYu!$3LvL|t zt>=I?yS20%*Ag(~qLOeqCyu<n@&0bmu&7QwlRv_@QtJ~ zEQ3;oZEqoU#Fot7ZVYX9fe)iGBBF56O8K25b5s{Edlu)ZHu7$ z`&Eh08R=B)^+c5WI4!SG53n|#y}&EX||>zsolo5D{nuYBQv}LVsZ#zdY1~hIaT0;nzLtT zapIdMw~i*dYd7;`iza5D=J|plAhROw68gsEW1Bq_nb3dHsKh6uspv?ljHg8u-5Y~FA9 zov+^8TK$|uY+#LKk92{ygUj__Tn@NC)vf;k1sl7YRMIqC87oz=%fDg&c95aC&Fh)P4+Eq`SUUhwYL_ZzPKpMVat0q=AmAA3H}-7}vEI zq0KGMlSG9Ew`U!y{hr_ChFKnCD=UraT!X^pP5{Bc0R1}GhWq{yy(P5k=DobQy?HKH z;^dFBq7xXCJBU9i+*Lq4o(RQOwb69Ar~5=A{%d;}$CDvnEuBd!M z!^h?Y@)b&--fv}X!Lm{L0~HRhadF`f5MEq(f;i^XEN&sSzO`kFPb%3!Pz&Cj3zJ=rcO4mixX4G_hrCWJE-E50Bk!-pt zWg!6hPa`46JanxK`=y^rw7N^Bg5Eo`X&h19uap#^X8B0m#3M*E_eSh{*B@!1$7Lp; zaGp=uSP2!UyjgD5p#@!9FatyhY%Y4B9qQMJHG4}7Ygq#%Kg&ZkgeA!Dy}$~qE)s_$(9>?g;$F#i?t*n zhIV9Q2kF2AoSfFxjhxn2@?1iT74qA+A~j@%MhkAwen8`qfyw05&!bz|c!TV*THD#j z7;C$4F@@oH)a4_U(}LuDq^jT&M;$~jZ>H#Wx_-ZF1lM|At#D$V(nBJw@PoANeEj=x z*dw7(eML!rhE}%|PkkA&j^9#kLf}N~^Lb0SMs|=6GFy|^nuo!6G3oARyHOij-g$DV zlqxe6Au%8gy@Z=rX}~;Z117A^WoX*XRng+K1q|yHadK-vM5+FJK2slvxUop*Kj8yj+Q7Q@Zi!sEn}^s=&eMvmK zc@3|VZm2WnuFhKvCNqrg9_NR#FU+4)zJ^;7ZD%#|TWS!)_KSv)TD|ZL90unb)rJPr z6r6#YmeM<)4)|imIX=;8FN@aaP`ib80BsavG?jk#*N_=lci5Q(9%|^mA72kW-Nn_P zlI-bi3dMHHsV+HI1RMn;lsG)~txp&0mi{X@I)#m~iaUfxXdIMVX@eNZX3pl$HmM{a z8TZ1!LD<0>w3>H;#3J(Y;>~6IMV+jPw%#c~`DPops}Yx0i~u&idg8QvIVJCeqi&|l2W{{JaPB3Eu zP6s89I|{MjjRCw@V{vsfmgY-17IcIWrS$o zDFun!jAJB>lTclF=I2eYnj4EoFL=Lal$c_b%lzvLva04kEm?MyAo6pbl*?6V^_U~u zBz9Knu2*ixXW(a(o=$Q($e=~94n_T)Yi`AEH5Mh-&e}U)xP%Y^l>D+QNLfPlz#oS& zmNvR>t3AWUuFQ#)mCULUTjq`@IoRBjoN>=u^e+#^Z>L;BAvUqYZ*&R!bI2jIRRy0o z07#@c04dxE;2tY8!~XyaY;N@nsMB1A-p0)y31N~Ec_hafVFJ4+nCPTz-opV&$vtPA zxZ+~?M@0VH@jj(>_J)O(b84##2>iAoBu%50Wy!`tR^;)KT_AXTDWS_GYh!bNs9hNC ztzA6SSeJ6M|7 zoYpsrbzM5mtXZ1k>FywnkrFMDNtn*b4$;#&Mp2SL&U4V_=3{Km@nx;8&x-6~wqGt8 z;DX**!w6*iP|BPW@{FnV0|fLUoupbf_Gd84(Zep#M2O1+Mo;d^QhjT#Wg5a4(oGqnNU&&eDudUAH6P zobFI~J*nDWrqF2u0MBr3u}>+*SrmMB;@azGeNfyH3Sq1b5Jh_ut@wzGy< z*cP|AA;JTL`_?-Oxg#9oj0({dt#WmS9}rr>9n6wlG#_Y5WP;yhHv=k2=u`y^LC+Wi ziprD2_CMJ3Shc*Daok=QpbHS&B8(7Jp~~%L;EsPvt8=J6m#fKZs5H&}n=h8`$6#er zR48-u;{={@*F06L&lgE?9CPW6u}K~wdCWu$Vp|AGu1?~aAe@uDoJ za2pxq0a!&#A&qYH!g~I( zb*`x+&n<<^AU!g1$n)Dv#n-iOv&R&3O(K>Fuoc{RBr9ck=u39? zs7$DvaokIzXhP!h%&nc|Z*LZ(6o=$kWr!?MNs|~>RuPkq>NDP`=vwXdi(f>(TWw(o zw{%%xiZu*D-OB#}A0!i!dCqH2*G<*!{4HtW`^{Sa0Q&|RzSn01DB?f?Q5aBizbYM> z#{irWRAAE8B9=8-EaeUCa)862q?)!qyYwSBNytKTW>Vbm`={ zwY4j4ZE<@LjLhy-;Hf21_hggL052I8_g}?@yR`UGBxZQl`dbKIMwAAgJBXANQl~4% zGQ=F5pL+b|z0jUbDW<)+j>r2xQ7&PTjHGS{%m`N)1a<02uhFjRrKLqGv`XryrlIzTkvPTZqDIt`S~YM*FXBJ&bZrPfG;6UWP)+%Dt591e4u>^v`J z4d$04G#2Ewv~teUIaX-Pf_$uh2+HRpc1i7AR;l7CH0@<(NbTcgxM+%$^G41;fsV}f zBZ1GQXqlVUoWk5(YYN*VluZxZ*|W@68%|I01>|xwou;f_!z30AuL=u~GG@8H!)8Qf z1wjlpjJ`=A0t0iJlI>u>@jTb?+b;hAnPNl*N&=(?!r^x={E|2XU<_5OPaA3)UZZb& zYxYKyO_Dj%-tGZ4xtylS43QCuGN2xLjNs8`u8Br9*3~Zju!Nj4%~h6XovS zs?EUk9lF(v8#{K_lr6B49LiE?6U!=!$8k_{af5@952bUS7@pTky@_PqbskEq$lhKC zI43#i$F2rKirLZ~^)C_mF!_^6n}W+2FC2gq(;xzeoMaq>Quh*i8ZlX|_LFMxt|O6r z;gs^W?a9XOPs@|WI%c`$w`*I}W|3x+H!qUP;45d4Ph65S+zRb2bVbxhf|12y9h7f5WS5ZRM@Shu-;PMj=ZKXFLJ`1+Y&f_7xY@IgG0t<+0J` zSk+$M;iK6SHeNT}M(1o`06M80f}n#dua`+w=2-oOLI?O<|*(zqL(p&n%YmXLdh!v5*KS9)zArIM061 zaL|6BuRfU*2Wb)*MAFF2u*0|PV#6<;l3m&*cl$yi;ER1!`X1aNYAAC=q9P8&NMG@RJ{iIK&gMvNxA}2^ z#J9;Kb}BybVsoENj-6`mtu^+R=_Hns++JMp5=V|mJhRXh#yW-rI0KHSHDb?Ix74m@ zfnnQgZ!eyVkbJ1k7*>7D^WjE7ToOW$e1$96gTy`_-LKoh4D(M6ET#*Ms~BCeAP(O{ zkUHlX?_Bn$;l;Oo*H;TQ!Ifu*Appd&_hylg9D$HWIXv-Qy_TH1g}v(Xwl+rHRLMC@ za@&X`c5rtF3IO>*>s9sEsDZ?#%n-$P*}(X8>9{{VOp zmQWbw*z?zpao8Hj()>+h;Vo{{u2cI-jHWqEZgYZgtfXTZU^(aIVaGMC$|>l! ztP*8erZ+IDGG!J|FalH&p1B-?2;&C3&xRK(9+cMiAL$krkt;pYyGA$2(TB?5{M!#8 zdIQq9O$$krSk%JKA&xm>C`6>96#$I00fJ6R`i?8PlFCSY8E*=-o=n#pX5JB0p zxp{7)<`tgdqmoe`OtMJC0QhX@8N*|a25@W8^me|u{{Tde<_mu^9jSXb-yf8O##S{Q z1^~+AcSGw~ddunB&ZFntwASky8;9~B07y#=vc3riXa@&Bc=YR8##RO9d92n+XMKMZ zmlIlYXC_4fgABGv9CD-#4A#Y#ps~kji>Jrrhzk*K7D1VJT^3&(0eh?f~#l&7V)@pv`Z0soY&c78&G;B#k_?8+n~JjyNYA=dOCw zbw3Wrqu)htvs_IJ!*0^Z7iluefzM9AAsl*>%~;j!CeXC!p86S~xzE{HKK7NqT;+S5 z0uC|96gI%^O}p4a<21 z1z#m3R>ni*V;LUj=~u5W?zD|AMUpkRk`-i*O@=uO4CFpeL0p_?2Rvtr&Ae+#tUTMO zF0L8mbLBM7E!7EKid#F5PhN9|9OkC|Mam%7rM2?pk91Pw~lonre}`a~K1=Fz|*9~t15 z0E5T_gVwfU(Njs(H3^uccMA|Q%&x<6Tq)qFe3Qo*@9R?_i#t25O|?ioxtb(}tz!YC zi9n53MccIf?C{vmavYrV#&?Z%`7CZ`SXm^7U)`3BiKBj~U6gV24DpWH_oRbbn?`7M zT`m=hAKh{%v_=B%ANee|a?0~W_l*~9mfIuO*>5ePyzXJGywGV-oi5muz8@cVwK|+|O zN#xw10g$9^8?lbvE94Il+fA%^=T^9mIIUxj{^!juLp zh&}#Nzc9vqs^!Jiir(K_TuCIBR|@cr`-E2QCni9k0UK^rBOK!(WN}&f6S2US5@+xalZBzw0*9H%bl1O_eqS*&lgOKwh7_!tVYM**xP8A z^6o-Q_Kd&EofQ`V0#r6OJ%^*ELg2TcJB#%@baw#^_h)+~~2OJMo>{RRcBv z;ZIuC(k>dqTXdRuq`J1XU6-;aoNVKfP?8V;&c(ZrmnDx{jvJje={&tPudZTAp8DfZ zw?~cq)_|$E3i#TA$5HcaZ$+hWM4lwKwAKFrvSf$sw~u*j*LMvB4AIORA=(h@x;G05 z3^GGwE7a9r3u*eo>I-hRQM{7ci_bjnYjCBC`I+_s#&8Zu+)erU(aWAdBk z=p}CAqEaiRjM3rfr?it#Yg?DIm1Ja{2#u{(lkT_&_lKbw;fNe_S$bqzgZO*TT|#L! z3pI|o_Gt> zv%E&~_*+9+G*`H~(&m5}!MxgJ+U$T7Y?4*EIL}@&!3U5PhLa|Rs>sqvw^Lh{g}2)_ zB}UF)XdI~nJoMwI6!y|CthE^?jqYr&BUhft+&P3>G=l}gws`~Q3J5vJTGIG^V{hUQ z6US?-G>vDeNfcgC3?-3H&?C+_F95GOKQQQUYM!a7T}7b@mfGM$dwuq4ZlfVy8P{g( zcTz}U%Bs1?+#F<)Le+}>3ir)#sao0C!XqmQaW&iBv&eH6?Zq%iCGnM0&OpUp)9t^o zyk9k}+J2j=%W!1-UY<+6yjwyd%3p+y!C<+-1%?R86_*^cYgP;}(ZlAKc`k8oBx2mk ze~gC402t&iBQ=#Bt%Q0$u?f1pS(X%mBDvfW@UyIn&5V{MlmMXPa0fZ6u+3i^Ys=z` zVGW9F5tXn&J<1d`#RIi}f{{X@x6mv~@+Le+Okz`VzYISu1 zWOf)BV%TP01~PCk7C0oiM!ZcvNv(D)jd)kdw}#{l%lpmByIe2bepH?hIINp;)_QiO zZEAGEXE{}4#tcIi0&j|pSDP>zY%zAGTZ9#+S^AR&De=8 zEapk4lIVxoAy79D-Ujmaf}{<{Ip(ynH!}78Li@-1%Gen9YHSiHqJZv-Vt@_S+p)A~ z3!XhqUb@ikH59ja7gD^qy&_FLBWcdZ!+YDNy1Inx zOQhXeUaa!!Qw`JE#ThX$R{-s8&z+|~&Z@297Ov>>ul&o7D8)(At3vFzi7U^2LXNRvRxjs#tmiN}NrQ}gu$OoFSedLXB z2`tONJb;IW#%rk;?E6_} zXPLyfjxZDe%y)F-1b}-EdFP+Azw+MUquXx-aTkb4`|YcFZtzEJw>Tq~V5<8Y9FLFyc_yeV zDDg$cv2A&0ai}_3>KT*dk77K4sXO>T#CaLV8LIb|uc+DDtUJC*$ynA^a#W4k+t~pm z0Cx;`u7Z0@0ix;lvVE!>$t_msi6VGmB0$Wccm3sc!B<=X$Ry{CyO5Wfr^{<=Hr9@4 zu39kz%62O<1XH&;$-(QlAoGflTA1yqEJ1DAqw*LtENnY6vHHvMCmfGmxRV0cI0hQxE@C*j2u>mv1@d?ZluB(+TmvNK`@^+k#qB8@wY6> zRe1$T^r-wlVfJz^BwamHU6R8vMwS%?$Yz*el^hX)&#~`a3P|?f_$PLn*Pk6PE~EPk z$Nh^eH^`Rn35D3PNQ(@Nsf|f3)2?f!{{VuA>D#>Qu*(W4t*WVtMYs2@p`gPoz zexPn<)8n;kLpJ49v@&gQd+@9Q$8b+IgL|k;dG>i!iQ}FHGc121L6<)vEHcDlbAWnr zn!Dm1VKtps&RHy)*3FK_iY=aL00|opgSChtE^q+jr~&el$H8fF;qtdv5uYO6T3fcr z^8C3RrEO+AIp(X;*3hwQOPBUW4~!3uXA1Go;JncTJ4EVaXkwX%J)5R9B!qMtivCMZ~88;CY;8~eUe82;@BOM#B6u`>Tr?}G^ zJGlJMw>0fEiEIF6E5Ot434B{G{(BT*7Qhj7FgCj4i>kxfXcCX zkfC`t2K%H9>~WBOU^eaa_udwVP_vIx)GY0Dbi;a=iHeX@ zX*pB~N3SXkI{r&94>DQFrQKQ>U=m7R>2^yl%n2fySNCKBHzCR0o<;zwwt8))&CD#n zYFKSQjAuDD4Yr$a;Yp>Lt=XiqWHTJH z{qeX5i2VIBLn#Y@I%c)*w7Xf&t&|de?&4VO-dwz_71)^p&QyTNtT-6;?N5d5V(_KR zS8HdhUEf*ko<)#(b(4WK`X-G2vU1Nyq?o^{ohW zd9-aEq|+^J?QYuL=D0CRp}eJFeKI#>;lal^;-PO4>Kcx(9+Nm*TUD8Eq(q3FujPcv zEH{QA1;-h{>MKK2p2qC8oOXANsViGP<^^X!OM|qJlt5@zo!)AacibU9Bm%vx40%rH+hW8NZOzbfsC_t!N3`zp^(d@TWTjDmQuhc4fkaRl!mS z=Qv#BsNxY!f2B2pw>7(*$ECoh7xd zwcv}1q`9?*=H7UM++9TOZ(d)Q1=R}fz$9mGLhxyYnTaNuHl=qoa$HHMLkl`jaF8)! z6RzbUTxai~B%B;JJBqt|sN3nGwV%`Y`CHK(<_ zgbRq8?e@nu!baTfJJHF`HstLigUx2@ZuWXr>aLcnrrgM2GF>8WfP$0-_7X1CLEHRDBW@|YCA z%O1uoyEBHz3x+urQfU6eD%;#VcT(9$_8uhjaGA-<=j8;RPq(3`U29TZY7$#rd7fMO zafG&U8mvf3c*s$QQd>E0gaM2SsDz?PsA-ql-R`2wE$*%EFJ45A?Z{p8k%m-IRdd)3 z0gj~AeQUw;T3)rC#A#~QDEQ3Lw2r*HHsu7#j(VO?91)7uv%9uUNv+ltco|waT6rW2 zsKEJVPb=?jC0Jw-N{WZW+Du|rwTDvD^xZ{NnP!oQw~{f-nF;w+uG{e}tTja7Ib3Eg!=67ycX7?=CI;o5?NV{?1rRxr$A} z!!$}k+VPGUf;rDUYg@pg>cal!;?CW5NZQI}f-wWIf-QxkjWS3;*xcCz?%-mv>~x!r zKEmHrN4RUtsnkOP!pSO+m%i+;Tn;b-@z)h2Wq%HMZr?-k4x>71mMw0!gZ@3QW`XBv zc$VC=ss=lLXOE)}0m#iq;hTswJNMlTEi5KA^UQ1`Yi+wigx$GVvFV(V`u1NA{>x;7 z>s2txbM~a3&d2RevQ0EoZTWa8K;436U)@c241RQL zC}2|FBD}gQ=PGaj1Q13j+=Dm7I;!ZiM)P^GHT8l$tHrrqL}nq~p}-&!^8iS|>P;HF z_A%&oTPM70sib3haRvnUo6!P7sk|VI<>PV5ZlqD6*k5@NYOi&DZl*DBXwb$~NFJ7c;~+G>wix8*(s7Jmh2noY&vq9U;`U zPlI|CenisVTxswLSOTkTX0+Twj1WFp$UKZO=Zf+(1*}fI8~x&m`SbgJ>erfg?OQxE zyIm{Bt|XewBQV3MZKPpFI2br9gVwlz1M9GVZ=bb8CDo=5LNlm6)rX^QKAa5KP5W8L zajE=l{{TqT(^I&&f;)DXD#B+7&zHdfHy~hh)2B-0Y~f$F>GDGIN&CMvzV9u((17_z z)DBL1ocq^y5BO2^3`UZ(J1-1rvTFVp)wis1-d$X%@Ye;u;KJGe_4@1(W7GAWL=H=d7 zbs`m!mNvKh!LzrV@;|AlZag_BigiCT5-cqn;Iw8>BLI>ZCq*Q1PjlX{S;ma@OWg-*(>UOBzI%EB=y_0<4ZRgPw$S1P(J(DOi@y z3qaD^8R3p7?&6l=f;#zS_BIb2ao4YIYR;{1BsSC9c`B-YP_n`M$QTife-h(3Ao6in z{5x>kJ*B*wWY^P8Y=~r@3ECMg@>p)(*lshEft=t9sef}mu|358WNke1$#(7&nI!Jt zH}|oep8WTs`rLj-Py8c>d&XGiUpoosB&TXSInGC?132SvO55<#Sshk5rAr%;M$PO(L?DF*5B8R~)cEF*)Pfon@#so%NmEGwr&D zMMCnGQ4@oZ2Lu(zCqCn)4TY?3LoKd_tWBuNs6##Fo+MU6PUZ+0DvWJ8=eYo`JJlZo z_}c5hJ|Q>O_O?2NH&HYK+VvTrbSe&VIT+xc{dpA#p5FQ?nn*TWF;6XFh(@k+%K#6) z2pw@$FRgys_Hn}$X$s2zY;nY7lr8{0#xu@4=h}-dqP5K(N5p^Hy6kt7c~IKySDR!( zV-8rHmE<-H9iu%6&o!x{>hW3ViwyC~A^!kg(b~!(&&m}Hl8{IT2ju{OMloTdmSTLDkgHura(;Yt`Ek>NM;Py8!d`WRcS`Fe=FqBu6$=udoE+!VcOKLr*wxXd zH#(XmjV8$5=eJ}9hnNtuWqX2n$WSrQ7_3PAP`)A7?u?e|%?W7?BXbqU8OS4O3`Zbf z=kTo!Us|!g*)@*Q6Gi7~zQ1;WQ3G7jtx4;l2VcDVl8xV%MJ?jg5mj$|mNK+m16 zjD6N{zTWjo4l(LUsp~fqNpUxmHPhce&SY@KqQ+Pp00G>1=QtIq;Y~s-=~muL7Ew3} zb+L>_QM3<`j1?p?869)M=qnWJ6Kq>XAV&yT!o?DwCAlfHw(c05WO39JUZ3H;D@*WI zg`ARIeWLD3e70GYM3$SuV9Lr)+zjw>gM;ZxS|Xmsd(R2m&7<12lrhaDcIHTJqf?mG z9H`zh4&lHH*X8-JGl(_RkH>cMM|&on4aBi;8^WQFVjsGC7bJ7E;x(^R(Ge@kg z)RJ4nEz8RkvZ{HJ?!#_vpo7o%R2+fdHOT7P3*Sj1t;M`+3i+(aaHxdsK3YCNVp{+% zIU=%G>PlMNt>WDsZ7$`wxK_MdiIINQ8Yi79y5>#9sVdL2ZV2psL9T~Qwv$f1hC6R2 z-YC&-B7v>dAXeQcF~y&pk%PQ)8F=f8;O5q6O_q{~{Kt&E#ncI~5V+ds8Qw_BgPdly z^nVgxYPYs}cJC@X!oy|6SW?H6^8=LwrUw}7z%^1@47aQ3c9$~V2~2i3N_?1*z|f7m zcV{I302#&)Ty)Jzq+2u^b1JQjQQb^p5k|_UbqWUTXK)L&@s37$&L~|^R9J2xOIwe& zSrmlM@^54zhBgoR<^dQdwmTY-Y5r}Dnunbv(x@oXOuxHVApFkico@N9gOYK8XkKK$ zGZ$60g{F>cd#i6UIKoVkNZVPLovv7X;CeOQ2cWWuftkhE3A54w(*5oE*QUcExmDvQp=sguWm8S zJ|J6tI@N6Mm2V-8ys}(E%oZqR*r1$z&7Mj3<22iwnRL-4%Xw>iZ*syZRaxBI7eG~V z+-@xFqZ}QKdEnLz+U}(#_3N^-+oHI6n`~=rsy6J}-+LH1&nG8}n2TEs)X+_&O>4ac zzLo<=lnypCCd?V+({No2RQRofJ&}&pSnoS z58lb?T3rq#ULf%8*NS{xCU4x^hK^XFic%g>5ClxG7#JsT=YlJxlSq?LxVLMofpO&! z$g1K+i5F^(ta%*{0p}y8Dme7_(Dazv+FOZyxc91*5v98!18(*wpP6&ejmH@r*5!_e zaOHJ5TEz*9aZ{~*9HMf{e6vYBaQCO<6k+4_>UBhk%2R@ZN z*3hGsJ`}ppF0Z3|Keb6Ti*CWC=;wt6<6y%W$O9Q8rF9-2@D1mOG<`xz?QQPlnPfK5 z8JlOBobkIQK~^~3k-P9Ub4}IZ(q&mi>s;SQI{b+SA&pdwuWiE^T#zz2t?#sbioo05 zE!Ewe(L9%o>J}KJm6VAK6S(0*C>_@#lanRxayrqP%F5p5tz?=T#cNfCU0-*~85Iz8 z0QDp5*14Y&UH<@P*~Y6RmbRA`qhgfvB#$3301<*gE(rIpQPMQOKTT<`wCSv+vyB$b zt-_Im^0$_(ysB^xdY@hmaQ-;({-dRv$C}z1e|_gjvoVb~j0XpEU=D|98Rw4Fqb+O~ z?s@gqn`tpec+iNUnN|0r?NVHwq^D7Z^DPj*(Um|L{RF?iQ*KNd;eX1MV zfbffbjT6Tva7zXYfTWfg;GQdo1M#!6cH|#nXAQ=m9QN_ETWoh}cKpbpLV0VBcHnhA z&Uogwuk6!Dxm9>%jfK2dX?lug6U92KBDN0Y4BJ<5Boo)ACX?Xzyie^ZRpe+w#-Ln& z;@S6Qh6Z!E^<%;3fm#igimLvU%6C6ZU0o@+5&lUD6`R0`ABh5)VrC z4k=uz6}{0nZ3@W*mhpMS6B??=<_2YQ2`oug`V8ZqY0!9%*7m{Mb=TT%rE9f{NdbrL zC4g*jNbW-%8Ks`oypu+|P63Ru-?ym)BaWotQzNMBon7yiZ!S2@R%$JbFy>=OEv%{R4~URbTt>aZpQd(NhGwq zXFhY>K=HvGU&SkQ1U6V_`@jNwU~^k`g>*em)_=3ZZv?msKXG>M%)rcMsNpu zhT$aCH6bk0t<}S;i5W)IXqv5atE(blUV6& z@L%4@(p=fE**?oGPcdE5oaC?=>JE54vPV%)G42*Gwxjkf21({gA!~^|wTc(o50pd4 zyP*Z$l%NBht;Yn`e~6}*<4Cz{h?*N%7|hDM-X`@A&Lc59FgOVAOp+lVUfGWm~;l`6tiJA+eX>)3qKx2IIlegx8zdw8pz=MDo z6VTJx3823I+)1H^Z9+SkG0n8 zZeghi^!Q;{wTk8c0MZ(1RoRJTP+u|v0b#+%r7}tEY|ZqOG>r}Iq}JBa!rR`_hQto+ z6a%JN;m(_-L!@dN zX1R3n!TbC5$XB?H-2$(c1_LqU19FX}iRiV3;rEkCwvrg;oo^BaL;JjMA#o7sesZTI zgV!gFR=u^N$#*oDauwQITY1)HCK%Cz6^yqBEDCO6##ndFOSxK@u4M36h*wzFE|urB zo*S!pRyB=bK5pP;11+_ZJP@Gt2eoETq(`9YmVa;2qrB4QWR?b2k)hUMSu#pG6Y`Kt za5n%6J*#g>nhy?mir-mHOleQ2$r?dC@T~U`GM8srP@S*3FO)i*1m$B)Z zgu1oeibmI3HR8VL>?dUthFmCCP^DK5x8%l0$}2=qnV)|Z=8bzC)^|cn>D4Y9d!v1Y z6c@=1Z~;;XEOLHeM<7w+i0&k{nm@6NJx0}B&m0KL90+72O3V&^LFIBd#t7t^sio?X z$E3|~G&*dPO>*k6HKBjA+>Nc4#!wjuKOp6S2N(jAT6?W4K)ZrQNHt4>$#@fVazwsx zVG%>XMk)^Bj-^P>DV6A2J`9gl4RqGm7IIx%dCI9C`PyikYlmEozb~2dFwX-yt!;P1 z7WTGwGHAEjq>_twxYn*NrHw5-ml3Q*6<^HW%KlrZ8;Bs}16=--tLgs$5d3o&+OMqi z$r(w#n)o`z<6t6Y3PUpmmWolYb82sdQRI_v9K|lh@@DgxUz8zD}9}gT(p3eU~{*q+t(*d z(WUW*tkP>xOL;Q0KqnK)Wh_e)myQ?{VO4LD)j(1))1_@qrCQ5rC)n>bBWr0I9YXc2 zh2dG0c}1w--@0?Ywe9WqEb}ktEDcrc4h!qVW#PlYc^jk@oizQWDgC+h=$_@G9*ZPV7i#gwg%F; z>P=?qhT-D3ytTOdEyb0xz>zdTZlMr|Mv@{I0IwtG=f7IfG8qion(F#@mv5);mKcM~ z9sJdvX_#=*@P$q?pp1@wqB&KxT{}g$fHe0P7b06bsODiZPT`|#d15CS*cJDIoW3$g z6<%#NOHF=jTXnd+zSE!W5vzRVEmL!_a-(nV*9=bqNbQQ~HJI&hwI#m$ed|4%rQ2N0 zcb_w3Y?XlMfH~wJlmV00i;BfP0?&Llw^7-oKWP2jZErZ->cFFAf4adiNAQv8Yg*sK zvwvei(=ENd)!>kYj4ziMS0Pm}dZ^jEAZIE7J!+qZ^og{Ev71efEmAvqVzZJRyS&Nd z0|8OHl^_G(1m?AMeInCOk~nQ`V^C69CWY?tZZdkEVh@k z-$@nCoHHXVi)9z@M(E1rLXos}-Ozx>o+Gr^ZLDo=91^}KfQ#KsvU8>4wP@+8~J<}%6~1Z8o6GDintr(9|Jeyy#;BD6YP z)K{5#@RxBDFW-Sy0xY$+wa!L`M^GKK(WASlju zh0osOJkxwp1;xIDVPSb|c>N zx03QN8+R^L=Y=hh6yTqiCYuF{%WDj6Y3Drg1qLYm$u@}t774)w0k{#{An}@~s_Sv@ zw~>6wn84!kTy0q-WCX|pp6XO{+#Z!HQ#mJcJz^u_$ZxIn8+Eg~j%lo}Z5lx|&`OS~ ze8p3Zzc9n8aJSjk7htmFk`J0X4c!TB3}UQ!=FV*)Tg&PRZ1lGK| z6&W8&e!%xJ_*>#-oH9)dwxpMNVB3yT5L6L@0{{ri9mF2^tSs7ps3o!pt)5;Ep8xd3yInXnLg z_QiGo0Jnav6Zo^kk;kdU<=IUmOKe<8YXhi411>YUca8@^o;ufwQZMVO$6Y;Q?08O_ z7`U`)BYEv(xbpsIEHsLawC4Fr z+RFqC!g-@A7%wFQD=;Jsf^a#_dwmWgYs6E@er?(t6Et2~NOChGk{4s=?uFbiPIK3| zs=7{{r^9)0+oqmqZkj^TNxl}1m;Ff%#!H1EyI|*zYd22TZoEqkxsGYzxJcF+{MIcs z*k=s6UI4*3BPw|u)Y{_@?WVQ5vye5%?v@E62&(wlK^z5Oz;lj0@@XwJ2dQ&U)~>Xf zuWi|_tYlt%`9jE~q??fKjBeeO10y*Mdg8UTuM{kLeTuY~lP#C}BHOt0wuU5-q?HN= z@$NEx1#!39e0ps5k?n0l^7=+=h?!hSfk;o8huy-S2|R(G)px;<29>YPCZ{dyTHB+_ zutRn{(Hm~tBQ%Orjs^!Ll{w;vZNZx{M{ho*s{Gnrt-Lb1Fxv)FcQ63&JnjP@HZz`k z8e8uW$cF8rjh5c~4F3QicV@2=X)hnnv0gSt`&cV8 zZEu*26$3dr&ILoLUg`c1(&W=@?jw&}nta{5=2>V-OSnMNcS>(mk&KGgs`M^2J{vU3&nz}u;xe=>Jbsfv7Pd!JS2G(uIW-z(N2nXxN zGqbIwx}zbrj>dSP0g5^KoE81{GB)StJbl~_JJy2uJ@wBITii`7aIT!8V9IW0+^2IB z_uDuJuK*s@xr*g5?54UHp6*LlvyL{65FloWK|rm~-ooVYa@ZofKMMG-O|{b6IV_`V zhB3(u*0cF2S~*K@mOr@ZHy~ebUbu5 zq}H=|hg7(4-K3D)JIdzWi%TLPED6zkU+029VfLsHA- zFL=Yw(6scE?6H*7<9napKb}=^Eyz4vk{A_e&;|b*njLdx9<|ks%8tQadpD51gDf zKKBRKzmByDJVoR06BWA`+Krv$wihx*7V8P@!SGD_0Oe$XV0{OURK_MRC5 z<5AmBpg?u>V6{e92yIjth5?2yMK3Yf!kh(x#62?PJs@h0Jm`TVws)XYP#poMRd7njcDA ztvR;_jha=EE3(HOz;EFhUKz31u6U>x!DN*hel6rijO|mpBAb8&uTOtrngf*68ojOE zjAlu#W4W2-MG-hz6DkXCQZUTKkPhsPql%kKyS&l>xt`|MJuTIiSR{>rm5^aEgMjL} zA&5B3dsZxPLj~fjk=qN23K^mD%La(!oaa4p>74Y%XlmE;X*Tb0)^W@BH3+dw5Sd#F zS1bv^Jn^@VGJ2XhNh;jxAMlf3%@xFrGcq;R*O2=bFsUcmKB=O)m7BSu>zR@Fe4<$ z#F5)09)Z3t)nV~3h@sRQOR>{zFP*O7whS`J1WH+?95S7+wFlkHcOsclGq1(2qaCP% z8_Q_zVt+Fb?UwrEa)}%r*z(uq8&@AFV~*!`2xGU@Zmy%Xx4w^8un%n=y}^gd3t@K;+8}gXF19NVLeltmvYDjT8bah^pzO4DOP=UcVX{6}uqH)W=>WSV6M$qEx@c9IAx zPksUP<26?51-I0$7D1_8eUW5RAVPfgVYr>R%XU9_0;f2unvaL>1&Z3iCAhYZC~j{d zBqJg-VHYpgqgIAT zZQw3>Si@i#)OvC{RS7liKUA@OQakodM%Gn=^GcfAYfEaf?}lj`7;F*QkL10-$g069Dgok==v9{TX;6KS%;rL=NHg51WjIa%9& z#xgKCZV5f{jNsy^co&O1pY01f#ez82+0|F<>{YT3=D||RdEJ6o99KVe;|VO@6|#%$ zaos}kDn*##k(=cz0p}nN_!&NxYTsPE@eRJ82w$~aY2){4CDN?hKqRRI;qt_f!@WL) zv~-5@`%{v0122&rY+l+q2KdoHA(yt($jXc^06vw6b9oM%rAcpNFWM|w)t*?-mn4b- zAjUJ4Jm+v5hHH<#*QT3Rc_eSLTQiN3qp(uWTa*BvF_D4W^Q(Gvklbk(w)0#x-`bXo zxlH$`ywRE0RBWLp_D2!I& zPt9o<7+ITd9%C`wNaTHbec^4OYIA%ex3<(C!r~nk-YY#ktZOaIv9-8Xne&xlxEJK^ z=jO*s@$)Su26f=<>MNg}zqH1J-XHj)v43bS^cT`K+BzYONdZ!U@Od9HU=#Ei6$gei z%Xw$DU`pD}0^9~MhyCCM0&)&OCq0k!>i+<2J40#l3eNH~3qy4UxDdn%^3~!a3>a|7 z%TvMIhT{a+E8&ZOvAh#YFf$`-UdBYpVw@+{O77h>hmXn#)yh2Hwpl zo95mu$s~`tOkr?)bU4onbCc8@Q*GsDBH}I?ol;2MQB*%FHV|^d2R#SPk=r#&>eArd zc{4L@AWZBwo#YdaSE&WCbLuJfsL|>hq_^{6K z)0o>^%^XqNtb=Xx#7k2iOg_yMir`HJ-z<1M(52*yrp zozS(fCe}8PG?2$4fgE`%xHwV|R_mW^d)4cmUe4=KxQ@~nSmWi0Lb9U*a9s2A20d~Y z0AyyS!$yvceHz)^Tgf({-eSCEFuiv!NF;&>3Nm@)9A`9|dl>cinkRT}E#w|heXq0S zVoJC_D*`eY1A=P3)ze$W9FfO!W-X-snCx6_AtVwp<##{l!&Jk_Z#^t)Yoqg9!$B$xMN zmN9|H2d^XMz=jRq(~314x3$x)qgkO( zGj#F%;K$SE!SxvR;QCbhq`z*tk~r0*+U1bOSs1Aq<2{0oAGu&w0x3u>~m z88WRPM(7n!82L%a^`tc|3nd}8w}xwvv|K?XMcc^20iDQ)o>T@IDm!!DuUXIk00{-E zq;a^82?SU<{n%gPeu`KF)c5*UZlPc_*yNRO8|?dv#gM0cTl^?@!tR%aR%=ss`5hTmD)m# z@(8X6P1L^83>NdU#q;hSOEG41!x9_NjmI2woOG=s8lB#qdmCO$EOvJ1?FVe;P#G-7Mt$R-Z6udy>C5%%PVGeF@q}ILY*> zl2lxoRyh_Hk&;4BmdBr+LC!~B20Mz{x|&N8>u(OAzF(Z^BZVW8cJawO zzD(p0F}ELDhrt8w%jEfY0!U(Ol#W0Y!5RfEBF0AD!0zkV^vzM!=55imWq;A!NK{Mn zxh>y4wvtG}#t)_{ZFWYf*yLoih8y--8aP(nx5)B4w6n7G3RO-rFgJiggY$N$Hn6W@ z9lUYKuqvkV6c@=1r+Z))&RA#D9CoSogEQ)0b*jlc>dfyWGOD`rSPTMiRB!<2(z3M+ z3#&as$zzXg(+%b2R&OliW8HTQ4r;7f(`lYGXzZ=T&mEqr6lTt8_W6imIL7xsE=m#) zpb66guK3GSgG9Jkbdd5~T?C9vfXP1a0AxiQw+7B|NIu>2Cccuy^#kstJZg8-AkVs{R_0y~jR z@Wz+tX?M^oT*oEC#CD`5gz8wiOs_mJ=s72;;V2t@YO+mhEN0H$YpF!L zo5@2C|@pR1epNpS=1ch5rOH=ak{Mf zt%6y}qTA~btcxRVjO~`@GJ5RMx^zCXLTTq5eegtoM7fP^t<%pA?f(EhiERBqAZ^>;xGxN8*ROSSX1BhQ zIOEy9V;htXSRZ4`o-lAn6=YqH3F{}xyf(Hs0oGf^gLjv=ffxjCj1W`;0o#y!kQ}3~ zg>!T|Ul26eg2G6J4#<)}L|aHL4xT zA$8g%Rs@68jB)`7Iqk&wrU^VjCBrVEwMyZX;pyxTrZhBG5?Vw)AZ=`Iq)i18CQKXa2N1ixH45$j^GK`h^ zKm_C49GdQRZ358P+v*xjdWD_Z-78-tGP5+HQ56-(JGSJ2PBOfnn6D_&JVzWCklieE zeX8uTPaIs#IR|m;&mB+T0TtNzf5t!BdK@--O`VO6_0)SOl%f6XARXdY&hDTOOp%VY zl;Z9yv!wCAhT6l%BFZ*_U~6A7t^Dn*B|kRQY>IjtbLfoGaV z`K@9ZW=*I|V{i9(7|T{c@gz5QQd-AxV%mC!l2s}~!!jsH_Nd8c;RXt}(7~~j&S(53 zR+l~^vAD3hn$9cBIT^O^dCZ7Pxnyj4XjMSL$v$A|$P*O$m(c2UZEnsuZYH*p@)olN z?EJ~ZhDe$%`-@;H;aeF{aHobf=l&(uY~MoLYj0jRtd8;R3nGq+tamBM4ahwOZ+sWk zbo~!bxK{#evoMz2#Gz!GBl2y|M&cL~?UGMY4;$i0X3{)0r}>t#ruFmTmEq#ya^J=d zB*O!o{n7})t6vXomixuJKA~nU;D+H6JAo{Y%M9(GlYVNS$O1%`s?Df7IuFFbo+fO_B)Fk5Q!Dy6B&{qk?xW( z$12`olY`C|jOP{cjh2mYw;IaZsFOBg&hu=z6?gvjx`!?xV2wl^{V0AQY@gIoHsweb&uxmIsop^s|kyfo8AqG{)uG}X156^-spYR<dSQ4xgMe|LO7$A*arD%p8slDrWQDx84fE&sS!KX0o=4pSjPfg{ zu+#25IXqHaM{zWepb|RbMYl#=t1^yva56e%;jl$5_MWYE6`UT>urOO8jTL+Pq$N+UKQ@JtoF2Oa{vv)1!)ON9k zjLUIs6Utc_rqPr+Cj{rG1d+hSGT&B(?k_C<#VOVLI->iyyuQE zN$E!@a`i9j`b)!XH2b4!&m>}9l9m1X$(9m_T<4H*3CfT`8OW-7ewTNw!DDd@^79)- zCC$(&xi<5-h1v$yJRIj8J$hdnY1TUG$kQ#ppY}4+M5sPQS&;79ig$d|K-?UJ^FYAP zO)Hy8EF(6S?Au1tZ6lNhiAN-|^vebub;qYll_CsHH&(o{)~=G>Zmy+`o?B8rX;LyW z92dqHjFH@P#WP>Lk5aTOu){3Z5x1Q$%JA+hklT8WbNY}CYiT+pmfC!iO&f%>w6 z+(#KkTqp$K*aJNQtj%d{^)nz6-rM=IJ>8|e_UkONsRTx$mjgR;2_OzeD?!-C zipt{KR+8N$nFQ$>grq`>K7JlCXCA~CzvFFt{AD|m##8C@g9`~y4yhu*xKA&$8Qb5MM$Da zHz@~p#&3SPSk>!+{CcQguo*c8t ziWg@dU{VG-Cuk=%OUJ-N8!hA)vHhCm66I~2tcVWN89hU7R{;=U4a5`HlXqnmG;2iE zwKk7KSY(>&;yc8O>U0beGnquu$IqBmbGR^7A1`{6OW1B@HWsUHO}^tHhm@W~&Ix7c zp-PYsQciMc)$~hiXd!~#bqkxQSNExqN$%pN;=2c4$c zOsba~LdG^Hd}nhq@w-1-sdaX`>^5>D+-lIn<;547AtKXk!T!&=c_flRVh91wGI~2$ zaXLG_4Po$t#o`2QHtOQ;NG@cK;5E#`IK;u85!OTnLB8oVP`BNOL4Lw%2C&1nymp9G^5`fT<#pw2na>=cP`!Dmoh<5$rVmJ6E&5xNB_^ z&ihHVnKW0pp7wd(No5TYU_!A{nZYO&K0wH<-w^7JbEU^`XKxLhmXXT^yWm{Ls^>FC z>65h)H#lhy?6A&3qe=0#=C|R!4tQD!>~y)En1An_G`khTh>kyM~?_Cb&kigvy!)ODZqnBi$JucKHl z+f2C0UE2<2f0?9?MIY+W1O#A!1y|QKcy;}1`%<3OWOxq|30*eEQAx>sM(_!7zXv;x=-UNP z7$oykcw5BL=++V2?E7M>wTOb=4?0PdVnQT90eH^b;A9ZTfmLjxyFa;Utz?oEX>2Vn zCsb)8k~TYo41tKj<0qD_Z8T}RHPqj3j^1lIgu$*8_p+>l6Z^Dv7)+80Zh)_14GeY} zpurX2g{8Zf?TbD2?4g!l-P^smWDv+>3;wqbMp=N{!02lHz9EM7VT#?p&u#@&nhiqI;?1=iDI;_u zW^56?M%LUrlC6Span24Y=T%s&?h&lN(QKX@$ZhP~%ZgZWwN-iD%!RVSj$1r)M=iqZ zshg?8dEuQ_WoS&3Sj!{|&$axy6FCdFBXCjxWhar4O>`FeQ%z+Yi3P>g)QT^a6_aAZ zPSz3*b`yh=NWdJ7lUO<)q}r9{rSeU0b*at~jB>N!6=Fx0I2joFZO6S$;w#&0TR59^ z(7`pYnq`ytl(-6T1~!kF@zAjqO>`8Qp=Yndbu>}jGWm9CJXs`Vg9haAGDc4zKTCmrXaE7tTdpu{{T>E zO~VAYi^+Bc!ugD#pTGXmQ^54Bt5}+SKu2!Z7mG7AOC7oiHnutS#zszh3fV0O8y`ph z#(KV&Z}F?bmh&mRPq5uuo2XJzwMO<;AmA1A2qc{S)gy}PKj5Htw)!cx`(%IdHg7BJ z^B_>tqi|ViePa$joa93M`j z(EkA7qw-nBb>RsX8JADDmEyuozGQJK6)A#o<}TLc5~Dr%uMMyE!=^hQGx&P&>B?^{ z=9(+(Sp%y`#l*il02qOepLnp_f_m3aaxbnQ{RNR0MrNGIgK3$wxzRX6J8nGJ8g4GF zui%zAX0&UkV+?4DRpTwjdBdsCAmgV>-w4s)ZMT!`v$GiBgqLqGb0~PxFh*Bt>T#Zi zz1tkUO=+2(q>--L;_aqL<;ThuA{b@bzj$FlAoLB9>r(iJ_8a4IHNTjX$AGPk@rER^ zXKdx9+;}+p)_du9y0)s{W3^eVW|X`)FBpx4Y`IrpG7z%ohUc%PYuRYCL!`}gnw6w` zT*9zrAuY8)E&$0S=aO^Rk7%`tmW;?va`GKQb+=}k-S^2HcP{0bifncPc-y>zf_cw9 z>!k4Jkldympek7E1#PjQ(`mx zKjIJUf3r;?x441B!?Fv;S6MkkV&H>-+fFb;0gm+BeJ1iIzP*k%wS`m5dzs^BA?H#u z!x+IJjE+aOQ?Zf$*s8dNCV*S4Vl$aC7jX)wIT!~y;~B{0)vJ3O*{tpLJB#w#f1WMD z+9YDASRX7A^DKBQRP)Fj)XPHS+`k2-+S}U62a`Y9?OV>eG7l{y105Ls;@kx}KQO>O zD`!a7`9d=eLz% z*wM26;GmP0efio)%6T2}&*{D{y0vS$8sg(>mX_vAbYUa&!!Fzb!vUTSax={+>VvL_ zed2vO&qspl`|Z}c^up#b1>Kq5XB2@mBOT}&fyU6F4sve0YCgH9jMf+TmPZ<)7gVA?<%(&wOXEo4h9%c2+ za!qxUpS1a}AD1IbumU*amB%W09eEVwv;`eaT^~?gS?)JPsx03xB!43XU_!1l#&9{t zcVevD>kyj=;JAtdbrUtfX%PJ3*FQHoCm8B+^Jk0-=losb!=_&SyUe(?x?)jV<&Yr? z2|X}zk%QMKpIU`{X&t&pBDKL^^=>7?G!3*yc8}sxIQP#KxnDw!oma&d&EdOSU-YRi zEzGxZ!L+iV2OeP=#{-l8$nA{O@HOz!w4HucFpV{lQ^`-W!wHOLHFJ<%q-})flZ0B8^bO0)v$*xGlLAc{%&TILXYj_@QmQ6aAZW40ll725}%@ z^JNHV*J&SjgUKWTQ_#)sPvQymeHzzPxPk8`@fM+JAk-Rgp<>I%(yT^x* zESs3Jvf)Ex0P+So#cM;T=(^X$TMKEe?ysz7yGYy1V{J91w$r{1;A4hdg(?FcGtCP7 z6i@K(Z?d(-)7^PD&2CcONSRS}FFA1W0kw>HUBqXG+tm!;ssa)!DO=xW)lgubz z2g1Yg zqscCdxpcT@*oKp_1EDmMASsI5EQefCbp#6xz&2JwGN%bHnWdf;l|Bryyh#({bmMp1rFVS#Pyn-bUleYjq124%pSf+wz`sk}!P$C%sfvM4CXPvB5g9zq`;hG;1hK|((Cz1-s#X@>b>5#GFFmBu?usJ# zk(3;gs-*2zDmol@?^pgAc(eWyeM?ZWi%pLDYpsSkoy=wzIY8lhKM&C0X9t>pi!?n$ z!#5YUvMR>6TbWs$s@*Wj5B~7aCyovWT8^bgB58I_d9K^Y-(^*X7g)v2+eF1j-7GM7 z4CkI3jt?TYt<&vk=6Q>8eKU~^iE_yH<7dhW-~)#M9s%R2;<+6MQ;IvQEzIw_HCY+g zbSPXl7`6$>D!oDP?ORuR&z@rz(Ze>v@Ax7d<9DJ$(4fA#MIHuDoHbgP`nj|I> zs9qT_;ANDmk+}6Er~*EW3k>J*tv?n|XRi2LLuhuvsoS#JUcoL%^oz^Reqy;YH$X~( z?LZ4zQY()mV_!PEkk7qekaO9aXja>vz!6dETAZ4exh$`6vR&#iNX+jzSGy`V4eOJ) za{@OXYF=c^LY4Ks)}Q7{8JVV%Lk;hl8Ij^y2Hu(H?)?;jSNu7DapAjYr?-*Atg$mo zDzIeWe4uBB93FBxGJdY@i8W8SF*i%)4{mvc>QZS6$RM=F4ulyDbr z2|fFdUe!xWitBZ~tj6JESyyp{i5}(ph9KhuoM#*Z(-omYzJktMSrztz2yMzh34*^bP;z?uet~>aw$ozol^aeQ6zBERg~ z(mkck<>Z<%lI$WXt)<712|qSKVB}z&bl{R}#LSny8~*@X9e6hVqOtK0?YeGtEneQ` zAy~+|Mop3JVK0=?IM}17$fMhDQ(j}GE8X4NF34r`NfSFVhG4CoxZ{zYImb%wziJIK z7(8nWSVJ|9z2e0xi6>`y!HthR5xXO&q3K*cfh2ZUDHX#>G%`fOWb*cf$41Am{{UM& zS5^gDiYm4FjZ1hf^(fjn?wZ<2iy{daqDnUc+nb`cSMGfVO*!=c0POo1*5Ov%B+iKp zid93d0Fd*Q2RP56&ovaRw+RMR+)EjB1&-y7067Rp8OZ}A9OQFWqJkY)SDHBEd&LKO znV1jVfx^g1>Y#z?$6D$!koavTvb$)ewf_KI%B!?_iLriR(DujXN8x&F?MWb8xtUT; zLDneIZPijmjh8tK>$9FS$?MHiU2UVcj@CcD1kV0`KX?^@;r({wmfV6Pc^k>{jtKw~ctf6~ z_NaVIEy=nNvaQm*D5DRFB4y=3Bktz|j^O96D<h>PDGlCOCkUD`O;_73Xk0$7+(7nb7%mvcqdV!z4D#A^_t+9KZSU z+pq89S2!#|`^04Q;N#bt;{4XS+-8t3mW?hQikb4*1#$Hxb@#0)H8#F6$7-RxllN^KfPTrpVoqRSrWYAeG=YNK=k_S1Y6V zsUx*m;Eqq0M3?52ER3LTV730a>VBc zlg}M1HxSs^)^xeF%|Wd72Zq*VIgSTy(Cy9ynQq040iJ^ZYG}HtUDElEzD^QdM~_NMd>nmdV6{zUjxP>6+)If=f%LgcgwF zCD(#}ZK?-uJq`i-nj?LRvNbMzPvuK*ZzC9QEz^9UDa#fhZU-4ESB~d`I`dR!vX@b~ zx|TRqZKjplRJM-_GJp_^*9RED^f;pK!cPs_TIv$p#@}j8+fC;y1lyHAASA|j9Dw_C z)C$a(Rhn7mk{KFHjmq$mA=(&VmMz9f>zrU3xP-0Hx+c2UC0L>Jmfqb3$Y~W%mWrSe zxkh^ocELUCOH9=v(&F-O9ifxU`$=SPG&4R440?x9N6Uf$?^*Zu%N>eN*ArRIaT{P3 z^I(!PM$M!Wpl3Z#P!4OX@cyp89M&Y%?b$to zao5(o?kjtpS54Hd;J%*n*Y{VKkw^ltD8&^Cz&sb_RO5h6YG~df`wSNL@>`fs%*4qa zL@dPMW3QG#&mA&PCXPU7UFEi=;#gHYxb7sLOh&7;p&pyCaD7SZp4C?VJIyxgYt2g5 zc`qRl+mNxVlJB?@b`g~WX#^fm<4uEGxcfYsgm#!R6^&UCu-ZdzAaF?^E)IHb;OB!* z@gsPG-fO7VGS@}$lM|SbHW-79j1!T@a(yWv)X!^XxwP`;UoJ~hEwb>EjBrT+mLL_* z;qrsdGuo*`1mD?_u-zrAA&w~sZ!C~kIO8RV$sF|T1PfYTr<}(yT6K z7m(Y@b$FLn^2FXnz?1+(AX0WW%%hxue>!*e*V~TxbqkBT$9PPQBL)yVACWynkO?I4 z1_ph3`^l1D2I#Fd)tg-}n=x)nyvA*cSxCqRDD%z-3&myVo-VhO#ae_qeXpF?i6HXb zgGmlT5_gOM<8BWb+Q+>dy+(CVc!$r_P0C$Jc-iLRF8O+RP0 z+Xh+Gd4PT4h8scM)N)QLJuBiID$-3Vte2883Vy;Sjx&G&T%0K^0`ED-53N;+^*3~# zMh^{L8JgBKxV5=wEfR5&#?GJ&a=;PGU~ySG_3!o;w{#)AX)f7D6iemIQAlU$l^sfx z*RZNuhNU*Cq1;^<*<-hyK_#?VSu?edoJJ3IJoL#??^rVFE2&yf6oMPY6C|;`f9nCs z3|wO*Fze3*brn&FNcK;L3c5dtF0P~Vp(cMYEN&DuFB=k@`m!CwFzes7ZfaVUzME?! z+q+xGZxI&eXGw&am2w$W58aYFWA(*(kAwAey|$Y2-p(s`v$$4?Bgqi2J8+<2@CeBy z0g+u7_WjnCdw8;4OKat(Vv$LZ%;y+F4;=0}9S6T!=bUvkj>Y|M-s;l+9YWn%W0vI- z1y~Vd$Sb(FA(2i%7|A2A6{>Bc@b!vZ86dd6zPXdil1P4QWpx3;l}<{qA1NblLC1Q@ z)nSWLvHsghmf=`Qgh@g&vIRpMCj@U9<$p0;%WJ=6EX{2lym5fS+iESk?;K$8e)kx` z>Gi6NbR_9DF(v)Qubrw%2GZ7(FPXf?06R$>ZzpyL&H&9**VF89vai}2!ZR4VPdRr; z4&nnT8QMr3bB|w4S?uCM-(}k!z?d|Ow*j2E0Jl@shF6p90jV!;6xg(Jn3=W~0(*SC zCzWHliNRI`W1;QZpD6B&-Xqnl{6pdBTg;g1V&z0JMBAZ~2~~o!#xNo(I5;e=&PI8w z9}XW-)BIVd=(m>(4ZWTClI%nV_?u}68-c;wk~8;*O64@jqIrC{V{24vW%FZ-bGAlQ z%geZole^|1a5I65>3kaZdXJAGy1JM=)7>QVyz+$zz_E6d)MfFJo(~;rD*PhbW9g3( z{6w?Tzh<32JN+UVtZp@1sM*=J#cY6;jF#J$-7BJP9OSoQUo&{?#2Pl8r0ZW~vAS(g zYJvs4{{ULHv9vJmPH^GJmPQE12>^p%N%)gMypQ&4(c#oB?d5$+NQ~3DS7_mEZ6FK) z94_#up(CN@zD@C+#l4@8JVo{u-D~DcGP_FZB+Fp2$>SX|c|QEtpMut_x!ESUG&(IN zD@W7X%^n#7#Ej0;1NLNR=jOoco`IN1Lh=r zqXQVPKW1AA7ZTdYW{kxgs-9$TAWg+bd=3WUKZ}lp*2T<=VPXBDCEdN8_fh=mJcrC+ ze}*y1WY6(&z|Txqs?I~Q)1Kc$xM*7Fy2bM>F9G=&##lBu+(uWBaC+vl#lvb-&oqtZ zNp3vQ!-b7Y0NZyDyOJ;f1dvY{Cb2ZXh*Rj-vBmr6j%#&|4ae`1<2!+6BLRH}UU=zH zSa{|u#*@vl32pN%#|^ZC!0zkv?ZG)22A3%e>EaSTpxSfyq6KA5)Cg zuMNt{rO9gy(@SSOt0KEw7F8-+0E}=$RS<~HEGdXtT5&S^&f#R)AU2SZnYZ+d_o)x`7QfuAE3exU7v$TL8 z1Aqq`YckWt8i$$o6_yBZ7v`Ce6XYa$Sk*zu8NdzvT{GUI)nwE4A1+1H?iTvndBvVx zN|$EKZpg^oK#PT|GS(>HAwa42ghVd>Q97#I>%M4Mo0;)j+ZUzZGes5kY7g*PCTT{Nbw~;O5 zGQ2AL!$swTg(`aEj4xx1_02UA+Q+Wmc&AVJjAgQhOUpR4_?@iS;4u)t%L{G5eB^Ei z?%;BAbIJTh)oygH7fF`K$hW?daE{i`{;6=;kdRL7VORh%26}Ov-7myRHk7M1tn>Y< z-6Xbkkh;681!XIbm6<~vVD2bAjV6!cJto6MxzcY{n(F8%DGDk@V5(axByK}8Fxq>S zAoS*A8x+d=Zn>yxGHMdXs7Y6`|^rT4{Qdd26<4%-3^ytcz@mk{pK5 zo4G&(Z{6b~r7U_2XxfpD^p?1p#4-r{!l^8Bsyrk);0YAviRr-Nm^5{Iv~A!IEA1MF zk3O4xMa{IfQhm1JU>;}L{MF;hNfhL+L+3dhRz8Id*NNheNY?7w-s1RKTE%9{Vo99` zmK&*MZJ_Qr3e0)UH^hDzweatW+F>27#+$4~9qcX>%C~z-FwCvbWhWz+P+53VKqswgX&)A*@P4(aTiHGI*B0pPg8VvEYbkIYTS86#+Hp1>AX8MR}q>yXPeuA66Z4g4~r zmD54C^5fg)Awq>t;sBE;AaDq(>324zd1G;Xd3SJxNpRX}yccb0s82qjsoqVfSVFKByelS`IAQy&g~nZQ2^)w3xFF`UZTxP!TYqIq z_H92;)S>e3+U6u?x7wp|5%ay2Fxp!=+s73{MOgJ861JB%v1uKvNi*4Av@$4vlrjRi zEP=QqcS2W;8k;hatKk>>cCOw{s8Bkq;jPI%{UYPGN1H-lxfzH5)N ztE)86GPgNpXC{%Rt-CafB0}>qjxh)^%Bn)Dw*i%QlB?Ho z&wT4@J~^9GQ(+zRTiN+i6oPAXby2l9{`eohRAU2zPqjW#n3mR3MH#iV7Z6Vkutb3y z%QDK!&IjJ$vY`cu;kfTt730-(_+xUvXonJ~mmpZ!p*z=me5;t)@W7MXk}C?@S+t!# zYnwrpxUBocKfa8wP~5eiU=QRK3Vy;u;BTFAotpP z5NNQZjJs>+(seC0R^P~;)psb4K3XRvFC-9MdE^e6_o=*0vrB)v+sn7NRx2QeF&rfB zV$FNv^4c53K4bp$qO8NmaC#}!J`SB6Vi*3nY^|%pu$5q1)xQ_RicKNHC~#!3QIZa|hX_wT3d% zX5Kj2!@}E{8ykwbI4YcV88rPD#4Dt07X(`a6|yQiyoAE7)JfBFsmK`|gN}nDq45IA ztLaln%@3Jw`=gBtr=J)H3y?nd=t1=q>>83Kv?oSeyN%J!YO4}jG_4xXxlYy(!sQ7( z6VUNd*-D>ljuLJ5U0b8%%ytG-^Em@0Fu;;Jb_1Hn*6yaXe=gQ(oWU=Yv7fkP!sIeH z%h-c}GIK_z(rMaih+SGWm1l|2EVmZO%Z87S;pj*_sXeKn<#sl$H94&<51ShKtsIdn z6~S~TAgS+$Bm>ve+Dog?GFfd-B8j5I0gbAygR}$Ln-~E8J!>w>f3vS+ib!LV?6QfF z`GwRB@`PuCeqqnItxvDQ@Lf#ONg%klK2{nN^FqWF1TV@y_6HuFDs(ABQY|&tRW`P8 z+$3`DQNBjlCU2D$OE!Pn8R$6ltuGZ@!=!75$|)m}Vv*t!1XClp7~Fb{j=321tiy3M z33+1BMz-<@W0|E0@C=ai8HQf)#)# z7zdj1TDCD8!dh7Q!@^p0I=mMRs7)T4s?8cZhE38j!XZEp-6Y^(ZYKoekZRybpfL#o1OcKcJfb}S?5v=Bz(P8e4`rQFn)(&Auoj@E?Wzz0NcoE}a5>{FGhWsDoUZpQ%c{V}g>F!z_5i0zl4lkhmS{8}zf8ZG8KytE*{QK;$N3bsQ?^Xj0^z zqZs7zR{T>v#K*~WwrLD+aSBBq$p+Q|nXqu&C>-aU5yb^1bT-mO)yqiU#dK`MDW0q980Q_-Zp@eZ+Wt@ewrwKSKK%L@onL*`(i zVhH51U8|h$BiJbgj_S`un_Dc`aK^~07ScOaX&1`LV#l~RJdxY!OFxIAvXb-3x0t&E zp`mQ7v8$CiIlx`R8%{|eeQPOvL>^nnbiX#%@g1jYc^!^p3=}Xp8&nMO_jthKt!X|b zl6g!hV}>iHWtE&Aq;TAN5y?DvtR-@mhX-+MV*V(zD=n;FKaz48RuDc?TOf>#@yWpAtn1o9aV7G{X=JaDE)gQC?J5KE zIo#cFy*c8uCeU>)0?{nmJ4dtDqFELV+flZ$P{fmgB9KVjMk{C&Q*mx}*)Jkn2wPE` zal~G7rr5!3o?C_7I<`6%iDz#GZ{>wa

{s!#hP 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 C@@_i- literal 0 HcmV?d00001 diff --git a/3D_maze_Game/assets/images/webgl-logo.png b/3D_maze_Game/assets/images/webgl-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..3b1a67f130b0ccd203a96638e228de70f668277a GIT binary patch literal 8155 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 BCIJ8d literal 0 HcmV?d00001 From 5f986c38a54232ab5a0d7283e24c2137f9c567c5 Mon Sep 17 00:00:00 2001 From: Gobinath B Date: Tue, 3 Oct 2023 14:46:25 +0530 Subject: [PATCH 26/71] feat: maps plot points json --- 3D_maze_Game/assets/maps/maze3d-1-mobile.json | 12 ++++++++++++ 3D_maze_Game/assets/maps/maze3d-1.json | 1 + 3D_maze_Game/assets/maps/maze3d-2.json | 1 + 3D_maze_Game/assets/maps/maze3d-3.json | 1 + 3D_maze_Game/assets/maps/maze3d-4.json | 1 + 3D_maze_Game/assets/maps/maze3d-5.json | 1 + 6 files changed, 17 insertions(+) create mode 100644 3D_maze_Game/assets/maps/maze3d-1-mobile.json create mode 100644 3D_maze_Game/assets/maps/maze3d-1.json create mode 100644 3D_maze_Game/assets/maps/maze3d-2.json create mode 100644 3D_maze_Game/assets/maps/maze3d-3.json create mode 100644 3D_maze_Game/assets/maps/maze3d-4.json create mode 100644 3D_maze_Game/assets/maps/maze3d-5.json diff --git a/3D_maze_Game/assets/maps/maze3d-1-mobile.json b/3D_maze_Game/assets/maps/maze3d-1-mobile.json new file mode 100644 index 0000000..1de8303 --- /dev/null +++ b/3D_maze_Game/assets/maps/maze3d-1-mobile.json @@ -0,0 +1,12 @@ +[[2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2], +[2, 2, 1, 1, 2, 2, 2, 2, 2, 1, 1, 2], +[2, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 2], +[2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2], +[2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2], +[2, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 2], +[2, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 2], +[2, 2, 1, 1, 2, 2, 2, 2, 2, 1, 1, 2], +[2, 2, 1, 1, 2, 2, 2, 2, 2, 1, 1, 2], +[2, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 2], +[2, 1, 'A', 1, 1, 2, 2, 2, 1, 'D', 1, 2], +[2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]] \ No newline at end of file diff --git a/3D_maze_Game/assets/maps/maze3d-1.json b/3D_maze_Game/assets/maps/maze3d-1.json new file mode 100644 index 0000000..954dbce --- /dev/null +++ b/3D_maze_Game/assets/maps/maze3d-1.json @@ -0,0 +1 @@ +[[2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2],[2,1,1,1,1,1,1,1,1,1,1,2,1,2,2,2],[2,1,2,1,2,1,2,2,1,2,1,1,1,1,"D",2],[2,2,2,2,2,1,2,2,1,2,2,2,1,2,1,2],[2,1,1,1,1,1,1,2,2,2,1,2,1,2,1,2],[2,1,2,2,2,2,1,1,2,1,1,2,1,2,1,2],[2,1,1,1,2,2,1,2,2,2,1,2,1,2,1,2],[2,2,2,1,2,2,1,2,2,2,1,1,1,1,1,2],[2,1,1,1,2,1,1,1,1,2,2,1,2,2,2,2],[2,1,2,2,2,2,1,2,2,2,1,1,1,2,2,2],[2,1,2,2,1,2,2,2,2,1,1,2,1,1,2,2],[2,1,2,2,1,2,2,2,2,1,2,2,2,1,1,2],[2,1,2,2,1,2,2,2,2,1,2,2,2,1,2,2],[2,1,1,1,1,2,2,2,2,1,1,2,1,1,2,2],[2,2,1,2,1,1,"A",2,2,2,1,2,1,2,2,2],[2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2]] \ No newline at end of file diff --git a/3D_maze_Game/assets/maps/maze3d-2.json b/3D_maze_Game/assets/maps/maze3d-2.json new file mode 100644 index 0000000..2773d33 --- /dev/null +++ b/3D_maze_Game/assets/maps/maze3d-2.json @@ -0,0 +1 @@ +[[2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,2,2,1,1,1,2,2,2,1,1,2],[2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,1,1,1,2,2,1,1,1,1,1,2,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,1,2,1,1,1,2,2,1,1,1,2,1,2,1,1,2],[2,1,1,2,1,1,2,2,2,2,2,2,1,1,1,1,1,1,1,2,1,2,1,1,1,1,1,1,1,1,2,1,2,1,1,2],[2,1,2,2,1,2,2,1,2,1,2,2,2,2,1,1,1,1,1,2,"A",2,1,1,1,1,1,1,1,1,2,1,1,1,1,2],[2,1,2,2,1,2,1,1,1,1,1,1,1,2,1,1,1,1,1,2,2,2,1,2,2,2,2,2,2,2,2,1,1,1,1,2],[2,1,2,2,1,2,1,1,1,1,1,1,1,2,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,1,1,2,1,2,1,1,1,1,1,1,1,2,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2],[2,2,1,2,1,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,1,1,1,1,2],[2,2,1,2,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,1,1,1,1,2],[2,1,1,2,1,1,1,1,2,1,2,2,2,2,2,1,1,1,1,2,2,1,1,1,1,1,2,1,1,1,1,1,1,1,1,2],[2,2,1,2,2,2,2,2,2,1,2,2,2,2,2,1,1,1,1,2,2,1,1,1,1,1,2,1,1,1,1,1,1,1,1,2],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,2,2,1,1,1,1,2],[2,2,2,2,1,2,2,2,2,1,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,2,1,1,2,2,1,1,1,1,2],[2,1,1,2,1,2,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,2,2,2,1,2],[2,1,2,2,1,2,1,2,1,1,1,1,1,2,2,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,2,2,1,2],[2,1,1,2,1,1,1,2,1,1,1,1,1,2,2,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,2,1,1,2],[2,1,1,2,1,2,1,2,1,1,1,1,1,2,2,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,2,1,1,2],[2,1,1,2,1,2,1,2,1,1,1,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,2],[2,1,1,2,1,2,1,2,1,1,1,1,1,2,2,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,2,1,1,2],[2,1,1,2,1,2,1,2,2,2,1,2,2,2,2,2,2,2,1,2,2,2,1,1,1,1,1,"D",1,1,1,1,2,1,1,2],[2,1,1,1,1,2,1,1,1,2,1,1,1,1,1,1,1,1,1,2,2,2,1,1,1,1,1,1,1,1,1,1,2,1,1,2],[2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2]] \ No newline at end of file diff --git a/3D_maze_Game/assets/maps/maze3d-3.json b/3D_maze_Game/assets/maps/maze3d-3.json new file mode 100644 index 0000000..eaf84b2 --- /dev/null +++ b/3D_maze_Game/assets/maps/maze3d-3.json @@ -0,0 +1 @@ +[[2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2],[2,1,1,2,1,1,1,1,1,2,1,1,1,1,1,1,2,1,2,1,1,1,1,1,1,1,1,2,1,1,1,2],[2,2,1,1,1,2,2,2,1,2,2,1,2,1,2,1,2,1,1,1,2,1,2,2,2,2,1,2,1,2,1,2],[2,2,1,2,2,1,1,2,1,2,1,1,2,2,1,1,2,2,2,1,2,1,1,1,1,1,2,2,1,2,"A",2],[2,2,1,2,1,1,1,2,1,2,2,1,2,2,1,2,2,1,2,1,2,2,2,2,1,2,1,2,1,1,2,2],[2,1,2,2,2,2,1,2,1,2,1,1,2,2,1,1,2,1,2,1,1,1,1,2,1,1,1,2,1,2,1,2],[2,1,1,2,1,1,1,2,1,2,2,1,2,2,2,1,2,1,2,2,1,2,1,2,2,2,1,1,1,2,1,2],[2,2,1,1,1,2,2,2,1,1,1,1,2,2,2,1,1,1,1,2,1,2,1,1,1,1,2,2,1,2,1,2],[2,1,2,2,1,2,1,1,2,2,2,2,1,1,2,2,1,2,1,2,2,2,1,2,2,1,2,2,1,1,1,2],[2,"D",1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,2,1,1,1,1,1,2,1,2],[2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2]] \ No newline at end of file diff --git a/3D_maze_Game/assets/maps/maze3d-4.json b/3D_maze_Game/assets/maps/maze3d-4.json new file mode 100644 index 0000000..92f3541 --- /dev/null +++ b/3D_maze_Game/assets/maps/maze3d-4.json @@ -0,0 +1 @@ +[[2,2,2,2,2,2,2,2,2,2,2,2],["A",1,1,1,1,1,1,1,1,1,1,2],[2,1,2,2,2,2,1,2,2,2,1,2],[2,1,1,1,1,1,1,1,1,1,1,2],[2,1,2,2,2,2,1,2,2,2,1,2],[2,1,2,2,2,2,1,2,2,2,1,2],[2,1,2,2,2,2,1,2,2,2,1,2],[2,1,2,2,2,2,1,2,2,2,1,2],[2,1,1,1,1,1,1,1,1,1,1,2],[2,1,2,2,2,2,1,2,2,2,1,2],[2,1,1,1,1,1,"D",1,1,1,1,2],[2,2,2,2,2,2,2,2,2,2,2,2]] \ No newline at end of file diff --git a/3D_maze_Game/assets/maps/maze3d-5.json b/3D_maze_Game/assets/maps/maze3d-5.json new file mode 100644 index 0000000..dbe6a1a --- /dev/null +++ b/3D_maze_Game/assets/maps/maze3d-5.json @@ -0,0 +1 @@ +[[2,2,2,2,2,2,2,2,2,2],[2,1,2,1,2,1,2,1,1,2],[2,1,2,1,2,1,2,1,2,2],[2,1,2,1,2,1,2,1,2,2],[2,1,1,1,2,1,1,1,1,2],[2,1,2,1,1,"D",1,1,2,2],[2,1,2,1,2,2,1,2,1,2],[2,1,2,2,2,2,1,1,1,2],[2,1,1,1,1,2,1,2,1,2],[2,2,2,1,2,2,1,2,1,2],[2,1,1,1,2,1,1,2,1,2],[2,1,2,1,2,1,1,2,1,2],[2,1,1,1,2,1,2,2,1,2],[2,1,2,1,2,1,2,1,1,2],[2,1,2,1,2,1,2,1,2,2],[2,1,1,1,2,1,2,2,1,2],[2,1,1,1,2,1,1,1,1,2],[2,1,2,2,1,2,1,2,1,2],[2,1,2,"A",2,1,2,2,1,2],[2,1,2,1,1,1,1,1,1,2],[2,1,2,2,1,1,1,1,1,2],[2,1,2,1,1,1,1,1,1,2],[2,1,2,2,2,2,2,2,2,2],[2,1,1,1,1,1,1,1,1,2],[2,2,2,2,2,2,2,2,2,2]] \ No newline at end of file From 8c0d68ddfcabca0844f29720061968602daa435a Mon Sep 17 00:00:00 2001 From: Gobinath B Date: Tue, 3 Oct 2023 14:46:47 +0530 Subject: [PATCH 27/71] feat: three js files --- .../assets/js/Demonixis.GameHelper.js | 42 + 3D_maze_Game/assets/js/Demonixis.Input.js | 379 ++++++++ 3D_maze_Game/assets/js/Demonixis.Minimap.js | 71 ++ 3D_maze_Game/assets/js/maze3d.js | 319 +++++++ 3D_maze_Game/assets/js/three.min.js | 838 ++++++++++++++++++ 5 files changed, 1649 insertions(+) create mode 100644 3D_maze_Game/assets/js/Demonixis.GameHelper.js create mode 100644 3D_maze_Game/assets/js/Demonixis.Input.js create mode 100644 3D_maze_Game/assets/js/Demonixis.Minimap.js create mode 100644 3D_maze_Game/assets/js/maze3d.js create mode 100644 3D_maze_Game/assets/js/three.min.js diff --git a/3D_maze_Game/assets/js/Demonixis.GameHelper.js b/3D_maze_Game/assets/js/Demonixis.GameHelper.js new file mode 100644 index 0000000..1b8f790 --- /dev/null +++ b/3D_maze_Game/assets/js/Demonixis.GameHelper.js @@ -0,0 +1,42 @@ +var Demonixis = window.Demonixis || {}; +Demonixis.GameHelper = Demonixis.GameHelper || {}; + +Demonixis.GameHelper.LevelHelper = function(start, end) { + this.current = start || 1; + this.next = this.current + 1; + this.count = end || 5; + this.isFinished = false; + + this.getNext = function() { + if (this.next > this.count) { + this.current = 1; + this.next = 2; + this.isFinished = true; + } else { + this.current = this.next; + this.next++; + } + + return this.current; + } +}; + +Demonixis.GameHelper.CameraHelper = function(camera) { + this.translation = 5; + this.rotation = 0.035; + this.origin = { + position: { + x: 0, + y: 0, + z: 0, + mapX: 0, + mapY: 0, + mapZ: 0 + }, + x: 0, + y: 0, + z: 0 + }; + + this.camera = camera; +}; \ No newline at end of file diff --git a/3D_maze_Game/assets/js/Demonixis.Input.js b/3D_maze_Game/assets/js/Demonixis.Input.js new file mode 100644 index 0000000..70779d8 --- /dev/null +++ b/3D_maze_Game/assets/js/Demonixis.Input.js @@ -0,0 +1,379 @@ +/** @namespace */ +var Demonixis = Demonixis || {}; + +Demonixis.Input = function() { + this.keys = { + up: false, + down: false, + left: false, + right: false, + space: false, + enter: false, + control: false, + alt: false, + shift: false, + num_0: false, + num_1: false, + num_2: false, + num_3: false, + num_4: false, + num_5: false, + num_6: false, + num_7: false, + num_8: false, + num_9: false, + a: false, + b: false, + c: false, + d: false, + e: false, + f: false, + g: false, + h: false, + i: false, + j: false, + k: false, + l: false, + m: false, + n: false, + o: false, + p: false, + q: false, + r: false, + s: false, + t: false, + u: false, + v: false, + w: false, + x: false, + y: false, + z: false, + k_0: false, + k_1: false, + k_2: false, + k_3: false, + k_4: false, + k_5: false, + k_6: false, + k_7: false, + k_8: false, + k_9: false + }; + + this.keyboardState = { + current: null, + last: null + }; + + this.joykeys = { + up: false, + down: false, + left: false, + right: false, + upLeft: false, + upRight: false, + downLeft: false, + downRight: false, + actionA: false, + actionB: false, + actionC: false, + actionX: false, + actionY: false, + actionZ: false, + triggerL: false, + triggerR: false, + start: false, + select: false + }; + + this.joykeyState = { + current: null, + last: null + }; + + var _this = this; + + // Clavier + this._onKeyboardDown = function(event) { + _this._onKeyStateChange(event, true); + }; + + this._onKeyboardUp = function(event) { + _this._onKeyStateChange(event, false); + }; + + document.addEventListener('keydown', this._onKeyboardDown, false); + document.addEventListener('keyup', this._onKeyboardUp, false); + + // Joystick virtuel + this.virtualJoyKeys = document.getElementsByClassName("joykey"); + + this._onJoykeyDown = function(event) { + _this._onJoykeyStateChange(event, true); + }; + + this._onJoykeyUp = function(event) { + _this._onJoykeyStateChange(event, false); + }; + + for (var i = 0, l = this.virtualJoyKeys.length; i < l; i++) { + this.virtualJoyKeys[i].addEventListener("mousedown", this._onJoykeyDown, false); + this.virtualJoyKeys[i].addEventListener("mouseup", this._onJoykeyUp, false); + this.virtualJoyKeys[i].addEventListener("touchstart", this._onJoykeyDown, false); + this.virtualJoyKeys[i].addEventListener("touchend", this._onJoykeyUp, false); + } +}; + +Demonixis.Input.prototype.destroy = function() { + document.removeEventListener('keydown', this._onKeyboardDown, false); + document.removeEventListener('keyup', this._onKeyboardUp, false); + + for (var i = 0, l = this.virtualJoyKeys.length; i < l; i++) { + this.virtualJoyKeys[i].removeEventListener("mousedown", this._onJoykeyDown, false); + this.virtualJoyKeys[i].removeEventListener("mouseup", this._onJoykeyUp, false); + this.virtualJoyKeys[i].removeEventListener("touchstart", this._onJoykeyDown, false); + this.virtualJoyKeys[i].removeEventListener("touchend", this._onJoykeyUp, false); + } +}; + +Demonixis.Input.prototype._onKeyStateChange = function(event, pressed) { + event.preventDefault(); + + switch (event.keyCode) { + case 13: + this.keys.enter = pressed; + break; // Entrer + case 16: + this.keys.shift = pressed; + break; // Shift + case 17: + this.keys.control = pressed; + break; // Control + case 18: + this.keys.alt = pressed; + break; // Alt + case 32: + this.keys.space = pressed; + break; // Espace + case 37: + this.keys.left = pressed; + break; // Gauche + case 38: + this.keys.up = pressed; + break; // Haut + case 39: + this.keys.right = pressed; + break; // Droite + case 40: + this.keys.down = pressed; + break; // Bas + case 48: + this.keys.k_0 = pressed; + break; // Touche 0 + case 49: + this.keys.k_1 = pressed; + break; // Touche 1 + case 50: + this.keys.k_2 = pressed; + break; // Touche 2 + case 51: + this.keys.k_3 = pressed; + break; // Touche 3 + case 52: + this.keys.k_4 = pressed; + break; // Touche 4 + case 53: + this.keys.k_5 = pressed; + break; // Touche 5 + case 54: + this.keys.k_6 = pressed; + break; // Touche 6 + case 55: + this.keys.k_7 = pressed; + break; // Touche 7 + case 56: + this.keys.k_8 = pressed; + break; // Touche 8 + case 57: + this.keys.k_9 = pressed; + break; // Touche 9 + case 65: + this.keys.a = pressed; + break; // Touche A + case 65: + this.keys.b = pressed; + break; // Touche B + case 65: + this.keys.c = pressed; + break; // Touche C + case 68: + this.keys.d = pressed; + break; // Touchd D + case 69: + this.keys.e = pressed; + break; // Touche E + case 70: + this.keys.f = pressed; + break; // Touche F + case 71: + this.keys.g = pressed; + break; // Touche F + case 72: + this.keys.h = pressed; + break; // Touche F + case 73: + this.keys.i = pressed; + break; // Touche F + case 74: + this.keys.j = pressed; + break; // Touche F + case 75: + this.keys.k = pressed; + break; // Touche F + case 76: + this.keys.l = pressed; + break; // Touche F + case 77: + this.keys.m = pressed; + break; // Touche F + case 78: + this.keys.n = pressed; + break; // Touche F + case 79: + this.keys.o = pressed; + break; // Touche F + case 80: + this.keys.p = pressed; + break; // Touche F + case 81: + this.keys.q = pressed; + break; // Touche Q + case 82: + this.keys.r = pressed; + break; // Touche R + case 83: + this.keys.s = pressed; + break; // Touche S + case 84: + this.keys.t = pressed; + break; // Touche T + case 85: + this.keys.u = pressed; + break; // Touche U + case 86: + this.keys.v = pressed; + break; // Touche V + case 87: + this.keys.w = pressed; + break; // Touche W + case 88: + this.keys.x = pressed; + break; // Touche X + case 89: + this.keys.y = pressed; + break; // Touche Y + case 90: + this.keys.z = pressed; + break; // Touche Z + case 96: + this.keys.num_0 = pressed; + break; // Pad 0 + case 97: + this.keys.num_1 = pressed; + break; // Pad 1 + case 98: + this.keys.num_2 = pressed; + break; // Pad 2 + case 99: + this.keys.num_3 = pressed; + break; // Pad 3 + case 100: + this.keys.num_4 = pressed; + break; // Pad 4 + case 101: + this.keys.num_5 = pressed; + break; // Pad 5 + case 102: + this.keys.num_6 = pressed; + break; // Pad 6 + case 103: + this.keys.num_7 = pressed; + break; // Pad 7 + case 104: + this.keys.num_8 = pressed; + break; // Pad 8 + case 105: + this.keys.num_9 = pressed; + break; // Pad 9 + } +}; + +Demonixis.Input.prototype._onJoykeyStateChange = function(event, pressed) { + event.preventDefault(); + var id = event.currentTarget.id; + + switch (id) { + case "keyup": + this.joykeys.up = pressed; + break; + case "keydown": + this.joykeys.down = pressed; + break; + case "keyleft": + this.joykeys.left = pressed; + break; + case "keyright": + this.joykeys.right = pressed; + break; + + case "keyUpLeft": + this.joykeys.upLeft = pressed; + break; + case "keyUpRight": + this.joykeys.upRight = pressed; + break; + case "keyDownLeft": + this.joykeys.downLeft = pressed; + break; + case "keyDownRight": + this.joykeys.downRight = pressed; + break; + + case "keyActionA": + this.joykeys.A = pressed; + break; + case "keyActionB": + this.joykeys.B = pressed; + break; + case "keyActionC": + this.joykeys.C = pressed; + break; + case "keyActionX": + this.joykeys.X = pressed; + break; + case "keyActionY": + this.joykeys.Y = pressed; + break; + case "keyActionZ": + this.joykeys.Z = pressed; + break; + + case "keyTriggerL": + this.joykeys.triggerL = pressed; + break; + case "keyTriggerR": + this.joykeys.triggerR = pressed; + break; + + case "keyButtonStart": + this.joykeys.start = pressed; + break; + case "keyButtonSelect": + this.joykeys.select = pressed; + break; + } +}; + +Demonixis.Input.prototype.pressed = function(key) { + return this.keys[key]; +}; \ No newline at end of file diff --git a/3D_maze_Game/assets/js/Demonixis.Minimap.js b/3D_maze_Game/assets/js/Demonixis.Minimap.js new file mode 100644 index 0000000..bdc6a1f --- /dev/null +++ b/3D_maze_Game/assets/js/Demonixis.Minimap.js @@ -0,0 +1,71 @@ +var Demonixis = window.Demonixis || {}; +Demonixis.Gui = Demonixis.Gui || {}; + +Demonixis.Gui.MiniMap = function(width, height, parent) { + this.parent = parent; + this.width = width; + this.height = height; + this.blockSize = { + width: 5, + height: 5 + }; + + this.playerPosition = { + x: 0, + y: 0 + }; + + this.miniMap = document.createElement("canvas"); + this.ctx = this.miniMap.getContext("2d"); + + this.create = function(top, left, position, border) { + var stylePosition = "position:absolute;"; + var styleTop = (top || "10") + "px;"; + var styleLeft = (left || "10") + "px;"; + var styleBorder = (border || "1px solid black") + ";"; + + this.miniMap.setAttribute("width", this.width * this.blockSize.width); + this.miniMap.setAttribute("height", this.height * this.blockSize.height); + this.miniMap.setAttribute("id", "miniMap"); + this.miniMap.setAttribute("style", stylePosition + "top:" + styleTop + "left:" + styleLeft + styleBorder); + + var domElement = document.getElementById(this.parent); + if (domElement[0] != "undefined") { + domElement.removeChild[domElement[0]]; + } + domElement.appendChild(this.miniMap); + }; + + this.draw = function(x, y, id) { + if (id == 1) { + this.ctx.fillStyle = "white"; + } else if (id == 'D') { + this.ctx.fillStyle = "red"; + this.playerPosition = { + x: x, + y: y + }; + } else if (id == 'J') { + this.ctx.fillStype = "yellow"; + } else if (id == 'A') { + this.ctx.fillStyle = "blue"; + } else { + this.ctx.fillStyle = "rgb(200, 200, 200)"; + } + + this.ctx.fillRect(x * 5, y * 5, 5, 5); + }; + + this.update = function(newPlayerPosition) { + this.ctx.fillStyle = "white"; + this.ctx.fillRect(this.playerPosition.x * this.blockSize.width, this.playerPosition.y * this.blockSize.height, this.blockSize.width, this.blockSize.height); + this.ctx.fillStyle = "red"; + this.ctx.fillRect(newPlayerPosition.x * this.blockSize.width, newPlayerPosition.y * this.blockSize.height, this.blockSize.width, this.blockSize.height); + this.playerPosition = newPlayerPosition; + }; + + this.drawAt = function(x, y, color) { + this.ctx.fillStyle = color; + this.ctx.fillRect(x * this.blockSize.width, y * this.blockSize.height, this.blockSize.width, this.blockSize.height); + }; +}; \ No newline at end of file diff --git a/3D_maze_Game/assets/js/maze3d.js b/3D_maze_Game/assets/js/maze3d.js new file mode 100644 index 0000000..c54d001 --- /dev/null +++ b/3D_maze_Game/assets/js/maze3d.js @@ -0,0 +1,319 @@ +(function() { + var width = window.innerWidth * 0.995; + var height = window.innerHeight * 0.995; + var canvasContainer = document.getElementById("canvasContainer"); + var renderer, camera, scene; + var input, miniMap, levelHelper, CameraHelper; + var map = new Array(); + var running = true; + + function initializeEngine() { + renderer = new THREE.WebGLRenderer({ + antialias: true + }); + + renderer.setSize(width, height); + renderer.clear(); + + scene = new THREE.Scene(); + scene.fog = new THREE.Fog(0x777777, 25, 1000); + + camera = new THREE.PerspectiveCamera(45, width / height, 1, 10000); + camera.position.y = 50; + + document.getElementById("canvasContainer").appendChild(renderer.domElement); + + input = new Demonixis.Input(); + levelHelper = new Demonixis.GameHelper.LevelHelper(); + cameraHelper = new Demonixis.GameHelper.CameraHelper(camera); + + window.addEventListener("resize", function() { + renderer.setSize(window.innerWidth, window.innerHeight); + }); + + var messageContainer = document.createElement("div"); + messageContainer.style.position = "absolute"; + messageContainer.style.backgroundColor = "#666"; + messageContainer.style.border = "1px solid #333"; + + var message = document.createElement("h1"); + message.innerHTML = "Use Up/Down/Left/Right arrows or the virtual pad to move and rotate the camera"; + message.style.textAlign = "center"; + message.style.color = "#ddd"; + message.style.padding = "15px"; + messageContainer.appendChild(message); + + document.body.appendChild(messageContainer); + + messageContainer.style.left = (window.innerWidth / 2 - messageContainer.offsetWidth / 2) + "px"; + messageContainer.style.top = (window.innerHeight / 2 - messageContainer.offsetHeight / 2) + "px"; + + var timer = setTimeout(function() { + clearTimeout(timer); + document.body.removeChild(messageContainer); + }, 3500); + } + + function initializeScene() { + miniMap = new Demonixis.Gui.MiniMap(map[0].length, map.length, "canvasContainer"); + miniMap.create(); + + var loader = new THREE.TextureLoader(); + var platformWidth = map[0].length * 100; + var platformHeight = map.length * 100; + + var floorGeometry = new THREE.BoxGeometry(platformWidth, 5, platformHeight); + var ground = new THREE.Mesh(floorGeometry, new THREE.MeshPhongMaterial({ + map: loader.load("assets/images/textures/ground_diffuse.jpg"), + })); + + repeatTexture(ground.material.map, 2); + + ground.position.set(-50, 1, -50); + scene.add(ground); + + var topMesh = new THREE.Mesh(floorGeometry, new THREE.MeshPhongMaterial({ + map: loader.load("assets/images/textures/roof_diffuse.jpg") + })); + + repeatTexture(topMesh.material.map, 16); + + topMesh.position.set(-50, 100, -50); + scene.add(topMesh); + + var size = { + x: 100, + y: 100, + z: 100 + }; + + var position = { + x: 0, + y: 0, + z: 0 + }; + + var wallGeometry = new THREE.BoxGeometry(size.x, size.y, size.z); + var wallMaterial = new THREE.MeshPhongMaterial({ + map: loader.load("assets/images/textures/wall_diffuse.jpg") + }); + + repeatTexture(wallMaterial.map, 2); + + // Map generation + for (var y = 0, ly = map.length; y < ly; y++) { + for (var x = 0, lx = map[x].length; x < lx; x++) { + position.x = -platformWidth / 2 + size.x * x; + position.y = 50; + position.z = -platformHeight / 2 + size.z * y; + + if (x == 0 && y == 0) { + cameraHelper.origin.x = position.x; + cameraHelper.origin.y = position.y; + cameraHelper.origin.z = position.z; + } + + if (map[y][x] > 1) { + var wall3D = new THREE.Mesh(wallGeometry, wallMaterial); + wall3D.position.set(position.x, position.y, position.z); + scene.add(wall3D); + } + + if (map[y][x] === "D") { + camera.position.set(position.x, position.y, position.z); + cameraHelper.origin.position.x = position.x; + cameraHelper.origin.position.y = position.y; + cameraHelper.origin.position.z = position.z; + cameraHelper.origin.position.mapX = x; + cameraHelper.origin.position.mapY = y; + cameraHelper.origin.position.mapZ = 0; + } + + miniMap.draw(x, y, map[y][x]); + } + } + + // Lights + var directionalLight = new THREE.HemisphereLight(0x192F3F, 0x28343A, 2); + directionalLight.position.set(1, 1, 0); + scene.add(directionalLight); + } + + function update() { + if (input.keys.up) { + moveCamera("up"); + } else if (input.keys.down) { + moveCamera("down"); + } + + if (input.keys.left) { + moveCamera("left"); + } else if (input.keys.right) { + moveCamera("right"); + } + + // Virtual pad + var params = { + rotation: 0.05, + translation: 5 + }; + + if (input.joykeys.up) { + moveCamera("up", params); + } else if (input.joykeys.down) { + moveCamera("down", params); + } + + if (input.joykeys.left) { + moveCamera("left", params); + } else if (input.joykeys.right) { + moveCamera("right", params); + } + } + + function draw() { + renderer.render(scene, camera); + } + + function moveCamera(direction, delta) { + var collides = false; + var position = { + x: camera.position.x, + z: camera.position.z + }; + var rotation = camera.rotation.y; + var offset = 50; + + var moveParamaters = { + translation: (typeof delta != "undefined") ? delta.translation : cameraHelper.translation, + rotation: (typeof delta != "undefined") ? delta.rotation : cameraHelper.rotation + }; + + switch (direction) { + case "up": + position.x -= Math.sin(-camera.rotation.y) * -moveParamaters.translation; + position.z -= Math.cos(-camera.rotation.y) * moveParamaters.translation; + break; + case "down": + position.x -= Math.sin(camera.rotation.y) * -moveParamaters.translation; + position.z += Math.cos(camera.rotation.y) * moveParamaters.translation; + break; + case "left": + rotation += moveParamaters.rotation; + break; + case "right": + rotation -= moveParamaters.rotation; + break; + } + + // Current position on the map + var tx = Math.abs(Math.floor(((cameraHelper.origin.x + (camera.position.x * -1)) / 100))); + var ty = Math.abs(Math.floor(((cameraHelper.origin.z + (camera.position.z * -1)) / 100))); + + // next position + var newTx = Math.abs(Math.floor(((cameraHelper.origin.x + (position.x * -1) + (offset)) / 100))); + var newTy = Math.abs(Math.floor(((cameraHelper.origin.z + (position.z * -1) + (offset)) / 100))); + + // Stay on the map + if (newTx >= map[0].length) { + newTx = map[0].length; + } + if (newTx < 0) { + newTx = 0; + } + if (newTy >= map.length) { + newTy = map.length; + } + if (newTy < 0) { + newTy = 0; + } + + if (map[newTy][newTx] != 1 && !isNaN(map[newTy][newTx])) { + collides = true; + } else if (map[newTy][newTx] == "A") { + // Game is over + running = false; + } + + if (collides == false) { + camera.rotation.y = rotation; + camera.position.x = position.x; + camera.position.z = position.z; + + miniMap.update({ + x: newTx, + y: newTy + }); + } else { + document.getElementById("bumpSound").play(); + } + } + + function mainLoop(time) { + if (running) { + update(); + draw(); + window.requestAnimationFrame(mainLoop, renderer.domElement); + } else { + endScreen(); + } + } + + function endScreen() { + if (levelHelper.isFinished || levelHelper.isMobile) { + alert("Good job, The game is over\n\nThanks you for playing!"); + document.location.href = "https://plus.google.com/u/0/114532615363095107351/posts"; + } else { + // Remove all childrens. + for (var i = 0, l = scene.children.length; i < l; i++) { + scene.remove(scene.children[i]); + } + renderer.clear(); + scene = new THREE.Scene(); + loadLevel(levelHelper.getNext()); + running = true; + } + } + + // Level loading + function loadLevel(level) { + var ajax = new XMLHttpRequest(); + ajax.open("GET", "assets/maps/maze3d-" + level + ".json", true); + ajax.onreadystatechange = function() { + if (ajax.readyState == 4) { + map = JSON.parse(ajax.responseText); + launch(); + } + } + ajax.send(null); + } + + function repeatTexture(texture, size) { + texture.wrapS = THREE.RepeatWrapping; + texture.wrapT = THREE.RepeatWrapping; + texture.repeat.x = size; + texture.repeat.y = size; + return texture; + } + + // Game starting + function launch() { + initializeScene(); + mainLoop(); + } + + window.onload = function() { + initializeEngine(); + + var level = 1; // Get parameter + if (level > 0 || level <= levelHelper.count) { + levelHelper.current = level; + levelHelper.next = level + 1; + loadLevel(level); + } else { + levelHelper.current = 1; + levelHelper.next = 2; + loadLevel(1); + } + }; +})(); \ No newline at end of file diff --git a/3D_maze_Game/assets/js/three.min.js b/3D_maze_Game/assets/js/three.min.js new file mode 100644 index 0000000..47cb69e --- /dev/null +++ b/3D_maze_Game/assets/js/three.min.js @@ -0,0 +1,838 @@ +// threejs.org/license +(function(l,sa){"object"===typeof exports&&"undefined"!==typeof module?sa(exports):"function"===typeof define&&define.amd?define(["exports"],sa):sa(l.THREE=l.THREE||{})})(this,function(l){function sa(){}function B(a,b){this.x=a||0;this.y=b||0}function da(a,b,c,d,e,f,g,h,k,m){Object.defineProperty(this,"id",{value:ee++});this.uuid=T.generateUUID();this.sourceFile=this.name="";this.image=void 0!==a?a:da.DEFAULT_IMAGE;this.mipmaps=[];this.mapping=void 0!==b?b:da.DEFAULT_MAPPING;this.wrapS=void 0!==c? +c:1001;this.wrapT=void 0!==d?d:1001;this.magFilter=void 0!==e?e:1006;this.minFilter=void 0!==f?f:1008;this.anisotropy=void 0!==k?k:1;this.format=void 0!==g?g:1023;this.type=void 0!==h?h:1009;this.offset=new B(0,0);this.repeat=new B(1,1);this.generateMipmaps=!0;this.premultiplyAlpha=!1;this.flipY=!0;this.unpackAlignment=4;this.encoding=void 0!==m?m:3E3;this.version=0;this.onUpdate=null}function ga(a,b,c,d){this.x=a||0;this.y=b||0;this.z=c||0;this.w=void 0!==d?d:1}function Db(a,b,c){this.uuid=T.generateUUID(); +this.width=a;this.height=b;this.scissor=new ga(0,0,a,b);this.scissorTest=!1;this.viewport=new ga(0,0,a,b);c=c||{};void 0===c.minFilter&&(c.minFilter=1006);this.texture=new da(void 0,void 0,c.wrapS,c.wrapT,c.magFilter,c.minFilter,c.format,c.type,c.anisotropy,c.encoding);this.depthBuffer=void 0!==c.depthBuffer?c.depthBuffer:!0;this.stencilBuffer=void 0!==c.stencilBuffer?c.stencilBuffer:!0;this.depthTexture=void 0!==c.depthTexture?c.depthTexture:null}function Eb(a,b,c){Db.call(this,a,b,c);this.activeMipMapLevel= +this.activeCubeFace=0}function ba(a,b,c,d){this._x=a||0;this._y=b||0;this._z=c||0;this._w=void 0!==d?d:1}function q(a,b,c){this.x=a||0;this.y=b||0;this.z=c||0}function J(){this.elements=new Float32Array([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]);0= +d||0 0 ) {\nfloat depth = gl_FragCoord.z / gl_FragCoord.w;\nfloat fogFactor = 0.0;\nif ( fogType == 1 ) {\nfogFactor = smoothstep( fogNear, fogFar, depth );\n} else {\nconst float LOG2 = 1.442695;\nfogFactor = exp2( - fogDensity * fogDensity * depth * depth * LOG2 );\nfogFactor = 1.0 - clamp( fogFactor, 0.0, 1.0 );\n}\ngl_FragColor = mix( gl_FragColor, vec4( fogColor, gl_FragColor.w ), fogFactor );\n}\n}"].join("\n")); +y.compileShader(P);y.compileShader(R);y.attachShader(N,P);y.attachShader(N,R);y.linkProgram(N);M=N;u=y.getAttribLocation(M,"position");v=y.getAttribLocation(M,"uv");c=y.getUniformLocation(M,"uvOffset");d=y.getUniformLocation(M,"uvScale");e=y.getUniformLocation(M,"rotation");f=y.getUniformLocation(M,"scale");g=y.getUniformLocation(M,"color");h=y.getUniformLocation(M,"map");k=y.getUniformLocation(M,"opacity");m=y.getUniformLocation(M,"modelViewMatrix");w=y.getUniformLocation(M,"projectionMatrix");n= +y.getUniformLocation(M,"fogType");p=y.getUniformLocation(M,"fogDensity");r=y.getUniformLocation(M,"fogNear");x=y.getUniformLocation(M,"fogFar");l=y.getUniformLocation(M,"fogColor");D=y.getUniformLocation(M,"alphaTest");N=document.createElementNS("http://www.w3.org/1999/xhtml","canvas");N.width=8;N.height=8;P=N.getContext("2d");P.fillStyle="white";P.fillRect(0,0,8,8);ca=new da(N);ca.needsUpdate=!0}y.useProgram(M);E.initAttributes();E.enableAttribute(u);E.enableAttribute(v);E.disableUnusedAttributes(); +E.disable(y.CULL_FACE);E.enable(y.BLEND);y.bindBuffer(y.ARRAY_BUFFER,H);y.vertexAttribPointer(u,2,y.FLOAT,!1,16,0);y.vertexAttribPointer(v,2,y.FLOAT,!1,16,8);y.bindBuffer(y.ELEMENT_ARRAY_BUFFER,F);y.uniformMatrix4fv(w,!1,Ka.projectionMatrix.elements);E.activeTexture(y.TEXTURE0);y.uniform1i(h,0);P=N=0;(R=q.fog)?(y.uniform3f(l,R.color.r,R.color.g,R.color.b),R&&R.isFog?(y.uniform1f(r,R.near),y.uniform1f(x,R.far),y.uniform1i(n,1),P=N=1):R&&R.isFogExp2&&(y.uniform1f(p,R.density),y.uniform1i(n,2),P=N=2)): +(y.uniform1i(n,0),P=N=0);for(var R=0,S=b.length;R/g,function(a,c){var d=X[c];if(void 0===d)throw Error("Can not resolve #include <"+c+">");return Cd(d)})}function ve(a){return a.replace(/for \( int i \= (\d+)\; i < (\d+)\; i \+\+ \) \{([\s\S]+?)(?=\})\}/g,function(a,c,d,e){a="";for(c=parseInt(c);cb||a.height>b){var c=b/Math.max(a.width,a.height),d=document.createElementNS("http://www.w3.org/1999/xhtml","canvas");d.width=Math.floor(a.width*c);d.height=Math.floor(a.height*c);d.getContext("2d").drawImage(a,0,0,a.width,a.height,0,0,d.width,d.height);console.warn("THREE.WebGLRenderer: image is too big ("+a.width+"x"+a.height+"). Resized to "+d.width+"x"+d.height,a);return d}return a} +function k(a){return T.isPowerOfTwo(a.width)&&T.isPowerOfTwo(a.height)}function m(b){return 1003===b||1004===b||1005===b?a.NEAREST:a.LINEAR}function w(b){b=b.target;b.removeEventListener("dispose",w);a:{var c=d.get(b);if(b.image&&c.__image__webglTextureCube)a.deleteTexture(c.__image__webglTextureCube);else{if(void 0===c.__webglInit)break a;a.deleteTexture(c.__webglTexture)}d["delete"](b)}q.textures--}function n(b){b=b.target;b.removeEventListener("dispose",n);var c=d.get(b),e=d.get(b.texture);if(b){void 0!== +e.__webglTexture&&a.deleteTexture(e.__webglTexture);b.depthTexture&&b.depthTexture.dispose();if(b&&b.isWebGLRenderTargetCube)for(e=0;6>e;e++)a.deleteFramebuffer(c.__webglFramebuffer[e]),c.__webglDepthbuffer&&a.deleteRenderbuffer(c.__webglDepthbuffer[e]);else a.deleteFramebuffer(c.__webglFramebuffer),c.__webglDepthbuffer&&a.deleteRenderbuffer(c.__webglDepthbuffer);d["delete"](b.texture);d["delete"](b)}q.textures--}function p(b,g){var m=d.get(b);if(0x;x++)l[x]=p||n?n?b.image[x].image:b.image[x]:h(b.image[x],e.maxCubemapSize);var t=k(l[0]),u=f(b.format),ja=f(b.type);r(a.TEXTURE_CUBE_MAP, +b,t);for(x=0;6>x;x++)if(p)for(var B,C=l[x].mipmaps,z=0,N=C.length;zm;m++)e.__webglFramebuffer[m]=a.createFramebuffer()}else e.__webglFramebuffer=a.createFramebuffer();if(g){c.bindTexture(a.TEXTURE_CUBE_MAP,f.__webglTexture);r(a.TEXTURE_CUBE_MAP,b.texture,h);for(m=0;6>m;m++)l(e.__webglFramebuffer[m],b,a.COLOR_ATTACHMENT0,a.TEXTURE_CUBE_MAP_POSITIVE_X+m);b.texture.generateMipmaps&&h&&a.generateMipmap(a.TEXTURE_CUBE_MAP);c.bindTexture(a.TEXTURE_CUBE_MAP, +null)}else c.bindTexture(a.TEXTURE_2D,f.__webglTexture),r(a.TEXTURE_2D,b.texture,h),l(e.__webglFramebuffer,b,a.COLOR_ATTACHMENT0,a.TEXTURE_2D),b.texture.generateMipmaps&&h&&a.generateMipmap(a.TEXTURE_2D),c.bindTexture(a.TEXTURE_2D,null);if(b.depthBuffer){e=d.get(b);f=b&&b.isWebGLRenderTargetCube;if(b.depthTexture){if(f)throw Error("target.depthTexture not supported in Cube render targets");if(b&&b.isWebGLRenderTargetCube)throw Error("Depth Texture with cube render targets is not supported!");a.bindFramebuffer(a.FRAMEBUFFER, +e.__webglFramebuffer);if(!b.depthTexture||!b.depthTexture.isDepthTexture)throw Error("renderTarget.depthTexture must be an instance of THREE.DepthTexture");d.get(b.depthTexture).__webglTexture&&b.depthTexture.image.width===b.width&&b.depthTexture.image.height===b.height||(b.depthTexture.image.width=b.width,b.depthTexture.image.height=b.height,b.depthTexture.needsUpdate=!0);p(b.depthTexture,0);e=d.get(b.depthTexture).__webglTexture;if(1026===b.depthTexture.format)a.framebufferTexture2D(a.FRAMEBUFFER, +a.DEPTH_ATTACHMENT,a.TEXTURE_2D,e,0);else if(1027===b.depthTexture.format)a.framebufferTexture2D(a.FRAMEBUFFER,a.DEPTH_STENCIL_ATTACHMENT,a.TEXTURE_2D,e,0);else throw Error("Unknown depthTexture format");}else if(f)for(e.__webglDepthbuffer=[],f=0;6>f;f++)a.bindFramebuffer(a.FRAMEBUFFER,e.__webglFramebuffer[f]),e.__webglDepthbuffer[f]=a.createRenderbuffer(),t(e.__webglDepthbuffer[f],b);else a.bindFramebuffer(a.FRAMEBUFFER,e.__webglFramebuffer),e.__webglDepthbuffer=a.createRenderbuffer(),t(e.__webglDepthbuffer, +b);a.bindFramebuffer(a.FRAMEBUFFER,null)}};this.updateRenderTargetMipmap=function(b){var e=b.texture;e.generateMipmaps&&k(b)&&1003!==e.minFilter&&1006!==e.minFilter&&(b=b&&b.isWebGLRenderTargetCube?a.TEXTURE_CUBE_MAP:a.TEXTURE_2D,e=d.get(e).__webglTexture,c.bindTexture(b,e),a.generateMipmap(b),c.bindTexture(b,null))}}function xf(){var a={};return{get:function(b){b=b.uuid;var c=a[b];void 0===c&&(c={},a[b]=c);return c},"delete":function(b){delete a[b.uuid]},clear:function(){a={}}}}function yf(a,b,c){function d(b, +c,d){var e=new Uint8Array(4),f=a.createTexture();a.bindTexture(b,f);a.texParameteri(b,a.TEXTURE_MIN_FILTER,a.NEAREST);a.texParameteri(b,a.TEXTURE_MAG_FILTER,a.NEAREST);for(b=0;b=ia.maxTextures&&console.warn("WebGLRenderer: trying to use "+a+" texture units while this GPU supports only "+ia.maxTextures);da+=1;return a};this.setTexture2D=function(){var a=!1;return function(b,c){b&&b.isWebGLRenderTarget&&(a||(console.warn("THREE.WebGLRenderer.setTexture2D: don't use render targets as textures. Use their .texture property instead."), +a=!0),b=b.texture);ua.setTexture2D(b,c)}}();this.setTexture=function(){var a=!1;return function(b,c){a||(console.warn("THREE.WebGLRenderer: .setTexture is deprecated, use setTexture2D instead."),a=!0);ua.setTexture2D(b,c)}}();this.setTextureCube=function(){var a=!1;return function(b,c){b&&b.isWebGLRenderTargetCube&&(a||(console.warn("THREE.WebGLRenderer.setTextureCube: don't use cube render targets as textures. Use their .texture property instead."),a=!0),b=b.texture);b&&b.isCubeTexture||Array.isArray(b.image)&& +6===b.image.length?ua.setTextureCube(b,c):ua.setTextureCubeDynamic(b,c)}}();this.getCurrentRenderTarget=function(){return V};this.setRenderTarget=function(a){(V=a)&&void 0===ea.get(a).__webglFramebuffer&&ua.setupRenderTarget(a);var b=a&&a.isWebGLRenderTargetCube,c;a?(c=ea.get(a),c=b?c.__webglFramebuffer[a.activeCubeFace]:c.__webglFramebuffer,X.copy(a.scissor),fb=a.scissorTest,$a.copy(a.viewport)):(c=null,X.copy(ha).multiplyScalar(Qa),fb=la,$a.copy(fa).multiplyScalar(Qa));T!==c&&(A.bindFramebuffer(A.FRAMEBUFFER, +c),T=c);Y.scissor(X);Y.setScissorTest(fb);Y.viewport($a);b&&(b=ea.get(a.texture),A.framebufferTexture2D(A.FRAMEBUFFER,A.COLOR_ATTACHMENT0,A.TEXTURE_CUBE_MAP_POSITIVE_X+a.activeCubeFace,b.__webglTexture,a.activeMipMapLevel))};this.readRenderTargetPixels=function(a,b,c,d,e,f){if(!1===(a&&a.isWebGLRenderTarget))console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");else{var g=ea.get(a).__webglFramebuffer;if(g){var h=!1;g!==T&&(A.bindFramebuffer(A.FRAMEBUFFER, +g),h=!0);try{var k=a.texture,m=k.format,n=k.type;1023!==m&&u(m)!==A.getParameter(A.IMPLEMENTATION_COLOR_READ_FORMAT)?console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format."):1009===n||u(n)===A.getParameter(A.IMPLEMENTATION_COLOR_READ_TYPE)||1015===n&&(ka.get("OES_texture_float")||ka.get("WEBGL_color_buffer_float"))||1016===n&&ka.get("EXT_color_buffer_half_float")?A.checkFramebufferStatus(A.FRAMEBUFFER)===A.FRAMEBUFFER_COMPLETE?0<=b&& +b<=a.width-d&&0<=c&&c<=a.height-e&&A.readPixels(b,c,d,e,u(m),u(n),f):console.error("THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete."):console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.")}finally{h&&A.bindFramebuffer(A.FRAMEBUFFER,T)}}}}}function Ib(a,b){this.name="";this.color=new O(a);this.density=void 0!==b?b:2.5E-4}function Jb(a,b,c){this.name="";this.color= +new O(a);this.near=void 0!==b?b:1;this.far=void 0!==c?c:1E3}function jb(){z.call(this);this.type="Scene";this.overrideMaterial=this.fog=this.background=null;this.autoUpdate=!0}function Ed(a,b,c,d,e){z.call(this);this.lensFlares=[];this.positionScreen=new q;this.customUpdateCallback=void 0;void 0!==a&&this.add(a,b,c,d,e)}function kb(a){U.call(this);this.type="SpriteMaterial";this.color=new O(16777215);this.map=null;this.rotation=0;this.lights=this.fog=!1;this.setValues(a)}function qc(a){z.call(this); +this.type="Sprite";this.material=void 0!==a?a:new kb}function rc(){z.call(this);this.type="LOD";Object.defineProperties(this,{levels:{enumerable:!0,value:[]}})}function lb(a,b,c,d,e,f,g,h,k,m,w,n){da.call(this,null,f,g,h,k,m,d,e,w,n);this.image={data:a,width:b,height:c};this.magFilter=void 0!==k?k:1003;this.minFilter=void 0!==m?m:1003;this.flipY=this.generateMipmaps=!1;this.unpackAlignment=1}function bd(a,b,c){this.useVertexTexture=void 0!==c?c:!0;this.identityMatrix=new J;a=a||[];this.bones=a.slice(0); +this.useVertexTexture?(a=Math.sqrt(4*this.bones.length),a=T.nextPowerOfTwo(Math.ceil(a)),this.boneTextureHeight=this.boneTextureWidth=a=Math.max(a,4),this.boneMatrices=new Float32Array(this.boneTextureWidth*this.boneTextureHeight*4),this.boneTexture=new lb(this.boneMatrices,this.boneTextureWidth,this.boneTextureHeight,1023,1015)):this.boneMatrices=new Float32Array(16*this.bones.length);if(void 0===b)this.calculateInverses();else if(this.bones.length===b.length)this.boneInverses=b.slice(0);else for(console.warn("THREE.Skeleton bonInverses is the wrong length."), +this.boneInverses=[],b=0,a=this.bones.length;b=a.HAVE_CURRENT_DATA&&(w.needsUpdate=!0)}da.call(this,a,b,c,d,e,f,g,h,k);this.generateMipmaps=!1;var w=this;m()}function Lb(a,b,c,d,e,f,g,h,k,m,w,n){da.call(this,null,f,g,h,k,m,d,e,w,n);this.image={width:b,height:c};this.mipmaps=a;this.generateMipmaps=this.flipY=!1}function fd(a,b,c,d,e,f,g,h,k){da.call(this,a,b,c,d,e,f,g,h,k);this.needsUpdate=!0}function tc(a,b,c,d,e,f,g, +h,k,m){m=void 0!==m?m:1026;if(1026!==m&&1027!==m)throw Error("DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat");da.call(this,null,d,e,f,g,h,m,c,k);this.image={width:a,height:b};this.type=void 0!==c?c:1012;this.magFilter=void 0!==g?g:1003;this.minFilter=void 0!==h?h:1003;this.generateMipmaps=this.flipY=!1}function Mb(a){function b(a,b){return a-b}G.call(this);var c=[0,0],d={},e=["a","b","c"];if(a&&a.isGeometry){var f=a.vertices,g=a.faces,h=0,k=new Uint32Array(6*g.length); +a=0;for(var m=g.length;an;n++){c[0]=w[e[n]];c[1]=w[e[(n+1)%3]];c.sort(b);var p=c.toString();void 0===d[p]&&(k[2*h]=c[0],k[2*h+1]=c[1],d[p]=!0,h++)}c=new Float32Array(6*h);a=0;for(m=h;an;n++)d=f[k[2*a+n]],h=6*a+3*n,c[h+0]=d.x,c[h+1]=d.y,c[h+2]=d.z;this.addAttribute("position",new C(c,3))}else if(a&&a.isBufferGeometry){if(null!==a.index){m=a.index.array;f=a.attributes.position;e=a.groups;h=0;0===e.length&&a.addGroup(0,m.length);k=new Uint32Array(2*m.length); +g=0;for(w=e.length;gn;n++)c[0]=m[a+n],c[1]=m[a+(n+1)%3],c.sort(b),p=c.toString(),void 0===d[p]&&(k[2*h]=c[0],k[2*h+1]=c[1],d[p]=!0,h++)}c=new Float32Array(6*h);a=0;for(m=h;an;n++)h=6*a+3*n,d=k[2*a+n],c[h+0]=f.getX(d),c[h+1]=f.getY(d),c[h+2]=f.getZ(d)}else for(f=a.attributes.position.array,h=f.length/3,k=h/3,c=new Float32Array(6*h),a=0,m=k;an;n++)h=18*a+6*n,k=9*a+3*n,c[h+0]=f[k],c[h+1]=f[k+1], +c[h+2]=f[k+2],d=9*a+(n+1)%3*3,c[h+3]=f[d],c[h+4]=f[d+1],c[h+5]=f[d+2];this.addAttribute("position",new C(c,3))}}function Nb(a,b,c){G.call(this);this.type="ParametricBufferGeometry";this.parameters={func:a,slices:b,stacks:c};var d=[],e=[],f,g,h,k,m,w=b+1;for(f=0;f<=c;f++)for(m=f/c,g=0;g<=b;g++)k=g/b,h=a(k,m),d.push(h.x,h.y,h.z),e.push(k,m);a=[];var n;for(f=0;fd&&1===a.x&&(k[b]=a.x-1);0===c.x&&0===c.z&&(k[b]=d/2/Math.PI+.5)}G.call(this);this.type="PolyhedronBufferGeometry";this.parameters= +{vertices:a,indices:b,radius:c,detail:d};c=c||1;var h=[],k=[];(function(a){for(var c=new q,d=new q,g=new q,h=0;he&&(.2>b&&(k[a+0]+=1),.2>c&&(k[a+2]+=1),.2>d&&(k[a+4]+=1))})();this.addAttribute("position",ha(h,3));this.addAttribute("normal",ha(h.slice(),3));this.addAttribute("uv",ha(k,2));this.normalizeNormals();this.boundingSphere=new Ca(new q, +c)}function Ob(a,b){ua.call(this,[1,1,1,-1,-1,1,-1,1,-1,1,-1,-1],[2,1,0,0,3,2,1,3,0,2,3,1],a,b);this.type="TetrahedronBufferGeometry";this.parameters={radius:a,detail:b}}function vc(a,b){Q.call(this);this.type="TetrahedronGeometry";this.parameters={radius:a,detail:b};this.fromBufferGeometry(new Ob(a,b));this.mergeVertices()}function Pb(a,b){ua.call(this,[1,0,0,-1,0,0,0,1,0,0,-1,0,0,0,1,0,0,-1],[0,2,4,0,4,3,0,3,5,0,5,2,1,2,5,1,5,3,1,3,4,1,4,2],a,b);this.type="OctahedronBufferGeometry";this.parameters= +{radius:a,detail:b}}function wc(a,b){Q.call(this);this.type="OctahedronGeometry";this.parameters={radius:a,detail:b};this.fromBufferGeometry(new Pb(a,b));this.mergeVertices()}function Qb(a,b){var c=(1+Math.sqrt(5))/2;ua.call(this,[-1,c,0,1,c,0,-1,-c,0,1,-c,0,0,-1,c,0,1,c,0,-1,-c,0,1,-c,c,0,-1,c,0,1,-c,0,-1,-c,0,1],[0,11,5,0,5,1,0,1,7,0,7,10,0,10,11,1,5,9,5,11,4,11,10,2,10,7,6,7,1,8,3,9,4,3,4,2,3,2,6,3,6,8,3,8,9,4,9,5,2,4,11,6,2,10,8,6,7,9,8,1],a,b);this.type="IcosahedronBufferGeometry";this.parameters= +{radius:a,detail:b}}function xc(a,b){Q.call(this);this.type="IcosahedronGeometry";this.parameters={radius:a,detail:b};this.fromBufferGeometry(new Qb(a,b));this.mergeVertices()}function Rb(a,b){var c=(1+Math.sqrt(5))/2,d=1/c;ua.call(this,[-1,-1,-1,-1,-1,1,-1,1,-1,-1,1,1,1,-1,-1,1,-1,1,1,1,-1,1,1,1,0,-d,-c,0,-d,c,0,d,-c,0,d,c,-d,-c,0,-d,c,0,d,-c,0,d,c,0,-c,0,-d,c,0,-d,-c,0,d,c,0,d],[3,11,7,3,7,15,3,15,13,7,19,17,7,17,6,7,6,15,17,4,8,17,8,10,17,10,6,8,0,16,8,16,2,8,2,10,0,12,1,0,1,18,0,18,16,6,10,2, +6,2,13,6,13,15,2,16,18,2,18,3,2,3,13,18,1,9,18,9,11,18,11,3,4,14,12,4,12,0,4,0,8,11,9,5,11,5,19,11,19,7,19,5,14,19,14,4,19,4,17,1,12,14,1,14,5,1,5,9],a,b);this.type="DodecahedronBufferGeometry";this.parameters={radius:a,detail:b}}function yc(a,b){Q.call(this);this.type="DodecahedronGeometry";this.parameters={radius:a,detail:b};this.fromBufferGeometry(new Rb(a,b));this.mergeVertices()}function zc(a,b,c,d){Q.call(this);this.type="PolyhedronGeometry";this.parameters={vertices:a,indices:b,radius:c,detail:d}; +this.fromBufferGeometry(new ua(a,b,c,d));this.mergeVertices()}function Sb(a,b,c,d,e){function f(e){var f=a.getPointAt(e/b),m=g.normals[e];e=g.binormals[e];for(n=0;n<=d;n++){var w=n/d*Math.PI*2,l=Math.sin(w),w=-Math.cos(w);k.x=w*m.x+l*e.x;k.y=w*m.y+l*e.y;k.z=w*m.z+l*e.z;k.normalize();r.push(k.x,k.y,k.z);h.x=f.x+c*k.x;h.y=f.y+c*k.y;h.z=f.z+c*k.z;p.push(h.x,h.y,h.z)}}G.call(this);this.type="TubeBufferGeometry";this.parameters={path:a,tubularSegments:b,radius:c,radialSegments:d,closed:e};b=b||64;c=c|| +1;d=d||8;e=e||!1;var g=a.computeFrenetFrames(b,e);this.tangents=g.tangents;this.normals=g.normals;this.binormals=g.binormals;var h=new q,k=new q,m=new B,w,n,p=[],r=[],l=[],t=[];for(w=0;wp;p++){e[0]=n[g[p]];e[1]=n[g[(p+1)%3]];e.sort(c);var l=e.toString();void 0===f[l]?f[l]={vert1:e[0],vert2:e[1],face1:m,face2:void 0}:f[l].face2=m}e=[];for(l in f)if(g=f[l],void 0===g.face2||h[g.face1].normal.dot(h[g.face2].normal)<=d)m=k[g.vert1],e.push(m.x),e.push(m.y),e.push(m.z),m=k[g.vert2],e.push(m.x),e.push(m.y),e.push(m.z);this.addAttribute("position",new C(new Float32Array(e),3))}function Ua(a, +b,c,d,e,f,g,h){function k(c){var e,f,k,n=new B,p=new q,l=0,w=!0===c?a:b,I=!0===c?1:-1;f=u;for(e=1;e<=d;e++)x.setXYZ(u,0,y*I,0),t.setXYZ(u,0,I,0),n.x=.5,n.y=.5,D.setXY(u,n.x,n.y),u++;k=u;for(e=0;e<=d;e++){var z=e/d*h+g,C=Math.cos(z),z=Math.sin(z);p.x=w*z;p.y=y*I;p.z=w*C;x.setXYZ(u,p.x,p.y,p.z);t.setXYZ(u,0,I,0);n.x=.5*C+.5;n.y=.5*z*I+.5;D.setXY(u,n.x,n.y);u++}for(e=0;ethis.duration&&this.resetDuration();this.optimize()}function ud(a){this.manager=void 0!==a?a:Ga;this.textures={}}function Id(a){this.manager=void 0!==a?a:Ga}function wb(){this.onLoadStart=function(){};this.onLoadProgress=function(){};this.onLoadComplete=function(){}}function Jd(a){"boolean"=== +typeof a&&(console.warn("THREE.JSONLoader: showStatus parameter has been removed from constructor."),a=void 0);this.manager=void 0!==a?a:Ga;this.withCredentials=!1}function xe(a){this.manager=void 0!==a?a:Ga;this.texturePath=""}function ia(){}function Sa(a,b){this.v1=a;this.v2=b}function Oc(){this.curves=[];this.autoClose=!1}function Va(a,b,c,d,e,f,g,h){this.aX=a;this.aY=b;this.xRadius=c;this.yRadius=d;this.aStartAngle=e;this.aEndAngle=f;this.aClockwise=g;this.aRotation=h||0}function xb(a){this.points= +void 0===a?[]:a}function yb(a,b,c,d){this.v0=a;this.v1=b;this.v2=c;this.v3=d}function zb(a,b,c){this.v0=a;this.v1=b;this.v2=c}function Ab(){Pc.apply(this,arguments);this.holes=[]}function Pc(a){Oc.call(this);this.currentPoint=new B;a&&this.fromPoints(a)}function Kd(){this.subPaths=[];this.currentPath=null}function Ld(a){this.data=a}function ye(a){this.manager=void 0!==a?a:Ga}function Md(){void 0===Nd&&(Nd=new (window.AudioContext||window.webkitAudioContext));return Nd}function Od(a){this.manager= +void 0!==a?a:Ga}function ze(){this.type="StereoCamera";this.aspect=1;this.eyeSep=.064;this.cameraL=new Ea;this.cameraL.layers.enable(1);this.cameraL.matrixAutoUpdate=!1;this.cameraR=new Ea;this.cameraR.layers.enable(2);this.cameraR.matrixAutoUpdate=!1}function vd(a,b,c){z.call(this);this.type="CubeCamera";var d=new Ea(90,1,a,b);d.up.set(0,-1,0);d.lookAt(new q(1,0,0));this.add(d);var e=new Ea(90,1,a,b);e.up.set(0,-1,0);e.lookAt(new q(-1,0,0));this.add(e);var f=new Ea(90,1,a,b);f.up.set(0,0,1);f.lookAt(new q(0, +1,0));this.add(f);var g=new Ea(90,1,a,b);g.up.set(0,0,-1);g.lookAt(new q(0,-1,0));this.add(g);var h=new Ea(90,1,a,b);h.up.set(0,-1,0);h.lookAt(new q(0,0,1));this.add(h);var k=new Ea(90,1,a,b);k.up.set(0,-1,0);k.lookAt(new q(0,0,-1));this.add(k);this.renderTarget=new Eb(c,c,{format:1022,magFilter:1006,minFilter:1006});this.updateCubeMap=function(a,b){null===this.parent&&this.updateMatrixWorld();var c=this.renderTarget,p=c.texture.generateMipmaps;c.texture.generateMipmaps=!1;c.activeCubeFace=0;a.render(b, +d,c);c.activeCubeFace=1;a.render(b,e,c);c.activeCubeFace=2;a.render(b,f,c);c.activeCubeFace=3;a.render(b,g,c);c.activeCubeFace=4;a.render(b,h,c);c.texture.generateMipmaps=p;c.activeCubeFace=5;a.render(b,k,c);a.setRenderTarget(null)}}function Pd(){z.call(this);this.type="AudioListener";this.context=Md();this.gain=this.context.createGain();this.gain.connect(this.context.destination);this.filter=null}function dc(a){z.call(this);this.type="Audio";this.context=a.context;this.source=this.context.createBufferSource(); +this.source.onended=this.onEnded.bind(this);this.gain=this.context.createGain();this.gain.connect(a.getInput());this.autoplay=!1;this.startTime=0;this.playbackRate=1;this.isPlaying=!1;this.hasPlaybackControl=!0;this.sourceType="empty";this.filters=[]}function Qd(a){dc.call(this,a);this.panner=this.context.createPanner();this.panner.connect(this.gain)}function Rd(a,b){this.analyser=a.context.createAnalyser();this.analyser.fftSize=void 0!==b?b:2048;this.data=new Uint8Array(this.analyser.frequencyBinCount); +a.getOutput().connect(this.analyser)}function wd(a,b,c){this.binding=a;this.valueSize=c;a=Float64Array;switch(b){case "quaternion":b=this._slerp;break;case "string":case "bool":a=Array;b=this._select;break;default:b=this._lerp}this.buffer=new a(4*c);this._mixBufferRegion=b;this.referenceCount=this.useCount=this.cumulativeWeight=0}function fa(a,b,c){this.path=b;this.parsedPath=c||fa.parseTrackName(b);this.node=fa.findNode(a,this.parsedPath.nodeName)||a;this.rootNode=a}function Sd(a){this.uuid=T.generateUUID(); +this._objects=Array.prototype.slice.call(arguments);this.nCachedObjects_=0;var b={};this._indicesByUUID=b;for(var c=0,d=arguments.length;c!==d;++c)b[arguments[c].uuid]=c;this._paths=[];this._parsedPaths=[];this._bindings=[];this._bindingsIndicesByPath={};var e=this;this.stats={objects:{get total(){return e._objects.length},get inUse(){return this.total-e.nCachedObjects_}},get bindingsPerObject(){return e._bindings.length}}}function Td(a,b,c){this._mixer=a;this._clip=b;this._localRoot=c||null;a=b.tracks; +b=a.length;c=Array(b);for(var d={endingStart:2400,endingEnd:2400},e=0;e!==b;++e){var f=a[e].createInterpolant(null);c[e]=f;f.settings=d}this._interpolantSettings=d;this._interpolants=c;this._propertyBindings=Array(b);this._weightInterpolant=this._timeScaleInterpolant=this._byClipCacheIndex=this._cacheIndex=null;this.loop=2201;this._loopCount=-1;this._startTime=null;this.time=0;this._effectiveWeight=this.weight=this._effectiveTimeScale=this.timeScale=1;this.repetitions=Infinity;this.paused=!1;this.enabled= +!0;this.clampWhenFinished=!1;this.zeroSlopeAtEnd=this.zeroSlopeAtStart=!0}function Ud(a){this._root=a;this._initMemoryManager();this.time=this._accuIndex=0;this.timeScale=1}function Ae(a,b){"string"===typeof a&&(console.warn("THREE.Uniform: Type parameter is no longer needed."),a=b);this.value=a}function Bb(){G.call(this);this.type="InstancedBufferGeometry";this.maxInstancedCount=void 0}function Vd(a,b,c,d){this.uuid=T.generateUUID();this.data=a;this.itemSize=b;this.offset=c;this.normalized=!0=== +d}function ec(a,b){this.uuid=T.generateUUID();this.array=a;this.stride=b;this.count=void 0!==a?a.length/b:0;this.dynamic=!1;this.updateRange={offset:0,count:-1};this.version=0}function fc(a,b,c){ec.call(this,a,b);this.meshPerAttribute=c||1}function gc(a,b,c){C.call(this,a,b);this.meshPerAttribute=c||1}function Wd(a,b,c,d){this.ray=new ab(a,b);this.near=c||0;this.far=d||Infinity;this.params={Mesh:{},Line:{},LOD:{},Points:{threshold:1},Sprite:{}};Object.defineProperties(this.params,{PointCloud:{get:function(){console.warn("THREE.Raycaster: params.PointCloud has been renamed to params.Points."); +return this.Points}}})}function Be(a,b){return a.distance-b.distance}function Xd(a,b,c,d){if(!1!==a.visible&&(a.raycast(b,c),!0===d)){a=a.children;d=0;for(var e=a.length;dc;c++,d++){var e=c/32*Math.PI*2,f=d/32*Math.PI*2;b.push(Math.cos(e),Math.sin(e),1,Math.cos(f),Math.sin(f),1)}a.addAttribute("position",new ha(b,3));b=new oa({fog:!1});this.cone=new la(a,b);this.add(this.cone);this.update()}function ic(a){this.bones=this.getBoneList(a);for(var b=new Q, +c=0;cd;d++)c.faces[d].color=this.colors[4>d?0:1];d=new Ma({vertexColors:1,wireframe:!0});this.lightSphere=new ya(c,d);this.add(this.lightSphere);this.update()}function Sc(a,b,c,d){b=b||1;c=new O(void 0!==c?c:4473924);d=new O(void 0!== +d?d:8947848);for(var e=b/2,f=2*a/b,g=[],h=[],k=0,m=0,l=-a;k<=b;k++,l+=f){g.push(-a,0,l,a,0,l);g.push(l,0,-a,l,0,a);var n=k===e?c:d;n.toArray(h,m);m+=3;n.toArray(h,m);m+=3;n.toArray(h,m);m+=3;n.toArray(h,m);m+=3}a=new G;a.addAttribute("position",new ha(g,3));a.addAttribute("color",new ha(h,3));g=new oa({vertexColors:2});la.call(this,a,g)}function Tc(a,b,c,d){this.object=a;this.size=void 0!==b?b:1;a=void 0!==c?c:16776960;d=void 0!==d?d:1;b=0;(c=this.object.geometry)&&c.isGeometry?b=c.faces.length:console.warn("THREE.FaceNormalsHelper: only THREE.Geometry is supported. Use THREE.VertexNormalsHelper, instead."); +c=new G;b=new ha(6*b,3);c.addAttribute("position",b);la.call(this,c,new oa({color:a,linewidth:d}));this.matrixAutoUpdate=!1;this.update()}function lc(a,b){z.call(this);this.light=a;this.light.updateMatrixWorld();this.matrix=a.matrixWorld;this.matrixAutoUpdate=!1;void 0===b&&(b=1);var c=new G;c.addAttribute("position",new ha([-b,b,0,b,b,0,b,-b,0,-b,-b,0,-b,b,0],3));var d=new oa({fog:!1});this.add(new Ta(c,d));c=new G;c.addAttribute("position",new ha([0,0,0,0,0,1],3));this.add(new Ta(c,d));this.update()} +function Uc(a){function b(a,b,d){c(a,d);c(b,d)}function c(a,b){d.vertices.push(new q);d.colors.push(new O(b));void 0===f[a]&&(f[a]=[]);f[a].push(d.vertices.length-1)}var d=new Q,e=new oa({color:16777215,vertexColors:1}),f={};b("n1","n2",16755200);b("n2","n4",16755200);b("n4","n3",16755200);b("n3","n1",16755200);b("f1","f2",16755200);b("f2","f4",16755200);b("f4","f3",16755200);b("f3","f1",16755200);b("n1","f1",16755200);b("n2","f2",16755200);b("n3","f3",16755200);b("n4","f4",16755200);b("p","n1",16711680); +b("p","n2",16711680);b("p","n3",16711680);b("p","n4",16711680);b("u1","u2",43775);b("u2","u3",43775);b("u3","u1",43775);b("c","t",16777215);b("p","c",3355443);b("cn1","cn2",3355443);b("cn3","cn4",3355443);b("cf1","cf2",3355443);b("cf3","cf4",3355443);la.call(this,d,e);this.camera=a;this.camera.updateProjectionMatrix&&this.camera.updateProjectionMatrix();this.matrix=a.matrixWorld;this.matrixAutoUpdate=!1;this.pointMap=f;this.update()}function Vc(a,b){var c=void 0!==b?b:8947848;this.object=a;this.box= +new Ba;ya.call(this,new ob(1,1,1),new Ma({color:c,wireframe:!0}))}function Wc(a,b){void 0===b&&(b=16776960);var c=new Uint16Array([0,1,1,2,2,3,3,0,4,5,5,6,6,7,7,4,0,4,1,5,2,6,3,7]),d=new Float32Array(24),e=new G;e.setIndex(new C(c,1));e.addAttribute("position",new C(d,3));la.call(this,e,new oa({color:b}));void 0!==a&&this.update(a)}function Cb(a,b,c,d,e,f){z.call(this);void 0===d&&(d=16776960);void 0===c&&(c=1);void 0===e&&(e=.2*c);void 0===f&&(f=.2*e);this.position.copy(b);this.line=new Ta(Ce,new oa({color:d})); +this.line.matrixAutoUpdate=!1;this.add(this.line);this.cone=new ya(De,new Ma({color:d}));this.cone.matrixAutoUpdate=!1;this.add(this.cone);this.setDirection(a);this.setLength(c,e,f)}function xd(a){a=a||1;var b=new Float32Array([0,0,0,a,0,0,0,0,0,0,a,0,0,0,0,0,0,a]),c=new Float32Array([1,0,0,1,.6,0,0,1,0,.6,1,0,0,0,1,0,.6,1]);a=new G;a.addAttribute("position",new C(b,3));a.addAttribute("color",new C(c,3));b=new oa({vertexColors:2});la.call(this,a,b)}function Ee(a){console.warn("THREE.ClosedSplineCurve3 has been deprecated. Please use THREE.CatmullRomCurve3."); +$d.call(this,a);this.type="catmullrom";this.closed=!0}function yd(a,b,c,d,e,f){Va.call(this,a,b,c,c,d,e,f)}void 0===Number.EPSILON&&(Number.EPSILON=Math.pow(2,-52));void 0===Math.sign&&(Math.sign=function(a){return 0>a?-1:0e;e++)8===e||13===e||18===e||23===e?b[e]="-":14===e?b[e]="4":(2>=c&&(c=33554432+16777216*Math.random()|0),d=c&15,c>>=4,b[e]=a[19===e?d&3|8:d]);return b.join("")}}(),clamp:function(a,b,c){return Math.max(b,Math.min(c,a))},euclideanModulo:function(a,b){return(a%b+b)%b},mapLinear:function(a,b,c,d,e){return d+(a-b)*(e-d)/(c-b)},lerp:function(a,b,c){return(1-c)*a+c*b},smoothstep:function(a, +b,c){if(a<=b)return 0;if(a>=c)return 1;a=(a-b)/(c-b);return a*a*(3-2*a)},smootherstep:function(a,b,c){if(a<=b)return 0;if(a>=c)return 1;a=(a-b)/(c-b);return a*a*a*(a*(6*a-15)+10)},random16:function(){console.warn("THREE.Math.random16() has been deprecated. Use Math.random() instead.");return Math.random()},randInt:function(a,b){return a+Math.floor(Math.random()*(b-a+1))},randFloat:function(a,b){return a+Math.random()*(b-a)},randFloatSpread:function(a){return a*(.5-Math.random())},degToRad:function(a){return a* +T.DEG2RAD},radToDeg:function(a){return a*T.RAD2DEG},isPowerOfTwo:function(a){return 0===(a&a-1)&&0!==a},nearestPowerOfTwo:function(a){return Math.pow(2,Math.round(Math.log(a)/Math.LN2))},nextPowerOfTwo:function(a){a--;a|=a>>1;a|=a>>2;a|=a>>4;a|=a>>8;a|=a>>16;a++;return a}};B.prototype={constructor:B,isVector2:!0,get width(){return this.x},set width(a){this.x=a},get height(){return this.y},set height(a){this.y=a},set:function(a,b){this.x=a;this.y=b;return this},setScalar:function(a){this.y=this.x= +a;return this},setX:function(a){this.x=a;return this},setY:function(a){this.y=a;return this},setComponent:function(a,b){switch(a){case 0:this.x=b;break;case 1:this.y=b;break;default:throw Error("index is out of range: "+a);}return this},getComponent:function(a){switch(a){case 0:return this.x;case 1:return this.y;default:throw Error("index is out of range: "+a);}},clone:function(){return new this.constructor(this.x,this.y)},copy:function(a){this.x=a.x;this.y=a.y;return this},add:function(a,b){if(void 0!== +b)return console.warn("THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(a,b);this.x+=a.x;this.y+=a.y;return this},addScalar:function(a){this.x+=a;this.y+=a;return this},addVectors:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;return this},addScaledVector:function(a,b){this.x+=a.x*b;this.y+=a.y*b;return this},sub:function(a,b){if(void 0!==b)return console.warn("THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."), +this.subVectors(a,b);this.x-=a.x;this.y-=a.y;return this},subScalar:function(a){this.x-=a;this.y-=a;return this},subVectors:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;return this},multiply:function(a){this.x*=a.x;this.y*=a.y;return this},multiplyScalar:function(a){isFinite(a)?(this.x*=a,this.y*=a):this.y=this.x=0;return this},divide:function(a){this.x/=a.x;this.y/=a.y;return this},divideScalar:function(a){return this.multiplyScalar(1/a)},min:function(a){this.x=Math.min(this.x,a.x);this.y=Math.min(this.y, +a.y);return this},max:function(a){this.x=Math.max(this.x,a.x);this.y=Math.max(this.y,a.y);return this},clamp:function(a,b){this.x=Math.max(a.x,Math.min(b.x,this.x));this.y=Math.max(a.y,Math.min(b.y,this.y));return this},clampScalar:function(){var a,b;return function(c,d){void 0===a&&(a=new B,b=new B);a.set(c,c);b.set(d,d);return this.clamp(a,b)}}(),clampLength:function(a,b){var c=this.length();return this.multiplyScalar(Math.max(a,Math.min(b,c))/c)},floor:function(){this.x=Math.floor(this.x);this.y= +Math.floor(this.y);return this},ceil:function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);return this},round:function(){this.x=Math.round(this.x);this.y=Math.round(this.y);return this},roundToZero:function(){this.x=0>this.x?Math.ceil(this.x):Math.floor(this.x);this.y=0>this.y?Math.ceil(this.y):Math.floor(this.y);return this},negate:function(){this.x=-this.x;this.y=-this.y;return this},dot:function(a){return this.x*a.x+this.y*a.y},lengthSq:function(){return this.x*this.x+this.y*this.y},length:function(){return Math.sqrt(this.x* +this.x+this.y*this.y)},lengthManhattan:function(){return Math.abs(this.x)+Math.abs(this.y)},normalize:function(){return this.divideScalar(this.length())},angle:function(){var a=Math.atan2(this.y,this.x);0>a&&(a+=2*Math.PI);return a},distanceTo:function(a){return Math.sqrt(this.distanceToSquared(a))},distanceToSquared:function(a){var b=this.x-a.x;a=this.y-a.y;return b*b+a*a},distanceToManhattan:function(a){return Math.abs(this.x-a.x)+Math.abs(this.y-a.y)},setLength:function(a){return this.multiplyScalar(a/ +this.length())},lerp:function(a,b){this.x+=(a.x-this.x)*b;this.y+=(a.y-this.y)*b;return this},lerpVectors:function(a,b,c){return this.subVectors(b,a).multiplyScalar(c).add(a)},equals:function(a){return a.x===this.x&&a.y===this.y},fromArray:function(a,b){void 0===b&&(b=0);this.x=a[b];this.y=a[b+1];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this.x;a[b+1]=this.y;return a},fromAttribute:function(a,b,c){void 0===c&&(c=0);b=b*a.itemSize+c;this.x=a.array[b];this.y=a.array[b+ +1];return this},rotateAround:function(a,b){var c=Math.cos(b),d=Math.sin(b),e=this.x-a.x,f=this.y-a.y;this.x=e*c-f*d+a.x;this.y=e*d+f*c+a.y;return this}};da.DEFAULT_IMAGE=void 0;da.DEFAULT_MAPPING=300;da.prototype={constructor:da,isTexture:!0,set needsUpdate(a){!0===a&&this.version++},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.image=a.image;this.mipmaps=a.mipmaps.slice(0);this.mapping=a.mapping;this.wrapS=a.wrapS;this.wrapT=a.wrapT;this.magFilter=a.magFilter;this.minFilter= +a.minFilter;this.anisotropy=a.anisotropy;this.format=a.format;this.type=a.type;this.offset.copy(a.offset);this.repeat.copy(a.repeat);this.generateMipmaps=a.generateMipmaps;this.premultiplyAlpha=a.premultiplyAlpha;this.flipY=a.flipY;this.unpackAlignment=a.unpackAlignment;this.encoding=a.encoding;return this},toJSON:function(a){if(void 0!==a.textures[this.uuid])return a.textures[this.uuid];var b={metadata:{version:4.4,type:"Texture",generator:"Texture.toJSON"},uuid:this.uuid,name:this.name,mapping:this.mapping, +repeat:[this.repeat.x,this.repeat.y],offset:[this.offset.x,this.offset.y],wrap:[this.wrapS,this.wrapT],minFilter:this.minFilter,magFilter:this.magFilter,anisotropy:this.anisotropy,flipY:this.flipY};if(void 0!==this.image){var c=this.image;void 0===c.uuid&&(c.uuid=T.generateUUID());if(void 0===a.images[c.uuid]){var d=a.images,e=c.uuid,f=c.uuid,g;void 0!==c.toDataURL?g=c:(g=document.createElementNS("http://www.w3.org/1999/xhtml","canvas"),g.width=c.width,g.height=c.height,g.getContext("2d").drawImage(c, +0,0,c.width,c.height));g=2048a.x||1a.x?0:1;break;case 1002:a.x=1===Math.abs(Math.floor(a.x)%2)?Math.ceil(a.x)-a.x:a.x-Math.floor(a.x)}if(0> +a.y||1a.y?0:1;break;case 1002:a.y=1===Math.abs(Math.floor(a.y)%2)?Math.ceil(a.y)-a.y:a.y-Math.floor(a.y)}this.flipY&&(a.y=1-a.y)}}};Object.assign(da.prototype,sa.prototype);var ee=0;ga.prototype={constructor:ga,isVector4:!0,set:function(a,b,c,d){this.x=a;this.y=b;this.z=c;this.w=d;return this},setScalar:function(a){this.w=this.z=this.y=this.x=a;return this},setX:function(a){this.x=a;return this},setY:function(a){this.y=a; +return this},setZ:function(a){this.z=a;return this},setW:function(a){this.w=a;return this},setComponent:function(a,b){switch(a){case 0:this.x=b;break;case 1:this.y=b;break;case 2:this.z=b;break;case 3:this.w=b;break;default:throw Error("index is out of range: "+a);}return this},getComponent:function(a){switch(a){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw Error("index is out of range: "+a);}},clone:function(){return new this.constructor(this.x, +this.y,this.z,this.w)},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;this.w=void 0!==a.w?a.w:1;return this},add:function(a,b){if(void 0!==b)return console.warn("THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(a,b);this.x+=a.x;this.y+=a.y;this.z+=a.z;this.w+=a.w;return this},addScalar:function(a){this.x+=a;this.y+=a;this.z+=a;this.w+=a;return this},addVectors:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;this.z=a.z+b.z;this.w=a.w+b.w;return this}, +addScaledVector:function(a,b){this.x+=a.x*b;this.y+=a.y*b;this.z+=a.z*b;this.w+=a.w*b;return this},sub:function(a,b){if(void 0!==b)return console.warn("THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(a,b);this.x-=a.x;this.y-=a.y;this.z-=a.z;this.w-=a.w;return this},subScalar:function(a){this.x-=a;this.y-=a;this.z-=a;this.w-=a;return this},subVectors:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;this.z=a.z-b.z;this.w=a.w-b.w;return this},multiplyScalar:function(a){isFinite(a)? +(this.x*=a,this.y*=a,this.z*=a,this.w*=a):this.w=this.z=this.y=this.x=0;return this},applyMatrix4:function(a){var b=this.x,c=this.y,d=this.z,e=this.w;a=a.elements;this.x=a[0]*b+a[4]*c+a[8]*d+a[12]*e;this.y=a[1]*b+a[5]*c+a[9]*d+a[13]*e;this.z=a[2]*b+a[6]*c+a[10]*d+a[14]*e;this.w=a[3]*b+a[7]*c+a[11]*d+a[15]*e;return this},divideScalar:function(a){return this.multiplyScalar(1/a)},setAxisAngleFromQuaternion:function(a){this.w=2*Math.acos(a.w);var b=Math.sqrt(1-a.w*a.w);1E-4>b?(this.x=1,this.z=this.y= +0):(this.x=a.x/b,this.y=a.y/b,this.z=a.z/b);return this},setAxisAngleFromRotationMatrix:function(a){var b,c,d;a=a.elements;var e=a[0];d=a[4];var f=a[8],g=a[1],h=a[5],k=a[9];c=a[2];b=a[6];var m=a[10];if(.01>Math.abs(d-g)&&.01>Math.abs(f-c)&&.01>Math.abs(k-b)){if(.1>Math.abs(d+g)&&.1>Math.abs(f+c)&&.1>Math.abs(k+b)&&.1>Math.abs(e+h+m-3))return this.set(1,0,0,0),this;a=Math.PI;e=(e+1)/2;h=(h+1)/2;m=(m+1)/2;d=(d+g)/4;f=(f+c)/4;k=(k+b)/4;e>h&&e>m?.01>e?(b=0,d=c=.707106781):(b=Math.sqrt(e),c=d/b,d=f/b): +h>m?.01>h?(b=.707106781,c=0,d=.707106781):(c=Math.sqrt(h),b=d/c,d=k/c):.01>m?(c=b=.707106781,d=0):(d=Math.sqrt(m),b=f/d,c=k/d);this.set(b,c,d,a);return this}a=Math.sqrt((b-k)*(b-k)+(f-c)*(f-c)+(g-d)*(g-d));.001>Math.abs(a)&&(a=1);this.x=(b-k)/a;this.y=(f-c)/a;this.z=(g-d)/a;this.w=Math.acos((e+h+m-1)/2);return this},min:function(a){this.x=Math.min(this.x,a.x);this.y=Math.min(this.y,a.y);this.z=Math.min(this.z,a.z);this.w=Math.min(this.w,a.w);return this},max:function(a){this.x=Math.max(this.x,a.x); +this.y=Math.max(this.y,a.y);this.z=Math.max(this.z,a.z);this.w=Math.max(this.w,a.w);return this},clamp:function(a,b){this.x=Math.max(a.x,Math.min(b.x,this.x));this.y=Math.max(a.y,Math.min(b.y,this.y));this.z=Math.max(a.z,Math.min(b.z,this.z));this.w=Math.max(a.w,Math.min(b.w,this.w));return this},clampScalar:function(){var a,b;return function(c,d){void 0===a&&(a=new ga,b=new ga);a.set(c,c,c,c);b.set(d,d,d,d);return this.clamp(a,b)}}(),floor:function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y); +this.z=Math.floor(this.z);this.w=Math.floor(this.w);return this},ceil:function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);this.z=Math.ceil(this.z);this.w=Math.ceil(this.w);return this},round:function(){this.x=Math.round(this.x);this.y=Math.round(this.y);this.z=Math.round(this.z);this.w=Math.round(this.w);return this},roundToZero:function(){this.x=0>this.x?Math.ceil(this.x):Math.floor(this.x);this.y=0>this.y?Math.ceil(this.y):Math.floor(this.y);this.z=0>this.z?Math.ceil(this.z):Math.floor(this.z); +this.w=0>this.w?Math.ceil(this.w):Math.floor(this.w);return this},negate:function(){this.x=-this.x;this.y=-this.y;this.z=-this.z;this.w=-this.w;return this},dot:function(a){return this.x*a.x+this.y*a.y+this.z*a.z+this.w*a.w},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)},lengthManhattan:function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)}, +normalize:function(){return this.divideScalar(this.length())},setLength:function(a){return this.multiplyScalar(a/this.length())},lerp:function(a,b){this.x+=(a.x-this.x)*b;this.y+=(a.y-this.y)*b;this.z+=(a.z-this.z)*b;this.w+=(a.w-this.w)*b;return this},lerpVectors:function(a,b,c){return this.subVectors(b,a).multiplyScalar(c).add(a)},equals:function(a){return a.x===this.x&&a.y===this.y&&a.z===this.z&&a.w===this.w},fromArray:function(a,b){void 0===b&&(b=0);this.x=a[b];this.y=a[b+1];this.z=a[b+2];this.w= +a[b+3];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this.x;a[b+1]=this.y;a[b+2]=this.z;a[b+3]=this.w;return a},fromAttribute:function(a,b,c){void 0===c&&(c=0);b=b*a.itemSize+c;this.x=a.array[b];this.y=a.array[b+1];this.z=a.array[b+2];this.w=a.array[b+3];return this}};Object.assign(Db.prototype,sa.prototype,{isWebGLRenderTarget:!0,setSize:function(a,b){if(this.width!==a||this.height!==b)this.width=a,this.height=b,this.dispose();this.viewport.set(0,0,a,b);this.scissor.set(0, +0,a,b)},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.width=a.width;this.height=a.height;this.viewport.copy(a.viewport);this.texture=a.texture.clone();this.depthBuffer=a.depthBuffer;this.stencilBuffer=a.stencilBuffer;this.depthTexture=a.depthTexture;return this},dispose:function(){this.dispatchEvent({type:"dispose"})}});Eb.prototype=Object.create(Db.prototype);Eb.prototype.constructor=Eb;Eb.prototype.isWebGLRenderTargetCube=!0;ba.prototype={constructor:ba,get x(){return this._x}, +set x(a){this._x=a;this.onChangeCallback()},get y(){return this._y},set y(a){this._y=a;this.onChangeCallback()},get z(){return this._z},set z(a){this._z=a;this.onChangeCallback()},get w(){return this._w},set w(a){this._w=a;this.onChangeCallback()},set:function(a,b,c,d){this._x=a;this._y=b;this._z=c;this._w=d;this.onChangeCallback();return this},clone:function(){return new this.constructor(this._x,this._y,this._z,this._w)},copy:function(a){this._x=a.x;this._y=a.y;this._z=a.z;this._w=a.w;this.onChangeCallback(); +return this},setFromEuler:function(a,b){if(!1===(a&&a.isEuler))throw Error("THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order.");var c=Math.cos(a._x/2),d=Math.cos(a._y/2),e=Math.cos(a._z/2),f=Math.sin(a._x/2),g=Math.sin(a._y/2),h=Math.sin(a._z/2),k=a.order;"XYZ"===k?(this._x=f*d*e+c*g*h,this._y=c*g*e-f*d*h,this._z=c*d*h+f*g*e,this._w=c*d*e-f*g*h):"YXZ"===k?(this._x=f*d*e+c*g*h,this._y=c*g*e-f*d*h,this._z=c*d*h-f*g*e,this._w=c*d*e+f*g*h):"ZXY"===k?(this._x= +f*d*e-c*g*h,this._y=c*g*e+f*d*h,this._z=c*d*h+f*g*e,this._w=c*d*e-f*g*h):"ZYX"===k?(this._x=f*d*e-c*g*h,this._y=c*g*e+f*d*h,this._z=c*d*h-f*g*e,this._w=c*d*e+f*g*h):"YZX"===k?(this._x=f*d*e+c*g*h,this._y=c*g*e+f*d*h,this._z=c*d*h-f*g*e,this._w=c*d*e-f*g*h):"XZY"===k&&(this._x=f*d*e-c*g*h,this._y=c*g*e-f*d*h,this._z=c*d*h+f*g*e,this._w=c*d*e+f*g*h);if(!1!==b)this.onChangeCallback();return this},setFromAxisAngle:function(a,b){var c=b/2,d=Math.sin(c);this._x=a.x*d;this._y=a.y*d;this._z=a.z*d;this._w= +Math.cos(c);this.onChangeCallback();return this},setFromRotationMatrix:function(a){var b=a.elements,c=b[0];a=b[4];var d=b[8],e=b[1],f=b[5],g=b[9],h=b[2],k=b[6],b=b[10],m=c+f+b;0f&&c>b?(c=2*Math.sqrt(1+c-f-b),this._w=(k-g)/c,this._x=.25*c,this._y=(a+e)/c,this._z=(d+h)/c):f>b?(c=2*Math.sqrt(1+f-c-b),this._w=(d-h)/c,this._x=(a+e)/c,this._y=.25*c,this._z=(g+k)/c):(c=2*Math.sqrt(1+b-c-f),this._w=(e-a)/c,this._x=(d+ +h)/c,this._y=(g+k)/c,this._z=.25*c);this.onChangeCallback();return this},setFromUnitVectors:function(){var a,b;return function(c,d){void 0===a&&(a=new q);b=c.dot(d)+1;1E-6>b?(b=0,Math.abs(c.x)>Math.abs(c.z)?a.set(-c.y,c.x,0):a.set(0,-c.z,c.y)):a.crossVectors(c,d);this._x=a.x;this._y=a.y;this._z=a.z;this._w=b;return this.normalize()}}(),inverse:function(){return this.conjugate().normalize()},conjugate:function(){this._x*=-1;this._y*=-1;this._z*=-1;this.onChangeCallback();return this},dot:function(a){return this._x* +a._x+this._y*a._y+this._z*a._z+this._w*a._w},lengthSq:function(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w},length:function(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)},normalize:function(){var a=this.length();0===a?(this._z=this._y=this._x=0,this._w=1):(a=1/a,this._x*=a,this._y*=a,this._z*=a,this._w*=a);this.onChangeCallback();return this},multiply:function(a,b){return void 0!==b?(console.warn("THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead."), +this.multiplyQuaternions(a,b)):this.multiplyQuaternions(this,a)},premultiply:function(a){return this.multiplyQuaternions(a,this)},multiplyQuaternions:function(a,b){var c=a._x,d=a._y,e=a._z,f=a._w,g=b._x,h=b._y,k=b._z,m=b._w;this._x=c*m+f*g+d*k-e*h;this._y=d*m+f*h+e*g-c*k;this._z=e*m+f*k+c*h-d*g;this._w=f*m-c*g-d*h-e*k;this.onChangeCallback();return this},slerp:function(a,b){if(0===b)return this;if(1===b)return this.copy(a);var c=this._x,d=this._y,e=this._z,f=this._w,g=f*a._w+c*a._x+d*a._y+e*a._z; +0>g?(this._w=-a._w,this._x=-a._x,this._y=-a._y,this._z=-a._z,g=-g):this.copy(a);if(1<=g)return this._w=f,this._x=c,this._y=d,this._z=e,this;var h=Math.sqrt(1-g*g);if(.001>Math.abs(h))return this._w=.5*(f+this._w),this._x=.5*(c+this._x),this._y=.5*(d+this._y),this._z=.5*(e+this._z),this;var k=Math.atan2(h,g),g=Math.sin((1-b)*k)/h,h=Math.sin(b*k)/h;this._w=f*g+this._w*h;this._x=c*g+this._x*h;this._y=d*g+this._y*h;this._z=e*g+this._z*h;this.onChangeCallback();return this},equals:function(a){return a._x=== +this._x&&a._y===this._y&&a._z===this._z&&a._w===this._w},fromArray:function(a,b){void 0===b&&(b=0);this._x=a[b];this._y=a[b+1];this._z=a[b+2];this._w=a[b+3];this.onChangeCallback();return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this._x;a[b+1]=this._y;a[b+2]=this._z;a[b+3]=this._w;return a},onChange:function(a){this.onChangeCallback=a;return this},onChangeCallback:function(){}};Object.assign(ba,{slerp:function(a,b,c,d){return c.copy(a).slerp(b,d)},slerpFlat:function(a, +b,c,d,e,f,g){var h=c[d+0],k=c[d+1],m=c[d+2];c=c[d+3];d=e[f+0];var l=e[f+1],n=e[f+2];e=e[f+3];if(c!==e||h!==d||k!==l||m!==n){f=1-g;var p=h*d+k*l+m*n+c*e,r=0<=p?1:-1,x=1-p*p;x>Number.EPSILON&&(x=Math.sqrt(x),p=Math.atan2(x,p*r),f=Math.sin(f*p)/x,g=Math.sin(g*p)/x);r*=g;h=h*f+d*r;k=k*f+l*r;m=m*f+n*r;c=c*f+e*r;f===1-g&&(g=1/Math.sqrt(h*h+k*k+m*m+c*c),h*=g,k*=g,m*=g,c*=g)}a[b]=h;a[b+1]=k;a[b+2]=m;a[b+3]=c}});q.prototype={constructor:q,isVector3:!0,set:function(a,b,c){this.x=a;this.y=b;this.z=c;return this}, +setScalar:function(a){this.z=this.y=this.x=a;return this},setX:function(a){this.x=a;return this},setY:function(a){this.y=a;return this},setZ:function(a){this.z=a;return this},setComponent:function(a,b){switch(a){case 0:this.x=b;break;case 1:this.y=b;break;case 2:this.z=b;break;default:throw Error("index is out of range: "+a);}return this},getComponent:function(a){switch(a){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw Error("index is out of range: "+a);}},clone:function(){return new this.constructor(this.x, +this.y,this.z)},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;return this},add:function(a,b){if(void 0!==b)return console.warn("THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(a,b);this.x+=a.x;this.y+=a.y;this.z+=a.z;return this},addScalar:function(a){this.x+=a;this.y+=a;this.z+=a;return this},addVectors:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;this.z=a.z+b.z;return this},addScaledVector:function(a,b){this.x+=a.x*b;this.y+=a.y*b;this.z+= +a.z*b;return this},sub:function(a,b){if(void 0!==b)return console.warn("THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(a,b);this.x-=a.x;this.y-=a.y;this.z-=a.z;return this},subScalar:function(a){this.x-=a;this.y-=a;this.z-=a;return this},subVectors:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;this.z=a.z-b.z;return this},multiply:function(a,b){if(void 0!==b)return console.warn("THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead."), +this.multiplyVectors(a,b);this.x*=a.x;this.y*=a.y;this.z*=a.z;return this},multiplyScalar:function(a){isFinite(a)?(this.x*=a,this.y*=a,this.z*=a):this.z=this.y=this.x=0;return this},multiplyVectors:function(a,b){this.x=a.x*b.x;this.y=a.y*b.y;this.z=a.z*b.z;return this},applyEuler:function(){var a;return function(b){!1===(b&&b.isEuler)&&console.error("THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order.");void 0===a&&(a=new ba);return this.applyQuaternion(a.setFromEuler(b))}}(), +applyAxisAngle:function(){var a;return function(b,c){void 0===a&&(a=new ba);return this.applyQuaternion(a.setFromAxisAngle(b,c))}}(),applyMatrix3:function(a){var b=this.x,c=this.y,d=this.z;a=a.elements;this.x=a[0]*b+a[3]*c+a[6]*d;this.y=a[1]*b+a[4]*c+a[7]*d;this.z=a[2]*b+a[5]*c+a[8]*d;return this},applyMatrix4:function(a){var b=this.x,c=this.y,d=this.z;a=a.elements;this.x=a[0]*b+a[4]*c+a[8]*d+a[12];this.y=a[1]*b+a[5]*c+a[9]*d+a[13];this.z=a[2]*b+a[6]*c+a[10]*d+a[14];return this},applyProjection:function(a){var b= +this.x,c=this.y,d=this.z;a=a.elements;var e=1/(a[3]*b+a[7]*c+a[11]*d+a[15]);this.x=(a[0]*b+a[4]*c+a[8]*d+a[12])*e;this.y=(a[1]*b+a[5]*c+a[9]*d+a[13])*e;this.z=(a[2]*b+a[6]*c+a[10]*d+a[14])*e;return this},applyQuaternion:function(a){var b=this.x,c=this.y,d=this.z,e=a.x,f=a.y,g=a.z;a=a.w;var h=a*b+f*d-g*c,k=a*c+g*b-e*d,m=a*d+e*c-f*b,b=-e*b-f*c-g*d;this.x=h*a+b*-e+k*-g-m*-f;this.y=k*a+b*-f+m*-e-h*-g;this.z=m*a+b*-g+h*-f-k*-e;return this},project:function(){var a;return function(b){void 0===a&&(a=new J); +a.multiplyMatrices(b.projectionMatrix,a.getInverse(b.matrixWorld));return this.applyProjection(a)}}(),unproject:function(){var a;return function(b){void 0===a&&(a=new J);a.multiplyMatrices(b.matrixWorld,a.getInverse(b.projectionMatrix));return this.applyProjection(a)}}(),transformDirection:function(a){var b=this.x,c=this.y,d=this.z;a=a.elements;this.x=a[0]*b+a[4]*c+a[8]*d;this.y=a[1]*b+a[5]*c+a[9]*d;this.z=a[2]*b+a[6]*c+a[10]*d;return this.normalize()},divide:function(a){this.x/=a.x;this.y/=a.y;this.z/= +a.z;return this},divideScalar:function(a){return this.multiplyScalar(1/a)},min:function(a){this.x=Math.min(this.x,a.x);this.y=Math.min(this.y,a.y);this.z=Math.min(this.z,a.z);return this},max:function(a){this.x=Math.max(this.x,a.x);this.y=Math.max(this.y,a.y);this.z=Math.max(this.z,a.z);return this},clamp:function(a,b){this.x=Math.max(a.x,Math.min(b.x,this.x));this.y=Math.max(a.y,Math.min(b.y,this.y));this.z=Math.max(a.z,Math.min(b.z,this.z));return this},clampScalar:function(){var a,b;return function(c, +d){void 0===a&&(a=new q,b=new q);a.set(c,c,c);b.set(d,d,d);return this.clamp(a,b)}}(),clampLength:function(a,b){var c=this.length();return this.multiplyScalar(Math.max(a,Math.min(b,c))/c)},floor:function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y);this.z=Math.floor(this.z);return this},ceil:function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);this.z=Math.ceil(this.z);return this},round:function(){this.x=Math.round(this.x);this.y=Math.round(this.y);this.z=Math.round(this.z);return this}, +roundToZero:function(){this.x=0>this.x?Math.ceil(this.x):Math.floor(this.x);this.y=0>this.y?Math.ceil(this.y):Math.floor(this.y);this.z=0>this.z?Math.ceil(this.z):Math.floor(this.z);return this},negate:function(){this.x=-this.x;this.y=-this.y;this.z=-this.z;return this},dot:function(a){return this.x*a.x+this.y*a.y+this.z*a.z},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)},lengthManhattan:function(){return Math.abs(this.x)+ +Math.abs(this.y)+Math.abs(this.z)},normalize:function(){return this.divideScalar(this.length())},setLength:function(a){return this.multiplyScalar(a/this.length())},lerp:function(a,b){this.x+=(a.x-this.x)*b;this.y+=(a.y-this.y)*b;this.z+=(a.z-this.z)*b;return this},lerpVectors:function(a,b,c){return this.subVectors(b,a).multiplyScalar(c).add(a)},cross:function(a,b){if(void 0!==b)return console.warn("THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead."),this.crossVectors(a, +b);var c=this.x,d=this.y,e=this.z;this.x=d*a.z-e*a.y;this.y=e*a.x-c*a.z;this.z=c*a.y-d*a.x;return this},crossVectors:function(a,b){var c=a.x,d=a.y,e=a.z,f=b.x,g=b.y,h=b.z;this.x=d*h-e*g;this.y=e*f-c*h;this.z=c*g-d*f;return this},projectOnVector:function(a){var b=a.dot(this)/a.lengthSq();return this.copy(a).multiplyScalar(b)},projectOnPlane:function(){var a;return function(b){void 0===a&&(a=new q);a.copy(this).projectOnVector(b);return this.sub(a)}}(),reflect:function(){var a;return function(b){void 0=== +a&&(a=new q);return this.sub(a.copy(b).multiplyScalar(2*this.dot(b)))}}(),angleTo:function(a){a=this.dot(a)/Math.sqrt(this.lengthSq()*a.lengthSq());return Math.acos(T.clamp(a,-1,1))},distanceTo:function(a){return Math.sqrt(this.distanceToSquared(a))},distanceToSquared:function(a){var b=this.x-a.x,c=this.y-a.y;a=this.z-a.z;return b*b+c*c+a*a},distanceToManhattan:function(a){return Math.abs(this.x-a.x)+Math.abs(this.y-a.y)+Math.abs(this.z-a.z)},setFromSpherical:function(a){var b=Math.sin(a.phi)*a.radius; +this.x=b*Math.sin(a.theta);this.y=Math.cos(a.phi)*a.radius;this.z=b*Math.cos(a.theta);return this},setFromMatrixPosition:function(a){return this.setFromMatrixColumn(a,3)},setFromMatrixScale:function(a){var b=this.setFromMatrixColumn(a,0).length(),c=this.setFromMatrixColumn(a,1).length();a=this.setFromMatrixColumn(a,2).length();this.x=b;this.y=c;this.z=a;return this},setFromMatrixColumn:function(a,b){if("number"===typeof a){console.warn("THREE.Vector3: setFromMatrixColumn now expects ( matrix, index )."); +var c=a;a=b;b=c}return this.fromArray(a.elements,4*b)},equals:function(a){return a.x===this.x&&a.y===this.y&&a.z===this.z},fromArray:function(a,b){void 0===b&&(b=0);this.x=a[b];this.y=a[b+1];this.z=a[b+2];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this.x;a[b+1]=this.y;a[b+2]=this.z;return a},fromAttribute:function(a,b,c){void 0===c&&(c=0);b=b*a.itemSize+c;this.x=a.array[b];this.y=a.array[b+1];this.z=a.array[b+2];return this}};J.prototype={constructor:J,isMatrix4:!0, +set:function(a,b,c,d,e,f,g,h,k,m,l,n,p,r,x,t){var q=this.elements;q[0]=a;q[4]=b;q[8]=c;q[12]=d;q[1]=e;q[5]=f;q[9]=g;q[13]=h;q[2]=k;q[6]=m;q[10]=l;q[14]=n;q[3]=p;q[7]=r;q[11]=x;q[15]=t;return this},identity:function(){this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1);return this},clone:function(){return(new J).fromArray(this.elements)},copy:function(a){this.elements.set(a.elements);return this},copyPosition:function(a){var b=this.elements;a=a.elements;b[12]=a[12];b[13]=a[13];b[14]=a[14];return this},extractBasis:function(a, +b,c){a.setFromMatrixColumn(this,0);b.setFromMatrixColumn(this,1);c.setFromMatrixColumn(this,2);return this},makeBasis:function(a,b,c){this.set(a.x,b.x,c.x,0,a.y,b.y,c.y,0,a.z,b.z,c.z,0,0,0,0,1);return this},extractRotation:function(){var a;return function(b){void 0===a&&(a=new q);var c=this.elements,d=b.elements,e=1/a.setFromMatrixColumn(b,0).length(),f=1/a.setFromMatrixColumn(b,1).length();b=1/a.setFromMatrixColumn(b,2).length();c[0]=d[0]*e;c[1]=d[1]*e;c[2]=d[2]*e;c[4]=d[4]*f;c[5]=d[5]*f;c[6]=d[6]* +f;c[8]=d[8]*b;c[9]=d[9]*b;c[10]=d[10]*b;return this}}(),makeRotationFromEuler:function(a){!1===(a&&a.isEuler)&&console.error("THREE.Matrix: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order.");var b=this.elements,c=a.x,d=a.y,e=a.z,f=Math.cos(c),c=Math.sin(c),g=Math.cos(d),d=Math.sin(d),h=Math.cos(e),e=Math.sin(e);if("XYZ"===a.order){a=f*h;var k=f*e,m=c*h,l=c*e;b[0]=g*h;b[4]=-g*e;b[8]=d;b[1]=k+m*d;b[5]=a-l*d;b[9]=-c*g;b[2]=l-a*d;b[6]=m+k*d;b[10]=f*g}else"YXZ"=== +a.order?(a=g*h,k=g*e,m=d*h,l=d*e,b[0]=a+l*c,b[4]=m*c-k,b[8]=f*d,b[1]=f*e,b[5]=f*h,b[9]=-c,b[2]=k*c-m,b[6]=l+a*c,b[10]=f*g):"ZXY"===a.order?(a=g*h,k=g*e,m=d*h,l=d*e,b[0]=a-l*c,b[4]=-f*e,b[8]=m+k*c,b[1]=k+m*c,b[5]=f*h,b[9]=l-a*c,b[2]=-f*d,b[6]=c,b[10]=f*g):"ZYX"===a.order?(a=f*h,k=f*e,m=c*h,l=c*e,b[0]=g*h,b[4]=m*d-k,b[8]=a*d+l,b[1]=g*e,b[5]=l*d+a,b[9]=k*d-m,b[2]=-d,b[6]=c*g,b[10]=f*g):"YZX"===a.order?(a=f*g,k=f*d,m=c*g,l=c*d,b[0]=g*h,b[4]=l-a*e,b[8]=m*e+k,b[1]=e,b[5]=f*h,b[9]=-c*h,b[2]=-d*h,b[6]=k* +e+m,b[10]=a-l*e):"XZY"===a.order&&(a=f*g,k=f*d,m=c*g,l=c*d,b[0]=g*h,b[4]=-e,b[8]=d*h,b[1]=a*e+l,b[5]=f*h,b[9]=k*e-m,b[2]=m*e-k,b[6]=c*h,b[10]=l*e+a);b[3]=0;b[7]=0;b[11]=0;b[12]=0;b[13]=0;b[14]=0;b[15]=1;return this},makeRotationFromQuaternion:function(a){var b=this.elements,c=a.x,d=a.y,e=a.z,f=a.w,g=c+c,h=d+d,k=e+e;a=c*g;var m=c*h,c=c*k,l=d*h,d=d*k,e=e*k,g=f*g,h=f*h,f=f*k;b[0]=1-(l+e);b[4]=m-f;b[8]=c+h;b[1]=m+f;b[5]=1-(a+e);b[9]=d-g;b[2]=c-h;b[6]=d+g;b[10]=1-(a+l);b[3]=0;b[7]=0;b[11]=0;b[12]=0;b[13]= +0;b[14]=0;b[15]=1;return this},lookAt:function(){var a,b,c;return function(d,e,f){void 0===a&&(a=new q,b=new q,c=new q);var g=this.elements;c.subVectors(d,e).normalize();0===c.lengthSq()&&(c.z=1);a.crossVectors(f,c).normalize();0===a.lengthSq()&&(c.z+=1E-4,a.crossVectors(f,c).normalize());b.crossVectors(c,a);g[0]=a.x;g[4]=b.x;g[8]=c.x;g[1]=a.y;g[5]=b.y;g[9]=c.y;g[2]=a.z;g[6]=b.z;g[10]=c.z;return this}}(),multiply:function(a,b){return void 0!==b?(console.warn("THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead."), +this.multiplyMatrices(a,b)):this.multiplyMatrices(this,a)},premultiply:function(a){return this.multiplyMatrices(a,this)},multiplyMatrices:function(a,b){var c=a.elements,d=b.elements,e=this.elements,f=c[0],g=c[4],h=c[8],k=c[12],m=c[1],l=c[5],n=c[9],p=c[13],r=c[2],x=c[6],t=c[10],q=c[14],u=c[3],v=c[7],I=c[11],c=c[15],y=d[0],E=d[4],H=d[8],F=d[12],M=d[1],B=d[5],K=d[9],z=d[13],C=d[2],G=d[6],J=d[10],N=d[14],P=d[3],R=d[7],S=d[11],d=d[15];e[0]=f*y+g*M+h*C+k*P;e[4]=f*E+g*B+h*G+k*R;e[8]=f*H+g*K+h*J+k*S;e[12]= +f*F+g*z+h*N+k*d;e[1]=m*y+l*M+n*C+p*P;e[5]=m*E+l*B+n*G+p*R;e[9]=m*H+l*K+n*J+p*S;e[13]=m*F+l*z+n*N+p*d;e[2]=r*y+x*M+t*C+q*P;e[6]=r*E+x*B+t*G+q*R;e[10]=r*H+x*K+t*J+q*S;e[14]=r*F+x*z+t*N+q*d;e[3]=u*y+v*M+I*C+c*P;e[7]=u*E+v*B+I*G+c*R;e[11]=u*H+v*K+I*J+c*S;e[15]=u*F+v*z+I*N+c*d;return this},multiplyToArray:function(a,b,c){var d=this.elements;this.multiplyMatrices(a,b);c[0]=d[0];c[1]=d[1];c[2]=d[2];c[3]=d[3];c[4]=d[4];c[5]=d[5];c[6]=d[6];c[7]=d[7];c[8]=d[8];c[9]=d[9];c[10]=d[10];c[11]=d[11];c[12]=d[12]; +c[13]=d[13];c[14]=d[14];c[15]=d[15];return this},multiplyScalar:function(a){var b=this.elements;b[0]*=a;b[4]*=a;b[8]*=a;b[12]*=a;b[1]*=a;b[5]*=a;b[9]*=a;b[13]*=a;b[2]*=a;b[6]*=a;b[10]*=a;b[14]*=a;b[3]*=a;b[7]*=a;b[11]*=a;b[15]*=a;return this},applyToVector3Array:function(){var a;return function(b,c,d){void 0===a&&(a=new q);void 0===c&&(c=0);void 0===d&&(d=b.length);for(var e=0;ethis.determinant()&&(g=-g);c.x=f[12];c.y=f[13];c.z=f[14];b.elements.set(this.elements);c=1/g;var f=1/h,m=1/k;b.elements[0]*=c;b.elements[1]*=c;b.elements[2]*=c;b.elements[4]*=f;b.elements[5]*=f;b.elements[6]*=f;b.elements[8]*=m;b.elements[9]*=m;b.elements[10]*=m;d.setFromRotationMatrix(b);e.x=g;e.y=h;e.z=k;return this}}(),makeFrustum:function(a,b,c,d,e,f){var g=this.elements;g[0]=2*e/(b-a);g[4]=0;g[8]=(b+a)/(b-a);g[12]=0;g[1]=0;g[5]=2*e/(d-c); +g[9]=(d+c)/(d-c);g[13]=0;g[2]=0;g[6]=0;g[10]=-(f+e)/(f-e);g[14]=-2*f*e/(f-e);g[3]=0;g[7]=0;g[11]=-1;g[15]=0;return this},makePerspective:function(a,b,c,d){a=c*Math.tan(T.DEG2RAD*a*.5);var e=-a;return this.makeFrustum(e*b,a*b,e,a,c,d)},makeOrthographic:function(a,b,c,d,e,f){var g=this.elements,h=1/(b-a),k=1/(c-d),m=1/(f-e);g[0]=2*h;g[4]=0;g[8]=0;g[12]=-((b+a)*h);g[1]=0;g[5]=2*k;g[9]=0;g[13]=-((c+d)*k);g[2]=0;g[6]=0;g[10]=-2*m;g[14]=-((f+e)*m);g[3]=0;g[7]=0;g[11]=0;g[15]=1;return this},equals:function(a){var b= +this.elements;a=a.elements;for(var c=0;16>c;c++)if(b[c]!==a[c])return!1;return!0},fromArray:function(a,b){void 0===b&&(b=0);for(var c=0;16>c;c++)this.elements[c]=a[c+b];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);var c=this.elements;a[b]=c[0];a[b+1]=c[1];a[b+2]=c[2];a[b+3]=c[3];a[b+4]=c[4];a[b+5]=c[5];a[b+6]=c[6];a[b+7]=c[7];a[b+8]=c[8];a[b+9]=c[9];a[b+10]=c[10];a[b+11]=c[11];a[b+12]=c[12];a[b+13]=c[13];a[b+14]=c[14];a[b+15]=c[15];return a}};Xa.prototype=Object.create(da.prototype); +Xa.prototype.constructor=Xa;Xa.prototype.isCubeTexture=!0;Object.defineProperty(Xa.prototype,"images",{get:function(){return this.image},set:function(a){this.image=a}});var ie=new da,je=new Xa,fe=[],he=[];ne.prototype.setValue=function(a,b){for(var c=this.seq,d=0,e=c.length;d!==e;++d){var f=c[d];f.setValue(a,b[f.id])}};var zd=/([\w\d_]+)(\])?(\[|\.)?/g;Ya.prototype.setValue=function(a,b,c){b=this.map[b];void 0!==b&&b.setValue(a,c,this.renderer)};Ya.prototype.set=function(a,b,c){var d=this.map[c]; +void 0!==d&&d.setValue(a,b[c],this.renderer)};Ya.prototype.setOptional=function(a,b,c){b=b[c];void 0!==b&&this.setValue(a,c,b)};Ya.upload=function(a,b,c,d){for(var e=0,f=b.length;e!==f;++e){var g=b[e],h=c[g.id];!1!==h.needsUpdate&&g.setValue(a,h.value,d)}};Ya.seqWithValue=function(a,b){for(var c=[],d=0,e=a.length;d!==e;++d){var f=a[d];f.id in b&&c.push(f)}return c};var La={merge:function(a){for(var b={},c=0;c 0.0 ) {\n#if defined ( PHYSICALLY_CORRECT_LIGHTS )\n\t\t\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\n\t\t\tfloat maxDistanceCutoffFactor = pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\n\t\t\treturn distanceFalloff * maxDistanceCutoffFactor;\n#else\n\t\t\treturn pow( saturate( -lightDistance / cutoffDistance + 1.0 ), decayExponent );\n#endif\n\t\t}\n\t\treturn 1.0;\n}\nvec3 BRDF_Diffuse_Lambert( const in vec3 diffuseColor ) {\n\treturn RECIPROCAL_PI * diffuseColor;\n}\nvec3 F_Schlick( const in vec3 specularColor, const in float dotLH ) {\n\tfloat fresnel = exp2( ( -5.55473 * dotLH - 6.98316 ) * dotLH );\n\treturn ( 1.0 - specularColor ) * fresnel + specularColor;\n}\nfloat G_GGX_Smith( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gl = dotNL + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\tfloat gv = dotNV + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\treturn 1.0 / ( gl * gv );\n}\nfloat G_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\tfloat gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\treturn 0.5 / max( gv + gl, EPSILON );\n}\nfloat D_GGX( const in float alpha, const in float dotNH ) {\n\tfloat a2 = pow2( alpha );\n\tfloat denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\n\treturn RECIPROCAL_PI * a2 / pow2( denom );\n}\nvec3 BRDF_Specular_GGX( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float roughness ) {\n\tfloat alpha = pow2( roughness );\n\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\n\tfloat dotNL = saturate( dot( geometry.normal, incidentLight.direction ) );\n\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n\tfloat D = D_GGX( alpha, dotNH );\n\treturn F * ( G * D );\n}\nvec3 BRDF_Specular_GGX_Environment( const in GeometricContext geometry, const in vec3 specularColor, const in float roughness ) {\n\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\tconst vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );\n\tconst vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );\n\tvec4 r = roughness * c0 + c1;\n\tfloat a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;\n\tvec2 AB = vec2( -1.04, 1.04 ) * a004 + r.zw;\n\treturn specularColor * AB.x + AB.y;\n}\nfloat G_BlinnPhong_Implicit( ) {\n\treturn 0.25;\n}\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\n\treturn RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\n}\nvec3 BRDF_Specular_BlinnPhong( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float shininess ) {\n\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\n\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_BlinnPhong_Implicit( );\n\tfloat D = D_BlinnPhong( shininess, dotNH );\n\treturn F * ( G * D );\n}\nfloat GGXRoughnessToBlinnExponent( const in float ggxRoughness ) {\n\treturn ( 2.0 / pow2( ggxRoughness + 0.0001 ) - 2.0 );\n}\nfloat BlinnExponentToGGXRoughness( const in float blinnExponent ) {\n\treturn sqrt( 2.0 / ( blinnExponent + 2.0 ) );\n}\n", +bumpmap_pars_fragment:"#ifdef USE_BUMPMAP\n\tuniform sampler2D bumpMap;\n\tuniform float bumpScale;\n\tvec2 dHdxy_fwd() {\n\t\tvec2 dSTdx = dFdx( vUv );\n\t\tvec2 dSTdy = dFdy( vUv );\n\t\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\n\t\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\n\t\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\n\t\treturn vec2( dBx, dBy );\n\t}\n\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy ) {\n\t\tvec3 vSigmaX = dFdx( surf_pos );\n\t\tvec3 vSigmaY = dFdy( surf_pos );\n\t\tvec3 vN = surf_norm;\n\t\tvec3 R1 = cross( vSigmaY, vN );\n\t\tvec3 R2 = cross( vN, vSigmaX );\n\t\tfloat fDet = dot( vSigmaX, R1 );\n\t\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\n\t\treturn normalize( abs( fDet ) * surf_norm - vGrad );\n\t}\n#endif\n", +clipping_planes_fragment:"#if NUM_CLIPPING_PLANES > 0\n\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; ++ i ) {\n\t\tvec4 plane = clippingPlanes[ i ];\n\t\tif ( dot( vViewPosition, plane.xyz ) > plane.w ) discard;\n\t}\n\t\t\n\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n\t\tbool clipped = true;\n\t\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; ++ i ) {\n\t\t\tvec4 plane = clippingPlanes[ i ];\n\t\t\tclipped = ( dot( vViewPosition, plane.xyz ) > plane.w ) && clipped;\n\t\t}\n\t\tif ( clipped ) discard;\n\t\n\t#endif\n#endif\n", +clipping_planes_pars_fragment:"#if NUM_CLIPPING_PLANES > 0\n\t#if ! defined( PHYSICAL ) && ! defined( PHONG )\n\t\tvarying vec3 vViewPosition;\n\t#endif\n\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\n#endif\n",clipping_planes_pars_vertex:"#if NUM_CLIPPING_PLANES > 0 && ! defined( PHYSICAL ) && ! defined( PHONG )\n\tvarying vec3 vViewPosition;\n#endif\n",clipping_planes_vertex:"#if NUM_CLIPPING_PLANES > 0 && ! defined( PHYSICAL ) && ! defined( PHONG )\n\tvViewPosition = - mvPosition.xyz;\n#endif\n", +color_fragment:"#ifdef USE_COLOR\n\tdiffuseColor.rgb *= vColor;\n#endif",color_pars_fragment:"#ifdef USE_COLOR\n\tvarying vec3 vColor;\n#endif\n",color_pars_vertex:"#ifdef USE_COLOR\n\tvarying vec3 vColor;\n#endif",color_vertex:"#ifdef USE_COLOR\n\tvColor.xyz = color.xyz;\n#endif",common:"#define PI 3.14159265359\n#define PI2 6.28318530718\n#define RECIPROCAL_PI 0.31830988618\n#define RECIPROCAL_PI2 0.15915494\n#define LOG2 1.442695\n#define EPSILON 1e-6\n#define saturate(a) clamp( a, 0.0, 1.0 )\n#define whiteCompliment(a) ( 1.0 - saturate( a ) )\nfloat pow2( const in float x ) { return x*x; }\nfloat pow3( const in float x ) { return x*x*x; }\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\nfloat average( const in vec3 color ) { return dot( color, vec3( 0.3333 ) ); }\nhighp float rand( const in vec2 uv ) {\n\tconst highp float a = 12.9898, b = 78.233, c = 43758.5453;\n\thighp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\n\treturn fract(sin(sn) * c);\n}\nstruct IncidentLight {\n\tvec3 color;\n\tvec3 direction;\n\tbool visible;\n};\nstruct ReflectedLight {\n\tvec3 directDiffuse;\n\tvec3 directSpecular;\n\tvec3 indirectDiffuse;\n\tvec3 indirectSpecular;\n};\nstruct GeometricContext {\n\tvec3 position;\n\tvec3 normal;\n\tvec3 viewDir;\n};\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n}\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\n}\nvec3 projectOnPlane(in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\tfloat distance = dot( planeNormal, point - pointOnPlane );\n\treturn - distance * planeNormal + point;\n}\nfloat sideOfPlane( in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn sign( dot( point - pointOnPlane, planeNormal ) );\n}\nvec3 linePlaneIntersect( in vec3 pointOnLine, in vec3 lineDirection, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn lineDirection * ( dot( planeNormal, pointOnPlane - pointOnLine ) / dot( planeNormal, lineDirection ) ) + pointOnLine;\n}\n", +cube_uv_reflection_fragment:"#ifdef ENVMAP_TYPE_CUBE_UV\n#define cubeUV_textureSize (1024.0)\nint getFaceFromDirection(vec3 direction) {\n\tvec3 absDirection = abs(direction);\n\tint face = -1;\n\tif( absDirection.x > absDirection.z ) {\n\t\tif(absDirection.x > absDirection.y )\n\t\t\tface = direction.x > 0.0 ? 0 : 3;\n\t\telse\n\t\t\tface = direction.y > 0.0 ? 1 : 4;\n\t}\n\telse {\n\t\tif(absDirection.z > absDirection.y )\n\t\t\tface = direction.z > 0.0 ? 2 : 5;\n\t\telse\n\t\t\tface = direction.y > 0.0 ? 1 : 4;\n\t}\n\treturn face;\n}\n#define cubeUV_maxLods1 (log2(cubeUV_textureSize*0.25) - 1.0)\n#define cubeUV_rangeClamp (exp2((6.0 - 1.0) * 2.0))\nvec2 MipLevelInfo( vec3 vec, float roughnessLevel, float roughness ) {\n\tfloat scale = exp2(cubeUV_maxLods1 - roughnessLevel);\n\tfloat dxRoughness = dFdx(roughness);\n\tfloat dyRoughness = dFdy(roughness);\n\tvec3 dx = dFdx( vec * scale * dxRoughness );\n\tvec3 dy = dFdy( vec * scale * dyRoughness );\n\tfloat d = max( dot( dx, dx ), dot( dy, dy ) );\n\td = clamp(d, 1.0, cubeUV_rangeClamp);\n\tfloat mipLevel = 0.5 * log2(d);\n\treturn vec2(floor(mipLevel), fract(mipLevel));\n}\n#define cubeUV_maxLods2 (log2(cubeUV_textureSize*0.25) - 2.0)\n#define cubeUV_rcpTextureSize (1.0 / cubeUV_textureSize)\nvec2 getCubeUV(vec3 direction, float roughnessLevel, float mipLevel) {\n\tmipLevel = roughnessLevel > cubeUV_maxLods2 - 3.0 ? 0.0 : mipLevel;\n\tfloat a = 16.0 * cubeUV_rcpTextureSize;\n\tvec2 exp2_packed = exp2( vec2( roughnessLevel, mipLevel ) );\n\tvec2 rcp_exp2_packed = vec2( 1.0 ) / exp2_packed;\n\tfloat powScale = exp2_packed.x * exp2_packed.y;\n\tfloat scale = rcp_exp2_packed.x * rcp_exp2_packed.y * 0.25;\n\tfloat mipOffset = 0.75*(1.0 - rcp_exp2_packed.y) * rcp_exp2_packed.x;\n\tbool bRes = mipLevel == 0.0;\n\tscale = bRes && (scale < a) ? a : scale;\n\tvec3 r;\n\tvec2 offset;\n\tint face = getFaceFromDirection(direction);\n\tfloat rcpPowScale = 1.0 / powScale;\n\tif( face == 0) {\n\t\tr = vec3(direction.x, -direction.z, direction.y);\n\t\toffset = vec2(0.0+mipOffset,0.75 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? a : offset.y;\n\t}\n\telse if( face == 1) {\n\t\tr = vec3(direction.y, direction.x, direction.z);\n\t\toffset = vec2(scale+mipOffset, 0.75 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? a : offset.y;\n\t}\n\telse if( face == 2) {\n\t\tr = vec3(direction.z, direction.x, direction.y);\n\t\toffset = vec2(2.0*scale+mipOffset, 0.75 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? a : offset.y;\n\t}\n\telse if( face == 3) {\n\t\tr = vec3(direction.x, direction.z, direction.y);\n\t\toffset = vec2(0.0+mipOffset,0.5 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? 0.0 : offset.y;\n\t}\n\telse if( face == 4) {\n\t\tr = vec3(direction.y, direction.x, -direction.z);\n\t\toffset = vec2(scale+mipOffset, 0.5 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? 0.0 : offset.y;\n\t}\n\telse {\n\t\tr = vec3(direction.z, -direction.x, direction.y);\n\t\toffset = vec2(2.0*scale+mipOffset, 0.5 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? 0.0 : offset.y;\n\t}\n\tr = normalize(r);\n\tfloat texelOffset = 0.5 * cubeUV_rcpTextureSize;\n\tvec2 s = ( r.yz / abs( r.x ) + vec2( 1.0 ) ) * 0.5;\n\tvec2 base = offset + vec2( texelOffset );\n\treturn base + s * ( scale - 2.0 * texelOffset );\n}\n#define cubeUV_maxLods3 (log2(cubeUV_textureSize*0.25) - 3.0)\nvec4 textureCubeUV(vec3 reflectedDirection, float roughness ) {\n\tfloat roughnessVal = roughness* cubeUV_maxLods3;\n\tfloat r1 = floor(roughnessVal);\n\tfloat r2 = r1 + 1.0;\n\tfloat t = fract(roughnessVal);\n\tvec2 mipInfo = MipLevelInfo(reflectedDirection, r1, roughness);\n\tfloat s = mipInfo.y;\n\tfloat level0 = mipInfo.x;\n\tfloat level1 = level0 + 1.0;\n\tlevel1 = level1 > 5.0 ? 5.0 : level1;\n\tlevel0 += min( floor( s + 0.5 ), 5.0 );\n\tvec2 uv_10 = getCubeUV(reflectedDirection, r1, level0);\n\tvec4 color10 = envMapTexelToLinear(texture2D(envMap, uv_10));\n\tvec2 uv_20 = getCubeUV(reflectedDirection, r2, level0);\n\tvec4 color20 = envMapTexelToLinear(texture2D(envMap, uv_20));\n\tvec4 result = mix(color10, color20, t);\n\treturn vec4(result.rgb, 1.0);\n}\n#endif\n", +defaultnormal_vertex:"#ifdef FLIP_SIDED\n\tobjectNormal = -objectNormal;\n#endif\nvec3 transformedNormal = normalMatrix * objectNormal;\n",displacementmap_pars_vertex:"#ifdef USE_DISPLACEMENTMAP\n\tuniform sampler2D displacementMap;\n\tuniform float displacementScale;\n\tuniform float displacementBias;\n#endif\n",displacementmap_vertex:"#ifdef USE_DISPLACEMENTMAP\n\ttransformed += normal * ( texture2D( displacementMap, uv ).x * displacementScale + displacementBias );\n#endif\n",emissivemap_fragment:"#ifdef USE_EMISSIVEMAP\n\tvec4 emissiveColor = texture2D( emissiveMap, vUv );\n\temissiveColor.rgb = emissiveMapTexelToLinear( emissiveColor ).rgb;\n\ttotalEmissiveRadiance *= emissiveColor.rgb;\n#endif\n", +emissivemap_pars_fragment:"#ifdef USE_EMISSIVEMAP\n\tuniform sampler2D emissiveMap;\n#endif\n",encodings_fragment:" gl_FragColor = linearToOutputTexel( gl_FragColor );\n",encodings_pars_fragment:"\nvec4 LinearToLinear( in vec4 value ) {\n return value;\n}\nvec4 GammaToLinear( in vec4 value, in float gammaFactor ) {\n return vec4( pow( value.xyz, vec3( gammaFactor ) ), value.w );\n}\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\n return vec4( pow( value.xyz, vec3( 1.0 / gammaFactor ) ), value.w );\n}\nvec4 sRGBToLinear( in vec4 value ) {\n return vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.w );\n}\nvec4 LinearTosRGB( in vec4 value ) {\n return vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.w );\n}\nvec4 RGBEToLinear( in vec4 value ) {\n return vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );\n}\nvec4 LinearToRGBE( in vec4 value ) {\n float maxComponent = max( max( value.r, value.g ), value.b );\n float fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );\n return vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );\n}\nvec4 RGBMToLinear( in vec4 value, in float maxRange ) {\n return vec4( value.xyz * value.w * maxRange, 1.0 );\n}\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\n float maxRGB = max( value.x, max( value.g, value.b ) );\n float M = clamp( maxRGB / maxRange, 0.0, 1.0 );\n M = ceil( M * 255.0 ) / 255.0;\n return vec4( value.rgb / ( M * maxRange ), M );\n}\nvec4 RGBDToLinear( in vec4 value, in float maxRange ) {\n return vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );\n}\nvec4 LinearToRGBD( in vec4 value, in float maxRange ) {\n float maxRGB = max( value.x, max( value.g, value.b ) );\n float D = max( maxRange / maxRGB, 1.0 );\n D = min( floor( D ) / 255.0, 1.0 );\n return vec4( value.rgb * ( D * ( 255.0 / maxRange ) ), D );\n}\nconst mat3 cLogLuvM = mat3( 0.2209, 0.3390, 0.4184, 0.1138, 0.6780, 0.7319, 0.0102, 0.1130, 0.2969 );\nvec4 LinearToLogLuv( in vec4 value ) {\n vec3 Xp_Y_XYZp = value.rgb * cLogLuvM;\n Xp_Y_XYZp = max(Xp_Y_XYZp, vec3(1e-6, 1e-6, 1e-6));\n vec4 vResult;\n vResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;\n float Le = 2.0 * log2(Xp_Y_XYZp.y) + 127.0;\n vResult.w = fract(Le);\n vResult.z = (Le - (floor(vResult.w*255.0))/255.0)/255.0;\n return vResult;\n}\nconst mat3 cLogLuvInverseM = mat3( 6.0014, -2.7008, -1.7996, -1.3320, 3.1029, -5.7721, 0.3008, -1.0882, 5.6268 );\nvec4 LogLuvToLinear( in vec4 value ) {\n float Le = value.z * 255.0 + value.w;\n vec3 Xp_Y_XYZp;\n Xp_Y_XYZp.y = exp2((Le - 127.0) / 2.0);\n Xp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;\n Xp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;\n vec3 vRGB = Xp_Y_XYZp.rgb * cLogLuvInverseM;\n return vec4( max(vRGB, 0.0), 1.0 );\n}\n", +envmap_fragment:"#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\t\tvec3 cameraToVertex = normalize( vWorldPosition - cameraPosition );\n\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( cameraToVertex, worldNormal );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( cameraToVertex, worldNormal, refractionRatio );\n\t\t#endif\n\t#else\n\t\tvec3 reflectVec = vReflect;\n\t#endif\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tvec4 envColor = textureCube( envMap, flipNormal * vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\t#elif defined( ENVMAP_TYPE_EQUIREC )\n\t\tvec2 sampleUV;\n\t\tsampleUV.y = saturate( flipNormal * reflectVec.y * 0.5 + 0.5 );\n\t\tsampleUV.x = atan( flipNormal * reflectVec.z, flipNormal * reflectVec.x ) * RECIPROCAL_PI2 + 0.5;\n\t\tvec4 envColor = texture2D( envMap, sampleUV );\n\t#elif defined( ENVMAP_TYPE_SPHERE )\n\t\tvec3 reflectView = flipNormal * normalize( ( viewMatrix * vec4( reflectVec, 0.0 ) ).xyz + vec3( 0.0, 0.0, 1.0 ) );\n\t\tvec4 envColor = texture2D( envMap, reflectView.xy * 0.5 + 0.5 );\n\t#else\n\t\tvec4 envColor = vec4( 0.0 );\n\t#endif\n\tenvColor = envMapTexelToLinear( envColor );\n\t#ifdef ENVMAP_BLENDING_MULTIPLY\n\t\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_MIX )\n\t\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_ADD )\n\t\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\n\t#endif\n#endif\n", +envmap_pars_fragment:"#if defined( USE_ENVMAP ) || defined( PHYSICAL )\n\tuniform float reflectivity;\n\tuniform float envMapIntenstiy;\n#endif\n#ifdef USE_ENVMAP\n\t#if ! defined( PHYSICAL ) && ( defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) )\n\t\tvarying vec3 vWorldPosition;\n\t#endif\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tuniform samplerCube envMap;\n\t#else\n\t\tuniform sampler2D envMap;\n\t#endif\n\tuniform float flipEnvMap;\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( PHYSICAL )\n\t\tuniform float refractionRatio;\n\t#else\n\t\tvarying vec3 vReflect;\n\t#endif\n#endif\n", +envmap_pars_vertex:"#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\t\tvarying vec3 vWorldPosition;\n\t#else\n\t\tvarying vec3 vReflect;\n\t\tuniform float refractionRatio;\n\t#endif\n#endif\n",envmap_vertex:"#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\t\tvWorldPosition = worldPosition.xyz;\n\t#else\n\t\tvec3 cameraToVertex = normalize( worldPosition.xyz - cameraPosition );\n\t\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvReflect = reflect( cameraToVertex, worldNormal );\n\t\t#else\n\t\t\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\n\t\t#endif\n\t#endif\n#endif\n", +fog_fragment:"#ifdef USE_FOG\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tfloat depth = gl_FragDepthEXT / gl_FragCoord.w;\n\t#else\n\t\tfloat depth = gl_FragCoord.z / gl_FragCoord.w;\n\t#endif\n\t#ifdef FOG_EXP2\n\t\tfloat fogFactor = whiteCompliment( exp2( - fogDensity * fogDensity * depth * depth * LOG2 ) );\n\t#else\n\t\tfloat fogFactor = smoothstep( fogNear, fogFar, depth );\n\t#endif\n\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\n#endif\n",fog_pars_fragment:"#ifdef USE_FOG\n\tuniform vec3 fogColor;\n\t#ifdef FOG_EXP2\n\t\tuniform float fogDensity;\n\t#else\n\t\tuniform float fogNear;\n\t\tuniform float fogFar;\n\t#endif\n#endif", +lightmap_fragment:"#ifdef USE_LIGHTMAP\n\treflectedLight.indirectDiffuse += PI * texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\n#endif\n",lightmap_pars_fragment:"#ifdef USE_LIGHTMAP\n\tuniform sampler2D lightMap;\n\tuniform float lightMapIntensity;\n#endif",lights_lambert_vertex:"vec3 diffuse = vec3( 1.0 );\nGeometricContext geometry;\ngeometry.position = mvPosition.xyz;\ngeometry.normal = normalize( transformedNormal );\ngeometry.viewDir = normalize( -mvPosition.xyz );\nGeometricContext backGeometry;\nbackGeometry.position = geometry.position;\nbackGeometry.normal = -geometry.normal;\nbackGeometry.viewDir = geometry.viewDir;\nvLightFront = vec3( 0.0 );\n#ifdef DOUBLE_SIDED\n\tvLightBack = vec3( 0.0 );\n#endif\nIncidentLight directLight;\nfloat dotNL;\nvec3 directLightColor_Diffuse;\n#if NUM_POINT_LIGHTS > 0\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tgetPointDirectLightIrradiance( pointLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tgetSpotDirectLightIrradiance( spotLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n#endif\n#if NUM_DIR_LIGHTS > 0\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tgetDirectionalDirectLightIrradiance( directionalLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\tvLightFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry );\n\t\t#endif\n\t}\n#endif\n", +lights_pars:"uniform vec3 ambientLightColor;\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\n\tvec3 irradiance = ambientLightColor;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treturn irradiance;\n}\n#if NUM_DIR_LIGHTS > 0\n\tstruct DirectionalLight {\n\t\tvec3 direction;\n\t\tvec3 color;\n\t\tint shadow;\n\t\tfloat shadowBias;\n\t\tfloat shadowRadius;\n\t\tvec2 shadowMapSize;\n\t};\n\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\n\tvoid getDirectionalDirectLightIrradiance( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tdirectLight.color = directionalLight.color;\n\t\tdirectLight.direction = directionalLight.direction;\n\t\tdirectLight.visible = true;\n\t}\n#endif\n#if NUM_POINT_LIGHTS > 0\n\tstruct PointLight {\n\t\tvec3 position;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t\tint shadow;\n\t\tfloat shadowBias;\n\t\tfloat shadowRadius;\n\t\tvec2 shadowMapSize;\n\t};\n\tuniform PointLight pointLights[ NUM_POINT_LIGHTS ];\n\tvoid getPointDirectLightIrradiance( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = pointLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tif ( testLightInRange( lightDistance, pointLight.distance ) ) {\n\t\t\tdirectLight.color = pointLight.color;\n\t\t\tdirectLight.color *= punctualLightIntensityToIrradianceFactor( lightDistance, pointLight.distance, pointLight.decay );\n\t\t\tdirectLight.visible = true;\n\t\t} else {\n\t\t\tdirectLight.color = vec3( 0.0 );\n\t\t\tdirectLight.visible = false;\n\t\t}\n\t}\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\tstruct SpotLight {\n\t\tvec3 position;\n\t\tvec3 direction;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t\tfloat coneCos;\n\t\tfloat penumbraCos;\n\t\tint shadow;\n\t\tfloat shadowBias;\n\t\tfloat shadowRadius;\n\t\tvec2 shadowMapSize;\n\t};\n\tuniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\n\tvoid getSpotDirectLightIrradiance( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = spotLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tfloat angleCos = dot( directLight.direction, spotLight.direction );\n\t\tif ( all( bvec2( angleCos > spotLight.coneCos, testLightInRange( lightDistance, spotLight.distance ) ) ) ) {\n\t\t\tfloat spotEffect = smoothstep( spotLight.coneCos, spotLight.penumbraCos, angleCos );\n\t\t\tdirectLight.color = spotLight.color;\n\t\t\tdirectLight.color *= spotEffect * punctualLightIntensityToIrradianceFactor( lightDistance, spotLight.distance, spotLight.decay );\n\t\t\tdirectLight.visible = true;\n\t\t} else {\n\t\t\tdirectLight.color = vec3( 0.0 );\n\t\t\tdirectLight.visible = false;\n\t\t}\n\t}\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\tstruct HemisphereLight {\n\t\tvec3 direction;\n\t\tvec3 skyColor;\n\t\tvec3 groundColor;\n\t};\n\tuniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\n\tvec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in GeometricContext geometry ) {\n\t\tfloat dotNL = dot( geometry.normal, hemiLight.direction );\n\t\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\n\t\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tirradiance *= PI;\n\t\t#endif\n\t\treturn irradiance;\n\t}\n#endif\n#if defined( USE_ENVMAP ) && defined( PHYSICAL )\n\tvec3 getLightProbeIndirectIrradiance( const in GeometricContext geometry, const in int maxMIPLevel ) {\n\t\t#include \n\t\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryVec = flipNormal * vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec3 queryVec = flipNormal * vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\n\t\t\tvec4 envMapColor = textureCubeUV( queryVec, 1.0 );\n\t\t#else\n\t\t\tvec4 envMapColor = vec4( 0.0 );\n\t\t#endif\n\t\treturn PI * envMapColor.rgb * envMapIntensity;\n\t}\n\tfloat getSpecularMIPLevel( const in float blinnShininessExponent, const in int maxMIPLevel ) {\n\t\tfloat maxMIPLevelScalar = float( maxMIPLevel );\n\t\tfloat desiredMIPLevel = maxMIPLevelScalar - 0.79248 - 0.5 * log2( pow2( blinnShininessExponent ) + 1.0 );\n\t\treturn clamp( desiredMIPLevel, 0.0, maxMIPLevelScalar );\n\t}\n\tvec3 getLightProbeIndirectRadiance( const in GeometricContext geometry, const in float blinnShininessExponent, const in int maxMIPLevel ) {\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( -geometry.viewDir, geometry.normal );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( -geometry.viewDir, geometry.normal, refractionRatio );\n\t\t#endif\n\t\t#include \n\t\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n\t\tfloat specularMIPLevel = getSpecularMIPLevel( blinnShininessExponent, maxMIPLevel );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryReflectVec = flipNormal * vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec3 queryReflectVec = flipNormal * vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\n\t\t\tvec4 envMapColor = textureCubeUV(queryReflectVec, BlinnExponentToGGXRoughness(blinnShininessExponent));\n\t\t#elif defined( ENVMAP_TYPE_EQUIREC )\n\t\t\tvec2 sampleUV;\n\t\t\tsampleUV.y = saturate( flipNormal * reflectVec.y * 0.5 + 0.5 );\n\t\t\tsampleUV.x = atan( flipNormal * reflectVec.z, flipNormal * reflectVec.x ) * RECIPROCAL_PI2 + 0.5;\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = texture2DLodEXT( envMap, sampleUV, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = texture2D( envMap, sampleUV, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_SPHERE )\n\t\t\tvec3 reflectView = flipNormal * normalize( ( viewMatrix * vec4( reflectVec, 0.0 ) ).xyz + vec3( 0.0,0.0,1.0 ) );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = texture2DLodEXT( envMap, reflectView.xy * 0.5 + 0.5, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = texture2D( envMap, reflectView.xy * 0.5 + 0.5, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#endif\n\t\treturn envMapColor.rgb * envMapIntensity;\n\t}\n#endif\n", +lights_phong_fragment:"BlinnPhongMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;\n",lights_phong_pars_fragment:"varying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\nstruct BlinnPhongMaterial {\n\tvec3\tdiffuseColor;\n\tvec3\tspecularColor;\n\tfloat\tspecularShininess;\n\tfloat\tspecularStrength;\n};\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n\treflectedLight.directSpecular += irradiance * BRDF_Specular_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess ) * material.specularStrength;\n}\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_BlinnPhong\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_BlinnPhong\n#define Material_LightProbeLOD( material )\t(0)\n", +lights_physical_fragment:"PhysicalMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\nmaterial.specularRoughness = clamp( roughnessFactor, 0.04, 1.0 );\n#ifdef STANDARD\n\tmaterial.specularColor = mix( vec3( DEFAULT_SPECULAR_COEFFICIENT ), diffuseColor.rgb, metalnessFactor );\n#else\n\tmaterial.specularColor = mix( vec3( MAXIMUM_SPECULAR_COEFFICIENT * pow2( reflectivity ) ), diffuseColor.rgb, metalnessFactor );\n\tmaterial.clearCoat = saturate( clearCoat );\tmaterial.clearCoatRoughness = clamp( clearCoatRoughness, 0.04, 1.0 );\n#endif\n", +lights_physical_pars_fragment:"struct PhysicalMaterial {\n\tvec3\tdiffuseColor;\n\tfloat\tspecularRoughness;\n\tvec3\tspecularColor;\n\t#ifndef STANDARD\n\t\tfloat clearCoat;\n\t\tfloat clearCoatRoughness;\n\t#endif\n};\n#define MAXIMUM_SPECULAR_COEFFICIENT 0.16\n#define DEFAULT_SPECULAR_COEFFICIENT 0.04\nfloat clearCoatDHRApprox( const in float roughness, const in float dotNL ) {\n\treturn DEFAULT_SPECULAR_COEFFICIENT + ( 1.0 - DEFAULT_SPECULAR_COEFFICIENT ) * ( pow( 1.0 - dotNL, 5.0 ) * pow( 1.0 - roughness, 2.0 ) );\n}\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\t#ifndef STANDARD\n\t\tfloat clearCoatDHR = material.clearCoat * clearCoatDHRApprox( material.clearCoatRoughness, dotNL );\n\t#else\n\t\tfloat clearCoatDHR = 0.0;\n\t#endif\n\treflectedLight.directSpecular += ( 1.0 - clearCoatDHR ) * irradiance * BRDF_Specular_GGX( directLight, geometry, material.specularColor, material.specularRoughness );\n\treflectedLight.directDiffuse += ( 1.0 - clearCoatDHR ) * irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n\t#ifndef STANDARD\n\t\treflectedLight.directSpecular += irradiance * material.clearCoat * BRDF_Specular_GGX( directLight, geometry, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearCoatRoughness );\n\t#endif\n}\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 clearCoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\t#ifndef STANDARD\n\t\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\t\tfloat dotNL = dotNV;\n\t\tfloat clearCoatDHR = material.clearCoat * clearCoatDHRApprox( material.clearCoatRoughness, dotNL );\n\t#else\n\t\tfloat clearCoatDHR = 0.0;\n\t#endif\n\treflectedLight.indirectSpecular += ( 1.0 - clearCoatDHR ) * radiance * BRDF_Specular_GGX_Environment( geometry, material.specularColor, material.specularRoughness );\n\t#ifndef STANDARD\n\t\treflectedLight.indirectSpecular += clearCoatRadiance * material.clearCoat * BRDF_Specular_GGX_Environment( geometry, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearCoatRoughness );\n\t#endif\n}\n#define RE_Direct\t\t\t\tRE_Direct_Physical\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Physical\n#define RE_IndirectSpecular\t\tRE_IndirectSpecular_Physical\n#define Material_BlinnShininessExponent( material ) GGXRoughnessToBlinnExponent( material.specularRoughness )\n#define Material_ClearCoat_BlinnShininessExponent( material ) GGXRoughnessToBlinnExponent( material.clearCoatRoughness )\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\n\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\n}\n", +lights_template:"\nGeometricContext geometry;\ngeometry.position = - vViewPosition;\ngeometry.normal = normal;\ngeometry.viewDir = normalize( vViewPosition );\nIncidentLight directLight;\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\n\tPointLight pointLight;\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tpointLight = pointLights[ i ];\n\t\tgetPointDirectLightIrradiance( pointLight, geometry, directLight );\n\t\t#ifdef USE_SHADOWMAP\n\t\tdirectLight.color *= all( bvec2( pointLight.shadow, directLight.visible ) ) ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n#endif\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\n\tSpotLight spotLight;\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tspotLight = spotLights[ i ];\n\t\tgetSpotDirectLightIrradiance( spotLight, geometry, directLight );\n\t\t#ifdef USE_SHADOWMAP\n\t\tdirectLight.color *= all( bvec2( spotLight.shadow, directLight.visible ) ) ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n#endif\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\n\tDirectionalLight directionalLight;\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tgetDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );\n\t\t#ifdef USE_SHADOWMAP\n\t\tdirectLight.color *= all( bvec2( directionalLight.shadow, directLight.visible ) ) ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n#endif\n#if defined( RE_IndirectDiffuse )\n\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n\t#ifdef USE_LIGHTMAP\n\t\tvec3 lightMapIrradiance = texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tlightMapIrradiance *= PI;\n\t\t#endif\n\t\tirradiance += lightMapIrradiance;\n\t#endif\n\t#if ( NUM_HEMI_LIGHTS > 0 )\n\t\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\t\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t}\n\t#endif\n\t#if defined( USE_ENVMAP ) && defined( PHYSICAL ) && defined( ENVMAP_TYPE_CUBE_UV )\n\t \tirradiance += getLightProbeIndirectIrradiance( geometry, 8 );\n\t#endif\n\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\n#endif\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n\tvec3 radiance = getLightProbeIndirectRadiance( geometry, Material_BlinnShininessExponent( material ), 8 );\n\t#ifndef STANDARD\n\t\tvec3 clearCoatRadiance = getLightProbeIndirectRadiance( geometry, Material_ClearCoat_BlinnShininessExponent( material ), 8 );\n\t#else\n\t\tvec3 clearCoatRadiance = vec3( 0.0 );\n\t#endif\n\t\t\n\tRE_IndirectSpecular( radiance, clearCoatRadiance, geometry, material, reflectedLight );\n#endif\n", +logdepthbuf_fragment:"#if defined(USE_LOGDEPTHBUF) && defined(USE_LOGDEPTHBUF_EXT)\n\tgl_FragDepthEXT = log2(vFragDepth) * logDepthBufFC * 0.5;\n#endif",logdepthbuf_pars_fragment:"#ifdef USE_LOGDEPTHBUF\n\tuniform float logDepthBufFC;\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvarying float vFragDepth;\n\t#endif\n#endif\n",logdepthbuf_pars_vertex:"#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvarying float vFragDepth;\n\t#endif\n\tuniform float logDepthBufFC;\n#endif",logdepthbuf_vertex:"#ifdef USE_LOGDEPTHBUF\n\tgl_Position.z = log2(max( EPSILON, gl_Position.w + 1.0 )) * logDepthBufFC;\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvFragDepth = 1.0 + gl_Position.w;\n\t#else\n\t\tgl_Position.z = (gl_Position.z - 1.0) * gl_Position.w;\n\t#endif\n#endif\n", +map_fragment:"#ifdef USE_MAP\n\tvec4 texelColor = texture2D( map, vUv );\n\ttexelColor = mapTexelToLinear( texelColor );\n\tdiffuseColor *= texelColor;\n#endif\n",map_pars_fragment:"#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif\n",map_particle_fragment:"#ifdef USE_MAP\n\tvec4 mapTexel = texture2D( map, vec2( gl_PointCoord.x, 1.0 - gl_PointCoord.y ) * offsetRepeat.zw + offsetRepeat.xy );\n\tdiffuseColor *= mapTexelToLinear( mapTexel );\n#endif\n",map_particle_pars_fragment:"#ifdef USE_MAP\n\tuniform vec4 offsetRepeat;\n\tuniform sampler2D map;\n#endif\n", +metalnessmap_fragment:"float metalnessFactor = metalness;\n#ifdef USE_METALNESSMAP\n\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\n\tmetalnessFactor *= texelMetalness.r;\n#endif\n",metalnessmap_pars_fragment:"#ifdef USE_METALNESSMAP\n\tuniform sampler2D metalnessMap;\n#endif",morphnormal_vertex:"#ifdef USE_MORPHNORMALS\n\tobjectNormal += ( morphNormal0 - normal ) * morphTargetInfluences[ 0 ];\n\tobjectNormal += ( morphNormal1 - normal ) * morphTargetInfluences[ 1 ];\n\tobjectNormal += ( morphNormal2 - normal ) * morphTargetInfluences[ 2 ];\n\tobjectNormal += ( morphNormal3 - normal ) * morphTargetInfluences[ 3 ];\n#endif\n", +morphtarget_pars_vertex:"#ifdef USE_MORPHTARGETS\n\t#ifndef USE_MORPHNORMALS\n\tuniform float morphTargetInfluences[ 8 ];\n\t#else\n\tuniform float morphTargetInfluences[ 4 ];\n\t#endif\n#endif",morphtarget_vertex:"#ifdef USE_MORPHTARGETS\n\ttransformed += ( morphTarget0 - position ) * morphTargetInfluences[ 0 ];\n\ttransformed += ( morphTarget1 - position ) * morphTargetInfluences[ 1 ];\n\ttransformed += ( morphTarget2 - position ) * morphTargetInfluences[ 2 ];\n\ttransformed += ( morphTarget3 - position ) * morphTargetInfluences[ 3 ];\n\t#ifndef USE_MORPHNORMALS\n\ttransformed += ( morphTarget4 - position ) * morphTargetInfluences[ 4 ];\n\ttransformed += ( morphTarget5 - position ) * morphTargetInfluences[ 5 ];\n\ttransformed += ( morphTarget6 - position ) * morphTargetInfluences[ 6 ];\n\ttransformed += ( morphTarget7 - position ) * morphTargetInfluences[ 7 ];\n\t#endif\n#endif\n", +normal_flip:"#ifdef DOUBLE_SIDED\n\tfloat flipNormal = ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n#else\n\tfloat flipNormal = 1.0;\n#endif\n",normal_fragment:"#ifdef FLAT_SHADED\n\tvec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );\n\tvec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );\n\tvec3 normal = normalize( cross( fdx, fdy ) );\n#else\n\tvec3 normal = normalize( vNormal ) * flipNormal;\n#endif\n#ifdef USE_NORMALMAP\n\tnormal = perturbNormal2Arb( -vViewPosition, normal );\n#elif defined( USE_BUMPMAP )\n\tnormal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd() );\n#endif\n", +normalmap_pars_fragment:"#ifdef USE_NORMALMAP\n\tuniform sampler2D normalMap;\n\tuniform vec2 normalScale;\n\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm ) {\n\t\tvec3 q0 = dFdx( eye_pos.xyz );\n\t\tvec3 q1 = dFdy( eye_pos.xyz );\n\t\tvec2 st0 = dFdx( vUv.st );\n\t\tvec2 st1 = dFdy( vUv.st );\n\t\tvec3 S = normalize( q0 * st1.t - q1 * st0.t );\n\t\tvec3 T = normalize( -q0 * st1.s + q1 * st0.s );\n\t\tvec3 N = normalize( surf_norm );\n\t\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\t\tmapN.xy = normalScale * mapN.xy;\n\t\tmat3 tsn = mat3( S, T, N );\n\t\treturn normalize( tsn * mapN );\n\t}\n#endif\n", +packing:"vec3 packNormalToRGB( const in vec3 normal ) {\n return normalize( normal ) * 0.5 + 0.5;\n}\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\n return 1.0 - 2.0 * rgb.xyz;\n}\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;\nconst vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. );\nconst vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );\nconst float ShiftRight8 = 1. / 256.;\nvec4 packDepthToRGBA( const in float v ) {\n\tvec4 r = vec4( fract( v * PackFactors ), v );\n\tr.yzw -= r.xyz * ShiftRight8;\treturn r * PackUpscale;\n}\nfloat unpackRGBAToDepth( const in vec4 v ) {\n\treturn dot( v, UnpackFactors );\n}\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\n return ( viewZ + near ) / ( near - far );\n}\nfloat orthographicDepthToViewZ( const in float linearClipZ, const in float near, const in float far ) {\n return linearClipZ * ( near - far ) - near;\n}\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\n return (( near + viewZ ) * far ) / (( far - near ) * viewZ );\n}\nfloat perspectiveDepthToViewZ( const in float invClipZ, const in float near, const in float far ) {\n return ( near * far ) / ( ( far - near ) * invClipZ - far );\n}\n", +premultiplied_alpha_fragment:"#ifdef PREMULTIPLIED_ALPHA\n\tgl_FragColor.rgb *= gl_FragColor.a;\n#endif\n",project_vertex:"#ifdef USE_SKINNING\n\tvec4 mvPosition = modelViewMatrix * skinned;\n#else\n\tvec4 mvPosition = modelViewMatrix * vec4( transformed, 1.0 );\n#endif\ngl_Position = projectionMatrix * mvPosition;\n",roughnessmap_fragment:"float roughnessFactor = roughness;\n#ifdef USE_ROUGHNESSMAP\n\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\n\troughnessFactor *= texelRoughness.r;\n#endif\n", +roughnessmap_pars_fragment:"#ifdef USE_ROUGHNESSMAP\n\tuniform sampler2D roughnessMap;\n#endif",shadowmap_pars_fragment:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHTS > 0\n\t\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHTS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHTS ];\n\t#endif\n\t#if NUM_SPOT_LIGHTS > 0\n\t\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHTS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHTS ];\n\t#endif\n\t#if NUM_POINT_LIGHTS > 0\n\t\tuniform sampler2D pointShadowMap[ NUM_POINT_LIGHTS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHTS ];\n\t#endif\n\tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\n\t\treturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\n\t}\n\tfloat texture2DShadowLerp( sampler2D depths, vec2 size, vec2 uv, float compare ) {\n\t\tconst vec2 offset = vec2( 0.0, 1.0 );\n\t\tvec2 texelSize = vec2( 1.0 ) / size;\n\t\tvec2 centroidUV = floor( uv * size + 0.5 ) / size;\n\t\tfloat lb = texture2DCompare( depths, centroidUV + texelSize * offset.xx, compare );\n\t\tfloat lt = texture2DCompare( depths, centroidUV + texelSize * offset.xy, compare );\n\t\tfloat rb = texture2DCompare( depths, centroidUV + texelSize * offset.yx, compare );\n\t\tfloat rt = texture2DCompare( depths, centroidUV + texelSize * offset.yy, compare );\n\t\tvec2 f = fract( uv * size + 0.5 );\n\t\tfloat a = mix( lb, lt, f.y );\n\t\tfloat b = mix( rb, rt, f.y );\n\t\tfloat c = mix( a, b, f.x );\n\t\treturn c;\n\t}\n\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n\t\tshadowCoord.xyz /= shadowCoord.w;\n\t\tshadowCoord.z += shadowBias;\n\t\tbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\n\t\tbool inFrustum = all( inFrustumVec );\n\t\tbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\n\t\tbool frustumTest = all( frustumTestVec );\n\t\tif ( frustumTest ) {\n\t\t#if defined( SHADOWMAP_TYPE_PCF )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx0 = - texelSize.x * shadowRadius;\n\t\t\tfloat dy0 = - texelSize.y * shadowRadius;\n\t\t\tfloat dx1 = + texelSize.x * shadowRadius;\n\t\t\tfloat dy1 = + texelSize.y * shadowRadius;\n\t\t\treturn (\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx0 = - texelSize.x * shadowRadius;\n\t\t\tfloat dy0 = - texelSize.y * shadowRadius;\n\t\t\tfloat dx1 = + texelSize.x * shadowRadius;\n\t\t\tfloat dy1 = + texelSize.y * shadowRadius;\n\t\t\treturn (\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy, shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#else\n\t\t\treturn texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#endif\n\t\t}\n\t\treturn 1.0;\n\t}\n\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\n\t\tvec3 absV = abs( v );\n\t\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\n\t\tabsV *= scaleToCube;\n\t\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\n\t\tvec2 planar = v.xy;\n\t\tfloat almostATexel = 1.5 * texelSizeY;\n\t\tfloat almostOne = 1.0 - almostATexel;\n\t\tif ( absV.z >= almostOne ) {\n\t\t\tif ( v.z > 0.0 )\n\t\t\t\tplanar.x = 4.0 - v.x;\n\t\t} else if ( absV.x >= almostOne ) {\n\t\t\tfloat signX = sign( v.x );\n\t\t\tplanar.x = v.z * signX + 2.0 * signX;\n\t\t} else if ( absV.y >= almostOne ) {\n\t\t\tfloat signY = sign( v.y );\n\t\t\tplanar.x = v.x + 2.0 * signY + 2.0;\n\t\t\tplanar.y = v.z * signY - 2.0;\n\t\t}\n\t\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\n\t}\n\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n\t\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\n\t\tvec3 lightToPosition = shadowCoord.xyz;\n\t\tvec3 bd3D = normalize( lightToPosition );\n\t\tfloat dp = ( length( lightToPosition ) - shadowBias ) / 1000.0;\n\t\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT )\n\t\t\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\n\t\t\treturn (\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#else\n\t\t\treturn texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\n\t\t#endif\n\t}\n#endif\n", +shadowmap_pars_vertex:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHTS > 0\n\t\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHTS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHTS ];\n\t#endif\n\t#if NUM_SPOT_LIGHTS > 0\n\t\tuniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHTS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHTS ];\n\t#endif\n\t#if NUM_POINT_LIGHTS > 0\n\t\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHTS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHTS ];\n\t#endif\n#endif\n", +shadowmap_vertex:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHTS > 0\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * worldPosition;\n\t}\n\t#endif\n\t#if NUM_SPOT_LIGHTS > 0\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tvSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * worldPosition;\n\t}\n\t#endif\n\t#if NUM_POINT_LIGHTS > 0\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * worldPosition;\n\t}\n\t#endif\n#endif\n", +shadowmask_pars_fragment:"float getShadowMask() {\n\tfloat shadow = 1.0;\n\t#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHTS > 0\n\tDirectionalLight directionalLight;\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tshadow *= bool( directionalLight.shadow ) ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t}\n\t#endif\n\t#if NUM_SPOT_LIGHTS > 0\n\tSpotLight spotLight;\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tspotLight = spotLights[ i ];\n\t\tshadow *= bool( spotLight.shadow ) ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t}\n\t#endif\n\t#if NUM_POINT_LIGHTS > 0\n\tPointLight pointLight;\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tpointLight = pointLights[ i ];\n\t\tshadow *= bool( pointLight.shadow ) ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ] ) : 1.0;\n\t}\n\t#endif\n\t#endif\n\treturn shadow;\n}\n", +skinbase_vertex:"#ifdef USE_SKINNING\n\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\n\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\n\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\n\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\n#endif",skinning_pars_vertex:"#ifdef USE_SKINNING\n\tuniform mat4 bindMatrix;\n\tuniform mat4 bindMatrixInverse;\n\t#ifdef BONE_TEXTURE\n\t\tuniform sampler2D boneTexture;\n\t\tuniform int boneTextureWidth;\n\t\tuniform int boneTextureHeight;\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tfloat j = i * 4.0;\n\t\t\tfloat x = mod( j, float( boneTextureWidth ) );\n\t\t\tfloat y = floor( j / float( boneTextureWidth ) );\n\t\t\tfloat dx = 1.0 / float( boneTextureWidth );\n\t\t\tfloat dy = 1.0 / float( boneTextureHeight );\n\t\t\ty = dy * ( y + 0.5 );\n\t\t\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\n\t\t\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\n\t\t\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\n\t\t\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\n\t\t\tmat4 bone = mat4( v1, v2, v3, v4 );\n\t\t\treturn bone;\n\t\t}\n\t#else\n\t\tuniform mat4 boneMatrices[ MAX_BONES ];\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tmat4 bone = boneMatrices[ int(i) ];\n\t\t\treturn bone;\n\t\t}\n\t#endif\n#endif\n", +skinning_vertex:"#ifdef USE_SKINNING\n\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\n\tvec4 skinned = vec4( 0.0 );\n\tskinned += boneMatX * skinVertex * skinWeight.x;\n\tskinned += boneMatY * skinVertex * skinWeight.y;\n\tskinned += boneMatZ * skinVertex * skinWeight.z;\n\tskinned += boneMatW * skinVertex * skinWeight.w;\n\tskinned = bindMatrixInverse * skinned;\n#endif\n",skinnormal_vertex:"#ifdef USE_SKINNING\n\tmat4 skinMatrix = mat4( 0.0 );\n\tskinMatrix += skinWeight.x * boneMatX;\n\tskinMatrix += skinWeight.y * boneMatY;\n\tskinMatrix += skinWeight.z * boneMatZ;\n\tskinMatrix += skinWeight.w * boneMatW;\n\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\n\tobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\n#endif\n", +specularmap_fragment:"float specularStrength;\n#ifdef USE_SPECULARMAP\n\tvec4 texelSpecular = texture2D( specularMap, vUv );\n\tspecularStrength = texelSpecular.r;\n#else\n\tspecularStrength = 1.0;\n#endif",specularmap_pars_fragment:"#ifdef USE_SPECULARMAP\n\tuniform sampler2D specularMap;\n#endif",tonemapping_fragment:"#if defined( TONE_MAPPING )\n gl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\n#endif\n",tonemapping_pars_fragment:"#define saturate(a) clamp( a, 0.0, 1.0 )\nuniform float toneMappingExposure;\nuniform float toneMappingWhitePoint;\nvec3 LinearToneMapping( vec3 color ) {\n return toneMappingExposure * color;\n}\nvec3 ReinhardToneMapping( vec3 color ) {\n color *= toneMappingExposure;\n return saturate( color / ( vec3( 1.0 ) + color ) );\n}\n#define Uncharted2Helper( x ) max( ( ( x * ( 0.15 * x + 0.10 * 0.50 ) + 0.20 * 0.02 ) / ( x * ( 0.15 * x + 0.50 ) + 0.20 * 0.30 ) ) - 0.02 / 0.30, vec3( 0.0 ) )\nvec3 Uncharted2ToneMapping( vec3 color ) {\n color *= toneMappingExposure;\n return saturate( Uncharted2Helper( color ) / Uncharted2Helper( vec3( toneMappingWhitePoint ) ) );\n}\nvec3 OptimizedCineonToneMapping( vec3 color ) {\n color *= toneMappingExposure;\n color = max( vec3( 0.0 ), color - 0.004 );\n return pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\n}\n", +uv_pars_fragment:"#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\n\tvarying vec2 vUv;\n#endif",uv_pars_vertex:"#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\n\tvarying vec2 vUv;\n\tuniform vec4 offsetRepeat;\n#endif\n", +uv_vertex:"#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\n\tvUv = uv * offsetRepeat.zw + offsetRepeat.xy;\n#endif",uv2_pars_fragment:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvarying vec2 vUv2;\n#endif",uv2_pars_vertex:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tattribute vec2 uv2;\n\tvarying vec2 vUv2;\n#endif", +uv2_vertex:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvUv2 = uv2;\n#endif",worldpos_vertex:"#if defined( USE_ENVMAP ) || defined( PHONG ) || defined( PHYSICAL ) || defined( LAMBERT ) || defined ( USE_SHADOWMAP )\n\t#ifdef USE_SKINNING\n\t\tvec4 worldPosition = modelMatrix * skinned;\n\t#else\n\t\tvec4 worldPosition = modelMatrix * vec4( transformed, 1.0 );\n\t#endif\n#endif\n",cube_frag:"uniform samplerCube tCube;\nuniform float tFlip;\nuniform float opacity;\nvarying vec3 vWorldPosition;\n#include \nvoid main() {\n\tgl_FragColor = textureCube( tCube, vec3( tFlip * vWorldPosition.x, vWorldPosition.yz ) );\n\tgl_FragColor.a *= opacity;\n}\n", +cube_vert:"varying vec3 vWorldPosition;\n#include \nvoid main() {\n\tvWorldPosition = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n}\n",depth_frag:"#if DEPTH_PACKING == 3200\n\tuniform float opacity;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#if DEPTH_PACKING == 3200\n\t\tdiffuseColor.a = opacity;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#if DEPTH_PACKING == 3200\n\t\tgl_FragColor = vec4( vec3( gl_FragCoord.z ), opacity );\n\t#elif DEPTH_PACKING == 3201\n\t\tgl_FragColor = packDepthToRGBA( gl_FragCoord.z );\n\t#endif\n}\n", +depth_vert:"#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}\n", +distanceRGBA_frag:"uniform vec3 lightPos;\nvarying vec4 vWorldPosition;\n#include \n#include \n#include \nvoid main () {\n\t#include \n\tgl_FragColor = packDepthToRGBA( length( vWorldPosition.xyz - lightPos.xyz ) / 1000.0 );\n}\n",distanceRGBA_vert:"varying vec4 vWorldPosition;\n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvWorldPosition = worldPosition;\n}\n", +equirect_frag:"uniform sampler2D tEquirect;\nuniform float tFlip;\nvarying vec3 vWorldPosition;\n#include \nvoid main() {\n\tvec3 direction = normalize( vWorldPosition );\n\tvec2 sampleUV;\n\tsampleUV.y = saturate( tFlip * direction.y * -0.5 + 0.5 );\n\tsampleUV.x = atan( direction.z, direction.x ) * RECIPROCAL_PI2 + 0.5;\n\tgl_FragColor = texture2D( tEquirect, sampleUV );\n}\n",equirect_vert:"varying vec3 vWorldPosition;\n#include \nvoid main() {\n\tvWorldPosition = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n}\n", +linedashed_frag:"uniform vec3 diffuse;\nuniform float opacity;\nuniform float dashSize;\nuniform float totalSize;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\n\t\tdiscard;\n\t}\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}\n", +linedashed_vert:"uniform float scale;\nattribute float lineDistance;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvLineDistance = scale * lineDistance;\n\tvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\n\tgl_Position = projectionMatrix * mvPosition;\n\t#include \n\t#include \n}\n",meshbasic_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tReflectedLight reflectedLight;\n\treflectedLight.directDiffuse = vec3( 0.0 );\n\treflectedLight.directSpecular = vec3( 0.0 );\n\treflectedLight.indirectDiffuse = diffuseColor.rgb;\n\treflectedLight.indirectSpecular = vec3( 0.0 );\n\t#include \n\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\n\t#include \n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}\n", +meshbasic_vert:"#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef USE_ENVMAP\n\t#include \n\t#include \n\t#include \n\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}\n", +meshlambert_frag:"uniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\nvarying vec3 vLightFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\treflectedLight.indirectDiffuse = getAmbientLightIrradiance( ambientLightColor );\n\t#include \n\treflectedLight.indirectDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb );\n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;\n\t#else\n\t\treflectedLight.directDiffuse = vLightFront;\n\t#endif\n\treflectedLight.directDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb ) * getShadowMask();\n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include \n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}\n", +meshlambert_vert:"#define LAMBERT\nvarying vec3 vLightFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}\n", +meshphong_frag:"#define PHONG\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}\n", +meshphong_vert:"#define PHONG\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n}\n", +meshphysical_frag:"#define PHYSICAL\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n#ifndef STANDARD\n\tuniform float clearCoat;\n\tuniform float clearCoatRoughness;\n#endif\nuniform float envMapIntensity;\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}\n", +meshphysical_vert:"#define PHYSICAL\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n}\n", +normal_frag:"uniform float opacity;\nvarying vec3 vNormal;\n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tgl_FragColor = vec4( packNormalToRGB( vNormal ), opacity );\n\t#include \n}\n",normal_vert:"varying vec3 vNormal;\n#include \n#include \n#include \n#include \nvoid main() {\n\tvNormal = normalize( normalMatrix * normal );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}\n", +points_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}\n", +points_vert:"uniform float size;\nuniform float scale;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#ifdef USE_SIZEATTENUATION\n\t\tgl_PointSize = size * ( scale / - mvPosition.z );\n\t#else\n\t\tgl_PointSize = size;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n}\n", +shadow_frag:"uniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tgl_FragColor = vec4( 0.0, 0.0, 0.0, opacity * ( 1.0 - getShadowMask() ) );\n}\n",shadow_vert:"#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n}\n"};O.prototype={constructor:O, +isColor:!0,r:1,g:1,b:1,set:function(a){a&&a.isColor?this.copy(a):"number"===typeof a?this.setHex(a):"string"===typeof a&&this.setStyle(a);return this},setScalar:function(a){this.b=this.g=this.r=a;return this},setHex:function(a){a=Math.floor(a);this.r=(a>>16&255)/255;this.g=(a>>8&255)/255;this.b=(a&255)/255;return this},setRGB:function(a,b,c){this.r=a;this.g=b;this.b=c;return this},setHSL:function(){function a(a,c,d){0>d&&(d+=1);1d?c:d<2/3?a+6*(c-a)*(2/3-d):a}return function(b, +c,d){b=T.euclideanModulo(b,1);c=T.clamp(c,0,1);d=T.clamp(d,0,1);0===c?this.r=this.g=this.b=d:(c=.5>=d?d*(1+c):d+c-d*c,d=2*d-c,this.r=a(d,c,b+1/3),this.g=a(d,c,b),this.b=a(d,c,b-1/3));return this}}(),setStyle:function(a){function b(b){void 0!==b&&1>parseFloat(b)&&console.warn("THREE.Color: Alpha component of "+a+" will be ignored.")}var c;if(c=/^((?:rgb|hsl)a?)\(\s*([^\)]*)\)/.exec(a)){var d=c[2];switch(c[1]){case "rgb":case "rgba":if(c=/^(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(d))return this.r= +Math.min(255,parseInt(c[1],10))/255,this.g=Math.min(255,parseInt(c[2],10))/255,this.b=Math.min(255,parseInt(c[3],10))/255,b(c[5]),this;if(c=/^(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(d))return this.r=Math.min(100,parseInt(c[1],10))/100,this.g=Math.min(100,parseInt(c[2],10))/100,this.b=Math.min(100,parseInt(c[3],10))/100,b(c[5]),this;break;case "hsl":case "hsla":if(c=/^([0-9]*\.?[0-9]+)\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(d)){var d=parseFloat(c[1])/ +360,e=parseInt(c[2],10)/100,f=parseInt(c[3],10)/100;b(c[5]);return this.setHSL(d,e,f)}}}else if(c=/^\#([A-Fa-f0-9]+)$/.exec(a)){c=c[1];d=c.length;if(3===d)return this.r=parseInt(c.charAt(0)+c.charAt(0),16)/255,this.g=parseInt(c.charAt(1)+c.charAt(1),16)/255,this.b=parseInt(c.charAt(2)+c.charAt(2),16)/255,this;if(6===d)return this.r=parseInt(c.charAt(0)+c.charAt(1),16)/255,this.g=parseInt(c.charAt(2)+c.charAt(3),16)/255,this.b=parseInt(c.charAt(4)+c.charAt(5),16)/255,this}a&&0=h?k/(e+f): +k/(2-e-f);switch(e){case b:g=(c-d)/k+(cthis.max.x||a.ythis.max.y?!1:!0},containsBox:function(a){return this.min.x<=a.min.x&&a.max.x<=this.max.x&& +this.min.y<=a.min.y&&a.max.y<=this.max.y?!0:!1},getParameter:function(a,b){return(b||new B).set((a.x-this.min.x)/(this.max.x-this.min.x),(a.y-this.min.y)/(this.max.y-this.min.y))},intersectsBox:function(a){return a.max.xthis.max.x||a.max.ythis.max.y?!1:!0},clampPoint:function(a,b){return(b||new B).copy(a).clamp(this.min,this.max)},distanceToPoint:function(){var a=new B;return function(b){return a.copy(b).clamp(this.min,this.max).sub(b).length()}}(),intersect:function(a){this.min.max(a.min); +this.max.min(a.max);return this},union:function(a){this.min.min(a.min);this.max.max(a.max);return this},translate:function(a){this.min.add(a);this.max.add(a);return this},equals:function(a){return a.min.equals(this.min)&&a.max.equals(this.max)}};U.prototype={constructor:U,isMaterial:!0,get needsUpdate(){return this._needsUpdate},set needsUpdate(a){!0===a&&this.update();this._needsUpdate=a},setValues:function(a){if(void 0!==a)for(var b in a){var c=a[b];if(void 0===c)console.warn("THREE.Material: '"+ +b+"' parameter is undefined.");else{var d=this[b];void 0===d?console.warn("THREE."+this.type+": '"+b+"' is not a property of this material."):d&&d.isColor?d.set(c):d&&d.isVector3&&c&&c.isVector3?d.copy(c):this[b]="overdraw"===b?Number(c):c}}},toJSON:function(a){function b(a){var b=[],c;for(c in a){var d=a[c];delete d.metadata;b.push(d)}return b}var c=void 0===a;c&&(a={textures:{},images:{}});var d={metadata:{version:4.4,type:"Material",generator:"Material.toJSON"}};d.uuid=this.uuid;d.type=this.type; +""!==this.name&&(d.name=this.name);this.color&&this.color.isColor&&(d.color=this.color.getHex());void 0!==this.roughness&&(d.roughness=this.roughness);void 0!==this.metalness&&(d.metalness=this.metalness);this.emissive&&this.emissive.isColor&&(d.emissive=this.emissive.getHex());this.specular&&this.specular.isColor&&(d.specular=this.specular.getHex());void 0!==this.shininess&&(d.shininess=this.shininess);this.map&&this.map.isTexture&&(d.map=this.map.toJSON(a).uuid);this.alphaMap&&this.alphaMap.isTexture&& +(d.alphaMap=this.alphaMap.toJSON(a).uuid);this.lightMap&&this.lightMap.isTexture&&(d.lightMap=this.lightMap.toJSON(a).uuid);this.bumpMap&&this.bumpMap.isTexture&&(d.bumpMap=this.bumpMap.toJSON(a).uuid,d.bumpScale=this.bumpScale);this.normalMap&&this.normalMap.isTexture&&(d.normalMap=this.normalMap.toJSON(a).uuid,d.normalScale=this.normalScale.toArray());this.displacementMap&&this.displacementMap.isTexture&&(d.displacementMap=this.displacementMap.toJSON(a).uuid,d.displacementScale=this.displacementScale, +d.displacementBias=this.displacementBias);this.roughnessMap&&this.roughnessMap.isTexture&&(d.roughnessMap=this.roughnessMap.toJSON(a).uuid);this.metalnessMap&&this.metalnessMap.isTexture&&(d.metalnessMap=this.metalnessMap.toJSON(a).uuid);this.emissiveMap&&this.emissiveMap.isTexture&&(d.emissiveMap=this.emissiveMap.toJSON(a).uuid);this.specularMap&&this.specularMap.isTexture&&(d.specularMap=this.specularMap.toJSON(a).uuid);this.envMap&&this.envMap.isTexture&&(d.envMap=this.envMap.toJSON(a).uuid,d.reflectivity= +this.reflectivity);void 0!==this.size&&(d.size=this.size);void 0!==this.sizeAttenuation&&(d.sizeAttenuation=this.sizeAttenuation);1!==this.blending&&(d.blending=this.blending);2!==this.shading&&(d.shading=this.shading);0!==this.side&&(d.side=this.side);0!==this.vertexColors&&(d.vertexColors=this.vertexColors);1>this.opacity&&(d.opacity=this.opacity);!0===this.transparent&&(d.transparent=this.transparent);d.depthFunc=this.depthFunc;d.depthTest=this.depthTest;d.depthWrite=this.depthWrite;0e&&(e=m);l>f&&(f=l);n>g&&(g=n)}this.min.set(b,c,d);this.max.set(e,f,g)},setFromPoints:function(a){this.makeEmpty();for(var b=0,c=a.length;bthis.max.x||a.ythis.max.y|| +a.zthis.max.z?!1:!0},containsBox:function(a){return this.min.x<=a.min.x&&a.max.x<=this.max.x&&this.min.y<=a.min.y&&a.max.y<=this.max.y&&this.min.z<=a.min.z&&a.max.z<=this.max.z?!0:!1},getParameter:function(a,b){return(b||new q).set((a.x-this.min.x)/(this.max.x-this.min.x),(a.y-this.min.y)/(this.max.y-this.min.y),(a.z-this.min.z)/(this.max.z-this.min.z))},intersectsBox:function(a){return a.max.xthis.max.x||a.max.ythis.max.y||a.max.zthis.max.z?!1:!0},intersectsSphere:function(){var a;return function(b){void 0===a&&(a=new q);this.clampPoint(b.center,a);return a.distanceToSquared(b.center)<=b.radius*b.radius}}(),intersectsPlane:function(a){var b,c;0=a.constant},clampPoint:function(a,b){return(b||new q).copy(a).clamp(this.min,this.max)},distanceToPoint:function(){var a=new q;return function(b){return a.copy(b).clamp(this.min,this.max).sub(b).length()}}(),getBoundingSphere:function(){var a=new q;return function(b){b=b||new Ca;this.getCenter(b.center);b.radius=.5*this.getSize(a).length();return b}}(),intersect:function(a){this.min.max(a.min);this.max.min(a.max); +this.isEmpty()&&this.makeEmpty();return this},union:function(a){this.min.min(a.min);this.max.max(a.max);return this},applyMatrix4:function(){var a=[new q,new q,new q,new q,new q,new q,new q,new q];return function(b){if(this.isEmpty())return this;a[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(b);a[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(b);a[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(b);a[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(b);a[4].set(this.max.x, +this.min.y,this.min.z).applyMatrix4(b);a[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(b);a[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(b);a[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(b);this.setFromPoints(a);return this}}(),translate:function(a){this.min.add(a);this.max.add(a);return this},equals:function(a){return a.min.equals(this.min)&&a.max.equals(this.max)}};Ca.prototype={constructor:Ca,set:function(a,b){this.center.copy(a);this.radius=b;return this},setFromPoints:function(){var a= +new Ba;return function(b,c){var d=this.center;void 0!==c?d.copy(c):a.setFromPoints(b).getCenter(d);for(var e=0,f=0,g=b.length;f=this.radius},containsPoint:function(a){return a.distanceToSquared(this.center)<=this.radius*this.radius},distanceToPoint:function(a){return a.distanceTo(this.center)- +this.radius},intersectsSphere:function(a){var b=this.radius+a.radius;return a.center.distanceToSquared(this.center)<=b*b},intersectsBox:function(a){return a.intersectsSphere(this)},intersectsPlane:function(a){return Math.abs(this.center.dot(a.normal)-a.constant)<=this.radius},clampPoint:function(a,b){var c=this.center.distanceToSquared(a),d=b||new q;d.copy(a);c>this.radius*this.radius&&(d.sub(this.center).normalize(),d.multiplyScalar(this.radius).add(this.center));return d},getBoundingBox:function(a){a= +a||new Ba;a.set(this.center,this.center);a.expandByScalar(this.radius);return a},applyMatrix4:function(a){this.center.applyMatrix4(a);this.radius*=a.getMaxScaleOnAxis();return this},translate:function(a){this.center.add(a);return this},equals:function(a){return a.center.equals(this.center)&&a.radius===this.radius}};Ia.prototype={constructor:Ia,isMatrix3:!0,set:function(a,b,c,d,e,f,g,h,k){var m=this.elements;m[0]=a;m[1]=d;m[2]=g;m[3]=b;m[4]=e;m[5]=h;m[6]=c;m[7]=f;m[8]=k;return this},identity:function(){this.set(1, +0,0,0,1,0,0,0,1);return this},clone:function(){return(new this.constructor).fromArray(this.elements)},copy:function(a){a=a.elements;this.set(a[0],a[3],a[6],a[1],a[4],a[7],a[2],a[5],a[8]);return this},setFromMatrix4:function(a){a=a.elements;this.set(a[0],a[4],a[8],a[1],a[5],a[9],a[2],a[6],a[10]);return this},applyToVector3Array:function(){var a;return function(b,c,d){void 0===a&&(a=new q);void 0===c&&(c=0);void 0===d&&(d=b.length);for(var e=0;ec;c++)this.elements[c]=a[c+b];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);var c=this.elements;a[b]=c[0];a[b+1]=c[1];a[b+2]=c[2];a[b+3]=c[3];a[b+4]=c[4];a[b+5]=c[5];a[b+6]=c[6];a[b+7]=c[7];a[b+8]=c[8];return a}};va.prototype={constructor:va,set:function(a,b){this.normal.copy(a); +this.constant=b;return this},setComponents:function(a,b,c,d){this.normal.set(a,b,c);this.constant=d;return this},setFromNormalAndCoplanarPoint:function(a,b){this.normal.copy(a);this.constant=-b.dot(this.normal);return this},setFromCoplanarPoints:function(){var a=new q,b=new q;return function(c,d,e){d=a.subVectors(e,d).cross(b.subVectors(c,d)).normalize();this.setFromNormalAndCoplanarPoint(d,c);return this}}(),clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.normal.copy(a.normal); +this.constant=a.constant;return this},normalize:function(){var a=1/this.normal.length();this.normal.multiplyScalar(a);this.constant*=a;return this},negate:function(){this.constant*=-1;this.normal.negate();return this},distanceToPoint:function(a){return this.normal.dot(a)+this.constant},distanceToSphere:function(a){return this.distanceToPoint(a.center)-a.radius},projectPoint:function(a,b){return this.orthoPoint(a,b).sub(a).negate()},orthoPoint:function(a,b){var c=this.distanceToPoint(a);return(b|| +new q).copy(this.normal).multiplyScalar(c)},intersectLine:function(){var a=new q;return function(b,c){var d=c||new q,e=b.delta(a),f=this.normal.dot(e);if(0===f){if(0===this.distanceToPoint(b.start))return d.copy(b.start)}else return f=-(b.start.dot(this.normal)+this.constant)/f,0>f||1b&&0a&&0c;c++)b[c].copy(a.planes[c]);return this},setFromMatrix:function(a){var b=this.planes,c=a.elements;a=c[0];var d=c[1],e=c[2],f=c[3],g=c[4],h=c[5],k=c[6],m=c[7],l=c[8],n=c[9],p=c[10],r=c[11],q=c[12],t=c[13],D=c[14],c=c[15]; +b[0].setComponents(f-a,m-g,r-l,c-q).normalize();b[1].setComponents(f+a,m+g,r+l,c+q).normalize();b[2].setComponents(f+d,m+h,r+n,c+t).normalize();b[3].setComponents(f-d,m-h,r-n,c-t).normalize();b[4].setComponents(f-e,m-k,r-p,c-D).normalize();b[5].setComponents(f+e,m+k,r+p,c+D).normalize();return this},intersectsObject:function(){var a=new Ca;return function(b){var c=b.geometry;null===c.boundingSphere&&c.computeBoundingSphere();a.copy(c.boundingSphere).applyMatrix4(b.matrixWorld);return this.intersectsSphere(a)}}(), +intersectsSprite:function(){var a=new Ca;return function(b){a.center.set(0,0,0);a.radius=.7071067811865476;a.applyMatrix4(b.matrixWorld);return this.intersectsSphere(a)}}(),intersectsSphere:function(a){var b=this.planes,c=a.center;a=-a.radius;for(var d=0;6>d;d++)if(b[d].distanceToPoint(c)e;e++){var f=d[e];a.x=0g&&0>f)return!1}return!0}}(),containsPoint:function(a){for(var b=this.planes,c=0;6>c;c++)if(0>b[c].distanceToPoint(a))return!1;return!0}};ab.prototype={constructor:ab,set:function(a,b){this.origin.copy(a);this.direction.copy(b);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.origin.copy(a.origin); +this.direction.copy(a.direction);return this},at:function(a,b){return(b||new q).copy(this.direction).multiplyScalar(a).add(this.origin)},lookAt:function(a){this.direction.copy(a).sub(this.origin).normalize();return this},recast:function(){var a=new q;return function(b){this.origin.copy(this.at(b,a));return this}}(),closestPointToPoint:function(a,b){var c=b||new q;c.subVectors(a,this.origin);var d=c.dot(this.direction);return 0>d?c.copy(this.origin):c.copy(this.direction).multiplyScalar(d).add(this.origin)}, +distanceToPoint:function(a){return Math.sqrt(this.distanceSqToPoint(a))},distanceSqToPoint:function(){var a=new q;return function(b){var c=a.subVectors(b,this.origin).dot(this.direction);if(0>c)return this.origin.distanceToSquared(b);a.copy(this.direction).multiplyScalar(c).add(this.origin);return a.distanceToSquared(b)}}(),distanceSqToSegment:function(){var a=new q,b=new q,c=new q;return function(d,e,f,g){a.copy(d).add(e).multiplyScalar(.5);b.copy(e).sub(d).normalize();c.copy(this.origin).sub(a); +var h=.5*d.distanceTo(e),k=-this.direction.dot(b),m=c.dot(this.direction),l=-c.dot(b),n=c.lengthSq(),p=Math.abs(1-k*k),r;0=-r?e<=r?(h=1/p,d*=h,e*=h,k=d*(d+k*e+2*m)+e*(k*d+e+2*l)+n):(e=h,d=Math.max(0,-(k*e+m)),k=-d*d+e*(e+2*l)+n):(e=-h,d=Math.max(0,-(k*e+m)),k=-d*d+e*(e+2*l)+n):e<=-r?(d=Math.max(0,-(-k*h+m)),e=0f)return null;f=Math.sqrt(f-e);e=d-f;d+=f;return 0>e&&0>d?null:0>e?this.at(d,c):this.at(e,c)}}(),intersectsSphere:function(a){return this.distanceToPoint(a.center)<= +a.radius},distanceToPlane:function(a){var b=a.normal.dot(this.direction);if(0===b)return 0===a.distanceToPoint(this.origin)?0:null;a=-(this.origin.dot(a.normal)+a.constant)/b;return 0<=a?a:null},intersectPlane:function(a,b){var c=this.distanceToPlane(a);return null===c?null:this.at(c,b)},intersectsPlane:function(a){var b=a.distanceToPoint(this.origin);return 0===b||0>a.normal.dot(this.direction)*b?!0:!1},intersectBox:function(a,b){var c,d,e,f,g;d=1/this.direction.x;f=1/this.direction.y;g=1/this.direction.z; +var h=this.origin;0<=d?(c=(a.min.x-h.x)*d,d*=a.max.x-h.x):(c=(a.max.x-h.x)*d,d*=a.min.x-h.x);0<=f?(e=(a.min.y-h.y)*f,f*=a.max.y-h.y):(e=(a.max.y-h.y)*f,f*=a.min.y-h.y);if(c>f||e>d)return null;if(e>c||c!==c)c=e;if(fg||e>d)return null;if(e>c||c!==c)c=e;if(gd?null:this.at(0<=c?c:d,b)},intersectsBox:function(){var a=new q;return function(b){return null!==this.intersectBox(b,a)}}(),intersectTriangle:function(){var a= +new q,b=new q,c=new q,d=new q;return function(e,f,g,h,k){b.subVectors(f,e);c.subVectors(g,e);d.crossVectors(b,c);f=this.direction.dot(d);if(0f)h=-1,f=-f;else return null;a.subVectors(this.origin,e);e=h*this.direction.dot(c.crossVectors(a,c));if(0>e)return null;g=h*this.direction.dot(b.cross(a));if(0>g||e+g>f)return null;e=-h*a.dot(d);return 0>e?null:this.at(e/f,k)}}(),applyMatrix4:function(a){this.direction.add(this.origin).applyMatrix4(a);this.origin.applyMatrix4(a); +this.direction.sub(this.origin);this.direction.normalize();return this},equals:function(a){return a.origin.equals(this.origin)&&a.direction.equals(this.direction)}};bb.RotationOrders="XYZ YZX ZXY XZY YXZ ZYX".split(" ");bb.DefaultOrder="XYZ";bb.prototype={constructor:bb,isEuler:!0,get x(){return this._x},set x(a){this._x=a;this.onChangeCallback()},get y(){return this._y},set y(a){this._y=a;this.onChangeCallback()},get z(){return this._z},set z(a){this._z=a;this.onChangeCallback()},get order(){return this._order}, +set order(a){this._order=a;this.onChangeCallback()},set:function(a,b,c,d){this._x=a;this._y=b;this._z=c;this._order=d||this._order;this.onChangeCallback();return this},clone:function(){return new this.constructor(this._x,this._y,this._z,this._order)},copy:function(a){this._x=a._x;this._y=a._y;this._z=a._z;this._order=a._order;this.onChangeCallback();return this},setFromRotationMatrix:function(a,b,c){var d=T.clamp,e=a.elements;a=e[0];var f=e[4],g=e[8],h=e[1],k=e[5],m=e[9],l=e[2],n=e[6],e=e[10];b=b|| +this._order;"XYZ"===b?(this._y=Math.asin(d(g,-1,1)),.99999>Math.abs(g)?(this._x=Math.atan2(-m,e),this._z=Math.atan2(-f,a)):(this._x=Math.atan2(n,k),this._z=0)):"YXZ"===b?(this._x=Math.asin(-d(m,-1,1)),.99999>Math.abs(m)?(this._y=Math.atan2(g,e),this._z=Math.atan2(h,k)):(this._y=Math.atan2(-l,a),this._z=0)):"ZXY"===b?(this._x=Math.asin(d(n,-1,1)),.99999>Math.abs(n)?(this._y=Math.atan2(-l,e),this._z=Math.atan2(-f,k)):(this._y=0,this._z=Math.atan2(h,a))):"ZYX"===b?(this._y=Math.asin(-d(l,-1,1)),.99999> +Math.abs(l)?(this._x=Math.atan2(n,e),this._z=Math.atan2(h,a)):(this._x=0,this._z=Math.atan2(-f,k))):"YZX"===b?(this._z=Math.asin(d(h,-1,1)),.99999>Math.abs(h)?(this._x=Math.atan2(-m,k),this._y=Math.atan2(-l,a)):(this._x=0,this._y=Math.atan2(g,e))):"XZY"===b?(this._z=Math.asin(-d(f,-1,1)),.99999>Math.abs(f)?(this._x=Math.atan2(n,k),this._y=Math.atan2(g,a)):(this._x=Math.atan2(-m,e),this._y=0)):console.warn("THREE.Euler: .setFromRotationMatrix() given unsupported order: "+b);this._order=b;if(!1!==c)this.onChangeCallback(); +return this},setFromQuaternion:function(){var a;return function(b,c,d){void 0===a&&(a=new J);a.makeRotationFromQuaternion(b);return this.setFromRotationMatrix(a,c,d)}}(),setFromVector3:function(a,b){return this.set(a.x,a.y,a.z,b||this._order)},reorder:function(){var a=new ba;return function(b){a.setFromEuler(this);return this.setFromQuaternion(a,b)}}(),equals:function(a){return a._x===this._x&&a._y===this._y&&a._z===this._z&&a._order===this._order},fromArray:function(a){this._x=a[0];this._y=a[1]; +this._z=a[2];void 0!==a[3]&&(this._order=a[3]);this.onChangeCallback();return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this._x;a[b+1]=this._y;a[b+2]=this._z;a[b+3]=this._order;return a},toVector3:function(a){return a?a.set(this._x,this._y,this._z):new q(this._x,this._y,this._z)},onChange:function(a){this.onChangeCallback=a;return this},onChangeCallback:function(){}};Yc.prototype={constructor:Yc,set:function(a){this.mask=1<=b.x+b.y}}();wa.prototype={constructor:wa,set:function(a,b,c){this.a.copy(a);this.b.copy(b);this.c.copy(c);return this},setFromPointsAndIndices:function(a,b,c,d){this.a.copy(a[b]);this.b.copy(a[c]);this.c.copy(a[d]);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.a.copy(a.a);this.b.copy(a.b);this.c.copy(a.c); +return this},area:function(){var a=new q,b=new q;return function(){a.subVectors(this.c,this.b);b.subVectors(this.a,this.b);return.5*a.cross(b).length()}}(),midpoint:function(a){return(a||new q).addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)},normal:function(a){return wa.normal(this.a,this.b,this.c,a)},plane:function(a){return(a||new va).setFromCoplanarPoints(this.a,this.b,this.c)},barycoordFromPoint:function(a,b){return wa.barycoordFromPoint(a,this.a,this.b,this.c,b)},containsPoint:function(a){return wa.containsPoint(a, +this.a,this.b,this.c)},closestPointToPoint:function(){var a,b,c,d;return function(e,f){void 0===a&&(a=new va,b=[new gb,new gb,new gb],c=new q,d=new q);var g=f||new q,h=Infinity;a.setFromCoplanarPoints(this.a,this.b,this.c);a.projectPoint(e,c);if(!0===this.containsPoint(c))g.copy(c);else{b[0].set(this.a,this.b);b[1].set(this.b,this.c);b[2].set(this.c,this.a);for(var k=0;kd;d++)if(e[d]===e[(d+1)%3]){a.push(f);break}for(f=a.length-1;0<=f;f--)for(e=a[f],this.faces.splice(e,1),c=0,g=this.faceVertexUvs.length;cb.far?null:{distance:c,point:u.clone(),object:a}}function c(c,d,e,f,m,l,n,w){g.fromArray(f,3*l);h.fromArray(f,3*n);k.fromArray(f, +3*w);if(c=b(c,d,e,g,h,k,D))m&&(p.fromArray(m,2*l),r.fromArray(m,2*n),x.fromArray(m,2*w),c.uv=a(D,g,h,k,p,r,x)),c.face=new ea(l,n,w,wa.normal(g,h,k)),c.faceIndex=l;return c}var d=new J,e=new ab,f=new Ca,g=new q,h=new q,k=new q,m=new q,l=new q,n=new q,p=new B,r=new B,x=new B,t=new q,D=new q,u=new q;return function(q,t){var u=this.geometry,E=this.material,H=this.matrixWorld;if(void 0!==E&&(null===u.boundingSphere&&u.computeBoundingSphere(),f.copy(u.boundingSphere),f.applyMatrix4(H),!1!==q.ray.intersectsSphere(f)&& +(d.getInverse(H),e.copy(q.ray).applyMatrix4(d),null===u.boundingBox||!1!==e.intersectsBox(u.boundingBox)))){var F,M;if(u&&u.isBufferGeometry){var B,K,E=u.index,H=u.attributes,u=H.position.array;void 0!==H.uv&&(F=H.uv.array);if(null!==E)for(var H=E.array,z=0,C=H.length;zthis.scale.x*this.scale.y/4||c.push({distance:Math.sqrt(d),point:this.position, +face:null,object:this})}}(),clone:function(){return(new this.constructor(this.material)).copy(this)}});rc.prototype=Object.assign(Object.create(z.prototype),{constructor:rc,copy:function(a){z.prototype.copy.call(this,a,!1);a=a.levels;for(var b=0,c=a.length;b=d[e].distance)d[e- +1].object.visible=!1,d[e].object.visible=!0;else break;for(;ef||(l.applyMatrix4(this.matrixWorld),t=d.ray.origin.distanceTo(l),td.far||e.push({distance:t,point:h.clone().applyMatrix4(this.matrixWorld),index:g,face:null,faceIndex:null,object:this}))}else for(g=0,x=r.length/3-1;gf||(l.applyMatrix4(this.matrixWorld),t=d.ray.origin.distanceTo(l),td.far||e.push({distance:t,point:h.clone().applyMatrix4(this.matrixWorld), +index:g,face:null,faceIndex:null,object:this}))}else if(g&&g.isGeometry)for(k=g.vertices,m=k.length,g=0;gf||(l.applyMatrix4(this.matrixWorld),t=d.ray.origin.distanceTo(l),td.far||e.push({distance:t,point:h.clone().applyMatrix4(this.matrixWorld),index:g,face:null,faceIndex:null,object:this}))}}}(),clone:function(){return(new this.constructor(this.geometry,this.material)).copy(this)}});la.prototype=Object.assign(Object.create(Ta.prototype), +{constructor:la,isLineSegments:!0});xa.prototype=Object.create(U.prototype);xa.prototype.constructor=xa;xa.prototype.isPointsMaterial=!0;xa.prototype.copy=function(a){U.prototype.copy.call(this,a);this.color.copy(a.color);this.map=a.map;this.size=a.size;this.sizeAttenuation=a.sizeAttenuation;return this};Kb.prototype=Object.assign(Object.create(z.prototype),{constructor:Kb,isPoints:!0,raycast:function(){var a=new J,b=new ab,c=new Ca;return function(d,e){function f(a,c){var f=b.distanceSqToPoint(a); +if(fd.far||e.push({distance:m,distanceToRay:Math.sqrt(f),point:h.clone(),index:c,face:null,object:g})}}var g=this,h=this.geometry,k=this.matrixWorld,m=d.params.Points.threshold;null===h.boundingSphere&&h.computeBoundingSphere();c.copy(h.boundingSphere);c.applyMatrix4(k);if(!1!==d.ray.intersectsSphere(c)){a.getInverse(k);b.copy(d.ray).applyMatrix4(a);var m=m/((this.scale.x+this.scale.y+this.scale.z)/3), +l=m*m,m=new q;if(h&&h.isBufferGeometry){var n=h.index,h=h.attributes.position.array;if(null!==n)for(var p=n.array,n=0,r=p.length;nc)return null;var d=[],e=[],f=[],g,h,k;if(0=m--){console.warn("THREE.ShapeUtils: Unable to triangulate polygon! in triangulate()");break}g=h;c<=g&&(g=0);h=g+1;c<=h&&(h=0);k=h+1;c<=k&&(k=0);var l;a:{var n, +p,r,q,t,D,u,v;n=a[e[g]].x;p=a[e[g]].y;r=a[e[h]].x;q=a[e[h]].y;t=a[e[k]].x;D=a[e[k]].y;if(0>=(r-n)*(D-p)-(q-p)*(t-n))l=!1;else{var I,y,E,H,F,M,B,z,C,G;I=t-r;y=D-q;E=n-t;H=p-D;F=r-n;M=q-p;for(l=0;l=-Number.EPSILON&&z>=-Number.EPSILON&&B>=-Number.EPSILON)){l=!1;break a}l=!0}}if(l){d.push([a[e[g]],a[e[h]],a[e[k]]]);f.push([e[g],e[h],e[k]]);g=h;for(k=h+1;kNumber.EPSILON){if(0q||q>p)return[];k=m*l-k*n;if(0>k||k>p)return[]}else{if(0c?[]:k===c?f?[]:[g]:a<=c?[g,h]:[g,m]}function f(a,b,c,d){var e=b.x-a.x,f=b.y-a.y;b=c.x-a.x;c=c.y-a.y;var g=d.x-a.x;d=d.y-a.y;a=e*c-f*b;e=e*d-f*g;return Math.abs(a)>Number.EPSILON?(b=g*c-d*b,0e&&(e=d);var g=a+1;g>d&&(g=0);d=f(h[a],h[e],h[g],k[b]);if(!d)return!1;d=k.length-1;e=b-1;0>e&&(e=d);g=b+1;g>d&&(g=0);return(d=f(k[b],k[e],k[g],h[a]))?!0:!1}function d(a,b){var c,f;for(c=0;cN){console.log("Infinite Loop! Holes left:"+m.length+", Probably Hole outside Shape!");break}for(n=z;nk;k++)l=m[k].x+":"+m[k].y,l=n[l],void 0!==l&&(m[k]=l);return p.concat()},isClockWise:function(a){return 0>ra.area(a)},b2:function(){return function(a,b,c,d){var e=1-a;return e*e*b+2*(1-a)*a*c+a*a*d}}(),b3:function(){return function(a,b,c,d,e){var f=1-a,g=1-a;return f*f*f*b+3*g*g*a*c+3*(1-a)*a*a*d+a*a*a*e}}()};za.prototype=Object.create(Q.prototype);za.prototype.constructor= +za;za.prototype.addShapeList=function(a,b){for(var c=a.length,d=0;dNumber.EPSILON){var k=Math.sqrt(h),m=Math.sqrt(d*d+g*g),h=b.x-f/k;b=b.y+e/k;g=((c.x-g/m-h)*g-(c.y+d/m-b)*d)/(e*g-f*d);d=h+e*g-a.x;e=b+f*g-a.y;f= +d*d+e*e;if(2>=f)return new B(d,e);f=Math.sqrt(f/2)}else a=!1,e>Number.EPSILON?d>Number.EPSILON&&(a=!0):e<-Number.EPSILON?d<-Number.EPSILON&&(a=!0):Math.sign(f)===Math.sign(g)&&(a=!0),a?(d=-f,f=Math.sqrt(h)):(d=e,e=f,f=Math.sqrt(h/2));return new B(d/f,e/f)}function e(a,b){var c,d;for(L=a.length;0<=--L;){c=L;d=L-1;0>d&&(d=a.length-1);var e,f=r+2*l;for(e=0;eMath.abs(b.y-c.y)?[new B(b.x,1-b.z),new B(c.x,1-c.z),new B(d.x,1-d.z),new B(e.x,1-e.z)]:[new B(b.y,1-b.z),new B(c.y,1-c.z),new B(d.y,1-d.z),new B(e.y, +1-e.z)]}};Dc.prototype=Object.create(za.prototype);Dc.prototype.constructor=Dc;mb.prototype=Object.create(G.prototype);mb.prototype.constructor=mb;Vb.prototype=Object.create(Q.prototype);Vb.prototype.constructor=Vb;Wb.prototype=Object.create(G.prototype);Wb.prototype.constructor=Wb;Ec.prototype=Object.create(Q.prototype);Ec.prototype.constructor=Ec;Fc.prototype=Object.create(Q.prototype);Fc.prototype.constructor=Fc;Xb.prototype=Object.create(G.prototype);Xb.prototype.constructor=Xb;Gc.prototype=Object.create(Q.prototype); +Gc.prototype.constructor=Gc;cb.prototype=Object.create(Q.prototype);cb.prototype.constructor=cb;cb.prototype.addShapeList=function(a,b){for(var c=0,d=a.length;c=e)break a;else{f=b[1];a=e)break b}d=c;c=0}}for(;c>>1,ab;)--f;++f;if(0!==e||f!==d)e>=f&&(f=Math.max(f,1),e=f-1),d=this.getValueSize(),this.times=ma.arraySlice(c,e,f),this.values=ma.arraySlice(this.values,e*d,f*d);return this},validate:function(){var a=!0,b=this.getValueSize();0!==b-Math.floor(b)&&(console.error("invalid value size in track",this),a=!1);var c=this.times,b=this.values,d=c.length;0===d&&(console.error("track is empty", +this),a=!1);for(var e=null,f=0;f!==d;f++){var g=c[f];if("number"===typeof g&&isNaN(g)){console.error("time is not a valid number",this,f,g);a=!1;break}if(null!==e&&e>g){console.error("out of order keys",this,f,g,e);a=!1;break}e=g}if(void 0!==b&&ma.isTypedArray(b))for(f=0,c=b.length;f!==c;++f)if(d=b[f],isNaN(d)){console.error("value is not a valid number",this,f,d);a=!1;break}return a},optimize:function(){for(var a=this.times,b=this.values,c=this.getValueSize(),d=2302===this.getInterpolation(),e=1, +f=a.length-1,g=1;gk.opacity&&(k.transparent=!0);c.setTextures(h);return c.parse(k)}}()};wb.Handlers={handlers:[],add:function(a,b){this.handlers.push(a,b)},get:function(a){for(var b=this.handlers,c=0,d=b.length;cg;g++)p=v[k++],u=D[2*p],p=D[2*p+1],u=new B(u,p),2!==g&&c.faceVertexUvs[d][h].push(u),0!==g&&c.faceVertexUvs[d][h+1].push(u);n&&(n=3*v[k++],r.normal.set(z[n++],z[n++],z[n]),t.normal.copy(r.normal));if(x)for(d=0;4>d;d++)n=3*v[k++],x=new q(z[n++],z[n++],z[n]),2!==d&&r.vertexNormals.push(x),0!==d&&t.vertexNormals.push(x);w&&(w=v[k++],w=y[w],r.color.setHex(w),t.color.setHex(w));if(b)for(d= +0;4>d;d++)w=v[k++],w=y[w],2!==d&&r.vertexColors.push(new O(w)),0!==d&&t.vertexColors.push(new O(w));c.faces.push(r);c.faces.push(t)}else{r=new ea;r.a=v[k++];r.b=v[k++];r.c=v[k++];h&&(h=v[k++],r.materialIndex=h);h=c.faces.length;if(d)for(d=0;dg;g++)p=v[k++],u=D[2*p],p=D[2*p+1],u=new B(u,p),c.faceVertexUvs[d][h].push(u);n&&(n=3*v[k++],r.normal.set(z[n++],z[n++],z[n]));if(x)for(d=0;3>d;d++)n=3*v[k++],x=new q(z[n++],z[n++],z[n]),r.vertexNormals.push(x); +w&&(w=v[k++],r.color.setHex(y[w]));if(b)for(d=0;3>d;d++)w=v[k++],r.vertexColors.push(new O(y[w]));c.faces.push(r)}})(d);(function(){var b=void 0!==a.influencesPerVertex?a.influencesPerVertex:2;if(a.skinWeights)for(var d=0,g=a.skinWeights.length;dk)g=d+1;else if(0b&&(b=0);1Number.EPSILON&&(g.normalize(),c=Math.acos(T.clamp(d[k-1].dot(d[k]),-1,1)),e[k].applyMatrix4(h.makeRotationAxis(g,c))),f[k].crossVectors(d[k],e[k]);if(!0===b)for(c=Math.acos(T.clamp(e[0].dot(e[a]),-1,1)),c/=a,0=b)return b=c[a]-b,a=this.curves[a],c=a.getLength(),a.getPointAt(0===c?0:1-b/c);a++}return null}, +getLength:function(){var a=this.getCurveLengths();return a[a.length-1]},updateArcLengths:function(){this.needsUpdate=!0;this.cacheLengths=null;this.getLengths()},getCurveLengths:function(){if(this.cacheLengths&&this.cacheLengths.length===this.curves.length)return this.cacheLengths;for(var a=[],b=0,c=0,d=this.curves.length;cc;)c+=b;for(;c>b;)c-=b;cb.length-2?b.length-1:c+1],b=b[c>b.length-3?b.length-1:c+2],c=Xc.interpolate;return new B(c(d.x,e.x,f.x,b.x,a),c(d.y,e.y,f.y,b.y,a))};yb.prototype=Object.create(ia.prototype); +yb.prototype.constructor=yb;yb.prototype.getPoint=function(a){var b=ra.b3;return new B(b(a,this.v0.x,this.v1.x,this.v2.x,this.v3.x),b(a,this.v0.y,this.v1.y,this.v2.y,this.v3.y))};yb.prototype.getTangent=function(a){var b=Xc.tangentCubicBezier;return(new B(b(a,this.v0.x,this.v1.x,this.v2.x,this.v3.x),b(a,this.v0.y,this.v1.y,this.v2.y,this.v3.y))).normalize()};zb.prototype=Object.create(ia.prototype);zb.prototype.constructor=zb;zb.prototype.getPoint=function(a){var b=ra.b2;return new B(b(a,this.v0.x, +this.v1.x,this.v2.x),b(a,this.v0.y,this.v1.y,this.v2.y))};zb.prototype.getTangent=function(a){var b=Xc.tangentQuadraticBezier;return(new B(b(a,this.v0.x,this.v1.x,this.v2.x),b(a,this.v0.y,this.v1.y,this.v2.y))).normalize()};var de=Object.assign(Object.create(Oc.prototype),{fromPoints:function(a){this.moveTo(a[0].x,a[0].y);for(var b=1,c=a.length;bNumber.EPSILON){if(0>l&&(g=b[f],k=-k,h=b[e],l=-l),!(a.yh.y))if(a.y=== +g.y){if(a.x===g.x)return!0}else{e=l*(a.x-g.x)-k*(a.y-g.y);if(0===e)return!0;0>e||(d=!d)}}else if(a.y===g.y&&(h.x<=a.x&&a.x<=g.x||g.x<=a.x&&a.x<=h.x))return!0}return d}var e=ra.isClockWise,f=this.subPaths;if(0===f.length)return[];if(!0===b)return c(f);var g,h,k,l=[];if(1===f.length)return h=f[0],k=new Ab,k.curves=h.curves,l.push(k),l;var q=!e(f[0].getPoints()),q=a?!q:q;k=[];var n=[],p=[],r=0,x;n[r]=void 0;p[r]=[];for(var t=0,D=f.length;td&&this._mixBufferRegion(c,a,3*b,1-d,b);for(var d=b,f=b+b;d!==f;++d)if(c[d]!==c[d+b]){e.setValue(c,a);break}},saveOriginalState:function(){var a=this.buffer,b=this.valueSize,c=3*b;this.binding.getValue(a,c);for(var d= +b;d!==c;++d)a[d]=a[c+d%b];this.cumulativeWeight=0},restoreOriginalState:function(){this.binding.setValue(this.buffer,3*this.valueSize)},_select:function(a,b,c,d,e){if(.5<=d)for(d=0;d!==e;++d)a[b+d]=a[c+d]},_slerp:function(a,b,c,d,e){ba.slerpFlat(a,b,a,b,a,c,d)},_lerp:function(a,b,c,d,e){for(var f=1-d,g=0;g!==e;++g){var h=b+g;a[h]=a[h]*f+a[c+g]*d}}};fa.prototype={constructor:fa,getValue:function(a,b){this.bind();this.getValue(a,b)},setValue:function(a,b){this.bind();this.setValue(a,b)},bind:function(){var a= +this.node,b=this.parsedPath,c=b.objectName,d=b.propertyName,e=b.propertyIndex;a||(this.node=a=fa.findNode(this.rootNode,b.nodeName)||this.rootNode);this.getValue=this._getValue_unavailable;this.setValue=this._setValue_unavailable;if(a){if(c){var f=b.objectIndex;switch(c){case "materials":if(!a.material){console.error(" can not bind to material as node does not have a material",this);return}if(!a.material.materials){console.error(" can not bind to material.materials as node.material does not have a materials array", +this);return}a=a.material.materials;break;case "bones":if(!a.skeleton){console.error(" can not bind to bones as node does not have a skeleton",this);return}a=a.skeleton.bones;for(c=0;c=c){var n=c++,p=b[n];d[p.uuid]=q;b[q]=p;d[l]=n;b[n]=k;k=0;for(l=f;k!==l;++k){var p=e[k],r=p[q];p[q]=p[n];p[n]=r}}}this.nCachedObjects_=c},uncache:function(a){for(var b=this._objects,c=b.length,d=this.nCachedObjects_,e=this._indicesByUUID,f=this._bindings,g=f.length,h=0,k=arguments.length;h!==k;++h){var l=arguments[h].uuid,q=e[l];if(void 0!== +q)if(delete e[l],qb||0===c)return;this._startTime=null;b*=c}b*=this._updateTimeScale(a);c=this._updateTime(b);a=this._updateWeight(a);if(0c.parameterPositions[1]&& +(this.stopFading(),0===d&&(this.enabled=!1))}}return this._effectiveWeight=b},_updateTimeScale:function(a){var b=0;if(!this.paused){var b=this.timeScale,c=this._timeScaleInterpolant;if(null!==c){var d=c.evaluate(a)[0],b=b*d;a>c.parameterPositions[1]&&(this.stopWarping(),0===b?this.paused=!0:this.timeScale=b)}}return this._effectiveTimeScale=b},_updateTime:function(a){var b=this.time+a;if(0===a)return b;var c=this._clip.duration,d=this.loop,e=this._loopCount;if(2200===d)a:{if(-1===e&&(this.loopCount= +0,this._setEndings(!0,!0,!1)),b>=c)b=c;else if(0>b)b=0;else break a;this.clampWhenFinished?this.paused=!0:this.enabled=!1;this._mixer.dispatchEvent({type:"finished",action:this,direction:0>a?-1:1})}else{d=2202===d;-1===e&&(0<=a?(e=0,this._setEndings(!0,0===this.repetitions,d)):this._setEndings(0===this.repetitions,!0,d));if(b>=c||0>b){var f=Math.floor(b/c),b=b-c*f,e=e+Math.abs(f),g=this.repetitions-e;0>g?(this.clampWhenFinished?this.paused=!0:this.enabled=!1,b=0a,this._setEndings(a,!a,d)):this._setEndings(!1,!1,d),this._loopCount=e,this._mixer.dispatchEvent({type:"loop",action:this,loopDelta:f}))}if(d&&1===(e&1))return this.time=b,c-b}return this.time=b},_setEndings:function(a,b,c){var d=this._interpolantSettings;c?(d.endingStart=2401,d.endingEnd=2401):(d.endingStart=a?this.zeroSlopeAtStart?2401:2400:2402,d.endingEnd=b?this.zeroSlopeAtEnd?2401:2400:2402)},_scheduleFading:function(a,b,c){var d=this._mixer,e=d.time, +f=this._weightInterpolant;null===f&&(this._weightInterpolant=f=d._lendControlInterpolant());d=f.parameterPositions;f=f.sampleValues;d[0]=e;f[0]=b;d[1]=e+a;f[1]=c;return this}};Object.assign(Ud.prototype,sa.prototype,{clipAction:function(a,b){var c=b||this._root,d=c.uuid,e="string"===typeof a?Ha.findByName(c,a):a,c=null!==e?e.uuid:a,f=this._actionsByClip[c],g=null;if(void 0!==f){g=f.actionByRoot[d];if(void 0!==g)return g;g=f.knownActions[0];null===e&&(e=g._clip)}if(null===e)return null;e=new Td(this, +e,b);this._bindAction(e,g);this._addInactiveAction(e,c,d);return e},existingAction:function(a,b){var c=b||this._root,d=c.uuid,c="string"===typeof a?Ha.findByName(c,a):a,c=this._actionsByClip[c?c.uuid:a];return void 0!==c?c.actionByRoot[d]||null:null},stopAllAction:function(){for(var a=this._actions,b=this._nActiveActions,c=this._bindings,d=this._nActiveBindings,e=this._nActiveBindings=this._nActiveActions=0;e!==b;++e)a[e].reset();for(e=0;e!==d;++e)c[e].useCount=0;return this},update:function(a){a*= +this.timeScale;for(var b=this._actions,c=this._nActiveActions,d=this.time+=a,e=Math.sign(a),f=this._accuIndex^=1,g=0;g!==c;++g){var h=b[g];h.enabled&&h._update(d,a,e,f)}a=this._bindings;b=this._nActiveBindings;for(g=0;g!==b;++g)a[g].apply(f);return this},getRoot:function(){return this._root},uncacheClip:function(a){var b=this._actions;a=a.uuid;var c=this._actionsByClip,d=c[a];if(void 0!==d){for(var d=d.knownActions,e=0,f=d.length;e!==f;++e){var g=d[e];this._deactivateAction(g);var h=g._cacheIndex, +k=b[b.length-1];g._cacheIndex=null;g._byClipCacheIndex=null;k._cacheIndex=h;b[h]=k;b.pop();this._removeInactiveBindingsForAction(g)}delete c[a]}},uncacheRoot:function(a){a=a.uuid;var b=this._actionsByClip,c;for(c in b){var d=b[c].actionByRoot[a];void 0!==d&&(this._deactivateAction(d),this._removeInactiveAction(d))}c=this._bindingsByRootAndName[a];if(void 0!==c)for(var e in c)a=c[e],a.restoreOriginalState(),this._removeInactiveBinding(a)},uncacheAction:function(a,b){var c=this.existingAction(a,b); +null!==c&&(this._deactivateAction(c),this._removeInactiveAction(c))}});Object.assign(Ud.prototype,{_bindAction:function(a,b){var c=a._localRoot||this._root,d=a._clip.tracks,e=d.length,f=a._propertyBindings,g=a._interpolants,h=c.uuid,k=this._bindingsByRootAndName,l=k[h];void 0===l&&(l={},k[h]=l);for(k=0;k!==e;++k){var q=d[k],n=q.name,p=l[n];if(void 0===p){p=f[k];if(void 0!==p){null===p._cacheIndex&&(++p.referenceCount,this._addInactiveBinding(p,h,n));continue}p=new wd(fa.create(c,n,b&&b._propertyBindings[k].binding.parsedPath), +q.ValueTypeName,q.getValueSize());++p.referenceCount;this._addInactiveBinding(p,h,n)}f[k]=p;g[k].resultBuffer=p.buffer}},_activateAction:function(a){if(!this._isActiveAction(a)){if(null===a._cacheIndex){var b=(a._localRoot||this._root).uuid,c=a._clip.uuid,d=this._actionsByClip[c];this._bindAction(a,d&&d.knownActions[0]);this._addInactiveAction(a,c,b)}b=a._propertyBindings;c=0;for(d=b.length;c!==d;++c){var e=b[c];0===e.useCount++&&(this._lendBinding(e),e.saveOriginalState())}this._lendAction(a)}}, +_deactivateAction:function(a){if(this._isActiveAction(a)){for(var b=a._propertyBindings,c=0,d=b.length;c!==d;++c){var e=b[c];0===--e.useCount&&(e.restoreOriginalState(),this._takeBackBinding(e))}this._takeBackAction(a)}},_initMemoryManager:function(){this._actions=[];this._nActiveActions=0;this._actionsByClip={};this._bindings=[];this._nActiveBindings=0;this._bindingsByRootAndName={};this._controlInterpolants=[];this._nActiveControlInterpolants=0;var a=this;this.stats={actions:{get total(){return a._actions.length}, +get inUse(){return a._nActiveActions}},bindings:{get total(){return a._bindings.length},get inUse(){return a._nActiveBindings}},controlInterpolants:{get total(){return a._controlInterpolants.length},get inUse(){return a._nActiveControlInterpolants}}}},_isActiveAction:function(a){a=a._cacheIndex;return null!==a&&ah.end&&(h.end=f);c||(c=k)}}for(k in d)h=d[k],this.createAnimation(k,h.start,h.end,a);this.firstAnimation=c};na.prototype.setAnimationDirectionForward=function(a){if(a=this.animationsMap[a])a.direction=1,a.directionBackwards=!1};na.prototype.setAnimationDirectionBackward=function(a){if(a=this.animationsMap[a])a.direction=-1,a.directionBackwards=!0};na.prototype.setAnimationFPS=function(a,b){var c= +this.animationsMap[a];c&&(c.fps=b,c.duration=(c.end-c.start)/c.fps)};na.prototype.setAnimationDuration=function(a,b){var c=this.animationsMap[a];c&&(c.duration=b,c.fps=(c.end-c.start)/c.duration)};na.prototype.setAnimationWeight=function(a,b){var c=this.animationsMap[a];c&&(c.weight=b)};na.prototype.setAnimationTime=function(a,b){var c=this.animationsMap[a];c&&(c.time=b)};na.prototype.getAnimationTime=function(a){var b=0;if(a=this.animationsMap[a])b=a.time;return b};na.prototype.getAnimationDuration= +function(a){var b=-1;if(a=this.animationsMap[a])b=a.duration;return b};na.prototype.playAnimation=function(a){var b=this.animationsMap[a];b?(b.time=0,b.active=!0):console.warn("THREE.MorphBlendMesh: animation["+a+"] undefined in .playAnimation()")};na.prototype.stopAnimation=function(a){if(a=this.animationsMap[a])a.active=!1};na.prototype.update=function(a){for(var b=0,c=this.animationsList.length;b +d.duration||0>d.time)d.direction*=-1,d.time>d.duration&&(d.time=d.duration,d.directionBackwards=!0),0>d.time&&(d.time=0,d.directionBackwards=!1)}else d.time%=d.duration,0>d.time&&(d.time+=d.duration);var f=d.start+T.clamp(Math.floor(d.time/e),0,d.length-1),g=d.weight;f!==d.currentFrame&&(this.morphTargetInfluences[d.lastFrame]=0,this.morphTargetInfluences[d.currentFrame]=1*g,this.morphTargetInfluences[f]=0,d.lastFrame=d.currentFrame,d.currentFrame=f);e=d.time%e/e;d.directionBackwards&&(e=1-e);d.currentFrame!== +d.lastFrame?(this.morphTargetInfluences[d.currentFrame]=e*g,this.morphTargetInfluences[d.lastFrame]=(1-e)*g):this.morphTargetInfluences[d.currentFrame]=g}}};Qc.prototype=Object.create(z.prototype);Qc.prototype.constructor=Qc;Qc.prototype.isImmediateRenderObject=!0;Rc.prototype=Object.create(la.prototype);Rc.prototype.constructor=Rc;Rc.prototype.update=function(){var a=new q,b=new q,c=new Ia;return function(){var d=["a","b","c"];this.object.updateMatrixWorld(!0);c.getNormalMatrix(this.object.matrixWorld); +var e=this.object.matrixWorld,f=this.geometry.attributes.position,g=this.object.geometry;if(g&&g.isGeometry)for(var h=g.vertices,k=g.faces,l=g=0,q=k.length;lc.y?this.quaternion.set(1,0,0,0):(a.set(c.z,0,-c.x).normalize(),b=Math.acos(c.y),this.quaternion.setFromAxisAngle(a,b))}}();Cb.prototype.setLength=function(a,b,c){void 0===b&&(b=.2*a);void 0===c&&(c=.2*b);this.line.scale.set(1,Math.max(0,a-b),1);this.line.updateMatrix(); +this.cone.scale.set(c,b,c);this.cone.position.y=a;this.cone.updateMatrix()};Cb.prototype.setColor=function(a){this.line.material.color.copy(a);this.cone.material.color.copy(a)};xd.prototype=Object.create(la.prototype);xd.prototype.constructor=xd;var $d=function(){function a(){}var b=new q,c=new a,d=new a,e=new a;a.prototype.init=function(a,b,c,d){this.c0=a;this.c1=c;this.c2=-3*a+3*b-2*c-d;this.c3=2*a-2*b+c+d};a.prototype.initNonuniformCatmullRom=function(a,b,c,d,e,l,n){this.init(b,c,((b-a)/e-(c-a)/ +(e+l)+(c-b)/l)*l,((c-b)/l-(d-b)/(l+n)+(d-c)/n)*l)};a.prototype.initCatmullRom=function(a,b,c,d,e){this.init(b,c,e*(c-a),e*(d-b))};a.prototype.calc=function(a){var b=a*a;return this.c0+this.c1*a+this.c2*b+this.c3*b*a};return ia.create(function(a){this.points=a||[];this.closed=!1},function(a){var g=this.points,h,k;k=g.length;2>k&&console.log("duh, you need at least 2 points");a*=k-(this.closed?0:1);h=Math.floor(a);a-=h;this.closed?h+=0h&&(h=1);1E-4>k&&(k=h);1E-4>p&&(p=h);c.initNonuniformCatmullRom(l.x,w.x,n.x,g.x,k, +h,p);d.initNonuniformCatmullRom(l.y,w.y,n.y,g.y,k,h,p);e.initNonuniformCatmullRom(l.z,w.z,n.z,g.z,k,h,p)}else"catmullrom"===this.type&&(k=void 0!==this.tension?this.tension:.5,c.initCatmullRom(l.x,w.x,n.x,g.x,k),d.initCatmullRom(l.y,w.y,n.y,g.y,k),e.initCatmullRom(l.z,w.z,n.z,g.z,k));return new q(c.calc(a),d.calc(a),e.calc(a))})}();Ee.prototype=Object.create($d.prototype);var Ef=ia.create(function(a){console.warn("THREE.SplineCurve3 will be deprecated. Please use THREE.CatmullRomCurve3");this.points= +void 0===a?[]:a},function(a){var b=this.points;a*=b.length-1;var c=Math.floor(a);a-=c;var d=b[0==c?c:c-1],e=b[c],f=b[c>b.length-2?b.length-1:c+1],b=b[c>b.length-3?b.length-1:c+2],c=Xc.interpolate;return new q(c(d.x,e.x,f.x,b.x,a),c(d.y,e.y,f.y,b.y,a),c(d.z,e.z,f.z,b.z,a))}),Ff=ia.create(function(a,b,c,d){this.v0=a;this.v1=b;this.v2=c;this.v3=d},function(a){var b=ra.b3;return new q(b(a,this.v0.x,this.v1.x,this.v2.x,this.v3.x),b(a,this.v0.y,this.v1.y,this.v2.y,this.v3.y),b(a,this.v0.z,this.v1.z,this.v2.z, +this.v3.z))}),Gf=ia.create(function(a,b,c){this.v0=a;this.v1=b;this.v2=c},function(a){var b=ra.b2;return new q(b(a,this.v0.x,this.v1.x,this.v2.x),b(a,this.v0.y,this.v1.y,this.v2.y),b(a,this.v0.z,this.v1.z,this.v2.z))}),Hf=ia.create(function(a,b){this.v1=a;this.v2=b},function(a){if(1===a)return this.v2.clone();var b=new q;b.subVectors(this.v2,this.v1);b.multiplyScalar(a);b.add(this.v1);return b});yd.prototype=Object.create(Va.prototype);yd.prototype.constructor=yd;Object.assign(mc.prototype,{center:function(a){console.warn("THREE.Box2: .center() has been renamed to .getCenter()."); +return this.getCenter(a)},empty:function(){console.warn("THREE.Box2: .empty() has been renamed to .isEmpty().");return this.isEmpty()},isIntersectionBox:function(a){console.warn("THREE.Box2: .isIntersectionBox() has been renamed to .intersectsBox().");return this.intersectsBox(a)},size:function(a){console.warn("THREE.Box2: .size() has been renamed to .getSize().");return this.getSize(a)}});Object.assign(Ba.prototype,{center:function(a){console.warn("THREE.Box3: .center() has been renamed to .getCenter()."); +return this.getCenter(a)},empty:function(){console.warn("THREE.Box3: .empty() has been renamed to .isEmpty().");return this.isEmpty()},isIntersectionBox:function(a){console.warn("THREE.Box3: .isIntersectionBox() has been renamed to .intersectsBox().");return this.intersectsBox(a)},isIntersectionSphere:function(a){console.warn("THREE.Box3: .isIntersectionSphere() has been renamed to .intersectsSphere().");return this.intersectsSphere(a)},size:function(a){console.warn("THREE.Box3: .size() has been renamed to .getSize()."); +return this.getSize(a)}});Object.assign(gb.prototype,{center:function(a){console.warn("THREE.Line3: .center() has been renamed to .getCenter().");return this.getCenter(a)}});Object.assign(Ia.prototype,{multiplyVector3:function(a){console.warn("THREE.Matrix3: .multiplyVector3() has been removed. Use vector.applyMatrix3( matrix ) instead.");return a.applyMatrix3(this)},multiplyVector3Array:function(a){console.warn("THREE.Matrix3: .multiplyVector3Array() has been renamed. Use matrix.applyToVector3Array( array ) instead."); +return this.applyToVector3Array(a)}});Object.assign(J.prototype,{extractPosition:function(a){console.warn("THREE.Matrix4: .extractPosition() has been renamed to .copyPosition().");return this.copyPosition(a)},setRotationFromQuaternion:function(a){console.warn("THREE.Matrix4: .setRotationFromQuaternion() has been renamed to .makeRotationFromQuaternion().");return this.makeRotationFromQuaternion(a)},multiplyVector3:function(a){console.warn("THREE.Matrix4: .multiplyVector3() has been removed. Use vector.applyMatrix4( matrix ) or vector.applyProjection( matrix ) instead."); +return a.applyProjection(this)},multiplyVector4:function(a){console.warn("THREE.Matrix4: .multiplyVector4() has been removed. Use vector.applyMatrix4( matrix ) instead.");return a.applyMatrix4(this)},multiplyVector3Array:function(a){console.warn("THREE.Matrix4: .multiplyVector3Array() has been renamed. Use matrix.applyToVector3Array( array ) instead.");return this.applyToVector3Array(a)},rotateAxis:function(a){console.warn("THREE.Matrix4: .rotateAxis() has been removed. Use Vector3.transformDirection( matrix ) instead."); +a.transformDirection(this)},crossVector:function(a){console.warn("THREE.Matrix4: .crossVector() has been removed. Use vector.applyMatrix4( matrix ) instead.");return a.applyMatrix4(this)},translate:function(a){console.error("THREE.Matrix4: .translate() has been removed.")},rotateX:function(a){console.error("THREE.Matrix4: .rotateX() has been removed.")},rotateY:function(a){console.error("THREE.Matrix4: .rotateY() has been removed.")},rotateZ:function(a){console.error("THREE.Matrix4: .rotateZ() has been removed.")}, +rotateByAxis:function(a,b){console.error("THREE.Matrix4: .rotateByAxis() has been removed.")}});Object.assign(va.prototype,{isIntersectionLine:function(a){console.warn("THREE.Plane: .isIntersectionLine() has been renamed to .intersectsLine().");return this.intersectsLine(a)}});Object.assign(ba.prototype,{multiplyVector3:function(a){console.warn("THREE.Quaternion: .multiplyVector3() has been removed. Use is now vector.applyQuaternion( quaternion ) instead.");return a.applyQuaternion(this)}});Object.assign(ab.prototype, +{isIntersectionBox:function(a){console.warn("THREE.Ray: .isIntersectionBox() has been renamed to .intersectsBox().");return this.intersectsBox(a)},isIntersectionPlane:function(a){console.warn("THREE.Ray: .isIntersectionPlane() has been renamed to .intersectsPlane().");return this.intersectsPlane(a)},isIntersectionSphere:function(a){console.warn("THREE.Ray: .isIntersectionSphere() has been renamed to .intersectsSphere().");return this.intersectsSphere(a)}});Object.assign(Ab.prototype,{extrude:function(a){console.warn("THREE.Shape: .extrude() has been removed. Use ExtrudeGeometry() instead."); +return new za(this,a)},makeGeometry:function(a){console.warn("THREE.Shape: .makeGeometry() has been removed. Use ShapeGeometry() instead.");return new cb(this,a)}});Object.assign(q.prototype,{setEulerFromRotationMatrix:function(){console.error("THREE.Vector3: .setEulerFromRotationMatrix() has been removed. Use Euler.setFromRotationMatrix() instead.")},setEulerFromQuaternion:function(){console.error("THREE.Vector3: .setEulerFromQuaternion() has been removed. Use Euler.setFromQuaternion() instead.")}, +getPositionFromMatrix:function(a){console.warn("THREE.Vector3: .getPositionFromMatrix() has been renamed to .setFromMatrixPosition().");return this.setFromMatrixPosition(a)},getScaleFromMatrix:function(a){console.warn("THREE.Vector3: .getScaleFromMatrix() has been renamed to .setFromMatrixScale().");return this.setFromMatrixScale(a)},getColumnFromMatrix:function(a,b){console.warn("THREE.Vector3: .getColumnFromMatrix() has been renamed to .setFromMatrixColumn().");return this.setFromMatrixColumn(b, +a)}});Object.assign(z.prototype,{getChildByName:function(a){console.warn("THREE.Object3D: .getChildByName() has been renamed to .getObjectByName().");return this.getObjectByName(a)},renderDepth:function(a){console.warn("THREE.Object3D: .renderDepth has been removed. Use .renderOrder, instead.")},translate:function(a,b){console.warn("THREE.Object3D: .translate() has been removed. Use .translateOnAxis( axis, distance ) instead.");return this.translateOnAxis(b,a)}});Object.defineProperties(z.prototype, +{eulerOrder:{get:function(){console.warn("THREE.Object3D: .eulerOrder is now .rotation.order.");return this.rotation.order},set:function(a){console.warn("THREE.Object3D: .eulerOrder is now .rotation.order.");this.rotation.order=a}},useQuaternion:{get:function(){console.warn("THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.")},set:function(a){console.warn("THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.")}}}); +Object.defineProperties(rc.prototype,{objects:{get:function(){console.warn("THREE.LOD: .objects has been renamed to .levels.");return this.levels}}});Ea.prototype.setLens=function(a,b){console.warn("THREE.PerspectiveCamera.setLens is deprecated. Use .setFocalLength and .filmGauge for a photographic setup.");void 0!==b&&(this.filmGauge=b);this.setFocalLength(a)};Object.defineProperties(pa.prototype,{onlyShadow:{set:function(a){console.warn("THREE.Light: .onlyShadow has been removed.")}},shadowCameraFov:{set:function(a){console.warn("THREE.Light: .shadowCameraFov is now .shadow.camera.fov."); +this.shadow.camera.fov=a}},shadowCameraLeft:{set:function(a){console.warn("THREE.Light: .shadowCameraLeft is now .shadow.camera.left.");this.shadow.camera.left=a}},shadowCameraRight:{set:function(a){console.warn("THREE.Light: .shadowCameraRight is now .shadow.camera.right.");this.shadow.camera.right=a}},shadowCameraTop:{set:function(a){console.warn("THREE.Light: .shadowCameraTop is now .shadow.camera.top.");this.shadow.camera.top=a}},shadowCameraBottom:{set:function(a){console.warn("THREE.Light: .shadowCameraBottom is now .shadow.camera.bottom."); +this.shadow.camera.bottom=a}},shadowCameraNear:{set:function(a){console.warn("THREE.Light: .shadowCameraNear is now .shadow.camera.near.");this.shadow.camera.near=a}},shadowCameraFar:{set:function(a){console.warn("THREE.Light: .shadowCameraFar is now .shadow.camera.far.");this.shadow.camera.far=a}},shadowCameraVisible:{set:function(a){console.warn("THREE.Light: .shadowCameraVisible has been removed. Use new THREE.CameraHelper( light.shadow.camera ) instead.")}},shadowBias:{set:function(a){console.warn("THREE.Light: .shadowBias is now .shadow.bias."); +this.shadow.bias=a}},shadowDarkness:{set:function(a){console.warn("THREE.Light: .shadowDarkness has been removed.")}},shadowMapWidth:{set:function(a){console.warn("THREE.Light: .shadowMapWidth is now .shadow.mapSize.width.");this.shadow.mapSize.width=a}},shadowMapHeight:{set:function(a){console.warn("THREE.Light: .shadowMapHeight is now .shadow.mapSize.height.");this.shadow.mapSize.height=a}}});Object.defineProperties(C.prototype,{length:{get:function(){console.warn("THREE.BufferAttribute: .length has been deprecated. Please use .count."); +return this.array.length}}});Object.assign(G.prototype,{addIndex:function(a){console.warn("THREE.BufferGeometry: .addIndex() has been renamed to .setIndex().");this.setIndex(a)},addDrawCall:function(a,b,c){void 0!==c&&console.warn("THREE.BufferGeometry: .addDrawCall() no longer supports indexOffset.");console.warn("THREE.BufferGeometry: .addDrawCall() is now .addGroup().");this.addGroup(a,b)},clearDrawCalls:function(){console.warn("THREE.BufferGeometry: .clearDrawCalls() is now .clearGroups()."); +this.clearGroups()},computeTangents:function(){console.warn("THREE.BufferGeometry: .computeTangents() has been removed.")},computeOffsets:function(){console.warn("THREE.BufferGeometry: .computeOffsets() has been removed.")}});Object.defineProperties(G.prototype,{drawcalls:{get:function(){console.error("THREE.BufferGeometry: .drawcalls has been renamed to .groups.");return this.groups}},offsets:{get:function(){console.warn("THREE.BufferGeometry: .offsets has been renamed to .groups.");return this.groups}}}); +Object.defineProperties(U.prototype,{wrapAround:{get:function(){console.warn("THREE."+this.type+": .wrapAround has been removed.")},set:function(a){console.warn("THREE."+this.type+": .wrapAround has been removed.")}},wrapRGB:{get:function(){console.warn("THREE."+this.type+": .wrapRGB has been removed.");return new O}}});Object.defineProperties(db.prototype,{metal:{get:function(){console.warn("THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead.");return!1},set:function(a){console.warn("THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead")}}}); +Object.defineProperties(Fa.prototype,{derivatives:{get:function(){console.warn("THREE.ShaderMaterial: .derivatives has been moved to .extensions.derivatives.");return this.extensions.derivatives},set:function(a){console.warn("THREE. ShaderMaterial: .derivatives has been moved to .extensions.derivatives.");this.extensions.derivatives=a}}});sa.prototype=Object.assign(Object.create({constructor:sa,apply:function(a){console.warn("THREE.EventDispatcher: .apply is deprecated, just inherit or Object.assign the prototype to mix-in."); +Object.assign(a,this)}}),sa.prototype);Object.defineProperties(Ae.prototype,{dynamic:{set:function(a){console.warn("THREE.Uniform: .dynamic has been removed. Use object.onBeforeRender() instead.")}},onUpdate:{value:function(){console.warn("THREE.Uniform: .onUpdate() has been removed. Use object.onBeforeRender() instead.");return this}}});Object.assign(Dd.prototype,{supportsFloatTextures:function(){console.warn("THREE.WebGLRenderer: .supportsFloatTextures() is now .extensions.get( 'OES_texture_float' )."); +return this.extensions.get("OES_texture_float")},supportsHalfFloatTextures:function(){console.warn("THREE.WebGLRenderer: .supportsHalfFloatTextures() is now .extensions.get( 'OES_texture_half_float' ).");return this.extensions.get("OES_texture_half_float")},supportsStandardDerivatives:function(){console.warn("THREE.WebGLRenderer: .supportsStandardDerivatives() is now .extensions.get( 'OES_standard_derivatives' ).");return this.extensions.get("OES_standard_derivatives")},supportsCompressedTextureS3TC:function(){console.warn("THREE.WebGLRenderer: .supportsCompressedTextureS3TC() is now .extensions.get( 'WEBGL_compressed_texture_s3tc' )."); +return this.extensions.get("WEBGL_compressed_texture_s3tc")},supportsCompressedTexturePVRTC:function(){console.warn("THREE.WebGLRenderer: .supportsCompressedTexturePVRTC() is now .extensions.get( 'WEBGL_compressed_texture_pvrtc' ).");return this.extensions.get("WEBGL_compressed_texture_pvrtc")},supportsBlendMinMax:function(){console.warn("THREE.WebGLRenderer: .supportsBlendMinMax() is now .extensions.get( 'EXT_blend_minmax' ).");return this.extensions.get("EXT_blend_minmax")},supportsVertexTextures:function(){return this.capabilities.vertexTextures}, +supportsInstancedArrays:function(){console.warn("THREE.WebGLRenderer: .supportsInstancedArrays() is now .extensions.get( 'ANGLE_instanced_arrays' ).");return this.extensions.get("ANGLE_instanced_arrays")},enableScissorTest:function(a){console.warn("THREE.WebGLRenderer: .enableScissorTest() is now .setScissorTest().");this.setScissorTest(a)},initMaterial:function(){console.warn("THREE.WebGLRenderer: .initMaterial() has been removed.")},addPrePlugin:function(){console.warn("THREE.WebGLRenderer: .addPrePlugin() has been removed.")}, +addPostPlugin:function(){console.warn("THREE.WebGLRenderer: .addPostPlugin() has been removed.")},updateShadowMap:function(){console.warn("THREE.WebGLRenderer: .updateShadowMap() has been removed.")}});Object.defineProperties(Dd.prototype,{shadowMapEnabled:{get:function(){return this.shadowMap.enabled},set:function(a){console.warn("THREE.WebGLRenderer: .shadowMapEnabled is now .shadowMap.enabled.");this.shadowMap.enabled=a}},shadowMapType:{get:function(){return this.shadowMap.type},set:function(a){console.warn("THREE.WebGLRenderer: .shadowMapType is now .shadowMap.type."); +this.shadowMap.type=a}},shadowMapCullFace:{get:function(){return this.shadowMap.cullFace},set:function(a){console.warn("THREE.WebGLRenderer: .shadowMapCullFace is now .shadowMap.cullFace.");this.shadowMap.cullFace=a}}});Object.defineProperties(pe.prototype,{cullFace:{get:function(){return this.renderReverseSided?2:1},set:function(a){a=1!==a;console.warn("WebGLRenderer: .shadowMap.cullFace is deprecated. Set .shadowMap.renderReverseSided to "+a+".");this.renderReverseSided=a}}});Object.defineProperties(Db.prototype, +{wrapS:{get:function(){console.warn("THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS.");return this.texture.wrapS},set:function(a){console.warn("THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS.");this.texture.wrapS=a}},wrapT:{get:function(){console.warn("THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT.");return this.texture.wrapT},set:function(a){console.warn("THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT.");this.texture.wrapT=a}},magFilter:{get:function(){console.warn("THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter."); +return this.texture.magFilter},set:function(a){console.warn("THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter.");this.texture.magFilter=a}},minFilter:{get:function(){console.warn("THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter.");return this.texture.minFilter},set:function(a){console.warn("THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter.");this.texture.minFilter=a}},anisotropy:{get:function(){console.warn("THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy."); +return this.texture.anisotropy},set:function(a){console.warn("THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy.");this.texture.anisotropy=a}},offset:{get:function(){console.warn("THREE.WebGLRenderTarget: .offset is now .texture.offset.");return this.texture.offset},set:function(a){console.warn("THREE.WebGLRenderTarget: .offset is now .texture.offset.");this.texture.offset=a}},repeat:{get:function(){console.warn("THREE.WebGLRenderTarget: .repeat is now .texture.repeat.");return this.texture.repeat}, +set:function(a){console.warn("THREE.WebGLRenderTarget: .repeat is now .texture.repeat.");this.texture.repeat=a}},format:{get:function(){console.warn("THREE.WebGLRenderTarget: .format is now .texture.format.");return this.texture.format},set:function(a){console.warn("THREE.WebGLRenderTarget: .format is now .texture.format.");this.texture.format=a}},type:{get:function(){console.warn("THREE.WebGLRenderTarget: .type is now .texture.type.");return this.texture.type},set:function(a){console.warn("THREE.WebGLRenderTarget: .type is now .texture.type."); +this.texture.type=a}},generateMipmaps:{get:function(){console.warn("THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps.");return this.texture.generateMipmaps},set:function(a){console.warn("THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps.");this.texture.generateMipmaps=a}}});Object.assign(dc.prototype,{load:function(a){console.warn("THREE.Audio: .load has been deprecated. Please use THREE.AudioLoader.");var b=this;(new Od).load(a,function(a){b.setBuffer(a)}); +return this}});Object.assign(Rd.prototype,{getData:function(a){console.warn("THREE.AudioAnalyser: .getData() is now .getFrequencyData().");return this.getFrequencyData()}});l.WebGLRenderTargetCube=Eb;l.WebGLRenderTarget=Db;l.WebGLRenderer=Dd;l.ShaderLib=Gb;l.UniformsLib=W;l.UniformsUtils=La;l.ShaderChunk=X;l.FogExp2=Ib;l.Fog=Jb;l.Scene=jb;l.LensFlare=Ed;l.Sprite=qc;l.LOD=rc;l.SkinnedMesh=dd;l.Skeleton=bd;l.Bone=cd;l.Mesh=ya;l.LineSegments=la;l.Line=Ta;l.Points=Kb;l.Group=sc;l.VideoTexture=ed;l.DataTexture= +lb;l.CompressedTexture=Lb;l.CubeTexture=Xa;l.CanvasTexture=fd;l.DepthTexture=tc;l.TextureIdCount=function(){return ee++};l.Texture=da;l.MaterialIdCount=function(){return oe++};l.CompressedTextureLoader=we;l.BinaryTextureLoader=Gd;l.DataTextureLoader=Gd;l.CubeTextureLoader=Hd;l.TextureLoader=gd;l.ObjectLoader=xe;l.MaterialLoader=ud;l.BufferGeometryLoader=Id;l.DefaultLoadingManager=Ga;l.LoadingManager=Fd;l.JSONLoader=Jd;l.ImageLoader=Lc;l.FontLoader=ye;l.XHRLoader=Ja;l.Loader=wb;l.Cache=ce;l.AudioLoader= +Od;l.SpotLightShadow=id;l.SpotLight=jd;l.PointLight=kd;l.HemisphereLight=hd;l.DirectionalLightShadow=ld;l.DirectionalLight=md;l.AmbientLight=nd;l.LightShadow=tb;l.Light=pa;l.StereoCamera=ze;l.PerspectiveCamera=Ea;l.OrthographicCamera=Hb;l.CubeCamera=vd;l.Camera=Z;l.AudioListener=Pd;l.PositionalAudio=Qd;l.getAudioContext=Md;l.AudioAnalyser=Rd;l.Audio=dc;l.VectorKeyframeTrack=bc;l.StringKeyframeTrack=rd;l.QuaternionKeyframeTrack=Nc;l.NumberKeyframeTrack=cc;l.ColorKeyframeTrack=td;l.BooleanKeyframeTrack= +sd;l.PropertyMixer=wd;l.PropertyBinding=fa;l.KeyframeTrack=vb;l.AnimationUtils=ma;l.AnimationObjectGroup=Sd;l.AnimationMixer=Ud;l.AnimationClip=Ha;l.Uniform=Ae;l.InstancedBufferGeometry=Bb;l.BufferGeometry=G;l.GeometryIdCount=function(){return ad++};l.Geometry=Q;l.InterleavedBufferAttribute=Vd;l.InstancedInterleavedBuffer=fc;l.InterleavedBuffer=ec;l.InstancedBufferAttribute=gc;l.DynamicBufferAttribute=function(a,b){console.warn("THREE.DynamicBufferAttribute has been removed. Use new THREE.BufferAttribute().setDynamic( true ) instead."); +return(new C(a,b)).setDynamic(!0)};l.Float64Attribute=function(a,b){return new C(new Float64Array(a),b)};l.Float32Attribute=ha;l.Uint32Attribute=$c;l.Int32Attribute=function(a,b){return new C(new Int32Array(a),b)};l.Uint16Attribute=Zc;l.Int16Attribute=function(a,b){return new C(new Int16Array(a),b)};l.Uint8ClampedAttribute=function(a,b){return new C(new Uint8ClampedArray(a),b)};l.Uint8Attribute=function(a,b){return new C(new Uint8Array(a),b)};l.Int8Attribute=function(a,b){return new C(new Int8Array(a), +b)};l.BufferAttribute=C;l.Face3=ea;l.Object3DIdCount=function(){return qe++};l.Object3D=z;l.Raycaster=Wd;l.Layers=Yc;l.EventDispatcher=sa;l.Clock=Yd;l.QuaternionLinearInterpolant=qd;l.LinearInterpolant=Mc;l.DiscreteInterpolant=pd;l.CubicInterpolant=od;l.Interpolant=qa;l.Triangle=wa;l.Spline=function(a){function b(a,b,c,d,e,f,g){a=.5*(c-a);d=.5*(d-b);return(2*(b-c)+a+d)*g+(-3*(b-c)-2*a-d)*f+a*e+b}this.points=a;var c=[],d={x:0,y:0,z:0},e,f,g,h,k,l,w,n,p;this.initFromArray=function(a){this.points=[]; +for(var b=0;bthis.points.length-2?this.points.length-1:f+1;c[3]=f>this.points.length-3?this.points.length-1:f+2;l=this.points[c[0]];w=this.points[c[1]];n=this.points[c[2]];p=this.points[c[3]];h=g*g;k=g*h;d.x=b(l.x,w.x,n.x,p.x,g,h,k);d.y=b(l.y,w.y,n.y,p.y,g,h,k);d.z=b(l.z,w.z,n.z,p.z,g,h,k);return d};this.getControlPointsArray=function(){var a, +b,c=this.points.length,d=[];for(a=0;a Date: Tue, 3 Oct 2023 14:47:14 +0530 Subject: [PATCH 28/71] game sounds for 3d experience enhancement --- 3D_maze_Game/assets/sound/bat.mp3 | Bin 0 -> 2506 bytes 3D_maze_Game/assets/sound/bat.ogg | Bin 0 -> 3250 bytes 3D_maze_Game/assets/sound/bat.wav | Bin 0 -> 1230 bytes 3 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 3D_maze_Game/assets/sound/bat.mp3 create mode 100644 3D_maze_Game/assets/sound/bat.ogg create mode 100644 3D_maze_Game/assets/sound/bat.wav diff --git a/3D_maze_Game/assets/sound/bat.mp3 b/3D_maze_Game/assets/sound/bat.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..f34c264d0ef05e84cc5a01f620fcbc989f68f9c7 GIT binary patch literal 2506 zcmd^=Yfuwb7RM9vSRM%i0!<7E;Z;H*LIMa_Efj?yQ33?YLnIGg5lt~7D6JY}NDU;F zN5CWm!GOF)Ku{ok&|4GURkbHo#51{=3x>~-(fPH)LSYKZjaQk~H z=Kc=gL^}Y$e?y06dLsS(#{b)_-7qMsJtq?qs{jE7Rj>tN3Oor&a4R-{6?OgiF@6;_ z(1$`YFcIf5jO8Z<0b;7ionq)slc(QEm*y_M*jCmKGi?YKZf#-VWS@|_;rL=0;0GQE zh4^OVMQWMsF$4MSlU0&9SBZ^1anG2Y397WVm~_3R4<_W^_nW)2mNAC*MBJm>vi)8A zPHYA~D5K`<*IU@pT!L&@f&a44t%>FWPh}ChFP(bTrC`$*M&V5yR_>FD$nNkYhfti)Ek2X%cH6o@@U@Rs{at%9cie$LM z^gbu~AoXba6&V^~7_!Z)eW4&<`fowS)8GcDLt30XKe3>u#%VNOguJ zLe_vVaR7mPk~#z+f+@WWrmOi+D8J7;?y$Nd)apnCe8g44g*L}9_V(FA^}sQIgPtXz z?Bn}U*@-dlq9!>D`;{5OK=;i1XE{#YUw{GfN?TZOC7=X%_-a|?y$4L=Le=>|T)b+W zHb<)HX^R0mcdi(m85@;<;II9rJbsqJ>y~YMAz%r56*&X;>{i+$6bz2i7rOaSi6DJ}yH#IbK>rg5`vB)XttL_hEz(%f?*BwOTea;`XOSQrDIrGX?Yq_mOP~iMW(vRa8ZmM`Q;Pf}i*cn$ozv>n z^a(b4(Tk1ZeC_sz={!lhU=6zJaE|d5_je0%i=uPtnZGFL} zpfGLqrWBY7yKVoz0w2aebld#O_AI^TItHwI!~ zZ`y~fIC7bJyH2L}FNJaBPPR?gH+-2R-_84>n`bk%^krl4mI3$7>K3DcI3y?SAEM#Q zYSNh3(mss1tU$+8(>5)%~+e=|l8ZhIqMAzn?U3Oq!5;I_Vi1 z0zGyU3pZPlhsC)0!o&U6-r@Ue@amaAPVJf*H?p%=uq)B7$M+V%%EPlZ9P&d>Y@8B5O5`?X1I{`|Q zZd@60!!V*fkFcs;cGtLEiD|m=D1;E9D&5`YSm-*!Ac+b?UB?jA8LbZ*G2 zgZR6+$Q!<_Go!mC3kD@q2U)V(RqOsO-_@%O&V;(Klk$j3Lu6$aA75iN9;@_aC91OU zu-6mHG^OTjJtM2dtY3@_#D*5FJm$ME@cg~rw_Gef>Z90jNY{En ZgpL0D-zI-lg};30e^b?8e%8lc@F&pJ%H;q6 literal 0 HcmV?d00001 diff --git a/3D_maze_Game/assets/sound/bat.ogg b/3D_maze_Game/assets/sound/bat.ogg new file mode 100644 index 0000000000000000000000000000000000000000..47590364e24196d317bf3cf1ae0ec916f25077f0 GIT binary patch literal 3250 zcmcImdsGuw8lNCSfXGG~X+&fb70H0Hgn~A7>w#F1Ob~G*3Q28CLMo6%ln5=lDCJ!m zEkcr_1r^C;O&}3j6H8Eh5-r-4@(30bwN*fZ*7{gp6SQ{=0L|+9fBFvoL?8jNT9_S)K zB$PrAp36tXL^X=SGv|wwg{$U^``PjI3^KoxI~UurCRCk@T$+uh!g2HYiF~da)c{IN z;V01f4wj@*LE)8iy@F+{P22o=k(lojP z&5?G)ThC2Pou+#eR^QU{7I)|p1X0WB6(ig$)%>YAI+XAQ(+@_3G(rwiW65>J6-NU^^ zd*9B68&ru1!+2c7^qgU8nb-7B`IBne()}_GG1h|W;NMeuDGDxALfu*DfJcqvE_2)Fw z!`zDAAwVUIvi4(HhcmPGGq&rF7!ETGhC2niyZdy8?T7USoxy6-8%(l-16eqF05%u^ zD>WFLRfg=#y5=FvU4vz^yKQqvTg&hPL$^h5ZQE=x$vfI)PScWM>+J%=#6F#KyY8;l z;2dh3u(sU;Y?UEwSm*3+b9P&d-EAf*Ko2($nZVh5-T2v-=Q`(vWun_^>TbI~Y%x7= zGx~IlTP>z;lc~9_#o5MmT4ckV?;foiczgBWlf=HfltHt6AWtp?Y}CdLnz(^H$$&a< zW1d7f1<=(S)RMjwNt#-6Jzuin>o~AEMNLz*3E$(t@BRbdu}_XH^{#+H9K`-POHq> znd7u>RRY$qrK@@YkO4|Cu$GKu>Qy}m1H+OLUZcu^W;1pD0#f5~3X)}1^$N0KOFt?D zsv^d;-~qX?o zt^g#9sqGa2pdXbR&4PvCa%Jpy^|dI%)q^`m>s7wdq5Dc|5LmCSL0jr-dt({FB}#;g znQM@+X;o#YKx!PQLwQlE8lb8R++j2a@WZ0Yl2ISfF~D5&dTBP(lFX4dYW;bkEVI8D zTuudm)=voQyZnW_jpkH7FG^D*k{JiCB22bJAVrvtUQ}r`*9jBbyHcgIf?cYBRfw_6 zAu!^XhaOYc2=EgEWt6H{1jFWPL75$QBOI7g911iCn0N{m1*{IUZ zQFl-XI#V0&4kch-8r)@){;n}5$ zNC>vqPv8SfG)Psj?TX+FNEL-b&?GQu@(hO&nGp-JZz(BDMH*~G}|a5aX_9@L3Lve(IidV zFHoBE0l>5gR^ouvjsq=GgE%mHZ3hl0?ClVAZKfyGI%8hkvJk3Q=$}pi#bPD9LM2kN z#_CrhEL)wz4%a;30a<5izz%TO;5ZEp=>9 zOzRM28@tFH6-D^O9@ zu4)8mDH;uA$%q#oaXd?S4Wft_9Z;Y>fOmj;l?uFXre&|1#}&KRGL@gJR$ZH?wYZYU zz{}Z1c?G}DD*ZKufeM&`PwIu^i<-I@$Rcl@n?VMjTyBtCBJ??-xOgqmt#mdK{|bYM z&{GIX@Gh#X%p4{8lKm+D)PTSs+JZ$c^wr|-`uuZmbf4z&&p*)QkcZpDmmU()rp)wo z3+?3J?0GSw-)R4y`1#s{2QAU|Dd8VMA(4IM@%7mUM<#chTAZQ#a-TewU;X`Q;KXN? zfYyh<+$diiX&mpkG5FE)vvqzwCFJk(g&~cQ$H&{~%NE}HF{egOO|Kd)^u{jNd1l51 z>E`dX55zY>m7Na@b6yUOoqln@a3}4t#ckco)R2hTUC3z^zTJ+24Rn_f-g^HY=%dugs;N_u6 z-!CH2hU=#$wjP~|t174>Ft4qGlbDM$J4Y%)x1Y*!&pr4^o;|1H=Az`LDZQm(@i+0_ z>Y$m$0WtaakH5`=I-`T0Z~8W^W&691zUcMynX}%jm^$~{5Nh1f5*NPfK*xos4VgR7 zjSYVy$vp$_7X92Wmb^Fe{SiBFNU|U>dmQD9g!oSS?@v9$R?z(gEDEh+i!=NMg!;Z%{cKyn^Bj>iC+Hrz(_7d|#{;qXfeA7~{ z?vXv5o0bx%U+(jPJNf45qh}pERkv$z2mC(j+xLC3IOclfr}sZOOPJ6-i=6sLJMTZ6 C!Fp2w literal 0 HcmV?d00001 diff --git a/3D_maze_Game/assets/sound/bat.wav b/3D_maze_Game/assets/sound/bat.wav new file mode 100644 index 0000000000000000000000000000000000000000..950467c07c9688b684642ad66796aaf1bc608870 GIT binary patch literal 1230 zcmZ`&%W4!s6zzZum%4E+xOAZl#f=*m1{DLE_!g5G%xH|po|*2M?yl-rbyvS;(n%&J zlc+=uK0uTx;zCeC!F+(=FSyjT;KFk&5u@TArn=|WJ?GwYs;2*NZ|~|RO*?(y)WOPi zWBV3O(|YjPx>Hl%9&NLB>7sG*K5Bx%_a;WpSB6gvUKu<$o-Zv%*Us+Qw&UnXW$eO< zA;Y|Seq_RQ^X}4Ox7+Qc`NHz@d=i9#o6J9c^XbdCuit-s{rvXX-MPZoFAWZjj#V8w zv(S;X;l2a=cJ1D?cYkl+!12B#hYuY*)IY2T(|491K3RG7_QS{3)%WjSzg$^)@%-s> zw-s^QaX4ozkZB@ilBSV;WAwtAlLP(7jt`s}8Xeb7i@81`2xT!fJ2!u8>HdR9j~?8+ z-R(?faV%pIctIHY+^XxkUNtNp$fBH{Dks~mERji;Wl0pGA^-<;yPil}?N(8=Ca0## zB2xr*!!%9Hacrw;)~nU3uGi}ITHP?493Tky{79xndwOp1_TpTb3ZGe)ZQGW^J>U0O zqdHz0tz5o(9XP{mG%d#sL?ozXl$D*EvooE}Oj#r$+J{M&7rDedtUfWJ8>qHeC^4p# zaU2J%VLCxlv|Bmq+GW{-Gg07qF5?gyp+rOyDG@@o9||}Z2|@Xo((zhb0nNVaz+Q;5 z0CgFjP*UUPIL&idlx0LHBDLTgvW&WhzRQ?nkvXP;Xf&bOVcbP{;1ry;nSkojHM8hnoA-9`23e12}X$A+X=r+L*k`s_Bb$I1uK_0{YER``C27w;> zLI*X5Rp5Xc@=OuYP&j=d$m&8B0zF+lRS%jqCc-0# zn?i9ba#(;McM)o`-(7##D-iu9)`B4Gp!Jsc`D^pfr$TOAHf;YVy Date: Tue, 3 Oct 2023 14:48:32 +0530 Subject: [PATCH 29/71] feat: readme --- 3D_maze_Game/README.md | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 3D_maze_Game/README.md diff --git a/3D_maze_Game/README.md b/3D_maze_Game/README.md new file mode 100644 index 0000000..5a75792 --- /dev/null +++ b/3D_maze_Game/README.md @@ -0,0 +1,7 @@ +### 3D-Maze-Game +. A 3D Maze Game made using ThreeJs and WebGL + + +![ss1](https://user-images.githubusercontent.com/64016811/119042625-b7ef0680-b9d5-11eb-896a-24f94212b896.jpg) + +![ss2](https://user-images.githubusercontent.com/64016811/119042632-b9b8ca00-b9d5-11eb-95a1-6b42d962dff2.jpg) \ No newline at end of file From 2dcb5e6e1e23789b62a24bfafbdb7ec4983605d6 Mon Sep 17 00:00:00 2001 From: Gobinath B Date: Tue, 3 Oct 2023 14:48:54 +0530 Subject: [PATCH 30/71] refactor: readme.md --- 3D_maze_Game/README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/3D_maze_Game/README.md b/3D_maze_Game/README.md index 5a75792..2111f23 100644 --- a/3D_maze_Game/README.md +++ b/3D_maze_Game/README.md @@ -1,6 +1,8 @@ ### 3D-Maze-Game . A 3D Maze Game made using ThreeJs and WebGL - +. Explore the 3D experience +. You can move and operate the fpp by directional arrows. +. Player should reach the destination using map. ![ss1](https://user-images.githubusercontent.com/64016811/119042625-b7ef0680-b9d5-11eb-896a-24f94212b896.jpg) From 86d7b8d4b26b80edc9a887077bbc92ce40e14a42 Mon Sep 17 00:00:00 2001 From: jithin Date: Tue, 3 Oct 2023 14:52:34 +0530 Subject: [PATCH 31/71] Issue #197 --- GitHub Card/css/style.css | 5 +++++ GitHub Card/js/script.js | 8 +++++++- GitHub Card/workingwithapi.html | 2 +- 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/GitHub Card/css/style.css b/GitHub Card/css/style.css index b3f9640..b29eec5 100644 --- a/GitHub Card/css/style.css +++ b/GitHub Card/css/style.css @@ -49,6 +49,11 @@ body { } +.search-container-error { + border: 2px red solid; + +} + .search-container input { border: none; outline: none; diff --git a/GitHub Card/js/script.js b/GitHub Card/js/script.js index fcf84e7..5c6d049 100644 --- a/GitHub Card/js/script.js +++ b/GitHub Card/js/script.js @@ -4,6 +4,7 @@ const newname = document.querySelector('.insertname'); const following = document.querySelector('.insertfollowing'); const followers = document.querySelector('.insertfollowers'); const id = document.querySelector('.insertID'); +const usernameInput = document.querySelector("#username"); @@ -24,7 +25,12 @@ async function profile(name="shouryasinghrathore") { function processInput() { let inputValue = document.getElementById("inputValue").value; - profile(inputValue); + if (inputValue.trim() !== "") { + usernameInput.classList.remove("search-container-error"); + profile(inputValue); + } else { + usernameInput.classList.add("search-container-error"); + } } profile(); \ No newline at end of file diff --git a/GitHub Card/workingwithapi.html b/GitHub Card/workingwithapi.html index 8cbbefb..47197b3 100644 --- a/GitHub Card/workingwithapi.html +++ b/GitHub Card/workingwithapi.html @@ -10,7 +10,7 @@

Github Dev Finder

-
+
From 6c362144d70364057fd3f9c679b00d305024609d Mon Sep 17 00:00:00 2001 From: parinita patil Date: Tue, 3 Oct 2023 15:13:15 +0530 Subject: [PATCH 32/71] Fixed --- index.html | 121 ++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 115 insertions(+), 6 deletions(-) diff --git a/index.html b/index.html index 88c7c67..879e2e5 100644 --- a/index.html +++ b/index.html @@ -18,19 +18,49 @@

Small JavaScript Projects

Analog Clock
- +
Alarm Clock
+ +
+
2D Archery Game
+
+
+ +
+
Authentication
+
+
+ +
+
Automated QR Generator
+
+
+ +
+
Blackjack Game
+
+
-
BMI calculator
+
BMI Calculator
+
+
+ +
+
Bouncing Balls
-
Calender
+
Calender
+
+
+ +
+
Chatroom Application
@@ -44,12 +74,21 @@

Small JavaScript Projects

Color Changing Background
- + +
+
CountDown
+
+
Credit card validate
+ +
+
Credit Card Generator
+
+

hU=damtIsdaF9S03le3sua~RY-!0kki;q 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�ZpoSIUN#im@3C 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 z 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 z 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

From 233df9b149896b0b3a01bae45bf49bfc6d1c4b05 Mon Sep 17 00:00:00 2001 From: Bhumika Bachchan Date: Tue, 3 Oct 2023 15:34:23 +0530 Subject: [PATCH 33/71] Pacman game added --- pacman/animations.gif | Bin 0 -> 642 bytes pacman/game.js | 275 +++++++++++++++++++++++++++++++++++++++++ pacman/ghost.js | 278 ++++++++++++++++++++++++++++++++++++++++++ pacman/ghost.png | Bin 0 -> 11952 bytes pacman/index.html | 22 ++++ pacman/script.js | 172 ++++++++++++++++++++++++++ pacman/style.css | 8 ++ 7 files changed, 755 insertions(+) create mode 100644 pacman/animations.gif create mode 100644 pacman/game.js create mode 100644 pacman/ghost.js create mode 100644 pacman/ghost.png create mode 100644 pacman/index.html create mode 100644 pacman/script.js create mode 100644 pacman/style.css diff --git a/pacman/animations.gif b/pacman/animations.gif new file mode 100644 index 0000000000000000000000000000000000000000..27ac70f642a0e55ae132e5dee2292601c0aa0e1d GIT binary patch literal 642 zcmV-|0)72QNk%v~VT=G20K@$up08&x_US0rUVE}G! z0B~>setrOffdG$>0FaOXpPvArpa8G00I;wCzrO&$zyQzB0MO6?-`@b>-~jLM0P^wx z|Nj90|Nj6000000A^8Le0015UEC2ui0E_?>000I5peK%y#+{r7jcf~{Xx7f78PhWb zb23h1Fiphw3$BQsl9Bk@!HzS5&B=kzEL0S(Fm+-Kv}V@I5>v^f>g5aess^d}}OoiGnN_i5v)Wsz29ZxWe_R*@$xq8t<>I-&$3 zmQ)%orKF;=ku{|pB7l*89=9S6i5dbdt!lQh9>rO&y|*j392g!IqNgIk!?b+TBhb&j zx{({erJl{(2ijSMEaA%xkEJSY(C%~;@Tr8n9tDXFEf~;Yr!I@Rf@&myxdttg1qTKI zprV5zPYVL~Xfz0fgJJ<1gci(bIM6`=8v4BdECi`Wfy5aCm-*;4Qw>2_4T12XfKS1y z2m=*lLx@5Hycv7cu<@WX%Mcn(4e}ciH4+A(&dyPUurdS1RXCN>z^caR3{EyJdLS!m z2(*vTy6tR{@(fFgQ?&+Th^+2F5gSWoQ?}zMUz<51QTQl=nka65-&oW8hM9<}Z`4vw zI6?v+M?|v>EwxgVWe*7=C1^ny#nUu=PSg9lNOkQ*Q&T5e%|c4$q3!786~PGcSvsI8 z5f&C@IdBoa%RV1rkHbwwu80`Gd}0ETVh?;owob&cljMV_TtCZ`=TemI4 { + canvasContext.fillStyle = color; + canvasContext.fillRect(x, y, width, height); +}; + +const DIRECTION_RIGHT = 4; +const DIRECTION_UP = 3; +const DIRECTION_LEFT = 2; +const DIRECTION_BOTTOM = 1; +let lives = 3; +let foodCount = 213; +let ghostCount = 4; +let ghostImageLocations = [ + { x: 0, y: 0 }, + { x: 176, y: 0 }, + { x: 0, y: 121 }, + { x: 176, y: 121 }, +]; + +let fps = 30; +let pacman; +let oneBlockSize = 20; +let score = 0; +let ghosts = []; +let wallSpaceWidth = oneBlockSize / 1.6; +let wallOffset = (oneBlockSize - wallSpaceWidth) / 2; +let wallInnerColor = "black"; + +let map = [ + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1], + [1, 2, 1, 1, 1, 2, 1, 1, 1, 2, 1, 2, 1, 1, 1, 2, 1, 1, 1, 2, 1], + [1, 2, 1, 1, 1, 2, 1, 1, 1, 2, 1, 2, 1, 1, 1, 2, 1, 1, 1, 2, 1], + [1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1], + [1, 2, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 2, 1], + [1, 2, 2, 2, 2, 2, 1, 2, 2, 2, 1, 2, 2, 2, 1, 2, 2, 2, 2, 2, 1], + [1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 2, 1, 1, 1, 2, 1, 1, 1, 1, 1], + [0, 0, 0, 0, 1, 2, 1, 2, 2, 2, 2, 2, 2, 2, 1, 2, 1, 0, 0, 0, 0], + [1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 2, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1], + [1, 2, 2, 2, 2, 2, 2, 2, 1, 3, 3, 3, 1, 2, 2, 2, 2, 2, 2, 2, 1], + [1, 1, 1, 1, 1, 2, 1, 2, 1, 3, 3, 3, 1, 2, 1, 2, 1, 1, 1, 1, 1], + [0, 0, 0, 0, 1, 2, 1, 2, 1, 1, 1, 1, 1, 2, 1, 2, 1, 0, 0, 0, 0], + [0, 0, 0, 0, 1, 2, 1, 2, 2, 2, 2, 2, 2, 2, 1, 2, 1, 0, 0, 0, 0], + [1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1], + [1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1], + [1, 2, 1, 1, 1, 2, 1, 1, 1, 2, 1, 2, 1, 1, 1, 2, 1, 1, 1, 2, 1], + [1, 2, 2, 2, 1, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 1, 2, 2, 2, 1], + [1, 1, 2, 2, 1, 2, 1, 2, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 2, 1, 1], + [1, 2, 2, 2, 2, 2, 1, 2, 2, 2, 1, 2, 2, 2, 1, 2, 2, 2, 2, 2, 1], + [1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1], + [1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], +]; + +let randomTargetsForGhosts = [ + { x: 1 * oneBlockSize, y: 1 * oneBlockSize }, + { x: 1 * oneBlockSize, y: (map.length - 2) * oneBlockSize }, + { x: (map[0].length - 2) * oneBlockSize, y: oneBlockSize }, + { + x: (map[0].length - 2) * oneBlockSize, + y: (map.length - 2) * oneBlockSize, + }, +]; + +let createNewPacman = () => { + pacman = new Pacman( + oneBlockSize, + oneBlockSize, + oneBlockSize, + oneBlockSize, + oneBlockSize / 5 + ); +}; + +let gameLoop = () => { + draw(); + update(); +}; + +let gameInterval = setInterval(gameLoop, 1000 / fps); + +let restartPacmanAndGhosts = () => { + createNewPacman(); + createGhosts(); +}; + +let onGhostCollision = () => { + lives--; + restartPacmanAndGhosts(); + if (lives == 0) { + gameOver(); + drawGameOver(); + } +}; + +let gameOver = () => { + drawGameOver(); + clearInterval(gameInterval); +}; + +let drawGameOver = () => { + canvasContext.font = "20px Emulogic"; + canvasContext.fillStyle = "white"; + canvasContext.fillText("Game Over !", 170, 210); +}; + +let drawWin =()=>{ + canvasContext.font = "20px Emulogic"; + canvasContext.fillStyle = "white"; + canvasContext.fillText("You Won !", 170, 250); +} + +let update = () => { + pacman.moveProcess(); + pacman.eat(); + updateGhosts(); + if (pacman.checkGhostCollision(ghosts)) { + onGhostCollision(); + } + if(score>=foodCount){ + drawWin(); + gameOver(); + } +}; + +let drawFoods = () => { + for (let i = 0; i < map.length; i++) { + for (let j = 0; j < map[0].length; j++) { + if (map[i][j] == 2 ) { + createRect( + j * oneBlockSize + oneBlockSize / 3, + i * oneBlockSize + oneBlockSize / 3, + oneBlockSize / 3, + oneBlockSize / 3, + "#FEB897" + ); + } + } + } +}; + +let drawRemainingLives = () => { + canvasContext.font = "20px Emulogic"; + canvasContext.fillStyle = "white"; + canvasContext.fillText("Lives: ", 220, oneBlockSize * (map.length + 1) + 10); + + for (let i = 0; i < lives; i++) { + canvasContext.drawImage( + pacmanFrames, + 2 * oneBlockSize, + 0, + oneBlockSize, + oneBlockSize, + 350 + i * oneBlockSize, + oneBlockSize * map.length + 2, + oneBlockSize, + oneBlockSize + ); + } +}; + +let drawScore = () => { + canvasContext.font = "20px Emulogic"; + canvasContext.fillStyle = "white"; + canvasContext.fillText("Score: " + score, 0, oneBlockSize * (map.length + 1)); +}; + +let draw = () => { + canvasContext.clearRect(0, 0, canvas.width, canvas.height); + createRect(0, 0, canvas.width, canvas.height, "black"); + drawWalls(); + drawFoods(); + drawGhosts(); + pacman.draw(); + drawScore(); + drawRemainingLives(); +}; + +let drawWalls = () => { + for (let i = 0; i < map.length; i++) { + for (let j = 0; j < map[0].length; j++) { + if (map[i][j] == 1) { + createRect( + j * oneBlockSize, + i * oneBlockSize, + oneBlockSize, + oneBlockSize, + "#342DCA" + ); + if (j > 0 && map[i][j - 1] == 1) { + createRect( + j * oneBlockSize, + i * oneBlockSize + wallOffset, + wallSpaceWidth + wallOffset, + wallSpaceWidth, + wallInnerColor + ); + } + + if (j < map[0].length - 1 && map[i][j + 1] == 1) { + createRect( + j * oneBlockSize + wallOffset, + i * oneBlockSize + wallOffset, + wallSpaceWidth + wallOffset, + wallSpaceWidth, + wallInnerColor + ); + } + + if (i < map.length - 1 && map[i + 1][j] == 1) { + createRect( + j * oneBlockSize + wallOffset, + i * oneBlockSize + wallOffset, + wallSpaceWidth, + wallSpaceWidth + wallOffset, + wallInnerColor + ); + } + + if (i > 0 && map[i - 1][j] == 1) { + createRect( + j * oneBlockSize + wallOffset, + i * oneBlockSize, + wallSpaceWidth, + wallSpaceWidth + wallOffset, + wallInnerColor + ); + } + } + } + } +}; + +let createGhosts = () => { + ghosts = []; + for (let i = 0; i < ghostCount ; i++) { + let newGhost = new Ghost( + 9 * oneBlockSize + (i % 2 == 0 ? 0 : 1) * oneBlockSize, + 10 * oneBlockSize + (i % 2 == 0 ? 0 : 1) * oneBlockSize, + oneBlockSize, + oneBlockSize, + pacman.speed / 2, + ghostImageLocations[i % 4].x, + ghostImageLocations[i % 4].y, + 124, + 116, + 6 + i + ); + ghosts.push(newGhost); + } +}; + +createNewPacman(); +createGhosts(); +gameLoop(); + +window.addEventListener("keydown", (event) => { + let k = event.keyCode; + setTimeout(() => { + if (k == 37 || k == 65) { + pacman.nextDirection = DIRECTION_LEFT; + } else if (k == 38 || k == 87) { + pacman.nextDirection = DIRECTION_UP; + } else if (k == 39 || k == 68) { + pacman.nextDirection = DIRECTION_RIGHT; + } else if (k == 40 || k == 83) { + pacman.nextDirection = DIRECTION_BOTTOM; + } + }, 1); +}); diff --git a/pacman/ghost.js b/pacman/ghost.js new file mode 100644 index 0000000..a55bb56 --- /dev/null +++ b/pacman/ghost.js @@ -0,0 +1,278 @@ +class Ghost { + constructor( + x, + y, + width, + height, + speed, + imageX, + imageY, + imageWidth, + imageHeight, + range + ) { + this.x = x; + this.y = y; + this.width = width; + this.height = height; + this.speed = speed; + this.direction = DIRECTION_RIGHT; + this.imageX = imageX; + this.imageY = imageY; + this.imageHeight = imageHeight; + this.imageWidth = imageWidth; + this.range = range; + this.randomTargetIndex = parseInt(Math.random() * 4); + this.target = randomTargetsForGhosts[this.randomTargetIndex]; + setInterval(() => { + this.changeRandomDirection(); + }, 10000); + } + + isInRange() { + let xDistance = Math.abs(pacman.getMapX() - this.getMapX()); + let yDistance = Math.abs(pacman.getMapY() - this.getMapY()); + if ( + Math.sqrt(xDistance * xDistance + yDistance * yDistance) <= + this.range + ) { + return true; + } + return false; + } + + changeRandomDirection() { + let addition = 1; + this.randomTargetIndex += addition; + this.randomTargetIndex = this.randomTargetIndex % 4; + } + + moveProcess() { + if (this.isInRange()) { + this.target = pacman; + } else { + this.target = randomTargetsForGhosts[this.randomTargetIndex]; + } + this.changeDirectionIfPossible(); + this.moveForwards(); + if (this.checkCollisions()) { + this.moveBackwards(); + return; + } + } + + moveBackwards() { + switch (this.direction) { + case 4: + this.x -= this.speed; + break; + case 3: + this.y += this.speed; + break; + case 2: + this.x += this.speed; + break; + case 1: + this.y -= this.speed; + break; + } + } + + moveForwards() { + switch (this.direction) { + case 4: + this.x += this.speed; + break; + case 3: this.y -= this.speed; + break; + case 2: + this.x -= this.speed; + break; + case 1: + this.y += this.speed; + break; + } + } + + checkCollisions() { + let isCollided = false; + if ( + map[parseInt(this.y / oneBlockSize)][ + parseInt(this.x / oneBlockSize) + ] == 1 || + map[parseInt(this.y / oneBlockSize + 0.9999)][ + parseInt(this.x / oneBlockSize) + ] == 1 || + map[parseInt(this.y / oneBlockSize)][ + parseInt(this.x / oneBlockSize + 0.9999) + ] == 1 || + map[parseInt(this.y / oneBlockSize + 0.9999)][ + parseInt(this.x / oneBlockSize + 0.9999) + ] == 1 + ) { + isCollided = true; + } + return isCollided; + } + + changeDirectionIfPossible() { + let tempDirection = this.direction; + this.direction = this.calculateNewDirection( + map, + parseInt(this.target.x / oneBlockSize), + parseInt(this.target.y / oneBlockSize) + ); + if (typeof this.direction == "undefined") { + this.direction = tempDirection; + return; + } + if ( + this.getMapY() != this.getMapYRightSide() && + (this.direction == DIRECTION_LEFT || + this.direction == DIRECTION_RIGHT) + ) { + this.direction = DIRECTION_UP; + } + if ( + this.getMapX() != this.getMapXRightSide() && + this.direction == DIRECTION_UP + ) { + this.direction = DIRECTION_LEFT; + } + this.moveForwards(); + if (this.checkCollisions()) { + this.moveBackwards(); + this.direction = tempDirection; + } else { + this.moveBackwards(); + } + } + + calculateNewDirection(map, destX, destY) { + let mp = []; + for (let i = 0; i < map.length; i++) { + mp[i] = map[i].slice(); + } + + let queue = [ + { + x: this.getMapX(), + y: this.getMapY(), + rightX: this.getMapXRightSide(), + rightY: this.getMapYRightSide(), + moves: [], + }, + ]; + while (queue.length > 0) { + let poped = queue.shift(); + if (poped.x == destX && poped.y == destY) { + return poped.moves[0]; + } else { + mp[poped.y][poped.x] = 1; + let neighborList = this.addNeighbors(poped, mp); + for (let i = 0; i < neighborList.length; i++) { + queue.push(neighborList[i]); + } + } + } + + return 1; + } + + addNeighbors(poped, mp) { + let queue = []; + let numOfRows = mp.length; + let numOfColumns = mp[0].length; + + if ( + poped.x - 1 >= 0 && + poped.x - 1 < numOfRows && + mp[poped.y][poped.x - 1] != 1 + ) { + let tempMoves = poped.moves.slice(); + tempMoves.push(DIRECTION_LEFT); + queue.push({ x: poped.x - 1, y: poped.y, moves: tempMoves }); + } + if ( + poped.x + 1 >= 0 && + poped.x + 1 < numOfRows && + mp[poped.y][poped.x + 1] != 1 + ) { + let tempMoves = poped.moves.slice(); + tempMoves.push(DIRECTION_RIGHT); + queue.push({ x: poped.x + 1, y: poped.y, moves: tempMoves }); + } + if ( + poped.y - 1 >= 0 && + poped.y - 1 < numOfColumns && + mp[poped.y - 1][poped.x] != 1 + ) { + let tempMoves = poped.moves.slice(); + tempMoves.push(DIRECTION_UP); + queue.push({ x: poped.x, y: poped.y - 1, moves: tempMoves }); + } + if ( + poped.y + 1 >= 0 && + poped.y + 1 < numOfColumns && + mp[poped.y + 1][poped.x] != 1 + ) { + let tempMoves = poped.moves.slice(); + tempMoves.push(DIRECTION_BOTTOM); + queue.push({ x: poped.x, y: poped.y + 1, moves: tempMoves }); + } + return queue; + } + + getMapX() { + let mapX = parseInt(this.x / oneBlockSize); + return mapX; + } + + getMapY() { + let mapY = parseInt(this.y / oneBlockSize); + return mapY; + } + + getMapXRightSide() { + let mapX = parseInt((this.x * 0.99 + oneBlockSize) / oneBlockSize); + return mapX; + } + + getMapYRightSide() { + let mapY = parseInt((this.y * 0.99 + oneBlockSize) / oneBlockSize); + return mapY; + } + + changeAnimation() { + this.currentFrame = + this.currentFrame == this.frameCount ? 1 : this.currentFrame + 1; + } + + draw() { + canvasContext.save(); + canvasContext.drawImage( + ghostFrames, + this.imageX, + this.imageY, + this.imageWidth, + this.imageHeight, + this.x, + this.y, + this.width, + this.height + ); + canvasContext.restore(); + } +} + +let updateGhosts = () => { + for (let i = 0; i < ghosts.length; i++) { + ghosts[i].moveProcess(); + } +}; + +let drawGhosts = () => { + for (let i = 0; i < ghosts.length; i++) { + ghosts[i].draw(); + } +}; \ No newline at end of file diff --git a/pacman/ghost.png b/pacman/ghost.png new file mode 100644 index 0000000000000000000000000000000000000000..7ea3e974fc575cb0dd94d321576cb484fe04c118 GIT binary patch literal 11952 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 + + + + + + + Pacman + + + + +
+ + +
+ + + + + + \ No newline at end of file diff --git a/pacman/script.js b/pacman/script.js new file mode 100644 index 0000000..3432d9a --- /dev/null +++ b/pacman/script.js @@ -0,0 +1,172 @@ +class Pacman { + constructor(x, y, width, height, speed) { + this.x = x; + this.y = y; + this.width = width; + this.height = height; + this.speed = speed; + this.direction = 4; + this.nextDirection = 4; + this.frameCount = 7; + this.currentFrame = 1; + setInterval(() => { + this.changeAnimation(); + }, 100); + } + + moveProcess() { + this.changeDirectionIfPossible(); + this.moveForwards(); + if (this.checkCollisions()) { + this.moveBackwards(); + return; + } + } + + eat() { + for (let i = 0; i < map.length; i++) { + for (let j = 0; j < map[0].length; j++) { + if ( + map[i][j] == 2 && + this.getMapX() == j && + this.getMapY() == i + ) { + map[i][j] = 3; + score++; + } + } + } + } + + moveBackwards() { + switch (this.direction) { + case DIRECTION_RIGHT: + this.x -= this.speed; + break; + case DIRECTION_UP: + this.y += this.speed; + break; + case DIRECTION_LEFT: + this.x += this.speed; + break; + case DIRECTION_BOTTOM: + this.y -= this.speed; + break; + } + } + + moveForwards() { + switch (this.direction) { + case DIRECTION_RIGHT: + this.x += this.speed; + break; + case DIRECTION_UP: + this.y -= this.speed; + break; + case DIRECTION_LEFT: + this.x -= this.speed; + break; + case DIRECTION_BOTTOM: + this.y += this.speed; + break; + } + } + + checkCollisions() { + let isCollided = false; + if ( + map[parseInt(this.y / oneBlockSize)][ + parseInt(this.x / oneBlockSize) + ] == 1 || + map[parseInt(this.y / oneBlockSize + 0.9999)][ + parseInt(this.x / oneBlockSize) + ] == 1 || + map[parseInt(this.y / oneBlockSize)][ + parseInt(this.x / oneBlockSize + 0.9999) + ] == 1 || + map[parseInt(this.y / oneBlockSize + 0.9999)][ + parseInt(this.x / oneBlockSize + 0.9999) + ] == 1 + ) { + isCollided = true; + } + return isCollided; + } + + checkGhostCollision(ghosts) { + for (let i = 0; i < ghosts.length; i++) { + let ghost = ghosts[i]; + if ( + ghost.getMapX() == this.getMapX() && + ghost.getMapY() == this.getMapY() + ) { + return true; + } + } + return false; + } + + changeDirectionIfPossible() { + if (this.direction == this.nextDirection) return; + let tempDirection = this.direction; + this.direction = this.nextDirection; + this.moveForwards(); + if (this.checkCollisions()) { + this.moveBackwards(); + this.direction = tempDirection; + } else { + this.moveBackwards(); + } + } + + getMapX() { + let mapX = parseInt(this.x / oneBlockSize); + return mapX; + } + + getMapY() { + let mapY = parseInt(this.y / oneBlockSize); + + return mapY; + } + + getMapXRightSide() { + let mapX = parseInt((this.x * 0.99 + oneBlockSize) / oneBlockSize); + return mapX; + } + + getMapYRightSide() { + let mapY = parseInt((this.y * 0.99 + oneBlockSize) / oneBlockSize); + return mapY; + } + + changeAnimation() { + this.currentFrame = + this.currentFrame == this.frameCount ? 1 : this.currentFrame + 1; + } + + draw() { + canvasContext.save(); + canvasContext.translate( + this.x + oneBlockSize / 2, + this.y + oneBlockSize / 2 + ); + canvasContext.rotate((this.direction * 90 * Math.PI) / 180); + canvasContext.translate( + -this.x - oneBlockSize / 2, + -this.y - oneBlockSize / 2 + ); + canvasContext.drawImage( + pacmanFrames, + (this.currentFrame - 1) * oneBlockSize, + 0, + oneBlockSize, + oneBlockSize, + this.x, + this.y, + this.width, + this.height + ); + canvasContext.restore(); + } +} \ No newline at end of file diff --git a/pacman/style.css b/pacman/style.css new file mode 100644 index 0000000..010f63e --- /dev/null +++ b/pacman/style.css @@ -0,0 +1,8 @@ +*{ + margin: 0; + padding: 0;background-color: black; +} + +.assets{ + display: none; +} \ No newline at end of file From 97a61a6c9292e3bdbd92f957c007a6934b71f643 Mon Sep 17 00:00:00 2001 From: Muhammad Shahzaib Date: Tue, 3 Oct 2023 15:12:16 +0500 Subject: [PATCH 34/71] resolved the colorless bg issue --- .vscode/settings.json | 3 + contributors.html | 83 +++++++-------- css/style.css | 184 +------------------------------- index.html | 237 +++++++++++++----------------------------- 4 files changed, 116 insertions(+), 391 deletions(-) create mode 100644 .vscode/settings.json diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..6f3a291 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "liveServer.settings.port": 5501 +} \ No newline at end of file diff --git a/contributors.html b/contributors.html index 9c83088..9891935 100644 --- a/contributors.html +++ b/contributors.html @@ -6,12 +6,44 @@ JS Beginner Projects + - - + + + @@ -63,50 +95,5 @@

- - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/css/style.css b/css/style.css index 997d1ce..be10188 100644 --- a/css/style.css +++ b/css/style.css @@ -1,4 +1,5 @@ -/* :root { +/*removed comment tag, hindring the display of colors */ +:root { --white-color-lv5: #dfdfdf; --dark-color-lv5: #212121; } @@ -9,7 +10,6 @@ box-sizing: border-box; } - /*navbar-text-item styling*/ .display-7{ font-size: 1.5em; @@ -18,7 +18,6 @@ - a, a:hover, a:link, a:visited, a:active{ text-decoration: none; color: var(--white-color-lv5); @@ -32,8 +31,8 @@ body { flex-direction: column; row-gap: 30px; /*changed background height*/ - height: 100%; - width: 100%; + height: 100vh; + background: linear-gradient(135deg, rgb(212, 0, 240), rgb(0, 101, 216)); color: var(--white-color-lv5); } @@ -53,16 +52,6 @@ body { cursor: pointer; } -======= - -body { - width: 100vw; - overflow-x: hidden; - font-family: 'Kanit', sans-serif; - font-family: 'Libre Franklin', sans-serif; - font-family: 'Work Sans', sans-serif; -} - .gamesAndProjects { display: flex; flex-wrap: wrap; @@ -73,169 +62,4 @@ body { column-gap: 20px; align-items: center; justify-content: center; -} */ -:root { - --white-color-lv5: #dfdfdf; - --dark-color-lv5: #212121; - --primary-color: rgb(212, 0, 240); - --secondary-color: rgb(0, 101, 216); -} - - -* { - margin: 0; - padding: 0; - box-sizing: border-box; -} - -a, a:hover, a:link, a:visited, a:active { - text-decoration: none; - color: var(--white-color-lv5); -} - -body { - padding: 20px; - font-family: 'Outfit', sans-serif; - background: linear-gradient(135deg, var(--primary-color), var(--secondary-color)); - color: var(--white-color-lv5); - text-align: center; -} - -header { - margin-bottom: 20px; -} - -h1 { - font-size: 2rem; -} - -.projectLink { - text-align: center; - text-decoration: none; - margin: 10px; -} - -.projectCard { - opacity: 1; - transform: translate3d(0, 50px, 0); - padding: 20px; - background: rgba(255, 255, 255, 0.2); - box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); - border-radius: 10px; - transition: background 0.3s ease-in-out; - margin-bottom: auto; -} -.projectCard.in-view { - opacity: 1; - transform: translate3d(0, 0, 0); - } -.projectsName { - font-size: 1.5rem; -} - -.projectCard:hover { - background: rgba(255, 255, 255, 0.3); - cursor: pointer; -======= -/* NEW HOMEPAGE */ - - -.header { - width: 100%; - position: fixed; - height: 80px; - background-color: rgb(255, 255, 255); - display: flex; - justify-content: space-between; - align-items: center; - padding-inline: 2rem; - z-index: 99999; -} - -.header a { - text-decoration: none; - width: 8rem; - height: 2.5rem; - border: none; - border-radius: 0.2rem; - cursor: pointer; - display: flex; - justify-content: center; - align-items: center; - gap: 5%; - background-color: #1E40AF; - color: white; -} - -.header a:hover { - transform: scale(1.05); - transition: all 0.3s ease; -} - -.hero-container { - padding: 100px 0; - width: 100%; - display: flex; - justify-content: center; - align-items: center; - background-color: #F1F5F9; -} - -.hero-section { - width: 90%; - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; - gap: 5rem; - text-align: center; -} - -.project-parent { - width: 100%; - /* min-height:70vh; */ - display: flex; - justify-content: center; - gap: 2rem; - flex-wrap: wrap; -} - -.project-parent a { - width: 100%; - height: 100%; - text-decoration: none; - color: white; - text-align: center; - display: flex; - align-items: center; - justify-content: center; -} - -.project-child { - min-width: 8rem; - height: 3rem; - background-color: rgb(255, 255, 255); - border-radius: 0.4rem; - padding-inline: 1rem; - text-align: center; - display: flex; - flex-direction: column; - justify-content: center; - color: #1E40AF; - border: 3px solid #1E40AF; -} - -.project-child a { - width: 100%; - height: 100%; - text-decoration: none; - color: #1E40AF; - font-size: 1.2rem; - font-weight: 600; -} - -.project-child:hover { - transform: scale(1.05); - transition: all 0.3s ease; - } \ No newline at end of file diff --git a/index.html b/index.html index a6d9736..f33c77e 100644 --- a/index.html +++ b/index.html @@ -1,14 +1,13 @@ - - - - + + + JS Beginner Projects - - + + @@ -62,174 +61,86 @@

small javascript proj
BMI calculator
- - - - - -
-

Small JavaScript Projects

-
-
- -
-
Analog Clock
-
-
- -
-
Alarm Clock
-
-
- -
-
BMI calculator
-
-
- -
-
Calender
-
-
- - - - - - - - -
-
CSS Line Height and Letter Spacing Generator
-
+
+
+ CSS Line Height and Letter Spacing Generator +
- -
-
CSS Shadow Generator
+
+
CSS Shadow Generator
- -
-
Currency Converter
+
+
Currency Converter
+
+ +
Digital Clock
+
+ +
Game of Life
+
+ +
GitHub Card
+
+ +
Guess The Number
+
+ +
Hang Man
+
+ +
Calculator
+
+ +
Movie App
+
+ +
Music App
+
+ +
Quote Generator
+
+ +
Race Game
+
+ +
Random Password Generator
+
+ +
Simon Game
+
+ +
Snake Game
+
+ +
Tic Tac Toe
+
+ +
Text to Speech Convertor
+
+ +
Timer
+
+ +
To Do List
+
+ +
Unlimited Color
+
+ +
Weather App
-
- - + - - -
-
Digital Clock
-
- -
-
Flappy Bird
-
- -
-
Game of Life
-
- -
-
GitHub Card
-
- -
-
Guess The Number
-
- -
-
Hang Man
-
- -
-
Javascript Pairs Game
-
- -
-
Calculator
-
- -
-
Minesweeper Game
-
-
-
Morse Code Translator
-
- -
-
Movie App
-
- -
-
Music App
-
- -
-
Quote Generator
-
- -
-
Race Game
-
- -
-
Random Password Generator
-
- -
-
Simon Game
-
- -
-
Snake Game
-
- -
-
Tic Tac Toe
-
- -
-
Text to Speech Convertor
-
- -
-
Timer
-
- -
-
To Do List
-
- -
-
Unlimited Color
-
- -
-
Weather App
-
- -
-
Drawing App
-
- -
-
Rock Paper
-
- - - - - From e3709c8678beae3e5ffe88a54ace5aa1463eee0d Mon Sep 17 00:00:00 2001 From: Muhammad Shahzaib Date: Tue, 3 Oct 2023 15:24:01 +0500 Subject: [PATCH 35/71] bg height changed to cover page --- css/style.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/css/style.css b/css/style.css index be10188..3425c4d 100644 --- a/css/style.css +++ b/css/style.css @@ -31,7 +31,7 @@ body { flex-direction: column; row-gap: 30px; /*changed background height*/ - height: 100vh; + height: 200vh; background: linear-gradient(135deg, rgb(212, 0, 240), rgb(0, 101, 216)); color: var(--white-color-lv5); From 0f59a2dfc6d2461b657ff96d309443faec4620df Mon Sep 17 00:00:00 2001 From: uzair-ahmed-01 Date: Tue, 3 Oct 2023 16:42:10 +0530 Subject: [PATCH 36/71] #204 all the functionality is workingafter importing the css and js files thats it --- Random Password Generator/index.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Random Password Generator/index.html b/Random Password Generator/index.html index 491acb0..62ec325 100644 --- a/Random Password Generator/index.html +++ b/Random Password Generator/index.html @@ -3,7 +3,7 @@ - + Strong Password Generator @@ -32,6 +32,6 @@

Strong Password Generator

- + From 1e23ec465fede26ae29c00bf77f0c42255605f45 Mon Sep 17 00:00:00 2001 From: kalash Date: Tue, 3 Oct 2023 16:49:50 +0530 Subject: [PATCH 37/71] Adding JS Counter :) --- Counter/index.html | 21 +++++++++++++++++++++ Counter/script.js | 36 ++++++++++++++++++++++++++++++++++++ Counter/style.css | 22 ++++++++++++++++++++++ index.html | 4 ++++ 4 files changed, 83 insertions(+) create mode 100644 Counter/index.html create mode 100644 Counter/script.js create mode 100644 Counter/style.css diff --git a/Counter/index.html b/Counter/index.html new file mode 100644 index 0000000..528be83 --- /dev/null +++ b/Counter/index.html @@ -0,0 +1,21 @@ + + + + + + + + Counter + + + +
+

+ + +

+
+ + + + \ No newline at end of file diff --git a/Counter/script.js b/Counter/script.js new file mode 100644 index 0000000..024a186 --- /dev/null +++ b/Counter/script.js @@ -0,0 +1,36 @@ + +var productCounter = { + count: 0, + incrementCounter: function () { + if (this.count < 10) { + return this.count = this.count + 1; + } else { + alert("maximum limit reached, you can buy only 10 items"); + return this.count; + } + + }, + decrementCounter: function () { + if (this.count > 0) { + return this.count = this.count - 1; + } else { + return this.count = 0; + } + }, + resetCounter: function () { + return this.count = 0; + } + +}; + +var displayCout = document.getElementById('displayCounter'); +displayCout.innerHTML = 0; +document.getElementById('increment').onclick = function () { + displayCout.innerHTML = productCounter.incrementCounter(); +} +document.getElementById('decrement').onclick = function () { + displayCout.innerHTML = productCounter.decrementCounter(); +} +document.getElementById('reset').onclick = function () { + displayCout.innerHTML = productCounter.resetCounter(); +} diff --git a/Counter/style.css b/Counter/style.css new file mode 100644 index 0000000..4713536 --- /dev/null +++ b/Counter/style.css @@ -0,0 +1,22 @@ +#increment, #decrement, #reset { + padding: 10px 15px; + font-size: 18px; + background: #56ccf2; + background: -webkit-linear-gradient(to right, #56ccf2, #2f80ed); + background: linear-gradient(to right, #56ccf2, #2f80ed); + color: #f1f1f1; + border: none; + margin: 5px; +} + +#main { + margin: 0 auto; + text-align: center; + padding: 5% 10%; +} + +#displayCounter { + font-size: 100px; + font-family: impact; + +} \ No newline at end of file diff --git a/index.html b/index.html index 47fd5cb..271187a 100644 --- a/index.html +++ b/index.html @@ -232,6 +232,10 @@

Small JavaScript Projects

Image Slider
+ +
+
Counter
+
From f518169903988faead3a7f194d6d490ef1b046ce Mon Sep 17 00:00:00 2001 From: ABHISHEK KUMAR Date: Tue, 3 Oct 2023 17:06:45 +0530 Subject: [PATCH 38/71] feat: Enable mouse click interaction and add key press styling to drum kit This commit allows users to trigger sounds by clicking drum buttons, expanding interaction beyond keyboard keys. Implemented visual enhancement: when a drum key is pressed, its border changes to white, providing immediate feedback to the user. --- DrumKit/main.js | 35 ++++++++++++++++++++++++++--------- DrumKit/style.css | 7 ++++--- 2 files changed, 30 insertions(+), 12 deletions(-) diff --git a/DrumKit/main.js b/DrumKit/main.js index b061d06..783adf3 100644 --- a/DrumKit/main.js +++ b/DrumKit/main.js @@ -1,18 +1,35 @@ -function playSound(n) { - const audio = document.querySelector(`audio[data-key="${n}"]`); - const key = document.querySelector(`.key[data-key="${n}"]`); + +function playSound(keyCode) { + const audio = document.querySelector(`audio[data-key="${keyCode}"]`); + const key = document.querySelector(`button[data-key="${keyCode}"]`); + + if (!audio) return; + key.classList.add("clicked"); + audio.currentTime = 0; + audio.play().catch(error => { + console.error("Error playing audio: ", error.message); + }); setTimeout(() => { key.classList.remove("clicked"); }, 300); +} - if (!audio) return; - audio.currentTime = 0; - audio.play(); +function handleKeyOrMouseClick(event) { + let keyCode; + + if (event.type === "keydown") { + keyCode = event.keyCode; + } else if (event.type === "click") { + keyCode = parseInt(event.target.getAttribute("data-key")); + } + + playSound(keyCode); } -window.document.addEventListener("keydown", (e) => { - console.log(e.key, e.key.toUpperCase().charCodeAt(0)); - playSound(e.key.toUpperCase().charCodeAt(0)); +window.addEventListener("keydown", handleKeyOrMouseClick); +const keys = document.querySelectorAll(".key"); +keys.forEach(key => { + key.addEventListener("click", handleKeyOrMouseClick); }); diff --git a/DrumKit/style.css b/DrumKit/style.css index 2a77c62..4035813 100644 --- a/DrumKit/style.css +++ b/DrumKit/style.css @@ -26,7 +26,7 @@ main div { gap: 15px; } .key { - border: none; + border: 2px solid rgb(75, 64, 64); width: 110px; height: 100px; background-color: rgb(75, 64, 64); @@ -34,7 +34,8 @@ main div { transition: 0.3s; border-radius: 12px; } -.clicked { - scale: 1.1; +.key.clicked { + border-color: white; + transform: scale(1.1); opacity: 0.8; } From f44b65356eefdda242a169b541abd67e1a8d8fc3 Mon Sep 17 00:00:00 2001 From: kalash Date: Tue, 3 Oct 2023 17:15:22 +0530 Subject: [PATCH 39/71] Adding Dynamic Quiz :) --- Dynamic Quiz/index.html | 27 +++++++ Dynamic Quiz/script.js | 167 ++++++++++++++++++++++++++++++++++++++++ Dynamic Quiz/style.css | 71 +++++++++++++++++ index.html | 4 + 4 files changed, 269 insertions(+) create mode 100644 Dynamic Quiz/index.html create mode 100644 Dynamic Quiz/script.js create mode 100644 Dynamic Quiz/style.css diff --git a/Dynamic Quiz/index.html b/Dynamic Quiz/index.html new file mode 100644 index 0000000..476f9ea --- /dev/null +++ b/Dynamic Quiz/index.html @@ -0,0 +1,27 @@ + + + + Dynamic Quiz Project + + + + +
+
+

Learning Js Properly: Project #1 - Dynamic Quiz

+
+
+
+ + + + +
+ + + + + + diff --git a/Dynamic Quiz/script.js b/Dynamic Quiz/script.js new file mode 100644 index 0000000..105e3b2 --- /dev/null +++ b/Dynamic Quiz/script.js @@ -0,0 +1,167 @@ +(function () { + var questions = [{ + question: "What is 2*5?", + choices: [2, 5, 10, 15, 20], + correctAnswer: 2 + }, { + question: "What is 3*6?", + choices: [3, 6, 9, 12, 18], + correctAnswer: 4 + }, { + question: "What is 8*9?", + choices: [72, 99, 108, 134, 156], + correctAnswer: 0 + }, { + question: "What is 1*7?", + choices: [4, 5, 6, 7, 8], + correctAnswer: 3 + }, { + question: "What is 8*8?", + choices: [20, 30, 40, 50, 64], + correctAnswer: 4 + }]; + + var questionCounter = 0; //Tracks question number + var selections = []; //Array containing user choices + var quiz = $('#quiz'); //Quiz div object + + // Display initial question + displayNext(); + + // Click handler for the 'next' button + $('#next').on('click', function (e) { + e.preventDefault(); + + // Suspend click listener during fade animation + if (quiz.is(':animated')) { + return false; + } + choose(); + + // If no user selection, progress is stopped + if (isNaN(selections[questionCounter])) { + alert('Please make a selection!'); + } else { + questionCounter++; + displayNext(); + } + }); + + // Click handler for the 'prev' button + $('#prev').on('click', function (e) { + e.preventDefault(); + + if (quiz.is(':animated')) { + return false; + } + choose(); + questionCounter--; + displayNext(); + }); + + // Click handler for the 'Start Over' button + $('#start').on('click', function (e) { + e.preventDefault(); + + if (quiz.is(':animated')) { + return false; + } + questionCounter = 0; + selections = []; + displayNext(); + $('#start').hide(); + }); + + // Animates buttons on hover + $('.button').on('mouseenter', function () { + $(this).addClass('active'); + }); + $('.button').on('mouseleave', function () { + $(this).removeClass('active'); + }); + + // Creates and returns the div that contains the questions and + // the answer selections + function createQuestionElement(index) { + var qElement = $('
', { + id: 'question' + }); + + var header = $('

Question ' + (index + 1) + ':

'); + qElement.append(header); + + var question = $('

').append(questions[index].question); + qElement.append(question); + + var radioButtons = createRadios(index); + qElement.append(radioButtons); + + return qElement; + } + + // Creates a list of the answer choices as radio inputs + function createRadios(index) { + var radioList = $('

+ + + + + + + +
+ +
+

small javascript projects

+
+
+ - -

Contributors

-
- -
-
-
    - -
-
-
-
- \ No newline at end of file + +

Contributors

+
+
+
+
    +
+
+
+
+ \ No newline at end of file diff --git a/css/style.css b/css/style.css index 3425c4d..4f2cf52 100644 --- a/css/style.css +++ b/css/style.css @@ -11,20 +11,33 @@ } /*navbar-text-item styling*/ -.display-7{ +.display-7 { font-size: 1.5em; font-weight: 500; } +/* mobile header: start */ +.mobile-header .navbar-toggler:is(:focus, :active) { + outline: none; + /* add white box shadow */ + box-shadow: 0 0 0 0.2rem rgba(255, 255, 255, 0.75); +} + +/* mobile header: end */ -a, a:hover, a:link, a:visited, a:active{ + +a, +a:hover, +a:link, +a:visited, +a:active { text-decoration: none; color: var(--white-color-lv5); } body { - padding: 20px; + padding: 10px; font-family: 'Outfit', sans-serif; display: flex; align-items: center; @@ -32,7 +45,7 @@ body { row-gap: 30px; /*changed background height*/ height: 200vh; - + background: linear-gradient(135deg, rgb(212, 0, 240), rgb(0, 101, 216)); color: var(--white-color-lv5); } @@ -47,6 +60,7 @@ body { border-radius: 30px; transition: 0.3s ease-in-out; } + .projectsName:hover { background: rgba(80, 75, 75, 0.295); cursor: pointer; @@ -62,4 +76,12 @@ body { column-gap: 20px; align-items: center; justify-content: center; + padding: 5px; +} + +.hvr-sweep-to-right::before { + border-radius: 30px; + background-color: #47699ca6; + /* glow */ + box-shadow: 0 0 5px 0.5px #fff; } \ No newline at end of file diff --git a/index.html b/index.html index b2278a6..5aeb3b3 100644 --- a/index.html +++ b/index.html @@ -1,146 +1,127 @@ - - - - JS Beginner Projects - - - - - - -
-
-
- - - -
-

small javascript projects

-
+ + + + + JS Beginner Projects + + + + + + + + + + + + + + + + + +
+

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

small javascript projects

- - +
+ -
- -
Analog Clock
-
- -
Alarm Clock
-
- -
BMI calculator
-
- -
Calender
-
- -
Code Visualizer
-
- -
Color Changing Background
-
- -
Credit card validate
-
- -
- CSS Line Height and Letter Spacing Generator -
-
- -
CSS Shadow Generator
-
- -
Currency Converter
-
- -
Digital Clock
-
- -
Game of Life
-
- -
GitHub Card
-
- -
Guess The Number
-
- -
Hang Man
-
- -
Calculator
-
- -
Movie App
-
- -
Music App
-
- -
Quote Generator
-
- -
Race Game
-
- -
Random Password Generator
-
- -
Simon Game
-
- -
Snake Game
-
- -
Tic Tac Toe
-
- -
Text to Speech Convertor
-
- -
Timer
-
- -
To Do List
-
- -
Unlimited Color
-
- -
Weather App
-
-
- - - - + + +
+ Analog Clock + Alarm Clock + BMI calculator + Calender + Code Visualizer + Color + Changing Background + Credit card validate + + CSS Line Height and Letter Spacing Generator + + CSS Shadow Generator + Currency + Converter + Digital Clock + Game of Life + GitHub Card + Guess The Number + Hang Man + Calculator + Movie App + Music App + Quote Generator + Race Game + Random Password + Generator + Simon Game + Snake Game + Tic Tac Toe + Text to Speech Convertor + Timer + To Do List + Unlimited Color + Weather App +
+ + + + + + + + + \ No newline at end of file From b7645ec72974f357625fef8186fe433630727f77 Mon Sep 17 00:00:00 2001 From: Mayur Date: Tue, 3 Oct 2023 19:44:04 +0530 Subject: [PATCH 45/71] slide puzzle --- slidepuzzle | 1 + 1 file changed, 1 insertion(+) create mode 160000 slidepuzzle diff --git a/slidepuzzle b/slidepuzzle new file mode 160000 index 0000000..f305110 --- /dev/null +++ b/slidepuzzle @@ -0,0 +1 @@ +Subproject commit f305110e2d652388dc68fc6f19e9bc5106740f41 From 6d88ced6837c01679fbba90b653d1471b398c9b5 Mon Sep 17 00:00:00 2001 From: Priyesh Mishra Date: Tue, 3 Oct 2023 20:08:32 +0530 Subject: [PATCH 46/71] Add "Crypto Price Tracker" Web App (@priyesh0453) --- Crypto Price Tracker/bitcoin_logo.png | Bin 0 -> 7810 bytes Crypto Price Tracker/index.html | 26 ++++++++ Crypto Price Tracker/script.js | 50 ++++++++++++++ Crypto Price Tracker/style.css | 92 ++++++++++++++++++++++++++ 4 files changed, 168 insertions(+) create mode 100644 Crypto Price Tracker/bitcoin_logo.png create mode 100644 Crypto Price Tracker/index.html create mode 100644 Crypto Price Tracker/script.js create mode 100644 Crypto Price Tracker/style.css diff --git a/Crypto Price Tracker/bitcoin_logo.png b/Crypto Price Tracker/bitcoin_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..5788369011671d826b781580a7dd7a85464ab52d GIT binary patch literal 7810 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 Z`C|?;TKZ^b1pAzZqpqT@T%%+Y@jphx0Hy!{ literal 0 HcmV?d00001 diff --git a/Crypto Price Tracker/index.html b/Crypto Price Tracker/index.html new file mode 100644 index 0000000..2916e3d --- /dev/null +++ b/Crypto Price Tracker/index.html @@ -0,0 +1,26 @@ + + + + + + Cryptocurrency Price Tracker + + + + +
+

Cryptocurrency Price Tracker

+ + + + + + + + + +
CoinPrice (USD)
+
+ + + \ No newline at end of file diff --git a/Crypto Price Tracker/script.js b/Crypto Price Tracker/script.js new file mode 100644 index 0000000..f334e2d --- /dev/null +++ b/Crypto Price Tracker/script.js @@ -0,0 +1,50 @@ +const cryptoList = document.getElementById("cryptoList"); +let previousPrices = {}; + +async function fetchCryptoData() +{ + try + { + const response = await fetch("https://api.coingecko.com/api/v3/coins/markets?vs_currency=usd&order=market_cap_desc&per_page=15&page=1"); + const cryptoData = await response.json(); + + cryptoList.innerHTML = ""; + + cryptoData.forEach((crypto) => + { + const cryptoRow = document.createElement("tr"); + + const cryptoNameCell = document.createElement("td"); + cryptoNameCell.textContent = crypto.name; + cryptoNameCell.classList.add("crypto-name"); + + const cryptoPriceCell = document.createElement("td"); + const currentPrice = parseFloat(crypto.current_price); + const previousPrice = previousPrices[crypto.id] || currentPrice; + + cryptoPriceCell.textContent = `$${currentPrice.toFixed(2)}`; + cryptoPriceCell.classList.add(getPriceChangeClass(currentPrice, previousPrice)); // Apply the appropriate class + + cryptoRow.appendChild(cryptoNameCell); + cryptoRow.appendChild(cryptoPriceCell); + + cryptoList.appendChild(cryptoRow); + + previousPrices[crypto.id] = currentPrice; + }); + } + catch (error) + { + console.error("Error fetching cryptocurrency data:", error); + } +} + +function getPriceChangeClass(currentPrice, previousPrice) +{ + if (currentPrice > previousPrice) return "price-increase"; + else return "price-decrease"; +} + +fetchCryptoData(); + +setInterval(fetchCryptoData, 30000); \ No newline at end of file diff --git a/Crypto Price Tracker/style.css b/Crypto Price Tracker/style.css new file mode 100644 index 0000000..9ab35b6 --- /dev/null +++ b/Crypto Price Tracker/style.css @@ -0,0 +1,92 @@ +body, html +{ + margin: 0; + padding: 0; +} + +body +{ + font-family: Arial, sans-serif; + background: linear-gradient(45deg, #007BFF, #00BFFF); + background-size: cover; + background-attachment: fixed; + color: #fff; + display: flex; + justify-content: center; + align-items: center; + height: 100vh; + overflow: hidden; +} + +.container +{ + max-width: 800px; + margin: 0 auto; + padding: 20px; + background-color: #ffffff; + border-radius: 8px; + box-shadow: 0px 4px 6px rgba(0, 0, 0, 0.1); +} + +h1 +{ + font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif; + color: #007BFF; + margin-bottom: 20px; + text-align: center; + transition: color 0.3s ease-in-out, text-shadow 0.3s ease-in-out; +} + +h1:hover +{ + color: #00BFFF; + text-shadow: 2px 2px 4px rgba(0, 0, 0, 1); +} + +.crypto-table +{ + width: 100%; + border-collapse: collapse; + margin-top: 20px; + box-shadow: 0px 4px 6px rgba(0, 0, 0, 0.1); +} + +.crypto-table th, +.crypto-table td +{ + padding: 10px; + text-align: left; +} + +.crypto-table th +{ + background-color: #007BFF; + color: white; +} + +.crypto-table tr:nth-child(even) +{ + background-color: #f2f2f2; +} + +.crypto-table tr:hover +{ + background-color: #d2d2d2; + transform: scale(1.02); + transition: transform 0.2s ease-in-out; +} + +.crypto-name +{ + color: #333; +} + +.price-increase +{ + color: green; +} + +.price-decrease +{ + color: red; +} \ No newline at end of file From e29cd5a2096a2eb6b13bcbbe9fc9e0267bf2b55b Mon Sep 17 00:00:00 2001 From: Saikat Das Date: Tue, 3 Oct 2023 20:25:10 +0530 Subject: [PATCH 47/71] removed slide puzzle --- slidepuzzle | 1 - 1 file changed, 1 deletion(-) delete mode 160000 slidepuzzle diff --git a/slidepuzzle b/slidepuzzle deleted file mode 160000 index f305110..0000000 --- a/slidepuzzle +++ /dev/null @@ -1 +0,0 @@ -Subproject commit f305110e2d652388dc68fc6f19e9bc5106740f41 From b7a62089a57b06d0603d76c6a4ef38ab666d4c90 Mon Sep 17 00:00:00 2001 From: Anuj Rathour Date: Tue, 3 Oct 2023 20:54:05 +0530 Subject: [PATCH 48/71] added a short url generator project --- Url-Shortner/connect.js | 7 + Url-Shortner/controllers/url.js | 33 + Url-Shortner/index.js | 43 + Url-Shortner/models/url.js | 25 + Url-Shortner/node_modules/.bin/ejs | 12 + Url-Shortner/node_modules/.bin/ejs.cmd | 17 + Url-Shortner/node_modules/.bin/ejs.ps1 | 28 + Url-Shortner/node_modules/.bin/jake | 12 + Url-Shortner/node_modules/.bin/jake.cmd | 17 + Url-Shortner/node_modules/.bin/jake.ps1 | 28 + Url-Shortner/node_modules/.bin/mime | 12 + Url-Shortner/node_modules/.bin/mime.cmd | 17 + Url-Shortner/node_modules/.bin/mime.ps1 | 28 + Url-Shortner/node_modules/.bin/nanoid | 12 + Url-Shortner/node_modules/.bin/nanoid.cmd | 17 + Url-Shortner/node_modules/.bin/nanoid.ps1 | 28 + Url-Shortner/node_modules/.bin/uuid | 12 + Url-Shortner/node_modules/.bin/uuid.cmd | 17 + Url-Shortner/node_modules/.bin/uuid.ps1 | 28 + Url-Shortner/node_modules/.package-lock.json | 1061 ++ .../node_modules/@mongodb-js/saslprep/LICENSE | 22 + .../saslprep/dist/.esm-wrapper.mjs | 4 + .../saslprep/dist/code-points-data.d.ts | 4 + .../saslprep/dist/code-points-data.d.ts.map | 1 + .../saslprep/dist/code-points-data.js | 5 + .../saslprep/dist/code-points-data.js.map | 1 + .../saslprep/dist/code-points-src.d.ts | 7 + .../saslprep/dist/code-points-src.d.ts.map | 1 + .../saslprep/dist/code-points-src.js | 881 ++ .../saslprep/dist/code-points-src.js.map | 1 + .../saslprep/dist/generate-code-points.d.ts | 2 + .../dist/generate-code-points.d.ts.map | 1 + .../saslprep/dist/generate-code-points.js | 61 + .../saslprep/dist/generate-code-points.js.map | 1 + .../@mongodb-js/saslprep/dist/index.d.ts | 10 + .../@mongodb-js/saslprep/dist/index.d.ts.map | 1 + .../@mongodb-js/saslprep/dist/index.js | 66 + .../@mongodb-js/saslprep/dist/index.js.map | 1 + .../saslprep/dist/memory-code-points.d.ts | 8 + .../saslprep/dist/memory-code-points.d.ts.map | 1 + .../saslprep/dist/memory-code-points.js | 23 + .../saslprep/dist/memory-code-points.js.map | 1 + .../@mongodb-js/saslprep/dist/util.d.ts | 2 + .../@mongodb-js/saslprep/dist/util.d.ts.map | 1 + .../@mongodb-js/saslprep/dist/util.js | 12 + .../@mongodb-js/saslprep/dist/util.js.map | 1 + .../@mongodb-js/saslprep/package.json | 83 + .../@mongodb-js/saslprep/readme.md | 29 + Url-Shortner/node_modules/@types/node/LICENSE | 21 + .../node_modules/@types/node/README.md | 16 + .../node_modules/@types/node/assert.d.ts | 996 ++ .../@types/node/assert/strict.d.ts | 8 + .../node_modules/@types/node/async_hooks.d.ts | 539 ++ .../node_modules/@types/node/buffer.d.ts | 2352 +++++ .../@types/node/child_process.d.ts | 1540 +++ .../node_modules/@types/node/cluster.d.ts | 432 + .../node_modules/@types/node/console.d.ts | 412 + .../node_modules/@types/node/constants.d.ts | 19 + .../node_modules/@types/node/crypto.d.ts | 4456 +++++++++ .../node_modules/@types/node/dgram.d.ts | 586 ++ .../@types/node/diagnostics_channel.d.ts | 191 + .../node_modules/@types/node/dns.d.ts | 809 ++ .../@types/node/dns/promises.d.ts | 417 + .../node_modules/@types/node/dom-events.d.ts | 122 + .../node_modules/@types/node/domain.d.ts | 170 + .../node_modules/@types/node/events.d.ts | 796 ++ Url-Shortner/node_modules/@types/node/fs.d.ts | 4289 +++++++++ .../node_modules/@types/node/fs/promises.d.ts | 1232 +++ .../node_modules/@types/node/globals.d.ts | 323 + .../@types/node/globals.global.d.ts | 1 + .../node_modules/@types/node/http.d.ts | 1808 ++++ .../node_modules/@types/node/http2.d.ts | 2381 +++++ .../node_modules/@types/node/https.d.ts | 550 ++ .../node_modules/@types/node/index.d.ts | 133 + .../node_modules/@types/node/inspector.d.ts | 2748 ++++++ .../node_modules/@types/node/module.d.ts | 264 + .../node_modules/@types/node/net.d.ts | 912 ++ Url-Shortner/node_modules/@types/node/os.d.ts | 477 + .../node_modules/@types/node/package.json | 232 + .../node_modules/@types/node/path.d.ts | 191 + .../node_modules/@types/node/perf_hooks.d.ts | 639 ++ .../node_modules/@types/node/process.d.ts | 1525 +++ .../node_modules/@types/node/punycode.d.ts | 117 + .../node_modules/@types/node/querystring.d.ts | 141 + .../node_modules/@types/node/readline.d.ts | 539 ++ .../@types/node/readline/promises.d.ts | 150 + .../node_modules/@types/node/repl.d.ts | 430 + .../node_modules/@types/node/stream.d.ts | 1701 ++++ .../@types/node/stream/consumers.d.ts | 12 + .../@types/node/stream/promises.d.ts | 83 + .../node_modules/@types/node/stream/web.d.ts | 336 + .../@types/node/string_decoder.d.ts | 67 + .../node_modules/@types/node/test.d.ts | 1446 +++ .../node_modules/@types/node/timers.d.ts | 240 + .../@types/node/timers/promises.d.ts | 93 + .../node_modules/@types/node/tls.d.ts | 1210 +++ .../@types/node/trace_events.d.ts | 182 + .../@types/node/ts4.8/assert.d.ts | 996 ++ .../@types/node/ts4.8/assert/strict.d.ts | 8 + .../@types/node/ts4.8/async_hooks.d.ts | 539 ++ .../@types/node/ts4.8/buffer.d.ts | 2352 +++++ .../@types/node/ts4.8/child_process.d.ts | 1540 +++ .../@types/node/ts4.8/cluster.d.ts | 432 + .../@types/node/ts4.8/console.d.ts | 412 + .../@types/node/ts4.8/constants.d.ts | 19 + .../@types/node/ts4.8/crypto.d.ts | 4455 +++++++++ .../node_modules/@types/node/ts4.8/dgram.d.ts | 586 ++ .../node/ts4.8/diagnostics_channel.d.ts | 191 + .../node_modules/@types/node/ts4.8/dns.d.ts | 809 ++ .../@types/node/ts4.8/dns/promises.d.ts | 417 + .../@types/node/ts4.8/dom-events.d.ts | 122 + .../@types/node/ts4.8/domain.d.ts | 170 + .../@types/node/ts4.8/events.d.ts | 796 ++ .../node_modules/@types/node/ts4.8/fs.d.ts | 4289 +++++++++ .../@types/node/ts4.8/fs/promises.d.ts | 1232 +++ .../@types/node/ts4.8/globals.d.ts | 323 + .../@types/node/ts4.8/globals.global.d.ts | 1 + .../node_modules/@types/node/ts4.8/http.d.ts | 1808 ++++ .../node_modules/@types/node/ts4.8/http2.d.ts | 2381 +++++ .../node_modules/@types/node/ts4.8/https.d.ts | 550 ++ .../node_modules/@types/node/ts4.8/index.d.ts | 88 + .../@types/node/ts4.8/inspector.d.ts | 2748 ++++++ .../@types/node/ts4.8/module.d.ts | 264 + .../node_modules/@types/node/ts4.8/net.d.ts | 912 ++ .../node_modules/@types/node/ts4.8/os.d.ts | 477 + .../node_modules/@types/node/ts4.8/path.d.ts | 191 + .../@types/node/ts4.8/perf_hooks.d.ts | 639 ++ .../@types/node/ts4.8/process.d.ts | 1525 +++ .../@types/node/ts4.8/punycode.d.ts | 117 + .../@types/node/ts4.8/querystring.d.ts | 141 + .../@types/node/ts4.8/readline.d.ts | 539 ++ .../@types/node/ts4.8/readline/promises.d.ts | 150 + .../node_modules/@types/node/ts4.8/repl.d.ts | 430 + .../@types/node/ts4.8/stream.d.ts | 1537 +++ .../@types/node/ts4.8/stream/consumers.d.ts | 12 + .../@types/node/ts4.8/stream/promises.d.ts | 83 + .../@types/node/ts4.8/stream/web.d.ts | 336 + .../@types/node/ts4.8/string_decoder.d.ts | 67 + .../node_modules/@types/node/ts4.8/test.d.ts | 1446 +++ .../@types/node/ts4.8/timers.d.ts | 240 + .../@types/node/ts4.8/timers/promises.d.ts | 93 + .../node_modules/@types/node/ts4.8/tls.d.ts | 1210 +++ .../@types/node/ts4.8/trace_events.d.ts | 182 + .../node_modules/@types/node/ts4.8/tty.d.ts | 208 + .../node_modules/@types/node/ts4.8/url.d.ts | 927 ++ .../node_modules/@types/node/ts4.8/util.d.ts | 2178 +++++ .../node_modules/@types/node/ts4.8/v8.d.ts | 635 ++ .../node_modules/@types/node/ts4.8/vm.d.ts | 901 ++ .../node_modules/@types/node/ts4.8/wasi.d.ts | 152 + .../@types/node/ts4.8/worker_threads.d.ts | 691 ++ .../node_modules/@types/node/ts4.8/zlib.d.ts | 517 + .../node_modules/@types/node/tty.d.ts | 208 + .../node_modules/@types/node/url.d.ts | 927 ++ .../node_modules/@types/node/util.d.ts | 2178 +++++ Url-Shortner/node_modules/@types/node/v8.d.ts | 635 ++ Url-Shortner/node_modules/@types/node/vm.d.ts | 901 ++ .../node_modules/@types/node/wasi.d.ts | 152 + .../@types/node/worker_threads.d.ts | 691 ++ .../node_modules/@types/node/zlib.d.ts | 517 + .../@types/webidl-conversions/LICENSE | 21 + .../@types/webidl-conversions/README.md | 16 + .../@types/webidl-conversions/index.d.ts | 97 + .../@types/webidl-conversions/package.json | 30 + .../node_modules/@types/whatwg-url/LICENSE | 21 + .../node_modules/@types/whatwg-url/README.md | 16 + .../@types/whatwg-url/dist/URL-impl.d.ts | 23 + .../@types/whatwg-url/dist/URL.d.ts | 76 + .../whatwg-url/dist/URLSearchParams-impl.d.ts | 23 + .../whatwg-url/dist/URLSearchParams.d.ts | 91 + .../node_modules/@types/whatwg-url/index.d.ts | 162 + .../@types/whatwg-url/package.json | 33 + .../@types/whatwg-url/webidl2js-wrapper.d.ts | 4 + Url-Shortner/node_modules/accepts/HISTORY.md | 243 + Url-Shortner/node_modules/accepts/LICENSE | 23 + Url-Shortner/node_modules/accepts/README.md | 140 + Url-Shortner/node_modules/accepts/index.js | 238 + .../node_modules/accepts/package.json | 47 + .../node_modules/ansi-styles/index.d.ts | 345 + .../node_modules/ansi-styles/index.js | 163 + Url-Shortner/node_modules/ansi-styles/license | 9 + .../node_modules/ansi-styles/package.json | 56 + .../node_modules/ansi-styles/readme.md | 152 + .../node_modules/array-flatten/LICENSE | 21 + .../node_modules/array-flatten/README.md | 43 + .../array-flatten/array-flatten.js | 64 + .../node_modules/array-flatten/package.json | 39 + Url-Shortner/node_modules/async/CHANGELOG.md | 348 + Url-Shortner/node_modules/async/LICENSE | 19 + Url-Shortner/node_modules/async/README.md | 59 + Url-Shortner/node_modules/async/all.js | 119 + Url-Shortner/node_modules/async/allLimit.js | 46 + Url-Shortner/node_modules/async/allSeries.js | 45 + Url-Shortner/node_modules/async/any.js | 122 + Url-Shortner/node_modules/async/anyLimit.js | 47 + Url-Shortner/node_modules/async/anySeries.js | 46 + Url-Shortner/node_modules/async/apply.js | 55 + Url-Shortner/node_modules/async/applyEach.js | 57 + .../node_modules/async/applyEachSeries.js | 37 + Url-Shortner/node_modules/async/asyncify.js | 118 + Url-Shortner/node_modules/async/auto.js | 333 + Url-Shortner/node_modules/async/autoInject.js | 182 + Url-Shortner/node_modules/async/bower.json | 17 + Url-Shortner/node_modules/async/cargo.js | 63 + Url-Shortner/node_modules/async/cargoQueue.js | 71 + Url-Shortner/node_modules/async/compose.js | 55 + Url-Shortner/node_modules/async/concat.js | 115 + .../node_modules/async/concatLimit.js | 60 + .../node_modules/async/concatSeries.js | 41 + Url-Shortner/node_modules/async/constant.js | 55 + Url-Shortner/node_modules/async/detect.js | 96 + .../node_modules/async/detectLimit.js | 48 + .../node_modules/async/detectSeries.js | 47 + Url-Shortner/node_modules/async/dir.js | 43 + Url-Shortner/node_modules/async/dist/async.js | 6059 ++++++++++++ .../node_modules/async/dist/async.min.js | 1 + .../node_modules/async/dist/async.mjs | 5947 ++++++++++++ Url-Shortner/node_modules/async/doDuring.js | 68 + Url-Shortner/node_modules/async/doUntil.js | 46 + Url-Shortner/node_modules/async/doWhilst.js | 68 + Url-Shortner/node_modules/async/during.js | 78 + Url-Shortner/node_modules/async/each.js | 129 + Url-Shortner/node_modules/async/eachLimit.js | 50 + Url-Shortner/node_modules/async/eachOf.js | 185 + .../node_modules/async/eachOfLimit.js | 47 + .../node_modules/async/eachOfSeries.js | 39 + Url-Shortner/node_modules/async/eachSeries.js | 44 + .../node_modules/async/ensureAsync.js | 67 + Url-Shortner/node_modules/async/every.js | 119 + Url-Shortner/node_modules/async/everyLimit.js | 46 + .../node_modules/async/everySeries.js | 45 + Url-Shortner/node_modules/async/filter.js | 93 + .../node_modules/async/filterLimit.js | 45 + .../node_modules/async/filterSeries.js | 43 + Url-Shortner/node_modules/async/find.js | 96 + Url-Shortner/node_modules/async/findLimit.js | 48 + Url-Shortner/node_modules/async/findSeries.js | 47 + Url-Shortner/node_modules/async/flatMap.js | 115 + .../node_modules/async/flatMapLimit.js | 60 + .../node_modules/async/flatMapSeries.js | 41 + Url-Shortner/node_modules/async/foldl.js | 153 + Url-Shortner/node_modules/async/foldr.js | 41 + Url-Shortner/node_modules/async/forEach.js | 129 + .../node_modules/async/forEachLimit.js | 50 + Url-Shortner/node_modules/async/forEachOf.js | 185 + .../node_modules/async/forEachOfLimit.js | 47 + .../node_modules/async/forEachOfSeries.js | 39 + .../node_modules/async/forEachSeries.js | 44 + Url-Shortner/node_modules/async/forever.js | 68 + Url-Shortner/node_modules/async/groupBy.js | 108 + .../node_modules/async/groupByLimit.js | 71 + .../node_modules/async/groupBySeries.js | 36 + Url-Shortner/node_modules/async/index.js | 588 ++ Url-Shortner/node_modules/async/inject.js | 153 + .../async/internal/DoublyLinkedList.js | 92 + .../node_modules/async/internal/Heap.js | 120 + .../node_modules/async/internal/applyEach.js | 29 + .../async/internal/asyncEachOfLimit.js | 75 + .../node_modules/async/internal/awaitify.js | 27 + .../node_modules/async/internal/breakLoop.js | 10 + .../async/internal/consoleFunc.js | 31 + .../async/internal/createTester.js | 40 + .../async/internal/eachOfLimit.js | 90 + .../node_modules/async/internal/filter.js | 55 + .../async/internal/getIterator.js | 11 + .../async/internal/initialParams.js | 14 + .../async/internal/isArrayLike.js | 10 + .../node_modules/async/internal/iterator.js | 57 + .../node_modules/async/internal/map.js | 30 + .../node_modules/async/internal/once.js | 17 + .../node_modules/async/internal/onlyOnce.js | 15 + .../node_modules/async/internal/parallel.js | 34 + .../async/internal/promiseCallback.js | 23 + .../node_modules/async/internal/queue.js | 294 + .../node_modules/async/internal/range.js | 14 + .../node_modules/async/internal/reject.js | 26 + .../async/internal/setImmediate.js | 34 + .../async/internal/withoutIndex.js | 10 + .../node_modules/async/internal/wrapAsync.js | 34 + Url-Shortner/node_modules/async/log.js | 41 + Url-Shortner/node_modules/async/map.js | 142 + Url-Shortner/node_modules/async/mapLimit.js | 45 + Url-Shortner/node_modules/async/mapSeries.js | 44 + Url-Shortner/node_modules/async/mapValues.js | 152 + .../node_modules/async/mapValuesLimit.js | 61 + .../node_modules/async/mapValuesSeries.js | 37 + Url-Shortner/node_modules/async/memoize.js | 91 + Url-Shortner/node_modules/async/nextTick.js | 52 + Url-Shortner/node_modules/async/package.json | 75 + Url-Shortner/node_modules/async/parallel.js | 180 + .../node_modules/async/parallelLimit.js | 41 + .../node_modules/async/priorityQueue.js | 86 + Url-Shortner/node_modules/async/queue.js | 167 + Url-Shortner/node_modules/async/race.js | 67 + Url-Shortner/node_modules/async/reduce.js | 153 + .../node_modules/async/reduceRight.js | 41 + Url-Shortner/node_modules/async/reflect.js | 78 + Url-Shortner/node_modules/async/reflectAll.js | 93 + Url-Shortner/node_modules/async/reject.js | 87 + .../node_modules/async/rejectLimit.js | 45 + .../node_modules/async/rejectSeries.js | 43 + Url-Shortner/node_modules/async/retry.js | 159 + Url-Shortner/node_modules/async/retryable.js | 77 + Url-Shortner/node_modules/async/select.js | 93 + .../node_modules/async/selectLimit.js | 45 + .../node_modules/async/selectSeries.js | 43 + Url-Shortner/node_modules/async/seq.js | 79 + Url-Shortner/node_modules/async/series.js | 186 + .../node_modules/async/setImmediate.js | 45 + Url-Shortner/node_modules/async/some.js | 122 + Url-Shortner/node_modules/async/someLimit.js | 47 + Url-Shortner/node_modules/async/someSeries.js | 46 + Url-Shortner/node_modules/async/sortBy.js | 190 + Url-Shortner/node_modules/async/timeout.js | 89 + Url-Shortner/node_modules/async/times.js | 50 + Url-Shortner/node_modules/async/timesLimit.js | 43 + .../node_modules/async/timesSeries.js | 32 + Url-Shortner/node_modules/async/transform.js | 173 + Url-Shortner/node_modules/async/tryEach.js | 78 + Url-Shortner/node_modules/async/unmemoize.js | 25 + Url-Shortner/node_modules/async/until.js | 61 + Url-Shortner/node_modules/async/waterfall.js | 105 + Url-Shortner/node_modules/async/whilst.js | 78 + Url-Shortner/node_modules/async/wrapSync.js | 118 + .../balanced-match/.github/FUNDING.yml | 2 + .../node_modules/balanced-match/LICENSE.md | 21 + .../node_modules/balanced-match/README.md | 97 + .../node_modules/balanced-match/index.js | 62 + .../node_modules/balanced-match/package.json | 48 + .../node_modules/body-parser/HISTORY.md | 657 ++ Url-Shortner/node_modules/body-parser/LICENSE | 23 + .../node_modules/body-parser/README.md | 464 + .../node_modules/body-parser/SECURITY.md | 25 + .../node_modules/body-parser/index.js | 156 + .../node_modules/body-parser/lib/read.js | 205 + .../body-parser/lib/types/json.js | 236 + .../node_modules/body-parser/lib/types/raw.js | 101 + .../body-parser/lib/types/text.js | 121 + .../body-parser/lib/types/urlencoded.js | 284 + .../node_modules/body-parser/package.json | 56 + .../node_modules/brace-expansion/LICENSE | 21 + .../node_modules/brace-expansion/README.md | 129 + .../node_modules/brace-expansion/index.js | 201 + .../node_modules/brace-expansion/package.json | 47 + Url-Shortner/node_modules/bson/LICENSE.md | 201 + Url-Shortner/node_modules/bson/README.md | 238 + Url-Shortner/node_modules/bson/bson.d.ts | 1302 +++ Url-Shortner/node_modules/bson/etc/prepare.js | 19 + .../node_modules/bson/lib/bson.bundle.js | 4149 ++++++++ .../node_modules/bson/lib/bson.bundle.js.map | 1 + Url-Shortner/node_modules/bson/lib/bson.cjs | 4144 ++++++++ .../node_modules/bson/lib/bson.cjs.map | 1 + Url-Shortner/node_modules/bson/lib/bson.mjs | 4116 ++++++++ .../node_modules/bson/lib/bson.mjs.map | 1 + .../node_modules/bson/lib/bson.rn.cjs | 4159 ++++++++ .../node_modules/bson/lib/bson.rn.cjs.map | 1 + Url-Shortner/node_modules/bson/package.json | 116 + Url-Shortner/node_modules/bson/src/binary.ts | 510 + Url-Shortner/node_modules/bson/src/bson.ts | 250 + .../node_modules/bson/src/bson_value.ts | 18 + Url-Shortner/node_modules/bson/src/code.ts | 69 + .../node_modules/bson/src/constants.ts | 141 + Url-Shortner/node_modules/bson/src/db_ref.ts | 127 + .../node_modules/bson/src/decimal128.ts | 858 ++ Url-Shortner/node_modules/bson/src/double.ts | 83 + Url-Shortner/node_modules/bson/src/error.ts | 85 + .../node_modules/bson/src/extended_json.ts | 515 + Url-Shortner/node_modules/bson/src/index.ts | 19 + Url-Shortner/node_modules/bson/src/int_32.ts | 70 + Url-Shortner/node_modules/bson/src/long.ts | 1067 +++ Url-Shortner/node_modules/bson/src/max_key.ts | 36 + Url-Shortner/node_modules/bson/src/min_key.ts | 36 + .../node_modules/bson/src/objectid.ts | 323 + .../bson/src/parser/calculate_size.ts | 211 + .../bson/src/parser/deserializer.ts | 751 ++ .../bson/src/parser/serializer.ts | 1001 ++ .../node_modules/bson/src/parser/utils.ts | 29 + Url-Shortner/node_modules/bson/src/regexp.ts | 114 + Url-Shortner/node_modules/bson/src/symbol.ts | 58 + .../node_modules/bson/src/timestamp.ts | 152 + .../node_modules/bson/src/utils/byte_utils.ts | 61 + .../bson/src/utils/node_byte_utils.ts | 141 + .../bson/src/utils/web_byte_utils.ts | 190 + .../node_modules/bson/src/validate_utf8.ts | 47 + .../bson/vendor/base64/LICENSE-MIT.txt | 20 + .../node_modules/bson/vendor/base64/README.md | 112 + .../node_modules/bson/vendor/base64/base64.js | 157 + .../bson/vendor/base64/package.json | 43 + .../bson/vendor/text-encoding/LICENSE.md | 237 + .../bson/vendor/text-encoding/README.md | 111 + .../bson/vendor/text-encoding/index.js | 9 + .../text-encoding/lib/encoding-indexes.js | 47 + .../bson/vendor/text-encoding/lib/encoding.js | 3301 +++++++ .../bson/vendor/text-encoding/package.json | 37 + Url-Shortner/node_modules/bytes/History.md | 97 + Url-Shortner/node_modules/bytes/LICENSE | 23 + Url-Shortner/node_modules/bytes/Readme.md | 152 + Url-Shortner/node_modules/bytes/index.js | 170 + Url-Shortner/node_modules/bytes/package.json | 42 + .../node_modules/call-bind/.eslintignore | 1 + Url-Shortner/node_modules/call-bind/.eslintrc | 17 + .../call-bind/.github/FUNDING.yml | 12 + Url-Shortner/node_modules/call-bind/.nycrc | 13 + .../node_modules/call-bind/CHANGELOG.md | 42 + Url-Shortner/node_modules/call-bind/LICENSE | 21 + Url-Shortner/node_modules/call-bind/README.md | 2 + .../node_modules/call-bind/callBound.js | 15 + Url-Shortner/node_modules/call-bind/index.js | 47 + .../node_modules/call-bind/package.json | 80 + .../node_modules/call-bind/test/callBound.js | 55 + .../node_modules/call-bind/test/index.js | 66 + Url-Shortner/node_modules/chalk/index.d.ts | 415 + Url-Shortner/node_modules/chalk/license | 9 + Url-Shortner/node_modules/chalk/package.json | 68 + Url-Shortner/node_modules/chalk/readme.md | 341 + .../node_modules/chalk/source/index.js | 229 + .../node_modules/chalk/source/templates.js | 134 + .../node_modules/chalk/source/util.js | 39 + .../node_modules/color-convert/CHANGELOG.md | 54 + .../node_modules/color-convert/LICENSE | 21 + .../node_modules/color-convert/README.md | 68 + .../node_modules/color-convert/conversions.js | 839 ++ .../node_modules/color-convert/index.js | 81 + .../node_modules/color-convert/package.json | 48 + .../node_modules/color-convert/route.js | 97 + Url-Shortner/node_modules/color-name/LICENSE | 8 + .../node_modules/color-name/README.md | 11 + Url-Shortner/node_modules/color-name/index.js | 152 + .../node_modules/color-name/package.json | 28 + .../node_modules/concat-map/.travis.yml | 4 + Url-Shortner/node_modules/concat-map/LICENSE | 18 + .../node_modules/concat-map/README.markdown | 62 + .../node_modules/concat-map/example/map.js | 6 + Url-Shortner/node_modules/concat-map/index.js | 13 + .../node_modules/concat-map/package.json | 43 + .../node_modules/concat-map/test/map.js | 39 + .../content-disposition/HISTORY.md | 60 + .../node_modules/content-disposition/LICENSE | 22 + .../content-disposition/README.md | 142 + .../node_modules/content-disposition/index.js | 458 + .../content-disposition/package.json | 44 + .../node_modules/content-type/HISTORY.md | 29 + .../node_modules/content-type/LICENSE | 22 + .../node_modules/content-type/README.md | 94 + .../node_modules/content-type/index.js | 225 + .../node_modules/content-type/package.json | 42 + .../node_modules/cookie-parser/HISTORY.md | 100 + .../node_modules/cookie-parser/LICENSE | 23 + .../node_modules/cookie-parser/README.md | 119 + .../node_modules/cookie-parser/index.js | 182 + .../node_modules/cookie/HISTORY.md | 128 + .../cookie-parser/node_modules/cookie/LICENSE | 24 + .../node_modules/cookie/README.md | 257 + .../node_modules/cookie/index.js | 202 + .../node_modules/cookie/package.json | 40 + .../node_modules/cookie-parser/package.json | 45 + .../node_modules/cookie-signature/.npmignore | 4 + .../node_modules/cookie-signature/History.md | 38 + .../node_modules/cookie-signature/Readme.md | 42 + .../node_modules/cookie-signature/index.js | 51 + .../cookie-signature/package.json | 18 + Url-Shortner/node_modules/cookie/HISTORY.md | 142 + Url-Shortner/node_modules/cookie/LICENSE | 24 + Url-Shortner/node_modules/cookie/README.md | 302 + Url-Shortner/node_modules/cookie/SECURITY.md | 25 + Url-Shortner/node_modules/cookie/index.js | 270 + Url-Shortner/node_modules/cookie/package.json | 44 + .../node_modules/debug/.coveralls.yml | 1 + Url-Shortner/node_modules/debug/.eslintrc | 11 + Url-Shortner/node_modules/debug/.npmignore | 9 + Url-Shortner/node_modules/debug/.travis.yml | 14 + Url-Shortner/node_modules/debug/CHANGELOG.md | 362 + Url-Shortner/node_modules/debug/LICENSE | 19 + Url-Shortner/node_modules/debug/Makefile | 50 + Url-Shortner/node_modules/debug/README.md | 312 + .../node_modules/debug/component.json | 19 + Url-Shortner/node_modules/debug/karma.conf.js | 70 + Url-Shortner/node_modules/debug/node.js | 1 + Url-Shortner/node_modules/debug/package.json | 49 + .../node_modules/debug/src/browser.js | 185 + Url-Shortner/node_modules/debug/src/debug.js | 202 + Url-Shortner/node_modules/debug/src/index.js | 10 + .../node_modules/debug/src/inspector-log.js | 15 + Url-Shortner/node_modules/debug/src/node.js | 248 + Url-Shortner/node_modules/depd/History.md | 103 + Url-Shortner/node_modules/depd/LICENSE | 22 + Url-Shortner/node_modules/depd/Readme.md | 280 + Url-Shortner/node_modules/depd/index.js | 538 ++ .../node_modules/depd/lib/browser/index.js | 77 + Url-Shortner/node_modules/depd/package.json | 45 + Url-Shortner/node_modules/destroy/LICENSE | 23 + Url-Shortner/node_modules/destroy/README.md | 63 + Url-Shortner/node_modules/destroy/index.js | 209 + .../node_modules/destroy/package.json | 48 + Url-Shortner/node_modules/ee-first/LICENSE | 22 + Url-Shortner/node_modules/ee-first/README.md | 80 + Url-Shortner/node_modules/ee-first/index.js | 95 + .../node_modules/ee-first/package.json | 29 + Url-Shortner/node_modules/ejs/LICENSE | 202 + Url-Shortner/node_modules/ejs/README.md | 344 + Url-Shortner/node_modules/ejs/bin/cli.js | 211 + Url-Shortner/node_modules/ejs/ejs.js | 1736 ++++ Url-Shortner/node_modules/ejs/ejs.min.js | 1 + Url-Shortner/node_modules/ejs/jakefile.js | 88 + Url-Shortner/node_modules/ejs/lib/ejs.js | 951 ++ Url-Shortner/node_modules/ejs/lib/utils.js | 241 + Url-Shortner/node_modules/ejs/package.json | 42 + Url-Shortner/node_modules/ejs/usage.txt | 24 + .../node_modules/encodeurl/HISTORY.md | 14 + Url-Shortner/node_modules/encodeurl/LICENSE | 22 + Url-Shortner/node_modules/encodeurl/README.md | 128 + Url-Shortner/node_modules/encodeurl/index.js | 60 + .../node_modules/encodeurl/package.json | 40 + Url-Shortner/node_modules/escape-html/LICENSE | 24 + .../node_modules/escape-html/Readme.md | 43 + .../node_modules/escape-html/index.js | 78 + .../node_modules/escape-html/package.json | 24 + Url-Shortner/node_modules/etag/HISTORY.md | 83 + Url-Shortner/node_modules/etag/LICENSE | 22 + Url-Shortner/node_modules/etag/README.md | 159 + Url-Shortner/node_modules/etag/index.js | 131 + Url-Shortner/node_modules/etag/package.json | 47 + Url-Shortner/node_modules/express/History.md | 3588 +++++++ Url-Shortner/node_modules/express/LICENSE | 24 + Url-Shortner/node_modules/express/Readme.md | 166 + Url-Shortner/node_modules/express/index.js | 11 + .../node_modules/express/lib/application.js | 661 ++ .../node_modules/express/lib/express.js | 116 + .../express/lib/middleware/init.js | 43 + .../express/lib/middleware/query.js | 47 + .../node_modules/express/lib/request.js | 525 + .../node_modules/express/lib/response.js | 1169 +++ .../node_modules/express/lib/router/index.js | 673 ++ .../node_modules/express/lib/router/layer.js | 181 + .../node_modules/express/lib/router/route.js | 225 + .../node_modules/express/lib/utils.js | 304 + Url-Shortner/node_modules/express/lib/view.js | 182 + .../node_modules/express/package.json | 99 + Url-Shortner/node_modules/filelist/README.md | 84 + Url-Shortner/node_modules/filelist/index.d.ts | 110 + Url-Shortner/node_modules/filelist/index.js | 495 + .../node_modules/filelist/jakefile.js | 15 + .../brace-expansion/.github/FUNDING.yml | 2 + .../node_modules/brace-expansion/LICENSE | 21 + .../node_modules/brace-expansion/README.md | 135 + .../node_modules/brace-expansion/index.js | 203 + .../node_modules/brace-expansion/package.json | 46 + .../filelist/node_modules/minimatch/LICENSE | 15 + .../filelist/node_modules/minimatch/README.md | 259 + .../node_modules/minimatch/lib/path.js | 4 + .../node_modules/minimatch/minimatch.js | 944 ++ .../node_modules/minimatch/package.json | 35 + .../node_modules/filelist/package.json | 28 + .../node_modules/finalhandler/HISTORY.md | 195 + .../node_modules/finalhandler/LICENSE | 22 + .../node_modules/finalhandler/README.md | 147 + .../node_modules/finalhandler/SECURITY.md | 25 + .../node_modules/finalhandler/index.js | 336 + .../node_modules/finalhandler/package.json | 46 + .../node_modules/forwarded/HISTORY.md | 21 + Url-Shortner/node_modules/forwarded/LICENSE | 22 + Url-Shortner/node_modules/forwarded/README.md | 57 + Url-Shortner/node_modules/forwarded/index.js | 90 + .../node_modules/forwarded/package.json | 45 + Url-Shortner/node_modules/fresh/HISTORY.md | 70 + Url-Shortner/node_modules/fresh/LICENSE | 23 + Url-Shortner/node_modules/fresh/README.md | 119 + Url-Shortner/node_modules/fresh/index.js | 137 + Url-Shortner/node_modules/fresh/package.json | 46 + .../node_modules/function-bind/.editorconfig | 20 + .../node_modules/function-bind/.eslintrc | 15 + .../node_modules/function-bind/.jscs.json | 176 + .../node_modules/function-bind/.npmignore | 22 + .../node_modules/function-bind/.travis.yml | 168 + .../node_modules/function-bind/LICENSE | 20 + .../node_modules/function-bind/README.md | 48 + .../function-bind/implementation.js | 52 + .../node_modules/function-bind/index.js | 5 + .../node_modules/function-bind/package.json | 63 + .../node_modules/function-bind/test/.eslintrc | 9 + .../node_modules/function-bind/test/index.js | 252 + .../node_modules/get-intrinsic/.eslintrc | 38 + .../get-intrinsic/.github/FUNDING.yml | 12 + .../node_modules/get-intrinsic/.nycrc | 9 + .../node_modules/get-intrinsic/CHANGELOG.md | 117 + .../node_modules/get-intrinsic/LICENSE | 21 + .../node_modules/get-intrinsic/README.md | 71 + .../node_modules/get-intrinsic/index.js | 351 + .../node_modules/get-intrinsic/package.json | 93 + .../get-intrinsic/test/GetIntrinsic.js | 274 + Url-Shortner/node_modules/has-flag/index.d.ts | 39 + Url-Shortner/node_modules/has-flag/index.js | 8 + Url-Shortner/node_modules/has-flag/license | 9 + .../node_modules/has-flag/package.json | 46 + Url-Shortner/node_modules/has-flag/readme.md | 89 + Url-Shortner/node_modules/has-proto/.eslintrc | 5 + .../has-proto/.github/FUNDING.yml | 12 + .../node_modules/has-proto/CHANGELOG.md | 23 + Url-Shortner/node_modules/has-proto/LICENSE | 21 + Url-Shortner/node_modules/has-proto/README.md | 38 + Url-Shortner/node_modules/has-proto/index.js | 11 + .../node_modules/has-proto/package.json | 74 + .../node_modules/has-proto/test/index.js | 19 + .../node_modules/has-symbols/.eslintrc | 11 + .../has-symbols/.github/FUNDING.yml | 12 + Url-Shortner/node_modules/has-symbols/.nycrc | 9 + .../node_modules/has-symbols/CHANGELOG.md | 75 + Url-Shortner/node_modules/has-symbols/LICENSE | 21 + .../node_modules/has-symbols/README.md | 46 + .../node_modules/has-symbols/index.js | 13 + .../node_modules/has-symbols/package.json | 101 + .../node_modules/has-symbols/shams.js | 42 + .../node_modules/has-symbols/test/index.js | 22 + .../has-symbols/test/shams/core-js.js | 28 + .../test/shams/get-own-property-symbols.js | 28 + .../node_modules/has-symbols/test/tests.js | 56 + Url-Shortner/node_modules/has/LICENSE-MIT | 22 + Url-Shortner/node_modules/has/README.md | 18 + Url-Shortner/node_modules/has/package.json | 48 + Url-Shortner/node_modules/has/src/index.js | 5 + Url-Shortner/node_modules/has/test/index.js | 10 + .../node_modules/http-errors/HISTORY.md | 180 + Url-Shortner/node_modules/http-errors/LICENSE | 23 + .../node_modules/http-errors/README.md | 169 + .../node_modules/http-errors/index.js | 289 + .../node_modules/http-errors/package.json | 50 + .../node_modules/iconv-lite/Changelog.md | 162 + Url-Shortner/node_modules/iconv-lite/LICENSE | 21 + .../node_modules/iconv-lite/README.md | 156 + .../iconv-lite/encodings/dbcs-codec.js | 555 ++ .../iconv-lite/encodings/dbcs-data.js | 176 + .../iconv-lite/encodings/index.js | 22 + .../iconv-lite/encodings/internal.js | 188 + .../iconv-lite/encodings/sbcs-codec.js | 72 + .../encodings/sbcs-data-generated.js | 451 + .../iconv-lite/encodings/sbcs-data.js | 174 + .../encodings/tables/big5-added.json | 122 + .../iconv-lite/encodings/tables/cp936.json | 264 + .../iconv-lite/encodings/tables/cp949.json | 273 + .../iconv-lite/encodings/tables/cp950.json | 177 + .../iconv-lite/encodings/tables/eucjp.json | 182 + .../encodings/tables/gb18030-ranges.json | 1 + .../encodings/tables/gbk-added.json | 55 + .../iconv-lite/encodings/tables/shiftjis.json | 125 + .../iconv-lite/encodings/utf16.js | 177 + .../node_modules/iconv-lite/encodings/utf7.js | 290 + .../iconv-lite/lib/bom-handling.js | 52 + .../iconv-lite/lib/extend-node.js | 217 + .../node_modules/iconv-lite/lib/index.d.ts | 24 + .../node_modules/iconv-lite/lib/index.js | 153 + .../node_modules/iconv-lite/lib/streams.js | 121 + .../node_modules/iconv-lite/package.json | 46 + Url-Shortner/node_modules/inherits/LICENSE | 16 + Url-Shortner/node_modules/inherits/README.md | 42 + .../node_modules/inherits/inherits.js | 9 + .../node_modules/inherits/inherits_browser.js | 27 + .../node_modules/inherits/package.json | 29 + Url-Shortner/node_modules/ip/README.md | 90 + Url-Shortner/node_modules/ip/lib/ip.js | 422 + Url-Shortner/node_modules/ip/package.json | 25 + Url-Shortner/node_modules/ipaddr.js/LICENSE | 19 + Url-Shortner/node_modules/ipaddr.js/README.md | 233 + .../node_modules/ipaddr.js/ipaddr.min.js | 1 + .../node_modules/ipaddr.js/lib/ipaddr.js | 673 ++ .../node_modules/ipaddr.js/lib/ipaddr.js.d.ts | 68 + .../node_modules/ipaddr.js/package.json | 35 + Url-Shortner/node_modules/jake/Makefile | 44 + Url-Shortner/node_modules/jake/README.md | 17 + .../node_modules/jake/bin/bash_completion.sh | 41 + Url-Shortner/node_modules/jake/bin/cli.js | 31 + Url-Shortner/node_modules/jake/jakefile.js | 112 + Url-Shortner/node_modules/jake/lib/api.js | 409 + Url-Shortner/node_modules/jake/lib/jake.js | 330 + Url-Shortner/node_modules/jake/lib/loader.js | 173 + .../node_modules/jake/lib/namespace.js | 115 + .../node_modules/jake/lib/package_task.js | 406 + .../node_modules/jake/lib/parseargs.js | 134 + Url-Shortner/node_modules/jake/lib/program.js | 282 + .../node_modules/jake/lib/publish_task.js | 290 + Url-Shortner/node_modules/jake/lib/rule.js | 311 + .../jake/lib/task/directory_task.js | 30 + .../node_modules/jake/lib/task/file_task.js | 126 + .../node_modules/jake/lib/task/index.js | 9 + .../node_modules/jake/lib/task/task.js | 449 + .../node_modules/jake/lib/test_task.js | 270 + .../node_modules/jake/lib/utils/file.js | 286 + .../node_modules/jake/lib/utils/index.js | 297 + .../node_modules/jake/lib/utils/logger.js | 24 + Url-Shortner/node_modules/jake/package.json | 42 + .../jake/test/integration/concurrent.js | 45 + .../jake/test/integration/file.js | 228 + .../jake/test/integration/file_task.js | 141 + .../jake/test/integration/helpers.js | 80 + .../jake/test/integration/jakefile.js | 352 + .../integration/jakelib/concurrent.jake.js | 113 + .../test/integration/jakelib/publish.jake.js | 49 + .../jakelib/required_module.jake.js | 10 + .../test/integration/jakelib/rule.jake.js | 222 + .../jake/test/integration/list_tasks.js | 15 + .../jake/test/integration/publish_task.js | 27 + .../jake/test/integration/rule.js | 217 + .../jake/test/integration/selfdep.js | 42 + .../jake/test/integration/task_base.js | 167 + .../node_modules/jake/test/unit/jakefile.js | 36 + .../node_modules/jake/test/unit/namespace.js | 77 + .../node_modules/jake/test/unit/parseargs.js | 169 + Url-Shortner/node_modules/jake/usage.txt | 17 + Url-Shortner/node_modules/kareem/LICENSE | 202 + Url-Shortner/node_modules/kareem/README.md | 420 + Url-Shortner/node_modules/kareem/index.js | 668 ++ Url-Shortner/node_modules/kareem/package.json | 31 + .../node_modules/media-typer/HISTORY.md | 22 + Url-Shortner/node_modules/media-typer/LICENSE | 22 + .../node_modules/media-typer/README.md | 81 + .../node_modules/media-typer/index.js | 270 + .../node_modules/media-typer/package.json | 26 + .../node_modules/memory-pager/.travis.yml | 4 + .../node_modules/memory-pager/LICENSE | 21 + .../node_modules/memory-pager/README.md | 65 + .../node_modules/memory-pager/index.js | 160 + .../node_modules/memory-pager/package.json | 24 + .../node_modules/memory-pager/test.js | 80 + .../node_modules/merge-descriptors/HISTORY.md | 21 + .../node_modules/merge-descriptors/LICENSE | 23 + .../node_modules/merge-descriptors/README.md | 48 + .../node_modules/merge-descriptors/index.js | 60 + .../merge-descriptors/package.json | 32 + Url-Shortner/node_modules/methods/HISTORY.md | 29 + Url-Shortner/node_modules/methods/LICENSE | 24 + Url-Shortner/node_modules/methods/README.md | 51 + Url-Shortner/node_modules/methods/index.js | 69 + .../node_modules/methods/package.json | 36 + Url-Shortner/node_modules/mime-db/HISTORY.md | 507 + Url-Shortner/node_modules/mime-db/LICENSE | 23 + Url-Shortner/node_modules/mime-db/README.md | 100 + Url-Shortner/node_modules/mime-db/db.json | 8519 +++++++++++++++++ Url-Shortner/node_modules/mime-db/index.js | 12 + .../node_modules/mime-db/package.json | 60 + .../node_modules/mime-types/HISTORY.md | 397 + Url-Shortner/node_modules/mime-types/LICENSE | 23 + .../node_modules/mime-types/README.md | 113 + Url-Shortner/node_modules/mime-types/index.js | 188 + .../node_modules/mime-types/package.json | 44 + Url-Shortner/node_modules/mime/.npmignore | 0 Url-Shortner/node_modules/mime/CHANGELOG.md | 164 + Url-Shortner/node_modules/mime/LICENSE | 21 + Url-Shortner/node_modules/mime/README.md | 90 + Url-Shortner/node_modules/mime/cli.js | 8 + Url-Shortner/node_modules/mime/mime.js | 108 + Url-Shortner/node_modules/mime/package.json | 44 + Url-Shortner/node_modules/mime/src/build.js | 53 + Url-Shortner/node_modules/mime/src/test.js | 60 + Url-Shortner/node_modules/mime/types.json | 1 + Url-Shortner/node_modules/minimatch/LICENSE | 15 + Url-Shortner/node_modules/minimatch/README.md | 230 + .../node_modules/minimatch/minimatch.js | 947 ++ .../node_modules/minimatch/package.json | 33 + .../.esm-wrapper.mjs | 6 + .../mongodb-connection-string-url/LICENSE | 192 + .../mongodb-connection-string-url/README.md | 25 + .../lib/index.d.ts | 62 + .../lib/index.js | 213 + .../lib/index.js.map | 1 + .../lib/redact.d.ts | 7 + .../lib/redact.js | 86 + .../lib/redact.js.map | 1 + .../package.json | 62 + Url-Shortner/node_modules/mongodb/LICENSE.md | 201 + Url-Shortner/node_modules/mongodb/README.md | 310 + .../node_modules/mongodb/etc/prepare.js | 12 + .../node_modules/mongodb/lib/admin.js | 149 + .../node_modules/mongodb/lib/admin.js.map | 1 + Url-Shortner/node_modules/mongodb/lib/bson.js | 61 + .../node_modules/mongodb/lib/bson.js.map | 1 + .../node_modules/mongodb/lib/bulk/common.js | 895 ++ .../mongodb/lib/bulk/common.js.map | 1 + .../node_modules/mongodb/lib/bulk/ordered.js | 67 + .../mongodb/lib/bulk/ordered.js.map | 1 + .../mongodb/lib/bulk/unordered.js | 92 + .../mongodb/lib/bulk/unordered.js.map | 1 + .../node_modules/mongodb/lib/change_stream.js | 397 + .../mongodb/lib/change_stream.js.map | 1 + .../mongodb/lib/cmap/auth/auth_provider.js | 47 + .../lib/cmap/auth/auth_provider.js.map | 1 + .../mongodb/lib/cmap/auth/gssapi.js | 153 + .../mongodb/lib/cmap/auth/gssapi.js.map | 1 + .../lib/cmap/auth/mongo_credentials.js | 177 + .../lib/cmap/auth/mongo_credentials.js.map | 1 + .../mongodb/lib/cmap/auth/mongocr.js | 35 + .../mongodb/lib/cmap/auth/mongocr.js.map | 1 + .../mongodb/lib/cmap/auth/mongodb_aws.js | 186 + .../mongodb/lib/cmap/auth/mongodb_aws.js.map | 1 + .../mongodb/lib/cmap/auth/mongodb_oidc.js | 68 + .../mongodb/lib/cmap/auth/mongodb_oidc.js.map | 1 + .../auth/mongodb_oidc/aws_service_workflow.js | 30 + .../mongodb_oidc/aws_service_workflow.js.map | 1 + .../mongodb_oidc/azure_service_workflow.js | 73 + .../azure_service_workflow.js.map | 1 + .../auth/mongodb_oidc/azure_token_cache.js | 49 + .../mongodb_oidc/azure_token_cache.js.map | 1 + .../lib/cmap/auth/mongodb_oidc/cache.js | 55 + .../lib/cmap/auth/mongodb_oidc/cache.js.map | 1 + .../auth/mongodb_oidc/callback_lock_cache.js | 89 + .../mongodb_oidc/callback_lock_cache.js.map | 1 + .../auth/mongodb_oidc/callback_workflow.js | 204 + .../mongodb_oidc/callback_workflow.js.map | 1 + .../auth/mongodb_oidc/service_workflow.js | 43 + .../auth/mongodb_oidc/service_workflow.js.map | 1 + .../auth/mongodb_oidc/token_entry_cache.js | 62 + .../mongodb_oidc/token_entry_cache.js.map | 1 + .../mongodb/lib/cmap/auth/plain.js | 26 + .../mongodb/lib/cmap/auth/plain.js.map | 1 + .../mongodb/lib/cmap/auth/providers.js | 24 + .../mongodb/lib/cmap/auth/providers.js.map | 1 + .../mongodb/lib/cmap/auth/scram.js | 262 + .../mongodb/lib/cmap/auth/scram.js.map | 1 + .../mongodb/lib/cmap/auth/x509.js | 36 + .../mongodb/lib/cmap/auth/x509.js.map | 1 + .../lib/cmap/command_monitoring_events.js | 251 + .../lib/cmap/command_monitoring_events.js.map | 1 + .../node_modules/mongodb/lib/cmap/commands.js | 487 + .../mongodb/lib/cmap/commands.js.map | 1 + .../node_modules/mongodb/lib/cmap/connect.js | 378 + .../mongodb/lib/cmap/connect.js.map | 1 + .../mongodb/lib/cmap/connection.js | 492 + .../mongodb/lib/cmap/connection.js.map | 1 + .../mongodb/lib/cmap/connection_pool.js | 637 ++ .../mongodb/lib/cmap/connection_pool.js.map | 1 + .../lib/cmap/connection_pool_events.js | 191 + .../lib/cmap/connection_pool_events.js.map | 1 + .../node_modules/mongodb/lib/cmap/errors.js | 64 + .../mongodb/lib/cmap/errors.js.map | 1 + .../lib/cmap/handshake/client_metadata.js | 173 + .../lib/cmap/handshake/client_metadata.js.map | 1 + .../mongodb/lib/cmap/message_stream.js | 156 + .../mongodb/lib/cmap/message_stream.js.map | 1 + .../node_modules/mongodb/lib/cmap/metrics.js | 62 + .../mongodb/lib/cmap/metrics.js.map | 1 + .../mongodb/lib/cmap/stream_description.js | 51 + .../lib/cmap/stream_description.js.map | 1 + .../lib/cmap/wire_protocol/compression.js | 107 + .../lib/cmap/wire_protocol/compression.js.map | 1 + .../lib/cmap/wire_protocol/constants.js | 17 + .../lib/cmap/wire_protocol/constants.js.map | 1 + .../mongodb/lib/cmap/wire_protocol/shared.js | 40 + .../lib/cmap/wire_protocol/shared.js.map | 1 + .../node_modules/mongodb/lib/collection.js | 626 ++ .../mongodb/lib/collection.js.map | 1 + .../mongodb/lib/connection_string.js | 1103 +++ .../mongodb/lib/connection_string.js.map | 1 + .../node_modules/mongodb/lib/constants.js | 142 + .../node_modules/mongodb/lib/constants.js.map | 1 + .../mongodb/lib/cursor/abstract_cursor.js | 705 ++ .../mongodb/lib/cursor/abstract_cursor.js.map | 1 + .../mongodb/lib/cursor/aggregation_cursor.js | 168 + .../lib/cursor/aggregation_cursor.js.map | 1 + .../lib/cursor/change_stream_cursor.js | 115 + .../lib/cursor/change_stream_cursor.js.map | 1 + .../mongodb/lib/cursor/find_cursor.js | 381 + .../mongodb/lib/cursor/find_cursor.js.map | 1 + .../lib/cursor/list_collections_cursor.js | 37 + .../lib/cursor/list_collections_cursor.js.map | 1 + .../mongodb/lib/cursor/list_indexes_cursor.js | 36 + .../lib/cursor/list_indexes_cursor.js.map | 1 + .../lib/cursor/list_search_indexes_cursor.js | 14 + .../cursor/list_search_indexes_cursor.js.map | 1 + .../mongodb/lib/cursor/run_command_cursor.js | 94 + .../lib/cursor/run_command_cursor.js.map | 1 + Url-Shortner/node_modules/mongodb/lib/db.js | 379 + .../node_modules/mongodb/lib/db.js.map | 1 + Url-Shortner/node_modules/mongodb/lib/deps.js | 87 + .../node_modules/mongodb/lib/deps.js.map | 1 + .../node_modules/mongodb/lib/encrypter.js | 103 + .../node_modules/mongodb/lib/encrypter.js.map | 1 + .../node_modules/mongodb/lib/error.js | 832 ++ .../node_modules/mongodb/lib/error.js.map | 1 + .../node_modules/mongodb/lib/explain.js | 35 + .../node_modules/mongodb/lib/explain.js.map | 1 + .../mongodb/lib/gridfs/download.js | 313 + .../mongodb/lib/gridfs/download.js.map | 1 + .../node_modules/mongodb/lib/gridfs/index.js | 128 + .../mongodb/lib/gridfs/index.js.map | 1 + .../node_modules/mongodb/lib/gridfs/upload.js | 330 + .../mongodb/lib/gridfs/upload.js.map | 1 + .../node_modules/mongodb/lib/index.js | 162 + .../node_modules/mongodb/lib/index.js.map | 1 + .../node_modules/mongodb/lib/mongo_client.js | 329 + .../mongodb/lib/mongo_client.js.map | 1 + .../node_modules/mongodb/lib/mongo_logger.js | 360 + .../mongodb/lib/mongo_logger.js.map | 1 + .../node_modules/mongodb/lib/mongo_types.js | 22 + .../mongodb/lib/mongo_types.js.map | 1 + .../mongodb/lib/operations/add_user.js | 74 + .../mongodb/lib/operations/add_user.js.map | 1 + .../mongodb/lib/operations/aggregate.js | 92 + .../mongodb/lib/operations/aggregate.js.map | 1 + .../mongodb/lib/operations/bulk_write.js | 36 + .../mongodb/lib/operations/bulk_write.js.map | 1 + .../mongodb/lib/operations/collections.js | 32 + .../mongodb/lib/operations/collections.js.map | 1 + .../mongodb/lib/operations/command.js | 88 + .../mongodb/lib/operations/command.js.map | 1 + .../lib/operations/common_functions.js | 69 + .../lib/operations/common_functions.js.map | 1 + .../mongodb/lib/operations/count.js | 39 + .../mongodb/lib/operations/count.js.map | 1 + .../mongodb/lib/operations/count_documents.js | 37 + .../lib/operations/count_documents.js.map | 1 + .../lib/operations/create_collection.js | 108 + .../lib/operations/create_collection.js.map | 1 + .../mongodb/lib/operations/delete.js | 119 + .../mongodb/lib/operations/delete.js.map | 1 + .../mongodb/lib/operations/distinct.js | 67 + .../mongodb/lib/operations/distinct.js.map | 1 + .../mongodb/lib/operations/drop.js | 82 + .../mongodb/lib/operations/drop.js.map | 1 + .../operations/estimated_document_count.js | 38 + .../estimated_document_count.js.map | 1 + .../mongodb/lib/operations/eval.js | 55 + .../mongodb/lib/operations/eval.js.map | 1 + .../lib/operations/execute_operation.js | 162 + .../lib/operations/execute_operation.js.map | 1 + .../mongodb/lib/operations/find.js | 149 + .../mongodb/lib/operations/find.js.map | 1 + .../mongodb/lib/operations/find_and_modify.js | 152 + .../lib/operations/find_and_modify.js.map | 1 + .../mongodb/lib/operations/get_more.js | 58 + .../mongodb/lib/operations/get_more.js.map | 1 + .../mongodb/lib/operations/indexes.js | 270 + .../mongodb/lib/operations/indexes.js.map | 1 + .../mongodb/lib/operations/insert.js | 95 + .../mongodb/lib/operations/insert.js.map | 1 + .../mongodb/lib/operations/is_capped.js | 28 + .../mongodb/lib/operations/is_capped.js.map | 1 + .../mongodb/lib/operations/kill_cursors.js | 32 + .../lib/operations/kill_cursors.js.map | 1 + .../lib/operations/list_collections.js | 47 + .../lib/operations/list_collections.js.map | 1 + .../mongodb/lib/operations/list_databases.js | 35 + .../lib/operations/list_databases.js.map | 1 + .../mongodb/lib/operations/operation.js | 82 + .../mongodb/lib/operations/operation.js.map | 1 + .../lib/operations/options_operation.js | 28 + .../lib/operations/options_operation.js.map | 1 + .../mongodb/lib/operations/profiling_level.js | 33 + .../lib/operations/profiling_level.js.map | 1 + .../mongodb/lib/operations/remove_user.js | 21 + .../mongodb/lib/operations/remove_user.js.map | 1 + .../mongodb/lib/operations/rename.js | 46 + .../mongodb/lib/operations/rename.js.map | 1 + .../mongodb/lib/operations/run_command.js | 26 + .../mongodb/lib/operations/run_command.js.map | 1 + .../lib/operations/search_indexes/create.js | 29 + .../operations/search_indexes/create.js.map | 1 + .../lib/operations/search_indexes/drop.js | 30 + .../lib/operations/search_indexes/drop.js.map | 1 + .../lib/operations/search_indexes/update.js | 30 + .../operations/search_indexes/update.js.map | 1 + .../lib/operations/set_profiling_level.js | 51 + .../lib/operations/set_profiling_level.js.map | 1 + .../mongodb/lib/operations/stats.js | 48 + .../mongodb/lib/operations/stats.js.map | 1 + .../mongodb/lib/operations/update.js | 183 + .../mongodb/lib/operations/update.js.map | 1 + .../lib/operations/validate_collection.js | 41 + .../lib/operations/validate_collection.js.map | 1 + .../node_modules/mongodb/lib/read_concern.js | 73 + .../mongodb/lib/read_concern.js.map | 1 + .../mongodb/lib/read_preference.js | 195 + .../mongodb/lib/read_preference.js.map | 1 + .../node_modules/mongodb/lib/sdam/common.js | 56 + .../mongodb/lib/sdam/common.js.map | 1 + .../node_modules/mongodb/lib/sdam/events.js | 125 + .../mongodb/lib/sdam/events.js.map | 1 + .../node_modules/mongodb/lib/sdam/monitor.js | 417 + .../mongodb/lib/sdam/monitor.js.map | 1 + .../node_modules/mongodb/lib/sdam/server.js | 385 + .../mongodb/lib/sdam/server.js.map | 1 + .../mongodb/lib/sdam/server_description.js | 189 + .../lib/sdam/server_description.js.map | 1 + .../mongodb/lib/sdam/server_selection.js | 226 + .../mongodb/lib/sdam/server_selection.js.map | 1 + .../mongodb/lib/sdam/srv_polling.js | 103 + .../mongodb/lib/sdam/srv_polling.js.map | 1 + .../node_modules/mongodb/lib/sdam/topology.js | 621 ++ .../mongodb/lib/sdam/topology.js.map | 1 + .../mongodb/lib/sdam/topology_description.js | 360 + .../lib/sdam/topology_description.js.map | 1 + .../node_modules/mongodb/lib/sessions.js | 739 ++ .../node_modules/mongodb/lib/sessions.js.map | 1 + Url-Shortner/node_modules/mongodb/lib/sort.js | 97 + .../node_modules/mongodb/lib/sort.js.map | 1 + .../node_modules/mongodb/lib/transactions.js | 138 + .../mongodb/lib/transactions.js.map | 1 + .../node_modules/mongodb/lib/utils.js | 1064 ++ .../node_modules/mongodb/lib/utils.js.map | 1 + .../node_modules/mongodb/lib/write_concern.js | 86 + .../mongodb/lib/write_concern.js.map | 1 + .../node_modules/mongodb/mongodb.d.ts | 6752 +++++++++++++ .../node_modules/mongodb/package.json | 163 + .../node_modules/mongodb/src/admin.ts | 192 + Url-Shortner/node_modules/mongodb/src/bson.ts | 117 + .../node_modules/mongodb/src/bulk/common.ts | 1307 +++ .../node_modules/mongodb/src/bulk/ordered.ts | 83 + .../mongodb/src/bulk/unordered.ts | 116 + .../node_modules/mongodb/src/change_stream.ts | 973 ++ .../mongodb/src/cmap/auth/auth_provider.ts | 73 + .../mongodb/src/cmap/auth/gssapi.ts | 204 + .../src/cmap/auth/mongo_credentials.ts | 278 + .../mongodb/src/cmap/auth/mongocr.ts | 42 + .../mongodb/src/cmap/auth/mongodb_aws.ts | 253 + .../mongodb/src/cmap/auth/mongodb_oidc.ts | 149 + .../auth/mongodb_oidc/aws_service_workflow.ts | 29 + .../mongodb_oidc/azure_service_workflow.ts | 86 + .../auth/mongodb_oidc/azure_token_cache.ts | 51 + .../src/cmap/auth/mongodb_oidc/cache.ts | 63 + .../auth/mongodb_oidc/callback_lock_cache.ts | 114 + .../auth/mongodb_oidc/callback_workflow.ts | 296 + .../auth/mongodb_oidc/service_workflow.ts | 49 + .../auth/mongodb_oidc/token_entry_cache.ts | 77 + .../mongodb/src/cmap/auth/plain.ts | 25 + .../mongodb/src/cmap/auth/providers.ts | 24 + .../mongodb/src/cmap/auth/scram.ts | 354 + .../mongodb/src/cmap/auth/x509.ts | 47 + .../src/cmap/command_monitoring_events.ts | 316 + .../node_modules/mongodb/src/cmap/commands.ts | 712 ++ .../node_modules/mongodb/src/cmap/connect.ts | 503 + .../mongodb/src/cmap/connection.ts | 758 ++ .../mongodb/src/cmap/connection_pool.ts | 920 ++ .../src/cmap/connection_pool_events.ts | 268 + .../node_modules/mongodb/src/cmap/errors.ts | 75 + .../src/cmap/handshake/client_metadata.ts | 273 + .../mongodb/src/cmap/message_stream.ts | 234 + .../node_modules/mongodb/src/cmap/metrics.ts | 58 + .../mongodb/src/cmap/stream_description.ts | 76 + .../src/cmap/wire_protocol/compression.ts | 126 + .../src/cmap/wire_protocol/constants.ts | 13 + .../mongodb/src/cmap/wire_protocol/shared.ts | 53 + .../node_modules/mongodb/src/collection.ts | 1142 +++ .../mongodb/src/connection_string.ts | 1315 +++ .../node_modules/mongodb/src/constants.ts | 147 + .../mongodb/src/cursor/abstract_cursor.ts | 957 ++ .../mongodb/src/cursor/aggregation_cursor.ts | 208 + .../src/cursor/change_stream_cursor.ts | 194 + .../mongodb/src/cursor/find_cursor.ts | 456 + .../src/cursor/list_collections_cursor.ts | 52 + .../mongodb/src/cursor/list_indexes_cursor.ts | 41 + .../src/cursor/list_search_indexes_cursor.ts | 20 + .../mongodb/src/cursor/run_command_cursor.ts | 140 + Url-Shortner/node_modules/mongodb/src/db.ts | 558 ++ Url-Shortner/node_modules/mongodb/src/deps.ts | 413 + .../node_modules/mongodb/src/encrypter.ts | 131 + .../node_modules/mongodb/src/error.ts | 968 ++ .../node_modules/mongodb/src/explain.ts | 52 + .../mongodb/src/gridfs/download.ts | 474 + .../node_modules/mongodb/src/gridfs/index.ts | 213 + .../node_modules/mongodb/src/gridfs/upload.ts | 510 + .../node_modules/mongodb/src/index.ts | 508 + .../node_modules/mongodb/src/mongo_client.ts | 839 ++ .../node_modules/mongodb/src/mongo_logger.ts | 538 ++ .../node_modules/mongodb/src/mongo_types.ts | 575 ++ .../mongodb/src/operations/add_user.ts | 124 + .../mongodb/src/operations/aggregate.ts | 149 + .../mongodb/src/operations/bulk_write.ts | 62 + .../mongodb/src/operations/collections.ts | 50 + .../mongodb/src/operations/command.ts | 177 + .../src/operations/common_functions.ts | 105 + .../mongodb/src/operations/count.ts | 68 + .../mongodb/src/operations/count_documents.ts | 57 + .../src/operations/create_collection.ts | 217 + .../mongodb/src/operations/delete.ts | 182 + .../mongodb/src/operations/distinct.ts | 90 + .../mongodb/src/operations/drop.ts | 119 + .../operations/estimated_document_count.ts | 62 + .../mongodb/src/operations/eval.ts | 82 + .../src/operations/execute_operation.ts | 270 + .../mongodb/src/operations/find.ts | 271 + .../mongodb/src/operations/find_and_modify.ts | 303 + .../mongodb/src/operations/get_more.ts | 111 + .../mongodb/src/operations/indexes.ts | 526 + .../mongodb/src/operations/insert.ts | 158 + .../mongodb/src/operations/is_capped.ts | 44 + .../mongodb/src/operations/kill_cursors.ts | 62 + .../src/operations/list_collections.ts | 99 + .../mongodb/src/operations/list_databases.ts | 66 + .../mongodb/src/operations/operation.ts | 141 + .../src/operations/options_operation.ts | 45 + .../mongodb/src/operations/profiling_level.ts | 39 + .../mongodb/src/operations/remove_user.ts | 33 + .../mongodb/src/operations/rename.ts | 67 + .../mongodb/src/operations/run_command.ts | 73 + .../src/operations/search_indexes/create.ts | 54 + .../src/operations/search_indexes/drop.ts | 39 + .../src/operations/search_indexes/update.ts | 40 + .../src/operations/set_profiling_level.ts | 74 + .../mongodb/src/operations/stats.ts | 280 + .../mongodb/src/operations/update.ts | 314 + .../src/operations/validate_collection.ts | 59 + .../node_modules/mongodb/src/read_concern.ts | 88 + .../mongodb/src/read_preference.ts | 262 + .../node_modules/mongodb/src/sdam/common.ts | 79 + .../node_modules/mongodb/src/sdam/events.ts | 182 + .../node_modules/mongodb/src/sdam/monitor.ts | 595 ++ .../node_modules/mongodb/src/sdam/server.ts | 591 ++ .../mongodb/src/sdam/server_description.ts | 262 + .../mongodb/src/sdam/server_selection.ts | 324 + .../mongodb/src/sdam/srv_polling.ts | 142 + .../node_modules/mongodb/src/sdam/topology.ts | 994 ++ .../mongodb/src/sdam/topology_description.ts | 511 + .../node_modules/mongodb/src/sessions.ts | 1050 ++ Url-Shortner/node_modules/mongodb/src/sort.ts | 132 + .../node_modules/mongodb/src/transactions.ts | 188 + .../node_modules/mongodb/src/utils.ts | 1336 +++ .../node_modules/mongodb/src/write_concern.ts | 161 + .../node_modules/mongodb/tsconfig.json | 45 + .../node_modules/mongoose/.eslintrc.js | 235 + .../mongoose/.markdownlint-cli2.cjs | 69 + .../node_modules/mongoose/.mocharc.yml | 4 + Url-Shortner/node_modules/mongoose/LICENSE.md | 22 + Url-Shortner/node_modules/mongoose/README.md | 375 + .../node_modules/mongoose/SECURITY.md | 1 + Url-Shortner/node_modules/mongoose/browser.js | 8 + .../node_modules/mongoose/dist/browser.umd.js | 2 + Url-Shortner/node_modules/mongoose/index.js | 63 + Url-Shortner/node_modules/mongoose/lgtm.yml | 12 + .../node_modules/mongoose/lib/aggregate.js | 1194 +++ .../node_modules/mongoose/lib/browser.js | 132 + .../mongoose/lib/browserDocument.js | 101 + .../node_modules/mongoose/lib/cast.js | 410 + .../node_modules/mongoose/lib/cast/bigint.js | 31 + .../node_modules/mongoose/lib/cast/boolean.js | 32 + .../node_modules/mongoose/lib/cast/date.js | 41 + .../mongoose/lib/cast/decimal128.js | 39 + .../node_modules/mongoose/lib/cast/number.js | 42 + .../mongoose/lib/cast/objectid.js | 29 + .../node_modules/mongoose/lib/cast/string.js | 37 + .../node_modules/mongoose/lib/collection.js | 327 + .../node_modules/mongoose/lib/connection.js | 1466 +++ .../mongoose/lib/connectionstate.js | 26 + .../mongoose/lib/cursor/AggregationCursor.js | 386 + .../mongoose/lib/cursor/ChangeStream.js | 162 + .../mongoose/lib/cursor/QueryCursor.js | 581 ++ .../node_modules/mongoose/lib/document.js | 4755 +++++++++ .../mongoose/lib/document_provider.js | 30 + .../node_modules/mongoose/lib/driver.js | 15 + .../node_modules/mongoose/lib/drivers/SPEC.md | 4 + .../mongoose/lib/drivers/browser/binary.js | 14 + .../lib/drivers/browser/decimal128.js | 7 + .../mongoose/lib/drivers/browser/index.js | 12 + .../mongoose/lib/drivers/browser/objectid.js | 29 + .../drivers/node-mongodb-native/collection.js | 462 + .../drivers/node-mongodb-native/connection.js | 409 + .../lib/drivers/node-mongodb-native/index.js | 8 + .../lib/error/browserMissingSchema.js | 28 + .../mongoose/lib/error/bulkWriteError.js | 41 + .../node_modules/mongoose/lib/error/cast.js | 159 + .../lib/error/createCollectionsError.js | 26 + .../mongoose/lib/error/divergentArray.js | 38 + .../mongoose/lib/error/eachAsyncMultiError.js | 41 + .../node_modules/mongoose/lib/error/index.js | 227 + .../mongoose/lib/error/invalidSchemaOption.js | 30 + .../mongoose/lib/error/messages.js | 47 + .../mongoose/lib/error/missingSchema.js | 31 + .../mongoose/lib/error/mongooseError.js | 13 + .../mongoose/lib/error/notFound.js | 45 + .../mongoose/lib/error/objectExpected.js | 30 + .../mongoose/lib/error/objectParameter.js | 30 + .../mongoose/lib/error/overwriteModel.js | 30 + .../mongoose/lib/error/parallelSave.js | 30 + .../mongoose/lib/error/parallelValidate.js | 31 + .../mongoose/lib/error/serverSelection.js | 61 + .../mongoose/lib/error/setOptionError.js | 101 + .../node_modules/mongoose/lib/error/strict.js | 33 + .../mongoose/lib/error/strictPopulate.js | 29 + .../mongoose/lib/error/syncIndexes.js | 30 + .../mongoose/lib/error/validation.js | 103 + .../mongoose/lib/error/validator.js | 99 + .../mongoose/lib/error/version.js | 36 + .../aggregate/prepareDiscriminatorPipeline.js | 39 + .../aggregate/stringifyFunctionOperators.js | 50 + .../mongoose/lib/helpers/arrayDepth.js | 33 + .../mongoose/lib/helpers/clone.js | 180 + .../mongoose/lib/helpers/common.js | 127 + .../mongoose/lib/helpers/cursor/eachAsync.js | 225 + .../areDiscriminatorValuesEqual.js | 16 + ...checkEmbeddedDiscriminatorKeyProjection.js | 12 + .../helpers/discriminator/getConstructor.js | 26 + .../discriminator/getDiscriminatorByValue.js | 28 + .../getSchemaDiscriminatorByValue.js | 27 + .../discriminator/mergeDiscriminatorSchema.js | 76 + .../lib/helpers/document/applyDefaults.js | 126 + .../helpers/document/cleanModifiedSubpaths.js | 35 + .../mongoose/lib/helpers/document/compile.js | 238 + .../document/getDeepestSubdocumentForPath.js | 38 + .../document/getEmbeddedDiscriminatorPath.js | 53 + .../lib/helpers/document/handleSpreadDoc.js | 35 + .../node_modules/mongoose/lib/helpers/each.js | 25 + .../lib/helpers/error/combinePathErrors.js | 22 + .../mongoose/lib/helpers/firstKey.js | 8 + .../node_modules/mongoose/lib/helpers/get.js | 65 + .../lib/helpers/getConstructorName.js | 16 + .../lib/helpers/getDefaultBulkwriteResult.js | 27 + .../mongoose/lib/helpers/getFunctionName.js | 10 + .../mongoose/lib/helpers/immediate.js | 16 + .../helpers/indexes/applySchemaCollation.js | 13 + .../decorateDiscriminatorIndexOptions.js | 14 + .../lib/helpers/indexes/getRelatedIndexes.js | 59 + .../lib/helpers/indexes/isDefaultIdIndex.js | 18 + .../lib/helpers/indexes/isIndexEqual.js | 96 + .../lib/helpers/indexes/isTextIndex.js | 16 + .../mongoose/lib/helpers/isAsyncFunction.js | 9 + .../mongoose/lib/helpers/isBsonType.js | 16 + .../mongoose/lib/helpers/isMongooseObject.js | 22 + .../mongoose/lib/helpers/isObject.js | 16 + .../mongoose/lib/helpers/isPOJO.js | 12 + .../mongoose/lib/helpers/isPromise.js | 6 + .../mongoose/lib/helpers/isSimpleValidator.js | 22 + .../lib/helpers/model/applyDefaultsToPOJO.js | 52 + .../mongoose/lib/helpers/model/applyHooks.js | 149 + .../lib/helpers/model/applyMethods.js | 70 + .../lib/helpers/model/applyStaticHooks.js | 71 + .../lib/helpers/model/applyStatics.js | 13 + .../lib/helpers/model/castBulkWrite.js | 245 + .../lib/helpers/model/discriminator.js | 213 + .../lib/helpers/model/pushNestedArrayPaths.js | 15 + .../node_modules/mongoose/lib/helpers/once.js | 12 + .../mongoose/lib/helpers/parallelLimit.js | 55 + .../mongoose/lib/helpers/path/parentPaths.js | 18 + .../lib/helpers/path/setDottedPath.js | 33 + .../mongoose/lib/helpers/pluralize.js | 95 + .../lib/helpers/populate/SkipPopulateValue.js | 10 + .../populate/assignRawDocsToIdStructure.js | 125 + .../lib/helpers/populate/assignVals.js | 341 + .../populate/createPopulateQueryFilter.js | 97 + .../populate/getModelsMapForPopulate.js | 733 ++ .../lib/helpers/populate/getSchemaTypes.js | 229 + .../lib/helpers/populate/getVirtual.js | 72 + .../lib/helpers/populate/leanPopulateMap.js | 7 + .../lib/helpers/populate/lookupLocalFields.js | 40 + .../populate/markArraySubdocsPopulated.js | 49 + .../helpers/populate/modelNamesFromRefPath.js | 68 + .../populate/removeDeselectedForeignField.js | 31 + .../lib/helpers/populate/validateRef.js | 19 + .../mongoose/lib/helpers/printJestWarning.js | 21 + .../lib/helpers/processConnectionOptions.js | 65 + .../lib/helpers/projection/applyProjection.js | 77 + .../helpers/projection/hasIncludedChildren.js | 40 + .../projection/isDefiningProjection.js | 18 + .../lib/helpers/projection/isExclusive.js | 35 + .../lib/helpers/projection/isInclusive.js | 38 + .../lib/helpers/projection/isPathExcluded.js | 40 + .../projection/isPathSelectedInclusive.js | 28 + .../lib/helpers/projection/isSubpath.js | 14 + .../lib/helpers/projection/parseProjection.js | 33 + .../mongoose/lib/helpers/promiseOrCallback.js | 54 + .../lib/helpers/query/applyGlobalOption.js | 29 + .../lib/helpers/query/applyQueryMiddleware.js | 54 + .../mongoose/lib/helpers/query/cast$expr.js | 282 + .../lib/helpers/query/castFilterPath.js | 55 + .../mongoose/lib/helpers/query/castUpdate.js | 583 ++ .../lib/helpers/query/completeMany.js | 36 + .../query/getEmbeddedDiscriminatorPath.js | 94 + .../lib/helpers/query/handleImmutable.js | 28 + .../query/handleReadPreferenceAliases.js | 23 + .../lib/helpers/query/hasDollarKeys.js | 23 + .../mongoose/lib/helpers/query/isOperator.js | 14 + .../lib/helpers/query/sanitizeFilter.js | 38 + .../lib/helpers/query/sanitizeProjection.js | 14 + .../helpers/query/selectPopulatedFields.js | 62 + .../mongoose/lib/helpers/query/trusted.js | 13 + .../mongoose/lib/helpers/query/validOps.js | 22 + .../mongoose/lib/helpers/schema/addAutoId.js | 7 + .../lib/helpers/schema/applyBuiltinPlugins.js | 12 + .../lib/helpers/schema/applyPlugins.js | 55 + .../lib/helpers/schema/applyWriteConcern.js | 33 + .../schema/cleanPositionalOperators.js | 12 + .../mongoose/lib/helpers/schema/getIndexes.js | 172 + .../helpers/schema/getKeysInSchemaOrder.js | 28 + .../mongoose/lib/helpers/schema/getPath.js | 37 + .../schema/getSubdocumentStrictValue.js | 32 + .../lib/helpers/schema/handleIdOption.js | 20 + .../helpers/schema/handleTimestampOption.js | 24 + .../mongoose/lib/helpers/schema/idGetter.js | 46 + .../mongoose/lib/helpers/schema/merge.js | 36 + .../lib/helpers/schematype/handleImmutable.js | 50 + .../lib/helpers/setDefaultsOnInsert.js | 132 + .../mongoose/lib/helpers/specialProperties.js | 3 + .../mongoose/lib/helpers/symbols.js | 20 + .../mongoose/lib/helpers/timers.js | 3 + .../timestamps/setDocumentTimestamps.js | 26 + .../lib/helpers/timestamps/setupTimestamps.js | 110 + .../lib/helpers/topology/allServersUnknown.js | 12 + .../mongoose/lib/helpers/topology/isAtlas.js | 31 + .../lib/helpers/topology/isSSLError.js | 16 + .../update/applyTimestampsToChildren.js | 193 + .../helpers/update/applyTimestampsToUpdate.js | 118 + .../lib/helpers/update/castArrayFilters.js | 109 + .../lib/helpers/update/modifiedPaths.js | 33 + .../helpers/update/moveImmutableProperties.js | 53 + .../update/removeUnusedArrayFilters.js | 32 + .../update/updatedPathsByArrayFilter.js | 27 + .../mongoose/lib/helpers/updateValidators.js | 249 + .../node_modules/mongoose/lib/index.js | 1278 +++ .../node_modules/mongoose/lib/internal.js | 46 + .../node_modules/mongoose/lib/model.js | 4907 ++++++++++ .../node_modules/mongoose/lib/options.js | 15 + .../mongoose/lib/options/PopulateOptions.js | 36 + .../lib/options/SchemaArrayOptions.js | 78 + .../lib/options/SchemaBufferOptions.js | 38 + .../mongoose/lib/options/SchemaDateOptions.js | 71 + .../lib/options/SchemaDocumentArrayOptions.js | 68 + .../mongoose/lib/options/SchemaMapOptions.js | 43 + .../lib/options/SchemaNumberOptions.js | 101 + .../lib/options/SchemaObjectIdOptions.js | 64 + .../lib/options/SchemaStringOptions.js | 138 + .../lib/options/SchemaSubdocumentOptions.js | 42 + .../mongoose/lib/options/SchemaTypeOptions.js | 244 + .../mongoose/lib/options/VirtualOptions.js | 164 + .../mongoose/lib/options/propertyOptions.js | 8 + .../mongoose/lib/options/saveOptions.js | 14 + .../mongoose/lib/plugins/index.js | 7 + .../mongoose/lib/plugins/removeSubdocs.js | 35 + .../mongoose/lib/plugins/saveSubdocs.js | 66 + .../mongoose/lib/plugins/sharding.js | 83 + .../mongoose/lib/plugins/trackTransaction.js | 92 + .../lib/plugins/validateBeforeSave.js | 51 + .../node_modules/mongoose/lib/query.js | 5531 +++++++++++ .../node_modules/mongoose/lib/queryhelpers.js | 401 + .../node_modules/mongoose/lib/schema.js | 2770 ++++++ .../lib/schema/DocumentArrayElement.js | 100 + .../mongoose/lib/schema/SubdocumentPath.js | 391 + .../node_modules/mongoose/lib/schema/array.js | 686 ++ .../mongoose/lib/schema/bigint.js | 240 + .../mongoose/lib/schema/boolean.js | 292 + .../mongoose/lib/schema/buffer.js | 290 + .../node_modules/mongoose/lib/schema/date.js | 426 + .../mongoose/lib/schema/decimal128.js | 229 + .../mongoose/lib/schema/documentarray.js | 626 ++ .../node_modules/mongoose/lib/schema/index.js | 28 + .../node_modules/mongoose/lib/schema/map.js | 84 + .../node_modules/mongoose/lib/schema/mixed.js | 131 + .../mongoose/lib/schema/number.js | 440 + .../mongoose/lib/schema/objectid.js | 297 + .../mongoose/lib/schema/operators/bitwise.js | 38 + .../mongoose/lib/schema/operators/exists.js | 12 + .../lib/schema/operators/geospatial.js | 107 + .../mongoose/lib/schema/operators/helpers.js | 32 + .../mongoose/lib/schema/operators/text.js | 39 + .../mongoose/lib/schema/operators/type.js | 20 + .../mongoose/lib/schema/string.js | 697 ++ .../mongoose/lib/schema/symbols.js | 5 + .../node_modules/mongoose/lib/schema/uuid.js | 356 + .../node_modules/mongoose/lib/schematype.js | 1708 ++++ .../node_modules/mongoose/lib/statemachine.js | 207 + .../mongoose/lib/types/ArraySubdocument.js | 197 + .../mongoose/lib/types/DocumentArray/index.js | 113 + .../DocumentArray/isMongooseDocumentArray.js | 5 + .../lib/types/DocumentArray/methods/index.js | 383 + .../mongoose/lib/types/array/index.js | 119 + .../lib/types/array/isMongooseArray.js | 5 + .../mongoose/lib/types/array/methods/index.js | 1026 ++ .../node_modules/mongoose/lib/types/buffer.js | 277 + .../mongoose/lib/types/decimal128.js | 13 + .../node_modules/mongoose/lib/types/index.js | 22 + .../node_modules/mongoose/lib/types/map.js | 354 + .../mongoose/lib/types/objectid.js | 41 + .../mongoose/lib/types/subdocument.js | 436 + .../node_modules/mongoose/lib/types/uuid.js | 13 + .../node_modules/mongoose/lib/utils.js | 1016 ++ .../node_modules/mongoose/lib/validoptions.js | 37 + .../node_modules/mongoose/lib/virtualtype.js | 175 + .../mongoose/node_modules/ms/index.js | 162 + .../mongoose/node_modules/ms/license.md | 21 + .../mongoose/node_modules/ms/package.json | 38 + .../mongoose/node_modules/ms/readme.md | 59 + .../node_modules/mongoose/package.json | 163 + .../mongoose/scripts/build-browser.js | 18 + .../mongoose/scripts/create-tarball.js | 7 + .../mongoose/scripts/generateSearch.js | 159 + .../mongoose/scripts/loadSponsorData.js | 115 + .../mongoose/scripts/tsc-diagnostics-check.js | 15 + .../node_modules/mongoose/tools/auth.js | 31 + .../node_modules/mongoose/tools/repl.js | 35 + .../node_modules/mongoose/tools/sharded.js | 46 + .../node_modules/mongoose/tsconfig.json | 9 + .../mongoose/types/aggregate.d.ts | 180 + .../mongoose/types/augmentations.d.ts | 9 + .../node_modules/mongoose/types/callback.d.ts | 8 + .../mongoose/types/collection.d.ts | 44 + .../mongoose/types/connection.d.ts | 234 + .../node_modules/mongoose/types/cursor.d.ts | 58 + .../node_modules/mongoose/types/document.d.ts | 256 + .../node_modules/mongoose/types/error.d.ts | 134 + .../mongoose/types/expressions.d.ts | 2936 ++++++ .../node_modules/mongoose/types/helpers.d.ts | 32 + .../node_modules/mongoose/types/index.d.ts | 677 ++ .../node_modules/mongoose/types/indexes.d.ts | 89 + .../mongoose/types/inferschematype.d.ts | 230 + .../mongoose/types/middlewares.d.ts | 47 + .../node_modules/mongoose/types/models.d.ts | 705 ++ .../mongoose/types/mongooseoptions.d.ts | 212 + .../mongoose/types/pipelinestage.d.ts | 312 + .../node_modules/mongoose/types/populate.d.ts | 45 + .../node_modules/mongoose/types/query.d.ts | 772 ++ .../mongoose/types/schemaoptions.d.ts | 261 + .../mongoose/types/schematypes.d.ts | 490 + .../node_modules/mongoose/types/session.d.ts | 32 + .../node_modules/mongoose/types/types.d.ts | 103 + .../node_modules/mongoose/types/utility.d.ts | 43 + .../mongoose/types/validation.d.ts | 33 + .../node_modules/mongoose/types/virtuals.d.ts | 14 + Url-Shortner/node_modules/mpath/.travis.yml | 9 + Url-Shortner/node_modules/mpath/History.md | 88 + Url-Shortner/node_modules/mpath/LICENSE | 22 + Url-Shortner/node_modules/mpath/README.md | 278 + Url-Shortner/node_modules/mpath/SECURITY.md | 5 + Url-Shortner/node_modules/mpath/index.js | 3 + Url-Shortner/node_modules/mpath/lib/index.js | 336 + .../node_modules/mpath/lib/stringToParts.js | 48 + Url-Shortner/node_modules/mpath/package.json | 144 + .../node_modules/mpath/test/.eslintrc.yml | 4 + Url-Shortner/node_modules/mpath/test/index.js | 1879 ++++ .../node_modules/mpath/test/stringToParts.js | 30 + .../mquery/.github/ISSUE_TEMPLATE.md | 11 + .../mquery/.github/PULL_REQUEST_TEMPLATE.md | 9 + Url-Shortner/node_modules/mquery/History.md | 384 + Url-Shortner/node_modules/mquery/LICENSE | 22 + Url-Shortner/node_modules/mquery/README.md | 1247 +++ Url-Shortner/node_modules/mquery/SECURITY.md | 1 + .../mquery/lib/collection/collection.js | 45 + .../mquery/lib/collection/index.js | 13 + .../mquery/lib/collection/node.js | 114 + Url-Shortner/node_modules/mquery/lib/env.js | 22 + .../node_modules/mquery/lib/mquery.js | 2705 ++++++ .../node_modules/mquery/lib/permissions.js | 78 + Url-Shortner/node_modules/mquery/lib/utils.js | 297 + .../mquery/node_modules/debug/LICENSE | 20 + .../mquery/node_modules/debug/README.md | 481 + .../mquery/node_modules/debug/package.json | 59 + .../mquery/node_modules/debug/src/browser.js | 269 + .../mquery/node_modules/debug/src/common.js | 274 + .../mquery/node_modules/debug/src/index.js | 10 + .../mquery/node_modules/debug/src/node.js | 263 + .../mquery/node_modules/ms/index.js | 162 + .../mquery/node_modules/ms/license.md | 21 + .../mquery/node_modules/ms/package.json | 37 + .../mquery/node_modules/ms/readme.md | 60 + Url-Shortner/node_modules/mquery/package.json | 38 + Url-Shortner/node_modules/ms/index.js | 152 + Url-Shortner/node_modules/ms/license.md | 21 + Url-Shortner/node_modules/ms/package.json | 37 + Url-Shortner/node_modules/ms/readme.md | 51 + Url-Shortner/node_modules/nanoid/LICENSE | 20 + Url-Shortner/node_modules/nanoid/README.md | 36 + .../node_modules/nanoid/bin/nanoid.js | 46 + .../node_modules/nanoid/index.browser.js | 33 + Url-Shortner/node_modules/nanoid/index.d.ts | 91 + Url-Shortner/node_modules/nanoid/index.js | 46 + Url-Shortner/node_modules/nanoid/nanoid.js | 1 + .../node_modules/nanoid/non-secure/index.d.ts | 33 + .../node_modules/nanoid/non-secure/index.js | 20 + Url-Shortner/node_modules/nanoid/package.json | 38 + .../node_modules/nanoid/url-alphabet/index.js | 2 + .../node_modules/negotiator/HISTORY.md | 108 + Url-Shortner/node_modules/negotiator/LICENSE | 24 + .../node_modules/negotiator/README.md | 203 + Url-Shortner/node_modules/negotiator/index.js | 82 + .../node_modules/negotiator/lib/charset.js | 169 + .../node_modules/negotiator/lib/encoding.js | 184 + .../node_modules/negotiator/lib/language.js | 179 + .../node_modules/negotiator/lib/mediaType.js | 294 + .../node_modules/negotiator/package.json | 42 + .../node_modules/object-inspect/.eslintrc | 53 + .../object-inspect/.github/FUNDING.yml | 12 + .../node_modules/object-inspect/.nycrc | 13 + .../node_modules/object-inspect/CHANGELOG.md | 370 + .../node_modules/object-inspect/LICENSE | 21 + .../object-inspect/example/all.js | 23 + .../object-inspect/example/circular.js | 6 + .../node_modules/object-inspect/example/fn.js | 5 + .../object-inspect/example/inspect.js | 10 + .../node_modules/object-inspect/index.js | 516 + .../object-inspect/package-support.json | 20 + .../node_modules/object-inspect/package.json | 97 + .../object-inspect/readme.markdown | 86 + .../object-inspect/test-core-js.js | 26 + .../object-inspect/test/bigint.js | 58 + .../object-inspect/test/browser/dom.js | 15 + .../object-inspect/test/circular.js | 16 + .../node_modules/object-inspect/test/deep.js | 12 + .../object-inspect/test/element.js | 53 + .../node_modules/object-inspect/test/err.js | 48 + .../node_modules/object-inspect/test/fakes.js | 29 + .../node_modules/object-inspect/test/fn.js | 76 + .../node_modules/object-inspect/test/has.js | 15 + .../node_modules/object-inspect/test/holes.js | 15 + .../object-inspect/test/indent-option.js | 271 + .../object-inspect/test/inspect.js | 139 + .../object-inspect/test/lowbyte.js | 12 + .../object-inspect/test/number.js | 58 + .../object-inspect/test/quoteStyle.js | 17 + .../object-inspect/test/toStringTag.js | 40 + .../node_modules/object-inspect/test/undef.js | 12 + .../object-inspect/test/values.js | 211 + .../object-inspect/util.inspect.js | 1 + .../node_modules/on-finished/HISTORY.md | 98 + Url-Shortner/node_modules/on-finished/LICENSE | 23 + .../node_modules/on-finished/README.md | 162 + .../node_modules/on-finished/index.js | 234 + .../node_modules/on-finished/package.json | 39 + Url-Shortner/node_modules/parseurl/HISTORY.md | 58 + Url-Shortner/node_modules/parseurl/LICENSE | 24 + Url-Shortner/node_modules/parseurl/README.md | 133 + Url-Shortner/node_modules/parseurl/index.js | 158 + .../node_modules/parseurl/package.json | 40 + .../node_modules/path-to-regexp/History.md | 36 + .../node_modules/path-to-regexp/LICENSE | 21 + .../node_modules/path-to-regexp/Readme.md | 35 + .../node_modules/path-to-regexp/index.js | 129 + .../node_modules/path-to-regexp/package.json | 30 + .../node_modules/proxy-addr/HISTORY.md | 161 + Url-Shortner/node_modules/proxy-addr/LICENSE | 22 + .../node_modules/proxy-addr/README.md | 139 + Url-Shortner/node_modules/proxy-addr/index.js | 327 + .../node_modules/proxy-addr/package.json | 47 + .../node_modules/punycode/LICENSE-MIT.txt | 20 + Url-Shortner/node_modules/punycode/README.md | 126 + .../node_modules/punycode/package.json | 58 + .../node_modules/punycode/punycode.es6.js | 444 + .../node_modules/punycode/punycode.js | 443 + Url-Shortner/node_modules/qs/.editorconfig | 43 + Url-Shortner/node_modules/qs/.eslintrc | 38 + .../node_modules/qs/.github/FUNDING.yml | 12 + Url-Shortner/node_modules/qs/.nycrc | 13 + Url-Shortner/node_modules/qs/CHANGELOG.md | 546 ++ Url-Shortner/node_modules/qs/LICENSE.md | 29 + Url-Shortner/node_modules/qs/README.md | 625 ++ Url-Shortner/node_modules/qs/dist/qs.js | 2054 ++++ Url-Shortner/node_modules/qs/lib/formats.js | 23 + Url-Shortner/node_modules/qs/lib/index.js | 11 + Url-Shortner/node_modules/qs/lib/parse.js | 263 + Url-Shortner/node_modules/qs/lib/stringify.js | 326 + Url-Shortner/node_modules/qs/lib/utils.js | 252 + Url-Shortner/node_modules/qs/package.json | 77 + Url-Shortner/node_modules/qs/test/parse.js | 855 ++ .../node_modules/qs/test/stringify.js | 909 ++ Url-Shortner/node_modules/qs/test/utils.js | 136 + .../node_modules/range-parser/HISTORY.md | 56 + .../node_modules/range-parser/LICENSE | 23 + .../node_modules/range-parser/README.md | 84 + .../node_modules/range-parser/index.js | 162 + .../node_modules/range-parser/package.json | 44 + Url-Shortner/node_modules/raw-body/HISTORY.md | 303 + Url-Shortner/node_modules/raw-body/LICENSE | 22 + Url-Shortner/node_modules/raw-body/README.md | 223 + .../node_modules/raw-body/SECURITY.md | 24 + Url-Shortner/node_modules/raw-body/index.d.ts | 87 + Url-Shortner/node_modules/raw-body/index.js | 329 + .../node_modules/raw-body/package.json | 49 + Url-Shortner/node_modules/safe-buffer/LICENSE | 21 + .../node_modules/safe-buffer/README.md | 584 ++ .../node_modules/safe-buffer/index.d.ts | 187 + .../node_modules/safe-buffer/index.js | 65 + .../node_modules/safe-buffer/package.json | 51 + .../node_modules/safer-buffer/LICENSE | 21 + .../safer-buffer/Porting-Buffer.md | 268 + .../node_modules/safer-buffer/Readme.md | 156 + .../node_modules/safer-buffer/dangerous.js | 58 + .../node_modules/safer-buffer/package.json | 34 + .../node_modules/safer-buffer/safer.js | 77 + .../node_modules/safer-buffer/tests.js | 406 + Url-Shortner/node_modules/send/HISTORY.md | 521 + Url-Shortner/node_modules/send/LICENSE | 23 + Url-Shortner/node_modules/send/README.md | 327 + Url-Shortner/node_modules/send/SECURITY.md | 24 + Url-Shortner/node_modules/send/index.js | 1143 +++ .../send/node_modules/ms/index.js | 162 + .../send/node_modules/ms/license.md | 21 + .../send/node_modules/ms/package.json | 38 + .../send/node_modules/ms/readme.md | 59 + Url-Shortner/node_modules/send/package.json | 62 + .../node_modules/serve-static/HISTORY.md | 471 + .../node_modules/serve-static/LICENSE | 25 + .../node_modules/serve-static/README.md | 257 + .../node_modules/serve-static/index.js | 210 + .../node_modules/serve-static/package.json | 42 + .../node_modules/setprototypeof/LICENSE | 13 + .../node_modules/setprototypeof/README.md | 31 + .../node_modules/setprototypeof/index.d.ts | 2 + .../node_modules/setprototypeof/index.js | 17 + .../node_modules/setprototypeof/package.json | 38 + .../node_modules/setprototypeof/test/index.js | 24 + .../node_modules/shortid/CHANGELOG.md | 32 + Url-Shortner/node_modules/shortid/LICENSE | 34 + Url-Shortner/node_modules/shortid/README.md | 252 + Url-Shortner/node_modules/shortid/index.js | 2 + .../node_modules/shortid/lib/alphabet.js | 103 + .../node_modules/shortid/lib/build.js | 46 + .../node_modules/shortid/lib/generate.js | 21 + .../node_modules/shortid/lib/index.js | 62 + .../node_modules/shortid/lib/is-valid.js | 15 + .../shortid/lib/random/random-byte-browser.js | 21 + .../shortid/lib/random/random-byte.js | 1 + .../shortid/lib/random/random-from-seed.js | 25 + .../lib/util/cluster-worker-id-browser.js | 3 + .../shortid/lib/util/cluster-worker-id.js | 9 + .../shortid/node_modules/nanoid/CHANGELOG.md | 156 + .../shortid/node_modules/nanoid/LICENSE | 20 + .../shortid/node_modules/nanoid/README.md | 397 + .../nanoid/async/format.browser.js | 43 + .../node_modules/nanoid/async/format.js | 72 + .../node_modules/nanoid/async/generate.js | 24 + .../nanoid/async/index.browser.js | 37 + .../node_modules/nanoid/async/index.js | 37 + .../nanoid/async/random.browser.js | 8 + .../node_modules/nanoid/async/random.js | 31 + .../node_modules/nanoid/async/random.rn.js | 14 + .../node_modules/nanoid/format.browser.js | 40 + .../shortid/node_modules/nanoid/format.js | 67 + .../shortid/node_modules/nanoid/generate.js | 22 + .../node_modules/nanoid/index.browser.js | 54 + .../shortid/node_modules/nanoid/index.js | 34 + .../nanoid/non-secure/generate.js | 26 + .../node_modules/nanoid/non-secure/index.js | 42 + .../shortid/node_modules/nanoid/package.json | 33 + .../node_modules/nanoid/random.browser.js | 5 + .../shortid/node_modules/nanoid/random.js | 19 + .../shortid/node_modules/nanoid/url.js | 27 + .../node_modules/shortid/package.json | 27 + .../node_modules/side-channel/.eslintignore | 1 + .../node_modules/side-channel/.eslintrc | 11 + .../side-channel/.github/FUNDING.yml | 12 + Url-Shortner/node_modules/side-channel/.nycrc | 13 + .../node_modules/side-channel/CHANGELOG.md | 65 + .../node_modules/side-channel/LICENSE | 21 + .../node_modules/side-channel/README.md | 2 + .../node_modules/side-channel/index.js | 124 + .../node_modules/side-channel/package.json | 67 + .../node_modules/side-channel/test/index.js | 78 + .../node_modules/sift/MIT-LICENSE.txt | 20 + Url-Shortner/node_modules/sift/README.md | 465 + Url-Shortner/node_modules/sift/es/index.js | 626 ++ .../node_modules/sift/es/index.js.map | 1 + Url-Shortner/node_modules/sift/es5m/index.js | 729 ++ .../node_modules/sift/es5m/index.js.map | 1 + Url-Shortner/node_modules/sift/index.d.ts | 4 + Url-Shortner/node_modules/sift/index.js | 4 + Url-Shortner/node_modules/sift/lib/core.d.ts | 120 + Url-Shortner/node_modules/sift/lib/index.d.ts | 6 + Url-Shortner/node_modules/sift/lib/index.js | 766 ++ .../node_modules/sift/lib/index.js.map | 1 + .../node_modules/sift/lib/operations.d.ts | 88 + Url-Shortner/node_modules/sift/lib/utils.d.ts | 9 + Url-Shortner/node_modules/sift/package.json | 62 + .../node_modules/sift/sift.csp.min.js | 763 ++ .../node_modules/sift/sift.csp.min.js.map | 1 + Url-Shortner/node_modules/sift/sift.min.js | 16 + .../node_modules/sift/sift.min.js.map | 1 + Url-Shortner/node_modules/sift/src/core.d.ts | 120 + Url-Shortner/node_modules/sift/src/core.js | 267 + .../node_modules/sift/src/core.js.map | 1 + Url-Shortner/node_modules/sift/src/core.ts | 481 + Url-Shortner/node_modules/sift/src/index.d.ts | 6 + Url-Shortner/node_modules/sift/src/index.js | 38 + .../node_modules/sift/src/index.js.map | 1 + Url-Shortner/node_modules/sift/src/index.ts | 54 + .../node_modules/sift/src/operations.d.ts | 88 + .../node_modules/sift/src/operations.js | 297 + .../node_modules/sift/src/operations.js.map | 1 + .../node_modules/sift/src/operations.ts | 411 + Url-Shortner/node_modules/sift/src/utils.d.ts | 9 + Url-Shortner/node_modules/sift/src/utils.js | 70 + .../node_modules/sift/src/utils.js.map | 1 + Url-Shortner/node_modules/sift/src/utils.ts | 68 + .../smart-buffer/.prettierrc.yaml | 5 + .../node_modules/smart-buffer/.travis.yml | 13 + .../node_modules/smart-buffer/LICENSE | 20 + .../node_modules/smart-buffer/README.md | 633 ++ .../smart-buffer/build/smartbuffer.js | 1233 +++ .../smart-buffer/build/smartbuffer.js.map | 1 + .../node_modules/smart-buffer/build/utils.js | 108 + .../smart-buffer/build/utils.js.map | 1 + .../smart-buffer/docs/CHANGELOG.md | 70 + .../smart-buffer/docs/README_v3.md | 367 + .../node_modules/smart-buffer/docs/ROADMAP.md | 0 .../node_modules/smart-buffer/package.json | 79 + .../smart-buffer/typings/smartbuffer.d.ts | 755 ++ .../smart-buffer/typings/utils.d.ts | 66 + Url-Shortner/node_modules/socks/.eslintrc.cjs | 11 + .../node_modules/socks/.prettierrc.yaml | 7 + Url-Shortner/node_modules/socks/LICENSE | 20 + Url-Shortner/node_modules/socks/README.md | 686 ++ .../socks/build/client/socksclient.js | 793 ++ .../socks/build/client/socksclient.js.map | 1 + .../socks/build/common/constants.js | 114 + .../socks/build/common/constants.js.map | 1 + .../socks/build/common/helpers.js | 128 + .../socks/build/common/helpers.js.map | 1 + .../socks/build/common/receivebuffer.js | 43 + .../socks/build/common/receivebuffer.js.map | 1 + .../node_modules/socks/build/common/util.js | 25 + .../socks/build/common/util.js.map | 1 + .../node_modules/socks/build/index.js | 18 + .../node_modules/socks/build/index.js.map | 1 + .../node_modules/socks/docs/examples/index.md | 17 + .../examples/javascript/associateExample.md | 90 + .../docs/examples/javascript/bindExample.md | 83 + .../examples/javascript/connectExample.md | 258 + .../examples/typescript/associateExample.md | 93 + .../docs/examples/typescript/bindExample.md | 86 + .../examples/typescript/connectExample.md | 265 + Url-Shortner/node_modules/socks/docs/index.md | 5 + .../socks/docs/migratingFromV1.md | 86 + Url-Shortner/node_modules/socks/package.json | 58 + .../socks/typings/client/socksclient.d.ts | 162 + .../socks/typings/common/constants.d.ts | 152 + .../socks/typings/common/helpers.d.ts | 13 + .../socks/typings/common/receivebuffer.d.ts | 12 + .../socks/typings/common/util.d.ts | 17 + .../node_modules/socks/typings/index.d.ts | 1 + .../node_modules/sparse-bitfield/.npmignore | 1 + .../node_modules/sparse-bitfield/.travis.yml | 6 + .../node_modules/sparse-bitfield/LICENSE | 21 + .../node_modules/sparse-bitfield/README.md | 62 + .../node_modules/sparse-bitfield/index.js | 95 + .../node_modules/sparse-bitfield/package.json | 27 + .../node_modules/sparse-bitfield/test.js | 79 + Url-Shortner/node_modules/statuses/HISTORY.md | 82 + Url-Shortner/node_modules/statuses/LICENSE | 23 + Url-Shortner/node_modules/statuses/README.md | 136 + Url-Shortner/node_modules/statuses/codes.json | 65 + Url-Shortner/node_modules/statuses/index.js | 146 + .../node_modules/statuses/package.json | 49 + .../node_modules/supports-color/browser.js | 5 + .../node_modules/supports-color/index.js | 135 + .../node_modules/supports-color/license | 9 + .../node_modules/supports-color/package.json | 53 + .../node_modules/supports-color/readme.md | 76 + .../node_modules/toidentifier/HISTORY.md | 9 + .../node_modules/toidentifier/LICENSE | 21 + .../node_modules/toidentifier/README.md | 61 + .../node_modules/toidentifier/index.js | 32 + .../node_modules/toidentifier/package.json | 38 + Url-Shortner/node_modules/tr46/LICENSE.md | 21 + Url-Shortner/node_modules/tr46/README.md | 78 + Url-Shortner/node_modules/tr46/index.js | 298 + .../node_modules/tr46/lib/mappingTable.json | 1 + Url-Shortner/node_modules/tr46/lib/regexes.js | 29 + .../node_modules/tr46/lib/statusMapping.js | 11 + Url-Shortner/node_modules/tr46/package.json | 47 + Url-Shortner/node_modules/type-is/HISTORY.md | 259 + Url-Shortner/node_modules/type-is/LICENSE | 23 + Url-Shortner/node_modules/type-is/README.md | 170 + Url-Shortner/node_modules/type-is/index.js | 266 + .../node_modules/type-is/package.json | 45 + Url-Shortner/node_modules/unpipe/HISTORY.md | 4 + Url-Shortner/node_modules/unpipe/LICENSE | 22 + Url-Shortner/node_modules/unpipe/README.md | 43 + Url-Shortner/node_modules/unpipe/index.js | 69 + Url-Shortner/node_modules/unpipe/package.json | 27 + .../node_modules/utils-merge/.npmignore | 9 + Url-Shortner/node_modules/utils-merge/LICENSE | 20 + .../node_modules/utils-merge/README.md | 34 + .../node_modules/utils-merge/index.js | 23 + .../node_modules/utils-merge/package.json | 40 + Url-Shortner/node_modules/uuid/CHANGELOG.md | 274 + .../node_modules/uuid/CONTRIBUTING.md | 18 + Url-Shortner/node_modules/uuid/LICENSE.md | 9 + Url-Shortner/node_modules/uuid/README.md | 466 + Url-Shortner/node_modules/uuid/dist/bin/uuid | 2 + .../uuid/dist/commonjs-browser/index.js | 79 + .../uuid/dist/commonjs-browser/md5.js | 223 + .../uuid/dist/commonjs-browser/native.js | 11 + .../uuid/dist/commonjs-browser/nil.js | 8 + .../uuid/dist/commonjs-browser/parse.js | 45 + .../uuid/dist/commonjs-browser/regex.js | 8 + .../uuid/dist/commonjs-browser/rng.js | 25 + .../uuid/dist/commonjs-browser/sha1.js | 104 + .../uuid/dist/commonjs-browser/stringify.js | 44 + .../uuid/dist/commonjs-browser/v1.js | 107 + .../uuid/dist/commonjs-browser/v3.js | 16 + .../uuid/dist/commonjs-browser/v35.js | 80 + .../uuid/dist/commonjs-browser/v4.js | 43 + .../uuid/dist/commonjs-browser/v5.js | 16 + .../uuid/dist/commonjs-browser/validate.js | 17 + .../uuid/dist/commonjs-browser/version.js | 21 + .../uuid/dist/esm-browser/index.js | 9 + .../node_modules/uuid/dist/esm-browser/md5.js | 215 + .../uuid/dist/esm-browser/native.js | 4 + .../node_modules/uuid/dist/esm-browser/nil.js | 1 + .../uuid/dist/esm-browser/parse.js | 35 + .../uuid/dist/esm-browser/regex.js | 1 + .../node_modules/uuid/dist/esm-browser/rng.js | 18 + .../uuid/dist/esm-browser/sha1.js | 96 + .../uuid/dist/esm-browser/stringify.js | 33 + .../node_modules/uuid/dist/esm-browser/v1.js | 95 + .../node_modules/uuid/dist/esm-browser/v3.js | 4 + .../node_modules/uuid/dist/esm-browser/v35.js | 66 + .../node_modules/uuid/dist/esm-browser/v4.js | 29 + .../node_modules/uuid/dist/esm-browser/v5.js | 4 + .../uuid/dist/esm-browser/validate.js | 7 + .../uuid/dist/esm-browser/version.js | 11 + .../node_modules/uuid/dist/esm-node/index.js | 9 + .../node_modules/uuid/dist/esm-node/md5.js | 13 + .../node_modules/uuid/dist/esm-node/native.js | 4 + .../node_modules/uuid/dist/esm-node/nil.js | 1 + .../node_modules/uuid/dist/esm-node/parse.js | 35 + .../node_modules/uuid/dist/esm-node/regex.js | 1 + .../node_modules/uuid/dist/esm-node/rng.js | 12 + .../node_modules/uuid/dist/esm-node/sha1.js | 13 + .../uuid/dist/esm-node/stringify.js | 33 + .../node_modules/uuid/dist/esm-node/v1.js | 95 + .../node_modules/uuid/dist/esm-node/v3.js | 4 + .../node_modules/uuid/dist/esm-node/v35.js | 66 + .../node_modules/uuid/dist/esm-node/v4.js | 29 + .../node_modules/uuid/dist/esm-node/v5.js | 4 + .../uuid/dist/esm-node/validate.js | 7 + .../uuid/dist/esm-node/version.js | 11 + Url-Shortner/node_modules/uuid/dist/index.js | 79 + .../node_modules/uuid/dist/md5-browser.js | 223 + Url-Shortner/node_modules/uuid/dist/md5.js | 23 + .../node_modules/uuid/dist/native-browser.js | 11 + Url-Shortner/node_modules/uuid/dist/native.js | 15 + Url-Shortner/node_modules/uuid/dist/nil.js | 8 + Url-Shortner/node_modules/uuid/dist/parse.js | 45 + Url-Shortner/node_modules/uuid/dist/regex.js | 8 + .../node_modules/uuid/dist/rng-browser.js | 25 + Url-Shortner/node_modules/uuid/dist/rng.js | 24 + .../node_modules/uuid/dist/sha1-browser.js | 104 + Url-Shortner/node_modules/uuid/dist/sha1.js | 23 + .../node_modules/uuid/dist/stringify.js | 44 + .../node_modules/uuid/dist/uuid-bin.js | 85 + Url-Shortner/node_modules/uuid/dist/v1.js | 107 + Url-Shortner/node_modules/uuid/dist/v3.js | 16 + Url-Shortner/node_modules/uuid/dist/v35.js | 80 + Url-Shortner/node_modules/uuid/dist/v4.js | 43 + Url-Shortner/node_modules/uuid/dist/v5.js | 16 + .../node_modules/uuid/dist/validate.js | 17 + .../node_modules/uuid/dist/version.js | 21 + Url-Shortner/node_modules/uuid/package.json | 135 + Url-Shortner/node_modules/uuid/wrapper.mjs | 10 + Url-Shortner/node_modules/vary/HISTORY.md | 39 + Url-Shortner/node_modules/vary/LICENSE | 22 + Url-Shortner/node_modules/vary/README.md | 101 + Url-Shortner/node_modules/vary/index.js | 149 + Url-Shortner/node_modules/vary/package.json | 43 + .../webidl-conversions/LICENSE.md | 12 + .../node_modules/webidl-conversions/README.md | 99 + .../webidl-conversions/lib/index.js | 450 + .../webidl-conversions/package.json | 35 + .../node_modules/whatwg-url/LICENSE.txt | 21 + .../node_modules/whatwg-url/README.md | 106 + Url-Shortner/node_modules/whatwg-url/index.js | 27 + .../node_modules/whatwg-url/lib/Function.js | 42 + .../node_modules/whatwg-url/lib/URL-impl.js | 209 + .../node_modules/whatwg-url/lib/URL.js | 442 + .../whatwg-url/lib/URLSearchParams-impl.js | 130 + .../whatwg-url/lib/URLSearchParams.js | 472 + .../whatwg-url/lib/VoidFunction.js | 26 + .../node_modules/whatwg-url/lib/encoding.js | 16 + .../node_modules/whatwg-url/lib/infra.js | 26 + .../whatwg-url/lib/percent-encoding.js | 142 + .../whatwg-url/lib/url-state-machine.js | 1244 +++ .../node_modules/whatwg-url/lib/urlencoded.js | 106 + .../node_modules/whatwg-url/lib/utils.js | 190 + .../node_modules/whatwg-url/package.json | 58 + .../whatwg-url/webidl2js-wrapper.js | 7 + Url-Shortner/package-lock.json | 1075 +++ Url-Shortner/package.json | 20 + Url-Shortner/routes/staticRouter.js | 14 + Url-Shortner/routes/url.js | 13 + Url-Shortner/service/auth.js | 14 + Url-Shortner/views/home.ejs | 51 + 1872 files changed, 379614 insertions(+) create mode 100644 Url-Shortner/connect.js create mode 100644 Url-Shortner/controllers/url.js create mode 100644 Url-Shortner/index.js create mode 100644 Url-Shortner/models/url.js create mode 100644 Url-Shortner/node_modules/.bin/ejs create mode 100644 Url-Shortner/node_modules/.bin/ejs.cmd create mode 100644 Url-Shortner/node_modules/.bin/ejs.ps1 create mode 100644 Url-Shortner/node_modules/.bin/jake create mode 100644 Url-Shortner/node_modules/.bin/jake.cmd create mode 100644 Url-Shortner/node_modules/.bin/jake.ps1 create mode 100644 Url-Shortner/node_modules/.bin/mime create mode 100644 Url-Shortner/node_modules/.bin/mime.cmd create mode 100644 Url-Shortner/node_modules/.bin/mime.ps1 create mode 100644 Url-Shortner/node_modules/.bin/nanoid create mode 100644 Url-Shortner/node_modules/.bin/nanoid.cmd create mode 100644 Url-Shortner/node_modules/.bin/nanoid.ps1 create mode 100644 Url-Shortner/node_modules/.bin/uuid create mode 100644 Url-Shortner/node_modules/.bin/uuid.cmd create mode 100644 Url-Shortner/node_modules/.bin/uuid.ps1 create mode 100644 Url-Shortner/node_modules/.package-lock.json create mode 100644 Url-Shortner/node_modules/@mongodb-js/saslprep/LICENSE create mode 100644 Url-Shortner/node_modules/@mongodb-js/saslprep/dist/.esm-wrapper.mjs create mode 100644 Url-Shortner/node_modules/@mongodb-js/saslprep/dist/code-points-data.d.ts create mode 100644 Url-Shortner/node_modules/@mongodb-js/saslprep/dist/code-points-data.d.ts.map create mode 100644 Url-Shortner/node_modules/@mongodb-js/saslprep/dist/code-points-data.js create mode 100644 Url-Shortner/node_modules/@mongodb-js/saslprep/dist/code-points-data.js.map create mode 100644 Url-Shortner/node_modules/@mongodb-js/saslprep/dist/code-points-src.d.ts create mode 100644 Url-Shortner/node_modules/@mongodb-js/saslprep/dist/code-points-src.d.ts.map create mode 100644 Url-Shortner/node_modules/@mongodb-js/saslprep/dist/code-points-src.js create mode 100644 Url-Shortner/node_modules/@mongodb-js/saslprep/dist/code-points-src.js.map create mode 100644 Url-Shortner/node_modules/@mongodb-js/saslprep/dist/generate-code-points.d.ts create mode 100644 Url-Shortner/node_modules/@mongodb-js/saslprep/dist/generate-code-points.d.ts.map create mode 100644 Url-Shortner/node_modules/@mongodb-js/saslprep/dist/generate-code-points.js create mode 100644 Url-Shortner/node_modules/@mongodb-js/saslprep/dist/generate-code-points.js.map create mode 100644 Url-Shortner/node_modules/@mongodb-js/saslprep/dist/index.d.ts create mode 100644 Url-Shortner/node_modules/@mongodb-js/saslprep/dist/index.d.ts.map create mode 100644 Url-Shortner/node_modules/@mongodb-js/saslprep/dist/index.js create mode 100644 Url-Shortner/node_modules/@mongodb-js/saslprep/dist/index.js.map create mode 100644 Url-Shortner/node_modules/@mongodb-js/saslprep/dist/memory-code-points.d.ts create mode 100644 Url-Shortner/node_modules/@mongodb-js/saslprep/dist/memory-code-points.d.ts.map create mode 100644 Url-Shortner/node_modules/@mongodb-js/saslprep/dist/memory-code-points.js create mode 100644 Url-Shortner/node_modules/@mongodb-js/saslprep/dist/memory-code-points.js.map create mode 100644 Url-Shortner/node_modules/@mongodb-js/saslprep/dist/util.d.ts create mode 100644 Url-Shortner/node_modules/@mongodb-js/saslprep/dist/util.d.ts.map create mode 100644 Url-Shortner/node_modules/@mongodb-js/saslprep/dist/util.js create mode 100644 Url-Shortner/node_modules/@mongodb-js/saslprep/dist/util.js.map create mode 100644 Url-Shortner/node_modules/@mongodb-js/saslprep/package.json create mode 100644 Url-Shortner/node_modules/@mongodb-js/saslprep/readme.md create mode 100644 Url-Shortner/node_modules/@types/node/LICENSE create mode 100644 Url-Shortner/node_modules/@types/node/README.md create mode 100644 Url-Shortner/node_modules/@types/node/assert.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/assert/strict.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/async_hooks.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/buffer.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/child_process.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/cluster.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/console.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/constants.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/crypto.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/dgram.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/diagnostics_channel.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/dns.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/dns/promises.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/dom-events.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/domain.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/events.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/fs.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/fs/promises.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/globals.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/globals.global.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/http.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/http2.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/https.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/index.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/inspector.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/module.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/net.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/os.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/package.json create mode 100644 Url-Shortner/node_modules/@types/node/path.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/perf_hooks.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/process.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/punycode.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/querystring.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/readline.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/readline/promises.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/repl.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/stream.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/stream/consumers.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/stream/promises.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/stream/web.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/string_decoder.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/test.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/timers.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/timers/promises.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/tls.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/trace_events.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/ts4.8/assert.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/ts4.8/assert/strict.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/ts4.8/async_hooks.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/ts4.8/buffer.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/ts4.8/child_process.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/ts4.8/cluster.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/ts4.8/console.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/ts4.8/constants.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/ts4.8/crypto.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/ts4.8/dgram.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/ts4.8/diagnostics_channel.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/ts4.8/dns.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/ts4.8/dns/promises.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/ts4.8/dom-events.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/ts4.8/domain.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/ts4.8/events.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/ts4.8/fs.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/ts4.8/fs/promises.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/ts4.8/globals.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/ts4.8/globals.global.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/ts4.8/http.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/ts4.8/http2.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/ts4.8/https.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/ts4.8/index.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/ts4.8/inspector.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/ts4.8/module.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/ts4.8/net.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/ts4.8/os.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/ts4.8/path.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/ts4.8/perf_hooks.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/ts4.8/process.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/ts4.8/punycode.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/ts4.8/querystring.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/ts4.8/readline.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/ts4.8/readline/promises.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/ts4.8/repl.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/ts4.8/stream.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/ts4.8/stream/consumers.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/ts4.8/stream/promises.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/ts4.8/stream/web.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/ts4.8/string_decoder.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/ts4.8/test.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/ts4.8/timers.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/ts4.8/timers/promises.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/ts4.8/tls.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/ts4.8/trace_events.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/ts4.8/tty.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/ts4.8/url.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/ts4.8/util.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/ts4.8/v8.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/ts4.8/vm.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/ts4.8/wasi.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/ts4.8/worker_threads.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/ts4.8/zlib.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/tty.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/url.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/util.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/v8.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/vm.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/wasi.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/worker_threads.d.ts create mode 100644 Url-Shortner/node_modules/@types/node/zlib.d.ts create mode 100644 Url-Shortner/node_modules/@types/webidl-conversions/LICENSE create mode 100644 Url-Shortner/node_modules/@types/webidl-conversions/README.md create mode 100644 Url-Shortner/node_modules/@types/webidl-conversions/index.d.ts create mode 100644 Url-Shortner/node_modules/@types/webidl-conversions/package.json create mode 100644 Url-Shortner/node_modules/@types/whatwg-url/LICENSE create mode 100644 Url-Shortner/node_modules/@types/whatwg-url/README.md create mode 100644 Url-Shortner/node_modules/@types/whatwg-url/dist/URL-impl.d.ts create mode 100644 Url-Shortner/node_modules/@types/whatwg-url/dist/URL.d.ts create mode 100644 Url-Shortner/node_modules/@types/whatwg-url/dist/URLSearchParams-impl.d.ts create mode 100644 Url-Shortner/node_modules/@types/whatwg-url/dist/URLSearchParams.d.ts create mode 100644 Url-Shortner/node_modules/@types/whatwg-url/index.d.ts create mode 100644 Url-Shortner/node_modules/@types/whatwg-url/package.json create mode 100644 Url-Shortner/node_modules/@types/whatwg-url/webidl2js-wrapper.d.ts create mode 100644 Url-Shortner/node_modules/accepts/HISTORY.md create mode 100644 Url-Shortner/node_modules/accepts/LICENSE create mode 100644 Url-Shortner/node_modules/accepts/README.md create mode 100644 Url-Shortner/node_modules/accepts/index.js create mode 100644 Url-Shortner/node_modules/accepts/package.json create mode 100644 Url-Shortner/node_modules/ansi-styles/index.d.ts create mode 100644 Url-Shortner/node_modules/ansi-styles/index.js create mode 100644 Url-Shortner/node_modules/ansi-styles/license create mode 100644 Url-Shortner/node_modules/ansi-styles/package.json create mode 100644 Url-Shortner/node_modules/ansi-styles/readme.md create mode 100644 Url-Shortner/node_modules/array-flatten/LICENSE create mode 100644 Url-Shortner/node_modules/array-flatten/README.md create mode 100644 Url-Shortner/node_modules/array-flatten/array-flatten.js create mode 100644 Url-Shortner/node_modules/array-flatten/package.json create mode 100644 Url-Shortner/node_modules/async/CHANGELOG.md create mode 100644 Url-Shortner/node_modules/async/LICENSE create mode 100644 Url-Shortner/node_modules/async/README.md create mode 100644 Url-Shortner/node_modules/async/all.js create mode 100644 Url-Shortner/node_modules/async/allLimit.js create mode 100644 Url-Shortner/node_modules/async/allSeries.js create mode 100644 Url-Shortner/node_modules/async/any.js create mode 100644 Url-Shortner/node_modules/async/anyLimit.js create mode 100644 Url-Shortner/node_modules/async/anySeries.js create mode 100644 Url-Shortner/node_modules/async/apply.js create mode 100644 Url-Shortner/node_modules/async/applyEach.js create mode 100644 Url-Shortner/node_modules/async/applyEachSeries.js create mode 100644 Url-Shortner/node_modules/async/asyncify.js create mode 100644 Url-Shortner/node_modules/async/auto.js create mode 100644 Url-Shortner/node_modules/async/autoInject.js create mode 100644 Url-Shortner/node_modules/async/bower.json create mode 100644 Url-Shortner/node_modules/async/cargo.js create mode 100644 Url-Shortner/node_modules/async/cargoQueue.js create mode 100644 Url-Shortner/node_modules/async/compose.js create mode 100644 Url-Shortner/node_modules/async/concat.js create mode 100644 Url-Shortner/node_modules/async/concatLimit.js create mode 100644 Url-Shortner/node_modules/async/concatSeries.js create mode 100644 Url-Shortner/node_modules/async/constant.js create mode 100644 Url-Shortner/node_modules/async/detect.js create mode 100644 Url-Shortner/node_modules/async/detectLimit.js create mode 100644 Url-Shortner/node_modules/async/detectSeries.js create mode 100644 Url-Shortner/node_modules/async/dir.js create mode 100644 Url-Shortner/node_modules/async/dist/async.js create mode 100644 Url-Shortner/node_modules/async/dist/async.min.js create mode 100644 Url-Shortner/node_modules/async/dist/async.mjs create mode 100644 Url-Shortner/node_modules/async/doDuring.js create mode 100644 Url-Shortner/node_modules/async/doUntil.js create mode 100644 Url-Shortner/node_modules/async/doWhilst.js create mode 100644 Url-Shortner/node_modules/async/during.js create mode 100644 Url-Shortner/node_modules/async/each.js create mode 100644 Url-Shortner/node_modules/async/eachLimit.js create mode 100644 Url-Shortner/node_modules/async/eachOf.js create mode 100644 Url-Shortner/node_modules/async/eachOfLimit.js create mode 100644 Url-Shortner/node_modules/async/eachOfSeries.js create mode 100644 Url-Shortner/node_modules/async/eachSeries.js create mode 100644 Url-Shortner/node_modules/async/ensureAsync.js create mode 100644 Url-Shortner/node_modules/async/every.js create mode 100644 Url-Shortner/node_modules/async/everyLimit.js create mode 100644 Url-Shortner/node_modules/async/everySeries.js create mode 100644 Url-Shortner/node_modules/async/filter.js create mode 100644 Url-Shortner/node_modules/async/filterLimit.js create mode 100644 Url-Shortner/node_modules/async/filterSeries.js create mode 100644 Url-Shortner/node_modules/async/find.js create mode 100644 Url-Shortner/node_modules/async/findLimit.js create mode 100644 Url-Shortner/node_modules/async/findSeries.js create mode 100644 Url-Shortner/node_modules/async/flatMap.js create mode 100644 Url-Shortner/node_modules/async/flatMapLimit.js create mode 100644 Url-Shortner/node_modules/async/flatMapSeries.js create mode 100644 Url-Shortner/node_modules/async/foldl.js create mode 100644 Url-Shortner/node_modules/async/foldr.js create mode 100644 Url-Shortner/node_modules/async/forEach.js create mode 100644 Url-Shortner/node_modules/async/forEachLimit.js create mode 100644 Url-Shortner/node_modules/async/forEachOf.js create mode 100644 Url-Shortner/node_modules/async/forEachOfLimit.js create mode 100644 Url-Shortner/node_modules/async/forEachOfSeries.js create mode 100644 Url-Shortner/node_modules/async/forEachSeries.js create mode 100644 Url-Shortner/node_modules/async/forever.js create mode 100644 Url-Shortner/node_modules/async/groupBy.js create mode 100644 Url-Shortner/node_modules/async/groupByLimit.js create mode 100644 Url-Shortner/node_modules/async/groupBySeries.js create mode 100644 Url-Shortner/node_modules/async/index.js create mode 100644 Url-Shortner/node_modules/async/inject.js create mode 100644 Url-Shortner/node_modules/async/internal/DoublyLinkedList.js create mode 100644 Url-Shortner/node_modules/async/internal/Heap.js create mode 100644 Url-Shortner/node_modules/async/internal/applyEach.js create mode 100644 Url-Shortner/node_modules/async/internal/asyncEachOfLimit.js create mode 100644 Url-Shortner/node_modules/async/internal/awaitify.js create mode 100644 Url-Shortner/node_modules/async/internal/breakLoop.js create mode 100644 Url-Shortner/node_modules/async/internal/consoleFunc.js create mode 100644 Url-Shortner/node_modules/async/internal/createTester.js create mode 100644 Url-Shortner/node_modules/async/internal/eachOfLimit.js create mode 100644 Url-Shortner/node_modules/async/internal/filter.js create mode 100644 Url-Shortner/node_modules/async/internal/getIterator.js create mode 100644 Url-Shortner/node_modules/async/internal/initialParams.js create mode 100644 Url-Shortner/node_modules/async/internal/isArrayLike.js create mode 100644 Url-Shortner/node_modules/async/internal/iterator.js create mode 100644 Url-Shortner/node_modules/async/internal/map.js create mode 100644 Url-Shortner/node_modules/async/internal/once.js create mode 100644 Url-Shortner/node_modules/async/internal/onlyOnce.js create mode 100644 Url-Shortner/node_modules/async/internal/parallel.js create mode 100644 Url-Shortner/node_modules/async/internal/promiseCallback.js create mode 100644 Url-Shortner/node_modules/async/internal/queue.js create mode 100644 Url-Shortner/node_modules/async/internal/range.js create mode 100644 Url-Shortner/node_modules/async/internal/reject.js create mode 100644 Url-Shortner/node_modules/async/internal/setImmediate.js create mode 100644 Url-Shortner/node_modules/async/internal/withoutIndex.js create mode 100644 Url-Shortner/node_modules/async/internal/wrapAsync.js create mode 100644 Url-Shortner/node_modules/async/log.js create mode 100644 Url-Shortner/node_modules/async/map.js create mode 100644 Url-Shortner/node_modules/async/mapLimit.js create mode 100644 Url-Shortner/node_modules/async/mapSeries.js create mode 100644 Url-Shortner/node_modules/async/mapValues.js create mode 100644 Url-Shortner/node_modules/async/mapValuesLimit.js create mode 100644 Url-Shortner/node_modules/async/mapValuesSeries.js create mode 100644 Url-Shortner/node_modules/async/memoize.js create mode 100644 Url-Shortner/node_modules/async/nextTick.js create mode 100644 Url-Shortner/node_modules/async/package.json create mode 100644 Url-Shortner/node_modules/async/parallel.js create mode 100644 Url-Shortner/node_modules/async/parallelLimit.js create mode 100644 Url-Shortner/node_modules/async/priorityQueue.js create mode 100644 Url-Shortner/node_modules/async/queue.js create mode 100644 Url-Shortner/node_modules/async/race.js create mode 100644 Url-Shortner/node_modules/async/reduce.js create mode 100644 Url-Shortner/node_modules/async/reduceRight.js create mode 100644 Url-Shortner/node_modules/async/reflect.js create mode 100644 Url-Shortner/node_modules/async/reflectAll.js create mode 100644 Url-Shortner/node_modules/async/reject.js create mode 100644 Url-Shortner/node_modules/async/rejectLimit.js create mode 100644 Url-Shortner/node_modules/async/rejectSeries.js create mode 100644 Url-Shortner/node_modules/async/retry.js create mode 100644 Url-Shortner/node_modules/async/retryable.js create mode 100644 Url-Shortner/node_modules/async/select.js create mode 100644 Url-Shortner/node_modules/async/selectLimit.js create mode 100644 Url-Shortner/node_modules/async/selectSeries.js create mode 100644 Url-Shortner/node_modules/async/seq.js create mode 100644 Url-Shortner/node_modules/async/series.js create mode 100644 Url-Shortner/node_modules/async/setImmediate.js create mode 100644 Url-Shortner/node_modules/async/some.js create mode 100644 Url-Shortner/node_modules/async/someLimit.js create mode 100644 Url-Shortner/node_modules/async/someSeries.js create mode 100644 Url-Shortner/node_modules/async/sortBy.js create mode 100644 Url-Shortner/node_modules/async/timeout.js create mode 100644 Url-Shortner/node_modules/async/times.js create mode 100644 Url-Shortner/node_modules/async/timesLimit.js create mode 100644 Url-Shortner/node_modules/async/timesSeries.js create mode 100644 Url-Shortner/node_modules/async/transform.js create mode 100644 Url-Shortner/node_modules/async/tryEach.js create mode 100644 Url-Shortner/node_modules/async/unmemoize.js create mode 100644 Url-Shortner/node_modules/async/until.js create mode 100644 Url-Shortner/node_modules/async/waterfall.js create mode 100644 Url-Shortner/node_modules/async/whilst.js create mode 100644 Url-Shortner/node_modules/async/wrapSync.js create mode 100644 Url-Shortner/node_modules/balanced-match/.github/FUNDING.yml create mode 100644 Url-Shortner/node_modules/balanced-match/LICENSE.md create mode 100644 Url-Shortner/node_modules/balanced-match/README.md create mode 100644 Url-Shortner/node_modules/balanced-match/index.js create mode 100644 Url-Shortner/node_modules/balanced-match/package.json create mode 100644 Url-Shortner/node_modules/body-parser/HISTORY.md create mode 100644 Url-Shortner/node_modules/body-parser/LICENSE create mode 100644 Url-Shortner/node_modules/body-parser/README.md create mode 100644 Url-Shortner/node_modules/body-parser/SECURITY.md create mode 100644 Url-Shortner/node_modules/body-parser/index.js create mode 100644 Url-Shortner/node_modules/body-parser/lib/read.js create mode 100644 Url-Shortner/node_modules/body-parser/lib/types/json.js create mode 100644 Url-Shortner/node_modules/body-parser/lib/types/raw.js create mode 100644 Url-Shortner/node_modules/body-parser/lib/types/text.js create mode 100644 Url-Shortner/node_modules/body-parser/lib/types/urlencoded.js create mode 100644 Url-Shortner/node_modules/body-parser/package.json create mode 100644 Url-Shortner/node_modules/brace-expansion/LICENSE create mode 100644 Url-Shortner/node_modules/brace-expansion/README.md create mode 100644 Url-Shortner/node_modules/brace-expansion/index.js create mode 100644 Url-Shortner/node_modules/brace-expansion/package.json create mode 100644 Url-Shortner/node_modules/bson/LICENSE.md create mode 100644 Url-Shortner/node_modules/bson/README.md create mode 100644 Url-Shortner/node_modules/bson/bson.d.ts create mode 100644 Url-Shortner/node_modules/bson/etc/prepare.js create mode 100644 Url-Shortner/node_modules/bson/lib/bson.bundle.js create mode 100644 Url-Shortner/node_modules/bson/lib/bson.bundle.js.map create mode 100644 Url-Shortner/node_modules/bson/lib/bson.cjs create mode 100644 Url-Shortner/node_modules/bson/lib/bson.cjs.map create mode 100644 Url-Shortner/node_modules/bson/lib/bson.mjs create mode 100644 Url-Shortner/node_modules/bson/lib/bson.mjs.map create mode 100644 Url-Shortner/node_modules/bson/lib/bson.rn.cjs create mode 100644 Url-Shortner/node_modules/bson/lib/bson.rn.cjs.map create mode 100644 Url-Shortner/node_modules/bson/package.json create mode 100644 Url-Shortner/node_modules/bson/src/binary.ts create mode 100644 Url-Shortner/node_modules/bson/src/bson.ts create mode 100644 Url-Shortner/node_modules/bson/src/bson_value.ts create mode 100644 Url-Shortner/node_modules/bson/src/code.ts create mode 100644 Url-Shortner/node_modules/bson/src/constants.ts create mode 100644 Url-Shortner/node_modules/bson/src/db_ref.ts create mode 100644 Url-Shortner/node_modules/bson/src/decimal128.ts create mode 100644 Url-Shortner/node_modules/bson/src/double.ts create mode 100644 Url-Shortner/node_modules/bson/src/error.ts create mode 100644 Url-Shortner/node_modules/bson/src/extended_json.ts create mode 100644 Url-Shortner/node_modules/bson/src/index.ts create mode 100644 Url-Shortner/node_modules/bson/src/int_32.ts create mode 100644 Url-Shortner/node_modules/bson/src/long.ts create mode 100644 Url-Shortner/node_modules/bson/src/max_key.ts create mode 100644 Url-Shortner/node_modules/bson/src/min_key.ts create mode 100644 Url-Shortner/node_modules/bson/src/objectid.ts create mode 100644 Url-Shortner/node_modules/bson/src/parser/calculate_size.ts create mode 100644 Url-Shortner/node_modules/bson/src/parser/deserializer.ts create mode 100644 Url-Shortner/node_modules/bson/src/parser/serializer.ts create mode 100644 Url-Shortner/node_modules/bson/src/parser/utils.ts create mode 100644 Url-Shortner/node_modules/bson/src/regexp.ts create mode 100644 Url-Shortner/node_modules/bson/src/symbol.ts create mode 100644 Url-Shortner/node_modules/bson/src/timestamp.ts create mode 100644 Url-Shortner/node_modules/bson/src/utils/byte_utils.ts create mode 100644 Url-Shortner/node_modules/bson/src/utils/node_byte_utils.ts create mode 100644 Url-Shortner/node_modules/bson/src/utils/web_byte_utils.ts create mode 100644 Url-Shortner/node_modules/bson/src/validate_utf8.ts create mode 100644 Url-Shortner/node_modules/bson/vendor/base64/LICENSE-MIT.txt create mode 100644 Url-Shortner/node_modules/bson/vendor/base64/README.md create mode 100644 Url-Shortner/node_modules/bson/vendor/base64/base64.js create mode 100644 Url-Shortner/node_modules/bson/vendor/base64/package.json create mode 100644 Url-Shortner/node_modules/bson/vendor/text-encoding/LICENSE.md create mode 100644 Url-Shortner/node_modules/bson/vendor/text-encoding/README.md create mode 100644 Url-Shortner/node_modules/bson/vendor/text-encoding/index.js create mode 100644 Url-Shortner/node_modules/bson/vendor/text-encoding/lib/encoding-indexes.js create mode 100644 Url-Shortner/node_modules/bson/vendor/text-encoding/lib/encoding.js create mode 100644 Url-Shortner/node_modules/bson/vendor/text-encoding/package.json create mode 100644 Url-Shortner/node_modules/bytes/History.md create mode 100644 Url-Shortner/node_modules/bytes/LICENSE create mode 100644 Url-Shortner/node_modules/bytes/Readme.md create mode 100644 Url-Shortner/node_modules/bytes/index.js create mode 100644 Url-Shortner/node_modules/bytes/package.json create mode 100644 Url-Shortner/node_modules/call-bind/.eslintignore create mode 100644 Url-Shortner/node_modules/call-bind/.eslintrc create mode 100644 Url-Shortner/node_modules/call-bind/.github/FUNDING.yml create mode 100644 Url-Shortner/node_modules/call-bind/.nycrc create mode 100644 Url-Shortner/node_modules/call-bind/CHANGELOG.md create mode 100644 Url-Shortner/node_modules/call-bind/LICENSE create mode 100644 Url-Shortner/node_modules/call-bind/README.md create mode 100644 Url-Shortner/node_modules/call-bind/callBound.js create mode 100644 Url-Shortner/node_modules/call-bind/index.js create mode 100644 Url-Shortner/node_modules/call-bind/package.json create mode 100644 Url-Shortner/node_modules/call-bind/test/callBound.js create mode 100644 Url-Shortner/node_modules/call-bind/test/index.js create mode 100644 Url-Shortner/node_modules/chalk/index.d.ts create mode 100644 Url-Shortner/node_modules/chalk/license create mode 100644 Url-Shortner/node_modules/chalk/package.json create mode 100644 Url-Shortner/node_modules/chalk/readme.md create mode 100644 Url-Shortner/node_modules/chalk/source/index.js create mode 100644 Url-Shortner/node_modules/chalk/source/templates.js create mode 100644 Url-Shortner/node_modules/chalk/source/util.js create mode 100644 Url-Shortner/node_modules/color-convert/CHANGELOG.md create mode 100644 Url-Shortner/node_modules/color-convert/LICENSE create mode 100644 Url-Shortner/node_modules/color-convert/README.md create mode 100644 Url-Shortner/node_modules/color-convert/conversions.js create mode 100644 Url-Shortner/node_modules/color-convert/index.js create mode 100644 Url-Shortner/node_modules/color-convert/package.json create mode 100644 Url-Shortner/node_modules/color-convert/route.js create mode 100644 Url-Shortner/node_modules/color-name/LICENSE create mode 100644 Url-Shortner/node_modules/color-name/README.md create mode 100644 Url-Shortner/node_modules/color-name/index.js create mode 100644 Url-Shortner/node_modules/color-name/package.json create mode 100644 Url-Shortner/node_modules/concat-map/.travis.yml create mode 100644 Url-Shortner/node_modules/concat-map/LICENSE create mode 100644 Url-Shortner/node_modules/concat-map/README.markdown create mode 100644 Url-Shortner/node_modules/concat-map/example/map.js create mode 100644 Url-Shortner/node_modules/concat-map/index.js create mode 100644 Url-Shortner/node_modules/concat-map/package.json create mode 100644 Url-Shortner/node_modules/concat-map/test/map.js create mode 100644 Url-Shortner/node_modules/content-disposition/HISTORY.md create mode 100644 Url-Shortner/node_modules/content-disposition/LICENSE create mode 100644 Url-Shortner/node_modules/content-disposition/README.md create mode 100644 Url-Shortner/node_modules/content-disposition/index.js create mode 100644 Url-Shortner/node_modules/content-disposition/package.json create mode 100644 Url-Shortner/node_modules/content-type/HISTORY.md create mode 100644 Url-Shortner/node_modules/content-type/LICENSE create mode 100644 Url-Shortner/node_modules/content-type/README.md create mode 100644 Url-Shortner/node_modules/content-type/index.js create mode 100644 Url-Shortner/node_modules/content-type/package.json create mode 100644 Url-Shortner/node_modules/cookie-parser/HISTORY.md create mode 100644 Url-Shortner/node_modules/cookie-parser/LICENSE create mode 100644 Url-Shortner/node_modules/cookie-parser/README.md create mode 100644 Url-Shortner/node_modules/cookie-parser/index.js create mode 100644 Url-Shortner/node_modules/cookie-parser/node_modules/cookie/HISTORY.md create mode 100644 Url-Shortner/node_modules/cookie-parser/node_modules/cookie/LICENSE create mode 100644 Url-Shortner/node_modules/cookie-parser/node_modules/cookie/README.md create mode 100644 Url-Shortner/node_modules/cookie-parser/node_modules/cookie/index.js create mode 100644 Url-Shortner/node_modules/cookie-parser/node_modules/cookie/package.json create mode 100644 Url-Shortner/node_modules/cookie-parser/package.json create mode 100644 Url-Shortner/node_modules/cookie-signature/.npmignore create mode 100644 Url-Shortner/node_modules/cookie-signature/History.md create mode 100644 Url-Shortner/node_modules/cookie-signature/Readme.md create mode 100644 Url-Shortner/node_modules/cookie-signature/index.js create mode 100644 Url-Shortner/node_modules/cookie-signature/package.json create mode 100644 Url-Shortner/node_modules/cookie/HISTORY.md create mode 100644 Url-Shortner/node_modules/cookie/LICENSE create mode 100644 Url-Shortner/node_modules/cookie/README.md create mode 100644 Url-Shortner/node_modules/cookie/SECURITY.md create mode 100644 Url-Shortner/node_modules/cookie/index.js create mode 100644 Url-Shortner/node_modules/cookie/package.json create mode 100644 Url-Shortner/node_modules/debug/.coveralls.yml create mode 100644 Url-Shortner/node_modules/debug/.eslintrc create mode 100644 Url-Shortner/node_modules/debug/.npmignore create mode 100644 Url-Shortner/node_modules/debug/.travis.yml create mode 100644 Url-Shortner/node_modules/debug/CHANGELOG.md create mode 100644 Url-Shortner/node_modules/debug/LICENSE create mode 100644 Url-Shortner/node_modules/debug/Makefile create mode 100644 Url-Shortner/node_modules/debug/README.md create mode 100644 Url-Shortner/node_modules/debug/component.json create mode 100644 Url-Shortner/node_modules/debug/karma.conf.js create mode 100644 Url-Shortner/node_modules/debug/node.js create mode 100644 Url-Shortner/node_modules/debug/package.json create mode 100644 Url-Shortner/node_modules/debug/src/browser.js create mode 100644 Url-Shortner/node_modules/debug/src/debug.js create mode 100644 Url-Shortner/node_modules/debug/src/index.js create mode 100644 Url-Shortner/node_modules/debug/src/inspector-log.js create mode 100644 Url-Shortner/node_modules/debug/src/node.js create mode 100644 Url-Shortner/node_modules/depd/History.md create mode 100644 Url-Shortner/node_modules/depd/LICENSE create mode 100644 Url-Shortner/node_modules/depd/Readme.md create mode 100644 Url-Shortner/node_modules/depd/index.js create mode 100644 Url-Shortner/node_modules/depd/lib/browser/index.js create mode 100644 Url-Shortner/node_modules/depd/package.json create mode 100644 Url-Shortner/node_modules/destroy/LICENSE create mode 100644 Url-Shortner/node_modules/destroy/README.md create mode 100644 Url-Shortner/node_modules/destroy/index.js create mode 100644 Url-Shortner/node_modules/destroy/package.json create mode 100644 Url-Shortner/node_modules/ee-first/LICENSE create mode 100644 Url-Shortner/node_modules/ee-first/README.md create mode 100644 Url-Shortner/node_modules/ee-first/index.js create mode 100644 Url-Shortner/node_modules/ee-first/package.json create mode 100644 Url-Shortner/node_modules/ejs/LICENSE create mode 100644 Url-Shortner/node_modules/ejs/README.md create mode 100644 Url-Shortner/node_modules/ejs/bin/cli.js create mode 100644 Url-Shortner/node_modules/ejs/ejs.js create mode 100644 Url-Shortner/node_modules/ejs/ejs.min.js create mode 100644 Url-Shortner/node_modules/ejs/jakefile.js create mode 100644 Url-Shortner/node_modules/ejs/lib/ejs.js create mode 100644 Url-Shortner/node_modules/ejs/lib/utils.js create mode 100644 Url-Shortner/node_modules/ejs/package.json create mode 100644 Url-Shortner/node_modules/ejs/usage.txt create mode 100644 Url-Shortner/node_modules/encodeurl/HISTORY.md create mode 100644 Url-Shortner/node_modules/encodeurl/LICENSE create mode 100644 Url-Shortner/node_modules/encodeurl/README.md create mode 100644 Url-Shortner/node_modules/encodeurl/index.js create mode 100644 Url-Shortner/node_modules/encodeurl/package.json create mode 100644 Url-Shortner/node_modules/escape-html/LICENSE create mode 100644 Url-Shortner/node_modules/escape-html/Readme.md create mode 100644 Url-Shortner/node_modules/escape-html/index.js create mode 100644 Url-Shortner/node_modules/escape-html/package.json create mode 100644 Url-Shortner/node_modules/etag/HISTORY.md create mode 100644 Url-Shortner/node_modules/etag/LICENSE create mode 100644 Url-Shortner/node_modules/etag/README.md create mode 100644 Url-Shortner/node_modules/etag/index.js create mode 100644 Url-Shortner/node_modules/etag/package.json create mode 100644 Url-Shortner/node_modules/express/History.md create mode 100644 Url-Shortner/node_modules/express/LICENSE create mode 100644 Url-Shortner/node_modules/express/Readme.md create mode 100644 Url-Shortner/node_modules/express/index.js create mode 100644 Url-Shortner/node_modules/express/lib/application.js create mode 100644 Url-Shortner/node_modules/express/lib/express.js create mode 100644 Url-Shortner/node_modules/express/lib/middleware/init.js create mode 100644 Url-Shortner/node_modules/express/lib/middleware/query.js create mode 100644 Url-Shortner/node_modules/express/lib/request.js create mode 100644 Url-Shortner/node_modules/express/lib/response.js create mode 100644 Url-Shortner/node_modules/express/lib/router/index.js create mode 100644 Url-Shortner/node_modules/express/lib/router/layer.js create mode 100644 Url-Shortner/node_modules/express/lib/router/route.js create mode 100644 Url-Shortner/node_modules/express/lib/utils.js create mode 100644 Url-Shortner/node_modules/express/lib/view.js create mode 100644 Url-Shortner/node_modules/express/package.json create mode 100644 Url-Shortner/node_modules/filelist/README.md create mode 100644 Url-Shortner/node_modules/filelist/index.d.ts create mode 100644 Url-Shortner/node_modules/filelist/index.js create mode 100644 Url-Shortner/node_modules/filelist/jakefile.js create mode 100644 Url-Shortner/node_modules/filelist/node_modules/brace-expansion/.github/FUNDING.yml create mode 100644 Url-Shortner/node_modules/filelist/node_modules/brace-expansion/LICENSE create mode 100644 Url-Shortner/node_modules/filelist/node_modules/brace-expansion/README.md create mode 100644 Url-Shortner/node_modules/filelist/node_modules/brace-expansion/index.js create mode 100644 Url-Shortner/node_modules/filelist/node_modules/brace-expansion/package.json create mode 100644 Url-Shortner/node_modules/filelist/node_modules/minimatch/LICENSE create mode 100644 Url-Shortner/node_modules/filelist/node_modules/minimatch/README.md create mode 100644 Url-Shortner/node_modules/filelist/node_modules/minimatch/lib/path.js create mode 100644 Url-Shortner/node_modules/filelist/node_modules/minimatch/minimatch.js create mode 100644 Url-Shortner/node_modules/filelist/node_modules/minimatch/package.json create mode 100644 Url-Shortner/node_modules/filelist/package.json create mode 100644 Url-Shortner/node_modules/finalhandler/HISTORY.md create mode 100644 Url-Shortner/node_modules/finalhandler/LICENSE create mode 100644 Url-Shortner/node_modules/finalhandler/README.md create mode 100644 Url-Shortner/node_modules/finalhandler/SECURITY.md create mode 100644 Url-Shortner/node_modules/finalhandler/index.js create mode 100644 Url-Shortner/node_modules/finalhandler/package.json create mode 100644 Url-Shortner/node_modules/forwarded/HISTORY.md create mode 100644 Url-Shortner/node_modules/forwarded/LICENSE create mode 100644 Url-Shortner/node_modules/forwarded/README.md create mode 100644 Url-Shortner/node_modules/forwarded/index.js create mode 100644 Url-Shortner/node_modules/forwarded/package.json create mode 100644 Url-Shortner/node_modules/fresh/HISTORY.md create mode 100644 Url-Shortner/node_modules/fresh/LICENSE create mode 100644 Url-Shortner/node_modules/fresh/README.md create mode 100644 Url-Shortner/node_modules/fresh/index.js create mode 100644 Url-Shortner/node_modules/fresh/package.json create mode 100644 Url-Shortner/node_modules/function-bind/.editorconfig create mode 100644 Url-Shortner/node_modules/function-bind/.eslintrc create mode 100644 Url-Shortner/node_modules/function-bind/.jscs.json create mode 100644 Url-Shortner/node_modules/function-bind/.npmignore create mode 100644 Url-Shortner/node_modules/function-bind/.travis.yml create mode 100644 Url-Shortner/node_modules/function-bind/LICENSE create mode 100644 Url-Shortner/node_modules/function-bind/README.md create mode 100644 Url-Shortner/node_modules/function-bind/implementation.js create mode 100644 Url-Shortner/node_modules/function-bind/index.js create mode 100644 Url-Shortner/node_modules/function-bind/package.json create mode 100644 Url-Shortner/node_modules/function-bind/test/.eslintrc create mode 100644 Url-Shortner/node_modules/function-bind/test/index.js create mode 100644 Url-Shortner/node_modules/get-intrinsic/.eslintrc create mode 100644 Url-Shortner/node_modules/get-intrinsic/.github/FUNDING.yml create mode 100644 Url-Shortner/node_modules/get-intrinsic/.nycrc create mode 100644 Url-Shortner/node_modules/get-intrinsic/CHANGELOG.md create mode 100644 Url-Shortner/node_modules/get-intrinsic/LICENSE create mode 100644 Url-Shortner/node_modules/get-intrinsic/README.md create mode 100644 Url-Shortner/node_modules/get-intrinsic/index.js create mode 100644 Url-Shortner/node_modules/get-intrinsic/package.json create mode 100644 Url-Shortner/node_modules/get-intrinsic/test/GetIntrinsic.js create mode 100644 Url-Shortner/node_modules/has-flag/index.d.ts create mode 100644 Url-Shortner/node_modules/has-flag/index.js create mode 100644 Url-Shortner/node_modules/has-flag/license create mode 100644 Url-Shortner/node_modules/has-flag/package.json create mode 100644 Url-Shortner/node_modules/has-flag/readme.md create mode 100644 Url-Shortner/node_modules/has-proto/.eslintrc create mode 100644 Url-Shortner/node_modules/has-proto/.github/FUNDING.yml create mode 100644 Url-Shortner/node_modules/has-proto/CHANGELOG.md create mode 100644 Url-Shortner/node_modules/has-proto/LICENSE create mode 100644 Url-Shortner/node_modules/has-proto/README.md create mode 100644 Url-Shortner/node_modules/has-proto/index.js create mode 100644 Url-Shortner/node_modules/has-proto/package.json create mode 100644 Url-Shortner/node_modules/has-proto/test/index.js create mode 100644 Url-Shortner/node_modules/has-symbols/.eslintrc create mode 100644 Url-Shortner/node_modules/has-symbols/.github/FUNDING.yml create mode 100644 Url-Shortner/node_modules/has-symbols/.nycrc create mode 100644 Url-Shortner/node_modules/has-symbols/CHANGELOG.md create mode 100644 Url-Shortner/node_modules/has-symbols/LICENSE create mode 100644 Url-Shortner/node_modules/has-symbols/README.md create mode 100644 Url-Shortner/node_modules/has-symbols/index.js create mode 100644 Url-Shortner/node_modules/has-symbols/package.json create mode 100644 Url-Shortner/node_modules/has-symbols/shams.js create mode 100644 Url-Shortner/node_modules/has-symbols/test/index.js create mode 100644 Url-Shortner/node_modules/has-symbols/test/shams/core-js.js create mode 100644 Url-Shortner/node_modules/has-symbols/test/shams/get-own-property-symbols.js create mode 100644 Url-Shortner/node_modules/has-symbols/test/tests.js create mode 100644 Url-Shortner/node_modules/has/LICENSE-MIT create mode 100644 Url-Shortner/node_modules/has/README.md create mode 100644 Url-Shortner/node_modules/has/package.json create mode 100644 Url-Shortner/node_modules/has/src/index.js create mode 100644 Url-Shortner/node_modules/has/test/index.js create mode 100644 Url-Shortner/node_modules/http-errors/HISTORY.md create mode 100644 Url-Shortner/node_modules/http-errors/LICENSE create mode 100644 Url-Shortner/node_modules/http-errors/README.md create mode 100644 Url-Shortner/node_modules/http-errors/index.js create mode 100644 Url-Shortner/node_modules/http-errors/package.json create mode 100644 Url-Shortner/node_modules/iconv-lite/Changelog.md create mode 100644 Url-Shortner/node_modules/iconv-lite/LICENSE create mode 100644 Url-Shortner/node_modules/iconv-lite/README.md create mode 100644 Url-Shortner/node_modules/iconv-lite/encodings/dbcs-codec.js create mode 100644 Url-Shortner/node_modules/iconv-lite/encodings/dbcs-data.js create mode 100644 Url-Shortner/node_modules/iconv-lite/encodings/index.js create mode 100644 Url-Shortner/node_modules/iconv-lite/encodings/internal.js create mode 100644 Url-Shortner/node_modules/iconv-lite/encodings/sbcs-codec.js create mode 100644 Url-Shortner/node_modules/iconv-lite/encodings/sbcs-data-generated.js create mode 100644 Url-Shortner/node_modules/iconv-lite/encodings/sbcs-data.js create mode 100644 Url-Shortner/node_modules/iconv-lite/encodings/tables/big5-added.json create mode 100644 Url-Shortner/node_modules/iconv-lite/encodings/tables/cp936.json create mode 100644 Url-Shortner/node_modules/iconv-lite/encodings/tables/cp949.json create mode 100644 Url-Shortner/node_modules/iconv-lite/encodings/tables/cp950.json create mode 100644 Url-Shortner/node_modules/iconv-lite/encodings/tables/eucjp.json create mode 100644 Url-Shortner/node_modules/iconv-lite/encodings/tables/gb18030-ranges.json create mode 100644 Url-Shortner/node_modules/iconv-lite/encodings/tables/gbk-added.json create mode 100644 Url-Shortner/node_modules/iconv-lite/encodings/tables/shiftjis.json create mode 100644 Url-Shortner/node_modules/iconv-lite/encodings/utf16.js create mode 100644 Url-Shortner/node_modules/iconv-lite/encodings/utf7.js create mode 100644 Url-Shortner/node_modules/iconv-lite/lib/bom-handling.js create mode 100644 Url-Shortner/node_modules/iconv-lite/lib/extend-node.js create mode 100644 Url-Shortner/node_modules/iconv-lite/lib/index.d.ts create mode 100644 Url-Shortner/node_modules/iconv-lite/lib/index.js create mode 100644 Url-Shortner/node_modules/iconv-lite/lib/streams.js create mode 100644 Url-Shortner/node_modules/iconv-lite/package.json create mode 100644 Url-Shortner/node_modules/inherits/LICENSE create mode 100644 Url-Shortner/node_modules/inherits/README.md create mode 100644 Url-Shortner/node_modules/inherits/inherits.js create mode 100644 Url-Shortner/node_modules/inherits/inherits_browser.js create mode 100644 Url-Shortner/node_modules/inherits/package.json create mode 100644 Url-Shortner/node_modules/ip/README.md create mode 100644 Url-Shortner/node_modules/ip/lib/ip.js create mode 100644 Url-Shortner/node_modules/ip/package.json create mode 100644 Url-Shortner/node_modules/ipaddr.js/LICENSE create mode 100644 Url-Shortner/node_modules/ipaddr.js/README.md create mode 100644 Url-Shortner/node_modules/ipaddr.js/ipaddr.min.js create mode 100644 Url-Shortner/node_modules/ipaddr.js/lib/ipaddr.js create mode 100644 Url-Shortner/node_modules/ipaddr.js/lib/ipaddr.js.d.ts create mode 100644 Url-Shortner/node_modules/ipaddr.js/package.json create mode 100644 Url-Shortner/node_modules/jake/Makefile create mode 100644 Url-Shortner/node_modules/jake/README.md create mode 100644 Url-Shortner/node_modules/jake/bin/bash_completion.sh create mode 100644 Url-Shortner/node_modules/jake/bin/cli.js create mode 100644 Url-Shortner/node_modules/jake/jakefile.js create mode 100644 Url-Shortner/node_modules/jake/lib/api.js create mode 100644 Url-Shortner/node_modules/jake/lib/jake.js create mode 100644 Url-Shortner/node_modules/jake/lib/loader.js create mode 100644 Url-Shortner/node_modules/jake/lib/namespace.js create mode 100644 Url-Shortner/node_modules/jake/lib/package_task.js create mode 100644 Url-Shortner/node_modules/jake/lib/parseargs.js create mode 100644 Url-Shortner/node_modules/jake/lib/program.js create mode 100644 Url-Shortner/node_modules/jake/lib/publish_task.js create mode 100644 Url-Shortner/node_modules/jake/lib/rule.js create mode 100644 Url-Shortner/node_modules/jake/lib/task/directory_task.js create mode 100644 Url-Shortner/node_modules/jake/lib/task/file_task.js create mode 100644 Url-Shortner/node_modules/jake/lib/task/index.js create mode 100644 Url-Shortner/node_modules/jake/lib/task/task.js create mode 100644 Url-Shortner/node_modules/jake/lib/test_task.js create mode 100644 Url-Shortner/node_modules/jake/lib/utils/file.js create mode 100644 Url-Shortner/node_modules/jake/lib/utils/index.js create mode 100644 Url-Shortner/node_modules/jake/lib/utils/logger.js create mode 100644 Url-Shortner/node_modules/jake/package.json create mode 100644 Url-Shortner/node_modules/jake/test/integration/concurrent.js create mode 100644 Url-Shortner/node_modules/jake/test/integration/file.js create mode 100644 Url-Shortner/node_modules/jake/test/integration/file_task.js create mode 100644 Url-Shortner/node_modules/jake/test/integration/helpers.js create mode 100644 Url-Shortner/node_modules/jake/test/integration/jakefile.js create mode 100644 Url-Shortner/node_modules/jake/test/integration/jakelib/concurrent.jake.js create mode 100644 Url-Shortner/node_modules/jake/test/integration/jakelib/publish.jake.js create mode 100644 Url-Shortner/node_modules/jake/test/integration/jakelib/required_module.jake.js create mode 100644 Url-Shortner/node_modules/jake/test/integration/jakelib/rule.jake.js create mode 100644 Url-Shortner/node_modules/jake/test/integration/list_tasks.js create mode 100644 Url-Shortner/node_modules/jake/test/integration/publish_task.js create mode 100644 Url-Shortner/node_modules/jake/test/integration/rule.js create mode 100644 Url-Shortner/node_modules/jake/test/integration/selfdep.js create mode 100644 Url-Shortner/node_modules/jake/test/integration/task_base.js create mode 100644 Url-Shortner/node_modules/jake/test/unit/jakefile.js create mode 100644 Url-Shortner/node_modules/jake/test/unit/namespace.js create mode 100644 Url-Shortner/node_modules/jake/test/unit/parseargs.js create mode 100644 Url-Shortner/node_modules/jake/usage.txt create mode 100644 Url-Shortner/node_modules/kareem/LICENSE create mode 100644 Url-Shortner/node_modules/kareem/README.md create mode 100644 Url-Shortner/node_modules/kareem/index.js create mode 100644 Url-Shortner/node_modules/kareem/package.json create mode 100644 Url-Shortner/node_modules/media-typer/HISTORY.md create mode 100644 Url-Shortner/node_modules/media-typer/LICENSE create mode 100644 Url-Shortner/node_modules/media-typer/README.md create mode 100644 Url-Shortner/node_modules/media-typer/index.js create mode 100644 Url-Shortner/node_modules/media-typer/package.json create mode 100644 Url-Shortner/node_modules/memory-pager/.travis.yml create mode 100644 Url-Shortner/node_modules/memory-pager/LICENSE create mode 100644 Url-Shortner/node_modules/memory-pager/README.md create mode 100644 Url-Shortner/node_modules/memory-pager/index.js create mode 100644 Url-Shortner/node_modules/memory-pager/package.json create mode 100644 Url-Shortner/node_modules/memory-pager/test.js create mode 100644 Url-Shortner/node_modules/merge-descriptors/HISTORY.md create mode 100644 Url-Shortner/node_modules/merge-descriptors/LICENSE create mode 100644 Url-Shortner/node_modules/merge-descriptors/README.md create mode 100644 Url-Shortner/node_modules/merge-descriptors/index.js create mode 100644 Url-Shortner/node_modules/merge-descriptors/package.json create mode 100644 Url-Shortner/node_modules/methods/HISTORY.md create mode 100644 Url-Shortner/node_modules/methods/LICENSE create mode 100644 Url-Shortner/node_modules/methods/README.md create mode 100644 Url-Shortner/node_modules/methods/index.js create mode 100644 Url-Shortner/node_modules/methods/package.json create mode 100644 Url-Shortner/node_modules/mime-db/HISTORY.md create mode 100644 Url-Shortner/node_modules/mime-db/LICENSE create mode 100644 Url-Shortner/node_modules/mime-db/README.md create mode 100644 Url-Shortner/node_modules/mime-db/db.json create mode 100644 Url-Shortner/node_modules/mime-db/index.js create mode 100644 Url-Shortner/node_modules/mime-db/package.json create mode 100644 Url-Shortner/node_modules/mime-types/HISTORY.md create mode 100644 Url-Shortner/node_modules/mime-types/LICENSE create mode 100644 Url-Shortner/node_modules/mime-types/README.md create mode 100644 Url-Shortner/node_modules/mime-types/index.js create mode 100644 Url-Shortner/node_modules/mime-types/package.json create mode 100644 Url-Shortner/node_modules/mime/.npmignore create mode 100644 Url-Shortner/node_modules/mime/CHANGELOG.md create mode 100644 Url-Shortner/node_modules/mime/LICENSE create mode 100644 Url-Shortner/node_modules/mime/README.md create mode 100644 Url-Shortner/node_modules/mime/cli.js create mode 100644 Url-Shortner/node_modules/mime/mime.js create mode 100644 Url-Shortner/node_modules/mime/package.json create mode 100644 Url-Shortner/node_modules/mime/src/build.js create mode 100644 Url-Shortner/node_modules/mime/src/test.js create mode 100644 Url-Shortner/node_modules/mime/types.json create mode 100644 Url-Shortner/node_modules/minimatch/LICENSE create mode 100644 Url-Shortner/node_modules/minimatch/README.md create mode 100644 Url-Shortner/node_modules/minimatch/minimatch.js create mode 100644 Url-Shortner/node_modules/minimatch/package.json create mode 100644 Url-Shortner/node_modules/mongodb-connection-string-url/.esm-wrapper.mjs create mode 100644 Url-Shortner/node_modules/mongodb-connection-string-url/LICENSE create mode 100644 Url-Shortner/node_modules/mongodb-connection-string-url/README.md create mode 100644 Url-Shortner/node_modules/mongodb-connection-string-url/lib/index.d.ts create mode 100644 Url-Shortner/node_modules/mongodb-connection-string-url/lib/index.js create mode 100644 Url-Shortner/node_modules/mongodb-connection-string-url/lib/index.js.map create mode 100644 Url-Shortner/node_modules/mongodb-connection-string-url/lib/redact.d.ts create mode 100644 Url-Shortner/node_modules/mongodb-connection-string-url/lib/redact.js create mode 100644 Url-Shortner/node_modules/mongodb-connection-string-url/lib/redact.js.map create mode 100644 Url-Shortner/node_modules/mongodb-connection-string-url/package.json create mode 100644 Url-Shortner/node_modules/mongodb/LICENSE.md create mode 100644 Url-Shortner/node_modules/mongodb/README.md create mode 100644 Url-Shortner/node_modules/mongodb/etc/prepare.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/admin.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/admin.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/bson.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/bson.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/bulk/common.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/bulk/common.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/bulk/ordered.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/bulk/ordered.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/bulk/unordered.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/bulk/unordered.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/change_stream.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/change_stream.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/cmap/auth/auth_provider.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/cmap/auth/auth_provider.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/cmap/auth/gssapi.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/cmap/auth/gssapi.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/cmap/auth/mongo_credentials.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/cmap/auth/mongo_credentials.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/cmap/auth/mongocr.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/cmap/auth/mongocr.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/cmap/auth/mongodb_aws.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/cmap/auth/mongodb_aws.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/cmap/auth/mongodb_oidc.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/cmap/auth/mongodb_oidc.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/cmap/auth/mongodb_oidc/aws_service_workflow.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/cmap/auth/mongodb_oidc/aws_service_workflow.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/cmap/auth/mongodb_oidc/azure_service_workflow.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/cmap/auth/mongodb_oidc/azure_service_workflow.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/cmap/auth/mongodb_oidc/azure_token_cache.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/cmap/auth/mongodb_oidc/azure_token_cache.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/cmap/auth/mongodb_oidc/cache.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/cmap/auth/mongodb_oidc/cache.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/cmap/auth/mongodb_oidc/callback_lock_cache.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/cmap/auth/mongodb_oidc/callback_lock_cache.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/cmap/auth/mongodb_oidc/callback_workflow.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/cmap/auth/mongodb_oidc/callback_workflow.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/cmap/auth/mongodb_oidc/service_workflow.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/cmap/auth/mongodb_oidc/service_workflow.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/cmap/auth/mongodb_oidc/token_entry_cache.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/cmap/auth/mongodb_oidc/token_entry_cache.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/cmap/auth/plain.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/cmap/auth/plain.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/cmap/auth/providers.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/cmap/auth/providers.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/cmap/auth/scram.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/cmap/auth/scram.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/cmap/auth/x509.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/cmap/auth/x509.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/cmap/command_monitoring_events.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/cmap/command_monitoring_events.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/cmap/commands.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/cmap/commands.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/cmap/connect.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/cmap/connect.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/cmap/connection.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/cmap/connection.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/cmap/connection_pool.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/cmap/connection_pool.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/cmap/connection_pool_events.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/cmap/connection_pool_events.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/cmap/errors.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/cmap/errors.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/cmap/handshake/client_metadata.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/cmap/handshake/client_metadata.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/cmap/message_stream.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/cmap/message_stream.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/cmap/metrics.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/cmap/metrics.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/cmap/stream_description.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/cmap/stream_description.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/cmap/wire_protocol/compression.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/cmap/wire_protocol/compression.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/cmap/wire_protocol/constants.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/cmap/wire_protocol/constants.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/cmap/wire_protocol/shared.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/cmap/wire_protocol/shared.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/collection.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/collection.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/connection_string.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/connection_string.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/constants.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/constants.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/cursor/abstract_cursor.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/cursor/abstract_cursor.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/cursor/aggregation_cursor.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/cursor/aggregation_cursor.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/cursor/change_stream_cursor.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/cursor/change_stream_cursor.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/cursor/find_cursor.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/cursor/find_cursor.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/cursor/list_collections_cursor.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/cursor/list_collections_cursor.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/cursor/list_indexes_cursor.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/cursor/list_indexes_cursor.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/cursor/list_search_indexes_cursor.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/cursor/list_search_indexes_cursor.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/cursor/run_command_cursor.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/cursor/run_command_cursor.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/db.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/db.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/deps.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/deps.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/encrypter.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/encrypter.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/error.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/error.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/explain.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/explain.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/gridfs/download.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/gridfs/download.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/gridfs/index.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/gridfs/index.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/gridfs/upload.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/gridfs/upload.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/index.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/index.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/mongo_client.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/mongo_client.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/mongo_logger.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/mongo_logger.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/mongo_types.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/mongo_types.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/operations/add_user.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/operations/add_user.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/operations/aggregate.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/operations/aggregate.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/operations/bulk_write.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/operations/bulk_write.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/operations/collections.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/operations/collections.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/operations/command.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/operations/command.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/operations/common_functions.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/operations/common_functions.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/operations/count.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/operations/count.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/operations/count_documents.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/operations/count_documents.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/operations/create_collection.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/operations/create_collection.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/operations/delete.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/operations/delete.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/operations/distinct.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/operations/distinct.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/operations/drop.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/operations/drop.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/operations/estimated_document_count.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/operations/estimated_document_count.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/operations/eval.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/operations/eval.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/operations/execute_operation.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/operations/execute_operation.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/operations/find.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/operations/find.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/operations/find_and_modify.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/operations/find_and_modify.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/operations/get_more.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/operations/get_more.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/operations/indexes.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/operations/indexes.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/operations/insert.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/operations/insert.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/operations/is_capped.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/operations/is_capped.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/operations/kill_cursors.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/operations/kill_cursors.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/operations/list_collections.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/operations/list_collections.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/operations/list_databases.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/operations/list_databases.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/operations/operation.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/operations/operation.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/operations/options_operation.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/operations/options_operation.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/operations/profiling_level.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/operations/profiling_level.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/operations/remove_user.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/operations/remove_user.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/operations/rename.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/operations/rename.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/operations/run_command.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/operations/run_command.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/operations/search_indexes/create.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/operations/search_indexes/create.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/operations/search_indexes/drop.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/operations/search_indexes/drop.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/operations/search_indexes/update.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/operations/search_indexes/update.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/operations/set_profiling_level.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/operations/set_profiling_level.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/operations/stats.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/operations/stats.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/operations/update.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/operations/update.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/operations/validate_collection.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/operations/validate_collection.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/read_concern.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/read_concern.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/read_preference.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/read_preference.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/sdam/common.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/sdam/common.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/sdam/events.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/sdam/events.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/sdam/monitor.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/sdam/monitor.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/sdam/server.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/sdam/server.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/sdam/server_description.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/sdam/server_description.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/sdam/server_selection.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/sdam/server_selection.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/sdam/srv_polling.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/sdam/srv_polling.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/sdam/topology.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/sdam/topology.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/sdam/topology_description.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/sdam/topology_description.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/sessions.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/sessions.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/sort.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/sort.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/transactions.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/transactions.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/utils.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/utils.js.map create mode 100644 Url-Shortner/node_modules/mongodb/lib/write_concern.js create mode 100644 Url-Shortner/node_modules/mongodb/lib/write_concern.js.map create mode 100644 Url-Shortner/node_modules/mongodb/mongodb.d.ts create mode 100644 Url-Shortner/node_modules/mongodb/package.json create mode 100644 Url-Shortner/node_modules/mongodb/src/admin.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/bson.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/bulk/common.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/bulk/ordered.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/bulk/unordered.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/change_stream.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/cmap/auth/auth_provider.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/cmap/auth/gssapi.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/cmap/auth/mongo_credentials.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/cmap/auth/mongocr.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/cmap/auth/mongodb_aws.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/cmap/auth/mongodb_oidc.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/cmap/auth/mongodb_oidc/aws_service_workflow.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/cmap/auth/mongodb_oidc/azure_service_workflow.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/cmap/auth/mongodb_oidc/azure_token_cache.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/cmap/auth/mongodb_oidc/cache.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/cmap/auth/mongodb_oidc/callback_lock_cache.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/cmap/auth/mongodb_oidc/callback_workflow.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/cmap/auth/mongodb_oidc/service_workflow.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/cmap/auth/mongodb_oidc/token_entry_cache.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/cmap/auth/plain.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/cmap/auth/providers.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/cmap/auth/scram.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/cmap/auth/x509.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/cmap/command_monitoring_events.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/cmap/commands.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/cmap/connect.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/cmap/connection.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/cmap/connection_pool.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/cmap/connection_pool_events.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/cmap/errors.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/cmap/handshake/client_metadata.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/cmap/message_stream.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/cmap/metrics.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/cmap/stream_description.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/cmap/wire_protocol/compression.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/cmap/wire_protocol/constants.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/cmap/wire_protocol/shared.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/collection.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/connection_string.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/constants.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/cursor/abstract_cursor.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/cursor/aggregation_cursor.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/cursor/change_stream_cursor.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/cursor/find_cursor.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/cursor/list_collections_cursor.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/cursor/list_indexes_cursor.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/cursor/list_search_indexes_cursor.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/cursor/run_command_cursor.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/db.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/deps.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/encrypter.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/error.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/explain.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/gridfs/download.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/gridfs/index.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/gridfs/upload.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/index.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/mongo_client.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/mongo_logger.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/mongo_types.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/operations/add_user.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/operations/aggregate.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/operations/bulk_write.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/operations/collections.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/operations/command.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/operations/common_functions.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/operations/count.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/operations/count_documents.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/operations/create_collection.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/operations/delete.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/operations/distinct.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/operations/drop.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/operations/estimated_document_count.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/operations/eval.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/operations/execute_operation.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/operations/find.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/operations/find_and_modify.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/operations/get_more.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/operations/indexes.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/operations/insert.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/operations/is_capped.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/operations/kill_cursors.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/operations/list_collections.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/operations/list_databases.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/operations/operation.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/operations/options_operation.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/operations/profiling_level.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/operations/remove_user.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/operations/rename.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/operations/run_command.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/operations/search_indexes/create.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/operations/search_indexes/drop.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/operations/search_indexes/update.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/operations/set_profiling_level.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/operations/stats.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/operations/update.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/operations/validate_collection.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/read_concern.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/read_preference.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/sdam/common.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/sdam/events.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/sdam/monitor.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/sdam/server.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/sdam/server_description.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/sdam/server_selection.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/sdam/srv_polling.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/sdam/topology.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/sdam/topology_description.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/sessions.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/sort.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/transactions.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/utils.ts create mode 100644 Url-Shortner/node_modules/mongodb/src/write_concern.ts create mode 100644 Url-Shortner/node_modules/mongodb/tsconfig.json create mode 100644 Url-Shortner/node_modules/mongoose/.eslintrc.js create mode 100644 Url-Shortner/node_modules/mongoose/.markdownlint-cli2.cjs create mode 100644 Url-Shortner/node_modules/mongoose/.mocharc.yml create mode 100644 Url-Shortner/node_modules/mongoose/LICENSE.md create mode 100644 Url-Shortner/node_modules/mongoose/README.md create mode 100644 Url-Shortner/node_modules/mongoose/SECURITY.md create mode 100644 Url-Shortner/node_modules/mongoose/browser.js create mode 100644 Url-Shortner/node_modules/mongoose/dist/browser.umd.js create mode 100644 Url-Shortner/node_modules/mongoose/index.js create mode 100644 Url-Shortner/node_modules/mongoose/lgtm.yml create mode 100644 Url-Shortner/node_modules/mongoose/lib/aggregate.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/browser.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/browserDocument.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/cast.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/cast/bigint.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/cast/boolean.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/cast/date.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/cast/decimal128.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/cast/number.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/cast/objectid.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/cast/string.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/collection.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/connection.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/connectionstate.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/cursor/AggregationCursor.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/cursor/ChangeStream.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/cursor/QueryCursor.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/document.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/document_provider.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/driver.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/drivers/SPEC.md create mode 100644 Url-Shortner/node_modules/mongoose/lib/drivers/browser/binary.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/drivers/browser/decimal128.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/drivers/browser/index.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/drivers/browser/objectid.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/drivers/node-mongodb-native/collection.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/drivers/node-mongodb-native/connection.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/drivers/node-mongodb-native/index.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/error/browserMissingSchema.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/error/bulkWriteError.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/error/cast.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/error/createCollectionsError.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/error/divergentArray.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/error/eachAsyncMultiError.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/error/index.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/error/invalidSchemaOption.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/error/messages.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/error/missingSchema.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/error/mongooseError.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/error/notFound.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/error/objectExpected.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/error/objectParameter.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/error/overwriteModel.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/error/parallelSave.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/error/parallelValidate.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/error/serverSelection.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/error/setOptionError.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/error/strict.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/error/strictPopulate.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/error/syncIndexes.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/error/validation.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/error/validator.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/error/version.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/aggregate/prepareDiscriminatorPipeline.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/aggregate/stringifyFunctionOperators.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/arrayDepth.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/clone.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/common.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/cursor/eachAsync.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/discriminator/areDiscriminatorValuesEqual.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/discriminator/checkEmbeddedDiscriminatorKeyProjection.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/discriminator/getConstructor.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/discriminator/getDiscriminatorByValue.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/discriminator/getSchemaDiscriminatorByValue.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/discriminator/mergeDiscriminatorSchema.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/document/applyDefaults.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/document/cleanModifiedSubpaths.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/document/compile.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/document/getDeepestSubdocumentForPath.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/document/getEmbeddedDiscriminatorPath.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/document/handleSpreadDoc.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/each.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/error/combinePathErrors.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/firstKey.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/get.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/getConstructorName.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/getDefaultBulkwriteResult.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/getFunctionName.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/immediate.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/indexes/applySchemaCollation.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/indexes/decorateDiscriminatorIndexOptions.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/indexes/getRelatedIndexes.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/indexes/isDefaultIdIndex.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/indexes/isIndexEqual.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/indexes/isTextIndex.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/isAsyncFunction.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/isBsonType.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/isMongooseObject.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/isObject.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/isPOJO.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/isPromise.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/isSimpleValidator.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/model/applyDefaultsToPOJO.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/model/applyHooks.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/model/applyMethods.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/model/applyStaticHooks.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/model/applyStatics.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/model/castBulkWrite.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/model/discriminator.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/model/pushNestedArrayPaths.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/once.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/parallelLimit.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/path/parentPaths.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/path/setDottedPath.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/pluralize.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/populate/SkipPopulateValue.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/populate/assignRawDocsToIdStructure.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/populate/assignVals.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/populate/createPopulateQueryFilter.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/populate/getModelsMapForPopulate.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/populate/getSchemaTypes.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/populate/getVirtual.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/populate/leanPopulateMap.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/populate/lookupLocalFields.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/populate/markArraySubdocsPopulated.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/populate/modelNamesFromRefPath.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/populate/removeDeselectedForeignField.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/populate/validateRef.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/printJestWarning.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/processConnectionOptions.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/projection/applyProjection.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/projection/hasIncludedChildren.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/projection/isDefiningProjection.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/projection/isExclusive.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/projection/isInclusive.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/projection/isPathExcluded.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/projection/isPathSelectedInclusive.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/projection/isSubpath.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/projection/parseProjection.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/promiseOrCallback.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/query/applyGlobalOption.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/query/applyQueryMiddleware.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/query/cast$expr.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/query/castFilterPath.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/query/castUpdate.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/query/completeMany.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/query/getEmbeddedDiscriminatorPath.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/query/handleImmutable.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/query/handleReadPreferenceAliases.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/query/hasDollarKeys.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/query/isOperator.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/query/sanitizeFilter.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/query/sanitizeProjection.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/query/selectPopulatedFields.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/query/trusted.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/query/validOps.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/schema/addAutoId.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/schema/applyBuiltinPlugins.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/schema/applyPlugins.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/schema/applyWriteConcern.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/schema/cleanPositionalOperators.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/schema/getIndexes.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/schema/getKeysInSchemaOrder.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/schema/getPath.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/schema/getSubdocumentStrictValue.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/schema/handleIdOption.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/schema/handleTimestampOption.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/schema/idGetter.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/schema/merge.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/schematype/handleImmutable.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/setDefaultsOnInsert.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/specialProperties.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/symbols.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/timers.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/timestamps/setDocumentTimestamps.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/timestamps/setupTimestamps.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/topology/allServersUnknown.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/topology/isAtlas.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/topology/isSSLError.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/update/applyTimestampsToChildren.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/update/applyTimestampsToUpdate.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/update/castArrayFilters.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/update/modifiedPaths.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/update/moveImmutableProperties.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/update/removeUnusedArrayFilters.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/update/updatedPathsByArrayFilter.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/helpers/updateValidators.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/index.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/internal.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/model.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/options.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/options/PopulateOptions.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/options/SchemaArrayOptions.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/options/SchemaBufferOptions.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/options/SchemaDateOptions.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/options/SchemaDocumentArrayOptions.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/options/SchemaMapOptions.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/options/SchemaNumberOptions.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/options/SchemaObjectIdOptions.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/options/SchemaStringOptions.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/options/SchemaSubdocumentOptions.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/options/SchemaTypeOptions.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/options/VirtualOptions.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/options/propertyOptions.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/options/saveOptions.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/plugins/index.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/plugins/removeSubdocs.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/plugins/saveSubdocs.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/plugins/sharding.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/plugins/trackTransaction.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/plugins/validateBeforeSave.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/query.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/queryhelpers.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/schema.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/schema/DocumentArrayElement.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/schema/SubdocumentPath.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/schema/array.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/schema/bigint.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/schema/boolean.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/schema/buffer.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/schema/date.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/schema/decimal128.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/schema/documentarray.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/schema/index.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/schema/map.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/schema/mixed.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/schema/number.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/schema/objectid.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/schema/operators/bitwise.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/schema/operators/exists.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/schema/operators/geospatial.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/schema/operators/helpers.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/schema/operators/text.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/schema/operators/type.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/schema/string.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/schema/symbols.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/schema/uuid.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/schematype.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/statemachine.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/types/ArraySubdocument.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/types/DocumentArray/index.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/types/DocumentArray/isMongooseDocumentArray.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/types/DocumentArray/methods/index.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/types/array/index.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/types/array/isMongooseArray.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/types/array/methods/index.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/types/buffer.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/types/decimal128.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/types/index.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/types/map.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/types/objectid.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/types/subdocument.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/types/uuid.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/utils.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/validoptions.js create mode 100644 Url-Shortner/node_modules/mongoose/lib/virtualtype.js create mode 100644 Url-Shortner/node_modules/mongoose/node_modules/ms/index.js create mode 100644 Url-Shortner/node_modules/mongoose/node_modules/ms/license.md create mode 100644 Url-Shortner/node_modules/mongoose/node_modules/ms/package.json create mode 100644 Url-Shortner/node_modules/mongoose/node_modules/ms/readme.md create mode 100644 Url-Shortner/node_modules/mongoose/package.json create mode 100644 Url-Shortner/node_modules/mongoose/scripts/build-browser.js create mode 100644 Url-Shortner/node_modules/mongoose/scripts/create-tarball.js create mode 100644 Url-Shortner/node_modules/mongoose/scripts/generateSearch.js create mode 100644 Url-Shortner/node_modules/mongoose/scripts/loadSponsorData.js create mode 100644 Url-Shortner/node_modules/mongoose/scripts/tsc-diagnostics-check.js create mode 100644 Url-Shortner/node_modules/mongoose/tools/auth.js create mode 100644 Url-Shortner/node_modules/mongoose/tools/repl.js create mode 100644 Url-Shortner/node_modules/mongoose/tools/sharded.js create mode 100644 Url-Shortner/node_modules/mongoose/tsconfig.json create mode 100644 Url-Shortner/node_modules/mongoose/types/aggregate.d.ts create mode 100644 Url-Shortner/node_modules/mongoose/types/augmentations.d.ts create mode 100644 Url-Shortner/node_modules/mongoose/types/callback.d.ts create mode 100644 Url-Shortner/node_modules/mongoose/types/collection.d.ts create mode 100644 Url-Shortner/node_modules/mongoose/types/connection.d.ts create mode 100644 Url-Shortner/node_modules/mongoose/types/cursor.d.ts create mode 100644 Url-Shortner/node_modules/mongoose/types/document.d.ts create mode 100644 Url-Shortner/node_modules/mongoose/types/error.d.ts create mode 100644 Url-Shortner/node_modules/mongoose/types/expressions.d.ts create mode 100644 Url-Shortner/node_modules/mongoose/types/helpers.d.ts create mode 100644 Url-Shortner/node_modules/mongoose/types/index.d.ts create mode 100644 Url-Shortner/node_modules/mongoose/types/indexes.d.ts create mode 100644 Url-Shortner/node_modules/mongoose/types/inferschematype.d.ts create mode 100644 Url-Shortner/node_modules/mongoose/types/middlewares.d.ts create mode 100644 Url-Shortner/node_modules/mongoose/types/models.d.ts create mode 100644 Url-Shortner/node_modules/mongoose/types/mongooseoptions.d.ts create mode 100644 Url-Shortner/node_modules/mongoose/types/pipelinestage.d.ts create mode 100644 Url-Shortner/node_modules/mongoose/types/populate.d.ts create mode 100644 Url-Shortner/node_modules/mongoose/types/query.d.ts create mode 100644 Url-Shortner/node_modules/mongoose/types/schemaoptions.d.ts create mode 100644 Url-Shortner/node_modules/mongoose/types/schematypes.d.ts create mode 100644 Url-Shortner/node_modules/mongoose/types/session.d.ts create mode 100644 Url-Shortner/node_modules/mongoose/types/types.d.ts create mode 100644 Url-Shortner/node_modules/mongoose/types/utility.d.ts create mode 100644 Url-Shortner/node_modules/mongoose/types/validation.d.ts create mode 100644 Url-Shortner/node_modules/mongoose/types/virtuals.d.ts create mode 100644 Url-Shortner/node_modules/mpath/.travis.yml create mode 100644 Url-Shortner/node_modules/mpath/History.md create mode 100644 Url-Shortner/node_modules/mpath/LICENSE create mode 100644 Url-Shortner/node_modules/mpath/README.md create mode 100644 Url-Shortner/node_modules/mpath/SECURITY.md create mode 100644 Url-Shortner/node_modules/mpath/index.js create mode 100644 Url-Shortner/node_modules/mpath/lib/index.js create mode 100644 Url-Shortner/node_modules/mpath/lib/stringToParts.js create mode 100644 Url-Shortner/node_modules/mpath/package.json create mode 100644 Url-Shortner/node_modules/mpath/test/.eslintrc.yml create mode 100644 Url-Shortner/node_modules/mpath/test/index.js create mode 100644 Url-Shortner/node_modules/mpath/test/stringToParts.js create mode 100644 Url-Shortner/node_modules/mquery/.github/ISSUE_TEMPLATE.md create mode 100644 Url-Shortner/node_modules/mquery/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 Url-Shortner/node_modules/mquery/History.md create mode 100644 Url-Shortner/node_modules/mquery/LICENSE create mode 100644 Url-Shortner/node_modules/mquery/README.md create mode 100644 Url-Shortner/node_modules/mquery/SECURITY.md create mode 100644 Url-Shortner/node_modules/mquery/lib/collection/collection.js create mode 100644 Url-Shortner/node_modules/mquery/lib/collection/index.js create mode 100644 Url-Shortner/node_modules/mquery/lib/collection/node.js create mode 100644 Url-Shortner/node_modules/mquery/lib/env.js create mode 100644 Url-Shortner/node_modules/mquery/lib/mquery.js create mode 100644 Url-Shortner/node_modules/mquery/lib/permissions.js create mode 100644 Url-Shortner/node_modules/mquery/lib/utils.js create mode 100644 Url-Shortner/node_modules/mquery/node_modules/debug/LICENSE create mode 100644 Url-Shortner/node_modules/mquery/node_modules/debug/README.md create mode 100644 Url-Shortner/node_modules/mquery/node_modules/debug/package.json create mode 100644 Url-Shortner/node_modules/mquery/node_modules/debug/src/browser.js create mode 100644 Url-Shortner/node_modules/mquery/node_modules/debug/src/common.js create mode 100644 Url-Shortner/node_modules/mquery/node_modules/debug/src/index.js create mode 100644 Url-Shortner/node_modules/mquery/node_modules/debug/src/node.js create mode 100644 Url-Shortner/node_modules/mquery/node_modules/ms/index.js create mode 100644 Url-Shortner/node_modules/mquery/node_modules/ms/license.md create mode 100644 Url-Shortner/node_modules/mquery/node_modules/ms/package.json create mode 100644 Url-Shortner/node_modules/mquery/node_modules/ms/readme.md create mode 100644 Url-Shortner/node_modules/mquery/package.json create mode 100644 Url-Shortner/node_modules/ms/index.js create mode 100644 Url-Shortner/node_modules/ms/license.md create mode 100644 Url-Shortner/node_modules/ms/package.json create mode 100644 Url-Shortner/node_modules/ms/readme.md create mode 100644 Url-Shortner/node_modules/nanoid/LICENSE create mode 100644 Url-Shortner/node_modules/nanoid/README.md create mode 100644 Url-Shortner/node_modules/nanoid/bin/nanoid.js create mode 100644 Url-Shortner/node_modules/nanoid/index.browser.js create mode 100644 Url-Shortner/node_modules/nanoid/index.d.ts create mode 100644 Url-Shortner/node_modules/nanoid/index.js create mode 100644 Url-Shortner/node_modules/nanoid/nanoid.js create mode 100644 Url-Shortner/node_modules/nanoid/non-secure/index.d.ts create mode 100644 Url-Shortner/node_modules/nanoid/non-secure/index.js create mode 100644 Url-Shortner/node_modules/nanoid/package.json create mode 100644 Url-Shortner/node_modules/nanoid/url-alphabet/index.js create mode 100644 Url-Shortner/node_modules/negotiator/HISTORY.md create mode 100644 Url-Shortner/node_modules/negotiator/LICENSE create mode 100644 Url-Shortner/node_modules/negotiator/README.md create mode 100644 Url-Shortner/node_modules/negotiator/index.js create mode 100644 Url-Shortner/node_modules/negotiator/lib/charset.js create mode 100644 Url-Shortner/node_modules/negotiator/lib/encoding.js create mode 100644 Url-Shortner/node_modules/negotiator/lib/language.js create mode 100644 Url-Shortner/node_modules/negotiator/lib/mediaType.js create mode 100644 Url-Shortner/node_modules/negotiator/package.json create mode 100644 Url-Shortner/node_modules/object-inspect/.eslintrc create mode 100644 Url-Shortner/node_modules/object-inspect/.github/FUNDING.yml create mode 100644 Url-Shortner/node_modules/object-inspect/.nycrc create mode 100644 Url-Shortner/node_modules/object-inspect/CHANGELOG.md create mode 100644 Url-Shortner/node_modules/object-inspect/LICENSE create mode 100644 Url-Shortner/node_modules/object-inspect/example/all.js create mode 100644 Url-Shortner/node_modules/object-inspect/example/circular.js create mode 100644 Url-Shortner/node_modules/object-inspect/example/fn.js create mode 100644 Url-Shortner/node_modules/object-inspect/example/inspect.js create mode 100644 Url-Shortner/node_modules/object-inspect/index.js create mode 100644 Url-Shortner/node_modules/object-inspect/package-support.json create mode 100644 Url-Shortner/node_modules/object-inspect/package.json create mode 100644 Url-Shortner/node_modules/object-inspect/readme.markdown create mode 100644 Url-Shortner/node_modules/object-inspect/test-core-js.js create mode 100644 Url-Shortner/node_modules/object-inspect/test/bigint.js create mode 100644 Url-Shortner/node_modules/object-inspect/test/browser/dom.js create mode 100644 Url-Shortner/node_modules/object-inspect/test/circular.js create mode 100644 Url-Shortner/node_modules/object-inspect/test/deep.js create mode 100644 Url-Shortner/node_modules/object-inspect/test/element.js create mode 100644 Url-Shortner/node_modules/object-inspect/test/err.js create mode 100644 Url-Shortner/node_modules/object-inspect/test/fakes.js create mode 100644 Url-Shortner/node_modules/object-inspect/test/fn.js create mode 100644 Url-Shortner/node_modules/object-inspect/test/has.js create mode 100644 Url-Shortner/node_modules/object-inspect/test/holes.js create mode 100644 Url-Shortner/node_modules/object-inspect/test/indent-option.js create mode 100644 Url-Shortner/node_modules/object-inspect/test/inspect.js create mode 100644 Url-Shortner/node_modules/object-inspect/test/lowbyte.js create mode 100644 Url-Shortner/node_modules/object-inspect/test/number.js create mode 100644 Url-Shortner/node_modules/object-inspect/test/quoteStyle.js create mode 100644 Url-Shortner/node_modules/object-inspect/test/toStringTag.js create mode 100644 Url-Shortner/node_modules/object-inspect/test/undef.js create mode 100644 Url-Shortner/node_modules/object-inspect/test/values.js create mode 100644 Url-Shortner/node_modules/object-inspect/util.inspect.js create mode 100644 Url-Shortner/node_modules/on-finished/HISTORY.md create mode 100644 Url-Shortner/node_modules/on-finished/LICENSE create mode 100644 Url-Shortner/node_modules/on-finished/README.md create mode 100644 Url-Shortner/node_modules/on-finished/index.js create mode 100644 Url-Shortner/node_modules/on-finished/package.json create mode 100644 Url-Shortner/node_modules/parseurl/HISTORY.md create mode 100644 Url-Shortner/node_modules/parseurl/LICENSE create mode 100644 Url-Shortner/node_modules/parseurl/README.md create mode 100644 Url-Shortner/node_modules/parseurl/index.js create mode 100644 Url-Shortner/node_modules/parseurl/package.json create mode 100644 Url-Shortner/node_modules/path-to-regexp/History.md create mode 100644 Url-Shortner/node_modules/path-to-regexp/LICENSE create mode 100644 Url-Shortner/node_modules/path-to-regexp/Readme.md create mode 100644 Url-Shortner/node_modules/path-to-regexp/index.js create mode 100644 Url-Shortner/node_modules/path-to-regexp/package.json create mode 100644 Url-Shortner/node_modules/proxy-addr/HISTORY.md create mode 100644 Url-Shortner/node_modules/proxy-addr/LICENSE create mode 100644 Url-Shortner/node_modules/proxy-addr/README.md create mode 100644 Url-Shortner/node_modules/proxy-addr/index.js create mode 100644 Url-Shortner/node_modules/proxy-addr/package.json create mode 100644 Url-Shortner/node_modules/punycode/LICENSE-MIT.txt create mode 100644 Url-Shortner/node_modules/punycode/README.md create mode 100644 Url-Shortner/node_modules/punycode/package.json create mode 100644 Url-Shortner/node_modules/punycode/punycode.es6.js create mode 100644 Url-Shortner/node_modules/punycode/punycode.js create mode 100644 Url-Shortner/node_modules/qs/.editorconfig create mode 100644 Url-Shortner/node_modules/qs/.eslintrc create mode 100644 Url-Shortner/node_modules/qs/.github/FUNDING.yml create mode 100644 Url-Shortner/node_modules/qs/.nycrc create mode 100644 Url-Shortner/node_modules/qs/CHANGELOG.md create mode 100644 Url-Shortner/node_modules/qs/LICENSE.md create mode 100644 Url-Shortner/node_modules/qs/README.md create mode 100644 Url-Shortner/node_modules/qs/dist/qs.js create mode 100644 Url-Shortner/node_modules/qs/lib/formats.js create mode 100644 Url-Shortner/node_modules/qs/lib/index.js create mode 100644 Url-Shortner/node_modules/qs/lib/parse.js create mode 100644 Url-Shortner/node_modules/qs/lib/stringify.js create mode 100644 Url-Shortner/node_modules/qs/lib/utils.js create mode 100644 Url-Shortner/node_modules/qs/package.json create mode 100644 Url-Shortner/node_modules/qs/test/parse.js create mode 100644 Url-Shortner/node_modules/qs/test/stringify.js create mode 100644 Url-Shortner/node_modules/qs/test/utils.js create mode 100644 Url-Shortner/node_modules/range-parser/HISTORY.md create mode 100644 Url-Shortner/node_modules/range-parser/LICENSE create mode 100644 Url-Shortner/node_modules/range-parser/README.md create mode 100644 Url-Shortner/node_modules/range-parser/index.js create mode 100644 Url-Shortner/node_modules/range-parser/package.json create mode 100644 Url-Shortner/node_modules/raw-body/HISTORY.md create mode 100644 Url-Shortner/node_modules/raw-body/LICENSE create mode 100644 Url-Shortner/node_modules/raw-body/README.md create mode 100644 Url-Shortner/node_modules/raw-body/SECURITY.md create mode 100644 Url-Shortner/node_modules/raw-body/index.d.ts create mode 100644 Url-Shortner/node_modules/raw-body/index.js create mode 100644 Url-Shortner/node_modules/raw-body/package.json create mode 100644 Url-Shortner/node_modules/safe-buffer/LICENSE create mode 100644 Url-Shortner/node_modules/safe-buffer/README.md create mode 100644 Url-Shortner/node_modules/safe-buffer/index.d.ts create mode 100644 Url-Shortner/node_modules/safe-buffer/index.js create mode 100644 Url-Shortner/node_modules/safe-buffer/package.json create mode 100644 Url-Shortner/node_modules/safer-buffer/LICENSE create mode 100644 Url-Shortner/node_modules/safer-buffer/Porting-Buffer.md create mode 100644 Url-Shortner/node_modules/safer-buffer/Readme.md create mode 100644 Url-Shortner/node_modules/safer-buffer/dangerous.js create mode 100644 Url-Shortner/node_modules/safer-buffer/package.json create mode 100644 Url-Shortner/node_modules/safer-buffer/safer.js create mode 100644 Url-Shortner/node_modules/safer-buffer/tests.js create mode 100644 Url-Shortner/node_modules/send/HISTORY.md create mode 100644 Url-Shortner/node_modules/send/LICENSE create mode 100644 Url-Shortner/node_modules/send/README.md create mode 100644 Url-Shortner/node_modules/send/SECURITY.md create mode 100644 Url-Shortner/node_modules/send/index.js create mode 100644 Url-Shortner/node_modules/send/node_modules/ms/index.js create mode 100644 Url-Shortner/node_modules/send/node_modules/ms/license.md create mode 100644 Url-Shortner/node_modules/send/node_modules/ms/package.json create mode 100644 Url-Shortner/node_modules/send/node_modules/ms/readme.md create mode 100644 Url-Shortner/node_modules/send/package.json create mode 100644 Url-Shortner/node_modules/serve-static/HISTORY.md create mode 100644 Url-Shortner/node_modules/serve-static/LICENSE create mode 100644 Url-Shortner/node_modules/serve-static/README.md create mode 100644 Url-Shortner/node_modules/serve-static/index.js create mode 100644 Url-Shortner/node_modules/serve-static/package.json create mode 100644 Url-Shortner/node_modules/setprototypeof/LICENSE create mode 100644 Url-Shortner/node_modules/setprototypeof/README.md create mode 100644 Url-Shortner/node_modules/setprototypeof/index.d.ts create mode 100644 Url-Shortner/node_modules/setprototypeof/index.js create mode 100644 Url-Shortner/node_modules/setprototypeof/package.json create mode 100644 Url-Shortner/node_modules/setprototypeof/test/index.js create mode 100644 Url-Shortner/node_modules/shortid/CHANGELOG.md create mode 100644 Url-Shortner/node_modules/shortid/LICENSE create mode 100644 Url-Shortner/node_modules/shortid/README.md create mode 100644 Url-Shortner/node_modules/shortid/index.js create mode 100644 Url-Shortner/node_modules/shortid/lib/alphabet.js create mode 100644 Url-Shortner/node_modules/shortid/lib/build.js create mode 100644 Url-Shortner/node_modules/shortid/lib/generate.js create mode 100644 Url-Shortner/node_modules/shortid/lib/index.js create mode 100644 Url-Shortner/node_modules/shortid/lib/is-valid.js create mode 100644 Url-Shortner/node_modules/shortid/lib/random/random-byte-browser.js create mode 100644 Url-Shortner/node_modules/shortid/lib/random/random-byte.js create mode 100644 Url-Shortner/node_modules/shortid/lib/random/random-from-seed.js create mode 100644 Url-Shortner/node_modules/shortid/lib/util/cluster-worker-id-browser.js create mode 100644 Url-Shortner/node_modules/shortid/lib/util/cluster-worker-id.js create mode 100644 Url-Shortner/node_modules/shortid/node_modules/nanoid/CHANGELOG.md create mode 100644 Url-Shortner/node_modules/shortid/node_modules/nanoid/LICENSE create mode 100644 Url-Shortner/node_modules/shortid/node_modules/nanoid/README.md create mode 100644 Url-Shortner/node_modules/shortid/node_modules/nanoid/async/format.browser.js create mode 100644 Url-Shortner/node_modules/shortid/node_modules/nanoid/async/format.js create mode 100644 Url-Shortner/node_modules/shortid/node_modules/nanoid/async/generate.js create mode 100644 Url-Shortner/node_modules/shortid/node_modules/nanoid/async/index.browser.js create mode 100644 Url-Shortner/node_modules/shortid/node_modules/nanoid/async/index.js create mode 100644 Url-Shortner/node_modules/shortid/node_modules/nanoid/async/random.browser.js create mode 100644 Url-Shortner/node_modules/shortid/node_modules/nanoid/async/random.js create mode 100644 Url-Shortner/node_modules/shortid/node_modules/nanoid/async/random.rn.js create mode 100644 Url-Shortner/node_modules/shortid/node_modules/nanoid/format.browser.js create mode 100644 Url-Shortner/node_modules/shortid/node_modules/nanoid/format.js create mode 100644 Url-Shortner/node_modules/shortid/node_modules/nanoid/generate.js create mode 100644 Url-Shortner/node_modules/shortid/node_modules/nanoid/index.browser.js create mode 100644 Url-Shortner/node_modules/shortid/node_modules/nanoid/index.js create mode 100644 Url-Shortner/node_modules/shortid/node_modules/nanoid/non-secure/generate.js create mode 100644 Url-Shortner/node_modules/shortid/node_modules/nanoid/non-secure/index.js create mode 100644 Url-Shortner/node_modules/shortid/node_modules/nanoid/package.json create mode 100644 Url-Shortner/node_modules/shortid/node_modules/nanoid/random.browser.js create mode 100644 Url-Shortner/node_modules/shortid/node_modules/nanoid/random.js create mode 100644 Url-Shortner/node_modules/shortid/node_modules/nanoid/url.js create mode 100644 Url-Shortner/node_modules/shortid/package.json create mode 100644 Url-Shortner/node_modules/side-channel/.eslintignore create mode 100644 Url-Shortner/node_modules/side-channel/.eslintrc create mode 100644 Url-Shortner/node_modules/side-channel/.github/FUNDING.yml create mode 100644 Url-Shortner/node_modules/side-channel/.nycrc create mode 100644 Url-Shortner/node_modules/side-channel/CHANGELOG.md create mode 100644 Url-Shortner/node_modules/side-channel/LICENSE create mode 100644 Url-Shortner/node_modules/side-channel/README.md create mode 100644 Url-Shortner/node_modules/side-channel/index.js create mode 100644 Url-Shortner/node_modules/side-channel/package.json create mode 100644 Url-Shortner/node_modules/side-channel/test/index.js create mode 100644 Url-Shortner/node_modules/sift/MIT-LICENSE.txt create mode 100644 Url-Shortner/node_modules/sift/README.md create mode 100644 Url-Shortner/node_modules/sift/es/index.js create mode 100644 Url-Shortner/node_modules/sift/es/index.js.map create mode 100644 Url-Shortner/node_modules/sift/es5m/index.js create mode 100644 Url-Shortner/node_modules/sift/es5m/index.js.map create mode 100644 Url-Shortner/node_modules/sift/index.d.ts create mode 100644 Url-Shortner/node_modules/sift/index.js create mode 100644 Url-Shortner/node_modules/sift/lib/core.d.ts create mode 100644 Url-Shortner/node_modules/sift/lib/index.d.ts create mode 100644 Url-Shortner/node_modules/sift/lib/index.js create mode 100644 Url-Shortner/node_modules/sift/lib/index.js.map create mode 100644 Url-Shortner/node_modules/sift/lib/operations.d.ts create mode 100644 Url-Shortner/node_modules/sift/lib/utils.d.ts create mode 100644 Url-Shortner/node_modules/sift/package.json create mode 100644 Url-Shortner/node_modules/sift/sift.csp.min.js create mode 100644 Url-Shortner/node_modules/sift/sift.csp.min.js.map create mode 100644 Url-Shortner/node_modules/sift/sift.min.js create mode 100644 Url-Shortner/node_modules/sift/sift.min.js.map create mode 100644 Url-Shortner/node_modules/sift/src/core.d.ts create mode 100644 Url-Shortner/node_modules/sift/src/core.js create mode 100644 Url-Shortner/node_modules/sift/src/core.js.map create mode 100644 Url-Shortner/node_modules/sift/src/core.ts create mode 100644 Url-Shortner/node_modules/sift/src/index.d.ts create mode 100644 Url-Shortner/node_modules/sift/src/index.js create mode 100644 Url-Shortner/node_modules/sift/src/index.js.map create mode 100644 Url-Shortner/node_modules/sift/src/index.ts create mode 100644 Url-Shortner/node_modules/sift/src/operations.d.ts create mode 100644 Url-Shortner/node_modules/sift/src/operations.js create mode 100644 Url-Shortner/node_modules/sift/src/operations.js.map create mode 100644 Url-Shortner/node_modules/sift/src/operations.ts create mode 100644 Url-Shortner/node_modules/sift/src/utils.d.ts create mode 100644 Url-Shortner/node_modules/sift/src/utils.js create mode 100644 Url-Shortner/node_modules/sift/src/utils.js.map create mode 100644 Url-Shortner/node_modules/sift/src/utils.ts create mode 100644 Url-Shortner/node_modules/smart-buffer/.prettierrc.yaml create mode 100644 Url-Shortner/node_modules/smart-buffer/.travis.yml create mode 100644 Url-Shortner/node_modules/smart-buffer/LICENSE create mode 100644 Url-Shortner/node_modules/smart-buffer/README.md create mode 100644 Url-Shortner/node_modules/smart-buffer/build/smartbuffer.js create mode 100644 Url-Shortner/node_modules/smart-buffer/build/smartbuffer.js.map create mode 100644 Url-Shortner/node_modules/smart-buffer/build/utils.js create mode 100644 Url-Shortner/node_modules/smart-buffer/build/utils.js.map create mode 100644 Url-Shortner/node_modules/smart-buffer/docs/CHANGELOG.md create mode 100644 Url-Shortner/node_modules/smart-buffer/docs/README_v3.md create mode 100644 Url-Shortner/node_modules/smart-buffer/docs/ROADMAP.md create mode 100644 Url-Shortner/node_modules/smart-buffer/package.json create mode 100644 Url-Shortner/node_modules/smart-buffer/typings/smartbuffer.d.ts create mode 100644 Url-Shortner/node_modules/smart-buffer/typings/utils.d.ts create mode 100644 Url-Shortner/node_modules/socks/.eslintrc.cjs create mode 100644 Url-Shortner/node_modules/socks/.prettierrc.yaml create mode 100644 Url-Shortner/node_modules/socks/LICENSE create mode 100644 Url-Shortner/node_modules/socks/README.md create mode 100644 Url-Shortner/node_modules/socks/build/client/socksclient.js create mode 100644 Url-Shortner/node_modules/socks/build/client/socksclient.js.map create mode 100644 Url-Shortner/node_modules/socks/build/common/constants.js create mode 100644 Url-Shortner/node_modules/socks/build/common/constants.js.map create mode 100644 Url-Shortner/node_modules/socks/build/common/helpers.js create mode 100644 Url-Shortner/node_modules/socks/build/common/helpers.js.map create mode 100644 Url-Shortner/node_modules/socks/build/common/receivebuffer.js create mode 100644 Url-Shortner/node_modules/socks/build/common/receivebuffer.js.map create mode 100644 Url-Shortner/node_modules/socks/build/common/util.js create mode 100644 Url-Shortner/node_modules/socks/build/common/util.js.map create mode 100644 Url-Shortner/node_modules/socks/build/index.js create mode 100644 Url-Shortner/node_modules/socks/build/index.js.map create mode 100644 Url-Shortner/node_modules/socks/docs/examples/index.md create mode 100644 Url-Shortner/node_modules/socks/docs/examples/javascript/associateExample.md create mode 100644 Url-Shortner/node_modules/socks/docs/examples/javascript/bindExample.md create mode 100644 Url-Shortner/node_modules/socks/docs/examples/javascript/connectExample.md create mode 100644 Url-Shortner/node_modules/socks/docs/examples/typescript/associateExample.md create mode 100644 Url-Shortner/node_modules/socks/docs/examples/typescript/bindExample.md create mode 100644 Url-Shortner/node_modules/socks/docs/examples/typescript/connectExample.md create mode 100644 Url-Shortner/node_modules/socks/docs/index.md create mode 100644 Url-Shortner/node_modules/socks/docs/migratingFromV1.md create mode 100644 Url-Shortner/node_modules/socks/package.json create mode 100644 Url-Shortner/node_modules/socks/typings/client/socksclient.d.ts create mode 100644 Url-Shortner/node_modules/socks/typings/common/constants.d.ts create mode 100644 Url-Shortner/node_modules/socks/typings/common/helpers.d.ts create mode 100644 Url-Shortner/node_modules/socks/typings/common/receivebuffer.d.ts create mode 100644 Url-Shortner/node_modules/socks/typings/common/util.d.ts create mode 100644 Url-Shortner/node_modules/socks/typings/index.d.ts create mode 100644 Url-Shortner/node_modules/sparse-bitfield/.npmignore create mode 100644 Url-Shortner/node_modules/sparse-bitfield/.travis.yml create mode 100644 Url-Shortner/node_modules/sparse-bitfield/LICENSE create mode 100644 Url-Shortner/node_modules/sparse-bitfield/README.md create mode 100644 Url-Shortner/node_modules/sparse-bitfield/index.js create mode 100644 Url-Shortner/node_modules/sparse-bitfield/package.json create mode 100644 Url-Shortner/node_modules/sparse-bitfield/test.js create mode 100644 Url-Shortner/node_modules/statuses/HISTORY.md create mode 100644 Url-Shortner/node_modules/statuses/LICENSE create mode 100644 Url-Shortner/node_modules/statuses/README.md create mode 100644 Url-Shortner/node_modules/statuses/codes.json create mode 100644 Url-Shortner/node_modules/statuses/index.js create mode 100644 Url-Shortner/node_modules/statuses/package.json create mode 100644 Url-Shortner/node_modules/supports-color/browser.js create mode 100644 Url-Shortner/node_modules/supports-color/index.js create mode 100644 Url-Shortner/node_modules/supports-color/license create mode 100644 Url-Shortner/node_modules/supports-color/package.json create mode 100644 Url-Shortner/node_modules/supports-color/readme.md create mode 100644 Url-Shortner/node_modules/toidentifier/HISTORY.md create mode 100644 Url-Shortner/node_modules/toidentifier/LICENSE create mode 100644 Url-Shortner/node_modules/toidentifier/README.md create mode 100644 Url-Shortner/node_modules/toidentifier/index.js create mode 100644 Url-Shortner/node_modules/toidentifier/package.json create mode 100644 Url-Shortner/node_modules/tr46/LICENSE.md create mode 100644 Url-Shortner/node_modules/tr46/README.md create mode 100644 Url-Shortner/node_modules/tr46/index.js create mode 100644 Url-Shortner/node_modules/tr46/lib/mappingTable.json create mode 100644 Url-Shortner/node_modules/tr46/lib/regexes.js create mode 100644 Url-Shortner/node_modules/tr46/lib/statusMapping.js create mode 100644 Url-Shortner/node_modules/tr46/package.json create mode 100644 Url-Shortner/node_modules/type-is/HISTORY.md create mode 100644 Url-Shortner/node_modules/type-is/LICENSE create mode 100644 Url-Shortner/node_modules/type-is/README.md create mode 100644 Url-Shortner/node_modules/type-is/index.js create mode 100644 Url-Shortner/node_modules/type-is/package.json create mode 100644 Url-Shortner/node_modules/unpipe/HISTORY.md create mode 100644 Url-Shortner/node_modules/unpipe/LICENSE create mode 100644 Url-Shortner/node_modules/unpipe/README.md create mode 100644 Url-Shortner/node_modules/unpipe/index.js create mode 100644 Url-Shortner/node_modules/unpipe/package.json create mode 100644 Url-Shortner/node_modules/utils-merge/.npmignore create mode 100644 Url-Shortner/node_modules/utils-merge/LICENSE create mode 100644 Url-Shortner/node_modules/utils-merge/README.md create mode 100644 Url-Shortner/node_modules/utils-merge/index.js create mode 100644 Url-Shortner/node_modules/utils-merge/package.json create mode 100644 Url-Shortner/node_modules/uuid/CHANGELOG.md create mode 100644 Url-Shortner/node_modules/uuid/CONTRIBUTING.md create mode 100644 Url-Shortner/node_modules/uuid/LICENSE.md create mode 100644 Url-Shortner/node_modules/uuid/README.md create mode 100644 Url-Shortner/node_modules/uuid/dist/bin/uuid create mode 100644 Url-Shortner/node_modules/uuid/dist/commonjs-browser/index.js create mode 100644 Url-Shortner/node_modules/uuid/dist/commonjs-browser/md5.js create mode 100644 Url-Shortner/node_modules/uuid/dist/commonjs-browser/native.js create mode 100644 Url-Shortner/node_modules/uuid/dist/commonjs-browser/nil.js create mode 100644 Url-Shortner/node_modules/uuid/dist/commonjs-browser/parse.js create mode 100644 Url-Shortner/node_modules/uuid/dist/commonjs-browser/regex.js create mode 100644 Url-Shortner/node_modules/uuid/dist/commonjs-browser/rng.js create mode 100644 Url-Shortner/node_modules/uuid/dist/commonjs-browser/sha1.js create mode 100644 Url-Shortner/node_modules/uuid/dist/commonjs-browser/stringify.js create mode 100644 Url-Shortner/node_modules/uuid/dist/commonjs-browser/v1.js create mode 100644 Url-Shortner/node_modules/uuid/dist/commonjs-browser/v3.js create mode 100644 Url-Shortner/node_modules/uuid/dist/commonjs-browser/v35.js create mode 100644 Url-Shortner/node_modules/uuid/dist/commonjs-browser/v4.js create mode 100644 Url-Shortner/node_modules/uuid/dist/commonjs-browser/v5.js create mode 100644 Url-Shortner/node_modules/uuid/dist/commonjs-browser/validate.js create mode 100644 Url-Shortner/node_modules/uuid/dist/commonjs-browser/version.js create mode 100644 Url-Shortner/node_modules/uuid/dist/esm-browser/index.js create mode 100644 Url-Shortner/node_modules/uuid/dist/esm-browser/md5.js create mode 100644 Url-Shortner/node_modules/uuid/dist/esm-browser/native.js create mode 100644 Url-Shortner/node_modules/uuid/dist/esm-browser/nil.js create mode 100644 Url-Shortner/node_modules/uuid/dist/esm-browser/parse.js create mode 100644 Url-Shortner/node_modules/uuid/dist/esm-browser/regex.js create mode 100644 Url-Shortner/node_modules/uuid/dist/esm-browser/rng.js create mode 100644 Url-Shortner/node_modules/uuid/dist/esm-browser/sha1.js create mode 100644 Url-Shortner/node_modules/uuid/dist/esm-browser/stringify.js create mode 100644 Url-Shortner/node_modules/uuid/dist/esm-browser/v1.js create mode 100644 Url-Shortner/node_modules/uuid/dist/esm-browser/v3.js create mode 100644 Url-Shortner/node_modules/uuid/dist/esm-browser/v35.js create mode 100644 Url-Shortner/node_modules/uuid/dist/esm-browser/v4.js create mode 100644 Url-Shortner/node_modules/uuid/dist/esm-browser/v5.js create mode 100644 Url-Shortner/node_modules/uuid/dist/esm-browser/validate.js create mode 100644 Url-Shortner/node_modules/uuid/dist/esm-browser/version.js create mode 100644 Url-Shortner/node_modules/uuid/dist/esm-node/index.js create mode 100644 Url-Shortner/node_modules/uuid/dist/esm-node/md5.js create mode 100644 Url-Shortner/node_modules/uuid/dist/esm-node/native.js create mode 100644 Url-Shortner/node_modules/uuid/dist/esm-node/nil.js create mode 100644 Url-Shortner/node_modules/uuid/dist/esm-node/parse.js create mode 100644 Url-Shortner/node_modules/uuid/dist/esm-node/regex.js create mode 100644 Url-Shortner/node_modules/uuid/dist/esm-node/rng.js create mode 100644 Url-Shortner/node_modules/uuid/dist/esm-node/sha1.js create mode 100644 Url-Shortner/node_modules/uuid/dist/esm-node/stringify.js create mode 100644 Url-Shortner/node_modules/uuid/dist/esm-node/v1.js create mode 100644 Url-Shortner/node_modules/uuid/dist/esm-node/v3.js create mode 100644 Url-Shortner/node_modules/uuid/dist/esm-node/v35.js create mode 100644 Url-Shortner/node_modules/uuid/dist/esm-node/v4.js create mode 100644 Url-Shortner/node_modules/uuid/dist/esm-node/v5.js create mode 100644 Url-Shortner/node_modules/uuid/dist/esm-node/validate.js create mode 100644 Url-Shortner/node_modules/uuid/dist/esm-node/version.js create mode 100644 Url-Shortner/node_modules/uuid/dist/index.js create mode 100644 Url-Shortner/node_modules/uuid/dist/md5-browser.js create mode 100644 Url-Shortner/node_modules/uuid/dist/md5.js create mode 100644 Url-Shortner/node_modules/uuid/dist/native-browser.js create mode 100644 Url-Shortner/node_modules/uuid/dist/native.js create mode 100644 Url-Shortner/node_modules/uuid/dist/nil.js create mode 100644 Url-Shortner/node_modules/uuid/dist/parse.js create mode 100644 Url-Shortner/node_modules/uuid/dist/regex.js create mode 100644 Url-Shortner/node_modules/uuid/dist/rng-browser.js create mode 100644 Url-Shortner/node_modules/uuid/dist/rng.js create mode 100644 Url-Shortner/node_modules/uuid/dist/sha1-browser.js create mode 100644 Url-Shortner/node_modules/uuid/dist/sha1.js create mode 100644 Url-Shortner/node_modules/uuid/dist/stringify.js create mode 100644 Url-Shortner/node_modules/uuid/dist/uuid-bin.js create mode 100644 Url-Shortner/node_modules/uuid/dist/v1.js create mode 100644 Url-Shortner/node_modules/uuid/dist/v3.js create mode 100644 Url-Shortner/node_modules/uuid/dist/v35.js create mode 100644 Url-Shortner/node_modules/uuid/dist/v4.js create mode 100644 Url-Shortner/node_modules/uuid/dist/v5.js create mode 100644 Url-Shortner/node_modules/uuid/dist/validate.js create mode 100644 Url-Shortner/node_modules/uuid/dist/version.js create mode 100644 Url-Shortner/node_modules/uuid/package.json create mode 100644 Url-Shortner/node_modules/uuid/wrapper.mjs create mode 100644 Url-Shortner/node_modules/vary/HISTORY.md create mode 100644 Url-Shortner/node_modules/vary/LICENSE create mode 100644 Url-Shortner/node_modules/vary/README.md create mode 100644 Url-Shortner/node_modules/vary/index.js create mode 100644 Url-Shortner/node_modules/vary/package.json create mode 100644 Url-Shortner/node_modules/webidl-conversions/LICENSE.md create mode 100644 Url-Shortner/node_modules/webidl-conversions/README.md create mode 100644 Url-Shortner/node_modules/webidl-conversions/lib/index.js create mode 100644 Url-Shortner/node_modules/webidl-conversions/package.json create mode 100644 Url-Shortner/node_modules/whatwg-url/LICENSE.txt create mode 100644 Url-Shortner/node_modules/whatwg-url/README.md create mode 100644 Url-Shortner/node_modules/whatwg-url/index.js create mode 100644 Url-Shortner/node_modules/whatwg-url/lib/Function.js create mode 100644 Url-Shortner/node_modules/whatwg-url/lib/URL-impl.js create mode 100644 Url-Shortner/node_modules/whatwg-url/lib/URL.js create mode 100644 Url-Shortner/node_modules/whatwg-url/lib/URLSearchParams-impl.js create mode 100644 Url-Shortner/node_modules/whatwg-url/lib/URLSearchParams.js create mode 100644 Url-Shortner/node_modules/whatwg-url/lib/VoidFunction.js create mode 100644 Url-Shortner/node_modules/whatwg-url/lib/encoding.js create mode 100644 Url-Shortner/node_modules/whatwg-url/lib/infra.js create mode 100644 Url-Shortner/node_modules/whatwg-url/lib/percent-encoding.js create mode 100644 Url-Shortner/node_modules/whatwg-url/lib/url-state-machine.js create mode 100644 Url-Shortner/node_modules/whatwg-url/lib/urlencoded.js create mode 100644 Url-Shortner/node_modules/whatwg-url/lib/utils.js create mode 100644 Url-Shortner/node_modules/whatwg-url/package.json create mode 100644 Url-Shortner/node_modules/whatwg-url/webidl2js-wrapper.js create mode 100644 Url-Shortner/package-lock.json create mode 100644 Url-Shortner/package.json create mode 100644 Url-Shortner/routes/staticRouter.js create mode 100644 Url-Shortner/routes/url.js create mode 100644 Url-Shortner/service/auth.js create mode 100644 Url-Shortner/views/home.ejs diff --git a/Url-Shortner/connect.js b/Url-Shortner/connect.js new file mode 100644 index 0000000..1f08161 --- /dev/null +++ b/Url-Shortner/connect.js @@ -0,0 +1,7 @@ +const mongoose=require("mongoose") +async function connectToMongoDB(url){ + return mongoose.connect(url); +} +module.exports={ + connectToMongoDB, +} \ No newline at end of file diff --git a/Url-Shortner/controllers/url.js b/Url-Shortner/controllers/url.js new file mode 100644 index 0000000..22ba5f6 --- /dev/null +++ b/Url-Shortner/controllers/url.js @@ -0,0 +1,33 @@ +const shortid = require("shortid"); +const URL = require("../models/url"); + +async function handleGenerateNewShortURL(req, res) { + const body = req.body; + if (!body.url) return res.status(400).json({ error: "url is required" }); + const shortID = shortid(); + + await URL.create({ + shortId: shortID, + redirectURL: body.url, + visitHistory: [], + + }); + + return res.render("home", { + id: shortID, + }); +} + +async function handleAnalytics(req, res) { + const shortId = req.params.shortId; + const result = await URL.findOne({ shortId }); + return res.json({ + totalClicks: result.visitHistory.length, + analytics: result.visitHistory, + }); +} + +module.exports = { + handleGenerateNewShortURL, + handleAnalytics, +}; diff --git a/Url-Shortner/index.js b/Url-Shortner/index.js new file mode 100644 index 0000000..2f22955 --- /dev/null +++ b/Url-Shortner/index.js @@ -0,0 +1,43 @@ +const express = require("express"); +const path = require("path"); +const cookieParser = require("cookie-parser"); +const { connectToMongoDB } = require("./connect"); +const URL = require("./models/url"); +const urlRoute = require("./routes/url"); +const staticRoute = require("./routes/staticRouter"); +const app = express(); +const PORT = 3000; + +connectToMongoDB(process.env.MONGODB ?? "mongodb://localhost:27017/short-url").then(() => + console.log("Mongodb connected") +); + +app.set("view engine", "ejs"); +app.set("views", path.resolve("./views")); + +app.use(express.json()); +app.use(express.urlencoded({ extended: false })); +app.use(cookieParser()); + +app.use("/url", urlRoute); + +app.use("/", staticRoute); + +app.get("/url/:shortId", async (req, res) => { + const shortId = req.params.shortId; + const entry = await URL.findOneAndUpdate( + { + shortId, + }, + { + $push: { + visitHistory: { + timestamp: Date.now(), + }, + }, + } + ); + res.redirect(entry.redirectURL); +}); + +app.listen(PORT, () => console.log(`Server Started at PORT:${PORT}`)); diff --git a/Url-Shortner/models/url.js b/Url-Shortner/models/url.js new file mode 100644 index 0000000..bb04e31 --- /dev/null +++ b/Url-Shortner/models/url.js @@ -0,0 +1,25 @@ +const mongoose = require("mongoose"); + +const urlSchema = new mongoose.Schema( + { + shortId: { + type: String, + required: true, + unique: true, + }, + redirectURL: { + type: String, + required: true, + }, + visitHistory: [{ timestamp: { type: Number } }], + createdBy: { + type: mongoose.Schema.Types.ObjectId, + ref: "users", + }, + }, + { timestamps: true } +); + +const URL = mongoose.model("url", urlSchema); + +module.exports = URL; diff --git a/Url-Shortner/node_modules/.bin/ejs b/Url-Shortner/node_modules/.bin/ejs new file mode 100644 index 0000000..002d2ac --- /dev/null +++ b/Url-Shortner/node_modules/.bin/ejs @@ -0,0 +1,12 @@ +#!/bin/sh +basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") + +case `uname` in + *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;; +esac + +if [ -x "$basedir/node" ]; then + exec "$basedir/node" "$basedir/../ejs/bin/cli.js" "$@" +else + exec node "$basedir/../ejs/bin/cli.js" "$@" +fi diff --git a/Url-Shortner/node_modules/.bin/ejs.cmd b/Url-Shortner/node_modules/.bin/ejs.cmd new file mode 100644 index 0000000..7cc2b56 --- /dev/null +++ b/Url-Shortner/node_modules/.bin/ejs.cmd @@ -0,0 +1,17 @@ +@ECHO off +GOTO start +:find_dp0 +SET dp0=%~dp0 +EXIT /b +:start +SETLOCAL +CALL :find_dp0 + +IF EXIST "%dp0%\node.exe" ( + SET "_prog=%dp0%\node.exe" +) ELSE ( + SET "_prog=node" + SET PATHEXT=%PATHEXT:;.JS;=;% +) + +endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\ejs\bin\cli.js" %* diff --git a/Url-Shortner/node_modules/.bin/ejs.ps1 b/Url-Shortner/node_modules/.bin/ejs.ps1 new file mode 100644 index 0000000..f31305e --- /dev/null +++ b/Url-Shortner/node_modules/.bin/ejs.ps1 @@ -0,0 +1,28 @@ +#!/usr/bin/env pwsh +$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent + +$exe="" +if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { + # Fix case when both the Windows and Linux builds of Node + # are installed in the same directory + $exe=".exe" +} +$ret=0 +if (Test-Path "$basedir/node$exe") { + # Support pipeline input + if ($MyInvocation.ExpectingInput) { + $input | & "$basedir/node$exe" "$basedir/../ejs/bin/cli.js" $args + } else { + & "$basedir/node$exe" "$basedir/../ejs/bin/cli.js" $args + } + $ret=$LASTEXITCODE +} else { + # Support pipeline input + if ($MyInvocation.ExpectingInput) { + $input | & "node$exe" "$basedir/../ejs/bin/cli.js" $args + } else { + & "node$exe" "$basedir/../ejs/bin/cli.js" $args + } + $ret=$LASTEXITCODE +} +exit $ret diff --git a/Url-Shortner/node_modules/.bin/jake b/Url-Shortner/node_modules/.bin/jake new file mode 100644 index 0000000..8580efe --- /dev/null +++ b/Url-Shortner/node_modules/.bin/jake @@ -0,0 +1,12 @@ +#!/bin/sh +basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") + +case `uname` in + *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;; +esac + +if [ -x "$basedir/node" ]; then + exec "$basedir/node" "$basedir/../jake/bin/cli.js" "$@" +else + exec node "$basedir/../jake/bin/cli.js" "$@" +fi diff --git a/Url-Shortner/node_modules/.bin/jake.cmd b/Url-Shortner/node_modules/.bin/jake.cmd new file mode 100644 index 0000000..1ccccef --- /dev/null +++ b/Url-Shortner/node_modules/.bin/jake.cmd @@ -0,0 +1,17 @@ +@ECHO off +GOTO start +:find_dp0 +SET dp0=%~dp0 +EXIT /b +:start +SETLOCAL +CALL :find_dp0 + +IF EXIST "%dp0%\node.exe" ( + SET "_prog=%dp0%\node.exe" +) ELSE ( + SET "_prog=node" + SET PATHEXT=%PATHEXT:;.JS;=;% +) + +endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\jake\bin\cli.js" %* diff --git a/Url-Shortner/node_modules/.bin/jake.ps1 b/Url-Shortner/node_modules/.bin/jake.ps1 new file mode 100644 index 0000000..d86e1bd --- /dev/null +++ b/Url-Shortner/node_modules/.bin/jake.ps1 @@ -0,0 +1,28 @@ +#!/usr/bin/env pwsh +$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent + +$exe="" +if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { + # Fix case when both the Windows and Linux builds of Node + # are installed in the same directory + $exe=".exe" +} +$ret=0 +if (Test-Path "$basedir/node$exe") { + # Support pipeline input + if ($MyInvocation.ExpectingInput) { + $input | & "$basedir/node$exe" "$basedir/../jake/bin/cli.js" $args + } else { + & "$basedir/node$exe" "$basedir/../jake/bin/cli.js" $args + } + $ret=$LASTEXITCODE +} else { + # Support pipeline input + if ($MyInvocation.ExpectingInput) { + $input | & "node$exe" "$basedir/../jake/bin/cli.js" $args + } else { + & "node$exe" "$basedir/../jake/bin/cli.js" $args + } + $ret=$LASTEXITCODE +} +exit $ret diff --git a/Url-Shortner/node_modules/.bin/mime b/Url-Shortner/node_modules/.bin/mime new file mode 100644 index 0000000..0a62a1b --- /dev/null +++ b/Url-Shortner/node_modules/.bin/mime @@ -0,0 +1,12 @@ +#!/bin/sh +basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") + +case `uname` in + *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;; +esac + +if [ -x "$basedir/node" ]; then + exec "$basedir/node" "$basedir/../mime/cli.js" "$@" +else + exec node "$basedir/../mime/cli.js" "$@" +fi diff --git a/Url-Shortner/node_modules/.bin/mime.cmd b/Url-Shortner/node_modules/.bin/mime.cmd new file mode 100644 index 0000000..54491f1 --- /dev/null +++ b/Url-Shortner/node_modules/.bin/mime.cmd @@ -0,0 +1,17 @@ +@ECHO off +GOTO start +:find_dp0 +SET dp0=%~dp0 +EXIT /b +:start +SETLOCAL +CALL :find_dp0 + +IF EXIST "%dp0%\node.exe" ( + SET "_prog=%dp0%\node.exe" +) ELSE ( + SET "_prog=node" + SET PATHEXT=%PATHEXT:;.JS;=;% +) + +endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\mime\cli.js" %* diff --git a/Url-Shortner/node_modules/.bin/mime.ps1 b/Url-Shortner/node_modules/.bin/mime.ps1 new file mode 100644 index 0000000..2222f40 --- /dev/null +++ b/Url-Shortner/node_modules/.bin/mime.ps1 @@ -0,0 +1,28 @@ +#!/usr/bin/env pwsh +$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent + +$exe="" +if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { + # Fix case when both the Windows and Linux builds of Node + # are installed in the same directory + $exe=".exe" +} +$ret=0 +if (Test-Path "$basedir/node$exe") { + # Support pipeline input + if ($MyInvocation.ExpectingInput) { + $input | & "$basedir/node$exe" "$basedir/../mime/cli.js" $args + } else { + & "$basedir/node$exe" "$basedir/../mime/cli.js" $args + } + $ret=$LASTEXITCODE +} else { + # Support pipeline input + if ($MyInvocation.ExpectingInput) { + $input | & "node$exe" "$basedir/../mime/cli.js" $args + } else { + & "node$exe" "$basedir/../mime/cli.js" $args + } + $ret=$LASTEXITCODE +} +exit $ret diff --git a/Url-Shortner/node_modules/.bin/nanoid b/Url-Shortner/node_modules/.bin/nanoid new file mode 100644 index 0000000..4bed61e --- /dev/null +++ b/Url-Shortner/node_modules/.bin/nanoid @@ -0,0 +1,12 @@ +#!/bin/sh +basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") + +case `uname` in + *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;; +esac + +if [ -x "$basedir/node" ]; then + exec "$basedir/node" "$basedir/../nanoid/bin/nanoid.js" "$@" +else + exec node "$basedir/../nanoid/bin/nanoid.js" "$@" +fi diff --git a/Url-Shortner/node_modules/.bin/nanoid.cmd b/Url-Shortner/node_modules/.bin/nanoid.cmd new file mode 100644 index 0000000..87f0842 --- /dev/null +++ b/Url-Shortner/node_modules/.bin/nanoid.cmd @@ -0,0 +1,17 @@ +@ECHO off +GOTO start +:find_dp0 +SET dp0=%~dp0 +EXIT /b +:start +SETLOCAL +CALL :find_dp0 + +IF EXIST "%dp0%\node.exe" ( + SET "_prog=%dp0%\node.exe" +) ELSE ( + SET "_prog=node" + SET PATHEXT=%PATHEXT:;.JS;=;% +) + +endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\nanoid\bin\nanoid.js" %* diff --git a/Url-Shortner/node_modules/.bin/nanoid.ps1 b/Url-Shortner/node_modules/.bin/nanoid.ps1 new file mode 100644 index 0000000..954cf93 --- /dev/null +++ b/Url-Shortner/node_modules/.bin/nanoid.ps1 @@ -0,0 +1,28 @@ +#!/usr/bin/env pwsh +$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent + +$exe="" +if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { + # Fix case when both the Windows and Linux builds of Node + # are installed in the same directory + $exe=".exe" +} +$ret=0 +if (Test-Path "$basedir/node$exe") { + # Support pipeline input + if ($MyInvocation.ExpectingInput) { + $input | & "$basedir/node$exe" "$basedir/../nanoid/bin/nanoid.js" $args + } else { + & "$basedir/node$exe" "$basedir/../nanoid/bin/nanoid.js" $args + } + $ret=$LASTEXITCODE +} else { + # Support pipeline input + if ($MyInvocation.ExpectingInput) { + $input | & "node$exe" "$basedir/../nanoid/bin/nanoid.js" $args + } else { + & "node$exe" "$basedir/../nanoid/bin/nanoid.js" $args + } + $ret=$LASTEXITCODE +} +exit $ret diff --git a/Url-Shortner/node_modules/.bin/uuid b/Url-Shortner/node_modules/.bin/uuid new file mode 100644 index 0000000..c3ec003 --- /dev/null +++ b/Url-Shortner/node_modules/.bin/uuid @@ -0,0 +1,12 @@ +#!/bin/sh +basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") + +case `uname` in + *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;; +esac + +if [ -x "$basedir/node" ]; then + exec "$basedir/node" "$basedir/../uuid/dist/bin/uuid" "$@" +else + exec node "$basedir/../uuid/dist/bin/uuid" "$@" +fi diff --git a/Url-Shortner/node_modules/.bin/uuid.cmd b/Url-Shortner/node_modules/.bin/uuid.cmd new file mode 100644 index 0000000..0f2376e --- /dev/null +++ b/Url-Shortner/node_modules/.bin/uuid.cmd @@ -0,0 +1,17 @@ +@ECHO off +GOTO start +:find_dp0 +SET dp0=%~dp0 +EXIT /b +:start +SETLOCAL +CALL :find_dp0 + +IF EXIST "%dp0%\node.exe" ( + SET "_prog=%dp0%\node.exe" +) ELSE ( + SET "_prog=node" + SET PATHEXT=%PATHEXT:;.JS;=;% +) + +endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\uuid\dist\bin\uuid" %* diff --git a/Url-Shortner/node_modules/.bin/uuid.ps1 b/Url-Shortner/node_modules/.bin/uuid.ps1 new file mode 100644 index 0000000..7804628 --- /dev/null +++ b/Url-Shortner/node_modules/.bin/uuid.ps1 @@ -0,0 +1,28 @@ +#!/usr/bin/env pwsh +$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent + +$exe="" +if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { + # Fix case when both the Windows and Linux builds of Node + # are installed in the same directory + $exe=".exe" +} +$ret=0 +if (Test-Path "$basedir/node$exe") { + # Support pipeline input + if ($MyInvocation.ExpectingInput) { + $input | & "$basedir/node$exe" "$basedir/../uuid/dist/bin/uuid" $args + } else { + & "$basedir/node$exe" "$basedir/../uuid/dist/bin/uuid" $args + } + $ret=$LASTEXITCODE +} else { + # Support pipeline input + if ($MyInvocation.ExpectingInput) { + $input | & "node$exe" "$basedir/../uuid/dist/bin/uuid" $args + } else { + & "node$exe" "$basedir/../uuid/dist/bin/uuid" $args + } + $ret=$LASTEXITCODE +} +exit $ret diff --git a/Url-Shortner/node_modules/.package-lock.json b/Url-Shortner/node_modules/.package-lock.json new file mode 100644 index 0000000..e037740 --- /dev/null +++ b/Url-Shortner/node_modules/.package-lock.json @@ -0,0 +1,1061 @@ +{ + "name": "urlshort", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "node_modules/@mongodb-js/saslprep": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.1.0.tgz", + "integrity": "sha512-Xfijy7HvfzzqiOAhAepF4SGN5e9leLkMvg/OPOF97XemjfVCYN/oWa75wnkc6mltMSTwY+XlbhWgUOJmkFspSw==", + "optional": true, + "dependencies": { + "sparse-bitfield": "^3.0.3" + } + }, + "node_modules/@types/node": { + "version": "20.6.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.6.5.tgz", + "integrity": "sha512-2qGq5LAOTh9izcc0+F+dToFigBWiK1phKPt7rNhOqJSr35y8rlIBjDwGtFSgAI6MGIhjwOVNSQZVdJsZJ2uR1w==" + }, + "node_modules/@types/webidl-conversions": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.1.tgz", + "integrity": "sha512-8hKOnOan+Uu+NgMaCouhg3cT9x5fFZ92Jwf+uDLXLu/MFRbXxlWwGeQY7KVHkeSft6RvY+tdxklUBuyY9eIEKg==" + }, + "node_modules/@types/whatwg-url": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-8.2.2.tgz", + "integrity": "sha512-FtQu10RWgn3D9U4aazdwIE2yzphmTJREDqNdODHrbrZmmMqI0vMheC/6NE/J1Yveaj8H+ela+YwWTjq5PGmuhA==", + "dependencies": { + "@types/node": "*", + "@types/webidl-conversions": "*" + } + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + }, + "node_modules/async": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/body-parser": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/bson": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/bson/-/bson-5.5.0.tgz", + "integrity": "sha512-B+QB4YmDx9RStKv8LLSl/aVIEV3nYJc3cJNNTK2Cd1TL+7P+cNpw9mAPeCgc5K+j01Dv6sxUzcITXDx7ZU3F0w==", + "engines": { + "node": ">=14.20.1" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-parser": { + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.6.tgz", + "integrity": "sha512-z3IzaNjdwUC2olLIB5/ITd0/setiaFMLYiZJle7xg5Fe9KWAceil7xszYfHHBtDFYLSgJduS2Ty0P1uJdPDJeA==", + "dependencies": { + "cookie": "0.4.1", + "cookie-signature": "1.0.6" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/cookie-parser/node_modules/cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, + "node_modules/ejs": { + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.9.tgz", + "integrity": "sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==", + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express": { + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "dependencies": { + "minimatch": "^5.0.1" + } + }, + "node_modules/filelist/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "node_modules/get-intrinsic": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ip": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", + "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==" + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/jake": { + "version": "10.8.7", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.7.tgz", + "integrity": "sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==", + "dependencies": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.4", + "minimatch": "^3.1.2" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/kareem": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.5.1.tgz", + "integrity": "sha512-7jFxRVm+jD+rkq3kY0iZDJfsO2/t4BBPeEb2qKn2lR/9KhuksYk5hxzfRYWMPV8P/x2d0kHD306YyWLzjjH+uA==", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memory-pager": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", + "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", + "optional": true + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=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==", + "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==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/mongodb": { + "version": "5.8.1", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-5.8.1.tgz", + "integrity": "sha512-wKyh4kZvm6NrCPH8AxyzXm3JBoEf4Xulo0aUWh3hCgwgYJxyQ1KLST86ZZaSWdj6/kxYUA3+YZuyADCE61CMSg==", + "dependencies": { + "bson": "^5.4.0", + "mongodb-connection-string-url": "^2.6.0", + "socks": "^2.7.1" + }, + "engines": { + "node": ">=14.20.1" + }, + "optionalDependencies": { + "@mongodb-js/saslprep": "^1.1.0" + }, + "peerDependencies": { + "@aws-sdk/credential-providers": "^3.188.0", + "@mongodb-js/zstd": "^1.0.0", + "kerberos": "^1.0.0 || ^2.0.0", + "mongodb-client-encryption": ">=2.3.0 <3", + "snappy": "^7.2.2" + }, + "peerDependenciesMeta": { + "@aws-sdk/credential-providers": { + "optional": true + }, + "@mongodb-js/zstd": { + "optional": true + }, + "kerberos": { + "optional": true + }, + "mongodb-client-encryption": { + "optional": true + }, + "snappy": { + "optional": true + } + } + }, + "node_modules/mongodb-connection-string-url": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.6.0.tgz", + "integrity": "sha512-WvTZlI9ab0QYtTYnuMLgobULWhokRjtC7db9LtcVfJ+Hsnyr5eo6ZtNAt3Ly24XZScGMelOcGtm7lSn0332tPQ==", + "dependencies": { + "@types/whatwg-url": "^8.2.1", + "whatwg-url": "^11.0.0" + } + }, + "node_modules/mongoose": { + "version": "7.5.2", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-7.5.2.tgz", + "integrity": "sha512-yEkmI1jfiog7QUvMWz3eB/XoA3/5DrVvSz+z3V5hnq8VtZIHC7ujEV0RKzRXwr8QNMOs+OTB7+aK7R/N/V3yXA==", + "dependencies": { + "bson": "^5.4.0", + "kareem": "2.5.1", + "mongodb": "5.8.1", + "mpath": "0.9.0", + "mquery": "5.0.0", + "ms": "2.1.3", + "sift": "16.0.1" + }, + "engines": { + "node": ">=14.20.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mongoose" + } + }, + "node_modules/mongoose/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/mpath": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.9.0.tgz", + "integrity": "sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mquery": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/mquery/-/mquery-5.0.0.tgz", + "integrity": "sha512-iQMncpmEK8R8ncT8HJGsGc9Dsp8xcgYMVSbs5jgnm1lFHTZqMJTUWTDx1LBO8+mK3tPNZWFLBghQEIOULSTHZg==", + "dependencies": { + "debug": "4.x" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/mquery/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/mquery/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/nanoid": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.0.1.tgz", + "integrity": "sha512-vWeVtV5Cw68aML/QaZvqN/3QQXc6fBfIieAlu05m7FZW2Dgb+3f0xc0TTxuJW+7u30t7iSDTV/j3kVI0oJqIfQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.js" + }, + "engines": { + "node": "^18 || >=20" + } + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/object-inspect": { + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/shortid": { + "version": "2.2.16", + "resolved": "https://registry.npmjs.org/shortid/-/shortid-2.2.16.tgz", + "integrity": "sha512-Ugt+GIZqvGXCIItnsL+lvFJOiN7RYqlGy7QE41O3YC1xbNSeDGIRO7xg2JJXIAj1cAGnOeC1r7/T9pgrtQbv4g==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dependencies": { + "nanoid": "^2.1.0" + } + }, + "node_modules/shortid/node_modules/nanoid": { + "version": "2.1.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-2.1.11.tgz", + "integrity": "sha512-s/snB+WGm6uwi0WjsZdaVcuf3KJXlfGl2LcxgwkEwJF0D/BWzVWAZW/XY4bFaiR7s0Jk3FPvlnepg1H1b1UwlA==" + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/sift": { + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/sift/-/sift-16.0.1.tgz", + "integrity": "sha512-Wv6BjQ5zbhW7VFefWusVP33T/EM0vYikCaQ2qR8yULbsilAT8/wQaXvuQ3ptGLpoKx+lihJE3y2UTgKDyyNHZQ==" + }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", + "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", + "dependencies": { + "ip": "^2.0.0", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.13.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/sparse-bitfield": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", + "integrity": "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==", + "optional": true, + "dependencies": { + "memory-pager": "^1.0.2" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tr46": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-url": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", + "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", + "dependencies": { + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + } + } +} diff --git a/Url-Shortner/node_modules/@mongodb-js/saslprep/LICENSE b/Url-Shortner/node_modules/@mongodb-js/saslprep/LICENSE new file mode 100644 index 0000000..481c7a5 --- /dev/null +++ b/Url-Shortner/node_modules/@mongodb-js/saslprep/LICENSE @@ -0,0 +1,22 @@ +Copyright (c) 2014 Dmitry Tsvettsikh + +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/Url-Shortner/node_modules/@mongodb-js/saslprep/dist/.esm-wrapper.mjs b/Url-Shortner/node_modules/@mongodb-js/saslprep/dist/.esm-wrapper.mjs new file mode 100644 index 0000000..7fc7171 --- /dev/null +++ b/Url-Shortner/node_modules/@mongodb-js/saslprep/dist/.esm-wrapper.mjs @@ -0,0 +1,4 @@ +import mod from "./index.js"; + +export default mod; +export const saslprep = mod.saslprep; diff --git a/Url-Shortner/node_modules/@mongodb-js/saslprep/dist/code-points-data.d.ts b/Url-Shortner/node_modules/@mongodb-js/saslprep/dist/code-points-data.d.ts new file mode 100644 index 0000000..cc908ec --- /dev/null +++ b/Url-Shortner/node_modules/@mongodb-js/saslprep/dist/code-points-data.d.ts @@ -0,0 +1,4 @@ +/// +declare const _default: Buffer; +export default _default; +//# sourceMappingURL=code-points-data.d.ts.map \ No newline at end of file diff --git a/Url-Shortner/node_modules/@mongodb-js/saslprep/dist/code-points-data.d.ts.map b/Url-Shortner/node_modules/@mongodb-js/saslprep/dist/code-points-data.d.ts.map new file mode 100644 index 0000000..772442e --- /dev/null +++ b/Url-Shortner/node_modules/@mongodb-js/saslprep/dist/code-points-data.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"code-points-data.d.ts","sourceRoot":"","sources":["../src/code-points-data.ts"],"names":[],"mappings":";;AAEA,wBAKE"} \ No newline at end of file diff --git a/Url-Shortner/node_modules/@mongodb-js/saslprep/dist/code-points-data.js b/Url-Shortner/node_modules/@mongodb-js/saslprep/dist/code-points-data.js new file mode 100644 index 0000000..36e458c --- /dev/null +++ b/Url-Shortner/node_modules/@mongodb-js/saslprep/dist/code-points-data.js @@ -0,0 +1,5 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const zlib_1 = require("zlib"); +exports.default = (0, zlib_1.gunzipSync)(Buffer.from('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', 'base64')); +//# sourceMappingURL=code-points-data.js.map \ No newline at end of file diff --git a/Url-Shortner/node_modules/@mongodb-js/saslprep/dist/code-points-data.js.map b/Url-Shortner/node_modules/@mongodb-js/saslprep/dist/code-points-data.js.map new file mode 100644 index 0000000..89b5e52 --- /dev/null +++ b/Url-Shortner/node_modules/@mongodb-js/saslprep/dist/code-points-data.js.map @@ -0,0 +1 @@ +{"version":3,"file":"code-points-data.js","sourceRoot":"","sources":["../src/code-points-data.ts"],"names":[],"mappings":";;AAAA,+BAAkC;AAElC,kBAAe,IAAA,iBAAU,EACvB,MAAM,CAAC,IAAI,CACT,0nFAA0nF,EAC1nF,QAAQ,CACT,CACF,CAAC"} \ No newline at end of file diff --git a/Url-Shortner/node_modules/@mongodb-js/saslprep/dist/code-points-src.d.ts b/Url-Shortner/node_modules/@mongodb-js/saslprep/dist/code-points-src.d.ts new file mode 100644 index 0000000..36b6c56 --- /dev/null +++ b/Url-Shortner/node_modules/@mongodb-js/saslprep/dist/code-points-src.d.ts @@ -0,0 +1,7 @@ +export declare const unassigned_code_points: Set; +export declare const commonly_mapped_to_nothing: Set; +export declare const non_ASCII_space_characters: Set; +export declare const prohibited_characters: Set; +export declare const bidirectional_r_al: Set; +export declare const bidirectional_l: Set; +//# sourceMappingURL=code-points-src.d.ts.map \ No newline at end of file diff --git a/Url-Shortner/node_modules/@mongodb-js/saslprep/dist/code-points-src.d.ts.map b/Url-Shortner/node_modules/@mongodb-js/saslprep/dist/code-points-src.d.ts.map new file mode 100644 index 0000000..ef0e694 --- /dev/null +++ b/Url-Shortner/node_modules/@mongodb-js/saslprep/dist/code-points-src.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"code-points-src.d.ts","sourceRoot":"","sources":["../src/code-points-src.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,sBAAsB,aA6YjC,CAAC;AAMH,eAAO,MAAM,0BAA0B,aAIrC,CAAC;AAMH,eAAO,MAAM,0BAA0B,aASrC,CAAC;AAMH,eAAO,MAAM,qBAAqB,aA6GhC,CAAC;AAMH,eAAO,MAAM,kBAAkB,aAmC7B,CAAC;AAMH,eAAO,MAAM,eAAe,aAyW1B,CAAC"} \ No newline at end of file diff --git a/Url-Shortner/node_modules/@mongodb-js/saslprep/dist/code-points-src.js b/Url-Shortner/node_modules/@mongodb-js/saslprep/dist/code-points-src.js new file mode 100644 index 0000000..2caa629 --- /dev/null +++ b/Url-Shortner/node_modules/@mongodb-js/saslprep/dist/code-points-src.js @@ -0,0 +1,881 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.bidirectional_l = exports.bidirectional_r_al = exports.prohibited_characters = exports.non_ASCII_space_characters = exports.commonly_mapped_to_nothing = exports.unassigned_code_points = void 0; +const util_1 = require("./util"); +exports.unassigned_code_points = new Set([ + 0x0221, + ...(0, util_1.range)(0x0234, 0x024f), + ...(0, util_1.range)(0x02ae, 0x02af), + ...(0, util_1.range)(0x02ef, 0x02ff), + ...(0, util_1.range)(0x0350, 0x035f), + ...(0, util_1.range)(0x0370, 0x0373), + ...(0, util_1.range)(0x0376, 0x0379), + ...(0, util_1.range)(0x037b, 0x037d), + ...(0, util_1.range)(0x037f, 0x0383), + 0x038b, + 0x038d, + 0x03a2, + 0x03cf, + ...(0, util_1.range)(0x03f7, 0x03ff), + 0x0487, + 0x04cf, + ...(0, util_1.range)(0x04f6, 0x04f7), + ...(0, util_1.range)(0x04fa, 0x04ff), + ...(0, util_1.range)(0x0510, 0x0530), + ...(0, util_1.range)(0x0557, 0x0558), + 0x0560, + 0x0588, + ...(0, util_1.range)(0x058b, 0x0590), + 0x05a2, + 0x05ba, + ...(0, util_1.range)(0x05c5, 0x05cf), + ...(0, util_1.range)(0x05eb, 0x05ef), + ...(0, util_1.range)(0x05f5, 0x060b), + ...(0, util_1.range)(0x060d, 0x061a), + ...(0, util_1.range)(0x061c, 0x061e), + 0x0620, + ...(0, util_1.range)(0x063b, 0x063f), + ...(0, util_1.range)(0x0656, 0x065f), + ...(0, util_1.range)(0x06ee, 0x06ef), + 0x06ff, + 0x070e, + ...(0, util_1.range)(0x072d, 0x072f), + ...(0, util_1.range)(0x074b, 0x077f), + ...(0, util_1.range)(0x07b2, 0x0900), + 0x0904, + ...(0, util_1.range)(0x093a, 0x093b), + ...(0, util_1.range)(0x094e, 0x094f), + ...(0, util_1.range)(0x0955, 0x0957), + ...(0, util_1.range)(0x0971, 0x0980), + 0x0984, + ...(0, util_1.range)(0x098d, 0x098e), + ...(0, util_1.range)(0x0991, 0x0992), + 0x09a9, + 0x09b1, + ...(0, util_1.range)(0x09b3, 0x09b5), + ...(0, util_1.range)(0x09ba, 0x09bb), + 0x09bd, + ...(0, util_1.range)(0x09c5, 0x09c6), + ...(0, util_1.range)(0x09c9, 0x09ca), + ...(0, util_1.range)(0x09ce, 0x09d6), + ...(0, util_1.range)(0x09d8, 0x09db), + 0x09de, + ...(0, util_1.range)(0x09e4, 0x09e5), + ...(0, util_1.range)(0x09fb, 0x0a01), + ...(0, util_1.range)(0x0a03, 0x0a04), + ...(0, util_1.range)(0x0a0b, 0x0a0e), + ...(0, util_1.range)(0x0a11, 0x0a12), + 0x0a29, + 0x0a31, + 0x0a34, + 0x0a37, + ...(0, util_1.range)(0x0a3a, 0x0a3b), + 0x0a3d, + ...(0, util_1.range)(0x0a43, 0x0a46), + ...(0, util_1.range)(0x0a49, 0x0a4a), + ...(0, util_1.range)(0x0a4e, 0x0a58), + 0x0a5d, + ...(0, util_1.range)(0x0a5f, 0x0a65), + ...(0, util_1.range)(0x0a75, 0x0a80), + 0x0a84, + 0x0a8c, + 0x0a8e, + 0x0a92, + 0x0aa9, + 0x0ab1, + 0x0ab4, + ...(0, util_1.range)(0x0aba, 0x0abb), + 0x0ac6, + 0x0aca, + ...(0, util_1.range)(0x0ace, 0x0acf), + ...(0, util_1.range)(0x0ad1, 0x0adf), + ...(0, util_1.range)(0x0ae1, 0x0ae5), + ...(0, util_1.range)(0x0af0, 0x0b00), + 0x0b04, + ...(0, util_1.range)(0x0b0d, 0x0b0e), + ...(0, util_1.range)(0x0b11, 0x0b12), + 0x0b29, + 0x0b31, + ...(0, util_1.range)(0x0b34, 0x0b35), + ...(0, util_1.range)(0x0b3a, 0x0b3b), + ...(0, util_1.range)(0x0b44, 0x0b46), + ...(0, util_1.range)(0x0b49, 0x0b4a), + ...(0, util_1.range)(0x0b4e, 0x0b55), + ...(0, util_1.range)(0x0b58, 0x0b5b), + 0x0b5e, + ...(0, util_1.range)(0x0b62, 0x0b65), + ...(0, util_1.range)(0x0b71, 0x0b81), + 0x0b84, + ...(0, util_1.range)(0x0b8b, 0x0b8d), + 0x0b91, + ...(0, util_1.range)(0x0b96, 0x0b98), + 0x0b9b, + 0x0b9d, + ...(0, util_1.range)(0x0ba0, 0x0ba2), + ...(0, util_1.range)(0x0ba5, 0x0ba7), + ...(0, util_1.range)(0x0bab, 0x0bad), + 0x0bb6, + ...(0, util_1.range)(0x0bba, 0x0bbd), + ...(0, util_1.range)(0x0bc3, 0x0bc5), + 0x0bc9, + ...(0, util_1.range)(0x0bce, 0x0bd6), + ...(0, util_1.range)(0x0bd8, 0x0be6), + ...(0, util_1.range)(0x0bf3, 0x0c00), + 0x0c04, + 0x0c0d, + 0x0c11, + 0x0c29, + 0x0c34, + ...(0, util_1.range)(0x0c3a, 0x0c3d), + 0x0c45, + 0x0c49, + ...(0, util_1.range)(0x0c4e, 0x0c54), + ...(0, util_1.range)(0x0c57, 0x0c5f), + ...(0, util_1.range)(0x0c62, 0x0c65), + ...(0, util_1.range)(0x0c70, 0x0c81), + 0x0c84, + 0x0c8d, + 0x0c91, + 0x0ca9, + 0x0cb4, + ...(0, util_1.range)(0x0cba, 0x0cbd), + 0x0cc5, + 0x0cc9, + ...(0, util_1.range)(0x0cce, 0x0cd4), + ...(0, util_1.range)(0x0cd7, 0x0cdd), + 0x0cdf, + ...(0, util_1.range)(0x0ce2, 0x0ce5), + ...(0, util_1.range)(0x0cf0, 0x0d01), + 0x0d04, + 0x0d0d, + 0x0d11, + 0x0d29, + ...(0, util_1.range)(0x0d3a, 0x0d3d), + ...(0, util_1.range)(0x0d44, 0x0d45), + 0x0d49, + ...(0, util_1.range)(0x0d4e, 0x0d56), + ...(0, util_1.range)(0x0d58, 0x0d5f), + ...(0, util_1.range)(0x0d62, 0x0d65), + ...(0, util_1.range)(0x0d70, 0x0d81), + 0x0d84, + ...(0, util_1.range)(0x0d97, 0x0d99), + 0x0db2, + 0x0dbc, + ...(0, util_1.range)(0x0dbe, 0x0dbf), + ...(0, util_1.range)(0x0dc7, 0x0dc9), + ...(0, util_1.range)(0x0dcb, 0x0dce), + 0x0dd5, + 0x0dd7, + ...(0, util_1.range)(0x0de0, 0x0df1), + ...(0, util_1.range)(0x0df5, 0x0e00), + ...(0, util_1.range)(0x0e3b, 0x0e3e), + ...(0, util_1.range)(0x0e5c, 0x0e80), + 0x0e83, + ...(0, util_1.range)(0x0e85, 0x0e86), + 0x0e89, + ...(0, util_1.range)(0x0e8b, 0x0e8c), + ...(0, util_1.range)(0x0e8e, 0x0e93), + 0x0e98, + 0x0ea0, + 0x0ea4, + 0x0ea6, + ...(0, util_1.range)(0x0ea8, 0x0ea9), + 0x0eac, + 0x0eba, + ...(0, util_1.range)(0x0ebe, 0x0ebf), + 0x0ec5, + 0x0ec7, + ...(0, util_1.range)(0x0ece, 0x0ecf), + ...(0, util_1.range)(0x0eda, 0x0edb), + ...(0, util_1.range)(0x0ede, 0x0eff), + 0x0f48, + ...(0, util_1.range)(0x0f6b, 0x0f70), + ...(0, util_1.range)(0x0f8c, 0x0f8f), + 0x0f98, + 0x0fbd, + ...(0, util_1.range)(0x0fcd, 0x0fce), + ...(0, util_1.range)(0x0fd0, 0x0fff), + 0x1022, + 0x1028, + 0x102b, + ...(0, util_1.range)(0x1033, 0x1035), + ...(0, util_1.range)(0x103a, 0x103f), + ...(0, util_1.range)(0x105a, 0x109f), + ...(0, util_1.range)(0x10c6, 0x10cf), + ...(0, util_1.range)(0x10f9, 0x10fa), + ...(0, util_1.range)(0x10fc, 0x10ff), + ...(0, util_1.range)(0x115a, 0x115e), + ...(0, util_1.range)(0x11a3, 0x11a7), + ...(0, util_1.range)(0x11fa, 0x11ff), + 0x1207, + 0x1247, + 0x1249, + ...(0, util_1.range)(0x124e, 0x124f), + 0x1257, + 0x1259, + ...(0, util_1.range)(0x125e, 0x125f), + 0x1287, + 0x1289, + ...(0, util_1.range)(0x128e, 0x128f), + 0x12af, + 0x12b1, + ...(0, util_1.range)(0x12b6, 0x12b7), + 0x12bf, + 0x12c1, + ...(0, util_1.range)(0x12c6, 0x12c7), + 0x12cf, + 0x12d7, + 0x12ef, + 0x130f, + 0x1311, + ...(0, util_1.range)(0x1316, 0x1317), + 0x131f, + 0x1347, + ...(0, util_1.range)(0x135b, 0x1360), + ...(0, util_1.range)(0x137d, 0x139f), + ...(0, util_1.range)(0x13f5, 0x1400), + ...(0, util_1.range)(0x1677, 0x167f), + ...(0, util_1.range)(0x169d, 0x169f), + ...(0, util_1.range)(0x16f1, 0x16ff), + 0x170d, + ...(0, util_1.range)(0x1715, 0x171f), + ...(0, util_1.range)(0x1737, 0x173f), + ...(0, util_1.range)(0x1754, 0x175f), + 0x176d, + 0x1771, + ...(0, util_1.range)(0x1774, 0x177f), + ...(0, util_1.range)(0x17dd, 0x17df), + ...(0, util_1.range)(0x17ea, 0x17ff), + 0x180f, + ...(0, util_1.range)(0x181a, 0x181f), + ...(0, util_1.range)(0x1878, 0x187f), + ...(0, util_1.range)(0x18aa, 0x1dff), + ...(0, util_1.range)(0x1e9c, 0x1e9f), + ...(0, util_1.range)(0x1efa, 0x1eff), + ...(0, util_1.range)(0x1f16, 0x1f17), + ...(0, util_1.range)(0x1f1e, 0x1f1f), + ...(0, util_1.range)(0x1f46, 0x1f47), + ...(0, util_1.range)(0x1f4e, 0x1f4f), + 0x1f58, + 0x1f5a, + 0x1f5c, + 0x1f5e, + ...(0, util_1.range)(0x1f7e, 0x1f7f), + 0x1fb5, + 0x1fc5, + ...(0, util_1.range)(0x1fd4, 0x1fd5), + 0x1fdc, + ...(0, util_1.range)(0x1ff0, 0x1ff1), + 0x1ff5, + 0x1fff, + ...(0, util_1.range)(0x2053, 0x2056), + ...(0, util_1.range)(0x2058, 0x205e), + ...(0, util_1.range)(0x2064, 0x2069), + ...(0, util_1.range)(0x2072, 0x2073), + ...(0, util_1.range)(0x208f, 0x209f), + ...(0, util_1.range)(0x20b2, 0x20cf), + ...(0, util_1.range)(0x20eb, 0x20ff), + ...(0, util_1.range)(0x213b, 0x213c), + ...(0, util_1.range)(0x214c, 0x2152), + ...(0, util_1.range)(0x2184, 0x218f), + ...(0, util_1.range)(0x23cf, 0x23ff), + ...(0, util_1.range)(0x2427, 0x243f), + ...(0, util_1.range)(0x244b, 0x245f), + 0x24ff, + ...(0, util_1.range)(0x2614, 0x2615), + 0x2618, + ...(0, util_1.range)(0x267e, 0x267f), + ...(0, util_1.range)(0x268a, 0x2700), + 0x2705, + ...(0, util_1.range)(0x270a, 0x270b), + 0x2728, + 0x274c, + 0x274e, + ...(0, util_1.range)(0x2753, 0x2755), + 0x2757, + ...(0, util_1.range)(0x275f, 0x2760), + ...(0, util_1.range)(0x2795, 0x2797), + 0x27b0, + ...(0, util_1.range)(0x27bf, 0x27cf), + ...(0, util_1.range)(0x27ec, 0x27ef), + ...(0, util_1.range)(0x2b00, 0x2e7f), + 0x2e9a, + ...(0, util_1.range)(0x2ef4, 0x2eff), + ...(0, util_1.range)(0x2fd6, 0x2fef), + ...(0, util_1.range)(0x2ffc, 0x2fff), + 0x3040, + ...(0, util_1.range)(0x3097, 0x3098), + ...(0, util_1.range)(0x3100, 0x3104), + ...(0, util_1.range)(0x312d, 0x3130), + 0x318f, + ...(0, util_1.range)(0x31b8, 0x31ef), + ...(0, util_1.range)(0x321d, 0x321f), + ...(0, util_1.range)(0x3244, 0x3250), + ...(0, util_1.range)(0x327c, 0x327e), + ...(0, util_1.range)(0x32cc, 0x32cf), + 0x32ff, + ...(0, util_1.range)(0x3377, 0x337a), + ...(0, util_1.range)(0x33de, 0x33df), + 0x33ff, + ...(0, util_1.range)(0x4db6, 0x4dff), + ...(0, util_1.range)(0x9fa6, 0x9fff), + ...(0, util_1.range)(0xa48d, 0xa48f), + ...(0, util_1.range)(0xa4c7, 0xabff), + ...(0, util_1.range)(0xd7a4, 0xd7ff), + ...(0, util_1.range)(0xfa2e, 0xfa2f), + ...(0, util_1.range)(0xfa6b, 0xfaff), + ...(0, util_1.range)(0xfb07, 0xfb12), + ...(0, util_1.range)(0xfb18, 0xfb1c), + 0xfb37, + 0xfb3d, + 0xfb3f, + 0xfb42, + 0xfb45, + ...(0, util_1.range)(0xfbb2, 0xfbd2), + ...(0, util_1.range)(0xfd40, 0xfd4f), + ...(0, util_1.range)(0xfd90, 0xfd91), + ...(0, util_1.range)(0xfdc8, 0xfdcf), + ...(0, util_1.range)(0xfdfd, 0xfdff), + ...(0, util_1.range)(0xfe10, 0xfe1f), + ...(0, util_1.range)(0xfe24, 0xfe2f), + ...(0, util_1.range)(0xfe47, 0xfe48), + 0xfe53, + 0xfe67, + ...(0, util_1.range)(0xfe6c, 0xfe6f), + 0xfe75, + ...(0, util_1.range)(0xfefd, 0xfefe), + 0xff00, + ...(0, util_1.range)(0xffbf, 0xffc1), + ...(0, util_1.range)(0xffc8, 0xffc9), + ...(0, util_1.range)(0xffd0, 0xffd1), + ...(0, util_1.range)(0xffd8, 0xffd9), + ...(0, util_1.range)(0xffdd, 0xffdf), + 0xffe7, + ...(0, util_1.range)(0xffef, 0xfff8), + ...(0, util_1.range)(0x10000, 0x102ff), + 0x1031f, + ...(0, util_1.range)(0x10324, 0x1032f), + ...(0, util_1.range)(0x1034b, 0x103ff), + ...(0, util_1.range)(0x10426, 0x10427), + ...(0, util_1.range)(0x1044e, 0x1cfff), + ...(0, util_1.range)(0x1d0f6, 0x1d0ff), + ...(0, util_1.range)(0x1d127, 0x1d129), + ...(0, util_1.range)(0x1d1de, 0x1d3ff), + 0x1d455, + 0x1d49d, + ...(0, util_1.range)(0x1d4a0, 0x1d4a1), + ...(0, util_1.range)(0x1d4a3, 0x1d4a4), + ...(0, util_1.range)(0x1d4a7, 0x1d4a8), + 0x1d4ad, + 0x1d4ba, + 0x1d4bc, + 0x1d4c1, + 0x1d4c4, + 0x1d506, + ...(0, util_1.range)(0x1d50b, 0x1d50c), + 0x1d515, + 0x1d51d, + 0x1d53a, + 0x1d53f, + 0x1d545, + ...(0, util_1.range)(0x1d547, 0x1d549), + 0x1d551, + ...(0, util_1.range)(0x1d6a4, 0x1d6a7), + ...(0, util_1.range)(0x1d7ca, 0x1d7cd), + ...(0, util_1.range)(0x1d800, 0x1fffd), + ...(0, util_1.range)(0x2a6d7, 0x2f7ff), + ...(0, util_1.range)(0x2fa1e, 0x2fffd), + ...(0, util_1.range)(0x30000, 0x3fffd), + ...(0, util_1.range)(0x40000, 0x4fffd), + ...(0, util_1.range)(0x50000, 0x5fffd), + ...(0, util_1.range)(0x60000, 0x6fffd), + ...(0, util_1.range)(0x70000, 0x7fffd), + ...(0, util_1.range)(0x80000, 0x8fffd), + ...(0, util_1.range)(0x90000, 0x9fffd), + ...(0, util_1.range)(0xa0000, 0xafffd), + ...(0, util_1.range)(0xb0000, 0xbfffd), + ...(0, util_1.range)(0xc0000, 0xcfffd), + ...(0, util_1.range)(0xd0000, 0xdfffd), + 0xe0000, + ...(0, util_1.range)(0xe0002, 0xe001f), + ...(0, util_1.range)(0xe0080, 0xefffd), +]); +exports.commonly_mapped_to_nothing = new Set([ + 0x00ad, 0x034f, 0x1806, 0x180b, 0x180c, 0x180d, 0x200b, 0x200c, 0x200d, + 0x2060, 0xfe00, 0xfe01, 0xfe02, 0xfe03, 0xfe04, 0xfe05, 0xfe06, 0xfe07, + 0xfe08, 0xfe09, 0xfe0a, 0xfe0b, 0xfe0c, 0xfe0d, 0xfe0e, 0xfe0f, 0xfeff, +]); +exports.non_ASCII_space_characters = new Set([ + 0x00a0, 0x1680, + 0x2000, 0x2001, 0x2002, + 0x2003, 0x2004, + 0x2005, 0x2006, + 0x2007, 0x2008, + 0x2009, 0x200a, + 0x200b, 0x202f, + 0x205f, 0x3000, +]); +exports.prohibited_characters = new Set([ + ...exports.non_ASCII_space_characters, + ...(0, util_1.range)(0, 0x001f), + 0x007f, + ...(0, util_1.range)(0x0080, 0x009f), + 0x06dd, + 0x070f, + 0x180e, + 0x200c, + 0x200d, + 0x2028, + 0x2029, + 0x2060, + 0x2061, + 0x2062, + 0x2063, + ...(0, util_1.range)(0x206a, 0x206f), + 0xfeff, + ...(0, util_1.range)(0xfff9, 0xfffc), + ...(0, util_1.range)(0x1d173, 0x1d17a), + ...(0, util_1.range)(0xe000, 0xf8ff), + ...(0, util_1.range)(0xf0000, 0xffffd), + ...(0, util_1.range)(0x100000, 0x10fffd), + ...(0, util_1.range)(0xfdd0, 0xfdef), + ...(0, util_1.range)(0xfffe, 0xffff), + ...(0, util_1.range)(0x1fffe, 0x1ffff), + ...(0, util_1.range)(0x2fffe, 0x2ffff), + ...(0, util_1.range)(0x3fffe, 0x3ffff), + ...(0, util_1.range)(0x4fffe, 0x4ffff), + ...(0, util_1.range)(0x5fffe, 0x5ffff), + ...(0, util_1.range)(0x6fffe, 0x6ffff), + ...(0, util_1.range)(0x7fffe, 0x7ffff), + ...(0, util_1.range)(0x8fffe, 0x8ffff), + ...(0, util_1.range)(0x9fffe, 0x9ffff), + ...(0, util_1.range)(0xafffe, 0xaffff), + ...(0, util_1.range)(0xbfffe, 0xbffff), + ...(0, util_1.range)(0xcfffe, 0xcffff), + ...(0, util_1.range)(0xdfffe, 0xdffff), + ...(0, util_1.range)(0xefffe, 0xeffff), + ...(0, util_1.range)(0x10fffe, 0x10ffff), + ...(0, util_1.range)(0xd800, 0xdfff), + 0xfff9, + 0xfffa, + 0xfffb, + 0xfffc, + 0xfffd, + ...(0, util_1.range)(0x2ff0, 0x2ffb), + 0x0340, + 0x0341, + 0x200e, + 0x200f, + 0x202a, + 0x202b, + 0x202c, + 0x202d, + 0x202e, + 0x206a, + 0x206b, + 0x206c, + 0x206d, + 0x206e, + 0x206f, + 0xe0001, + ...(0, util_1.range)(0xe0020, 0xe007f), +]); +exports.bidirectional_r_al = new Set([ + 0x05be, + 0x05c0, + 0x05c3, + ...(0, util_1.range)(0x05d0, 0x05ea), + ...(0, util_1.range)(0x05f0, 0x05f4), + 0x061b, + 0x061f, + ...(0, util_1.range)(0x0621, 0x063a), + ...(0, util_1.range)(0x0640, 0x064a), + ...(0, util_1.range)(0x066d, 0x066f), + ...(0, util_1.range)(0x0671, 0x06d5), + 0x06dd, + ...(0, util_1.range)(0x06e5, 0x06e6), + ...(0, util_1.range)(0x06fa, 0x06fe), + ...(0, util_1.range)(0x0700, 0x070d), + 0x0710, + ...(0, util_1.range)(0x0712, 0x072c), + ...(0, util_1.range)(0x0780, 0x07a5), + 0x07b1, + 0x200f, + 0xfb1d, + ...(0, util_1.range)(0xfb1f, 0xfb28), + ...(0, util_1.range)(0xfb2a, 0xfb36), + ...(0, util_1.range)(0xfb38, 0xfb3c), + 0xfb3e, + ...(0, util_1.range)(0xfb40, 0xfb41), + ...(0, util_1.range)(0xfb43, 0xfb44), + ...(0, util_1.range)(0xfb46, 0xfbb1), + ...(0, util_1.range)(0xfbd3, 0xfd3d), + ...(0, util_1.range)(0xfd50, 0xfd8f), + ...(0, util_1.range)(0xfd92, 0xfdc7), + ...(0, util_1.range)(0xfdf0, 0xfdfc), + ...(0, util_1.range)(0xfe70, 0xfe74), + ...(0, util_1.range)(0xfe76, 0xfefc), +]); +exports.bidirectional_l = new Set([ + ...(0, util_1.range)(0x0041, 0x005a), + ...(0, util_1.range)(0x0061, 0x007a), + 0x00aa, + 0x00b5, + 0x00ba, + ...(0, util_1.range)(0x00c0, 0x00d6), + ...(0, util_1.range)(0x00d8, 0x00f6), + ...(0, util_1.range)(0x00f8, 0x0220), + ...(0, util_1.range)(0x0222, 0x0233), + ...(0, util_1.range)(0x0250, 0x02ad), + ...(0, util_1.range)(0x02b0, 0x02b8), + ...(0, util_1.range)(0x02bb, 0x02c1), + ...(0, util_1.range)(0x02d0, 0x02d1), + ...(0, util_1.range)(0x02e0, 0x02e4), + 0x02ee, + 0x037a, + 0x0386, + ...(0, util_1.range)(0x0388, 0x038a), + 0x038c, + ...(0, util_1.range)(0x038e, 0x03a1), + ...(0, util_1.range)(0x03a3, 0x03ce), + ...(0, util_1.range)(0x03d0, 0x03f5), + ...(0, util_1.range)(0x0400, 0x0482), + ...(0, util_1.range)(0x048a, 0x04ce), + ...(0, util_1.range)(0x04d0, 0x04f5), + ...(0, util_1.range)(0x04f8, 0x04f9), + ...(0, util_1.range)(0x0500, 0x050f), + ...(0, util_1.range)(0x0531, 0x0556), + ...(0, util_1.range)(0x0559, 0x055f), + ...(0, util_1.range)(0x0561, 0x0587), + 0x0589, + 0x0903, + ...(0, util_1.range)(0x0905, 0x0939), + ...(0, util_1.range)(0x093d, 0x0940), + ...(0, util_1.range)(0x0949, 0x094c), + 0x0950, + ...(0, util_1.range)(0x0958, 0x0961), + ...(0, util_1.range)(0x0964, 0x0970), + ...(0, util_1.range)(0x0982, 0x0983), + ...(0, util_1.range)(0x0985, 0x098c), + ...(0, util_1.range)(0x098f, 0x0990), + ...(0, util_1.range)(0x0993, 0x09a8), + ...(0, util_1.range)(0x09aa, 0x09b0), + 0x09b2, + ...(0, util_1.range)(0x09b6, 0x09b9), + ...(0, util_1.range)(0x09be, 0x09c0), + ...(0, util_1.range)(0x09c7, 0x09c8), + ...(0, util_1.range)(0x09cb, 0x09cc), + 0x09d7, + ...(0, util_1.range)(0x09dc, 0x09dd), + ...(0, util_1.range)(0x09df, 0x09e1), + ...(0, util_1.range)(0x09e6, 0x09f1), + ...(0, util_1.range)(0x09f4, 0x09fa), + ...(0, util_1.range)(0x0a05, 0x0a0a), + ...(0, util_1.range)(0x0a0f, 0x0a10), + ...(0, util_1.range)(0x0a13, 0x0a28), + ...(0, util_1.range)(0x0a2a, 0x0a30), + ...(0, util_1.range)(0x0a32, 0x0a33), + ...(0, util_1.range)(0x0a35, 0x0a36), + ...(0, util_1.range)(0x0a38, 0x0a39), + ...(0, util_1.range)(0x0a3e, 0x0a40), + ...(0, util_1.range)(0x0a59, 0x0a5c), + 0x0a5e, + ...(0, util_1.range)(0x0a66, 0x0a6f), + ...(0, util_1.range)(0x0a72, 0x0a74), + 0x0a83, + ...(0, util_1.range)(0x0a85, 0x0a8b), + 0x0a8d, + ...(0, util_1.range)(0x0a8f, 0x0a91), + ...(0, util_1.range)(0x0a93, 0x0aa8), + ...(0, util_1.range)(0x0aaa, 0x0ab0), + ...(0, util_1.range)(0x0ab2, 0x0ab3), + ...(0, util_1.range)(0x0ab5, 0x0ab9), + ...(0, util_1.range)(0x0abd, 0x0ac0), + 0x0ac9, + ...(0, util_1.range)(0x0acb, 0x0acc), + 0x0ad0, + 0x0ae0, + ...(0, util_1.range)(0x0ae6, 0x0aef), + ...(0, util_1.range)(0x0b02, 0x0b03), + ...(0, util_1.range)(0x0b05, 0x0b0c), + ...(0, util_1.range)(0x0b0f, 0x0b10), + ...(0, util_1.range)(0x0b13, 0x0b28), + ...(0, util_1.range)(0x0b2a, 0x0b30), + ...(0, util_1.range)(0x0b32, 0x0b33), + ...(0, util_1.range)(0x0b36, 0x0b39), + ...(0, util_1.range)(0x0b3d, 0x0b3e), + 0x0b40, + ...(0, util_1.range)(0x0b47, 0x0b48), + ...(0, util_1.range)(0x0b4b, 0x0b4c), + 0x0b57, + ...(0, util_1.range)(0x0b5c, 0x0b5d), + ...(0, util_1.range)(0x0b5f, 0x0b61), + ...(0, util_1.range)(0x0b66, 0x0b70), + 0x0b83, + ...(0, util_1.range)(0x0b85, 0x0b8a), + ...(0, util_1.range)(0x0b8e, 0x0b90), + ...(0, util_1.range)(0x0b92, 0x0b95), + ...(0, util_1.range)(0x0b99, 0x0b9a), + 0x0b9c, + ...(0, util_1.range)(0x0b9e, 0x0b9f), + ...(0, util_1.range)(0x0ba3, 0x0ba4), + ...(0, util_1.range)(0x0ba8, 0x0baa), + ...(0, util_1.range)(0x0bae, 0x0bb5), + ...(0, util_1.range)(0x0bb7, 0x0bb9), + ...(0, util_1.range)(0x0bbe, 0x0bbf), + ...(0, util_1.range)(0x0bc1, 0x0bc2), + ...(0, util_1.range)(0x0bc6, 0x0bc8), + ...(0, util_1.range)(0x0bca, 0x0bcc), + 0x0bd7, + ...(0, util_1.range)(0x0be7, 0x0bf2), + ...(0, util_1.range)(0x0c01, 0x0c03), + ...(0, util_1.range)(0x0c05, 0x0c0c), + ...(0, util_1.range)(0x0c0e, 0x0c10), + ...(0, util_1.range)(0x0c12, 0x0c28), + ...(0, util_1.range)(0x0c2a, 0x0c33), + ...(0, util_1.range)(0x0c35, 0x0c39), + ...(0, util_1.range)(0x0c41, 0x0c44), + ...(0, util_1.range)(0x0c60, 0x0c61), + ...(0, util_1.range)(0x0c66, 0x0c6f), + ...(0, util_1.range)(0x0c82, 0x0c83), + ...(0, util_1.range)(0x0c85, 0x0c8c), + ...(0, util_1.range)(0x0c8e, 0x0c90), + ...(0, util_1.range)(0x0c92, 0x0ca8), + ...(0, util_1.range)(0x0caa, 0x0cb3), + ...(0, util_1.range)(0x0cb5, 0x0cb9), + 0x0cbe, + ...(0, util_1.range)(0x0cc0, 0x0cc4), + ...(0, util_1.range)(0x0cc7, 0x0cc8), + ...(0, util_1.range)(0x0cca, 0x0ccb), + ...(0, util_1.range)(0x0cd5, 0x0cd6), + 0x0cde, + ...(0, util_1.range)(0x0ce0, 0x0ce1), + ...(0, util_1.range)(0x0ce6, 0x0cef), + ...(0, util_1.range)(0x0d02, 0x0d03), + ...(0, util_1.range)(0x0d05, 0x0d0c), + ...(0, util_1.range)(0x0d0e, 0x0d10), + ...(0, util_1.range)(0x0d12, 0x0d28), + ...(0, util_1.range)(0x0d2a, 0x0d39), + ...(0, util_1.range)(0x0d3e, 0x0d40), + ...(0, util_1.range)(0x0d46, 0x0d48), + ...(0, util_1.range)(0x0d4a, 0x0d4c), + 0x0d57, + ...(0, util_1.range)(0x0d60, 0x0d61), + ...(0, util_1.range)(0x0d66, 0x0d6f), + ...(0, util_1.range)(0x0d82, 0x0d83), + ...(0, util_1.range)(0x0d85, 0x0d96), + ...(0, util_1.range)(0x0d9a, 0x0db1), + ...(0, util_1.range)(0x0db3, 0x0dbb), + 0x0dbd, + ...(0, util_1.range)(0x0dc0, 0x0dc6), + ...(0, util_1.range)(0x0dcf, 0x0dd1), + ...(0, util_1.range)(0x0dd8, 0x0ddf), + ...(0, util_1.range)(0x0df2, 0x0df4), + ...(0, util_1.range)(0x0e01, 0x0e30), + ...(0, util_1.range)(0x0e32, 0x0e33), + ...(0, util_1.range)(0x0e40, 0x0e46), + ...(0, util_1.range)(0x0e4f, 0x0e5b), + ...(0, util_1.range)(0x0e81, 0x0e82), + 0x0e84, + ...(0, util_1.range)(0x0e87, 0x0e88), + 0x0e8a, + 0x0e8d, + ...(0, util_1.range)(0x0e94, 0x0e97), + ...(0, util_1.range)(0x0e99, 0x0e9f), + ...(0, util_1.range)(0x0ea1, 0x0ea3), + 0x0ea5, + 0x0ea7, + ...(0, util_1.range)(0x0eaa, 0x0eab), + ...(0, util_1.range)(0x0ead, 0x0eb0), + ...(0, util_1.range)(0x0eb2, 0x0eb3), + 0x0ebd, + ...(0, util_1.range)(0x0ec0, 0x0ec4), + 0x0ec6, + ...(0, util_1.range)(0x0ed0, 0x0ed9), + ...(0, util_1.range)(0x0edc, 0x0edd), + ...(0, util_1.range)(0x0f00, 0x0f17), + ...(0, util_1.range)(0x0f1a, 0x0f34), + 0x0f36, + 0x0f38, + ...(0, util_1.range)(0x0f3e, 0x0f47), + ...(0, util_1.range)(0x0f49, 0x0f6a), + 0x0f7f, + 0x0f85, + ...(0, util_1.range)(0x0f88, 0x0f8b), + ...(0, util_1.range)(0x0fbe, 0x0fc5), + ...(0, util_1.range)(0x0fc7, 0x0fcc), + 0x0fcf, + ...(0, util_1.range)(0x1000, 0x1021), + ...(0, util_1.range)(0x1023, 0x1027), + ...(0, util_1.range)(0x1029, 0x102a), + 0x102c, + 0x1031, + 0x1038, + ...(0, util_1.range)(0x1040, 0x1057), + ...(0, util_1.range)(0x10a0, 0x10c5), + ...(0, util_1.range)(0x10d0, 0x10f8), + 0x10fb, + ...(0, util_1.range)(0x1100, 0x1159), + ...(0, util_1.range)(0x115f, 0x11a2), + ...(0, util_1.range)(0x11a8, 0x11f9), + ...(0, util_1.range)(0x1200, 0x1206), + ...(0, util_1.range)(0x1208, 0x1246), + 0x1248, + ...(0, util_1.range)(0x124a, 0x124d), + ...(0, util_1.range)(0x1250, 0x1256), + 0x1258, + ...(0, util_1.range)(0x125a, 0x125d), + ...(0, util_1.range)(0x1260, 0x1286), + 0x1288, + ...(0, util_1.range)(0x128a, 0x128d), + ...(0, util_1.range)(0x1290, 0x12ae), + 0x12b0, + ...(0, util_1.range)(0x12b2, 0x12b5), + ...(0, util_1.range)(0x12b8, 0x12be), + 0x12c0, + ...(0, util_1.range)(0x12c2, 0x12c5), + ...(0, util_1.range)(0x12c8, 0x12ce), + ...(0, util_1.range)(0x12d0, 0x12d6), + ...(0, util_1.range)(0x12d8, 0x12ee), + ...(0, util_1.range)(0x12f0, 0x130e), + 0x1310, + ...(0, util_1.range)(0x1312, 0x1315), + ...(0, util_1.range)(0x1318, 0x131e), + ...(0, util_1.range)(0x1320, 0x1346), + ...(0, util_1.range)(0x1348, 0x135a), + ...(0, util_1.range)(0x1361, 0x137c), + ...(0, util_1.range)(0x13a0, 0x13f4), + ...(0, util_1.range)(0x1401, 0x1676), + ...(0, util_1.range)(0x1681, 0x169a), + ...(0, util_1.range)(0x16a0, 0x16f0), + ...(0, util_1.range)(0x1700, 0x170c), + ...(0, util_1.range)(0x170e, 0x1711), + ...(0, util_1.range)(0x1720, 0x1731), + ...(0, util_1.range)(0x1735, 0x1736), + ...(0, util_1.range)(0x1740, 0x1751), + ...(0, util_1.range)(0x1760, 0x176c), + ...(0, util_1.range)(0x176e, 0x1770), + ...(0, util_1.range)(0x1780, 0x17b6), + ...(0, util_1.range)(0x17be, 0x17c5), + ...(0, util_1.range)(0x17c7, 0x17c8), + ...(0, util_1.range)(0x17d4, 0x17da), + 0x17dc, + ...(0, util_1.range)(0x17e0, 0x17e9), + ...(0, util_1.range)(0x1810, 0x1819), + ...(0, util_1.range)(0x1820, 0x1877), + ...(0, util_1.range)(0x1880, 0x18a8), + ...(0, util_1.range)(0x1e00, 0x1e9b), + ...(0, util_1.range)(0x1ea0, 0x1ef9), + ...(0, util_1.range)(0x1f00, 0x1f15), + ...(0, util_1.range)(0x1f18, 0x1f1d), + ...(0, util_1.range)(0x1f20, 0x1f45), + ...(0, util_1.range)(0x1f48, 0x1f4d), + ...(0, util_1.range)(0x1f50, 0x1f57), + 0x1f59, + 0x1f5b, + 0x1f5d, + ...(0, util_1.range)(0x1f5f, 0x1f7d), + ...(0, util_1.range)(0x1f80, 0x1fb4), + ...(0, util_1.range)(0x1fb6, 0x1fbc), + 0x1fbe, + ...(0, util_1.range)(0x1fc2, 0x1fc4), + ...(0, util_1.range)(0x1fc6, 0x1fcc), + ...(0, util_1.range)(0x1fd0, 0x1fd3), + ...(0, util_1.range)(0x1fd6, 0x1fdb), + ...(0, util_1.range)(0x1fe0, 0x1fec), + ...(0, util_1.range)(0x1ff2, 0x1ff4), + ...(0, util_1.range)(0x1ff6, 0x1ffc), + 0x200e, + 0x2071, + 0x207f, + 0x2102, + 0x2107, + ...(0, util_1.range)(0x210a, 0x2113), + 0x2115, + ...(0, util_1.range)(0x2119, 0x211d), + 0x2124, + 0x2126, + 0x2128, + ...(0, util_1.range)(0x212a, 0x212d), + ...(0, util_1.range)(0x212f, 0x2131), + ...(0, util_1.range)(0x2133, 0x2139), + ...(0, util_1.range)(0x213d, 0x213f), + ...(0, util_1.range)(0x2145, 0x2149), + ...(0, util_1.range)(0x2160, 0x2183), + ...(0, util_1.range)(0x2336, 0x237a), + 0x2395, + ...(0, util_1.range)(0x249c, 0x24e9), + ...(0, util_1.range)(0x3005, 0x3007), + ...(0, util_1.range)(0x3021, 0x3029), + ...(0, util_1.range)(0x3031, 0x3035), + ...(0, util_1.range)(0x3038, 0x303c), + ...(0, util_1.range)(0x3041, 0x3096), + ...(0, util_1.range)(0x309d, 0x309f), + ...(0, util_1.range)(0x30a1, 0x30fa), + ...(0, util_1.range)(0x30fc, 0x30ff), + ...(0, util_1.range)(0x3105, 0x312c), + ...(0, util_1.range)(0x3131, 0x318e), + ...(0, util_1.range)(0x3190, 0x31b7), + ...(0, util_1.range)(0x31f0, 0x321c), + ...(0, util_1.range)(0x3220, 0x3243), + ...(0, util_1.range)(0x3260, 0x327b), + ...(0, util_1.range)(0x327f, 0x32b0), + ...(0, util_1.range)(0x32c0, 0x32cb), + ...(0, util_1.range)(0x32d0, 0x32fe), + ...(0, util_1.range)(0x3300, 0x3376), + ...(0, util_1.range)(0x337b, 0x33dd), + ...(0, util_1.range)(0x33e0, 0x33fe), + ...(0, util_1.range)(0x3400, 0x4db5), + ...(0, util_1.range)(0x4e00, 0x9fa5), + ...(0, util_1.range)(0xa000, 0xa48c), + ...(0, util_1.range)(0xac00, 0xd7a3), + ...(0, util_1.range)(0xd800, 0xfa2d), + ...(0, util_1.range)(0xfa30, 0xfa6a), + ...(0, util_1.range)(0xfb00, 0xfb06), + ...(0, util_1.range)(0xfb13, 0xfb17), + ...(0, util_1.range)(0xff21, 0xff3a), + ...(0, util_1.range)(0xff41, 0xff5a), + ...(0, util_1.range)(0xff66, 0xffbe), + ...(0, util_1.range)(0xffc2, 0xffc7), + ...(0, util_1.range)(0xffca, 0xffcf), + ...(0, util_1.range)(0xffd2, 0xffd7), + ...(0, util_1.range)(0xffda, 0xffdc), + ...(0, util_1.range)(0x10300, 0x1031e), + ...(0, util_1.range)(0x10320, 0x10323), + ...(0, util_1.range)(0x10330, 0x1034a), + ...(0, util_1.range)(0x10400, 0x10425), + ...(0, util_1.range)(0x10428, 0x1044d), + ...(0, util_1.range)(0x1d000, 0x1d0f5), + ...(0, util_1.range)(0x1d100, 0x1d126), + ...(0, util_1.range)(0x1d12a, 0x1d166), + ...(0, util_1.range)(0x1d16a, 0x1d172), + ...(0, util_1.range)(0x1d183, 0x1d184), + ...(0, util_1.range)(0x1d18c, 0x1d1a9), + ...(0, util_1.range)(0x1d1ae, 0x1d1dd), + ...(0, util_1.range)(0x1d400, 0x1d454), + ...(0, util_1.range)(0x1d456, 0x1d49c), + ...(0, util_1.range)(0x1d49e, 0x1d49f), + 0x1d4a2, + ...(0, util_1.range)(0x1d4a5, 0x1d4a6), + ...(0, util_1.range)(0x1d4a9, 0x1d4ac), + ...(0, util_1.range)(0x1d4ae, 0x1d4b9), + 0x1d4bb, + ...(0, util_1.range)(0x1d4bd, 0x1d4c0), + ...(0, util_1.range)(0x1d4c2, 0x1d4c3), + ...(0, util_1.range)(0x1d4c5, 0x1d505), + ...(0, util_1.range)(0x1d507, 0x1d50a), + ...(0, util_1.range)(0x1d50d, 0x1d514), + ...(0, util_1.range)(0x1d516, 0x1d51c), + ...(0, util_1.range)(0x1d51e, 0x1d539), + ...(0, util_1.range)(0x1d53b, 0x1d53e), + ...(0, util_1.range)(0x1d540, 0x1d544), + 0x1d546, + ...(0, util_1.range)(0x1d54a, 0x1d550), + ...(0, util_1.range)(0x1d552, 0x1d6a3), + ...(0, util_1.range)(0x1d6a8, 0x1d7c9), + ...(0, util_1.range)(0x20000, 0x2a6d6), + ...(0, util_1.range)(0x2f800, 0x2fa1d), + ...(0, util_1.range)(0xf0000, 0xffffd), + ...(0, util_1.range)(0x100000, 0x10fffd), +]); +//# sourceMappingURL=code-points-src.js.map \ No newline at end of file diff --git a/Url-Shortner/node_modules/@mongodb-js/saslprep/dist/code-points-src.js.map b/Url-Shortner/node_modules/@mongodb-js/saslprep/dist/code-points-src.js.map new file mode 100644 index 0000000..dfb14ea --- /dev/null +++ b/Url-Shortner/node_modules/@mongodb-js/saslprep/dist/code-points-src.js.map @@ -0,0 +1 @@ +{"version":3,"file":"code-points-src.js","sourceRoot":"","sources":["../src/code-points-src.ts"],"names":[],"mappings":";;;AAAA,iCAA+B;AAMlB,QAAA,sBAAsB,GAAG,IAAI,GAAG,CAAC;IAC5C,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,MAAM;IACN,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,MAAM;IACN,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,MAAM;IACN,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,GAAG,IAAA,YAA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C;IACxB,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,MAAM;IACN,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,MAAM;IACN,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,MAAM;IACN,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM;IACN,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,IAAA,YAAK,EAAC,MAAM,EAAE,MAAM,CAAC;IACxB,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"} \ No newline at end of file diff --git a/Url-Shortner/node_modules/@mongodb-js/saslprep/dist/generate-code-points.d.ts b/Url-Shortner/node_modules/@mongodb-js/saslprep/dist/generate-code-points.d.ts new file mode 100644 index 0000000..5a83ab2 --- /dev/null +++ b/Url-Shortner/node_modules/@mongodb-js/saslprep/dist/generate-code-points.d.ts @@ -0,0 +1,2 @@ +export {}; +//# sourceMappingURL=generate-code-points.d.ts.map \ No newline at end of file diff --git a/Url-Shortner/node_modules/@mongodb-js/saslprep/dist/generate-code-points.d.ts.map b/Url-Shortner/node_modules/@mongodb-js/saslprep/dist/generate-code-points.d.ts.map new file mode 100644 index 0000000..b102903 --- /dev/null +++ b/Url-Shortner/node_modules/@mongodb-js/saslprep/dist/generate-code-points.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"generate-code-points.d.ts","sourceRoot":"","sources":["../src/generate-code-points.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/Url-Shortner/node_modules/@mongodb-js/saslprep/dist/generate-code-points.js b/Url-Shortner/node_modules/@mongodb-js/saslprep/dist/generate-code-points.js new file mode 100644 index 0000000..8307ea4 --- /dev/null +++ b/Url-Shortner/node_modules/@mongodb-js/saslprep/dist/generate-code-points.js @@ -0,0 +1,61 @@ +"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 }); +const zlib_1 = require("zlib"); +const sparse_bitfield_1 = __importDefault(require("sparse-bitfield")); +const codePoints = __importStar(require("./code-points-src")); +const unassigned_code_points = (0, sparse_bitfield_1.default)(); +const commonly_mapped_to_nothing = (0, sparse_bitfield_1.default)(); +const non_ascii_space_characters = (0, sparse_bitfield_1.default)(); +const prohibited_characters = (0, sparse_bitfield_1.default)(); +const bidirectional_r_al = (0, sparse_bitfield_1.default)(); +const bidirectional_l = (0, sparse_bitfield_1.default)(); +function traverse(bits, src) { + for (const code of src.keys()) { + bits.set(code, true); + } + const buffer = bits.toBuffer(); + return Buffer.concat([createSize(buffer), buffer]); +} +function createSize(buffer) { + const buf = Buffer.alloc(4); + buf.writeUInt32BE(buffer.length); + return buf; +} +const memory = []; +memory.push(traverse(unassigned_code_points, codePoints.unassigned_code_points), traverse(commonly_mapped_to_nothing, codePoints.commonly_mapped_to_nothing), traverse(non_ascii_space_characters, codePoints.non_ASCII_space_characters), traverse(prohibited_characters, codePoints.prohibited_characters), traverse(bidirectional_r_al, codePoints.bidirectional_r_al), traverse(bidirectional_l, codePoints.bidirectional_l)); +process.stdout.write(`import { gunzipSync } from 'zlib'; + +export default gunzipSync( + Buffer.from( + '${(0, zlib_1.gzipSync)(Buffer.concat(memory), { level: 9 }).toString('base64')}', + 'base64' + ) +); +`); +//# sourceMappingURL=generate-code-points.js.map \ No newline at end of file diff --git a/Url-Shortner/node_modules/@mongodb-js/saslprep/dist/generate-code-points.js.map b/Url-Shortner/node_modules/@mongodb-js/saslprep/dist/generate-code-points.js.map new file mode 100644 index 0000000..97d3f4d --- /dev/null +++ b/Url-Shortner/node_modules/@mongodb-js/saslprep/dist/generate-code-points.js.map @@ -0,0 +1 @@ +{"version":3,"file":"generate-code-points.js","sourceRoot":"","sources":["../src/generate-code-points.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+BAAgC;AAChC,sEAAuC;AACvC,8DAAgD;AAEhD,MAAM,sBAAsB,GAAG,IAAA,yBAAQ,GAAE,CAAC;AAC1C,MAAM,0BAA0B,GAAG,IAAA,yBAAQ,GAAE,CAAC;AAC9C,MAAM,0BAA0B,GAAG,IAAA,yBAAQ,GAAE,CAAC;AAC9C,MAAM,qBAAqB,GAAG,IAAA,yBAAQ,GAAE,CAAC;AACzC,MAAM,kBAAkB,GAAG,IAAA,yBAAQ,GAAE,CAAC;AACtC,MAAM,eAAe,GAAG,IAAA,yBAAQ,GAAE,CAAC;AAMnC,SAAS,QAAQ,CAAC,IAA+B,EAAE,GAAgB;IACjE,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,IAAI,EAAE,EAAE;QAC7B,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;KACtB;IAED,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;IAC/B,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;AACrD,CAAC;AAED,SAAS,UAAU,CAAC,MAAc;IAChC,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC5B,GAAG,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAEjC,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,MAAM,GAAa,EAAE,CAAC;AAE5B,MAAM,CAAC,IAAI,CACT,QAAQ,CAAC,sBAAsB,EAAE,UAAU,CAAC,sBAAsB,CAAC,EACnE,QAAQ,CAAC,0BAA0B,EAAE,UAAU,CAAC,0BAA0B,CAAC,EAC3E,QAAQ,CAAC,0BAA0B,EAAE,UAAU,CAAC,0BAA0B,CAAC,EAC3E,QAAQ,CAAC,qBAAqB,EAAE,UAAU,CAAC,qBAAqB,CAAC,EACjE,QAAQ,CAAC,kBAAkB,EAAE,UAAU,CAAC,kBAAkB,CAAC,EAC3D,QAAQ,CAAC,eAAe,EAAE,UAAU,CAAC,eAAe,CAAC,CACtD,CAAC;AAEF,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB;;;;OAIK,IAAA,eAAQ,EAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;;;;CAItE,CACA,CAAC"} \ No newline at end of file diff --git a/Url-Shortner/node_modules/@mongodb-js/saslprep/dist/index.d.ts b/Url-Shortner/node_modules/@mongodb-js/saslprep/dist/index.d.ts new file mode 100644 index 0000000..786acbd --- /dev/null +++ b/Url-Shortner/node_modules/@mongodb-js/saslprep/dist/index.d.ts @@ -0,0 +1,10 @@ +declare function saslprep(input: string, opts?: { + allowUnassigned?: boolean; +}): string; +declare namespace saslprep { + export var saslprep: typeof import("."); + var _a: typeof import("."); + export { _a as default }; +} +export = saslprep; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/Url-Shortner/node_modules/@mongodb-js/saslprep/dist/index.d.ts.map b/Url-Shortner/node_modules/@mongodb-js/saslprep/dist/index.d.ts.map new file mode 100644 index 0000000..3e476bd --- /dev/null +++ b/Url-Shortner/node_modules/@mongodb-js/saslprep/dist/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AA2DA,iBAAS,QAAQ,CACf,KAAK,EAAE,MAAM,EACb,IAAI,GAAE;IAAE,eAAe,CAAC,EAAE,OAAO,CAAA;CAAO,GACvC,MAAM,CAuFR;kBA1FQ,QAAQ;;;;;AA8FjB,SAAS,QAAQ,CAAC"} \ No newline at end of file diff --git a/Url-Shortner/node_modules/@mongodb-js/saslprep/dist/index.js b/Url-Shortner/node_modules/@mongodb-js/saslprep/dist/index.js new file mode 100644 index 0000000..201e607 --- /dev/null +++ b/Url-Shortner/node_modules/@mongodb-js/saslprep/dist/index.js @@ -0,0 +1,66 @@ +"use strict"; +const memory_code_points_1 = require("./memory-code-points"); +const mapping2space = memory_code_points_1.non_ASCII_space_characters; +const mapping2nothing = memory_code_points_1.commonly_mapped_to_nothing; +const getCodePoint = (character) => character.codePointAt(0); +const first = (x) => x[0]; +const last = (x) => x[x.length - 1]; +function toCodePoints(input) { + const codepoints = []; + const size = input.length; + for (let i = 0; i < size; i += 1) { + const before = input.charCodeAt(i); + if (before >= 0xd800 && before <= 0xdbff && size > i + 1) { + const next = input.charCodeAt(i + 1); + if (next >= 0xdc00 && next <= 0xdfff) { + codepoints.push((before - 0xd800) * 0x400 + next - 0xdc00 + 0x10000); + i += 1; + continue; + } + } + codepoints.push(before); + } + return codepoints; +} +function saslprep(input, opts = {}) { + if (typeof input !== 'string') { + throw new TypeError('Expected string.'); + } + if (input.length === 0) { + return ''; + } + const mapped_input = toCodePoints(input) + .map((character) => (mapping2space.get(character) ? 0x20 : character)) + .filter((character) => !mapping2nothing.get(character)); + const normalized_input = String.fromCodePoint + .apply(null, mapped_input) + .normalize('NFKC'); + const normalized_map = toCodePoints(normalized_input); + const hasProhibited = normalized_map.some((character) => memory_code_points_1.prohibited_characters.get(character)); + if (hasProhibited) { + throw new Error('Prohibited character, see https://tools.ietf.org/html/rfc4013#section-2.3'); + } + if (opts.allowUnassigned !== true) { + const hasUnassigned = normalized_map.some((character) => memory_code_points_1.unassigned_code_points.get(character)); + if (hasUnassigned) { + throw new Error('Unassigned code point, see https://tools.ietf.org/html/rfc4013#section-2.5'); + } + } + const hasBidiRAL = normalized_map.some((character) => memory_code_points_1.bidirectional_r_al.get(character)); + const hasBidiL = normalized_map.some((character) => memory_code_points_1.bidirectional_l.get(character)); + if (hasBidiRAL && hasBidiL) { + throw new Error('String must not contain RandALCat and LCat at the same time,' + + ' see https://tools.ietf.org/html/rfc3454#section-6'); + } + const isFirstBidiRAL = memory_code_points_1.bidirectional_r_al.get(getCodePoint(first(normalized_input))); + const isLastBidiRAL = memory_code_points_1.bidirectional_r_al.get(getCodePoint(last(normalized_input))); + if (hasBidiRAL && !(isFirstBidiRAL && isLastBidiRAL)) { + throw new Error('Bidirectional RandALCat character must be the first and the last' + + ' character of the string, see https://tools.ietf.org/html/rfc3454#section-6'); + } + return normalized_input; +} +saslprep.saslprep = saslprep; +saslprep.default = saslprep; +module.exports = saslprep; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/Url-Shortner/node_modules/@mongodb-js/saslprep/dist/index.js.map b/Url-Shortner/node_modules/@mongodb-js/saslprep/dist/index.js.map new file mode 100644 index 0000000..73962b7 --- /dev/null +++ b/Url-Shortner/node_modules/@mongodb-js/saslprep/dist/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/Url-Shortner/node_modules/@mongodb-js/saslprep/dist/memory-code-points.d.ts b/Url-Shortner/node_modules/@mongodb-js/saslprep/dist/memory-code-points.d.ts new file mode 100644 index 0000000..2c9b622 --- /dev/null +++ b/Url-Shortner/node_modules/@mongodb-js/saslprep/dist/memory-code-points.d.ts @@ -0,0 +1,8 @@ +import bitfield from 'sparse-bitfield'; +export declare const unassigned_code_points: bitfield.BitFieldInstance; +export declare const commonly_mapped_to_nothing: bitfield.BitFieldInstance; +export declare const non_ASCII_space_characters: bitfield.BitFieldInstance; +export declare const prohibited_characters: bitfield.BitFieldInstance; +export declare const bidirectional_r_al: bitfield.BitFieldInstance; +export declare const bidirectional_l: bitfield.BitFieldInstance; +//# sourceMappingURL=memory-code-points.d.ts.map \ No newline at end of file diff --git a/Url-Shortner/node_modules/@mongodb-js/saslprep/dist/memory-code-points.d.ts.map b/Url-Shortner/node_modules/@mongodb-js/saslprep/dist/memory-code-points.d.ts.map new file mode 100644 index 0000000..6601262 --- /dev/null +++ b/Url-Shortner/node_modules/@mongodb-js/saslprep/dist/memory-code-points.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"memory-code-points.d.ts","sourceRoot":"","sources":["../src/memory-code-points.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,iBAAiB,CAAC;AAkBvC,eAAO,MAAM,sBAAsB,2BAAS,CAAC;AAC7C,eAAO,MAAM,0BAA0B,2BAAS,CAAC;AACjD,eAAO,MAAM,0BAA0B,2BAAS,CAAC;AACjD,eAAO,MAAM,qBAAqB,2BAAS,CAAC;AAC5C,eAAO,MAAM,kBAAkB,2BAAS,CAAC;AACzC,eAAO,MAAM,eAAe,2BAAS,CAAC"} \ No newline at end of file diff --git a/Url-Shortner/node_modules/@mongodb-js/saslprep/dist/memory-code-points.js b/Url-Shortner/node_modules/@mongodb-js/saslprep/dist/memory-code-points.js new file mode 100644 index 0000000..8089c04 --- /dev/null +++ b/Url-Shortner/node_modules/@mongodb-js/saslprep/dist/memory-code-points.js @@ -0,0 +1,23 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.bidirectional_l = exports.bidirectional_r_al = exports.prohibited_characters = exports.non_ASCII_space_characters = exports.commonly_mapped_to_nothing = exports.unassigned_code_points = void 0; +const sparse_bitfield_1 = __importDefault(require("sparse-bitfield")); +const code_points_data_1 = __importDefault(require("./code-points-data")); +let offset = 0; +function read() { + const size = code_points_data_1.default.readUInt32BE(offset); + offset += 4; + const codepoints = code_points_data_1.default.slice(offset, offset + size); + offset += size; + return (0, sparse_bitfield_1.default)({ buffer: codepoints }); +} +exports.unassigned_code_points = read(); +exports.commonly_mapped_to_nothing = read(); +exports.non_ASCII_space_characters = read(); +exports.prohibited_characters = read(); +exports.bidirectional_r_al = read(); +exports.bidirectional_l = read(); +//# sourceMappingURL=memory-code-points.js.map \ No newline at end of file diff --git a/Url-Shortner/node_modules/@mongodb-js/saslprep/dist/memory-code-points.js.map b/Url-Shortner/node_modules/@mongodb-js/saslprep/dist/memory-code-points.js.map new file mode 100644 index 0000000..c6d7f1e --- /dev/null +++ b/Url-Shortner/node_modules/@mongodb-js/saslprep/dist/memory-code-points.js.map @@ -0,0 +1 @@ +{"version":3,"file":"memory-code-points.js","sourceRoot":"","sources":["../src/memory-code-points.ts"],"names":[],"mappings":";;;;;;AAAA,sEAAuC;AACvC,0EAAwC;AAExC,IAAI,MAAM,GAAG,CAAC,CAAC;AAKf,SAAS,IAAI;IACX,MAAM,IAAI,GAAG,0BAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IACzC,MAAM,IAAI,CAAC,CAAC;IAEZ,MAAM,UAAU,GAAG,0BAAM,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC;IACvD,MAAM,IAAI,IAAI,CAAC;IAEf,OAAO,IAAA,yBAAQ,EAAC,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;AAC1C,CAAC;AAEY,QAAA,sBAAsB,GAAG,IAAI,EAAE,CAAC;AAChC,QAAA,0BAA0B,GAAG,IAAI,EAAE,CAAC;AACpC,QAAA,0BAA0B,GAAG,IAAI,EAAE,CAAC;AACpC,QAAA,qBAAqB,GAAG,IAAI,EAAE,CAAC;AAC/B,QAAA,kBAAkB,GAAG,IAAI,EAAE,CAAC;AAC5B,QAAA,eAAe,GAAG,IAAI,EAAE,CAAC"} \ No newline at end of file diff --git a/Url-Shortner/node_modules/@mongodb-js/saslprep/dist/util.d.ts b/Url-Shortner/node_modules/@mongodb-js/saslprep/dist/util.d.ts new file mode 100644 index 0000000..3a0466e --- /dev/null +++ b/Url-Shortner/node_modules/@mongodb-js/saslprep/dist/util.d.ts @@ -0,0 +1,2 @@ +export declare function range(from: number, to: number): number[]; +//# sourceMappingURL=util.d.ts.map \ No newline at end of file diff --git a/Url-Shortner/node_modules/@mongodb-js/saslprep/dist/util.d.ts.map b/Url-Shortner/node_modules/@mongodb-js/saslprep/dist/util.d.ts.map new file mode 100644 index 0000000..50c7167 --- /dev/null +++ b/Url-Shortner/node_modules/@mongodb-js/saslprep/dist/util.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAGA,wBAAgB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,CAQxD"} \ No newline at end of file diff --git a/Url-Shortner/node_modules/@mongodb-js/saslprep/dist/util.js b/Url-Shortner/node_modules/@mongodb-js/saslprep/dist/util.js new file mode 100644 index 0000000..f679cab --- /dev/null +++ b/Url-Shortner/node_modules/@mongodb-js/saslprep/dist/util.js @@ -0,0 +1,12 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.range = void 0; +function range(from, to) { + const list = new Array(to - from + 1); + for (let i = 0; i < list.length; i += 1) { + list[i] = from + i; + } + return list; +} +exports.range = range; +//# sourceMappingURL=util.js.map \ No newline at end of file diff --git a/Url-Shortner/node_modules/@mongodb-js/saslprep/dist/util.js.map b/Url-Shortner/node_modules/@mongodb-js/saslprep/dist/util.js.map new file mode 100644 index 0000000..1bab681 --- /dev/null +++ b/Url-Shortner/node_modules/@mongodb-js/saslprep/dist/util.js.map @@ -0,0 +1 @@ +{"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":";;;AAGA,SAAgB,KAAK,CAAC,IAAY,EAAE,EAAU;IAE5C,MAAM,IAAI,GAAG,IAAI,KAAK,CAAC,EAAE,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC;IAEtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;QACvC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC;KACpB;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AARD,sBAQC"} \ No newline at end of file diff --git a/Url-Shortner/node_modules/@mongodb-js/saslprep/package.json b/Url-Shortner/node_modules/@mongodb-js/saslprep/package.json new file mode 100644 index 0000000..8641f9b --- /dev/null +++ b/Url-Shortner/node_modules/@mongodb-js/saslprep/package.json @@ -0,0 +1,83 @@ +{ + "name": "@mongodb-js/saslprep", + "description": "SASLprep: Stringprep Profile for User Names and Passwords, rfc4013", + "keywords": [ + "sasl", + "saslprep", + "stringprep", + "rfc4013", + "4013" + ], + "author": "Dmitry Tsvettsikh ", + "publishConfig": { + "access": "public" + }, + "main": "dist/index.js", + "bugs": { + "url": "https://jira.mongodb.org/projects/COMPASS/issues", + "email": "compass@mongodb.com" + }, + "homepage": "https://github.com/mongodb-js/devtools-shared/tree/main/packages/saslprep", + "version": "1.1.0", + "repository": { + "type": "git", + "url": "https://github.com/mongodb-js/devtools-shared.git" + }, + "files": [ + "dist" + ], + "license": "MIT", + "exports": { + "import": { + "types": "./dist/index.d.ts", + "default": "./dist/.esm-wrapper.mjs" + }, + "require": { + "types": "./dist/index.d.ts", + "default": "./dist/index.js" + } + }, + "types": "./dist/index.d.ts", + "scripts": { + "gen-code-points": "ts-node src/generate-code-points.ts > src/code-points-data.ts", + "bootstrap": "npm run compile", + "prepublishOnly": "npm run compile", + "compile": "npm run gen-code-points && tsc -p tsconfig.json && gen-esm-wrapper . ./dist/.esm-wrapper.mjs", + "typecheck": "tsc --noEmit", + "eslint": "eslint", + "prettier": "prettier", + "lint": "npm run eslint . && npm run prettier -- --check .", + "depcheck": "depcheck", + "check": "npm run typecheck && npm run lint && npm run depcheck", + "check-ci": "npm run check", + "test": "mocha", + "test-cov": "nyc -x \"**/*.spec.*\" --reporter=lcov --reporter=text --reporter=html npm run test", + "test-watch": "npm run test -- --watch", + "test-ci": "npm run test-cov", + "reformat": "npm run prettier -- --write ." + }, + "dependencies": { + "sparse-bitfield": "^3.0.3" + }, + "devDependencies": { + "@mongodb-js/eslint-config-devtools": "0.9.10", + "@mongodb-js/mocha-config-devtools": "^1.0.1", + "@mongodb-js/prettier-config-devtools": "^1.0.1", + "@mongodb-js/tsconfig-devtools": "^1.0.1", + "@types/chai": "^4.2.21", + "@types/mocha": "^9.0.0", + "@types/node": "^17.0.35", + "@types/sinon-chai": "^3.2.5", + "@types/sparse-bitfield": "^3.0.1", + "chai": "^4.3.6", + "depcheck": "^1.4.1", + "eslint": "^7.25.0", + "gen-esm-wrapper": "^1.1.0", + "mocha": "^8.4.0", + "nyc": "^15.1.0", + "prettier": "^2.3.2", + "sinon": "^9.2.3", + "typescript": "^5.0.4" + }, + "gitHead": "2db5dcbccc918c10118354e6f55e83bf389e3bc8" +} diff --git a/Url-Shortner/node_modules/@mongodb-js/saslprep/readme.md b/Url-Shortner/node_modules/@mongodb-js/saslprep/readme.md new file mode 100644 index 0000000..28539ed --- /dev/null +++ b/Url-Shortner/node_modules/@mongodb-js/saslprep/readme.md @@ -0,0 +1,29 @@ +# saslprep + +_Note: This is a fork of the original [`saslprep`](https://www.npmjs.com/package/saslprep) npm package +and provides equivalent functionality._ + +Stringprep Profile for User Names and Passwords, [rfc4013](https://tools.ietf.org/html/rfc4013) + +### Usage + +```js +const saslprep = require('@mongodb-js/saslprep'); + +saslprep('password\u00AD'); // password +saslprep('password\u0007'); // Error: prohibited character +``` + +### API + +##### `saslprep(input: String, opts: Options): String` + +Normalize user name or password. + +##### `Options.allowUnassigned: bool` + +A special behavior for unassigned code points, see https://tools.ietf.org/html/rfc4013#section-2.5. Disabled by default. + +## License + +MIT, 2017-2019 (c) Dmitriy Tsvettsikh diff --git a/Url-Shortner/node_modules/@types/node/LICENSE b/Url-Shortner/node_modules/@types/node/LICENSE new file mode 100644 index 0000000..9e841e7 --- /dev/null +++ b/Url-Shortner/node_modules/@types/node/LICENSE @@ -0,0 +1,21 @@ + 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 diff --git a/Url-Shortner/node_modules/@types/node/README.md b/Url-Shortner/node_modules/@types/node/README.md new file mode 100644 index 0000000..749cc4d --- /dev/null +++ b/Url-Shortner/node_modules/@types/node/README.md @@ -0,0 +1,16 @@ +# Installation +> `npm install --save @types/node` + +# Summary +This package contains type definitions for Node.js (https://nodejs.org/). + +# Details +Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node. + +### Additional Details + * Last updated: Sun, 24 Sep 2023 17:34:55 GMT + * Dependencies: none + * Global values: `AbortController`, `AbortSignal`, `__dirname`, `__filename`, `console`, `exports`, `gc`, `global`, `module`, `process`, `require`, `structuredClone` + +# Credits +These definitions were written by [Microsoft TypeScript](https://github.com/Microsoft), [DefinitelyTyped](https://github.com/DefinitelyTyped), [Alberto Schiabel](https://github.com/jkomyno), [Alvis HT Tang](https://github.com/alvis), [Andrew Makarov](https://github.com/r3nya), [Benjamin Toueg](https://github.com/btoueg), [Chigozirim C.](https://github.com/smac89), [David Junger](https://github.com/touffy), [Deividas Bakanas](https://github.com/DeividasBakanas), [Eugene Y. Q. Shen](https://github.com/eyqs), [Hannes Magnusson](https://github.com/Hannes-Magnusson-CK), [Huw](https://github.com/hoo29), [Kelvin Jin](https://github.com/kjin), [Klaus Meinhardt](https://github.com/ajafff), [Lishude](https://github.com/islishude), [Mariusz Wiktorczyk](https://github.com/mwiktorczyk), [Mohsen Azimi](https://github.com/mohsen1), [Nicolas Even](https://github.com/n-e), [Nikita Galkin](https://github.com/galkin), [Parambir Singh](https://github.com/parambirs), [Sebastian Silbermann](https://github.com/eps1lon), [Thomas den Hollander](https://github.com/ThomasdenH), [Wilco Bakker](https://github.com/WilcoBakker), [wwwy3y3](https://github.com/wwwy3y3), [Samuel Ainsworth](https://github.com/samuela), [Kyle Uehlein](https://github.com/kuehlein), [Thanik Bhongbhibhat](https://github.com/bhongy), [Marcin Kopacz](https://github.com/chyzwar), [Trivikram Kamat](https://github.com/trivikr), [Junxiao Shi](https://github.com/yoursunny), [Ilia Baryshnikov](https://github.com/qwelias), [ExE Boss](https://github.com/ExE-Boss), [Piotr Błażejewicz](https://github.com/peterblazejewicz), [Anna Henningsen](https://github.com/addaleax), [Victor Perin](https://github.com/victorperin), [Yongsheng Zhang](https://github.com/ZYSzys), [NodeJS Contributors](https://github.com/NodeJS), [Linus Unnebäck](https://github.com/LinusU), [wafuwafu13](https://github.com/wafuwafu13), [Matteo Collina](https://github.com/mcollina), and [Dmitry Semigradsky](https://github.com/Semigradsky). diff --git a/Url-Shortner/node_modules/@types/node/assert.d.ts b/Url-Shortner/node_modules/@types/node/assert.d.ts new file mode 100644 index 0000000..e237c56 --- /dev/null +++ b/Url-Shortner/node_modules/@types/node/assert.d.ts @@ -0,0 +1,996 @@ +/** + * The `node:assert` module provides a set of assertion functions for verifying + * invariants. + * @see [source](https://github.com/nodejs/node/blob/v20.2.0/lib/assert.js) + */ +declare module "assert" { + /** + * An alias of {@link ok}. + * @since v0.5.9 + * @param value The input that is checked for being truthy. + */ + function assert(value: unknown, message?: string | Error): asserts value; + namespace assert { + /** + * Indicates the failure of an assertion. All errors thrown by the `node:assert`module will be instances of the `AssertionError` class. + */ + class AssertionError extends Error { + /** + * Set to the `actual` argument for methods such as {@link assert.strictEqual()}. + */ + actual: unknown; + /** + * Set to the `expected` argument for methods such as {@link assert.strictEqual()}. + */ + expected: unknown; + /** + * Set to the passed in operator value. + */ + operator: string; + /** + * Indicates if the message was auto-generated (`true`) or not. + */ + generatedMessage: boolean; + /** + * Value is always `ERR_ASSERTION` to show that the error is an assertion error. + */ + code: "ERR_ASSERTION"; + constructor(options?: { + /** If provided, the error message is set to this value. */ + message?: string | undefined; + /** The `actual` property on the error instance. */ + actual?: unknown | undefined; + /** The `expected` property on the error instance. */ + expected?: unknown | undefined; + /** The `operator` property on the error instance. */ + operator?: string | undefined; + /** If provided, the generated stack trace omits frames before this function. */ + // tslint:disable-next-line:ban-types + stackStartFn?: Function | undefined; + }); + } + /** + * This feature is deprecated and will be removed in a future version. + * Please consider using alternatives such as the `mock` helper function. + * @since v14.2.0, v12.19.0 + * @deprecated Deprecated + */ + class CallTracker { + /** + * The wrapper function is expected to be called exactly `exact` times. If the + * function has not been called exactly `exact` times when `tracker.verify()` is called, then `tracker.verify()` will throw an + * error. + * + * ```js + * import assert from 'node:assert'; + * + * // Creates call tracker. + * const tracker = new assert.CallTracker(); + * + * function func() {} + * + * // Returns a function that wraps func() that must be called exact times + * // before tracker.verify(). + * const callsfunc = tracker.calls(func); + * ``` + * @since v14.2.0, v12.19.0 + * @param [fn='A no-op function'] + * @param [exact=1] + * @return that wraps `fn`. + */ + calls(exact?: number): () => void; + calls any>(fn?: Func, exact?: number): Func; + /** + * Example: + * + * ```js + * import assert from 'node:assert'; + * + * const tracker = new assert.CallTracker(); + * + * function func() {} + * const callsfunc = tracker.calls(func); + * callsfunc(1, 2, 3); + * + * assert.deepStrictEqual(tracker.getCalls(callsfunc), + * [{ thisArg: undefined, arguments: [1, 2, 3] }]); + * ``` + * @since v18.8.0, v16.18.0 + * @param fn + * @return An Array with all the calls to a tracked function. + */ + getCalls(fn: Function): CallTrackerCall[]; + /** + * The arrays contains information about the expected and actual number of calls of + * the functions that have not been called the expected number of times. + * + * ```js + * import assert from 'node:assert'; + * + * // Creates call tracker. + * const tracker = new assert.CallTracker(); + * + * function func() {} + * + * // Returns a function that wraps func() that must be called exact times + * // before tracker.verify(). + * const callsfunc = tracker.calls(func, 2); + * + * // Returns an array containing information on callsfunc() + * console.log(tracker.report()); + * // [ + * // { + * // message: 'Expected the func function to be executed 2 time(s) but was + * // executed 0 time(s).', + * // actual: 0, + * // expected: 2, + * // operator: 'func', + * // stack: stack trace + * // } + * // ] + * ``` + * @since v14.2.0, v12.19.0 + * @return An Array of objects containing information about the wrapper functions returned by `calls`. + */ + report(): CallTrackerReportInformation[]; + /** + * Reset calls of the call tracker. + * If a tracked function is passed as an argument, the calls will be reset for it. + * If no arguments are passed, all tracked functions will be reset. + * + * ```js + * import assert from 'node:assert'; + * + * const tracker = new assert.CallTracker(); + * + * function func() {} + * const callsfunc = tracker.calls(func); + * + * callsfunc(); + * // Tracker was called once + * assert.strictEqual(tracker.getCalls(callsfunc).length, 1); + * + * tracker.reset(callsfunc); + * assert.strictEqual(tracker.getCalls(callsfunc).length, 0); + * ``` + * @since v18.8.0, v16.18.0 + * @param fn a tracked function to reset. + */ + reset(fn?: Function): void; + /** + * Iterates through the list of functions passed to `tracker.calls()` and will throw an error for functions that + * have not been called the expected number of times. + * + * ```js + * import assert from 'node:assert'; + * + * // Creates call tracker. + * const tracker = new assert.CallTracker(); + * + * function func() {} + * + * // Returns a function that wraps func() that must be called exact times + * // before tracker.verify(). + * const callsfunc = tracker.calls(func, 2); + * + * callsfunc(); + * + * // Will throw an error since callsfunc() was only called once. + * tracker.verify(); + * ``` + * @since v14.2.0, v12.19.0 + */ + verify(): void; + } + interface CallTrackerCall { + thisArg: object; + arguments: unknown[]; + } + interface CallTrackerReportInformation { + message: string; + /** The actual number of times the function was called. */ + actual: number; + /** The number of times the function was expected to be called. */ + expected: number; + /** The name of the function that is wrapped. */ + operator: string; + /** A stack trace of the function. */ + stack: object; + } + type AssertPredicate = RegExp | (new() => object) | ((thrown: unknown) => boolean) | object | Error; + /** + * Throws an `AssertionError` with the provided error message or a default + * error message. If the `message` parameter is an instance of an `Error` then + * it will be thrown instead of the `AssertionError`. + * + * ```js + * import assert from 'node:assert/strict'; + * + * assert.fail(); + * // AssertionError [ERR_ASSERTION]: Failed + * + * assert.fail('boom'); + * // AssertionError [ERR_ASSERTION]: boom + * + * assert.fail(new TypeError('need array')); + * // TypeError: need array + * ``` + * + * Using `assert.fail()` with more than two arguments is possible but deprecated. + * See below for further details. + * @since v0.1.21 + * @param [message='Failed'] + */ + function fail(message?: string | Error): never; + /** @deprecated since v10.0.0 - use fail([message]) or other assert functions instead. */ + function fail( + actual: unknown, + expected: unknown, + message?: string | Error, + operator?: string, + // tslint:disable-next-line:ban-types + stackStartFn?: Function, + ): never; + /** + * Tests if `value` is truthy. It is equivalent to`assert.equal(!!value, true, message)`. + * + * If `value` is not truthy, an `AssertionError` is thrown with a `message`property set equal to the value of the `message` parameter. If the `message`parameter is `undefined`, a default + * error message is assigned. If the `message`parameter is an instance of an `Error` then it will be thrown instead of the`AssertionError`. + * If no arguments are passed in at all `message` will be set to the string:`` 'No value argument passed to `assert.ok()`' ``. + * + * Be aware that in the `repl` the error message will be different to the one + * thrown in a file! See below for further details. + * + * ```js + * import assert from 'node:assert/strict'; + * + * assert.ok(true); + * // OK + * assert.ok(1); + * // OK + * + * assert.ok(); + * // AssertionError: No value argument passed to `assert.ok()` + * + * assert.ok(false, 'it\'s false'); + * // AssertionError: it's false + * + * // In the repl: + * assert.ok(typeof 123 === 'string'); + * // AssertionError: false == true + * + * // In a file (e.g. test.js): + * assert.ok(typeof 123 === 'string'); + * // AssertionError: The expression evaluated to a falsy value: + * // + * // assert.ok(typeof 123 === 'string') + * + * assert.ok(false); + * // AssertionError: The expression evaluated to a falsy value: + * // + * // assert.ok(false) + * + * assert.ok(0); + * // AssertionError: The expression evaluated to a falsy value: + * // + * // assert.ok(0) + * ``` + * + * ```js + * import assert from 'node:assert/strict'; + * + * // Using `assert()` works the same: + * assert(0); + * // AssertionError: The expression evaluated to a falsy value: + * // + * // assert(0) + * ``` + * @since v0.1.21 + */ + function ok(value: unknown, message?: string | Error): asserts value; + /** + * **Strict assertion mode** + * + * An alias of {@link strictEqual}. + * + * **Legacy assertion mode** + * + * > Stability: 3 - Legacy: Use {@link strictEqual} instead. + * + * Tests shallow, coercive equality between the `actual` and `expected` parameters + * using the [`==` operator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Equality). `NaN` is specially handled + * and treated as being identical if both sides are `NaN`. + * + * ```js + * import assert from 'node:assert'; + * + * assert.equal(1, 1); + * // OK, 1 == 1 + * assert.equal(1, '1'); + * // OK, 1 == '1' + * assert.equal(NaN, NaN); + * // OK + * + * assert.equal(1, 2); + * // AssertionError: 1 == 2 + * assert.equal({ a: { b: 1 } }, { a: { b: 1 } }); + * // AssertionError: { a: { b: 1 } } == { a: { b: 1 } } + * ``` + * + * If the values are not equal, an `AssertionError` is thrown with a `message`property set equal to the value of the `message` parameter. If the `message`parameter is undefined, a default + * error message is assigned. If the `message`parameter is an instance of an `Error` then it will be thrown instead of the`AssertionError`. + * @since v0.1.21 + */ + function equal(actual: unknown, expected: unknown, message?: string | Error): void; + /** + * **Strict assertion mode** + * + * An alias of {@link notStrictEqual}. + * + * **Legacy assertion mode** + * + * > Stability: 3 - Legacy: Use {@link notStrictEqual} instead. + * + * Tests shallow, coercive inequality with the [`!=` operator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Inequality). `NaN` is + * specially handled and treated as being identical if both sides are `NaN`. + * + * ```js + * import assert from 'node:assert'; + * + * assert.notEqual(1, 2); + * // OK + * + * assert.notEqual(1, 1); + * // AssertionError: 1 != 1 + * + * assert.notEqual(1, '1'); + * // AssertionError: 1 != '1' + * ``` + * + * If the values are equal, an `AssertionError` is thrown with a `message`property set equal to the value of the `message` parameter. If the `message`parameter is undefined, a default error + * message is assigned. If the `message`parameter is an instance of an `Error` then it will be thrown instead of the`AssertionError`. + * @since v0.1.21 + */ + function notEqual(actual: unknown, expected: unknown, message?: string | Error): void; + /** + * **Strict assertion mode** + * + * An alias of {@link deepStrictEqual}. + * + * **Legacy assertion mode** + * + * > Stability: 3 - Legacy: Use {@link deepStrictEqual} instead. + * + * Tests for deep equality between the `actual` and `expected` parameters. Consider + * using {@link deepStrictEqual} instead. {@link deepEqual} can have + * surprising results. + * + * _Deep equality_ means that the enumerable "own" properties of child objects + * are also recursively evaluated by the following rules. + * @since v0.1.21 + */ + function deepEqual(actual: unknown, expected: unknown, message?: string | Error): void; + /** + * **Strict assertion mode** + * + * An alias of {@link notDeepStrictEqual}. + * + * **Legacy assertion mode** + * + * > Stability: 3 - Legacy: Use {@link notDeepStrictEqual} instead. + * + * Tests for any deep inequality. Opposite of {@link deepEqual}. + * + * ```js + * import assert from 'node:assert'; + * + * const obj1 = { + * a: { + * b: 1, + * }, + * }; + * const obj2 = { + * a: { + * b: 2, + * }, + * }; + * const obj3 = { + * a: { + * b: 1, + * }, + * }; + * const obj4 = { __proto__: obj1 }; + * + * assert.notDeepEqual(obj1, obj1); + * // AssertionError: { a: { b: 1 } } notDeepEqual { a: { b: 1 } } + * + * assert.notDeepEqual(obj1, obj2); + * // OK + * + * assert.notDeepEqual(obj1, obj3); + * // AssertionError: { a: { b: 1 } } notDeepEqual { a: { b: 1 } } + * + * assert.notDeepEqual(obj1, obj4); + * // OK + * ``` + * + * If the values are deeply equal, an `AssertionError` is thrown with a`message` property set equal to the value of the `message` parameter. If the`message` parameter is undefined, a default + * error message is assigned. If the`message` parameter is an instance of an `Error` then it will be thrown + * instead of the `AssertionError`. + * @since v0.1.21 + */ + function notDeepEqual(actual: unknown, expected: unknown, message?: string | Error): void; + /** + * Tests strict equality between the `actual` and `expected` parameters as + * determined by [`Object.is()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is). + * + * ```js + * import assert from 'node:assert/strict'; + * + * assert.strictEqual(1, 2); + * // AssertionError [ERR_ASSERTION]: Expected inputs to be strictly equal: + * // + * // 1 !== 2 + * + * assert.strictEqual(1, 1); + * // OK + * + * assert.strictEqual('Hello foobar', 'Hello World!'); + * // AssertionError [ERR_ASSERTION]: Expected inputs to be strictly equal: + * // + actual - expected + * // + * // + 'Hello foobar' + * // - 'Hello World!' + * // ^ + * + * const apples = 1; + * const oranges = 2; + * assert.strictEqual(apples, oranges, `apples ${apples} !== oranges ${oranges}`); + * // AssertionError [ERR_ASSERTION]: apples 1 !== oranges 2 + * + * assert.strictEqual(1, '1', new TypeError('Inputs are not identical')); + * // TypeError: Inputs are not identical + * ``` + * + * If the values are not strictly equal, an `AssertionError` is thrown with a`message` property set equal to the value of the `message` parameter. If the`message` parameter is undefined, a + * default error message is assigned. If the`message` parameter is an instance of an `Error` then it will be thrown + * instead of the `AssertionError`. + * @since v0.1.21 + */ + function strictEqual(actual: unknown, expected: T, message?: string | Error): asserts actual is T; + /** + * Tests strict inequality between the `actual` and `expected` parameters as + * determined by [`Object.is()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is). + * + * ```js + * import assert from 'node:assert/strict'; + * + * assert.notStrictEqual(1, 2); + * // OK + * + * assert.notStrictEqual(1, 1); + * // AssertionError [ERR_ASSERTION]: Expected "actual" to be strictly unequal to: + * // + * // 1 + * + * assert.notStrictEqual(1, '1'); + * // OK + * ``` + * + * If the values are strictly equal, an `AssertionError` is thrown with a`message` property set equal to the value of the `message` parameter. If the`message` parameter is undefined, a + * default error message is assigned. If the`message` parameter is an instance of an `Error` then it will be thrown + * instead of the `AssertionError`. + * @since v0.1.21 + */ + function notStrictEqual(actual: unknown, expected: unknown, message?: string | Error): void; + /** + * Tests for deep equality between the `actual` and `expected` parameters. + * "Deep" equality means that the enumerable "own" properties of child objects + * are recursively evaluated also by the following rules. + * @since v1.2.0 + */ + function deepStrictEqual(actual: unknown, expected: T, message?: string | Error): asserts actual is T; + /** + * Tests for deep strict inequality. Opposite of {@link deepStrictEqual}. + * + * ```js + * import assert from 'node:assert/strict'; + * + * assert.notDeepStrictEqual({ a: 1 }, { a: '1' }); + * // OK + * ``` + * + * If the values are deeply and strictly equal, an `AssertionError` is thrown + * with a `message` property set equal to the value of the `message` parameter. If + * the `message` parameter is undefined, a default error message is assigned. If + * the `message` parameter is an instance of an `Error` then it will be thrown + * instead of the `AssertionError`. + * @since v1.2.0 + */ + function notDeepStrictEqual(actual: unknown, expected: unknown, message?: string | Error): void; + /** + * Expects the function `fn` to throw an error. + * + * If specified, `error` can be a [`Class`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes), + * [`RegExp`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions), a validation function, + * a validation object where each property will be tested for strict deep equality, + * or an instance of error where each property will be tested for strict deep + * equality including the non-enumerable `message` and `name` properties. When + * using an object, it is also possible to use a regular expression, when + * validating against a string property. See below for examples. + * + * If specified, `message` will be appended to the message provided by the`AssertionError` if the `fn` call fails to throw or in case the error validation + * fails. + * + * Custom validation object/error instance: + * + * ```js + * import assert from 'node:assert/strict'; + * + * const err = new TypeError('Wrong value'); + * err.code = 404; + * err.foo = 'bar'; + * err.info = { + * nested: true, + * baz: 'text', + * }; + * err.reg = /abc/i; + * + * assert.throws( + * () => { + * throw err; + * }, + * { + * name: 'TypeError', + * message: 'Wrong value', + * info: { + * nested: true, + * baz: 'text', + * }, + * // Only properties on the validation object will be tested for. + * // Using nested objects requires all properties to be present. Otherwise + * // the validation is going to fail. + * }, + * ); + * + * // Using regular expressions to validate error properties: + * assert.throws( + * () => { + * throw err; + * }, + * { + * // The `name` and `message` properties are strings and using regular + * // expressions on those will match against the string. If they fail, an + * // error is thrown. + * name: /^TypeError$/, + * message: /Wrong/, + * foo: 'bar', + * info: { + * nested: true, + * // It is not possible to use regular expressions for nested properties! + * baz: 'text', + * }, + * // The `reg` property contains a regular expression and only if the + * // validation object contains an identical regular expression, it is going + * // to pass. + * reg: /abc/i, + * }, + * ); + * + * // Fails due to the different `message` and `name` properties: + * assert.throws( + * () => { + * const otherErr = new Error('Not found'); + * // Copy all enumerable properties from `err` to `otherErr`. + * for (const [key, value] of Object.entries(err)) { + * otherErr[key] = value; + * } + * throw otherErr; + * }, + * // The error's `message` and `name` properties will also be checked when using + * // an error as validation object. + * err, + * ); + * ``` + * + * Validate instanceof using constructor: + * + * ```js + * import assert from 'node:assert/strict'; + * + * assert.throws( + * () => { + * throw new Error('Wrong value'); + * }, + * Error, + * ); + * ``` + * + * Validate error message using [`RegExp`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions): + * + * Using a regular expression runs `.toString` on the error object, and will + * therefore also include the error name. + * + * ```js + * import assert from 'node:assert/strict'; + * + * assert.throws( + * () => { + * throw new Error('Wrong value'); + * }, + * /^Error: Wrong value$/, + * ); + * ``` + * + * Custom error validation: + * + * The function must return `true` to indicate all internal validations passed. + * It will otherwise fail with an `AssertionError`. + * + * ```js + * import assert from 'node:assert/strict'; + * + * assert.throws( + * () => { + * throw new Error('Wrong value'); + * }, + * (err) => { + * assert(err instanceof Error); + * assert(/value/.test(err)); + * // Avoid returning anything from validation functions besides `true`. + * // Otherwise, it's not clear what part of the validation failed. Instead, + * // throw an error about the specific validation that failed (as done in this + * // example) and add as much helpful debugging information to that error as + * // possible. + * return true; + * }, + * 'unexpected error', + * ); + * ``` + * + * `error` cannot be a string. If a string is provided as the second + * argument, then `error` is assumed to be omitted and the string will be used for`message` instead. This can lead to easy-to-miss mistakes. Using the same + * message as the thrown error message is going to result in an`ERR_AMBIGUOUS_ARGUMENT` error. Please read the example below carefully if using + * a string as the second argument gets considered: + * + * ```js + * import assert from 'node:assert/strict'; + * + * function throwingFirst() { + * throw new Error('First'); + * } + * + * function throwingSecond() { + * throw new Error('Second'); + * } + * + * function notThrowing() {} + * + * // The second argument is a string and the input function threw an Error. + * // The first case will not throw as it does not match for the error message + * // thrown by the input function! + * assert.throws(throwingFirst, 'Second'); + * // In the next example the message has no benefit over the message from the + * // error and since it is not clear if the user intended to actually match + * // against the error message, Node.js throws an `ERR_AMBIGUOUS_ARGUMENT` error. + * assert.throws(throwingSecond, 'Second'); + * // TypeError [ERR_AMBIGUOUS_ARGUMENT] + * + * // The string is only used (as message) in case the function does not throw: + * assert.throws(notThrowing, 'Second'); + * // AssertionError [ERR_ASSERTION]: Missing expected exception: Second + * + * // If it was intended to match for the error message do this instead: + * // It does not throw because the error messages match. + * assert.throws(throwingSecond, /Second$/); + * + * // If the error message does not match, an AssertionError is thrown. + * assert.throws(throwingFirst, /Second$/); + * // AssertionError [ERR_ASSERTION] + * ``` + * + * Due to the confusing error-prone notation, avoid a string as the second + * argument. + * @since v0.1.21 + */ + function throws(block: () => unknown, message?: string | Error): void; + function throws(block: () => unknown, error: AssertPredicate, message?: string | Error): void; + /** + * Asserts that the function `fn` does not throw an error. + * + * Using `assert.doesNotThrow()` is actually not useful because there + * is no benefit in catching an error and then rethrowing it. Instead, consider + * adding a comment next to the specific code path that should not throw and keep + * error messages as expressive as possible. + * + * When `assert.doesNotThrow()` is called, it will immediately call the `fn`function. + * + * If an error is thrown and it is the same type as that specified by the `error`parameter, then an `AssertionError` is thrown. If the error is of a + * different type, or if the `error` parameter is undefined, the error is + * propagated back to the caller. + * + * If specified, `error` can be a [`Class`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes), + * [`RegExp`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions), or a validation + * function. See {@link throws} for more details. + * + * The following, for instance, will throw the `TypeError` because there is no + * matching error type in the assertion: + * + * ```js + * import assert from 'node:assert/strict'; + * + * assert.doesNotThrow( + * () => { + * throw new TypeError('Wrong value'); + * }, + * SyntaxError, + * ); + * ``` + * + * However, the following will result in an `AssertionError` with the message + * 'Got unwanted exception...': + * + * ```js + * import assert from 'node:assert/strict'; + * + * assert.doesNotThrow( + * () => { + * throw new TypeError('Wrong value'); + * }, + * TypeError, + * ); + * ``` + * + * If an `AssertionError` is thrown and a value is provided for the `message`parameter, the value of `message` will be appended to the `AssertionError` message: + * + * ```js + * import assert from 'node:assert/strict'; + * + * assert.doesNotThrow( + * () => { + * throw new TypeError('Wrong value'); + * }, + * /Wrong value/, + * 'Whoops', + * ); + * // Throws: AssertionError: Got unwanted exception: Whoops + * ``` + * @since v0.1.21 + */ + function doesNotThrow(block: () => unknown, message?: string | Error): void; + function doesNotThrow(block: () => unknown, error: AssertPredicate, message?: string | Error): void; + /** + * Throws `value` if `value` is not `undefined` or `null`. This is useful when + * testing the `error` argument in callbacks. The stack trace contains all frames + * from the error passed to `ifError()` including the potential new frames for`ifError()` itself. + * + * ```js + * import assert from 'node:assert/strict'; + * + * assert.ifError(null); + * // OK + * assert.ifError(0); + * // AssertionError [ERR_ASSERTION]: ifError got unwanted exception: 0 + * assert.ifError('error'); + * // AssertionError [ERR_ASSERTION]: ifError got unwanted exception: 'error' + * assert.ifError(new Error()); + * // AssertionError [ERR_ASSERTION]: ifError got unwanted exception: Error + * + * // Create some random error frames. + * let err; + * (function errorFrame() { + * err = new Error('test error'); + * })(); + * + * (function ifErrorFrame() { + * assert.ifError(err); + * })(); + * // AssertionError [ERR_ASSERTION]: ifError got unwanted exception: test error + * // at ifErrorFrame + * // at errorFrame + * ``` + * @since v0.1.97 + */ + function ifError(value: unknown): asserts value is null | undefined; + /** + * Awaits the `asyncFn` promise or, if `asyncFn` is a function, immediately + * calls the function and awaits the returned promise to complete. It will then + * check that the promise is rejected. + * + * If `asyncFn` is a function and it throws an error synchronously,`assert.rejects()` will return a rejected `Promise` with that error. If the + * function does not return a promise, `assert.rejects()` will return a rejected`Promise` with an `ERR_INVALID_RETURN_VALUE` error. In both cases the error + * handler is skipped. + * + * Besides the async nature to await the completion behaves identically to {@link throws}. + * + * If specified, `error` can be a [`Class`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes), + * [`RegExp`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions), a validation function, + * an object where each property will be tested for, or an instance of error where + * each property will be tested for including the non-enumerable `message` and`name` properties. + * + * If specified, `message` will be the message provided by the `AssertionError` if the `asyncFn` fails to reject. + * + * ```js + * import assert from 'node:assert/strict'; + * + * await assert.rejects( + * async () => { + * throw new TypeError('Wrong value'); + * }, + * { + * name: 'TypeError', + * message: 'Wrong value', + * }, + * ); + * ``` + * + * ```js + * import assert from 'node:assert/strict'; + * + * await assert.rejects( + * async () => { + * throw new TypeError('Wrong value'); + * }, + * (err) => { + * assert.strictEqual(err.name, 'TypeError'); + * assert.strictEqual(err.message, 'Wrong value'); + * return true; + * }, + * ); + * ``` + * + * ```js + * import assert from 'node:assert/strict'; + * + * assert.rejects( + * Promise.reject(new Error('Wrong value')), + * Error, + * ).then(() => { + * // ... + * }); + * ``` + * + * `error` cannot be a string. If a string is provided as the second + * argument, then `error` is assumed to be omitted and the string will be used for`message` instead. This can lead to easy-to-miss mistakes. Please read the + * example in {@link throws} carefully if using a string as the second + * argument gets considered. + * @since v10.0.0 + */ + function rejects(block: (() => Promise) | Promise, message?: string | Error): Promise; + function rejects( + block: (() => Promise) | Promise, + error: AssertPredicate, + message?: string | Error, + ): Promise; + /** + * Awaits the `asyncFn` promise or, if `asyncFn` is a function, immediately + * calls the function and awaits the returned promise to complete. It will then + * check that the promise is not rejected. + * + * If `asyncFn` is a function and it throws an error synchronously,`assert.doesNotReject()` will return a rejected `Promise` with that error. If + * the function does not return a promise, `assert.doesNotReject()` will return a + * rejected `Promise` with an `ERR_INVALID_RETURN_VALUE` error. In both cases + * the error handler is skipped. + * + * Using `assert.doesNotReject()` is actually not useful because there is little + * benefit in catching a rejection and then rejecting it again. Instead, consider + * adding a comment next to the specific code path that should not reject and keep + * error messages as expressive as possible. + * + * If specified, `error` can be a [`Class`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes), + * [`RegExp`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions), or a validation + * function. See {@link throws} for more details. + * + * Besides the async nature to await the completion behaves identically to {@link doesNotThrow}. + * + * ```js + * import assert from 'node:assert/strict'; + * + * await assert.doesNotReject( + * async () => { + * throw new TypeError('Wrong value'); + * }, + * SyntaxError, + * ); + * ``` + * + * ```js + * import assert from 'node:assert/strict'; + * + * assert.doesNotReject(Promise.reject(new TypeError('Wrong value'))) + * .then(() => { + * // ... + * }); + * ``` + * @since v10.0.0 + */ + function doesNotReject( + block: (() => Promise) | Promise, + message?: string | Error, + ): Promise; + function doesNotReject( + block: (() => Promise) | Promise, + error: AssertPredicate, + message?: string | Error, + ): Promise; + /** + * Expects the `string` input to match the regular expression. + * + * ```js + * import assert from 'node:assert/strict'; + * + * assert.match('I will fail', /pass/); + * // AssertionError [ERR_ASSERTION]: The input did not match the regular ... + * + * assert.match(123, /pass/); + * // AssertionError [ERR_ASSERTION]: The "string" argument must be of type string. + * + * assert.match('I will pass', /pass/); + * // OK + * ``` + * + * If the values do not match, or if the `string` argument is of another type than`string`, an `AssertionError` is thrown with a `message` property set equal + * to the value of the `message` parameter. If the `message` parameter is + * undefined, a default error message is assigned. If the `message` parameter is an + * instance of an `Error` then it will be thrown instead of the `AssertionError`. + * @since v13.6.0, v12.16.0 + */ + function match(value: string, regExp: RegExp, message?: string | Error): void; + /** + * Expects the `string` input not to match the regular expression. + * + * ```js + * import assert from 'node:assert/strict'; + * + * assert.doesNotMatch('I will fail', /fail/); + * // AssertionError [ERR_ASSERTION]: The input was expected to not match the ... + * + * assert.doesNotMatch(123, /pass/); + * // AssertionError [ERR_ASSERTION]: The "string" argument must be of type string. + * + * assert.doesNotMatch('I will pass', /different/); + * // OK + * ``` + * + * If the values do match, or if the `string` argument is of another type than`string`, an `AssertionError` is thrown with a `message` property set equal + * to the value of the `message` parameter. If the `message` parameter is + * undefined, a default error message is assigned. If the `message` parameter is an + * instance of an `Error` then it will be thrown instead of the `AssertionError`. + * @since v13.6.0, v12.16.0 + */ + function doesNotMatch(value: string, regExp: RegExp, message?: string | Error): void; + const strict: + & Omit< + typeof assert, + | "equal" + | "notEqual" + | "deepEqual" + | "notDeepEqual" + | "ok" + | "strictEqual" + | "deepStrictEqual" + | "ifError" + | "strict" + > + & { + (value: unknown, message?: string | Error): asserts value; + equal: typeof strictEqual; + notEqual: typeof notStrictEqual; + deepEqual: typeof deepStrictEqual; + notDeepEqual: typeof notDeepStrictEqual; + // Mapped types and assertion functions are incompatible? + // TS2775: Assertions require every name in the call target + // to be declared with an explicit type annotation. + ok: typeof ok; + strictEqual: typeof strictEqual; + deepStrictEqual: typeof deepStrictEqual; + ifError: typeof ifError; + strict: typeof strict; + }; + } + export = assert; +} +declare module "node:assert" { + import assert = require("assert"); + export = assert; +} diff --git a/Url-Shortner/node_modules/@types/node/assert/strict.d.ts b/Url-Shortner/node_modules/@types/node/assert/strict.d.ts new file mode 100644 index 0000000..f333913 --- /dev/null +++ b/Url-Shortner/node_modules/@types/node/assert/strict.d.ts @@ -0,0 +1,8 @@ +declare module "assert/strict" { + import { strict } from "node:assert"; + export = strict; +} +declare module "node:assert/strict" { + import { strict } from "node:assert"; + export = strict; +} diff --git a/Url-Shortner/node_modules/@types/node/async_hooks.d.ts b/Url-Shortner/node_modules/@types/node/async_hooks.d.ts new file mode 100644 index 0000000..0667a61 --- /dev/null +++ b/Url-Shortner/node_modules/@types/node/async_hooks.d.ts @@ -0,0 +1,539 @@ +/** + * We strongly discourage the use of the `async_hooks` API. + * Other APIs that can cover most of its use cases include: + * + * * `AsyncLocalStorage` tracks async context + * * `process.getActiveResourcesInfo()` tracks active resources + * + * The `node:async_hooks` module provides an API to track asynchronous resources. + * It can be accessed using: + * + * ```js + * import async_hooks from 'node:async_hooks'; + * ``` + * @experimental + * @see [source](https://github.com/nodejs/node/blob/v20.2.0/lib/async_hooks.js) + */ +declare module "async_hooks" { + /** + * ```js + * import { executionAsyncId } from 'node:async_hooks'; + * import fs from 'node:fs'; + * + * console.log(executionAsyncId()); // 1 - bootstrap + * const path = '.'; + * fs.open(path, 'r', (err, fd) => { + * console.log(executionAsyncId()); // 6 - open() + * }); + * ``` + * + * The ID returned from `executionAsyncId()` is related to execution timing, not + * causality (which is covered by `triggerAsyncId()`): + * + * ```js + * const server = net.createServer((conn) => { + * // Returns the ID of the server, not of the new connection, because the + * // callback runs in the execution scope of the server's MakeCallback(). + * async_hooks.executionAsyncId(); + * + * }).listen(port, () => { + * // Returns the ID of a TickObject (process.nextTick()) because all + * // callbacks passed to .listen() are wrapped in a nextTick(). + * async_hooks.executionAsyncId(); + * }); + * ``` + * + * Promise contexts may not get precise `executionAsyncIds` by default. + * See the section on `promise execution tracking`. + * @since v8.1.0 + * @return The `asyncId` of the current execution context. Useful to track when something calls. + */ + function executionAsyncId(): number; + /** + * Resource objects returned by `executionAsyncResource()` are most often internal + * Node.js handle objects with undocumented APIs. Using any functions or properties + * on the object is likely to crash your application and should be avoided. + * + * Using `executionAsyncResource()` in the top-level execution context will + * return an empty object as there is no handle or request object to use, + * but having an object representing the top-level can be helpful. + * + * ```js + * import { open } from 'node:fs'; + * import { executionAsyncId, executionAsyncResource } from 'node:async_hooks'; + * + * console.log(executionAsyncId(), executionAsyncResource()); // 1 {} + * open(new URL(import.meta.url), 'r', (err, fd) => { + * console.log(executionAsyncId(), executionAsyncResource()); // 7 FSReqWrap + * }); + * ``` + * + * This can be used to implement continuation local storage without the + * use of a tracking `Map` to store the metadata: + * + * ```js + * import { createServer } from 'node:http'; + * import { + * executionAsyncId, + * executionAsyncResource, + * createHook, + * } from 'async_hooks'; + * const sym = Symbol('state'); // Private symbol to avoid pollution + * + * createHook({ + * init(asyncId, type, triggerAsyncId, resource) { + * const cr = executionAsyncResource(); + * if (cr) { + * resource[sym] = cr[sym]; + * } + * }, + * }).enable(); + * + * const server = createServer((req, res) => { + * executionAsyncResource()[sym] = { state: req.url }; + * setTimeout(function() { + * res.end(JSON.stringify(executionAsyncResource()[sym])); + * }, 100); + * }).listen(3000); + * ``` + * @since v13.9.0, v12.17.0 + * @return The resource representing the current execution. Useful to store data within the resource. + */ + function executionAsyncResource(): object; + /** + * ```js + * const server = net.createServer((conn) => { + * // The resource that caused (or triggered) this callback to be called + * // was that of the new connection. Thus the return value of triggerAsyncId() + * // is the asyncId of "conn". + * async_hooks.triggerAsyncId(); + * + * }).listen(port, () => { + * // Even though all callbacks passed to .listen() are wrapped in a nextTick() + * // the callback itself exists because the call to the server's .listen() + * // was made. So the return value would be the ID of the server. + * async_hooks.triggerAsyncId(); + * }); + * ``` + * + * Promise contexts may not get valid `triggerAsyncId`s by default. See + * the section on `promise execution tracking`. + * @return The ID of the resource responsible for calling the callback that is currently being executed. + */ + function triggerAsyncId(): number; + interface HookCallbacks { + /** + * Called when a class is constructed that has the possibility to emit an asynchronous event. + * @param asyncId a unique ID for the async resource + * @param type the type of the async resource + * @param triggerAsyncId the unique ID of the async resource in whose execution context this async resource was created + * @param resource reference to the resource representing the async operation, needs to be released during destroy + */ + init?(asyncId: number, type: string, triggerAsyncId: number, resource: object): void; + /** + * When an asynchronous operation is initiated or completes a callback is called to notify the user. + * The before callback is called just before said callback is executed. + * @param asyncId the unique identifier assigned to the resource about to execute the callback. + */ + before?(asyncId: number): void; + /** + * Called immediately after the callback specified in before is completed. + * @param asyncId the unique identifier assigned to the resource which has executed the callback. + */ + after?(asyncId: number): void; + /** + * Called when a promise has resolve() called. This may not be in the same execution id + * as the promise itself. + * @param asyncId the unique id for the promise that was resolve()d. + */ + promiseResolve?(asyncId: number): void; + /** + * Called after the resource corresponding to asyncId is destroyed + * @param asyncId a unique ID for the async resource + */ + destroy?(asyncId: number): void; + } + interface AsyncHook { + /** + * Enable the callbacks for a given AsyncHook instance. If no callbacks are provided enabling is a noop. + */ + enable(): this; + /** + * Disable the callbacks for a given AsyncHook instance from the global pool of AsyncHook callbacks to be executed. Once a hook has been disabled it will not be called again until enabled. + */ + disable(): this; + } + /** + * Registers functions to be called for different lifetime events of each async + * operation. + * + * The callbacks `init()`/`before()`/`after()`/`destroy()` are called for the + * respective asynchronous event during a resource's lifetime. + * + * All callbacks are optional. For example, if only resource cleanup needs to + * be tracked, then only the `destroy` callback needs to be passed. The + * specifics of all functions that can be passed to `callbacks` is in the `Hook Callbacks` section. + * + * ```js + * import { createHook } from 'node:async_hooks'; + * + * const asyncHook = createHook({ + * init(asyncId, type, triggerAsyncId, resource) { }, + * destroy(asyncId) { }, + * }); + * ``` + * + * The callbacks will be inherited via the prototype chain: + * + * ```js + * class MyAsyncCallbacks { + * init(asyncId, type, triggerAsyncId, resource) { } + * destroy(asyncId) {} + * } + * + * class MyAddedCallbacks extends MyAsyncCallbacks { + * before(asyncId) { } + * after(asyncId) { } + * } + * + * const asyncHook = async_hooks.createHook(new MyAddedCallbacks()); + * ``` + * + * Because promises are asynchronous resources whose lifecycle is tracked + * via the async hooks mechanism, the `init()`, `before()`, `after()`, and`destroy()` callbacks _must not_ be async functions that return promises. + * @since v8.1.0 + * @param callbacks The `Hook Callbacks` to register + * @return Instance used for disabling and enabling hooks + */ + function createHook(callbacks: HookCallbacks): AsyncHook; + interface AsyncResourceOptions { + /** + * The ID of the execution context that created this async event. + * @default executionAsyncId() + */ + triggerAsyncId?: number | undefined; + /** + * Disables automatic `emitDestroy` when the object is garbage collected. + * This usually does not need to be set (even if `emitDestroy` is called + * manually), unless the resource's `asyncId` is retrieved and the + * sensitive API's `emitDestroy` is called with it. + * @default false + */ + requireManualDestroy?: boolean | undefined; + } + /** + * The class `AsyncResource` is designed to be extended by the embedder's async + * resources. Using this, users can easily trigger the lifetime events of their + * own resources. + * + * The `init` hook will trigger when an `AsyncResource` is instantiated. + * + * The following is an overview of the `AsyncResource` API. + * + * ```js + * import { AsyncResource, executionAsyncId } from 'node:async_hooks'; + * + * // AsyncResource() is meant to be extended. Instantiating a + * // new AsyncResource() also triggers init. If triggerAsyncId is omitted then + * // async_hook.executionAsyncId() is used. + * const asyncResource = new AsyncResource( + * type, { triggerAsyncId: executionAsyncId(), requireManualDestroy: false }, + * ); + * + * // Run a function in the execution context of the resource. This will + * // * establish the context of the resource + * // * trigger the AsyncHooks before callbacks + * // * call the provided function `fn` with the supplied arguments + * // * trigger the AsyncHooks after callbacks + * // * restore the original execution context + * asyncResource.runInAsyncScope(fn, thisArg, ...args); + * + * // Call AsyncHooks destroy callbacks. + * asyncResource.emitDestroy(); + * + * // Return the unique ID assigned to the AsyncResource instance. + * asyncResource.asyncId(); + * + * // Return the trigger ID for the AsyncResource instance. + * asyncResource.triggerAsyncId(); + * ``` + */ + class AsyncResource { + /** + * AsyncResource() is meant to be extended. Instantiating a + * new AsyncResource() also triggers init. If triggerAsyncId is omitted then + * async_hook.executionAsyncId() is used. + * @param type The type of async event. + * @param triggerAsyncId The ID of the execution context that created + * this async event (default: `executionAsyncId()`), or an + * AsyncResourceOptions object (since v9.3.0) + */ + constructor(type: string, triggerAsyncId?: number | AsyncResourceOptions); + /** + * Binds the given function to the current execution context. + * @since v14.8.0, v12.19.0 + * @param fn The function to bind to the current execution context. + * @param type An optional name to associate with the underlying `AsyncResource`. + */ + static bind any, ThisArg>( + fn: Func, + type?: string, + thisArg?: ThisArg, + ): Func; + /** + * Binds the given function to execute to this `AsyncResource`'s scope. + * @since v14.8.0, v12.19.0 + * @param fn The function to bind to the current `AsyncResource`. + */ + bind any>(fn: Func): Func; + /** + * Call the provided function with the provided arguments in the execution context + * of the async resource. This will establish the context, trigger the AsyncHooks + * before callbacks, call the function, trigger the AsyncHooks after callbacks, and + * then restore the original execution context. + * @since v9.6.0 + * @param fn The function to call in the execution context of this async resource. + * @param thisArg The receiver to be used for the function call. + * @param args Optional arguments to pass to the function. + */ + runInAsyncScope( + fn: (this: This, ...args: any[]) => Result, + thisArg?: This, + ...args: any[] + ): Result; + /** + * Call all `destroy` hooks. This should only ever be called once. An error will + * be thrown if it is called more than once. This **must** be manually called. If + * the resource is left to be collected by the GC then the `destroy` hooks will + * never be called. + * @return A reference to `asyncResource`. + */ + emitDestroy(): this; + /** + * @return The unique `asyncId` assigned to the resource. + */ + asyncId(): number; + /** + * @return The same `triggerAsyncId` that is passed to the `AsyncResource` constructor. + */ + triggerAsyncId(): number; + } + /** + * This class creates stores that stay coherent through asynchronous operations. + * + * While you can create your own implementation on top of the `node:async_hooks`module, `AsyncLocalStorage` should be preferred as it is a performant and memory + * safe implementation that involves significant optimizations that are non-obvious + * to implement. + * + * The following example uses `AsyncLocalStorage` to build a simple logger + * that assigns IDs to incoming HTTP requests and includes them in messages + * logged within each request. + * + * ```js + * import http from 'node:http'; + * import { AsyncLocalStorage } from 'node:async_hooks'; + * + * const asyncLocalStorage = new AsyncLocalStorage(); + * + * function logWithId(msg) { + * const id = asyncLocalStorage.getStore(); + * console.log(`${id !== undefined ? id : '-'}:`, msg); + * } + * + * let idSeq = 0; + * http.createServer((req, res) => { + * asyncLocalStorage.run(idSeq++, () => { + * logWithId('start'); + * // Imagine any chain of async operations here + * setImmediate(() => { + * logWithId('finish'); + * res.end(); + * }); + * }); + * }).listen(8080); + * + * http.get('http://localhost:8080'); + * http.get('http://localhost:8080'); + * // Prints: + * // 0: start + * // 1: start + * // 0: finish + * // 1: finish + * ``` + * + * Each instance of `AsyncLocalStorage` maintains an independent storage context. + * Multiple instances can safely exist simultaneously without risk of interfering + * with each other's data. + * @since v13.10.0, v12.17.0 + */ + class AsyncLocalStorage { + /** + * Binds the given function to the current execution context. + * @since v19.8.0 + * @experimental + * @param fn The function to bind to the current execution context. + * @return A new function that calls `fn` within the captured execution context. + */ + static bind any>(fn: Func): Func; + /** + * Captures the current execution context and returns a function that accepts a + * function as an argument. Whenever the returned function is called, it + * calls the function passed to it within the captured context. + * + * ```js + * const asyncLocalStorage = new AsyncLocalStorage(); + * const runInAsyncScope = asyncLocalStorage.run(123, () => AsyncLocalStorage.snapshot()); + * const result = asyncLocalStorage.run(321, () => runInAsyncScope(() => asyncLocalStorage.getStore())); + * console.log(result); // returns 123 + * ``` + * + * AsyncLocalStorage.snapshot() can replace the use of AsyncResource for simple + * async context tracking purposes, for example: + * + * ```js + * class Foo { + * #runInAsyncScope = AsyncLocalStorage.snapshot(); + * + * get() { return this.#runInAsyncScope(() => asyncLocalStorage.getStore()); } + * } + * + * const foo = asyncLocalStorage.run(123, () => new Foo()); + * console.log(asyncLocalStorage.run(321, () => foo.get())); // returns 123 + * ``` + * @since v19.8.0 + * @experimental + * @return A new function with the signature `(fn: (...args) : R, ...args) : R`. + */ + static snapshot(): (fn: (...args: TArgs) => R, ...args: TArgs) => R; + /** + * Disables the instance of `AsyncLocalStorage`. All subsequent calls + * to `asyncLocalStorage.getStore()` will return `undefined` until`asyncLocalStorage.run()` or `asyncLocalStorage.enterWith()` is called again. + * + * When calling `asyncLocalStorage.disable()`, all current contexts linked to the + * instance will be exited. + * + * Calling `asyncLocalStorage.disable()` is required before the`asyncLocalStorage` can be garbage collected. This does not apply to stores + * provided by the `asyncLocalStorage`, as those objects are garbage collected + * along with the corresponding async resources. + * + * Use this method when the `asyncLocalStorage` is not in use anymore + * in the current process. + * @since v13.10.0, v12.17.0 + * @experimental + */ + disable(): void; + /** + * Returns the current store. + * If called outside of an asynchronous context initialized by + * calling `asyncLocalStorage.run()` or `asyncLocalStorage.enterWith()`, it + * returns `undefined`. + * @since v13.10.0, v12.17.0 + */ + getStore(): T | undefined; + /** + * Runs a function synchronously within a context and returns its + * return value. The store is not accessible outside of the callback function. + * The store is accessible to any asynchronous operations created within the + * callback. + * + * The optional `args` are passed to the callback function. + * + * If the callback function throws an error, the error is thrown by `run()` too. + * The stacktrace is not impacted by this call and the context is exited. + * + * Example: + * + * ```js + * const store = { id: 2 }; + * try { + * asyncLocalStorage.run(store, () => { + * asyncLocalStorage.getStore(); // Returns the store object + * setTimeout(() => { + * asyncLocalStorage.getStore(); // Returns the store object + * }, 200); + * throw new Error(); + * }); + * } catch (e) { + * asyncLocalStorage.getStore(); // Returns undefined + * // The error will be caught here + * } + * ``` + * @since v13.10.0, v12.17.0 + */ + run(store: T, callback: () => R): R; + run(store: T, callback: (...args: TArgs) => R, ...args: TArgs): R; + /** + * Runs a function synchronously outside of a context and returns its + * return value. The store is not accessible within the callback function or + * the asynchronous operations created within the callback. Any `getStore()`call done within the callback function will always return `undefined`. + * + * The optional `args` are passed to the callback function. + * + * If the callback function throws an error, the error is thrown by `exit()` too. + * The stacktrace is not impacted by this call and the context is re-entered. + * + * Example: + * + * ```js + * // Within a call to run + * try { + * asyncLocalStorage.getStore(); // Returns the store object or value + * asyncLocalStorage.exit(() => { + * asyncLocalStorage.getStore(); // Returns undefined + * throw new Error(); + * }); + * } catch (e) { + * asyncLocalStorage.getStore(); // Returns the same object or value + * // The error will be caught here + * } + * ``` + * @since v13.10.0, v12.17.0 + * @experimental + */ + exit(callback: (...args: TArgs) => R, ...args: TArgs): R; + /** + * Transitions into the context for the remainder of the current + * synchronous execution and then persists the store through any following + * asynchronous calls. + * + * Example: + * + * ```js + * const store = { id: 1 }; + * // Replaces previous store with the given store object + * asyncLocalStorage.enterWith(store); + * asyncLocalStorage.getStore(); // Returns the store object + * someAsyncOperation(() => { + * asyncLocalStorage.getStore(); // Returns the same object + * }); + * ``` + * + * This transition will continue for the _entire_ synchronous execution. + * This means that if, for example, the context is entered within an event + * handler subsequent event handlers will also run within that context unless + * specifically bound to another context with an `AsyncResource`. That is why`run()` should be preferred over `enterWith()` unless there are strong reasons + * to use the latter method. + * + * ```js + * const store = { id: 1 }; + * + * emitter.on('my-event', () => { + * asyncLocalStorage.enterWith(store); + * }); + * emitter.on('my-event', () => { + * asyncLocalStorage.getStore(); // Returns the same object + * }); + * + * asyncLocalStorage.getStore(); // Returns undefined + * emitter.emit('my-event'); + * asyncLocalStorage.getStore(); // Returns the same object + * ``` + * @since v13.11.0, v12.17.0 + * @experimental + */ + enterWith(store: T): void; + } +} +declare module "node:async_hooks" { + export * from "async_hooks"; +} diff --git a/Url-Shortner/node_modules/@types/node/buffer.d.ts b/Url-Shortner/node_modules/@types/node/buffer.d.ts new file mode 100644 index 0000000..ea00e7a --- /dev/null +++ b/Url-Shortner/node_modules/@types/node/buffer.d.ts @@ -0,0 +1,2352 @@ +/** + * `Buffer` objects are used to represent a fixed-length sequence of bytes. Many + * Node.js APIs support `Buffer`s. + * + * The `Buffer` class is a subclass of JavaScript's [`Uint8Array`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array) class and + * extends it with methods that cover additional use cases. Node.js APIs accept + * plain [`Uint8Array`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array) s wherever `Buffer`s are supported as well. + * + * While the `Buffer` class is available within the global scope, it is still + * recommended to explicitly reference it via an import or require statement. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * // Creates a zero-filled Buffer of length 10. + * const buf1 = Buffer.alloc(10); + * + * // Creates a Buffer of length 10, + * // filled with bytes which all have the value `1`. + * const buf2 = Buffer.alloc(10, 1); + * + * // Creates an uninitialized buffer of length 10. + * // This is faster than calling Buffer.alloc() but the returned + * // Buffer instance might contain old data that needs to be + * // overwritten using fill(), write(), or other functions that fill the Buffer's + * // contents. + * const buf3 = Buffer.allocUnsafe(10); + * + * // Creates a Buffer containing the bytes [1, 2, 3]. + * const buf4 = Buffer.from([1, 2, 3]); + * + * // Creates a Buffer containing the bytes [1, 1, 1, 1] – the entries + * // are all truncated using `(value & 255)` to fit into the range 0–255. + * const buf5 = Buffer.from([257, 257.5, -255, '1']); + * + * // Creates a Buffer containing the UTF-8-encoded bytes for the string 'tést': + * // [0x74, 0xc3, 0xa9, 0x73, 0x74] (in hexadecimal notation) + * // [116, 195, 169, 115, 116] (in decimal notation) + * const buf6 = Buffer.from('tést'); + * + * // Creates a Buffer containing the Latin-1 bytes [0x74, 0xe9, 0x73, 0x74]. + * const buf7 = Buffer.from('tést', 'latin1'); + * ``` + * @see [source](https://github.com/nodejs/node/blob/v20.2.0/lib/buffer.js) + */ +declare module "buffer" { + import { BinaryLike } from "node:crypto"; + import { ReadableStream as WebReadableStream } from "node:stream/web"; + /** + * This function returns `true` if `input` contains only valid UTF-8-encoded data, + * including the case in which `input` is empty. + * + * Throws if the `input` is a detached array buffer. + * @since v19.4.0, v18.14.0 + * @param input The input to validate. + */ + export function isUtf8(input: Buffer | ArrayBuffer | NodeJS.TypedArray): boolean; + /** + * This function returns `true` if `input` contains only valid ASCII-encoded data, + * including the case in which `input` is empty. + * + * Throws if the `input` is a detached array buffer. + * @since v19.6.0, v18.15.0 + * @param input The input to validate. + */ + export function isAscii(input: Buffer | ArrayBuffer | NodeJS.TypedArray): boolean; + export const INSPECT_MAX_BYTES: number; + export const kMaxLength: number; + export const kStringMaxLength: number; + export const constants: { + MAX_LENGTH: number; + MAX_STRING_LENGTH: number; + }; + export type TranscodeEncoding = "ascii" | "utf8" | "utf16le" | "ucs2" | "latin1" | "binary"; + /** + * Re-encodes the given `Buffer` or `Uint8Array` instance from one character + * encoding to another. Returns a new `Buffer` instance. + * + * Throws if the `fromEnc` or `toEnc` specify invalid character encodings or if + * conversion from `fromEnc` to `toEnc` is not permitted. + * + * Encodings supported by `buffer.transcode()` are: `'ascii'`, `'utf8'`,`'utf16le'`, `'ucs2'`, `'latin1'`, and `'binary'`. + * + * The transcoding process will use substitution characters if a given byte + * sequence cannot be adequately represented in the target encoding. For instance: + * + * ```js + * import { Buffer, transcode } from 'node:buffer'; + * + * const newBuf = transcode(Buffer.from('€'), 'utf8', 'ascii'); + * console.log(newBuf.toString('ascii')); + * // Prints: '?' + * ``` + * + * Because the Euro (`€`) sign is not representable in US-ASCII, it is replaced + * with `?` in the transcoded `Buffer`. + * @since v7.1.0 + * @param source A `Buffer` or `Uint8Array` instance. + * @param fromEnc The current encoding. + * @param toEnc To target encoding. + */ + export function transcode(source: Uint8Array, fromEnc: TranscodeEncoding, toEnc: TranscodeEncoding): Buffer; + export const SlowBuffer: { + /** @deprecated since v6.0.0, use `Buffer.allocUnsafeSlow()` */ + new(size: number): Buffer; + prototype: Buffer; + }; + /** + * Resolves a `'blob:nodedata:...'` an associated `Blob` object registered using + * a prior call to `URL.createObjectURL()`. + * @since v16.7.0 + * @experimental + * @param id A `'blob:nodedata:...` URL string returned by a prior call to `URL.createObjectURL()`. + */ + export function resolveObjectURL(id: string): Blob | undefined; + export { Buffer }; + /** + * @experimental + */ + export interface BlobOptions { + /** + * @default 'utf8' + */ + encoding?: BufferEncoding | undefined; + /** + * The Blob content-type. The intent is for `type` to convey + * the MIME media type of the data, however no validation of the type format + * is performed. + */ + type?: string | undefined; + } + /** + * A [`Blob`](https://developer.mozilla.org/en-US/docs/Web/API/Blob) encapsulates immutable, raw data that can be safely shared across + * multiple worker threads. + * @since v15.7.0, v14.18.0 + */ + export class Blob { + /** + * The total size of the `Blob` in bytes. + * @since v15.7.0, v14.18.0 + */ + readonly size: number; + /** + * The content-type of the `Blob`. + * @since v15.7.0, v14.18.0 + */ + readonly type: string; + /** + * Creates a new `Blob` object containing a concatenation of the given sources. + * + * {ArrayBuffer}, {TypedArray}, {DataView}, and {Buffer} sources are copied into + * the 'Blob' and can therefore be safely modified after the 'Blob' is created. + * + * String sources are also copied into the `Blob`. + */ + constructor(sources: Array, options?: BlobOptions); + /** + * Returns a promise that fulfills with an [ArrayBuffer](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer) containing a copy of + * the `Blob` data. + * @since v15.7.0, v14.18.0 + */ + arrayBuffer(): Promise; + /** + * Creates and returns a new `Blob` containing a subset of this `Blob` objects + * data. The original `Blob` is not altered. + * @since v15.7.0, v14.18.0 + * @param start The starting index. + * @param end The ending index. + * @param type The content-type for the new `Blob` + */ + slice(start?: number, end?: number, type?: string): Blob; + /** + * Returns a promise that fulfills with the contents of the `Blob` decoded as a + * UTF-8 string. + * @since v15.7.0, v14.18.0 + */ + text(): Promise; + /** + * Returns a new `ReadableStream` that allows the content of the `Blob` to be read. + * @since v16.7.0 + */ + stream(): WebReadableStream; + } + export interface FileOptions { + /** + * One of either `'transparent'` or `'native'`. When set to `'native'`, line endings in string source parts will be + * converted to the platform native line-ending as specified by `require('node:os').EOL`. + */ + endings?: "native" | "transparent"; + /** The File content-type. */ + type?: string; + /** The last modified date of the file. `Default`: Date.now(). */ + lastModified?: number; + } + /** + * A [`File`](https://developer.mozilla.org/en-US/docs/Web/API/File) provides information about files. + * @since v19.2.0, v18.13.0 + */ + export class File extends Blob { + constructor(sources: Array, fileName: string, options?: FileOptions); + /** + * The name of the `File`. + * @since v19.2.0, v18.13.0 + */ + readonly name: string; + /** + * The last modified date of the `File`. + * @since v19.2.0, v18.13.0 + */ + readonly lastModified: number; + } + export import atob = globalThis.atob; + export import btoa = globalThis.btoa; + import { Blob as NodeBlob } from "buffer"; + // This conditional type will be the existing global Blob in a browser, or + // the copy below in a Node environment. + type __Blob = typeof globalThis extends { onmessage: any; Blob: infer T } ? T : NodeBlob; + global { + namespace NodeJS { + export { BufferEncoding }; + } + // Buffer class + type BufferEncoding = + | "ascii" + | "utf8" + | "utf-8" + | "utf16le" + | "ucs2" + | "ucs-2" + | "base64" + | "base64url" + | "latin1" + | "binary" + | "hex"; + type WithImplicitCoercion = + | T + | { + valueOf(): T; + }; + /** + * Raw data is stored in instances of the Buffer class. + * A Buffer is similar to an array of integers but corresponds to a raw memory allocation outside the V8 heap. A Buffer cannot be resized. + * Valid string encodings: 'ascii'|'utf8'|'utf16le'|'ucs2'(alias of 'utf16le')|'base64'|'base64url'|'binary'(deprecated)|'hex' + */ + interface BufferConstructor { + /** + * Allocates a new buffer containing the given {str}. + * + * @param str String to store in buffer. + * @param encoding encoding to use, optional. Default is 'utf8' + * @deprecated since v10.0.0 - Use `Buffer.from(string[, encoding])` instead. + */ + new(str: string, encoding?: BufferEncoding): Buffer; + /** + * Allocates a new buffer of {size} octets. + * + * @param size count of octets to allocate. + * @deprecated since v10.0.0 - Use `Buffer.alloc()` instead (also see `Buffer.allocUnsafe()`). + */ + new(size: number): Buffer; + /** + * Allocates a new buffer containing the given {array} of octets. + * + * @param array The octets to store. + * @deprecated since v10.0.0 - Use `Buffer.from(array)` instead. + */ + new(array: Uint8Array): Buffer; + /** + * Produces a Buffer backed by the same allocated memory as + * the given {ArrayBuffer}/{SharedArrayBuffer}. + * + * @param arrayBuffer The ArrayBuffer with which to share memory. + * @deprecated since v10.0.0 - Use `Buffer.from(arrayBuffer[, byteOffset[, length]])` instead. + */ + new(arrayBuffer: ArrayBuffer | SharedArrayBuffer): Buffer; + /** + * Allocates a new buffer containing the given {array} of octets. + * + * @param array The octets to store. + * @deprecated since v10.0.0 - Use `Buffer.from(array)` instead. + */ + new(array: ReadonlyArray): Buffer; + /** + * Copies the passed {buffer} data onto a new {Buffer} instance. + * + * @param buffer The buffer to copy. + * @deprecated since v10.0.0 - Use `Buffer.from(buffer)` instead. + */ + new(buffer: Buffer): Buffer; + /** + * Allocates a new `Buffer` using an `array` of bytes in the range `0` – `255`. + * Array entries outside that range will be truncated to fit into it. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * // Creates a new Buffer containing the UTF-8 bytes of the string 'buffer'. + * const buf = Buffer.from([0x62, 0x75, 0x66, 0x66, 0x65, 0x72]); + * ``` + * + * If `array` is an `Array`\-like object (that is, one with a `length` property of + * type `number`), it is treated as if it is an array, unless it is a `Buffer` or + * a `Uint8Array`. This means all other `TypedArray` variants get treated as an`Array`. To create a `Buffer` from the bytes backing a `TypedArray`, use `Buffer.copyBytesFrom()`. + * + * A `TypeError` will be thrown if `array` is not an `Array` or another type + * appropriate for `Buffer.from()` variants. + * + * `Buffer.from(array)` and `Buffer.from(string)` may also use the internal`Buffer` pool like `Buffer.allocUnsafe()` does. + * @since v5.10.0 + */ + from( + arrayBuffer: WithImplicitCoercion, + byteOffset?: number, + length?: number, + ): Buffer; + /** + * Creates a new Buffer using the passed {data} + * @param data data to create a new Buffer + */ + from(data: Uint8Array | ReadonlyArray): Buffer; + from(data: WithImplicitCoercion | string>): Buffer; + /** + * Creates a new Buffer containing the given JavaScript string {str}. + * If provided, the {encoding} parameter identifies the character encoding. + * If not provided, {encoding} defaults to 'utf8'. + */ + from( + str: + | WithImplicitCoercion + | { + [Symbol.toPrimitive](hint: "string"): string; + }, + encoding?: BufferEncoding, + ): Buffer; + /** + * Creates a new Buffer using the passed {data} + * @param values to create a new Buffer + */ + of(...items: number[]): Buffer; + /** + * Returns `true` if `obj` is a `Buffer`, `false` otherwise. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * Buffer.isBuffer(Buffer.alloc(10)); // true + * Buffer.isBuffer(Buffer.from('foo')); // true + * Buffer.isBuffer('a string'); // false + * Buffer.isBuffer([]); // false + * Buffer.isBuffer(new Uint8Array(1024)); // false + * ``` + * @since v0.1.101 + */ + isBuffer(obj: any): obj is Buffer; + /** + * Returns `true` if `encoding` is the name of a supported character encoding, + * or `false` otherwise. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * console.log(Buffer.isEncoding('utf8')); + * // Prints: true + * + * console.log(Buffer.isEncoding('hex')); + * // Prints: true + * + * console.log(Buffer.isEncoding('utf/8')); + * // Prints: false + * + * console.log(Buffer.isEncoding('')); + * // Prints: false + * ``` + * @since v0.9.1 + * @param encoding A character encoding name to check. + */ + isEncoding(encoding: string): encoding is BufferEncoding; + /** + * Returns the byte length of a string when encoded using `encoding`. + * This is not the same as [`String.prototype.length`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/length), which does not account + * for the encoding that is used to convert the string into bytes. + * + * For `'base64'`, `'base64url'`, and `'hex'`, this function assumes valid input. + * For strings that contain non-base64/hex-encoded data (e.g. whitespace), the + * return value might be greater than the length of a `Buffer` created from the + * string. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const str = '\u00bd + \u00bc = \u00be'; + * + * console.log(`${str}: ${str.length} characters, ` + + * `${Buffer.byteLength(str, 'utf8')} bytes`); + * // Prints: ½ + ¼ = ¾: 9 characters, 12 bytes + * ``` + * + * When `string` is a + * `Buffer`/[`DataView`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView)/[`TypedArray`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/- + * Reference/Global_Objects/TypedArray)/[`ArrayBuffer`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer)/[`SharedArrayBuffer`](https://develop- + * er.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer), the byte length as reported by `.byteLength`is returned. + * @since v0.1.90 + * @param string A value to calculate the length of. + * @param [encoding='utf8'] If `string` is a string, this is its encoding. + * @return The number of bytes contained within `string`. + */ + byteLength( + string: string | NodeJS.ArrayBufferView | ArrayBuffer | SharedArrayBuffer, + encoding?: BufferEncoding, + ): number; + /** + * Returns a new `Buffer` which is the result of concatenating all the `Buffer`instances in the `list` together. + * + * If the list has no items, or if the `totalLength` is 0, then a new zero-length`Buffer` is returned. + * + * If `totalLength` is not provided, it is calculated from the `Buffer` instances + * in `list` by adding their lengths. + * + * If `totalLength` is provided, it is coerced to an unsigned integer. If the + * combined length of the `Buffer`s in `list` exceeds `totalLength`, the result is + * truncated to `totalLength`. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * // Create a single `Buffer` from a list of three `Buffer` instances. + * + * const buf1 = Buffer.alloc(10); + * const buf2 = Buffer.alloc(14); + * const buf3 = Buffer.alloc(18); + * const totalLength = buf1.length + buf2.length + buf3.length; + * + * console.log(totalLength); + * // Prints: 42 + * + * const bufA = Buffer.concat([buf1, buf2, buf3], totalLength); + * + * console.log(bufA); + * // Prints: + * console.log(bufA.length); + * // Prints: 42 + * ``` + * + * `Buffer.concat()` may also use the internal `Buffer` pool like `Buffer.allocUnsafe()` does. + * @since v0.7.11 + * @param list List of `Buffer` or {@link Uint8Array} instances to concatenate. + * @param totalLength Total length of the `Buffer` instances in `list` when concatenated. + */ + concat(list: ReadonlyArray, totalLength?: number): Buffer; + /** + * Copies the underlying memory of `view` into a new `Buffer`. + * + * ```js + * const u16 = new Uint16Array([0, 0xffff]); + * const buf = Buffer.copyBytesFrom(u16, 1, 1); + * u16[1] = 0; + * console.log(buf.length); // 2 + * console.log(buf[0]); // 255 + * console.log(buf[1]); // 255 + * ``` + * @since v19.8.0 + * @param view The {TypedArray} to copy. + * @param [offset=': 0'] The starting offset within `view`. + * @param [length=view.length - offset] The number of elements from `view` to copy. + */ + copyBytesFrom(view: NodeJS.TypedArray, offset?: number, length?: number): Buffer; + /** + * Compares `buf1` to `buf2`, typically for the purpose of sorting arrays of`Buffer` instances. This is equivalent to calling `buf1.compare(buf2)`. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf1 = Buffer.from('1234'); + * const buf2 = Buffer.from('0123'); + * const arr = [buf1, buf2]; + * + * console.log(arr.sort(Buffer.compare)); + * // Prints: [ , ] + * // (This result is equal to: [buf2, buf1].) + * ``` + * @since v0.11.13 + * @return Either `-1`, `0`, or `1`, depending on the result of the comparison. See `compare` for details. + */ + compare(buf1: Uint8Array, buf2: Uint8Array): -1 | 0 | 1; + /** + * Allocates a new `Buffer` of `size` bytes. If `fill` is `undefined`, the`Buffer` will be zero-filled. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.alloc(5); + * + * console.log(buf); + * // Prints: + * ``` + * + * If `size` is larger than {@link constants.MAX_LENGTH} or smaller than 0, `ERR_OUT_OF_RANGE` is thrown. + * + * If `fill` is specified, the allocated `Buffer` will be initialized by calling `buf.fill(fill)`. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.alloc(5, 'a'); + * + * console.log(buf); + * // Prints: + * ``` + * + * If both `fill` and `encoding` are specified, the allocated `Buffer` will be + * initialized by calling `buf.fill(fill, encoding)`. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.alloc(11, 'aGVsbG8gd29ybGQ=', 'base64'); + * + * console.log(buf); + * // Prints: + * ``` + * + * Calling `Buffer.alloc()` can be measurably slower than the alternative `Buffer.allocUnsafe()` but ensures that the newly created `Buffer` instance + * contents will never contain sensitive data from previous allocations, including + * data that might not have been allocated for `Buffer`s. + * + * A `TypeError` will be thrown if `size` is not a number. + * @since v5.10.0 + * @param size The desired length of the new `Buffer`. + * @param [fill=0] A value to pre-fill the new `Buffer` with. + * @param [encoding='utf8'] If `fill` is a string, this is its encoding. + */ + alloc(size: number, fill?: string | Uint8Array | number, encoding?: BufferEncoding): Buffer; + /** + * Allocates a new `Buffer` of `size` bytes. If `size` is larger than {@link constants.MAX_LENGTH} or smaller than 0, `ERR_OUT_OF_RANGE` is thrown. + * + * The underlying memory for `Buffer` instances created in this way is _not_ + * _initialized_. The contents of the newly created `Buffer` are unknown and _may contain sensitive data_. Use `Buffer.alloc()` instead to initialize`Buffer` instances with zeroes. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.allocUnsafe(10); + * + * console.log(buf); + * // Prints (contents may vary): + * + * buf.fill(0); + * + * console.log(buf); + * // Prints: + * ``` + * + * A `TypeError` will be thrown if `size` is not a number. + * + * The `Buffer` module pre-allocates an internal `Buffer` instance of + * size `Buffer.poolSize` that is used as a pool for the fast allocation of new`Buffer` instances created using `Buffer.allocUnsafe()`, `Buffer.from(array)`, + * and `Buffer.concat()` only when `size` is less than or equal to`Buffer.poolSize >> 1` (floor of `Buffer.poolSize` divided by two). + * + * Use of this pre-allocated internal memory pool is a key difference between + * calling `Buffer.alloc(size, fill)` vs. `Buffer.allocUnsafe(size).fill(fill)`. + * Specifically, `Buffer.alloc(size, fill)` will _never_ use the internal `Buffer`pool, while `Buffer.allocUnsafe(size).fill(fill)`_will_ use the internal`Buffer` pool if `size` is less + * than or equal to half `Buffer.poolSize`. The + * difference is subtle but can be important when an application requires the + * additional performance that `Buffer.allocUnsafe()` provides. + * @since v5.10.0 + * @param size The desired length of the new `Buffer`. + */ + allocUnsafe(size: number): Buffer; + /** + * Allocates a new `Buffer` of `size` bytes. If `size` is larger than {@link constants.MAX_LENGTH} or smaller than 0, `ERR_OUT_OF_RANGE` is thrown. A zero-length `Buffer` is created if + * `size` is 0. + * + * The underlying memory for `Buffer` instances created in this way is _not_ + * _initialized_. The contents of the newly created `Buffer` are unknown and _may contain sensitive data_. Use `buf.fill(0)` to initialize + * such `Buffer` instances with zeroes. + * + * When using `Buffer.allocUnsafe()` to allocate new `Buffer` instances, + * allocations under 4 KiB are sliced from a single pre-allocated `Buffer`. This + * allows applications to avoid the garbage collection overhead of creating many + * individually allocated `Buffer` instances. This approach improves both + * performance and memory usage by eliminating the need to track and clean up as + * many individual `ArrayBuffer` objects. + * + * However, in the case where a developer may need to retain a small chunk of + * memory from a pool for an indeterminate amount of time, it may be appropriate + * to create an un-pooled `Buffer` instance using `Buffer.allocUnsafeSlow()` and + * then copying out the relevant bits. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * // Need to keep around a few small chunks of memory. + * const store = []; + * + * socket.on('readable', () => { + * let data; + * while (null !== (data = readable.read())) { + * // Allocate for retained data. + * const sb = Buffer.allocUnsafeSlow(10); + * + * // Copy the data into the new allocation. + * data.copy(sb, 0, 0, 10); + * + * store.push(sb); + * } + * }); + * ``` + * + * A `TypeError` will be thrown if `size` is not a number. + * @since v5.12.0 + * @param size The desired length of the new `Buffer`. + */ + allocUnsafeSlow(size: number): Buffer; + /** + * This is the size (in bytes) of pre-allocated internal `Buffer` instances used + * for pooling. This value may be modified. + * @since v0.11.3 + */ + poolSize: number; + } + interface Buffer extends Uint8Array { + /** + * Writes `string` to `buf` at `offset` according to the character encoding in`encoding`. The `length` parameter is the number of bytes to write. If `buf` did + * not contain enough space to fit the entire string, only part of `string` will be + * written. However, partially encoded characters will not be written. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.alloc(256); + * + * const len = buf.write('\u00bd + \u00bc = \u00be', 0); + * + * console.log(`${len} bytes: ${buf.toString('utf8', 0, len)}`); + * // Prints: 12 bytes: ½ + ¼ = ¾ + * + * const buffer = Buffer.alloc(10); + * + * const length = buffer.write('abcd', 8); + * + * console.log(`${length} bytes: ${buffer.toString('utf8', 8, 10)}`); + * // Prints: 2 bytes : ab + * ``` + * @since v0.1.90 + * @param string String to write to `buf`. + * @param [offset=0] Number of bytes to skip before starting to write `string`. + * @param [length=buf.length - offset] Maximum number of bytes to write (written bytes will not exceed `buf.length - offset`). + * @param [encoding='utf8'] The character encoding of `string`. + * @return Number of bytes written. + */ + write(string: string, encoding?: BufferEncoding): number; + write(string: string, offset: number, encoding?: BufferEncoding): number; + write(string: string, offset: number, length: number, encoding?: BufferEncoding): number; + /** + * Decodes `buf` to a string according to the specified character encoding in`encoding`. `start` and `end` may be passed to decode only a subset of `buf`. + * + * If `encoding` is `'utf8'` and a byte sequence in the input is not valid UTF-8, + * then each invalid byte is replaced with the replacement character `U+FFFD`. + * + * The maximum length of a string instance (in UTF-16 code units) is available + * as {@link constants.MAX_STRING_LENGTH}. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf1 = Buffer.allocUnsafe(26); + * + * for (let i = 0; i < 26; i++) { + * // 97 is the decimal ASCII value for 'a'. + * buf1[i] = i + 97; + * } + * + * console.log(buf1.toString('utf8')); + * // Prints: abcdefghijklmnopqrstuvwxyz + * console.log(buf1.toString('utf8', 0, 5)); + * // Prints: abcde + * + * const buf2 = Buffer.from('tést'); + * + * console.log(buf2.toString('hex')); + * // Prints: 74c3a97374 + * console.log(buf2.toString('utf8', 0, 3)); + * // Prints: té + * console.log(buf2.toString(undefined, 0, 3)); + * // Prints: té + * ``` + * @since v0.1.90 + * @param [encoding='utf8'] The character encoding to use. + * @param [start=0] The byte offset to start decoding at. + * @param [end=buf.length] The byte offset to stop decoding at (not inclusive). + */ + toString(encoding?: BufferEncoding, start?: number, end?: number): string; + /** + * Returns a JSON representation of `buf`. [`JSON.stringify()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify) implicitly calls + * this function when stringifying a `Buffer` instance. + * + * `Buffer.from()` accepts objects in the format returned from this method. + * In particular, `Buffer.from(buf.toJSON())` works like `Buffer.from(buf)`. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.from([0x1, 0x2, 0x3, 0x4, 0x5]); + * const json = JSON.stringify(buf); + * + * console.log(json); + * // Prints: {"type":"Buffer","data":[1,2,3,4,5]} + * + * const copy = JSON.parse(json, (key, value) => { + * return value && value.type === 'Buffer' ? + * Buffer.from(value) : + * value; + * }); + * + * console.log(copy); + * // Prints: + * ``` + * @since v0.9.2 + */ + toJSON(): { + type: "Buffer"; + data: number[]; + }; + /** + * Returns `true` if both `buf` and `otherBuffer` have exactly the same bytes,`false` otherwise. Equivalent to `buf.compare(otherBuffer) === 0`. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf1 = Buffer.from('ABC'); + * const buf2 = Buffer.from('414243', 'hex'); + * const buf3 = Buffer.from('ABCD'); + * + * console.log(buf1.equals(buf2)); + * // Prints: true + * console.log(buf1.equals(buf3)); + * // Prints: false + * ``` + * @since v0.11.13 + * @param otherBuffer A `Buffer` or {@link Uint8Array} with which to compare `buf`. + */ + equals(otherBuffer: Uint8Array): boolean; + /** + * Compares `buf` with `target` and returns a number indicating whether `buf`comes before, after, or is the same as `target` in sort order. + * Comparison is based on the actual sequence of bytes in each `Buffer`. + * + * * `0` is returned if `target` is the same as `buf` + * * `1` is returned if `target` should come _before_`buf` when sorted. + * * `-1` is returned if `target` should come _after_`buf` when sorted. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf1 = Buffer.from('ABC'); + * const buf2 = Buffer.from('BCD'); + * const buf3 = Buffer.from('ABCD'); + * + * console.log(buf1.compare(buf1)); + * // Prints: 0 + * console.log(buf1.compare(buf2)); + * // Prints: -1 + * console.log(buf1.compare(buf3)); + * // Prints: -1 + * console.log(buf2.compare(buf1)); + * // Prints: 1 + * console.log(buf2.compare(buf3)); + * // Prints: 1 + * console.log([buf1, buf2, buf3].sort(Buffer.compare)); + * // Prints: [ , , ] + * // (This result is equal to: [buf1, buf3, buf2].) + * ``` + * + * The optional `targetStart`, `targetEnd`, `sourceStart`, and `sourceEnd`arguments can be used to limit the comparison to specific ranges within `target`and `buf` respectively. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf1 = Buffer.from([1, 2, 3, 4, 5, 6, 7, 8, 9]); + * const buf2 = Buffer.from([5, 6, 7, 8, 9, 1, 2, 3, 4]); + * + * console.log(buf1.compare(buf2, 5, 9, 0, 4)); + * // Prints: 0 + * console.log(buf1.compare(buf2, 0, 6, 4)); + * // Prints: -1 + * console.log(buf1.compare(buf2, 5, 6, 5)); + * // Prints: 1 + * ``` + * + * `ERR_OUT_OF_RANGE` is thrown if `targetStart < 0`, `sourceStart < 0`,`targetEnd > target.byteLength`, or `sourceEnd > source.byteLength`. + * @since v0.11.13 + * @param target A `Buffer` or {@link Uint8Array} with which to compare `buf`. + * @param [targetStart=0] The offset within `target` at which to begin comparison. + * @param [targetEnd=target.length] The offset within `target` at which to end comparison (not inclusive). + * @param [sourceStart=0] The offset within `buf` at which to begin comparison. + * @param [sourceEnd=buf.length] The offset within `buf` at which to end comparison (not inclusive). + */ + compare( + target: Uint8Array, + targetStart?: number, + targetEnd?: number, + sourceStart?: number, + sourceEnd?: number, + ): -1 | 0 | 1; + /** + * Copies data from a region of `buf` to a region in `target`, even if the `target`memory region overlaps with `buf`. + * + * [`TypedArray.prototype.set()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/set) performs the same operation, and is available + * for all TypedArrays, including Node.js `Buffer`s, although it takes + * different function arguments. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * // Create two `Buffer` instances. + * const buf1 = Buffer.allocUnsafe(26); + * const buf2 = Buffer.allocUnsafe(26).fill('!'); + * + * for (let i = 0; i < 26; i++) { + * // 97 is the decimal ASCII value for 'a'. + * buf1[i] = i + 97; + * } + * + * // Copy `buf1` bytes 16 through 19 into `buf2` starting at byte 8 of `buf2`. + * buf1.copy(buf2, 8, 16, 20); + * // This is equivalent to: + * // buf2.set(buf1.subarray(16, 20), 8); + * + * console.log(buf2.toString('ascii', 0, 25)); + * // Prints: !!!!!!!!qrst!!!!!!!!!!!!! + * ``` + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * // Create a `Buffer` and copy data from one region to an overlapping region + * // within the same `Buffer`. + * + * const buf = Buffer.allocUnsafe(26); + * + * for (let i = 0; i < 26; i++) { + * // 97 is the decimal ASCII value for 'a'. + * buf[i] = i + 97; + * } + * + * buf.copy(buf, 0, 4, 10); + * + * console.log(buf.toString()); + * // Prints: efghijghijklmnopqrstuvwxyz + * ``` + * @since v0.1.90 + * @param target A `Buffer` or {@link Uint8Array} to copy into. + * @param [targetStart=0] The offset within `target` at which to begin writing. + * @param [sourceStart=0] The offset within `buf` from which to begin copying. + * @param [sourceEnd=buf.length] The offset within `buf` at which to stop copying (not inclusive). + * @return The number of bytes copied. + */ + copy(target: Uint8Array, targetStart?: number, sourceStart?: number, sourceEnd?: number): number; + /** + * Returns a new `Buffer` that references the same memory as the original, but + * offset and cropped by the `start` and `end` indices. + * + * This method is not compatible with the `Uint8Array.prototype.slice()`, + * which is a superclass of `Buffer`. To copy the slice, use`Uint8Array.prototype.slice()`. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.from('buffer'); + * + * const copiedBuf = Uint8Array.prototype.slice.call(buf); + * copiedBuf[0]++; + * console.log(copiedBuf.toString()); + * // Prints: cuffer + * + * console.log(buf.toString()); + * // Prints: buffer + * + * // With buf.slice(), the original buffer is modified. + * const notReallyCopiedBuf = buf.slice(); + * notReallyCopiedBuf[0]++; + * console.log(notReallyCopiedBuf.toString()); + * // Prints: cuffer + * console.log(buf.toString()); + * // Also prints: cuffer (!) + * ``` + * @since v0.3.0 + * @deprecated Use `subarray` instead. + * @param [start=0] Where the new `Buffer` will start. + * @param [end=buf.length] Where the new `Buffer` will end (not inclusive). + */ + slice(start?: number, end?: number): Buffer; + /** + * Returns a new `Buffer` that references the same memory as the original, but + * offset and cropped by the `start` and `end` indices. + * + * Specifying `end` greater than `buf.length` will return the same result as + * that of `end` equal to `buf.length`. + * + * This method is inherited from [`TypedArray.prototype.subarray()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/subarray). + * + * Modifying the new `Buffer` slice will modify the memory in the original `Buffer`because the allocated memory of the two objects overlap. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * // Create a `Buffer` with the ASCII alphabet, take a slice, and modify one byte + * // from the original `Buffer`. + * + * const buf1 = Buffer.allocUnsafe(26); + * + * for (let i = 0; i < 26; i++) { + * // 97 is the decimal ASCII value for 'a'. + * buf1[i] = i + 97; + * } + * + * const buf2 = buf1.subarray(0, 3); + * + * console.log(buf2.toString('ascii', 0, buf2.length)); + * // Prints: abc + * + * buf1[0] = 33; + * + * console.log(buf2.toString('ascii', 0, buf2.length)); + * // Prints: !bc + * ``` + * + * Specifying negative indexes causes the slice to be generated relative to the + * end of `buf` rather than the beginning. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.from('buffer'); + * + * console.log(buf.subarray(-6, -1).toString()); + * // Prints: buffe + * // (Equivalent to buf.subarray(0, 5).) + * + * console.log(buf.subarray(-6, -2).toString()); + * // Prints: buff + * // (Equivalent to buf.subarray(0, 4).) + * + * console.log(buf.subarray(-5, -2).toString()); + * // Prints: uff + * // (Equivalent to buf.subarray(1, 4).) + * ``` + * @since v3.0.0 + * @param [start=0] Where the new `Buffer` will start. + * @param [end=buf.length] Where the new `Buffer` will end (not inclusive). + */ + subarray(start?: number, end?: number): Buffer; + /** + * Writes `value` to `buf` at the specified `offset` as big-endian. + * + * `value` is interpreted and written as a two's complement signed integer. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.allocUnsafe(8); + * + * buf.writeBigInt64BE(0x0102030405060708n, 0); + * + * console.log(buf); + * // Prints: + * ``` + * @since v12.0.0, v10.20.0 + * @param value Number to be written to `buf`. + * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy: `0 <= offset <= buf.length - 8`. + * @return `offset` plus the number of bytes written. + */ + writeBigInt64BE(value: bigint, offset?: number): number; + /** + * Writes `value` to `buf` at the specified `offset` as little-endian. + * + * `value` is interpreted and written as a two's complement signed integer. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.allocUnsafe(8); + * + * buf.writeBigInt64LE(0x0102030405060708n, 0); + * + * console.log(buf); + * // Prints: + * ``` + * @since v12.0.0, v10.20.0 + * @param value Number to be written to `buf`. + * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy: `0 <= offset <= buf.length - 8`. + * @return `offset` plus the number of bytes written. + */ + writeBigInt64LE(value: bigint, offset?: number): number; + /** + * Writes `value` to `buf` at the specified `offset` as big-endian. + * + * This function is also available under the `writeBigUint64BE` alias. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.allocUnsafe(8); + * + * buf.writeBigUInt64BE(0xdecafafecacefaden, 0); + * + * console.log(buf); + * // Prints: + * ``` + * @since v12.0.0, v10.20.0 + * @param value Number to be written to `buf`. + * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy: `0 <= offset <= buf.length - 8`. + * @return `offset` plus the number of bytes written. + */ + writeBigUInt64BE(value: bigint, offset?: number): number; + /** + * @alias Buffer.writeBigUInt64BE + * @since v14.10.0, v12.19.0 + */ + writeBigUint64BE(value: bigint, offset?: number): number; + /** + * Writes `value` to `buf` at the specified `offset` as little-endian + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.allocUnsafe(8); + * + * buf.writeBigUInt64LE(0xdecafafecacefaden, 0); + * + * console.log(buf); + * // Prints: + * ``` + * + * This function is also available under the `writeBigUint64LE` alias. + * @since v12.0.0, v10.20.0 + * @param value Number to be written to `buf`. + * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy: `0 <= offset <= buf.length - 8`. + * @return `offset` plus the number of bytes written. + */ + writeBigUInt64LE(value: bigint, offset?: number): number; + /** + * @alias Buffer.writeBigUInt64LE + * @since v14.10.0, v12.19.0 + */ + writeBigUint64LE(value: bigint, offset?: number): number; + /** + * Writes `byteLength` bytes of `value` to `buf` at the specified `offset`as little-endian. Supports up to 48 bits of accuracy. Behavior is undefined + * when `value` is anything other than an unsigned integer. + * + * This function is also available under the `writeUintLE` alias. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.allocUnsafe(6); + * + * buf.writeUIntLE(0x1234567890ab, 0, 6); + * + * console.log(buf); + * // Prints: + * ``` + * @since v0.5.5 + * @param value Number to be written to `buf`. + * @param offset Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - byteLength`. + * @param byteLength Number of bytes to write. Must satisfy `0 < byteLength <= 6`. + * @return `offset` plus the number of bytes written. + */ + writeUIntLE(value: number, offset: number, byteLength: number): number; + /** + * @alias Buffer.writeUIntLE + * @since v14.9.0, v12.19.0 + */ + writeUintLE(value: number, offset: number, byteLength: number): number; + /** + * Writes `byteLength` bytes of `value` to `buf` at the specified `offset`as big-endian. Supports up to 48 bits of accuracy. Behavior is undefined + * when `value` is anything other than an unsigned integer. + * + * This function is also available under the `writeUintBE` alias. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.allocUnsafe(6); + * + * buf.writeUIntBE(0x1234567890ab, 0, 6); + * + * console.log(buf); + * // Prints: + * ``` + * @since v0.5.5 + * @param value Number to be written to `buf`. + * @param offset Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - byteLength`. + * @param byteLength Number of bytes to write. Must satisfy `0 < byteLength <= 6`. + * @return `offset` plus the number of bytes written. + */ + writeUIntBE(value: number, offset: number, byteLength: number): number; + /** + * @alias Buffer.writeUIntBE + * @since v14.9.0, v12.19.0 + */ + writeUintBE(value: number, offset: number, byteLength: number): number; + /** + * Writes `byteLength` bytes of `value` to `buf` at the specified `offset`as little-endian. Supports up to 48 bits of accuracy. Behavior is undefined + * when `value` is anything other than a signed integer. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.allocUnsafe(6); + * + * buf.writeIntLE(0x1234567890ab, 0, 6); + * + * console.log(buf); + * // Prints: + * ``` + * @since v0.11.15 + * @param value Number to be written to `buf`. + * @param offset Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - byteLength`. + * @param byteLength Number of bytes to write. Must satisfy `0 < byteLength <= 6`. + * @return `offset` plus the number of bytes written. + */ + writeIntLE(value: number, offset: number, byteLength: number): number; + /** + * Writes `byteLength` bytes of `value` to `buf` at the specified `offset`as big-endian. Supports up to 48 bits of accuracy. Behavior is undefined when`value` is anything other than a + * signed integer. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.allocUnsafe(6); + * + * buf.writeIntBE(0x1234567890ab, 0, 6); + * + * console.log(buf); + * // Prints: + * ``` + * @since v0.11.15 + * @param value Number to be written to `buf`. + * @param offset Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - byteLength`. + * @param byteLength Number of bytes to write. Must satisfy `0 < byteLength <= 6`. + * @return `offset` plus the number of bytes written. + */ + writeIntBE(value: number, offset: number, byteLength: number): number; + /** + * Reads an unsigned, big-endian 64-bit integer from `buf` at the specified`offset`. + * + * This function is also available under the `readBigUint64BE` alias. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.from([0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff]); + * + * console.log(buf.readBigUInt64BE(0)); + * // Prints: 4294967295n + * ``` + * @since v12.0.0, v10.20.0 + * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy: `0 <= offset <= buf.length - 8`. + */ + readBigUInt64BE(offset?: number): bigint; + /** + * @alias Buffer.readBigUInt64BE + * @since v14.10.0, v12.19.0 + */ + readBigUint64BE(offset?: number): bigint; + /** + * Reads an unsigned, little-endian 64-bit integer from `buf` at the specified`offset`. + * + * This function is also available under the `readBigUint64LE` alias. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.from([0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff]); + * + * console.log(buf.readBigUInt64LE(0)); + * // Prints: 18446744069414584320n + * ``` + * @since v12.0.0, v10.20.0 + * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy: `0 <= offset <= buf.length - 8`. + */ + readBigUInt64LE(offset?: number): bigint; + /** + * @alias Buffer.readBigUInt64LE + * @since v14.10.0, v12.19.0 + */ + readBigUint64LE(offset?: number): bigint; + /** + * Reads a signed, big-endian 64-bit integer from `buf` at the specified `offset`. + * + * Integers read from a `Buffer` are interpreted as two's complement signed + * values. + * @since v12.0.0, v10.20.0 + * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy: `0 <= offset <= buf.length - 8`. + */ + readBigInt64BE(offset?: number): bigint; + /** + * Reads a signed, little-endian 64-bit integer from `buf` at the specified`offset`. + * + * Integers read from a `Buffer` are interpreted as two's complement signed + * values. + * @since v12.0.0, v10.20.0 + * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy: `0 <= offset <= buf.length - 8`. + */ + readBigInt64LE(offset?: number): bigint; + /** + * Reads `byteLength` number of bytes from `buf` at the specified `offset`and interprets the result as an unsigned, little-endian integer supporting + * up to 48 bits of accuracy. + * + * This function is also available under the `readUintLE` alias. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.from([0x12, 0x34, 0x56, 0x78, 0x90, 0xab]); + * + * console.log(buf.readUIntLE(0, 6).toString(16)); + * // Prints: ab9078563412 + * ``` + * @since v0.11.15 + * @param offset Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - byteLength`. + * @param byteLength Number of bytes to read. Must satisfy `0 < byteLength <= 6`. + */ + readUIntLE(offset: number, byteLength: number): number; + /** + * @alias Buffer.readUIntLE + * @since v14.9.0, v12.19.0 + */ + readUintLE(offset: number, byteLength: number): number; + /** + * Reads `byteLength` number of bytes from `buf` at the specified `offset`and interprets the result as an unsigned big-endian integer supporting + * up to 48 bits of accuracy. + * + * This function is also available under the `readUintBE` alias. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.from([0x12, 0x34, 0x56, 0x78, 0x90, 0xab]); + * + * console.log(buf.readUIntBE(0, 6).toString(16)); + * // Prints: 1234567890ab + * console.log(buf.readUIntBE(1, 6).toString(16)); + * // Throws ERR_OUT_OF_RANGE. + * ``` + * @since v0.11.15 + * @param offset Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - byteLength`. + * @param byteLength Number of bytes to read. Must satisfy `0 < byteLength <= 6`. + */ + readUIntBE(offset: number, byteLength: number): number; + /** + * @alias Buffer.readUIntBE + * @since v14.9.0, v12.19.0 + */ + readUintBE(offset: number, byteLength: number): number; + /** + * Reads `byteLength` number of bytes from `buf` at the specified `offset`and interprets the result as a little-endian, two's complement signed value + * supporting up to 48 bits of accuracy. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.from([0x12, 0x34, 0x56, 0x78, 0x90, 0xab]); + * + * console.log(buf.readIntLE(0, 6).toString(16)); + * // Prints: -546f87a9cbee + * ``` + * @since v0.11.15 + * @param offset Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - byteLength`. + * @param byteLength Number of bytes to read. Must satisfy `0 < byteLength <= 6`. + */ + readIntLE(offset: number, byteLength: number): number; + /** + * Reads `byteLength` number of bytes from `buf` at the specified `offset`and interprets the result as a big-endian, two's complement signed value + * supporting up to 48 bits of accuracy. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.from([0x12, 0x34, 0x56, 0x78, 0x90, 0xab]); + * + * console.log(buf.readIntBE(0, 6).toString(16)); + * // Prints: 1234567890ab + * console.log(buf.readIntBE(1, 6).toString(16)); + * // Throws ERR_OUT_OF_RANGE. + * console.log(buf.readIntBE(1, 0).toString(16)); + * // Throws ERR_OUT_OF_RANGE. + * ``` + * @since v0.11.15 + * @param offset Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - byteLength`. + * @param byteLength Number of bytes to read. Must satisfy `0 < byteLength <= 6`. + */ + readIntBE(offset: number, byteLength: number): number; + /** + * Reads an unsigned 8-bit integer from `buf` at the specified `offset`. + * + * This function is also available under the `readUint8` alias. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.from([1, -2]); + * + * console.log(buf.readUInt8(0)); + * // Prints: 1 + * console.log(buf.readUInt8(1)); + * // Prints: 254 + * console.log(buf.readUInt8(2)); + * // Throws ERR_OUT_OF_RANGE. + * ``` + * @since v0.5.0 + * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - 1`. + */ + readUInt8(offset?: number): number; + /** + * @alias Buffer.readUInt8 + * @since v14.9.0, v12.19.0 + */ + readUint8(offset?: number): number; + /** + * Reads an unsigned, little-endian 16-bit integer from `buf` at the specified`offset`. + * + * This function is also available under the `readUint16LE` alias. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.from([0x12, 0x34, 0x56]); + * + * console.log(buf.readUInt16LE(0).toString(16)); + * // Prints: 3412 + * console.log(buf.readUInt16LE(1).toString(16)); + * // Prints: 5634 + * console.log(buf.readUInt16LE(2).toString(16)); + * // Throws ERR_OUT_OF_RANGE. + * ``` + * @since v0.5.5 + * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - 2`. + */ + readUInt16LE(offset?: number): number; + /** + * @alias Buffer.readUInt16LE + * @since v14.9.0, v12.19.0 + */ + readUint16LE(offset?: number): number; + /** + * Reads an unsigned, big-endian 16-bit integer from `buf` at the specified`offset`. + * + * This function is also available under the `readUint16BE` alias. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.from([0x12, 0x34, 0x56]); + * + * console.log(buf.readUInt16BE(0).toString(16)); + * // Prints: 1234 + * console.log(buf.readUInt16BE(1).toString(16)); + * // Prints: 3456 + * ``` + * @since v0.5.5 + * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - 2`. + */ + readUInt16BE(offset?: number): number; + /** + * @alias Buffer.readUInt16BE + * @since v14.9.0, v12.19.0 + */ + readUint16BE(offset?: number): number; + /** + * Reads an unsigned, little-endian 32-bit integer from `buf` at the specified`offset`. + * + * This function is also available under the `readUint32LE` alias. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.from([0x12, 0x34, 0x56, 0x78]); + * + * console.log(buf.readUInt32LE(0).toString(16)); + * // Prints: 78563412 + * console.log(buf.readUInt32LE(1).toString(16)); + * // Throws ERR_OUT_OF_RANGE. + * ``` + * @since v0.5.5 + * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - 4`. + */ + readUInt32LE(offset?: number): number; + /** + * @alias Buffer.readUInt32LE + * @since v14.9.0, v12.19.0 + */ + readUint32LE(offset?: number): number; + /** + * Reads an unsigned, big-endian 32-bit integer from `buf` at the specified`offset`. + * + * This function is also available under the `readUint32BE` alias. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.from([0x12, 0x34, 0x56, 0x78]); + * + * console.log(buf.readUInt32BE(0).toString(16)); + * // Prints: 12345678 + * ``` + * @since v0.5.5 + * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - 4`. + */ + readUInt32BE(offset?: number): number; + /** + * @alias Buffer.readUInt32BE + * @since v14.9.0, v12.19.0 + */ + readUint32BE(offset?: number): number; + /** + * Reads a signed 8-bit integer from `buf` at the specified `offset`. + * + * Integers read from a `Buffer` are interpreted as two's complement signed values. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.from([-1, 5]); + * + * console.log(buf.readInt8(0)); + * // Prints: -1 + * console.log(buf.readInt8(1)); + * // Prints: 5 + * console.log(buf.readInt8(2)); + * // Throws ERR_OUT_OF_RANGE. + * ``` + * @since v0.5.0 + * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - 1`. + */ + readInt8(offset?: number): number; + /** + * Reads a signed, little-endian 16-bit integer from `buf` at the specified`offset`. + * + * Integers read from a `Buffer` are interpreted as two's complement signed values. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.from([0, 5]); + * + * console.log(buf.readInt16LE(0)); + * // Prints: 1280 + * console.log(buf.readInt16LE(1)); + * // Throws ERR_OUT_OF_RANGE. + * ``` + * @since v0.5.5 + * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - 2`. + */ + readInt16LE(offset?: number): number; + /** + * Reads a signed, big-endian 16-bit integer from `buf` at the specified `offset`. + * + * Integers read from a `Buffer` are interpreted as two's complement signed values. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.from([0, 5]); + * + * console.log(buf.readInt16BE(0)); + * // Prints: 5 + * ``` + * @since v0.5.5 + * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - 2`. + */ + readInt16BE(offset?: number): number; + /** + * Reads a signed, little-endian 32-bit integer from `buf` at the specified`offset`. + * + * Integers read from a `Buffer` are interpreted as two's complement signed values. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.from([0, 0, 0, 5]); + * + * console.log(buf.readInt32LE(0)); + * // Prints: 83886080 + * console.log(buf.readInt32LE(1)); + * // Throws ERR_OUT_OF_RANGE. + * ``` + * @since v0.5.5 + * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - 4`. + */ + readInt32LE(offset?: number): number; + /** + * Reads a signed, big-endian 32-bit integer from `buf` at the specified `offset`. + * + * Integers read from a `Buffer` are interpreted as two's complement signed values. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.from([0, 0, 0, 5]); + * + * console.log(buf.readInt32BE(0)); + * // Prints: 5 + * ``` + * @since v0.5.5 + * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - 4`. + */ + readInt32BE(offset?: number): number; + /** + * Reads a 32-bit, little-endian float from `buf` at the specified `offset`. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.from([1, 2, 3, 4]); + * + * console.log(buf.readFloatLE(0)); + * // Prints: 1.539989614439558e-36 + * console.log(buf.readFloatLE(1)); + * // Throws ERR_OUT_OF_RANGE. + * ``` + * @since v0.11.15 + * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - 4`. + */ + readFloatLE(offset?: number): number; + /** + * Reads a 32-bit, big-endian float from `buf` at the specified `offset`. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.from([1, 2, 3, 4]); + * + * console.log(buf.readFloatBE(0)); + * // Prints: 2.387939260590663e-38 + * ``` + * @since v0.11.15 + * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - 4`. + */ + readFloatBE(offset?: number): number; + /** + * Reads a 64-bit, little-endian double from `buf` at the specified `offset`. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.from([1, 2, 3, 4, 5, 6, 7, 8]); + * + * console.log(buf.readDoubleLE(0)); + * // Prints: 5.447603722011605e-270 + * console.log(buf.readDoubleLE(1)); + * // Throws ERR_OUT_OF_RANGE. + * ``` + * @since v0.11.15 + * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - 8`. + */ + readDoubleLE(offset?: number): number; + /** + * Reads a 64-bit, big-endian double from `buf` at the specified `offset`. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.from([1, 2, 3, 4, 5, 6, 7, 8]); + * + * console.log(buf.readDoubleBE(0)); + * // Prints: 8.20788039913184e-304 + * ``` + * @since v0.11.15 + * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - 8`. + */ + readDoubleBE(offset?: number): number; + reverse(): this; + /** + * Interprets `buf` as an array of unsigned 16-bit integers and swaps the + * byte order _in-place_. Throws `ERR_INVALID_BUFFER_SIZE` if `buf.length` is not a multiple of 2. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf1 = Buffer.from([0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8]); + * + * console.log(buf1); + * // Prints: + * + * buf1.swap16(); + * + * console.log(buf1); + * // Prints: + * + * const buf2 = Buffer.from([0x1, 0x2, 0x3]); + * + * buf2.swap16(); + * // Throws ERR_INVALID_BUFFER_SIZE. + * ``` + * + * One convenient use of `buf.swap16()` is to perform a fast in-place conversion + * between UTF-16 little-endian and UTF-16 big-endian: + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.from('This is little-endian UTF-16', 'utf16le'); + * buf.swap16(); // Convert to big-endian UTF-16 text. + * ``` + * @since v5.10.0 + * @return A reference to `buf`. + */ + swap16(): Buffer; + /** + * Interprets `buf` as an array of unsigned 32-bit integers and swaps the + * byte order _in-place_. Throws `ERR_INVALID_BUFFER_SIZE` if `buf.length` is not a multiple of 4. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf1 = Buffer.from([0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8]); + * + * console.log(buf1); + * // Prints: + * + * buf1.swap32(); + * + * console.log(buf1); + * // Prints: + * + * const buf2 = Buffer.from([0x1, 0x2, 0x3]); + * + * buf2.swap32(); + * // Throws ERR_INVALID_BUFFER_SIZE. + * ``` + * @since v5.10.0 + * @return A reference to `buf`. + */ + swap32(): Buffer; + /** + * Interprets `buf` as an array of 64-bit numbers and swaps byte order _in-place_. + * Throws `ERR_INVALID_BUFFER_SIZE` if `buf.length` is not a multiple of 8. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf1 = Buffer.from([0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8]); + * + * console.log(buf1); + * // Prints: + * + * buf1.swap64(); + * + * console.log(buf1); + * // Prints: + * + * const buf2 = Buffer.from([0x1, 0x2, 0x3]); + * + * buf2.swap64(); + * // Throws ERR_INVALID_BUFFER_SIZE. + * ``` + * @since v6.3.0 + * @return A reference to `buf`. + */ + swap64(): Buffer; + /** + * Writes `value` to `buf` at the specified `offset`. `value` must be a + * valid unsigned 8-bit integer. Behavior is undefined when `value` is anything + * other than an unsigned 8-bit integer. + * + * This function is also available under the `writeUint8` alias. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.allocUnsafe(4); + * + * buf.writeUInt8(0x3, 0); + * buf.writeUInt8(0x4, 1); + * buf.writeUInt8(0x23, 2); + * buf.writeUInt8(0x42, 3); + * + * console.log(buf); + * // Prints: + * ``` + * @since v0.5.0 + * @param value Number to be written to `buf`. + * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - 1`. + * @return `offset` plus the number of bytes written. + */ + writeUInt8(value: number, offset?: number): number; + /** + * @alias Buffer.writeUInt8 + * @since v14.9.0, v12.19.0 + */ + writeUint8(value: number, offset?: number): number; + /** + * Writes `value` to `buf` at the specified `offset` as little-endian. The `value`must be a valid unsigned 16-bit integer. Behavior is undefined when `value` is + * anything other than an unsigned 16-bit integer. + * + * This function is also available under the `writeUint16LE` alias. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.allocUnsafe(4); + * + * buf.writeUInt16LE(0xdead, 0); + * buf.writeUInt16LE(0xbeef, 2); + * + * console.log(buf); + * // Prints: + * ``` + * @since v0.5.5 + * @param value Number to be written to `buf`. + * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - 2`. + * @return `offset` plus the number of bytes written. + */ + writeUInt16LE(value: number, offset?: number): number; + /** + * @alias Buffer.writeUInt16LE + * @since v14.9.0, v12.19.0 + */ + writeUint16LE(value: number, offset?: number): number; + /** + * Writes `value` to `buf` at the specified `offset` as big-endian. The `value`must be a valid unsigned 16-bit integer. Behavior is undefined when `value`is anything other than an + * unsigned 16-bit integer. + * + * This function is also available under the `writeUint16BE` alias. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.allocUnsafe(4); + * + * buf.writeUInt16BE(0xdead, 0); + * buf.writeUInt16BE(0xbeef, 2); + * + * console.log(buf); + * // Prints: + * ``` + * @since v0.5.5 + * @param value Number to be written to `buf`. + * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - 2`. + * @return `offset` plus the number of bytes written. + */ + writeUInt16BE(value: number, offset?: number): number; + /** + * @alias Buffer.writeUInt16BE + * @since v14.9.0, v12.19.0 + */ + writeUint16BE(value: number, offset?: number): number; + /** + * Writes `value` to `buf` at the specified `offset` as little-endian. The `value`must be a valid unsigned 32-bit integer. Behavior is undefined when `value` is + * anything other than an unsigned 32-bit integer. + * + * This function is also available under the `writeUint32LE` alias. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.allocUnsafe(4); + * + * buf.writeUInt32LE(0xfeedface, 0); + * + * console.log(buf); + * // Prints: + * ``` + * @since v0.5.5 + * @param value Number to be written to `buf`. + * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - 4`. + * @return `offset` plus the number of bytes written. + */ + writeUInt32LE(value: number, offset?: number): number; + /** + * @alias Buffer.writeUInt32LE + * @since v14.9.0, v12.19.0 + */ + writeUint32LE(value: number, offset?: number): number; + /** + * Writes `value` to `buf` at the specified `offset` as big-endian. The `value`must be a valid unsigned 32-bit integer. Behavior is undefined when `value`is anything other than an + * unsigned 32-bit integer. + * + * This function is also available under the `writeUint32BE` alias. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.allocUnsafe(4); + * + * buf.writeUInt32BE(0xfeedface, 0); + * + * console.log(buf); + * // Prints: + * ``` + * @since v0.5.5 + * @param value Number to be written to `buf`. + * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - 4`. + * @return `offset` plus the number of bytes written. + */ + writeUInt32BE(value: number, offset?: number): number; + /** + * @alias Buffer.writeUInt32BE + * @since v14.9.0, v12.19.0 + */ + writeUint32BE(value: number, offset?: number): number; + /** + * Writes `value` to `buf` at the specified `offset`. `value` must be a valid + * signed 8-bit integer. Behavior is undefined when `value` is anything other than + * a signed 8-bit integer. + * + * `value` is interpreted and written as a two's complement signed integer. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.allocUnsafe(2); + * + * buf.writeInt8(2, 0); + * buf.writeInt8(-2, 1); + * + * console.log(buf); + * // Prints: + * ``` + * @since v0.5.0 + * @param value Number to be written to `buf`. + * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - 1`. + * @return `offset` plus the number of bytes written. + */ + writeInt8(value: number, offset?: number): number; + /** + * Writes `value` to `buf` at the specified `offset` as little-endian. The `value`must be a valid signed 16-bit integer. Behavior is undefined when `value` is + * anything other than a signed 16-bit integer. + * + * The `value` is interpreted and written as a two's complement signed integer. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.allocUnsafe(2); + * + * buf.writeInt16LE(0x0304, 0); + * + * console.log(buf); + * // Prints: + * ``` + * @since v0.5.5 + * @param value Number to be written to `buf`. + * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - 2`. + * @return `offset` plus the number of bytes written. + */ + writeInt16LE(value: number, offset?: number): number; + /** + * Writes `value` to `buf` at the specified `offset` as big-endian. The `value`must be a valid signed 16-bit integer. Behavior is undefined when `value` is + * anything other than a signed 16-bit integer. + * + * The `value` is interpreted and written as a two's complement signed integer. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.allocUnsafe(2); + * + * buf.writeInt16BE(0x0102, 0); + * + * console.log(buf); + * // Prints: + * ``` + * @since v0.5.5 + * @param value Number to be written to `buf`. + * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - 2`. + * @return `offset` plus the number of bytes written. + */ + writeInt16BE(value: number, offset?: number): number; + /** + * Writes `value` to `buf` at the specified `offset` as little-endian. The `value`must be a valid signed 32-bit integer. Behavior is undefined when `value` is + * anything other than a signed 32-bit integer. + * + * The `value` is interpreted and written as a two's complement signed integer. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.allocUnsafe(4); + * + * buf.writeInt32LE(0x05060708, 0); + * + * console.log(buf); + * // Prints: + * ``` + * @since v0.5.5 + * @param value Number to be written to `buf`. + * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - 4`. + * @return `offset` plus the number of bytes written. + */ + writeInt32LE(value: number, offset?: number): number; + /** + * Writes `value` to `buf` at the specified `offset` as big-endian. The `value`must be a valid signed 32-bit integer. Behavior is undefined when `value` is + * anything other than a signed 32-bit integer. + * + * The `value` is interpreted and written as a two's complement signed integer. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.allocUnsafe(4); + * + * buf.writeInt32BE(0x01020304, 0); + * + * console.log(buf); + * // Prints: + * ``` + * @since v0.5.5 + * @param value Number to be written to `buf`. + * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - 4`. + * @return `offset` plus the number of bytes written. + */ + writeInt32BE(value: number, offset?: number): number; + /** + * Writes `value` to `buf` at the specified `offset` as little-endian. Behavior is + * undefined when `value` is anything other than a JavaScript number. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.allocUnsafe(4); + * + * buf.writeFloatLE(0xcafebabe, 0); + * + * console.log(buf); + * // Prints: + * ``` + * @since v0.11.15 + * @param value Number to be written to `buf`. + * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - 4`. + * @return `offset` plus the number of bytes written. + */ + writeFloatLE(value: number, offset?: number): number; + /** + * Writes `value` to `buf` at the specified `offset` as big-endian. Behavior is + * undefined when `value` is anything other than a JavaScript number. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.allocUnsafe(4); + * + * buf.writeFloatBE(0xcafebabe, 0); + * + * console.log(buf); + * // Prints: + * ``` + * @since v0.11.15 + * @param value Number to be written to `buf`. + * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - 4`. + * @return `offset` plus the number of bytes written. + */ + writeFloatBE(value: number, offset?: number): number; + /** + * Writes `value` to `buf` at the specified `offset` as little-endian. The `value`must be a JavaScript number. Behavior is undefined when `value` is anything + * other than a JavaScript number. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.allocUnsafe(8); + * + * buf.writeDoubleLE(123.456, 0); + * + * console.log(buf); + * // Prints: + * ``` + * @since v0.11.15 + * @param value Number to be written to `buf`. + * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - 8`. + * @return `offset` plus the number of bytes written. + */ + writeDoubleLE(value: number, offset?: number): number; + /** + * Writes `value` to `buf` at the specified `offset` as big-endian. The `value`must be a JavaScript number. Behavior is undefined when `value` is anything + * other than a JavaScript number. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.allocUnsafe(8); + * + * buf.writeDoubleBE(123.456, 0); + * + * console.log(buf); + * // Prints: + * ``` + * @since v0.11.15 + * @param value Number to be written to `buf`. + * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - 8`. + * @return `offset` plus the number of bytes written. + */ + writeDoubleBE(value: number, offset?: number): number; + /** + * Fills `buf` with the specified `value`. If the `offset` and `end` are not given, + * the entire `buf` will be filled: + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * // Fill a `Buffer` with the ASCII character 'h'. + * + * const b = Buffer.allocUnsafe(50).fill('h'); + * + * console.log(b.toString()); + * // Prints: hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh + * + * // Fill a buffer with empty string + * const c = Buffer.allocUnsafe(5).fill(''); + * + * console.log(c.fill('')); + * // Prints: + * ``` + * + * `value` is coerced to a `uint32` value if it is not a string, `Buffer`, or + * integer. If the resulting integer is greater than `255` (decimal), `buf` will be + * filled with `value & 255`. + * + * If the final write of a `fill()` operation falls on a multi-byte character, + * then only the bytes of that character that fit into `buf` are written: + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * // Fill a `Buffer` with character that takes up two bytes in UTF-8. + * + * console.log(Buffer.allocUnsafe(5).fill('\u0222')); + * // Prints: + * ``` + * + * If `value` contains invalid characters, it is truncated; if no valid + * fill data remains, an exception is thrown: + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.allocUnsafe(5); + * + * console.log(buf.fill('a')); + * // Prints: + * console.log(buf.fill('aazz', 'hex')); + * // Prints: + * console.log(buf.fill('zz', 'hex')); + * // Throws an exception. + * ``` + * @since v0.5.0 + * @param value The value with which to fill `buf`. Empty value (string, Uint8Array, Buffer) is coerced to `0`. + * @param [offset=0] Number of bytes to skip before starting to fill `buf`. + * @param [end=buf.length] Where to stop filling `buf` (not inclusive). + * @param [encoding='utf8'] The encoding for `value` if `value` is a string. + * @return A reference to `buf`. + */ + fill(value: string | Uint8Array | number, offset?: number, end?: number, encoding?: BufferEncoding): this; + /** + * If `value` is: + * + * * a string, `value` is interpreted according to the character encoding in`encoding`. + * * a `Buffer` or [`Uint8Array`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array), `value` will be used in its entirety. + * To compare a partial `Buffer`, use `buf.subarray`. + * * a number, `value` will be interpreted as an unsigned 8-bit integer + * value between `0` and `255`. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.from('this is a buffer'); + * + * console.log(buf.indexOf('this')); + * // Prints: 0 + * console.log(buf.indexOf('is')); + * // Prints: 2 + * console.log(buf.indexOf(Buffer.from('a buffer'))); + * // Prints: 8 + * console.log(buf.indexOf(97)); + * // Prints: 8 (97 is the decimal ASCII value for 'a') + * console.log(buf.indexOf(Buffer.from('a buffer example'))); + * // Prints: -1 + * console.log(buf.indexOf(Buffer.from('a buffer example').slice(0, 8))); + * // Prints: 8 + * + * const utf16Buffer = Buffer.from('\u039a\u0391\u03a3\u03a3\u0395', 'utf16le'); + * + * console.log(utf16Buffer.indexOf('\u03a3', 0, 'utf16le')); + * // Prints: 4 + * console.log(utf16Buffer.indexOf('\u03a3', -4, 'utf16le')); + * // Prints: 6 + * ``` + * + * If `value` is not a string, number, or `Buffer`, this method will throw a`TypeError`. If `value` is a number, it will be coerced to a valid byte value, + * an integer between 0 and 255. + * + * If `byteOffset` is not a number, it will be coerced to a number. If the result + * of coercion is `NaN` or `0`, then the entire buffer will be searched. This + * behavior matches [`String.prototype.indexOf()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/indexOf). + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const b = Buffer.from('abcdef'); + * + * // Passing a value that's a number, but not a valid byte. + * // Prints: 2, equivalent to searching for 99 or 'c'. + * console.log(b.indexOf(99.9)); + * console.log(b.indexOf(256 + 99)); + * + * // Passing a byteOffset that coerces to NaN or 0. + * // Prints: 1, searching the whole buffer. + * console.log(b.indexOf('b', undefined)); + * console.log(b.indexOf('b', {})); + * console.log(b.indexOf('b', null)); + * console.log(b.indexOf('b', [])); + * ``` + * + * If `value` is an empty string or empty `Buffer` and `byteOffset` is less + * than `buf.length`, `byteOffset` will be returned. If `value` is empty and`byteOffset` is at least `buf.length`, `buf.length` will be returned. + * @since v1.5.0 + * @param value What to search for. + * @param [byteOffset=0] Where to begin searching in `buf`. If negative, then offset is calculated from the end of `buf`. + * @param [encoding='utf8'] If `value` is a string, this is the encoding used to determine the binary representation of the string that will be searched for in `buf`. + * @return The index of the first occurrence of `value` in `buf`, or `-1` if `buf` does not contain `value`. + */ + indexOf(value: string | number | Uint8Array, byteOffset?: number, encoding?: BufferEncoding): number; + /** + * Identical to `buf.indexOf()`, except the last occurrence of `value` is found + * rather than the first occurrence. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.from('this buffer is a buffer'); + * + * console.log(buf.lastIndexOf('this')); + * // Prints: 0 + * console.log(buf.lastIndexOf('buffer')); + * // Prints: 17 + * console.log(buf.lastIndexOf(Buffer.from('buffer'))); + * // Prints: 17 + * console.log(buf.lastIndexOf(97)); + * // Prints: 15 (97 is the decimal ASCII value for 'a') + * console.log(buf.lastIndexOf(Buffer.from('yolo'))); + * // Prints: -1 + * console.log(buf.lastIndexOf('buffer', 5)); + * // Prints: 5 + * console.log(buf.lastIndexOf('buffer', 4)); + * // Prints: -1 + * + * const utf16Buffer = Buffer.from('\u039a\u0391\u03a3\u03a3\u0395', 'utf16le'); + * + * console.log(utf16Buffer.lastIndexOf('\u03a3', undefined, 'utf16le')); + * // Prints: 6 + * console.log(utf16Buffer.lastIndexOf('\u03a3', -5, 'utf16le')); + * // Prints: 4 + * ``` + * + * If `value` is not a string, number, or `Buffer`, this method will throw a`TypeError`. If `value` is a number, it will be coerced to a valid byte value, + * an integer between 0 and 255. + * + * If `byteOffset` is not a number, it will be coerced to a number. Any arguments + * that coerce to `NaN`, like `{}` or `undefined`, will search the whole buffer. + * This behavior matches [`String.prototype.lastIndexOf()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/lastIndexOf). + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const b = Buffer.from('abcdef'); + * + * // Passing a value that's a number, but not a valid byte. + * // Prints: 2, equivalent to searching for 99 or 'c'. + * console.log(b.lastIndexOf(99.9)); + * console.log(b.lastIndexOf(256 + 99)); + * + * // Passing a byteOffset that coerces to NaN. + * // Prints: 1, searching the whole buffer. + * console.log(b.lastIndexOf('b', undefined)); + * console.log(b.lastIndexOf('b', {})); + * + * // Passing a byteOffset that coerces to 0. + * // Prints: -1, equivalent to passing 0. + * console.log(b.lastIndexOf('b', null)); + * console.log(b.lastIndexOf('b', [])); + * ``` + * + * If `value` is an empty string or empty `Buffer`, `byteOffset` will be returned. + * @since v6.0.0 + * @param value What to search for. + * @param [byteOffset=buf.length - 1] Where to begin searching in `buf`. If negative, then offset is calculated from the end of `buf`. + * @param [encoding='utf8'] If `value` is a string, this is the encoding used to determine the binary representation of the string that will be searched for in `buf`. + * @return The index of the last occurrence of `value` in `buf`, or `-1` if `buf` does not contain `value`. + */ + lastIndexOf(value: string | number | Uint8Array, byteOffset?: number, encoding?: BufferEncoding): number; + /** + * Creates and returns an [iterator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols) of `[index, byte]` pairs from the contents + * of `buf`. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * // Log the entire contents of a `Buffer`. + * + * const buf = Buffer.from('buffer'); + * + * for (const pair of buf.entries()) { + * console.log(pair); + * } + * // Prints: + * // [0, 98] + * // [1, 117] + * // [2, 102] + * // [3, 102] + * // [4, 101] + * // [5, 114] + * ``` + * @since v1.1.0 + */ + entries(): IterableIterator<[number, number]>; + /** + * Equivalent to `buf.indexOf() !== -1`. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.from('this is a buffer'); + * + * console.log(buf.includes('this')); + * // Prints: true + * console.log(buf.includes('is')); + * // Prints: true + * console.log(buf.includes(Buffer.from('a buffer'))); + * // Prints: true + * console.log(buf.includes(97)); + * // Prints: true (97 is the decimal ASCII value for 'a') + * console.log(buf.includes(Buffer.from('a buffer example'))); + * // Prints: false + * console.log(buf.includes(Buffer.from('a buffer example').slice(0, 8))); + * // Prints: true + * console.log(buf.includes('this', 4)); + * // Prints: false + * ``` + * @since v5.3.0 + * @param value What to search for. + * @param [byteOffset=0] Where to begin searching in `buf`. If negative, then offset is calculated from the end of `buf`. + * @param [encoding='utf8'] If `value` is a string, this is its encoding. + * @return `true` if `value` was found in `buf`, `false` otherwise. + */ + includes(value: string | number | Buffer, byteOffset?: number, encoding?: BufferEncoding): boolean; + /** + * Creates and returns an [iterator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols) of `buf` keys (indices). + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.from('buffer'); + * + * for (const key of buf.keys()) { + * console.log(key); + * } + * // Prints: + * // 0 + * // 1 + * // 2 + * // 3 + * // 4 + * // 5 + * ``` + * @since v1.1.0 + */ + keys(): IterableIterator; + /** + * Creates and returns an [iterator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols) for `buf` values (bytes). This function is + * called automatically when a `Buffer` is used in a `for..of` statement. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.from('buffer'); + * + * for (const value of buf.values()) { + * console.log(value); + * } + * // Prints: + * // 98 + * // 117 + * // 102 + * // 102 + * // 101 + * // 114 + * + * for (const value of buf) { + * console.log(value); + * } + * // Prints: + * // 98 + * // 117 + * // 102 + * // 102 + * // 101 + * // 114 + * ``` + * @since v1.1.0 + */ + values(): IterableIterator; + } + var Buffer: BufferConstructor; + /** + * Decodes a string of Base64-encoded data into bytes, and encodes those bytes + * into a string using Latin-1 (ISO-8859-1). + * + * The `data` may be any JavaScript-value that can be coerced into a string. + * + * **This function is only provided for compatibility with legacy web platform APIs** + * **and should never be used in new code, because they use strings to represent** + * **binary data and predate the introduction of typed arrays in JavaScript.** + * **For code running using Node.js APIs, converting between base64-encoded strings** + * **and binary data should be performed using `Buffer.from(str, 'base64')` and`buf.toString('base64')`.** + * @since v15.13.0, v14.17.0 + * @legacy Use `Buffer.from(data, 'base64')` instead. + * @param data The Base64-encoded input string. + */ + function atob(data: string): string; + /** + * Decodes a string into bytes using Latin-1 (ISO-8859), and encodes those bytes + * into a string using Base64. + * + * The `data` may be any JavaScript-value that can be coerced into a string. + * + * **This function is only provided for compatibility with legacy web platform APIs** + * **and should never be used in new code, because they use strings to represent** + * **binary data and predate the introduction of typed arrays in JavaScript.** + * **For code running using Node.js APIs, converting between base64-encoded strings** + * **and binary data should be performed using `Buffer.from(str, 'base64')` and`buf.toString('base64')`.** + * @since v15.13.0, v14.17.0 + * @legacy Use `buf.toString('base64')` instead. + * @param data An ASCII (Latin1) string. + */ + function btoa(data: string): string; + interface Blob extends __Blob {} + /** + * `Blob` class is a global reference for `require('node:buffer').Blob` + * https://nodejs.org/api/buffer.html#class-blob + * @since v18.0.0 + */ + var Blob: typeof globalThis extends { + onmessage: any; + Blob: infer T; + } ? T + : typeof NodeBlob; + } +} +declare module "node:buffer" { + export * from "buffer"; +} diff --git a/Url-Shortner/node_modules/@types/node/child_process.d.ts b/Url-Shortner/node_modules/@types/node/child_process.d.ts new file mode 100644 index 0000000..9f1a38a --- /dev/null +++ b/Url-Shortner/node_modules/@types/node/child_process.d.ts @@ -0,0 +1,1540 @@ +/** + * The `node:child_process` module provides the ability to spawn subprocesses in + * a manner that is similar, but not identical, to [`popen(3)`](http://man7.org/linux/man-pages/man3/popen.3.html). This capability + * is primarily provided by the {@link spawn} function: + * + * ```js + * const { spawn } = require('node:child_process'); + * const ls = spawn('ls', ['-lh', '/usr']); + * + * ls.stdout.on('data', (data) => { + * console.log(`stdout: ${data}`); + * }); + * + * ls.stderr.on('data', (data) => { + * console.error(`stderr: ${data}`); + * }); + * + * ls.on('close', (code) => { + * console.log(`child process exited with code ${code}`); + * }); + * ``` + * + * By default, pipes for `stdin`, `stdout`, and `stderr` are established between + * the parent Node.js process and the spawned subprocess. These pipes have + * limited (and platform-specific) capacity. If the subprocess writes to + * stdout in excess of that limit without the output being captured, the + * subprocess blocks waiting for the pipe buffer to accept more data. This is + * identical to the behavior of pipes in the shell. Use the `{ stdio: 'ignore' }`option if the output will not be consumed. + * + * The command lookup is performed using the `options.env.PATH` environment + * variable if `env` is in the `options` object. Otherwise, `process.env.PATH` is + * used. If `options.env` is set without `PATH`, lookup on Unix is performed + * on a default search path search of `/usr/bin:/bin` (see your operating system's + * manual for execvpe/execvp), on Windows the current processes environment + * variable `PATH` is used. + * + * On Windows, environment variables are case-insensitive. Node.js + * lexicographically sorts the `env` keys and uses the first one that + * case-insensitively matches. Only first (in lexicographic order) entry will be + * passed to the subprocess. This might lead to issues on Windows when passing + * objects to the `env` option that have multiple variants of the same key, such as`PATH` and `Path`. + * + * The {@link spawn} method spawns the child process asynchronously, + * without blocking the Node.js event loop. The {@link spawnSync} function provides equivalent functionality in a synchronous manner that blocks + * the event loop until the spawned process either exits or is terminated. + * + * For convenience, the `node:child_process` module provides a handful of + * synchronous and asynchronous alternatives to {@link spawn} and {@link spawnSync}. Each of these alternatives are implemented on + * top of {@link spawn} or {@link spawnSync}. + * + * * {@link exec}: spawns a shell and runs a command within that + * shell, passing the `stdout` and `stderr` to a callback function when + * complete. + * * {@link execFile}: similar to {@link exec} except + * that it spawns the command directly without first spawning a shell by + * default. + * * {@link fork}: spawns a new Node.js process and invokes a + * specified module with an IPC communication channel established that allows + * sending messages between parent and child. + * * {@link execSync}: a synchronous version of {@link exec} that will block the Node.js event loop. + * * {@link execFileSync}: a synchronous version of {@link execFile} that will block the Node.js event loop. + * + * For certain use cases, such as automating shell scripts, the `synchronous counterparts` may be more convenient. In many cases, however, + * the synchronous methods can have significant impact on performance due to + * stalling the event loop while spawned processes complete. + * @see [source](https://github.com/nodejs/node/blob/v20.2.0/lib/child_process.js) + */ +declare module "child_process" { + import { ObjectEncodingOptions } from "node:fs"; + import { Abortable, EventEmitter } from "node:events"; + import * as net from "node:net"; + import { Pipe, Readable, Stream, Writable } from "node:stream"; + import { URL } from "node:url"; + type Serializable = string | object | number | boolean | bigint; + type SendHandle = net.Socket | net.Server; + /** + * Instances of the `ChildProcess` represent spawned child processes. + * + * Instances of `ChildProcess` are not intended to be created directly. Rather, + * use the {@link spawn}, {@link exec},{@link execFile}, or {@link fork} methods to create + * instances of `ChildProcess`. + * @since v2.2.0 + */ + class ChildProcess extends EventEmitter { + /** + * A `Writable Stream` that represents the child process's `stdin`. + * + * If a child process waits to read all of its input, the child will not continue + * until this stream has been closed via `end()`. + * + * If the child was spawned with `stdio[0]` set to anything other than `'pipe'`, + * then this will be `null`. + * + * `subprocess.stdin` is an alias for `subprocess.stdio[0]`. Both properties will + * refer to the same value. + * + * The `subprocess.stdin` property can be `null` or `undefined`if the child process could not be successfully spawned. + * @since v0.1.90 + */ + stdin: Writable | null; + /** + * A `Readable Stream` that represents the child process's `stdout`. + * + * If the child was spawned with `stdio[1]` set to anything other than `'pipe'`, + * then this will be `null`. + * + * `subprocess.stdout` is an alias for `subprocess.stdio[1]`. Both properties will + * refer to the same value. + * + * ```js + * const { spawn } = require('node:child_process'); + * + * const subprocess = spawn('ls'); + * + * subprocess.stdout.on('data', (data) => { + * console.log(`Received chunk ${data}`); + * }); + * ``` + * + * The `subprocess.stdout` property can be `null` or `undefined`if the child process could not be successfully spawned. + * @since v0.1.90 + */ + stdout: Readable | null; + /** + * A `Readable Stream` that represents the child process's `stderr`. + * + * If the child was spawned with `stdio[2]` set to anything other than `'pipe'`, + * then this will be `null`. + * + * `subprocess.stderr` is an alias for `subprocess.stdio[2]`. Both properties will + * refer to the same value. + * + * The `subprocess.stderr` property can be `null` or `undefined`if the child process could not be successfully spawned. + * @since v0.1.90 + */ + stderr: Readable | null; + /** + * The `subprocess.channel` property is a reference to the child's IPC channel. If + * no IPC channel exists, this property is `undefined`. + * @since v7.1.0 + */ + readonly channel?: Pipe | null | undefined; + /** + * A sparse array of pipes to the child process, corresponding with positions in + * the `stdio` option passed to {@link spawn} that have been set + * to the value `'pipe'`. `subprocess.stdio[0]`, `subprocess.stdio[1]`, and`subprocess.stdio[2]` are also available as `subprocess.stdin`,`subprocess.stdout`, and `subprocess.stderr`, + * respectively. + * + * In the following example, only the child's fd `1` (stdout) is configured as a + * pipe, so only the parent's `subprocess.stdio[1]` is a stream, all other values + * in the array are `null`. + * + * ```js + * const assert = require('node:assert'); + * const fs = require('node:fs'); + * const child_process = require('node:child_process'); + * + * const subprocess = child_process.spawn('ls', { + * stdio: [ + * 0, // Use parent's stdin for child. + * 'pipe', // Pipe child's stdout to parent. + * fs.openSync('err.out', 'w'), // Direct child's stderr to a file. + * ], + * }); + * + * assert.strictEqual(subprocess.stdio[0], null); + * assert.strictEqual(subprocess.stdio[0], subprocess.stdin); + * + * assert(subprocess.stdout); + * assert.strictEqual(subprocess.stdio[1], subprocess.stdout); + * + * assert.strictEqual(subprocess.stdio[2], null); + * assert.strictEqual(subprocess.stdio[2], subprocess.stderr); + * ``` + * + * The `subprocess.stdio` property can be `undefined` if the child process could + * not be successfully spawned. + * @since v0.7.10 + */ + readonly stdio: [ + Writable | null, + // stdin + Readable | null, + // stdout + Readable | null, + // stderr + Readable | Writable | null | undefined, + // extra + Readable | Writable | null | undefined, // extra + ]; + /** + * The `subprocess.killed` property indicates whether the child process + * successfully received a signal from `subprocess.kill()`. The `killed` property + * does not indicate that the child process has been terminated. + * @since v0.5.10 + */ + readonly killed: boolean; + /** + * Returns the process identifier (PID) of the child process. If the child process + * fails to spawn due to errors, then the value is `undefined` and `error` is + * emitted. + * + * ```js + * const { spawn } = require('node:child_process'); + * const grep = spawn('grep', ['ssh']); + * + * console.log(`Spawned child pid: ${grep.pid}`); + * grep.stdin.end(); + * ``` + * @since v0.1.90 + */ + readonly pid?: number | undefined; + /** + * The `subprocess.connected` property indicates whether it is still possible to + * send and receive messages from a child process. When `subprocess.connected` is`false`, it is no longer possible to send or receive messages. + * @since v0.7.2 + */ + readonly connected: boolean; + /** + * The `subprocess.exitCode` property indicates the exit code of the child process. + * If the child process is still running, the field will be `null`. + */ + readonly exitCode: number | null; + /** + * The `subprocess.signalCode` property indicates the signal received by + * the child process if any, else `null`. + */ + readonly signalCode: NodeJS.Signals | null; + /** + * The `subprocess.spawnargs` property represents the full list of command-line + * arguments the child process was launched with. + */ + readonly spawnargs: string[]; + /** + * The `subprocess.spawnfile` property indicates the executable file name of + * the child process that is launched. + * + * For {@link fork}, its value will be equal to `process.execPath`. + * For {@link spawn}, its value will be the name of + * the executable file. + * For {@link exec}, its value will be the name of the shell + * in which the child process is launched. + */ + readonly spawnfile: string; + /** + * The `subprocess.kill()` method sends a signal to the child process. If no + * argument is given, the process will be sent the `'SIGTERM'` signal. See [`signal(7)`](http://man7.org/linux/man-pages/man7/signal.7.html) for a list of available signals. This function + * returns `true` if [`kill(2)`](http://man7.org/linux/man-pages/man2/kill.2.html) succeeds, and `false` otherwise. + * + * ```js + * const { spawn } = require('node:child_process'); + * const grep = spawn('grep', ['ssh']); + * + * grep.on('close', (code, signal) => { + * console.log( + * `child process terminated due to receipt of signal ${signal}`); + * }); + * + * // Send SIGHUP to process. + * grep.kill('SIGHUP'); + * ``` + * + * The `ChildProcess` object may emit an `'error'` event if the signal + * cannot be delivered. Sending a signal to a child process that has already exited + * is not an error but may have unforeseen consequences. Specifically, if the + * process identifier (PID) has been reassigned to another process, the signal will + * be delivered to that process instead which can have unexpected results. + * + * While the function is called `kill`, the signal delivered to the child process + * may not actually terminate the process. + * + * See [`kill(2)`](http://man7.org/linux/man-pages/man2/kill.2.html) for reference. + * + * On Windows, where POSIX signals do not exist, the `signal` argument will be + * ignored, and the process will be killed forcefully and abruptly (similar to`'SIGKILL'`). + * See `Signal Events` for more details. + * + * On Linux, child processes of child processes will not be terminated + * when attempting to kill their parent. This is likely to happen when running a + * new process in a shell or with the use of the `shell` option of `ChildProcess`: + * + * ```js + * 'use strict'; + * const { spawn } = require('node:child_process'); + * + * const subprocess = spawn( + * 'sh', + * [ + * '-c', + * `node -e "setInterval(() => { + * console.log(process.pid, 'is alive') + * }, 500);"`, + * ], { + * stdio: ['inherit', 'inherit', 'inherit'], + * }, + * ); + * + * setTimeout(() => { + * subprocess.kill(); // Does not terminate the Node.js process in the shell. + * }, 2000); + * ``` + * @since v0.1.90 + */ + kill(signal?: NodeJS.Signals | number): boolean; + /** + * Calls {@link ChildProcess.kill} with `'SIGTERM'`. + * @since v20.5.0 + */ + [Symbol.dispose](): void; + /** + * When an IPC channel has been established between the parent and child ( + * i.e. when using {@link fork}), the `subprocess.send()` method can + * be used to send messages to the child process. When the child process is a + * Node.js instance, these messages can be received via the `'message'` event. + * + * The message goes through serialization and parsing. The resulting + * message might not be the same as what is originally sent. + * + * For example, in the parent script: + * + * ```js + * const cp = require('node:child_process'); + * const n = cp.fork(`${__dirname}/sub.js`); + * + * n.on('message', (m) => { + * console.log('PARENT got message:', m); + * }); + * + * // Causes the child to print: CHILD got message: { hello: 'world' } + * n.send({ hello: 'world' }); + * ``` + * + * And then the child script, `'sub.js'` might look like this: + * + * ```js + * process.on('message', (m) => { + * console.log('CHILD got message:', m); + * }); + * + * // Causes the parent to print: PARENT got message: { foo: 'bar', baz: null } + * process.send({ foo: 'bar', baz: NaN }); + * ``` + * + * Child Node.js processes will have a `process.send()` method of their own + * that allows the child to send messages back to the parent. + * + * There is a special case when sending a `{cmd: 'NODE_foo'}` message. Messages + * containing a `NODE_` prefix in the `cmd` property are reserved for use within + * Node.js core and will not be emitted in the child's `'message'` event. Rather, such messages are emitted using the`'internalMessage'` event and are consumed internally by Node.js. + * Applications should avoid using such messages or listening for`'internalMessage'` events as it is subject to change without notice. + * + * The optional `sendHandle` argument that may be passed to `subprocess.send()` is + * for passing a TCP server or socket object to the child process. The child will + * receive the object as the second argument passed to the callback function + * registered on the `'message'` event. Any data that is received + * and buffered in the socket will not be sent to the child. + * + * The optional `callback` is a function that is invoked after the message is + * sent but before the child may have received it. The function is called with a + * single argument: `null` on success, or an `Error` object on failure. + * + * If no `callback` function is provided and the message cannot be sent, an`'error'` event will be emitted by the `ChildProcess` object. This can + * happen, for instance, when the child process has already exited. + * + * `subprocess.send()` will return `false` if the channel has closed or when the + * backlog of unsent messages exceeds a threshold that makes it unwise to send + * more. Otherwise, the method returns `true`. The `callback` function can be + * used to implement flow control. + * + * #### Example: sending a server object + * + * The `sendHandle` argument can be used, for instance, to pass the handle of + * a TCP server object to the child process as illustrated in the example below: + * + * ```js + * const subprocess = require('node:child_process').fork('subprocess.js'); + * + * // Open up the server object and send the handle. + * const server = require('node:net').createServer(); + * server.on('connection', (socket) => { + * socket.end('handled by parent'); + * }); + * server.listen(1337, () => { + * subprocess.send('server', server); + * }); + * ``` + * + * The child would then receive the server object as: + * + * ```js + * process.on('message', (m, server) => { + * if (m === 'server') { + * server.on('connection', (socket) => { + * socket.end('handled by child'); + * }); + * } + * }); + * ``` + * + * Once the server is now shared between the parent and child, some connections + * can be handled by the parent and some by the child. + * + * While the example above uses a server created using the `node:net` module,`node:dgram` module servers use exactly the same workflow with the exceptions of + * listening on a `'message'` event instead of `'connection'` and using`server.bind()` instead of `server.listen()`. This is, however, only + * supported on Unix platforms. + * + * #### Example: sending a socket object + * + * Similarly, the `sendHandler` argument can be used to pass the handle of a + * socket to the child process. The example below spawns two children that each + * handle connections with "normal" or "special" priority: + * + * ```js + * const { fork } = require('node:child_process'); + * const normal = fork('subprocess.js', ['normal']); + * const special = fork('subprocess.js', ['special']); + * + * // Open up the server and send sockets to child. Use pauseOnConnect to prevent + * // the sockets from being read before they are sent to the child process. + * const server = require('node:net').createServer({ pauseOnConnect: true }); + * server.on('connection', (socket) => { + * + * // If this is special priority... + * if (socket.remoteAddress === '74.125.127.100') { + * special.send('socket', socket); + * return; + * } + * // This is normal priority. + * normal.send('socket', socket); + * }); + * server.listen(1337); + * ``` + * + * The `subprocess.js` would receive the socket handle as the second argument + * passed to the event callback function: + * + * ```js + * process.on('message', (m, socket) => { + * if (m === 'socket') { + * if (socket) { + * // Check that the client socket exists. + * // It is possible for the socket to be closed between the time it is + * // sent and the time it is received in the child process. + * socket.end(`Request handled with ${process.argv[2]} priority`); + * } + * } + * }); + * ``` + * + * Do not use `.maxConnections` on a socket that has been passed to a subprocess. + * The parent cannot track when the socket is destroyed. + * + * Any `'message'` handlers in the subprocess should verify that `socket` exists, + * as the connection may have been closed during the time it takes to send the + * connection to the child. + * @since v0.5.9 + * @param options The `options` argument, if present, is an object used to parameterize the sending of certain types of handles. `options` supports the following properties: + */ + send(message: Serializable, callback?: (error: Error | null) => void): boolean; + send(message: Serializable, sendHandle?: SendHandle, callback?: (error: Error | null) => void): boolean; + send( + message: Serializable, + sendHandle?: SendHandle, + options?: MessageOptions, + callback?: (error: Error | null) => void, + ): boolean; + /** + * Closes the IPC channel between parent and child, allowing the child to exit + * gracefully once there are no other connections keeping it alive. After calling + * this method the `subprocess.connected` and `process.connected` properties in + * both the parent and child (respectively) will be set to `false`, and it will be + * no longer possible to pass messages between the processes. + * + * The `'disconnect'` event will be emitted when there are no messages in the + * process of being received. This will most often be triggered immediately after + * calling `subprocess.disconnect()`. + * + * When the child process is a Node.js instance (e.g. spawned using {@link fork}), the `process.disconnect()` method can be invoked + * within the child process to close the IPC channel as well. + * @since v0.7.2 + */ + disconnect(): void; + /** + * By default, the parent will wait for the detached child to exit. To prevent the + * parent from waiting for a given `subprocess` to exit, use the`subprocess.unref()` method. Doing so will cause the parent's event loop to not + * include the child in its reference count, allowing the parent to exit + * independently of the child, unless there is an established IPC channel between + * the child and the parent. + * + * ```js + * const { spawn } = require('node:child_process'); + * + * const subprocess = spawn(process.argv[0], ['child_program.js'], { + * detached: true, + * stdio: 'ignore', + * }); + * + * subprocess.unref(); + * ``` + * @since v0.7.10 + */ + unref(): void; + /** + * Calling `subprocess.ref()` after making a call to `subprocess.unref()` will + * restore the removed reference count for the child process, forcing the parent + * to wait for the child to exit before exiting itself. + * + * ```js + * const { spawn } = require('node:child_process'); + * + * const subprocess = spawn(process.argv[0], ['child_program.js'], { + * detached: true, + * stdio: 'ignore', + * }); + * + * subprocess.unref(); + * subprocess.ref(); + * ``` + * @since v0.7.10 + */ + ref(): void; + /** + * events.EventEmitter + * 1. close + * 2. disconnect + * 3. error + * 4. exit + * 5. message + * 6. spawn + */ + addListener(event: string, listener: (...args: any[]) => void): this; + addListener(event: "close", listener: (code: number | null, signal: NodeJS.Signals | null) => void): this; + addListener(event: "disconnect", listener: () => void): this; + addListener(event: "error", listener: (err: Error) => void): this; + addListener(event: "exit", listener: (code: number | null, signal: NodeJS.Signals | null) => void): this; + addListener(event: "message", listener: (message: Serializable, sendHandle: SendHandle) => void): this; + addListener(event: "spawn", listener: () => void): this; + emit(event: string | symbol, ...args: any[]): boolean; + emit(event: "close", code: number | null, signal: NodeJS.Signals | null): boolean; + emit(event: "disconnect"): boolean; + emit(event: "error", err: Error): boolean; + emit(event: "exit", code: number | null, signal: NodeJS.Signals | null): boolean; + emit(event: "message", message: Serializable, sendHandle: SendHandle): boolean; + emit(event: "spawn", listener: () => void): boolean; + on(event: string, listener: (...args: any[]) => void): this; + on(event: "close", listener: (code: number | null, signal: NodeJS.Signals | null) => void): this; + on(event: "disconnect", listener: () => void): this; + on(event: "error", listener: (err: Error) => void): this; + on(event: "exit", listener: (code: number | null, signal: NodeJS.Signals | null) => void): this; + on(event: "message", listener: (message: Serializable, sendHandle: SendHandle) => void): this; + on(event: "spawn", listener: () => void): this; + once(event: string, listener: (...args: any[]) => void): this; + once(event: "close", listener: (code: number | null, signal: NodeJS.Signals | null) => void): this; + once(event: "disconnect", listener: () => void): this; + once(event: "error", listener: (err: Error) => void): this; + once(event: "exit", listener: (code: number | null, signal: NodeJS.Signals | null) => void): this; + once(event: "message", listener: (message: Serializable, sendHandle: SendHandle) => void): this; + once(event: "spawn", listener: () => void): this; + prependListener(event: string, listener: (...args: any[]) => void): this; + prependListener(event: "close", listener: (code: number | null, signal: NodeJS.Signals | null) => void): this; + prependListener(event: "disconnect", listener: () => void): this; + prependListener(event: "error", listener: (err: Error) => void): this; + prependListener(event: "exit", listener: (code: number | null, signal: NodeJS.Signals | null) => void): this; + prependListener(event: "message", listener: (message: Serializable, sendHandle: SendHandle) => void): this; + prependListener(event: "spawn", listener: () => void): this; + prependOnceListener(event: string, listener: (...args: any[]) => void): this; + prependOnceListener( + event: "close", + listener: (code: number | null, signal: NodeJS.Signals | null) => void, + ): this; + prependOnceListener(event: "disconnect", listener: () => void): this; + prependOnceListener(event: "error", listener: (err: Error) => void): this; + prependOnceListener( + event: "exit", + listener: (code: number | null, signal: NodeJS.Signals | null) => void, + ): this; + prependOnceListener(event: "message", listener: (message: Serializable, sendHandle: SendHandle) => void): this; + prependOnceListener(event: "spawn", listener: () => void): this; + } + // return this object when stdio option is undefined or not specified + interface ChildProcessWithoutNullStreams extends ChildProcess { + stdin: Writable; + stdout: Readable; + stderr: Readable; + readonly stdio: [ + Writable, + Readable, + Readable, + // stderr + Readable | Writable | null | undefined, + // extra, no modification + Readable | Writable | null | undefined, // extra, no modification + ]; + } + // return this object when stdio option is a tuple of 3 + interface ChildProcessByStdio + extends ChildProcess + { + stdin: I; + stdout: O; + stderr: E; + readonly stdio: [ + I, + O, + E, + Readable | Writable | null | undefined, + // extra, no modification + Readable | Writable | null | undefined, // extra, no modification + ]; + } + interface MessageOptions { + keepOpen?: boolean | undefined; + } + type IOType = "overlapped" | "pipe" | "ignore" | "inherit"; + type StdioOptions = IOType | Array; + type SerializationType = "json" | "advanced"; + interface MessagingOptions extends Abortable { + /** + * Specify the kind of serialization used for sending messages between processes. + * @default 'json' + */ + serialization?: SerializationType | undefined; + /** + * The signal value to be used when the spawned process will be killed by the abort signal. + * @default 'SIGTERM' + */ + killSignal?: NodeJS.Signals | number | undefined; + /** + * In milliseconds the maximum amount of time the process is allowed to run. + */ + timeout?: number | undefined; + } + interface ProcessEnvOptions { + uid?: number | undefined; + gid?: number | undefined; + cwd?: string | URL | undefined; + env?: NodeJS.ProcessEnv | undefined; + } + interface CommonOptions extends ProcessEnvOptions { + /** + * @default false + */ + windowsHide?: boolean | undefined; + /** + * @default 0 + */ + timeout?: number | undefined; + } + interface CommonSpawnOptions extends CommonOptions, MessagingOptions, Abortable { + argv0?: string | undefined; + /** + * Can be set to 'pipe', 'inherit', 'overlapped', or 'ignore', or an array of these strings. + * If passed as an array, the first element is used for `stdin`, the second for + * `stdout`, and the third for `stderr`. A fourth element can be used to + * specify the `stdio` behavior beyond the standard streams. See + * {@link ChildProcess.stdio} for more information. + * + * @default 'pipe' + */ + stdio?: StdioOptions | undefined; + shell?: boolean | string | undefined; + windowsVerbatimArguments?: boolean | undefined; + } + interface SpawnOptions extends CommonSpawnOptions { + detached?: boolean | undefined; + } + interface SpawnOptionsWithoutStdio extends SpawnOptions { + stdio?: StdioPipeNamed | StdioPipe[] | undefined; + } + type StdioNull = "inherit" | "ignore" | Stream; + type StdioPipeNamed = "pipe" | "overlapped"; + type StdioPipe = undefined | null | StdioPipeNamed; + interface SpawnOptionsWithStdioTuple< + Stdin extends StdioNull | StdioPipe, + Stdout extends StdioNull | StdioPipe, + Stderr extends StdioNull | StdioPipe, + > extends SpawnOptions { + stdio: [Stdin, Stdout, Stderr]; + } + /** + * The `child_process.spawn()` method spawns a new process using the given`command`, with command-line arguments in `args`. If omitted, `args` defaults + * to an empty array. + * + * **If the `shell` option is enabled, do not pass unsanitized user input to this** + * **function. Any input containing shell metacharacters may be used to trigger** + * **arbitrary command execution.** + * + * A third argument may be used to specify additional options, with these defaults: + * + * ```js + * const defaults = { + * cwd: undefined, + * env: process.env, + * }; + * ``` + * + * Use `cwd` to specify the working directory from which the process is spawned. + * If not given, the default is to inherit the current working directory. If given, + * but the path does not exist, the child process emits an `ENOENT` error + * and exits immediately. `ENOENT` is also emitted when the command + * does not exist. + * + * Use `env` to specify environment variables that will be visible to the new + * process, the default is `process.env`. + * + * `undefined` values in `env` will be ignored. + * + * Example of running `ls -lh /usr`, capturing `stdout`, `stderr`, and the + * exit code: + * + * ```js + * const { spawn } = require('node:child_process'); + * const ls = spawn('ls', ['-lh', '/usr']); + * + * ls.stdout.on('data', (data) => { + * console.log(`stdout: ${data}`); + * }); + * + * ls.stderr.on('data', (data) => { + * console.error(`stderr: ${data}`); + * }); + * + * ls.on('close', (code) => { + * console.log(`child process exited with code ${code}`); + * }); + * ``` + * + * Example: A very elaborate way to run `ps ax | grep ssh` + * + * ```js + * const { spawn } = require('node:child_process'); + * const ps = spawn('ps', ['ax']); + * const grep = spawn('grep', ['ssh']); + * + * ps.stdout.on('data', (data) => { + * grep.stdin.write(data); + * }); + * + * ps.stderr.on('data', (data) => { + * console.error(`ps stderr: ${data}`); + * }); + * + * ps.on('close', (code) => { + * if (code !== 0) { + * console.log(`ps process exited with code ${code}`); + * } + * grep.stdin.end(); + * }); + * + * grep.stdout.on('data', (data) => { + * console.log(data.toString()); + * }); + * + * grep.stderr.on('data', (data) => { + * console.error(`grep stderr: ${data}`); + * }); + * + * grep.on('close', (code) => { + * if (code !== 0) { + * console.log(`grep process exited with code ${code}`); + * } + * }); + * ``` + * + * Example of checking for failed `spawn`: + * + * ```js + * const { spawn } = require('node:child_process'); + * const subprocess = spawn('bad_command'); + * + * subprocess.on('error', (err) => { + * console.error('Failed to start subprocess.'); + * }); + * ``` + * + * Certain platforms (macOS, Linux) will use the value of `argv[0]` for the process + * title while others (Windows, SunOS) will use `command`. + * + * Node.js overwrites `argv[0]` with `process.execPath` on startup, so`process.argv[0]` in a Node.js child process will not match the `argv0`parameter passed to `spawn` from the parent. Retrieve + * it with the`process.argv0` property instead. + * + * If the `signal` option is enabled, calling `.abort()` on the corresponding`AbortController` is similar to calling `.kill()` on the child process except + * the error passed to the callback will be an `AbortError`: + * + * ```js + * const { spawn } = require('node:child_process'); + * const controller = new AbortController(); + * const { signal } = controller; + * const grep = spawn('grep', ['ssh'], { signal }); + * grep.on('error', (err) => { + * // This will be called with err being an AbortError if the controller aborts + * }); + * controller.abort(); // Stops the child process + * ``` + * @since v0.1.90 + * @param command The command to run. + * @param args List of string arguments. + */ + function spawn(command: string, options?: SpawnOptionsWithoutStdio): ChildProcessWithoutNullStreams; + function spawn( + command: string, + options: SpawnOptionsWithStdioTuple, + ): ChildProcessByStdio; + function spawn( + command: string, + options: SpawnOptionsWithStdioTuple, + ): ChildProcessByStdio; + function spawn( + command: string, + options: SpawnOptionsWithStdioTuple, + ): ChildProcessByStdio; + function spawn( + command: string, + options: SpawnOptionsWithStdioTuple, + ): ChildProcessByStdio; + function spawn( + command: string, + options: SpawnOptionsWithStdioTuple, + ): ChildProcessByStdio; + function spawn( + command: string, + options: SpawnOptionsWithStdioTuple, + ): ChildProcessByStdio; + function spawn( + command: string, + options: SpawnOptionsWithStdioTuple, + ): ChildProcessByStdio; + function spawn( + command: string, + options: SpawnOptionsWithStdioTuple, + ): ChildProcessByStdio; + function spawn(command: string, options: SpawnOptions): ChildProcess; + // overloads of spawn with 'args' + function spawn( + command: string, + args?: ReadonlyArray, + options?: SpawnOptionsWithoutStdio, + ): ChildProcessWithoutNullStreams; + function spawn( + command: string, + args: ReadonlyArray, + options: SpawnOptionsWithStdioTuple, + ): ChildProcessByStdio; + function spawn( + command: string, + args: ReadonlyArray, + options: SpawnOptionsWithStdioTuple, + ): ChildProcessByStdio; + function spawn( + command: string, + args: ReadonlyArray, + options: SpawnOptionsWithStdioTuple, + ): ChildProcessByStdio; + function spawn( + command: string, + args: ReadonlyArray, + options: SpawnOptionsWithStdioTuple, + ): ChildProcessByStdio; + function spawn( + command: string, + args: ReadonlyArray, + options: SpawnOptionsWithStdioTuple, + ): ChildProcessByStdio; + function spawn( + command: string, + args: ReadonlyArray, + options: SpawnOptionsWithStdioTuple, + ): ChildProcessByStdio; + function spawn( + command: string, + args: ReadonlyArray, + options: SpawnOptionsWithStdioTuple, + ): ChildProcessByStdio; + function spawn( + command: string, + args: ReadonlyArray, + options: SpawnOptionsWithStdioTuple, + ): ChildProcessByStdio; + function spawn(command: string, args: ReadonlyArray, options: SpawnOptions): ChildProcess; + interface ExecOptions extends CommonOptions { + shell?: string | undefined; + signal?: AbortSignal | undefined; + maxBuffer?: number | undefined; + killSignal?: NodeJS.Signals | number | undefined; + } + interface ExecOptionsWithStringEncoding extends ExecOptions { + encoding: BufferEncoding; + } + interface ExecOptionsWithBufferEncoding extends ExecOptions { + encoding: BufferEncoding | null; // specify `null`. + } + interface ExecException extends Error { + cmd?: string | undefined; + killed?: boolean | undefined; + code?: number | undefined; + signal?: NodeJS.Signals | undefined; + } + /** + * Spawns a shell then executes the `command` within that shell, buffering any + * generated output. The `command` string passed to the exec function is processed + * directly by the shell and special characters (vary based on [shell](https://en.wikipedia.org/wiki/List_of_command-line_interpreters)) + * need to be dealt with accordingly: + * + * ```js + * const { exec } = require('node:child_process'); + * + * exec('"/path/to/test file/test.sh" arg1 arg2'); + * // Double quotes are used so that the space in the path is not interpreted as + * // a delimiter of multiple arguments. + * + * exec('echo "The \\$HOME variable is $HOME"'); + * // The $HOME variable is escaped in the first instance, but not in the second. + * ``` + * + * **Never pass unsanitized user input to this function. Any input containing shell** + * **metacharacters may be used to trigger arbitrary command execution.** + * + * If a `callback` function is provided, it is called with the arguments`(error, stdout, stderr)`. On success, `error` will be `null`. On error,`error` will be an instance of `Error`. The + * `error.code` property will be + * the exit code of the process. By convention, any exit code other than `0`indicates an error. `error.signal` will be the signal that terminated the + * process. + * + * The `stdout` and `stderr` arguments passed to the callback will contain the + * stdout and stderr output of the child process. By default, Node.js will decode + * the output as UTF-8 and pass strings to the callback. The `encoding` option + * can be used to specify the character encoding used to decode the stdout and + * stderr output. If `encoding` is `'buffer'`, or an unrecognized character + * encoding, `Buffer` objects will be passed to the callback instead. + * + * ```js + * const { exec } = require('node:child_process'); + * exec('cat *.js missing_file | wc -l', (error, stdout, stderr) => { + * if (error) { + * console.error(`exec error: ${error}`); + * return; + * } + * console.log(`stdout: ${stdout}`); + * console.error(`stderr: ${stderr}`); + * }); + * ``` + * + * If `timeout` is greater than `0`, the parent will send the signal + * identified by the `killSignal` property (the default is `'SIGTERM'`) if the + * child runs longer than `timeout` milliseconds. + * + * Unlike the [`exec(3)`](http://man7.org/linux/man-pages/man3/exec.3.html) POSIX system call, `child_process.exec()` does not replace + * the existing process and uses a shell to execute the command. + * + * If this method is invoked as its `util.promisify()` ed version, it returns + * a `Promise` for an `Object` with `stdout` and `stderr` properties. The returned`ChildProcess` instance is attached to the `Promise` as a `child` property. In + * case of an error (including any error resulting in an exit code other than 0), a + * rejected promise is returned, with the same `error` object given in the + * callback, but with two additional properties `stdout` and `stderr`. + * + * ```js + * const util = require('node:util'); + * const exec = util.promisify(require('node:child_process').exec); + * + * async function lsExample() { + * const { stdout, stderr } = await exec('ls'); + * console.log('stdout:', stdout); + * console.error('stderr:', stderr); + * } + * lsExample(); + * ``` + * + * If the `signal` option is enabled, calling `.abort()` on the corresponding`AbortController` is similar to calling `.kill()` on the child process except + * the error passed to the callback will be an `AbortError`: + * + * ```js + * const { exec } = require('node:child_process'); + * const controller = new AbortController(); + * const { signal } = controller; + * const child = exec('grep ssh', { signal }, (error) => { + * console.error(error); // an AbortError + * }); + * controller.abort(); + * ``` + * @since v0.1.90 + * @param command The command to run, with space-separated arguments. + * @param callback called with the output when process terminates. + */ + function exec( + command: string, + callback?: (error: ExecException | null, stdout: string, stderr: string) => void, + ): ChildProcess; + // `options` with `"buffer"` or `null` for `encoding` means stdout/stderr are definitely `Buffer`. + function exec( + command: string, + options: { + encoding: "buffer" | null; + } & ExecOptions, + callback?: (error: ExecException | null, stdout: Buffer, stderr: Buffer) => void, + ): ChildProcess; + // `options` with well known `encoding` means stdout/stderr are definitely `string`. + function exec( + command: string, + options: { + encoding: BufferEncoding; + } & ExecOptions, + callback?: (error: ExecException | null, stdout: string, stderr: string) => void, + ): ChildProcess; + // `options` with an `encoding` whose type is `string` means stdout/stderr could either be `Buffer` or `string`. + // There is no guarantee the `encoding` is unknown as `string` is a superset of `BufferEncoding`. + function exec( + command: string, + options: { + encoding: BufferEncoding; + } & ExecOptions, + callback?: (error: ExecException | null, stdout: string | Buffer, stderr: string | Buffer) => void, + ): ChildProcess; + // `options` without an `encoding` means stdout/stderr are definitely `string`. + function exec( + command: string, + options: ExecOptions, + callback?: (error: ExecException | null, stdout: string, stderr: string) => void, + ): ChildProcess; + // fallback if nothing else matches. Worst case is always `string | Buffer`. + function exec( + command: string, + options: (ObjectEncodingOptions & ExecOptions) | undefined | null, + callback?: (error: ExecException | null, stdout: string | Buffer, stderr: string | Buffer) => void, + ): ChildProcess; + interface PromiseWithChild extends Promise { + child: ChildProcess; + } + namespace exec { + function __promisify__(command: string): PromiseWithChild<{ + stdout: string; + stderr: string; + }>; + function __promisify__( + command: string, + options: { + encoding: "buffer" | null; + } & ExecOptions, + ): PromiseWithChild<{ + stdout: Buffer; + stderr: Buffer; + }>; + function __promisify__( + command: string, + options: { + encoding: BufferEncoding; + } & ExecOptions, + ): PromiseWithChild<{ + stdout: string; + stderr: string; + }>; + function __promisify__( + command: string, + options: ExecOptions, + ): PromiseWithChild<{ + stdout: string; + stderr: string; + }>; + function __promisify__( + command: string, + options?: (ObjectEncodingOptions & ExecOptions) | null, + ): PromiseWithChild<{ + stdout: string | Buffer; + stderr: string | Buffer; + }>; + } + interface ExecFileOptions extends CommonOptions, Abortable { + maxBuffer?: number | undefined; + killSignal?: NodeJS.Signals | number | undefined; + windowsVerbatimArguments?: boolean | undefined; + shell?: boolean | string | undefined; + signal?: AbortSignal | undefined; + } + interface ExecFileOptionsWithStringEncoding extends ExecFileOptions { + encoding: BufferEncoding; + } + interface ExecFileOptionsWithBufferEncoding extends ExecFileOptions { + encoding: "buffer" | null; + } + interface ExecFileOptionsWithOtherEncoding extends ExecFileOptions { + encoding: BufferEncoding; + } + type ExecFileException = + & Omit + & Omit + & { code?: string | number | undefined | null }; + /** + * The `child_process.execFile()` function is similar to {@link exec} except that it does not spawn a shell by default. Rather, the specified + * executable `file` is spawned directly as a new process making it slightly more + * efficient than {@link exec}. + * + * The same options as {@link exec} are supported. Since a shell is + * not spawned, behaviors such as I/O redirection and file globbing are not + * supported. + * + * ```js + * const { execFile } = require('node:child_process'); + * const child = execFile('node', ['--version'], (error, stdout, stderr) => { + * if (error) { + * throw error; + * } + * console.log(stdout); + * }); + * ``` + * + * The `stdout` and `stderr` arguments passed to the callback will contain the + * stdout and stderr output of the child process. By default, Node.js will decode + * the output as UTF-8 and pass strings to the callback. The `encoding` option + * can be used to specify the character encoding used to decode the stdout and + * stderr output. If `encoding` is `'buffer'`, or an unrecognized character + * encoding, `Buffer` objects will be passed to the callback instead. + * + * If this method is invoked as its `util.promisify()` ed version, it returns + * a `Promise` for an `Object` with `stdout` and `stderr` properties. The returned`ChildProcess` instance is attached to the `Promise` as a `child` property. In + * case of an error (including any error resulting in an exit code other than 0), a + * rejected promise is returned, with the same `error` object given in the + * callback, but with two additional properties `stdout` and `stderr`. + * + * ```js + * const util = require('node:util'); + * const execFile = util.promisify(require('node:child_process').execFile); + * async function getVersion() { + * const { stdout } = await execFile('node', ['--version']); + * console.log(stdout); + * } + * getVersion(); + * ``` + * + * **If the `shell` option is enabled, do not pass unsanitized user input to this** + * **function. Any input containing shell metacharacters may be used to trigger** + * **arbitrary command execution.** + * + * If the `signal` option is enabled, calling `.abort()` on the corresponding`AbortController` is similar to calling `.kill()` on the child process except + * the error passed to the callback will be an `AbortError`: + * + * ```js + * const { execFile } = require('node:child_process'); + * const controller = new AbortController(); + * const { signal } = controller; + * const child = execFile('node', ['--version'], { signal }, (error) => { + * console.error(error); // an AbortError + * }); + * controller.abort(); + * ``` + * @since v0.1.91 + * @param file The name or path of the executable file to run. + * @param args List of string arguments. + * @param callback Called with the output when process terminates. + */ + function execFile(file: string): ChildProcess; + function execFile( + file: string, + options: (ObjectEncodingOptions & ExecFileOptions) | undefined | null, + ): ChildProcess; + function execFile(file: string, args?: ReadonlyArray | null): ChildProcess; + function execFile( + file: string, + args: ReadonlyArray | undefined | null, + options: (ObjectEncodingOptions & ExecFileOptions) | undefined | null, + ): ChildProcess; + // no `options` definitely means stdout/stderr are `string`. + function execFile( + file: string, + callback: (error: ExecFileException | null, stdout: string, stderr: string) => void, + ): ChildProcess; + function execFile( + file: string, + args: ReadonlyArray | undefined | null, + callback: (error: ExecFileException | null, stdout: string, stderr: string) => void, + ): ChildProcess; + // `options` with `"buffer"` or `null` for `encoding` means stdout/stderr are definitely `Buffer`. + function execFile( + file: string, + options: ExecFileOptionsWithBufferEncoding, + callback: (error: ExecFileException | null, stdout: Buffer, stderr: Buffer) => void, + ): ChildProcess; + function execFile( + file: string, + args: ReadonlyArray | undefined | null, + options: ExecFileOptionsWithBufferEncoding, + callback: (error: ExecFileException | null, stdout: Buffer, stderr: Buffer) => void, + ): ChildProcess; + // `options` with well known `encoding` means stdout/stderr are definitely `string`. + function execFile( + file: string, + options: ExecFileOptionsWithStringEncoding, + callback: (error: ExecFileException | null, stdout: string, stderr: string) => void, + ): ChildProcess; + function execFile( + file: string, + args: ReadonlyArray | undefined | null, + options: ExecFileOptionsWithStringEncoding, + callback: (error: ExecFileException | null, stdout: string, stderr: string) => void, + ): ChildProcess; + // `options` with an `encoding` whose type is `string` means stdout/stderr could either be `Buffer` or `string`. + // There is no guarantee the `encoding` is unknown as `string` is a superset of `BufferEncoding`. + function execFile( + file: string, + options: ExecFileOptionsWithOtherEncoding, + callback: (error: ExecFileException | null, stdout: string | Buffer, stderr: string | Buffer) => void, + ): ChildProcess; + function execFile( + file: string, + args: ReadonlyArray | undefined | null, + options: ExecFileOptionsWithOtherEncoding, + callback: (error: ExecFileException | null, stdout: string | Buffer, stderr: string | Buffer) => void, + ): ChildProcess; + // `options` without an `encoding` means stdout/stderr are definitely `string`. + function execFile( + file: string, + options: ExecFileOptions, + callback: (error: ExecFileException | null, stdout: string, stderr: string) => void, + ): ChildProcess; + function execFile( + file: string, + args: ReadonlyArray | undefined | null, + options: ExecFileOptions, + callback: (error: ExecFileException | null, stdout: string, stderr: string) => void, + ): ChildProcess; + // fallback if nothing else matches. Worst case is always `string | Buffer`. + function execFile( + file: string, + options: (ObjectEncodingOptions & ExecFileOptions) | undefined | null, + callback: + | ((error: ExecFileException | null, stdout: string | Buffer, stderr: string | Buffer) => void) + | undefined + | null, + ): ChildProcess; + function execFile( + file: string, + args: ReadonlyArray | undefined | null, + options: (ObjectEncodingOptions & ExecFileOptions) | undefined | null, + callback: + | ((error: ExecFileException | null, stdout: string | Buffer, stderr: string | Buffer) => void) + | undefined + | null, + ): ChildProcess; + namespace execFile { + function __promisify__(file: string): PromiseWithChild<{ + stdout: string; + stderr: string; + }>; + function __promisify__( + file: string, + args: ReadonlyArray | undefined | null, + ): PromiseWithChild<{ + stdout: string; + stderr: string; + }>; + function __promisify__( + file: string, + options: ExecFileOptionsWithBufferEncoding, + ): PromiseWithChild<{ + stdout: Buffer; + stderr: Buffer; + }>; + function __promisify__( + file: string, + args: ReadonlyArray | undefined | null, + options: ExecFileOptionsWithBufferEncoding, + ): PromiseWithChild<{ + stdout: Buffer; + stderr: Buffer; + }>; + function __promisify__( + file: string, + options: ExecFileOptionsWithStringEncoding, + ): PromiseWithChild<{ + stdout: string; + stderr: string; + }>; + function __promisify__( + file: string, + args: ReadonlyArray | undefined | null, + options: ExecFileOptionsWithStringEncoding, + ): PromiseWithChild<{ + stdout: string; + stderr: string; + }>; + function __promisify__( + file: string, + options: ExecFileOptionsWithOtherEncoding, + ): PromiseWithChild<{ + stdout: string | Buffer; + stderr: string | Buffer; + }>; + function __promisify__( + file: string, + args: ReadonlyArray | undefined | null, + options: ExecFileOptionsWithOtherEncoding, + ): PromiseWithChild<{ + stdout: string | Buffer; + stderr: string | Buffer; + }>; + function __promisify__( + file: string, + options: ExecFileOptions, + ): PromiseWithChild<{ + stdout: string; + stderr: string; + }>; + function __promisify__( + file: string, + args: ReadonlyArray | undefined | null, + options: ExecFileOptions, + ): PromiseWithChild<{ + stdout: string; + stderr: string; + }>; + function __promisify__( + file: string, + options: (ObjectEncodingOptions & ExecFileOptions) | undefined | null, + ): PromiseWithChild<{ + stdout: string | Buffer; + stderr: string | Buffer; + }>; + function __promisify__( + file: string, + args: ReadonlyArray | undefined | null, + options: (ObjectEncodingOptions & ExecFileOptions) | undefined | null, + ): PromiseWithChild<{ + stdout: string | Buffer; + stderr: string | Buffer; + }>; + } + interface ForkOptions extends ProcessEnvOptions, MessagingOptions, Abortable { + execPath?: string | undefined; + execArgv?: string[] | undefined; + silent?: boolean | undefined; + /** + * Can be set to 'pipe', 'inherit', 'overlapped', or 'ignore', or an array of these strings. + * If passed as an array, the first element is used for `stdin`, the second for + * `stdout`, and the third for `stderr`. A fourth element can be used to + * specify the `stdio` behavior beyond the standard streams. See + * {@link ChildProcess.stdio} for more information. + * + * @default 'pipe' + */ + stdio?: StdioOptions | undefined; + detached?: boolean | undefined; + windowsVerbatimArguments?: boolean | undefined; + } + /** + * The `child_process.fork()` method is a special case of {@link spawn} used specifically to spawn new Node.js processes. + * Like {@link spawn}, a `ChildProcess` object is returned. The + * returned `ChildProcess` will have an additional communication channel + * built-in that allows messages to be passed back and forth between the parent and + * child. See `subprocess.send()` for details. + * + * Keep in mind that spawned Node.js child processes are + * independent of the parent with exception of the IPC communication channel + * that is established between the two. Each process has its own memory, with + * their own V8 instances. Because of the additional resource allocations + * required, spawning a large number of child Node.js processes is not + * recommended. + * + * By default, `child_process.fork()` will spawn new Node.js instances using the `process.execPath` of the parent process. The `execPath` property in the`options` object allows for an alternative + * execution path to be used. + * + * Node.js processes launched with a custom `execPath` will communicate with the + * parent process using the file descriptor (fd) identified using the + * environment variable `NODE_CHANNEL_FD` on the child process. + * + * Unlike the [`fork(2)`](http://man7.org/linux/man-pages/man2/fork.2.html) POSIX system call, `child_process.fork()` does not clone the + * current process. + * + * The `shell` option available in {@link spawn} is not supported by`child_process.fork()` and will be ignored if set. + * + * If the `signal` option is enabled, calling `.abort()` on the corresponding`AbortController` is similar to calling `.kill()` on the child process except + * the error passed to the callback will be an `AbortError`: + * + * ```js + * if (process.argv[2] === 'child') { + * setTimeout(() => { + * console.log(`Hello from ${process.argv[2]}!`); + * }, 1_000); + * } else { + * const { fork } = require('node:child_process'); + * const controller = new AbortController(); + * const { signal } = controller; + * const child = fork(__filename, ['child'], { signal }); + * child.on('error', (err) => { + * // This will be called with err being an AbortError if the controller aborts + * }); + * controller.abort(); // Stops the child process + * } + * ``` + * @since v0.5.0 + * @param modulePath The module to run in the child. + * @param args List of string arguments. + */ + function fork(modulePath: string, options?: ForkOptions): ChildProcess; + function fork(modulePath: string, args?: ReadonlyArray, options?: ForkOptions): ChildProcess; + interface SpawnSyncOptions extends CommonSpawnOptions { + input?: string | NodeJS.ArrayBufferView | undefined; + maxBuffer?: number | undefined; + encoding?: BufferEncoding | "buffer" | null | undefined; + } + interface SpawnSyncOptionsWithStringEncoding extends SpawnSyncOptions { + encoding: BufferEncoding; + } + interface SpawnSyncOptionsWithBufferEncoding extends SpawnSyncOptions { + encoding?: "buffer" | null | undefined; + } + interface SpawnSyncReturns { + pid: number; + output: Array; + stdout: T; + stderr: T; + status: number | null; + signal: NodeJS.Signals | null; + error?: Error | undefined; + } + /** + * The `child_process.spawnSync()` method is generally identical to {@link spawn} with the exception that the function will not return + * until the child process has fully closed. When a timeout has been encountered + * and `killSignal` is sent, the method won't return until the process has + * completely exited. If the process intercepts and handles the `SIGTERM` signal + * and doesn't exit, the parent process will wait until the child process has + * exited. + * + * **If the `shell` option is enabled, do not pass unsanitized user input to this** + * **function. Any input containing shell metacharacters may be used to trigger** + * **arbitrary command execution.** + * @since v0.11.12 + * @param command The command to run. + * @param args List of string arguments. + */ + function spawnSync(command: string): SpawnSyncReturns; + function spawnSync(command: string, options: SpawnSyncOptionsWithStringEncoding): SpawnSyncReturns; + function spawnSync(command: string, options: SpawnSyncOptionsWithBufferEncoding): SpawnSyncReturns; + function spawnSync(command: string, options?: SpawnSyncOptions): SpawnSyncReturns; + function spawnSync(command: string, args: ReadonlyArray): SpawnSyncReturns; + function spawnSync( + command: string, + args: ReadonlyArray, + options: SpawnSyncOptionsWithStringEncoding, + ): SpawnSyncReturns; + function spawnSync( + command: string, + args: ReadonlyArray, + options: SpawnSyncOptionsWithBufferEncoding, + ): SpawnSyncReturns; + function spawnSync( + command: string, + args?: ReadonlyArray, + options?: SpawnSyncOptions, + ): SpawnSyncReturns; + interface CommonExecOptions extends CommonOptions { + input?: string | NodeJS.ArrayBufferView | undefined; + /** + * Can be set to 'pipe', 'inherit, or 'ignore', or an array of these strings. + * If passed as an array, the first element is used for `stdin`, the second for + * `stdout`, and the third for `stderr`. A fourth element can be used to + * specify the `stdio` behavior beyond the standard streams. See + * {@link ChildProcess.stdio} for more information. + * + * @default 'pipe' + */ + stdio?: StdioOptions | undefined; + killSignal?: NodeJS.Signals | number | undefined; + maxBuffer?: number | undefined; + encoding?: BufferEncoding | "buffer" | null | undefined; + } + interface ExecSyncOptions extends CommonExecOptions { + shell?: string | undefined; + } + interface ExecSyncOptionsWithStringEncoding extends ExecSyncOptions { + encoding: BufferEncoding; + } + interface ExecSyncOptionsWithBufferEncoding extends ExecSyncOptions { + encoding?: "buffer" | null | undefined; + } + /** + * The `child_process.execSync()` method is generally identical to {@link exec} with the exception that the method will not return + * until the child process has fully closed. When a timeout has been encountered + * and `killSignal` is sent, the method won't return until the process has + * completely exited. If the child process intercepts and handles the `SIGTERM`signal and doesn't exit, the parent process will wait until the child process + * has exited. + * + * If the process times out or has a non-zero exit code, this method will throw. + * The `Error` object will contain the entire result from {@link spawnSync}. + * + * **Never pass unsanitized user input to this function. Any input containing shell** + * **metacharacters may be used to trigger arbitrary command execution.** + * @since v0.11.12 + * @param command The command to run. + * @return The stdout from the command. + */ + function execSync(command: string): Buffer; + function execSync(command: string, options: ExecSyncOptionsWithStringEncoding): string; + function execSync(command: string, options: ExecSyncOptionsWithBufferEncoding): Buffer; + function execSync(command: string, options?: ExecSyncOptions): string | Buffer; + interface ExecFileSyncOptions extends CommonExecOptions { + shell?: boolean | string | undefined; + } + interface ExecFileSyncOptionsWithStringEncoding extends ExecFileSyncOptions { + encoding: BufferEncoding; + } + interface ExecFileSyncOptionsWithBufferEncoding extends ExecFileSyncOptions { + encoding?: "buffer" | null; // specify `null`. + } + /** + * The `child_process.execFileSync()` method is generally identical to {@link execFile} with the exception that the method will not + * return until the child process has fully closed. When a timeout has been + * encountered and `killSignal` is sent, the method won't return until the process + * has completely exited. + * + * If the child process intercepts and handles the `SIGTERM` signal and + * does not exit, the parent process will still wait until the child process has + * exited. + * + * If the process times out or has a non-zero exit code, this method will throw an `Error` that will include the full result of the underlying {@link spawnSync}. + * + * **If the `shell` option is enabled, do not pass unsanitized user input to this** + * **function. Any input containing shell metacharacters may be used to trigger** + * **arbitrary command execution.** + * @since v0.11.12 + * @param file The name or path of the executable file to run. + * @param args List of string arguments. + * @return The stdout from the command. + */ + function execFileSync(file: string): Buffer; + function execFileSync(file: string, options: ExecFileSyncOptionsWithStringEncoding): string; + function execFileSync(file: string, options: ExecFileSyncOptionsWithBufferEncoding): Buffer; + function execFileSync(file: string, options?: ExecFileSyncOptions): string | Buffer; + function execFileSync(file: string, args: ReadonlyArray): Buffer; + function execFileSync( + file: string, + args: ReadonlyArray, + options: ExecFileSyncOptionsWithStringEncoding, + ): string; + function execFileSync( + file: string, + args: ReadonlyArray, + options: ExecFileSyncOptionsWithBufferEncoding, + ): Buffer; + function execFileSync(file: string, args?: ReadonlyArray, options?: ExecFileSyncOptions): string | Buffer; +} +declare module "node:child_process" { + export * from "child_process"; +} diff --git a/Url-Shortner/node_modules/@types/node/cluster.d.ts b/Url-Shortner/node_modules/@types/node/cluster.d.ts new file mode 100644 index 0000000..39cd56a --- /dev/null +++ b/Url-Shortner/node_modules/@types/node/cluster.d.ts @@ -0,0 +1,432 @@ +/** + * Clusters of Node.js processes can be used to run multiple instances of Node.js + * that can distribute workloads among their application threads. When process + * isolation is not needed, use the `worker_threads` module instead, which + * allows running multiple application threads within a single Node.js instance. + * + * The cluster module allows easy creation of child processes that all share + * server ports. + * + * ```js + * import cluster from 'node:cluster'; + * import http from 'node:http'; + * import { availableParallelism } from 'node:os'; + * import process from 'node:process'; + * + * const numCPUs = availableParallelism(); + * + * if (cluster.isPrimary) { + * console.log(`Primary ${process.pid} is running`); + * + * // Fork workers. + * for (let i = 0; i < numCPUs; i++) { + * cluster.fork(); + * } + * + * cluster.on('exit', (worker, code, signal) => { + * console.log(`worker ${worker.process.pid} died`); + * }); + * } else { + * // Workers can share any TCP connection + * // In this case it is an HTTP server + * http.createServer((req, res) => { + * res.writeHead(200); + * res.end('hello world\n'); + * }).listen(8000); + * + * console.log(`Worker ${process.pid} started`); + * } + * ``` + * + * Running Node.js will now share port 8000 between the workers: + * + * ```console + * $ node server.js + * Primary 3596 is running + * Worker 4324 started + * Worker 4520 started + * Worker 6056 started + * Worker 5644 started + * ``` + * + * On Windows, it is not yet possible to set up a named pipe server in a worker. + * @see [source](https://github.com/nodejs/node/blob/v20.2.0/lib/cluster.js) + */ +declare module "cluster" { + import * as child from "node:child_process"; + import EventEmitter = require("node:events"); + import * as net from "node:net"; + type SerializationType = "json" | "advanced"; + export interface ClusterSettings { + execArgv?: string[] | undefined; // default: process.execArgv + exec?: string | undefined; + args?: string[] | undefined; + silent?: boolean | undefined; + stdio?: any[] | undefined; + uid?: number | undefined; + gid?: number | undefined; + inspectPort?: number | (() => number) | undefined; + serialization?: SerializationType | undefined; + cwd?: string | undefined; + windowsHide?: boolean | undefined; + } + export interface Address { + address: string; + port: number; + addressType: number | "udp4" | "udp6"; // 4, 6, -1, "udp4", "udp6" + } + /** + * A `Worker` object contains all public information and method about a worker. + * In the primary it can be obtained using `cluster.workers`. In a worker + * it can be obtained using `cluster.worker`. + * @since v0.7.0 + */ + export class Worker extends EventEmitter { + /** + * Each new worker is given its own unique id, this id is stored in the`id`. + * + * While a worker is alive, this is the key that indexes it in`cluster.workers`. + * @since v0.8.0 + */ + id: number; + /** + * All workers are created using `child_process.fork()`, the returned object + * from this function is stored as `.process`. In a worker, the global `process`is stored. + * + * See: `Child Process module`. + * + * Workers will call `process.exit(0)` if the `'disconnect'` event occurs + * on `process` and `.exitedAfterDisconnect` is not `true`. This protects against + * accidental disconnection. + * @since v0.7.0 + */ + process: child.ChildProcess; + /** + * Send a message to a worker or primary, optionally with a handle. + * + * In the primary, this sends a message to a specific worker. It is identical to `ChildProcess.send()`. + * + * In a worker, this sends a message to the primary. It is identical to`process.send()`. + * + * This example will echo back all messages from the primary: + * + * ```js + * if (cluster.isPrimary) { + * const worker = cluster.fork(); + * worker.send('hi there'); + * + * } else if (cluster.isWorker) { + * process.on('message', (msg) => { + * process.send(msg); + * }); + * } + * ``` + * @since v0.7.0 + * @param options The `options` argument, if present, is an object used to parameterize the sending of certain types of handles. `options` supports the following properties: + */ + send(message: child.Serializable, callback?: (error: Error | null) => void): boolean; + send( + message: child.Serializable, + sendHandle: child.SendHandle, + callback?: (error: Error | null) => void, + ): boolean; + send( + message: child.Serializable, + sendHandle: child.SendHandle, + options?: child.MessageOptions, + callback?: (error: Error | null) => void, + ): boolean; + /** + * This function will kill the worker. In the primary worker, it does this by + * disconnecting the `worker.process`, and once disconnected, killing with`signal`. In the worker, it does it by killing the process with `signal`. + * + * The `kill()` function kills the worker process without waiting for a graceful + * disconnect, it has the same behavior as `worker.process.kill()`. + * + * This method is aliased as `worker.destroy()` for backwards compatibility. + * + * In a worker, `process.kill()` exists, but it is not this function; + * it is `kill()`. + * @since v0.9.12 + * @param [signal='SIGTERM'] Name of the kill signal to send to the worker process. + */ + kill(signal?: string): void; + destroy(signal?: string): void; + /** + * In a worker, this function will close all servers, wait for the `'close'` event + * on those servers, and then disconnect the IPC channel. + * + * In the primary, an internal message is sent to the worker causing it to call`.disconnect()` on itself. + * + * Causes `.exitedAfterDisconnect` to be set. + * + * After a server is closed, it will no longer accept new connections, + * but connections may be accepted by any other listening worker. Existing + * connections will be allowed to close as usual. When no more connections exist, + * see `server.close()`, the IPC channel to the worker will close allowing it + * to die gracefully. + * + * The above applies _only_ to server connections, client connections are not + * automatically closed by workers, and disconnect does not wait for them to close + * before exiting. + * + * In a worker, `process.disconnect` exists, but it is not this function; + * it is `disconnect()`. + * + * Because long living server connections may block workers from disconnecting, it + * may be useful to send a message, so application specific actions may be taken to + * close them. It also may be useful to implement a timeout, killing a worker if + * the `'disconnect'` event has not been emitted after some time. + * + * ```js + * if (cluster.isPrimary) { + * const worker = cluster.fork(); + * let timeout; + * + * worker.on('listening', (address) => { + * worker.send('shutdown'); + * worker.disconnect(); + * timeout = setTimeout(() => { + * worker.kill(); + * }, 2000); + * }); + * + * worker.on('disconnect', () => { + * clearTimeout(timeout); + * }); + * + * } else if (cluster.isWorker) { + * const net = require('node:net'); + * const server = net.createServer((socket) => { + * // Connections never end + * }); + * + * server.listen(8000); + * + * process.on('message', (msg) => { + * if (msg === 'shutdown') { + * // Initiate graceful close of any connections to server + * } + * }); + * } + * ``` + * @since v0.7.7 + * @return A reference to `worker`. + */ + disconnect(): void; + /** + * This function returns `true` if the worker is connected to its primary via its + * IPC channel, `false` otherwise. A worker is connected to its primary after it + * has been created. It is disconnected after the `'disconnect'` event is emitted. + * @since v0.11.14 + */ + isConnected(): boolean; + /** + * This function returns `true` if the worker's process has terminated (either + * because of exiting or being signaled). Otherwise, it returns `false`. + * + * ```js + * import cluster from 'node:cluster'; + * import http from 'node:http'; + * import { availableParallelism } from 'node:os'; + * import process from 'node:process'; + * + * const numCPUs = availableParallelism(); + * + * if (cluster.isPrimary) { + * console.log(`Primary ${process.pid} is running`); + * + * // Fork workers. + * for (let i = 0; i < numCPUs; i++) { + * cluster.fork(); + * } + * + * cluster.on('fork', (worker) => { + * console.log('worker is dead:', worker.isDead()); + * }); + * + * cluster.on('exit', (worker, code, signal) => { + * console.log('worker is dead:', worker.isDead()); + * }); + * } else { + * // Workers can share any TCP connection. In this case, it is an HTTP server. + * http.createServer((req, res) => { + * res.writeHead(200); + * res.end(`Current process\n ${process.pid}`); + * process.kill(process.pid); + * }).listen(8000); + * } + * ``` + * @since v0.11.14 + */ + isDead(): boolean; + /** + * This property is `true` if the worker exited due to `.disconnect()`. + * If the worker exited any other way, it is `false`. If the + * worker has not exited, it is `undefined`. + * + * The boolean `worker.exitedAfterDisconnect` allows distinguishing between + * voluntary and accidental exit, the primary may choose not to respawn a worker + * based on this value. + * + * ```js + * cluster.on('exit', (worker, code, signal) => { + * if (worker.exitedAfterDisconnect === true) { + * console.log('Oh, it was just voluntary – no need to worry'); + * } + * }); + * + * // kill worker + * worker.kill(); + * ``` + * @since v6.0.0 + */ + exitedAfterDisconnect: boolean; + /** + * events.EventEmitter + * 1. disconnect + * 2. error + * 3. exit + * 4. listening + * 5. message + * 6. online + */ + addListener(event: string, listener: (...args: any[]) => void): this; + addListener(event: "disconnect", listener: () => void): this; + addListener(event: "error", listener: (error: Error) => void): this; + addListener(event: "exit", listener: (code: number, signal: string) => void): this; + addListener(event: "listening", listener: (address: Address) => void): this; + addListener(event: "message", listener: (message: any, handle: net.Socket | net.Server) => void): this; // the handle is a net.Socket or net.Server object, or undefined. + addListener(event: "online", listener: () => void): this; + emit(event: string | symbol, ...args: any[]): boolean; + emit(event: "disconnect"): boolean; + emit(event: "error", error: Error): boolean; + emit(event: "exit", code: number, signal: string): boolean; + emit(event: "listening", address: Address): boolean; + emit(event: "message", message: any, handle: net.Socket | net.Server): boolean; + emit(event: "online"): boolean; + on(event: string, listener: (...args: any[]) => void): this; + on(event: "disconnect", listener: () => void): this; + on(event: "error", listener: (error: Error) => void): this; + on(event: "exit", listener: (code: number, signal: string) => void): this; + on(event: "listening", listener: (address: Address) => void): this; + on(event: "message", listener: (message: any, handle: net.Socket | net.Server) => void): this; // the handle is a net.Socket or net.Server object, or undefined. + on(event: "online", listener: () => void): this; + once(event: string, listener: (...args: any[]) => void): this; + once(event: "disconnect", listener: () => void): this; + once(event: "error", listener: (error: Error) => void): this; + once(event: "exit", listener: (code: number, signal: string) => void): this; + once(event: "listening", listener: (address: Address) => void): this; + once(event: "message", listener: (message: any, handle: net.Socket | net.Server) => void): this; // the handle is a net.Socket or net.Server object, or undefined. + once(event: "online", listener: () => void): this; + prependListener(event: string, listener: (...args: any[]) => void): this; + prependListener(event: "disconnect", listener: () => void): this; + prependListener(event: "error", listener: (error: Error) => void): this; + prependListener(event: "exit", listener: (code: number, signal: string) => void): this; + prependListener(event: "listening", listener: (address: Address) => void): this; + prependListener(event: "message", listener: (message: any, handle: net.Socket | net.Server) => void): this; // the handle is a net.Socket or net.Server object, or undefined. + prependListener(event: "online", listener: () => void): this; + prependOnceListener(event: string, listener: (...args: any[]) => void): this; + prependOnceListener(event: "disconnect", listener: () => void): this; + prependOnceListener(event: "error", listener: (error: Error) => void): this; + prependOnceListener(event: "exit", listener: (code: number, signal: string) => void): this; + prependOnceListener(event: "listening", listener: (address: Address) => void): this; + prependOnceListener(event: "message", listener: (message: any, handle: net.Socket | net.Server) => void): this; // the handle is a net.Socket or net.Server object, or undefined. + prependOnceListener(event: "online", listener: () => void): this; + } + export interface Cluster extends EventEmitter { + disconnect(callback?: () => void): void; + fork(env?: any): Worker; + /** @deprecated since v16.0.0 - use isPrimary. */ + readonly isMaster: boolean; + readonly isPrimary: boolean; + readonly isWorker: boolean; + schedulingPolicy: number; + readonly settings: ClusterSettings; + /** @deprecated since v16.0.0 - use setupPrimary. */ + setupMaster(settings?: ClusterSettings): void; + /** + * `setupPrimary` is used to change the default 'fork' behavior. Once called, the settings will be present in cluster.settings. + */ + setupPrimary(settings?: ClusterSettings): void; + readonly worker?: Worker | undefined; + readonly workers?: NodeJS.Dict | undefined; + readonly SCHED_NONE: number; + readonly SCHED_RR: number; + /** + * events.EventEmitter + * 1. disconnect + * 2. exit + * 3. fork + * 4. listening + * 5. message + * 6. online + * 7. setup + */ + addListener(event: string, listener: (...args: any[]) => void): this; + addListener(event: "disconnect", listener: (worker: Worker) => void): this; + addListener(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): this; + addListener(event: "fork", listener: (worker: Worker) => void): this; + addListener(event: "listening", listener: (worker: Worker, address: Address) => void): this; + addListener( + event: "message", + listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void, + ): this; // the handle is a net.Socket or net.Server object, or undefined. + addListener(event: "online", listener: (worker: Worker) => void): this; + addListener(event: "setup", listener: (settings: ClusterSettings) => void): this; + emit(event: string | symbol, ...args: any[]): boolean; + emit(event: "disconnect", worker: Worker): boolean; + emit(event: "exit", worker: Worker, code: number, signal: string): boolean; + emit(event: "fork", worker: Worker): boolean; + emit(event: "listening", worker: Worker, address: Address): boolean; + emit(event: "message", worker: Worker, message: any, handle: net.Socket | net.Server): boolean; + emit(event: "online", worker: Worker): boolean; + emit(event: "setup", settings: ClusterSettings): boolean; + on(event: string, listener: (...args: any[]) => void): this; + on(event: "disconnect", listener: (worker: Worker) => void): this; + on(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): this; + on(event: "fork", listener: (worker: Worker) => void): this; + on(event: "listening", listener: (worker: Worker, address: Address) => void): this; + on(event: "message", listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void): this; // the handle is a net.Socket or net.Server object, or undefined. + on(event: "online", listener: (worker: Worker) => void): this; + on(event: "setup", listener: (settings: ClusterSettings) => void): this; + once(event: string, listener: (...args: any[]) => void): this; + once(event: "disconnect", listener: (worker: Worker) => void): this; + once(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): this; + once(event: "fork", listener: (worker: Worker) => void): this; + once(event: "listening", listener: (worker: Worker, address: Address) => void): this; + once(event: "message", listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void): this; // the handle is a net.Socket or net.Server object, or undefined. + once(event: "online", listener: (worker: Worker) => void): this; + once(event: "setup", listener: (settings: ClusterSettings) => void): this; + prependListener(event: string, listener: (...args: any[]) => void): this; + prependListener(event: "disconnect", listener: (worker: Worker) => void): this; + prependListener(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): this; + prependListener(event: "fork", listener: (worker: Worker) => void): this; + prependListener(event: "listening", listener: (worker: Worker, address: Address) => void): this; + // the handle is a net.Socket or net.Server object, or undefined. + prependListener( + event: "message", + listener: (worker: Worker, message: any, handle?: net.Socket | net.Server) => void, + ): this; + prependListener(event: "online", listener: (worker: Worker) => void): this; + prependListener(event: "setup", listener: (settings: ClusterSettings) => void): this; + prependOnceListener(event: string, listener: (...args: any[]) => void): this; + prependOnceListener(event: "disconnect", listener: (worker: Worker) => void): this; + prependOnceListener(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): this; + prependOnceListener(event: "fork", listener: (worker: Worker) => void): this; + prependOnceListener(event: "listening", listener: (worker: Worker, address: Address) => void): this; + // the handle is a net.Socket or net.Server object, or undefined. + prependOnceListener( + event: "message", + listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void, + ): this; + prependOnceListener(event: "online", listener: (worker: Worker) => void): this; + prependOnceListener(event: "setup", listener: (settings: ClusterSettings) => void): this; + } + const cluster: Cluster; + export default cluster; +} +declare module "node:cluster" { + export * from "cluster"; + export { default as default } from "cluster"; +} diff --git a/Url-Shortner/node_modules/@types/node/console.d.ts b/Url-Shortner/node_modules/@types/node/console.d.ts new file mode 100644 index 0000000..a7edcaf --- /dev/null +++ b/Url-Shortner/node_modules/@types/node/console.d.ts @@ -0,0 +1,412 @@ +/** + * The `node:console` module provides a simple debugging console that is similar to + * the JavaScript console mechanism provided by web browsers. + * + * The module exports two specific components: + * + * * A `Console` class with methods such as `console.log()`, `console.error()`, and`console.warn()` that can be used to write to any Node.js stream. + * * A global `console` instance configured to write to `process.stdout` and `process.stderr`. The global `console` can be used without calling`require('node:console')`. + * + * _**Warning**_: The global console object's methods are neither consistently + * synchronous like the browser APIs they resemble, nor are they consistently + * asynchronous like all other Node.js streams. See the `note on process I/O` for + * more information. + * + * Example using the global `console`: + * + * ```js + * console.log('hello world'); + * // Prints: hello world, to stdout + * console.log('hello %s', 'world'); + * // Prints: hello world, to stdout + * console.error(new Error('Whoops, something bad happened')); + * // Prints error message and stack trace to stderr: + * // Error: Whoops, something bad happened + * // at [eval]:5:15 + * // at Script.runInThisContext (node:vm:132:18) + * // at Object.runInThisContext (node:vm:309:38) + * // at node:internal/process/execution:77:19 + * // at [eval]-wrapper:6:22 + * // at evalScript (node:internal/process/execution:76:60) + * // at node:internal/main/eval_string:23:3 + * + * const name = 'Will Robinson'; + * console.warn(`Danger ${name}! Danger!`); + * // Prints: Danger Will Robinson! Danger!, to stderr + * ``` + * + * Example using the `Console` class: + * + * ```js + * const out = getStreamSomehow(); + * const err = getStreamSomehow(); + * const myConsole = new console.Console(out, err); + * + * myConsole.log('hello world'); + * // Prints: hello world, to out + * myConsole.log('hello %s', 'world'); + * // Prints: hello world, to out + * myConsole.error(new Error('Whoops, something bad happened')); + * // Prints: [Error: Whoops, something bad happened], to err + * + * const name = 'Will Robinson'; + * myConsole.warn(`Danger ${name}! Danger!`); + * // Prints: Danger Will Robinson! Danger!, to err + * ``` + * @see [source](https://github.com/nodejs/node/blob/v20.2.0/lib/console.js) + */ +declare module "console" { + import console = require("node:console"); + export = console; +} +declare module "node:console" { + import { InspectOptions } from "node:util"; + global { + // This needs to be global to avoid TS2403 in case lib.dom.d.ts is present in the same build + interface Console { + Console: console.ConsoleConstructor; + /** + * `console.assert()` writes a message if `value` is [falsy](https://developer.mozilla.org/en-US/docs/Glossary/Falsy) or omitted. It only + * writes a message and does not otherwise affect execution. The output always + * starts with `"Assertion failed"`. If provided, `message` is formatted using `util.format()`. + * + * If `value` is [truthy](https://developer.mozilla.org/en-US/docs/Glossary/Truthy), nothing happens. + * + * ```js + * console.assert(true, 'does nothing'); + * + * console.assert(false, 'Whoops %s work', 'didn\'t'); + * // Assertion failed: Whoops didn't work + * + * console.assert(); + * // Assertion failed + * ``` + * @since v0.1.101 + * @param value The value tested for being truthy. + * @param message All arguments besides `value` are used as error message. + */ + assert(value: any, message?: string, ...optionalParams: any[]): void; + /** + * When `stdout` is a TTY, calling `console.clear()` will attempt to clear the + * TTY. When `stdout` is not a TTY, this method does nothing. + * + * The specific operation of `console.clear()` can vary across operating systems + * and terminal types. For most Linux operating systems, `console.clear()`operates similarly to the `clear` shell command. On Windows, `console.clear()`will clear only the output in the + * current terminal viewport for the Node.js + * binary. + * @since v8.3.0 + */ + clear(): void; + /** + * Maintains an internal counter specific to `label` and outputs to `stdout` the + * number of times `console.count()` has been called with the given `label`. + * + * ```js + * > console.count() + * default: 1 + * undefined + * > console.count('default') + * default: 2 + * undefined + * > console.count('abc') + * abc: 1 + * undefined + * > console.count('xyz') + * xyz: 1 + * undefined + * > console.count('abc') + * abc: 2 + * undefined + * > console.count() + * default: 3 + * undefined + * > + * ``` + * @since v8.3.0 + * @param label The display label for the counter. + */ + count(label?: string): void; + /** + * Resets the internal counter specific to `label`. + * + * ```js + * > console.count('abc'); + * abc: 1 + * undefined + * > console.countReset('abc'); + * undefined + * > console.count('abc'); + * abc: 1 + * undefined + * > + * ``` + * @since v8.3.0 + * @param label The display label for the counter. + */ + countReset(label?: string): void; + /** + * The `console.debug()` function is an alias for {@link log}. + * @since v8.0.0 + */ + debug(message?: any, ...optionalParams: any[]): void; + /** + * Uses `util.inspect()` on `obj` and prints the resulting string to `stdout`. + * This function bypasses any custom `inspect()` function defined on `obj`. + * @since v0.1.101 + */ + dir(obj: any, options?: InspectOptions): void; + /** + * This method calls `console.log()` passing it the arguments received. + * This method does not produce any XML formatting. + * @since v8.0.0 + */ + dirxml(...data: any[]): void; + /** + * Prints to `stderr` with newline. Multiple arguments can be passed, with the + * first used as the primary message and all additional used as substitution + * values similar to [`printf(3)`](http://man7.org/linux/man-pages/man3/printf.3.html) (the arguments are all passed to `util.format()`). + * + * ```js + * const code = 5; + * console.error('error #%d', code); + * // Prints: error #5, to stderr + * console.error('error', code); + * // Prints: error 5, to stderr + * ``` + * + * If formatting elements (e.g. `%d`) are not found in the first string then `util.inspect()` is called on each argument and the resulting string + * values are concatenated. See `util.format()` for more information. + * @since v0.1.100 + */ + error(message?: any, ...optionalParams: any[]): void; + /** + * Increases indentation of subsequent lines by spaces for `groupIndentation`length. + * + * If one or more `label`s are provided, those are printed first without the + * additional indentation. + * @since v8.5.0 + */ + group(...label: any[]): void; + /** + * An alias for {@link group}. + * @since v8.5.0 + */ + groupCollapsed(...label: any[]): void; + /** + * Decreases indentation of subsequent lines by spaces for `groupIndentation`length. + * @since v8.5.0 + */ + groupEnd(): void; + /** + * The `console.info()` function is an alias for {@link log}. + * @since v0.1.100 + */ + info(message?: any, ...optionalParams: any[]): void; + /** + * Prints to `stdout` with newline. Multiple arguments can be passed, with the + * first used as the primary message and all additional used as substitution + * values similar to [`printf(3)`](http://man7.org/linux/man-pages/man3/printf.3.html) (the arguments are all passed to `util.format()`). + * + * ```js + * const count = 5; + * console.log('count: %d', count); + * // Prints: count: 5, to stdout + * console.log('count:', count); + * // Prints: count: 5, to stdout + * ``` + * + * See `util.format()` for more information. + * @since v0.1.100 + */ + log(message?: any, ...optionalParams: any[]): void; + /** + * Try to construct a table with the columns of the properties of `tabularData`(or use `properties`) and rows of `tabularData` and log it. Falls back to just + * logging the argument if it can’t be parsed as tabular. + * + * ```js + * // These can't be parsed as tabular data + * console.table(Symbol()); + * // Symbol() + * + * console.table(undefined); + * // undefined + * + * console.table([{ a: 1, b: 'Y' }, { a: 'Z', b: 2 }]); + * // ┌─────────┬─────┬─────┐ + * // │ (index) │ a │ b │ + * // ├─────────┼─────┼─────┤ + * // │ 0 │ 1 │ 'Y' │ + * // │ 1 │ 'Z' │ 2 │ + * // └─────────┴─────┴─────┘ + * + * console.table([{ a: 1, b: 'Y' }, { a: 'Z', b: 2 }], ['a']); + * // ┌─────────┬─────┐ + * // │ (index) │ a │ + * // ├─────────┼─────┤ + * // │ 0 │ 1 │ + * // │ 1 │ 'Z' │ + * // └─────────┴─────┘ + * ``` + * @since v10.0.0 + * @param properties Alternate properties for constructing the table. + */ + table(tabularData: any, properties?: ReadonlyArray): void; + /** + * Starts a timer that can be used to compute the duration of an operation. Timers + * are identified by a unique `label`. Use the same `label` when calling {@link timeEnd} to stop the timer and output the elapsed time in + * suitable time units to `stdout`. For example, if the elapsed + * time is 3869ms, `console.timeEnd()` displays "3.869s". + * @since v0.1.104 + */ + time(label?: string): void; + /** + * Stops a timer that was previously started by calling {@link time} and + * prints the result to `stdout`: + * + * ```js + * console.time('100-elements'); + * for (let i = 0; i < 100; i++) {} + * console.timeEnd('100-elements'); + * // prints 100-elements: 225.438ms + * ``` + * @since v0.1.104 + */ + timeEnd(label?: string): void; + /** + * For a timer that was previously started by calling {@link time}, prints + * the elapsed time and other `data` arguments to `stdout`: + * + * ```js + * console.time('process'); + * const value = expensiveProcess1(); // Returns 42 + * console.timeLog('process', value); + * // Prints "process: 365.227ms 42". + * doExpensiveProcess2(value); + * console.timeEnd('process'); + * ``` + * @since v10.7.0 + */ + timeLog(label?: string, ...data: any[]): void; + /** + * Prints to `stderr` the string `'Trace: '`, followed by the `util.format()` formatted message and stack trace to the current position in the code. + * + * ```js + * console.trace('Show me'); + * // Prints: (stack trace will vary based on where trace is called) + * // Trace: Show me + * // at repl:2:9 + * // at REPLServer.defaultEval (repl.js:248:27) + * // at bound (domain.js:287:14) + * // at REPLServer.runBound [as eval] (domain.js:300:12) + * // at REPLServer. (repl.js:412:12) + * // at emitOne (events.js:82:20) + * // at REPLServer.emit (events.js:169:7) + * // at REPLServer.Interface._onLine (readline.js:210:10) + * // at REPLServer.Interface._line (readline.js:549:8) + * // at REPLServer.Interface._ttyWrite (readline.js:826:14) + * ``` + * @since v0.1.104 + */ + trace(message?: any, ...optionalParams: any[]): void; + /** + * The `console.warn()` function is an alias for {@link error}. + * @since v0.1.100 + */ + warn(message?: any, ...optionalParams: any[]): void; + // --- Inspector mode only --- + /** + * This method does not display anything unless used in the inspector. + * Starts a JavaScript CPU profile with an optional label. + */ + profile(label?: string): void; + /** + * This method does not display anything unless used in the inspector. + * Stops the current JavaScript CPU profiling session if one has been started and prints the report to the Profiles panel of the inspector. + */ + profileEnd(label?: string): void; + /** + * This method does not display anything unless used in the inspector. + * Adds an event with the label `label` to the Timeline panel of the inspector. + */ + timeStamp(label?: string): void; + } + /** + * The `console` module provides a simple debugging console that is similar to the + * JavaScript console mechanism provided by web browsers. + * + * The module exports two specific components: + * + * * A `Console` class with methods such as `console.log()`, `console.error()` and`console.warn()` that can be used to write to any Node.js stream. + * * A global `console` instance configured to write to `process.stdout` and `process.stderr`. The global `console` can be used without calling`require('console')`. + * + * _**Warning**_: The global console object's methods are neither consistently + * synchronous like the browser APIs they resemble, nor are they consistently + * asynchronous like all other Node.js streams. See the `note on process I/O` for + * more information. + * + * Example using the global `console`: + * + * ```js + * console.log('hello world'); + * // Prints: hello world, to stdout + * console.log('hello %s', 'world'); + * // Prints: hello world, to stdout + * console.error(new Error('Whoops, something bad happened')); + * // Prints error message and stack trace to stderr: + * // Error: Whoops, something bad happened + * // at [eval]:5:15 + * // at Script.runInThisContext (node:vm:132:18) + * // at Object.runInThisContext (node:vm:309:38) + * // at node:internal/process/execution:77:19 + * // at [eval]-wrapper:6:22 + * // at evalScript (node:internal/process/execution:76:60) + * // at node:internal/main/eval_string:23:3 + * + * const name = 'Will Robinson'; + * console.warn(`Danger ${name}! Danger!`); + * // Prints: Danger Will Robinson! Danger!, to stderr + * ``` + * + * Example using the `Console` class: + * + * ```js + * const out = getStreamSomehow(); + * const err = getStreamSomehow(); + * const myConsole = new console.Console(out, err); + * + * myConsole.log('hello world'); + * // Prints: hello world, to out + * myConsole.log('hello %s', 'world'); + * // Prints: hello world, to out + * myConsole.error(new Error('Whoops, something bad happened')); + * // Prints: [Error: Whoops, something bad happened], to err + * + * const name = 'Will Robinson'; + * myConsole.warn(`Danger ${name}! Danger!`); + * // Prints: Danger Will Robinson! Danger!, to err + * ``` + * @see [source](https://github.com/nodejs/node/blob/v16.4.2/lib/console.js) + */ + namespace console { + interface ConsoleConstructorOptions { + stdout: NodeJS.WritableStream; + stderr?: NodeJS.WritableStream | undefined; + ignoreErrors?: boolean | undefined; + colorMode?: boolean | "auto" | undefined; + inspectOptions?: InspectOptions | undefined; + /** + * Set group indentation + * @default 2 + */ + groupIndentation?: number | undefined; + } + interface ConsoleConstructor { + prototype: Console; + new(stdout: NodeJS.WritableStream, stderr?: NodeJS.WritableStream, ignoreErrors?: boolean): Console; + new(options: ConsoleConstructorOptions): Console; + } + } + var console: Console; + } + export = globalThis.console; +} diff --git a/Url-Shortner/node_modules/@types/node/constants.d.ts b/Url-Shortner/node_modules/@types/node/constants.d.ts new file mode 100644 index 0000000..c3ac2b8 --- /dev/null +++ b/Url-Shortner/node_modules/@types/node/constants.d.ts @@ -0,0 +1,19 @@ +/** @deprecated since v6.3.0 - use constants property exposed by the relevant module instead. */ +declare module "constants" { + import { constants as osConstants, SignalConstants } from "node:os"; + import { constants as cryptoConstants } from "node:crypto"; + import { constants as fsConstants } from "node:fs"; + + const exp: + & typeof osConstants.errno + & typeof osConstants.priority + & SignalConstants + & typeof cryptoConstants + & typeof fsConstants; + export = exp; +} + +declare module "node:constants" { + import constants = require("constants"); + export = constants; +} diff --git a/Url-Shortner/node_modules/@types/node/crypto.d.ts b/Url-Shortner/node_modules/@types/node/crypto.d.ts new file mode 100644 index 0000000..3f005a2 --- /dev/null +++ b/Url-Shortner/node_modules/@types/node/crypto.d.ts @@ -0,0 +1,4456 @@ +/** + * The `node:crypto` module provides cryptographic functionality that includes a + * set of wrappers for OpenSSL's hash, HMAC, cipher, decipher, sign, and verify + * functions. + * + * ```js + * const { createHmac } = await import('node:crypto'); + * + * const secret = 'abcdefg'; + * const hash = createHmac('sha256', secret) + * .update('I love cupcakes') + * .digest('hex'); + * console.log(hash); + * // Prints: + * // c0fa1bc00531bd78ef38c628449c5102aeabd49b5dc3a2a516ea6ea959d6658e + * ``` + * @see [source](https://github.com/nodejs/node/blob/v20.2.0/lib/crypto.js) + */ +declare module "crypto" { + import * as stream from "node:stream"; + import { PeerCertificate } from "node:tls"; + /** + * SPKAC is a Certificate Signing Request mechanism originally implemented by + * Netscape and was specified formally as part of HTML5's `keygen` element. + * + * `` is deprecated since [HTML 5.2](https://www.w3.org/TR/html52/changes.html#features-removed) and new projects + * should not use this element anymore. + * + * The `node:crypto` module provides the `Certificate` class for working with SPKAC + * data. The most common usage is handling output generated by the HTML5`` element. Node.js uses [OpenSSL's SPKAC + * implementation](https://www.openssl.org/docs/man3.0/man1/openssl-spkac.html) internally. + * @since v0.11.8 + */ + class Certificate { + /** + * ```js + * const { Certificate } = await import('node:crypto'); + * const spkac = getSpkacSomehow(); + * const challenge = Certificate.exportChallenge(spkac); + * console.log(challenge.toString('utf8')); + * // Prints: the challenge as a UTF8 string + * ``` + * @since v9.0.0 + * @param encoding The `encoding` of the `spkac` string. + * @return The challenge component of the `spkac` data structure, which includes a public key and a challenge. + */ + static exportChallenge(spkac: BinaryLike): Buffer; + /** + * ```js + * const { Certificate } = await import('node:crypto'); + * const spkac = getSpkacSomehow(); + * const publicKey = Certificate.exportPublicKey(spkac); + * console.log(publicKey); + * // Prints: the public key as + * ``` + * @since v9.0.0 + * @param encoding The `encoding` of the `spkac` string. + * @return The public key component of the `spkac` data structure, which includes a public key and a challenge. + */ + static exportPublicKey(spkac: BinaryLike, encoding?: string): Buffer; + /** + * ```js + * import { Buffer } from 'node:buffer'; + * const { Certificate } = await import('node:crypto'); + * + * const spkac = getSpkacSomehow(); + * console.log(Certificate.verifySpkac(Buffer.from(spkac))); + * // Prints: true or false + * ``` + * @since v9.0.0 + * @param encoding The `encoding` of the `spkac` string. + * @return `true` if the given `spkac` data structure is valid, `false` otherwise. + */ + static verifySpkac(spkac: NodeJS.ArrayBufferView): boolean; + /** + * @deprecated + * @param spkac + * @returns The challenge component of the `spkac` data structure, + * which includes a public key and a challenge. + */ + exportChallenge(spkac: BinaryLike): Buffer; + /** + * @deprecated + * @param spkac + * @param encoding The encoding of the spkac string. + * @returns The public key component of the `spkac` data structure, + * which includes a public key and a challenge. + */ + exportPublicKey(spkac: BinaryLike, encoding?: string): Buffer; + /** + * @deprecated + * @param spkac + * @returns `true` if the given `spkac` data structure is valid, + * `false` otherwise. + */ + verifySpkac(spkac: NodeJS.ArrayBufferView): boolean; + } + namespace constants { + // https://nodejs.org/dist/latest-v20.x/docs/api/crypto.html#crypto-constants + const OPENSSL_VERSION_NUMBER: number; + /** Applies multiple bug workarounds within OpenSSL. See https://www.openssl.org/docs/man1.0.2/ssl/SSL_CTX_set_options.html for detail. */ + const SSL_OP_ALL: number; + /** Allows legacy insecure renegotiation between OpenSSL and unpatched clients or servers. See https://www.openssl.org/docs/man1.0.2/ssl/SSL_CTX_set_options.html. */ + const SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION: number; + /** Attempts to use the server's preferences instead of the client's when selecting a cipher. See https://www.openssl.org/docs/man1.0.2/ssl/SSL_CTX_set_options.html. */ + const SSL_OP_CIPHER_SERVER_PREFERENCE: number; + /** Instructs OpenSSL to use Cisco's "speshul" version of DTLS_BAD_VER. */ + const SSL_OP_CISCO_ANYCONNECT: number; + /** Instructs OpenSSL to turn on cookie exchange. */ + const SSL_OP_COOKIE_EXCHANGE: number; + /** Instructs OpenSSL to add server-hello extension from an early version of the cryptopro draft. */ + const SSL_OP_CRYPTOPRO_TLSEXT_BUG: number; + /** Instructs OpenSSL to disable a SSL 3.0/TLS 1.0 vulnerability workaround added in OpenSSL 0.9.6d. */ + const SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS: number; + /** Allows initial connection to servers that do not support RI. */ + const SSL_OP_LEGACY_SERVER_CONNECT: number; + /** Instructs OpenSSL to disable support for SSL/TLS compression. */ + const SSL_OP_NO_COMPRESSION: number; + const SSL_OP_NO_QUERY_MTU: number; + /** Instructs OpenSSL to always start a new session when performing renegotiation. */ + const SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION: number; + const SSL_OP_NO_SSLv2: number; + const SSL_OP_NO_SSLv3: number; + const SSL_OP_NO_TICKET: number; + const SSL_OP_NO_TLSv1: number; + const SSL_OP_NO_TLSv1_1: number; + const SSL_OP_NO_TLSv1_2: number; + /** Instructs OpenSSL to disable version rollback attack detection. */ + const SSL_OP_TLS_ROLLBACK_BUG: number; + const ENGINE_METHOD_RSA: number; + const ENGINE_METHOD_DSA: number; + const ENGINE_METHOD_DH: number; + const ENGINE_METHOD_RAND: number; + const ENGINE_METHOD_EC: number; + const ENGINE_METHOD_CIPHERS: number; + const ENGINE_METHOD_DIGESTS: number; + const ENGINE_METHOD_PKEY_METHS: number; + const ENGINE_METHOD_PKEY_ASN1_METHS: number; + const ENGINE_METHOD_ALL: number; + const ENGINE_METHOD_NONE: number; + const DH_CHECK_P_NOT_SAFE_PRIME: number; + const DH_CHECK_P_NOT_PRIME: number; + const DH_UNABLE_TO_CHECK_GENERATOR: number; + const DH_NOT_SUITABLE_GENERATOR: number; + const RSA_PKCS1_PADDING: number; + const RSA_SSLV23_PADDING: number; + const RSA_NO_PADDING: number; + const RSA_PKCS1_OAEP_PADDING: number; + const RSA_X931_PADDING: number; + const RSA_PKCS1_PSS_PADDING: number; + /** Sets the salt length for RSA_PKCS1_PSS_PADDING to the digest size when signing or verifying. */ + const RSA_PSS_SALTLEN_DIGEST: number; + /** Sets the salt length for RSA_PKCS1_PSS_PADDING to the maximum permissible value when signing data. */ + const RSA_PSS_SALTLEN_MAX_SIGN: number; + /** Causes the salt length for RSA_PKCS1_PSS_PADDING to be determined automatically when verifying a signature. */ + const RSA_PSS_SALTLEN_AUTO: number; + const POINT_CONVERSION_COMPRESSED: number; + const POINT_CONVERSION_UNCOMPRESSED: number; + const POINT_CONVERSION_HYBRID: number; + /** Specifies the built-in default cipher list used by Node.js (colon-separated values). */ + const defaultCoreCipherList: string; + /** Specifies the active default cipher list used by the current Node.js process (colon-separated values). */ + const defaultCipherList: string; + } + interface HashOptions extends stream.TransformOptions { + /** + * For XOF hash functions such as `shake256`, the + * outputLength option can be used to specify the desired output length in bytes. + */ + outputLength?: number | undefined; + } + /** @deprecated since v10.0.0 */ + const fips: boolean; + /** + * Creates and returns a `Hash` object that can be used to generate hash digests + * using the given `algorithm`. Optional `options` argument controls stream + * behavior. For XOF hash functions such as `'shake256'`, the `outputLength` option + * can be used to specify the desired output length in bytes. + * + * The `algorithm` is dependent on the available algorithms supported by the + * version of OpenSSL on the platform. Examples are `'sha256'`, `'sha512'`, etc. + * On recent releases of OpenSSL, `openssl list -digest-algorithms` will + * display the available digest algorithms. + * + * Example: generating the sha256 sum of a file + * + * ```js + * import { + * createReadStream, + * } from 'node:fs'; + * import { argv } from 'node:process'; + * const { + * createHash, + * } = await import('node:crypto'); + * + * const filename = argv[2]; + * + * const hash = createHash('sha256'); + * + * const input = createReadStream(filename); + * input.on('readable', () => { + * // Only one element is going to be produced by the + * // hash stream. + * const data = input.read(); + * if (data) + * hash.update(data); + * else { + * console.log(`${hash.digest('hex')} ${filename}`); + * } + * }); + * ``` + * @since v0.1.92 + * @param options `stream.transform` options + */ + function createHash(algorithm: string, options?: HashOptions): Hash; + /** + * Creates and returns an `Hmac` object that uses the given `algorithm` and `key`. + * Optional `options` argument controls stream behavior. + * + * The `algorithm` is dependent on the available algorithms supported by the + * version of OpenSSL on the platform. Examples are `'sha256'`, `'sha512'`, etc. + * On recent releases of OpenSSL, `openssl list -digest-algorithms` will + * display the available digest algorithms. + * + * The `key` is the HMAC key used to generate the cryptographic HMAC hash. If it is + * a `KeyObject`, its type must be `secret`. If it is a string, please consider `caveats when using strings as inputs to cryptographic APIs`. If it was + * obtained from a cryptographically secure source of entropy, such as {@link randomBytes} or {@link generateKey}, its length should not + * exceed the block size of `algorithm` (e.g., 512 bits for SHA-256). + * + * Example: generating the sha256 HMAC of a file + * + * ```js + * import { + * createReadStream, + * } from 'node:fs'; + * import { argv } from 'node:process'; + * const { + * createHmac, + * } = await import('node:crypto'); + * + * const filename = argv[2]; + * + * const hmac = createHmac('sha256', 'a secret'); + * + * const input = createReadStream(filename); + * input.on('readable', () => { + * // Only one element is going to be produced by the + * // hash stream. + * const data = input.read(); + * if (data) + * hmac.update(data); + * else { + * console.log(`${hmac.digest('hex')} ${filename}`); + * } + * }); + * ``` + * @since v0.1.94 + * @param options `stream.transform` options + */ + function createHmac(algorithm: string, key: BinaryLike | KeyObject, options?: stream.TransformOptions): Hmac; + // https://nodejs.org/api/buffer.html#buffer_buffers_and_character_encodings + type BinaryToTextEncoding = "base64" | "base64url" | "hex" | "binary"; + type CharacterEncoding = "utf8" | "utf-8" | "utf16le" | "latin1"; + type LegacyCharacterEncoding = "ascii" | "binary" | "ucs2" | "ucs-2"; + type Encoding = BinaryToTextEncoding | CharacterEncoding | LegacyCharacterEncoding; + type ECDHKeyFormat = "compressed" | "uncompressed" | "hybrid"; + /** + * The `Hash` class is a utility for creating hash digests of data. It can be + * used in one of two ways: + * + * * As a `stream` that is both readable and writable, where data is written + * to produce a computed hash digest on the readable side, or + * * Using the `hash.update()` and `hash.digest()` methods to produce the + * computed hash. + * + * The {@link createHash} method is used to create `Hash` instances. `Hash`objects are not to be created directly using the `new` keyword. + * + * Example: Using `Hash` objects as streams: + * + * ```js + * const { + * createHash, + * } = await import('node:crypto'); + * + * const hash = createHash('sha256'); + * + * hash.on('readable', () => { + * // Only one element is going to be produced by the + * // hash stream. + * const data = hash.read(); + * if (data) { + * console.log(data.toString('hex')); + * // Prints: + * // 6a2da20943931e9834fc12cfe5bb47bbd9ae43489a30726962b576f4e3993e50 + * } + * }); + * + * hash.write('some data to hash'); + * hash.end(); + * ``` + * + * Example: Using `Hash` and piped streams: + * + * ```js + * import { createReadStream } from 'node:fs'; + * import { stdout } from 'node:process'; + * const { createHash } = await import('node:crypto'); + * + * const hash = createHash('sha256'); + * + * const input = createReadStream('test.js'); + * input.pipe(hash).setEncoding('hex').pipe(stdout); + * ``` + * + * Example: Using the `hash.update()` and `hash.digest()` methods: + * + * ```js + * const { + * createHash, + * } = await import('node:crypto'); + * + * const hash = createHash('sha256'); + * + * hash.update('some data to hash'); + * console.log(hash.digest('hex')); + * // Prints: + * // 6a2da20943931e9834fc12cfe5bb47bbd9ae43489a30726962b576f4e3993e50 + * ``` + * @since v0.1.92 + */ + class Hash extends stream.Transform { + private constructor(); + /** + * Creates a new `Hash` object that contains a deep copy of the internal state + * of the current `Hash` object. + * + * The optional `options` argument controls stream behavior. For XOF hash + * functions such as `'shake256'`, the `outputLength` option can be used to + * specify the desired output length in bytes. + * + * An error is thrown when an attempt is made to copy the `Hash` object after + * its `hash.digest()` method has been called. + * + * ```js + * // Calculate a rolling hash. + * const { + * createHash, + * } = await import('node:crypto'); + * + * const hash = createHash('sha256'); + * + * hash.update('one'); + * console.log(hash.copy().digest('hex')); + * + * hash.update('two'); + * console.log(hash.copy().digest('hex')); + * + * hash.update('three'); + * console.log(hash.copy().digest('hex')); + * + * // Etc. + * ``` + * @since v13.1.0 + * @param options `stream.transform` options + */ + copy(options?: stream.TransformOptions): Hash; + /** + * Updates the hash content with the given `data`, the encoding of which + * is given in `inputEncoding`. + * If `encoding` is not provided, and the `data` is a string, an + * encoding of `'utf8'` is enforced. If `data` is a `Buffer`, `TypedArray`, or`DataView`, then `inputEncoding` is ignored. + * + * This can be called many times with new data as it is streamed. + * @since v0.1.92 + * @param inputEncoding The `encoding` of the `data` string. + */ + update(data: BinaryLike): Hash; + update(data: string, inputEncoding: Encoding): Hash; + /** + * Calculates the digest of all of the data passed to be hashed (using the `hash.update()` method). + * If `encoding` is provided a string will be returned; otherwise + * a `Buffer` is returned. + * + * The `Hash` object can not be used again after `hash.digest()` method has been + * called. Multiple calls will cause an error to be thrown. + * @since v0.1.92 + * @param encoding The `encoding` of the return value. + */ + digest(): Buffer; + digest(encoding: BinaryToTextEncoding): string; + } + /** + * The `Hmac` class is a utility for creating cryptographic HMAC digests. It can + * be used in one of two ways: + * + * * As a `stream` that is both readable and writable, where data is written + * to produce a computed HMAC digest on the readable side, or + * * Using the `hmac.update()` and `hmac.digest()` methods to produce the + * computed HMAC digest. + * + * The {@link createHmac} method is used to create `Hmac` instances. `Hmac`objects are not to be created directly using the `new` keyword. + * + * Example: Using `Hmac` objects as streams: + * + * ```js + * const { + * createHmac, + * } = await import('node:crypto'); + * + * const hmac = createHmac('sha256', 'a secret'); + * + * hmac.on('readable', () => { + * // Only one element is going to be produced by the + * // hash stream. + * const data = hmac.read(); + * if (data) { + * console.log(data.toString('hex')); + * // Prints: + * // 7fd04df92f636fd450bc841c9418e5825c17f33ad9c87c518115a45971f7f77e + * } + * }); + * + * hmac.write('some data to hash'); + * hmac.end(); + * ``` + * + * Example: Using `Hmac` and piped streams: + * + * ```js + * import { createReadStream } from 'node:fs'; + * import { stdout } from 'node:process'; + * const { + * createHmac, + * } = await import('node:crypto'); + * + * const hmac = createHmac('sha256', 'a secret'); + * + * const input = createReadStream('test.js'); + * input.pipe(hmac).pipe(stdout); + * ``` + * + * Example: Using the `hmac.update()` and `hmac.digest()` methods: + * + * ```js + * const { + * createHmac, + * } = await import('node:crypto'); + * + * const hmac = createHmac('sha256', 'a secret'); + * + * hmac.update('some data to hash'); + * console.log(hmac.digest('hex')); + * // Prints: + * // 7fd04df92f636fd450bc841c9418e5825c17f33ad9c87c518115a45971f7f77e + * ``` + * @since v0.1.94 + */ + class Hmac extends stream.Transform { + private constructor(); + /** + * Updates the `Hmac` content with the given `data`, the encoding of which + * is given in `inputEncoding`. + * If `encoding` is not provided, and the `data` is a string, an + * encoding of `'utf8'` is enforced. If `data` is a `Buffer`, `TypedArray`, or`DataView`, then `inputEncoding` is ignored. + * + * This can be called many times with new data as it is streamed. + * @since v0.1.94 + * @param inputEncoding The `encoding` of the `data` string. + */ + update(data: BinaryLike): Hmac; + update(data: string, inputEncoding: Encoding): Hmac; + /** + * Calculates the HMAC digest of all of the data passed using `hmac.update()`. + * If `encoding` is + * provided a string is returned; otherwise a `Buffer` is returned; + * + * The `Hmac` object can not be used again after `hmac.digest()` has been + * called. Multiple calls to `hmac.digest()` will result in an error being thrown. + * @since v0.1.94 + * @param encoding The `encoding` of the return value. + */ + digest(): Buffer; + digest(encoding: BinaryToTextEncoding): string; + } + type KeyObjectType = "secret" | "public" | "private"; + interface KeyExportOptions { + type: "pkcs1" | "spki" | "pkcs8" | "sec1"; + format: T; + cipher?: string | undefined; + passphrase?: string | Buffer | undefined; + } + interface JwkKeyExportOptions { + format: "jwk"; + } + interface JsonWebKey { + crv?: string | undefined; + d?: string | undefined; + dp?: string | undefined; + dq?: string | undefined; + e?: string | undefined; + k?: string | undefined; + kty?: string | undefined; + n?: string | undefined; + p?: string | undefined; + q?: string | undefined; + qi?: string | undefined; + x?: string | undefined; + y?: string | undefined; + [key: string]: unknown; + } + interface AsymmetricKeyDetails { + /** + * Key size in bits (RSA, DSA). + */ + modulusLength?: number | undefined; + /** + * Public exponent (RSA). + */ + publicExponent?: bigint | undefined; + /** + * Name of the message digest (RSA-PSS). + */ + hashAlgorithm?: string | undefined; + /** + * Name of the message digest used by MGF1 (RSA-PSS). + */ + mgf1HashAlgorithm?: string | undefined; + /** + * Minimal salt length in bytes (RSA-PSS). + */ + saltLength?: number | undefined; + /** + * Size of q in bits (DSA). + */ + divisorLength?: number | undefined; + /** + * Name of the curve (EC). + */ + namedCurve?: string | undefined; + } + /** + * Node.js uses a `KeyObject` class to represent a symmetric or asymmetric key, + * and each kind of key exposes different functions. The {@link createSecretKey}, {@link createPublicKey} and {@link createPrivateKey} methods are used to create `KeyObject`instances. `KeyObject` + * objects are not to be created directly using the `new`keyword. + * + * Most applications should consider using the new `KeyObject` API instead of + * passing keys as strings or `Buffer`s due to improved security features. + * + * `KeyObject` instances can be passed to other threads via `postMessage()`. + * The receiver obtains a cloned `KeyObject`, and the `KeyObject` does not need to + * be listed in the `transferList` argument. + * @since v11.6.0 + */ + class KeyObject { + private constructor(); + /** + * Example: Converting a `CryptoKey` instance to a `KeyObject`: + * + * ```js + * const { KeyObject } = await import('node:crypto'); + * const { subtle } = globalThis.crypto; + * + * const key = await subtle.generateKey({ + * name: 'HMAC', + * hash: 'SHA-256', + * length: 256, + * }, true, ['sign', 'verify']); + * + * const keyObject = KeyObject.from(key); + * console.log(keyObject.symmetricKeySize); + * // Prints: 32 (symmetric key size in bytes) + * ``` + * @since v15.0.0 + */ + static from(key: webcrypto.CryptoKey): KeyObject; + /** + * For asymmetric keys, this property represents the type of the key. Supported key + * types are: + * + * * `'rsa'` (OID 1.2.840.113549.1.1.1) + * * `'rsa-pss'` (OID 1.2.840.113549.1.1.10) + * * `'dsa'` (OID 1.2.840.10040.4.1) + * * `'ec'` (OID 1.2.840.10045.2.1) + * * `'x25519'` (OID 1.3.101.110) + * * `'x448'` (OID 1.3.101.111) + * * `'ed25519'` (OID 1.3.101.112) + * * `'ed448'` (OID 1.3.101.113) + * * `'dh'` (OID 1.2.840.113549.1.3.1) + * + * This property is `undefined` for unrecognized `KeyObject` types and symmetric + * keys. + * @since v11.6.0 + */ + asymmetricKeyType?: KeyType | undefined; + /** + * For asymmetric keys, this property represents the size of the embedded key in + * bytes. This property is `undefined` for symmetric keys. + */ + asymmetricKeySize?: number | undefined; + /** + * This property exists only on asymmetric keys. Depending on the type of the key, + * this object contains information about the key. None of the information obtained + * through this property can be used to uniquely identify a key or to compromise + * the security of the key. + * + * For RSA-PSS keys, if the key material contains a `RSASSA-PSS-params` sequence, + * the `hashAlgorithm`, `mgf1HashAlgorithm`, and `saltLength` properties will be + * set. + * + * Other key details might be exposed via this API using additional attributes. + * @since v15.7.0 + */ + asymmetricKeyDetails?: AsymmetricKeyDetails | undefined; + /** + * For symmetric keys, the following encoding options can be used: + * + * For public keys, the following encoding options can be used: + * + * For private keys, the following encoding options can be used: + * + * The result type depends on the selected encoding format, when PEM the + * result is a string, when DER it will be a buffer containing the data + * encoded as DER, when [JWK](https://tools.ietf.org/html/rfc7517) it will be an object. + * + * When [JWK](https://tools.ietf.org/html/rfc7517) encoding format was selected, all other encoding options are + * ignored. + * + * PKCS#1, SEC1, and PKCS#8 type keys can be encrypted by using a combination of + * the `cipher` and `format` options. The PKCS#8 `type` can be used with any`format` to encrypt any key algorithm (RSA, EC, or DH) by specifying a`cipher`. PKCS#1 and SEC1 can only be + * encrypted by specifying a `cipher`when the PEM `format` is used. For maximum compatibility, use PKCS#8 for + * encrypted private keys. Since PKCS#8 defines its own + * encryption mechanism, PEM-level encryption is not supported when encrypting + * a PKCS#8 key. See [RFC 5208](https://www.rfc-editor.org/rfc/rfc5208.txt) for PKCS#8 encryption and [RFC 1421](https://www.rfc-editor.org/rfc/rfc1421.txt) for + * PKCS#1 and SEC1 encryption. + * @since v11.6.0 + */ + export(options: KeyExportOptions<"pem">): string | Buffer; + export(options?: KeyExportOptions<"der">): Buffer; + export(options?: JwkKeyExportOptions): JsonWebKey; + /** + * For secret keys, this property represents the size of the key in bytes. This + * property is `undefined` for asymmetric keys. + * @since v11.6.0 + */ + symmetricKeySize?: number | undefined; + /** + * Depending on the type of this `KeyObject`, this property is either`'secret'` for secret (symmetric) keys, `'public'` for public (asymmetric) keys + * or `'private'` for private (asymmetric) keys. + * @since v11.6.0 + */ + type: KeyObjectType; + } + type CipherCCMTypes = "aes-128-ccm" | "aes-192-ccm" | "aes-256-ccm" | "chacha20-poly1305"; + type CipherGCMTypes = "aes-128-gcm" | "aes-192-gcm" | "aes-256-gcm"; + type CipherOCBTypes = "aes-128-ocb" | "aes-192-ocb" | "aes-256-ocb"; + type BinaryLike = string | NodeJS.ArrayBufferView; + type CipherKey = BinaryLike | KeyObject; + interface CipherCCMOptions extends stream.TransformOptions { + authTagLength: number; + } + interface CipherGCMOptions extends stream.TransformOptions { + authTagLength?: number | undefined; + } + interface CipherOCBOptions extends stream.TransformOptions { + authTagLength: number; + } + /** + * Creates and returns a `Cipher` object that uses the given `algorithm` and`password`. + * + * The `options` argument controls stream behavior and is optional except when a + * cipher in CCM or OCB mode (e.g. `'aes-128-ccm'`) is used. In that case, the`authTagLength` option is required and specifies the length of the + * authentication tag in bytes, see `CCM mode`. In GCM mode, the `authTagLength`option is not required but can be used to set the length of the authentication + * tag that will be returned by `getAuthTag()` and defaults to 16 bytes. + * For `chacha20-poly1305`, the `authTagLength` option defaults to 16 bytes. + * + * The `algorithm` is dependent on OpenSSL, examples are `'aes192'`, etc. On + * recent OpenSSL releases, `openssl list -cipher-algorithms` will + * display the available cipher algorithms. + * + * The `password` is used to derive the cipher key and initialization vector (IV). + * The value must be either a `'latin1'` encoded string, a `Buffer`, a`TypedArray`, or a `DataView`. + * + * **This function is semantically insecure for all** + * **supported ciphers and fatally flawed for ciphers in counter mode (such as CTR,** + * **GCM, or CCM).** + * + * The implementation of `crypto.createCipher()` derives keys using the OpenSSL + * function [`EVP_BytesToKey`](https://www.openssl.org/docs/man3.0/man3/EVP_BytesToKey.html) with the digest algorithm set to MD5, one + * iteration, and no salt. The lack of salt allows dictionary attacks as the same + * password always creates the same key. The low iteration count and + * non-cryptographically secure hash algorithm allow passwords to be tested very + * rapidly. + * + * In line with OpenSSL's recommendation to use a more modern algorithm instead of [`EVP_BytesToKey`](https://www.openssl.org/docs/man3.0/man3/EVP_BytesToKey.html) it is recommended that + * developers derive a key and IV on + * their own using {@link scrypt} and to use {@link createCipheriv} to create the `Cipher` object. Users should not use ciphers with counter mode + * (e.g. CTR, GCM, or CCM) in `crypto.createCipher()`. A warning is emitted when + * they are used in order to avoid the risk of IV reuse that causes + * vulnerabilities. For the case when IV is reused in GCM, see [Nonce-Disrespecting Adversaries](https://github.com/nonce-disrespect/nonce-disrespect) for details. + * @since v0.1.94 + * @deprecated Since v10.0.0 - Use {@link createCipheriv} instead. + * @param options `stream.transform` options + */ + function createCipher(algorithm: CipherCCMTypes, password: BinaryLike, options: CipherCCMOptions): CipherCCM; + /** @deprecated since v10.0.0 use `createCipheriv()` */ + function createCipher(algorithm: CipherGCMTypes, password: BinaryLike, options?: CipherGCMOptions): CipherGCM; + /** @deprecated since v10.0.0 use `createCipheriv()` */ + function createCipher(algorithm: string, password: BinaryLike, options?: stream.TransformOptions): Cipher; + /** + * Creates and returns a `Cipher` object, with the given `algorithm`, `key` and + * initialization vector (`iv`). + * + * The `options` argument controls stream behavior and is optional except when a + * cipher in CCM or OCB mode (e.g. `'aes-128-ccm'`) is used. In that case, the`authTagLength` option is required and specifies the length of the + * authentication tag in bytes, see `CCM mode`. In GCM mode, the `authTagLength`option is not required but can be used to set the length of the authentication + * tag that will be returned by `getAuthTag()` and defaults to 16 bytes. + * For `chacha20-poly1305`, the `authTagLength` option defaults to 16 bytes. + * + * The `algorithm` is dependent on OpenSSL, examples are `'aes192'`, etc. On + * recent OpenSSL releases, `openssl list -cipher-algorithms` will + * display the available cipher algorithms. + * + * The `key` is the raw key used by the `algorithm` and `iv` is an [initialization vector](https://en.wikipedia.org/wiki/Initialization_vector). Both arguments must be `'utf8'` encoded + * strings,`Buffers`, `TypedArray`, or `DataView`s. The `key` may optionally be + * a `KeyObject` of type `secret`. If the cipher does not need + * an initialization vector, `iv` may be `null`. + * + * When passing strings for `key` or `iv`, please consider `caveats when using strings as inputs to cryptographic APIs`. + * + * Initialization vectors should be unpredictable and unique; ideally, they will be + * cryptographically random. They do not have to be secret: IVs are typically just + * added to ciphertext messages unencrypted. It may sound contradictory that + * something has to be unpredictable and unique, but does not have to be secret; + * remember that an attacker must not be able to predict ahead of time what a + * given IV will be. + * @since v0.1.94 + * @param options `stream.transform` options + */ + function createCipheriv( + algorithm: CipherCCMTypes, + key: CipherKey, + iv: BinaryLike, + options: CipherCCMOptions, + ): CipherCCM; + function createCipheriv( + algorithm: CipherOCBTypes, + key: CipherKey, + iv: BinaryLike, + options: CipherOCBOptions, + ): CipherOCB; + function createCipheriv( + algorithm: CipherGCMTypes, + key: CipherKey, + iv: BinaryLike, + options?: CipherGCMOptions, + ): CipherGCM; + function createCipheriv( + algorithm: string, + key: CipherKey, + iv: BinaryLike | null, + options?: stream.TransformOptions, + ): Cipher; + /** + * Instances of the `Cipher` class are used to encrypt data. The class can be + * used in one of two ways: + * + * * As a `stream` that is both readable and writable, where plain unencrypted + * data is written to produce encrypted data on the readable side, or + * * Using the `cipher.update()` and `cipher.final()` methods to produce + * the encrypted data. + * + * The {@link createCipher} or {@link createCipheriv} methods are + * used to create `Cipher` instances. `Cipher` objects are not to be created + * directly using the `new` keyword. + * + * Example: Using `Cipher` objects as streams: + * + * ```js + * const { + * scrypt, + * randomFill, + * createCipheriv, + * } = await import('node:crypto'); + * + * const algorithm = 'aes-192-cbc'; + * const password = 'Password used to generate key'; + * + * // First, we'll generate the key. The key length is dependent on the algorithm. + * // In this case for aes192, it is 24 bytes (192 bits). + * scrypt(password, 'salt', 24, (err, key) => { + * if (err) throw err; + * // Then, we'll generate a random initialization vector + * randomFill(new Uint8Array(16), (err, iv) => { + * if (err) throw err; + * + * // Once we have the key and iv, we can create and use the cipher... + * const cipher = createCipheriv(algorithm, key, iv); + * + * let encrypted = ''; + * cipher.setEncoding('hex'); + * + * cipher.on('data', (chunk) => encrypted += chunk); + * cipher.on('end', () => console.log(encrypted)); + * + * cipher.write('some clear text data'); + * cipher.end(); + * }); + * }); + * ``` + * + * Example: Using `Cipher` and piped streams: + * + * ```js + * import { + * createReadStream, + * createWriteStream, + * } from 'node:fs'; + * + * import { + * pipeline, + * } from 'node:stream'; + * + * const { + * scrypt, + * randomFill, + * createCipheriv, + * } = await import('node:crypto'); + * + * const algorithm = 'aes-192-cbc'; + * const password = 'Password used to generate key'; + * + * // First, we'll generate the key. The key length is dependent on the algorithm. + * // In this case for aes192, it is 24 bytes (192 bits). + * scrypt(password, 'salt', 24, (err, key) => { + * if (err) throw err; + * // Then, we'll generate a random initialization vector + * randomFill(new Uint8Array(16), (err, iv) => { + * if (err) throw err; + * + * const cipher = createCipheriv(algorithm, key, iv); + * + * const input = createReadStream('test.js'); + * const output = createWriteStream('test.enc'); + * + * pipeline(input, cipher, output, (err) => { + * if (err) throw err; + * }); + * }); + * }); + * ``` + * + * Example: Using the `cipher.update()` and `cipher.final()` methods: + * + * ```js + * const { + * scrypt, + * randomFill, + * createCipheriv, + * } = await import('node:crypto'); + * + * const algorithm = 'aes-192-cbc'; + * const password = 'Password used to generate key'; + * + * // First, we'll generate the key. The key length is dependent on the algorithm. + * // In this case for aes192, it is 24 bytes (192 bits). + * scrypt(password, 'salt', 24, (err, key) => { + * if (err) throw err; + * // Then, we'll generate a random initialization vector + * randomFill(new Uint8Array(16), (err, iv) => { + * if (err) throw err; + * + * const cipher = createCipheriv(algorithm, key, iv); + * + * let encrypted = cipher.update('some clear text data', 'utf8', 'hex'); + * encrypted += cipher.final('hex'); + * console.log(encrypted); + * }); + * }); + * ``` + * @since v0.1.94 + */ + class Cipher extends stream.Transform { + private constructor(); + /** + * Updates the cipher with `data`. If the `inputEncoding` argument is given, + * the `data`argument is a string using the specified encoding. If the `inputEncoding`argument is not given, `data` must be a `Buffer`, `TypedArray`, or`DataView`. If `data` is a `Buffer`, + * `TypedArray`, or `DataView`, then`inputEncoding` is ignored. + * + * The `outputEncoding` specifies the output format of the enciphered + * data. If the `outputEncoding`is specified, a string using the specified encoding is returned. If no`outputEncoding` is provided, a `Buffer` is returned. + * + * The `cipher.update()` method can be called multiple times with new data until `cipher.final()` is called. Calling `cipher.update()` after `cipher.final()` will result in an error being + * thrown. + * @since v0.1.94 + * @param inputEncoding The `encoding` of the data. + * @param outputEncoding The `encoding` of the return value. + */ + update(data: BinaryLike): Buffer; + update(data: string, inputEncoding: Encoding): Buffer; + update(data: NodeJS.ArrayBufferView, inputEncoding: undefined, outputEncoding: Encoding): string; + update(data: string, inputEncoding: Encoding | undefined, outputEncoding: Encoding): string; + /** + * Once the `cipher.final()` method has been called, the `Cipher` object can no + * longer be used to encrypt data. Attempts to call `cipher.final()` more than + * once will result in an error being thrown. + * @since v0.1.94 + * @param outputEncoding The `encoding` of the return value. + * @return Any remaining enciphered contents. If `outputEncoding` is specified, a string is returned. If an `outputEncoding` is not provided, a {@link Buffer} is returned. + */ + final(): Buffer; + final(outputEncoding: BufferEncoding): string; + /** + * When using block encryption algorithms, the `Cipher` class will automatically + * add padding to the input data to the appropriate block size. To disable the + * default padding call `cipher.setAutoPadding(false)`. + * + * When `autoPadding` is `false`, the length of the entire input data must be a + * multiple of the cipher's block size or `cipher.final()` will throw an error. + * Disabling automatic padding is useful for non-standard padding, for instance + * using `0x0` instead of PKCS padding. + * + * The `cipher.setAutoPadding()` method must be called before `cipher.final()`. + * @since v0.7.1 + * @param [autoPadding=true] + * @return for method chaining. + */ + setAutoPadding(autoPadding?: boolean): this; + } + interface CipherCCM extends Cipher { + setAAD( + buffer: NodeJS.ArrayBufferView, + options: { + plaintextLength: number; + }, + ): this; + getAuthTag(): Buffer; + } + interface CipherGCM extends Cipher { + setAAD( + buffer: NodeJS.ArrayBufferView, + options?: { + plaintextLength: number; + }, + ): this; + getAuthTag(): Buffer; + } + interface CipherOCB extends Cipher { + setAAD( + buffer: NodeJS.ArrayBufferView, + options?: { + plaintextLength: number; + }, + ): this; + getAuthTag(): Buffer; + } + /** + * Creates and returns a `Decipher` object that uses the given `algorithm` and`password` (key). + * + * The `options` argument controls stream behavior and is optional except when a + * cipher in CCM or OCB mode (e.g. `'aes-128-ccm'`) is used. In that case, the`authTagLength` option is required and specifies the length of the + * authentication tag in bytes, see `CCM mode`. + * For `chacha20-poly1305`, the `authTagLength` option defaults to 16 bytes. + * + * **This function is semantically insecure for all** + * **supported ciphers and fatally flawed for ciphers in counter mode (such as CTR,** + * **GCM, or CCM).** + * + * The implementation of `crypto.createDecipher()` derives keys using the OpenSSL + * function [`EVP_BytesToKey`](https://www.openssl.org/docs/man3.0/man3/EVP_BytesToKey.html) with the digest algorithm set to MD5, one + * iteration, and no salt. The lack of salt allows dictionary attacks as the same + * password always creates the same key. The low iteration count and + * non-cryptographically secure hash algorithm allow passwords to be tested very + * rapidly. + * + * In line with OpenSSL's recommendation to use a more modern algorithm instead of [`EVP_BytesToKey`](https://www.openssl.org/docs/man3.0/man3/EVP_BytesToKey.html) it is recommended that + * developers derive a key and IV on + * their own using {@link scrypt} and to use {@link createDecipheriv} to create the `Decipher` object. + * @since v0.1.94 + * @deprecated Since v10.0.0 - Use {@link createDecipheriv} instead. + * @param options `stream.transform` options + */ + function createDecipher(algorithm: CipherCCMTypes, password: BinaryLike, options: CipherCCMOptions): DecipherCCM; + /** @deprecated since v10.0.0 use `createDecipheriv()` */ + function createDecipher(algorithm: CipherGCMTypes, password: BinaryLike, options?: CipherGCMOptions): DecipherGCM; + /** @deprecated since v10.0.0 use `createDecipheriv()` */ + function createDecipher(algorithm: string, password: BinaryLike, options?: stream.TransformOptions): Decipher; + /** + * Creates and returns a `Decipher` object that uses the given `algorithm`, `key`and initialization vector (`iv`). + * + * The `options` argument controls stream behavior and is optional except when a + * cipher in CCM or OCB mode (e.g. `'aes-128-ccm'`) is used. In that case, the`authTagLength` option is required and specifies the length of the + * authentication tag in bytes, see `CCM mode`. In GCM mode, the `authTagLength`option is not required but can be used to restrict accepted authentication tags + * to those with the specified length. + * For `chacha20-poly1305`, the `authTagLength` option defaults to 16 bytes. + * + * The `algorithm` is dependent on OpenSSL, examples are `'aes192'`, etc. On + * recent OpenSSL releases, `openssl list -cipher-algorithms` will + * display the available cipher algorithms. + * + * The `key` is the raw key used by the `algorithm` and `iv` is an [initialization vector](https://en.wikipedia.org/wiki/Initialization_vector). Both arguments must be `'utf8'` encoded + * strings,`Buffers`, `TypedArray`, or `DataView`s. The `key` may optionally be + * a `KeyObject` of type `secret`. If the cipher does not need + * an initialization vector, `iv` may be `null`. + * + * When passing strings for `key` or `iv`, please consider `caveats when using strings as inputs to cryptographic APIs`. + * + * Initialization vectors should be unpredictable and unique; ideally, they will be + * cryptographically random. They do not have to be secret: IVs are typically just + * added to ciphertext messages unencrypted. It may sound contradictory that + * something has to be unpredictable and unique, but does not have to be secret; + * remember that an attacker must not be able to predict ahead of time what a given + * IV will be. + * @since v0.1.94 + * @param options `stream.transform` options + */ + function createDecipheriv( + algorithm: CipherCCMTypes, + key: CipherKey, + iv: BinaryLike, + options: CipherCCMOptions, + ): DecipherCCM; + function createDecipheriv( + algorithm: CipherOCBTypes, + key: CipherKey, + iv: BinaryLike, + options: CipherOCBOptions, + ): DecipherOCB; + function createDecipheriv( + algorithm: CipherGCMTypes, + key: CipherKey, + iv: BinaryLike, + options?: CipherGCMOptions, + ): DecipherGCM; + function createDecipheriv( + algorithm: string, + key: CipherKey, + iv: BinaryLike | null, + options?: stream.TransformOptions, + ): Decipher; + /** + * Instances of the `Decipher` class are used to decrypt data. The class can be + * used in one of two ways: + * + * * As a `stream` that is both readable and writable, where plain encrypted + * data is written to produce unencrypted data on the readable side, or + * * Using the `decipher.update()` and `decipher.final()` methods to + * produce the unencrypted data. + * + * The {@link createDecipher} or {@link createDecipheriv} methods are + * used to create `Decipher` instances. `Decipher` objects are not to be created + * directly using the `new` keyword. + * + * Example: Using `Decipher` objects as streams: + * + * ```js + * import { Buffer } from 'node:buffer'; + * const { + * scryptSync, + * createDecipheriv, + * } = await import('node:crypto'); + * + * const algorithm = 'aes-192-cbc'; + * const password = 'Password used to generate key'; + * // Key length is dependent on the algorithm. In this case for aes192, it is + * // 24 bytes (192 bits). + * // Use the async `crypto.scrypt()` instead. + * const key = scryptSync(password, 'salt', 24); + * // The IV is usually passed along with the ciphertext. + * const iv = Buffer.alloc(16, 0); // Initialization vector. + * + * const decipher = createDecipheriv(algorithm, key, iv); + * + * let decrypted = ''; + * decipher.on('readable', () => { + * let chunk; + * while (null !== (chunk = decipher.read())) { + * decrypted += chunk.toString('utf8'); + * } + * }); + * decipher.on('end', () => { + * console.log(decrypted); + * // Prints: some clear text data + * }); + * + * // Encrypted with same algorithm, key and iv. + * const encrypted = + * 'e5f79c5915c02171eec6b212d5520d44480993d7d622a7c4c2da32f6efda0ffa'; + * decipher.write(encrypted, 'hex'); + * decipher.end(); + * ``` + * + * Example: Using `Decipher` and piped streams: + * + * ```js + * import { + * createReadStream, + * createWriteStream, + * } from 'node:fs'; + * import { Buffer } from 'node:buffer'; + * const { + * scryptSync, + * createDecipheriv, + * } = await import('node:crypto'); + * + * const algorithm = 'aes-192-cbc'; + * const password = 'Password used to generate key'; + * // Use the async `crypto.scrypt()` instead. + * const key = scryptSync(password, 'salt', 24); + * // The IV is usually passed along with the ciphertext. + * const iv = Buffer.alloc(16, 0); // Initialization vector. + * + * const decipher = createDecipheriv(algorithm, key, iv); + * + * const input = createReadStream('test.enc'); + * const output = createWriteStream('test.js'); + * + * input.pipe(decipher).pipe(output); + * ``` + * + * Example: Using the `decipher.update()` and `decipher.final()` methods: + * + * ```js + * import { Buffer } from 'node:buffer'; + * const { + * scryptSync, + * createDecipheriv, + * } = await import('node:crypto'); + * + * const algorithm = 'aes-192-cbc'; + * const password = 'Password used to generate key'; + * // Use the async `crypto.scrypt()` instead. + * const key = scryptSync(password, 'salt', 24); + * // The IV is usually passed along with the ciphertext. + * const iv = Buffer.alloc(16, 0); // Initialization vector. + * + * const decipher = createDecipheriv(algorithm, key, iv); + * + * // Encrypted using same algorithm, key and iv. + * const encrypted = + * 'e5f79c5915c02171eec6b212d5520d44480993d7d622a7c4c2da32f6efda0ffa'; + * let decrypted = decipher.update(encrypted, 'hex', 'utf8'); + * decrypted += decipher.final('utf8'); + * console.log(decrypted); + * // Prints: some clear text data + * ``` + * @since v0.1.94 + */ + class Decipher extends stream.Transform { + private constructor(); + /** + * Updates the decipher with `data`. If the `inputEncoding` argument is given, + * the `data`argument is a string using the specified encoding. If the `inputEncoding`argument is not given, `data` must be a `Buffer`. If `data` is a `Buffer` then `inputEncoding` is + * ignored. + * + * The `outputEncoding` specifies the output format of the enciphered + * data. If the `outputEncoding`is specified, a string using the specified encoding is returned. If no`outputEncoding` is provided, a `Buffer` is returned. + * + * The `decipher.update()` method can be called multiple times with new data until `decipher.final()` is called. Calling `decipher.update()` after `decipher.final()` will result in an error + * being thrown. + * @since v0.1.94 + * @param inputEncoding The `encoding` of the `data` string. + * @param outputEncoding The `encoding` of the return value. + */ + update(data: NodeJS.ArrayBufferView): Buffer; + update(data: string, inputEncoding: Encoding): Buffer; + update(data: NodeJS.ArrayBufferView, inputEncoding: undefined, outputEncoding: Encoding): string; + update(data: string, inputEncoding: Encoding | undefined, outputEncoding: Encoding): string; + /** + * Once the `decipher.final()` method has been called, the `Decipher` object can + * no longer be used to decrypt data. Attempts to call `decipher.final()` more + * than once will result in an error being thrown. + * @since v0.1.94 + * @param outputEncoding The `encoding` of the return value. + * @return Any remaining deciphered contents. If `outputEncoding` is specified, a string is returned. If an `outputEncoding` is not provided, a {@link Buffer} is returned. + */ + final(): Buffer; + final(outputEncoding: BufferEncoding): string; + /** + * When data has been encrypted without standard block padding, calling`decipher.setAutoPadding(false)` will disable automatic padding to prevent `decipher.final()` from checking for and + * removing padding. + * + * Turning auto padding off will only work if the input data's length is a + * multiple of the ciphers block size. + * + * The `decipher.setAutoPadding()` method must be called before `decipher.final()`. + * @since v0.7.1 + * @param [autoPadding=true] + * @return for method chaining. + */ + setAutoPadding(auto_padding?: boolean): this; + } + interface DecipherCCM extends Decipher { + setAuthTag(buffer: NodeJS.ArrayBufferView): this; + setAAD( + buffer: NodeJS.ArrayBufferView, + options: { + plaintextLength: number; + }, + ): this; + } + interface DecipherGCM extends Decipher { + setAuthTag(buffer: NodeJS.ArrayBufferView): this; + setAAD( + buffer: NodeJS.ArrayBufferView, + options?: { + plaintextLength: number; + }, + ): this; + } + interface DecipherOCB extends Decipher { + setAuthTag(buffer: NodeJS.ArrayBufferView): this; + setAAD( + buffer: NodeJS.ArrayBufferView, + options?: { + plaintextLength: number; + }, + ): this; + } + interface PrivateKeyInput { + key: string | Buffer; + format?: KeyFormat | undefined; + type?: "pkcs1" | "pkcs8" | "sec1" | undefined; + passphrase?: string | Buffer | undefined; + encoding?: string | undefined; + } + interface PublicKeyInput { + key: string | Buffer; + format?: KeyFormat | undefined; + type?: "pkcs1" | "spki" | undefined; + encoding?: string | undefined; + } + /** + * Asynchronously generates a new random secret key of the given `length`. The`type` will determine which validations will be performed on the `length`. + * + * ```js + * const { + * generateKey, + * } = await import('node:crypto'); + * + * generateKey('hmac', { length: 512 }, (err, key) => { + * if (err) throw err; + * console.log(key.export().toString('hex')); // 46e..........620 + * }); + * ``` + * + * The size of a generated HMAC key should not exceed the block size of the + * underlying hash function. See {@link createHmac} for more information. + * @since v15.0.0 + * @param type The intended use of the generated secret key. Currently accepted values are `'hmac'` and `'aes'`. + */ + function generateKey( + type: "hmac" | "aes", + options: { + length: number; + }, + callback: (err: Error | null, key: KeyObject) => void, + ): void; + /** + * Synchronously generates a new random secret key of the given `length`. The`type` will determine which validations will be performed on the `length`. + * + * ```js + * const { + * generateKeySync, + * } = await import('node:crypto'); + * + * const key = generateKeySync('hmac', { length: 512 }); + * console.log(key.export().toString('hex')); // e89..........41e + * ``` + * + * The size of a generated HMAC key should not exceed the block size of the + * underlying hash function. See {@link createHmac} for more information. + * @since v15.0.0 + * @param type The intended use of the generated secret key. Currently accepted values are `'hmac'` and `'aes'`. + */ + function generateKeySync( + type: "hmac" | "aes", + options: { + length: number; + }, + ): KeyObject; + interface JsonWebKeyInput { + key: JsonWebKey; + format: "jwk"; + } + /** + * Creates and returns a new key object containing a private key. If `key` is a + * string or `Buffer`, `format` is assumed to be `'pem'`; otherwise, `key`must be an object with the properties described above. + * + * If the private key is encrypted, a `passphrase` must be specified. The length + * of the passphrase is limited to 1024 bytes. + * @since v11.6.0 + */ + function createPrivateKey(key: PrivateKeyInput | string | Buffer | JsonWebKeyInput): KeyObject; + /** + * Creates and returns a new key object containing a public key. If `key` is a + * string or `Buffer`, `format` is assumed to be `'pem'`; if `key` is a `KeyObject`with type `'private'`, the public key is derived from the given private key; + * otherwise, `key` must be an object with the properties described above. + * + * If the format is `'pem'`, the `'key'` may also be an X.509 certificate. + * + * Because public keys can be derived from private keys, a private key may be + * passed instead of a public key. In that case, this function behaves as if {@link createPrivateKey} had been called, except that the type of the + * returned `KeyObject` will be `'public'` and that the private key cannot be + * extracted from the returned `KeyObject`. Similarly, if a `KeyObject` with type`'private'` is given, a new `KeyObject` with type `'public'` will be returned + * and it will be impossible to extract the private key from the returned object. + * @since v11.6.0 + */ + function createPublicKey(key: PublicKeyInput | string | Buffer | KeyObject | JsonWebKeyInput): KeyObject; + /** + * Creates and returns a new key object containing a secret key for symmetric + * encryption or `Hmac`. + * @since v11.6.0 + * @param encoding The string encoding when `key` is a string. + */ + function createSecretKey(key: NodeJS.ArrayBufferView): KeyObject; + function createSecretKey(key: string, encoding: BufferEncoding): KeyObject; + /** + * Creates and returns a `Sign` object that uses the given `algorithm`. Use {@link getHashes} to obtain the names of the available digest algorithms. + * Optional `options` argument controls the `stream.Writable` behavior. + * + * In some cases, a `Sign` instance can be created using the name of a signature + * algorithm, such as `'RSA-SHA256'`, instead of a digest algorithm. This will use + * the corresponding digest algorithm. This does not work for all signature + * algorithms, such as `'ecdsa-with-SHA256'`, so it is best to always use digest + * algorithm names. + * @since v0.1.92 + * @param options `stream.Writable` options + */ + function createSign(algorithm: string, options?: stream.WritableOptions): Sign; + type DSAEncoding = "der" | "ieee-p1363"; + interface SigningOptions { + /** + * @see crypto.constants.RSA_PKCS1_PADDING + */ + padding?: number | undefined; + saltLength?: number | undefined; + dsaEncoding?: DSAEncoding | undefined; + } + interface SignPrivateKeyInput extends PrivateKeyInput, SigningOptions {} + interface SignKeyObjectInput extends SigningOptions { + key: KeyObject; + } + interface VerifyPublicKeyInput extends PublicKeyInput, SigningOptions {} + interface VerifyKeyObjectInput extends SigningOptions { + key: KeyObject; + } + interface VerifyJsonWebKeyInput extends JsonWebKeyInput, SigningOptions {} + type KeyLike = string | Buffer | KeyObject; + /** + * The `Sign` class is a utility for generating signatures. It can be used in one + * of two ways: + * + * * As a writable `stream`, where data to be signed is written and the `sign.sign()` method is used to generate and return the signature, or + * * Using the `sign.update()` and `sign.sign()` methods to produce the + * signature. + * + * The {@link createSign} method is used to create `Sign` instances. The + * argument is the string name of the hash function to use. `Sign` objects are not + * to be created directly using the `new` keyword. + * + * Example: Using `Sign` and `Verify` objects as streams: + * + * ```js + * const { + * generateKeyPairSync, + * createSign, + * createVerify, + * } = await import('node:crypto'); + * + * const { privateKey, publicKey } = generateKeyPairSync('ec', { + * namedCurve: 'sect239k1', + * }); + * + * const sign = createSign('SHA256'); + * sign.write('some data to sign'); + * sign.end(); + * const signature = sign.sign(privateKey, 'hex'); + * + * const verify = createVerify('SHA256'); + * verify.write('some data to sign'); + * verify.end(); + * console.log(verify.verify(publicKey, signature, 'hex')); + * // Prints: true + * ``` + * + * Example: Using the `sign.update()` and `verify.update()` methods: + * + * ```js + * const { + * generateKeyPairSync, + * createSign, + * createVerify, + * } = await import('node:crypto'); + * + * const { privateKey, publicKey } = generateKeyPairSync('rsa', { + * modulusLength: 2048, + * }); + * + * const sign = createSign('SHA256'); + * sign.update('some data to sign'); + * sign.end(); + * const signature = sign.sign(privateKey); + * + * const verify = createVerify('SHA256'); + * verify.update('some data to sign'); + * verify.end(); + * console.log(verify.verify(publicKey, signature)); + * // Prints: true + * ``` + * @since v0.1.92 + */ + class Sign extends stream.Writable { + private constructor(); + /** + * Updates the `Sign` content with the given `data`, the encoding of which + * is given in `inputEncoding`. + * If `encoding` is not provided, and the `data` is a string, an + * encoding of `'utf8'` is enforced. If `data` is a `Buffer`, `TypedArray`, or`DataView`, then `inputEncoding` is ignored. + * + * This can be called many times with new data as it is streamed. + * @since v0.1.92 + * @param inputEncoding The `encoding` of the `data` string. + */ + update(data: BinaryLike): this; + update(data: string, inputEncoding: Encoding): this; + /** + * Calculates the signature on all the data passed through using either `sign.update()` or `sign.write()`. + * + * If `privateKey` is not a `KeyObject`, this function behaves as if`privateKey` had been passed to {@link createPrivateKey}. If it is an + * object, the following additional properties can be passed: + * + * If `outputEncoding` is provided a string is returned; otherwise a `Buffer` is returned. + * + * The `Sign` object can not be again used after `sign.sign()` method has been + * called. Multiple calls to `sign.sign()` will result in an error being thrown. + * @since v0.1.92 + */ + sign(privateKey: KeyLike | SignKeyObjectInput | SignPrivateKeyInput): Buffer; + sign( + privateKey: KeyLike | SignKeyObjectInput | SignPrivateKeyInput, + outputFormat: BinaryToTextEncoding, + ): string; + } + /** + * Creates and returns a `Verify` object that uses the given algorithm. + * Use {@link getHashes} to obtain an array of names of the available + * signing algorithms. Optional `options` argument controls the`stream.Writable` behavior. + * + * In some cases, a `Verify` instance can be created using the name of a signature + * algorithm, such as `'RSA-SHA256'`, instead of a digest algorithm. This will use + * the corresponding digest algorithm. This does not work for all signature + * algorithms, such as `'ecdsa-with-SHA256'`, so it is best to always use digest + * algorithm names. + * @since v0.1.92 + * @param options `stream.Writable` options + */ + function createVerify(algorithm: string, options?: stream.WritableOptions): Verify; + /** + * The `Verify` class is a utility for verifying signatures. It can be used in one + * of two ways: + * + * * As a writable `stream` where written data is used to validate against the + * supplied signature, or + * * Using the `verify.update()` and `verify.verify()` methods to verify + * the signature. + * + * The {@link createVerify} method is used to create `Verify` instances.`Verify` objects are not to be created directly using the `new` keyword. + * + * See `Sign` for examples. + * @since v0.1.92 + */ + class Verify extends stream.Writable { + private constructor(); + /** + * Updates the `Verify` content with the given `data`, the encoding of which + * is given in `inputEncoding`. + * If `inputEncoding` is not provided, and the `data` is a string, an + * encoding of `'utf8'` is enforced. If `data` is a `Buffer`, `TypedArray`, or`DataView`, then `inputEncoding` is ignored. + * + * This can be called many times with new data as it is streamed. + * @since v0.1.92 + * @param inputEncoding The `encoding` of the `data` string. + */ + update(data: BinaryLike): Verify; + update(data: string, inputEncoding: Encoding): Verify; + /** + * Verifies the provided data using the given `object` and `signature`. + * + * If `object` is not a `KeyObject`, this function behaves as if`object` had been passed to {@link createPublicKey}. If it is an + * object, the following additional properties can be passed: + * + * The `signature` argument is the previously calculated signature for the data, in + * the `signatureEncoding`. + * If a `signatureEncoding` is specified, the `signature` is expected to be a + * string; otherwise `signature` is expected to be a `Buffer`,`TypedArray`, or `DataView`. + * + * The `verify` object can not be used again after `verify.verify()` has been + * called. Multiple calls to `verify.verify()` will result in an error being + * thrown. + * + * Because public keys can be derived from private keys, a private key may + * be passed instead of a public key. + * @since v0.1.92 + */ + verify( + object: KeyLike | VerifyKeyObjectInput | VerifyPublicKeyInput | VerifyJsonWebKeyInput, + signature: NodeJS.ArrayBufferView, + ): boolean; + verify( + object: KeyLike | VerifyKeyObjectInput | VerifyPublicKeyInput | VerifyJsonWebKeyInput, + signature: string, + signature_format?: BinaryToTextEncoding, + ): boolean; + } + /** + * Creates a `DiffieHellman` key exchange object using the supplied `prime` and an + * optional specific `generator`. + * + * The `generator` argument can be a number, string, or `Buffer`. If`generator` is not specified, the value `2` is used. + * + * If `primeEncoding` is specified, `prime` is expected to be a string; otherwise + * a `Buffer`, `TypedArray`, or `DataView` is expected. + * + * If `generatorEncoding` is specified, `generator` is expected to be a string; + * otherwise a number, `Buffer`, `TypedArray`, or `DataView` is expected. + * @since v0.11.12 + * @param primeEncoding The `encoding` of the `prime` string. + * @param [generator=2] + * @param generatorEncoding The `encoding` of the `generator` string. + */ + function createDiffieHellman(primeLength: number, generator?: number): DiffieHellman; + function createDiffieHellman( + prime: ArrayBuffer | NodeJS.ArrayBufferView, + generator?: number | ArrayBuffer | NodeJS.ArrayBufferView, + ): DiffieHellman; + function createDiffieHellman( + prime: ArrayBuffer | NodeJS.ArrayBufferView, + generator: string, + generatorEncoding: BinaryToTextEncoding, + ): DiffieHellman; + function createDiffieHellman( + prime: string, + primeEncoding: BinaryToTextEncoding, + generator?: number | ArrayBuffer | NodeJS.ArrayBufferView, + ): DiffieHellman; + function createDiffieHellman( + prime: string, + primeEncoding: BinaryToTextEncoding, + generator: string, + generatorEncoding: BinaryToTextEncoding, + ): DiffieHellman; + /** + * The `DiffieHellman` class is a utility for creating Diffie-Hellman key + * exchanges. + * + * Instances of the `DiffieHellman` class can be created using the {@link createDiffieHellman} function. + * + * ```js + * import assert from 'node:assert'; + * + * const { + * createDiffieHellman, + * } = await import('node:crypto'); + * + * // Generate Alice's keys... + * const alice = createDiffieHellman(2048); + * const aliceKey = alice.generateKeys(); + * + * // Generate Bob's keys... + * const bob = createDiffieHellman(alice.getPrime(), alice.getGenerator()); + * const bobKey = bob.generateKeys(); + * + * // Exchange and generate the secret... + * const aliceSecret = alice.computeSecret(bobKey); + * const bobSecret = bob.computeSecret(aliceKey); + * + * // OK + * assert.strictEqual(aliceSecret.toString('hex'), bobSecret.toString('hex')); + * ``` + * @since v0.5.0 + */ + class DiffieHellman { + private constructor(); + /** + * Generates private and public Diffie-Hellman key values unless they have been + * generated or computed already, and returns + * the public key in the specified `encoding`. This key should be + * transferred to the other party. + * If `encoding` is provided a string is returned; otherwise a `Buffer` is returned. + * + * This function is a thin wrapper around [`DH_generate_key()`](https://www.openssl.org/docs/man3.0/man3/DH_generate_key.html). In particular, + * once a private key has been generated or set, calling this function only updates + * the public key but does not generate a new private key. + * @since v0.5.0 + * @param encoding The `encoding` of the return value. + */ + generateKeys(): Buffer; + generateKeys(encoding: BinaryToTextEncoding): string; + /** + * Computes the shared secret using `otherPublicKey` as the other + * party's public key and returns the computed shared secret. The supplied + * key is interpreted using the specified `inputEncoding`, and secret is + * encoded using specified `outputEncoding`. + * If the `inputEncoding` is not + * provided, `otherPublicKey` is expected to be a `Buffer`,`TypedArray`, or `DataView`. + * + * If `outputEncoding` is given a string is returned; otherwise, a `Buffer` is returned. + * @since v0.5.0 + * @param inputEncoding The `encoding` of an `otherPublicKey` string. + * @param outputEncoding The `encoding` of the return value. + */ + computeSecret(otherPublicKey: NodeJS.ArrayBufferView, inputEncoding?: null, outputEncoding?: null): Buffer; + computeSecret(otherPublicKey: string, inputEncoding: BinaryToTextEncoding, outputEncoding?: null): Buffer; + computeSecret( + otherPublicKey: NodeJS.ArrayBufferView, + inputEncoding: null, + outputEncoding: BinaryToTextEncoding, + ): string; + computeSecret( + otherPublicKey: string, + inputEncoding: BinaryToTextEncoding, + outputEncoding: BinaryToTextEncoding, + ): string; + /** + * Returns the Diffie-Hellman prime in the specified `encoding`. + * If `encoding` is provided a string is + * returned; otherwise a `Buffer` is returned. + * @since v0.5.0 + * @param encoding The `encoding` of the return value. + */ + getPrime(): Buffer; + getPrime(encoding: BinaryToTextEncoding): string; + /** + * Returns the Diffie-Hellman generator in the specified `encoding`. + * If `encoding` is provided a string is + * returned; otherwise a `Buffer` is returned. + * @since v0.5.0 + * @param encoding The `encoding` of the return value. + */ + getGenerator(): Buffer; + getGenerator(encoding: BinaryToTextEncoding): string; + /** + * Returns the Diffie-Hellman public key in the specified `encoding`. + * If `encoding` is provided a + * string is returned; otherwise a `Buffer` is returned. + * @since v0.5.0 + * @param encoding The `encoding` of the return value. + */ + getPublicKey(): Buffer; + getPublicKey(encoding: BinaryToTextEncoding): string; + /** + * Returns the Diffie-Hellman private key in the specified `encoding`. + * If `encoding` is provided a + * string is returned; otherwise a `Buffer` is returned. + * @since v0.5.0 + * @param encoding The `encoding` of the return value. + */ + getPrivateKey(): Buffer; + getPrivateKey(encoding: BinaryToTextEncoding): string; + /** + * Sets the Diffie-Hellman public key. If the `encoding` argument is provided,`publicKey` is expected + * to be a string. If no `encoding` is provided, `publicKey` is expected + * to be a `Buffer`, `TypedArray`, or `DataView`. + * @since v0.5.0 + * @param encoding The `encoding` of the `publicKey` string. + */ + setPublicKey(publicKey: NodeJS.ArrayBufferView): void; + setPublicKey(publicKey: string, encoding: BufferEncoding): void; + /** + * Sets the Diffie-Hellman private key. If the `encoding` argument is provided,`privateKey` is expected + * to be a string. If no `encoding` is provided, `privateKey` is expected + * to be a `Buffer`, `TypedArray`, or `DataView`. + * + * This function does not automatically compute the associated public key. Either `diffieHellman.setPublicKey()` or `diffieHellman.generateKeys()` can be + * used to manually provide the public key or to automatically derive it. + * @since v0.5.0 + * @param encoding The `encoding` of the `privateKey` string. + */ + setPrivateKey(privateKey: NodeJS.ArrayBufferView): void; + setPrivateKey(privateKey: string, encoding: BufferEncoding): void; + /** + * A bit field containing any warnings and/or errors resulting from a check + * performed during initialization of the `DiffieHellman` object. + * + * The following values are valid for this property (as defined in `node:constants` module): + * + * * `DH_CHECK_P_NOT_SAFE_PRIME` + * * `DH_CHECK_P_NOT_PRIME` + * * `DH_UNABLE_TO_CHECK_GENERATOR` + * * `DH_NOT_SUITABLE_GENERATOR` + * @since v0.11.12 + */ + verifyError: number; + } + /** + * The `DiffieHellmanGroup` class takes a well-known modp group as its argument. + * It works the same as `DiffieHellman`, except that it does not allow changing its keys after creation. + * In other words, it does not implement `setPublicKey()` or `setPrivateKey()` methods. + * + * ```js + * const { createDiffieHellmanGroup } = await import('node:crypto'); + * const dh = createDiffieHellmanGroup('modp1'); + * ``` + * The name (e.g. `'modp1'`) is taken from [RFC 2412](https://www.rfc-editor.org/rfc/rfc2412.txt) (modp1 and 2) and [RFC 3526](https://www.rfc-editor.org/rfc/rfc3526.txt): + * ```bash + * $ perl -ne 'print "$1\n" if /"(modp\d+)"/' src/node_crypto_groups.h + * modp1 # 768 bits + * modp2 # 1024 bits + * modp5 # 1536 bits + * modp14 # 2048 bits + * modp15 # etc. + * modp16 + * modp17 + * modp18 + * ``` + * @since v0.7.5 + */ + const DiffieHellmanGroup: DiffieHellmanGroupConstructor; + interface DiffieHellmanGroupConstructor { + new(name: string): DiffieHellmanGroup; + (name: string): DiffieHellmanGroup; + readonly prototype: DiffieHellmanGroup; + } + type DiffieHellmanGroup = Omit; + /** + * Creates a predefined `DiffieHellmanGroup` key exchange object. The + * supported groups are listed in the documentation for `DiffieHellmanGroup`. + * + * The returned object mimics the interface of objects created by {@link createDiffieHellman}, but will not allow changing + * the keys (with `diffieHellman.setPublicKey()`, for example). The + * advantage of using this method is that the parties do not have to + * generate nor exchange a group modulus beforehand, saving both processor + * and communication time. + * + * Example (obtaining a shared secret): + * + * ```js + * const { + * getDiffieHellman, + * } = await import('node:crypto'); + * const alice = getDiffieHellman('modp14'); + * const bob = getDiffieHellman('modp14'); + * + * alice.generateKeys(); + * bob.generateKeys(); + * + * const aliceSecret = alice.computeSecret(bob.getPublicKey(), null, 'hex'); + * const bobSecret = bob.computeSecret(alice.getPublicKey(), null, 'hex'); + * + * // aliceSecret and bobSecret should be the same + * console.log(aliceSecret === bobSecret); + * ``` + * @since v0.7.5 + */ + function getDiffieHellman(groupName: string): DiffieHellmanGroup; + /** + * An alias for {@link getDiffieHellman} + * @since v0.9.3 + */ + function createDiffieHellmanGroup(name: string): DiffieHellmanGroup; + /** + * Provides an asynchronous Password-Based Key Derivation Function 2 (PBKDF2) + * implementation. A selected HMAC digest algorithm specified by `digest` is + * applied to derive a key of the requested byte length (`keylen`) from the`password`, `salt` and `iterations`. + * + * The supplied `callback` function is called with two arguments: `err` and`derivedKey`. If an error occurs while deriving the key, `err` will be set; + * otherwise `err` will be `null`. By default, the successfully generated`derivedKey` will be passed to the callback as a `Buffer`. An error will be + * thrown if any of the input arguments specify invalid values or types. + * + * The `iterations` argument must be a number set as high as possible. The + * higher the number of iterations, the more secure the derived key will be, + * but will take a longer amount of time to complete. + * + * The `salt` should be as unique as possible. It is recommended that a salt is + * random and at least 16 bytes long. See [NIST SP 800-132](https://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-132.pdf) for details. + * + * When passing strings for `password` or `salt`, please consider `caveats when using strings as inputs to cryptographic APIs`. + * + * ```js + * const { + * pbkdf2, + * } = await import('node:crypto'); + * + * pbkdf2('secret', 'salt', 100000, 64, 'sha512', (err, derivedKey) => { + * if (err) throw err; + * console.log(derivedKey.toString('hex')); // '3745e48...08d59ae' + * }); + * ``` + * + * An array of supported digest functions can be retrieved using {@link getHashes}. + * + * This API uses libuv's threadpool, which can have surprising and + * negative performance implications for some applications; see the `UV_THREADPOOL_SIZE` documentation for more information. + * @since v0.5.5 + */ + function pbkdf2( + password: BinaryLike, + salt: BinaryLike, + iterations: number, + keylen: number, + digest: string, + callback: (err: Error | null, derivedKey: Buffer) => void, + ): void; + /** + * Provides a synchronous Password-Based Key Derivation Function 2 (PBKDF2) + * implementation. A selected HMAC digest algorithm specified by `digest` is + * applied to derive a key of the requested byte length (`keylen`) from the`password`, `salt` and `iterations`. + * + * If an error occurs an `Error` will be thrown, otherwise the derived key will be + * returned as a `Buffer`. + * + * The `iterations` argument must be a number set as high as possible. The + * higher the number of iterations, the more secure the derived key will be, + * but will take a longer amount of time to complete. + * + * The `salt` should be as unique as possible. It is recommended that a salt is + * random and at least 16 bytes long. See [NIST SP 800-132](https://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-132.pdf) for details. + * + * When passing strings for `password` or `salt`, please consider `caveats when using strings as inputs to cryptographic APIs`. + * + * ```js + * const { + * pbkdf2Sync, + * } = await import('node:crypto'); + * + * const key = pbkdf2Sync('secret', 'salt', 100000, 64, 'sha512'); + * console.log(key.toString('hex')); // '3745e48...08d59ae' + * ``` + * + * An array of supported digest functions can be retrieved using {@link getHashes}. + * @since v0.9.3 + */ + function pbkdf2Sync( + password: BinaryLike, + salt: BinaryLike, + iterations: number, + keylen: number, + digest: string, + ): Buffer; + /** + * Generates cryptographically strong pseudorandom data. The `size` argument + * is a number indicating the number of bytes to generate. + * + * If a `callback` function is provided, the bytes are generated asynchronously + * and the `callback` function is invoked with two arguments: `err` and `buf`. + * If an error occurs, `err` will be an `Error` object; otherwise it is `null`. The`buf` argument is a `Buffer` containing the generated bytes. + * + * ```js + * // Asynchronous + * const { + * randomBytes, + * } = await import('node:crypto'); + * + * randomBytes(256, (err, buf) => { + * if (err) throw err; + * console.log(`${buf.length} bytes of random data: ${buf.toString('hex')}`); + * }); + * ``` + * + * If the `callback` function is not provided, the random bytes are generated + * synchronously and returned as a `Buffer`. An error will be thrown if + * there is a problem generating the bytes. + * + * ```js + * // Synchronous + * const { + * randomBytes, + * } = await import('node:crypto'); + * + * const buf = randomBytes(256); + * console.log( + * `${buf.length} bytes of random data: ${buf.toString('hex')}`); + * ``` + * + * The `crypto.randomBytes()` method will not complete until there is + * sufficient entropy available. + * This should normally never take longer than a few milliseconds. The only time + * when generating the random bytes may conceivably block for a longer period of + * time is right after boot, when the whole system is still low on entropy. + * + * This API uses libuv's threadpool, which can have surprising and + * negative performance implications for some applications; see the `UV_THREADPOOL_SIZE` documentation for more information. + * + * The asynchronous version of `crypto.randomBytes()` is carried out in a single + * threadpool request. To minimize threadpool task length variation, partition + * large `randomBytes` requests when doing so as part of fulfilling a client + * request. + * @since v0.5.8 + * @param size The number of bytes to generate. The `size` must not be larger than `2**31 - 1`. + * @return if the `callback` function is not provided. + */ + function randomBytes(size: number): Buffer; + function randomBytes(size: number, callback: (err: Error | null, buf: Buffer) => void): void; + function pseudoRandomBytes(size: number): Buffer; + function pseudoRandomBytes(size: number, callback: (err: Error | null, buf: Buffer) => void): void; + /** + * Return a random integer `n` such that `min <= n < max`. This + * implementation avoids [modulo bias](https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle#Modulo_bias). + * + * The range (`max - min`) must be less than 248. `min` and `max` must + * be [safe integers](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isSafeInteger). + * + * If the `callback` function is not provided, the random integer is + * generated synchronously. + * + * ```js + * // Asynchronous + * const { + * randomInt, + * } = await import('node:crypto'); + * + * randomInt(3, (err, n) => { + * if (err) throw err; + * console.log(`Random number chosen from (0, 1, 2): ${n}`); + * }); + * ``` + * + * ```js + * // Synchronous + * const { + * randomInt, + * } = await import('node:crypto'); + * + * const n = randomInt(3); + * console.log(`Random number chosen from (0, 1, 2): ${n}`); + * ``` + * + * ```js + * // With `min` argument + * const { + * randomInt, + * } = await import('node:crypto'); + * + * const n = randomInt(1, 7); + * console.log(`The dice rolled: ${n}`); + * ``` + * @since v14.10.0, v12.19.0 + * @param [min=0] Start of random range (inclusive). + * @param max End of random range (exclusive). + * @param callback `function(err, n) {}`. + */ + function randomInt(max: number): number; + function randomInt(min: number, max: number): number; + function randomInt(max: number, callback: (err: Error | null, value: number) => void): void; + function randomInt(min: number, max: number, callback: (err: Error | null, value: number) => void): void; + /** + * Synchronous version of {@link randomFill}. + * + * ```js + * import { Buffer } from 'node:buffer'; + * const { randomFillSync } = await import('node:crypto'); + * + * const buf = Buffer.alloc(10); + * console.log(randomFillSync(buf).toString('hex')); + * + * randomFillSync(buf, 5); + * console.log(buf.toString('hex')); + * + * // The above is equivalent to the following: + * randomFillSync(buf, 5, 5); + * console.log(buf.toString('hex')); + * ``` + * + * Any `ArrayBuffer`, `TypedArray` or `DataView` instance may be passed as`buffer`. + * + * ```js + * import { Buffer } from 'node:buffer'; + * const { randomFillSync } = await import('node:crypto'); + * + * const a = new Uint32Array(10); + * console.log(Buffer.from(randomFillSync(a).buffer, + * a.byteOffset, a.byteLength).toString('hex')); + * + * const b = new DataView(new ArrayBuffer(10)); + * console.log(Buffer.from(randomFillSync(b).buffer, + * b.byteOffset, b.byteLength).toString('hex')); + * + * const c = new ArrayBuffer(10); + * console.log(Buffer.from(randomFillSync(c)).toString('hex')); + * ``` + * @since v7.10.0, v6.13.0 + * @param buffer Must be supplied. The size of the provided `buffer` must not be larger than `2**31 - 1`. + * @param [offset=0] + * @param [size=buffer.length - offset] + * @return The object passed as `buffer` argument. + */ + function randomFillSync(buffer: T, offset?: number, size?: number): T; + /** + * This function is similar to {@link randomBytes} but requires the first + * argument to be a `Buffer` that will be filled. It also + * requires that a callback is passed in. + * + * If the `callback` function is not provided, an error will be thrown. + * + * ```js + * import { Buffer } from 'node:buffer'; + * const { randomFill } = await import('node:crypto'); + * + * const buf = Buffer.alloc(10); + * randomFill(buf, (err, buf) => { + * if (err) throw err; + * console.log(buf.toString('hex')); + * }); + * + * randomFill(buf, 5, (err, buf) => { + * if (err) throw err; + * console.log(buf.toString('hex')); + * }); + * + * // The above is equivalent to the following: + * randomFill(buf, 5, 5, (err, buf) => { + * if (err) throw err; + * console.log(buf.toString('hex')); + * }); + * ``` + * + * Any `ArrayBuffer`, `TypedArray`, or `DataView` instance may be passed as`buffer`. + * + * While this includes instances of `Float32Array` and `Float64Array`, this + * function should not be used to generate random floating-point numbers. The + * result may contain `+Infinity`, `-Infinity`, and `NaN`, and even if the array + * contains finite numbers only, they are not drawn from a uniform random + * distribution and have no meaningful lower or upper bounds. + * + * ```js + * import { Buffer } from 'node:buffer'; + * const { randomFill } = await import('node:crypto'); + * + * const a = new Uint32Array(10); + * randomFill(a, (err, buf) => { + * if (err) throw err; + * console.log(Buffer.from(buf.buffer, buf.byteOffset, buf.byteLength) + * .toString('hex')); + * }); + * + * const b = new DataView(new ArrayBuffer(10)); + * randomFill(b, (err, buf) => { + * if (err) throw err; + * console.log(Buffer.from(buf.buffer, buf.byteOffset, buf.byteLength) + * .toString('hex')); + * }); + * + * const c = new ArrayBuffer(10); + * randomFill(c, (err, buf) => { + * if (err) throw err; + * console.log(Buffer.from(buf).toString('hex')); + * }); + * ``` + * + * This API uses libuv's threadpool, which can have surprising and + * negative performance implications for some applications; see the `UV_THREADPOOL_SIZE` documentation for more information. + * + * The asynchronous version of `crypto.randomFill()` is carried out in a single + * threadpool request. To minimize threadpool task length variation, partition + * large `randomFill` requests when doing so as part of fulfilling a client + * request. + * @since v7.10.0, v6.13.0 + * @param buffer Must be supplied. The size of the provided `buffer` must not be larger than `2**31 - 1`. + * @param [offset=0] + * @param [size=buffer.length - offset] + * @param callback `function(err, buf) {}`. + */ + function randomFill( + buffer: T, + callback: (err: Error | null, buf: T) => void, + ): void; + function randomFill( + buffer: T, + offset: number, + callback: (err: Error | null, buf: T) => void, + ): void; + function randomFill( + buffer: T, + offset: number, + size: number, + callback: (err: Error | null, buf: T) => void, + ): void; + interface ScryptOptions { + cost?: number | undefined; + blockSize?: number | undefined; + parallelization?: number | undefined; + N?: number | undefined; + r?: number | undefined; + p?: number | undefined; + maxmem?: number | undefined; + } + /** + * Provides an asynchronous [scrypt](https://en.wikipedia.org/wiki/Scrypt) implementation. Scrypt is a password-based + * key derivation function that is designed to be expensive computationally and + * memory-wise in order to make brute-force attacks unrewarding. + * + * The `salt` should be as unique as possible. It is recommended that a salt is + * random and at least 16 bytes long. See [NIST SP 800-132](https://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-132.pdf) for details. + * + * When passing strings for `password` or `salt`, please consider `caveats when using strings as inputs to cryptographic APIs`. + * + * The `callback` function is called with two arguments: `err` and `derivedKey`.`err` is an exception object when key derivation fails, otherwise `err` is`null`. `derivedKey` is passed to the + * callback as a `Buffer`. + * + * An exception is thrown when any of the input arguments specify invalid values + * or types. + * + * ```js + * const { + * scrypt, + * } = await import('node:crypto'); + * + * // Using the factory defaults. + * scrypt('password', 'salt', 64, (err, derivedKey) => { + * if (err) throw err; + * console.log(derivedKey.toString('hex')); // '3745e48...08d59ae' + * }); + * // Using a custom N parameter. Must be a power of two. + * scrypt('password', 'salt', 64, { N: 1024 }, (err, derivedKey) => { + * if (err) throw err; + * console.log(derivedKey.toString('hex')); // '3745e48...aa39b34' + * }); + * ``` + * @since v10.5.0 + */ + function scrypt( + password: BinaryLike, + salt: BinaryLike, + keylen: number, + callback: (err: Error | null, derivedKey: Buffer) => void, + ): void; + function scrypt( + password: BinaryLike, + salt: BinaryLike, + keylen: number, + options: ScryptOptions, + callback: (err: Error | null, derivedKey: Buffer) => void, + ): void; + /** + * Provides a synchronous [scrypt](https://en.wikipedia.org/wiki/Scrypt) implementation. Scrypt is a password-based + * key derivation function that is designed to be expensive computationally and + * memory-wise in order to make brute-force attacks unrewarding. + * + * The `salt` should be as unique as possible. It is recommended that a salt is + * random and at least 16 bytes long. See [NIST SP 800-132](https://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-132.pdf) for details. + * + * When passing strings for `password` or `salt`, please consider `caveats when using strings as inputs to cryptographic APIs`. + * + * An exception is thrown when key derivation fails, otherwise the derived key is + * returned as a `Buffer`. + * + * An exception is thrown when any of the input arguments specify invalid values + * or types. + * + * ```js + * const { + * scryptSync, + * } = await import('node:crypto'); + * // Using the factory defaults. + * + * const key1 = scryptSync('password', 'salt', 64); + * console.log(key1.toString('hex')); // '3745e48...08d59ae' + * // Using a custom N parameter. Must be a power of two. + * const key2 = scryptSync('password', 'salt', 64, { N: 1024 }); + * console.log(key2.toString('hex')); // '3745e48...aa39b34' + * ``` + * @since v10.5.0 + */ + function scryptSync(password: BinaryLike, salt: BinaryLike, keylen: number, options?: ScryptOptions): Buffer; + interface RsaPublicKey { + key: KeyLike; + padding?: number | undefined; + } + interface RsaPrivateKey { + key: KeyLike; + passphrase?: string | undefined; + /** + * @default 'sha1' + */ + oaepHash?: string | undefined; + oaepLabel?: NodeJS.TypedArray | undefined; + padding?: number | undefined; + } + /** + * Encrypts the content of `buffer` with `key` and returns a new `Buffer` with encrypted content. The returned data can be decrypted using + * the corresponding private key, for example using {@link privateDecrypt}. + * + * If `key` is not a `KeyObject`, this function behaves as if`key` had been passed to {@link createPublicKey}. If it is an + * object, the `padding` property can be passed. Otherwise, this function uses`RSA_PKCS1_OAEP_PADDING`. + * + * Because RSA public keys can be derived from private keys, a private key may + * be passed instead of a public key. + * @since v0.11.14 + */ + function publicEncrypt(key: RsaPublicKey | RsaPrivateKey | KeyLike, buffer: NodeJS.ArrayBufferView): Buffer; + /** + * Decrypts `buffer` with `key`.`buffer` was previously encrypted using + * the corresponding private key, for example using {@link privateEncrypt}. + * + * If `key` is not a `KeyObject`, this function behaves as if`key` had been passed to {@link createPublicKey}. If it is an + * object, the `padding` property can be passed. Otherwise, this function uses`RSA_PKCS1_PADDING`. + * + * Because RSA public keys can be derived from private keys, a private key may + * be passed instead of a public key. + * @since v1.1.0 + */ + function publicDecrypt(key: RsaPublicKey | RsaPrivateKey | KeyLike, buffer: NodeJS.ArrayBufferView): Buffer; + /** + * Decrypts `buffer` with `privateKey`. `buffer` was previously encrypted using + * the corresponding public key, for example using {@link publicEncrypt}. + * + * If `privateKey` is not a `KeyObject`, this function behaves as if`privateKey` had been passed to {@link createPrivateKey}. If it is an + * object, the `padding` property can be passed. Otherwise, this function uses`RSA_PKCS1_OAEP_PADDING`. + * @since v0.11.14 + */ + function privateDecrypt(privateKey: RsaPrivateKey | KeyLike, buffer: NodeJS.ArrayBufferView): Buffer; + /** + * Encrypts `buffer` with `privateKey`. The returned data can be decrypted using + * the corresponding public key, for example using {@link publicDecrypt}. + * + * If `privateKey` is not a `KeyObject`, this function behaves as if`privateKey` had been passed to {@link createPrivateKey}. If it is an + * object, the `padding` property can be passed. Otherwise, this function uses`RSA_PKCS1_PADDING`. + * @since v1.1.0 + */ + function privateEncrypt(privateKey: RsaPrivateKey | KeyLike, buffer: NodeJS.ArrayBufferView): Buffer; + /** + * ```js + * const { + * getCiphers, + * } = await import('node:crypto'); + * + * console.log(getCiphers()); // ['aes-128-cbc', 'aes-128-ccm', ...] + * ``` + * @since v0.9.3 + * @return An array with the names of the supported cipher algorithms. + */ + function getCiphers(): string[]; + /** + * ```js + * const { + * getCurves, + * } = await import('node:crypto'); + * + * console.log(getCurves()); // ['Oakley-EC2N-3', 'Oakley-EC2N-4', ...] + * ``` + * @since v2.3.0 + * @return An array with the names of the supported elliptic curves. + */ + function getCurves(): string[]; + /** + * @since v10.0.0 + * @return `1` if and only if a FIPS compliant crypto provider is currently in use, `0` otherwise. A future semver-major release may change the return type of this API to a {boolean}. + */ + function getFips(): 1 | 0; + /** + * Enables the FIPS compliant crypto provider in a FIPS-enabled Node.js build. + * Throws an error if FIPS mode is not available. + * @since v10.0.0 + * @param bool `true` to enable FIPS mode. + */ + function setFips(bool: boolean): void; + /** + * ```js + * const { + * getHashes, + * } = await import('node:crypto'); + * + * console.log(getHashes()); // ['DSA', 'DSA-SHA', 'DSA-SHA1', ...] + * ``` + * @since v0.9.3 + * @return An array of the names of the supported hash algorithms, such as `'RSA-SHA256'`. Hash algorithms are also called "digest" algorithms. + */ + function getHashes(): string[]; + /** + * The `ECDH` class is a utility for creating Elliptic Curve Diffie-Hellman (ECDH) + * key exchanges. + * + * Instances of the `ECDH` class can be created using the {@link createECDH} function. + * + * ```js + * import assert from 'node:assert'; + * + * const { + * createECDH, + * } = await import('node:crypto'); + * + * // Generate Alice's keys... + * const alice = createECDH('secp521r1'); + * const aliceKey = alice.generateKeys(); + * + * // Generate Bob's keys... + * const bob = createECDH('secp521r1'); + * const bobKey = bob.generateKeys(); + * + * // Exchange and generate the secret... + * const aliceSecret = alice.computeSecret(bobKey); + * const bobSecret = bob.computeSecret(aliceKey); + * + * assert.strictEqual(aliceSecret.toString('hex'), bobSecret.toString('hex')); + * // OK + * ``` + * @since v0.11.14 + */ + class ECDH { + private constructor(); + /** + * Converts the EC Diffie-Hellman public key specified by `key` and `curve` to the + * format specified by `format`. The `format` argument specifies point encoding + * and can be `'compressed'`, `'uncompressed'` or `'hybrid'`. The supplied key is + * interpreted using the specified `inputEncoding`, and the returned key is encoded + * using the specified `outputEncoding`. + * + * Use {@link getCurves} to obtain a list of available curve names. + * On recent OpenSSL releases, `openssl ecparam -list_curves` will also display + * the name and description of each available elliptic curve. + * + * If `format` is not specified the point will be returned in `'uncompressed'`format. + * + * If the `inputEncoding` is not provided, `key` is expected to be a `Buffer`,`TypedArray`, or `DataView`. + * + * Example (uncompressing a key): + * + * ```js + * const { + * createECDH, + * ECDH, + * } = await import('node:crypto'); + * + * const ecdh = createECDH('secp256k1'); + * ecdh.generateKeys(); + * + * const compressedKey = ecdh.getPublicKey('hex', 'compressed'); + * + * const uncompressedKey = ECDH.convertKey(compressedKey, + * 'secp256k1', + * 'hex', + * 'hex', + * 'uncompressed'); + * + * // The converted key and the uncompressed public key should be the same + * console.log(uncompressedKey === ecdh.getPublicKey('hex')); + * ``` + * @since v10.0.0 + * @param inputEncoding The `encoding` of the `key` string. + * @param outputEncoding The `encoding` of the return value. + * @param [format='uncompressed'] + */ + static convertKey( + key: BinaryLike, + curve: string, + inputEncoding?: BinaryToTextEncoding, + outputEncoding?: "latin1" | "hex" | "base64" | "base64url", + format?: "uncompressed" | "compressed" | "hybrid", + ): Buffer | string; + /** + * Generates private and public EC Diffie-Hellman key values, and returns + * the public key in the specified `format` and `encoding`. This key should be + * transferred to the other party. + * + * The `format` argument specifies point encoding and can be `'compressed'` or`'uncompressed'`. If `format` is not specified, the point will be returned in`'uncompressed'` format. + * + * If `encoding` is provided a string is returned; otherwise a `Buffer` is returned. + * @since v0.11.14 + * @param encoding The `encoding` of the return value. + * @param [format='uncompressed'] + */ + generateKeys(): Buffer; + generateKeys(encoding: BinaryToTextEncoding, format?: ECDHKeyFormat): string; + /** + * Computes the shared secret using `otherPublicKey` as the other + * party's public key and returns the computed shared secret. The supplied + * key is interpreted using specified `inputEncoding`, and the returned secret + * is encoded using the specified `outputEncoding`. + * If the `inputEncoding` is not + * provided, `otherPublicKey` is expected to be a `Buffer`, `TypedArray`, or`DataView`. + * + * If `outputEncoding` is given a string will be returned; otherwise a `Buffer` is returned. + * + * `ecdh.computeSecret` will throw an`ERR_CRYPTO_ECDH_INVALID_PUBLIC_KEY` error when `otherPublicKey`lies outside of the elliptic curve. Since `otherPublicKey` is + * usually supplied from a remote user over an insecure network, + * be sure to handle this exception accordingly. + * @since v0.11.14 + * @param inputEncoding The `encoding` of the `otherPublicKey` string. + * @param outputEncoding The `encoding` of the return value. + */ + computeSecret(otherPublicKey: NodeJS.ArrayBufferView): Buffer; + computeSecret(otherPublicKey: string, inputEncoding: BinaryToTextEncoding): Buffer; + computeSecret(otherPublicKey: NodeJS.ArrayBufferView, outputEncoding: BinaryToTextEncoding): string; + computeSecret( + otherPublicKey: string, + inputEncoding: BinaryToTextEncoding, + outputEncoding: BinaryToTextEncoding, + ): string; + /** + * If `encoding` is specified, a string is returned; otherwise a `Buffer` is + * returned. + * @since v0.11.14 + * @param encoding The `encoding` of the return value. + * @return The EC Diffie-Hellman in the specified `encoding`. + */ + getPrivateKey(): Buffer; + getPrivateKey(encoding: BinaryToTextEncoding): string; + /** + * The `format` argument specifies point encoding and can be `'compressed'` or`'uncompressed'`. If `format` is not specified the point will be returned in`'uncompressed'` format. + * + * If `encoding` is specified, a string is returned; otherwise a `Buffer` is + * returned. + * @since v0.11.14 + * @param encoding The `encoding` of the return value. + * @param [format='uncompressed'] + * @return The EC Diffie-Hellman public key in the specified `encoding` and `format`. + */ + getPublicKey(encoding?: null, format?: ECDHKeyFormat): Buffer; + getPublicKey(encoding: BinaryToTextEncoding, format?: ECDHKeyFormat): string; + /** + * Sets the EC Diffie-Hellman private key. + * If `encoding` is provided, `privateKey` is expected + * to be a string; otherwise `privateKey` is expected to be a `Buffer`,`TypedArray`, or `DataView`. + * + * If `privateKey` is not valid for the curve specified when the `ECDH` object was + * created, an error is thrown. Upon setting the private key, the associated + * public point (key) is also generated and set in the `ECDH` object. + * @since v0.11.14 + * @param encoding The `encoding` of the `privateKey` string. + */ + setPrivateKey(privateKey: NodeJS.ArrayBufferView): void; + setPrivateKey(privateKey: string, encoding: BinaryToTextEncoding): void; + } + /** + * Creates an Elliptic Curve Diffie-Hellman (`ECDH`) key exchange object using a + * predefined curve specified by the `curveName` string. Use {@link getCurves} to obtain a list of available curve names. On recent + * OpenSSL releases, `openssl ecparam -list_curves` will also display the name + * and description of each available elliptic curve. + * @since v0.11.14 + */ + function createECDH(curveName: string): ECDH; + /** + * This function compares the underlying bytes that represent the given`ArrayBuffer`, `TypedArray`, or `DataView` instances using a constant-time + * algorithm. + * + * This function does not leak timing information that + * would allow an attacker to guess one of the values. This is suitable for + * comparing HMAC digests or secret values like authentication cookies or [capability urls](https://www.w3.org/TR/capability-urls/). + * + * `a` and `b` must both be `Buffer`s, `TypedArray`s, or `DataView`s, and they + * must have the same byte length. An error is thrown if `a` and `b` have + * different byte lengths. + * + * If at least one of `a` and `b` is a `TypedArray` with more than one byte per + * entry, such as `Uint16Array`, the result will be computed using the platform + * byte order. + * + * **When both of the inputs are `Float32Array`s or`Float64Array`s, this function might return unexpected results due to IEEE 754** + * **encoding of floating-point numbers. In particular, neither `x === y` nor`Object.is(x, y)` implies that the byte representations of two floating-point** + * **numbers `x` and `y` are equal.** + * + * Use of `crypto.timingSafeEqual` does not guarantee that the _surrounding_ code + * is timing-safe. Care should be taken to ensure that the surrounding code does + * not introduce timing vulnerabilities. + * @since v6.6.0 + */ + function timingSafeEqual(a: NodeJS.ArrayBufferView, b: NodeJS.ArrayBufferView): boolean; + type KeyType = "rsa" | "rsa-pss" | "dsa" | "ec" | "ed25519" | "ed448" | "x25519" | "x448"; + type KeyFormat = "pem" | "der" | "jwk"; + interface BasePrivateKeyEncodingOptions { + format: T; + cipher?: string | undefined; + passphrase?: string | undefined; + } + interface KeyPairKeyObjectResult { + publicKey: KeyObject; + privateKey: KeyObject; + } + interface ED25519KeyPairKeyObjectOptions {} + interface ED448KeyPairKeyObjectOptions {} + interface X25519KeyPairKeyObjectOptions {} + interface X448KeyPairKeyObjectOptions {} + interface ECKeyPairKeyObjectOptions { + /** + * Name of the curve to use + */ + namedCurve: string; + } + interface RSAKeyPairKeyObjectOptions { + /** + * Key size in bits + */ + modulusLength: number; + /** + * Public exponent + * @default 0x10001 + */ + publicExponent?: number | undefined; + } + interface RSAPSSKeyPairKeyObjectOptions { + /** + * Key size in bits + */ + modulusLength: number; + /** + * Public exponent + * @default 0x10001 + */ + publicExponent?: number | undefined; + /** + * Name of the message digest + */ + hashAlgorithm?: string; + /** + * Name of the message digest used by MGF1 + */ + mgf1HashAlgorithm?: string; + /** + * Minimal salt length in bytes + */ + saltLength?: string; + } + interface DSAKeyPairKeyObjectOptions { + /** + * Key size in bits + */ + modulusLength: number; + /** + * Size of q in bits + */ + divisorLength: number; + } + interface RSAKeyPairOptions { + /** + * Key size in bits + */ + modulusLength: number; + /** + * Public exponent + * @default 0x10001 + */ + publicExponent?: number | undefined; + publicKeyEncoding: { + type: "pkcs1" | "spki"; + format: PubF; + }; + privateKeyEncoding: BasePrivateKeyEncodingOptions & { + type: "pkcs1" | "pkcs8"; + }; + } + interface RSAPSSKeyPairOptions { + /** + * Key size in bits + */ + modulusLength: number; + /** + * Public exponent + * @default 0x10001 + */ + publicExponent?: number | undefined; + /** + * Name of the message digest + */ + hashAlgorithm?: string; + /** + * Name of the message digest used by MGF1 + */ + mgf1HashAlgorithm?: string; + /** + * Minimal salt length in bytes + */ + saltLength?: string; + publicKeyEncoding: { + type: "spki"; + format: PubF; + }; + privateKeyEncoding: BasePrivateKeyEncodingOptions & { + type: "pkcs8"; + }; + } + interface DSAKeyPairOptions { + /** + * Key size in bits + */ + modulusLength: number; + /** + * Size of q in bits + */ + divisorLength: number; + publicKeyEncoding: { + type: "spki"; + format: PubF; + }; + privateKeyEncoding: BasePrivateKeyEncodingOptions & { + type: "pkcs8"; + }; + } + interface ECKeyPairOptions { + /** + * Name of the curve to use. + */ + namedCurve: string; + publicKeyEncoding: { + type: "pkcs1" | "spki"; + format: PubF; + }; + privateKeyEncoding: BasePrivateKeyEncodingOptions & { + type: "sec1" | "pkcs8"; + }; + } + interface ED25519KeyPairOptions { + publicKeyEncoding: { + type: "spki"; + format: PubF; + }; + privateKeyEncoding: BasePrivateKeyEncodingOptions & { + type: "pkcs8"; + }; + } + interface ED448KeyPairOptions { + publicKeyEncoding: { + type: "spki"; + format: PubF; + }; + privateKeyEncoding: BasePrivateKeyEncodingOptions & { + type: "pkcs8"; + }; + } + interface X25519KeyPairOptions { + publicKeyEncoding: { + type: "spki"; + format: PubF; + }; + privateKeyEncoding: BasePrivateKeyEncodingOptions & { + type: "pkcs8"; + }; + } + interface X448KeyPairOptions { + publicKeyEncoding: { + type: "spki"; + format: PubF; + }; + privateKeyEncoding: BasePrivateKeyEncodingOptions & { + type: "pkcs8"; + }; + } + interface KeyPairSyncResult { + publicKey: T1; + privateKey: T2; + } + /** + * Generates a new asymmetric key pair of the given `type`. RSA, RSA-PSS, DSA, EC, + * Ed25519, Ed448, X25519, X448, and DH are currently supported. + * + * If a `publicKeyEncoding` or `privateKeyEncoding` was specified, this function + * behaves as if `keyObject.export()` had been called on its result. Otherwise, + * the respective part of the key is returned as a `KeyObject`. + * + * When encoding public keys, it is recommended to use `'spki'`. When encoding + * private keys, it is recommended to use `'pkcs8'` with a strong passphrase, + * and to keep the passphrase confidential. + * + * ```js + * const { + * generateKeyPairSync, + * } = await import('node:crypto'); + * + * const { + * publicKey, + * privateKey, + * } = generateKeyPairSync('rsa', { + * modulusLength: 4096, + * publicKeyEncoding: { + * type: 'spki', + * format: 'pem', + * }, + * privateKeyEncoding: { + * type: 'pkcs8', + * format: 'pem', + * cipher: 'aes-256-cbc', + * passphrase: 'top secret', + * }, + * }); + * ``` + * + * The return value `{ publicKey, privateKey }` represents the generated key pair. + * When PEM encoding was selected, the respective key will be a string, otherwise + * it will be a buffer containing the data encoded as DER. + * @since v10.12.0 + * @param type Must be `'rsa'`, `'rsa-pss'`, `'dsa'`, `'ec'`, `'ed25519'`, `'ed448'`, `'x25519'`, `'x448'`, or `'dh'`. + */ + function generateKeyPairSync( + type: "rsa", + options: RSAKeyPairOptions<"pem", "pem">, + ): KeyPairSyncResult; + function generateKeyPairSync( + type: "rsa", + options: RSAKeyPairOptions<"pem", "der">, + ): KeyPairSyncResult; + function generateKeyPairSync( + type: "rsa", + options: RSAKeyPairOptions<"der", "pem">, + ): KeyPairSyncResult; + function generateKeyPairSync( + type: "rsa", + options: RSAKeyPairOptions<"der", "der">, + ): KeyPairSyncResult; + function generateKeyPairSync(type: "rsa", options: RSAKeyPairKeyObjectOptions): KeyPairKeyObjectResult; + function generateKeyPairSync( + type: "rsa-pss", + options: RSAPSSKeyPairOptions<"pem", "pem">, + ): KeyPairSyncResult; + function generateKeyPairSync( + type: "rsa-pss", + options: RSAPSSKeyPairOptions<"pem", "der">, + ): KeyPairSyncResult; + function generateKeyPairSync( + type: "rsa-pss", + options: RSAPSSKeyPairOptions<"der", "pem">, + ): KeyPairSyncResult; + function generateKeyPairSync( + type: "rsa-pss", + options: RSAPSSKeyPairOptions<"der", "der">, + ): KeyPairSyncResult; + function generateKeyPairSync(type: "rsa-pss", options: RSAPSSKeyPairKeyObjectOptions): KeyPairKeyObjectResult; + function generateKeyPairSync( + type: "dsa", + options: DSAKeyPairOptions<"pem", "pem">, + ): KeyPairSyncResult; + function generateKeyPairSync( + type: "dsa", + options: DSAKeyPairOptions<"pem", "der">, + ): KeyPairSyncResult; + function generateKeyPairSync( + type: "dsa", + options: DSAKeyPairOptions<"der", "pem">, + ): KeyPairSyncResult; + function generateKeyPairSync( + type: "dsa", + options: DSAKeyPairOptions<"der", "der">, + ): KeyPairSyncResult; + function generateKeyPairSync(type: "dsa", options: DSAKeyPairKeyObjectOptions): KeyPairKeyObjectResult; + function generateKeyPairSync( + type: "ec", + options: ECKeyPairOptions<"pem", "pem">, + ): KeyPairSyncResult; + function generateKeyPairSync( + type: "ec", + options: ECKeyPairOptions<"pem", "der">, + ): KeyPairSyncResult; + function generateKeyPairSync( + type: "ec", + options: ECKeyPairOptions<"der", "pem">, + ): KeyPairSyncResult; + function generateKeyPairSync( + type: "ec", + options: ECKeyPairOptions<"der", "der">, + ): KeyPairSyncResult; + function generateKeyPairSync(type: "ec", options: ECKeyPairKeyObjectOptions): KeyPairKeyObjectResult; + function generateKeyPairSync( + type: "ed25519", + options: ED25519KeyPairOptions<"pem", "pem">, + ): KeyPairSyncResult; + function generateKeyPairSync( + type: "ed25519", + options: ED25519KeyPairOptions<"pem", "der">, + ): KeyPairSyncResult; + function generateKeyPairSync( + type: "ed25519", + options: ED25519KeyPairOptions<"der", "pem">, + ): KeyPairSyncResult; + function generateKeyPairSync( + type: "ed25519", + options: ED25519KeyPairOptions<"der", "der">, + ): KeyPairSyncResult; + function generateKeyPairSync(type: "ed25519", options?: ED25519KeyPairKeyObjectOptions): KeyPairKeyObjectResult; + function generateKeyPairSync( + type: "ed448", + options: ED448KeyPairOptions<"pem", "pem">, + ): KeyPairSyncResult; + function generateKeyPairSync( + type: "ed448", + options: ED448KeyPairOptions<"pem", "der">, + ): KeyPairSyncResult; + function generateKeyPairSync( + type: "ed448", + options: ED448KeyPairOptions<"der", "pem">, + ): KeyPairSyncResult; + function generateKeyPairSync( + type: "ed448", + options: ED448KeyPairOptions<"der", "der">, + ): KeyPairSyncResult; + function generateKeyPairSync(type: "ed448", options?: ED448KeyPairKeyObjectOptions): KeyPairKeyObjectResult; + function generateKeyPairSync( + type: "x25519", + options: X25519KeyPairOptions<"pem", "pem">, + ): KeyPairSyncResult; + function generateKeyPairSync( + type: "x25519", + options: X25519KeyPairOptions<"pem", "der">, + ): KeyPairSyncResult; + function generateKeyPairSync( + type: "x25519", + options: X25519KeyPairOptions<"der", "pem">, + ): KeyPairSyncResult; + function generateKeyPairSync( + type: "x25519", + options: X25519KeyPairOptions<"der", "der">, + ): KeyPairSyncResult; + function generateKeyPairSync(type: "x25519", options?: X25519KeyPairKeyObjectOptions): KeyPairKeyObjectResult; + function generateKeyPairSync( + type: "x448", + options: X448KeyPairOptions<"pem", "pem">, + ): KeyPairSyncResult; + function generateKeyPairSync( + type: "x448", + options: X448KeyPairOptions<"pem", "der">, + ): KeyPairSyncResult; + function generateKeyPairSync( + type: "x448", + options: X448KeyPairOptions<"der", "pem">, + ): KeyPairSyncResult; + function generateKeyPairSync( + type: "x448", + options: X448KeyPairOptions<"der", "der">, + ): KeyPairSyncResult; + function generateKeyPairSync(type: "x448", options?: X448KeyPairKeyObjectOptions): KeyPairKeyObjectResult; + /** + * Generates a new asymmetric key pair of the given `type`. RSA, RSA-PSS, DSA, EC, + * Ed25519, Ed448, X25519, X448, and DH are currently supported. + * + * If a `publicKeyEncoding` or `privateKeyEncoding` was specified, this function + * behaves as if `keyObject.export()` had been called on its result. Otherwise, + * the respective part of the key is returned as a `KeyObject`. + * + * It is recommended to encode public keys as `'spki'` and private keys as`'pkcs8'` with encryption for long-term storage: + * + * ```js + * const { + * generateKeyPair, + * } = await import('node:crypto'); + * + * generateKeyPair('rsa', { + * modulusLength: 4096, + * publicKeyEncoding: { + * type: 'spki', + * format: 'pem', + * }, + * privateKeyEncoding: { + * type: 'pkcs8', + * format: 'pem', + * cipher: 'aes-256-cbc', + * passphrase: 'top secret', + * }, + * }, (err, publicKey, privateKey) => { + * // Handle errors and use the generated key pair. + * }); + * ``` + * + * On completion, `callback` will be called with `err` set to `undefined` and`publicKey` / `privateKey` representing the generated key pair. + * + * If this method is invoked as its `util.promisify()` ed version, it returns + * a `Promise` for an `Object` with `publicKey` and `privateKey` properties. + * @since v10.12.0 + * @param type Must be `'rsa'`, `'rsa-pss'`, `'dsa'`, `'ec'`, `'ed25519'`, `'ed448'`, `'x25519'`, `'x448'`, or `'dh'`. + */ + function generateKeyPair( + type: "rsa", + options: RSAKeyPairOptions<"pem", "pem">, + callback: (err: Error | null, publicKey: string, privateKey: string) => void, + ): void; + function generateKeyPair( + type: "rsa", + options: RSAKeyPairOptions<"pem", "der">, + callback: (err: Error | null, publicKey: string, privateKey: Buffer) => void, + ): void; + function generateKeyPair( + type: "rsa", + options: RSAKeyPairOptions<"der", "pem">, + callback: (err: Error | null, publicKey: Buffer, privateKey: string) => void, + ): void; + function generateKeyPair( + type: "rsa", + options: RSAKeyPairOptions<"der", "der">, + callback: (err: Error | null, publicKey: Buffer, privateKey: Buffer) => void, + ): void; + function generateKeyPair( + type: "rsa", + options: RSAKeyPairKeyObjectOptions, + callback: (err: Error | null, publicKey: KeyObject, privateKey: KeyObject) => void, + ): void; + function generateKeyPair( + type: "rsa-pss", + options: RSAPSSKeyPairOptions<"pem", "pem">, + callback: (err: Error | null, publicKey: string, privateKey: string) => void, + ): void; + function generateKeyPair( + type: "rsa-pss", + options: RSAPSSKeyPairOptions<"pem", "der">, + callback: (err: Error | null, publicKey: string, privateKey: Buffer) => void, + ): void; + function generateKeyPair( + type: "rsa-pss", + options: RSAPSSKeyPairOptions<"der", "pem">, + callback: (err: Error | null, publicKey: Buffer, privateKey: string) => void, + ): void; + function generateKeyPair( + type: "rsa-pss", + options: RSAPSSKeyPairOptions<"der", "der">, + callback: (err: Error | null, publicKey: Buffer, privateKey: Buffer) => void, + ): void; + function generateKeyPair( + type: "rsa-pss", + options: RSAPSSKeyPairKeyObjectOptions, + callback: (err: Error | null, publicKey: KeyObject, privateKey: KeyObject) => void, + ): void; + function generateKeyPair( + type: "dsa", + options: DSAKeyPairOptions<"pem", "pem">, + callback: (err: Error | null, publicKey: string, privateKey: string) => void, + ): void; + function generateKeyPair( + type: "dsa", + options: DSAKeyPairOptions<"pem", "der">, + callback: (err: Error | null, publicKey: string, privateKey: Buffer) => void, + ): void; + function generateKeyPair( + type: "dsa", + options: DSAKeyPairOptions<"der", "pem">, + callback: (err: Error | null, publicKey: Buffer, privateKey: string) => void, + ): void; + function generateKeyPair( + type: "dsa", + options: DSAKeyPairOptions<"der", "der">, + callback: (err: Error | null, publicKey: Buffer, privateKey: Buffer) => void, + ): void; + function generateKeyPair( + type: "dsa", + options: DSAKeyPairKeyObjectOptions, + callback: (err: Error | null, publicKey: KeyObject, privateKey: KeyObject) => void, + ): void; + function generateKeyPair( + type: "ec", + options: ECKeyPairOptions<"pem", "pem">, + callback: (err: Error | null, publicKey: string, privateKey: string) => void, + ): void; + function generateKeyPair( + type: "ec", + options: ECKeyPairOptions<"pem", "der">, + callback: (err: Error | null, publicKey: string, privateKey: Buffer) => void, + ): void; + function generateKeyPair( + type: "ec", + options: ECKeyPairOptions<"der", "pem">, + callback: (err: Error | null, publicKey: Buffer, privateKey: string) => void, + ): void; + function generateKeyPair( + type: "ec", + options: ECKeyPairOptions<"der", "der">, + callback: (err: Error | null, publicKey: Buffer, privateKey: Buffer) => void, + ): void; + function generateKeyPair( + type: "ec", + options: ECKeyPairKeyObjectOptions, + callback: (err: Error | null, publicKey: KeyObject, privateKey: KeyObject) => void, + ): void; + function generateKeyPair( + type: "ed25519", + options: ED25519KeyPairOptions<"pem", "pem">, + callback: (err: Error | null, publicKey: string, privateKey: string) => void, + ): void; + function generateKeyPair( + type: "ed25519", + options: ED25519KeyPairOptions<"pem", "der">, + callback: (err: Error | null, publicKey: string, privateKey: Buffer) => void, + ): void; + function generateKeyPair( + type: "ed25519", + options: ED25519KeyPairOptions<"der", "pem">, + callback: (err: Error | null, publicKey: Buffer, privateKey: string) => void, + ): void; + function generateKeyPair( + type: "ed25519", + options: ED25519KeyPairOptions<"der", "der">, + callback: (err: Error | null, publicKey: Buffer, privateKey: Buffer) => void, + ): void; + function generateKeyPair( + type: "ed25519", + options: ED25519KeyPairKeyObjectOptions | undefined, + callback: (err: Error | null, publicKey: KeyObject, privateKey: KeyObject) => void, + ): void; + function generateKeyPair( + type: "ed448", + options: ED448KeyPairOptions<"pem", "pem">, + callback: (err: Error | null, publicKey: string, privateKey: string) => void, + ): void; + function generateKeyPair( + type: "ed448", + options: ED448KeyPairOptions<"pem", "der">, + callback: (err: Error | null, publicKey: string, privateKey: Buffer) => void, + ): void; + function generateKeyPair( + type: "ed448", + options: ED448KeyPairOptions<"der", "pem">, + callback: (err: Error | null, publicKey: Buffer, privateKey: string) => void, + ): void; + function generateKeyPair( + type: "ed448", + options: ED448KeyPairOptions<"der", "der">, + callback: (err: Error | null, publicKey: Buffer, privateKey: Buffer) => void, + ): void; + function generateKeyPair( + type: "ed448", + options: ED448KeyPairKeyObjectOptions | undefined, + callback: (err: Error | null, publicKey: KeyObject, privateKey: KeyObject) => void, + ): void; + function generateKeyPair( + type: "x25519", + options: X25519KeyPairOptions<"pem", "pem">, + callback: (err: Error | null, publicKey: string, privateKey: string) => void, + ): void; + function generateKeyPair( + type: "x25519", + options: X25519KeyPairOptions<"pem", "der">, + callback: (err: Error | null, publicKey: string, privateKey: Buffer) => void, + ): void; + function generateKeyPair( + type: "x25519", + options: X25519KeyPairOptions<"der", "pem">, + callback: (err: Error | null, publicKey: Buffer, privateKey: string) => void, + ): void; + function generateKeyPair( + type: "x25519", + options: X25519KeyPairOptions<"der", "der">, + callback: (err: Error | null, publicKey: Buffer, privateKey: Buffer) => void, + ): void; + function generateKeyPair( + type: "x25519", + options: X25519KeyPairKeyObjectOptions | undefined, + callback: (err: Error | null, publicKey: KeyObject, privateKey: KeyObject) => void, + ): void; + function generateKeyPair( + type: "x448", + options: X448KeyPairOptions<"pem", "pem">, + callback: (err: Error | null, publicKey: string, privateKey: string) => void, + ): void; + function generateKeyPair( + type: "x448", + options: X448KeyPairOptions<"pem", "der">, + callback: (err: Error | null, publicKey: string, privateKey: Buffer) => void, + ): void; + function generateKeyPair( + type: "x448", + options: X448KeyPairOptions<"der", "pem">, + callback: (err: Error | null, publicKey: Buffer, privateKey: string) => void, + ): void; + function generateKeyPair( + type: "x448", + options: X448KeyPairOptions<"der", "der">, + callback: (err: Error | null, publicKey: Buffer, privateKey: Buffer) => void, + ): void; + function generateKeyPair( + type: "x448", + options: X448KeyPairKeyObjectOptions | undefined, + callback: (err: Error | null, publicKey: KeyObject, privateKey: KeyObject) => void, + ): void; + namespace generateKeyPair { + function __promisify__( + type: "rsa", + options: RSAKeyPairOptions<"pem", "pem">, + ): Promise<{ + publicKey: string; + privateKey: string; + }>; + function __promisify__( + type: "rsa", + options: RSAKeyPairOptions<"pem", "der">, + ): Promise<{ + publicKey: string; + privateKey: Buffer; + }>; + function __promisify__( + type: "rsa", + options: RSAKeyPairOptions<"der", "pem">, + ): Promise<{ + publicKey: Buffer; + privateKey: string; + }>; + function __promisify__( + type: "rsa", + options: RSAKeyPairOptions<"der", "der">, + ): Promise<{ + publicKey: Buffer; + privateKey: Buffer; + }>; + function __promisify__(type: "rsa", options: RSAKeyPairKeyObjectOptions): Promise; + function __promisify__( + type: "rsa-pss", + options: RSAPSSKeyPairOptions<"pem", "pem">, + ): Promise<{ + publicKey: string; + privateKey: string; + }>; + function __promisify__( + type: "rsa-pss", + options: RSAPSSKeyPairOptions<"pem", "der">, + ): Promise<{ + publicKey: string; + privateKey: Buffer; + }>; + function __promisify__( + type: "rsa-pss", + options: RSAPSSKeyPairOptions<"der", "pem">, + ): Promise<{ + publicKey: Buffer; + privateKey: string; + }>; + function __promisify__( + type: "rsa-pss", + options: RSAPSSKeyPairOptions<"der", "der">, + ): Promise<{ + publicKey: Buffer; + privateKey: Buffer; + }>; + function __promisify__( + type: "rsa-pss", + options: RSAPSSKeyPairKeyObjectOptions, + ): Promise; + function __promisify__( + type: "dsa", + options: DSAKeyPairOptions<"pem", "pem">, + ): Promise<{ + publicKey: string; + privateKey: string; + }>; + function __promisify__( + type: "dsa", + options: DSAKeyPairOptions<"pem", "der">, + ): Promise<{ + publicKey: string; + privateKey: Buffer; + }>; + function __promisify__( + type: "dsa", + options: DSAKeyPairOptions<"der", "pem">, + ): Promise<{ + publicKey: Buffer; + privateKey: string; + }>; + function __promisify__( + type: "dsa", + options: DSAKeyPairOptions<"der", "der">, + ): Promise<{ + publicKey: Buffer; + privateKey: Buffer; + }>; + function __promisify__(type: "dsa", options: DSAKeyPairKeyObjectOptions): Promise; + function __promisify__( + type: "ec", + options: ECKeyPairOptions<"pem", "pem">, + ): Promise<{ + publicKey: string; + privateKey: string; + }>; + function __promisify__( + type: "ec", + options: ECKeyPairOptions<"pem", "der">, + ): Promise<{ + publicKey: string; + privateKey: Buffer; + }>; + function __promisify__( + type: "ec", + options: ECKeyPairOptions<"der", "pem">, + ): Promise<{ + publicKey: Buffer; + privateKey: string; + }>; + function __promisify__( + type: "ec", + options: ECKeyPairOptions<"der", "der">, + ): Promise<{ + publicKey: Buffer; + privateKey: Buffer; + }>; + function __promisify__(type: "ec", options: ECKeyPairKeyObjectOptions): Promise; + function __promisify__( + type: "ed25519", + options: ED25519KeyPairOptions<"pem", "pem">, + ): Promise<{ + publicKey: string; + privateKey: string; + }>; + function __promisify__( + type: "ed25519", + options: ED25519KeyPairOptions<"pem", "der">, + ): Promise<{ + publicKey: string; + privateKey: Buffer; + }>; + function __promisify__( + type: "ed25519", + options: ED25519KeyPairOptions<"der", "pem">, + ): Promise<{ + publicKey: Buffer; + privateKey: string; + }>; + function __promisify__( + type: "ed25519", + options: ED25519KeyPairOptions<"der", "der">, + ): Promise<{ + publicKey: Buffer; + privateKey: Buffer; + }>; + function __promisify__( + type: "ed25519", + options?: ED25519KeyPairKeyObjectOptions, + ): Promise; + function __promisify__( + type: "ed448", + options: ED448KeyPairOptions<"pem", "pem">, + ): Promise<{ + publicKey: string; + privateKey: string; + }>; + function __promisify__( + type: "ed448", + options: ED448KeyPairOptions<"pem", "der">, + ): Promise<{ + publicKey: string; + privateKey: Buffer; + }>; + function __promisify__( + type: "ed448", + options: ED448KeyPairOptions<"der", "pem">, + ): Promise<{ + publicKey: Buffer; + privateKey: string; + }>; + function __promisify__( + type: "ed448", + options: ED448KeyPairOptions<"der", "der">, + ): Promise<{ + publicKey: Buffer; + privateKey: Buffer; + }>; + function __promisify__(type: "ed448", options?: ED448KeyPairKeyObjectOptions): Promise; + function __promisify__( + type: "x25519", + options: X25519KeyPairOptions<"pem", "pem">, + ): Promise<{ + publicKey: string; + privateKey: string; + }>; + function __promisify__( + type: "x25519", + options: X25519KeyPairOptions<"pem", "der">, + ): Promise<{ + publicKey: string; + privateKey: Buffer; + }>; + function __promisify__( + type: "x25519", + options: X25519KeyPairOptions<"der", "pem">, + ): Promise<{ + publicKey: Buffer; + privateKey: string; + }>; + function __promisify__( + type: "x25519", + options: X25519KeyPairOptions<"der", "der">, + ): Promise<{ + publicKey: Buffer; + privateKey: Buffer; + }>; + function __promisify__( + type: "x25519", + options?: X25519KeyPairKeyObjectOptions, + ): Promise; + function __promisify__( + type: "x448", + options: X448KeyPairOptions<"pem", "pem">, + ): Promise<{ + publicKey: string; + privateKey: string; + }>; + function __promisify__( + type: "x448", + options: X448KeyPairOptions<"pem", "der">, + ): Promise<{ + publicKey: string; + privateKey: Buffer; + }>; + function __promisify__( + type: "x448", + options: X448KeyPairOptions<"der", "pem">, + ): Promise<{ + publicKey: Buffer; + privateKey: string; + }>; + function __promisify__( + type: "x448", + options: X448KeyPairOptions<"der", "der">, + ): Promise<{ + publicKey: Buffer; + privateKey: Buffer; + }>; + function __promisify__(type: "x448", options?: X448KeyPairKeyObjectOptions): Promise; + } + /** + * Calculates and returns the signature for `data` using the given private key and + * algorithm. If `algorithm` is `null` or `undefined`, then the algorithm is + * dependent upon the key type (especially Ed25519 and Ed448). + * + * If `key` is not a `KeyObject`, this function behaves as if `key` had been + * passed to {@link createPrivateKey}. If it is an object, the following + * additional properties can be passed: + * + * If the `callback` function is provided this function uses libuv's threadpool. + * @since v12.0.0 + */ + function sign( + algorithm: string | null | undefined, + data: NodeJS.ArrayBufferView, + key: KeyLike | SignKeyObjectInput | SignPrivateKeyInput, + ): Buffer; + function sign( + algorithm: string | null | undefined, + data: NodeJS.ArrayBufferView, + key: KeyLike | SignKeyObjectInput | SignPrivateKeyInput, + callback: (error: Error | null, data: Buffer) => void, + ): void; + /** + * Verifies the given signature for `data` using the given key and algorithm. If`algorithm` is `null` or `undefined`, then the algorithm is dependent upon the + * key type (especially Ed25519 and Ed448). + * + * If `key` is not a `KeyObject`, this function behaves as if `key` had been + * passed to {@link createPublicKey}. If it is an object, the following + * additional properties can be passed: + * + * The `signature` argument is the previously calculated signature for the `data`. + * + * Because public keys can be derived from private keys, a private key or a public + * key may be passed for `key`. + * + * If the `callback` function is provided this function uses libuv's threadpool. + * @since v12.0.0 + */ + function verify( + algorithm: string | null | undefined, + data: NodeJS.ArrayBufferView, + key: KeyLike | VerifyKeyObjectInput | VerifyPublicKeyInput | VerifyJsonWebKeyInput, + signature: NodeJS.ArrayBufferView, + ): boolean; + function verify( + algorithm: string | null | undefined, + data: NodeJS.ArrayBufferView, + key: KeyLike | VerifyKeyObjectInput | VerifyPublicKeyInput | VerifyJsonWebKeyInput, + signature: NodeJS.ArrayBufferView, + callback: (error: Error | null, result: boolean) => void, + ): void; + /** + * Computes the Diffie-Hellman secret based on a `privateKey` and a `publicKey`. + * Both keys must have the same `asymmetricKeyType`, which must be one of `'dh'`(for Diffie-Hellman), `'ec'` (for ECDH), `'x448'`, or `'x25519'` (for ECDH-ES). + * @since v13.9.0, v12.17.0 + */ + function diffieHellman(options: { privateKey: KeyObject; publicKey: KeyObject }): Buffer; + type CipherMode = "cbc" | "ccm" | "cfb" | "ctr" | "ecb" | "gcm" | "ocb" | "ofb" | "stream" | "wrap" | "xts"; + interface CipherInfoOptions { + /** + * A test key length. + */ + keyLength?: number | undefined; + /** + * A test IV length. + */ + ivLength?: number | undefined; + } + interface CipherInfo { + /** + * The name of the cipher. + */ + name: string; + /** + * The nid of the cipher. + */ + nid: number; + /** + * The block size of the cipher in bytes. + * This property is omitted when mode is 'stream'. + */ + blockSize?: number | undefined; + /** + * The expected or default initialization vector length in bytes. + * This property is omitted if the cipher does not use an initialization vector. + */ + ivLength?: number | undefined; + /** + * The expected or default key length in bytes. + */ + keyLength: number; + /** + * The cipher mode. + */ + mode: CipherMode; + } + /** + * Returns information about a given cipher. + * + * Some ciphers accept variable length keys and initialization vectors. By default, + * the `crypto.getCipherInfo()` method will return the default values for these + * ciphers. To test if a given key length or iv length is acceptable for given + * cipher, use the `keyLength` and `ivLength` options. If the given values are + * unacceptable, `undefined` will be returned. + * @since v15.0.0 + * @param nameOrNid The name or nid of the cipher to query. + */ + function getCipherInfo(nameOrNid: string | number, options?: CipherInfoOptions): CipherInfo | undefined; + /** + * HKDF is a simple key derivation function defined in RFC 5869\. The given `ikm`,`salt` and `info` are used with the `digest` to derive a key of `keylen` bytes. + * + * The supplied `callback` function is called with two arguments: `err` and`derivedKey`. If an errors occurs while deriving the key, `err` will be set; + * otherwise `err` will be `null`. The successfully generated `derivedKey` will + * be passed to the callback as an [ArrayBuffer](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer). An error will be thrown if any + * of the input arguments specify invalid values or types. + * + * ```js + * import { Buffer } from 'node:buffer'; + * const { + * hkdf, + * } = await import('node:crypto'); + * + * hkdf('sha512', 'key', 'salt', 'info', 64, (err, derivedKey) => { + * if (err) throw err; + * console.log(Buffer.from(derivedKey).toString('hex')); // '24156e2...5391653' + * }); + * ``` + * @since v15.0.0 + * @param digest The digest algorithm to use. + * @param ikm The input keying material. Must be provided but can be zero-length. + * @param salt The salt value. Must be provided but can be zero-length. + * @param info Additional info value. Must be provided but can be zero-length, and cannot be more than 1024 bytes. + * @param keylen The length of the key to generate. Must be greater than 0. The maximum allowable value is `255` times the number of bytes produced by the selected digest function (e.g. `sha512` + * generates 64-byte hashes, making the maximum HKDF output 16320 bytes). + */ + function hkdf( + digest: string, + irm: BinaryLike | KeyObject, + salt: BinaryLike, + info: BinaryLike, + keylen: number, + callback: (err: Error | null, derivedKey: ArrayBuffer) => void, + ): void; + /** + * Provides a synchronous HKDF key derivation function as defined in RFC 5869\. The + * given `ikm`, `salt` and `info` are used with the `digest` to derive a key of`keylen` bytes. + * + * The successfully generated `derivedKey` will be returned as an [ArrayBuffer](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer). + * + * An error will be thrown if any of the input arguments specify invalid values or + * types, or if the derived key cannot be generated. + * + * ```js + * import { Buffer } from 'node:buffer'; + * const { + * hkdfSync, + * } = await import('node:crypto'); + * + * const derivedKey = hkdfSync('sha512', 'key', 'salt', 'info', 64); + * console.log(Buffer.from(derivedKey).toString('hex')); // '24156e2...5391653' + * ``` + * @since v15.0.0 + * @param digest The digest algorithm to use. + * @param ikm The input keying material. Must be provided but can be zero-length. + * @param salt The salt value. Must be provided but can be zero-length. + * @param info Additional info value. Must be provided but can be zero-length, and cannot be more than 1024 bytes. + * @param keylen The length of the key to generate. Must be greater than 0. The maximum allowable value is `255` times the number of bytes produced by the selected digest function (e.g. `sha512` + * generates 64-byte hashes, making the maximum HKDF output 16320 bytes). + */ + function hkdfSync( + digest: string, + ikm: BinaryLike | KeyObject, + salt: BinaryLike, + info: BinaryLike, + keylen: number, + ): ArrayBuffer; + interface SecureHeapUsage { + /** + * The total allocated secure heap size as specified using the `--secure-heap=n` command-line flag. + */ + total: number; + /** + * The minimum allocation from the secure heap as specified using the `--secure-heap-min` command-line flag. + */ + min: number; + /** + * The total number of bytes currently allocated from the secure heap. + */ + used: number; + /** + * The calculated ratio of `used` to `total` allocated bytes. + */ + utilization: number; + } + /** + * @since v15.6.0 + */ + function secureHeapUsed(): SecureHeapUsage; + interface RandomUUIDOptions { + /** + * By default, to improve performance, + * Node.js will pre-emptively generate and persistently cache enough + * random data to generate up to 128 random UUIDs. To generate a UUID + * without using the cache, set `disableEntropyCache` to `true`. + * + * @default `false` + */ + disableEntropyCache?: boolean | undefined; + } + type UUID = `${string}-${string}-${string}-${string}-${string}`; + /** + * Generates a random [RFC 4122](https://www.rfc-editor.org/rfc/rfc4122.txt) version 4 UUID. The UUID is generated using a + * cryptographic pseudorandom number generator. + * @since v15.6.0, v14.17.0 + */ + function randomUUID(options?: RandomUUIDOptions): UUID; + interface X509CheckOptions { + /** + * @default 'always' + */ + subject?: "always" | "default" | "never"; + /** + * @default true + */ + wildcards?: boolean; + /** + * @default true + */ + partialWildcards?: boolean; + /** + * @default false + */ + multiLabelWildcards?: boolean; + /** + * @default false + */ + singleLabelSubdomains?: boolean; + } + /** + * Encapsulates an X509 certificate and provides read-only access to + * its information. + * + * ```js + * const { X509Certificate } = await import('node:crypto'); + * + * const x509 = new X509Certificate('{... pem encoded cert ...}'); + * + * console.log(x509.subject); + * ``` + * @since v15.6.0 + */ + class X509Certificate { + /** + * Will be \`true\` if this is a Certificate Authority (CA) certificate. + * @since v15.6.0 + */ + readonly ca: boolean; + /** + * The SHA-1 fingerprint of this certificate. + * + * Because SHA-1 is cryptographically broken and because the security of SHA-1 is + * significantly worse than that of algorithms that are commonly used to sign + * certificates, consider using `x509.fingerprint256` instead. + * @since v15.6.0 + */ + readonly fingerprint: string; + /** + * The SHA-256 fingerprint of this certificate. + * @since v15.6.0 + */ + readonly fingerprint256: string; + /** + * The SHA-512 fingerprint of this certificate. + * + * Because computing the SHA-256 fingerprint is usually faster and because it is + * only half the size of the SHA-512 fingerprint, `x509.fingerprint256` may be + * a better choice. While SHA-512 presumably provides a higher level of security in + * general, the security of SHA-256 matches that of most algorithms that are + * commonly used to sign certificates. + * @since v17.2.0, v16.14.0 + */ + readonly fingerprint512: string; + /** + * The complete subject of this certificate. + * @since v15.6.0 + */ + readonly subject: string; + /** + * The subject alternative name specified for this certificate. + * + * This is a comma-separated list of subject alternative names. Each entry begins + * with a string identifying the kind of the subject alternative name followed by + * a colon and the value associated with the entry. + * + * Earlier versions of Node.js incorrectly assumed that it is safe to split this + * property at the two-character sequence `', '` (see [CVE-2021-44532](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-44532)). However, + * both malicious and legitimate certificates can contain subject alternative names + * that include this sequence when represented as a string. + * + * After the prefix denoting the type of the entry, the remainder of each entry + * might be enclosed in quotes to indicate that the value is a JSON string literal. + * For backward compatibility, Node.js only uses JSON string literals within this + * property when necessary to avoid ambiguity. Third-party code should be prepared + * to handle both possible entry formats. + * @since v15.6.0 + */ + readonly subjectAltName: string | undefined; + /** + * A textual representation of the certificate's authority information access + * extension. + * + * This is a line feed separated list of access descriptions. Each line begins with + * the access method and the kind of the access location, followed by a colon and + * the value associated with the access location. + * + * After the prefix denoting the access method and the kind of the access location, + * the remainder of each line might be enclosed in quotes to indicate that the + * value is a JSON string literal. For backward compatibility, Node.js only uses + * JSON string literals within this property when necessary to avoid ambiguity. + * Third-party code should be prepared to handle both possible entry formats. + * @since v15.6.0 + */ + readonly infoAccess: string | undefined; + /** + * An array detailing the key usages for this certificate. + * @since v15.6.0 + */ + readonly keyUsage: string[]; + /** + * The issuer identification included in this certificate. + * @since v15.6.0 + */ + readonly issuer: string; + /** + * The issuer certificate or `undefined` if the issuer certificate is not + * available. + * @since v15.9.0 + */ + readonly issuerCertificate?: X509Certificate | undefined; + /** + * The public key `KeyObject` for this certificate. + * @since v15.6.0 + */ + readonly publicKey: KeyObject; + /** + * A `Buffer` containing the DER encoding of this certificate. + * @since v15.6.0 + */ + readonly raw: Buffer; + /** + * The serial number of this certificate. + * + * Serial numbers are assigned by certificate authorities and do not uniquely + * identify certificates. Consider using `x509.fingerprint256` as a unique + * identifier instead. + * @since v15.6.0 + */ + readonly serialNumber: string; + /** + * The date/time from which this certificate is considered valid. + * @since v15.6.0 + */ + readonly validFrom: string; + /** + * The date/time until which this certificate is considered valid. + * @since v15.6.0 + */ + readonly validTo: string; + constructor(buffer: BinaryLike); + /** + * Checks whether the certificate matches the given email address. + * + * If the `'subject'` option is undefined or set to `'default'`, the certificate + * subject is only considered if the subject alternative name extension either does + * not exist or does not contain any email addresses. + * + * If the `'subject'` option is set to `'always'` and if the subject alternative + * name extension either does not exist or does not contain a matching email + * address, the certificate subject is considered. + * + * If the `'subject'` option is set to `'never'`, the certificate subject is never + * considered, even if the certificate contains no subject alternative names. + * @since v15.6.0 + * @return Returns `email` if the certificate matches, `undefined` if it does not. + */ + checkEmail(email: string, options?: Pick): string | undefined; + /** + * Checks whether the certificate matches the given host name. + * + * If the certificate matches the given host name, the matching subject name is + * returned. The returned name might be an exact match (e.g., `foo.example.com`) + * or it might contain wildcards (e.g., `*.example.com`). Because host name + * comparisons are case-insensitive, the returned subject name might also differ + * from the given `name` in capitalization. + * + * If the `'subject'` option is undefined or set to `'default'`, the certificate + * subject is only considered if the subject alternative name extension either does + * not exist or does not contain any DNS names. This behavior is consistent with [RFC 2818](https://www.rfc-editor.org/rfc/rfc2818.txt) ("HTTP Over TLS"). + * + * If the `'subject'` option is set to `'always'` and if the subject alternative + * name extension either does not exist or does not contain a matching DNS name, + * the certificate subject is considered. + * + * If the `'subject'` option is set to `'never'`, the certificate subject is never + * considered, even if the certificate contains no subject alternative names. + * @since v15.6.0 + * @return Returns a subject name that matches `name`, or `undefined` if no subject name matches `name`. + */ + checkHost(name: string, options?: X509CheckOptions): string | undefined; + /** + * Checks whether the certificate matches the given IP address (IPv4 or IPv6). + * + * Only [RFC 5280](https://www.rfc-editor.org/rfc/rfc5280.txt) `iPAddress` subject alternative names are considered, and they + * must match the given `ip` address exactly. Other subject alternative names as + * well as the subject field of the certificate are ignored. + * @since v15.6.0 + * @return Returns `ip` if the certificate matches, `undefined` if it does not. + */ + checkIP(ip: string): string | undefined; + /** + * Checks whether this certificate was issued by the given `otherCert`. + * @since v15.6.0 + */ + checkIssued(otherCert: X509Certificate): boolean; + /** + * Checks whether the public key for this certificate is consistent with + * the given private key. + * @since v15.6.0 + * @param privateKey A private key. + */ + checkPrivateKey(privateKey: KeyObject): boolean; + /** + * There is no standard JSON encoding for X509 certificates. The`toJSON()` method returns a string containing the PEM encoded + * certificate. + * @since v15.6.0 + */ + toJSON(): string; + /** + * Returns information about this certificate using the legacy `certificate object` encoding. + * @since v15.6.0 + */ + toLegacyObject(): PeerCertificate; + /** + * Returns the PEM-encoded certificate. + * @since v15.6.0 + */ + toString(): string; + /** + * Verifies that this certificate was signed by the given public key. + * Does not perform any other validation checks on the certificate. + * @since v15.6.0 + * @param publicKey A public key. + */ + verify(publicKey: KeyObject): boolean; + } + type LargeNumberLike = NodeJS.ArrayBufferView | SharedArrayBuffer | ArrayBuffer | bigint; + interface GeneratePrimeOptions { + add?: LargeNumberLike | undefined; + rem?: LargeNumberLike | undefined; + /** + * @default false + */ + safe?: boolean | undefined; + bigint?: boolean | undefined; + } + interface GeneratePrimeOptionsBigInt extends GeneratePrimeOptions { + bigint: true; + } + interface GeneratePrimeOptionsArrayBuffer extends GeneratePrimeOptions { + bigint?: false | undefined; + } + /** + * Generates a pseudorandom prime of `size` bits. + * + * If `options.safe` is `true`, the prime will be a safe prime -- that is,`(prime - 1) / 2` will also be a prime. + * + * The `options.add` and `options.rem` parameters can be used to enforce additional + * requirements, e.g., for Diffie-Hellman: + * + * * If `options.add` and `options.rem` are both set, the prime will satisfy the + * condition that `prime % add = rem`. + * * If only `options.add` is set and `options.safe` is not `true`, the prime will + * satisfy the condition that `prime % add = 1`. + * * If only `options.add` is set and `options.safe` is set to `true`, the prime + * will instead satisfy the condition that `prime % add = 3`. This is necessary + * because `prime % add = 1` for `options.add > 2` would contradict the condition + * enforced by `options.safe`. + * * `options.rem` is ignored if `options.add` is not given. + * + * Both `options.add` and `options.rem` must be encoded as big-endian sequences + * if given as an `ArrayBuffer`, `SharedArrayBuffer`, `TypedArray`, `Buffer`, or`DataView`. + * + * By default, the prime is encoded as a big-endian sequence of octets + * in an [ArrayBuffer](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer). If the `bigint` option is `true`, then a + * [bigint](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt) is provided. + * @since v15.8.0 + * @param size The size (in bits) of the prime to generate. + */ + function generatePrime(size: number, callback: (err: Error | null, prime: ArrayBuffer) => void): void; + function generatePrime( + size: number, + options: GeneratePrimeOptionsBigInt, + callback: (err: Error | null, prime: bigint) => void, + ): void; + function generatePrime( + size: number, + options: GeneratePrimeOptionsArrayBuffer, + callback: (err: Error | null, prime: ArrayBuffer) => void, + ): void; + function generatePrime( + size: number, + options: GeneratePrimeOptions, + callback: (err: Error | null, prime: ArrayBuffer | bigint) => void, + ): void; + /** + * Generates a pseudorandom prime of `size` bits. + * + * If `options.safe` is `true`, the prime will be a safe prime -- that is,`(prime - 1) / 2` will also be a prime. + * + * The `options.add` and `options.rem` parameters can be used to enforce additional + * requirements, e.g., for Diffie-Hellman: + * + * * If `options.add` and `options.rem` are both set, the prime will satisfy the + * condition that `prime % add = rem`. + * * If only `options.add` is set and `options.safe` is not `true`, the prime will + * satisfy the condition that `prime % add = 1`. + * * If only `options.add` is set and `options.safe` is set to `true`, the prime + * will instead satisfy the condition that `prime % add = 3`. This is necessary + * because `prime % add = 1` for `options.add > 2` would contradict the condition + * enforced by `options.safe`. + * * `options.rem` is ignored if `options.add` is not given. + * + * Both `options.add` and `options.rem` must be encoded as big-endian sequences + * if given as an `ArrayBuffer`, `SharedArrayBuffer`, `TypedArray`, `Buffer`, or`DataView`. + * + * By default, the prime is encoded as a big-endian sequence of octets + * in an [ArrayBuffer](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer). If the `bigint` option is `true`, then a + * [bigint](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt) is provided. + * @since v15.8.0 + * @param size The size (in bits) of the prime to generate. + */ + function generatePrimeSync(size: number): ArrayBuffer; + function generatePrimeSync(size: number, options: GeneratePrimeOptionsBigInt): bigint; + function generatePrimeSync(size: number, options: GeneratePrimeOptionsArrayBuffer): ArrayBuffer; + function generatePrimeSync(size: number, options: GeneratePrimeOptions): ArrayBuffer | bigint; + interface CheckPrimeOptions { + /** + * The number of Miller-Rabin probabilistic primality iterations to perform. + * When the value is 0 (zero), a number of checks is used that yields a false positive rate of at most `2**-64` for random input. + * Care must be used when selecting a number of checks. + * Refer to the OpenSSL documentation for the BN_is_prime_ex function nchecks options for more details. + * + * @default 0 + */ + checks?: number | undefined; + } + /** + * Checks the primality of the `candidate`. + * @since v15.8.0 + * @param candidate A possible prime encoded as a sequence of big endian octets of arbitrary length. + */ + function checkPrime(value: LargeNumberLike, callback: (err: Error | null, result: boolean) => void): void; + function checkPrime( + value: LargeNumberLike, + options: CheckPrimeOptions, + callback: (err: Error | null, result: boolean) => void, + ): void; + /** + * Checks the primality of the `candidate`. + * @since v15.8.0 + * @param candidate A possible prime encoded as a sequence of big endian octets of arbitrary length. + * @return `true` if the candidate is a prime with an error probability less than `0.25 ** options.checks`. + */ + function checkPrimeSync(candidate: LargeNumberLike, options?: CheckPrimeOptions): boolean; + /** + * Load and set the `engine` for some or all OpenSSL functions (selected by flags). + * + * `engine` could be either an id or a path to the engine's shared library. + * + * The optional `flags` argument uses `ENGINE_METHOD_ALL` by default. The `flags`is a bit field taking one of or a mix of the following flags (defined in`crypto.constants`): + * + * * `crypto.constants.ENGINE_METHOD_RSA` + * * `crypto.constants.ENGINE_METHOD_DSA` + * * `crypto.constants.ENGINE_METHOD_DH` + * * `crypto.constants.ENGINE_METHOD_RAND` + * * `crypto.constants.ENGINE_METHOD_EC` + * * `crypto.constants.ENGINE_METHOD_CIPHERS` + * * `crypto.constants.ENGINE_METHOD_DIGESTS` + * * `crypto.constants.ENGINE_METHOD_PKEY_METHS` + * * `crypto.constants.ENGINE_METHOD_PKEY_ASN1_METHS` + * * `crypto.constants.ENGINE_METHOD_ALL` + * * `crypto.constants.ENGINE_METHOD_NONE` + * @since v0.11.11 + * @param flags + */ + function setEngine(engine: string, flags?: number): void; + /** + * A convenient alias for {@link webcrypto.getRandomValues}. This + * implementation is not compliant with the Web Crypto spec, to write + * web-compatible code use {@link webcrypto.getRandomValues} instead. + * @since v17.4.0 + * @return Returns `typedArray`. + */ + function getRandomValues(typedArray: T): T; + /** + * A convenient alias for `crypto.webcrypto.subtle`. + * @since v17.4.0 + */ + const subtle: webcrypto.SubtleCrypto; + /** + * An implementation of the Web Crypto API standard. + * + * See the {@link https://nodejs.org/docs/latest/api/webcrypto.html Web Crypto API documentation} for details. + * @since v15.0.0 + */ + const webcrypto: webcrypto.Crypto; + namespace webcrypto { + type BufferSource = ArrayBufferView | ArrayBuffer; + type KeyFormat = "jwk" | "pkcs8" | "raw" | "spki"; + type KeyType = "private" | "public" | "secret"; + type KeyUsage = + | "decrypt" + | "deriveBits" + | "deriveKey" + | "encrypt" + | "sign" + | "unwrapKey" + | "verify" + | "wrapKey"; + type AlgorithmIdentifier = Algorithm | string; + type HashAlgorithmIdentifier = AlgorithmIdentifier; + type NamedCurve = string; + type BigInteger = Uint8Array; + interface AesCbcParams extends Algorithm { + iv: BufferSource; + } + interface AesCtrParams extends Algorithm { + counter: BufferSource; + length: number; + } + interface AesDerivedKeyParams extends Algorithm { + length: number; + } + interface AesGcmParams extends Algorithm { + additionalData?: BufferSource; + iv: BufferSource; + tagLength?: number; + } + interface AesKeyAlgorithm extends KeyAlgorithm { + length: number; + } + interface AesKeyGenParams extends Algorithm { + length: number; + } + interface Algorithm { + name: string; + } + interface EcKeyAlgorithm extends KeyAlgorithm { + namedCurve: NamedCurve; + } + interface EcKeyGenParams extends Algorithm { + namedCurve: NamedCurve; + } + interface EcKeyImportParams extends Algorithm { + namedCurve: NamedCurve; + } + interface EcdhKeyDeriveParams extends Algorithm { + public: CryptoKey; + } + interface EcdsaParams extends Algorithm { + hash: HashAlgorithmIdentifier; + } + interface Ed448Params extends Algorithm { + context?: BufferSource; + } + interface HkdfParams extends Algorithm { + hash: HashAlgorithmIdentifier; + info: BufferSource; + salt: BufferSource; + } + interface HmacImportParams extends Algorithm { + hash: HashAlgorithmIdentifier; + length?: number; + } + interface HmacKeyAlgorithm extends KeyAlgorithm { + hash: KeyAlgorithm; + length: number; + } + interface HmacKeyGenParams extends Algorithm { + hash: HashAlgorithmIdentifier; + length?: number; + } + interface JsonWebKey { + alg?: string; + crv?: string; + d?: string; + dp?: string; + dq?: string; + e?: string; + ext?: boolean; + k?: string; + key_ops?: string[]; + kty?: string; + n?: string; + oth?: RsaOtherPrimesInfo[]; + p?: string; + q?: string; + qi?: string; + use?: string; + x?: string; + y?: string; + } + interface KeyAlgorithm { + name: string; + } + interface Pbkdf2Params extends Algorithm { + hash: HashAlgorithmIdentifier; + iterations: number; + salt: BufferSource; + } + interface RsaHashedImportParams extends Algorithm { + hash: HashAlgorithmIdentifier; + } + interface RsaHashedKeyAlgorithm extends RsaKeyAlgorithm { + hash: KeyAlgorithm; + } + interface RsaHashedKeyGenParams extends RsaKeyGenParams { + hash: HashAlgorithmIdentifier; + } + interface RsaKeyAlgorithm extends KeyAlgorithm { + modulusLength: number; + publicExponent: BigInteger; + } + interface RsaKeyGenParams extends Algorithm { + modulusLength: number; + publicExponent: BigInteger; + } + interface RsaOaepParams extends Algorithm { + label?: BufferSource; + } + interface RsaOtherPrimesInfo { + d?: string; + r?: string; + t?: string; + } + interface RsaPssParams extends Algorithm { + saltLength: number; + } + /** + * Calling `require('node:crypto').webcrypto` returns an instance of the `Crypto` class. + * `Crypto` is a singleton that provides access to the remainder of the crypto API. + * @since v15.0.0 + */ + interface Crypto { + /** + * Provides access to the `SubtleCrypto` API. + * @since v15.0.0 + */ + readonly subtle: SubtleCrypto; + /** + * Generates cryptographically strong random values. + * The given `typedArray` is filled with random values, and a reference to `typedArray` is returned. + * + * The given `typedArray` must be an integer-based instance of {@link NodeJS.TypedArray}, i.e. `Float32Array` and `Float64Array` are not accepted. + * + * An error will be thrown if the given `typedArray` is larger than 65,536 bytes. + * @since v15.0.0 + */ + getRandomValues>(typedArray: T): T; + /** + * Generates a random {@link https://www.rfc-editor.org/rfc/rfc4122.txt RFC 4122} version 4 UUID. + * The UUID is generated using a cryptographic pseudorandom number generator. + * @since v16.7.0 + */ + randomUUID(): UUID; + CryptoKey: CryptoKeyConstructor; + } + // This constructor throws ILLEGAL_CONSTRUCTOR so it should not be newable. + interface CryptoKeyConstructor { + /** Illegal constructor */ + (_: { readonly _: unique symbol }): never; // Allows instanceof to work but not be callable by the user. + readonly length: 0; + readonly name: "CryptoKey"; + readonly prototype: CryptoKey; + } + /** + * @since v15.0.0 + */ + interface CryptoKey { + /** + * An object detailing the algorithm for which the key can be used along with additional algorithm-specific parameters. + * @since v15.0.0 + */ + readonly algorithm: KeyAlgorithm; + /** + * When `true`, the {@link CryptoKey} can be extracted using either `subtleCrypto.exportKey()` or `subtleCrypto.wrapKey()`. + * @since v15.0.0 + */ + readonly extractable: boolean; + /** + * A string identifying whether the key is a symmetric (`'secret'`) or asymmetric (`'private'` or `'public'`) key. + * @since v15.0.0 + */ + readonly type: KeyType; + /** + * An array of strings identifying the operations for which the key may be used. + * + * The possible usages are: + * - `'encrypt'` - The key may be used to encrypt data. + * - `'decrypt'` - The key may be used to decrypt data. + * - `'sign'` - The key may be used to generate digital signatures. + * - `'verify'` - The key may be used to verify digital signatures. + * - `'deriveKey'` - The key may be used to derive a new key. + * - `'deriveBits'` - The key may be used to derive bits. + * - `'wrapKey'` - The key may be used to wrap another key. + * - `'unwrapKey'` - The key may be used to unwrap another key. + * + * Valid key usages depend on the key algorithm (identified by `cryptokey.algorithm.name`). + * @since v15.0.0 + */ + readonly usages: KeyUsage[]; + } + /** + * The `CryptoKeyPair` is a simple dictionary object with `publicKey` and `privateKey` properties, representing an asymmetric key pair. + * @since v15.0.0 + */ + interface CryptoKeyPair { + /** + * A {@link CryptoKey} whose type will be `'private'`. + * @since v15.0.0 + */ + privateKey: CryptoKey; + /** + * A {@link CryptoKey} whose type will be `'public'`. + * @since v15.0.0 + */ + publicKey: CryptoKey; + } + /** + * @since v15.0.0 + */ + interface SubtleCrypto { + /** + * Using the method and parameters specified in `algorithm` and the keying material provided by `key`, + * `subtle.decrypt()` attempts to decipher the provided `data`. If successful, + * the returned promise will be resolved with an `` containing the plaintext result. + * + * The algorithms currently supported include: + * + * - `'RSA-OAEP'` + * - `'AES-CTR'` + * - `'AES-CBC'` + * - `'AES-GCM'` + * @since v15.0.0 + */ + decrypt( + algorithm: AlgorithmIdentifier | RsaOaepParams | AesCtrParams | AesCbcParams | AesGcmParams, + key: CryptoKey, + data: BufferSource, + ): Promise; + /** + * Using the method and parameters specified in `algorithm` and the keying material provided by `baseKey`, + * `subtle.deriveBits()` attempts to generate `length` bits. + * The Node.js implementation requires that when `length` is a number it must be multiple of `8`. + * When `length` is `null` the maximum number of bits for a given algorithm is generated. This is allowed + * for the `'ECDH'`, `'X25519'`, and `'X448'` algorithms. + * If successful, the returned promise will be resolved with an `` containing the generated data. + * + * The algorithms currently supported include: + * + * - `'ECDH'` + * - `'X25519'` + * - `'X448'` + * - `'HKDF'` + * - `'PBKDF2'` + * @since v15.0.0 + */ + deriveBits(algorithm: EcdhKeyDeriveParams, baseKey: CryptoKey, length: number | null): Promise; + deriveBits( + algorithm: AlgorithmIdentifier | HkdfParams | Pbkdf2Params, + baseKey: CryptoKey, + length: number, + ): Promise; + /** + * Using the method and parameters specified in `algorithm`, and the keying material provided by `baseKey`, + * `subtle.deriveKey()` attempts to generate a new ` based on the method and parameters in `derivedKeyAlgorithm`. + * + * Calling `subtle.deriveKey()` is equivalent to calling `subtle.deriveBits()` to generate raw keying material, + * then passing the result into the `subtle.importKey()` method using the `deriveKeyAlgorithm`, `extractable`, and `keyUsages` parameters as input. + * + * The algorithms currently supported include: + * + * - `'ECDH'` + * - `'X25519'` + * - `'X448'` + * - `'HKDF'` + * - `'PBKDF2'` + * @param keyUsages See {@link https://nodejs.org/docs/latest/api/webcrypto.html#cryptokeyusages Key usages}. + * @since v15.0.0 + */ + deriveKey( + algorithm: AlgorithmIdentifier | EcdhKeyDeriveParams | HkdfParams | Pbkdf2Params, + baseKey: CryptoKey, + derivedKeyAlgorithm: + | AlgorithmIdentifier + | AesDerivedKeyParams + | HmacImportParams + | HkdfParams + | Pbkdf2Params, + extractable: boolean, + keyUsages: ReadonlyArray, + ): Promise; + /** + * Using the method identified by `algorithm`, `subtle.digest()` attempts to generate a digest of `data`. + * If successful, the returned promise is resolved with an `` containing the computed digest. + * + * If `algorithm` is provided as a ``, it must be one of: + * + * - `'SHA-1'` + * - `'SHA-256'` + * - `'SHA-384'` + * - `'SHA-512'` + * + * If `algorithm` is provided as an ``, it must have a `name` property whose value is one of the above. + * @since v15.0.0 + */ + digest(algorithm: AlgorithmIdentifier, data: BufferSource): Promise; + /** + * Using the method and parameters specified by `algorithm` and the keying material provided by `key`, + * `subtle.encrypt()` attempts to encipher `data`. If successful, + * the returned promise is resolved with an `` containing the encrypted result. + * + * The algorithms currently supported include: + * + * - `'RSA-OAEP'` + * - `'AES-CTR'` + * - `'AES-CBC'` + * - `'AES-GCM'` + * @since v15.0.0 + */ + encrypt( + algorithm: AlgorithmIdentifier | RsaOaepParams | AesCtrParams | AesCbcParams | AesGcmParams, + key: CryptoKey, + data: BufferSource, + ): Promise; + /** + * Exports the given key into the specified format, if supported. + * + * If the `` is not extractable, the returned promise will reject. + * + * When `format` is either `'pkcs8'` or `'spki'` and the export is successful, + * the returned promise will be resolved with an `` containing the exported key data. + * + * When `format` is `'jwk'` and the export is successful, the returned promise will be resolved with a + * JavaScript object conforming to the {@link https://tools.ietf.org/html/rfc7517 JSON Web Key} specification. + * @param format Must be one of `'raw'`, `'pkcs8'`, `'spki'`, or `'jwk'`. + * @returns `` containing ``. + * @since v15.0.0 + */ + exportKey(format: "jwk", key: CryptoKey): Promise; + exportKey(format: Exclude, key: CryptoKey): Promise; + /** + * Using the method and parameters provided in `algorithm`, + * `subtle.generateKey()` attempts to generate new keying material. + * Depending the method used, the method may generate either a single `` or a ``. + * + * The `` (public and private key) generating algorithms supported include: + * + * - `'RSASSA-PKCS1-v1_5'` + * - `'RSA-PSS'` + * - `'RSA-OAEP'` + * - `'ECDSA'` + * - `'Ed25519'` + * - `'Ed448'` + * - `'ECDH'` + * - `'X25519'` + * - `'X448'` + * The `` (secret key) generating algorithms supported include: + * + * - `'HMAC'` + * - `'AES-CTR'` + * - `'AES-CBC'` + * - `'AES-GCM'` + * - `'AES-KW'` + * @param keyUsages See {@link https://nodejs.org/docs/latest/api/webcrypto.html#cryptokeyusages Key usages}. + * @since v15.0.0 + */ + generateKey( + algorithm: RsaHashedKeyGenParams | EcKeyGenParams, + extractable: boolean, + keyUsages: ReadonlyArray, + ): Promise; + generateKey( + algorithm: AesKeyGenParams | HmacKeyGenParams | Pbkdf2Params, + extractable: boolean, + keyUsages: ReadonlyArray, + ): Promise; + generateKey( + algorithm: AlgorithmIdentifier, + extractable: boolean, + keyUsages: KeyUsage[], + ): Promise; + /** + * The `subtle.importKey()` method attempts to interpret the provided `keyData` as the given `format` + * to create a `` instance using the provided `algorithm`, `extractable`, and `keyUsages` arguments. + * If the import is successful, the returned promise will be resolved with the created ``. + * + * If importing a `'PBKDF2'` key, `extractable` must be `false`. + * @param format Must be one of `'raw'`, `'pkcs8'`, `'spki'`, or `'jwk'`. + * @param keyUsages See {@link https://nodejs.org/docs/latest/api/webcrypto.html#cryptokeyusages Key usages}. + * @since v15.0.0 + */ + importKey( + format: "jwk", + keyData: JsonWebKey, + algorithm: + | AlgorithmIdentifier + | RsaHashedImportParams + | EcKeyImportParams + | HmacImportParams + | AesKeyAlgorithm, + extractable: boolean, + keyUsages: ReadonlyArray, + ): Promise; + importKey( + format: Exclude, + keyData: BufferSource, + algorithm: + | AlgorithmIdentifier + | RsaHashedImportParams + | EcKeyImportParams + | HmacImportParams + | AesKeyAlgorithm, + extractable: boolean, + keyUsages: KeyUsage[], + ): Promise; + /** + * Using the method and parameters given by `algorithm` and the keying material provided by `key`, + * `subtle.sign()` attempts to generate a cryptographic signature of `data`. If successful, + * the returned promise is resolved with an `` containing the generated signature. + * + * The algorithms currently supported include: + * + * - `'RSASSA-PKCS1-v1_5'` + * - `'RSA-PSS'` + * - `'ECDSA'` + * - `'Ed25519'` + * - `'Ed448'` + * - `'HMAC'` + * @since v15.0.0 + */ + sign( + algorithm: AlgorithmIdentifier | RsaPssParams | EcdsaParams | Ed448Params, + key: CryptoKey, + data: BufferSource, + ): Promise; + /** + * In cryptography, "wrapping a key" refers to exporting and then encrypting the keying material. + * The `subtle.unwrapKey()` method attempts to decrypt a wrapped key and create a `` instance. + * It is equivalent to calling `subtle.decrypt()` first on the encrypted key data (using the `wrappedKey`, `unwrapAlgo`, and `unwrappingKey` arguments as input) + * then passing the results in to the `subtle.importKey()` method using the `unwrappedKeyAlgo`, `extractable`, and `keyUsages` arguments as inputs. + * If successful, the returned promise is resolved with a `` object. + * + * The wrapping algorithms currently supported include: + * + * - `'RSA-OAEP'` + * - `'AES-CTR'` + * - `'AES-CBC'` + * - `'AES-GCM'` + * - `'AES-KW'` + * + * The unwrapped key algorithms supported include: + * + * - `'RSASSA-PKCS1-v1_5'` + * - `'RSA-PSS'` + * - `'RSA-OAEP'` + * - `'ECDSA'` + * - `'Ed25519'` + * - `'Ed448'` + * - `'ECDH'` + * - `'X25519'` + * - `'X448'` + * - `'HMAC'` + * - `'AES-CTR'` + * - `'AES-CBC'` + * - `'AES-GCM'` + * - `'AES-KW'` + * @param format Must be one of `'raw'`, `'pkcs8'`, `'spki'`, or `'jwk'`. + * @param keyUsages See {@link https://nodejs.org/docs/latest/api/webcrypto.html#cryptokeyusages Key usages}. + * @since v15.0.0 + */ + unwrapKey( + format: KeyFormat, + wrappedKey: BufferSource, + unwrappingKey: CryptoKey, + unwrapAlgorithm: AlgorithmIdentifier | RsaOaepParams | AesCtrParams | AesCbcParams | AesGcmParams, + unwrappedKeyAlgorithm: + | AlgorithmIdentifier + | RsaHashedImportParams + | EcKeyImportParams + | HmacImportParams + | AesKeyAlgorithm, + extractable: boolean, + keyUsages: KeyUsage[], + ): Promise; + /** + * Using the method and parameters given in `algorithm` and the keying material provided by `key`, + * `subtle.verify()` attempts to verify that `signature` is a valid cryptographic signature of `data`. + * The returned promise is resolved with either `true` or `false`. + * + * The algorithms currently supported include: + * + * - `'RSASSA-PKCS1-v1_5'` + * - `'RSA-PSS'` + * - `'ECDSA'` + * - `'Ed25519'` + * - `'Ed448'` + * - `'HMAC'` + * @since v15.0.0 + */ + verify( + algorithm: AlgorithmIdentifier | RsaPssParams | EcdsaParams | Ed448Params, + key: CryptoKey, + signature: BufferSource, + data: BufferSource, + ): Promise; + /** + * In cryptography, "wrapping a key" refers to exporting and then encrypting the keying material. + * The `subtle.wrapKey()` method exports the keying material into the format identified by `format`, + * then encrypts it using the method and parameters specified by `wrapAlgo` and the keying material provided by `wrappingKey`. + * It is the equivalent to calling `subtle.exportKey()` using `format` and `key` as the arguments, + * then passing the result to the `subtle.encrypt()` method using `wrappingKey` and `wrapAlgo` as inputs. + * If successful, the returned promise will be resolved with an `` containing the encrypted key data. + * + * The wrapping algorithms currently supported include: + * + * - `'RSA-OAEP'` + * - `'AES-CTR'` + * - `'AES-CBC'` + * - `'AES-GCM'` + * - `'AES-KW'` + * @param format Must be one of `'raw'`, `'pkcs8'`, `'spki'`, or `'jwk'`. + * @since v15.0.0 + */ + wrapKey( + format: KeyFormat, + key: CryptoKey, + wrappingKey: CryptoKey, + wrapAlgorithm: AlgorithmIdentifier | RsaOaepParams | AesCtrParams | AesCbcParams | AesGcmParams, + ): Promise; + } + } +} +declare module "node:crypto" { + export * from "crypto"; +} diff --git a/Url-Shortner/node_modules/@types/node/dgram.d.ts b/Url-Shortner/node_modules/@types/node/dgram.d.ts new file mode 100644 index 0000000..79cfcd4 --- /dev/null +++ b/Url-Shortner/node_modules/@types/node/dgram.d.ts @@ -0,0 +1,586 @@ +/** + * The `node:dgram` module provides an implementation of UDP datagram sockets. + * + * ```js + * import dgram from 'node:dgram'; + * + * const server = dgram.createSocket('udp4'); + * + * server.on('error', (err) => { + * console.error(`server error:\n${err.stack}`); + * server.close(); + * }); + * + * server.on('message', (msg, rinfo) => { + * console.log(`server got: ${msg} from ${rinfo.address}:${rinfo.port}`); + * }); + * + * server.on('listening', () => { + * const address = server.address(); + * console.log(`server listening ${address.address}:${address.port}`); + * }); + * + * server.bind(41234); + * // Prints: server listening 0.0.0.0:41234 + * ``` + * @see [source](https://github.com/nodejs/node/blob/v20.2.0/lib/dgram.js) + */ +declare module "dgram" { + import { AddressInfo } from "node:net"; + import * as dns from "node:dns"; + import { Abortable, EventEmitter } from "node:events"; + interface RemoteInfo { + address: string; + family: "IPv4" | "IPv6"; + port: number; + size: number; + } + interface BindOptions { + port?: number | undefined; + address?: string | undefined; + exclusive?: boolean | undefined; + fd?: number | undefined; + } + type SocketType = "udp4" | "udp6"; + interface SocketOptions extends Abortable { + type: SocketType; + reuseAddr?: boolean | undefined; + /** + * @default false + */ + ipv6Only?: boolean | undefined; + recvBufferSize?: number | undefined; + sendBufferSize?: number | undefined; + lookup?: + | (( + hostname: string, + options: dns.LookupOneOptions, + callback: (err: NodeJS.ErrnoException | null, address: string, family: number) => void, + ) => void) + | undefined; + } + /** + * Creates a `dgram.Socket` object. Once the socket is created, calling `socket.bind()` will instruct the socket to begin listening for datagram + * messages. When `address` and `port` are not passed to `socket.bind()` the + * method will bind the socket to the "all interfaces" address on a random port + * (it does the right thing for both `udp4` and `udp6` sockets). The bound address + * and port can be retrieved using `socket.address().address` and `socket.address().port`. + * + * If the `signal` option is enabled, calling `.abort()` on the corresponding`AbortController` is similar to calling `.close()` on the socket: + * + * ```js + * const controller = new AbortController(); + * const { signal } = controller; + * const server = dgram.createSocket({ type: 'udp4', signal }); + * server.on('message', (msg, rinfo) => { + * console.log(`server got: ${msg} from ${rinfo.address}:${rinfo.port}`); + * }); + * // Later, when you want to close the server. + * controller.abort(); + * ``` + * @since v0.11.13 + * @param options Available options are: + * @param callback Attached as a listener for `'message'` events. Optional. + */ + function createSocket(type: SocketType, callback?: (msg: Buffer, rinfo: RemoteInfo) => void): Socket; + function createSocket(options: SocketOptions, callback?: (msg: Buffer, rinfo: RemoteInfo) => void): Socket; + /** + * Encapsulates the datagram functionality. + * + * New instances of `dgram.Socket` are created using {@link createSocket}. + * The `new` keyword is not to be used to create `dgram.Socket` instances. + * @since v0.1.99 + */ + class Socket extends EventEmitter { + /** + * Tells the kernel to join a multicast group at the given `multicastAddress` and`multicastInterface` using the `IP_ADD_MEMBERSHIP` socket option. If the`multicastInterface` argument is not + * specified, the operating system will choose + * one interface and will add membership to it. To add membership to every + * available interface, call `addMembership` multiple times, once per interface. + * + * When called on an unbound socket, this method will implicitly bind to a random + * port, listening on all interfaces. + * + * When sharing a UDP socket across multiple `cluster` workers, the`socket.addMembership()` function must be called only once or an`EADDRINUSE` error will occur: + * + * ```js + * import cluster from 'node:cluster'; + * import dgram from 'node:dgram'; + * + * if (cluster.isPrimary) { + * cluster.fork(); // Works ok. + * cluster.fork(); // Fails with EADDRINUSE. + * } else { + * const s = dgram.createSocket('udp4'); + * s.bind(1234, () => { + * s.addMembership('224.0.0.114'); + * }); + * } + * ``` + * @since v0.6.9 + */ + addMembership(multicastAddress: string, multicastInterface?: string): void; + /** + * Returns an object containing the address information for a socket. + * For UDP sockets, this object will contain `address`, `family`, and `port`properties. + * + * This method throws `EBADF` if called on an unbound socket. + * @since v0.1.99 + */ + address(): AddressInfo; + /** + * For UDP sockets, causes the `dgram.Socket` to listen for datagram + * messages on a named `port` and optional `address`. If `port` is not + * specified or is `0`, the operating system will attempt to bind to a + * random port. If `address` is not specified, the operating system will + * attempt to listen on all addresses. Once binding is complete, a`'listening'` event is emitted and the optional `callback` function is + * called. + * + * Specifying both a `'listening'` event listener and passing a`callback` to the `socket.bind()` method is not harmful but not very + * useful. + * + * A bound datagram socket keeps the Node.js process running to receive + * datagram messages. + * + * If binding fails, an `'error'` event is generated. In rare case (e.g. + * attempting to bind with a closed socket), an `Error` may be thrown. + * + * Example of a UDP server listening on port 41234: + * + * ```js + * import dgram from 'node:dgram'; + * + * const server = dgram.createSocket('udp4'); + * + * server.on('error', (err) => { + * console.error(`server error:\n${err.stack}`); + * server.close(); + * }); + * + * server.on('message', (msg, rinfo) => { + * console.log(`server got: ${msg} from ${rinfo.address}:${rinfo.port}`); + * }); + * + * server.on('listening', () => { + * const address = server.address(); + * console.log(`server listening ${address.address}:${address.port}`); + * }); + * + * server.bind(41234); + * // Prints: server listening 0.0.0.0:41234 + * ``` + * @since v0.1.99 + * @param callback with no parameters. Called when binding is complete. + */ + bind(port?: number, address?: string, callback?: () => void): this; + bind(port?: number, callback?: () => void): this; + bind(callback?: () => void): this; + bind(options: BindOptions, callback?: () => void): this; + /** + * Close the underlying socket and stop listening for data on it. If a callback is + * provided, it is added as a listener for the `'close'` event. + * @since v0.1.99 + * @param callback Called when the socket has been closed. + */ + close(callback?: () => void): this; + /** + * Associates the `dgram.Socket` to a remote address and port. Every + * message sent by this handle is automatically sent to that destination. Also, + * the socket will only receive messages from that remote peer. + * Trying to call `connect()` on an already connected socket will result + * in an `ERR_SOCKET_DGRAM_IS_CONNECTED` exception. If `address` is not + * provided, `'127.0.0.1'` (for `udp4` sockets) or `'::1'` (for `udp6` sockets) + * will be used by default. Once the connection is complete, a `'connect'` event + * is emitted and the optional `callback` function is called. In case of failure, + * the `callback` is called or, failing this, an `'error'` event is emitted. + * @since v12.0.0 + * @param callback Called when the connection is completed or on error. + */ + connect(port: number, address?: string, callback?: () => void): void; + connect(port: number, callback: () => void): void; + /** + * A synchronous function that disassociates a connected `dgram.Socket` from + * its remote address. Trying to call `disconnect()` on an unbound or already + * disconnected socket will result in an `ERR_SOCKET_DGRAM_NOT_CONNECTED` exception. + * @since v12.0.0 + */ + disconnect(): void; + /** + * Instructs the kernel to leave a multicast group at `multicastAddress` using the`IP_DROP_MEMBERSHIP` socket option. This method is automatically called by the + * kernel when the socket is closed or the process terminates, so most apps will + * never have reason to call this. + * + * If `multicastInterface` is not specified, the operating system will attempt to + * drop membership on all valid interfaces. + * @since v0.6.9 + */ + dropMembership(multicastAddress: string, multicastInterface?: string): void; + /** + * This method throws `ERR_SOCKET_BUFFER_SIZE` if called on an unbound socket. + * @since v8.7.0 + * @return the `SO_RCVBUF` socket receive buffer size in bytes. + */ + getRecvBufferSize(): number; + /** + * This method throws `ERR_SOCKET_BUFFER_SIZE` if called on an unbound socket. + * @since v8.7.0 + * @return the `SO_SNDBUF` socket send buffer size in bytes. + */ + getSendBufferSize(): number; + /** + * By default, binding a socket will cause it to block the Node.js process from + * exiting as long as the socket is open. The `socket.unref()` method can be used + * to exclude the socket from the reference counting that keeps the Node.js + * process active. The `socket.ref()` method adds the socket back to the reference + * counting and restores the default behavior. + * + * Calling `socket.ref()` multiples times will have no additional effect. + * + * The `socket.ref()` method returns a reference to the socket so calls can be + * chained. + * @since v0.9.1 + */ + ref(): this; + /** + * Returns an object containing the `address`, `family`, and `port` of the remote + * endpoint. This method throws an `ERR_SOCKET_DGRAM_NOT_CONNECTED` exception + * if the socket is not connected. + * @since v12.0.0 + */ + remoteAddress(): AddressInfo; + /** + * Broadcasts a datagram on the socket. + * For connectionless sockets, the destination `port` and `address` must be + * specified. Connected sockets, on the other hand, will use their associated + * remote endpoint, so the `port` and `address` arguments must not be set. + * + * The `msg` argument contains the message to be sent. + * Depending on its type, different behavior can apply. If `msg` is a `Buffer`, + * any `TypedArray` or a `DataView`, + * the `offset` and `length` specify the offset within the `Buffer` where the + * message begins and the number of bytes in the message, respectively. + * If `msg` is a `String`, then it is automatically converted to a `Buffer`with `'utf8'` encoding. With messages that + * contain multi-byte characters, `offset` and `length` will be calculated with + * respect to `byte length` and not the character position. + * If `msg` is an array, `offset` and `length` must not be specified. + * + * The `address` argument is a string. If the value of `address` is a host name, + * DNS will be used to resolve the address of the host. If `address` is not + * provided or otherwise nullish, `'127.0.0.1'` (for `udp4` sockets) or `'::1'`(for `udp6` sockets) will be used by default. + * + * If the socket has not been previously bound with a call to `bind`, the socket + * is assigned a random port number and is bound to the "all interfaces" address + * (`'0.0.0.0'` for `udp4` sockets, `'::0'` for `udp6` sockets.) + * + * An optional `callback` function may be specified to as a way of reporting + * DNS errors or for determining when it is safe to reuse the `buf` object. + * DNS lookups delay the time to send for at least one tick of the + * Node.js event loop. + * + * The only way to know for sure that the datagram has been sent is by using a`callback`. If an error occurs and a `callback` is given, the error will be + * passed as the first argument to the `callback`. If a `callback` is not given, + * the error is emitted as an `'error'` event on the `socket` object. + * + * Offset and length are optional but both _must_ be set if either are used. + * They are supported only when the first argument is a `Buffer`, a `TypedArray`, + * or a `DataView`. + * + * This method throws `ERR_SOCKET_BAD_PORT` if called on an unbound socket. + * + * Example of sending a UDP packet to a port on `localhost`; + * + * ```js + * import dgram from 'node:dgram'; + * import { Buffer } from 'node:buffer'; + * + * const message = Buffer.from('Some bytes'); + * const client = dgram.createSocket('udp4'); + * client.send(message, 41234, 'localhost', (err) => { + * client.close(); + * }); + * ``` + * + * Example of sending a UDP packet composed of multiple buffers to a port on`127.0.0.1`; + * + * ```js + * import dgram from 'node:dgram'; + * import { Buffer } from 'node:buffer'; + * + * const buf1 = Buffer.from('Some '); + * const buf2 = Buffer.from('bytes'); + * const client = dgram.createSocket('udp4'); + * client.send([buf1, buf2], 41234, (err) => { + * client.close(); + * }); + * ``` + * + * Sending multiple buffers might be faster or slower depending on the + * application and operating system. Run benchmarks to + * determine the optimal strategy on a case-by-case basis. Generally speaking, + * however, sending multiple buffers is faster. + * + * Example of sending a UDP packet using a socket connected to a port on`localhost`: + * + * ```js + * import dgram from 'node:dgram'; + * import { Buffer } from 'node:buffer'; + * + * const message = Buffer.from('Some bytes'); + * const client = dgram.createSocket('udp4'); + * client.connect(41234, 'localhost', (err) => { + * client.send(message, (err) => { + * client.close(); + * }); + * }); + * ``` + * @since v0.1.99 + * @param msg Message to be sent. + * @param offset Offset in the buffer where the message starts. + * @param length Number of bytes in the message. + * @param port Destination port. + * @param address Destination host name or IP address. + * @param callback Called when the message has been sent. + */ + send( + msg: string | Uint8Array | ReadonlyArray, + port?: number, + address?: string, + callback?: (error: Error | null, bytes: number) => void, + ): void; + send( + msg: string | Uint8Array | ReadonlyArray, + port?: number, + callback?: (error: Error | null, bytes: number) => void, + ): void; + send( + msg: string | Uint8Array | ReadonlyArray, + callback?: (error: Error | null, bytes: number) => void, + ): void; + send( + msg: string | Uint8Array, + offset: number, + length: number, + port?: number, + address?: string, + callback?: (error: Error | null, bytes: number) => void, + ): void; + send( + msg: string | Uint8Array, + offset: number, + length: number, + port?: number, + callback?: (error: Error | null, bytes: number) => void, + ): void; + send( + msg: string | Uint8Array, + offset: number, + length: number, + callback?: (error: Error | null, bytes: number) => void, + ): void; + /** + * Sets or clears the `SO_BROADCAST` socket option. When set to `true`, UDP + * packets may be sent to a local interface's broadcast address. + * + * This method throws `EBADF` if called on an unbound socket. + * @since v0.6.9 + */ + setBroadcast(flag: boolean): void; + /** + * _All references to scope in this section are referring to [IPv6 Zone Indices](https://en.wikipedia.org/wiki/IPv6_address#Scoped_literal_IPv6_addresses), which are defined by [RFC + * 4007](https://tools.ietf.org/html/rfc4007). In string form, an IP_ + * _with a scope index is written as `'IP%scope'` where scope is an interface name_ + * _or interface number._ + * + * Sets the default outgoing multicast interface of the socket to a chosen + * interface or back to system interface selection. The `multicastInterface` must + * be a valid string representation of an IP from the socket's family. + * + * For IPv4 sockets, this should be the IP configured for the desired physical + * interface. All packets sent to multicast on the socket will be sent on the + * interface determined by the most recent successful use of this call. + * + * For IPv6 sockets, `multicastInterface` should include a scope to indicate the + * interface as in the examples that follow. In IPv6, individual `send` calls can + * also use explicit scope in addresses, so only packets sent to a multicast + * address without specifying an explicit scope are affected by the most recent + * successful use of this call. + * + * This method throws `EBADF` if called on an unbound socket. + * + * #### Example: IPv6 outgoing multicast interface + * + * On most systems, where scope format uses the interface name: + * + * ```js + * const socket = dgram.createSocket('udp6'); + * + * socket.bind(1234, () => { + * socket.setMulticastInterface('::%eth1'); + * }); + * ``` + * + * On Windows, where scope format uses an interface number: + * + * ```js + * const socket = dgram.createSocket('udp6'); + * + * socket.bind(1234, () => { + * socket.setMulticastInterface('::%2'); + * }); + * ``` + * + * #### Example: IPv4 outgoing multicast interface + * + * All systems use an IP of the host on the desired physical interface: + * + * ```js + * const socket = dgram.createSocket('udp4'); + * + * socket.bind(1234, () => { + * socket.setMulticastInterface('10.0.0.2'); + * }); + * ``` + * @since v8.6.0 + */ + setMulticastInterface(multicastInterface: string): void; + /** + * Sets or clears the `IP_MULTICAST_LOOP` socket option. When set to `true`, + * multicast packets will also be received on the local interface. + * + * This method throws `EBADF` if called on an unbound socket. + * @since v0.3.8 + */ + setMulticastLoopback(flag: boolean): boolean; + /** + * Sets the `IP_MULTICAST_TTL` socket option. While TTL generally stands for + * "Time to Live", in this context it specifies the number of IP hops that a + * packet is allowed to travel through, specifically for multicast traffic. Each + * router or gateway that forwards a packet decrements the TTL. If the TTL is + * decremented to 0 by a router, it will not be forwarded. + * + * The `ttl` argument may be between 0 and 255\. The default on most systems is `1`. + * + * This method throws `EBADF` if called on an unbound socket. + * @since v0.3.8 + */ + setMulticastTTL(ttl: number): number; + /** + * Sets the `SO_RCVBUF` socket option. Sets the maximum socket receive buffer + * in bytes. + * + * This method throws `ERR_SOCKET_BUFFER_SIZE` if called on an unbound socket. + * @since v8.7.0 + */ + setRecvBufferSize(size: number): void; + /** + * Sets the `SO_SNDBUF` socket option. Sets the maximum socket send buffer + * in bytes. + * + * This method throws `ERR_SOCKET_BUFFER_SIZE` if called on an unbound socket. + * @since v8.7.0 + */ + setSendBufferSize(size: number): void; + /** + * Sets the `IP_TTL` socket option. While TTL generally stands for "Time to Live", + * in this context it specifies the number of IP hops that a packet is allowed to + * travel through. Each router or gateway that forwards a packet decrements the + * TTL. If the TTL is decremented to 0 by a router, it will not be forwarded. + * Changing TTL values is typically done for network probes or when multicasting. + * + * The `ttl` argument may be between 1 and 255\. The default on most systems + * is 64. + * + * This method throws `EBADF` if called on an unbound socket. + * @since v0.1.101 + */ + setTTL(ttl: number): number; + /** + * By default, binding a socket will cause it to block the Node.js process from + * exiting as long as the socket is open. The `socket.unref()` method can be used + * to exclude the socket from the reference counting that keeps the Node.js + * process active, allowing the process to exit even if the socket is still + * listening. + * + * Calling `socket.unref()` multiple times will have no addition effect. + * + * The `socket.unref()` method returns a reference to the socket so calls can be + * chained. + * @since v0.9.1 + */ + unref(): this; + /** + * Tells the kernel to join a source-specific multicast channel at the given`sourceAddress` and `groupAddress`, using the `multicastInterface` with the`IP_ADD_SOURCE_MEMBERSHIP` socket + * option. If the `multicastInterface` argument + * is not specified, the operating system will choose one interface and will add + * membership to it. To add membership to every available interface, call`socket.addSourceSpecificMembership()` multiple times, once per interface. + * + * When called on an unbound socket, this method will implicitly bind to a random + * port, listening on all interfaces. + * @since v13.1.0, v12.16.0 + */ + addSourceSpecificMembership(sourceAddress: string, groupAddress: string, multicastInterface?: string): void; + /** + * Instructs the kernel to leave a source-specific multicast channel at the given`sourceAddress` and `groupAddress` using the `IP_DROP_SOURCE_MEMBERSHIP`socket option. This method is + * automatically called by the kernel when the + * socket is closed or the process terminates, so most apps will never have + * reason to call this. + * + * If `multicastInterface` is not specified, the operating system will attempt to + * drop membership on all valid interfaces. + * @since v13.1.0, v12.16.0 + */ + dropSourceSpecificMembership(sourceAddress: string, groupAddress: string, multicastInterface?: string): void; + /** + * events.EventEmitter + * 1. close + * 2. connect + * 3. error + * 4. listening + * 5. message + */ + addListener(event: string, listener: (...args: any[]) => void): this; + addListener(event: "close", listener: () => void): this; + addListener(event: "connect", listener: () => void): this; + addListener(event: "error", listener: (err: Error) => void): this; + addListener(event: "listening", listener: () => void): this; + addListener(event: "message", listener: (msg: Buffer, rinfo: RemoteInfo) => void): this; + emit(event: string | symbol, ...args: any[]): boolean; + emit(event: "close"): boolean; + emit(event: "connect"): boolean; + emit(event: "error", err: Error): boolean; + emit(event: "listening"): boolean; + emit(event: "message", msg: Buffer, rinfo: RemoteInfo): boolean; + on(event: string, listener: (...args: any[]) => void): this; + on(event: "close", listener: () => void): this; + on(event: "connect", listener: () => void): this; + on(event: "error", listener: (err: Error) => void): this; + on(event: "listening", listener: () => void): this; + on(event: "message", listener: (msg: Buffer, rinfo: RemoteInfo) => void): this; + once(event: string, listener: (...args: any[]) => void): this; + once(event: "close", listener: () => void): this; + once(event: "connect", listener: () => void): this; + once(event: "error", listener: (err: Error) => void): this; + once(event: "listening", listener: () => void): this; + once(event: "message", listener: (msg: Buffer, rinfo: RemoteInfo) => void): this; + prependListener(event: string, listener: (...args: any[]) => void): this; + prependListener(event: "close", listener: () => void): this; + prependListener(event: "connect", listener: () => void): this; + prependListener(event: "error", listener: (err: Error) => void): this; + prependListener(event: "listening", listener: () => void): this; + prependListener(event: "message", listener: (msg: Buffer, rinfo: RemoteInfo) => void): this; + prependOnceListener(event: string, listener: (...args: any[]) => void): this; + prependOnceListener(event: "close", listener: () => void): this; + prependOnceListener(event: "connect", listener: () => void): this; + prependOnceListener(event: "error", listener: (err: Error) => void): this; + prependOnceListener(event: "listening", listener: () => void): this; + prependOnceListener(event: "message", listener: (msg: Buffer, rinfo: RemoteInfo) => void): this; + /** + * Calls `socket.close()` and returns a promise that fulfills when the socket has closed. + * @since v20.5.0 + */ + [Symbol.asyncDispose](): Promise; + } +} +declare module "node:dgram" { + export * from "dgram"; +} diff --git a/Url-Shortner/node_modules/@types/node/diagnostics_channel.d.ts b/Url-Shortner/node_modules/@types/node/diagnostics_channel.d.ts new file mode 100644 index 0000000..b02f591 --- /dev/null +++ b/Url-Shortner/node_modules/@types/node/diagnostics_channel.d.ts @@ -0,0 +1,191 @@ +/** + * The `node:diagnostics_channel` module provides an API to create named channels + * to report arbitrary message data for diagnostics purposes. + * + * It can be accessed using: + * + * ```js + * import diagnostics_channel from 'node:diagnostics_channel'; + * ``` + * + * It is intended that a module writer wanting to report diagnostics messages + * will create one or many top-level channels to report messages through. + * Channels may also be acquired at runtime but it is not encouraged + * due to the additional overhead of doing so. Channels may be exported for + * convenience, but as long as the name is known it can be acquired anywhere. + * + * If you intend for your module to produce diagnostics data for others to + * consume it is recommended that you include documentation of what named + * channels are used along with the shape of the message data. Channel names + * should generally include the module name to avoid collisions with data from + * other modules. + * @since v15.1.0, v14.17.0 + * @see [source](https://github.com/nodejs/node/blob/v20.2.0/lib/diagnostics_channel.js) + */ +declare module "diagnostics_channel" { + /** + * Check if there are active subscribers to the named channel. This is helpful if + * the message you want to send might be expensive to prepare. + * + * This API is optional but helpful when trying to publish messages from very + * performance-sensitive code. + * + * ```js + * import diagnostics_channel from 'node:diagnostics_channel'; + * + * if (diagnostics_channel.hasSubscribers('my-channel')) { + * // There are subscribers, prepare and publish message + * } + * ``` + * @since v15.1.0, v14.17.0 + * @param name The channel name + * @return If there are active subscribers + */ + function hasSubscribers(name: string | symbol): boolean; + /** + * This is the primary entry-point for anyone wanting to publish to a named + * channel. It produces a channel object which is optimized to reduce overhead at + * publish time as much as possible. + * + * ```js + * import diagnostics_channel from 'node:diagnostics_channel'; + * + * const channel = diagnostics_channel.channel('my-channel'); + * ``` + * @since v15.1.0, v14.17.0 + * @param name The channel name + * @return The named channel object + */ + function channel(name: string | symbol): Channel; + type ChannelListener = (message: unknown, name: string | symbol) => void; + /** + * Register a message handler to subscribe to this channel. This message handler + * will be run synchronously whenever a message is published to the channel. Any + * errors thrown in the message handler will trigger an `'uncaughtException'`. + * + * ```js + * import diagnostics_channel from 'node:diagnostics_channel'; + * + * diagnostics_channel.subscribe('my-channel', (message, name) => { + * // Received data + * }); + * ``` + * @since v18.7.0, v16.17.0 + * @param name The channel name + * @param onMessage The handler to receive channel messages + */ + function subscribe(name: string | symbol, onMessage: ChannelListener): void; + /** + * Remove a message handler previously registered to this channel with {@link subscribe}. + * + * ```js + * import diagnostics_channel from 'node:diagnostics_channel'; + * + * function onMessage(message, name) { + * // Received data + * } + * + * diagnostics_channel.subscribe('my-channel', onMessage); + * + * diagnostics_channel.unsubscribe('my-channel', onMessage); + * ``` + * @since v18.7.0, v16.17.0 + * @param name The channel name + * @param onMessage The previous subscribed handler to remove + * @return `true` if the handler was found, `false` otherwise. + */ + function unsubscribe(name: string | symbol, onMessage: ChannelListener): boolean; + /** + * The class `Channel` represents an individual named channel within the data + * pipeline. It is used to track subscribers and to publish messages when there + * are subscribers present. It exists as a separate object to avoid channel + * lookups at publish time, enabling very fast publish speeds and allowing + * for heavy use while incurring very minimal cost. Channels are created with {@link channel}, constructing a channel directly + * with `new Channel(name)` is not supported. + * @since v15.1.0, v14.17.0 + */ + class Channel { + readonly name: string | symbol; + /** + * Check if there are active subscribers to this channel. This is helpful if + * the message you want to send might be expensive to prepare. + * + * This API is optional but helpful when trying to publish messages from very + * performance-sensitive code. + * + * ```js + * import diagnostics_channel from 'node:diagnostics_channel'; + * + * const channel = diagnostics_channel.channel('my-channel'); + * + * if (channel.hasSubscribers) { + * // There are subscribers, prepare and publish message + * } + * ``` + * @since v15.1.0, v14.17.0 + */ + readonly hasSubscribers: boolean; + private constructor(name: string | symbol); + /** + * Publish a message to any subscribers to the channel. This will trigger + * message handlers synchronously so they will execute within the same context. + * + * ```js + * import diagnostics_channel from 'node:diagnostics_channel'; + * + * const channel = diagnostics_channel.channel('my-channel'); + * + * channel.publish({ + * some: 'message', + * }); + * ``` + * @since v15.1.0, v14.17.0 + * @param message The message to send to the channel subscribers + */ + publish(message: unknown): void; + /** + * Register a message handler to subscribe to this channel. This message handler + * will be run synchronously whenever a message is published to the channel. Any + * errors thrown in the message handler will trigger an `'uncaughtException'`. + * + * ```js + * import diagnostics_channel from 'node:diagnostics_channel'; + * + * const channel = diagnostics_channel.channel('my-channel'); + * + * channel.subscribe((message, name) => { + * // Received data + * }); + * ``` + * @since v15.1.0, v14.17.0 + * @deprecated Since v18.7.0,v16.17.0 - Use {@link subscribe(name, onMessage)} + * @param onMessage The handler to receive channel messages + */ + subscribe(onMessage: ChannelListener): void; + /** + * Remove a message handler previously registered to this channel with `channel.subscribe(onMessage)`. + * + * ```js + * import diagnostics_channel from 'node:diagnostics_channel'; + * + * const channel = diagnostics_channel.channel('my-channel'); + * + * function onMessage(message, name) { + * // Received data + * } + * + * channel.subscribe(onMessage); + * + * channel.unsubscribe(onMessage); + * ``` + * @since v15.1.0, v14.17.0 + * @deprecated Since v18.7.0,v16.17.0 - Use {@link unsubscribe(name, onMessage)} + * @param onMessage The previous subscribed handler to remove + * @return `true` if the handler was found, `false` otherwise. + */ + unsubscribe(onMessage: ChannelListener): void; + } +} +declare module "node:diagnostics_channel" { + export * from "diagnostics_channel"; +} diff --git a/Url-Shortner/node_modules/@types/node/dns.d.ts b/Url-Shortner/node_modules/@types/node/dns.d.ts new file mode 100644 index 0000000..bef32b1 --- /dev/null +++ b/Url-Shortner/node_modules/@types/node/dns.d.ts @@ -0,0 +1,809 @@ +/** + * The `node:dns` module enables name resolution. For example, use it to look up IP + * addresses of host names. + * + * Although named for the [Domain Name System (DNS)](https://en.wikipedia.org/wiki/Domain_Name_System), it does not always use the + * DNS protocol for lookups. {@link lookup} uses the operating system + * facilities to perform name resolution. It may not need to perform any network + * communication. To perform name resolution the way other applications on the same + * system do, use {@link lookup}. + * + * ```js + * const dns = require('node:dns'); + * + * dns.lookup('example.org', (err, address, family) => { + * console.log('address: %j family: IPv%s', address, family); + * }); + * // address: "93.184.216.34" family: IPv4 + * ``` + * + * All other functions in the `node:dns` module connect to an actual DNS server to + * perform name resolution. They will always use the network to perform DNS + * queries. These functions do not use the same set of configuration files used by {@link lookup} (e.g. `/etc/hosts`). Use these functions to always perform + * DNS queries, bypassing other name-resolution facilities. + * + * ```js + * const dns = require('node:dns'); + * + * dns.resolve4('archive.org', (err, addresses) => { + * if (err) throw err; + * + * console.log(`addresses: ${JSON.stringify(addresses)}`); + * + * addresses.forEach((a) => { + * dns.reverse(a, (err, hostnames) => { + * if (err) { + * throw err; + * } + * console.log(`reverse for ${a}: ${JSON.stringify(hostnames)}`); + * }); + * }); + * }); + * ``` + * + * See the `Implementation considerations section` for more information. + * @see [source](https://github.com/nodejs/node/blob/v20.2.0/lib/dns.js) + */ +declare module "dns" { + import * as dnsPromises from "node:dns/promises"; + // Supported getaddrinfo flags. + export const ADDRCONFIG: number; + export const V4MAPPED: number; + /** + * If `dns.V4MAPPED` is specified, return resolved IPv6 addresses as + * well as IPv4 mapped IPv6 addresses. + */ + export const ALL: number; + export interface LookupOptions { + family?: number | undefined; + hints?: number | undefined; + all?: boolean | undefined; + /** + * @default true + */ + verbatim?: boolean | undefined; + } + export interface LookupOneOptions extends LookupOptions { + all?: false | undefined; + } + export interface LookupAllOptions extends LookupOptions { + all: true; + } + export interface LookupAddress { + address: string; + family: number; + } + /** + * Resolves a host name (e.g. `'nodejs.org'`) into the first found A (IPv4) or + * AAAA (IPv6) record. All `option` properties are optional. If `options` is an + * integer, then it must be `4` or `6` – if `options` is `0` or not provided, then + * IPv4 and IPv6 addresses are both returned if found. + * + * With the `all` option set to `true`, the arguments for `callback` change to`(err, addresses)`, with `addresses` being an array of objects with the + * properties `address` and `family`. + * + * On error, `err` is an `Error` object, where `err.code` is the error code. + * Keep in mind that `err.code` will be set to `'ENOTFOUND'` not only when + * the host name does not exist but also when the lookup fails in other ways + * such as no available file descriptors. + * + * `dns.lookup()` does not necessarily have anything to do with the DNS protocol. + * The implementation uses an operating system facility that can associate names + * with addresses and vice versa. This implementation can have subtle but + * important consequences on the behavior of any Node.js program. Please take some + * time to consult the `Implementation considerations section` before using`dns.lookup()`. + * + * Example usage: + * + * ```js + * const dns = require('node:dns'); + * const options = { + * family: 6, + * hints: dns.ADDRCONFIG | dns.V4MAPPED, + * }; + * dns.lookup('example.com', options, (err, address, family) => + * console.log('address: %j family: IPv%s', address, family)); + * // address: "2606:2800:220:1:248:1893:25c8:1946" family: IPv6 + * + * // When options.all is true, the result will be an Array. + * options.all = true; + * dns.lookup('example.com', options, (err, addresses) => + * console.log('addresses: %j', addresses)); + * // addresses: [{"address":"2606:2800:220:1:248:1893:25c8:1946","family":6}] + * ``` + * + * If this method is invoked as its `util.promisify()` ed version, and `all`is not set to `true`, it returns a `Promise` for an `Object` with `address` and`family` properties. + * @since v0.1.90 + */ + export function lookup( + hostname: string, + family: number, + callback: (err: NodeJS.ErrnoException | null, address: string, family: number) => void, + ): void; + export function lookup( + hostname: string, + options: LookupOneOptions, + callback: (err: NodeJS.ErrnoException | null, address: string, family: number) => void, + ): void; + export function lookup( + hostname: string, + options: LookupAllOptions, + callback: (err: NodeJS.ErrnoException | null, addresses: LookupAddress[]) => void, + ): void; + export function lookup( + hostname: string, + options: LookupOptions, + callback: (err: NodeJS.ErrnoException | null, address: string | LookupAddress[], family: number) => void, + ): void; + export function lookup( + hostname: string, + callback: (err: NodeJS.ErrnoException | null, address: string, family: number) => void, + ): void; + export namespace lookup { + function __promisify__(hostname: string, options: LookupAllOptions): Promise; + function __promisify__(hostname: string, options?: LookupOneOptions | number): Promise; + function __promisify__(hostname: string, options: LookupOptions): Promise; + } + /** + * Resolves the given `address` and `port` into a host name and service using + * the operating system's underlying `getnameinfo` implementation. + * + * If `address` is not a valid IP address, a `TypeError` will be thrown. + * The `port` will be coerced to a number. If it is not a legal port, a `TypeError`will be thrown. + * + * On an error, `err` is an `Error` object, where `err.code` is the error code. + * + * ```js + * const dns = require('node:dns'); + * dns.lookupService('127.0.0.1', 22, (err, hostname, service) => { + * console.log(hostname, service); + * // Prints: localhost ssh + * }); + * ``` + * + * If this method is invoked as its `util.promisify()` ed version, it returns a`Promise` for an `Object` with `hostname` and `service` properties. + * @since v0.11.14 + */ + export function lookupService( + address: string, + port: number, + callback: (err: NodeJS.ErrnoException | null, hostname: string, service: string) => void, + ): void; + export namespace lookupService { + function __promisify__( + address: string, + port: number, + ): Promise<{ + hostname: string; + service: string; + }>; + } + export interface ResolveOptions { + ttl: boolean; + } + export interface ResolveWithTtlOptions extends ResolveOptions { + ttl: true; + } + export interface RecordWithTtl { + address: string; + ttl: number; + } + /** @deprecated Use `AnyARecord` or `AnyAaaaRecord` instead. */ + export type AnyRecordWithTtl = AnyARecord | AnyAaaaRecord; + export interface AnyARecord extends RecordWithTtl { + type: "A"; + } + export interface AnyAaaaRecord extends RecordWithTtl { + type: "AAAA"; + } + export interface CaaRecord { + critical: number; + issue?: string | undefined; + issuewild?: string | undefined; + iodef?: string | undefined; + contactemail?: string | undefined; + contactphone?: string | undefined; + } + export interface MxRecord { + priority: number; + exchange: string; + } + export interface AnyMxRecord extends MxRecord { + type: "MX"; + } + export interface NaptrRecord { + flags: string; + service: string; + regexp: string; + replacement: string; + order: number; + preference: number; + } + export interface AnyNaptrRecord extends NaptrRecord { + type: "NAPTR"; + } + export interface SoaRecord { + nsname: string; + hostmaster: string; + serial: number; + refresh: number; + retry: number; + expire: number; + minttl: number; + } + export interface AnySoaRecord extends SoaRecord { + type: "SOA"; + } + export interface SrvRecord { + priority: number; + weight: number; + port: number; + name: string; + } + export interface AnySrvRecord extends SrvRecord { + type: "SRV"; + } + export interface AnyTxtRecord { + type: "TXT"; + entries: string[]; + } + export interface AnyNsRecord { + type: "NS"; + value: string; + } + export interface AnyPtrRecord { + type: "PTR"; + value: string; + } + export interface AnyCnameRecord { + type: "CNAME"; + value: string; + } + export type AnyRecord = + | AnyARecord + | AnyAaaaRecord + | AnyCnameRecord + | AnyMxRecord + | AnyNaptrRecord + | AnyNsRecord + | AnyPtrRecord + | AnySoaRecord + | AnySrvRecord + | AnyTxtRecord; + /** + * Uses the DNS protocol to resolve a host name (e.g. `'nodejs.org'`) into an array + * of the resource records. The `callback` function has arguments`(err, records)`. When successful, `records` will be an array of resource + * records. The type and structure of individual results varies based on `rrtype`: + * + * + * + * On error, `err` is an `Error` object, where `err.code` is one of the `DNS error codes`. + * @since v0.1.27 + * @param hostname Host name to resolve. + * @param [rrtype='A'] Resource record type. + */ + export function resolve( + hostname: string, + callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void, + ): void; + export function resolve( + hostname: string, + rrtype: "A", + callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void, + ): void; + export function resolve( + hostname: string, + rrtype: "AAAA", + callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void, + ): void; + export function resolve( + hostname: string, + rrtype: "ANY", + callback: (err: NodeJS.ErrnoException | null, addresses: AnyRecord[]) => void, + ): void; + export function resolve( + hostname: string, + rrtype: "CNAME", + callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void, + ): void; + export function resolve( + hostname: string, + rrtype: "MX", + callback: (err: NodeJS.ErrnoException | null, addresses: MxRecord[]) => void, + ): void; + export function resolve( + hostname: string, + rrtype: "NAPTR", + callback: (err: NodeJS.ErrnoException | null, addresses: NaptrRecord[]) => void, + ): void; + export function resolve( + hostname: string, + rrtype: "NS", + callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void, + ): void; + export function resolve( + hostname: string, + rrtype: "PTR", + callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void, + ): void; + export function resolve( + hostname: string, + rrtype: "SOA", + callback: (err: NodeJS.ErrnoException | null, addresses: SoaRecord) => void, + ): void; + export function resolve( + hostname: string, + rrtype: "SRV", + callback: (err: NodeJS.ErrnoException | null, addresses: SrvRecord[]) => void, + ): void; + export function resolve( + hostname: string, + rrtype: "TXT", + callback: (err: NodeJS.ErrnoException | null, addresses: string[][]) => void, + ): void; + export function resolve( + hostname: string, + rrtype: string, + callback: ( + err: NodeJS.ErrnoException | null, + addresses: string[] | MxRecord[] | NaptrRecord[] | SoaRecord | SrvRecord[] | string[][] | AnyRecord[], + ) => void, + ): void; + export namespace resolve { + function __promisify__(hostname: string, rrtype?: "A" | "AAAA" | "CNAME" | "NS" | "PTR"): Promise; + function __promisify__(hostname: string, rrtype: "ANY"): Promise; + function __promisify__(hostname: string, rrtype: "MX"): Promise; + function __promisify__(hostname: string, rrtype: "NAPTR"): Promise; + function __promisify__(hostname: string, rrtype: "SOA"): Promise; + function __promisify__(hostname: string, rrtype: "SRV"): Promise; + function __promisify__(hostname: string, rrtype: "TXT"): Promise; + function __promisify__( + hostname: string, + rrtype: string, + ): Promise; + } + /** + * Uses the DNS protocol to resolve a IPv4 addresses (`A` records) for the`hostname`. The `addresses` argument passed to the `callback` function + * will contain an array of IPv4 addresses (e.g.`['74.125.79.104', '74.125.79.105', '74.125.79.106']`). + * @since v0.1.16 + * @param hostname Host name to resolve. + */ + export function resolve4( + hostname: string, + callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void, + ): void; + export function resolve4( + hostname: string, + options: ResolveWithTtlOptions, + callback: (err: NodeJS.ErrnoException | null, addresses: RecordWithTtl[]) => void, + ): void; + export function resolve4( + hostname: string, + options: ResolveOptions, + callback: (err: NodeJS.ErrnoException | null, addresses: string[] | RecordWithTtl[]) => void, + ): void; + export namespace resolve4 { + function __promisify__(hostname: string): Promise; + function __promisify__(hostname: string, options: ResolveWithTtlOptions): Promise; + function __promisify__(hostname: string, options?: ResolveOptions): Promise; + } + /** + * Uses the DNS protocol to resolve IPv6 addresses (`AAAA` records) for the`hostname`. The `addresses` argument passed to the `callback` function + * will contain an array of IPv6 addresses. + * @since v0.1.16 + * @param hostname Host name to resolve. + */ + export function resolve6( + hostname: string, + callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void, + ): void; + export function resolve6( + hostname: string, + options: ResolveWithTtlOptions, + callback: (err: NodeJS.ErrnoException | null, addresses: RecordWithTtl[]) => void, + ): void; + export function resolve6( + hostname: string, + options: ResolveOptions, + callback: (err: NodeJS.ErrnoException | null, addresses: string[] | RecordWithTtl[]) => void, + ): void; + export namespace resolve6 { + function __promisify__(hostname: string): Promise; + function __promisify__(hostname: string, options: ResolveWithTtlOptions): Promise; + function __promisify__(hostname: string, options?: ResolveOptions): Promise; + } + /** + * Uses the DNS protocol to resolve `CNAME` records for the `hostname`. The`addresses` argument passed to the `callback` function + * will contain an array of canonical name records available for the `hostname`(e.g. `['bar.example.com']`). + * @since v0.3.2 + */ + export function resolveCname( + hostname: string, + callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void, + ): void; + export namespace resolveCname { + function __promisify__(hostname: string): Promise; + } + /** + * Uses the DNS protocol to resolve `CAA` records for the `hostname`. The`addresses` argument passed to the `callback` function + * will contain an array of certification authority authorization records + * available for the `hostname` (e.g. `[{critical: 0, iodef: 'mailto:pki@example.com'}, {critical: 128, issue: 'pki.example.com'}]`). + * @since v15.0.0, v14.17.0 + */ + export function resolveCaa( + hostname: string, + callback: (err: NodeJS.ErrnoException | null, records: CaaRecord[]) => void, + ): void; + export namespace resolveCaa { + function __promisify__(hostname: string): Promise; + } + /** + * Uses the DNS protocol to resolve mail exchange records (`MX` records) for the`hostname`. The `addresses` argument passed to the `callback` function will + * contain an array of objects containing both a `priority` and `exchange`property (e.g. `[{priority: 10, exchange: 'mx.example.com'}, ...]`). + * @since v0.1.27 + */ + export function resolveMx( + hostname: string, + callback: (err: NodeJS.ErrnoException | null, addresses: MxRecord[]) => void, + ): void; + export namespace resolveMx { + function __promisify__(hostname: string): Promise; + } + /** + * Uses the DNS protocol to resolve regular expression-based records (`NAPTR`records) for the `hostname`. The `addresses` argument passed to the `callback`function will contain an array of + * objects with the following properties: + * + * * `flags` + * * `service` + * * `regexp` + * * `replacement` + * * `order` + * * `preference` + * + * ```js + * { + * flags: 's', + * service: 'SIP+D2U', + * regexp: '', + * replacement: '_sip._udp.example.com', + * order: 30, + * preference: 100 + * } + * ``` + * @since v0.9.12 + */ + export function resolveNaptr( + hostname: string, + callback: (err: NodeJS.ErrnoException | null, addresses: NaptrRecord[]) => void, + ): void; + export namespace resolveNaptr { + function __promisify__(hostname: string): Promise; + } + /** + * Uses the DNS protocol to resolve name server records (`NS` records) for the`hostname`. The `addresses` argument passed to the `callback` function will + * contain an array of name server records available for `hostname`(e.g. `['ns1.example.com', 'ns2.example.com']`). + * @since v0.1.90 + */ + export function resolveNs( + hostname: string, + callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void, + ): void; + export namespace resolveNs { + function __promisify__(hostname: string): Promise; + } + /** + * Uses the DNS protocol to resolve pointer records (`PTR` records) for the`hostname`. The `addresses` argument passed to the `callback` function will + * be an array of strings containing the reply records. + * @since v6.0.0 + */ + export function resolvePtr( + hostname: string, + callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void, + ): void; + export namespace resolvePtr { + function __promisify__(hostname: string): Promise; + } + /** + * Uses the DNS protocol to resolve a start of authority record (`SOA` record) for + * the `hostname`. The `address` argument passed to the `callback` function will + * be an object with the following properties: + * + * * `nsname` + * * `hostmaster` + * * `serial` + * * `refresh` + * * `retry` + * * `expire` + * * `minttl` + * + * ```js + * { + * nsname: 'ns.example.com', + * hostmaster: 'root.example.com', + * serial: 2013101809, + * refresh: 10000, + * retry: 2400, + * expire: 604800, + * minttl: 3600 + * } + * ``` + * @since v0.11.10 + */ + export function resolveSoa( + hostname: string, + callback: (err: NodeJS.ErrnoException | null, address: SoaRecord) => void, + ): void; + export namespace resolveSoa { + function __promisify__(hostname: string): Promise; + } + /** + * Uses the DNS protocol to resolve service records (`SRV` records) for the`hostname`. The `addresses` argument passed to the `callback` function will + * be an array of objects with the following properties: + * + * * `priority` + * * `weight` + * * `port` + * * `name` + * + * ```js + * { + * priority: 10, + * weight: 5, + * port: 21223, + * name: 'service.example.com' + * } + * ``` + * @since v0.1.27 + */ + export function resolveSrv( + hostname: string, + callback: (err: NodeJS.ErrnoException | null, addresses: SrvRecord[]) => void, + ): void; + export namespace resolveSrv { + function __promisify__(hostname: string): Promise; + } + /** + * Uses the DNS protocol to resolve text queries (`TXT` records) for the`hostname`. The `records` argument passed to the `callback` function is a + * two-dimensional array of the text records available for `hostname` (e.g.`[ ['v=spf1 ip4:0.0.0.0 ', '~all' ] ]`). Each sub-array contains TXT chunks of + * one record. Depending on the use case, these could be either joined together or + * treated separately. + * @since v0.1.27 + */ + export function resolveTxt( + hostname: string, + callback: (err: NodeJS.ErrnoException | null, addresses: string[][]) => void, + ): void; + export namespace resolveTxt { + function __promisify__(hostname: string): Promise; + } + /** + * Uses the DNS protocol to resolve all records (also known as `ANY` or `*` query). + * The `ret` argument passed to the `callback` function will be an array containing + * various types of records. Each object has a property `type` that indicates the + * type of the current record. And depending on the `type`, additional properties + * will be present on the object: + * + * + * + * Here is an example of the `ret` object passed to the callback: + * + * ```js + * [ { type: 'A', address: '127.0.0.1', ttl: 299 }, + * { type: 'CNAME', value: 'example.com' }, + * { type: 'MX', exchange: 'alt4.aspmx.l.example.com', priority: 50 }, + * { type: 'NS', value: 'ns1.example.com' }, + * { type: 'TXT', entries: [ 'v=spf1 include:_spf.example.com ~all' ] }, + * { type: 'SOA', + * nsname: 'ns1.example.com', + * hostmaster: 'admin.example.com', + * serial: 156696742, + * refresh: 900, + * retry: 900, + * expire: 1800, + * minttl: 60 } ] + * ``` + * + * DNS server operators may choose not to respond to `ANY`queries. It may be better to call individual methods like {@link resolve4},{@link resolveMx}, and so on. For more details, see [RFC + * 8482](https://tools.ietf.org/html/rfc8482). + */ + export function resolveAny( + hostname: string, + callback: (err: NodeJS.ErrnoException | null, addresses: AnyRecord[]) => void, + ): void; + export namespace resolveAny { + function __promisify__(hostname: string): Promise; + } + /** + * Performs a reverse DNS query that resolves an IPv4 or IPv6 address to an + * array of host names. + * + * On error, `err` is an `Error` object, where `err.code` is + * one of the `DNS error codes`. + * @since v0.1.16 + */ + export function reverse( + ip: string, + callback: (err: NodeJS.ErrnoException | null, hostnames: string[]) => void, + ): void; + /** + * Get the default value for `verbatim` in {@link lookup} and `dnsPromises.lookup()`. The value could be: + * + * * `ipv4first`: for `verbatim` defaulting to `false`. + * * `verbatim`: for `verbatim` defaulting to `true`. + * @since v20.1.0 + */ + export function getDefaultResultOrder(): "ipv4first" | "verbatim"; + /** + * Sets the IP address and port of servers to be used when performing DNS + * resolution. The `servers` argument is an array of [RFC 5952](https://tools.ietf.org/html/rfc5952#section-6) formatted + * addresses. If the port is the IANA default DNS port (53) it can be omitted. + * + * ```js + * dns.setServers([ + * '4.4.4.4', + * '[2001:4860:4860::8888]', + * '4.4.4.4:1053', + * '[2001:4860:4860::8888]:1053', + * ]); + * ``` + * + * An error will be thrown if an invalid address is provided. + * + * The `dns.setServers()` method must not be called while a DNS query is in + * progress. + * + * The {@link setServers} method affects only {@link resolve},`dns.resolve*()` and {@link reverse} (and specifically _not_ {@link lookup}). + * + * This method works much like [resolve.conf](https://man7.org/linux/man-pages/man5/resolv.conf.5.html). + * That is, if attempting to resolve with the first server provided results in a`NOTFOUND` error, the `resolve()` method will _not_ attempt to resolve with + * subsequent servers provided. Fallback DNS servers will only be used if the + * earlier ones time out or result in some other error. + * @since v0.11.3 + * @param servers array of `RFC 5952` formatted addresses + */ + export function setServers(servers: ReadonlyArray): void; + /** + * Returns an array of IP address strings, formatted according to [RFC 5952](https://tools.ietf.org/html/rfc5952#section-6), + * that are currently configured for DNS resolution. A string will include a port + * section if a custom port is used. + * + * ```js + * [ + * '4.4.4.4', + * '2001:4860:4860::8888', + * '4.4.4.4:1053', + * '[2001:4860:4860::8888]:1053', + * ] + * ``` + * @since v0.11.3 + */ + export function getServers(): string[]; + /** + * Set the default value of `verbatim` in {@link lookup} and `dnsPromises.lookup()`. The value could be: + * + * * `ipv4first`: sets default `verbatim` `false`. + * * `verbatim`: sets default `verbatim` `true`. + * + * The default is `verbatim` and {@link setDefaultResultOrder} have higher + * priority than `--dns-result-order`. When using `worker threads`,{@link setDefaultResultOrder} from the main thread won't affect the default + * dns orders in workers. + * @since v16.4.0, v14.18.0 + * @param order must be `'ipv4first'` or `'verbatim'`. + */ + export function setDefaultResultOrder(order: "ipv4first" | "verbatim"): void; + // Error codes + export const NODATA: string; + export const FORMERR: string; + export const SERVFAIL: string; + export const NOTFOUND: string; + export const NOTIMP: string; + export const REFUSED: string; + export const BADQUERY: string; + export const BADNAME: string; + export const BADFAMILY: string; + export const BADRESP: string; + export const CONNREFUSED: string; + export const TIMEOUT: string; + export const EOF: string; + export const FILE: string; + export const NOMEM: string; + export const DESTRUCTION: string; + export const BADSTR: string; + export const BADFLAGS: string; + export const NONAME: string; + export const BADHINTS: string; + export const NOTINITIALIZED: string; + export const LOADIPHLPAPI: string; + export const ADDRGETNETWORKPARAMS: string; + export const CANCELLED: string; + export interface ResolverOptions { + timeout?: number | undefined; + /** + * @default 4 + */ + tries?: number; + } + /** + * An independent resolver for DNS requests. + * + * Creating a new resolver uses the default server settings. Setting + * the servers used for a resolver using `resolver.setServers()` does not affect + * other resolvers: + * + * ```js + * const { Resolver } = require('node:dns'); + * const resolver = new Resolver(); + * resolver.setServers(['4.4.4.4']); + * + * // This request will use the server at 4.4.4.4, independent of global settings. + * resolver.resolve4('example.org', (err, addresses) => { + * // ... + * }); + * ``` + * + * The following methods from the `node:dns` module are available: + * + * * `resolver.getServers()` + * * `resolver.resolve()` + * * `resolver.resolve4()` + * * `resolver.resolve6()` + * * `resolver.resolveAny()` + * * `resolver.resolveCaa()` + * * `resolver.resolveCname()` + * * `resolver.resolveMx()` + * * `resolver.resolveNaptr()` + * * `resolver.resolveNs()` + * * `resolver.resolvePtr()` + * * `resolver.resolveSoa()` + * * `resolver.resolveSrv()` + * * `resolver.resolveTxt()` + * * `resolver.reverse()` + * * `resolver.setServers()` + * @since v8.3.0 + */ + export class Resolver { + constructor(options?: ResolverOptions); + /** + * Cancel all outstanding DNS queries made by this resolver. The corresponding + * callbacks will be called with an error with code `ECANCELLED`. + * @since v8.3.0 + */ + cancel(): void; + getServers: typeof getServers; + resolve: typeof resolve; + resolve4: typeof resolve4; + resolve6: typeof resolve6; + resolveAny: typeof resolveAny; + resolveCaa: typeof resolveCaa; + resolveCname: typeof resolveCname; + resolveMx: typeof resolveMx; + resolveNaptr: typeof resolveNaptr; + resolveNs: typeof resolveNs; + resolvePtr: typeof resolvePtr; + resolveSoa: typeof resolveSoa; + resolveSrv: typeof resolveSrv; + resolveTxt: typeof resolveTxt; + reverse: typeof reverse; + /** + * The resolver instance will send its requests from the specified IP address. + * This allows programs to specify outbound interfaces when used on multi-homed + * systems. + * + * If a v4 or v6 address is not specified, it is set to the default and the + * operating system will choose a local address automatically. + * + * The resolver will use the v4 local address when making requests to IPv4 DNS + * servers, and the v6 local address when making requests to IPv6 DNS servers. + * The `rrtype` of resolution requests has no impact on the local address used. + * @since v15.1.0, v14.17.0 + * @param [ipv4='0.0.0.0'] A string representation of an IPv4 address. + * @param [ipv6='::0'] A string representation of an IPv6 address. + */ + setLocalAddress(ipv4?: string, ipv6?: string): void; + setServers: typeof setServers; + } + export { dnsPromises as promises }; +} +declare module "node:dns" { + export * from "dns"; +} diff --git a/Url-Shortner/node_modules/@types/node/dns/promises.d.ts b/Url-Shortner/node_modules/@types/node/dns/promises.d.ts new file mode 100644 index 0000000..79d8b07 --- /dev/null +++ b/Url-Shortner/node_modules/@types/node/dns/promises.d.ts @@ -0,0 +1,417 @@ +/** + * The `dns.promises` API provides an alternative set of asynchronous DNS methods + * that return `Promise` objects rather than using callbacks. The API is accessible + * via `require('node:dns').promises` or `require('node:dns/promises')`. + * @since v10.6.0 + */ +declare module "dns/promises" { + import { + AnyRecord, + CaaRecord, + LookupAddress, + LookupAllOptions, + LookupOneOptions, + LookupOptions, + MxRecord, + NaptrRecord, + RecordWithTtl, + ResolveOptions, + ResolverOptions, + ResolveWithTtlOptions, + SoaRecord, + SrvRecord, + } from "node:dns"; + /** + * Returns an array of IP address strings, formatted according to [RFC 5952](https://tools.ietf.org/html/rfc5952#section-6), + * that are currently configured for DNS resolution. A string will include a port + * section if a custom port is used. + * + * ```js + * [ + * '4.4.4.4', + * '2001:4860:4860::8888', + * '4.4.4.4:1053', + * '[2001:4860:4860::8888]:1053', + * ] + * ``` + * @since v10.6.0 + */ + function getServers(): string[]; + /** + * Resolves a host name (e.g. `'nodejs.org'`) into the first found A (IPv4) or + * AAAA (IPv6) record. All `option` properties are optional. If `options` is an + * integer, then it must be `4` or `6` – if `options` is not provided, then IPv4 + * and IPv6 addresses are both returned if found. + * + * With the `all` option set to `true`, the `Promise` is resolved with `addresses`being an array of objects with the properties `address` and `family`. + * + * On error, the `Promise` is rejected with an `Error` object, where `err.code`is the error code. + * Keep in mind that `err.code` will be set to `'ENOTFOUND'` not only when + * the host name does not exist but also when the lookup fails in other ways + * such as no available file descriptors. + * + * `dnsPromises.lookup()` does not necessarily have anything to do with the DNS + * protocol. The implementation uses an operating system facility that can + * associate names with addresses and vice versa. This implementation can have + * subtle but important consequences on the behavior of any Node.js program. Please + * take some time to consult the `Implementation considerations section` before + * using `dnsPromises.lookup()`. + * + * Example usage: + * + * ```js + * const dns = require('node:dns'); + * const dnsPromises = dns.promises; + * const options = { + * family: 6, + * hints: dns.ADDRCONFIG | dns.V4MAPPED, + * }; + * + * dnsPromises.lookup('example.com', options).then((result) => { + * console.log('address: %j family: IPv%s', result.address, result.family); + * // address: "2606:2800:220:1:248:1893:25c8:1946" family: IPv6 + * }); + * + * // When options.all is true, the result will be an Array. + * options.all = true; + * dnsPromises.lookup('example.com', options).then((result) => { + * console.log('addresses: %j', result); + * // addresses: [{"address":"2606:2800:220:1:248:1893:25c8:1946","family":6}] + * }); + * ``` + * @since v10.6.0 + */ + function lookup(hostname: string, family: number): Promise; + function lookup(hostname: string, options: LookupOneOptions): Promise; + function lookup(hostname: string, options: LookupAllOptions): Promise; + function lookup(hostname: string, options: LookupOptions): Promise; + function lookup(hostname: string): Promise; + /** + * Resolves the given `address` and `port` into a host name and service using + * the operating system's underlying `getnameinfo` implementation. + * + * If `address` is not a valid IP address, a `TypeError` will be thrown. + * The `port` will be coerced to a number. If it is not a legal port, a `TypeError`will be thrown. + * + * On error, the `Promise` is rejected with an `Error` object, where `err.code`is the error code. + * + * ```js + * const dnsPromises = require('node:dns').promises; + * dnsPromises.lookupService('127.0.0.1', 22).then((result) => { + * console.log(result.hostname, result.service); + * // Prints: localhost ssh + * }); + * ``` + * @since v10.6.0 + */ + function lookupService( + address: string, + port: number, + ): Promise<{ + hostname: string; + service: string; + }>; + /** + * Uses the DNS protocol to resolve a host name (e.g. `'nodejs.org'`) into an array + * of the resource records. When successful, the `Promise` is resolved with an + * array of resource records. The type and structure of individual results vary + * based on `rrtype`: + * + * + * + * On error, the `Promise` is rejected with an `Error` object, where `err.code`is one of the `DNS error codes`. + * @since v10.6.0 + * @param hostname Host name to resolve. + * @param [rrtype='A'] Resource record type. + */ + function resolve(hostname: string): Promise; + function resolve(hostname: string, rrtype: "A"): Promise; + function resolve(hostname: string, rrtype: "AAAA"): Promise; + function resolve(hostname: string, rrtype: "ANY"): Promise; + function resolve(hostname: string, rrtype: "CAA"): Promise; + function resolve(hostname: string, rrtype: "CNAME"): Promise; + function resolve(hostname: string, rrtype: "MX"): Promise; + function resolve(hostname: string, rrtype: "NAPTR"): Promise; + function resolve(hostname: string, rrtype: "NS"): Promise; + function resolve(hostname: string, rrtype: "PTR"): Promise; + function resolve(hostname: string, rrtype: "SOA"): Promise; + function resolve(hostname: string, rrtype: "SRV"): Promise; + function resolve(hostname: string, rrtype: "TXT"): Promise; + function resolve( + hostname: string, + rrtype: string, + ): Promise; + /** + * Uses the DNS protocol to resolve IPv4 addresses (`A` records) for the`hostname`. On success, the `Promise` is resolved with an array of IPv4 + * addresses (e.g. `['74.125.79.104', '74.125.79.105', '74.125.79.106']`). + * @since v10.6.0 + * @param hostname Host name to resolve. + */ + function resolve4(hostname: string): Promise; + function resolve4(hostname: string, options: ResolveWithTtlOptions): Promise; + function resolve4(hostname: string, options: ResolveOptions): Promise; + /** + * Uses the DNS protocol to resolve IPv6 addresses (`AAAA` records) for the`hostname`. On success, the `Promise` is resolved with an array of IPv6 + * addresses. + * @since v10.6.0 + * @param hostname Host name to resolve. + */ + function resolve6(hostname: string): Promise; + function resolve6(hostname: string, options: ResolveWithTtlOptions): Promise; + function resolve6(hostname: string, options: ResolveOptions): Promise; + /** + * Uses the DNS protocol to resolve all records (also known as `ANY` or `*` query). + * On success, the `Promise` is resolved with an array containing various types of + * records. Each object has a property `type` that indicates the type of the + * current record. And depending on the `type`, additional properties will be + * present on the object: + * + * + * + * Here is an example of the result object: + * + * ```js + * [ { type: 'A', address: '127.0.0.1', ttl: 299 }, + * { type: 'CNAME', value: 'example.com' }, + * { type: 'MX', exchange: 'alt4.aspmx.l.example.com', priority: 50 }, + * { type: 'NS', value: 'ns1.example.com' }, + * { type: 'TXT', entries: [ 'v=spf1 include:_spf.example.com ~all' ] }, + * { type: 'SOA', + * nsname: 'ns1.example.com', + * hostmaster: 'admin.example.com', + * serial: 156696742, + * refresh: 900, + * retry: 900, + * expire: 1800, + * minttl: 60 } ] + * ``` + * @since v10.6.0 + */ + function resolveAny(hostname: string): Promise; + /** + * Uses the DNS protocol to resolve `CAA` records for the `hostname`. On success, + * the `Promise` is resolved with an array of objects containing available + * certification authority authorization records available for the `hostname`(e.g. `[{critical: 0, iodef: 'mailto:pki@example.com'},{critical: 128, issue: 'pki.example.com'}]`). + * @since v15.0.0, v14.17.0 + */ + function resolveCaa(hostname: string): Promise; + /** + * Uses the DNS protocol to resolve `CNAME` records for the `hostname`. On success, + * the `Promise` is resolved with an array of canonical name records available for + * the `hostname` (e.g. `['bar.example.com']`). + * @since v10.6.0 + */ + function resolveCname(hostname: string): Promise; + /** + * Uses the DNS protocol to resolve mail exchange records (`MX` records) for the`hostname`. On success, the `Promise` is resolved with an array of objects + * containing both a `priority` and `exchange` property (e.g.`[{priority: 10, exchange: 'mx.example.com'}, ...]`). + * @since v10.6.0 + */ + function resolveMx(hostname: string): Promise; + /** + * Uses the DNS protocol to resolve regular expression-based records (`NAPTR`records) for the `hostname`. On success, the `Promise` is resolved with an array + * of objects with the following properties: + * + * * `flags` + * * `service` + * * `regexp` + * * `replacement` + * * `order` + * * `preference` + * + * ```js + * { + * flags: 's', + * service: 'SIP+D2U', + * regexp: '', + * replacement: '_sip._udp.example.com', + * order: 30, + * preference: 100 + * } + * ``` + * @since v10.6.0 + */ + function resolveNaptr(hostname: string): Promise; + /** + * Uses the DNS protocol to resolve name server records (`NS` records) for the`hostname`. On success, the `Promise` is resolved with an array of name server + * records available for `hostname` (e.g.`['ns1.example.com', 'ns2.example.com']`). + * @since v10.6.0 + */ + function resolveNs(hostname: string): Promise; + /** + * Uses the DNS protocol to resolve pointer records (`PTR` records) for the`hostname`. On success, the `Promise` is resolved with an array of strings + * containing the reply records. + * @since v10.6.0 + */ + function resolvePtr(hostname: string): Promise; + /** + * Uses the DNS protocol to resolve a start of authority record (`SOA` record) for + * the `hostname`. On success, the `Promise` is resolved with an object with the + * following properties: + * + * * `nsname` + * * `hostmaster` + * * `serial` + * * `refresh` + * * `retry` + * * `expire` + * * `minttl` + * + * ```js + * { + * nsname: 'ns.example.com', + * hostmaster: 'root.example.com', + * serial: 2013101809, + * refresh: 10000, + * retry: 2400, + * expire: 604800, + * minttl: 3600 + * } + * ``` + * @since v10.6.0 + */ + function resolveSoa(hostname: string): Promise; + /** + * Uses the DNS protocol to resolve service records (`SRV` records) for the`hostname`. On success, the `Promise` is resolved with an array of objects with + * the following properties: + * + * * `priority` + * * `weight` + * * `port` + * * `name` + * + * ```js + * { + * priority: 10, + * weight: 5, + * port: 21223, + * name: 'service.example.com' + * } + * ``` + * @since v10.6.0 + */ + function resolveSrv(hostname: string): Promise; + /** + * Uses the DNS protocol to resolve text queries (`TXT` records) for the`hostname`. On success, the `Promise` is resolved with a two-dimensional array + * of the text records available for `hostname` (e.g.`[ ['v=spf1 ip4:0.0.0.0 ', '~all' ] ]`). Each sub-array contains TXT chunks of + * one record. Depending on the use case, these could be either joined together or + * treated separately. + * @since v10.6.0 + */ + function resolveTxt(hostname: string): Promise; + /** + * Performs a reverse DNS query that resolves an IPv4 or IPv6 address to an + * array of host names. + * + * On error, the `Promise` is rejected with an `Error` object, where `err.code`is one of the `DNS error codes`. + * @since v10.6.0 + */ + function reverse(ip: string): Promise; + /** + * Sets the IP address and port of servers to be used when performing DNS + * resolution. The `servers` argument is an array of [RFC 5952](https://tools.ietf.org/html/rfc5952#section-6) formatted + * addresses. If the port is the IANA default DNS port (53) it can be omitted. + * + * ```js + * dnsPromises.setServers([ + * '4.4.4.4', + * '[2001:4860:4860::8888]', + * '4.4.4.4:1053', + * '[2001:4860:4860::8888]:1053', + * ]); + * ``` + * + * An error will be thrown if an invalid address is provided. + * + * The `dnsPromises.setServers()` method must not be called while a DNS query is in + * progress. + * + * This method works much like [resolve.conf](https://man7.org/linux/man-pages/man5/resolv.conf.5.html). + * That is, if attempting to resolve with the first server provided results in a`NOTFOUND` error, the `resolve()` method will _not_ attempt to resolve with + * subsequent servers provided. Fallback DNS servers will only be used if the + * earlier ones time out or result in some other error. + * @since v10.6.0 + * @param servers array of `RFC 5952` formatted addresses + */ + function setServers(servers: ReadonlyArray): void; + /** + * Set the default value of `verbatim` in `dns.lookup()` and `dnsPromises.lookup()`. The value could be: + * + * * `ipv4first`: sets default `verbatim` `false`. + * * `verbatim`: sets default `verbatim` `true`. + * + * The default is `verbatim` and `dnsPromises.setDefaultResultOrder()` have + * higher priority than `--dns-result-order`. When using `worker threads`,`dnsPromises.setDefaultResultOrder()` from the main thread won't affect the + * default dns orders in workers. + * @since v16.4.0, v14.18.0 + * @param order must be `'ipv4first'` or `'verbatim'`. + */ + function setDefaultResultOrder(order: "ipv4first" | "verbatim"): void; + /** + * An independent resolver for DNS requests. + * + * Creating a new resolver uses the default server settings. Setting + * the servers used for a resolver using `resolver.setServers()` does not affect + * other resolvers: + * + * ```js + * const { Resolver } = require('node:dns').promises; + * const resolver = new Resolver(); + * resolver.setServers(['4.4.4.4']); + * + * // This request will use the server at 4.4.4.4, independent of global settings. + * resolver.resolve4('example.org').then((addresses) => { + * // ... + * }); + * + * // Alternatively, the same code can be written using async-await style. + * (async function() { + * const addresses = await resolver.resolve4('example.org'); + * })(); + * ``` + * + * The following methods from the `dnsPromises` API are available: + * + * * `resolver.getServers()` + * * `resolver.resolve()` + * * `resolver.resolve4()` + * * `resolver.resolve6()` + * * `resolver.resolveAny()` + * * `resolver.resolveCaa()` + * * `resolver.resolveCname()` + * * `resolver.resolveMx()` + * * `resolver.resolveNaptr()` + * * `resolver.resolveNs()` + * * `resolver.resolvePtr()` + * * `resolver.resolveSoa()` + * * `resolver.resolveSrv()` + * * `resolver.resolveTxt()` + * * `resolver.reverse()` + * * `resolver.setServers()` + * @since v10.6.0 + */ + class Resolver { + constructor(options?: ResolverOptions); + cancel(): void; + getServers: typeof getServers; + resolve: typeof resolve; + resolve4: typeof resolve4; + resolve6: typeof resolve6; + resolveAny: typeof resolveAny; + resolveCaa: typeof resolveCaa; + resolveCname: typeof resolveCname; + resolveMx: typeof resolveMx; + resolveNaptr: typeof resolveNaptr; + resolveNs: typeof resolveNs; + resolvePtr: typeof resolvePtr; + resolveSoa: typeof resolveSoa; + resolveSrv: typeof resolveSrv; + resolveTxt: typeof resolveTxt; + reverse: typeof reverse; + setLocalAddress(ipv4?: string, ipv6?: string): void; + setServers: typeof setServers; + } +} +declare module "node:dns/promises" { + export * from "dns/promises"; +} diff --git a/Url-Shortner/node_modules/@types/node/dom-events.d.ts b/Url-Shortner/node_modules/@types/node/dom-events.d.ts new file mode 100644 index 0000000..147a7b6 --- /dev/null +++ b/Url-Shortner/node_modules/@types/node/dom-events.d.ts @@ -0,0 +1,122 @@ +export {}; // Don't export anything! + +//// DOM-like Events +// NB: The Event / EventTarget / EventListener implementations below were copied +// from lib.dom.d.ts, then edited to reflect Node's documentation at +// https://nodejs.org/api/events.html#class-eventtarget. +// Please read that link to understand important implementation differences. + +// This conditional type will be the existing global Event in a browser, or +// the copy below in a Node environment. +type __Event = typeof globalThis extends { onmessage: any; Event: any } ? {} + : { + /** This is not used in Node.js and is provided purely for completeness. */ + readonly bubbles: boolean; + /** Alias for event.stopPropagation(). This is not used in Node.js and is provided purely for completeness. */ + cancelBubble: () => void; + /** True if the event was created with the cancelable option */ + readonly cancelable: boolean; + /** This is not used in Node.js and is provided purely for completeness. */ + readonly composed: boolean; + /** Returns an array containing the current EventTarget as the only entry or empty if the event is not being dispatched. This is not used in Node.js and is provided purely for completeness. */ + composedPath(): [EventTarget?]; + /** Alias for event.target. */ + readonly currentTarget: EventTarget | null; + /** Is true if cancelable is true and event.preventDefault() has been called. */ + readonly defaultPrevented: boolean; + /** This is not used in Node.js and is provided purely for completeness. */ + readonly eventPhase: 0 | 2; + /** The `AbortSignal` "abort" event is emitted with `isTrusted` set to `true`. The value is `false` in all other cases. */ + readonly isTrusted: boolean; + /** Sets the `defaultPrevented` property to `true` if `cancelable` is `true`. */ + preventDefault(): void; + /** This is not used in Node.js and is provided purely for completeness. */ + returnValue: boolean; + /** Alias for event.target. */ + readonly srcElement: EventTarget | null; + /** Stops the invocation of event listeners after the current one completes. */ + stopImmediatePropagation(): void; + /** This is not used in Node.js and is provided purely for completeness. */ + stopPropagation(): void; + /** The `EventTarget` dispatching the event */ + readonly target: EventTarget | null; + /** The millisecond timestamp when the Event object was created. */ + readonly timeStamp: number; + /** Returns the type of event, e.g. "click", "hashchange", or "submit". */ + readonly type: string; + }; + +// See comment above explaining conditional type +type __EventTarget = typeof globalThis extends { onmessage: any; EventTarget: any } ? {} + : { + /** + * Adds a new handler for the `type` event. Any given `listener` is added only once per `type` and per `capture` option value. + * + * If the `once` option is true, the `listener` is removed after the next time a `type` event is dispatched. + * + * The `capture` option is not used by Node.js in any functional way other than tracking registered event listeners per the `EventTarget` specification. + * Specifically, the `capture` option is used as part of the key when registering a `listener`. + * Any individual `listener` may be added once with `capture = false`, and once with `capture = true`. + */ + addEventListener( + type: string, + listener: EventListener | EventListenerObject, + options?: AddEventListenerOptions | boolean, + ): void; + /** Dispatches a synthetic event event to target and returns true if either event's cancelable attribute value is false or its preventDefault() method was not invoked, and false otherwise. */ + dispatchEvent(event: Event): boolean; + /** Removes the event listener in target's event listener list with the same type, callback, and options. */ + removeEventListener( + type: string, + listener: EventListener | EventListenerObject, + options?: EventListenerOptions | boolean, + ): void; + }; + +interface EventInit { + bubbles?: boolean; + cancelable?: boolean; + composed?: boolean; +} + +interface EventListenerOptions { + /** Not directly used by Node.js. Added for API completeness. Default: `false`. */ + capture?: boolean; +} + +interface AddEventListenerOptions extends EventListenerOptions { + /** When `true`, the listener is automatically removed when it is first invoked. Default: `false`. */ + once?: boolean; + /** When `true`, serves as a hint that the listener will not call the `Event` object's `preventDefault()` method. Default: false. */ + passive?: boolean; +} + +interface EventListener { + (evt: Event): void; +} + +interface EventListenerObject { + handleEvent(object: Event): void; +} + +import {} from "events"; // Make this an ambient declaration +declare global { + /** An event which takes place in the DOM. */ + interface Event extends __Event {} + var Event: typeof globalThis extends { onmessage: any; Event: infer T } ? T + : { + prototype: __Event; + new(type: string, eventInitDict?: EventInit): __Event; + }; + + /** + * EventTarget is a DOM interface implemented by objects that can + * receive events and may have listeners for them. + */ + interface EventTarget extends __EventTarget {} + var EventTarget: typeof globalThis extends { onmessage: any; EventTarget: infer T } ? T + : { + prototype: __EventTarget; + new(): __EventTarget; + }; +} diff --git a/Url-Shortner/node_modules/@types/node/domain.d.ts b/Url-Shortner/node_modules/@types/node/domain.d.ts new file mode 100644 index 0000000..72f17bd --- /dev/null +++ b/Url-Shortner/node_modules/@types/node/domain.d.ts @@ -0,0 +1,170 @@ +/** + * **This module is pending deprecation.** Once a replacement API has been + * finalized, this module will be fully deprecated. Most developers should + * **not** have cause to use this module. Users who absolutely must have + * the functionality that domains provide may rely on it for the time being + * but should expect to have to migrate to a different solution + * in the future. + * + * Domains provide a way to handle multiple different IO operations as a + * single group. If any of the event emitters or callbacks registered to a + * domain emit an `'error'` event, or throw an error, then the domain object + * will be notified, rather than losing the context of the error in the`process.on('uncaughtException')` handler, or causing the program to + * exit immediately with an error code. + * @deprecated Since v1.4.2 - Deprecated + * @see [source](https://github.com/nodejs/node/blob/v20.2.0/lib/domain.js) + */ +declare module "domain" { + import EventEmitter = require("node:events"); + /** + * The `Domain` class encapsulates the functionality of routing errors and + * uncaught exceptions to the active `Domain` object. + * + * To handle the errors that it catches, listen to its `'error'` event. + */ + class Domain extends EventEmitter { + /** + * An array of timers and event emitters that have been explicitly added + * to the domain. + */ + members: Array; + /** + * The `enter()` method is plumbing used by the `run()`, `bind()`, and`intercept()` methods to set the active domain. It sets `domain.active` and`process.domain` to the domain, and implicitly + * pushes the domain onto the domain + * stack managed by the domain module (see {@link exit} for details on the + * domain stack). The call to `enter()` delimits the beginning of a chain of + * asynchronous calls and I/O operations bound to a domain. + * + * Calling `enter()` changes only the active domain, and does not alter the domain + * itself. `enter()` and `exit()` can be called an arbitrary number of times on a + * single domain. + */ + enter(): void; + /** + * The `exit()` method exits the current domain, popping it off the domain stack. + * Any time execution is going to switch to the context of a different chain of + * asynchronous calls, it's important to ensure that the current domain is exited. + * The call to `exit()` delimits either the end of or an interruption to the chain + * of asynchronous calls and I/O operations bound to a domain. + * + * If there are multiple, nested domains bound to the current execution context,`exit()` will exit any domains nested within this domain. + * + * Calling `exit()` changes only the active domain, and does not alter the domain + * itself. `enter()` and `exit()` can be called an arbitrary number of times on a + * single domain. + */ + exit(): void; + /** + * Run the supplied function in the context of the domain, implicitly + * binding all event emitters, timers, and low-level requests that are + * created in that context. Optionally, arguments can be passed to + * the function. + * + * This is the most basic way to use a domain. + * + * ```js + * const domain = require('node:domain'); + * const fs = require('node:fs'); + * const d = domain.create(); + * d.on('error', (er) => { + * console.error('Caught error!', er); + * }); + * d.run(() => { + * process.nextTick(() => { + * setTimeout(() => { // Simulating some various async stuff + * fs.open('non-existent file', 'r', (er, fd) => { + * if (er) throw er; + * // proceed... + * }); + * }, 100); + * }); + * }); + * ``` + * + * In this example, the `d.on('error')` handler will be triggered, rather + * than crashing the program. + */ + run(fn: (...args: any[]) => T, ...args: any[]): T; + /** + * Explicitly adds an emitter to the domain. If any event handlers called by + * the emitter throw an error, or if the emitter emits an `'error'` event, it + * will be routed to the domain's `'error'` event, just like with implicit + * binding. + * + * This also works with timers that are returned from `setInterval()` and `setTimeout()`. If their callback function throws, it will be caught by + * the domain `'error'` handler. + * + * If the Timer or `EventEmitter` was already bound to a domain, it is removed + * from that one, and bound to this one instead. + * @param emitter emitter or timer to be added to the domain + */ + add(emitter: EventEmitter | NodeJS.Timer): void; + /** + * The opposite of {@link add}. Removes domain handling from the + * specified emitter. + * @param emitter emitter or timer to be removed from the domain + */ + remove(emitter: EventEmitter | NodeJS.Timer): void; + /** + * The returned function will be a wrapper around the supplied callback + * function. When the returned function is called, any errors that are + * thrown will be routed to the domain's `'error'` event. + * + * ```js + * const d = domain.create(); + * + * function readSomeFile(filename, cb) { + * fs.readFile(filename, 'utf8', d.bind((er, data) => { + * // If this throws, it will also be passed to the domain. + * return cb(er, data ? JSON.parse(data) : null); + * })); + * } + * + * d.on('error', (er) => { + * // An error occurred somewhere. If we throw it now, it will crash the program + * // with the normal line number and stack message. + * }); + * ``` + * @param callback The callback function + * @return The bound function + */ + bind(callback: T): T; + /** + * This method is almost identical to {@link bind}. However, in + * addition to catching thrown errors, it will also intercept `Error` objects sent as the first argument to the function. + * + * In this way, the common `if (err) return callback(err);` pattern can be replaced + * with a single error handler in a single place. + * + * ```js + * const d = domain.create(); + * + * function readSomeFile(filename, cb) { + * fs.readFile(filename, 'utf8', d.intercept((data) => { + * // Note, the first argument is never passed to the + * // callback since it is assumed to be the 'Error' argument + * // and thus intercepted by the domain. + * + * // If this throws, it will also be passed to the domain + * // so the error-handling logic can be moved to the 'error' + * // event on the domain instead of being repeated throughout + * // the program. + * return cb(null, JSON.parse(data)); + * })); + * } + * + * d.on('error', (er) => { + * // An error occurred somewhere. If we throw it now, it will crash the program + * // with the normal line number and stack message. + * }); + * ``` + * @param callback The callback function + * @return The intercepted function + */ + intercept(callback: T): T; + } + function create(): Domain; +} +declare module "node:domain" { + export * from "domain"; +} diff --git a/Url-Shortner/node_modules/@types/node/events.d.ts b/Url-Shortner/node_modules/@types/node/events.d.ts new file mode 100644 index 0000000..4d33044 --- /dev/null +++ b/Url-Shortner/node_modules/@types/node/events.d.ts @@ -0,0 +1,796 @@ +/** + * Much of the Node.js core API is built around an idiomatic asynchronous + * event-driven architecture in which certain kinds of objects (called "emitters") + * emit named events that cause `Function` objects ("listeners") to be called. + * + * For instance: a `net.Server` object emits an event each time a peer + * connects to it; a `fs.ReadStream` emits an event when the file is opened; + * a `stream` emits an event whenever data is available to be read. + * + * All objects that emit events are instances of the `EventEmitter` class. These + * objects expose an `eventEmitter.on()` function that allows one or more + * functions to be attached to named events emitted by the object. Typically, + * event names are camel-cased strings but any valid JavaScript property key + * can be used. + * + * When the `EventEmitter` object emits an event, all of the functions attached + * to that specific event are called _synchronously_. Any values returned by the + * called listeners are _ignored_ and discarded. + * + * The following example shows a simple `EventEmitter` instance with a single + * listener. The `eventEmitter.on()` method is used to register listeners, while + * the `eventEmitter.emit()` method is used to trigger the event. + * + * ```js + * import { EventEmitter } from 'node:events'; + * + * class MyEmitter extends EventEmitter {} + * + * const myEmitter = new MyEmitter(); + * myEmitter.on('event', () => { + * console.log('an event occurred!'); + * }); + * myEmitter.emit('event'); + * ``` + * @see [source](https://github.com/nodejs/node/blob/v20.2.0/lib/events.js) + */ +declare module "events" { + // NOTE: This class is in the docs but is **not actually exported** by Node. + // If https://github.com/nodejs/node/issues/39903 gets resolved and Node + // actually starts exporting the class, uncomment below. + // import { EventListener, EventListenerObject } from '__dom-events'; + // /** The NodeEventTarget is a Node.js-specific extension to EventTarget that emulates a subset of the EventEmitter API. */ + // interface NodeEventTarget extends EventTarget { + // /** + // * Node.js-specific extension to the `EventTarget` class that emulates the equivalent `EventEmitter` API. + // * The only difference between `addListener()` and `addEventListener()` is that addListener() will return a reference to the EventTarget. + // */ + // addListener(type: string, listener: EventListener | EventListenerObject, options?: { once: boolean }): this; + // /** Node.js-specific extension to the `EventTarget` class that returns an array of event `type` names for which event listeners are registered. */ + // eventNames(): string[]; + // /** Node.js-specific extension to the `EventTarget` class that returns the number of event listeners registered for the `type`. */ + // listenerCount(type: string): number; + // /** Node.js-specific alias for `eventTarget.removeListener()`. */ + // off(type: string, listener: EventListener | EventListenerObject): this; + // /** Node.js-specific alias for `eventTarget.addListener()`. */ + // on(type: string, listener: EventListener | EventListenerObject, options?: { once: boolean }): this; + // /** Node.js-specific extension to the `EventTarget` class that adds a `once` listener for the given event `type`. This is equivalent to calling `on` with the `once` option set to `true`. */ + // once(type: string, listener: EventListener | EventListenerObject): this; + // /** + // * Node.js-specific extension to the `EventTarget` class. + // * If `type` is specified, removes all registered listeners for `type`, + // * otherwise removes all registered listeners. + // */ + // removeAllListeners(type: string): this; + // /** + // * Node.js-specific extension to the `EventTarget` class that removes the listener for the given `type`. + // * The only difference between `removeListener()` and `removeEventListener()` is that `removeListener()` will return a reference to the `EventTarget`. + // */ + // removeListener(type: string, listener: EventListener | EventListenerObject): this; + // } + interface EventEmitterOptions { + /** + * Enables automatic capturing of promise rejection. + */ + captureRejections?: boolean | undefined; + } + // Any EventTarget with a Node-style `once` function + interface _NodeEventTarget { + once(eventName: string | symbol, listener: (...args: any[]) => void): this; + } + // Any EventTarget with a DOM-style `addEventListener` + interface _DOMEventTarget { + addEventListener( + eventName: string, + listener: (...args: any[]) => void, + opts?: { + once: boolean; + }, + ): any; + } + interface StaticEventEmitterOptions { + signal?: AbortSignal | undefined; + } + interface EventEmitter extends NodeJS.EventEmitter {} + /** + * The `EventEmitter` class is defined and exposed by the `node:events` module: + * + * ```js + * import { EventEmitter } from 'node:events'; + * ``` + * + * All `EventEmitter`s emit the event `'newListener'` when new listeners are + * added and `'removeListener'` when existing listeners are removed. + * + * It supports the following option: + * @since v0.1.26 + */ + class EventEmitter { + constructor(options?: EventEmitterOptions); + /** + * Creates a `Promise` that is fulfilled when the `EventEmitter` emits the given + * event or that is rejected if the `EventEmitter` emits `'error'` while waiting. + * The `Promise` will resolve with an array of all the arguments emitted to the + * given event. + * + * This method is intentionally generic and works with the web platform [EventTarget](https://dom.spec.whatwg.org/#interface-eventtarget) interface, which has no special`'error'` event + * semantics and does not listen to the `'error'` event. + * + * ```js + * import { once, EventEmitter } from 'node:events'; + * import process from 'node:process'; + * + * const ee = new EventEmitter(); + * + * process.nextTick(() => { + * ee.emit('myevent', 42); + * }); + * + * const [value] = await once(ee, 'myevent'); + * console.log(value); + * + * const err = new Error('kaboom'); + * process.nextTick(() => { + * ee.emit('error', err); + * }); + * + * try { + * await once(ee, 'myevent'); + * } catch (err) { + * console.error('error happened', err); + * } + * ``` + * + * The special handling of the `'error'` event is only used when `events.once()`is used to wait for another event. If `events.once()` is used to wait for the + * '`error'` event itself, then it is treated as any other kind of event without + * special handling: + * + * ```js + * import { EventEmitter, once } from 'node:events'; + * + * const ee = new EventEmitter(); + * + * once(ee, 'error') + * .then(([err]) => console.log('ok', err.message)) + * .catch((err) => console.error('error', err.message)); + * + * ee.emit('error', new Error('boom')); + * + * // Prints: ok boom + * ``` + * + * An `AbortSignal` can be used to cancel waiting for the event: + * + * ```js + * import { EventEmitter, once } from 'node:events'; + * + * const ee = new EventEmitter(); + * const ac = new AbortController(); + * + * async function foo(emitter, event, signal) { + * try { + * await once(emitter, event, { signal }); + * console.log('event emitted!'); + * } catch (error) { + * if (error.name === 'AbortError') { + * console.error('Waiting for the event was canceled!'); + * } else { + * console.error('There was an error', error.message); + * } + * } + * } + * + * foo(ee, 'foo', ac.signal); + * ac.abort(); // Abort waiting for the event + * ee.emit('foo'); // Prints: Waiting for the event was canceled! + * ``` + * @since v11.13.0, v10.16.0 + */ + static once( + emitter: _NodeEventTarget, + eventName: string | symbol, + options?: StaticEventEmitterOptions, + ): Promise; + static once(emitter: _DOMEventTarget, eventName: string, options?: StaticEventEmitterOptions): Promise; + /** + * ```js + * import { on, EventEmitter } from 'node:events'; + * import process from 'node:process'; + * + * const ee = new EventEmitter(); + * + * // Emit later on + * process.nextTick(() => { + * ee.emit('foo', 'bar'); + * ee.emit('foo', 42); + * }); + * + * for await (const event of on(ee, 'foo')) { + * // The execution of this inner block is synchronous and it + * // processes one event at a time (even with await). Do not use + * // if concurrent execution is required. + * console.log(event); // prints ['bar'] [42] + * } + * // Unreachable here + * ``` + * + * Returns an `AsyncIterator` that iterates `eventName` events. It will throw + * if the `EventEmitter` emits `'error'`. It removes all listeners when + * exiting the loop. The `value` returned by each iteration is an array + * composed of the emitted event arguments. + * + * An `AbortSignal` can be used to cancel waiting on events: + * + * ```js + * import { on, EventEmitter } from 'node:events'; + * import process from 'node:process'; + * + * const ac = new AbortController(); + * + * (async () => { + * const ee = new EventEmitter(); + * + * // Emit later on + * process.nextTick(() => { + * ee.emit('foo', 'bar'); + * ee.emit('foo', 42); + * }); + * + * for await (const event of on(ee, 'foo', { signal: ac.signal })) { + * // The execution of this inner block is synchronous and it + * // processes one event at a time (even with await). Do not use + * // if concurrent execution is required. + * console.log(event); // prints ['bar'] [42] + * } + * // Unreachable here + * })(); + * + * process.nextTick(() => ac.abort()); + * ``` + * @since v13.6.0, v12.16.0 + * @param eventName The name of the event being listened for + * @return that iterates `eventName` events emitted by the `emitter` + */ + static on( + emitter: NodeJS.EventEmitter, + eventName: string, + options?: StaticEventEmitterOptions, + ): AsyncIterableIterator; + /** + * A class method that returns the number of listeners for the given `eventName`registered on the given `emitter`. + * + * ```js + * import { EventEmitter, listenerCount } from 'node:events'; + * + * const myEmitter = new EventEmitter(); + * myEmitter.on('event', () => {}); + * myEmitter.on('event', () => {}); + * console.log(listenerCount(myEmitter, 'event')); + * // Prints: 2 + * ``` + * @since v0.9.12 + * @deprecated Since v3.2.0 - Use `listenerCount` instead. + * @param emitter The emitter to query + * @param eventName The event name + */ + static listenerCount(emitter: NodeJS.EventEmitter, eventName: string | symbol): number; + /** + * Returns a copy of the array of listeners for the event named `eventName`. + * + * For `EventEmitter`s this behaves exactly the same as calling `.listeners` on + * the emitter. + * + * For `EventTarget`s this is the only way to get the event listeners for the + * event target. This is useful for debugging and diagnostic purposes. + * + * ```js + * import { getEventListeners, EventEmitter } from 'node:events'; + * + * { + * const ee = new EventEmitter(); + * const listener = () => console.log('Events are fun'); + * ee.on('foo', listener); + * console.log(getEventListeners(ee, 'foo')); // [ [Function: listener] ] + * } + * { + * const et = new EventTarget(); + * const listener = () => console.log('Events are fun'); + * et.addEventListener('foo', listener); + * console.log(getEventListeners(et, 'foo')); // [ [Function: listener] ] + * } + * ``` + * @since v15.2.0, v14.17.0 + */ + static getEventListeners(emitter: _DOMEventTarget | NodeJS.EventEmitter, name: string | symbol): Function[]; + /** + * Returns the currently set max amount of listeners. + * + * For `EventEmitter`s this behaves exactly the same as calling `.getMaxListeners` on + * the emitter. + * + * For `EventTarget`s this is the only way to get the max event listeners for the + * event target. If the number of event handlers on a single EventTarget exceeds + * the max set, the EventTarget will print a warning. + * + * ```js + * import { getMaxListeners, setMaxListeners, EventEmitter } from 'node:events'; + * + * { + * const ee = new EventEmitter(); + * console.log(getMaxListeners(ee)); // 10 + * setMaxListeners(11, ee); + * console.log(getMaxListeners(ee)); // 11 + * } + * { + * const et = new EventTarget(); + * console.log(getMaxListeners(et)); // 10 + * setMaxListeners(11, et); + * console.log(getMaxListeners(et)); // 11 + * } + * ``` + * @since v19.9.0 + */ + static getMaxListeners(emitter: _DOMEventTarget | NodeJS.EventEmitter): number; + /** + * ```js + * import { setMaxListeners, EventEmitter } from 'node:events'; + * + * const target = new EventTarget(); + * const emitter = new EventEmitter(); + * + * setMaxListeners(5, target, emitter); + * ``` + * @since v15.4.0 + * @param n A non-negative number. The maximum number of listeners per `EventTarget` event. + * @param eventsTargets Zero or more {EventTarget} or {EventEmitter} instances. If none are specified, `n` is set as the default max for all newly created {EventTarget} and {EventEmitter} + * objects. + */ + static setMaxListeners(n?: number, ...eventTargets: Array<_DOMEventTarget | NodeJS.EventEmitter>): void; + /** + * Listens once to the `abort` event on the provided `signal`. + * + * Listening to the `abort` event on abort signals is unsafe and may + * lead to resource leaks since another third party with the signal can + * call `e.stopImmediatePropagation()`. Unfortunately Node.js cannot change + * this since it would violate the web standard. Additionally, the original + * API makes it easy to forget to remove listeners. + * + * This API allows safely using `AbortSignal`s in Node.js APIs by solving these + * two issues by listening to the event such that `stopImmediatePropagation` does + * not prevent the listener from running. + * + * Returns a disposable so that it may be unsubscribed from more easily. + * + * ```js + * import { addAbortListener } from 'node:events'; + * + * function example(signal) { + * let disposable; + * try { + * signal.addEventListener('abort', (e) => e.stopImmediatePropagation()); + * disposable = addAbortListener(signal, (e) => { + * // Do something when signal is aborted. + * }); + * } finally { + * disposable?.[Symbol.dispose](); + * } + * } + * ``` + * @since v20.5.0 + * @experimental + * @return that removes the `abort` listener. + */ + static addAbortListener(signal: AbortSignal, resource: (event: Event) => void): Disposable; + /** + * This symbol shall be used to install a listener for only monitoring `'error'`events. Listeners installed using this symbol are called before the regular`'error'` listeners are called. + * + * Installing a listener using this symbol does not change the behavior once an`'error'` event is emitted. Therefore, the process will still crash if no + * regular `'error'` listener is installed. + * @since v13.6.0, v12.17.0 + */ + static readonly errorMonitor: unique symbol; + /** + * Value: `Symbol.for('nodejs.rejection')` + * + * See how to write a custom `rejection handler`. + * @since v13.4.0, v12.16.0 + */ + static readonly captureRejectionSymbol: unique symbol; + /** + * Value: [boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Boolean_type) + * + * Change the default `captureRejections` option on all new `EventEmitter` objects. + * @since v13.4.0, v12.16.0 + */ + static captureRejections: boolean; + /** + * By default, a maximum of `10` listeners can be registered for any single + * event. This limit can be changed for individual `EventEmitter` instances + * using the `emitter.setMaxListeners(n)` method. To change the default + * for _all_`EventEmitter` instances, the `events.defaultMaxListeners`property can be used. If this value is not a positive number, a `RangeError`is thrown. + * + * Take caution when setting the `events.defaultMaxListeners` because the + * change affects _all_`EventEmitter` instances, including those created before + * the change is made. However, calling `emitter.setMaxListeners(n)` still has + * precedence over `events.defaultMaxListeners`. + * + * This is not a hard limit. The `EventEmitter` instance will allow + * more listeners to be added but will output a trace warning to stderr indicating + * that a "possible EventEmitter memory leak" has been detected. For any single`EventEmitter`, the `emitter.getMaxListeners()` and `emitter.setMaxListeners()`methods can be used to + * temporarily avoid this warning: + * + * ```js + * import { EventEmitter } from 'node:events'; + * const emitter = new EventEmitter(); + * emitter.setMaxListeners(emitter.getMaxListeners() + 1); + * emitter.once('event', () => { + * // do stuff + * emitter.setMaxListeners(Math.max(emitter.getMaxListeners() - 1, 0)); + * }); + * ``` + * + * The `--trace-warnings` command-line flag can be used to display the + * stack trace for such warnings. + * + * The emitted warning can be inspected with `process.on('warning')` and will + * have the additional `emitter`, `type`, and `count` properties, referring to + * the event emitter instance, the event's name and the number of attached + * listeners, respectively. + * Its `name` property is set to `'MaxListenersExceededWarning'`. + * @since v0.11.2 + */ + static defaultMaxListeners: number; + } + import internal = require("node:events"); + namespace EventEmitter { + // Should just be `export { EventEmitter }`, but that doesn't work in TypeScript 3.4 + export { internal as EventEmitter }; + export interface Abortable { + /** + * When provided the corresponding `AbortController` can be used to cancel an asynchronous action. + */ + signal?: AbortSignal | undefined; + } + } + global { + namespace NodeJS { + interface EventEmitter { + /** + * Alias for `emitter.on(eventName, listener)`. + * @since v0.1.26 + */ + addListener(eventName: string | symbol, listener: (...args: any[]) => void): this; + /** + * Adds the `listener` function to the end of the listeners array for the + * event named `eventName`. No checks are made to see if the `listener` has + * already been added. Multiple calls passing the same combination of `eventName`and `listener` will result in the `listener` being added, and called, multiple + * times. + * + * ```js + * server.on('connection', (stream) => { + * console.log('someone connected!'); + * }); + * ``` + * + * Returns a reference to the `EventEmitter`, so that calls can be chained. + * + * By default, event listeners are invoked in the order they are added. The`emitter.prependListener()` method can be used as an alternative to add the + * event listener to the beginning of the listeners array. + * + * ```js + * import { EventEmitter } from 'node:events'; + * const myEE = new EventEmitter(); + * myEE.on('foo', () => console.log('a')); + * myEE.prependListener('foo', () => console.log('b')); + * myEE.emit('foo'); + * // Prints: + * // b + * // a + * ``` + * @since v0.1.101 + * @param eventName The name of the event. + * @param listener The callback function + */ + on(eventName: string | symbol, listener: (...args: any[]) => void): this; + /** + * Adds a **one-time**`listener` function for the event named `eventName`. The + * next time `eventName` is triggered, this listener is removed and then invoked. + * + * ```js + * server.once('connection', (stream) => { + * console.log('Ah, we have our first user!'); + * }); + * ``` + * + * Returns a reference to the `EventEmitter`, so that calls can be chained. + * + * By default, event listeners are invoked in the order they are added. The`emitter.prependOnceListener()` method can be used as an alternative to add the + * event listener to the beginning of the listeners array. + * + * ```js + * import { EventEmitter } from 'node:events'; + * const myEE = new EventEmitter(); + * myEE.once('foo', () => console.log('a')); + * myEE.prependOnceListener('foo', () => console.log('b')); + * myEE.emit('foo'); + * // Prints: + * // b + * // a + * ``` + * @since v0.3.0 + * @param eventName The name of the event. + * @param listener The callback function + */ + once(eventName: string | symbol, listener: (...args: any[]) => void): this; + /** + * Removes the specified `listener` from the listener array for the event named`eventName`. + * + * ```js + * const callback = (stream) => { + * console.log('someone connected!'); + * }; + * server.on('connection', callback); + * // ... + * server.removeListener('connection', callback); + * ``` + * + * `removeListener()` will remove, at most, one instance of a listener from the + * listener array. If any single listener has been added multiple times to the + * listener array for the specified `eventName`, then `removeListener()` must be + * called multiple times to remove each instance. + * + * Once an event is emitted, all listeners attached to it at the + * time of emitting are called in order. This implies that any`removeListener()` or `removeAllListeners()` calls _after_ emitting and _before_ the last listener finishes execution + * will not remove them from`emit()` in progress. Subsequent events behave as expected. + * + * ```js + * import { EventEmitter } from 'node:events'; + * class MyEmitter extends EventEmitter {} + * const myEmitter = new MyEmitter(); + * + * const callbackA = () => { + * console.log('A'); + * myEmitter.removeListener('event', callbackB); + * }; + * + * const callbackB = () => { + * console.log('B'); + * }; + * + * myEmitter.on('event', callbackA); + * + * myEmitter.on('event', callbackB); + * + * // callbackA removes listener callbackB but it will still be called. + * // Internal listener array at time of emit [callbackA, callbackB] + * myEmitter.emit('event'); + * // Prints: + * // A + * // B + * + * // callbackB is now removed. + * // Internal listener array [callbackA] + * myEmitter.emit('event'); + * // Prints: + * // A + * ``` + * + * Because listeners are managed using an internal array, calling this will + * change the position indices of any listener registered _after_ the listener + * being removed. This will not impact the order in which listeners are called, + * but it means that any copies of the listener array as returned by + * the `emitter.listeners()` method will need to be recreated. + * + * When a single function has been added as a handler multiple times for a single + * event (as in the example below), `removeListener()` will remove the most + * recently added instance. In the example the `once('ping')`listener is removed: + * + * ```js + * import { EventEmitter } from 'node:events'; + * const ee = new EventEmitter(); + * + * function pong() { + * console.log('pong'); + * } + * + * ee.on('ping', pong); + * ee.once('ping', pong); + * ee.removeListener('ping', pong); + * + * ee.emit('ping'); + * ee.emit('ping'); + * ``` + * + * Returns a reference to the `EventEmitter`, so that calls can be chained. + * @since v0.1.26 + */ + removeListener(eventName: string | symbol, listener: (...args: any[]) => void): this; + /** + * Alias for `emitter.removeListener()`. + * @since v10.0.0 + */ + off(eventName: string | symbol, listener: (...args: any[]) => void): this; + /** + * Removes all listeners, or those of the specified `eventName`. + * + * It is bad practice to remove listeners added elsewhere in the code, + * particularly when the `EventEmitter` instance was created by some other + * component or module (e.g. sockets or file streams). + * + * Returns a reference to the `EventEmitter`, so that calls can be chained. + * @since v0.1.26 + */ + removeAllListeners(event?: string | symbol): this; + /** + * By default `EventEmitter`s will print a warning if more than `10` listeners are + * added for a particular event. This is a useful default that helps finding + * memory leaks. The `emitter.setMaxListeners()` method allows the limit to be + * modified for this specific `EventEmitter` instance. The value can be set to`Infinity` (or `0`) to indicate an unlimited number of listeners. + * + * Returns a reference to the `EventEmitter`, so that calls can be chained. + * @since v0.3.5 + */ + setMaxListeners(n: number): this; + /** + * Returns the current max listener value for the `EventEmitter` which is either + * set by `emitter.setMaxListeners(n)` or defaults to {@link defaultMaxListeners}. + * @since v1.0.0 + */ + getMaxListeners(): number; + /** + * Returns a copy of the array of listeners for the event named `eventName`. + * + * ```js + * server.on('connection', (stream) => { + * console.log('someone connected!'); + * }); + * console.log(util.inspect(server.listeners('connection'))); + * // Prints: [ [Function] ] + * ``` + * @since v0.1.26 + */ + listeners(eventName: string | symbol): Function[]; + /** + * Returns a copy of the array of listeners for the event named `eventName`, + * including any wrappers (such as those created by `.once()`). + * + * ```js + * import { EventEmitter } from 'node:events'; + * const emitter = new EventEmitter(); + * emitter.once('log', () => console.log('log once')); + * + * // Returns a new Array with a function `onceWrapper` which has a property + * // `listener` which contains the original listener bound above + * const listeners = emitter.rawListeners('log'); + * const logFnWrapper = listeners[0]; + * + * // Logs "log once" to the console and does not unbind the `once` event + * logFnWrapper.listener(); + * + * // Logs "log once" to the console and removes the listener + * logFnWrapper(); + * + * emitter.on('log', () => console.log('log persistently')); + * // Will return a new Array with a single function bound by `.on()` above + * const newListeners = emitter.rawListeners('log'); + * + * // Logs "log persistently" twice + * newListeners[0](); + * emitter.emit('log'); + * ``` + * @since v9.4.0 + */ + rawListeners(eventName: string | symbol): Function[]; + /** + * Synchronously calls each of the listeners registered for the event named`eventName`, in the order they were registered, passing the supplied arguments + * to each. + * + * Returns `true` if the event had listeners, `false` otherwise. + * + * ```js + * import { EventEmitter } from 'node:events'; + * const myEmitter = new EventEmitter(); + * + * // First listener + * myEmitter.on('event', function firstListener() { + * console.log('Helloooo! first listener'); + * }); + * // Second listener + * myEmitter.on('event', function secondListener(arg1, arg2) { + * console.log(`event with parameters ${arg1}, ${arg2} in second listener`); + * }); + * // Third listener + * myEmitter.on('event', function thirdListener(...args) { + * const parameters = args.join(', '); + * console.log(`event with parameters ${parameters} in third listener`); + * }); + * + * console.log(myEmitter.listeners('event')); + * + * myEmitter.emit('event', 1, 2, 3, 4, 5); + * + * // Prints: + * // [ + * // [Function: firstListener], + * // [Function: secondListener], + * // [Function: thirdListener] + * // ] + * // Helloooo! first listener + * // event with parameters 1, 2 in second listener + * // event with parameters 1, 2, 3, 4, 5 in third listener + * ``` + * @since v0.1.26 + */ + emit(eventName: string | symbol, ...args: any[]): boolean; + /** + * Returns the number of listeners listening for the event named `eventName`. + * If `listener` is provided, it will return how many times the listener is found + * in the list of the listeners of the event. + * @since v3.2.0 + * @param eventName The name of the event being listened for + * @param listener The event handler function + */ + listenerCount(eventName: string | symbol, listener?: Function): number; + /** + * Adds the `listener` function to the _beginning_ of the listeners array for the + * event named `eventName`. No checks are made to see if the `listener` has + * already been added. Multiple calls passing the same combination of `eventName`and `listener` will result in the `listener` being added, and called, multiple + * times. + * + * ```js + * server.prependListener('connection', (stream) => { + * console.log('someone connected!'); + * }); + * ``` + * + * Returns a reference to the `EventEmitter`, so that calls can be chained. + * @since v6.0.0 + * @param eventName The name of the event. + * @param listener The callback function + */ + prependListener(eventName: string | symbol, listener: (...args: any[]) => void): this; + /** + * Adds a **one-time**`listener` function for the event named `eventName` to the _beginning_ of the listeners array. The next time `eventName` is triggered, this + * listener is removed, and then invoked. + * + * ```js + * server.prependOnceListener('connection', (stream) => { + * console.log('Ah, we have our first user!'); + * }); + * ``` + * + * Returns a reference to the `EventEmitter`, so that calls can be chained. + * @since v6.0.0 + * @param eventName The name of the event. + * @param listener The callback function + */ + prependOnceListener(eventName: string | symbol, listener: (...args: any[]) => void): this; + /** + * Returns an array listing the events for which the emitter has registered + * listeners. The values in the array are strings or `Symbol`s. + * + * ```js + * import { EventEmitter } from 'node:events'; + * + * const myEE = new EventEmitter(); + * myEE.on('foo', () => {}); + * myEE.on('bar', () => {}); + * + * const sym = Symbol('symbol'); + * myEE.on(sym, () => {}); + * + * console.log(myEE.eventNames()); + * // Prints: [ 'foo', 'bar', Symbol(symbol) ] + * ``` + * @since v6.0.0 + */ + eventNames(): Array; + } + } + } + export = EventEmitter; +} +declare module "node:events" { + import events = require("events"); + export = events; +} diff --git a/Url-Shortner/node_modules/@types/node/fs.d.ts b/Url-Shortner/node_modules/@types/node/fs.d.ts new file mode 100644 index 0000000..3f5d9a1 --- /dev/null +++ b/Url-Shortner/node_modules/@types/node/fs.d.ts @@ -0,0 +1,4289 @@ +/** + * The `node:fs` module enables interacting with the file system in a + * way modeled on standard POSIX functions. + * + * To use the promise-based APIs: + * + * ```js + * import * as fs from 'node:fs/promises'; + * ``` + * + * To use the callback and sync APIs: + * + * ```js + * import * as fs from 'node:fs'; + * ``` + * + * All file system operations have synchronous, callback, and promise-based + * forms, and are accessible using both CommonJS syntax and ES6 Modules (ESM). + * @see [source](https://github.com/nodejs/node/blob/v20.2.0/lib/fs.js) + */ +declare module "fs" { + import * as stream from "node:stream"; + import { Abortable, EventEmitter } from "node:events"; + import { URL } from "node:url"; + import * as promises from "node:fs/promises"; + export { promises }; + /** + * Valid types for path values in "fs". + */ + export type PathLike = string | Buffer | URL; + export type PathOrFileDescriptor = PathLike | number; + export type TimeLike = string | number | Date; + export type NoParamCallback = (err: NodeJS.ErrnoException | null) => void; + export type BufferEncodingOption = + | "buffer" + | { + encoding: "buffer"; + }; + export interface ObjectEncodingOptions { + encoding?: BufferEncoding | null | undefined; + } + export type EncodingOption = ObjectEncodingOptions | BufferEncoding | undefined | null; + export type OpenMode = number | string; + export type Mode = number | string; + export interface StatsBase { + isFile(): boolean; + isDirectory(): boolean; + isBlockDevice(): boolean; + isCharacterDevice(): boolean; + isSymbolicLink(): boolean; + isFIFO(): boolean; + isSocket(): boolean; + dev: T; + ino: T; + mode: T; + nlink: T; + uid: T; + gid: T; + rdev: T; + size: T; + blksize: T; + blocks: T; + atimeMs: T; + mtimeMs: T; + ctimeMs: T; + birthtimeMs: T; + atime: Date; + mtime: Date; + ctime: Date; + birthtime: Date; + } + export interface Stats extends StatsBase {} + /** + * A `fs.Stats` object provides information about a file. + * + * Objects returned from {@link stat}, {@link lstat}, {@link fstat}, and + * their synchronous counterparts are of this type. + * If `bigint` in the `options` passed to those methods is true, the numeric values + * will be `bigint` instead of `number`, and the object will contain additional + * nanosecond-precision properties suffixed with `Ns`. + * + * ```console + * Stats { + * dev: 2114, + * ino: 48064969, + * mode: 33188, + * nlink: 1, + * uid: 85, + * gid: 100, + * rdev: 0, + * size: 527, + * blksize: 4096, + * blocks: 8, + * atimeMs: 1318289051000.1, + * mtimeMs: 1318289051000.1, + * ctimeMs: 1318289051000.1, + * birthtimeMs: 1318289051000.1, + * atime: Mon, 10 Oct 2011 23:24:11 GMT, + * mtime: Mon, 10 Oct 2011 23:24:11 GMT, + * ctime: Mon, 10 Oct 2011 23:24:11 GMT, + * birthtime: Mon, 10 Oct 2011 23:24:11 GMT } + * ``` + * + * `bigint` version: + * + * ```console + * BigIntStats { + * dev: 2114n, + * ino: 48064969n, + * mode: 33188n, + * nlink: 1n, + * uid: 85n, + * gid: 100n, + * rdev: 0n, + * size: 527n, + * blksize: 4096n, + * blocks: 8n, + * atimeMs: 1318289051000n, + * mtimeMs: 1318289051000n, + * ctimeMs: 1318289051000n, + * birthtimeMs: 1318289051000n, + * atimeNs: 1318289051000000000n, + * mtimeNs: 1318289051000000000n, + * ctimeNs: 1318289051000000000n, + * birthtimeNs: 1318289051000000000n, + * atime: Mon, 10 Oct 2011 23:24:11 GMT, + * mtime: Mon, 10 Oct 2011 23:24:11 GMT, + * ctime: Mon, 10 Oct 2011 23:24:11 GMT, + * birthtime: Mon, 10 Oct 2011 23:24:11 GMT } + * ``` + * @since v0.1.21 + */ + export class Stats {} + export interface StatsFsBase { + /** Type of file system. */ + type: T; + /** Optimal transfer block size. */ + bsize: T; + /** Total data blocks in file system. */ + blocks: T; + /** Free blocks in file system. */ + bfree: T; + /** Available blocks for unprivileged users */ + bavail: T; + /** Total file nodes in file system. */ + files: T; + /** Free file nodes in file system. */ + ffree: T; + } + export interface StatsFs extends StatsFsBase {} + /** + * Provides information about a mounted file system. + * + * Objects returned from {@link statfs} and its synchronous counterpart are of + * this type. If `bigint` in the `options` passed to those methods is `true`, the + * numeric values will be `bigint` instead of `number`. + * + * ```console + * StatFs { + * type: 1397114950, + * bsize: 4096, + * blocks: 121938943, + * bfree: 61058895, + * bavail: 61058895, + * files: 999, + * ffree: 1000000 + * } + * ``` + * + * `bigint` version: + * + * ```console + * StatFs { + * type: 1397114950n, + * bsize: 4096n, + * blocks: 121938943n, + * bfree: 61058895n, + * bavail: 61058895n, + * files: 999n, + * ffree: 1000000n + * } + * ``` + * @since v19.6.0, v18.15.0 + */ + export class StatsFs {} + export interface BigIntStatsFs extends StatsFsBase {} + export interface StatFsOptions { + bigint?: boolean | undefined; + } + /** + * A representation of a directory entry, which can be a file or a subdirectory + * within the directory, as returned by reading from an `fs.Dir`. The + * directory entry is a combination of the file name and file type pairs. + * + * Additionally, when {@link readdir} or {@link readdirSync} is called with + * the `withFileTypes` option set to `true`, the resulting array is filled with `fs.Dirent` objects, rather than strings or `Buffer` s. + * @since v10.10.0 + */ + export class Dirent { + /** + * Returns `true` if the `fs.Dirent` object describes a regular file. + * @since v10.10.0 + */ + isFile(): boolean; + /** + * Returns `true` if the `fs.Dirent` object describes a file system + * directory. + * @since v10.10.0 + */ + isDirectory(): boolean; + /** + * Returns `true` if the `fs.Dirent` object describes a block device. + * @since v10.10.0 + */ + isBlockDevice(): boolean; + /** + * Returns `true` if the `fs.Dirent` object describes a character device. + * @since v10.10.0 + */ + isCharacterDevice(): boolean; + /** + * Returns `true` if the `fs.Dirent` object describes a symbolic link. + * @since v10.10.0 + */ + isSymbolicLink(): boolean; + /** + * Returns `true` if the `fs.Dirent` object describes a first-in-first-out + * (FIFO) pipe. + * @since v10.10.0 + */ + isFIFO(): boolean; + /** + * Returns `true` if the `fs.Dirent` object describes a socket. + * @since v10.10.0 + */ + isSocket(): boolean; + /** + * The file name that this `fs.Dirent` object refers to. The type of this + * value is determined by the `options.encoding` passed to {@link readdir} or {@link readdirSync}. + * @since v10.10.0 + */ + name: string; + /** + * The base path that this `fs.Dirent` object refers to. + * @since v20.1.0 + */ + path: string; + } + /** + * A class representing a directory stream. + * + * Created by {@link opendir}, {@link opendirSync}, or `fsPromises.opendir()`. + * + * ```js + * import { opendir } from 'node:fs/promises'; + * + * try { + * const dir = await opendir('./'); + * for await (const dirent of dir) + * console.log(dirent.name); + * } catch (err) { + * console.error(err); + * } + * ``` + * + * When using the async iterator, the `fs.Dir` object will be automatically + * closed after the iterator exits. + * @since v12.12.0 + */ + export class Dir implements AsyncIterable { + /** + * The read-only path of this directory as was provided to {@link opendir},{@link opendirSync}, or `fsPromises.opendir()`. + * @since v12.12.0 + */ + readonly path: string; + /** + * Asynchronously iterates over the directory via `readdir(3)` until all entries have been read. + */ + [Symbol.asyncIterator](): AsyncIterableIterator; + /** + * Asynchronously close the directory's underlying resource handle. + * Subsequent reads will result in errors. + * + * A promise is returned that will be resolved after the resource has been + * closed. + * @since v12.12.0 + */ + close(): Promise; + close(cb: NoParamCallback): void; + /** + * Synchronously close the directory's underlying resource handle. + * Subsequent reads will result in errors. + * @since v12.12.0 + */ + closeSync(): void; + /** + * Asynchronously read the next directory entry via [`readdir(3)`](http://man7.org/linux/man-pages/man3/readdir.3.html) as an `fs.Dirent`. + * + * A promise is returned that will be resolved with an `fs.Dirent`, or `null`if there are no more directory entries to read. + * + * Directory entries returned by this function are in no particular order as + * provided by the operating system's underlying directory mechanisms. + * Entries added or removed while iterating over the directory might not be + * included in the iteration results. + * @since v12.12.0 + * @return containing {fs.Dirent|null} + */ + read(): Promise; + read(cb: (err: NodeJS.ErrnoException | null, dirEnt: Dirent | null) => void): void; + /** + * Synchronously read the next directory entry as an `fs.Dirent`. See the + * POSIX [`readdir(3)`](http://man7.org/linux/man-pages/man3/readdir.3.html) documentation for more detail. + * + * If there are no more directory entries to read, `null` will be returned. + * + * Directory entries returned by this function are in no particular order as + * provided by the operating system's underlying directory mechanisms. + * Entries added or removed while iterating over the directory might not be + * included in the iteration results. + * @since v12.12.0 + */ + readSync(): Dirent | null; + } + /** + * Class: fs.StatWatcher + * @since v14.3.0, v12.20.0 + * Extends `EventEmitter` + * A successful call to {@link watchFile} method will return a new fs.StatWatcher object. + */ + export interface StatWatcher extends EventEmitter { + /** + * When called, requests that the Node.js event loop _not_ exit so long as the `fs.StatWatcher` is active. Calling `watcher.ref()` multiple times will have + * no effect. + * + * By default, all `fs.StatWatcher` objects are "ref'ed", making it normally + * unnecessary to call `watcher.ref()` unless `watcher.unref()` had been + * called previously. + * @since v14.3.0, v12.20.0 + */ + ref(): this; + /** + * When called, the active `fs.StatWatcher` object will not require the Node.js + * event loop to remain active. If there is no other activity keeping the + * event loop running, the process may exit before the `fs.StatWatcher` object's + * callback is invoked. Calling `watcher.unref()` multiple times will have + * no effect. + * @since v14.3.0, v12.20.0 + */ + unref(): this; + } + export interface FSWatcher extends EventEmitter { + /** + * Stop watching for changes on the given `fs.FSWatcher`. Once stopped, the `fs.FSWatcher` object is no longer usable. + * @since v0.5.8 + */ + close(): void; + /** + * events.EventEmitter + * 1. change + * 2. error + */ + addListener(event: string, listener: (...args: any[]) => void): this; + addListener(event: "change", listener: (eventType: string, filename: string | Buffer) => void): this; + addListener(event: "error", listener: (error: Error) => void): this; + addListener(event: "close", listener: () => void): this; + on(event: string, listener: (...args: any[]) => void): this; + on(event: "change", listener: (eventType: string, filename: string | Buffer) => void): this; + on(event: "error", listener: (error: Error) => void): this; + on(event: "close", listener: () => void): this; + once(event: string, listener: (...args: any[]) => void): this; + once(event: "change", listener: (eventType: string, filename: string | Buffer) => void): this; + once(event: "error", listener: (error: Error) => void): this; + once(event: "close", listener: () => void): this; + prependListener(event: string, listener: (...args: any[]) => void): this; + prependListener(event: "change", listener: (eventType: string, filename: string | Buffer) => void): this; + prependListener(event: "error", listener: (error: Error) => void): this; + prependListener(event: "close", listener: () => void): this; + prependOnceListener(event: string, listener: (...args: any[]) => void): this; + prependOnceListener(event: "change", listener: (eventType: string, filename: string | Buffer) => void): this; + prependOnceListener(event: "error", listener: (error: Error) => void): this; + prependOnceListener(event: "close", listener: () => void): this; + } + /** + * Instances of `fs.ReadStream` are created and returned using the {@link createReadStream} function. + * @since v0.1.93 + */ + export class ReadStream extends stream.Readable { + close(callback?: (err?: NodeJS.ErrnoException | null) => void): void; + /** + * The number of bytes that have been read so far. + * @since v6.4.0 + */ + bytesRead: number; + /** + * The path to the file the stream is reading from as specified in the first + * argument to `fs.createReadStream()`. If `path` is passed as a string, then`readStream.path` will be a string. If `path` is passed as a `Buffer`, then`readStream.path` will be a + * `Buffer`. If `fd` is specified, then`readStream.path` will be `undefined`. + * @since v0.1.93 + */ + path: string | Buffer; + /** + * This property is `true` if the underlying file has not been opened yet, + * i.e. before the `'ready'` event is emitted. + * @since v11.2.0, v10.16.0 + */ + pending: boolean; + /** + * events.EventEmitter + * 1. open + * 2. close + * 3. ready + */ + addListener(event: "close", listener: () => void): this; + addListener(event: "data", listener: (chunk: Buffer | string) => void): this; + addListener(event: "end", listener: () => void): this; + addListener(event: "error", listener: (err: Error) => void): this; + addListener(event: "open", listener: (fd: number) => void): this; + addListener(event: "pause", listener: () => void): this; + addListener(event: "readable", listener: () => void): this; + addListener(event: "ready", listener: () => void): this; + addListener(event: "resume", listener: () => void): this; + addListener(event: string | symbol, listener: (...args: any[]) => void): this; + on(event: "close", listener: () => void): this; + on(event: "data", listener: (chunk: Buffer | string) => void): this; + on(event: "end", listener: () => void): this; + on(event: "error", listener: (err: Error) => void): this; + on(event: "open", listener: (fd: number) => void): this; + on(event: "pause", listener: () => void): this; + on(event: "readable", listener: () => void): this; + on(event: "ready", listener: () => void): this; + on(event: "resume", listener: () => void): this; + on(event: string | symbol, listener: (...args: any[]) => void): this; + once(event: "close", listener: () => void): this; + once(event: "data", listener: (chunk: Buffer | string) => void): this; + once(event: "end", listener: () => void): this; + once(event: "error", listener: (err: Error) => void): this; + once(event: "open", listener: (fd: number) => void): this; + once(event: "pause", listener: () => void): this; + once(event: "readable", listener: () => void): this; + once(event: "ready", listener: () => void): this; + once(event: "resume", listener: () => void): this; + once(event: string | symbol, listener: (...args: any[]) => void): this; + prependListener(event: "close", listener: () => void): this; + prependListener(event: "data", listener: (chunk: Buffer | string) => void): this; + prependListener(event: "end", listener: () => void): this; + prependListener(event: "error", listener: (err: Error) => void): this; + prependListener(event: "open", listener: (fd: number) => void): this; + prependListener(event: "pause", listener: () => void): this; + prependListener(event: "readable", listener: () => void): this; + prependListener(event: "ready", listener: () => void): this; + prependListener(event: "resume", listener: () => void): this; + prependListener(event: string | symbol, listener: (...args: any[]) => void): this; + prependOnceListener(event: "close", listener: () => void): this; + prependOnceListener(event: "data", listener: (chunk: Buffer | string) => void): this; + prependOnceListener(event: "end", listener: () => void): this; + prependOnceListener(event: "error", listener: (err: Error) => void): this; + prependOnceListener(event: "open", listener: (fd: number) => void): this; + prependOnceListener(event: "pause", listener: () => void): this; + prependOnceListener(event: "readable", listener: () => void): this; + prependOnceListener(event: "ready", listener: () => void): this; + prependOnceListener(event: "resume", listener: () => void): this; + prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this; + } + /** + * * Extends `stream.Writable` + * + * Instances of `fs.WriteStream` are created and returned using the {@link createWriteStream} function. + * @since v0.1.93 + */ + export class WriteStream extends stream.Writable { + /** + * Closes `writeStream`. Optionally accepts a + * callback that will be executed once the `writeStream`is closed. + * @since v0.9.4 + */ + close(callback?: (err?: NodeJS.ErrnoException | null) => void): void; + /** + * The number of bytes written so far. Does not include data that is still queued + * for writing. + * @since v0.4.7 + */ + bytesWritten: number; + /** + * The path to the file the stream is writing to as specified in the first + * argument to {@link createWriteStream}. If `path` is passed as a string, then`writeStream.path` will be a string. If `path` is passed as a `Buffer`, then`writeStream.path` will be a + * `Buffer`. + * @since v0.1.93 + */ + path: string | Buffer; + /** + * This property is `true` if the underlying file has not been opened yet, + * i.e. before the `'ready'` event is emitted. + * @since v11.2.0 + */ + pending: boolean; + /** + * events.EventEmitter + * 1. open + * 2. close + * 3. ready + */ + addListener(event: "close", listener: () => void): this; + addListener(event: "drain", listener: () => void): this; + addListener(event: "error", listener: (err: Error) => void): this; + addListener(event: "finish", listener: () => void): this; + addListener(event: "open", listener: (fd: number) => void): this; + addListener(event: "pipe", listener: (src: stream.Readable) => void): this; + addListener(event: "ready", listener: () => void): this; + addListener(event: "unpipe", listener: (src: stream.Readable) => void): this; + addListener(event: string | symbol, listener: (...args: any[]) => void): this; + on(event: "close", listener: () => void): this; + on(event: "drain", listener: () => void): this; + on(event: "error", listener: (err: Error) => void): this; + on(event: "finish", listener: () => void): this; + on(event: "open", listener: (fd: number) => void): this; + on(event: "pipe", listener: (src: stream.Readable) => void): this; + on(event: "ready", listener: () => void): this; + on(event: "unpipe", listener: (src: stream.Readable) => void): this; + on(event: string | symbol, listener: (...args: any[]) => void): this; + once(event: "close", listener: () => void): this; + once(event: "drain", listener: () => void): this; + once(event: "error", listener: (err: Error) => void): this; + once(event: "finish", listener: () => void): this; + once(event: "open", listener: (fd: number) => void): this; + once(event: "pipe", listener: (src: stream.Readable) => void): this; + once(event: "ready", listener: () => void): this; + once(event: "unpipe", listener: (src: stream.Readable) => void): this; + once(event: string | symbol, listener: (...args: any[]) => void): this; + prependListener(event: "close", listener: () => void): this; + prependListener(event: "drain", listener: () => void): this; + prependListener(event: "error", listener: (err: Error) => void): this; + prependListener(event: "finish", listener: () => void): this; + prependListener(event: "open", listener: (fd: number) => void): this; + prependListener(event: "pipe", listener: (src: stream.Readable) => void): this; + prependListener(event: "ready", listener: () => void): this; + prependListener(event: "unpipe", listener: (src: stream.Readable) => void): this; + prependListener(event: string | symbol, listener: (...args: any[]) => void): this; + prependOnceListener(event: "close", listener: () => void): this; + prependOnceListener(event: "drain", listener: () => void): this; + prependOnceListener(event: "error", listener: (err: Error) => void): this; + prependOnceListener(event: "finish", listener: () => void): this; + prependOnceListener(event: "open", listener: (fd: number) => void): this; + prependOnceListener(event: "pipe", listener: (src: stream.Readable) => void): this; + prependOnceListener(event: "ready", listener: () => void): this; + prependOnceListener(event: "unpipe", listener: (src: stream.Readable) => void): this; + prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this; + } + /** + * Asynchronously rename file at `oldPath` to the pathname provided + * as `newPath`. In the case that `newPath` already exists, it will + * be overwritten. If there is a directory at `newPath`, an error will + * be raised instead. No arguments other than a possible exception are + * given to the completion callback. + * + * See also: [`rename(2)`](http://man7.org/linux/man-pages/man2/rename.2.html). + * + * ```js + * import { rename } from 'node:fs'; + * + * rename('oldFile.txt', 'newFile.txt', (err) => { + * if (err) throw err; + * console.log('Rename complete!'); + * }); + * ``` + * @since v0.0.2 + */ + export function rename(oldPath: PathLike, newPath: PathLike, callback: NoParamCallback): void; + export namespace rename { + /** + * Asynchronous rename(2) - Change the name or location of a file or directory. + * @param oldPath A path to a file. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + * @param newPath A path to a file. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + */ + function __promisify__(oldPath: PathLike, newPath: PathLike): Promise; + } + /** + * Renames the file from `oldPath` to `newPath`. Returns `undefined`. + * + * See the POSIX [`rename(2)`](http://man7.org/linux/man-pages/man2/rename.2.html) documentation for more details. + * @since v0.1.21 + */ + export function renameSync(oldPath: PathLike, newPath: PathLike): void; + /** + * Truncates the file. No arguments other than a possible exception are + * given to the completion callback. A file descriptor can also be passed as the + * first argument. In this case, `fs.ftruncate()` is called. + * + * ```js + * import { truncate } from 'node:fs'; + * // Assuming that 'path/file.txt' is a regular file. + * truncate('path/file.txt', (err) => { + * if (err) throw err; + * console.log('path/file.txt was truncated'); + * }); + * ``` + * + * Passing a file descriptor is deprecated and may result in an error being thrown + * in the future. + * + * See the POSIX [`truncate(2)`](http://man7.org/linux/man-pages/man2/truncate.2.html) documentation for more details. + * @since v0.8.6 + * @param [len=0] + */ + export function truncate(path: PathLike, len: number | undefined | null, callback: NoParamCallback): void; + /** + * Asynchronous truncate(2) - Truncate a file to a specified length. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + export function truncate(path: PathLike, callback: NoParamCallback): void; + export namespace truncate { + /** + * Asynchronous truncate(2) - Truncate a file to a specified length. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param len If not specified, defaults to `0`. + */ + function __promisify__(path: PathLike, len?: number | null): Promise; + } + /** + * Truncates the file. Returns `undefined`. A file descriptor can also be + * passed as the first argument. In this case, `fs.ftruncateSync()` is called. + * + * Passing a file descriptor is deprecated and may result in an error being thrown + * in the future. + * @since v0.8.6 + * @param [len=0] + */ + export function truncateSync(path: PathLike, len?: number | null): void; + /** + * Truncates the file descriptor. No arguments other than a possible exception are + * given to the completion callback. + * + * See the POSIX [`ftruncate(2)`](http://man7.org/linux/man-pages/man2/ftruncate.2.html) documentation for more detail. + * + * If the file referred to by the file descriptor was larger than `len` bytes, only + * the first `len` bytes will be retained in the file. + * + * For example, the following program retains only the first four bytes of the + * file: + * + * ```js + * import { open, close, ftruncate } from 'node:fs'; + * + * function closeFd(fd) { + * close(fd, (err) => { + * if (err) throw err; + * }); + * } + * + * open('temp.txt', 'r+', (err, fd) => { + * if (err) throw err; + * + * try { + * ftruncate(fd, 4, (err) => { + * closeFd(fd); + * if (err) throw err; + * }); + * } catch (err) { + * closeFd(fd); + * if (err) throw err; + * } + * }); + * ``` + * + * If the file previously was shorter than `len` bytes, it is extended, and the + * extended part is filled with null bytes (`'\0'`): + * + * If `len` is negative then `0` will be used. + * @since v0.8.6 + * @param [len=0] + */ + export function ftruncate(fd: number, len: number | undefined | null, callback: NoParamCallback): void; + /** + * Asynchronous ftruncate(2) - Truncate a file to a specified length. + * @param fd A file descriptor. + */ + export function ftruncate(fd: number, callback: NoParamCallback): void; + export namespace ftruncate { + /** + * Asynchronous ftruncate(2) - Truncate a file to a specified length. + * @param fd A file descriptor. + * @param len If not specified, defaults to `0`. + */ + function __promisify__(fd: number, len?: number | null): Promise; + } + /** + * Truncates the file descriptor. Returns `undefined`. + * + * For detailed information, see the documentation of the asynchronous version of + * this API: {@link ftruncate}. + * @since v0.8.6 + * @param [len=0] + */ + export function ftruncateSync(fd: number, len?: number | null): void; + /** + * Asynchronously changes owner and group of a file. No arguments other than a + * possible exception are given to the completion callback. + * + * See the POSIX [`chown(2)`](http://man7.org/linux/man-pages/man2/chown.2.html) documentation for more detail. + * @since v0.1.97 + */ + export function chown(path: PathLike, uid: number, gid: number, callback: NoParamCallback): void; + export namespace chown { + /** + * Asynchronous chown(2) - Change ownership of a file. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + function __promisify__(path: PathLike, uid: number, gid: number): Promise; + } + /** + * Synchronously changes owner and group of a file. Returns `undefined`. + * This is the synchronous version of {@link chown}. + * + * See the POSIX [`chown(2)`](http://man7.org/linux/man-pages/man2/chown.2.html) documentation for more detail. + * @since v0.1.97 + */ + export function chownSync(path: PathLike, uid: number, gid: number): void; + /** + * Sets the owner of the file. No arguments other than a possible exception are + * given to the completion callback. + * + * See the POSIX [`fchown(2)`](http://man7.org/linux/man-pages/man2/fchown.2.html) documentation for more detail. + * @since v0.4.7 + */ + export function fchown(fd: number, uid: number, gid: number, callback: NoParamCallback): void; + export namespace fchown { + /** + * Asynchronous fchown(2) - Change ownership of a file. + * @param fd A file descriptor. + */ + function __promisify__(fd: number, uid: number, gid: number): Promise; + } + /** + * Sets the owner of the file. Returns `undefined`. + * + * See the POSIX [`fchown(2)`](http://man7.org/linux/man-pages/man2/fchown.2.html) documentation for more detail. + * @since v0.4.7 + * @param uid The file's new owner's user id. + * @param gid The file's new group's group id. + */ + export function fchownSync(fd: number, uid: number, gid: number): void; + /** + * Set the owner of the symbolic link. No arguments other than a possible + * exception are given to the completion callback. + * + * See the POSIX [`lchown(2)`](http://man7.org/linux/man-pages/man2/lchown.2.html) documentation for more detail. + */ + export function lchown(path: PathLike, uid: number, gid: number, callback: NoParamCallback): void; + export namespace lchown { + /** + * Asynchronous lchown(2) - Change ownership of a file. Does not dereference symbolic links. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + function __promisify__(path: PathLike, uid: number, gid: number): Promise; + } + /** + * Set the owner for the path. Returns `undefined`. + * + * See the POSIX [`lchown(2)`](http://man7.org/linux/man-pages/man2/lchown.2.html) documentation for more details. + * @param uid The file's new owner's user id. + * @param gid The file's new group's group id. + */ + export function lchownSync(path: PathLike, uid: number, gid: number): void; + /** + * Changes the access and modification times of a file in the same way as {@link utimes}, with the difference that if the path refers to a symbolic + * link, then the link is not dereferenced: instead, the timestamps of the + * symbolic link itself are changed. + * + * No arguments other than a possible exception are given to the completion + * callback. + * @since v14.5.0, v12.19.0 + */ + export function lutimes(path: PathLike, atime: TimeLike, mtime: TimeLike, callback: NoParamCallback): void; + export namespace lutimes { + /** + * Changes the access and modification times of a file in the same way as `fsPromises.utimes()`, + * with the difference that if the path refers to a symbolic link, then the link is not + * dereferenced: instead, the timestamps of the symbolic link itself are changed. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param atime The last access time. If a string is provided, it will be coerced to number. + * @param mtime The last modified time. If a string is provided, it will be coerced to number. + */ + function __promisify__(path: PathLike, atime: TimeLike, mtime: TimeLike): Promise; + } + /** + * Change the file system timestamps of the symbolic link referenced by `path`. + * Returns `undefined`, or throws an exception when parameters are incorrect or + * the operation fails. This is the synchronous version of {@link lutimes}. + * @since v14.5.0, v12.19.0 + */ + export function lutimesSync(path: PathLike, atime: TimeLike, mtime: TimeLike): void; + /** + * Asynchronously changes the permissions of a file. No arguments other than a + * possible exception are given to the completion callback. + * + * See the POSIX [`chmod(2)`](http://man7.org/linux/man-pages/man2/chmod.2.html) documentation for more detail. + * + * ```js + * import { chmod } from 'node:fs'; + * + * chmod('my_file.txt', 0o775, (err) => { + * if (err) throw err; + * console.log('The permissions for file "my_file.txt" have been changed!'); + * }); + * ``` + * @since v0.1.30 + */ + export function chmod(path: PathLike, mode: Mode, callback: NoParamCallback): void; + export namespace chmod { + /** + * Asynchronous chmod(2) - Change permissions of a file. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param mode A file mode. If a string is passed, it is parsed as an octal integer. + */ + function __promisify__(path: PathLike, mode: Mode): Promise; + } + /** + * For detailed information, see the documentation of the asynchronous version of + * this API: {@link chmod}. + * + * See the POSIX [`chmod(2)`](http://man7.org/linux/man-pages/man2/chmod.2.html) documentation for more detail. + * @since v0.6.7 + */ + export function chmodSync(path: PathLike, mode: Mode): void; + /** + * Sets the permissions on the file. No arguments other than a possible exception + * are given to the completion callback. + * + * See the POSIX [`fchmod(2)`](http://man7.org/linux/man-pages/man2/fchmod.2.html) documentation for more detail. + * @since v0.4.7 + */ + export function fchmod(fd: number, mode: Mode, callback: NoParamCallback): void; + export namespace fchmod { + /** + * Asynchronous fchmod(2) - Change permissions of a file. + * @param fd A file descriptor. + * @param mode A file mode. If a string is passed, it is parsed as an octal integer. + */ + function __promisify__(fd: number, mode: Mode): Promise; + } + /** + * Sets the permissions on the file. Returns `undefined`. + * + * See the POSIX [`fchmod(2)`](http://man7.org/linux/man-pages/man2/fchmod.2.html) documentation for more detail. + * @since v0.4.7 + */ + export function fchmodSync(fd: number, mode: Mode): void; + /** + * Changes the permissions on a symbolic link. No arguments other than a possible + * exception are given to the completion callback. + * + * This method is only implemented on macOS. + * + * See the POSIX [`lchmod(2)`](https://www.freebsd.org/cgi/man.cgi?query=lchmod&sektion=2) documentation for more detail. + * @deprecated Since v0.4.7 + */ + export function lchmod(path: PathLike, mode: Mode, callback: NoParamCallback): void; + /** @deprecated */ + export namespace lchmod { + /** + * Asynchronous lchmod(2) - Change permissions of a file. Does not dereference symbolic links. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param mode A file mode. If a string is passed, it is parsed as an octal integer. + */ + function __promisify__(path: PathLike, mode: Mode): Promise; + } + /** + * Changes the permissions on a symbolic link. Returns `undefined`. + * + * This method is only implemented on macOS. + * + * See the POSIX [`lchmod(2)`](https://www.freebsd.org/cgi/man.cgi?query=lchmod&sektion=2) documentation for more detail. + * @deprecated Since v0.4.7 + */ + export function lchmodSync(path: PathLike, mode: Mode): void; + /** + * Asynchronous [`stat(2)`](http://man7.org/linux/man-pages/man2/stat.2.html). The callback gets two arguments `(err, stats)` where`stats` is an `fs.Stats` object. + * + * In case of an error, the `err.code` will be one of `Common System Errors`. + * + * {@link stat} follows symbolic links. Use {@link lstat} to look at the + * links themselves. + * + * Using `fs.stat()` to check for the existence of a file before calling`fs.open()`, `fs.readFile()`, or `fs.writeFile()` is not recommended. + * Instead, user code should open/read/write the file directly and handle the + * error raised if the file is not available. + * + * To check if a file exists without manipulating it afterwards, {@link access} is recommended. + * + * For example, given the following directory structure: + * + * ```text + * - txtDir + * -- file.txt + * - app.js + * ``` + * + * The next program will check for the stats of the given paths: + * + * ```js + * import { stat } from 'node:fs'; + * + * const pathsToCheck = ['./txtDir', './txtDir/file.txt']; + * + * for (let i = 0; i < pathsToCheck.length; i++) { + * stat(pathsToCheck[i], (err, stats) => { + * console.log(stats.isDirectory()); + * console.log(stats); + * }); + * } + * ``` + * + * The resulting output will resemble: + * + * ```console + * true + * Stats { + * dev: 16777220, + * mode: 16877, + * nlink: 3, + * uid: 501, + * gid: 20, + * rdev: 0, + * blksize: 4096, + * ino: 14214262, + * size: 96, + * blocks: 0, + * atimeMs: 1561174653071.963, + * mtimeMs: 1561174614583.3518, + * ctimeMs: 1561174626623.5366, + * birthtimeMs: 1561174126937.2893, + * atime: 2019-06-22T03:37:33.072Z, + * mtime: 2019-06-22T03:36:54.583Z, + * ctime: 2019-06-22T03:37:06.624Z, + * birthtime: 2019-06-22T03:28:46.937Z + * } + * false + * Stats { + * dev: 16777220, + * mode: 33188, + * nlink: 1, + * uid: 501, + * gid: 20, + * rdev: 0, + * blksize: 4096, + * ino: 14214074, + * size: 8, + * blocks: 8, + * atimeMs: 1561174616618.8555, + * mtimeMs: 1561174614584, + * ctimeMs: 1561174614583.8145, + * birthtimeMs: 1561174007710.7478, + * atime: 2019-06-22T03:36:56.619Z, + * mtime: 2019-06-22T03:36:54.584Z, + * ctime: 2019-06-22T03:36:54.584Z, + * birthtime: 2019-06-22T03:26:47.711Z + * } + * ``` + * @since v0.0.2 + */ + export function stat(path: PathLike, callback: (err: NodeJS.ErrnoException | null, stats: Stats) => void): void; + export function stat( + path: PathLike, + options: + | (StatOptions & { + bigint?: false | undefined; + }) + | undefined, + callback: (err: NodeJS.ErrnoException | null, stats: Stats) => void, + ): void; + export function stat( + path: PathLike, + options: StatOptions & { + bigint: true; + }, + callback: (err: NodeJS.ErrnoException | null, stats: BigIntStats) => void, + ): void; + export function stat( + path: PathLike, + options: StatOptions | undefined, + callback: (err: NodeJS.ErrnoException | null, stats: Stats | BigIntStats) => void, + ): void; + export namespace stat { + /** + * Asynchronous stat(2) - Get file status. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + function __promisify__( + path: PathLike, + options?: StatOptions & { + bigint?: false | undefined; + }, + ): Promise; + function __promisify__( + path: PathLike, + options: StatOptions & { + bigint: true; + }, + ): Promise; + function __promisify__(path: PathLike, options?: StatOptions): Promise; + } + export interface StatSyncFn extends Function { + (path: PathLike, options?: undefined): Stats; + ( + path: PathLike, + options?: StatSyncOptions & { + bigint?: false | undefined; + throwIfNoEntry: false; + }, + ): Stats | undefined; + ( + path: PathLike, + options: StatSyncOptions & { + bigint: true; + throwIfNoEntry: false; + }, + ): BigIntStats | undefined; + ( + path: PathLike, + options?: StatSyncOptions & { + bigint?: false | undefined; + }, + ): Stats; + ( + path: PathLike, + options: StatSyncOptions & { + bigint: true; + }, + ): BigIntStats; + ( + path: PathLike, + options: StatSyncOptions & { + bigint: boolean; + throwIfNoEntry?: false | undefined; + }, + ): Stats | BigIntStats; + (path: PathLike, options?: StatSyncOptions): Stats | BigIntStats | undefined; + } + /** + * Synchronous stat(2) - Get file status. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + export const statSync: StatSyncFn; + /** + * Invokes the callback with the `fs.Stats` for the file descriptor. + * + * See the POSIX [`fstat(2)`](http://man7.org/linux/man-pages/man2/fstat.2.html) documentation for more detail. + * @since v0.1.95 + */ + export function fstat(fd: number, callback: (err: NodeJS.ErrnoException | null, stats: Stats) => void): void; + export function fstat( + fd: number, + options: + | (StatOptions & { + bigint?: false | undefined; + }) + | undefined, + callback: (err: NodeJS.ErrnoException | null, stats: Stats) => void, + ): void; + export function fstat( + fd: number, + options: StatOptions & { + bigint: true; + }, + callback: (err: NodeJS.ErrnoException | null, stats: BigIntStats) => void, + ): void; + export function fstat( + fd: number, + options: StatOptions | undefined, + callback: (err: NodeJS.ErrnoException | null, stats: Stats | BigIntStats) => void, + ): void; + export namespace fstat { + /** + * Asynchronous fstat(2) - Get file status. + * @param fd A file descriptor. + */ + function __promisify__( + fd: number, + options?: StatOptions & { + bigint?: false | undefined; + }, + ): Promise; + function __promisify__( + fd: number, + options: StatOptions & { + bigint: true; + }, + ): Promise; + function __promisify__(fd: number, options?: StatOptions): Promise; + } + /** + * Retrieves the `fs.Stats` for the file descriptor. + * + * See the POSIX [`fstat(2)`](http://man7.org/linux/man-pages/man2/fstat.2.html) documentation for more detail. + * @since v0.1.95 + */ + export function fstatSync( + fd: number, + options?: StatOptions & { + bigint?: false | undefined; + }, + ): Stats; + export function fstatSync( + fd: number, + options: StatOptions & { + bigint: true; + }, + ): BigIntStats; + export function fstatSync(fd: number, options?: StatOptions): Stats | BigIntStats; + /** + * Retrieves the `fs.Stats` for the symbolic link referred to by the path. + * The callback gets two arguments `(err, stats)` where `stats` is a `fs.Stats` object. `lstat()` is identical to `stat()`, except that if `path` is a symbolic + * link, then the link itself is stat-ed, not the file that it refers to. + * + * See the POSIX [`lstat(2)`](http://man7.org/linux/man-pages/man2/lstat.2.html) documentation for more details. + * @since v0.1.30 + */ + export function lstat(path: PathLike, callback: (err: NodeJS.ErrnoException | null, stats: Stats) => void): void; + export function lstat( + path: PathLike, + options: + | (StatOptions & { + bigint?: false | undefined; + }) + | undefined, + callback: (err: NodeJS.ErrnoException | null, stats: Stats) => void, + ): void; + export function lstat( + path: PathLike, + options: StatOptions & { + bigint: true; + }, + callback: (err: NodeJS.ErrnoException | null, stats: BigIntStats) => void, + ): void; + export function lstat( + path: PathLike, + options: StatOptions | undefined, + callback: (err: NodeJS.ErrnoException | null, stats: Stats | BigIntStats) => void, + ): void; + export namespace lstat { + /** + * Asynchronous lstat(2) - Get file status. Does not dereference symbolic links. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + function __promisify__( + path: PathLike, + options?: StatOptions & { + bigint?: false | undefined; + }, + ): Promise; + function __promisify__( + path: PathLike, + options: StatOptions & { + bigint: true; + }, + ): Promise; + function __promisify__(path: PathLike, options?: StatOptions): Promise; + } + /** + * Asynchronous [`statfs(2)`](http://man7.org/linux/man-pages/man2/statfs.2.html). Returns information about the mounted file system which + * contains `path`. The callback gets two arguments `(err, stats)` where `stats`is an `fs.StatFs` object. + * + * In case of an error, the `err.code` will be one of `Common System Errors`. + * @since v19.6.0, v18.15.0 + * @param path A path to an existing file or directory on the file system to be queried. + */ + export function statfs(path: PathLike, callback: (err: NodeJS.ErrnoException | null, stats: StatsFs) => void): void; + export function statfs( + path: PathLike, + options: + | (StatFsOptions & { + bigint?: false | undefined; + }) + | undefined, + callback: (err: NodeJS.ErrnoException | null, stats: StatsFs) => void, + ): void; + export function statfs( + path: PathLike, + options: StatFsOptions & { + bigint: true; + }, + callback: (err: NodeJS.ErrnoException | null, stats: BigIntStatsFs) => void, + ): void; + export function statfs( + path: PathLike, + options: StatFsOptions | undefined, + callback: (err: NodeJS.ErrnoException | null, stats: StatsFs | BigIntStatsFs) => void, + ): void; + export namespace statfs { + /** + * Asynchronous statfs(2) - Returns information about the mounted file system which contains path. The callback gets two arguments (err, stats) where stats is an object. + * @param path A path to an existing file or directory on the file system to be queried. + */ + function __promisify__( + path: PathLike, + options?: StatFsOptions & { + bigint?: false | undefined; + }, + ): Promise; + function __promisify__( + path: PathLike, + options: StatFsOptions & { + bigint: true; + }, + ): Promise; + function __promisify__(path: PathLike, options?: StatFsOptions): Promise; + } + /** + * Synchronous [`statfs(2)`](http://man7.org/linux/man-pages/man2/statfs.2.html). Returns information about the mounted file system which + * contains `path`. + * + * In case of an error, the `err.code` will be one of `Common System Errors`. + * @since v19.6.0, v18.15.0 + * @param path A path to an existing file or directory on the file system to be queried. + */ + export function statfsSync( + path: PathLike, + options?: StatFsOptions & { + bigint?: false | undefined; + }, + ): StatsFs; + export function statfsSync( + path: PathLike, + options: StatFsOptions & { + bigint: true; + }, + ): BigIntStatsFs; + export function statfsSync(path: PathLike, options?: StatFsOptions): StatsFs | BigIntStatsFs; + /** + * Synchronous lstat(2) - Get file status. Does not dereference symbolic links. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + export const lstatSync: StatSyncFn; + /** + * Creates a new link from the `existingPath` to the `newPath`. See the POSIX [`link(2)`](http://man7.org/linux/man-pages/man2/link.2.html) documentation for more detail. No arguments other than + * a possible + * exception are given to the completion callback. + * @since v0.1.31 + */ + export function link(existingPath: PathLike, newPath: PathLike, callback: NoParamCallback): void; + export namespace link { + /** + * Asynchronous link(2) - Create a new link (also known as a hard link) to an existing file. + * @param existingPath A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param newPath A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + function __promisify__(existingPath: PathLike, newPath: PathLike): Promise; + } + /** + * Creates a new link from the `existingPath` to the `newPath`. See the POSIX [`link(2)`](http://man7.org/linux/man-pages/man2/link.2.html) documentation for more detail. Returns `undefined`. + * @since v0.1.31 + */ + export function linkSync(existingPath: PathLike, newPath: PathLike): void; + /** + * Creates the link called `path` pointing to `target`. No arguments other than a + * possible exception are given to the completion callback. + * + * See the POSIX [`symlink(2)`](http://man7.org/linux/man-pages/man2/symlink.2.html) documentation for more details. + * + * The `type` argument is only available on Windows and ignored on other platforms. + * It can be set to `'dir'`, `'file'`, or `'junction'`. If the `type` argument is + * not a string, Node.js will autodetect `target` type and use `'file'` or `'dir'`. + * If the `target` does not exist, `'file'` will be used. Windows junction points + * require the destination path to be absolute. When using `'junction'`, the`target` argument will automatically be normalized to absolute path. Junction + * points on NTFS volumes can only point to directories. + * + * Relative targets are relative to the link's parent directory. + * + * ```js + * import { symlink } from 'node:fs'; + * + * symlink('./mew', './mewtwo', callback); + * ``` + * + * The above example creates a symbolic link `mewtwo` which points to `mew` in the + * same directory: + * + * ```bash + * $ tree . + * . + * ├── mew + * └── mewtwo -> ./mew + * ``` + * @since v0.1.31 + * @param [type='null'] + */ + export function symlink( + target: PathLike, + path: PathLike, + type: symlink.Type | undefined | null, + callback: NoParamCallback, + ): void; + /** + * Asynchronous symlink(2) - Create a new symbolic link to an existing file. + * @param target A path to an existing file. If a URL is provided, it must use the `file:` protocol. + * @param path A path to the new symlink. If a URL is provided, it must use the `file:` protocol. + */ + export function symlink(target: PathLike, path: PathLike, callback: NoParamCallback): void; + export namespace symlink { + /** + * Asynchronous symlink(2) - Create a new symbolic link to an existing file. + * @param target A path to an existing file. If a URL is provided, it must use the `file:` protocol. + * @param path A path to the new symlink. If a URL is provided, it must use the `file:` protocol. + * @param type May be set to `'dir'`, `'file'`, or `'junction'` (default is `'file'`) and is only available on Windows (ignored on other platforms). + * When using `'junction'`, the `target` argument will automatically be normalized to an absolute path. + */ + function __promisify__(target: PathLike, path: PathLike, type?: string | null): Promise; + type Type = "dir" | "file" | "junction"; + } + /** + * Returns `undefined`. + * + * For detailed information, see the documentation of the asynchronous version of + * this API: {@link symlink}. + * @since v0.1.31 + * @param [type='null'] + */ + export function symlinkSync(target: PathLike, path: PathLike, type?: symlink.Type | null): void; + /** + * Reads the contents of the symbolic link referred to by `path`. The callback gets + * two arguments `(err, linkString)`. + * + * See the POSIX [`readlink(2)`](http://man7.org/linux/man-pages/man2/readlink.2.html) documentation for more details. + * + * The optional `options` argument can be a string specifying an encoding, or an + * object with an `encoding` property specifying the character encoding to use for + * the link path passed to the callback. If the `encoding` is set to `'buffer'`, + * the link path returned will be passed as a `Buffer` object. + * @since v0.1.31 + */ + export function readlink( + path: PathLike, + options: EncodingOption, + callback: (err: NodeJS.ErrnoException | null, linkString: string) => void, + ): void; + /** + * Asynchronous readlink(2) - read value of a symbolic link. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + export function readlink( + path: PathLike, + options: BufferEncodingOption, + callback: (err: NodeJS.ErrnoException | null, linkString: Buffer) => void, + ): void; + /** + * Asynchronous readlink(2) - read value of a symbolic link. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + export function readlink( + path: PathLike, + options: EncodingOption, + callback: (err: NodeJS.ErrnoException | null, linkString: string | Buffer) => void, + ): void; + /** + * Asynchronous readlink(2) - read value of a symbolic link. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + export function readlink( + path: PathLike, + callback: (err: NodeJS.ErrnoException | null, linkString: string) => void, + ): void; + export namespace readlink { + /** + * Asynchronous readlink(2) - read value of a symbolic link. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function __promisify__(path: PathLike, options?: EncodingOption): Promise; + /** + * Asynchronous readlink(2) - read value of a symbolic link. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function __promisify__(path: PathLike, options: BufferEncodingOption): Promise; + /** + * Asynchronous readlink(2) - read value of a symbolic link. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function __promisify__(path: PathLike, options?: EncodingOption): Promise; + } + /** + * Returns the symbolic link's string value. + * + * See the POSIX [`readlink(2)`](http://man7.org/linux/man-pages/man2/readlink.2.html) documentation for more details. + * + * The optional `options` argument can be a string specifying an encoding, or an + * object with an `encoding` property specifying the character encoding to use for + * the link path returned. If the `encoding` is set to `'buffer'`, + * the link path returned will be passed as a `Buffer` object. + * @since v0.1.31 + */ + export function readlinkSync(path: PathLike, options?: EncodingOption): string; + /** + * Synchronous readlink(2) - read value of a symbolic link. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + export function readlinkSync(path: PathLike, options: BufferEncodingOption): Buffer; + /** + * Synchronous readlink(2) - read value of a symbolic link. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + export function readlinkSync(path: PathLike, options?: EncodingOption): string | Buffer; + /** + * Asynchronously computes the canonical pathname by resolving `.`, `..`, and + * symbolic links. + * + * A canonical pathname is not necessarily unique. Hard links and bind mounts can + * expose a file system entity through many pathnames. + * + * This function behaves like [`realpath(3)`](http://man7.org/linux/man-pages/man3/realpath.3.html), with some exceptions: + * + * 1. No case conversion is performed on case-insensitive file systems. + * 2. The maximum number of symbolic links is platform-independent and generally + * (much) higher than what the native [`realpath(3)`](http://man7.org/linux/man-pages/man3/realpath.3.html) implementation supports. + * + * The `callback` gets two arguments `(err, resolvedPath)`. May use `process.cwd`to resolve relative paths. + * + * Only paths that can be converted to UTF8 strings are supported. + * + * The optional `options` argument can be a string specifying an encoding, or an + * object with an `encoding` property specifying the character encoding to use for + * the path passed to the callback. If the `encoding` is set to `'buffer'`, + * the path returned will be passed as a `Buffer` object. + * + * If `path` resolves to a socket or a pipe, the function will return a system + * dependent name for that object. + * @since v0.1.31 + */ + export function realpath( + path: PathLike, + options: EncodingOption, + callback: (err: NodeJS.ErrnoException | null, resolvedPath: string) => void, + ): void; + /** + * Asynchronous realpath(3) - return the canonicalized absolute pathname. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + export function realpath( + path: PathLike, + options: BufferEncodingOption, + callback: (err: NodeJS.ErrnoException | null, resolvedPath: Buffer) => void, + ): void; + /** + * Asynchronous realpath(3) - return the canonicalized absolute pathname. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + export function realpath( + path: PathLike, + options: EncodingOption, + callback: (err: NodeJS.ErrnoException | null, resolvedPath: string | Buffer) => void, + ): void; + /** + * Asynchronous realpath(3) - return the canonicalized absolute pathname. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + export function realpath( + path: PathLike, + callback: (err: NodeJS.ErrnoException | null, resolvedPath: string) => void, + ): void; + export namespace realpath { + /** + * Asynchronous realpath(3) - return the canonicalized absolute pathname. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function __promisify__(path: PathLike, options?: EncodingOption): Promise; + /** + * Asynchronous realpath(3) - return the canonicalized absolute pathname. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function __promisify__(path: PathLike, options: BufferEncodingOption): Promise; + /** + * Asynchronous realpath(3) - return the canonicalized absolute pathname. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function __promisify__(path: PathLike, options?: EncodingOption): Promise; + /** + * Asynchronous [`realpath(3)`](http://man7.org/linux/man-pages/man3/realpath.3.html). + * + * The `callback` gets two arguments `(err, resolvedPath)`. + * + * Only paths that can be converted to UTF8 strings are supported. + * + * The optional `options` argument can be a string specifying an encoding, or an + * object with an `encoding` property specifying the character encoding to use for + * the path passed to the callback. If the `encoding` is set to `'buffer'`, + * the path returned will be passed as a `Buffer` object. + * + * On Linux, when Node.js is linked against musl libc, the procfs file system must + * be mounted on `/proc` in order for this function to work. Glibc does not have + * this restriction. + * @since v9.2.0 + */ + function native( + path: PathLike, + options: EncodingOption, + callback: (err: NodeJS.ErrnoException | null, resolvedPath: string) => void, + ): void; + function native( + path: PathLike, + options: BufferEncodingOption, + callback: (err: NodeJS.ErrnoException | null, resolvedPath: Buffer) => void, + ): void; + function native( + path: PathLike, + options: EncodingOption, + callback: (err: NodeJS.ErrnoException | null, resolvedPath: string | Buffer) => void, + ): void; + function native( + path: PathLike, + callback: (err: NodeJS.ErrnoException | null, resolvedPath: string) => void, + ): void; + } + /** + * Returns the resolved pathname. + * + * For detailed information, see the documentation of the asynchronous version of + * this API: {@link realpath}. + * @since v0.1.31 + */ + export function realpathSync(path: PathLike, options?: EncodingOption): string; + /** + * Synchronous realpath(3) - return the canonicalized absolute pathname. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + export function realpathSync(path: PathLike, options: BufferEncodingOption): Buffer; + /** + * Synchronous realpath(3) - return the canonicalized absolute pathname. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + export function realpathSync(path: PathLike, options?: EncodingOption): string | Buffer; + export namespace realpathSync { + function native(path: PathLike, options?: EncodingOption): string; + function native(path: PathLike, options: BufferEncodingOption): Buffer; + function native(path: PathLike, options?: EncodingOption): string | Buffer; + } + /** + * Asynchronously removes a file or symbolic link. No arguments other than a + * possible exception are given to the completion callback. + * + * ```js + * import { unlink } from 'node:fs'; + * // Assuming that 'path/file.txt' is a regular file. + * unlink('path/file.txt', (err) => { + * if (err) throw err; + * console.log('path/file.txt was deleted'); + * }); + * ``` + * + * `fs.unlink()` will not work on a directory, empty or otherwise. To remove a + * directory, use {@link rmdir}. + * + * See the POSIX [`unlink(2)`](http://man7.org/linux/man-pages/man2/unlink.2.html) documentation for more details. + * @since v0.0.2 + */ + export function unlink(path: PathLike, callback: NoParamCallback): void; + export namespace unlink { + /** + * Asynchronous unlink(2) - delete a name and possibly the file it refers to. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + function __promisify__(path: PathLike): Promise; + } + /** + * Synchronous [`unlink(2)`](http://man7.org/linux/man-pages/man2/unlink.2.html). Returns `undefined`. + * @since v0.1.21 + */ + export function unlinkSync(path: PathLike): void; + export interface RmDirOptions { + /** + * If an `EBUSY`, `EMFILE`, `ENFILE`, `ENOTEMPTY`, or + * `EPERM` error is encountered, Node.js will retry the operation with a linear + * backoff wait of `retryDelay` ms longer on each try. This option represents the + * number of retries. This option is ignored if the `recursive` option is not + * `true`. + * @default 0 + */ + maxRetries?: number | undefined; + /** + * @deprecated since v14.14.0 In future versions of Node.js and will trigger a warning + * `fs.rmdir(path, { recursive: true })` will throw if `path` does not exist or is a file. + * Use `fs.rm(path, { recursive: true, force: true })` instead. + * + * If `true`, perform a recursive directory removal. In + * recursive mode, operations are retried on failure. + * @default false + */ + recursive?: boolean | undefined; + /** + * The amount of time in milliseconds to wait between retries. + * This option is ignored if the `recursive` option is not `true`. + * @default 100 + */ + retryDelay?: number | undefined; + } + /** + * Asynchronous [`rmdir(2)`](http://man7.org/linux/man-pages/man2/rmdir.2.html). No arguments other than a possible exception are given + * to the completion callback. + * + * Using `fs.rmdir()` on a file (not a directory) results in an `ENOENT` error on + * Windows and an `ENOTDIR` error on POSIX. + * + * To get a behavior similar to the `rm -rf` Unix command, use {@link rm} with options `{ recursive: true, force: true }`. + * @since v0.0.2 + */ + export function rmdir(path: PathLike, callback: NoParamCallback): void; + export function rmdir(path: PathLike, options: RmDirOptions, callback: NoParamCallback): void; + export namespace rmdir { + /** + * Asynchronous rmdir(2) - delete a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + function __promisify__(path: PathLike, options?: RmDirOptions): Promise; + } + /** + * Synchronous [`rmdir(2)`](http://man7.org/linux/man-pages/man2/rmdir.2.html). Returns `undefined`. + * + * Using `fs.rmdirSync()` on a file (not a directory) results in an `ENOENT` error + * on Windows and an `ENOTDIR` error on POSIX. + * + * To get a behavior similar to the `rm -rf` Unix command, use {@link rmSync} with options `{ recursive: true, force: true }`. + * @since v0.1.21 + */ + export function rmdirSync(path: PathLike, options?: RmDirOptions): void; + export interface RmOptions { + /** + * When `true`, exceptions will be ignored if `path` does not exist. + * @default false + */ + force?: boolean | undefined; + /** + * If an `EBUSY`, `EMFILE`, `ENFILE`, `ENOTEMPTY`, or + * `EPERM` error is encountered, Node.js will retry the operation with a linear + * backoff wait of `retryDelay` ms longer on each try. This option represents the + * number of retries. This option is ignored if the `recursive` option is not + * `true`. + * @default 0 + */ + maxRetries?: number | undefined; + /** + * If `true`, perform a recursive directory removal. In + * recursive mode, operations are retried on failure. + * @default false + */ + recursive?: boolean | undefined; + /** + * The amount of time in milliseconds to wait between retries. + * This option is ignored if the `recursive` option is not `true`. + * @default 100 + */ + retryDelay?: number | undefined; + } + /** + * Asynchronously removes files and directories (modeled on the standard POSIX `rm`utility). No arguments other than a possible exception are given to the + * completion callback. + * @since v14.14.0 + */ + export function rm(path: PathLike, callback: NoParamCallback): void; + export function rm(path: PathLike, options: RmOptions, callback: NoParamCallback): void; + export namespace rm { + /** + * Asynchronously removes files and directories (modeled on the standard POSIX `rm` utility). + */ + function __promisify__(path: PathLike, options?: RmOptions): Promise; + } + /** + * Synchronously removes files and directories (modeled on the standard POSIX `rm`utility). Returns `undefined`. + * @since v14.14.0 + */ + export function rmSync(path: PathLike, options?: RmOptions): void; + export interface MakeDirectoryOptions { + /** + * Indicates whether parent folders should be created. + * If a folder was created, the path to the first created folder will be returned. + * @default false + */ + recursive?: boolean | undefined; + /** + * A file mode. If a string is passed, it is parsed as an octal integer. If not specified + * @default 0o777 + */ + mode?: Mode | undefined; + } + /** + * Asynchronously creates a directory. + * + * The callback is given a possible exception and, if `recursive` is `true`, the + * first directory path created, `(err[, path])`.`path` can still be `undefined` when `recursive` is `true`, if no directory was + * created (for instance, if it was previously created). + * + * The optional `options` argument can be an integer specifying `mode` (permission + * and sticky bits), or an object with a `mode` property and a `recursive`property indicating whether parent directories should be created. Calling`fs.mkdir()` when `path` is a directory that + * exists results in an error only + * when `recursive` is false. If `recursive` is false and the directory exists, + * an `EEXIST` error occurs. + * + * ```js + * import { mkdir } from 'node:fs'; + * + * // Create ./tmp/a/apple, regardless of whether ./tmp and ./tmp/a exist. + * mkdir('./tmp/a/apple', { recursive: true }, (err) => { + * if (err) throw err; + * }); + * ``` + * + * On Windows, using `fs.mkdir()` on the root directory even with recursion will + * result in an error: + * + * ```js + * import { mkdir } from 'node:fs'; + * + * mkdir('/', { recursive: true }, (err) => { + * // => [Error: EPERM: operation not permitted, mkdir 'C:\'] + * }); + * ``` + * + * See the POSIX [`mkdir(2)`](http://man7.org/linux/man-pages/man2/mkdir.2.html) documentation for more details. + * @since v0.1.8 + */ + export function mkdir( + path: PathLike, + options: MakeDirectoryOptions & { + recursive: true; + }, + callback: (err: NodeJS.ErrnoException | null, path?: string) => void, + ): void; + /** + * Asynchronous mkdir(2) - create a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options Either the file mode, or an object optionally specifying the file mode and whether parent folders + * should be created. If a string is passed, it is parsed as an octal integer. If not specified, defaults to `0o777`. + */ + export function mkdir( + path: PathLike, + options: + | Mode + | (MakeDirectoryOptions & { + recursive?: false | undefined; + }) + | null + | undefined, + callback: NoParamCallback, + ): void; + /** + * Asynchronous mkdir(2) - create a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options Either the file mode, or an object optionally specifying the file mode and whether parent folders + * should be created. If a string is passed, it is parsed as an octal integer. If not specified, defaults to `0o777`. + */ + export function mkdir( + path: PathLike, + options: Mode | MakeDirectoryOptions | null | undefined, + callback: (err: NodeJS.ErrnoException | null, path?: string) => void, + ): void; + /** + * Asynchronous mkdir(2) - create a directory with a mode of `0o777`. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + export function mkdir(path: PathLike, callback: NoParamCallback): void; + export namespace mkdir { + /** + * Asynchronous mkdir(2) - create a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options Either the file mode, or an object optionally specifying the file mode and whether parent folders + * should be created. If a string is passed, it is parsed as an octal integer. If not specified, defaults to `0o777`. + */ + function __promisify__( + path: PathLike, + options: MakeDirectoryOptions & { + recursive: true; + }, + ): Promise; + /** + * Asynchronous mkdir(2) - create a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options Either the file mode, or an object optionally specifying the file mode and whether parent folders + * should be created. If a string is passed, it is parsed as an octal integer. If not specified, defaults to `0o777`. + */ + function __promisify__( + path: PathLike, + options?: + | Mode + | (MakeDirectoryOptions & { + recursive?: false | undefined; + }) + | null, + ): Promise; + /** + * Asynchronous mkdir(2) - create a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options Either the file mode, or an object optionally specifying the file mode and whether parent folders + * should be created. If a string is passed, it is parsed as an octal integer. If not specified, defaults to `0o777`. + */ + function __promisify__( + path: PathLike, + options?: Mode | MakeDirectoryOptions | null, + ): Promise; + } + /** + * Synchronously creates a directory. Returns `undefined`, or if `recursive` is`true`, the first directory path created. + * This is the synchronous version of {@link mkdir}. + * + * See the POSIX [`mkdir(2)`](http://man7.org/linux/man-pages/man2/mkdir.2.html) documentation for more details. + * @since v0.1.21 + */ + export function mkdirSync( + path: PathLike, + options: MakeDirectoryOptions & { + recursive: true; + }, + ): string | undefined; + /** + * Synchronous mkdir(2) - create a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options Either the file mode, or an object optionally specifying the file mode and whether parent folders + * should be created. If a string is passed, it is parsed as an octal integer. If not specified, defaults to `0o777`. + */ + export function mkdirSync( + path: PathLike, + options?: + | Mode + | (MakeDirectoryOptions & { + recursive?: false | undefined; + }) + | null, + ): void; + /** + * Synchronous mkdir(2) - create a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options Either the file mode, or an object optionally specifying the file mode and whether parent folders + * should be created. If a string is passed, it is parsed as an octal integer. If not specified, defaults to `0o777`. + */ + export function mkdirSync(path: PathLike, options?: Mode | MakeDirectoryOptions | null): string | undefined; + /** + * Creates a unique temporary directory. + * + * Generates six random characters to be appended behind a required`prefix` to create a unique temporary directory. Due to platform + * inconsistencies, avoid trailing `X` characters in `prefix`. Some platforms, + * notably the BSDs, can return more than six random characters, and replace + * trailing `X` characters in `prefix` with random characters. + * + * The created directory path is passed as a string to the callback's second + * parameter. + * + * The optional `options` argument can be a string specifying an encoding, or an + * object with an `encoding` property specifying the character encoding to use. + * + * ```js + * import { mkdtemp } from 'node:fs'; + * import { join } from 'node:path'; + * import { tmpdir } from 'node:os'; + * + * mkdtemp(join(tmpdir(), 'foo-'), (err, directory) => { + * if (err) throw err; + * console.log(directory); + * // Prints: /tmp/foo-itXde2 or C:\Users\...\AppData\Local\Temp\foo-itXde2 + * }); + * ``` + * + * The `fs.mkdtemp()` method will append the six randomly selected characters + * directly to the `prefix` string. For instance, given a directory `/tmp`, if the + * intention is to create a temporary directory _within_`/tmp`, the `prefix`must end with a trailing platform-specific path separator + * (`require('node:path').sep`). + * + * ```js + * import { tmpdir } from 'node:os'; + * import { mkdtemp } from 'node:fs'; + * + * // The parent directory for the new temporary directory + * const tmpDir = tmpdir(); + * + * // This method is *INCORRECT*: + * mkdtemp(tmpDir, (err, directory) => { + * if (err) throw err; + * console.log(directory); + * // Will print something similar to `/tmpabc123`. + * // A new temporary directory is created at the file system root + * // rather than *within* the /tmp directory. + * }); + * + * // This method is *CORRECT*: + * import { sep } from 'node:path'; + * mkdtemp(`${tmpDir}${sep}`, (err, directory) => { + * if (err) throw err; + * console.log(directory); + * // Will print something similar to `/tmp/abc123`. + * // A new temporary directory is created within + * // the /tmp directory. + * }); + * ``` + * @since v5.10.0 + */ + export function mkdtemp( + prefix: string, + options: EncodingOption, + callback: (err: NodeJS.ErrnoException | null, folder: string) => void, + ): void; + /** + * Asynchronously creates a unique temporary directory. + * Generates six random characters to be appended behind a required prefix to create a unique temporary directory. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + export function mkdtemp( + prefix: string, + options: + | "buffer" + | { + encoding: "buffer"; + }, + callback: (err: NodeJS.ErrnoException | null, folder: Buffer) => void, + ): void; + /** + * Asynchronously creates a unique temporary directory. + * Generates six random characters to be appended behind a required prefix to create a unique temporary directory. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + export function mkdtemp( + prefix: string, + options: EncodingOption, + callback: (err: NodeJS.ErrnoException | null, folder: string | Buffer) => void, + ): void; + /** + * Asynchronously creates a unique temporary directory. + * Generates six random characters to be appended behind a required prefix to create a unique temporary directory. + */ + export function mkdtemp( + prefix: string, + callback: (err: NodeJS.ErrnoException | null, folder: string) => void, + ): void; + export namespace mkdtemp { + /** + * Asynchronously creates a unique temporary directory. + * Generates six random characters to be appended behind a required prefix to create a unique temporary directory. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function __promisify__(prefix: string, options?: EncodingOption): Promise; + /** + * Asynchronously creates a unique temporary directory. + * Generates six random characters to be appended behind a required prefix to create a unique temporary directory. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function __promisify__(prefix: string, options: BufferEncodingOption): Promise; + /** + * Asynchronously creates a unique temporary directory. + * Generates six random characters to be appended behind a required prefix to create a unique temporary directory. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function __promisify__(prefix: string, options?: EncodingOption): Promise; + } + /** + * Returns the created directory path. + * + * For detailed information, see the documentation of the asynchronous version of + * this API: {@link mkdtemp}. + * + * The optional `options` argument can be a string specifying an encoding, or an + * object with an `encoding` property specifying the character encoding to use. + * @since v5.10.0 + */ + export function mkdtempSync(prefix: string, options?: EncodingOption): string; + /** + * Synchronously creates a unique temporary directory. + * Generates six random characters to be appended behind a required prefix to create a unique temporary directory. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + export function mkdtempSync(prefix: string, options: BufferEncodingOption): Buffer; + /** + * Synchronously creates a unique temporary directory. + * Generates six random characters to be appended behind a required prefix to create a unique temporary directory. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + export function mkdtempSync(prefix: string, options?: EncodingOption): string | Buffer; + /** + * Reads the contents of a directory. The callback gets two arguments `(err, files)`where `files` is an array of the names of the files in the directory excluding`'.'` and `'..'`. + * + * See the POSIX [`readdir(3)`](http://man7.org/linux/man-pages/man3/readdir.3.html) documentation for more details. + * + * The optional `options` argument can be a string specifying an encoding, or an + * object with an `encoding` property specifying the character encoding to use for + * the filenames passed to the callback. If the `encoding` is set to `'buffer'`, + * the filenames returned will be passed as `Buffer` objects. + * + * If `options.withFileTypes` is set to `true`, the `files` array will contain `fs.Dirent` objects. + * @since v0.1.8 + */ + export function readdir( + path: PathLike, + options: + | { + encoding: BufferEncoding | null; + withFileTypes?: false | undefined; + recursive?: boolean | undefined; + } + | BufferEncoding + | undefined + | null, + callback: (err: NodeJS.ErrnoException | null, files: string[]) => void, + ): void; + /** + * Asynchronous readdir(3) - read a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + export function readdir( + path: PathLike, + options: + | { + encoding: "buffer"; + withFileTypes?: false | undefined; + recursive?: boolean | undefined; + } + | "buffer", + callback: (err: NodeJS.ErrnoException | null, files: Buffer[]) => void, + ): void; + /** + * Asynchronous readdir(3) - read a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + export function readdir( + path: PathLike, + options: + | (ObjectEncodingOptions & { + withFileTypes?: false | undefined; + recursive?: boolean | undefined; + }) + | BufferEncoding + | undefined + | null, + callback: (err: NodeJS.ErrnoException | null, files: string[] | Buffer[]) => void, + ): void; + /** + * Asynchronous readdir(3) - read a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + export function readdir( + path: PathLike, + callback: (err: NodeJS.ErrnoException | null, files: string[]) => void, + ): void; + /** + * Asynchronous readdir(3) - read a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options If called with `withFileTypes: true` the result data will be an array of Dirent. + */ + export function readdir( + path: PathLike, + options: ObjectEncodingOptions & { + withFileTypes: true; + recursive?: boolean | undefined; + }, + callback: (err: NodeJS.ErrnoException | null, files: Dirent[]) => void, + ): void; + export namespace readdir { + /** + * Asynchronous readdir(3) - read a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function __promisify__( + path: PathLike, + options?: + | { + encoding: BufferEncoding | null; + withFileTypes?: false | undefined; + recursive?: boolean | undefined; + } + | BufferEncoding + | null, + ): Promise; + /** + * Asynchronous readdir(3) - read a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function __promisify__( + path: PathLike, + options: + | "buffer" + | { + encoding: "buffer"; + withFileTypes?: false | undefined; + recursive?: boolean | undefined; + }, + ): Promise; + /** + * Asynchronous readdir(3) - read a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function __promisify__( + path: PathLike, + options?: + | (ObjectEncodingOptions & { + withFileTypes?: false | undefined; + recursive?: boolean | undefined; + }) + | BufferEncoding + | null, + ): Promise; + /** + * Asynchronous readdir(3) - read a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options If called with `withFileTypes: true` the result data will be an array of Dirent + */ + function __promisify__( + path: PathLike, + options: ObjectEncodingOptions & { + withFileTypes: true; + recursive?: boolean | undefined; + }, + ): Promise; + } + /** + * Reads the contents of the directory. + * + * See the POSIX [`readdir(3)`](http://man7.org/linux/man-pages/man3/readdir.3.html) documentation for more details. + * + * The optional `options` argument can be a string specifying an encoding, or an + * object with an `encoding` property specifying the character encoding to use for + * the filenames returned. If the `encoding` is set to `'buffer'`, + * the filenames returned will be passed as `Buffer` objects. + * + * If `options.withFileTypes` is set to `true`, the result will contain `fs.Dirent` objects. + * @since v0.1.21 + */ + export function readdirSync( + path: PathLike, + options?: + | { + encoding: BufferEncoding | null; + withFileTypes?: false | undefined; + recursive?: boolean | undefined; + } + | BufferEncoding + | null, + ): string[]; + /** + * Synchronous readdir(3) - read a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + export function readdirSync( + path: PathLike, + options: + | { + encoding: "buffer"; + withFileTypes?: false | undefined; + recursive?: boolean | undefined; + } + | "buffer", + ): Buffer[]; + /** + * Synchronous readdir(3) - read a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + export function readdirSync( + path: PathLike, + options?: + | (ObjectEncodingOptions & { + withFileTypes?: false | undefined; + recursive?: boolean | undefined; + }) + | BufferEncoding + | null, + ): string[] | Buffer[]; + /** + * Synchronous readdir(3) - read a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options If called with `withFileTypes: true` the result data will be an array of Dirent. + */ + export function readdirSync( + path: PathLike, + options: ObjectEncodingOptions & { + withFileTypes: true; + recursive?: boolean | undefined; + }, + ): Dirent[]; + /** + * Closes the file descriptor. No arguments other than a possible exception are + * given to the completion callback. + * + * Calling `fs.close()` on any file descriptor (`fd`) that is currently in use + * through any other `fs` operation may lead to undefined behavior. + * + * See the POSIX [`close(2)`](http://man7.org/linux/man-pages/man2/close.2.html) documentation for more detail. + * @since v0.0.2 + */ + export function close(fd: number, callback?: NoParamCallback): void; + export namespace close { + /** + * Asynchronous close(2) - close a file descriptor. + * @param fd A file descriptor. + */ + function __promisify__(fd: number): Promise; + } + /** + * Closes the file descriptor. Returns `undefined`. + * + * Calling `fs.closeSync()` on any file descriptor (`fd`) that is currently in use + * through any other `fs` operation may lead to undefined behavior. + * + * See the POSIX [`close(2)`](http://man7.org/linux/man-pages/man2/close.2.html) documentation for more detail. + * @since v0.1.21 + */ + export function closeSync(fd: number): void; + /** + * Asynchronous file open. See the POSIX [`open(2)`](http://man7.org/linux/man-pages/man2/open.2.html) documentation for more details. + * + * `mode` sets the file mode (permission and sticky bits), but only if the file was + * created. On Windows, only the write permission can be manipulated; see {@link chmod}. + * + * The callback gets two arguments `(err, fd)`. + * + * Some characters (`< > : " / \ | ? *`) are reserved under Windows as documented + * by [Naming Files, Paths, and Namespaces](https://docs.microsoft.com/en-us/windows/desktop/FileIO/naming-a-file). Under NTFS, if the filename contains + * a colon, Node.js will open a file system stream, as described by [this MSDN page](https://docs.microsoft.com/en-us/windows/desktop/FileIO/using-streams). + * + * Functions based on `fs.open()` exhibit this behavior as well:`fs.writeFile()`, `fs.readFile()`, etc. + * @since v0.0.2 + * @param [flags='r'] See `support of file system `flags``. + * @param [mode=0o666] + */ + export function open( + path: PathLike, + flags: OpenMode | undefined, + mode: Mode | undefined | null, + callback: (err: NodeJS.ErrnoException | null, fd: number) => void, + ): void; + /** + * Asynchronous open(2) - open and possibly create a file. If the file is created, its mode will be `0o666`. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param [flags='r'] See `support of file system `flags``. + */ + export function open( + path: PathLike, + flags: OpenMode | undefined, + callback: (err: NodeJS.ErrnoException | null, fd: number) => void, + ): void; + /** + * Asynchronous open(2) - open and possibly create a file. If the file is created, its mode will be `0o666`. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + export function open(path: PathLike, callback: (err: NodeJS.ErrnoException | null, fd: number) => void): void; + export namespace open { + /** + * Asynchronous open(2) - open and possibly create a file. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param mode A file mode. If a string is passed, it is parsed as an octal integer. If not supplied, defaults to `0o666`. + */ + function __promisify__(path: PathLike, flags: OpenMode, mode?: Mode | null): Promise; + } + /** + * Returns an integer representing the file descriptor. + * + * For detailed information, see the documentation of the asynchronous version of + * this API: {@link open}. + * @since v0.1.21 + * @param [flags='r'] + * @param [mode=0o666] + */ + export function openSync(path: PathLike, flags: OpenMode, mode?: Mode | null): number; + /** + * Change the file system timestamps of the object referenced by `path`. + * + * The `atime` and `mtime` arguments follow these rules: + * + * * Values can be either numbers representing Unix epoch time in seconds,`Date`s, or a numeric string like `'123456789.0'`. + * * If the value can not be converted to a number, or is `NaN`, `Infinity`, or`-Infinity`, an `Error` will be thrown. + * @since v0.4.2 + */ + export function utimes(path: PathLike, atime: TimeLike, mtime: TimeLike, callback: NoParamCallback): void; + export namespace utimes { + /** + * Asynchronously change file timestamps of the file referenced by the supplied path. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param atime The last access time. If a string is provided, it will be coerced to number. + * @param mtime The last modified time. If a string is provided, it will be coerced to number. + */ + function __promisify__(path: PathLike, atime: TimeLike, mtime: TimeLike): Promise; + } + /** + * Returns `undefined`. + * + * For detailed information, see the documentation of the asynchronous version of + * this API: {@link utimes}. + * @since v0.4.2 + */ + export function utimesSync(path: PathLike, atime: TimeLike, mtime: TimeLike): void; + /** + * Change the file system timestamps of the object referenced by the supplied file + * descriptor. See {@link utimes}. + * @since v0.4.2 + */ + export function futimes(fd: number, atime: TimeLike, mtime: TimeLike, callback: NoParamCallback): void; + export namespace futimes { + /** + * Asynchronously change file timestamps of the file referenced by the supplied file descriptor. + * @param fd A file descriptor. + * @param atime The last access time. If a string is provided, it will be coerced to number. + * @param mtime The last modified time. If a string is provided, it will be coerced to number. + */ + function __promisify__(fd: number, atime: TimeLike, mtime: TimeLike): Promise; + } + /** + * Synchronous version of {@link futimes}. Returns `undefined`. + * @since v0.4.2 + */ + export function futimesSync(fd: number, atime: TimeLike, mtime: TimeLike): void; + /** + * Request that all data for the open file descriptor is flushed to the storage + * device. The specific implementation is operating system and device specific. + * Refer to the POSIX [`fsync(2)`](http://man7.org/linux/man-pages/man2/fsync.2.html) documentation for more detail. No arguments other + * than a possible exception are given to the completion callback. + * @since v0.1.96 + */ + export function fsync(fd: number, callback: NoParamCallback): void; + export namespace fsync { + /** + * Asynchronous fsync(2) - synchronize a file's in-core state with the underlying storage device. + * @param fd A file descriptor. + */ + function __promisify__(fd: number): Promise; + } + /** + * Request that all data for the open file descriptor is flushed to the storage + * device. The specific implementation is operating system and device specific. + * Refer to the POSIX [`fsync(2)`](http://man7.org/linux/man-pages/man2/fsync.2.html) documentation for more detail. Returns `undefined`. + * @since v0.1.96 + */ + export function fsyncSync(fd: number): void; + /** + * Write `buffer` to the file specified by `fd`. + * + * `offset` determines the part of the buffer to be written, and `length` is + * an integer specifying the number of bytes to write. + * + * `position` refers to the offset from the beginning of the file where this data + * should be written. If `typeof position !== 'number'`, the data will be written + * at the current position. See [`pwrite(2)`](http://man7.org/linux/man-pages/man2/pwrite.2.html). + * + * The callback will be given three arguments `(err, bytesWritten, buffer)` where`bytesWritten` specifies how many _bytes_ were written from `buffer`. + * + * If this method is invoked as its `util.promisify()` ed version, it returns + * a promise for an `Object` with `bytesWritten` and `buffer` properties. + * + * It is unsafe to use `fs.write()` multiple times on the same file without waiting + * for the callback. For this scenario, {@link createWriteStream} is + * recommended. + * + * On Linux, positional writes don't work when the file is opened in append mode. + * The kernel ignores the position argument and always appends the data to + * the end of the file. + * @since v0.0.2 + * @param [offset=0] + * @param [length=buffer.byteLength - offset] + * @param [position='null'] + */ + export function write( + fd: number, + buffer: TBuffer, + offset: number | undefined | null, + length: number | undefined | null, + position: number | undefined | null, + callback: (err: NodeJS.ErrnoException | null, written: number, buffer: TBuffer) => void, + ): void; + /** + * Asynchronously writes `buffer` to the file referenced by the supplied file descriptor. + * @param fd A file descriptor. + * @param offset The part of the buffer to be written. If not supplied, defaults to `0`. + * @param length The number of bytes to write. If not supplied, defaults to `buffer.length - offset`. + */ + export function write( + fd: number, + buffer: TBuffer, + offset: number | undefined | null, + length: number | undefined | null, + callback: (err: NodeJS.ErrnoException | null, written: number, buffer: TBuffer) => void, + ): void; + /** + * Asynchronously writes `buffer` to the file referenced by the supplied file descriptor. + * @param fd A file descriptor. + * @param offset The part of the buffer to be written. If not supplied, defaults to `0`. + */ + export function write( + fd: number, + buffer: TBuffer, + offset: number | undefined | null, + callback: (err: NodeJS.ErrnoException | null, written: number, buffer: TBuffer) => void, + ): void; + /** + * Asynchronously writes `buffer` to the file referenced by the supplied file descriptor. + * @param fd A file descriptor. + */ + export function write( + fd: number, + buffer: TBuffer, + callback: (err: NodeJS.ErrnoException | null, written: number, buffer: TBuffer) => void, + ): void; + /** + * Asynchronously writes `string` to the file referenced by the supplied file descriptor. + * @param fd A file descriptor. + * @param string A string to write. + * @param position The offset from the beginning of the file where this data should be written. If not supplied, defaults to the current position. + * @param encoding The expected string encoding. + */ + export function write( + fd: number, + string: string, + position: number | undefined | null, + encoding: BufferEncoding | undefined | null, + callback: (err: NodeJS.ErrnoException | null, written: number, str: string) => void, + ): void; + /** + * Asynchronously writes `string` to the file referenced by the supplied file descriptor. + * @param fd A file descriptor. + * @param string A string to write. + * @param position The offset from the beginning of the file where this data should be written. If not supplied, defaults to the current position. + */ + export function write( + fd: number, + string: string, + position: number | undefined | null, + callback: (err: NodeJS.ErrnoException | null, written: number, str: string) => void, + ): void; + /** + * Asynchronously writes `string` to the file referenced by the supplied file descriptor. + * @param fd A file descriptor. + * @param string A string to write. + */ + export function write( + fd: number, + string: string, + callback: (err: NodeJS.ErrnoException | null, written: number, str: string) => void, + ): void; + export namespace write { + /** + * Asynchronously writes `buffer` to the file referenced by the supplied file descriptor. + * @param fd A file descriptor. + * @param offset The part of the buffer to be written. If not supplied, defaults to `0`. + * @param length The number of bytes to write. If not supplied, defaults to `buffer.length - offset`. + * @param position The offset from the beginning of the file where this data should be written. If not supplied, defaults to the current position. + */ + function __promisify__( + fd: number, + buffer?: TBuffer, + offset?: number, + length?: number, + position?: number | null, + ): Promise<{ + bytesWritten: number; + buffer: TBuffer; + }>; + /** + * Asynchronously writes `string` to the file referenced by the supplied file descriptor. + * @param fd A file descriptor. + * @param string A string to write. + * @param position The offset from the beginning of the file where this data should be written. If not supplied, defaults to the current position. + * @param encoding The expected string encoding. + */ + function __promisify__( + fd: number, + string: string, + position?: number | null, + encoding?: BufferEncoding | null, + ): Promise<{ + bytesWritten: number; + buffer: string; + }>; + } + /** + * For detailed information, see the documentation of the asynchronous version of + * this API: {@link write}. + * @since v0.1.21 + * @param [offset=0] + * @param [length=buffer.byteLength - offset] + * @param [position='null'] + * @return The number of bytes written. + */ + export function writeSync( + fd: number, + buffer: NodeJS.ArrayBufferView, + offset?: number | null, + length?: number | null, + position?: number | null, + ): number; + /** + * Synchronously writes `string` to the file referenced by the supplied file descriptor, returning the number of bytes written. + * @param fd A file descriptor. + * @param string A string to write. + * @param position The offset from the beginning of the file where this data should be written. If not supplied, defaults to the current position. + * @param encoding The expected string encoding. + */ + export function writeSync( + fd: number, + string: string, + position?: number | null, + encoding?: BufferEncoding | null, + ): number; + export type ReadPosition = number | bigint; + export interface ReadSyncOptions { + /** + * @default 0 + */ + offset?: number | undefined; + /** + * @default `length of buffer` + */ + length?: number | undefined; + /** + * @default null + */ + position?: ReadPosition | null | undefined; + } + export interface ReadAsyncOptions extends ReadSyncOptions { + buffer?: TBuffer; + } + /** + * Read data from the file specified by `fd`. + * + * The callback is given the three arguments, `(err, bytesRead, buffer)`. + * + * If the file is not modified concurrently, the end-of-file is reached when the + * number of bytes read is zero. + * + * If this method is invoked as its `util.promisify()` ed version, it returns + * a promise for an `Object` with `bytesRead` and `buffer` properties. + * @since v0.0.2 + * @param buffer The buffer that the data will be written to. + * @param offset The position in `buffer` to write the data to. + * @param length The number of bytes to read. + * @param position Specifies where to begin reading from in the file. If `position` is `null` or `-1 `, data will be read from the current file position, and the file position will be updated. If + * `position` is an integer, the file position will be unchanged. + */ + export function read( + fd: number, + buffer: TBuffer, + offset: number, + length: number, + position: ReadPosition | null, + callback: (err: NodeJS.ErrnoException | null, bytesRead: number, buffer: TBuffer) => void, + ): void; + /** + * Similar to the above `fs.read` function, this version takes an optional `options` object. + * If not otherwise specified in an `options` object, + * `buffer` defaults to `Buffer.alloc(16384)`, + * `offset` defaults to `0`, + * `length` defaults to `buffer.byteLength`, `- offset` as of Node 17.6.0 + * `position` defaults to `null` + * @since v12.17.0, 13.11.0 + */ + export function read( + fd: number, + options: ReadAsyncOptions, + callback: (err: NodeJS.ErrnoException | null, bytesRead: number, buffer: TBuffer) => void, + ): void; + export function read( + fd: number, + callback: (err: NodeJS.ErrnoException | null, bytesRead: number, buffer: NodeJS.ArrayBufferView) => void, + ): void; + export namespace read { + /** + * @param fd A file descriptor. + * @param buffer The buffer that the data will be written to. + * @param offset The offset in the buffer at which to start writing. + * @param length The number of bytes to read. + * @param position The offset from the beginning of the file from which data should be read. If `null`, data will be read from the current position. + */ + function __promisify__( + fd: number, + buffer: TBuffer, + offset: number, + length: number, + position: number | null, + ): Promise<{ + bytesRead: number; + buffer: TBuffer; + }>; + function __promisify__( + fd: number, + options: ReadAsyncOptions, + ): Promise<{ + bytesRead: number; + buffer: TBuffer; + }>; + function __promisify__(fd: number): Promise<{ + bytesRead: number; + buffer: NodeJS.ArrayBufferView; + }>; + } + /** + * Returns the number of `bytesRead`. + * + * For detailed information, see the documentation of the asynchronous version of + * this API: {@link read}. + * @since v0.1.21 + * @param [position='null'] + */ + export function readSync( + fd: number, + buffer: NodeJS.ArrayBufferView, + offset: number, + length: number, + position: ReadPosition | null, + ): number; + /** + * Similar to the above `fs.readSync` function, this version takes an optional `options` object. + * If no `options` object is specified, it will default with the above values. + */ + export function readSync(fd: number, buffer: NodeJS.ArrayBufferView, opts?: ReadSyncOptions): number; + /** + * Asynchronously reads the entire contents of a file. + * + * ```js + * import { readFile } from 'node:fs'; + * + * readFile('/etc/passwd', (err, data) => { + * if (err) throw err; + * console.log(data); + * }); + * ``` + * + * The callback is passed two arguments `(err, data)`, where `data` is the + * contents of the file. + * + * If no encoding is specified, then the raw buffer is returned. + * + * If `options` is a string, then it specifies the encoding: + * + * ```js + * import { readFile } from 'node:fs'; + * + * readFile('/etc/passwd', 'utf8', callback); + * ``` + * + * When the path is a directory, the behavior of `fs.readFile()` and {@link readFileSync} is platform-specific. On macOS, Linux, and Windows, an + * error will be returned. On FreeBSD, a representation of the directory's contents + * will be returned. + * + * ```js + * import { readFile } from 'node:fs'; + * + * // macOS, Linux, and Windows + * readFile('', (err, data) => { + * // => [Error: EISDIR: illegal operation on a directory, read ] + * }); + * + * // FreeBSD + * readFile('', (err, data) => { + * // => null, + * }); + * ``` + * + * It is possible to abort an ongoing request using an `AbortSignal`. If a + * request is aborted the callback is called with an `AbortError`: + * + * ```js + * import { readFile } from 'node:fs'; + * + * const controller = new AbortController(); + * const signal = controller.signal; + * readFile(fileInfo[0].name, { signal }, (err, buf) => { + * // ... + * }); + * // When you want to abort the request + * controller.abort(); + * ``` + * + * The `fs.readFile()` function buffers the entire file. To minimize memory costs, + * when possible prefer streaming via `fs.createReadStream()`. + * + * Aborting an ongoing request does not abort individual operating + * system requests but rather the internal buffering `fs.readFile` performs. + * @since v0.1.29 + * @param path filename or file descriptor + */ + export function readFile( + path: PathOrFileDescriptor, + options: + | ({ + encoding?: null | undefined; + flag?: string | undefined; + } & Abortable) + | undefined + | null, + callback: (err: NodeJS.ErrnoException | null, data: Buffer) => void, + ): void; + /** + * Asynchronously reads the entire contents of a file. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * If a file descriptor is provided, the underlying file will _not_ be closed automatically. + * @param options Either the encoding for the result, or an object that contains the encoding and an optional flag. + * If a flag is not provided, it defaults to `'r'`. + */ + export function readFile( + path: PathOrFileDescriptor, + options: + | ({ + encoding: BufferEncoding; + flag?: string | undefined; + } & Abortable) + | BufferEncoding, + callback: (err: NodeJS.ErrnoException | null, data: string) => void, + ): void; + /** + * Asynchronously reads the entire contents of a file. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * If a file descriptor is provided, the underlying file will _not_ be closed automatically. + * @param options Either the encoding for the result, or an object that contains the encoding and an optional flag. + * If a flag is not provided, it defaults to `'r'`. + */ + export function readFile( + path: PathOrFileDescriptor, + options: + | (ObjectEncodingOptions & { + flag?: string | undefined; + } & Abortable) + | BufferEncoding + | undefined + | null, + callback: (err: NodeJS.ErrnoException | null, data: string | Buffer) => void, + ): void; + /** + * Asynchronously reads the entire contents of a file. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * If a file descriptor is provided, the underlying file will _not_ be closed automatically. + */ + export function readFile( + path: PathOrFileDescriptor, + callback: (err: NodeJS.ErrnoException | null, data: Buffer) => void, + ): void; + export namespace readFile { + /** + * Asynchronously reads the entire contents of a file. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * If a file descriptor is provided, the underlying file will _not_ be closed automatically. + * @param options An object that may contain an optional flag. + * If a flag is not provided, it defaults to `'r'`. + */ + function __promisify__( + path: PathOrFileDescriptor, + options?: { + encoding?: null | undefined; + flag?: string | undefined; + } | null, + ): Promise; + /** + * Asynchronously reads the entire contents of a file. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + * If a file descriptor is provided, the underlying file will _not_ be closed automatically. + * @param options Either the encoding for the result, or an object that contains the encoding and an optional flag. + * If a flag is not provided, it defaults to `'r'`. + */ + function __promisify__( + path: PathOrFileDescriptor, + options: + | { + encoding: BufferEncoding; + flag?: string | undefined; + } + | BufferEncoding, + ): Promise; + /** + * Asynchronously reads the entire contents of a file. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + * If a file descriptor is provided, the underlying file will _not_ be closed automatically. + * @param options Either the encoding for the result, or an object that contains the encoding and an optional flag. + * If a flag is not provided, it defaults to `'r'`. + */ + function __promisify__( + path: PathOrFileDescriptor, + options?: + | (ObjectEncodingOptions & { + flag?: string | undefined; + }) + | BufferEncoding + | null, + ): Promise; + } + /** + * Returns the contents of the `path`. + * + * For detailed information, see the documentation of the asynchronous version of + * this API: {@link readFile}. + * + * If the `encoding` option is specified then this function returns a + * string. Otherwise it returns a buffer. + * + * Similar to {@link readFile}, when the path is a directory, the behavior of`fs.readFileSync()` is platform-specific. + * + * ```js + * import { readFileSync } from 'node:fs'; + * + * // macOS, Linux, and Windows + * readFileSync(''); + * // => [Error: EISDIR: illegal operation on a directory, read ] + * + * // FreeBSD + * readFileSync(''); // => + * ``` + * @since v0.1.8 + * @param path filename or file descriptor + */ + export function readFileSync( + path: PathOrFileDescriptor, + options?: { + encoding?: null | undefined; + flag?: string | undefined; + } | null, + ): Buffer; + /** + * Synchronously reads the entire contents of a file. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * If a file descriptor is provided, the underlying file will _not_ be closed automatically. + * @param options Either the encoding for the result, or an object that contains the encoding and an optional flag. + * If a flag is not provided, it defaults to `'r'`. + */ + export function readFileSync( + path: PathOrFileDescriptor, + options: + | { + encoding: BufferEncoding; + flag?: string | undefined; + } + | BufferEncoding, + ): string; + /** + * Synchronously reads the entire contents of a file. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * If a file descriptor is provided, the underlying file will _not_ be closed automatically. + * @param options Either the encoding for the result, or an object that contains the encoding and an optional flag. + * If a flag is not provided, it defaults to `'r'`. + */ + export function readFileSync( + path: PathOrFileDescriptor, + options?: + | (ObjectEncodingOptions & { + flag?: string | undefined; + }) + | BufferEncoding + | null, + ): string | Buffer; + export type WriteFileOptions = + | ( + & ObjectEncodingOptions + & Abortable + & { + mode?: Mode | undefined; + flag?: string | undefined; + } + ) + | BufferEncoding + | null; + /** + * When `file` is a filename, asynchronously writes data to the file, replacing the + * file if it already exists. `data` can be a string or a buffer. + * + * When `file` is a file descriptor, the behavior is similar to calling`fs.write()` directly (which is recommended). See the notes below on using + * a file descriptor. + * + * The `encoding` option is ignored if `data` is a buffer. + * + * The `mode` option only affects the newly created file. See {@link open} for more details. + * + * ```js + * import { writeFile } from 'node:fs'; + * import { Buffer } from 'node:buffer'; + * + * const data = new Uint8Array(Buffer.from('Hello Node.js')); + * writeFile('message.txt', data, (err) => { + * if (err) throw err; + * console.log('The file has been saved!'); + * }); + * ``` + * + * If `options` is a string, then it specifies the encoding: + * + * ```js + * import { writeFile } from 'node:fs'; + * + * writeFile('message.txt', 'Hello Node.js', 'utf8', callback); + * ``` + * + * It is unsafe to use `fs.writeFile()` multiple times on the same file without + * waiting for the callback. For this scenario, {@link createWriteStream} is + * recommended. + * + * Similarly to `fs.readFile` \- `fs.writeFile` is a convenience method that + * performs multiple `write` calls internally to write the buffer passed to it. + * For performance sensitive code consider using {@link createWriteStream}. + * + * It is possible to use an `AbortSignal` to cancel an `fs.writeFile()`. + * Cancelation is "best effort", and some amount of data is likely still + * to be written. + * + * ```js + * import { writeFile } from 'node:fs'; + * import { Buffer } from 'node:buffer'; + * + * const controller = new AbortController(); + * const { signal } = controller; + * const data = new Uint8Array(Buffer.from('Hello Node.js')); + * writeFile('message.txt', data, { signal }, (err) => { + * // When a request is aborted - the callback is called with an AbortError + * }); + * // When the request should be aborted + * controller.abort(); + * ``` + * + * Aborting an ongoing request does not abort individual operating + * system requests but rather the internal buffering `fs.writeFile` performs. + * @since v0.1.29 + * @param file filename or file descriptor + */ + export function writeFile( + file: PathOrFileDescriptor, + data: string | NodeJS.ArrayBufferView, + options: WriteFileOptions, + callback: NoParamCallback, + ): void; + /** + * Asynchronously writes data to a file, replacing the file if it already exists. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * If a file descriptor is provided, the underlying file will _not_ be closed automatically. + * @param data The data to write. If something other than a Buffer or Uint8Array is provided, the value is coerced to a string. + */ + export function writeFile( + path: PathOrFileDescriptor, + data: string | NodeJS.ArrayBufferView, + callback: NoParamCallback, + ): void; + export namespace writeFile { + /** + * Asynchronously writes data to a file, replacing the file if it already exists. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + * If a file descriptor is provided, the underlying file will _not_ be closed automatically. + * @param data The data to write. If something other than a Buffer or Uint8Array is provided, the value is coerced to a string. + * @param options Either the encoding for the file, or an object optionally specifying the encoding, file mode, and flag. + * If `encoding` is not supplied, the default of `'utf8'` is used. + * If `mode` is not supplied, the default of `0o666` is used. + * If `mode` is a string, it is parsed as an octal integer. + * If `flag` is not supplied, the default of `'w'` is used. + */ + function __promisify__( + path: PathOrFileDescriptor, + data: string | NodeJS.ArrayBufferView, + options?: WriteFileOptions, + ): Promise; + } + /** + * Returns `undefined`. + * + * The `mode` option only affects the newly created file. See {@link open} for more details. + * + * For detailed information, see the documentation of the asynchronous version of + * this API: {@link writeFile}. + * @since v0.1.29 + * @param file filename or file descriptor + */ + export function writeFileSync( + file: PathOrFileDescriptor, + data: string | NodeJS.ArrayBufferView, + options?: WriteFileOptions, + ): void; + /** + * Asynchronously append data to a file, creating the file if it does not yet + * exist. `data` can be a string or a `Buffer`. + * + * The `mode` option only affects the newly created file. See {@link open} for more details. + * + * ```js + * import { appendFile } from 'node:fs'; + * + * appendFile('message.txt', 'data to append', (err) => { + * if (err) throw err; + * console.log('The "data to append" was appended to file!'); + * }); + * ``` + * + * If `options` is a string, then it specifies the encoding: + * + * ```js + * import { appendFile } from 'node:fs'; + * + * appendFile('message.txt', 'data to append', 'utf8', callback); + * ``` + * + * The `path` may be specified as a numeric file descriptor that has been opened + * for appending (using `fs.open()` or `fs.openSync()`). The file descriptor will + * not be closed automatically. + * + * ```js + * import { open, close, appendFile } from 'node:fs'; + * + * function closeFd(fd) { + * close(fd, (err) => { + * if (err) throw err; + * }); + * } + * + * open('message.txt', 'a', (err, fd) => { + * if (err) throw err; + * + * try { + * appendFile(fd, 'data to append', 'utf8', (err) => { + * closeFd(fd); + * if (err) throw err; + * }); + * } catch (err) { + * closeFd(fd); + * throw err; + * } + * }); + * ``` + * @since v0.6.7 + * @param path filename or file descriptor + */ + export function appendFile( + path: PathOrFileDescriptor, + data: string | Uint8Array, + options: WriteFileOptions, + callback: NoParamCallback, + ): void; + /** + * Asynchronously append data to a file, creating the file if it does not exist. + * @param file A path to a file. If a URL is provided, it must use the `file:` protocol. + * If a file descriptor is provided, the underlying file will _not_ be closed automatically. + * @param data The data to write. If something other than a Buffer or Uint8Array is provided, the value is coerced to a string. + */ + export function appendFile(file: PathOrFileDescriptor, data: string | Uint8Array, callback: NoParamCallback): void; + export namespace appendFile { + /** + * Asynchronously append data to a file, creating the file if it does not exist. + * @param file A path to a file. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + * If a file descriptor is provided, the underlying file will _not_ be closed automatically. + * @param data The data to write. If something other than a Buffer or Uint8Array is provided, the value is coerced to a string. + * @param options Either the encoding for the file, or an object optionally specifying the encoding, file mode, and flag. + * If `encoding` is not supplied, the default of `'utf8'` is used. + * If `mode` is not supplied, the default of `0o666` is used. + * If `mode` is a string, it is parsed as an octal integer. + * If `flag` is not supplied, the default of `'a'` is used. + */ + function __promisify__( + file: PathOrFileDescriptor, + data: string | Uint8Array, + options?: WriteFileOptions, + ): Promise; + } + /** + * Synchronously append data to a file, creating the file if it does not yet + * exist. `data` can be a string or a `Buffer`. + * + * The `mode` option only affects the newly created file. See {@link open} for more details. + * + * ```js + * import { appendFileSync } from 'node:fs'; + * + * try { + * appendFileSync('message.txt', 'data to append'); + * console.log('The "data to append" was appended to file!'); + * } catch (err) { + * // Handle the error + * } + * ``` + * + * If `options` is a string, then it specifies the encoding: + * + * ```js + * import { appendFileSync } from 'node:fs'; + * + * appendFileSync('message.txt', 'data to append', 'utf8'); + * ``` + * + * The `path` may be specified as a numeric file descriptor that has been opened + * for appending (using `fs.open()` or `fs.openSync()`). The file descriptor will + * not be closed automatically. + * + * ```js + * import { openSync, closeSync, appendFileSync } from 'node:fs'; + * + * let fd; + * + * try { + * fd = openSync('message.txt', 'a'); + * appendFileSync(fd, 'data to append', 'utf8'); + * } catch (err) { + * // Handle the error + * } finally { + * if (fd !== undefined) + * closeSync(fd); + * } + * ``` + * @since v0.6.7 + * @param path filename or file descriptor + */ + export function appendFileSync( + path: PathOrFileDescriptor, + data: string | Uint8Array, + options?: WriteFileOptions, + ): void; + /** + * Watch for changes on `filename`. The callback `listener` will be called each + * time the file is accessed. + * + * The `options` argument may be omitted. If provided, it should be an object. The`options` object may contain a boolean named `persistent` that indicates + * whether the process should continue to run as long as files are being watched. + * The `options` object may specify an `interval` property indicating how often the + * target should be polled in milliseconds. + * + * The `listener` gets two arguments the current stat object and the previous + * stat object: + * + * ```js + * import { watchFile } from 'fs'; + * + * watchFile('message.text', (curr, prev) => { + * console.log(`the current mtime is: ${curr.mtime}`); + * console.log(`the previous mtime was: ${prev.mtime}`); + * }); + * ``` + * + * These stat objects are instances of `fs.Stat`. If the `bigint` option is `true`, + * the numeric values in these objects are specified as `BigInt`s. + * + * To be notified when the file was modified, not just accessed, it is necessary + * to compare `curr.mtimeMs` and `prev.mtimeMs`. + * + * When an `fs.watchFile` operation results in an `ENOENT` error, it + * will invoke the listener once, with all the fields zeroed (or, for dates, the + * Unix Epoch). If the file is created later on, the listener will be called + * again, with the latest stat objects. This is a change in functionality since + * v0.10. + * + * Using {@link watch} is more efficient than `fs.watchFile` and`fs.unwatchFile`. `fs.watch` should be used instead of `fs.watchFile` and`fs.unwatchFile` when possible. + * + * When a file being watched by `fs.watchFile()` disappears and reappears, + * then the contents of `previous` in the second callback event (the file's + * reappearance) will be the same as the contents of `previous` in the first + * callback event (its disappearance). + * + * This happens when: + * + * * the file is deleted, followed by a restore + * * the file is renamed and then renamed a second time back to its original name + * @since v0.1.31 + */ + export interface WatchFileOptions { + bigint?: boolean | undefined; + persistent?: boolean | undefined; + interval?: number | undefined; + } + /** + * Watch for changes on `filename`. The callback `listener` will be called each + * time the file is accessed. + * + * The `options` argument may be omitted. If provided, it should be an object. The`options` object may contain a boolean named `persistent` that indicates + * whether the process should continue to run as long as files are being watched. + * The `options` object may specify an `interval` property indicating how often the + * target should be polled in milliseconds. + * + * The `listener` gets two arguments the current stat object and the previous + * stat object: + * + * ```js + * import { watchFile } from 'node:fs'; + * + * watchFile('message.text', (curr, prev) => { + * console.log(`the current mtime is: ${curr.mtime}`); + * console.log(`the previous mtime was: ${prev.mtime}`); + * }); + * ``` + * + * These stat objects are instances of `fs.Stat`. If the `bigint` option is `true`, + * the numeric values in these objects are specified as `BigInt`s. + * + * To be notified when the file was modified, not just accessed, it is necessary + * to compare `curr.mtimeMs` and `prev.mtimeMs`. + * + * When an `fs.watchFile` operation results in an `ENOENT` error, it + * will invoke the listener once, with all the fields zeroed (or, for dates, the + * Unix Epoch). If the file is created later on, the listener will be called + * again, with the latest stat objects. This is a change in functionality since + * v0.10. + * + * Using {@link watch} is more efficient than `fs.watchFile` and`fs.unwatchFile`. `fs.watch` should be used instead of `fs.watchFile` and`fs.unwatchFile` when possible. + * + * When a file being watched by `fs.watchFile()` disappears and reappears, + * then the contents of `previous` in the second callback event (the file's + * reappearance) will be the same as the contents of `previous` in the first + * callback event (its disappearance). + * + * This happens when: + * + * * the file is deleted, followed by a restore + * * the file is renamed and then renamed a second time back to its original name + * @since v0.1.31 + */ + export function watchFile( + filename: PathLike, + options: + | (WatchFileOptions & { + bigint?: false | undefined; + }) + | undefined, + listener: StatsListener, + ): StatWatcher; + export function watchFile( + filename: PathLike, + options: + | (WatchFileOptions & { + bigint: true; + }) + | undefined, + listener: BigIntStatsListener, + ): StatWatcher; + /** + * Watch for changes on `filename`. The callback `listener` will be called each time the file is accessed. + * @param filename A path to a file or directory. If a URL is provided, it must use the `file:` protocol. + */ + export function watchFile(filename: PathLike, listener: StatsListener): StatWatcher; + /** + * Stop watching for changes on `filename`. If `listener` is specified, only that + * particular listener is removed. Otherwise, _all_ listeners are removed, + * effectively stopping watching of `filename`. + * + * Calling `fs.unwatchFile()` with a filename that is not being watched is a + * no-op, not an error. + * + * Using {@link watch} is more efficient than `fs.watchFile()` and`fs.unwatchFile()`. `fs.watch()` should be used instead of `fs.watchFile()`and `fs.unwatchFile()` when possible. + * @since v0.1.31 + * @param listener Optional, a listener previously attached using `fs.watchFile()` + */ + export function unwatchFile(filename: PathLike, listener?: StatsListener): void; + export function unwatchFile(filename: PathLike, listener?: BigIntStatsListener): void; + export interface WatchOptions extends Abortable { + encoding?: BufferEncoding | "buffer" | undefined; + persistent?: boolean | undefined; + recursive?: boolean | undefined; + } + export type WatchEventType = "rename" | "change"; + export type WatchListener = (event: WatchEventType, filename: T | null) => void; + export type StatsListener = (curr: Stats, prev: Stats) => void; + export type BigIntStatsListener = (curr: BigIntStats, prev: BigIntStats) => void; + /** + * Watch for changes on `filename`, where `filename` is either a file or a + * directory. + * + * The second argument is optional. If `options` is provided as a string, it + * specifies the `encoding`. Otherwise `options` should be passed as an object. + * + * The listener callback gets two arguments `(eventType, filename)`. `eventType`is either `'rename'` or `'change'`, and `filename` is the name of the file + * which triggered the event. + * + * On most platforms, `'rename'` is emitted whenever a filename appears or + * disappears in the directory. + * + * The listener callback is attached to the `'change'` event fired by `fs.FSWatcher`, but it is not the same thing as the `'change'` value of`eventType`. + * + * If a `signal` is passed, aborting the corresponding AbortController will close + * the returned `fs.FSWatcher`. + * @since v0.5.10 + * @param listener + */ + export function watch( + filename: PathLike, + options: + | (WatchOptions & { + encoding: "buffer"; + }) + | "buffer", + listener?: WatchListener, + ): FSWatcher; + /** + * Watch for changes on `filename`, where `filename` is either a file or a directory, returning an `FSWatcher`. + * @param filename A path to a file or directory. If a URL is provided, it must use the `file:` protocol. + * @param options Either the encoding for the filename provided to the listener, or an object optionally specifying encoding, persistent, and recursive options. + * If `encoding` is not supplied, the default of `'utf8'` is used. + * If `persistent` is not supplied, the default of `true` is used. + * If `recursive` is not supplied, the default of `false` is used. + */ + export function watch( + filename: PathLike, + options?: WatchOptions | BufferEncoding | null, + listener?: WatchListener, + ): FSWatcher; + /** + * Watch for changes on `filename`, where `filename` is either a file or a directory, returning an `FSWatcher`. + * @param filename A path to a file or directory. If a URL is provided, it must use the `file:` protocol. + * @param options Either the encoding for the filename provided to the listener, or an object optionally specifying encoding, persistent, and recursive options. + * If `encoding` is not supplied, the default of `'utf8'` is used. + * If `persistent` is not supplied, the default of `true` is used. + * If `recursive` is not supplied, the default of `false` is used. + */ + export function watch( + filename: PathLike, + options: WatchOptions | string, + listener?: WatchListener, + ): FSWatcher; + /** + * Watch for changes on `filename`, where `filename` is either a file or a directory, returning an `FSWatcher`. + * @param filename A path to a file or directory. If a URL is provided, it must use the `file:` protocol. + */ + export function watch(filename: PathLike, listener?: WatchListener): FSWatcher; + /** + * Test whether or not the given path exists by checking with the file system. + * Then call the `callback` argument with either true or false: + * + * ```js + * import { exists } from 'node:fs'; + * + * exists('/etc/passwd', (e) => { + * console.log(e ? 'it exists' : 'no passwd!'); + * }); + * ``` + * + * **The parameters for this callback are not consistent with other Node.js** + * **callbacks.** Normally, the first parameter to a Node.js callback is an `err`parameter, optionally followed by other parameters. The `fs.exists()` callback + * has only one boolean parameter. This is one reason `fs.access()` is recommended + * instead of `fs.exists()`. + * + * Using `fs.exists()` to check for the existence of a file before calling`fs.open()`, `fs.readFile()`, or `fs.writeFile()` is not recommended. Doing + * so introduces a race condition, since other processes may change the file's + * state between the two calls. Instead, user code should open/read/write the + * file directly and handle the error raised if the file does not exist. + * + * **write (NOT RECOMMENDED)** + * + * ```js + * import { exists, open, close } from 'node:fs'; + * + * exists('myfile', (e) => { + * if (e) { + * console.error('myfile already exists'); + * } else { + * open('myfile', 'wx', (err, fd) => { + * if (err) throw err; + * + * try { + * writeMyData(fd); + * } finally { + * close(fd, (err) => { + * if (err) throw err; + * }); + * } + * }); + * } + * }); + * ``` + * + * **write (RECOMMENDED)** + * + * ```js + * import { open, close } from 'node:fs'; + * open('myfile', 'wx', (err, fd) => { + * if (err) { + * if (err.code === 'EEXIST') { + * console.error('myfile already exists'); + * return; + * } + * + * throw err; + * } + * + * try { + * writeMyData(fd); + * } finally { + * close(fd, (err) => { + * if (err) throw err; + * }); + * } + * }); + * ``` + * + * **read (NOT RECOMMENDED)** + * + * ```js + * import { open, close, exists } from 'node:fs'; + * + * exists('myfile', (e) => { + * if (e) { + * open('myfile', 'r', (err, fd) => { + * if (err) throw err; + * + * try { + * readMyData(fd); + * } finally { + * close(fd, (err) => { + * if (err) throw err; + * }); + * } + * }); + * } else { + * console.error('myfile does not exist'); + * } + * }); + * ``` + * + * **read (RECOMMENDED)** + * + * ```js + * import { open, close } from 'node:fs'; + * + * open('myfile', 'r', (err, fd) => { + * if (err) { + * if (err.code === 'ENOENT') { + * console.error('myfile does not exist'); + * return; + * } + * + * throw err; + * } + * + * try { + * readMyData(fd); + * } finally { + * close(fd, (err) => { + * if (err) throw err; + * }); + * } + * }); + * ``` + * + * The "not recommended" examples above check for existence and then use the + * file; the "recommended" examples are better because they use the file directly + * and handle the error, if any. + * + * In general, check for the existence of a file only if the file won't be + * used directly, for example when its existence is a signal from another + * process. + * @since v0.0.2 + * @deprecated Since v1.0.0 - Use {@link stat} or {@link access} instead. + */ + export function exists(path: PathLike, callback: (exists: boolean) => void): void; + /** @deprecated */ + export namespace exists { + /** + * @param path A path to a file or directory. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + */ + function __promisify__(path: PathLike): Promise; + } + /** + * Returns `true` if the path exists, `false` otherwise. + * + * For detailed information, see the documentation of the asynchronous version of + * this API: {@link exists}. + * + * `fs.exists()` is deprecated, but `fs.existsSync()` is not. The `callback`parameter to `fs.exists()` accepts parameters that are inconsistent with other + * Node.js callbacks. `fs.existsSync()` does not use a callback. + * + * ```js + * import { existsSync } from 'node:fs'; + * + * if (existsSync('/etc/passwd')) + * console.log('The path exists.'); + * ``` + * @since v0.1.21 + */ + export function existsSync(path: PathLike): boolean; + export namespace constants { + // File Access Constants + /** Constant for fs.access(). File is visible to the calling process. */ + const F_OK: number; + /** Constant for fs.access(). File can be read by the calling process. */ + const R_OK: number; + /** Constant for fs.access(). File can be written by the calling process. */ + const W_OK: number; + /** Constant for fs.access(). File can be executed by the calling process. */ + const X_OK: number; + // File Copy Constants + /** Constant for fs.copyFile. Flag indicating the destination file should not be overwritten if it already exists. */ + const COPYFILE_EXCL: number; + /** + * Constant for fs.copyFile. copy operation will attempt to create a copy-on-write reflink. + * If the underlying platform does not support copy-on-write, then a fallback copy mechanism is used. + */ + const COPYFILE_FICLONE: number; + /** + * Constant for fs.copyFile. Copy operation will attempt to create a copy-on-write reflink. + * If the underlying platform does not support copy-on-write, then the operation will fail with an error. + */ + const COPYFILE_FICLONE_FORCE: number; + // File Open Constants + /** Constant for fs.open(). Flag indicating to open a file for read-only access. */ + const O_RDONLY: number; + /** Constant for fs.open(). Flag indicating to open a file for write-only access. */ + const O_WRONLY: number; + /** Constant for fs.open(). Flag indicating to open a file for read-write access. */ + const O_RDWR: number; + /** Constant for fs.open(). Flag indicating to create the file if it does not already exist. */ + const O_CREAT: number; + /** Constant for fs.open(). Flag indicating that opening a file should fail if the O_CREAT flag is set and the file already exists. */ + const O_EXCL: number; + /** + * Constant for fs.open(). Flag indicating that if path identifies a terminal device, + * opening the path shall not cause that terminal to become the controlling terminal for the process + * (if the process does not already have one). + */ + const O_NOCTTY: number; + /** Constant for fs.open(). Flag indicating that if the file exists and is a regular file, and the file is opened successfully for write access, its length shall be truncated to zero. */ + const O_TRUNC: number; + /** Constant for fs.open(). Flag indicating that data will be appended to the end of the file. */ + const O_APPEND: number; + /** Constant for fs.open(). Flag indicating that the open should fail if the path is not a directory. */ + const O_DIRECTORY: number; + /** + * constant for fs.open(). + * Flag indicating reading accesses to the file system will no longer result in + * an update to the atime information associated with the file. + * This flag is available on Linux operating systems only. + */ + const O_NOATIME: number; + /** Constant for fs.open(). Flag indicating that the open should fail if the path is a symbolic link. */ + const O_NOFOLLOW: number; + /** Constant for fs.open(). Flag indicating that the file is opened for synchronous I/O. */ + const O_SYNC: number; + /** Constant for fs.open(). Flag indicating that the file is opened for synchronous I/O with write operations waiting for data integrity. */ + const O_DSYNC: number; + /** Constant for fs.open(). Flag indicating to open the symbolic link itself rather than the resource it is pointing to. */ + const O_SYMLINK: number; + /** Constant for fs.open(). When set, an attempt will be made to minimize caching effects of file I/O. */ + const O_DIRECT: number; + /** Constant for fs.open(). Flag indicating to open the file in nonblocking mode when possible. */ + const O_NONBLOCK: number; + // File Type Constants + /** Constant for fs.Stats mode property for determining a file's type. Bit mask used to extract the file type code. */ + const S_IFMT: number; + /** Constant for fs.Stats mode property for determining a file's type. File type constant for a regular file. */ + const S_IFREG: number; + /** Constant for fs.Stats mode property for determining a file's type. File type constant for a directory. */ + const S_IFDIR: number; + /** Constant for fs.Stats mode property for determining a file's type. File type constant for a character-oriented device file. */ + const S_IFCHR: number; + /** Constant for fs.Stats mode property for determining a file's type. File type constant for a block-oriented device file. */ + const S_IFBLK: number; + /** Constant for fs.Stats mode property for determining a file's type. File type constant for a FIFO/pipe. */ + const S_IFIFO: number; + /** Constant for fs.Stats mode property for determining a file's type. File type constant for a symbolic link. */ + const S_IFLNK: number; + /** Constant for fs.Stats mode property for determining a file's type. File type constant for a socket. */ + const S_IFSOCK: number; + // File Mode Constants + /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating readable, writable and executable by owner. */ + const S_IRWXU: number; + /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating readable by owner. */ + const S_IRUSR: number; + /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating writable by owner. */ + const S_IWUSR: number; + /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating executable by owner. */ + const S_IXUSR: number; + /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating readable, writable and executable by group. */ + const S_IRWXG: number; + /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating readable by group. */ + const S_IRGRP: number; + /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating writable by group. */ + const S_IWGRP: number; + /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating executable by group. */ + const S_IXGRP: number; + /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating readable, writable and executable by others. */ + const S_IRWXO: number; + /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating readable by others. */ + const S_IROTH: number; + /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating writable by others. */ + const S_IWOTH: number; + /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating executable by others. */ + const S_IXOTH: number; + /** + * When set, a memory file mapping is used to access the file. This flag + * is available on Windows operating systems only. On other operating systems, + * this flag is ignored. + */ + const UV_FS_O_FILEMAP: number; + } + /** + * Tests a user's permissions for the file or directory specified by `path`. + * The `mode` argument is an optional integer that specifies the accessibility + * checks to be performed. `mode` should be either the value `fs.constants.F_OK`or a mask consisting of the bitwise OR of any of `fs.constants.R_OK`,`fs.constants.W_OK`, and `fs.constants.X_OK` + * (e.g.`fs.constants.W_OK | fs.constants.R_OK`). Check `File access constants` for + * possible values of `mode`. + * + * The final argument, `callback`, is a callback function that is invoked with + * a possible error argument. If any of the accessibility checks fail, the error + * argument will be an `Error` object. The following examples check if`package.json` exists, and if it is readable or writable. + * + * ```js + * import { access, constants } from 'node:fs'; + * + * const file = 'package.json'; + * + * // Check if the file exists in the current directory. + * access(file, constants.F_OK, (err) => { + * console.log(`${file} ${err ? 'does not exist' : 'exists'}`); + * }); + * + * // Check if the file is readable. + * access(file, constants.R_OK, (err) => { + * console.log(`${file} ${err ? 'is not readable' : 'is readable'}`); + * }); + * + * // Check if the file is writable. + * access(file, constants.W_OK, (err) => { + * console.log(`${file} ${err ? 'is not writable' : 'is writable'}`); + * }); + * + * // Check if the file is readable and writable. + * access(file, constants.R_OK | constants.W_OK, (err) => { + * console.log(`${file} ${err ? 'is not' : 'is'} readable and writable`); + * }); + * ``` + * + * Do not use `fs.access()` to check for the accessibility of a file before calling`fs.open()`, `fs.readFile()`, or `fs.writeFile()`. Doing + * so introduces a race condition, since other processes may change the file's + * state between the two calls. Instead, user code should open/read/write the + * file directly and handle the error raised if the file is not accessible. + * + * **write (NOT RECOMMENDED)** + * + * ```js + * import { access, open, close } from 'node:fs'; + * + * access('myfile', (err) => { + * if (!err) { + * console.error('myfile already exists'); + * return; + * } + * + * open('myfile', 'wx', (err, fd) => { + * if (err) throw err; + * + * try { + * writeMyData(fd); + * } finally { + * close(fd, (err) => { + * if (err) throw err; + * }); + * } + * }); + * }); + * ``` + * + * **write (RECOMMENDED)** + * + * ```js + * import { open, close } from 'node:fs'; + * + * open('myfile', 'wx', (err, fd) => { + * if (err) { + * if (err.code === 'EEXIST') { + * console.error('myfile already exists'); + * return; + * } + * + * throw err; + * } + * + * try { + * writeMyData(fd); + * } finally { + * close(fd, (err) => { + * if (err) throw err; + * }); + * } + * }); + * ``` + * + * **read (NOT RECOMMENDED)** + * + * ```js + * import { access, open, close } from 'node:fs'; + * access('myfile', (err) => { + * if (err) { + * if (err.code === 'ENOENT') { + * console.error('myfile does not exist'); + * return; + * } + * + * throw err; + * } + * + * open('myfile', 'r', (err, fd) => { + * if (err) throw err; + * + * try { + * readMyData(fd); + * } finally { + * close(fd, (err) => { + * if (err) throw err; + * }); + * } + * }); + * }); + * ``` + * + * **read (RECOMMENDED)** + * + * ```js + * import { open, close } from 'node:fs'; + * + * open('myfile', 'r', (err, fd) => { + * if (err) { + * if (err.code === 'ENOENT') { + * console.error('myfile does not exist'); + * return; + * } + * + * throw err; + * } + * + * try { + * readMyData(fd); + * } finally { + * close(fd, (err) => { + * if (err) throw err; + * }); + * } + * }); + * ``` + * + * The "not recommended" examples above check for accessibility and then use the + * file; the "recommended" examples are better because they use the file directly + * and handle the error, if any. + * + * In general, check for the accessibility of a file only if the file will not be + * used directly, for example when its accessibility is a signal from another + * process. + * + * On Windows, access-control policies (ACLs) on a directory may limit access to + * a file or directory. The `fs.access()` function, however, does not check the + * ACL and therefore may report that a path is accessible even if the ACL restricts + * the user from reading or writing to it. + * @since v0.11.15 + * @param [mode=fs.constants.F_OK] + */ + export function access(path: PathLike, mode: number | undefined, callback: NoParamCallback): void; + /** + * Asynchronously tests a user's permissions for the file specified by path. + * @param path A path to a file or directory. If a URL is provided, it must use the `file:` protocol. + */ + export function access(path: PathLike, callback: NoParamCallback): void; + export namespace access { + /** + * Asynchronously tests a user's permissions for the file specified by path. + * @param path A path to a file or directory. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + */ + function __promisify__(path: PathLike, mode?: number): Promise; + } + /** + * Synchronously tests a user's permissions for the file or directory specified + * by `path`. The `mode` argument is an optional integer that specifies the + * accessibility checks to be performed. `mode` should be either the value`fs.constants.F_OK` or a mask consisting of the bitwise OR of any of`fs.constants.R_OK`, `fs.constants.W_OK`, and + * `fs.constants.X_OK` (e.g.`fs.constants.W_OK | fs.constants.R_OK`). Check `File access constants` for + * possible values of `mode`. + * + * If any of the accessibility checks fail, an `Error` will be thrown. Otherwise, + * the method will return `undefined`. + * + * ```js + * import { accessSync, constants } from 'node:fs'; + * + * try { + * accessSync('etc/passwd', constants.R_OK | constants.W_OK); + * console.log('can read/write'); + * } catch (err) { + * console.error('no access!'); + * } + * ``` + * @since v0.11.15 + * @param [mode=fs.constants.F_OK] + */ + export function accessSync(path: PathLike, mode?: number): void; + interface StreamOptions { + flags?: string | undefined; + encoding?: BufferEncoding | undefined; + fd?: number | promises.FileHandle | undefined; + mode?: number | undefined; + autoClose?: boolean | undefined; + emitClose?: boolean | undefined; + start?: number | undefined; + signal?: AbortSignal | null | undefined; + highWaterMark?: number | undefined; + } + interface FSImplementation { + open?: (...args: any[]) => any; + close?: (...args: any[]) => any; + } + interface CreateReadStreamFSImplementation extends FSImplementation { + read: (...args: any[]) => any; + } + interface CreateWriteStreamFSImplementation extends FSImplementation { + write: (...args: any[]) => any; + writev?: (...args: any[]) => any; + } + interface ReadStreamOptions extends StreamOptions { + fs?: CreateReadStreamFSImplementation | null | undefined; + end?: number | undefined; + } + interface WriteStreamOptions extends StreamOptions { + fs?: CreateWriteStreamFSImplementation | null | undefined; + } + /** + * Unlike the 16 KiB default `highWaterMark` for a `stream.Readable`, the stream + * returned by this method has a default `highWaterMark` of 64 KiB. + * + * `options` can include `start` and `end` values to read a range of bytes from + * the file instead of the entire file. Both `start` and `end` are inclusive and + * start counting at 0, allowed values are in the + * \[0, [`Number.MAX_SAFE_INTEGER`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MAX_SAFE_INTEGER)\] range. If `fd` is specified and `start` is + * omitted or `undefined`, `fs.createReadStream()` reads sequentially from the + * current file position. The `encoding` can be any one of those accepted by `Buffer`. + * + * If `fd` is specified, `ReadStream` will ignore the `path` argument and will use + * the specified file descriptor. This means that no `'open'` event will be + * emitted. `fd` should be blocking; non-blocking `fd`s should be passed to `net.Socket`. + * + * If `fd` points to a character device that only supports blocking reads + * (such as keyboard or sound card), read operations do not finish until data is + * available. This can prevent the process from exiting and the stream from + * closing naturally. + * + * By default, the stream will emit a `'close'` event after it has been + * destroyed. Set the `emitClose` option to `false` to change this behavior. + * + * By providing the `fs` option, it is possible to override the corresponding `fs`implementations for `open`, `read`, and `close`. When providing the `fs` option, + * an override for `read` is required. If no `fd` is provided, an override for`open` is also required. If `autoClose` is `true`, an override for `close` is + * also required. + * + * ```js + * import { createReadStream } from 'node:fs'; + * + * // Create a stream from some character device. + * const stream = createReadStream('/dev/input/event0'); + * setTimeout(() => { + * stream.close(); // This may not close the stream. + * // Artificially marking end-of-stream, as if the underlying resource had + * // indicated end-of-file by itself, allows the stream to close. + * // This does not cancel pending read operations, and if there is such an + * // operation, the process may still not be able to exit successfully + * // until it finishes. + * stream.push(null); + * stream.read(0); + * }, 100); + * ``` + * + * If `autoClose` is false, then the file descriptor won't be closed, even if + * there's an error. It is the application's responsibility to close it and make + * sure there's no file descriptor leak. If `autoClose` is set to true (default + * behavior), on `'error'` or `'end'` the file descriptor will be closed + * automatically. + * + * `mode` sets the file mode (permission and sticky bits), but only if the + * file was created. + * + * An example to read the last 10 bytes of a file which is 100 bytes long: + * + * ```js + * import { createReadStream } from 'node:fs'; + * + * createReadStream('sample.txt', { start: 90, end: 99 }); + * ``` + * + * If `options` is a string, then it specifies the encoding. + * @since v0.1.31 + */ + export function createReadStream(path: PathLike, options?: BufferEncoding | ReadStreamOptions): ReadStream; + /** + * `options` may also include a `start` option to allow writing data at some + * position past the beginning of the file, allowed values are in the + * \[0, [`Number.MAX_SAFE_INTEGER`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MAX_SAFE_INTEGER)\] range. Modifying a file rather than + * replacing it may require the `flags` option to be set to `r+` rather than the + * default `w`. The `encoding` can be any one of those accepted by `Buffer`. + * + * If `autoClose` is set to true (default behavior) on `'error'` or `'finish'`the file descriptor will be closed automatically. If `autoClose` is false, + * then the file descriptor won't be closed, even if there's an error. + * It is the application's responsibility to close it and make sure there's no + * file descriptor leak. + * + * By default, the stream will emit a `'close'` event after it has been + * destroyed. Set the `emitClose` option to `false` to change this behavior. + * + * By providing the `fs` option it is possible to override the corresponding `fs`implementations for `open`, `write`, `writev`, and `close`. Overriding `write()`without `writev()` can reduce + * performance as some optimizations (`_writev()`) + * will be disabled. When providing the `fs` option, overrides for at least one of`write` and `writev` are required. If no `fd` option is supplied, an override + * for `open` is also required. If `autoClose` is `true`, an override for `close`is also required. + * + * Like `fs.ReadStream`, if `fd` is specified, `fs.WriteStream` will ignore the`path` argument and will use the specified file descriptor. This means that no`'open'` event will be + * emitted. `fd` should be blocking; non-blocking `fd`s + * should be passed to `net.Socket`. + * + * If `options` is a string, then it specifies the encoding. + * @since v0.1.31 + */ + export function createWriteStream(path: PathLike, options?: BufferEncoding | WriteStreamOptions): WriteStream; + /** + * Forces all currently queued I/O operations associated with the file to the + * operating system's synchronized I/O completion state. Refer to the POSIX [`fdatasync(2)`](http://man7.org/linux/man-pages/man2/fdatasync.2.html) documentation for details. No arguments other + * than a possible + * exception are given to the completion callback. + * @since v0.1.96 + */ + export function fdatasync(fd: number, callback: NoParamCallback): void; + export namespace fdatasync { + /** + * Asynchronous fdatasync(2) - synchronize a file's in-core state with storage device. + * @param fd A file descriptor. + */ + function __promisify__(fd: number): Promise; + } + /** + * Forces all currently queued I/O operations associated with the file to the + * operating system's synchronized I/O completion state. Refer to the POSIX [`fdatasync(2)`](http://man7.org/linux/man-pages/man2/fdatasync.2.html) documentation for details. Returns `undefined`. + * @since v0.1.96 + */ + export function fdatasyncSync(fd: number): void; + /** + * Asynchronously copies `src` to `dest`. By default, `dest` is overwritten if it + * already exists. No arguments other than a possible exception are given to the + * callback function. Node.js makes no guarantees about the atomicity of the copy + * operation. If an error occurs after the destination file has been opened for + * writing, Node.js will attempt to remove the destination. + * + * `mode` is an optional integer that specifies the behavior + * of the copy operation. It is possible to create a mask consisting of the bitwise + * OR of two or more values (e.g.`fs.constants.COPYFILE_EXCL | fs.constants.COPYFILE_FICLONE`). + * + * * `fs.constants.COPYFILE_EXCL`: The copy operation will fail if `dest` already + * exists. + * * `fs.constants.COPYFILE_FICLONE`: The copy operation will attempt to create a + * copy-on-write reflink. If the platform does not support copy-on-write, then a + * fallback copy mechanism is used. + * * `fs.constants.COPYFILE_FICLONE_FORCE`: The copy operation will attempt to + * create a copy-on-write reflink. If the platform does not support + * copy-on-write, then the operation will fail. + * + * ```js + * import { copyFile, constants } from 'node:fs'; + * + * function callback(err) { + * if (err) throw err; + * console.log('source.txt was copied to destination.txt'); + * } + * + * // destination.txt will be created or overwritten by default. + * copyFile('source.txt', 'destination.txt', callback); + * + * // By using COPYFILE_EXCL, the operation will fail if destination.txt exists. + * copyFile('source.txt', 'destination.txt', constants.COPYFILE_EXCL, callback); + * ``` + * @since v8.5.0 + * @param src source filename to copy + * @param dest destination filename of the copy operation + * @param [mode=0] modifiers for copy operation. + */ + export function copyFile(src: PathLike, dest: PathLike, callback: NoParamCallback): void; + export function copyFile(src: PathLike, dest: PathLike, mode: number, callback: NoParamCallback): void; + export namespace copyFile { + function __promisify__(src: PathLike, dst: PathLike, mode?: number): Promise; + } + /** + * Synchronously copies `src` to `dest`. By default, `dest` is overwritten if it + * already exists. Returns `undefined`. Node.js makes no guarantees about the + * atomicity of the copy operation. If an error occurs after the destination file + * has been opened for writing, Node.js will attempt to remove the destination. + * + * `mode` is an optional integer that specifies the behavior + * of the copy operation. It is possible to create a mask consisting of the bitwise + * OR of two or more values (e.g.`fs.constants.COPYFILE_EXCL | fs.constants.COPYFILE_FICLONE`). + * + * * `fs.constants.COPYFILE_EXCL`: The copy operation will fail if `dest` already + * exists. + * * `fs.constants.COPYFILE_FICLONE`: The copy operation will attempt to create a + * copy-on-write reflink. If the platform does not support copy-on-write, then a + * fallback copy mechanism is used. + * * `fs.constants.COPYFILE_FICLONE_FORCE`: The copy operation will attempt to + * create a copy-on-write reflink. If the platform does not support + * copy-on-write, then the operation will fail. + * + * ```js + * import { copyFileSync, constants } from 'node:fs'; + * + * // destination.txt will be created or overwritten by default. + * copyFileSync('source.txt', 'destination.txt'); + * console.log('source.txt was copied to destination.txt'); + * + * // By using COPYFILE_EXCL, the operation will fail if destination.txt exists. + * copyFileSync('source.txt', 'destination.txt', constants.COPYFILE_EXCL); + * ``` + * @since v8.5.0 + * @param src source filename to copy + * @param dest destination filename of the copy operation + * @param [mode=0] modifiers for copy operation. + */ + export function copyFileSync(src: PathLike, dest: PathLike, mode?: number): void; + /** + * Write an array of `ArrayBufferView`s to the file specified by `fd` using`writev()`. + * + * `position` is the offset from the beginning of the file where this data + * should be written. If `typeof position !== 'number'`, the data will be written + * at the current position. + * + * The callback will be given three arguments: `err`, `bytesWritten`, and`buffers`. `bytesWritten` is how many bytes were written from `buffers`. + * + * If this method is `util.promisify()` ed, it returns a promise for an`Object` with `bytesWritten` and `buffers` properties. + * + * It is unsafe to use `fs.writev()` multiple times on the same file without + * waiting for the callback. For this scenario, use {@link createWriteStream}. + * + * On Linux, positional writes don't work when the file is opened in append mode. + * The kernel ignores the position argument and always appends the data to + * the end of the file. + * @since v12.9.0 + * @param [position='null'] + */ + export function writev( + fd: number, + buffers: ReadonlyArray, + cb: (err: NodeJS.ErrnoException | null, bytesWritten: number, buffers: NodeJS.ArrayBufferView[]) => void, + ): void; + export function writev( + fd: number, + buffers: ReadonlyArray, + position: number, + cb: (err: NodeJS.ErrnoException | null, bytesWritten: number, buffers: NodeJS.ArrayBufferView[]) => void, + ): void; + export interface WriteVResult { + bytesWritten: number; + buffers: NodeJS.ArrayBufferView[]; + } + export namespace writev { + function __promisify__( + fd: number, + buffers: ReadonlyArray, + position?: number, + ): Promise; + } + /** + * For detailed information, see the documentation of the asynchronous version of + * this API: {@link writev}. + * @since v12.9.0 + * @param [position='null'] + * @return The number of bytes written. + */ + export function writevSync(fd: number, buffers: ReadonlyArray, position?: number): number; + /** + * Read from a file specified by `fd` and write to an array of `ArrayBufferView`s + * using `readv()`. + * + * `position` is the offset from the beginning of the file from where data + * should be read. If `typeof position !== 'number'`, the data will be read + * from the current position. + * + * The callback will be given three arguments: `err`, `bytesRead`, and`buffers`. `bytesRead` is how many bytes were read from the file. + * + * If this method is invoked as its `util.promisify()` ed version, it returns + * a promise for an `Object` with `bytesRead` and `buffers` properties. + * @since v13.13.0, v12.17.0 + * @param [position='null'] + */ + export function readv( + fd: number, + buffers: ReadonlyArray, + cb: (err: NodeJS.ErrnoException | null, bytesRead: number, buffers: NodeJS.ArrayBufferView[]) => void, + ): void; + export function readv( + fd: number, + buffers: ReadonlyArray, + position: number, + cb: (err: NodeJS.ErrnoException | null, bytesRead: number, buffers: NodeJS.ArrayBufferView[]) => void, + ): void; + export interface ReadVResult { + bytesRead: number; + buffers: NodeJS.ArrayBufferView[]; + } + export namespace readv { + function __promisify__( + fd: number, + buffers: ReadonlyArray, + position?: number, + ): Promise; + } + /** + * For detailed information, see the documentation of the asynchronous version of + * this API: {@link readv}. + * @since v13.13.0, v12.17.0 + * @param [position='null'] + * @return The number of bytes read. + */ + export function readvSync(fd: number, buffers: ReadonlyArray, position?: number): number; + + export interface OpenAsBlobOptions { + /** + * An optional mime type for the blob. + * + * @default 'undefined' + */ + type?: string | undefined; + } + + /** + * Returns a `Blob` whose data is backed by the given file. + * + * The file must not be modified after the `Blob` is created. Any modifications + * will cause reading the `Blob` data to fail with a `DOMException` error. + * Synchronous stat operations on the file when the `Blob` is created, and before + * each read in order to detect whether the file data has been modified on disk. + * + * ```js + * import { openAsBlob } from 'node:fs'; + * + * const blob = await openAsBlob('the.file.txt'); + * const ab = await blob.arrayBuffer(); + * blob.stream(); + * ``` + * @since v19.8.0 + * @experimental + */ + export function openAsBlob(path: PathLike, options?: OpenAsBlobOptions): Promise; + + export interface OpenDirOptions { + /** + * @default 'utf8' + */ + encoding?: BufferEncoding | undefined; + /** + * Number of directory entries that are buffered + * internally when reading from the directory. Higher values lead to better + * performance but higher memory usage. + * @default 32 + */ + bufferSize?: number | undefined; + /** + * @default false + */ + recursive?: boolean; + } + /** + * Synchronously open a directory. See [`opendir(3)`](http://man7.org/linux/man-pages/man3/opendir.3.html). + * + * Creates an `fs.Dir`, which contains all further functions for reading from + * and cleaning up the directory. + * + * The `encoding` option sets the encoding for the `path` while opening the + * directory and subsequent read operations. + * @since v12.12.0 + */ + export function opendirSync(path: PathLike, options?: OpenDirOptions): Dir; + /** + * Asynchronously open a directory. See the POSIX [`opendir(3)`](http://man7.org/linux/man-pages/man3/opendir.3.html) documentation for + * more details. + * + * Creates an `fs.Dir`, which contains all further functions for reading from + * and cleaning up the directory. + * + * The `encoding` option sets the encoding for the `path` while opening the + * directory and subsequent read operations. + * @since v12.12.0 + */ + export function opendir(path: PathLike, cb: (err: NodeJS.ErrnoException | null, dir: Dir) => void): void; + export function opendir( + path: PathLike, + options: OpenDirOptions, + cb: (err: NodeJS.ErrnoException | null, dir: Dir) => void, + ): void; + export namespace opendir { + function __promisify__(path: PathLike, options?: OpenDirOptions): Promise; + } + export interface BigIntStats extends StatsBase { + atimeNs: bigint; + mtimeNs: bigint; + ctimeNs: bigint; + birthtimeNs: bigint; + } + export interface BigIntOptions { + bigint: true; + } + export interface StatOptions { + bigint?: boolean | undefined; + } + export interface StatSyncOptions extends StatOptions { + throwIfNoEntry?: boolean | undefined; + } + interface CopyOptionsBase { + /** + * Dereference symlinks + * @default false + */ + dereference?: boolean; + /** + * When `force` is `false`, and the destination + * exists, throw an error. + * @default false + */ + errorOnExist?: boolean; + /** + * Overwrite existing file or directory. _The copy + * operation will ignore errors if you set this to false and the destination + * exists. Use the `errorOnExist` option to change this behavior. + * @default true + */ + force?: boolean; + /** + * Modifiers for copy operation. See `mode` flag of {@link copyFileSync()} + */ + mode?: number; + /** + * When `true` timestamps from `src` will + * be preserved. + * @default false + */ + preserveTimestamps?: boolean; + /** + * Copy directories recursively. + * @default false + */ + recursive?: boolean; + /** + * When true, path resolution for symlinks will be skipped + * @default false + */ + verbatimSymlinks?: boolean; + } + export interface CopyOptions extends CopyOptionsBase { + /** + * Function to filter copied files/directories. Return + * `true` to copy the item, `false` to ignore it. + */ + filter?(source: string, destination: string): boolean | Promise; + } + export interface CopySyncOptions extends CopyOptionsBase { + /** + * Function to filter copied files/directories. Return + * `true` to copy the item, `false` to ignore it. + */ + filter?(source: string, destination: string): boolean; + } + /** + * Asynchronously copies the entire directory structure from `src` to `dest`, + * including subdirectories and files. + * + * When copying a directory to another directory, globs are not supported and + * behavior is similar to `cp dir1/ dir2/`. + * @since v16.7.0 + * @experimental + * @param src source path to copy. + * @param dest destination path to copy to. + */ + export function cp( + source: string | URL, + destination: string | URL, + callback: (err: NodeJS.ErrnoException | null) => void, + ): void; + export function cp( + source: string | URL, + destination: string | URL, + opts: CopyOptions, + callback: (err: NodeJS.ErrnoException | null) => void, + ): void; + /** + * Synchronously copies the entire directory structure from `src` to `dest`, + * including subdirectories and files. + * + * When copying a directory to another directory, globs are not supported and + * behavior is similar to `cp dir1/ dir2/`. + * @since v16.7.0 + * @experimental + * @param src source path to copy. + * @param dest destination path to copy to. + */ + export function cpSync(source: string | URL, destination: string | URL, opts?: CopySyncOptions): void; +} +declare module "node:fs" { + export * from "fs"; +} diff --git a/Url-Shortner/node_modules/@types/node/fs/promises.d.ts b/Url-Shortner/node_modules/@types/node/fs/promises.d.ts new file mode 100644 index 0000000..084ee6e --- /dev/null +++ b/Url-Shortner/node_modules/@types/node/fs/promises.d.ts @@ -0,0 +1,1232 @@ +/** + * The `fs/promises` API provides asynchronous file system methods that return + * promises. + * + * The promise APIs use the underlying Node.js threadpool to perform file + * system operations off the event loop thread. These operations are not + * synchronized or threadsafe. Care must be taken when performing multiple + * concurrent modifications on the same file or data corruption may occur. + * @since v10.0.0 + */ +declare module "fs/promises" { + import { Abortable } from "node:events"; + import { Stream } from "node:stream"; + import { ReadableStream } from "node:stream/web"; + import { + BigIntStats, + BigIntStatsFs, + BufferEncodingOption, + constants as fsConstants, + CopyOptions, + Dir, + Dirent, + MakeDirectoryOptions, + Mode, + ObjectEncodingOptions, + OpenDirOptions, + OpenMode, + PathLike, + ReadStream, + ReadVResult, + RmDirOptions, + RmOptions, + StatFsOptions, + StatOptions, + Stats, + StatsFs, + TimeLike, + WatchEventType, + WatchOptions, + WriteStream, + WriteVResult, + } from "node:fs"; + import { Interface as ReadlineInterface } from "node:readline"; + interface FileChangeInfo { + eventType: WatchEventType; + filename: T | null; + } + interface FlagAndOpenMode { + mode?: Mode | undefined; + flag?: OpenMode | undefined; + } + interface FileReadResult { + bytesRead: number; + buffer: T; + } + interface FileReadOptions { + /** + * @default `Buffer.alloc(0xffff)` + */ + buffer?: T; + /** + * @default 0 + */ + offset?: number | null; + /** + * @default `buffer.byteLength` + */ + length?: number | null; + position?: number | null; + } + interface CreateReadStreamOptions { + encoding?: BufferEncoding | null | undefined; + autoClose?: boolean | undefined; + emitClose?: boolean | undefined; + start?: number | undefined; + end?: number | undefined; + highWaterMark?: number | undefined; + } + interface CreateWriteStreamOptions { + encoding?: BufferEncoding | null | undefined; + autoClose?: boolean | undefined; + emitClose?: boolean | undefined; + start?: number | undefined; + highWaterMark?: number | undefined; + } + interface ReadableWebStreamOptions { + /** + * Whether to open a normal or a `'bytes'` stream. + * @since v20.0.0 + */ + type?: "bytes" | undefined; + } + // TODO: Add `EventEmitter` close + interface FileHandle { + /** + * The numeric file descriptor managed by the {FileHandle} object. + * @since v10.0.0 + */ + readonly fd: number; + /** + * Alias of `filehandle.writeFile()`. + * + * When operating on file handles, the mode cannot be changed from what it was set + * to with `fsPromises.open()`. Therefore, this is equivalent to `filehandle.writeFile()`. + * @since v10.0.0 + * @return Fulfills with `undefined` upon success. + */ + appendFile( + data: string | Uint8Array, + options?: (ObjectEncodingOptions & FlagAndOpenMode) | BufferEncoding | null, + ): Promise; + /** + * Changes the ownership of the file. A wrapper for [`chown(2)`](http://man7.org/linux/man-pages/man2/chown.2.html). + * @since v10.0.0 + * @param uid The file's new owner's user id. + * @param gid The file's new group's group id. + * @return Fulfills with `undefined` upon success. + */ + chown(uid: number, gid: number): Promise; + /** + * Modifies the permissions on the file. See [`chmod(2)`](http://man7.org/linux/man-pages/man2/chmod.2.html). + * @since v10.0.0 + * @param mode the file mode bit mask. + * @return Fulfills with `undefined` upon success. + */ + chmod(mode: Mode): Promise; + /** + * Unlike the 16 KiB default `highWaterMark` for a `stream.Readable`, the stream + * returned by this method has a default `highWaterMark` of 64 KiB. + * + * `options` can include `start` and `end` values to read a range of bytes from + * the file instead of the entire file. Both `start` and `end` are inclusive and + * start counting at 0, allowed values are in the + * \[0, [`Number.MAX_SAFE_INTEGER`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MAX_SAFE_INTEGER)\] range. If `start` is + * omitted or `undefined`, `filehandle.createReadStream()` reads sequentially from + * the current file position. The `encoding` can be any one of those accepted by `Buffer`. + * + * If the `FileHandle` points to a character device that only supports blocking + * reads (such as keyboard or sound card), read operations do not finish until data + * is available. This can prevent the process from exiting and the stream from + * closing naturally. + * + * By default, the stream will emit a `'close'` event after it has been + * destroyed. Set the `emitClose` option to `false` to change this behavior. + * + * ```js + * import { open } from 'node:fs/promises'; + * + * const fd = await open('/dev/input/event0'); + * // Create a stream from some character device. + * const stream = fd.createReadStream(); + * setTimeout(() => { + * stream.close(); // This may not close the stream. + * // Artificially marking end-of-stream, as if the underlying resource had + * // indicated end-of-file by itself, allows the stream to close. + * // This does not cancel pending read operations, and if there is such an + * // operation, the process may still not be able to exit successfully + * // until it finishes. + * stream.push(null); + * stream.read(0); + * }, 100); + * ``` + * + * If `autoClose` is false, then the file descriptor won't be closed, even if + * there's an error. It is the application's responsibility to close it and make + * sure there's no file descriptor leak. If `autoClose` is set to true (default + * behavior), on `'error'` or `'end'` the file descriptor will be closed + * automatically. + * + * An example to read the last 10 bytes of a file which is 100 bytes long: + * + * ```js + * import { open } from 'node:fs/promises'; + * + * const fd = await open('sample.txt'); + * fd.createReadStream({ start: 90, end: 99 }); + * ``` + * @since v16.11.0 + */ + createReadStream(options?: CreateReadStreamOptions): ReadStream; + /** + * `options` may also include a `start` option to allow writing data at some + * position past the beginning of the file, allowed values are in the + * \[0, [`Number.MAX_SAFE_INTEGER`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MAX_SAFE_INTEGER)\] range. Modifying a file rather than + * replacing it may require the `flags` `open` option to be set to `r+` rather than + * the default `r`. The `encoding` can be any one of those accepted by `Buffer`. + * + * If `autoClose` is set to true (default behavior) on `'error'` or `'finish'`the file descriptor will be closed automatically. If `autoClose` is false, + * then the file descriptor won't be closed, even if there's an error. + * It is the application's responsibility to close it and make sure there's no + * file descriptor leak. + * + * By default, the stream will emit a `'close'` event after it has been + * destroyed. Set the `emitClose` option to `false` to change this behavior. + * @since v16.11.0 + */ + createWriteStream(options?: CreateWriteStreamOptions): WriteStream; + /** + * Forces all currently queued I/O operations associated with the file to the + * operating system's synchronized I/O completion state. Refer to the POSIX [`fdatasync(2)`](http://man7.org/linux/man-pages/man2/fdatasync.2.html) documentation for details. + * + * Unlike `filehandle.sync` this method does not flush modified metadata. + * @since v10.0.0 + * @return Fulfills with `undefined` upon success. + */ + datasync(): Promise; + /** + * Request that all data for the open file descriptor is flushed to the storage + * device. The specific implementation is operating system and device specific. + * Refer to the POSIX [`fsync(2)`](http://man7.org/linux/man-pages/man2/fsync.2.html) documentation for more detail. + * @since v10.0.0 + * @return Fulfills with `undefined` upon success. + */ + sync(): Promise; + /** + * Reads data from the file and stores that in the given buffer. + * + * If the file is not modified concurrently, the end-of-file is reached when the + * number of bytes read is zero. + * @since v10.0.0 + * @param buffer A buffer that will be filled with the file data read. + * @param offset The location in the buffer at which to start filling. + * @param length The number of bytes to read. + * @param position The location where to begin reading data from the file. If `null`, data will be read from the current file position, and the position will be updated. If `position` is an + * integer, the current file position will remain unchanged. + * @return Fulfills upon success with an object with two properties: + */ + read( + buffer: T, + offset?: number | null, + length?: number | null, + position?: number | null, + ): Promise>; + read(options?: FileReadOptions): Promise>; + /** + * Returns a `ReadableStream` that may be used to read the files data. + * + * An error will be thrown if this method is called more than once or is called + * after the `FileHandle` is closed or closing. + * + * ```js + * import { + * open, + * } from 'node:fs/promises'; + * + * const file = await open('./some/file/to/read'); + * + * for await (const chunk of file.readableWebStream()) + * console.log(chunk); + * + * await file.close(); + * ``` + * + * While the `ReadableStream` will read the file to completion, it will not + * close the `FileHandle` automatically. User code must still call the`fileHandle.close()` method. + * @since v17.0.0 + * @experimental + */ + readableWebStream(options?: ReadableWebStreamOptions): ReadableStream; + /** + * Asynchronously reads the entire contents of a file. + * + * If `options` is a string, then it specifies the `encoding`. + * + * The `FileHandle` has to support reading. + * + * If one or more `filehandle.read()` calls are made on a file handle and then a`filehandle.readFile()` call is made, the data will be read from the current + * position till the end of the file. It doesn't always read from the beginning + * of the file. + * @since v10.0.0 + * @return Fulfills upon a successful read with the contents of the file. If no encoding is specified (using `options.encoding`), the data is returned as a {Buffer} object. Otherwise, the + * data will be a string. + */ + readFile( + options?: { + encoding?: null | undefined; + flag?: OpenMode | undefined; + } | null, + ): Promise; + /** + * Asynchronously reads the entire contents of a file. The underlying file will _not_ be closed automatically. + * The `FileHandle` must have been opened for reading. + * @param options An object that may contain an optional flag. + * If a flag is not provided, it defaults to `'r'`. + */ + readFile( + options: + | { + encoding: BufferEncoding; + flag?: OpenMode | undefined; + } + | BufferEncoding, + ): Promise; + /** + * Asynchronously reads the entire contents of a file. The underlying file will _not_ be closed automatically. + * The `FileHandle` must have been opened for reading. + * @param options An object that may contain an optional flag. + * If a flag is not provided, it defaults to `'r'`. + */ + readFile( + options?: + | (ObjectEncodingOptions & { + flag?: OpenMode | undefined; + }) + | BufferEncoding + | null, + ): Promise; + /** + * Convenience method to create a `readline` interface and stream over the file. + * See `filehandle.createReadStream()` for the options. + * + * ```js + * import { open } from 'node:fs/promises'; + * + * const file = await open('./some/file/to/read'); + * + * for await (const line of file.readLines()) { + * console.log(line); + * } + * ``` + * @since v18.11.0 + */ + readLines(options?: CreateReadStreamOptions): ReadlineInterface; + /** + * @since v10.0.0 + * @return Fulfills with an {fs.Stats} for the file. + */ + stat( + opts?: StatOptions & { + bigint?: false | undefined; + }, + ): Promise; + stat( + opts: StatOptions & { + bigint: true; + }, + ): Promise; + stat(opts?: StatOptions): Promise; + /** + * Truncates the file. + * + * If the file was larger than `len` bytes, only the first `len` bytes will be + * retained in the file. + * + * The following example retains only the first four bytes of the file: + * + * ```js + * import { open } from 'node:fs/promises'; + * + * let filehandle = null; + * try { + * filehandle = await open('temp.txt', 'r+'); + * await filehandle.truncate(4); + * } finally { + * await filehandle?.close(); + * } + * ``` + * + * If the file previously was shorter than `len` bytes, it is extended, and the + * extended part is filled with null bytes (`'\0'`): + * + * If `len` is negative then `0` will be used. + * @since v10.0.0 + * @param [len=0] + * @return Fulfills with `undefined` upon success. + */ + truncate(len?: number): Promise; + /** + * Change the file system timestamps of the object referenced by the `FileHandle` then resolves the promise with no arguments upon success. + * @since v10.0.0 + */ + utimes(atime: TimeLike, mtime: TimeLike): Promise; + /** + * Asynchronously writes data to a file, replacing the file if it already exists.`data` can be a string, a buffer, an + * [AsyncIterable](https://tc39.github.io/ecma262/#sec-asynciterable-interface), or an + * [Iterable](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols#The_iterable_protocol) object. + * The promise is resolved with no arguments upon success. + * + * If `options` is a string, then it specifies the `encoding`. + * + * The `FileHandle` has to support writing. + * + * It is unsafe to use `filehandle.writeFile()` multiple times on the same file + * without waiting for the promise to be resolved (or rejected). + * + * If one or more `filehandle.write()` calls are made on a file handle and then a`filehandle.writeFile()` call is made, the data will be written from the + * current position till the end of the file. It doesn't always write from the + * beginning of the file. + * @since v10.0.0 + */ + writeFile( + data: string | Uint8Array, + options?: (ObjectEncodingOptions & FlagAndOpenMode & Abortable) | BufferEncoding | null, + ): Promise; + /** + * Write `buffer` to the file. + * + * The promise is resolved with an object containing two properties: + * + * It is unsafe to use `filehandle.write()` multiple times on the same file + * without waiting for the promise to be resolved (or rejected). For this + * scenario, use `filehandle.createWriteStream()`. + * + * On Linux, positional writes do not work when the file is opened in append mode. + * The kernel ignores the position argument and always appends the data to + * the end of the file. + * @since v10.0.0 + * @param offset The start position from within `buffer` where the data to write begins. + * @param [length=buffer.byteLength - offset] The number of bytes from `buffer` to write. + * @param [position='null'] The offset from the beginning of the file where the data from `buffer` should be written. If `position` is not a `number`, the data will be written at the current + * position. See the POSIX pwrite(2) documentation for more detail. + */ + write( + buffer: TBuffer, + offset?: number | null, + length?: number | null, + position?: number | null, + ): Promise<{ + bytesWritten: number; + buffer: TBuffer; + }>; + write( + data: string, + position?: number | null, + encoding?: BufferEncoding | null, + ): Promise<{ + bytesWritten: number; + buffer: string; + }>; + /** + * Write an array of [ArrayBufferView](https://developer.mozilla.org/en-US/docs/Web/API/ArrayBufferView) s to the file. + * + * The promise is resolved with an object containing a two properties: + * + * It is unsafe to call `writev()` multiple times on the same file without waiting + * for the promise to be resolved (or rejected). + * + * On Linux, positional writes don't work when the file is opened in append mode. + * The kernel ignores the position argument and always appends the data to + * the end of the file. + * @since v12.9.0 + * @param [position='null'] The offset from the beginning of the file where the data from `buffers` should be written. If `position` is not a `number`, the data will be written at the current + * position. + */ + writev(buffers: ReadonlyArray, position?: number): Promise; + /** + * Read from a file and write to an array of [ArrayBufferView](https://developer.mozilla.org/en-US/docs/Web/API/ArrayBufferView) s + * @since v13.13.0, v12.17.0 + * @param [position='null'] The offset from the beginning of the file where the data should be read from. If `position` is not a `number`, the data will be read from the current position. + * @return Fulfills upon success an object containing two properties: + */ + readv(buffers: ReadonlyArray, position?: number): Promise; + /** + * Closes the file handle after waiting for any pending operation on the handle to + * complete. + * + * ```js + * import { open } from 'node:fs/promises'; + * + * let filehandle; + * try { + * filehandle = await open('thefile.txt', 'r'); + * } finally { + * await filehandle?.close(); + * } + * ``` + * @since v10.0.0 + * @return Fulfills with `undefined` upon success. + */ + close(): Promise; + /** + * An alias for {@link FileHandle.close()}. + * @since v20.4.0 + */ + [Symbol.asyncDispose](): Promise; + } + const constants: typeof fsConstants; + /** + * Tests a user's permissions for the file or directory specified by `path`. + * The `mode` argument is an optional integer that specifies the accessibility + * checks to be performed. `mode` should be either the value `fs.constants.F_OK`or a mask consisting of the bitwise OR of any of `fs.constants.R_OK`,`fs.constants.W_OK`, and `fs.constants.X_OK` + * (e.g.`fs.constants.W_OK | fs.constants.R_OK`). Check `File access constants` for + * possible values of `mode`. + * + * If the accessibility check is successful, the promise is resolved with no + * value. If any of the accessibility checks fail, the promise is rejected + * with an [Error](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error) object. The following example checks if the file`/etc/passwd` can be read and + * written by the current process. + * + * ```js + * import { access, constants } from 'node:fs/promises'; + * + * try { + * await access('/etc/passwd', constants.R_OK | constants.W_OK); + * console.log('can access'); + * } catch { + * console.error('cannot access'); + * } + * ``` + * + * Using `fsPromises.access()` to check for the accessibility of a file before + * calling `fsPromises.open()` is not recommended. Doing so introduces a race + * condition, since other processes may change the file's state between the two + * calls. Instead, user code should open/read/write the file directly and handle + * the error raised if the file is not accessible. + * @since v10.0.0 + * @param [mode=fs.constants.F_OK] + * @return Fulfills with `undefined` upon success. + */ + function access(path: PathLike, mode?: number): Promise; + /** + * Asynchronously copies `src` to `dest`. By default, `dest` is overwritten if it + * already exists. + * + * No guarantees are made about the atomicity of the copy operation. If an + * error occurs after the destination file has been opened for writing, an attempt + * will be made to remove the destination. + * + * ```js + * import { copyFile, constants } from 'node:fs/promises'; + * + * try { + * await copyFile('source.txt', 'destination.txt'); + * console.log('source.txt was copied to destination.txt'); + * } catch { + * console.error('The file could not be copied'); + * } + * + * // By using COPYFILE_EXCL, the operation will fail if destination.txt exists. + * try { + * await copyFile('source.txt', 'destination.txt', constants.COPYFILE_EXCL); + * console.log('source.txt was copied to destination.txt'); + * } catch { + * console.error('The file could not be copied'); + * } + * ``` + * @since v10.0.0 + * @param src source filename to copy + * @param dest destination filename of the copy operation + * @param [mode=0] Optional modifiers that specify the behavior of the copy operation. It is possible to create a mask consisting of the bitwise OR of two or more values (e.g. + * `fs.constants.COPYFILE_EXCL | fs.constants.COPYFILE_FICLONE`) + * @return Fulfills with `undefined` upon success. + */ + function copyFile(src: PathLike, dest: PathLike, mode?: number): Promise; + /** + * Opens a `FileHandle`. + * + * Refer to the POSIX [`open(2)`](http://man7.org/linux/man-pages/man2/open.2.html) documentation for more detail. + * + * Some characters (`< > : " / \ | ? *`) are reserved under Windows as documented + * by [Naming Files, Paths, and Namespaces](https://docs.microsoft.com/en-us/windows/desktop/FileIO/naming-a-file). Under NTFS, if the filename contains + * a colon, Node.js will open a file system stream, as described by [this MSDN page](https://docs.microsoft.com/en-us/windows/desktop/FileIO/using-streams). + * @since v10.0.0 + * @param [flags='r'] See `support of file system `flags``. + * @param [mode=0o666] Sets the file mode (permission and sticky bits) if the file is created. + * @return Fulfills with a {FileHandle} object. + */ + function open(path: PathLike, flags?: string | number, mode?: Mode): Promise; + /** + * Renames `oldPath` to `newPath`. + * @since v10.0.0 + * @return Fulfills with `undefined` upon success. + */ + function rename(oldPath: PathLike, newPath: PathLike): Promise; + /** + * Truncates (shortens or extends the length) of the content at `path` to `len`bytes. + * @since v10.0.0 + * @param [len=0] + * @return Fulfills with `undefined` upon success. + */ + function truncate(path: PathLike, len?: number): Promise; + /** + * Removes the directory identified by `path`. + * + * Using `fsPromises.rmdir()` on a file (not a directory) results in the + * promise being rejected with an `ENOENT` error on Windows and an `ENOTDIR`error on POSIX. + * + * To get a behavior similar to the `rm -rf` Unix command, use `fsPromises.rm()` with options `{ recursive: true, force: true }`. + * @since v10.0.0 + * @return Fulfills with `undefined` upon success. + */ + function rmdir(path: PathLike, options?: RmDirOptions): Promise; + /** + * Removes files and directories (modeled on the standard POSIX `rm` utility). + * @since v14.14.0 + * @return Fulfills with `undefined` upon success. + */ + function rm(path: PathLike, options?: RmOptions): Promise; + /** + * Asynchronously creates a directory. + * + * The optional `options` argument can be an integer specifying `mode` (permission + * and sticky bits), or an object with a `mode` property and a `recursive`property indicating whether parent directories should be created. Calling`fsPromises.mkdir()` when `path` is a directory + * that exists results in a + * rejection only when `recursive` is false. + * + * ```js + * import { mkdir } from 'node:fs/promises'; + * + * try { + * const projectFolder = new URL('./test/project/', import.meta.url); + * const createDir = await mkdir(projectFolder, { recursive: true }); + * + * console.log(`created ${createDir}`); + * } catch (err) { + * console.error(err.message); + * } + * ``` + * @since v10.0.0 + * @return Upon success, fulfills with `undefined` if `recursive` is `false`, or the first directory path created if `recursive` is `true`. + */ + function mkdir( + path: PathLike, + options: MakeDirectoryOptions & { + recursive: true; + }, + ): Promise; + /** + * Asynchronous mkdir(2) - create a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options Either the file mode, or an object optionally specifying the file mode and whether parent folders + * should be created. If a string is passed, it is parsed as an octal integer. If not specified, defaults to `0o777`. + */ + function mkdir( + path: PathLike, + options?: + | Mode + | (MakeDirectoryOptions & { + recursive?: false | undefined; + }) + | null, + ): Promise; + /** + * Asynchronous mkdir(2) - create a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options Either the file mode, or an object optionally specifying the file mode and whether parent folders + * should be created. If a string is passed, it is parsed as an octal integer. If not specified, defaults to `0o777`. + */ + function mkdir(path: PathLike, options?: Mode | MakeDirectoryOptions | null): Promise; + /** + * Reads the contents of a directory. + * + * The optional `options` argument can be a string specifying an encoding, or an + * object with an `encoding` property specifying the character encoding to use for + * the filenames. If the `encoding` is set to `'buffer'`, the filenames returned + * will be passed as `Buffer` objects. + * + * If `options.withFileTypes` is set to `true`, the resolved array will contain `fs.Dirent` objects. + * + * ```js + * import { readdir } from 'node:fs/promises'; + * + * try { + * const files = await readdir(path); + * for (const file of files) + * console.log(file); + * } catch (err) { + * console.error(err); + * } + * ``` + * @since v10.0.0 + * @return Fulfills with an array of the names of the files in the directory excluding `'.'` and `'..'`. + */ + function readdir( + path: PathLike, + options?: + | (ObjectEncodingOptions & { + withFileTypes?: false | undefined; + recursive?: boolean | undefined; + }) + | BufferEncoding + | null, + ): Promise; + /** + * Asynchronous readdir(3) - read a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function readdir( + path: PathLike, + options: + | { + encoding: "buffer"; + withFileTypes?: false | undefined; + recursive?: boolean | undefined; + } + | "buffer", + ): Promise; + /** + * Asynchronous readdir(3) - read a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function readdir( + path: PathLike, + options?: + | (ObjectEncodingOptions & { + withFileTypes?: false | undefined; + recursive?: boolean | undefined; + }) + | BufferEncoding + | null, + ): Promise; + /** + * Asynchronous readdir(3) - read a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options If called with `withFileTypes: true` the result data will be an array of Dirent. + */ + function readdir( + path: PathLike, + options: ObjectEncodingOptions & { + withFileTypes: true; + recursive?: boolean | undefined; + }, + ): Promise; + /** + * Reads the contents of the symbolic link referred to by `path`. See the POSIX [`readlink(2)`](http://man7.org/linux/man-pages/man2/readlink.2.html) documentation for more detail. The promise is + * resolved with the`linkString` upon success. + * + * The optional `options` argument can be a string specifying an encoding, or an + * object with an `encoding` property specifying the character encoding to use for + * the link path returned. If the `encoding` is set to `'buffer'`, the link path + * returned will be passed as a `Buffer` object. + * @since v10.0.0 + * @return Fulfills with the `linkString` upon success. + */ + function readlink(path: PathLike, options?: ObjectEncodingOptions | BufferEncoding | null): Promise; + /** + * Asynchronous readlink(2) - read value of a symbolic link. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function readlink(path: PathLike, options: BufferEncodingOption): Promise; + /** + * Asynchronous readlink(2) - read value of a symbolic link. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function readlink(path: PathLike, options?: ObjectEncodingOptions | string | null): Promise; + /** + * Creates a symbolic link. + * + * The `type` argument is only used on Windows platforms and can be one of `'dir'`,`'file'`, or `'junction'`. If the `type` argument is not a string, Node.js will + * autodetect `target` type and use `'file'` or `'dir'`. If the `target` does not + * exist, `'file'` will be used. Windows junction points require the destination + * path to be absolute. When using `'junction'`, the `target` argument will + * automatically be normalized to absolute path. Junction points on NTFS volumes + * can only point to directories. + * @since v10.0.0 + * @param [type='null'] + * @return Fulfills with `undefined` upon success. + */ + function symlink(target: PathLike, path: PathLike, type?: string | null): Promise; + /** + * Equivalent to `fsPromises.stat()` unless `path` refers to a symbolic link, + * in which case the link itself is stat-ed, not the file that it refers to. + * Refer to the POSIX [`lstat(2)`](http://man7.org/linux/man-pages/man2/lstat.2.html) document for more detail. + * @since v10.0.0 + * @return Fulfills with the {fs.Stats} object for the given symbolic link `path`. + */ + function lstat( + path: PathLike, + opts?: StatOptions & { + bigint?: false | undefined; + }, + ): Promise; + function lstat( + path: PathLike, + opts: StatOptions & { + bigint: true; + }, + ): Promise; + function lstat(path: PathLike, opts?: StatOptions): Promise; + /** + * @since v10.0.0 + * @return Fulfills with the {fs.Stats} object for the given `path`. + */ + function stat( + path: PathLike, + opts?: StatOptions & { + bigint?: false | undefined; + }, + ): Promise; + function stat( + path: PathLike, + opts: StatOptions & { + bigint: true; + }, + ): Promise; + function stat(path: PathLike, opts?: StatOptions): Promise; + /** + * @since v19.6.0, v18.15.0 + * @return Fulfills with the {fs.StatFs} object for the given `path`. + */ + function statfs( + path: PathLike, + opts?: StatFsOptions & { + bigint?: false | undefined; + }, + ): Promise; + function statfs( + path: PathLike, + opts: StatFsOptions & { + bigint: true; + }, + ): Promise; + function statfs(path: PathLike, opts?: StatFsOptions): Promise; + /** + * Creates a new link from the `existingPath` to the `newPath`. See the POSIX [`link(2)`](http://man7.org/linux/man-pages/man2/link.2.html) documentation for more detail. + * @since v10.0.0 + * @return Fulfills with `undefined` upon success. + */ + function link(existingPath: PathLike, newPath: PathLike): Promise; + /** + * If `path` refers to a symbolic link, then the link is removed without affecting + * the file or directory to which that link refers. If the `path` refers to a file + * path that is not a symbolic link, the file is deleted. See the POSIX [`unlink(2)`](http://man7.org/linux/man-pages/man2/unlink.2.html) documentation for more detail. + * @since v10.0.0 + * @return Fulfills with `undefined` upon success. + */ + function unlink(path: PathLike): Promise; + /** + * Changes the permissions of a file. + * @since v10.0.0 + * @return Fulfills with `undefined` upon success. + */ + function chmod(path: PathLike, mode: Mode): Promise; + /** + * Changes the permissions on a symbolic link. + * + * This method is only implemented on macOS. + * @deprecated Since v10.0.0 + * @return Fulfills with `undefined` upon success. + */ + function lchmod(path: PathLike, mode: Mode): Promise; + /** + * Changes the ownership on a symbolic link. + * @since v10.0.0 + * @return Fulfills with `undefined` upon success. + */ + function lchown(path: PathLike, uid: number, gid: number): Promise; + /** + * Changes the access and modification times of a file in the same way as `fsPromises.utimes()`, with the difference that if the path refers to a + * symbolic link, then the link is not dereferenced: instead, the timestamps of + * the symbolic link itself are changed. + * @since v14.5.0, v12.19.0 + * @return Fulfills with `undefined` upon success. + */ + function lutimes(path: PathLike, atime: TimeLike, mtime: TimeLike): Promise; + /** + * Changes the ownership of a file. + * @since v10.0.0 + * @return Fulfills with `undefined` upon success. + */ + function chown(path: PathLike, uid: number, gid: number): Promise; + /** + * Change the file system timestamps of the object referenced by `path`. + * + * The `atime` and `mtime` arguments follow these rules: + * + * * Values can be either numbers representing Unix epoch time, `Date`s, or a + * numeric string like `'123456789.0'`. + * * If the value can not be converted to a number, or is `NaN`, `Infinity`, or`-Infinity`, an `Error` will be thrown. + * @since v10.0.0 + * @return Fulfills with `undefined` upon success. + */ + function utimes(path: PathLike, atime: TimeLike, mtime: TimeLike): Promise; + /** + * Determines the actual location of `path` using the same semantics as the`fs.realpath.native()` function. + * + * Only paths that can be converted to UTF8 strings are supported. + * + * The optional `options` argument can be a string specifying an encoding, or an + * object with an `encoding` property specifying the character encoding to use for + * the path. If the `encoding` is set to `'buffer'`, the path returned will be + * passed as a `Buffer` object. + * + * On Linux, when Node.js is linked against musl libc, the procfs file system must + * be mounted on `/proc` in order for this function to work. Glibc does not have + * this restriction. + * @since v10.0.0 + * @return Fulfills with the resolved path upon success. + */ + function realpath(path: PathLike, options?: ObjectEncodingOptions | BufferEncoding | null): Promise; + /** + * Asynchronous realpath(3) - return the canonicalized absolute pathname. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function realpath(path: PathLike, options: BufferEncodingOption): Promise; + /** + * Asynchronous realpath(3) - return the canonicalized absolute pathname. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function realpath( + path: PathLike, + options?: ObjectEncodingOptions | BufferEncoding | null, + ): Promise; + /** + * Creates a unique temporary directory. A unique directory name is generated by + * appending six random characters to the end of the provided `prefix`. Due to + * platform inconsistencies, avoid trailing `X` characters in `prefix`. Some + * platforms, notably the BSDs, can return more than six random characters, and + * replace trailing `X` characters in `prefix` with random characters. + * + * The optional `options` argument can be a string specifying an encoding, or an + * object with an `encoding` property specifying the character encoding to use. + * + * ```js + * import { mkdtemp } from 'node:fs/promises'; + * import { join } from 'node:path'; + * import { tmpdir } from 'node:os'; + * + * try { + * await mkdtemp(join(tmpdir(), 'foo-')); + * } catch (err) { + * console.error(err); + * } + * ``` + * + * The `fsPromises.mkdtemp()` method will append the six randomly selected + * characters directly to the `prefix` string. For instance, given a directory`/tmp`, if the intention is to create a temporary directory _within_`/tmp`, the`prefix` must end with a trailing + * platform-specific path separator + * (`require('node:path').sep`). + * @since v10.0.0 + * @return Fulfills with a string containing the file system path of the newly created temporary directory. + */ + function mkdtemp(prefix: string, options?: ObjectEncodingOptions | BufferEncoding | null): Promise; + /** + * Asynchronously creates a unique temporary directory. + * Generates six random characters to be appended behind a required `prefix` to create a unique temporary directory. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function mkdtemp(prefix: string, options: BufferEncodingOption): Promise; + /** + * Asynchronously creates a unique temporary directory. + * Generates six random characters to be appended behind a required `prefix` to create a unique temporary directory. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function mkdtemp(prefix: string, options?: ObjectEncodingOptions | BufferEncoding | null): Promise; + /** + * Asynchronously writes data to a file, replacing the file if it already exists.`data` can be a string, a buffer, an + * [AsyncIterable](https://tc39.github.io/ecma262/#sec-asynciterable-interface), or an + * [Iterable](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols#The_iterable_protocol) object. + * + * The `encoding` option is ignored if `data` is a buffer. + * + * If `options` is a string, then it specifies the encoding. + * + * The `mode` option only affects the newly created file. See `fs.open()` for more details. + * + * Any specified `FileHandle` has to support writing. + * + * It is unsafe to use `fsPromises.writeFile()` multiple times on the same file + * without waiting for the promise to be settled. + * + * Similarly to `fsPromises.readFile` \- `fsPromises.writeFile` is a convenience + * method that performs multiple `write` calls internally to write the buffer + * passed to it. For performance sensitive code consider using `fs.createWriteStream()` or `filehandle.createWriteStream()`. + * + * It is possible to use an `AbortSignal` to cancel an `fsPromises.writeFile()`. + * Cancelation is "best effort", and some amount of data is likely still + * to be written. + * + * ```js + * import { writeFile } from 'node:fs/promises'; + * import { Buffer } from 'node:buffer'; + * + * try { + * const controller = new AbortController(); + * const { signal } = controller; + * const data = new Uint8Array(Buffer.from('Hello Node.js')); + * const promise = writeFile('message.txt', data, { signal }); + * + * // Abort the request before the promise settles. + * controller.abort(); + * + * await promise; + * } catch (err) { + * // When a request is aborted - err is an AbortError + * console.error(err); + * } + * ``` + * + * Aborting an ongoing request does not abort individual operating + * system requests but rather the internal buffering `fs.writeFile` performs. + * @since v10.0.0 + * @param file filename or `FileHandle` + * @return Fulfills with `undefined` upon success. + */ + function writeFile( + file: PathLike | FileHandle, + data: + | string + | NodeJS.ArrayBufferView + | Iterable + | AsyncIterable + | Stream, + options?: + | (ObjectEncodingOptions & { + mode?: Mode | undefined; + flag?: OpenMode | undefined; + } & Abortable) + | BufferEncoding + | null, + ): Promise; + /** + * Asynchronously append data to a file, creating the file if it does not yet + * exist. `data` can be a string or a `Buffer`. + * + * If `options` is a string, then it specifies the `encoding`. + * + * The `mode` option only affects the newly created file. See `fs.open()` for more details. + * + * The `path` may be specified as a `FileHandle` that has been opened + * for appending (using `fsPromises.open()`). + * @since v10.0.0 + * @param path filename or {FileHandle} + * @return Fulfills with `undefined` upon success. + */ + function appendFile( + path: PathLike | FileHandle, + data: string | Uint8Array, + options?: (ObjectEncodingOptions & FlagAndOpenMode) | BufferEncoding | null, + ): Promise; + /** + * Asynchronously reads the entire contents of a file. + * + * If no encoding is specified (using `options.encoding`), the data is returned + * as a `Buffer` object. Otherwise, the data will be a string. + * + * If `options` is a string, then it specifies the encoding. + * + * When the `path` is a directory, the behavior of `fsPromises.readFile()` is + * platform-specific. On macOS, Linux, and Windows, the promise will be rejected + * with an error. On FreeBSD, a representation of the directory's contents will be + * returned. + * + * An example of reading a `package.json` file located in the same directory of the + * running code: + * + * ```js + * import { readFile } from 'node:fs/promises'; + * try { + * const filePath = new URL('./package.json', import.meta.url); + * const contents = await readFile(filePath, { encoding: 'utf8' }); + * console.log(contents); + * } catch (err) { + * console.error(err.message); + * } + * ``` + * + * It is possible to abort an ongoing `readFile` using an `AbortSignal`. If a + * request is aborted the promise returned is rejected with an `AbortError`: + * + * ```js + * import { readFile } from 'node:fs/promises'; + * + * try { + * const controller = new AbortController(); + * const { signal } = controller; + * const promise = readFile(fileName, { signal }); + * + * // Abort the request before the promise settles. + * controller.abort(); + * + * await promise; + * } catch (err) { + * // When a request is aborted - err is an AbortError + * console.error(err); + * } + * ``` + * + * Aborting an ongoing request does not abort individual operating + * system requests but rather the internal buffering `fs.readFile` performs. + * + * Any specified `FileHandle` has to support reading. + * @since v10.0.0 + * @param path filename or `FileHandle` + * @return Fulfills with the contents of the file. + */ + function readFile( + path: PathLike | FileHandle, + options?: + | ({ + encoding?: null | undefined; + flag?: OpenMode | undefined; + } & Abortable) + | null, + ): Promise; + /** + * Asynchronously reads the entire contents of a file. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * If a `FileHandle` is provided, the underlying file will _not_ be closed automatically. + * @param options An object that may contain an optional flag. + * If a flag is not provided, it defaults to `'r'`. + */ + function readFile( + path: PathLike | FileHandle, + options: + | ({ + encoding: BufferEncoding; + flag?: OpenMode | undefined; + } & Abortable) + | BufferEncoding, + ): Promise; + /** + * Asynchronously reads the entire contents of a file. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * If a `FileHandle` is provided, the underlying file will _not_ be closed automatically. + * @param options An object that may contain an optional flag. + * If a flag is not provided, it defaults to `'r'`. + */ + function readFile( + path: PathLike | FileHandle, + options?: + | ( + & ObjectEncodingOptions + & Abortable + & { + flag?: OpenMode | undefined; + } + ) + | BufferEncoding + | null, + ): Promise; + /** + * Asynchronously open a directory for iterative scanning. See the POSIX [`opendir(3)`](http://man7.org/linux/man-pages/man3/opendir.3.html) documentation for more detail. + * + * Creates an `fs.Dir`, which contains all further functions for reading from + * and cleaning up the directory. + * + * The `encoding` option sets the encoding for the `path` while opening the + * directory and subsequent read operations. + * + * Example using async iteration: + * + * ```js + * import { opendir } from 'node:fs/promises'; + * + * try { + * const dir = await opendir('./'); + * for await (const dirent of dir) + * console.log(dirent.name); + * } catch (err) { + * console.error(err); + * } + * ``` + * + * When using the async iterator, the `fs.Dir` object will be automatically + * closed after the iterator exits. + * @since v12.12.0 + * @return Fulfills with an {fs.Dir}. + */ + function opendir(path: PathLike, options?: OpenDirOptions): Promise; + /** + * Returns an async iterator that watches for changes on `filename`, where `filename`is either a file or a directory. + * + * ```js + * const { watch } = require('node:fs/promises'); + * + * const ac = new AbortController(); + * const { signal } = ac; + * setTimeout(() => ac.abort(), 10000); + * + * (async () => { + * try { + * const watcher = watch(__filename, { signal }); + * for await (const event of watcher) + * console.log(event); + * } catch (err) { + * if (err.name === 'AbortError') + * return; + * throw err; + * } + * })(); + * ``` + * + * On most platforms, `'rename'` is emitted whenever a filename appears or + * disappears in the directory. + * + * All the `caveats` for `fs.watch()` also apply to `fsPromises.watch()`. + * @since v15.9.0, v14.18.0 + * @return of objects with the properties: + */ + function watch( + filename: PathLike, + options: + | (WatchOptions & { + encoding: "buffer"; + }) + | "buffer", + ): AsyncIterable>; + /** + * Watch for changes on `filename`, where `filename` is either a file or a directory, returning an `FSWatcher`. + * @param filename A path to a file or directory. If a URL is provided, it must use the `file:` protocol. + * @param options Either the encoding for the filename provided to the listener, or an object optionally specifying encoding, persistent, and recursive options. + * If `encoding` is not supplied, the default of `'utf8'` is used. + * If `persistent` is not supplied, the default of `true` is used. + * If `recursive` is not supplied, the default of `false` is used. + */ + function watch(filename: PathLike, options?: WatchOptions | BufferEncoding): AsyncIterable>; + /** + * Watch for changes on `filename`, where `filename` is either a file or a directory, returning an `FSWatcher`. + * @param filename A path to a file or directory. If a URL is provided, it must use the `file:` protocol. + * @param options Either the encoding for the filename provided to the listener, or an object optionally specifying encoding, persistent, and recursive options. + * If `encoding` is not supplied, the default of `'utf8'` is used. + * If `persistent` is not supplied, the default of `true` is used. + * If `recursive` is not supplied, the default of `false` is used. + */ + function watch( + filename: PathLike, + options: WatchOptions | string, + ): AsyncIterable> | AsyncIterable>; + /** + * Asynchronously copies the entire directory structure from `src` to `dest`, + * including subdirectories and files. + * + * When copying a directory to another directory, globs are not supported and + * behavior is similar to `cp dir1/ dir2/`. + * @since v16.7.0 + * @experimental + * @param src source path to copy. + * @param dest destination path to copy to. + * @return Fulfills with `undefined` upon success. + */ + function cp(source: string | URL, destination: string | URL, opts?: CopyOptions): Promise; +} +declare module "node:fs/promises" { + export * from "fs/promises"; +} diff --git a/Url-Shortner/node_modules/@types/node/globals.d.ts b/Url-Shortner/node_modules/@types/node/globals.d.ts new file mode 100644 index 0000000..64d1a2e --- /dev/null +++ b/Url-Shortner/node_modules/@types/node/globals.d.ts @@ -0,0 +1,323 @@ +// Declare "static" methods in Error +interface ErrorConstructor { + /** Create .stack property on a target object */ + captureStackTrace(targetObject: object, constructorOpt?: Function): void; + + /** + * Optional override for formatting stack traces + * + * @see https://v8.dev/docs/stack-trace-api#customizing-stack-traces + */ + prepareStackTrace?: ((err: Error, stackTraces: NodeJS.CallSite[]) => any) | undefined; + + stackTraceLimit: number; +} + +/*-----------------------------------------------* + * * + * GLOBAL * + * * + ------------------------------------------------*/ + +// For backwards compability +interface NodeRequire extends NodeJS.Require {} +interface RequireResolve extends NodeJS.RequireResolve {} +interface NodeModule extends NodeJS.Module {} + +declare var process: NodeJS.Process; +declare var console: Console; + +declare var __filename: string; +declare var __dirname: string; + +declare var require: NodeRequire; +declare var module: NodeModule; + +// Same as module.exports +declare var exports: any; + +/** + * Only available if `--expose-gc` is passed to the process. + */ +declare var gc: undefined | (() => void); + +// #region borrowed +// from https://github.com/microsoft/TypeScript/blob/38da7c600c83e7b31193a62495239a0fe478cb67/lib/lib.webworker.d.ts#L633 until moved to separate lib +/** A controller object that allows you to abort one or more DOM requests as and when desired. */ +interface AbortController { + /** + * Returns the AbortSignal object associated with this object. + */ + + readonly signal: AbortSignal; + /** + * Invoking this method will set this object's AbortSignal's aborted flag and signal to any observers that the associated activity is to be aborted. + */ + abort(reason?: any): void; +} + +/** A signal object that allows you to communicate with a DOM request (such as a Fetch) and abort it if required via an AbortController object. */ +interface AbortSignal extends EventTarget { + /** + * Returns true if this AbortSignal's AbortController has signaled to abort, and false otherwise. + */ + readonly aborted: boolean; + readonly reason: any; + onabort: null | ((this: AbortSignal, event: Event) => any); + throwIfAborted(): void; +} + +declare var AbortController: typeof globalThis extends { onmessage: any; AbortController: infer T } ? T + : { + prototype: AbortController; + new(): AbortController; + }; + +declare var AbortSignal: typeof globalThis extends { onmessage: any; AbortSignal: infer T } ? T + : { + prototype: AbortSignal; + new(): AbortSignal; + abort(reason?: any): AbortSignal; + timeout(milliseconds: number): AbortSignal; + }; +// #endregion borrowed + +// #region Disposable +interface SymbolConstructor { + /** + * A method that is used to release resources held by an object. Called by the semantics of the `using` statement. + */ + readonly dispose: unique symbol; + + /** + * A method that is used to asynchronously release resources held by an object. Called by the semantics of the `await using` statement. + */ + readonly asyncDispose: unique symbol; +} + +interface Disposable { + [Symbol.dispose](): void; +} + +interface AsyncDisposable { + [Symbol.asyncDispose](): PromiseLike; +} +// #endregion Disposable + +// #region ArrayLike.at() +interface RelativeIndexable { + /** + * Takes an integer value and returns the item at that index, + * allowing for positive and negative integers. + * Negative integers count back from the last item in the array. + */ + at(index: number): T | undefined; +} +interface String extends RelativeIndexable {} +interface Array extends RelativeIndexable {} +interface ReadonlyArray extends RelativeIndexable {} +interface Int8Array extends RelativeIndexable {} +interface Uint8Array extends RelativeIndexable {} +interface Uint8ClampedArray extends RelativeIndexable {} +interface Int16Array extends RelativeIndexable {} +interface Uint16Array extends RelativeIndexable {} +interface Int32Array extends RelativeIndexable {} +interface Uint32Array extends RelativeIndexable {} +interface Float32Array extends RelativeIndexable {} +interface Float64Array extends RelativeIndexable {} +interface BigInt64Array extends RelativeIndexable {} +interface BigUint64Array extends RelativeIndexable {} +// #endregion ArrayLike.at() end + +/** + * @since v17.0.0 + * + * Creates a deep clone of an object. + */ +declare function structuredClone( + value: T, + transfer?: { transfer: ReadonlyArray }, +): T; + +/*----------------------------------------------* +* * +* GLOBAL INTERFACES * +* * +*-----------------------------------------------*/ +declare namespace NodeJS { + interface CallSite { + /** + * Value of "this" + */ + getThis(): unknown; + + /** + * Type of "this" as a string. + * This is the name of the function stored in the constructor field of + * "this", if available. Otherwise the object's [[Class]] internal + * property. + */ + getTypeName(): string | null; + + /** + * Current function + */ + getFunction(): Function | undefined; + + /** + * Name of the current function, typically its name property. + * If a name property is not available an attempt will be made to try + * to infer a name from the function's context. + */ + getFunctionName(): string | null; + + /** + * Name of the property [of "this" or one of its prototypes] that holds + * the current function + */ + getMethodName(): string | null; + + /** + * Name of the script [if this function was defined in a script] + */ + getFileName(): string | undefined; + + /** + * Current line number [if this function was defined in a script] + */ + getLineNumber(): number | null; + + /** + * Current column number [if this function was defined in a script] + */ + getColumnNumber(): number | null; + + /** + * A call site object representing the location where eval was called + * [if this function was created using a call to eval] + */ + getEvalOrigin(): string | undefined; + + /** + * Is this a toplevel invocation, that is, is "this" the global object? + */ + isToplevel(): boolean; + + /** + * Does this call take place in code defined by a call to eval? + */ + isEval(): boolean; + + /** + * Is this call in native V8 code? + */ + isNative(): boolean; + + /** + * Is this a constructor call? + */ + isConstructor(): boolean; + } + + interface ErrnoException extends Error { + errno?: number | undefined; + code?: string | undefined; + path?: string | undefined; + syscall?: string | undefined; + } + + interface ReadableStream extends EventEmitter { + readable: boolean; + read(size?: number): string | Buffer; + setEncoding(encoding: BufferEncoding): this; + pause(): this; + resume(): this; + isPaused(): boolean; + pipe(destination: T, options?: { end?: boolean | undefined }): T; + unpipe(destination?: WritableStream): this; + unshift(chunk: string | Uint8Array, encoding?: BufferEncoding): void; + wrap(oldStream: ReadableStream): this; + [Symbol.asyncIterator](): AsyncIterableIterator; + } + + interface WritableStream extends EventEmitter { + writable: boolean; + write(buffer: Uint8Array | string, cb?: (err?: Error | null) => void): boolean; + write(str: string, encoding?: BufferEncoding, cb?: (err?: Error | null) => void): boolean; + end(cb?: () => void): this; + end(data: string | Uint8Array, cb?: () => void): this; + end(str: string, encoding?: BufferEncoding, cb?: () => void): this; + } + + interface ReadWriteStream extends ReadableStream, WritableStream {} + + interface RefCounted { + ref(): this; + unref(): this; + } + + type TypedArray = + | Uint8Array + | Uint8ClampedArray + | Uint16Array + | Uint32Array + | Int8Array + | Int16Array + | Int32Array + | BigUint64Array + | BigInt64Array + | Float32Array + | Float64Array; + type ArrayBufferView = TypedArray | DataView; + + interface Require { + (id: string): any; + resolve: RequireResolve; + cache: Dict; + /** + * @deprecated + */ + extensions: RequireExtensions; + main: Module | undefined; + } + + interface RequireResolve { + (id: string, options?: { paths?: string[] | undefined }): string; + paths(request: string): string[] | null; + } + + interface RequireExtensions extends Dict<(m: Module, filename: string) => any> { + ".js": (m: Module, filename: string) => any; + ".json": (m: Module, filename: string) => any; + ".node": (m: Module, filename: string) => any; + } + interface Module { + /** + * `true` if the module is running during the Node.js preload + */ + isPreloading: boolean; + exports: any; + require: Require; + id: string; + filename: string; + loaded: boolean; + /** @deprecated since v14.6.0 Please use `require.main` and `module.children` instead. */ + parent: Module | null | undefined; + children: Module[]; + /** + * @since v11.14.0 + * + * The directory name of the module. This is usually the same as the path.dirname() of the module.id. + */ + path: string; + paths: string[]; + } + + interface Dict { + [key: string]: T | undefined; + } + + interface ReadOnlyDict { + readonly [key: string]: T | undefined; + } +} diff --git a/Url-Shortner/node_modules/@types/node/globals.global.d.ts b/Url-Shortner/node_modules/@types/node/globals.global.d.ts new file mode 100644 index 0000000..ef1198c --- /dev/null +++ b/Url-Shortner/node_modules/@types/node/globals.global.d.ts @@ -0,0 +1 @@ +declare var global: typeof globalThis; diff --git a/Url-Shortner/node_modules/@types/node/http.d.ts b/Url-Shortner/node_modules/@types/node/http.d.ts new file mode 100644 index 0000000..bdc446c --- /dev/null +++ b/Url-Shortner/node_modules/@types/node/http.d.ts @@ -0,0 +1,1808 @@ +/** + * To use the HTTP server and client one must `require('node:http')`. + * + * The HTTP interfaces in Node.js are designed to support many features + * of the protocol which have been traditionally difficult to use. + * In particular, large, possibly chunk-encoded, messages. The interface is + * careful to never buffer entire requests or responses, so the + * user is able to stream data. + * + * HTTP message headers are represented by an object like this: + * + * ```js + * { 'content-length': '123', + * 'content-type': 'text/plain', + * 'connection': 'keep-alive', + * 'host': 'example.com', + * 'accept': '*' } + * ``` + * + * Keys are lowercased. Values are not modified. + * + * In order to support the full spectrum of possible HTTP applications, the Node.js + * HTTP API is very low-level. It deals with stream handling and message + * parsing only. It parses a message into headers and body but it does not + * parse the actual headers or the body. + * + * See `message.headers` for details on how duplicate headers are handled. + * + * The raw headers as they were received are retained in the `rawHeaders`property, which is an array of `[key, value, key2, value2, ...]`. For + * example, the previous message header object might have a `rawHeaders`list like the following: + * + * ```js + * [ 'ConTent-Length', '123456', + * 'content-LENGTH', '123', + * 'content-type', 'text/plain', + * 'CONNECTION', 'keep-alive', + * 'Host', 'example.com', + * 'accepT', '*' ] + * ``` + * @see [source](https://github.com/nodejs/node/blob/v20.2.0/lib/http.js) + */ +declare module "http" { + import * as stream from "node:stream"; + import { URL } from "node:url"; + import { LookupOptions } from "node:dns"; + import { EventEmitter } from "node:events"; + import { LookupFunction, Server as NetServer, Socket, TcpSocketConnectOpts } from "node:net"; + // incoming headers will never contain number + interface IncomingHttpHeaders extends NodeJS.Dict { + accept?: string | undefined; + "accept-language"?: string | undefined; + "accept-patch"?: string | undefined; + "accept-ranges"?: string | undefined; + "access-control-allow-credentials"?: string | undefined; + "access-control-allow-headers"?: string | undefined; + "access-control-allow-methods"?: string | undefined; + "access-control-allow-origin"?: string | undefined; + "access-control-expose-headers"?: string | undefined; + "access-control-max-age"?: string | undefined; + "access-control-request-headers"?: string | undefined; + "access-control-request-method"?: string | undefined; + age?: string | undefined; + allow?: string | undefined; + "alt-svc"?: string | undefined; + authorization?: string | undefined; + "cache-control"?: string | undefined; + connection?: string | undefined; + "content-disposition"?: string | undefined; + "content-encoding"?: string | undefined; + "content-language"?: string | undefined; + "content-length"?: string | undefined; + "content-location"?: string | undefined; + "content-range"?: string | undefined; + "content-type"?: string | undefined; + cookie?: string | undefined; + date?: string | undefined; + etag?: string | undefined; + expect?: string | undefined; + expires?: string | undefined; + forwarded?: string | undefined; + from?: string | undefined; + host?: string | undefined; + "if-match"?: string | undefined; + "if-modified-since"?: string | undefined; + "if-none-match"?: string | undefined; + "if-unmodified-since"?: string | undefined; + "last-modified"?: string | undefined; + location?: string | undefined; + origin?: string | undefined; + pragma?: string | undefined; + "proxy-authenticate"?: string | undefined; + "proxy-authorization"?: string | undefined; + "public-key-pins"?: string | undefined; + range?: string | undefined; + referer?: string | undefined; + "retry-after"?: string | undefined; + "sec-websocket-accept"?: string | undefined; + "sec-websocket-extensions"?: string | undefined; + "sec-websocket-key"?: string | undefined; + "sec-websocket-protocol"?: string | undefined; + "sec-websocket-version"?: string | undefined; + "set-cookie"?: string[] | undefined; + "strict-transport-security"?: string | undefined; + tk?: string | undefined; + trailer?: string | undefined; + "transfer-encoding"?: string | undefined; + upgrade?: string | undefined; + "user-agent"?: string | undefined; + vary?: string | undefined; + via?: string | undefined; + warning?: string | undefined; + "www-authenticate"?: string | undefined; + } + // outgoing headers allows numbers (as they are converted internally to strings) + type OutgoingHttpHeader = number | string | string[]; + interface OutgoingHttpHeaders extends NodeJS.Dict {} + interface ClientRequestArgs { + _defaultAgent?: Agent | undefined; + agent?: Agent | boolean | undefined; + auth?: string | null | undefined; + // https://github.com/nodejs/node/blob/master/lib/_http_client.js#L278 + createConnection?: + | ((options: ClientRequestArgs, oncreate: (err: Error, socket: Socket) => void) => Socket) + | undefined; + defaultPort?: number | string | undefined; + family?: number | undefined; + headers?: OutgoingHttpHeaders | undefined; + hints?: LookupOptions["hints"]; + host?: string | null | undefined; + hostname?: string | null | undefined; + insecureHTTPParser?: boolean | undefined; + localAddress?: string | undefined; + localPort?: number | undefined; + lookup?: LookupFunction | undefined; + /** + * @default 16384 + */ + maxHeaderSize?: number | undefined; + method?: string | undefined; + path?: string | null | undefined; + port?: number | string | null | undefined; + protocol?: string | null | undefined; + setHost?: boolean | undefined; + signal?: AbortSignal | undefined; + socketPath?: string | undefined; + timeout?: number | undefined; + uniqueHeaders?: Array | undefined; + joinDuplicateHeaders?: boolean; + } + interface ServerOptions< + Request extends typeof IncomingMessage = typeof IncomingMessage, + Response extends typeof ServerResponse = typeof ServerResponse, + > { + /** + * Specifies the `IncomingMessage` class to be used. Useful for extending the original `IncomingMessage`. + */ + IncomingMessage?: Request | undefined; + /** + * Specifies the `ServerResponse` class to be used. Useful for extending the original `ServerResponse`. + */ + ServerResponse?: Response | undefined; + /** + * Sets the timeout value in milliseconds for receiving the entire request from the client. + * @see Server.requestTimeout for more information. + * @default 300000 + * @since v18.0.0 + */ + requestTimeout?: number | undefined; + /** + * It joins the field line values of multiple headers in a request with `, ` instead of discarding the duplicates. + * @default false + * @since v18.14.0 + */ + joinDuplicateHeaders?: boolean; + /** + * The number of milliseconds of inactivity a server needs to wait for additional incoming data, + * after it has finished writing the last response, before a socket will be destroyed. + * @see Server.keepAliveTimeout for more information. + * @default 5000 + * @since v18.0.0 + */ + keepAliveTimeout?: number | undefined; + /** + * Sets the interval value in milliseconds to check for request and headers timeout in incomplete requests. + * @default 30000 + */ + connectionsCheckingInterval?: number | undefined; + /** + * Optionally overrides all `socket`s' `readableHighWaterMark` and `writableHighWaterMark`. + * This affects `highWaterMark` property of both `IncomingMessage` and `ServerResponse`. + * Default: @see stream.getDefaultHighWaterMark(). + * @since v20.1.0 + */ + highWaterMark?: number | undefined; + /** + * Use an insecure HTTP parser that accepts invalid HTTP headers when `true`. + * Using the insecure parser should be avoided. + * See --insecure-http-parser for more information. + * @default false + */ + insecureHTTPParser?: boolean | undefined; + /** + * Optionally overrides the value of + * `--max-http-header-size` for requests received by this server, i.e. + * the maximum length of request headers in bytes. + * @default 16384 + * @since v13.3.0 + */ + maxHeaderSize?: number | undefined; + /** + * If set to `true`, it disables the use of Nagle's algorithm immediately after a new incoming connection is received. + * @default true + * @since v16.5.0 + */ + noDelay?: boolean | undefined; + /** + * If set to `true`, it enables keep-alive functionality on the socket immediately after a new incoming connection is received, + * similarly on what is done in `socket.setKeepAlive([enable][, initialDelay])`. + * @default false + * @since v16.5.0 + */ + keepAlive?: boolean | undefined; + /** + * If set to a positive number, it sets the initial delay before the first keepalive probe is sent on an idle socket. + * @default 0 + * @since v16.5.0 + */ + keepAliveInitialDelay?: number | undefined; + /** + * A list of response headers that should be sent only once. + * If the header's value is an array, the items will be joined using `; `. + */ + uniqueHeaders?: Array | undefined; + } + type RequestListener< + Request extends typeof IncomingMessage = typeof IncomingMessage, + Response extends typeof ServerResponse = typeof ServerResponse, + > = (req: InstanceType, res: InstanceType & { req: InstanceType }) => void; + /** + * @since v0.1.17 + */ + class Server< + Request extends typeof IncomingMessage = typeof IncomingMessage, + Response extends typeof ServerResponse = typeof ServerResponse, + > extends NetServer { + constructor(requestListener?: RequestListener); + constructor(options: ServerOptions, requestListener?: RequestListener); + /** + * Sets the timeout value for sockets, and emits a `'timeout'` event on + * the Server object, passing the socket as an argument, if a timeout + * occurs. + * + * If there is a `'timeout'` event listener on the Server object, then it + * will be called with the timed-out socket as an argument. + * + * By default, the Server does not timeout sockets. However, if a callback + * is assigned to the Server's `'timeout'` event, timeouts must be handled + * explicitly. + * @since v0.9.12 + * @param [msecs=0 (no timeout)] + */ + setTimeout(msecs?: number, callback?: () => void): this; + setTimeout(callback: () => void): this; + /** + * Limits maximum incoming headers count. If set to 0, no limit will be applied. + * @since v0.7.0 + */ + maxHeadersCount: number | null; + /** + * The maximum number of requests socket can handle + * before closing keep alive connection. + * + * A value of `0` will disable the limit. + * + * When the limit is reached it will set the `Connection` header value to `close`, + * but will not actually close the connection, subsequent requests sent + * after the limit is reached will get `503 Service Unavailable` as a response. + * @since v16.10.0 + */ + maxRequestsPerSocket: number | null; + /** + * The number of milliseconds of inactivity before a socket is presumed + * to have timed out. + * + * A value of `0` will disable the timeout behavior on incoming connections. + * + * The socket timeout logic is set up on connection, so changing this + * value only affects new connections to the server, not any existing connections. + * @since v0.9.12 + */ + timeout: number; + /** + * Limit the amount of time the parser will wait to receive the complete HTTP + * headers. + * + * If the timeout expires, the server responds with status 408 without + * forwarding the request to the request listener and then closes the connection. + * + * It must be set to a non-zero value (e.g. 120 seconds) to protect against + * potential Denial-of-Service attacks in case the server is deployed without a + * reverse proxy in front. + * @since v11.3.0, v10.14.0 + */ + headersTimeout: number; + /** + * The number of milliseconds of inactivity a server needs to wait for additional + * incoming data, after it has finished writing the last response, before a socket + * will be destroyed. If the server receives new data before the keep-alive + * timeout has fired, it will reset the regular inactivity timeout, i.e.,`server.timeout`. + * + * A value of `0` will disable the keep-alive timeout behavior on incoming + * connections. + * A value of `0` makes the http server behave similarly to Node.js versions prior + * to 8.0.0, which did not have a keep-alive timeout. + * + * The socket timeout logic is set up on connection, so changing this value only + * affects new connections to the server, not any existing connections. + * @since v8.0.0 + */ + keepAliveTimeout: number; + /** + * Sets the timeout value in milliseconds for receiving the entire request from + * the client. + * + * If the timeout expires, the server responds with status 408 without + * forwarding the request to the request listener and then closes the connection. + * + * It must be set to a non-zero value (e.g. 120 seconds) to protect against + * potential Denial-of-Service attacks in case the server is deployed without a + * reverse proxy in front. + * @since v14.11.0 + */ + requestTimeout: number; + /** + * Closes all connections connected to this server. + * @since v18.2.0 + */ + closeAllConnections(): void; + /** + * Closes all connections connected to this server which are not sending a request + * or waiting for a response. + * @since v18.2.0 + */ + closeIdleConnections(): void; + addListener(event: string, listener: (...args: any[]) => void): this; + addListener(event: "close", listener: () => void): this; + addListener(event: "connection", listener: (socket: Socket) => void): this; + addListener(event: "error", listener: (err: Error) => void): this; + addListener(event: "listening", listener: () => void): this; + addListener(event: "checkContinue", listener: RequestListener): this; + addListener(event: "checkExpectation", listener: RequestListener): this; + addListener(event: "clientError", listener: (err: Error, socket: stream.Duplex) => void): this; + addListener( + event: "connect", + listener: (req: InstanceType, socket: stream.Duplex, head: Buffer) => void, + ): this; + addListener(event: "dropRequest", listener: (req: InstanceType, socket: stream.Duplex) => void): this; + addListener(event: "request", listener: RequestListener): this; + addListener( + event: "upgrade", + listener: (req: InstanceType, socket: stream.Duplex, head: Buffer) => void, + ): this; + emit(event: string, ...args: any[]): boolean; + emit(event: "close"): boolean; + emit(event: "connection", socket: Socket): boolean; + emit(event: "error", err: Error): boolean; + emit(event: "listening"): boolean; + emit( + event: "checkContinue", + req: InstanceType, + res: InstanceType & { req: InstanceType }, + ): boolean; + emit( + event: "checkExpectation", + req: InstanceType, + res: InstanceType & { req: InstanceType }, + ): boolean; + emit(event: "clientError", err: Error, socket: stream.Duplex): boolean; + emit(event: "connect", req: InstanceType, socket: stream.Duplex, head: Buffer): boolean; + emit(event: "dropRequest", req: InstanceType, socket: stream.Duplex): boolean; + emit( + event: "request", + req: InstanceType, + res: InstanceType & { req: InstanceType }, + ): boolean; + emit(event: "upgrade", req: InstanceType, socket: stream.Duplex, head: Buffer): boolean; + on(event: string, listener: (...args: any[]) => void): this; + on(event: "close", listener: () => void): this; + on(event: "connection", listener: (socket: Socket) => void): this; + on(event: "error", listener: (err: Error) => void): this; + on(event: "listening", listener: () => void): this; + on(event: "checkContinue", listener: RequestListener): this; + on(event: "checkExpectation", listener: RequestListener): this; + on(event: "clientError", listener: (err: Error, socket: stream.Duplex) => void): this; + on(event: "connect", listener: (req: InstanceType, socket: stream.Duplex, head: Buffer) => void): this; + on(event: "dropRequest", listener: (req: InstanceType, socket: stream.Duplex) => void): this; + on(event: "request", listener: RequestListener): this; + on(event: "upgrade", listener: (req: InstanceType, socket: stream.Duplex, head: Buffer) => void): this; + once(event: string, listener: (...args: any[]) => void): this; + once(event: "close", listener: () => void): this; + once(event: "connection", listener: (socket: Socket) => void): this; + once(event: "error", listener: (err: Error) => void): this; + once(event: "listening", listener: () => void): this; + once(event: "checkContinue", listener: RequestListener): this; + once(event: "checkExpectation", listener: RequestListener): this; + once(event: "clientError", listener: (err: Error, socket: stream.Duplex) => void): this; + once( + event: "connect", + listener: (req: InstanceType, socket: stream.Duplex, head: Buffer) => void, + ): this; + once(event: "dropRequest", listener: (req: InstanceType, socket: stream.Duplex) => void): this; + once(event: "request", listener: RequestListener): this; + once( + event: "upgrade", + listener: (req: InstanceType, socket: stream.Duplex, head: Buffer) => void, + ): this; + prependListener(event: string, listener: (...args: any[]) => void): this; + prependListener(event: "close", listener: () => void): this; + prependListener(event: "connection", listener: (socket: Socket) => void): this; + prependListener(event: "error", listener: (err: Error) => void): this; + prependListener(event: "listening", listener: () => void): this; + prependListener(event: "checkContinue", listener: RequestListener): this; + prependListener(event: "checkExpectation", listener: RequestListener): this; + prependListener(event: "clientError", listener: (err: Error, socket: stream.Duplex) => void): this; + prependListener( + event: "connect", + listener: (req: InstanceType, socket: stream.Duplex, head: Buffer) => void, + ): this; + prependListener( + event: "dropRequest", + listener: (req: InstanceType, socket: stream.Duplex) => void, + ): this; + prependListener(event: "request", listener: RequestListener): this; + prependListener( + event: "upgrade", + listener: (req: InstanceType, socket: stream.Duplex, head: Buffer) => void, + ): this; + prependOnceListener(event: string, listener: (...args: any[]) => void): this; + prependOnceListener(event: "close", listener: () => void): this; + prependOnceListener(event: "connection", listener: (socket: Socket) => void): this; + prependOnceListener(event: "error", listener: (err: Error) => void): this; + prependOnceListener(event: "listening", listener: () => void): this; + prependOnceListener(event: "checkContinue", listener: RequestListener): this; + prependOnceListener(event: "checkExpectation", listener: RequestListener): this; + prependOnceListener(event: "clientError", listener: (err: Error, socket: stream.Duplex) => void): this; + prependOnceListener( + event: "connect", + listener: (req: InstanceType, socket: stream.Duplex, head: Buffer) => void, + ): this; + prependOnceListener( + event: "dropRequest", + listener: (req: InstanceType, socket: stream.Duplex) => void, + ): this; + prependOnceListener(event: "request", listener: RequestListener): this; + prependOnceListener( + event: "upgrade", + listener: (req: InstanceType, socket: stream.Duplex, head: Buffer) => void, + ): this; + } + /** + * This class serves as the parent class of {@link ClientRequest} and {@link ServerResponse}. It is an abstract outgoing message from + * the perspective of the participants of an HTTP transaction. + * @since v0.1.17 + */ + class OutgoingMessage extends stream.Writable { + readonly req: Request; + chunkedEncoding: boolean; + shouldKeepAlive: boolean; + useChunkedEncodingByDefault: boolean; + sendDate: boolean; + /** + * @deprecated Use `writableEnded` instead. + */ + finished: boolean; + /** + * Read-only. `true` if the headers were sent, otherwise `false`. + * @since v0.9.3 + */ + readonly headersSent: boolean; + /** + * Alias of `outgoingMessage.socket`. + * @since v0.3.0 + * @deprecated Since v15.12.0,v14.17.1 - Use `socket` instead. + */ + readonly connection: Socket | null; + /** + * Reference to the underlying socket. Usually, users will not want to access + * this property. + * + * After calling `outgoingMessage.end()`, this property will be nulled. + * @since v0.3.0 + */ + readonly socket: Socket | null; + constructor(); + /** + * Once a socket is associated with the message and is connected,`socket.setTimeout()` will be called with `msecs` as the first parameter. + * @since v0.9.12 + * @param callback Optional function to be called when a timeout occurs. Same as binding to the `timeout` event. + */ + setTimeout(msecs: number, callback?: () => void): this; + /** + * Sets a single header value. If the header already exists in the to-be-sent + * headers, its value will be replaced. Use an array of strings to send multiple + * headers with the same name. + * @since v0.4.0 + * @param name Header name + * @param value Header value + */ + setHeader(name: string, value: number | string | ReadonlyArray): this; + /** + * Append a single header value for the header object. + * + * If the value is an array, this is equivalent of calling this method multiple + * times. + * + * If there were no previous value for the header, this is equivalent of calling `outgoingMessage.setHeader(name, value)`. + * + * Depending of the value of `options.uniqueHeaders` when the client request or the + * server were created, this will end up in the header being sent multiple times or + * a single time with values joined using `; `. + * @since v18.3.0, v16.17.0 + * @param name Header name + * @param value Header value + */ + appendHeader(name: string, value: string | ReadonlyArray): this; + /** + * Gets the value of the HTTP header with the given name. If that header is not + * set, the returned value will be `undefined`. + * @since v0.4.0 + * @param name Name of header + */ + getHeader(name: string): number | string | string[] | undefined; + /** + * Returns a shallow copy of the current outgoing headers. Since a shallow + * copy is used, array values may be mutated without additional calls to + * various header-related HTTP module methods. The keys of the returned + * object are the header names and the values are the respective header + * values. All header names are lowercase. + * + * The object returned by the `outgoingMessage.getHeaders()` method does + * not prototypically inherit from the JavaScript `Object`. This means that + * typical `Object` methods such as `obj.toString()`, `obj.hasOwnProperty()`, + * and others are not defined and will not work. + * + * ```js + * outgoingMessage.setHeader('Foo', 'bar'); + * outgoingMessage.setHeader('Set-Cookie', ['foo=bar', 'bar=baz']); + * + * const headers = outgoingMessage.getHeaders(); + * // headers === { foo: 'bar', 'set-cookie': ['foo=bar', 'bar=baz'] } + * ``` + * @since v7.7.0 + */ + getHeaders(): OutgoingHttpHeaders; + /** + * Returns an array containing the unique names of the current outgoing headers. + * All names are lowercase. + * @since v7.7.0 + */ + getHeaderNames(): string[]; + /** + * Returns `true` if the header identified by `name` is currently set in the + * outgoing headers. The header name is case-insensitive. + * + * ```js + * const hasContentType = outgoingMessage.hasHeader('content-type'); + * ``` + * @since v7.7.0 + */ + hasHeader(name: string): boolean; + /** + * Removes a header that is queued for implicit sending. + * + * ```js + * outgoingMessage.removeHeader('Content-Encoding'); + * ``` + * @since v0.4.0 + * @param name Header name + */ + removeHeader(name: string): void; + /** + * Adds HTTP trailers (headers but at the end of the message) to the message. + * + * Trailers will **only** be emitted if the message is chunked encoded. If not, + * the trailers will be silently discarded. + * + * HTTP requires the `Trailer` header to be sent to emit trailers, + * with a list of header field names in its value, e.g. + * + * ```js + * message.writeHead(200, { 'Content-Type': 'text/plain', + * 'Trailer': 'Content-MD5' }); + * message.write(fileData); + * message.addTrailers({ 'Content-MD5': '7895bf4b8828b55ceaf47747b4bca667' }); + * message.end(); + * ``` + * + * Attempting to set a header field name or value that contains invalid characters + * will result in a `TypeError` being thrown. + * @since v0.3.0 + */ + addTrailers(headers: OutgoingHttpHeaders | ReadonlyArray<[string, string]>): void; + /** + * Flushes the message headers. + * + * For efficiency reason, Node.js normally buffers the message headers + * until `outgoingMessage.end()` is called or the first chunk of message data + * is written. It then tries to pack the headers and data into a single TCP + * packet. + * + * It is usually desired (it saves a TCP round-trip), but not when the first + * data is not sent until possibly much later. `outgoingMessage.flushHeaders()`bypasses the optimization and kickstarts the message. + * @since v1.6.0 + */ + flushHeaders(): void; + } + /** + * This object is created internally by an HTTP server, not by the user. It is + * passed as the second parameter to the `'request'` event. + * @since v0.1.17 + */ + class ServerResponse extends OutgoingMessage { + /** + * When using implicit headers (not calling `response.writeHead()` explicitly), + * this property controls the status code that will be sent to the client when + * the headers get flushed. + * + * ```js + * response.statusCode = 404; + * ``` + * + * After response header was sent to the client, this property indicates the + * status code which was sent out. + * @since v0.4.0 + */ + statusCode: number; + /** + * When using implicit headers (not calling `response.writeHead()` explicitly), + * this property controls the status message that will be sent to the client when + * the headers get flushed. If this is left as `undefined` then the standard + * message for the status code will be used. + * + * ```js + * response.statusMessage = 'Not found'; + * ``` + * + * After response header was sent to the client, this property indicates the + * status message which was sent out. + * @since v0.11.8 + */ + statusMessage: string; + /** + * If set to `true`, Node.js will check whether the `Content-Length`header value and the size of the body, in bytes, are equal. + * Mismatching the `Content-Length` header value will result + * in an `Error` being thrown, identified by `code:``'ERR_HTTP_CONTENT_LENGTH_MISMATCH'`. + * @since v18.10.0, v16.18.0 + */ + strictContentLength: boolean; + constructor(req: Request); + assignSocket(socket: Socket): void; + detachSocket(socket: Socket): void; + /** + * Sends an HTTP/1.1 100 Continue message to the client, indicating that + * the request body should be sent. See the `'checkContinue'` event on`Server`. + * @since v0.3.0 + */ + writeContinue(callback?: () => void): void; + /** + * Sends an HTTP/1.1 103 Early Hints message to the client with a Link header, + * indicating that the user agent can preload/preconnect the linked resources. + * The `hints` is an object containing the values of headers to be sent with + * early hints message. The optional `callback` argument will be called when + * the response message has been written. + * + * **Example** + * + * ```js + * const earlyHintsLink = '; rel=preload; as=style'; + * response.writeEarlyHints({ + * 'link': earlyHintsLink, + * }); + * + * const earlyHintsLinks = [ + * '; rel=preload; as=style', + * '; rel=preload; as=script', + * ]; + * response.writeEarlyHints({ + * 'link': earlyHintsLinks, + * 'x-trace-id': 'id for diagnostics', + * }); + * + * const earlyHintsCallback = () => console.log('early hints message sent'); + * response.writeEarlyHints({ + * 'link': earlyHintsLinks, + * }, earlyHintsCallback); + * ``` + * @since v18.11.0 + * @param hints An object containing the values of headers + * @param callback Will be called when the response message has been written + */ + writeEarlyHints(hints: Record, callback?: () => void): void; + /** + * Sends a response header to the request. The status code is a 3-digit HTTP + * status code, like `404`. The last argument, `headers`, are the response headers. + * Optionally one can give a human-readable `statusMessage` as the second + * argument. + * + * `headers` may be an `Array` where the keys and values are in the same list. + * It is _not_ a list of tuples. So, the even-numbered offsets are key values, + * and the odd-numbered offsets are the associated values. The array is in the same + * format as `request.rawHeaders`. + * + * Returns a reference to the `ServerResponse`, so that calls can be chained. + * + * ```js + * const body = 'hello world'; + * response + * .writeHead(200, { + * 'Content-Length': Buffer.byteLength(body), + * 'Content-Type': 'text/plain', + * }) + * .end(body); + * ``` + * + * This method must only be called once on a message and it must + * be called before `response.end()` is called. + * + * If `response.write()` or `response.end()` are called before calling + * this, the implicit/mutable headers will be calculated and call this function. + * + * When headers have been set with `response.setHeader()`, they will be merged + * with any headers passed to `response.writeHead()`, with the headers passed + * to `response.writeHead()` given precedence. + * + * If this method is called and `response.setHeader()` has not been called, + * it will directly write the supplied header values onto the network channel + * without caching internally, and the `response.getHeader()` on the header + * will not yield the expected result. If progressive population of headers is + * desired with potential future retrieval and modification, use `response.setHeader()` instead. + * + * ```js + * // Returns content-type = text/plain + * const server = http.createServer((req, res) => { + * res.setHeader('Content-Type', 'text/html'); + * res.setHeader('X-Foo', 'bar'); + * res.writeHead(200, { 'Content-Type': 'text/plain' }); + * res.end('ok'); + * }); + * ``` + * + * `Content-Length` is read in bytes, not characters. Use `Buffer.byteLength()` to determine the length of the body in bytes. Node.js + * will check whether `Content-Length` and the length of the body which has + * been transmitted are equal or not. + * + * Attempting to set a header field name or value that contains invalid characters + * will result in a \[`Error`\]\[\] being thrown. + * @since v0.1.30 + */ + writeHead( + statusCode: number, + statusMessage?: string, + headers?: OutgoingHttpHeaders | OutgoingHttpHeader[], + ): this; + writeHead(statusCode: number, headers?: OutgoingHttpHeaders | OutgoingHttpHeader[]): this; + /** + * Sends a HTTP/1.1 102 Processing message to the client, indicating that + * the request body should be sent. + * @since v10.0.0 + */ + writeProcessing(): void; + } + interface InformationEvent { + statusCode: number; + statusMessage: string; + httpVersion: string; + httpVersionMajor: number; + httpVersionMinor: number; + headers: IncomingHttpHeaders; + rawHeaders: string[]; + } + /** + * This object is created internally and returned from {@link request}. It + * represents an _in-progress_ request whose header has already been queued. The + * header is still mutable using the `setHeader(name, value)`,`getHeader(name)`, `removeHeader(name)` API. The actual header will + * be sent along with the first data chunk or when calling `request.end()`. + * + * To get the response, add a listener for `'response'` to the request object.`'response'` will be emitted from the request object when the response + * headers have been received. The `'response'` event is executed with one + * argument which is an instance of {@link IncomingMessage}. + * + * During the `'response'` event, one can add listeners to the + * response object; particularly to listen for the `'data'` event. + * + * If no `'response'` handler is added, then the response will be + * entirely discarded. However, if a `'response'` event handler is added, + * then the data from the response object **must** be consumed, either by + * calling `response.read()` whenever there is a `'readable'` event, or + * by adding a `'data'` handler, or by calling the `.resume()` method. + * Until the data is consumed, the `'end'` event will not fire. Also, until + * the data is read it will consume memory that can eventually lead to a + * 'process out of memory' error. + * + * For backward compatibility, `res` will only emit `'error'` if there is an`'error'` listener registered. + * + * Set `Content-Length` header to limit the response body size. + * If `response.strictContentLength` is set to `true`, mismatching the`Content-Length` header value will result in an `Error` being thrown, + * identified by `code:``'ERR_HTTP_CONTENT_LENGTH_MISMATCH'`. + * + * `Content-Length` value should be in bytes, not characters. Use `Buffer.byteLength()` to determine the length of the body in bytes. + * @since v0.1.17 + */ + class ClientRequest extends OutgoingMessage { + /** + * The `request.aborted` property will be `true` if the request has + * been aborted. + * @since v0.11.14 + * @deprecated Since v17.0.0,v16.12.0 - Check `destroyed` instead. + */ + aborted: boolean; + /** + * The request host. + * @since v14.5.0, v12.19.0 + */ + host: string; + /** + * The request protocol. + * @since v14.5.0, v12.19.0 + */ + protocol: string; + /** + * When sending request through a keep-alive enabled agent, the underlying socket + * might be reused. But if server closes connection at unfortunate time, client + * may run into a 'ECONNRESET' error. + * + * ```js + * import http from 'node:http'; + * + * // Server has a 5 seconds keep-alive timeout by default + * http + * .createServer((req, res) => { + * res.write('hello\n'); + * res.end(); + * }) + * .listen(3000); + * + * setInterval(() => { + * // Adapting a keep-alive agent + * http.get('http://localhost:3000', { agent }, (res) => { + * res.on('data', (data) => { + * // Do nothing + * }); + * }); + * }, 5000); // Sending request on 5s interval so it's easy to hit idle timeout + * ``` + * + * By marking a request whether it reused socket or not, we can do + * automatic error retry base on it. + * + * ```js + * import http from 'node:http'; + * const agent = new http.Agent({ keepAlive: true }); + * + * function retriableRequest() { + * const req = http + * .get('http://localhost:3000', { agent }, (res) => { + * // ... + * }) + * .on('error', (err) => { + * // Check if retry is needed + * if (req.reusedSocket && err.code === 'ECONNRESET') { + * retriableRequest(); + * } + * }); + * } + * + * retriableRequest(); + * ``` + * @since v13.0.0, v12.16.0 + */ + reusedSocket: boolean; + /** + * Limits maximum response headers count. If set to 0, no limit will be applied. + */ + maxHeadersCount: number; + constructor(url: string | URL | ClientRequestArgs, cb?: (res: IncomingMessage) => void); + /** + * The request method. + * @since v0.1.97 + */ + method: string; + /** + * The request path. + * @since v0.4.0 + */ + path: string; + /** + * Marks the request as aborting. Calling this will cause remaining data + * in the response to be dropped and the socket to be destroyed. + * @since v0.3.8 + * @deprecated Since v14.1.0,v13.14.0 - Use `destroy` instead. + */ + abort(): void; + onSocket(socket: Socket): void; + /** + * Once a socket is assigned to this request and is connected `socket.setTimeout()` will be called. + * @since v0.5.9 + * @param timeout Milliseconds before a request times out. + * @param callback Optional function to be called when a timeout occurs. Same as binding to the `'timeout'` event. + */ + setTimeout(timeout: number, callback?: () => void): this; + /** + * Once a socket is assigned to this request and is connected `socket.setNoDelay()` will be called. + * @since v0.5.9 + */ + setNoDelay(noDelay?: boolean): void; + /** + * Once a socket is assigned to this request and is connected `socket.setKeepAlive()` will be called. + * @since v0.5.9 + */ + setSocketKeepAlive(enable?: boolean, initialDelay?: number): void; + /** + * Returns an array containing the unique names of the current outgoing raw + * headers. Header names are returned with their exact casing being set. + * + * ```js + * request.setHeader('Foo', 'bar'); + * request.setHeader('Set-Cookie', ['foo=bar', 'bar=baz']); + * + * const headerNames = request.getRawHeaderNames(); + * // headerNames === ['Foo', 'Set-Cookie'] + * ``` + * @since v15.13.0, v14.17.0 + */ + getRawHeaderNames(): string[]; + /** + * @deprecated + */ + addListener(event: "abort", listener: () => void): this; + addListener( + event: "connect", + listener: (response: IncomingMessage, socket: Socket, head: Buffer) => void, + ): this; + addListener(event: "continue", listener: () => void): this; + addListener(event: "information", listener: (info: InformationEvent) => void): this; + addListener(event: "response", listener: (response: IncomingMessage) => void): this; + addListener(event: "socket", listener: (socket: Socket) => void): this; + addListener(event: "timeout", listener: () => void): this; + addListener( + event: "upgrade", + listener: (response: IncomingMessage, socket: Socket, head: Buffer) => void, + ): this; + addListener(event: "close", listener: () => void): this; + addListener(event: "drain", listener: () => void): this; + addListener(event: "error", listener: (err: Error) => void): this; + addListener(event: "finish", listener: () => void): this; + addListener(event: "pipe", listener: (src: stream.Readable) => void): this; + addListener(event: "unpipe", listener: (src: stream.Readable) => void): this; + addListener(event: string | symbol, listener: (...args: any[]) => void): this; + /** + * @deprecated + */ + on(event: "abort", listener: () => void): this; + on(event: "connect", listener: (response: IncomingMessage, socket: Socket, head: Buffer) => void): this; + on(event: "continue", listener: () => void): this; + on(event: "information", listener: (info: InformationEvent) => void): this; + on(event: "response", listener: (response: IncomingMessage) => void): this; + on(event: "socket", listener: (socket: Socket) => void): this; + on(event: "timeout", listener: () => void): this; + on(event: "upgrade", listener: (response: IncomingMessage, socket: Socket, head: Buffer) => void): this; + on(event: "close", listener: () => void): this; + on(event: "drain", listener: () => void): this; + on(event: "error", listener: (err: Error) => void): this; + on(event: "finish", listener: () => void): this; + on(event: "pipe", listener: (src: stream.Readable) => void): this; + on(event: "unpipe", listener: (src: stream.Readable) => void): this; + on(event: string | symbol, listener: (...args: any[]) => void): this; + /** + * @deprecated + */ + once(event: "abort", listener: () => void): this; + once(event: "connect", listener: (response: IncomingMessage, socket: Socket, head: Buffer) => void): this; + once(event: "continue", listener: () => void): this; + once(event: "information", listener: (info: InformationEvent) => void): this; + once(event: "response", listener: (response: IncomingMessage) => void): this; + once(event: "socket", listener: (socket: Socket) => void): this; + once(event: "timeout", listener: () => void): this; + once(event: "upgrade", listener: (response: IncomingMessage, socket: Socket, head: Buffer) => void): this; + once(event: "close", listener: () => void): this; + once(event: "drain", listener: () => void): this; + once(event: "error", listener: (err: Error) => void): this; + once(event: "finish", listener: () => void): this; + once(event: "pipe", listener: (src: stream.Readable) => void): this; + once(event: "unpipe", listener: (src: stream.Readable) => void): this; + once(event: string | symbol, listener: (...args: any[]) => void): this; + /** + * @deprecated + */ + prependListener(event: "abort", listener: () => void): this; + prependListener( + event: "connect", + listener: (response: IncomingMessage, socket: Socket, head: Buffer) => void, + ): this; + prependListener(event: "continue", listener: () => void): this; + prependListener(event: "information", listener: (info: InformationEvent) => void): this; + prependListener(event: "response", listener: (response: IncomingMessage) => void): this; + prependListener(event: "socket", listener: (socket: Socket) => void): this; + prependListener(event: "timeout", listener: () => void): this; + prependListener( + event: "upgrade", + listener: (response: IncomingMessage, socket: Socket, head: Buffer) => void, + ): this; + prependListener(event: "close", listener: () => void): this; + prependListener(event: "drain", listener: () => void): this; + prependListener(event: "error", listener: (err: Error) => void): this; + prependListener(event: "finish", listener: () => void): this; + prependListener(event: "pipe", listener: (src: stream.Readable) => void): this; + prependListener(event: "unpipe", listener: (src: stream.Readable) => void): this; + prependListener(event: string | symbol, listener: (...args: any[]) => void): this; + /** + * @deprecated + */ + prependOnceListener(event: "abort", listener: () => void): this; + prependOnceListener( + event: "connect", + listener: (response: IncomingMessage, socket: Socket, head: Buffer) => void, + ): this; + prependOnceListener(event: "continue", listener: () => void): this; + prependOnceListener(event: "information", listener: (info: InformationEvent) => void): this; + prependOnceListener(event: "response", listener: (response: IncomingMessage) => void): this; + prependOnceListener(event: "socket", listener: (socket: Socket) => void): this; + prependOnceListener(event: "timeout", listener: () => void): this; + prependOnceListener( + event: "upgrade", + listener: (response: IncomingMessage, socket: Socket, head: Buffer) => void, + ): this; + prependOnceListener(event: "close", listener: () => void): this; + prependOnceListener(event: "drain", listener: () => void): this; + prependOnceListener(event: "error", listener: (err: Error) => void): this; + prependOnceListener(event: "finish", listener: () => void): this; + prependOnceListener(event: "pipe", listener: (src: stream.Readable) => void): this; + prependOnceListener(event: "unpipe", listener: (src: stream.Readable) => void): this; + prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this; + } + /** + * An `IncomingMessage` object is created by {@link Server} or {@link ClientRequest} and passed as the first argument to the `'request'` and `'response'` event respectively. It may be used to + * access response + * status, headers, and data. + * + * Different from its `socket` value which is a subclass of `stream.Duplex`, the`IncomingMessage` itself extends `stream.Readable` and is created separately to + * parse and emit the incoming HTTP headers and payload, as the underlying socket + * may be reused multiple times in case of keep-alive. + * @since v0.1.17 + */ + class IncomingMessage extends stream.Readable { + constructor(socket: Socket); + /** + * The `message.aborted` property will be `true` if the request has + * been aborted. + * @since v10.1.0 + * @deprecated Since v17.0.0,v16.12.0 - Check `message.destroyed` from stream.Readable. + */ + aborted: boolean; + /** + * In case of server request, the HTTP version sent by the client. In the case of + * client response, the HTTP version of the connected-to server. + * Probably either `'1.1'` or `'1.0'`. + * + * Also `message.httpVersionMajor` is the first integer and`message.httpVersionMinor` is the second. + * @since v0.1.1 + */ + httpVersion: string; + httpVersionMajor: number; + httpVersionMinor: number; + /** + * The `message.complete` property will be `true` if a complete HTTP message has + * been received and successfully parsed. + * + * This property is particularly useful as a means of determining if a client or + * server fully transmitted a message before a connection was terminated: + * + * ```js + * const req = http.request({ + * host: '127.0.0.1', + * port: 8080, + * method: 'POST', + * }, (res) => { + * res.resume(); + * res.on('end', () => { + * if (!res.complete) + * console.error( + * 'The connection was terminated while the message was still being sent'); + * }); + * }); + * ``` + * @since v0.3.0 + */ + complete: boolean; + /** + * Alias for `message.socket`. + * @since v0.1.90 + * @deprecated Since v16.0.0 - Use `socket`. + */ + connection: Socket; + /** + * The `net.Socket` object associated with the connection. + * + * With HTTPS support, use `request.socket.getPeerCertificate()` to obtain the + * client's authentication details. + * + * This property is guaranteed to be an instance of the `net.Socket` class, + * a subclass of `stream.Duplex`, unless the user specified a socket + * type other than `net.Socket` or internally nulled. + * @since v0.3.0 + */ + socket: Socket; + /** + * The request/response headers object. + * + * Key-value pairs of header names and values. Header names are lower-cased. + * + * ```js + * // Prints something like: + * // + * // { 'user-agent': 'curl/7.22.0', + * // host: '127.0.0.1:8000', + * // accept: '*' } + * console.log(request.headers); + * ``` + * + * Duplicates in raw headers are handled in the following ways, depending on the + * header name: + * + * * Duplicates of `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`, `server`, or `user-agent` are discarded. + * To allow duplicate values of the headers listed above to be joined, + * use the option `joinDuplicateHeaders` in {@link request} and {@link createServer}. See RFC 9110 Section 5.3 for more + * information. + * * `set-cookie` is always an array. Duplicates are added to the array. + * * For duplicate `cookie` headers, the values are joined together with `; `. + * * For all other headers, the values are joined together with `, `. + * @since v0.1.5 + */ + headers: IncomingHttpHeaders; + /** + * Similar to `message.headers`, but there is no join logic and the values are + * always arrays of strings, even for headers received just once. + * + * ```js + * // Prints something like: + * // + * // { 'user-agent': ['curl/7.22.0'], + * // host: ['127.0.0.1:8000'], + * // accept: ['*'] } + * console.log(request.headersDistinct); + * ``` + * @since v18.3.0, v16.17.0 + */ + headersDistinct: NodeJS.Dict; + /** + * The raw request/response headers list exactly as they were received. + * + * The keys and values are in the same list. It is _not_ a + * list of tuples. So, the even-numbered offsets are key values, and the + * odd-numbered offsets are the associated values. + * + * Header names are not lowercased, and duplicates are not merged. + * + * ```js + * // Prints something like: + * // + * // [ 'user-agent', + * // 'this is invalid because there can be only one', + * // 'User-Agent', + * // 'curl/7.22.0', + * // 'Host', + * // '127.0.0.1:8000', + * // 'ACCEPT', + * // '*' ] + * console.log(request.rawHeaders); + * ``` + * @since v0.11.6 + */ + rawHeaders: string[]; + /** + * The request/response trailers object. Only populated at the `'end'` event. + * @since v0.3.0 + */ + trailers: NodeJS.Dict; + /** + * Similar to `message.trailers`, but there is no join logic and the values are + * always arrays of strings, even for headers received just once. + * Only populated at the `'end'` event. + * @since v18.3.0, v16.17.0 + */ + trailersDistinct: NodeJS.Dict; + /** + * The raw request/response trailer keys and values exactly as they were + * received. Only populated at the `'end'` event. + * @since v0.11.6 + */ + rawTrailers: string[]; + /** + * Calls `message.socket.setTimeout(msecs, callback)`. + * @since v0.5.9 + */ + setTimeout(msecs: number, callback?: () => void): this; + /** + * **Only valid for request obtained from {@link Server}.** + * + * The request method as a string. Read only. Examples: `'GET'`, `'DELETE'`. + * @since v0.1.1 + */ + method?: string | undefined; + /** + * **Only valid for request obtained from {@link Server}.** + * + * Request URL string. This contains only the URL that is present in the actual + * HTTP request. Take the following request: + * + * ```http + * GET /status?name=ryan HTTP/1.1 + * Accept: text/plain + * ``` + * + * To parse the URL into its parts: + * + * ```js + * new URL(request.url, `http://${request.headers.host}`); + * ``` + * + * When `request.url` is `'/status?name=ryan'` and `request.headers.host` is`'localhost:3000'`: + * + * ```console + * $ node + * > new URL(request.url, `http://${request.headers.host}`) + * URL { + * href: 'http://localhost:3000/status?name=ryan', + * origin: 'http://localhost:3000', + * protocol: 'http:', + * username: '', + * password: '', + * host: 'localhost:3000', + * hostname: 'localhost', + * port: '3000', + * pathname: '/status', + * search: '?name=ryan', + * searchParams: URLSearchParams { 'name' => 'ryan' }, + * hash: '' + * } + * ``` + * @since v0.1.90 + */ + url?: string | undefined; + /** + * **Only valid for response obtained from {@link ClientRequest}.** + * + * The 3-digit HTTP response status code. E.G. `404`. + * @since v0.1.1 + */ + statusCode?: number | undefined; + /** + * **Only valid for response obtained from {@link ClientRequest}.** + * + * The HTTP response status message (reason phrase). E.G. `OK` or `Internal Server Error`. + * @since v0.11.10 + */ + statusMessage?: string | undefined; + /** + * Calls `destroy()` on the socket that received the `IncomingMessage`. If `error`is provided, an `'error'` event is emitted on the socket and `error` is passed + * as an argument to any listeners on the event. + * @since v0.3.0 + */ + destroy(error?: Error): this; + } + interface AgentOptions extends Partial { + /** + * Keep sockets around in a pool to be used by other requests in the future. Default = false + */ + keepAlive?: boolean | undefined; + /** + * When using HTTP KeepAlive, how often to send TCP KeepAlive packets over sockets being kept alive. Default = 1000. + * Only relevant if keepAlive is set to true. + */ + keepAliveMsecs?: number | undefined; + /** + * Maximum number of sockets to allow per host. Default for Node 0.10 is 5, default for Node 0.12 is Infinity + */ + maxSockets?: number | undefined; + /** + * Maximum number of sockets allowed for all hosts in total. Each request will use a new socket until the maximum is reached. Default: Infinity. + */ + maxTotalSockets?: number | undefined; + /** + * Maximum number of sockets to leave open in a free state. Only relevant if keepAlive is set to true. Default = 256. + */ + maxFreeSockets?: number | undefined; + /** + * Socket timeout in milliseconds. This will set the timeout after the socket is connected. + */ + timeout?: number | undefined; + /** + * Scheduling strategy to apply when picking the next free socket to use. + * @default `lifo` + */ + scheduling?: "fifo" | "lifo" | undefined; + } + /** + * An `Agent` is responsible for managing connection persistence + * and reuse for HTTP clients. It maintains a queue of pending requests + * for a given host and port, reusing a single socket connection for each + * until the queue is empty, at which time the socket is either destroyed + * or put into a pool where it is kept to be used again for requests to the + * same host and port. Whether it is destroyed or pooled depends on the`keepAlive` `option`. + * + * Pooled connections have TCP Keep-Alive enabled for them, but servers may + * still close idle connections, in which case they will be removed from the + * pool and a new connection will be made when a new HTTP request is made for + * that host and port. Servers may also refuse to allow multiple requests + * over the same connection, in which case the connection will have to be + * remade for every request and cannot be pooled. The `Agent` will still make + * the requests to that server, but each one will occur over a new connection. + * + * When a connection is closed by the client or the server, it is removed + * from the pool. Any unused sockets in the pool will be unrefed so as not + * to keep the Node.js process running when there are no outstanding requests. + * (see `socket.unref()`). + * + * It is good practice, to `destroy()` an `Agent` instance when it is no + * longer in use, because unused sockets consume OS resources. + * + * Sockets are removed from an agent when the socket emits either + * a `'close'` event or an `'agentRemove'` event. When intending to keep one + * HTTP request open for a long time without keeping it in the agent, something + * like the following may be done: + * + * ```js + * http.get(options, (res) => { + * // Do stuff + * }).on('socket', (socket) => { + * socket.emit('agentRemove'); + * }); + * ``` + * + * An agent may also be used for an individual request. By providing`{agent: false}` as an option to the `http.get()` or `http.request()`functions, a one-time use `Agent` with default options + * will be used + * for the client connection. + * + * `agent:false`: + * + * ```js + * http.get({ + * hostname: 'localhost', + * port: 80, + * path: '/', + * agent: false, // Create a new agent just for this one request + * }, (res) => { + * // Do stuff with response + * }); + * ``` + * @since v0.3.4 + */ + class Agent extends EventEmitter { + /** + * By default set to 256. For agents with `keepAlive` enabled, this + * sets the maximum number of sockets that will be left open in the free + * state. + * @since v0.11.7 + */ + maxFreeSockets: number; + /** + * By default set to `Infinity`. Determines how many concurrent sockets the agent + * can have open per origin. Origin is the returned value of `agent.getName()`. + * @since v0.3.6 + */ + maxSockets: number; + /** + * By default set to `Infinity`. Determines how many concurrent sockets the agent + * can have open. Unlike `maxSockets`, this parameter applies across all origins. + * @since v14.5.0, v12.19.0 + */ + maxTotalSockets: number; + /** + * An object which contains arrays of sockets currently awaiting use by + * the agent when `keepAlive` is enabled. Do not modify. + * + * Sockets in the `freeSockets` list will be automatically destroyed and + * removed from the array on `'timeout'`. + * @since v0.11.4 + */ + readonly freeSockets: NodeJS.ReadOnlyDict; + /** + * An object which contains arrays of sockets currently in use by the + * agent. Do not modify. + * @since v0.3.6 + */ + readonly sockets: NodeJS.ReadOnlyDict; + /** + * An object which contains queues of requests that have not yet been assigned to + * sockets. Do not modify. + * @since v0.5.9 + */ + readonly requests: NodeJS.ReadOnlyDict; + constructor(opts?: AgentOptions); + /** + * Destroy any sockets that are currently in use by the agent. + * + * It is usually not necessary to do this. However, if using an + * agent with `keepAlive` enabled, then it is best to explicitly shut down + * the agent when it is no longer needed. Otherwise, + * sockets might stay open for quite a long time before the server + * terminates them. + * @since v0.11.4 + */ + destroy(): void; + } + const METHODS: string[]; + const STATUS_CODES: { + [errorCode: number]: string | undefined; + [errorCode: string]: string | undefined; + }; + /** + * Returns a new instance of {@link Server}. + * + * The `requestListener` is a function which is automatically + * added to the `'request'` event. + * + * ```js + * import http from 'node:http'; + * + * // Create a local server to receive data from + * const server = http.createServer((req, res) => { + * res.writeHead(200, { 'Content-Type': 'application/json' }); + * res.end(JSON.stringify({ + * data: 'Hello World!', + * })); + * }); + * + * server.listen(8000); + * ``` + * + * ```js + * import http from 'node:http'; + * + * // Create a local server to receive data from + * const server = http.createServer(); + * + * // Listen to the request event + * server.on('request', (request, res) => { + * res.writeHead(200, { 'Content-Type': 'application/json' }); + * res.end(JSON.stringify({ + * data: 'Hello World!', + * })); + * }); + * + * server.listen(8000); + * ``` + * @since v0.1.13 + */ + function createServer< + Request extends typeof IncomingMessage = typeof IncomingMessage, + Response extends typeof ServerResponse = typeof ServerResponse, + >(requestListener?: RequestListener): Server; + function createServer< + Request extends typeof IncomingMessage = typeof IncomingMessage, + Response extends typeof ServerResponse = typeof ServerResponse, + >( + options: ServerOptions, + requestListener?: RequestListener, + ): Server; + // although RequestOptions are passed as ClientRequestArgs to ClientRequest directly, + // create interface RequestOptions would make the naming more clear to developers + interface RequestOptions extends ClientRequestArgs {} + /** + * `options` in `socket.connect()` are also supported. + * + * Node.js maintains several connections per server to make HTTP requests. + * This function allows one to transparently issue requests. + * + * `url` can be a string or a `URL` object. If `url` is a + * string, it is automatically parsed with `new URL()`. If it is a `URL` object, it will be automatically converted to an ordinary `options` object. + * + * If both `url` and `options` are specified, the objects are merged, with the`options` properties taking precedence. + * + * The optional `callback` parameter will be added as a one-time listener for + * the `'response'` event. + * + * `http.request()` returns an instance of the {@link ClientRequest} class. The `ClientRequest` instance is a writable stream. If one needs to + * upload a file with a POST request, then write to the `ClientRequest` object. + * + * ```js + * import http from 'node:http'; + * import { Buffer } from 'node:buffer'; + * + * const postData = JSON.stringify({ + * 'msg': 'Hello World!', + * }); + * + * const options = { + * hostname: 'www.google.com', + * port: 80, + * path: '/upload', + * method: 'POST', + * headers: { + * 'Content-Type': 'application/json', + * 'Content-Length': Buffer.byteLength(postData), + * }, + * }; + * + * const req = http.request(options, (res) => { + * console.log(`STATUS: ${res.statusCode}`); + * console.log(`HEADERS: ${JSON.stringify(res.headers)}`); + * res.setEncoding('utf8'); + * res.on('data', (chunk) => { + * console.log(`BODY: ${chunk}`); + * }); + * res.on('end', () => { + * console.log('No more data in response.'); + * }); + * }); + * + * req.on('error', (e) => { + * console.error(`problem with request: ${e.message}`); + * }); + * + * // Write data to request body + * req.write(postData); + * req.end(); + * ``` + * + * In the example `req.end()` was called. With `http.request()` one + * must always call `req.end()` to signify the end of the request - + * even if there is no data being written to the request body. + * + * If any error is encountered during the request (be that with DNS resolution, + * TCP level errors, or actual HTTP parse errors) an `'error'` event is emitted + * on the returned request object. As with all `'error'` events, if no listeners + * are registered the error will be thrown. + * + * There are a few special headers that should be noted. + * + * * Sending a 'Connection: keep-alive' will notify Node.js that the connection to + * the server should be persisted until the next request. + * * Sending a 'Content-Length' header will disable the default chunked encoding. + * * Sending an 'Expect' header will immediately send the request headers. + * Usually, when sending 'Expect: 100-continue', both a timeout and a listener + * for the `'continue'` event should be set. See RFC 2616 Section 8.2.3 for more + * information. + * * Sending an Authorization header will override using the `auth` option + * to compute basic authentication. + * + * Example using a `URL` as `options`: + * + * ```js + * const options = new URL('http://abc:xyz@example.com'); + * + * const req = http.request(options, (res) => { + * // ... + * }); + * ``` + * + * In a successful request, the following events will be emitted in the following + * order: + * + * * `'socket'` + * * `'response'` + * * `'data'` any number of times, on the `res` object + * (`'data'` will not be emitted at all if the response body is empty, for + * instance, in most redirects) + * * `'end'` on the `res` object + * * `'close'` + * + * In the case of a connection error, the following events will be emitted: + * + * * `'socket'` + * * `'error'` + * * `'close'` + * + * In the case of a premature connection close before the response is received, + * the following events will be emitted in the following order: + * + * * `'socket'` + * * `'error'` with an error with message `'Error: socket hang up'` and code`'ECONNRESET'` + * * `'close'` + * + * In the case of a premature connection close after the response is received, + * the following events will be emitted in the following order: + * + * * `'socket'` + * * `'response'` + * * `'data'` any number of times, on the `res` object + * * (connection closed here) + * * `'aborted'` on the `res` object + * * `'error'` on the `res` object with an error with message`'Error: aborted'` and code `'ECONNRESET'` + * * `'close'` + * * `'close'` on the `res` object + * + * If `req.destroy()` is called before a socket is assigned, the following + * events will be emitted in the following order: + * + * * (`req.destroy()` called here) + * * `'error'` with an error with message `'Error: socket hang up'` and code`'ECONNRESET'`, or the error with which `req.destroy()` was called + * * `'close'` + * + * If `req.destroy()` is called before the connection succeeds, the following + * events will be emitted in the following order: + * + * * `'socket'` + * * (`req.destroy()` called here) + * * `'error'` with an error with message `'Error: socket hang up'` and code`'ECONNRESET'`, or the error with which `req.destroy()` was called + * * `'close'` + * + * If `req.destroy()` is called after the response is received, the following + * events will be emitted in the following order: + * + * * `'socket'` + * * `'response'` + * * `'data'` any number of times, on the `res` object + * * (`req.destroy()` called here) + * * `'aborted'` on the `res` object + * * `'error'` on the `res` object with an error with message `'Error: aborted'`and code `'ECONNRESET'`, or the error with which `req.destroy()` was called + * * `'close'` + * * `'close'` on the `res` object + * + * If `req.abort()` is called before a socket is assigned, the following + * events will be emitted in the following order: + * + * * (`req.abort()` called here) + * * `'abort'` + * * `'close'` + * + * If `req.abort()` is called before the connection succeeds, the following + * events will be emitted in the following order: + * + * * `'socket'` + * * (`req.abort()` called here) + * * `'abort'` + * * `'error'` with an error with message `'Error: socket hang up'` and code`'ECONNRESET'` + * * `'close'` + * + * If `req.abort()` is called after the response is received, the following + * events will be emitted in the following order: + * + * * `'socket'` + * * `'response'` + * * `'data'` any number of times, on the `res` object + * * (`req.abort()` called here) + * * `'abort'` + * * `'aborted'` on the `res` object + * * `'error'` on the `res` object with an error with message`'Error: aborted'` and code `'ECONNRESET'`. + * * `'close'` + * * `'close'` on the `res` object + * + * Setting the `timeout` option or using the `setTimeout()` function will + * not abort the request or do anything besides add a `'timeout'` event. + * + * Passing an `AbortSignal` and then calling `abort()` on the corresponding`AbortController` will behave the same way as calling `.destroy()` on the + * request. Specifically, the `'error'` event will be emitted with an error with + * the message `'AbortError: The operation was aborted'`, the code `'ABORT_ERR'`and the `cause`, if one was provided. + * @since v0.3.6 + */ + function request(options: RequestOptions | string | URL, callback?: (res: IncomingMessage) => void): ClientRequest; + function request( + url: string | URL, + options: RequestOptions, + callback?: (res: IncomingMessage) => void, + ): ClientRequest; + /** + * Since most requests are GET requests without bodies, Node.js provides this + * convenience method. The only difference between this method and {@link request} is that it sets the method to GET by default and calls `req.end()`automatically. The callback must take care to + * consume the response + * data for reasons stated in {@link ClientRequest} section. + * + * The `callback` is invoked with a single argument that is an instance of {@link IncomingMessage}. + * + * JSON fetching example: + * + * ```js + * http.get('http://localhost:8000/', (res) => { + * const { statusCode } = res; + * const contentType = res.headers['content-type']; + * + * let error; + * // Any 2xx status code signals a successful response but + * // here we're only checking for 200. + * if (statusCode !== 200) { + * error = new Error('Request Failed.\n' + + * `Status Code: ${statusCode}`); + * } else if (!/^application\/json/.test(contentType)) { + * error = new Error('Invalid content-type.\n' + + * `Expected application/json but received ${contentType}`); + * } + * if (error) { + * console.error(error.message); + * // Consume response data to free up memory + * res.resume(); + * return; + * } + * + * res.setEncoding('utf8'); + * let rawData = ''; + * res.on('data', (chunk) => { rawData += chunk; }); + * res.on('end', () => { + * try { + * const parsedData = JSON.parse(rawData); + * console.log(parsedData); + * } catch (e) { + * console.error(e.message); + * } + * }); + * }).on('error', (e) => { + * console.error(`Got error: ${e.message}`); + * }); + * + * // Create a local server to receive data from + * const server = http.createServer((req, res) => { + * res.writeHead(200, { 'Content-Type': 'application/json' }); + * res.end(JSON.stringify({ + * data: 'Hello World!', + * })); + * }); + * + * server.listen(8000); + * ``` + * @since v0.3.6 + * @param options Accepts the same `options` as {@link request}, with the method set to GET by default. + */ + function get(options: RequestOptions | string | URL, callback?: (res: IncomingMessage) => void): ClientRequest; + function get(url: string | URL, options: RequestOptions, callback?: (res: IncomingMessage) => void): ClientRequest; + /** + * Performs the low-level validations on the provided `name` that are done when`res.setHeader(name, value)` is called. + * + * Passing illegal value as `name` will result in a `TypeError` being thrown, + * identified by `code: 'ERR_INVALID_HTTP_TOKEN'`. + * + * It is not necessary to use this method before passing headers to an HTTP request + * or response. The HTTP module will automatically validate such headers. + * Examples: + * + * Example: + * + * ```js + * import { validateHeaderName } from 'node:http'; + * + * try { + * validateHeaderName(''); + * } catch (err) { + * console.error(err instanceof TypeError); // --> true + * console.error(err.code); // --> 'ERR_INVALID_HTTP_TOKEN' + * console.error(err.message); // --> 'Header name must be a valid HTTP token [""]' + * } + * ``` + * @since v14.3.0 + * @param [label='Header name'] Label for error message. + */ + function validateHeaderName(name: string): void; + /** + * Performs the low-level validations on the provided `value` that are done when`res.setHeader(name, value)` is called. + * + * Passing illegal value as `value` will result in a `TypeError` being thrown. + * + * * Undefined value error is identified by `code: 'ERR_HTTP_INVALID_HEADER_VALUE'`. + * * Invalid value character error is identified by `code: 'ERR_INVALID_CHAR'`. + * + * It is not necessary to use this method before passing headers to an HTTP request + * or response. The HTTP module will automatically validate such headers. + * + * Examples: + * + * ```js + * import { validateHeaderValue } from 'node:http'; + * + * try { + * validateHeaderValue('x-my-header', undefined); + * } catch (err) { + * console.error(err instanceof TypeError); // --> true + * console.error(err.code === 'ERR_HTTP_INVALID_HEADER_VALUE'); // --> true + * console.error(err.message); // --> 'Invalid value "undefined" for header "x-my-header"' + * } + * + * try { + * validateHeaderValue('x-my-header', 'oʊmɪɡə'); + * } catch (err) { + * console.error(err instanceof TypeError); // --> true + * console.error(err.code === 'ERR_INVALID_CHAR'); // --> true + * console.error(err.message); // --> 'Invalid character in header content ["x-my-header"]' + * } + * ``` + * @since v14.3.0 + * @param name Header name + * @param value Header value + */ + function validateHeaderValue(name: string, value: string): void; + /** + * Set the maximum number of idle HTTP parsers. + * @since v18.8.0, v16.18.0 + * @param [max=1000] + */ + function setMaxIdleHTTPParsers(max: number): void; + let globalAgent: Agent; + /** + * Read-only property specifying the maximum allowed size of HTTP headers in bytes. + * Defaults to 16KB. Configurable using the `--max-http-header-size` CLI option. + */ + const maxHeaderSize: number; +} +declare module "node:http" { + export * from "http"; +} diff --git a/Url-Shortner/node_modules/@types/node/http2.d.ts b/Url-Shortner/node_modules/@types/node/http2.d.ts new file mode 100644 index 0000000..7f0dd57 --- /dev/null +++ b/Url-Shortner/node_modules/@types/node/http2.d.ts @@ -0,0 +1,2381 @@ +/** + * The `node:http2` module provides an implementation of the [HTTP/2](https://tools.ietf.org/html/rfc7540) protocol. + * It can be accessed using: + * + * ```js + * const http2 = require('node:http2'); + * ``` + * @since v8.4.0 + * @see [source](https://github.com/nodejs/node/blob/v20.2.0/lib/http2.js) + */ +declare module "http2" { + import EventEmitter = require("node:events"); + import * as fs from "node:fs"; + import * as net from "node:net"; + import * as stream from "node:stream"; + import * as tls from "node:tls"; + import * as url from "node:url"; + import { + IncomingHttpHeaders as Http1IncomingHttpHeaders, + IncomingMessage, + OutgoingHttpHeaders, + ServerResponse, + } from "node:http"; + export { OutgoingHttpHeaders } from "node:http"; + export interface IncomingHttpStatusHeader { + ":status"?: number | undefined; + } + export interface IncomingHttpHeaders extends Http1IncomingHttpHeaders { + ":path"?: string | undefined; + ":method"?: string | undefined; + ":authority"?: string | undefined; + ":scheme"?: string | undefined; + } + // Http2Stream + export interface StreamPriorityOptions { + exclusive?: boolean | undefined; + parent?: number | undefined; + weight?: number | undefined; + silent?: boolean | undefined; + } + export interface StreamState { + localWindowSize?: number | undefined; + state?: number | undefined; + localClose?: number | undefined; + remoteClose?: number | undefined; + sumDependencyWeight?: number | undefined; + weight?: number | undefined; + } + export interface ServerStreamResponseOptions { + endStream?: boolean | undefined; + waitForTrailers?: boolean | undefined; + } + export interface StatOptions { + offset: number; + length: number; + } + export interface ServerStreamFileResponseOptions { + statCheck?(stats: fs.Stats, headers: OutgoingHttpHeaders, statOptions: StatOptions): void | boolean; + waitForTrailers?: boolean | undefined; + offset?: number | undefined; + length?: number | undefined; + } + export interface ServerStreamFileResponseOptionsWithError extends ServerStreamFileResponseOptions { + onError?(err: NodeJS.ErrnoException): void; + } + export interface Http2Stream extends stream.Duplex { + /** + * Set to `true` if the `Http2Stream` instance was aborted abnormally. When set, + * the `'aborted'` event will have been emitted. + * @since v8.4.0 + */ + readonly aborted: boolean; + /** + * This property shows the number of characters currently buffered to be written. + * See `net.Socket.bufferSize` for details. + * @since v11.2.0, v10.16.0 + */ + readonly bufferSize: number; + /** + * Set to `true` if the `Http2Stream` instance has been closed. + * @since v9.4.0 + */ + readonly closed: boolean; + /** + * Set to `true` if the `Http2Stream` instance has been destroyed and is no longer + * usable. + * @since v8.4.0 + */ + readonly destroyed: boolean; + /** + * Set to `true` if the `END_STREAM` flag was set in the request or response + * HEADERS frame received, indicating that no additional data should be received + * and the readable side of the `Http2Stream` will be closed. + * @since v10.11.0 + */ + readonly endAfterHeaders: boolean; + /** + * The numeric stream identifier of this `Http2Stream` instance. Set to `undefined`if the stream identifier has not yet been assigned. + * @since v8.4.0 + */ + readonly id?: number | undefined; + /** + * Set to `true` if the `Http2Stream` instance has not yet been assigned a + * numeric stream identifier. + * @since v9.4.0 + */ + readonly pending: boolean; + /** + * Set to the `RST_STREAM` `error code` reported when the `Http2Stream` is + * destroyed after either receiving an `RST_STREAM` frame from the connected peer, + * calling `http2stream.close()`, or `http2stream.destroy()`. Will be`undefined` if the `Http2Stream` has not been closed. + * @since v8.4.0 + */ + readonly rstCode: number; + /** + * An object containing the outbound headers sent for this `Http2Stream`. + * @since v9.5.0 + */ + readonly sentHeaders: OutgoingHttpHeaders; + /** + * An array of objects containing the outbound informational (additional) headers + * sent for this `Http2Stream`. + * @since v9.5.0 + */ + readonly sentInfoHeaders?: OutgoingHttpHeaders[] | undefined; + /** + * An object containing the outbound trailers sent for this `HttpStream`. + * @since v9.5.0 + */ + readonly sentTrailers?: OutgoingHttpHeaders | undefined; + /** + * A reference to the `Http2Session` instance that owns this `Http2Stream`. The + * value will be `undefined` after the `Http2Stream` instance is destroyed. + * @since v8.4.0 + */ + readonly session: Http2Session | undefined; + /** + * Provides miscellaneous information about the current state of the`Http2Stream`. + * + * A current state of this `Http2Stream`. + * @since v8.4.0 + */ + readonly state: StreamState; + /** + * Closes the `Http2Stream` instance by sending an `RST_STREAM` frame to the + * connected HTTP/2 peer. + * @since v8.4.0 + * @param [code=http2.constants.NGHTTP2_NO_ERROR] Unsigned 32-bit integer identifying the error code. + * @param callback An optional function registered to listen for the `'close'` event. + */ + close(code?: number, callback?: () => void): void; + /** + * Updates the priority for this `Http2Stream` instance. + * @since v8.4.0 + */ + priority(options: StreamPriorityOptions): void; + /** + * ```js + * const http2 = require('node:http2'); + * const client = http2.connect('http://example.org:8000'); + * const { NGHTTP2_CANCEL } = http2.constants; + * const req = client.request({ ':path': '/' }); + * + * // Cancel the stream if there's no activity after 5 seconds + * req.setTimeout(5000, () => req.close(NGHTTP2_CANCEL)); + * ``` + * @since v8.4.0 + */ + setTimeout(msecs: number, callback?: () => void): void; + /** + * Sends a trailing `HEADERS` frame to the connected HTTP/2 peer. This method + * will cause the `Http2Stream` to be immediately closed and must only be + * called after the `'wantTrailers'` event has been emitted. When sending a + * request or sending a response, the `options.waitForTrailers` option must be set + * in order to keep the `Http2Stream` open after the final `DATA` frame so that + * trailers can be sent. + * + * ```js + * const http2 = require('node:http2'); + * const server = http2.createServer(); + * server.on('stream', (stream) => { + * stream.respond(undefined, { waitForTrailers: true }); + * stream.on('wantTrailers', () => { + * stream.sendTrailers({ xyz: 'abc' }); + * }); + * stream.end('Hello World'); + * }); + * ``` + * + * The HTTP/1 specification forbids trailers from containing HTTP/2 pseudo-header + * fields (e.g. `':method'`, `':path'`, etc). + * @since v10.0.0 + */ + sendTrailers(headers: OutgoingHttpHeaders): void; + addListener(event: "aborted", listener: () => void): this; + addListener(event: "close", listener: () => void): this; + addListener(event: "data", listener: (chunk: Buffer | string) => void): this; + addListener(event: "drain", listener: () => void): this; + addListener(event: "end", listener: () => void): this; + addListener(event: "error", listener: (err: Error) => void): this; + addListener(event: "finish", listener: () => void): this; + addListener(event: "frameError", listener: (frameType: number, errorCode: number) => void): this; + addListener(event: "pipe", listener: (src: stream.Readable) => void): this; + addListener(event: "unpipe", listener: (src: stream.Readable) => void): this; + addListener(event: "streamClosed", listener: (code: number) => void): this; + addListener(event: "timeout", listener: () => void): this; + addListener(event: "trailers", listener: (trailers: IncomingHttpHeaders, flags: number) => void): this; + addListener(event: "wantTrailers", listener: () => void): this; + addListener(event: string | symbol, listener: (...args: any[]) => void): this; + emit(event: "aborted"): boolean; + emit(event: "close"): boolean; + emit(event: "data", chunk: Buffer | string): boolean; + emit(event: "drain"): boolean; + emit(event: "end"): boolean; + emit(event: "error", err: Error): boolean; + emit(event: "finish"): boolean; + emit(event: "frameError", frameType: number, errorCode: number): boolean; + emit(event: "pipe", src: stream.Readable): boolean; + emit(event: "unpipe", src: stream.Readable): boolean; + emit(event: "streamClosed", code: number): boolean; + emit(event: "timeout"): boolean; + emit(event: "trailers", trailers: IncomingHttpHeaders, flags: number): boolean; + emit(event: "wantTrailers"): boolean; + emit(event: string | symbol, ...args: any[]): boolean; + on(event: "aborted", listener: () => void): this; + on(event: "close", listener: () => void): this; + on(event: "data", listener: (chunk: Buffer | string) => void): this; + on(event: "drain", listener: () => void): this; + on(event: "end", listener: () => void): this; + on(event: "error", listener: (err: Error) => void): this; + on(event: "finish", listener: () => void): this; + on(event: "frameError", listener: (frameType: number, errorCode: number) => void): this; + on(event: "pipe", listener: (src: stream.Readable) => void): this; + on(event: "unpipe", listener: (src: stream.Readable) => void): this; + on(event: "streamClosed", listener: (code: number) => void): this; + on(event: "timeout", listener: () => void): this; + on(event: "trailers", listener: (trailers: IncomingHttpHeaders, flags: number) => void): this; + on(event: "wantTrailers", listener: () => void): this; + on(event: string | symbol, listener: (...args: any[]) => void): this; + once(event: "aborted", listener: () => void): this; + once(event: "close", listener: () => void): this; + once(event: "data", listener: (chunk: Buffer | string) => void): this; + once(event: "drain", listener: () => void): this; + once(event: "end", listener: () => void): this; + once(event: "error", listener: (err: Error) => void): this; + once(event: "finish", listener: () => void): this; + once(event: "frameError", listener: (frameType: number, errorCode: number) => void): this; + once(event: "pipe", listener: (src: stream.Readable) => void): this; + once(event: "unpipe", listener: (src: stream.Readable) => void): this; + once(event: "streamClosed", listener: (code: number) => void): this; + once(event: "timeout", listener: () => void): this; + once(event: "trailers", listener: (trailers: IncomingHttpHeaders, flags: number) => void): this; + once(event: "wantTrailers", listener: () => void): this; + once(event: string | symbol, listener: (...args: any[]) => void): this; + prependListener(event: "aborted", listener: () => void): this; + prependListener(event: "close", listener: () => void): this; + prependListener(event: "data", listener: (chunk: Buffer | string) => void): this; + prependListener(event: "drain", listener: () => void): this; + prependListener(event: "end", listener: () => void): this; + prependListener(event: "error", listener: (err: Error) => void): this; + prependListener(event: "finish", listener: () => void): this; + prependListener(event: "frameError", listener: (frameType: number, errorCode: number) => void): this; + prependListener(event: "pipe", listener: (src: stream.Readable) => void): this; + prependListener(event: "unpipe", listener: (src: stream.Readable) => void): this; + prependListener(event: "streamClosed", listener: (code: number) => void): this; + prependListener(event: "timeout", listener: () => void): this; + prependListener(event: "trailers", listener: (trailers: IncomingHttpHeaders, flags: number) => void): this; + prependListener(event: "wantTrailers", listener: () => void): this; + prependListener(event: string | symbol, listener: (...args: any[]) => void): this; + prependOnceListener(event: "aborted", listener: () => void): this; + prependOnceListener(event: "close", listener: () => void): this; + prependOnceListener(event: "data", listener: (chunk: Buffer | string) => void): this; + prependOnceListener(event: "drain", listener: () => void): this; + prependOnceListener(event: "end", listener: () => void): this; + prependOnceListener(event: "error", listener: (err: Error) => void): this; + prependOnceListener(event: "finish", listener: () => void): this; + prependOnceListener(event: "frameError", listener: (frameType: number, errorCode: number) => void): this; + prependOnceListener(event: "pipe", listener: (src: stream.Readable) => void): this; + prependOnceListener(event: "unpipe", listener: (src: stream.Readable) => void): this; + prependOnceListener(event: "streamClosed", listener: (code: number) => void): this; + prependOnceListener(event: "timeout", listener: () => void): this; + prependOnceListener(event: "trailers", listener: (trailers: IncomingHttpHeaders, flags: number) => void): this; + prependOnceListener(event: "wantTrailers", listener: () => void): this; + prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this; + } + export interface ClientHttp2Stream extends Http2Stream { + addListener(event: "continue", listener: () => {}): this; + addListener( + event: "headers", + listener: (headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void, + ): this; + addListener(event: "push", listener: (headers: IncomingHttpHeaders, flags: number) => void): this; + addListener( + event: "response", + listener: (headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void, + ): this; + addListener(event: string | symbol, listener: (...args: any[]) => void): this; + emit(event: "continue"): boolean; + emit(event: "headers", headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number): boolean; + emit(event: "push", headers: IncomingHttpHeaders, flags: number): boolean; + emit(event: "response", headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number): boolean; + emit(event: string | symbol, ...args: any[]): boolean; + on(event: "continue", listener: () => {}): this; + on( + event: "headers", + listener: (headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void, + ): this; + on(event: "push", listener: (headers: IncomingHttpHeaders, flags: number) => void): this; + on( + event: "response", + listener: (headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void, + ): this; + on(event: string | symbol, listener: (...args: any[]) => void): this; + once(event: "continue", listener: () => {}): this; + once( + event: "headers", + listener: (headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void, + ): this; + once(event: "push", listener: (headers: IncomingHttpHeaders, flags: number) => void): this; + once( + event: "response", + listener: (headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void, + ): this; + once(event: string | symbol, listener: (...args: any[]) => void): this; + prependListener(event: "continue", listener: () => {}): this; + prependListener( + event: "headers", + listener: (headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void, + ): this; + prependListener(event: "push", listener: (headers: IncomingHttpHeaders, flags: number) => void): this; + prependListener( + event: "response", + listener: (headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void, + ): this; + prependListener(event: string | symbol, listener: (...args: any[]) => void): this; + prependOnceListener(event: "continue", listener: () => {}): this; + prependOnceListener( + event: "headers", + listener: (headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void, + ): this; + prependOnceListener(event: "push", listener: (headers: IncomingHttpHeaders, flags: number) => void): this; + prependOnceListener( + event: "response", + listener: (headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void, + ): this; + prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this; + } + export interface ServerHttp2Stream extends Http2Stream { + /** + * True if headers were sent, false otherwise (read-only). + * @since v8.4.0 + */ + readonly headersSent: boolean; + /** + * Read-only property mapped to the `SETTINGS_ENABLE_PUSH` flag of the remote + * client's most recent `SETTINGS` frame. Will be `true` if the remote peer + * accepts push streams, `false` otherwise. Settings are the same for every`Http2Stream` in the same `Http2Session`. + * @since v8.4.0 + */ + readonly pushAllowed: boolean; + /** + * Sends an additional informational `HEADERS` frame to the connected HTTP/2 peer. + * @since v8.4.0 + */ + additionalHeaders(headers: OutgoingHttpHeaders): void; + /** + * Initiates a push stream. The callback is invoked with the new `Http2Stream`instance created for the push stream passed as the second argument, or an`Error` passed as the first argument. + * + * ```js + * const http2 = require('node:http2'); + * const server = http2.createServer(); + * server.on('stream', (stream) => { + * stream.respond({ ':status': 200 }); + * stream.pushStream({ ':path': '/' }, (err, pushStream, headers) => { + * if (err) throw err; + * pushStream.respond({ ':status': 200 }); + * pushStream.end('some pushed data'); + * }); + * stream.end('some data'); + * }); + * ``` + * + * Setting the weight of a push stream is not allowed in the `HEADERS` frame. Pass + * a `weight` value to `http2stream.priority` with the `silent` option set to`true` to enable server-side bandwidth balancing between concurrent streams. + * + * Calling `http2stream.pushStream()` from within a pushed stream is not permitted + * and will throw an error. + * @since v8.4.0 + * @param callback Callback that is called once the push stream has been initiated. + */ + pushStream( + headers: OutgoingHttpHeaders, + callback?: (err: Error | null, pushStream: ServerHttp2Stream, headers: OutgoingHttpHeaders) => void, + ): void; + pushStream( + headers: OutgoingHttpHeaders, + options?: StreamPriorityOptions, + callback?: (err: Error | null, pushStream: ServerHttp2Stream, headers: OutgoingHttpHeaders) => void, + ): void; + /** + * ```js + * const http2 = require('node:http2'); + * const server = http2.createServer(); + * server.on('stream', (stream) => { + * stream.respond({ ':status': 200 }); + * stream.end('some data'); + * }); + * ``` + * + * Initiates a response. When the `options.waitForTrailers` option is set, the`'wantTrailers'` event will be emitted immediately after queuing the last chunk + * of payload data to be sent. The `http2stream.sendTrailers()` method can then be + * used to sent trailing header fields to the peer. + * + * When `options.waitForTrailers` is set, the `Http2Stream` will not automatically + * close when the final `DATA` frame is transmitted. User code must call either`http2stream.sendTrailers()` or `http2stream.close()` to close the`Http2Stream`. + * + * ```js + * const http2 = require('node:http2'); + * const server = http2.createServer(); + * server.on('stream', (stream) => { + * stream.respond({ ':status': 200 }, { waitForTrailers: true }); + * stream.on('wantTrailers', () => { + * stream.sendTrailers({ ABC: 'some value to send' }); + * }); + * stream.end('some data'); + * }); + * ``` + * @since v8.4.0 + */ + respond(headers?: OutgoingHttpHeaders, options?: ServerStreamResponseOptions): void; + /** + * Initiates a response whose data is read from the given file descriptor. No + * validation is performed on the given file descriptor. If an error occurs while + * attempting to read data using the file descriptor, the `Http2Stream` will be + * closed using an `RST_STREAM` frame using the standard `INTERNAL_ERROR` code. + * + * When used, the `Http2Stream` object's `Duplex` interface will be closed + * automatically. + * + * ```js + * const http2 = require('node:http2'); + * const fs = require('node:fs'); + * + * const server = http2.createServer(); + * server.on('stream', (stream) => { + * const fd = fs.openSync('/some/file', 'r'); + * + * const stat = fs.fstatSync(fd); + * const headers = { + * 'content-length': stat.size, + * 'last-modified': stat.mtime.toUTCString(), + * 'content-type': 'text/plain; charset=utf-8', + * }; + * stream.respondWithFD(fd, headers); + * stream.on('close', () => fs.closeSync(fd)); + * }); + * ``` + * + * The optional `options.statCheck` function may be specified to give user code + * an opportunity to set additional content headers based on the `fs.Stat` details + * of the given fd. If the `statCheck` function is provided, the`http2stream.respondWithFD()` method will perform an `fs.fstat()` call to + * collect details on the provided file descriptor. + * + * The `offset` and `length` options may be used to limit the response to a + * specific range subset. This can be used, for instance, to support HTTP Range + * requests. + * + * The file descriptor or `FileHandle` is not closed when the stream is closed, + * so it will need to be closed manually once it is no longer needed. + * Using the same file descriptor concurrently for multiple streams + * is not supported and may result in data loss. Re-using a file descriptor + * after a stream has finished is supported. + * + * When the `options.waitForTrailers` option is set, the `'wantTrailers'` event + * will be emitted immediately after queuing the last chunk of payload data to be + * sent. The `http2stream.sendTrailers()` method can then be used to sent trailing + * header fields to the peer. + * + * When `options.waitForTrailers` is set, the `Http2Stream` will not automatically + * close when the final `DATA` frame is transmitted. User code _must_ call either`http2stream.sendTrailers()` or `http2stream.close()` to close the`Http2Stream`. + * + * ```js + * const http2 = require('node:http2'); + * const fs = require('node:fs'); + * + * const server = http2.createServer(); + * server.on('stream', (stream) => { + * const fd = fs.openSync('/some/file', 'r'); + * + * const stat = fs.fstatSync(fd); + * const headers = { + * 'content-length': stat.size, + * 'last-modified': stat.mtime.toUTCString(), + * 'content-type': 'text/plain; charset=utf-8', + * }; + * stream.respondWithFD(fd, headers, { waitForTrailers: true }); + * stream.on('wantTrailers', () => { + * stream.sendTrailers({ ABC: 'some value to send' }); + * }); + * + * stream.on('close', () => fs.closeSync(fd)); + * }); + * ``` + * @since v8.4.0 + * @param fd A readable file descriptor. + */ + respondWithFD( + fd: number | fs.promises.FileHandle, + headers?: OutgoingHttpHeaders, + options?: ServerStreamFileResponseOptions, + ): void; + /** + * Sends a regular file as the response. The `path` must specify a regular file + * or an `'error'` event will be emitted on the `Http2Stream` object. + * + * When used, the `Http2Stream` object's `Duplex` interface will be closed + * automatically. + * + * The optional `options.statCheck` function may be specified to give user code + * an opportunity to set additional content headers based on the `fs.Stat` details + * of the given file: + * + * If an error occurs while attempting to read the file data, the `Http2Stream`will be closed using an `RST_STREAM` frame using the standard `INTERNAL_ERROR`code. If the `onError` callback is + * defined, then it will be called. Otherwise + * the stream will be destroyed. + * + * Example using a file path: + * + * ```js + * const http2 = require('node:http2'); + * const server = http2.createServer(); + * server.on('stream', (stream) => { + * function statCheck(stat, headers) { + * headers['last-modified'] = stat.mtime.toUTCString(); + * } + * + * function onError(err) { + * // stream.respond() can throw if the stream has been destroyed by + * // the other side. + * try { + * if (err.code === 'ENOENT') { + * stream.respond({ ':status': 404 }); + * } else { + * stream.respond({ ':status': 500 }); + * } + * } catch (err) { + * // Perform actual error handling. + * console.error(err); + * } + * stream.end(); + * } + * + * stream.respondWithFile('/some/file', + * { 'content-type': 'text/plain; charset=utf-8' }, + * { statCheck, onError }); + * }); + * ``` + * + * The `options.statCheck` function may also be used to cancel the send operation + * by returning `false`. For instance, a conditional request may check the stat + * results to determine if the file has been modified to return an appropriate`304` response: + * + * ```js + * const http2 = require('node:http2'); + * const server = http2.createServer(); + * server.on('stream', (stream) => { + * function statCheck(stat, headers) { + * // Check the stat here... + * stream.respond({ ':status': 304 }); + * return false; // Cancel the send operation + * } + * stream.respondWithFile('/some/file', + * { 'content-type': 'text/plain; charset=utf-8' }, + * { statCheck }); + * }); + * ``` + * + * The `content-length` header field will be automatically set. + * + * The `offset` and `length` options may be used to limit the response to a + * specific range subset. This can be used, for instance, to support HTTP Range + * requests. + * + * The `options.onError` function may also be used to handle all the errors + * that could happen before the delivery of the file is initiated. The + * default behavior is to destroy the stream. + * + * When the `options.waitForTrailers` option is set, the `'wantTrailers'` event + * will be emitted immediately after queuing the last chunk of payload data to be + * sent. The `http2stream.sendTrailers()` method can then be used to sent trailing + * header fields to the peer. + * + * When `options.waitForTrailers` is set, the `Http2Stream` will not automatically + * close when the final `DATA` frame is transmitted. User code must call either`http2stream.sendTrailers()` or `http2stream.close()` to close the`Http2Stream`. + * + * ```js + * const http2 = require('node:http2'); + * const server = http2.createServer(); + * server.on('stream', (stream) => { + * stream.respondWithFile('/some/file', + * { 'content-type': 'text/plain; charset=utf-8' }, + * { waitForTrailers: true }); + * stream.on('wantTrailers', () => { + * stream.sendTrailers({ ABC: 'some value to send' }); + * }); + * }); + * ``` + * @since v8.4.0 + */ + respondWithFile( + path: string, + headers?: OutgoingHttpHeaders, + options?: ServerStreamFileResponseOptionsWithError, + ): void; + } + // Http2Session + export interface Settings { + headerTableSize?: number | undefined; + enablePush?: boolean | undefined; + initialWindowSize?: number | undefined; + maxFrameSize?: number | undefined; + maxConcurrentStreams?: number | undefined; + maxHeaderListSize?: number | undefined; + enableConnectProtocol?: boolean | undefined; + } + export interface ClientSessionRequestOptions { + endStream?: boolean | undefined; + exclusive?: boolean | undefined; + parent?: number | undefined; + weight?: number | undefined; + waitForTrailers?: boolean | undefined; + signal?: AbortSignal | undefined; + } + export interface SessionState { + effectiveLocalWindowSize?: number | undefined; + effectiveRecvDataLength?: number | undefined; + nextStreamID?: number | undefined; + localWindowSize?: number | undefined; + lastProcStreamID?: number | undefined; + remoteWindowSize?: number | undefined; + outboundQueueSize?: number | undefined; + deflateDynamicTableSize?: number | undefined; + inflateDynamicTableSize?: number | undefined; + } + export interface Http2Session extends EventEmitter { + /** + * Value will be `undefined` if the `Http2Session` is not yet connected to a + * socket, `h2c` if the `Http2Session` is not connected to a `TLSSocket`, or + * will return the value of the connected `TLSSocket`'s own `alpnProtocol`property. + * @since v9.4.0 + */ + readonly alpnProtocol?: string | undefined; + /** + * Will be `true` if this `Http2Session` instance has been closed, otherwise`false`. + * @since v9.4.0 + */ + readonly closed: boolean; + /** + * Will be `true` if this `Http2Session` instance is still connecting, will be set + * to `false` before emitting `connect` event and/or calling the `http2.connect`callback. + * @since v10.0.0 + */ + readonly connecting: boolean; + /** + * Will be `true` if this `Http2Session` instance has been destroyed and must no + * longer be used, otherwise `false`. + * @since v8.4.0 + */ + readonly destroyed: boolean; + /** + * Value is `undefined` if the `Http2Session` session socket has not yet been + * connected, `true` if the `Http2Session` is connected with a `TLSSocket`, + * and `false` if the `Http2Session` is connected to any other kind of socket + * or stream. + * @since v9.4.0 + */ + readonly encrypted?: boolean | undefined; + /** + * A prototype-less object describing the current local settings of this`Http2Session`. The local settings are local to _this_`Http2Session` instance. + * @since v8.4.0 + */ + readonly localSettings: Settings; + /** + * If the `Http2Session` is connected to a `TLSSocket`, the `originSet` property + * will return an `Array` of origins for which the `Http2Session` may be + * considered authoritative. + * + * The `originSet` property is only available when using a secure TLS connection. + * @since v9.4.0 + */ + readonly originSet?: string[] | undefined; + /** + * Indicates whether the `Http2Session` is currently waiting for acknowledgment of + * a sent `SETTINGS` frame. Will be `true` after calling the`http2session.settings()` method. Will be `false` once all sent `SETTINGS`frames have been acknowledged. + * @since v8.4.0 + */ + readonly pendingSettingsAck: boolean; + /** + * A prototype-less object describing the current remote settings of this`Http2Session`. The remote settings are set by the _connected_ HTTP/2 peer. + * @since v8.4.0 + */ + readonly remoteSettings: Settings; + /** + * Returns a `Proxy` object that acts as a `net.Socket` (or `tls.TLSSocket`) but + * limits available methods to ones safe to use with HTTP/2. + * + * `destroy`, `emit`, `end`, `pause`, `read`, `resume`, and `write` will throw + * an error with code `ERR_HTTP2_NO_SOCKET_MANIPULATION`. See `Http2Session and Sockets` for more information. + * + * `setTimeout` method will be called on this `Http2Session`. + * + * All other interactions will be routed directly to the socket. + * @since v8.4.0 + */ + readonly socket: net.Socket | tls.TLSSocket; + /** + * Provides miscellaneous information about the current state of the`Http2Session`. + * + * An object describing the current status of this `Http2Session`. + * @since v8.4.0 + */ + readonly state: SessionState; + /** + * The `http2session.type` will be equal to`http2.constants.NGHTTP2_SESSION_SERVER` if this `Http2Session` instance is a + * server, and `http2.constants.NGHTTP2_SESSION_CLIENT` if the instance is a + * client. + * @since v8.4.0 + */ + readonly type: number; + /** + * Gracefully closes the `Http2Session`, allowing any existing streams to + * complete on their own and preventing new `Http2Stream` instances from being + * created. Once closed, `http2session.destroy()`_might_ be called if there + * are no open `Http2Stream` instances. + * + * If specified, the `callback` function is registered as a handler for the`'close'` event. + * @since v9.4.0 + */ + close(callback?: () => void): void; + /** + * Immediately terminates the `Http2Session` and the associated `net.Socket` or`tls.TLSSocket`. + * + * Once destroyed, the `Http2Session` will emit the `'close'` event. If `error`is not undefined, an `'error'` event will be emitted immediately before the`'close'` event. + * + * If there are any remaining open `Http2Streams` associated with the`Http2Session`, those will also be destroyed. + * @since v8.4.0 + * @param error An `Error` object if the `Http2Session` is being destroyed due to an error. + * @param code The HTTP/2 error code to send in the final `GOAWAY` frame. If unspecified, and `error` is not undefined, the default is `INTERNAL_ERROR`, otherwise defaults to `NO_ERROR`. + */ + destroy(error?: Error, code?: number): void; + /** + * Transmits a `GOAWAY` frame to the connected peer _without_ shutting down the`Http2Session`. + * @since v9.4.0 + * @param code An HTTP/2 error code + * @param lastStreamID The numeric ID of the last processed `Http2Stream` + * @param opaqueData A `TypedArray` or `DataView` instance containing additional data to be carried within the `GOAWAY` frame. + */ + goaway(code?: number, lastStreamID?: number, opaqueData?: NodeJS.ArrayBufferView): void; + /** + * Sends a `PING` frame to the connected HTTP/2 peer. A `callback` function must + * be provided. The method will return `true` if the `PING` was sent, `false`otherwise. + * + * The maximum number of outstanding (unacknowledged) pings is determined by the`maxOutstandingPings` configuration option. The default maximum is 10. + * + * If provided, the `payload` must be a `Buffer`, `TypedArray`, or `DataView`containing 8 bytes of data that will be transmitted with the `PING` and + * returned with the ping acknowledgment. + * + * The callback will be invoked with three arguments: an error argument that will + * be `null` if the `PING` was successfully acknowledged, a `duration` argument + * that reports the number of milliseconds elapsed since the ping was sent and the + * acknowledgment was received, and a `Buffer` containing the 8-byte `PING`payload. + * + * ```js + * session.ping(Buffer.from('abcdefgh'), (err, duration, payload) => { + * if (!err) { + * console.log(`Ping acknowledged in ${duration} milliseconds`); + * console.log(`With payload '${payload.toString()}'`); + * } + * }); + * ``` + * + * If the `payload` argument is not specified, the default payload will be the + * 64-bit timestamp (little endian) marking the start of the `PING` duration. + * @since v8.9.3 + * @param payload Optional ping payload. + */ + ping(callback: (err: Error | null, duration: number, payload: Buffer) => void): boolean; + ping( + payload: NodeJS.ArrayBufferView, + callback: (err: Error | null, duration: number, payload: Buffer) => void, + ): boolean; + /** + * Calls `ref()` on this `Http2Session`instance's underlying `net.Socket`. + * @since v9.4.0 + */ + ref(): void; + /** + * Sets the local endpoint's window size. + * The `windowSize` is the total window size to set, not + * the delta. + * + * ```js + * const http2 = require('node:http2'); + * + * const server = http2.createServer(); + * const expectedWindowSize = 2 ** 20; + * server.on('connect', (session) => { + * + * // Set local window size to be 2 ** 20 + * session.setLocalWindowSize(expectedWindowSize); + * }); + * ``` + * @since v15.3.0, v14.18.0 + */ + setLocalWindowSize(windowSize: number): void; + /** + * Used to set a callback function that is called when there is no activity on + * the `Http2Session` after `msecs` milliseconds. The given `callback` is + * registered as a listener on the `'timeout'` event. + * @since v8.4.0 + */ + setTimeout(msecs: number, callback?: () => void): void; + /** + * Updates the current local settings for this `Http2Session` and sends a new`SETTINGS` frame to the connected HTTP/2 peer. + * + * Once called, the `http2session.pendingSettingsAck` property will be `true`while the session is waiting for the remote peer to acknowledge the new + * settings. + * + * The new settings will not become effective until the `SETTINGS` acknowledgment + * is received and the `'localSettings'` event is emitted. It is possible to send + * multiple `SETTINGS` frames while acknowledgment is still pending. + * @since v8.4.0 + * @param callback Callback that is called once the session is connected or right away if the session is already connected. + */ + settings( + settings: Settings, + callback?: (err: Error | null, settings: Settings, duration: number) => void, + ): void; + /** + * Calls `unref()` on this `Http2Session`instance's underlying `net.Socket`. + * @since v9.4.0 + */ + unref(): void; + addListener(event: "close", listener: () => void): this; + addListener(event: "error", listener: (err: Error) => void): this; + addListener( + event: "frameError", + listener: (frameType: number, errorCode: number, streamID: number) => void, + ): this; + addListener( + event: "goaway", + listener: (errorCode: number, lastStreamID: number, opaqueData: Buffer) => void, + ): this; + addListener(event: "localSettings", listener: (settings: Settings) => void): this; + addListener(event: "ping", listener: () => void): this; + addListener(event: "remoteSettings", listener: (settings: Settings) => void): this; + addListener(event: "timeout", listener: () => void): this; + addListener(event: string | symbol, listener: (...args: any[]) => void): this; + emit(event: "close"): boolean; + emit(event: "error", err: Error): boolean; + emit(event: "frameError", frameType: number, errorCode: number, streamID: number): boolean; + emit(event: "goaway", errorCode: number, lastStreamID: number, opaqueData: Buffer): boolean; + emit(event: "localSettings", settings: Settings): boolean; + emit(event: "ping"): boolean; + emit(event: "remoteSettings", settings: Settings): boolean; + emit(event: "timeout"): boolean; + emit(event: string | symbol, ...args: any[]): boolean; + on(event: "close", listener: () => void): this; + on(event: "error", listener: (err: Error) => void): this; + on(event: "frameError", listener: (frameType: number, errorCode: number, streamID: number) => void): this; + on(event: "goaway", listener: (errorCode: number, lastStreamID: number, opaqueData: Buffer) => void): this; + on(event: "localSettings", listener: (settings: Settings) => void): this; + on(event: "ping", listener: () => void): this; + on(event: "remoteSettings", listener: (settings: Settings) => void): this; + on(event: "timeout", listener: () => void): this; + on(event: string | symbol, listener: (...args: any[]) => void): this; + once(event: "close", listener: () => void): this; + once(event: "error", listener: (err: Error) => void): this; + once(event: "frameError", listener: (frameType: number, errorCode: number, streamID: number) => void): this; + once(event: "goaway", listener: (errorCode: number, lastStreamID: number, opaqueData: Buffer) => void): this; + once(event: "localSettings", listener: (settings: Settings) => void): this; + once(event: "ping", listener: () => void): this; + once(event: "remoteSettings", listener: (settings: Settings) => void): this; + once(event: "timeout", listener: () => void): this; + once(event: string | symbol, listener: (...args: any[]) => void): this; + prependListener(event: "close", listener: () => void): this; + prependListener(event: "error", listener: (err: Error) => void): this; + prependListener( + event: "frameError", + listener: (frameType: number, errorCode: number, streamID: number) => void, + ): this; + prependListener( + event: "goaway", + listener: (errorCode: number, lastStreamID: number, opaqueData: Buffer) => void, + ): this; + prependListener(event: "localSettings", listener: (settings: Settings) => void): this; + prependListener(event: "ping", listener: () => void): this; + prependListener(event: "remoteSettings", listener: (settings: Settings) => void): this; + prependListener(event: "timeout", listener: () => void): this; + prependListener(event: string | symbol, listener: (...args: any[]) => void): this; + prependOnceListener(event: "close", listener: () => void): this; + prependOnceListener(event: "error", listener: (err: Error) => void): this; + prependOnceListener( + event: "frameError", + listener: (frameType: number, errorCode: number, streamID: number) => void, + ): this; + prependOnceListener( + event: "goaway", + listener: (errorCode: number, lastStreamID: number, opaqueData: Buffer) => void, + ): this; + prependOnceListener(event: "localSettings", listener: (settings: Settings) => void): this; + prependOnceListener(event: "ping", listener: () => void): this; + prependOnceListener(event: "remoteSettings", listener: (settings: Settings) => void): this; + prependOnceListener(event: "timeout", listener: () => void): this; + prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this; + } + export interface ClientHttp2Session extends Http2Session { + /** + * For HTTP/2 Client `Http2Session` instances only, the `http2session.request()`creates and returns an `Http2Stream` instance that can be used to send an + * HTTP/2 request to the connected server. + * + * When a `ClientHttp2Session` is first created, the socket may not yet be + * connected. if `clienthttp2session.request()` is called during this time, the + * actual request will be deferred until the socket is ready to go. + * If the `session` is closed before the actual request be executed, an`ERR_HTTP2_GOAWAY_SESSION` is thrown. + * + * This method is only available if `http2session.type` is equal to`http2.constants.NGHTTP2_SESSION_CLIENT`. + * + * ```js + * const http2 = require('node:http2'); + * const clientSession = http2.connect('https://localhost:1234'); + * const { + * HTTP2_HEADER_PATH, + * HTTP2_HEADER_STATUS, + * } = http2.constants; + * + * const req = clientSession.request({ [HTTP2_HEADER_PATH]: '/' }); + * req.on('response', (headers) => { + * console.log(headers[HTTP2_HEADER_STATUS]); + * req.on('data', (chunk) => { // .. }); + * req.on('end', () => { // .. }); + * }); + * ``` + * + * When the `options.waitForTrailers` option is set, the `'wantTrailers'` event + * is emitted immediately after queuing the last chunk of payload data to be sent. + * The `http2stream.sendTrailers()` method can then be called to send trailing + * headers to the peer. + * + * When `options.waitForTrailers` is set, the `Http2Stream` will not automatically + * close when the final `DATA` frame is transmitted. User code must call either`http2stream.sendTrailers()` or `http2stream.close()` to close the`Http2Stream`. + * + * When `options.signal` is set with an `AbortSignal` and then `abort` on the + * corresponding `AbortController` is called, the request will emit an `'error'`event with an `AbortError` error. + * + * The `:method` and `:path` pseudo-headers are not specified within `headers`, + * they respectively default to: + * + * * `:method` \= `'GET'` + * * `:path` \= `/` + * @since v8.4.0 + */ + request(headers?: OutgoingHttpHeaders, options?: ClientSessionRequestOptions): ClientHttp2Stream; + addListener(event: "altsvc", listener: (alt: string, origin: string, stream: number) => void): this; + addListener(event: "origin", listener: (origins: string[]) => void): this; + addListener( + event: "connect", + listener: (session: ClientHttp2Session, socket: net.Socket | tls.TLSSocket) => void, + ): this; + addListener( + event: "stream", + listener: ( + stream: ClientHttp2Stream, + headers: IncomingHttpHeaders & IncomingHttpStatusHeader, + flags: number, + ) => void, + ): this; + addListener(event: string | symbol, listener: (...args: any[]) => void): this; + emit(event: "altsvc", alt: string, origin: string, stream: number): boolean; + emit(event: "origin", origins: ReadonlyArray): boolean; + emit(event: "connect", session: ClientHttp2Session, socket: net.Socket | tls.TLSSocket): boolean; + emit( + event: "stream", + stream: ClientHttp2Stream, + headers: IncomingHttpHeaders & IncomingHttpStatusHeader, + flags: number, + ): boolean; + emit(event: string | symbol, ...args: any[]): boolean; + on(event: "altsvc", listener: (alt: string, origin: string, stream: number) => void): this; + on(event: "origin", listener: (origins: string[]) => void): this; + on(event: "connect", listener: (session: ClientHttp2Session, socket: net.Socket | tls.TLSSocket) => void): this; + on( + event: "stream", + listener: ( + stream: ClientHttp2Stream, + headers: IncomingHttpHeaders & IncomingHttpStatusHeader, + flags: number, + ) => void, + ): this; + on(event: string | symbol, listener: (...args: any[]) => void): this; + once(event: "altsvc", listener: (alt: string, origin: string, stream: number) => void): this; + once(event: "origin", listener: (origins: string[]) => void): this; + once( + event: "connect", + listener: (session: ClientHttp2Session, socket: net.Socket | tls.TLSSocket) => void, + ): this; + once( + event: "stream", + listener: ( + stream: ClientHttp2Stream, + headers: IncomingHttpHeaders & IncomingHttpStatusHeader, + flags: number, + ) => void, + ): this; + once(event: string | symbol, listener: (...args: any[]) => void): this; + prependListener(event: "altsvc", listener: (alt: string, origin: string, stream: number) => void): this; + prependListener(event: "origin", listener: (origins: string[]) => void): this; + prependListener( + event: "connect", + listener: (session: ClientHttp2Session, socket: net.Socket | tls.TLSSocket) => void, + ): this; + prependListener( + event: "stream", + listener: ( + stream: ClientHttp2Stream, + headers: IncomingHttpHeaders & IncomingHttpStatusHeader, + flags: number, + ) => void, + ): this; + prependListener(event: string | symbol, listener: (...args: any[]) => void): this; + prependOnceListener(event: "altsvc", listener: (alt: string, origin: string, stream: number) => void): this; + prependOnceListener(event: "origin", listener: (origins: string[]) => void): this; + prependOnceListener( + event: "connect", + listener: (session: ClientHttp2Session, socket: net.Socket | tls.TLSSocket) => void, + ): this; + prependOnceListener( + event: "stream", + listener: ( + stream: ClientHttp2Stream, + headers: IncomingHttpHeaders & IncomingHttpStatusHeader, + flags: number, + ) => void, + ): this; + prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this; + } + export interface AlternativeServiceOptions { + origin: number | string | url.URL; + } + export interface ServerHttp2Session extends Http2Session { + readonly server: Http2Server | Http2SecureServer; + /** + * Submits an `ALTSVC` frame (as defined by [RFC 7838](https://tools.ietf.org/html/rfc7838)) to the connected client. + * + * ```js + * const http2 = require('node:http2'); + * + * const server = http2.createServer(); + * server.on('session', (session) => { + * // Set altsvc for origin https://example.org:80 + * session.altsvc('h2=":8000"', 'https://example.org:80'); + * }); + * + * server.on('stream', (stream) => { + * // Set altsvc for a specific stream + * stream.session.altsvc('h2=":8000"', stream.id); + * }); + * ``` + * + * Sending an `ALTSVC` frame with a specific stream ID indicates that the alternate + * service is associated with the origin of the given `Http2Stream`. + * + * The `alt` and origin string _must_ contain only ASCII bytes and are + * strictly interpreted as a sequence of ASCII bytes. The special value `'clear'`may be passed to clear any previously set alternative service for a given + * domain. + * + * When a string is passed for the `originOrStream` argument, it will be parsed as + * a URL and the origin will be derived. For instance, the origin for the + * HTTP URL `'https://example.org/foo/bar'` is the ASCII string`'https://example.org'`. An error will be thrown if either the given string + * cannot be parsed as a URL or if a valid origin cannot be derived. + * + * A `URL` object, or any object with an `origin` property, may be passed as`originOrStream`, in which case the value of the `origin` property will be + * used. The value of the `origin` property _must_ be a properly serialized + * ASCII origin. + * @since v9.4.0 + * @param alt A description of the alternative service configuration as defined by `RFC 7838`. + * @param originOrStream Either a URL string specifying the origin (or an `Object` with an `origin` property) or the numeric identifier of an active `Http2Stream` as given by the + * `http2stream.id` property. + */ + altsvc(alt: string, originOrStream: number | string | url.URL | AlternativeServiceOptions): void; + /** + * Submits an `ORIGIN` frame (as defined by [RFC 8336](https://tools.ietf.org/html/rfc8336)) to the connected client + * to advertise the set of origins for which the server is capable of providing + * authoritative responses. + * + * ```js + * const http2 = require('node:http2'); + * const options = getSecureOptionsSomehow(); + * const server = http2.createSecureServer(options); + * server.on('stream', (stream) => { + * stream.respond(); + * stream.end('ok'); + * }); + * server.on('session', (session) => { + * session.origin('https://example.com', 'https://example.org'); + * }); + * ``` + * + * When a string is passed as an `origin`, it will be parsed as a URL and the + * origin will be derived. For instance, the origin for the HTTP URL`'https://example.org/foo/bar'` is the ASCII string`'https://example.org'`. An error will be thrown if either the given + * string + * cannot be parsed as a URL or if a valid origin cannot be derived. + * + * A `URL` object, or any object with an `origin` property, may be passed as + * an `origin`, in which case the value of the `origin` property will be + * used. The value of the `origin` property _must_ be a properly serialized + * ASCII origin. + * + * Alternatively, the `origins` option may be used when creating a new HTTP/2 + * server using the `http2.createSecureServer()` method: + * + * ```js + * const http2 = require('node:http2'); + * const options = getSecureOptionsSomehow(); + * options.origins = ['https://example.com', 'https://example.org']; + * const server = http2.createSecureServer(options); + * server.on('stream', (stream) => { + * stream.respond(); + * stream.end('ok'); + * }); + * ``` + * @since v10.12.0 + * @param origins One or more URL Strings passed as separate arguments. + */ + origin( + ...origins: Array< + | string + | url.URL + | { + origin: string; + } + > + ): void; + addListener( + event: "connect", + listener: (session: ServerHttp2Session, socket: net.Socket | tls.TLSSocket) => void, + ): this; + addListener( + event: "stream", + listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void, + ): this; + addListener(event: string | symbol, listener: (...args: any[]) => void): this; + emit(event: "connect", session: ServerHttp2Session, socket: net.Socket | tls.TLSSocket): boolean; + emit(event: "stream", stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number): boolean; + emit(event: string | symbol, ...args: any[]): boolean; + on(event: "connect", listener: (session: ServerHttp2Session, socket: net.Socket | tls.TLSSocket) => void): this; + on( + event: "stream", + listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void, + ): this; + on(event: string | symbol, listener: (...args: any[]) => void): this; + once( + event: "connect", + listener: (session: ServerHttp2Session, socket: net.Socket | tls.TLSSocket) => void, + ): this; + once( + event: "stream", + listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void, + ): this; + once(event: string | symbol, listener: (...args: any[]) => void): this; + prependListener( + event: "connect", + listener: (session: ServerHttp2Session, socket: net.Socket | tls.TLSSocket) => void, + ): this; + prependListener( + event: "stream", + listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void, + ): this; + prependListener(event: string | symbol, listener: (...args: any[]) => void): this; + prependOnceListener( + event: "connect", + listener: (session: ServerHttp2Session, socket: net.Socket | tls.TLSSocket) => void, + ): this; + prependOnceListener( + event: "stream", + listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void, + ): this; + prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this; + } + // Http2Server + export interface SessionOptions { + maxDeflateDynamicTableSize?: number | undefined; + maxSessionMemory?: number | undefined; + maxHeaderListPairs?: number | undefined; + maxOutstandingPings?: number | undefined; + maxSendHeaderBlockLength?: number | undefined; + paddingStrategy?: number | undefined; + peerMaxConcurrentStreams?: number | undefined; + settings?: Settings | undefined; + /** + * Specifies a timeout in milliseconds that + * a server should wait when an [`'unknownProtocol'`][] is emitted. If the + * socket has not been destroyed by that time the server will destroy it. + * @default 100000 + */ + unknownProtocolTimeout?: number | undefined; + selectPadding?(frameLen: number, maxFrameLen: number): number; + } + export interface ClientSessionOptions extends SessionOptions { + maxReservedRemoteStreams?: number | undefined; + createConnection?: ((authority: url.URL, option: SessionOptions) => stream.Duplex) | undefined; + protocol?: "http:" | "https:" | undefined; + } + export interface ServerSessionOptions extends SessionOptions { + Http1IncomingMessage?: typeof IncomingMessage | undefined; + Http1ServerResponse?: typeof ServerResponse | undefined; + Http2ServerRequest?: typeof Http2ServerRequest | undefined; + Http2ServerResponse?: typeof Http2ServerResponse | undefined; + } + export interface SecureClientSessionOptions extends ClientSessionOptions, tls.ConnectionOptions {} + export interface SecureServerSessionOptions extends ServerSessionOptions, tls.TlsOptions {} + export interface ServerOptions extends ServerSessionOptions {} + export interface SecureServerOptions extends SecureServerSessionOptions { + allowHTTP1?: boolean | undefined; + origins?: string[] | undefined; + } + interface HTTP2ServerCommon { + setTimeout(msec?: number, callback?: () => void): this; + /** + * Throws ERR_HTTP2_INVALID_SETTING_VALUE for invalid settings values. + * Throws ERR_INVALID_ARG_TYPE for invalid settings argument. + */ + updateSettings(settings: Settings): void; + } + export interface Http2Server extends net.Server, HTTP2ServerCommon { + addListener( + event: "checkContinue", + listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void, + ): this; + addListener( + event: "request", + listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void, + ): this; + addListener(event: "session", listener: (session: ServerHttp2Session) => void): this; + addListener(event: "sessionError", listener: (err: Error) => void): this; + addListener( + event: "stream", + listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void, + ): this; + addListener(event: "timeout", listener: () => void): this; + addListener(event: string | symbol, listener: (...args: any[]) => void): this; + emit(event: "checkContinue", request: Http2ServerRequest, response: Http2ServerResponse): boolean; + emit(event: "request", request: Http2ServerRequest, response: Http2ServerResponse): boolean; + emit(event: "session", session: ServerHttp2Session): boolean; + emit(event: "sessionError", err: Error): boolean; + emit(event: "stream", stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number): boolean; + emit(event: "timeout"): boolean; + emit(event: string | symbol, ...args: any[]): boolean; + on( + event: "checkContinue", + listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void, + ): this; + on(event: "request", listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this; + on(event: "session", listener: (session: ServerHttp2Session) => void): this; + on(event: "sessionError", listener: (err: Error) => void): this; + on( + event: "stream", + listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void, + ): this; + on(event: "timeout", listener: () => void): this; + on(event: string | symbol, listener: (...args: any[]) => void): this; + once( + event: "checkContinue", + listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void, + ): this; + once(event: "request", listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this; + once(event: "session", listener: (session: ServerHttp2Session) => void): this; + once(event: "sessionError", listener: (err: Error) => void): this; + once( + event: "stream", + listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void, + ): this; + once(event: "timeout", listener: () => void): this; + once(event: string | symbol, listener: (...args: any[]) => void): this; + prependListener( + event: "checkContinue", + listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void, + ): this; + prependListener( + event: "request", + listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void, + ): this; + prependListener(event: "session", listener: (session: ServerHttp2Session) => void): this; + prependListener(event: "sessionError", listener: (err: Error) => void): this; + prependListener( + event: "stream", + listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void, + ): this; + prependListener(event: "timeout", listener: () => void): this; + prependListener(event: string | symbol, listener: (...args: any[]) => void): this; + prependOnceListener( + event: "checkContinue", + listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void, + ): this; + prependOnceListener( + event: "request", + listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void, + ): this; + prependOnceListener(event: "session", listener: (session: ServerHttp2Session) => void): this; + prependOnceListener(event: "sessionError", listener: (err: Error) => void): this; + prependOnceListener( + event: "stream", + listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void, + ): this; + prependOnceListener(event: "timeout", listener: () => void): this; + prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this; + } + export interface Http2SecureServer extends tls.Server, HTTP2ServerCommon { + addListener( + event: "checkContinue", + listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void, + ): this; + addListener( + event: "request", + listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void, + ): this; + addListener(event: "session", listener: (session: ServerHttp2Session) => void): this; + addListener(event: "sessionError", listener: (err: Error) => void): this; + addListener( + event: "stream", + listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void, + ): this; + addListener(event: "timeout", listener: () => void): this; + addListener(event: "unknownProtocol", listener: (socket: tls.TLSSocket) => void): this; + addListener(event: string | symbol, listener: (...args: any[]) => void): this; + emit(event: "checkContinue", request: Http2ServerRequest, response: Http2ServerResponse): boolean; + emit(event: "request", request: Http2ServerRequest, response: Http2ServerResponse): boolean; + emit(event: "session", session: ServerHttp2Session): boolean; + emit(event: "sessionError", err: Error): boolean; + emit(event: "stream", stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number): boolean; + emit(event: "timeout"): boolean; + emit(event: "unknownProtocol", socket: tls.TLSSocket): boolean; + emit(event: string | symbol, ...args: any[]): boolean; + on( + event: "checkContinue", + listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void, + ): this; + on(event: "request", listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this; + on(event: "session", listener: (session: ServerHttp2Session) => void): this; + on(event: "sessionError", listener: (err: Error) => void): this; + on( + event: "stream", + listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void, + ): this; + on(event: "timeout", listener: () => void): this; + on(event: "unknownProtocol", listener: (socket: tls.TLSSocket) => void): this; + on(event: string | symbol, listener: (...args: any[]) => void): this; + once( + event: "checkContinue", + listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void, + ): this; + once(event: "request", listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this; + once(event: "session", listener: (session: ServerHttp2Session) => void): this; + once(event: "sessionError", listener: (err: Error) => void): this; + once( + event: "stream", + listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void, + ): this; + once(event: "timeout", listener: () => void): this; + once(event: "unknownProtocol", listener: (socket: tls.TLSSocket) => void): this; + once(event: string | symbol, listener: (...args: any[]) => void): this; + prependListener( + event: "checkContinue", + listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void, + ): this; + prependListener( + event: "request", + listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void, + ): this; + prependListener(event: "session", listener: (session: ServerHttp2Session) => void): this; + prependListener(event: "sessionError", listener: (err: Error) => void): this; + prependListener( + event: "stream", + listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void, + ): this; + prependListener(event: "timeout", listener: () => void): this; + prependListener(event: "unknownProtocol", listener: (socket: tls.TLSSocket) => void): this; + prependListener(event: string | symbol, listener: (...args: any[]) => void): this; + prependOnceListener( + event: "checkContinue", + listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void, + ): this; + prependOnceListener( + event: "request", + listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void, + ): this; + prependOnceListener(event: "session", listener: (session: ServerHttp2Session) => void): this; + prependOnceListener(event: "sessionError", listener: (err: Error) => void): this; + prependOnceListener( + event: "stream", + listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void, + ): this; + prependOnceListener(event: "timeout", listener: () => void): this; + prependOnceListener(event: "unknownProtocol", listener: (socket: tls.TLSSocket) => void): this; + prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this; + } + /** + * A `Http2ServerRequest` object is created by {@link Server} or {@link SecureServer} and passed as the first argument to the `'request'` event. It may be used to access a request status, + * headers, and + * data. + * @since v8.4.0 + */ + export class Http2ServerRequest extends stream.Readable { + constructor( + stream: ServerHttp2Stream, + headers: IncomingHttpHeaders, + options: stream.ReadableOptions, + rawHeaders: ReadonlyArray, + ); + /** + * The `request.aborted` property will be `true` if the request has + * been aborted. + * @since v10.1.0 + */ + readonly aborted: boolean; + /** + * The request authority pseudo header field. Because HTTP/2 allows requests + * to set either `:authority` or `host`, this value is derived from`req.headers[':authority']` if present. Otherwise, it is derived from`req.headers['host']`. + * @since v8.4.0 + */ + readonly authority: string; + /** + * See `request.socket`. + * @since v8.4.0 + * @deprecated Since v13.0.0 - Use `socket`. + */ + readonly connection: net.Socket | tls.TLSSocket; + /** + * The `request.complete` property will be `true` if the request has + * been completed, aborted, or destroyed. + * @since v12.10.0 + */ + readonly complete: boolean; + /** + * The request/response headers object. + * + * Key-value pairs of header names and values. Header names are lower-cased. + * + * ```js + * // Prints something like: + * // + * // { 'user-agent': 'curl/7.22.0', + * // host: '127.0.0.1:8000', + * // accept: '*' } + * console.log(request.headers); + * ``` + * + * See `HTTP/2 Headers Object`. + * + * In HTTP/2, the request path, host name, protocol, and method are represented as + * special headers prefixed with the `:` character (e.g. `':path'`). These special + * headers will be included in the `request.headers` object. Care must be taken not + * to inadvertently modify these special headers or errors may occur. For instance, + * removing all headers from the request will cause errors to occur: + * + * ```js + * removeAllHeaders(request.headers); + * assert(request.url); // Fails because the :path header has been removed + * ``` + * @since v8.4.0 + */ + readonly headers: IncomingHttpHeaders; + /** + * In case of server request, the HTTP version sent by the client. In the case of + * client response, the HTTP version of the connected-to server. Returns`'2.0'`. + * + * Also `message.httpVersionMajor` is the first integer and`message.httpVersionMinor` is the second. + * @since v8.4.0 + */ + readonly httpVersion: string; + readonly httpVersionMinor: number; + readonly httpVersionMajor: number; + /** + * The request method as a string. Read-only. Examples: `'GET'`, `'DELETE'`. + * @since v8.4.0 + */ + readonly method: string; + /** + * The raw request/response headers list exactly as they were received. + * + * The keys and values are in the same list. It is _not_ a + * list of tuples. So, the even-numbered offsets are key values, and the + * odd-numbered offsets are the associated values. + * + * Header names are not lowercased, and duplicates are not merged. + * + * ```js + * // Prints something like: + * // + * // [ 'user-agent', + * // 'this is invalid because there can be only one', + * // 'User-Agent', + * // 'curl/7.22.0', + * // 'Host', + * // '127.0.0.1:8000', + * // 'ACCEPT', + * // '*' ] + * console.log(request.rawHeaders); + * ``` + * @since v8.4.0 + */ + readonly rawHeaders: string[]; + /** + * The raw request/response trailer keys and values exactly as they were + * received. Only populated at the `'end'` event. + * @since v8.4.0 + */ + readonly rawTrailers: string[]; + /** + * The request scheme pseudo header field indicating the scheme + * portion of the target URL. + * @since v8.4.0 + */ + readonly scheme: string; + /** + * Returns a `Proxy` object that acts as a `net.Socket` (or `tls.TLSSocket`) but + * applies getters, setters, and methods based on HTTP/2 logic. + * + * `destroyed`, `readable`, and `writable` properties will be retrieved from and + * set on `request.stream`. + * + * `destroy`, `emit`, `end`, `on` and `once` methods will be called on`request.stream`. + * + * `setTimeout` method will be called on `request.stream.session`. + * + * `pause`, `read`, `resume`, and `write` will throw an error with code`ERR_HTTP2_NO_SOCKET_MANIPULATION`. See `Http2Session and Sockets` for + * more information. + * + * All other interactions will be routed directly to the socket. With TLS support, + * use `request.socket.getPeerCertificate()` to obtain the client's + * authentication details. + * @since v8.4.0 + */ + readonly socket: net.Socket | tls.TLSSocket; + /** + * The `Http2Stream` object backing the request. + * @since v8.4.0 + */ + readonly stream: ServerHttp2Stream; + /** + * The request/response trailers object. Only populated at the `'end'` event. + * @since v8.4.0 + */ + readonly trailers: IncomingHttpHeaders; + /** + * Request URL string. This contains only the URL that is present in the actual + * HTTP request. If the request is: + * + * ```http + * GET /status?name=ryan HTTP/1.1 + * Accept: text/plain + * ``` + * + * Then `request.url` will be: + * + * ```js + * '/status?name=ryan' + * ``` + * + * To parse the url into its parts, `new URL()` can be used: + * + * ```console + * $ node + * > new URL('/status?name=ryan', 'http://example.com') + * URL { + * href: 'http://example.com/status?name=ryan', + * origin: 'http://example.com', + * protocol: 'http:', + * username: '', + * password: '', + * host: 'example.com', + * hostname: 'example.com', + * port: '', + * pathname: '/status', + * search: '?name=ryan', + * searchParams: URLSearchParams { 'name' => 'ryan' }, + * hash: '' + * } + * ``` + * @since v8.4.0 + */ + url: string; + /** + * Sets the `Http2Stream`'s timeout value to `msecs`. If a callback is + * provided, then it is added as a listener on the `'timeout'` event on + * the response object. + * + * If no `'timeout'` listener is added to the request, the response, or + * the server, then `Http2Stream` s are destroyed when they time out. If a + * handler is assigned to the request, the response, or the server's `'timeout'`events, timed out sockets must be handled explicitly. + * @since v8.4.0 + */ + setTimeout(msecs: number, callback?: () => void): void; + read(size?: number): Buffer | string | null; + addListener(event: "aborted", listener: (hadError: boolean, code: number) => void): this; + addListener(event: "close", listener: () => void): this; + addListener(event: "data", listener: (chunk: Buffer | string) => void): this; + addListener(event: "end", listener: () => void): this; + addListener(event: "readable", listener: () => void): this; + addListener(event: "error", listener: (err: Error) => void): this; + addListener(event: string | symbol, listener: (...args: any[]) => void): this; + emit(event: "aborted", hadError: boolean, code: number): boolean; + emit(event: "close"): boolean; + emit(event: "data", chunk: Buffer | string): boolean; + emit(event: "end"): boolean; + emit(event: "readable"): boolean; + emit(event: "error", err: Error): boolean; + emit(event: string | symbol, ...args: any[]): boolean; + on(event: "aborted", listener: (hadError: boolean, code: number) => void): this; + on(event: "close", listener: () => void): this; + on(event: "data", listener: (chunk: Buffer | string) => void): this; + on(event: "end", listener: () => void): this; + on(event: "readable", listener: () => void): this; + on(event: "error", listener: (err: Error) => void): this; + on(event: string | symbol, listener: (...args: any[]) => void): this; + once(event: "aborted", listener: (hadError: boolean, code: number) => void): this; + once(event: "close", listener: () => void): this; + once(event: "data", listener: (chunk: Buffer | string) => void): this; + once(event: "end", listener: () => void): this; + once(event: "readable", listener: () => void): this; + once(event: "error", listener: (err: Error) => void): this; + once(event: string | symbol, listener: (...args: any[]) => void): this; + prependListener(event: "aborted", listener: (hadError: boolean, code: number) => void): this; + prependListener(event: "close", listener: () => void): this; + prependListener(event: "data", listener: (chunk: Buffer | string) => void): this; + prependListener(event: "end", listener: () => void): this; + prependListener(event: "readable", listener: () => void): this; + prependListener(event: "error", listener: (err: Error) => void): this; + prependListener(event: string | symbol, listener: (...args: any[]) => void): this; + prependOnceListener(event: "aborted", listener: (hadError: boolean, code: number) => void): this; + prependOnceListener(event: "close", listener: () => void): this; + prependOnceListener(event: "data", listener: (chunk: Buffer | string) => void): this; + prependOnceListener(event: "end", listener: () => void): this; + prependOnceListener(event: "readable", listener: () => void): this; + prependOnceListener(event: "error", listener: (err: Error) => void): this; + prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this; + } + /** + * This object is created internally by an HTTP server, not by the user. It is + * passed as the second parameter to the `'request'` event. + * @since v8.4.0 + */ + export class Http2ServerResponse extends stream.Writable { + constructor(stream: ServerHttp2Stream); + /** + * See `response.socket`. + * @since v8.4.0 + * @deprecated Since v13.0.0 - Use `socket`. + */ + readonly connection: net.Socket | tls.TLSSocket; + /** + * Boolean value that indicates whether the response has completed. Starts + * as `false`. After `response.end()` executes, the value will be `true`. + * @since v8.4.0 + * @deprecated Since v13.4.0,v12.16.0 - Use `writableEnded`. + */ + readonly finished: boolean; + /** + * True if headers were sent, false otherwise (read-only). + * @since v8.4.0 + */ + readonly headersSent: boolean; + /** + * A reference to the original HTTP2 `request` object. + * @since v15.7.0 + */ + readonly req: Http2ServerRequest; + /** + * Returns a `Proxy` object that acts as a `net.Socket` (or `tls.TLSSocket`) but + * applies getters, setters, and methods based on HTTP/2 logic. + * + * `destroyed`, `readable`, and `writable` properties will be retrieved from and + * set on `response.stream`. + * + * `destroy`, `emit`, `end`, `on` and `once` methods will be called on`response.stream`. + * + * `setTimeout` method will be called on `response.stream.session`. + * + * `pause`, `read`, `resume`, and `write` will throw an error with code`ERR_HTTP2_NO_SOCKET_MANIPULATION`. See `Http2Session and Sockets` for + * more information. + * + * All other interactions will be routed directly to the socket. + * + * ```js + * const http2 = require('node:http2'); + * const server = http2.createServer((req, res) => { + * const ip = req.socket.remoteAddress; + * const port = req.socket.remotePort; + * res.end(`Your IP address is ${ip} and your source port is ${port}.`); + * }).listen(3000); + * ``` + * @since v8.4.0 + */ + readonly socket: net.Socket | tls.TLSSocket; + /** + * The `Http2Stream` object backing the response. + * @since v8.4.0 + */ + readonly stream: ServerHttp2Stream; + /** + * When true, the Date header will be automatically generated and sent in + * the response if it is not already present in the headers. Defaults to true. + * + * This should only be disabled for testing; HTTP requires the Date header + * in responses. + * @since v8.4.0 + */ + sendDate: boolean; + /** + * When using implicit headers (not calling `response.writeHead()` explicitly), + * this property controls the status code that will be sent to the client when + * the headers get flushed. + * + * ```js + * response.statusCode = 404; + * ``` + * + * After response header was sent to the client, this property indicates the + * status code which was sent out. + * @since v8.4.0 + */ + statusCode: number; + /** + * Status message is not supported by HTTP/2 (RFC 7540 8.1.2.4). It returns + * an empty string. + * @since v8.4.0 + */ + statusMessage: ""; + /** + * This method adds HTTP trailing headers (a header but at the end of the + * message) to the response. + * + * Attempting to set a header field name or value that contains invalid characters + * will result in a `TypeError` being thrown. + * @since v8.4.0 + */ + addTrailers(trailers: OutgoingHttpHeaders): void; + /** + * This method signals to the server that all of the response headers and body + * have been sent; that server should consider this message complete. + * The method, `response.end()`, MUST be called on each response. + * + * If `data` is specified, it is equivalent to calling `response.write(data, encoding)` followed by `response.end(callback)`. + * + * If `callback` is specified, it will be called when the response stream + * is finished. + * @since v8.4.0 + */ + end(callback?: () => void): this; + end(data: string | Uint8Array, callback?: () => void): this; + end(data: string | Uint8Array, encoding: BufferEncoding, callback?: () => void): this; + /** + * Reads out a header that has already been queued but not sent to the client. + * The name is case-insensitive. + * + * ```js + * const contentType = response.getHeader('content-type'); + * ``` + * @since v8.4.0 + */ + getHeader(name: string): string; + /** + * Returns an array containing the unique names of the current outgoing headers. + * All header names are lowercase. + * + * ```js + * response.setHeader('Foo', 'bar'); + * response.setHeader('Set-Cookie', ['foo=bar', 'bar=baz']); + * + * const headerNames = response.getHeaderNames(); + * // headerNames === ['foo', 'set-cookie'] + * ``` + * @since v8.4.0 + */ + getHeaderNames(): string[]; + /** + * Returns a shallow copy of the current outgoing headers. Since a shallow copy + * is used, array values may be mutated without additional calls to various + * header-related http module methods. The keys of the returned object are the + * header names and the values are the respective header values. All header names + * are lowercase. + * + * The object returned by the `response.getHeaders()` method _does not_prototypically inherit from the JavaScript `Object`. This means that typical`Object` methods such as `obj.toString()`, + * `obj.hasOwnProperty()`, and others + * are not defined and _will not work_. + * + * ```js + * response.setHeader('Foo', 'bar'); + * response.setHeader('Set-Cookie', ['foo=bar', 'bar=baz']); + * + * const headers = response.getHeaders(); + * // headers === { foo: 'bar', 'set-cookie': ['foo=bar', 'bar=baz'] } + * ``` + * @since v8.4.0 + */ + getHeaders(): OutgoingHttpHeaders; + /** + * Returns `true` if the header identified by `name` is currently set in the + * outgoing headers. The header name matching is case-insensitive. + * + * ```js + * const hasContentType = response.hasHeader('content-type'); + * ``` + * @since v8.4.0 + */ + hasHeader(name: string): boolean; + /** + * Removes a header that has been queued for implicit sending. + * + * ```js + * response.removeHeader('Content-Encoding'); + * ``` + * @since v8.4.0 + */ + removeHeader(name: string): void; + /** + * Sets a single header value for implicit headers. If this header already exists + * in the to-be-sent headers, its value will be replaced. Use an array of strings + * here to send multiple headers with the same name. + * + * ```js + * response.setHeader('Content-Type', 'text/html; charset=utf-8'); + * ``` + * + * or + * + * ```js + * response.setHeader('Set-Cookie', ['type=ninja', 'language=javascript']); + * ``` + * + * Attempting to set a header field name or value that contains invalid characters + * will result in a `TypeError` being thrown. + * + * When headers have been set with `response.setHeader()`, they will be merged + * with any headers passed to `response.writeHead()`, with the headers passed + * to `response.writeHead()` given precedence. + * + * ```js + * // Returns content-type = text/plain + * const server = http2.createServer((req, res) => { + * res.setHeader('Content-Type', 'text/html; charset=utf-8'); + * res.setHeader('X-Foo', 'bar'); + * res.writeHead(200, { 'Content-Type': 'text/plain; charset=utf-8' }); + * res.end('ok'); + * }); + * ``` + * @since v8.4.0 + */ + setHeader(name: string, value: number | string | ReadonlyArray): void; + /** + * Sets the `Http2Stream`'s timeout value to `msecs`. If a callback is + * provided, then it is added as a listener on the `'timeout'` event on + * the response object. + * + * If no `'timeout'` listener is added to the request, the response, or + * the server, then `Http2Stream` s are destroyed when they time out. If a + * handler is assigned to the request, the response, or the server's `'timeout'`events, timed out sockets must be handled explicitly. + * @since v8.4.0 + */ + setTimeout(msecs: number, callback?: () => void): void; + /** + * If this method is called and `response.writeHead()` has not been called, + * it will switch to implicit header mode and flush the implicit headers. + * + * This sends a chunk of the response body. This method may + * be called multiple times to provide successive parts of the body. + * + * In the `node:http` module, the response body is omitted when the + * request is a HEAD request. Similarly, the `204` and `304` responses _must not_ include a message body. + * + * `chunk` can be a string or a buffer. If `chunk` is a string, + * the second parameter specifies how to encode it into a byte stream. + * By default the `encoding` is `'utf8'`. `callback` will be called when this chunk + * of data is flushed. + * + * This is the raw HTTP body and has nothing to do with higher-level multi-part + * body encodings that may be used. + * + * The first time `response.write()` is called, it will send the buffered + * header information and the first chunk of the body to the client. The second + * time `response.write()` is called, Node.js assumes data will be streamed, + * and sends the new data separately. That is, the response is buffered up to the + * first chunk of the body. + * + * Returns `true` if the entire data was flushed successfully to the kernel + * buffer. Returns `false` if all or part of the data was queued in user memory.`'drain'` will be emitted when the buffer is free again. + * @since v8.4.0 + */ + write(chunk: string | Uint8Array, callback?: (err: Error) => void): boolean; + write(chunk: string | Uint8Array, encoding: BufferEncoding, callback?: (err: Error) => void): boolean; + /** + * Sends a status `100 Continue` to the client, indicating that the request body + * should be sent. See the `'checkContinue'` event on `Http2Server` and`Http2SecureServer`. + * @since v8.4.0 + */ + writeContinue(): void; + /** + * Sends a status `103 Early Hints` to the client with a Link header, + * indicating that the user agent can preload/preconnect the linked resources. + * The `hints` is an object containing the values of headers to be sent with + * early hints message. + * + * **Example** + * + * ```js + * const earlyHintsLink = '; rel=preload; as=style'; + * response.writeEarlyHints({ + * 'link': earlyHintsLink, + * }); + * + * const earlyHintsLinks = [ + * '; rel=preload; as=style', + * '; rel=preload; as=script', + * ]; + * response.writeEarlyHints({ + * 'link': earlyHintsLinks, + * }); + * ``` + * @since v18.11.0 + */ + writeEarlyHints(hints: Record): void; + /** + * Sends a response header to the request. The status code is a 3-digit HTTP + * status code, like `404`. The last argument, `headers`, are the response headers. + * + * Returns a reference to the `Http2ServerResponse`, so that calls can be chained. + * + * For compatibility with `HTTP/1`, a human-readable `statusMessage` may be + * passed as the second argument. However, because the `statusMessage` has no + * meaning within HTTP/2, the argument will have no effect and a process warning + * will be emitted. + * + * ```js + * const body = 'hello world'; + * response.writeHead(200, { + * 'Content-Length': Buffer.byteLength(body), + * 'Content-Type': 'text/plain; charset=utf-8', + * }); + * ``` + * + * `Content-Length` is given in bytes not characters. The`Buffer.byteLength()` API may be used to determine the number of bytes in a + * given encoding. On outbound messages, Node.js does not check if Content-Length + * and the length of the body being transmitted are equal or not. However, when + * receiving messages, Node.js will automatically reject messages when the`Content-Length` does not match the actual payload size. + * + * This method may be called at most one time on a message before `response.end()` is called. + * + * If `response.write()` or `response.end()` are called before calling + * this, the implicit/mutable headers will be calculated and call this function. + * + * When headers have been set with `response.setHeader()`, they will be merged + * with any headers passed to `response.writeHead()`, with the headers passed + * to `response.writeHead()` given precedence. + * + * ```js + * // Returns content-type = text/plain + * const server = http2.createServer((req, res) => { + * res.setHeader('Content-Type', 'text/html; charset=utf-8'); + * res.setHeader('X-Foo', 'bar'); + * res.writeHead(200, { 'Content-Type': 'text/plain; charset=utf-8' }); + * res.end('ok'); + * }); + * ``` + * + * Attempting to set a header field name or value that contains invalid characters + * will result in a `TypeError` being thrown. + * @since v8.4.0 + */ + writeHead(statusCode: number, headers?: OutgoingHttpHeaders): this; + writeHead(statusCode: number, statusMessage: string, headers?: OutgoingHttpHeaders): this; + /** + * Call `http2stream.pushStream()` with the given headers, and wrap the + * given `Http2Stream` on a newly created `Http2ServerResponse` as the callback + * parameter if successful. When `Http2ServerRequest` is closed, the callback is + * called with an error `ERR_HTTP2_INVALID_STREAM`. + * @since v8.4.0 + * @param headers An object describing the headers + * @param callback Called once `http2stream.pushStream()` is finished, or either when the attempt to create the pushed `Http2Stream` has failed or has been rejected, or the state of + * `Http2ServerRequest` is closed prior to calling the `http2stream.pushStream()` method + */ + createPushResponse( + headers: OutgoingHttpHeaders, + callback: (err: Error | null, res: Http2ServerResponse) => void, + ): void; + addListener(event: "close", listener: () => void): this; + addListener(event: "drain", listener: () => void): this; + addListener(event: "error", listener: (error: Error) => void): this; + addListener(event: "finish", listener: () => void): this; + addListener(event: "pipe", listener: (src: stream.Readable) => void): this; + addListener(event: "unpipe", listener: (src: stream.Readable) => void): this; + addListener(event: string | symbol, listener: (...args: any[]) => void): this; + emit(event: "close"): boolean; + emit(event: "drain"): boolean; + emit(event: "error", error: Error): boolean; + emit(event: "finish"): boolean; + emit(event: "pipe", src: stream.Readable): boolean; + emit(event: "unpipe", src: stream.Readable): boolean; + emit(event: string | symbol, ...args: any[]): boolean; + on(event: "close", listener: () => void): this; + on(event: "drain", listener: () => void): this; + on(event: "error", listener: (error: Error) => void): this; + on(event: "finish", listener: () => void): this; + on(event: "pipe", listener: (src: stream.Readable) => void): this; + on(event: "unpipe", listener: (src: stream.Readable) => void): this; + on(event: string | symbol, listener: (...args: any[]) => void): this; + once(event: "close", listener: () => void): this; + once(event: "drain", listener: () => void): this; + once(event: "error", listener: (error: Error) => void): this; + once(event: "finish", listener: () => void): this; + once(event: "pipe", listener: (src: stream.Readable) => void): this; + once(event: "unpipe", listener: (src: stream.Readable) => void): this; + once(event: string | symbol, listener: (...args: any[]) => void): this; + prependListener(event: "close", listener: () => void): this; + prependListener(event: "drain", listener: () => void): this; + prependListener(event: "error", listener: (error: Error) => void): this; + prependListener(event: "finish", listener: () => void): this; + prependListener(event: "pipe", listener: (src: stream.Readable) => void): this; + prependListener(event: "unpipe", listener: (src: stream.Readable) => void): this; + prependListener(event: string | symbol, listener: (...args: any[]) => void): this; + prependOnceListener(event: "close", listener: () => void): this; + prependOnceListener(event: "drain", listener: () => void): this; + prependOnceListener(event: "error", listener: (error: Error) => void): this; + prependOnceListener(event: "finish", listener: () => void): this; + prependOnceListener(event: "pipe", listener: (src: stream.Readable) => void): this; + prependOnceListener(event: "unpipe", listener: (src: stream.Readable) => void): this; + prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this; + } + export namespace constants { + const NGHTTP2_SESSION_SERVER: number; + const NGHTTP2_SESSION_CLIENT: number; + const NGHTTP2_STREAM_STATE_IDLE: number; + const NGHTTP2_STREAM_STATE_OPEN: number; + const NGHTTP2_STREAM_STATE_RESERVED_LOCAL: number; + const NGHTTP2_STREAM_STATE_RESERVED_REMOTE: number; + const NGHTTP2_STREAM_STATE_HALF_CLOSED_LOCAL: number; + const NGHTTP2_STREAM_STATE_HALF_CLOSED_REMOTE: number; + const NGHTTP2_STREAM_STATE_CLOSED: number; + const NGHTTP2_NO_ERROR: number; + const NGHTTP2_PROTOCOL_ERROR: number; + const NGHTTP2_INTERNAL_ERROR: number; + const NGHTTP2_FLOW_CONTROL_ERROR: number; + const NGHTTP2_SETTINGS_TIMEOUT: number; + const NGHTTP2_STREAM_CLOSED: number; + const NGHTTP2_FRAME_SIZE_ERROR: number; + const NGHTTP2_REFUSED_STREAM: number; + const NGHTTP2_CANCEL: number; + const NGHTTP2_COMPRESSION_ERROR: number; + const NGHTTP2_CONNECT_ERROR: number; + const NGHTTP2_ENHANCE_YOUR_CALM: number; + const NGHTTP2_INADEQUATE_SECURITY: number; + const NGHTTP2_HTTP_1_1_REQUIRED: number; + const NGHTTP2_ERR_FRAME_SIZE_ERROR: number; + const NGHTTP2_FLAG_NONE: number; + const NGHTTP2_FLAG_END_STREAM: number; + const NGHTTP2_FLAG_END_HEADERS: number; + const NGHTTP2_FLAG_ACK: number; + const NGHTTP2_FLAG_PADDED: number; + const NGHTTP2_FLAG_PRIORITY: number; + const DEFAULT_SETTINGS_HEADER_TABLE_SIZE: number; + const DEFAULT_SETTINGS_ENABLE_PUSH: number; + const DEFAULT_SETTINGS_INITIAL_WINDOW_SIZE: number; + const DEFAULT_SETTINGS_MAX_FRAME_SIZE: number; + const MAX_MAX_FRAME_SIZE: number; + const MIN_MAX_FRAME_SIZE: number; + const MAX_INITIAL_WINDOW_SIZE: number; + const NGHTTP2_DEFAULT_WEIGHT: number; + const NGHTTP2_SETTINGS_HEADER_TABLE_SIZE: number; + const NGHTTP2_SETTINGS_ENABLE_PUSH: number; + const NGHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS: number; + const NGHTTP2_SETTINGS_INITIAL_WINDOW_SIZE: number; + const NGHTTP2_SETTINGS_MAX_FRAME_SIZE: number; + const NGHTTP2_SETTINGS_MAX_HEADER_LIST_SIZE: number; + const PADDING_STRATEGY_NONE: number; + const PADDING_STRATEGY_MAX: number; + const PADDING_STRATEGY_CALLBACK: number; + const HTTP2_HEADER_STATUS: string; + const HTTP2_HEADER_METHOD: string; + const HTTP2_HEADER_AUTHORITY: string; + const HTTP2_HEADER_SCHEME: string; + const HTTP2_HEADER_PATH: string; + const HTTP2_HEADER_ACCEPT_CHARSET: string; + const HTTP2_HEADER_ACCEPT_ENCODING: string; + const HTTP2_HEADER_ACCEPT_LANGUAGE: string; + const HTTP2_HEADER_ACCEPT_RANGES: string; + const HTTP2_HEADER_ACCEPT: string; + const HTTP2_HEADER_ACCESS_CONTROL_ALLOW_ORIGIN: string; + const HTTP2_HEADER_AGE: string; + const HTTP2_HEADER_ALLOW: string; + const HTTP2_HEADER_AUTHORIZATION: string; + const HTTP2_HEADER_CACHE_CONTROL: string; + const HTTP2_HEADER_CONNECTION: string; + const HTTP2_HEADER_CONTENT_DISPOSITION: string; + const HTTP2_HEADER_CONTENT_ENCODING: string; + const HTTP2_HEADER_CONTENT_LANGUAGE: string; + const HTTP2_HEADER_CONTENT_LENGTH: string; + const HTTP2_HEADER_CONTENT_LOCATION: string; + const HTTP2_HEADER_CONTENT_MD5: string; + const HTTP2_HEADER_CONTENT_RANGE: string; + const HTTP2_HEADER_CONTENT_TYPE: string; + const HTTP2_HEADER_COOKIE: string; + const HTTP2_HEADER_DATE: string; + const HTTP2_HEADER_ETAG: string; + const HTTP2_HEADER_EXPECT: string; + const HTTP2_HEADER_EXPIRES: string; + const HTTP2_HEADER_FROM: string; + const HTTP2_HEADER_HOST: string; + const HTTP2_HEADER_IF_MATCH: string; + const HTTP2_HEADER_IF_MODIFIED_SINCE: string; + const HTTP2_HEADER_IF_NONE_MATCH: string; + const HTTP2_HEADER_IF_RANGE: string; + const HTTP2_HEADER_IF_UNMODIFIED_SINCE: string; + const HTTP2_HEADER_LAST_MODIFIED: string; + const HTTP2_HEADER_LINK: string; + const HTTP2_HEADER_LOCATION: string; + const HTTP2_HEADER_MAX_FORWARDS: string; + const HTTP2_HEADER_PREFER: string; + const HTTP2_HEADER_PROXY_AUTHENTICATE: string; + const HTTP2_HEADER_PROXY_AUTHORIZATION: string; + const HTTP2_HEADER_RANGE: string; + const HTTP2_HEADER_REFERER: string; + const HTTP2_HEADER_REFRESH: string; + const HTTP2_HEADER_RETRY_AFTER: string; + const HTTP2_HEADER_SERVER: string; + const HTTP2_HEADER_SET_COOKIE: string; + const HTTP2_HEADER_STRICT_TRANSPORT_SECURITY: string; + const HTTP2_HEADER_TRANSFER_ENCODING: string; + const HTTP2_HEADER_TE: string; + const HTTP2_HEADER_UPGRADE: string; + const HTTP2_HEADER_USER_AGENT: string; + const HTTP2_HEADER_VARY: string; + const HTTP2_HEADER_VIA: string; + const HTTP2_HEADER_WWW_AUTHENTICATE: string; + const HTTP2_HEADER_HTTP2_SETTINGS: string; + const HTTP2_HEADER_KEEP_ALIVE: string; + const HTTP2_HEADER_PROXY_CONNECTION: string; + const HTTP2_METHOD_ACL: string; + const HTTP2_METHOD_BASELINE_CONTROL: string; + const HTTP2_METHOD_BIND: string; + const HTTP2_METHOD_CHECKIN: string; + const HTTP2_METHOD_CHECKOUT: string; + const HTTP2_METHOD_CONNECT: string; + const HTTP2_METHOD_COPY: string; + const HTTP2_METHOD_DELETE: string; + const HTTP2_METHOD_GET: string; + const HTTP2_METHOD_HEAD: string; + const HTTP2_METHOD_LABEL: string; + const HTTP2_METHOD_LINK: string; + const HTTP2_METHOD_LOCK: string; + const HTTP2_METHOD_MERGE: string; + const HTTP2_METHOD_MKACTIVITY: string; + const HTTP2_METHOD_MKCALENDAR: string; + const HTTP2_METHOD_MKCOL: string; + const HTTP2_METHOD_MKREDIRECTREF: string; + const HTTP2_METHOD_MKWORKSPACE: string; + const HTTP2_METHOD_MOVE: string; + const HTTP2_METHOD_OPTIONS: string; + const HTTP2_METHOD_ORDERPATCH: string; + const HTTP2_METHOD_PATCH: string; + const HTTP2_METHOD_POST: string; + const HTTP2_METHOD_PRI: string; + const HTTP2_METHOD_PROPFIND: string; + const HTTP2_METHOD_PROPPATCH: string; + const HTTP2_METHOD_PUT: string; + const HTTP2_METHOD_REBIND: string; + const HTTP2_METHOD_REPORT: string; + const HTTP2_METHOD_SEARCH: string; + const HTTP2_METHOD_TRACE: string; + const HTTP2_METHOD_UNBIND: string; + const HTTP2_METHOD_UNCHECKOUT: string; + const HTTP2_METHOD_UNLINK: string; + const HTTP2_METHOD_UNLOCK: string; + const HTTP2_METHOD_UPDATE: string; + const HTTP2_METHOD_UPDATEREDIRECTREF: string; + const HTTP2_METHOD_VERSION_CONTROL: string; + const HTTP_STATUS_CONTINUE: number; + const HTTP_STATUS_SWITCHING_PROTOCOLS: number; + const HTTP_STATUS_PROCESSING: number; + const HTTP_STATUS_OK: number; + const HTTP_STATUS_CREATED: number; + const HTTP_STATUS_ACCEPTED: number; + const HTTP_STATUS_NON_AUTHORITATIVE_INFORMATION: number; + const HTTP_STATUS_NO_CONTENT: number; + const HTTP_STATUS_RESET_CONTENT: number; + const HTTP_STATUS_PARTIAL_CONTENT: number; + const HTTP_STATUS_MULTI_STATUS: number; + const HTTP_STATUS_ALREADY_REPORTED: number; + const HTTP_STATUS_IM_USED: number; + const HTTP_STATUS_MULTIPLE_CHOICES: number; + const HTTP_STATUS_MOVED_PERMANENTLY: number; + const HTTP_STATUS_FOUND: number; + const HTTP_STATUS_SEE_OTHER: number; + const HTTP_STATUS_NOT_MODIFIED: number; + const HTTP_STATUS_USE_PROXY: number; + const HTTP_STATUS_TEMPORARY_REDIRECT: number; + const HTTP_STATUS_PERMANENT_REDIRECT: number; + const HTTP_STATUS_BAD_REQUEST: number; + const HTTP_STATUS_UNAUTHORIZED: number; + const HTTP_STATUS_PAYMENT_REQUIRED: number; + const HTTP_STATUS_FORBIDDEN: number; + const HTTP_STATUS_NOT_FOUND: number; + const HTTP_STATUS_METHOD_NOT_ALLOWED: number; + const HTTP_STATUS_NOT_ACCEPTABLE: number; + const HTTP_STATUS_PROXY_AUTHENTICATION_REQUIRED: number; + const HTTP_STATUS_REQUEST_TIMEOUT: number; + const HTTP_STATUS_CONFLICT: number; + const HTTP_STATUS_GONE: number; + const HTTP_STATUS_LENGTH_REQUIRED: number; + const HTTP_STATUS_PRECONDITION_FAILED: number; + const HTTP_STATUS_PAYLOAD_TOO_LARGE: number; + const HTTP_STATUS_URI_TOO_LONG: number; + const HTTP_STATUS_UNSUPPORTED_MEDIA_TYPE: number; + const HTTP_STATUS_RANGE_NOT_SATISFIABLE: number; + const HTTP_STATUS_EXPECTATION_FAILED: number; + const HTTP_STATUS_TEAPOT: number; + const HTTP_STATUS_MISDIRECTED_REQUEST: number; + const HTTP_STATUS_UNPROCESSABLE_ENTITY: number; + const HTTP_STATUS_LOCKED: number; + const HTTP_STATUS_FAILED_DEPENDENCY: number; + const HTTP_STATUS_UNORDERED_COLLECTION: number; + const HTTP_STATUS_UPGRADE_REQUIRED: number; + const HTTP_STATUS_PRECONDITION_REQUIRED: number; + const HTTP_STATUS_TOO_MANY_REQUESTS: number; + const HTTP_STATUS_REQUEST_HEADER_FIELDS_TOO_LARGE: number; + const HTTP_STATUS_UNAVAILABLE_FOR_LEGAL_REASONS: number; + const HTTP_STATUS_INTERNAL_SERVER_ERROR: number; + const HTTP_STATUS_NOT_IMPLEMENTED: number; + const HTTP_STATUS_BAD_GATEWAY: number; + const HTTP_STATUS_SERVICE_UNAVAILABLE: number; + const HTTP_STATUS_GATEWAY_TIMEOUT: number; + const HTTP_STATUS_HTTP_VERSION_NOT_SUPPORTED: number; + const HTTP_STATUS_VARIANT_ALSO_NEGOTIATES: number; + const HTTP_STATUS_INSUFFICIENT_STORAGE: number; + const HTTP_STATUS_LOOP_DETECTED: number; + const HTTP_STATUS_BANDWIDTH_LIMIT_EXCEEDED: number; + const HTTP_STATUS_NOT_EXTENDED: number; + const HTTP_STATUS_NETWORK_AUTHENTICATION_REQUIRED: number; + } + /** + * This symbol can be set as a property on the HTTP/2 headers object with + * an array value in order to provide a list of headers considered sensitive. + */ + export const sensitiveHeaders: symbol; + /** + * Returns an object containing the default settings for an `Http2Session`instance. This method returns a new object instance every time it is called + * so instances returned may be safely modified for use. + * @since v8.4.0 + */ + export function getDefaultSettings(): Settings; + /** + * Returns a `Buffer` instance containing serialized representation of the given + * HTTP/2 settings as specified in the [HTTP/2](https://tools.ietf.org/html/rfc7540) specification. This is intended + * for use with the `HTTP2-Settings` header field. + * + * ```js + * const http2 = require('node:http2'); + * + * const packed = http2.getPackedSettings({ enablePush: false }); + * + * console.log(packed.toString('base64')); + * // Prints: AAIAAAAA + * ``` + * @since v8.4.0 + */ + export function getPackedSettings(settings: Settings): Buffer; + /** + * Returns a `HTTP/2 Settings Object` containing the deserialized settings from + * the given `Buffer` as generated by `http2.getPackedSettings()`. + * @since v8.4.0 + * @param buf The packed settings. + */ + export function getUnpackedSettings(buf: Uint8Array): Settings; + /** + * Returns a `net.Server` instance that creates and manages `Http2Session`instances. + * + * Since there are no browsers known that support [unencrypted HTTP/2](https://http2.github.io/faq/#does-http2-require-encryption), the use of {@link createSecureServer} is necessary when + * communicating + * with browser clients. + * + * ```js + * const http2 = require('node:http2'); + * + * // Create an unencrypted HTTP/2 server. + * // Since there are no browsers known that support + * // unencrypted HTTP/2, the use of `http2.createSecureServer()` + * // is necessary when communicating with browser clients. + * const server = http2.createServer(); + * + * server.on('stream', (stream, headers) => { + * stream.respond({ + * 'content-type': 'text/html; charset=utf-8', + * ':status': 200, + * }); + * stream.end('

Hello World

'); + * }); + * + * server.listen(8000); + * ``` + * @since v8.4.0 + * @param onRequestHandler See `Compatibility API` + */ + export function createServer( + onRequestHandler?: (request: Http2ServerRequest, response: Http2ServerResponse) => void, + ): Http2Server; + export function createServer( + options: ServerOptions, + onRequestHandler?: (request: Http2ServerRequest, response: Http2ServerResponse) => void, + ): Http2Server; + /** + * Returns a `tls.Server` instance that creates and manages `Http2Session`instances. + * + * ```js + * const http2 = require('node:http2'); + * const fs = require('node:fs'); + * + * const options = { + * key: fs.readFileSync('server-key.pem'), + * cert: fs.readFileSync('server-cert.pem'), + * }; + * + * // Create a secure HTTP/2 server + * const server = http2.createSecureServer(options); + * + * server.on('stream', (stream, headers) => { + * stream.respond({ + * 'content-type': 'text/html; charset=utf-8', + * ':status': 200, + * }); + * stream.end('

Hello World

'); + * }); + * + * server.listen(8443); + * ``` + * @since v8.4.0 + * @param onRequestHandler See `Compatibility API` + */ + export function createSecureServer( + onRequestHandler?: (request: Http2ServerRequest, response: Http2ServerResponse) => void, + ): Http2SecureServer; + export function createSecureServer( + options: SecureServerOptions, + onRequestHandler?: (request: Http2ServerRequest, response: Http2ServerResponse) => void, + ): Http2SecureServer; + /** + * Returns a `ClientHttp2Session` instance. + * + * ```js + * const http2 = require('node:http2'); + * const client = http2.connect('https://localhost:1234'); + * + * // Use the client + * + * client.close(); + * ``` + * @since v8.4.0 + * @param authority The remote HTTP/2 server to connect to. This must be in the form of a minimal, valid URL with the `http://` or `https://` prefix, host name, and IP port (if a non-default port + * is used). Userinfo (user ID and password), path, querystring, and fragment details in the URL will be ignored. + * @param listener Will be registered as a one-time listener of the {@link 'connect'} event. + */ + export function connect( + authority: string | url.URL, + listener: (session: ClientHttp2Session, socket: net.Socket | tls.TLSSocket) => void, + ): ClientHttp2Session; + export function connect( + authority: string | url.URL, + options?: ClientSessionOptions | SecureClientSessionOptions, + listener?: (session: ClientHttp2Session, socket: net.Socket | tls.TLSSocket) => void, + ): ClientHttp2Session; +} +declare module "node:http2" { + export * from "http2"; +} diff --git a/Url-Shortner/node_modules/@types/node/https.d.ts b/Url-Shortner/node_modules/@types/node/https.d.ts new file mode 100644 index 0000000..36ae5b2 --- /dev/null +++ b/Url-Shortner/node_modules/@types/node/https.d.ts @@ -0,0 +1,550 @@ +/** + * HTTPS is the HTTP protocol over TLS/SSL. In Node.js this is implemented as a + * separate module. + * @see [source](https://github.com/nodejs/node/blob/v20.2.0/lib/https.js) + */ +declare module "https" { + import { Duplex } from "node:stream"; + import * as tls from "node:tls"; + import * as http from "node:http"; + import { URL } from "node:url"; + type ServerOptions< + Request extends typeof http.IncomingMessage = typeof http.IncomingMessage, + Response extends typeof http.ServerResponse = typeof http.ServerResponse, + > = tls.SecureContextOptions & tls.TlsOptions & http.ServerOptions; + type RequestOptions = + & http.RequestOptions + & tls.SecureContextOptions + & { + checkServerIdentity?: typeof tls.checkServerIdentity | undefined; + rejectUnauthorized?: boolean | undefined; // Defaults to true + servername?: string | undefined; // SNI TLS Extension + }; + interface AgentOptions extends http.AgentOptions, tls.ConnectionOptions { + rejectUnauthorized?: boolean | undefined; + maxCachedSessions?: number | undefined; + } + /** + * An `Agent` object for HTTPS similar to `http.Agent`. See {@link request} for more information. + * @since v0.4.5 + */ + class Agent extends http.Agent { + constructor(options?: AgentOptions); + options: AgentOptions; + } + interface Server< + Request extends typeof http.IncomingMessage = typeof http.IncomingMessage, + Response extends typeof http.ServerResponse = typeof http.ServerResponse, + > extends http.Server {} + /** + * See `http.Server` for more information. + * @since v0.3.4 + */ + class Server< + Request extends typeof http.IncomingMessage = typeof http.IncomingMessage, + Response extends typeof http.ServerResponse = typeof http.ServerResponse, + > extends tls.Server { + constructor(requestListener?: http.RequestListener); + constructor( + options: ServerOptions, + requestListener?: http.RequestListener, + ); + /** + * Closes all connections connected to this server. + * @since v18.2.0 + */ + closeAllConnections(): void; + /** + * Closes all connections connected to this server which are not sending a request or waiting for a response. + * @since v18.2.0 + */ + closeIdleConnections(): void; + addListener(event: string, listener: (...args: any[]) => void): this; + addListener(event: "keylog", listener: (line: Buffer, tlsSocket: tls.TLSSocket) => void): this; + addListener( + event: "newSession", + listener: (sessionId: Buffer, sessionData: Buffer, callback: (err: Error, resp: Buffer) => void) => void, + ): this; + addListener( + event: "OCSPRequest", + listener: ( + certificate: Buffer, + issuer: Buffer, + callback: (err: Error | null, resp: Buffer) => void, + ) => void, + ): this; + addListener( + event: "resumeSession", + listener: (sessionId: Buffer, callback: (err: Error, sessionData: Buffer) => void) => void, + ): this; + addListener(event: "secureConnection", listener: (tlsSocket: tls.TLSSocket) => void): this; + addListener(event: "tlsClientError", listener: (err: Error, tlsSocket: tls.TLSSocket) => void): this; + addListener(event: "close", listener: () => void): this; + addListener(event: "connection", listener: (socket: Duplex) => void): this; + addListener(event: "error", listener: (err: Error) => void): this; + addListener(event: "listening", listener: () => void): this; + addListener(event: "checkContinue", listener: http.RequestListener): this; + addListener(event: "checkExpectation", listener: http.RequestListener): this; + addListener(event: "clientError", listener: (err: Error, socket: Duplex) => void): this; + addListener( + event: "connect", + listener: (req: InstanceType, socket: Duplex, head: Buffer) => void, + ): this; + addListener(event: "request", listener: http.RequestListener): this; + addListener( + event: "upgrade", + listener: (req: InstanceType, socket: Duplex, head: Buffer) => void, + ): this; + emit(event: string, ...args: any[]): boolean; + emit(event: "keylog", line: Buffer, tlsSocket: tls.TLSSocket): boolean; + emit( + event: "newSession", + sessionId: Buffer, + sessionData: Buffer, + callback: (err: Error, resp: Buffer) => void, + ): boolean; + emit( + event: "OCSPRequest", + certificate: Buffer, + issuer: Buffer, + callback: (err: Error | null, resp: Buffer) => void, + ): boolean; + emit(event: "resumeSession", sessionId: Buffer, callback: (err: Error, sessionData: Buffer) => void): boolean; + emit(event: "secureConnection", tlsSocket: tls.TLSSocket): boolean; + emit(event: "tlsClientError", err: Error, tlsSocket: tls.TLSSocket): boolean; + emit(event: "close"): boolean; + emit(event: "connection", socket: Duplex): boolean; + emit(event: "error", err: Error): boolean; + emit(event: "listening"): boolean; + emit( + event: "checkContinue", + req: InstanceType, + res: InstanceType & { + req: InstanceType; + }, + ): boolean; + emit( + event: "checkExpectation", + req: InstanceType, + res: InstanceType & { + req: InstanceType; + }, + ): boolean; + emit(event: "clientError", err: Error, socket: Duplex): boolean; + emit(event: "connect", req: InstanceType, socket: Duplex, head: Buffer): boolean; + emit( + event: "request", + req: InstanceType, + res: InstanceType & { + req: InstanceType; + }, + ): boolean; + emit(event: "upgrade", req: InstanceType, socket: Duplex, head: Buffer): boolean; + on(event: string, listener: (...args: any[]) => void): this; + on(event: "keylog", listener: (line: Buffer, tlsSocket: tls.TLSSocket) => void): this; + on( + event: "newSession", + listener: (sessionId: Buffer, sessionData: Buffer, callback: (err: Error, resp: Buffer) => void) => void, + ): this; + on( + event: "OCSPRequest", + listener: ( + certificate: Buffer, + issuer: Buffer, + callback: (err: Error | null, resp: Buffer) => void, + ) => void, + ): this; + on( + event: "resumeSession", + listener: (sessionId: Buffer, callback: (err: Error, sessionData: Buffer) => void) => void, + ): this; + on(event: "secureConnection", listener: (tlsSocket: tls.TLSSocket) => void): this; + on(event: "tlsClientError", listener: (err: Error, tlsSocket: tls.TLSSocket) => void): this; + on(event: "close", listener: () => void): this; + on(event: "connection", listener: (socket: Duplex) => void): this; + on(event: "error", listener: (err: Error) => void): this; + on(event: "listening", listener: () => void): this; + on(event: "checkContinue", listener: http.RequestListener): this; + on(event: "checkExpectation", listener: http.RequestListener): this; + on(event: "clientError", listener: (err: Error, socket: Duplex) => void): this; + on(event: "connect", listener: (req: InstanceType, socket: Duplex, head: Buffer) => void): this; + on(event: "request", listener: http.RequestListener): this; + on(event: "upgrade", listener: (req: InstanceType, socket: Duplex, head: Buffer) => void): this; + once(event: string, listener: (...args: any[]) => void): this; + once(event: "keylog", listener: (line: Buffer, tlsSocket: tls.TLSSocket) => void): this; + once( + event: "newSession", + listener: (sessionId: Buffer, sessionData: Buffer, callback: (err: Error, resp: Buffer) => void) => void, + ): this; + once( + event: "OCSPRequest", + listener: ( + certificate: Buffer, + issuer: Buffer, + callback: (err: Error | null, resp: Buffer) => void, + ) => void, + ): this; + once( + event: "resumeSession", + listener: (sessionId: Buffer, callback: (err: Error, sessionData: Buffer) => void) => void, + ): this; + once(event: "secureConnection", listener: (tlsSocket: tls.TLSSocket) => void): this; + once(event: "tlsClientError", listener: (err: Error, tlsSocket: tls.TLSSocket) => void): this; + once(event: "close", listener: () => void): this; + once(event: "connection", listener: (socket: Duplex) => void): this; + once(event: "error", listener: (err: Error) => void): this; + once(event: "listening", listener: () => void): this; + once(event: "checkContinue", listener: http.RequestListener): this; + once(event: "checkExpectation", listener: http.RequestListener): this; + once(event: "clientError", listener: (err: Error, socket: Duplex) => void): this; + once(event: "connect", listener: (req: InstanceType, socket: Duplex, head: Buffer) => void): this; + once(event: "request", listener: http.RequestListener): this; + once(event: "upgrade", listener: (req: InstanceType, socket: Duplex, head: Buffer) => void): this; + prependListener(event: string, listener: (...args: any[]) => void): this; + prependListener(event: "keylog", listener: (line: Buffer, tlsSocket: tls.TLSSocket) => void): this; + prependListener( + event: "newSession", + listener: (sessionId: Buffer, sessionData: Buffer, callback: (err: Error, resp: Buffer) => void) => void, + ): this; + prependListener( + event: "OCSPRequest", + listener: ( + certificate: Buffer, + issuer: Buffer, + callback: (err: Error | null, resp: Buffer) => void, + ) => void, + ): this; + prependListener( + event: "resumeSession", + listener: (sessionId: Buffer, callback: (err: Error, sessionData: Buffer) => void) => void, + ): this; + prependListener(event: "secureConnection", listener: (tlsSocket: tls.TLSSocket) => void): this; + prependListener(event: "tlsClientError", listener: (err: Error, tlsSocket: tls.TLSSocket) => void): this; + prependListener(event: "close", listener: () => void): this; + prependListener(event: "connection", listener: (socket: Duplex) => void): this; + prependListener(event: "error", listener: (err: Error) => void): this; + prependListener(event: "listening", listener: () => void): this; + prependListener(event: "checkContinue", listener: http.RequestListener): this; + prependListener(event: "checkExpectation", listener: http.RequestListener): this; + prependListener(event: "clientError", listener: (err: Error, socket: Duplex) => void): this; + prependListener( + event: "connect", + listener: (req: InstanceType, socket: Duplex, head: Buffer) => void, + ): this; + prependListener(event: "request", listener: http.RequestListener): this; + prependListener( + event: "upgrade", + listener: (req: InstanceType, socket: Duplex, head: Buffer) => void, + ): this; + prependOnceListener(event: string, listener: (...args: any[]) => void): this; + prependOnceListener(event: "keylog", listener: (line: Buffer, tlsSocket: tls.TLSSocket) => void): this; + prependOnceListener( + event: "newSession", + listener: (sessionId: Buffer, sessionData: Buffer, callback: (err: Error, resp: Buffer) => void) => void, + ): this; + prependOnceListener( + event: "OCSPRequest", + listener: ( + certificate: Buffer, + issuer: Buffer, + callback: (err: Error | null, resp: Buffer) => void, + ) => void, + ): this; + prependOnceListener( + event: "resumeSession", + listener: (sessionId: Buffer, callback: (err: Error, sessionData: Buffer) => void) => void, + ): this; + prependOnceListener(event: "secureConnection", listener: (tlsSocket: tls.TLSSocket) => void): this; + prependOnceListener(event: "tlsClientError", listener: (err: Error, tlsSocket: tls.TLSSocket) => void): this; + prependOnceListener(event: "close", listener: () => void): this; + prependOnceListener(event: "connection", listener: (socket: Duplex) => void): this; + prependOnceListener(event: "error", listener: (err: Error) => void): this; + prependOnceListener(event: "listening", listener: () => void): this; + prependOnceListener(event: "checkContinue", listener: http.RequestListener): this; + prependOnceListener(event: "checkExpectation", listener: http.RequestListener): this; + prependOnceListener(event: "clientError", listener: (err: Error, socket: Duplex) => void): this; + prependOnceListener( + event: "connect", + listener: (req: InstanceType, socket: Duplex, head: Buffer) => void, + ): this; + prependOnceListener(event: "request", listener: http.RequestListener): this; + prependOnceListener( + event: "upgrade", + listener: (req: InstanceType, socket: Duplex, head: Buffer) => void, + ): this; + } + /** + * ```js + * // curl -k https://localhost:8000/ + * const https = require('node:https'); + * const fs = require('node:fs'); + * + * const options = { + * key: fs.readFileSync('test/fixtures/keys/agent2-key.pem'), + * cert: fs.readFileSync('test/fixtures/keys/agent2-cert.pem'), + * }; + * + * https.createServer(options, (req, res) => { + * res.writeHead(200); + * res.end('hello world\n'); + * }).listen(8000); + * ``` + * + * Or + * + * ```js + * const https = require('node:https'); + * const fs = require('node:fs'); + * + * const options = { + * pfx: fs.readFileSync('test/fixtures/test_cert.pfx'), + * passphrase: 'sample', + * }; + * + * https.createServer(options, (req, res) => { + * res.writeHead(200); + * res.end('hello world\n'); + * }).listen(8000); + * ``` + * @since v0.3.4 + * @param options Accepts `options` from `createServer`, `createSecureContext` and `createServer`. + * @param requestListener A listener to be added to the `'request'` event. + */ + function createServer< + Request extends typeof http.IncomingMessage = typeof http.IncomingMessage, + Response extends typeof http.ServerResponse = typeof http.ServerResponse, + >(requestListener?: http.RequestListener): Server; + function createServer< + Request extends typeof http.IncomingMessage = typeof http.IncomingMessage, + Response extends typeof http.ServerResponse = typeof http.ServerResponse, + >( + options: ServerOptions, + requestListener?: http.RequestListener, + ): Server; + /** + * Makes a request to a secure web server. + * + * The following additional `options` from `tls.connect()` are also accepted:`ca`, `cert`, `ciphers`, `clientCertEngine`, `crl`, `dhparam`, `ecdhCurve`,`honorCipherOrder`, `key`, `passphrase`, + * `pfx`, `rejectUnauthorized`,`secureOptions`, `secureProtocol`, `servername`, `sessionIdContext`,`highWaterMark`. + * + * `options` can be an object, a string, or a `URL` object. If `options` is a + * string, it is automatically parsed with `new URL()`. If it is a `URL` object, it will be automatically converted to an ordinary `options` object. + * + * `https.request()` returns an instance of the `http.ClientRequest` class. The `ClientRequest` instance is a writable stream. If one needs to + * upload a file with a POST request, then write to the `ClientRequest` object. + * + * ```js + * const https = require('node:https'); + * + * const options = { + * hostname: 'encrypted.google.com', + * port: 443, + * path: '/', + * method: 'GET', + * }; + * + * const req = https.request(options, (res) => { + * console.log('statusCode:', res.statusCode); + * console.log('headers:', res.headers); + * + * res.on('data', (d) => { + * process.stdout.write(d); + * }); + * }); + * + * req.on('error', (e) => { + * console.error(e); + * }); + * req.end(); + * ``` + * + * Example using options from `tls.connect()`: + * + * ```js + * const options = { + * hostname: 'encrypted.google.com', + * port: 443, + * path: '/', + * method: 'GET', + * key: fs.readFileSync('test/fixtures/keys/agent2-key.pem'), + * cert: fs.readFileSync('test/fixtures/keys/agent2-cert.pem'), + * }; + * options.agent = new https.Agent(options); + * + * const req = https.request(options, (res) => { + * // ... + * }); + * ``` + * + * Alternatively, opt out of connection pooling by not using an `Agent`. + * + * ```js + * const options = { + * hostname: 'encrypted.google.com', + * port: 443, + * path: '/', + * method: 'GET', + * key: fs.readFileSync('test/fixtures/keys/agent2-key.pem'), + * cert: fs.readFileSync('test/fixtures/keys/agent2-cert.pem'), + * agent: false, + * }; + * + * const req = https.request(options, (res) => { + * // ... + * }); + * ``` + * + * Example using a `URL` as `options`: + * + * ```js + * const options = new URL('https://abc:xyz@example.com'); + * + * const req = https.request(options, (res) => { + * // ... + * }); + * ``` + * + * Example pinning on certificate fingerprint, or the public key (similar to`pin-sha256`): + * + * ```js + * const tls = require('node:tls'); + * const https = require('node:https'); + * const crypto = require('node:crypto'); + * + * function sha256(s) { + * return crypto.createHash('sha256').update(s).digest('base64'); + * } + * const options = { + * hostname: 'github.com', + * port: 443, + * path: '/', + * method: 'GET', + * checkServerIdentity: function(host, cert) { + * // Make sure the certificate is issued to the host we are connected to + * const err = tls.checkServerIdentity(host, cert); + * if (err) { + * return err; + * } + * + * // Pin the public key, similar to HPKP pin-sha256 pinning + * const pubkey256 = 'pL1+qb9HTMRZJmuC/bB/ZI9d302BYrrqiVuRyW+DGrU='; + * if (sha256(cert.pubkey) !== pubkey256) { + * const msg = 'Certificate verification error: ' + + * `The public key of '${cert.subject.CN}' ` + + * 'does not match our pinned fingerprint'; + * return new Error(msg); + * } + * + * // Pin the exact certificate, rather than the pub key + * const cert256 = '25:FE:39:32:D9:63:8C:8A:FC:A1:9A:29:87:' + + * 'D8:3E:4C:1D:98:DB:71:E4:1A:48:03:98:EA:22:6A:BD:8B:93:16'; + * if (cert.fingerprint256 !== cert256) { + * const msg = 'Certificate verification error: ' + + * `The certificate of '${cert.subject.CN}' ` + + * 'does not match our pinned fingerprint'; + * return new Error(msg); + * } + * + * // This loop is informational only. + * // Print the certificate and public key fingerprints of all certs in the + * // chain. Its common to pin the public key of the issuer on the public + * // internet, while pinning the public key of the service in sensitive + * // environments. + * do { + * console.log('Subject Common Name:', cert.subject.CN); + * console.log(' Certificate SHA256 fingerprint:', cert.fingerprint256); + * + * hash = crypto.createHash('sha256'); + * console.log(' Public key ping-sha256:', sha256(cert.pubkey)); + * + * lastprint256 = cert.fingerprint256; + * cert = cert.issuerCertificate; + * } while (cert.fingerprint256 !== lastprint256); + * + * }, + * }; + * + * options.agent = new https.Agent(options); + * const req = https.request(options, (res) => { + * console.log('All OK. Server matched our pinned cert or public key'); + * console.log('statusCode:', res.statusCode); + * // Print the HPKP values + * console.log('headers:', res.headers['public-key-pins']); + * + * res.on('data', (d) => {}); + * }); + * + * req.on('error', (e) => { + * console.error(e.message); + * }); + * req.end(); + * ``` + * + * Outputs for example: + * + * ```text + * Subject Common Name: github.com + * Certificate SHA256 fingerprint: 25:FE:39:32:D9:63:8C:8A:FC:A1:9A:29:87:D8:3E:4C:1D:98:DB:71:E4:1A:48:03:98:EA:22:6A:BD:8B:93:16 + * Public key ping-sha256: pL1+qb9HTMRZJmuC/bB/ZI9d302BYrrqiVuRyW+DGrU= + * Subject Common Name: DigiCert SHA2 Extended Validation Server CA + * Certificate SHA256 fingerprint: 40:3E:06:2A:26:53:05:91:13:28:5B:AF:80:A0:D4:AE:42:2C:84:8C:9F:78:FA:D0:1F:C9:4B:C5:B8:7F:EF:1A + * Public key ping-sha256: RRM1dGqnDFsCJXBTHky16vi1obOlCgFFn/yOhI/y+ho= + * Subject Common Name: DigiCert High Assurance EV Root CA + * Certificate SHA256 fingerprint: 74:31:E5:F4:C3:C1:CE:46:90:77:4F:0B:61:E0:54:40:88:3B:A9:A0:1E:D0:0B:A6:AB:D7:80:6E:D3:B1:18:CF + * Public key ping-sha256: WoiWRyIOVNa9ihaBciRSC7XHjliYS9VwUGOIud4PB18= + * All OK. Server matched our pinned cert or public key + * statusCode: 200 + * headers: max-age=0; pin-sha256="WoiWRyIOVNa9ihaBciRSC7XHjliYS9VwUGOIud4PB18="; pin-sha256="RRM1dGqnDFsCJXBTHky16vi1obOlCgFFn/yOhI/y+ho="; + * pin-sha256="k2v657xBsOVe1PQRwOsHsw3bsGT2VzIqz5K+59sNQws="; pin-sha256="K87oWBWM9UZfyddvDfoxL+8lpNyoUB2ptGtn0fv6G2Q="; pin-sha256="IQBnNBEiFuhj+8x6X8XLgh01V9Ic5/V3IRQLNFFc7v4="; + * pin-sha256="iie1VXtL7HzAMF+/PVPR9xzT80kQxdZeJ+zduCB3uj0="; pin-sha256="LvRiGEjRqfzurezaWuj8Wie2gyHMrW5Q06LspMnox7A="; includeSubDomains + * ``` + * @since v0.3.6 + * @param options Accepts all `options` from `request`, with some differences in default values: + */ + function request( + options: RequestOptions | string | URL, + callback?: (res: http.IncomingMessage) => void, + ): http.ClientRequest; + function request( + url: string | URL, + options: RequestOptions, + callback?: (res: http.IncomingMessage) => void, + ): http.ClientRequest; + /** + * Like `http.get()` but for HTTPS. + * + * `options` can be an object, a string, or a `URL` object. If `options` is a + * string, it is automatically parsed with `new URL()`. If it is a `URL` object, it will be automatically converted to an ordinary `options` object. + * + * ```js + * const https = require('node:https'); + * + * https.get('https://encrypted.google.com/', (res) => { + * console.log('statusCode:', res.statusCode); + * console.log('headers:', res.headers); + * + * res.on('data', (d) => { + * process.stdout.write(d); + * }); + * + * }).on('error', (e) => { + * console.error(e); + * }); + * ``` + * @since v0.3.6 + * @param options Accepts the same `options` as {@link request}, with the `method` always set to `GET`. + */ + function get( + options: RequestOptions | string | URL, + callback?: (res: http.IncomingMessage) => void, + ): http.ClientRequest; + function get( + url: string | URL, + options: RequestOptions, + callback?: (res: http.IncomingMessage) => void, + ): http.ClientRequest; + let globalAgent: Agent; +} +declare module "node:https" { + export * from "https"; +} diff --git a/Url-Shortner/node_modules/@types/node/index.d.ts b/Url-Shortner/node_modules/@types/node/index.d.ts new file mode 100644 index 0000000..2d719c7 --- /dev/null +++ b/Url-Shortner/node_modules/@types/node/index.d.ts @@ -0,0 +1,133 @@ +// Type definitions for non-npm package Node.js 20.6 +// Project: https://nodejs.org/ +// Definitions by: Microsoft TypeScript +// DefinitelyTyped +// Alberto Schiabel +// Alvis HT Tang +// Andrew Makarov +// Benjamin Toueg +// Chigozirim C. +// David Junger +// Deividas Bakanas +// Eugene Y. Q. Shen +// Hannes Magnusson +// Huw +// Kelvin Jin +// Klaus Meinhardt +// Lishude +// Mariusz Wiktorczyk +// Mohsen Azimi +// Nicolas Even +// Nikita Galkin +// Parambir Singh +// Sebastian Silbermann +// Thomas den Hollander +// Wilco Bakker +// wwwy3y3 +// Samuel Ainsworth +// Kyle Uehlein +// Thanik Bhongbhibhat +// Marcin Kopacz +// Trivikram Kamat +// Junxiao Shi +// Ilia Baryshnikov +// ExE Boss +// Piotr Błażejewicz +// Anna Henningsen +// Victor Perin +// Yongsheng Zhang +// NodeJS Contributors +// Linus Unnebäck +// wafuwafu13 +// Matteo Collina +// Dmitry Semigradsky +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped + +/** + * License for programmatically and manually incorporated + * documentation aka. `JSDoc` from https://github.com/nodejs/node/tree/master/doc + * + * Copyright Node.js contributors. 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. + */ + +// NOTE: These definitions support NodeJS and TypeScript 4.9+. + +// Reference required types from the default lib: +/// +/// +/// +/// + +// Base definitions for all NodeJS modules that are not specific to any version of TypeScript: +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// + +/// diff --git a/Url-Shortner/node_modules/@types/node/inspector.d.ts b/Url-Shortner/node_modules/@types/node/inspector.d.ts new file mode 100644 index 0000000..0e976e5 --- /dev/null +++ b/Url-Shortner/node_modules/@types/node/inspector.d.ts @@ -0,0 +1,2748 @@ +// eslint-disable-next-line @definitelytyped/dt-header +// Type definitions for inspector + +// These definitions are auto-generated. +// Please see https://github.com/DefinitelyTyped/DefinitelyTyped/pull/19330 +// for more information. + + +/** + * The `node:inspector` module provides an API for interacting with the V8 + * inspector. + * + * It can be accessed using: + * + * ```js + * import * as inspector from 'node:inspector/promises'; + * ``` + * + * or + * + * ```js + * import * as inspector from 'node:inspector'; + * ``` + * @see [source](https://github.com/nodejs/node/blob/v20.2.0/lib/inspector.js) + */ +declare module 'inspector' { + import EventEmitter = require('node:events'); + interface InspectorNotification { + method: string; + params: T; + } + namespace Schema { + /** + * Description of the protocol domain. + */ + interface Domain { + /** + * Domain name. + */ + name: string; + /** + * Domain version. + */ + version: string; + } + interface GetDomainsReturnType { + /** + * List of supported domains. + */ + domains: Domain[]; + } + } + namespace Runtime { + /** + * Unique script identifier. + */ + type ScriptId = string; + /** + * Unique object identifier. + */ + type RemoteObjectId = string; + /** + * Primitive value which cannot be JSON-stringified. + */ + type UnserializableValue = string; + /** + * Mirror object referencing original JavaScript object. + */ + interface RemoteObject { + /** + * Object type. + */ + type: string; + /** + * Object subtype hint. Specified for object type values only. + */ + subtype?: string | undefined; + /** + * Object class (constructor) name. Specified for object type values only. + */ + className?: string | undefined; + /** + * Remote object value in case of primitive values or JSON values (if it was requested). + */ + value?: any; + /** + * Primitive value which can not be JSON-stringified does not have value, but gets this property. + */ + unserializableValue?: UnserializableValue | undefined; + /** + * String representation of the object. + */ + description?: string | undefined; + /** + * Unique object identifier (for non-primitive values). + */ + objectId?: RemoteObjectId | undefined; + /** + * Preview containing abbreviated property values. Specified for object type values only. + * @experimental + */ + preview?: ObjectPreview | undefined; + /** + * @experimental + */ + customPreview?: CustomPreview | undefined; + } + /** + * @experimental + */ + interface CustomPreview { + header: string; + hasBody: boolean; + formatterObjectId: RemoteObjectId; + bindRemoteObjectFunctionId: RemoteObjectId; + configObjectId?: RemoteObjectId | undefined; + } + /** + * Object containing abbreviated remote object value. + * @experimental + */ + interface ObjectPreview { + /** + * Object type. + */ + type: string; + /** + * Object subtype hint. Specified for object type values only. + */ + subtype?: string | undefined; + /** + * String representation of the object. + */ + description?: string | undefined; + /** + * True iff some of the properties or entries of the original object did not fit. + */ + overflow: boolean; + /** + * List of the properties. + */ + properties: PropertyPreview[]; + /** + * List of the entries. Specified for map and set subtype values only. + */ + entries?: EntryPreview[] | undefined; + } + /** + * @experimental + */ + interface PropertyPreview { + /** + * Property name. + */ + name: string; + /** + * Object type. Accessor means that the property itself is an accessor property. + */ + type: string; + /** + * User-friendly property value string. + */ + value?: string | undefined; + /** + * Nested value preview. + */ + valuePreview?: ObjectPreview | undefined; + /** + * Object subtype hint. Specified for object type values only. + */ + subtype?: string | undefined; + } + /** + * @experimental + */ + interface EntryPreview { + /** + * Preview of the key. Specified for map-like collection entries. + */ + key?: ObjectPreview | undefined; + /** + * Preview of the value. + */ + value: ObjectPreview; + } + /** + * Object property descriptor. + */ + interface PropertyDescriptor { + /** + * Property name or symbol description. + */ + name: string; + /** + * The value associated with the property. + */ + value?: RemoteObject | undefined; + /** + * True if the value associated with the property may be changed (data descriptors only). + */ + writable?: boolean | undefined; + /** + * A function which serves as a getter for the property, or undefined if there is no getter (accessor descriptors only). + */ + get?: RemoteObject | undefined; + /** + * A function which serves as a setter for the property, or undefined if there is no setter (accessor descriptors only). + */ + set?: RemoteObject | undefined; + /** + * True if the type of this property descriptor may be changed and if the property may be deleted from the corresponding object. + */ + configurable: boolean; + /** + * True if this property shows up during enumeration of the properties on the corresponding object. + */ + enumerable: boolean; + /** + * True if the result was thrown during the evaluation. + */ + wasThrown?: boolean | undefined; + /** + * True if the property is owned for the object. + */ + isOwn?: boolean | undefined; + /** + * Property symbol object, if the property is of the symbol type. + */ + symbol?: RemoteObject | undefined; + } + /** + * Object internal property descriptor. This property isn't normally visible in JavaScript code. + */ + interface InternalPropertyDescriptor { + /** + * Conventional property name. + */ + name: string; + /** + * The value associated with the property. + */ + value?: RemoteObject | undefined; + } + /** + * Represents function call argument. Either remote object id objectId, primitive value, unserializable primitive value or neither of (for undefined) them should be specified. + */ + interface CallArgument { + /** + * Primitive value or serializable javascript object. + */ + value?: any; + /** + * Primitive value which can not be JSON-stringified. + */ + unserializableValue?: UnserializableValue | undefined; + /** + * Remote object handle. + */ + objectId?: RemoteObjectId | undefined; + } + /** + * Id of an execution context. + */ + type ExecutionContextId = number; + /** + * Description of an isolated world. + */ + interface ExecutionContextDescription { + /** + * Unique id of the execution context. It can be used to specify in which execution context script evaluation should be performed. + */ + id: ExecutionContextId; + /** + * Execution context origin. + */ + origin: string; + /** + * Human readable name describing given context. + */ + name: string; + /** + * Embedder-specific auxiliary data. + */ + auxData?: {} | undefined; + } + /** + * Detailed information about exception (or error) that was thrown during script compilation or execution. + */ + interface ExceptionDetails { + /** + * Exception id. + */ + exceptionId: number; + /** + * Exception text, which should be used together with exception object when available. + */ + text: string; + /** + * Line number of the exception location (0-based). + */ + lineNumber: number; + /** + * Column number of the exception location (0-based). + */ + columnNumber: number; + /** + * Script ID of the exception location. + */ + scriptId?: ScriptId | undefined; + /** + * URL of the exception location, to be used when the script was not reported. + */ + url?: string | undefined; + /** + * JavaScript stack trace if available. + */ + stackTrace?: StackTrace | undefined; + /** + * Exception object if available. + */ + exception?: RemoteObject | undefined; + /** + * Identifier of the context where exception happened. + */ + executionContextId?: ExecutionContextId | undefined; + } + /** + * Number of milliseconds since epoch. + */ + type Timestamp = number; + /** + * Stack entry for runtime errors and assertions. + */ + interface CallFrame { + /** + * JavaScript function name. + */ + functionName: string; + /** + * JavaScript script id. + */ + scriptId: ScriptId; + /** + * JavaScript script name or url. + */ + url: string; + /** + * JavaScript script line number (0-based). + */ + lineNumber: number; + /** + * JavaScript script column number (0-based). + */ + columnNumber: number; + } + /** + * Call frames for assertions or error messages. + */ + interface StackTrace { + /** + * String label of this stack trace. For async traces this may be a name of the function that initiated the async call. + */ + description?: string | undefined; + /** + * JavaScript function name. + */ + callFrames: CallFrame[]; + /** + * Asynchronous JavaScript stack trace that preceded this stack, if available. + */ + parent?: StackTrace | undefined; + /** + * Asynchronous JavaScript stack trace that preceded this stack, if available. + * @experimental + */ + parentId?: StackTraceId | undefined; + } + /** + * Unique identifier of current debugger. + * @experimental + */ + type UniqueDebuggerId = string; + /** + * If debuggerId is set stack trace comes from another debugger and can be resolved there. This allows to track cross-debugger calls. See Runtime.StackTrace and Debugger.paused for usages. + * @experimental + */ + interface StackTraceId { + id: string; + debuggerId?: UniqueDebuggerId | undefined; + } + interface EvaluateParameterType { + /** + * Expression to evaluate. + */ + expression: string; + /** + * Symbolic group name that can be used to release multiple objects. + */ + objectGroup?: string | undefined; + /** + * Determines whether Command Line API should be available during the evaluation. + */ + includeCommandLineAPI?: boolean | undefined; + /** + * In silent mode exceptions thrown during evaluation are not reported and do not pause execution. Overrides setPauseOnException state. + */ + silent?: boolean | undefined; + /** + * Specifies in which execution context to perform evaluation. If the parameter is omitted the evaluation will be performed in the context of the inspected page. + */ + contextId?: ExecutionContextId | undefined; + /** + * Whether the result is expected to be a JSON object that should be sent by value. + */ + returnByValue?: boolean | undefined; + /** + * Whether preview should be generated for the result. + * @experimental + */ + generatePreview?: boolean | undefined; + /** + * Whether execution should be treated as initiated by user in the UI. + */ + userGesture?: boolean | undefined; + /** + * Whether execution should await for resulting value and return once awaited promise is resolved. + */ + awaitPromise?: boolean | undefined; + } + interface AwaitPromiseParameterType { + /** + * Identifier of the promise. + */ + promiseObjectId: RemoteObjectId; + /** + * Whether the result is expected to be a JSON object that should be sent by value. + */ + returnByValue?: boolean | undefined; + /** + * Whether preview should be generated for the result. + */ + generatePreview?: boolean | undefined; + } + interface CallFunctionOnParameterType { + /** + * Declaration of the function to call. + */ + functionDeclaration: string; + /** + * Identifier of the object to call function on. Either objectId or executionContextId should be specified. + */ + objectId?: RemoteObjectId | undefined; + /** + * Call arguments. All call arguments must belong to the same JavaScript world as the target object. + */ + arguments?: CallArgument[] | undefined; + /** + * In silent mode exceptions thrown during evaluation are not reported and do not pause execution. Overrides setPauseOnException state. + */ + silent?: boolean | undefined; + /** + * Whether the result is expected to be a JSON object which should be sent by value. + */ + returnByValue?: boolean | undefined; + /** + * Whether preview should be generated for the result. + * @experimental + */ + generatePreview?: boolean | undefined; + /** + * Whether execution should be treated as initiated by user in the UI. + */ + userGesture?: boolean | undefined; + /** + * Whether execution should await for resulting value and return once awaited promise is resolved. + */ + awaitPromise?: boolean | undefined; + /** + * Specifies execution context which global object will be used to call function on. Either executionContextId or objectId should be specified. + */ + executionContextId?: ExecutionContextId | undefined; + /** + * Symbolic group name that can be used to release multiple objects. If objectGroup is not specified and objectId is, objectGroup will be inherited from object. + */ + objectGroup?: string | undefined; + } + interface GetPropertiesParameterType { + /** + * Identifier of the object to return properties for. + */ + objectId: RemoteObjectId; + /** + * If true, returns properties belonging only to the element itself, not to its prototype chain. + */ + ownProperties?: boolean | undefined; + /** + * If true, returns accessor properties (with getter/setter) only; internal properties are not returned either. + * @experimental + */ + accessorPropertiesOnly?: boolean | undefined; + /** + * Whether preview should be generated for the results. + * @experimental + */ + generatePreview?: boolean | undefined; + } + interface ReleaseObjectParameterType { + /** + * Identifier of the object to release. + */ + objectId: RemoteObjectId; + } + interface ReleaseObjectGroupParameterType { + /** + * Symbolic object group name. + */ + objectGroup: string; + } + interface SetCustomObjectFormatterEnabledParameterType { + enabled: boolean; + } + interface CompileScriptParameterType { + /** + * Expression to compile. + */ + expression: string; + /** + * Source url to be set for the script. + */ + sourceURL: string; + /** + * Specifies whether the compiled script should be persisted. + */ + persistScript: boolean; + /** + * Specifies in which execution context to perform script run. If the parameter is omitted the evaluation will be performed in the context of the inspected page. + */ + executionContextId?: ExecutionContextId | undefined; + } + interface RunScriptParameterType { + /** + * Id of the script to run. + */ + scriptId: ScriptId; + /** + * Specifies in which execution context to perform script run. If the parameter is omitted the evaluation will be performed in the context of the inspected page. + */ + executionContextId?: ExecutionContextId | undefined; + /** + * Symbolic group name that can be used to release multiple objects. + */ + objectGroup?: string | undefined; + /** + * In silent mode exceptions thrown during evaluation are not reported and do not pause execution. Overrides setPauseOnException state. + */ + silent?: boolean | undefined; + /** + * Determines whether Command Line API should be available during the evaluation. + */ + includeCommandLineAPI?: boolean | undefined; + /** + * Whether the result is expected to be a JSON object which should be sent by value. + */ + returnByValue?: boolean | undefined; + /** + * Whether preview should be generated for the result. + */ + generatePreview?: boolean | undefined; + /** + * Whether execution should await for resulting value and return once awaited promise is resolved. + */ + awaitPromise?: boolean | undefined; + } + interface QueryObjectsParameterType { + /** + * Identifier of the prototype to return objects for. + */ + prototypeObjectId: RemoteObjectId; + } + interface GlobalLexicalScopeNamesParameterType { + /** + * Specifies in which execution context to lookup global scope variables. + */ + executionContextId?: ExecutionContextId | undefined; + } + interface EvaluateReturnType { + /** + * Evaluation result. + */ + result: RemoteObject; + /** + * Exception details. + */ + exceptionDetails?: ExceptionDetails | undefined; + } + interface AwaitPromiseReturnType { + /** + * Promise result. Will contain rejected value if promise was rejected. + */ + result: RemoteObject; + /** + * Exception details if stack strace is available. + */ + exceptionDetails?: ExceptionDetails | undefined; + } + interface CallFunctionOnReturnType { + /** + * Call result. + */ + result: RemoteObject; + /** + * Exception details. + */ + exceptionDetails?: ExceptionDetails | undefined; + } + interface GetPropertiesReturnType { + /** + * Object properties. + */ + result: PropertyDescriptor[]; + /** + * Internal object properties (only of the element itself). + */ + internalProperties?: InternalPropertyDescriptor[] | undefined; + /** + * Exception details. + */ + exceptionDetails?: ExceptionDetails | undefined; + } + interface CompileScriptReturnType { + /** + * Id of the script. + */ + scriptId?: ScriptId | undefined; + /** + * Exception details. + */ + exceptionDetails?: ExceptionDetails | undefined; + } + interface RunScriptReturnType { + /** + * Run result. + */ + result: RemoteObject; + /** + * Exception details. + */ + exceptionDetails?: ExceptionDetails | undefined; + } + interface QueryObjectsReturnType { + /** + * Array with objects. + */ + objects: RemoteObject; + } + interface GlobalLexicalScopeNamesReturnType { + names: string[]; + } + interface ExecutionContextCreatedEventDataType { + /** + * A newly created execution context. + */ + context: ExecutionContextDescription; + } + interface ExecutionContextDestroyedEventDataType { + /** + * Id of the destroyed context + */ + executionContextId: ExecutionContextId; + } + interface ExceptionThrownEventDataType { + /** + * Timestamp of the exception. + */ + timestamp: Timestamp; + exceptionDetails: ExceptionDetails; + } + interface ExceptionRevokedEventDataType { + /** + * Reason describing why exception was revoked. + */ + reason: string; + /** + * The id of revoked exception, as reported in exceptionThrown. + */ + exceptionId: number; + } + interface ConsoleAPICalledEventDataType { + /** + * Type of the call. + */ + type: string; + /** + * Call arguments. + */ + args: RemoteObject[]; + /** + * Identifier of the context where the call was made. + */ + executionContextId: ExecutionContextId; + /** + * Call timestamp. + */ + timestamp: Timestamp; + /** + * Stack trace captured when the call was made. + */ + stackTrace?: StackTrace | undefined; + /** + * Console context descriptor for calls on non-default console context (not console.*): 'anonymous#unique-logger-id' for call on unnamed context, 'name#unique-logger-id' for call on named context. + * @experimental + */ + context?: string | undefined; + } + interface InspectRequestedEventDataType { + object: RemoteObject; + hints: {}; + } + } + namespace Debugger { + /** + * Breakpoint identifier. + */ + type BreakpointId = string; + /** + * Call frame identifier. + */ + type CallFrameId = string; + /** + * Location in the source code. + */ + interface Location { + /** + * Script identifier as reported in the Debugger.scriptParsed. + */ + scriptId: Runtime.ScriptId; + /** + * Line number in the script (0-based). + */ + lineNumber: number; + /** + * Column number in the script (0-based). + */ + columnNumber?: number | undefined; + } + /** + * Location in the source code. + * @experimental + */ + interface ScriptPosition { + lineNumber: number; + columnNumber: number; + } + /** + * JavaScript call frame. Array of call frames form the call stack. + */ + interface CallFrame { + /** + * Call frame identifier. This identifier is only valid while the virtual machine is paused. + */ + callFrameId: CallFrameId; + /** + * Name of the JavaScript function called on this call frame. + */ + functionName: string; + /** + * Location in the source code. + */ + functionLocation?: Location | undefined; + /** + * Location in the source code. + */ + location: Location; + /** + * JavaScript script name or url. + */ + url: string; + /** + * Scope chain for this call frame. + */ + scopeChain: Scope[]; + /** + * this object for this call frame. + */ + this: Runtime.RemoteObject; + /** + * The value being returned, if the function is at return point. + */ + returnValue?: Runtime.RemoteObject | undefined; + } + /** + * Scope description. + */ + interface Scope { + /** + * Scope type. + */ + type: string; + /** + * Object representing the scope. For global and with scopes it represents the actual object; for the rest of the scopes, it is artificial transient object enumerating scope variables as its properties. + */ + object: Runtime.RemoteObject; + name?: string | undefined; + /** + * Location in the source code where scope starts + */ + startLocation?: Location | undefined; + /** + * Location in the source code where scope ends + */ + endLocation?: Location | undefined; + } + /** + * Search match for resource. + */ + interface SearchMatch { + /** + * Line number in resource content. + */ + lineNumber: number; + /** + * Line with match content. + */ + lineContent: string; + } + interface BreakLocation { + /** + * Script identifier as reported in the Debugger.scriptParsed. + */ + scriptId: Runtime.ScriptId; + /** + * Line number in the script (0-based). + */ + lineNumber: number; + /** + * Column number in the script (0-based). + */ + columnNumber?: number | undefined; + type?: string | undefined; + } + interface SetBreakpointsActiveParameterType { + /** + * New value for breakpoints active state. + */ + active: boolean; + } + interface SetSkipAllPausesParameterType { + /** + * New value for skip pauses state. + */ + skip: boolean; + } + interface SetBreakpointByUrlParameterType { + /** + * Line number to set breakpoint at. + */ + lineNumber: number; + /** + * URL of the resources to set breakpoint on. + */ + url?: string | undefined; + /** + * Regex pattern for the URLs of the resources to set breakpoints on. Either url or urlRegex must be specified. + */ + urlRegex?: string | undefined; + /** + * Script hash of the resources to set breakpoint on. + */ + scriptHash?: string | undefined; + /** + * Offset in the line to set breakpoint at. + */ + columnNumber?: number | undefined; + /** + * Expression to use as a breakpoint condition. When specified, debugger will only stop on the breakpoint if this expression evaluates to true. + */ + condition?: string | undefined; + } + interface SetBreakpointParameterType { + /** + * Location to set breakpoint in. + */ + location: Location; + /** + * Expression to use as a breakpoint condition. When specified, debugger will only stop on the breakpoint if this expression evaluates to true. + */ + condition?: string | undefined; + } + interface RemoveBreakpointParameterType { + breakpointId: BreakpointId; + } + interface GetPossibleBreakpointsParameterType { + /** + * Start of range to search possible breakpoint locations in. + */ + start: Location; + /** + * End of range to search possible breakpoint locations in (excluding). When not specified, end of scripts is used as end of range. + */ + end?: Location | undefined; + /** + * Only consider locations which are in the same (non-nested) function as start. + */ + restrictToFunction?: boolean | undefined; + } + interface ContinueToLocationParameterType { + /** + * Location to continue to. + */ + location: Location; + targetCallFrames?: string | undefined; + } + interface PauseOnAsyncCallParameterType { + /** + * Debugger will pause when async call with given stack trace is started. + */ + parentStackTraceId: Runtime.StackTraceId; + } + interface StepIntoParameterType { + /** + * Debugger will issue additional Debugger.paused notification if any async task is scheduled before next pause. + * @experimental + */ + breakOnAsyncCall?: boolean | undefined; + } + interface GetStackTraceParameterType { + stackTraceId: Runtime.StackTraceId; + } + interface SearchInContentParameterType { + /** + * Id of the script to search in. + */ + scriptId: Runtime.ScriptId; + /** + * String to search for. + */ + query: string; + /** + * If true, search is case sensitive. + */ + caseSensitive?: boolean | undefined; + /** + * If true, treats string parameter as regex. + */ + isRegex?: boolean | undefined; + } + interface SetScriptSourceParameterType { + /** + * Id of the script to edit. + */ + scriptId: Runtime.ScriptId; + /** + * New content of the script. + */ + scriptSource: string; + /** + * If true the change will not actually be applied. Dry run may be used to get result description without actually modifying the code. + */ + dryRun?: boolean | undefined; + } + interface RestartFrameParameterType { + /** + * Call frame identifier to evaluate on. + */ + callFrameId: CallFrameId; + } + interface GetScriptSourceParameterType { + /** + * Id of the script to get source for. + */ + scriptId: Runtime.ScriptId; + } + interface SetPauseOnExceptionsParameterType { + /** + * Pause on exceptions mode. + */ + state: string; + } + interface EvaluateOnCallFrameParameterType { + /** + * Call frame identifier to evaluate on. + */ + callFrameId: CallFrameId; + /** + * Expression to evaluate. + */ + expression: string; + /** + * String object group name to put result into (allows rapid releasing resulting object handles using releaseObjectGroup). + */ + objectGroup?: string | undefined; + /** + * Specifies whether command line API should be available to the evaluated expression, defaults to false. + */ + includeCommandLineAPI?: boolean | undefined; + /** + * In silent mode exceptions thrown during evaluation are not reported and do not pause execution. Overrides setPauseOnException state. + */ + silent?: boolean | undefined; + /** + * Whether the result is expected to be a JSON object that should be sent by value. + */ + returnByValue?: boolean | undefined; + /** + * Whether preview should be generated for the result. + * @experimental + */ + generatePreview?: boolean | undefined; + /** + * Whether to throw an exception if side effect cannot be ruled out during evaluation. + */ + throwOnSideEffect?: boolean | undefined; + } + interface SetVariableValueParameterType { + /** + * 0-based number of scope as was listed in scope chain. Only 'local', 'closure' and 'catch' scope types are allowed. Other scopes could be manipulated manually. + */ + scopeNumber: number; + /** + * Variable name. + */ + variableName: string; + /** + * New variable value. + */ + newValue: Runtime.CallArgument; + /** + * Id of callframe that holds variable. + */ + callFrameId: CallFrameId; + } + interface SetReturnValueParameterType { + /** + * New return value. + */ + newValue: Runtime.CallArgument; + } + interface SetAsyncCallStackDepthParameterType { + /** + * Maximum depth of async call stacks. Setting to 0 will effectively disable collecting async call stacks (default). + */ + maxDepth: number; + } + interface SetBlackboxPatternsParameterType { + /** + * Array of regexps that will be used to check script url for blackbox state. + */ + patterns: string[]; + } + interface SetBlackboxedRangesParameterType { + /** + * Id of the script. + */ + scriptId: Runtime.ScriptId; + positions: ScriptPosition[]; + } + interface EnableReturnType { + /** + * Unique identifier of the debugger. + * @experimental + */ + debuggerId: Runtime.UniqueDebuggerId; + } + interface SetBreakpointByUrlReturnType { + /** + * Id of the created breakpoint for further reference. + */ + breakpointId: BreakpointId; + /** + * List of the locations this breakpoint resolved into upon addition. + */ + locations: Location[]; + } + interface SetBreakpointReturnType { + /** + * Id of the created breakpoint for further reference. + */ + breakpointId: BreakpointId; + /** + * Location this breakpoint resolved into. + */ + actualLocation: Location; + } + interface GetPossibleBreakpointsReturnType { + /** + * List of the possible breakpoint locations. + */ + locations: BreakLocation[]; + } + interface GetStackTraceReturnType { + stackTrace: Runtime.StackTrace; + } + interface SearchInContentReturnType { + /** + * List of search matches. + */ + result: SearchMatch[]; + } + interface SetScriptSourceReturnType { + /** + * New stack trace in case editing has happened while VM was stopped. + */ + callFrames?: CallFrame[] | undefined; + /** + * Whether current call stack was modified after applying the changes. + */ + stackChanged?: boolean | undefined; + /** + * Async stack trace, if any. + */ + asyncStackTrace?: Runtime.StackTrace | undefined; + /** + * Async stack trace, if any. + * @experimental + */ + asyncStackTraceId?: Runtime.StackTraceId | undefined; + /** + * Exception details if any. + */ + exceptionDetails?: Runtime.ExceptionDetails | undefined; + } + interface RestartFrameReturnType { + /** + * New stack trace. + */ + callFrames: CallFrame[]; + /** + * Async stack trace, if any. + */ + asyncStackTrace?: Runtime.StackTrace | undefined; + /** + * Async stack trace, if any. + * @experimental + */ + asyncStackTraceId?: Runtime.StackTraceId | undefined; + } + interface GetScriptSourceReturnType { + /** + * Script source. + */ + scriptSource: string; + } + interface EvaluateOnCallFrameReturnType { + /** + * Object wrapper for the evaluation result. + */ + result: Runtime.RemoteObject; + /** + * Exception details. + */ + exceptionDetails?: Runtime.ExceptionDetails | undefined; + } + interface ScriptParsedEventDataType { + /** + * Identifier of the script parsed. + */ + scriptId: Runtime.ScriptId; + /** + * URL or name of the script parsed (if any). + */ + url: string; + /** + * Line offset of the script within the resource with given URL (for script tags). + */ + startLine: number; + /** + * Column offset of the script within the resource with given URL. + */ + startColumn: number; + /** + * Last line of the script. + */ + endLine: number; + /** + * Length of the last line of the script. + */ + endColumn: number; + /** + * Specifies script creation context. + */ + executionContextId: Runtime.ExecutionContextId; + /** + * Content hash of the script. + */ + hash: string; + /** + * Embedder-specific auxiliary data. + */ + executionContextAuxData?: {} | undefined; + /** + * True, if this script is generated as a result of the live edit operation. + * @experimental + */ + isLiveEdit?: boolean | undefined; + /** + * URL of source map associated with script (if any). + */ + sourceMapURL?: string | undefined; + /** + * True, if this script has sourceURL. + */ + hasSourceURL?: boolean | undefined; + /** + * True, if this script is ES6 module. + */ + isModule?: boolean | undefined; + /** + * This script length. + */ + length?: number | undefined; + /** + * JavaScript top stack frame of where the script parsed event was triggered if available. + * @experimental + */ + stackTrace?: Runtime.StackTrace | undefined; + } + interface ScriptFailedToParseEventDataType { + /** + * Identifier of the script parsed. + */ + scriptId: Runtime.ScriptId; + /** + * URL or name of the script parsed (if any). + */ + url: string; + /** + * Line offset of the script within the resource with given URL (for script tags). + */ + startLine: number; + /** + * Column offset of the script within the resource with given URL. + */ + startColumn: number; + /** + * Last line of the script. + */ + endLine: number; + /** + * Length of the last line of the script. + */ + endColumn: number; + /** + * Specifies script creation context. + */ + executionContextId: Runtime.ExecutionContextId; + /** + * Content hash of the script. + */ + hash: string; + /** + * Embedder-specific auxiliary data. + */ + executionContextAuxData?: {} | undefined; + /** + * URL of source map associated with script (if any). + */ + sourceMapURL?: string | undefined; + /** + * True, if this script has sourceURL. + */ + hasSourceURL?: boolean | undefined; + /** + * True, if this script is ES6 module. + */ + isModule?: boolean | undefined; + /** + * This script length. + */ + length?: number | undefined; + /** + * JavaScript top stack frame of where the script parsed event was triggered if available. + * @experimental + */ + stackTrace?: Runtime.StackTrace | undefined; + } + interface BreakpointResolvedEventDataType { + /** + * Breakpoint unique identifier. + */ + breakpointId: BreakpointId; + /** + * Actual breakpoint location. + */ + location: Location; + } + interface PausedEventDataType { + /** + * Call stack the virtual machine stopped on. + */ + callFrames: CallFrame[]; + /** + * Pause reason. + */ + reason: string; + /** + * Object containing break-specific auxiliary properties. + */ + data?: {} | undefined; + /** + * Hit breakpoints IDs + */ + hitBreakpoints?: string[] | undefined; + /** + * Async stack trace, if any. + */ + asyncStackTrace?: Runtime.StackTrace | undefined; + /** + * Async stack trace, if any. + * @experimental + */ + asyncStackTraceId?: Runtime.StackTraceId | undefined; + /** + * Just scheduled async call will have this stack trace as parent stack during async execution. This field is available only after Debugger.stepInto call with breakOnAsynCall flag. + * @experimental + */ + asyncCallStackTraceId?: Runtime.StackTraceId | undefined; + } + } + namespace Console { + /** + * Console message. + */ + interface ConsoleMessage { + /** + * Message source. + */ + source: string; + /** + * Message severity. + */ + level: string; + /** + * Message text. + */ + text: string; + /** + * URL of the message origin. + */ + url?: string | undefined; + /** + * Line number in the resource that generated this message (1-based). + */ + line?: number | undefined; + /** + * Column number in the resource that generated this message (1-based). + */ + column?: number | undefined; + } + interface MessageAddedEventDataType { + /** + * Console message that has been added. + */ + message: ConsoleMessage; + } + } + namespace Profiler { + /** + * Profile node. Holds callsite information, execution statistics and child nodes. + */ + interface ProfileNode { + /** + * Unique id of the node. + */ + id: number; + /** + * Function location. + */ + callFrame: Runtime.CallFrame; + /** + * Number of samples where this node was on top of the call stack. + */ + hitCount?: number | undefined; + /** + * Child node ids. + */ + children?: number[] | undefined; + /** + * The reason of being not optimized. The function may be deoptimized or marked as don't optimize. + */ + deoptReason?: string | undefined; + /** + * An array of source position ticks. + */ + positionTicks?: PositionTickInfo[] | undefined; + } + /** + * Profile. + */ + interface Profile { + /** + * The list of profile nodes. First item is the root node. + */ + nodes: ProfileNode[]; + /** + * Profiling start timestamp in microseconds. + */ + startTime: number; + /** + * Profiling end timestamp in microseconds. + */ + endTime: number; + /** + * Ids of samples top nodes. + */ + samples?: number[] | undefined; + /** + * Time intervals between adjacent samples in microseconds. The first delta is relative to the profile startTime. + */ + timeDeltas?: number[] | undefined; + } + /** + * Specifies a number of samples attributed to a certain source position. + */ + interface PositionTickInfo { + /** + * Source line number (1-based). + */ + line: number; + /** + * Number of samples attributed to the source line. + */ + ticks: number; + } + /** + * Coverage data for a source range. + */ + interface CoverageRange { + /** + * JavaScript script source offset for the range start. + */ + startOffset: number; + /** + * JavaScript script source offset for the range end. + */ + endOffset: number; + /** + * Collected execution count of the source range. + */ + count: number; + } + /** + * Coverage data for a JavaScript function. + */ + interface FunctionCoverage { + /** + * JavaScript function name. + */ + functionName: string; + /** + * Source ranges inside the function with coverage data. + */ + ranges: CoverageRange[]; + /** + * Whether coverage data for this function has block granularity. + */ + isBlockCoverage: boolean; + } + /** + * Coverage data for a JavaScript script. + */ + interface ScriptCoverage { + /** + * JavaScript script id. + */ + scriptId: Runtime.ScriptId; + /** + * JavaScript script name or url. + */ + url: string; + /** + * Functions contained in the script that has coverage data. + */ + functions: FunctionCoverage[]; + } + /** + * Describes a type collected during runtime. + * @experimental + */ + interface TypeObject { + /** + * Name of a type collected with type profiling. + */ + name: string; + } + /** + * Source offset and types for a parameter or return value. + * @experimental + */ + interface TypeProfileEntry { + /** + * Source offset of the parameter or end of function for return values. + */ + offset: number; + /** + * The types for this parameter or return value. + */ + types: TypeObject[]; + } + /** + * Type profile data collected during runtime for a JavaScript script. + * @experimental + */ + interface ScriptTypeProfile { + /** + * JavaScript script id. + */ + scriptId: Runtime.ScriptId; + /** + * JavaScript script name or url. + */ + url: string; + /** + * Type profile entries for parameters and return values of the functions in the script. + */ + entries: TypeProfileEntry[]; + } + interface SetSamplingIntervalParameterType { + /** + * New sampling interval in microseconds. + */ + interval: number; + } + interface StartPreciseCoverageParameterType { + /** + * Collect accurate call counts beyond simple 'covered' or 'not covered'. + */ + callCount?: boolean | undefined; + /** + * Collect block-based coverage. + */ + detailed?: boolean | undefined; + } + interface StopReturnType { + /** + * Recorded profile. + */ + profile: Profile; + } + interface TakePreciseCoverageReturnType { + /** + * Coverage data for the current isolate. + */ + result: ScriptCoverage[]; + } + interface GetBestEffortCoverageReturnType { + /** + * Coverage data for the current isolate. + */ + result: ScriptCoverage[]; + } + interface TakeTypeProfileReturnType { + /** + * Type profile for all scripts since startTypeProfile() was turned on. + */ + result: ScriptTypeProfile[]; + } + interface ConsoleProfileStartedEventDataType { + id: string; + /** + * Location of console.profile(). + */ + location: Debugger.Location; + /** + * Profile title passed as an argument to console.profile(). + */ + title?: string | undefined; + } + interface ConsoleProfileFinishedEventDataType { + id: string; + /** + * Location of console.profileEnd(). + */ + location: Debugger.Location; + profile: Profile; + /** + * Profile title passed as an argument to console.profile(). + */ + title?: string | undefined; + } + } + namespace HeapProfiler { + /** + * Heap snapshot object id. + */ + type HeapSnapshotObjectId = string; + /** + * Sampling Heap Profile node. Holds callsite information, allocation statistics and child nodes. + */ + interface SamplingHeapProfileNode { + /** + * Function location. + */ + callFrame: Runtime.CallFrame; + /** + * Allocations size in bytes for the node excluding children. + */ + selfSize: number; + /** + * Child nodes. + */ + children: SamplingHeapProfileNode[]; + } + /** + * Profile. + */ + interface SamplingHeapProfile { + head: SamplingHeapProfileNode; + } + interface StartTrackingHeapObjectsParameterType { + trackAllocations?: boolean | undefined; + } + interface StopTrackingHeapObjectsParameterType { + /** + * If true 'reportHeapSnapshotProgress' events will be generated while snapshot is being taken when the tracking is stopped. + */ + reportProgress?: boolean | undefined; + } + interface TakeHeapSnapshotParameterType { + /** + * If true 'reportHeapSnapshotProgress' events will be generated while snapshot is being taken. + */ + reportProgress?: boolean | undefined; + } + interface GetObjectByHeapObjectIdParameterType { + objectId: HeapSnapshotObjectId; + /** + * Symbolic group name that can be used to release multiple objects. + */ + objectGroup?: string | undefined; + } + interface AddInspectedHeapObjectParameterType { + /** + * Heap snapshot object id to be accessible by means of $x command line API. + */ + heapObjectId: HeapSnapshotObjectId; + } + interface GetHeapObjectIdParameterType { + /** + * Identifier of the object to get heap object id for. + */ + objectId: Runtime.RemoteObjectId; + } + interface StartSamplingParameterType { + /** + * Average sample interval in bytes. Poisson distribution is used for the intervals. The default value is 32768 bytes. + */ + samplingInterval?: number | undefined; + } + interface GetObjectByHeapObjectIdReturnType { + /** + * Evaluation result. + */ + result: Runtime.RemoteObject; + } + interface GetHeapObjectIdReturnType { + /** + * Id of the heap snapshot object corresponding to the passed remote object id. + */ + heapSnapshotObjectId: HeapSnapshotObjectId; + } + interface StopSamplingReturnType { + /** + * Recorded sampling heap profile. + */ + profile: SamplingHeapProfile; + } + interface GetSamplingProfileReturnType { + /** + * Return the sampling profile being collected. + */ + profile: SamplingHeapProfile; + } + interface AddHeapSnapshotChunkEventDataType { + chunk: string; + } + interface ReportHeapSnapshotProgressEventDataType { + done: number; + total: number; + finished?: boolean | undefined; + } + interface LastSeenObjectIdEventDataType { + lastSeenObjectId: number; + timestamp: number; + } + interface HeapStatsUpdateEventDataType { + /** + * An array of triplets. Each triplet describes a fragment. The first integer is the fragment index, the second integer is a total count of objects for the fragment, the third integer is a total size of the objects for the fragment. + */ + statsUpdate: number[]; + } + } + namespace NodeTracing { + interface TraceConfig { + /** + * Controls how the trace buffer stores data. + */ + recordMode?: string | undefined; + /** + * Included category filters. + */ + includedCategories: string[]; + } + interface StartParameterType { + traceConfig: TraceConfig; + } + interface GetCategoriesReturnType { + /** + * A list of supported tracing categories. + */ + categories: string[]; + } + interface DataCollectedEventDataType { + value: Array<{}>; + } + } + namespace NodeWorker { + type WorkerID = string; + /** + * Unique identifier of attached debugging session. + */ + type SessionID = string; + interface WorkerInfo { + workerId: WorkerID; + type: string; + title: string; + url: string; + } + interface SendMessageToWorkerParameterType { + message: string; + /** + * Identifier of the session. + */ + sessionId: SessionID; + } + interface EnableParameterType { + /** + * Whether to new workers should be paused until the frontend sends `Runtime.runIfWaitingForDebugger` + * message to run them. + */ + waitForDebuggerOnStart: boolean; + } + interface DetachParameterType { + sessionId: SessionID; + } + interface AttachedToWorkerEventDataType { + /** + * Identifier assigned to the session used to send/receive messages. + */ + sessionId: SessionID; + workerInfo: WorkerInfo; + waitingForDebugger: boolean; + } + interface DetachedFromWorkerEventDataType { + /** + * Detached session identifier. + */ + sessionId: SessionID; + } + interface ReceivedMessageFromWorkerEventDataType { + /** + * Identifier of a session which sends a message. + */ + sessionId: SessionID; + message: string; + } + } + namespace NodeRuntime { + interface NotifyWhenWaitingForDisconnectParameterType { + enabled: boolean; + } + } + /** + * The `inspector.Session` is used for dispatching messages to the V8 inspector + * back-end and receiving message responses and notifications. + */ + class Session extends EventEmitter { + /** + * Create a new instance of the inspector.Session class. + * The inspector session needs to be connected through session.connect() before the messages can be dispatched to the inspector backend. + */ + constructor(); + /** + * Connects a session to the inspector back-end. + * @since v8.0.0 + */ + connect(): void; + /** + * Immediately close the session. All pending message callbacks will be called + * with an error. `session.connect()` will need to be called to be able to send + * messages again. Reconnected session will lose all inspector state, such as + * enabled agents or configured breakpoints. + * @since v8.0.0 + */ + disconnect(): void; + /** + * Posts a message to the inspector back-end. `callback` will be notified when + * a response is received. `callback` is a function that accepts two optional + * arguments: error and message-specific result. + * + * ```js + * session.post('Runtime.evaluate', { expression: '2 + 2' }, + * (error, { result }) => console.log(result)); + * // Output: { type: 'number', value: 4, description: '4' } + * ``` + * + * The latest version of the V8 inspector protocol is published on the [Chrome DevTools Protocol Viewer](https://chromedevtools.github.io/devtools-protocol/v8/). + * + * Node.js inspector supports all the Chrome DevTools Protocol domains declared + * by V8\. Chrome DevTools Protocol domain provides an interface for interacting + * with one of the runtime agents used to inspect the application state and listen + * to the run-time events. + * + * ## Example usage + * + * Apart from the debugger, various V8 Profilers are available through the DevTools + * protocol. + * @since v8.0.0 + */ + post(method: string, params?: {}, callback?: (err: Error | null, params?: {}) => void): void; + post(method: string, callback?: (err: Error | null, params?: {}) => void): void; + /** + * Returns supported domains. + */ + post(method: 'Schema.getDomains', callback?: (err: Error | null, params: Schema.GetDomainsReturnType) => void): void; + /** + * Evaluates expression on global object. + */ + post(method: 'Runtime.evaluate', params?: Runtime.EvaluateParameterType, callback?: (err: Error | null, params: Runtime.EvaluateReturnType) => void): void; + post(method: 'Runtime.evaluate', callback?: (err: Error | null, params: Runtime.EvaluateReturnType) => void): void; + /** + * Add handler to promise with given promise object id. + */ + post(method: 'Runtime.awaitPromise', params?: Runtime.AwaitPromiseParameterType, callback?: (err: Error | null, params: Runtime.AwaitPromiseReturnType) => void): void; + post(method: 'Runtime.awaitPromise', callback?: (err: Error | null, params: Runtime.AwaitPromiseReturnType) => void): void; + /** + * Calls function with given declaration on the given object. Object group of the result is inherited from the target object. + */ + post(method: 'Runtime.callFunctionOn', params?: Runtime.CallFunctionOnParameterType, callback?: (err: Error | null, params: Runtime.CallFunctionOnReturnType) => void): void; + post(method: 'Runtime.callFunctionOn', callback?: (err: Error | null, params: Runtime.CallFunctionOnReturnType) => void): void; + /** + * Returns properties of a given object. Object group of the result is inherited from the target object. + */ + post(method: 'Runtime.getProperties', params?: Runtime.GetPropertiesParameterType, callback?: (err: Error | null, params: Runtime.GetPropertiesReturnType) => void): void; + post(method: 'Runtime.getProperties', callback?: (err: Error | null, params: Runtime.GetPropertiesReturnType) => void): void; + /** + * Releases remote object with given id. + */ + post(method: 'Runtime.releaseObject', params?: Runtime.ReleaseObjectParameterType, callback?: (err: Error | null) => void): void; + post(method: 'Runtime.releaseObject', callback?: (err: Error | null) => void): void; + /** + * Releases all remote objects that belong to a given group. + */ + post(method: 'Runtime.releaseObjectGroup', params?: Runtime.ReleaseObjectGroupParameterType, callback?: (err: Error | null) => void): void; + post(method: 'Runtime.releaseObjectGroup', callback?: (err: Error | null) => void): void; + /** + * Tells inspected instance to run if it was waiting for debugger to attach. + */ + post(method: 'Runtime.runIfWaitingForDebugger', callback?: (err: Error | null) => void): void; + /** + * Enables reporting of execution contexts creation by means of executionContextCreated event. When the reporting gets enabled the event will be sent immediately for each existing execution context. + */ + post(method: 'Runtime.enable', callback?: (err: Error | null) => void): void; + /** + * Disables reporting of execution contexts creation. + */ + post(method: 'Runtime.disable', callback?: (err: Error | null) => void): void; + /** + * Discards collected exceptions and console API calls. + */ + post(method: 'Runtime.discardConsoleEntries', callback?: (err: Error | null) => void): void; + /** + * @experimental + */ + post(method: 'Runtime.setCustomObjectFormatterEnabled', params?: Runtime.SetCustomObjectFormatterEnabledParameterType, callback?: (err: Error | null) => void): void; + post(method: 'Runtime.setCustomObjectFormatterEnabled', callback?: (err: Error | null) => void): void; + /** + * Compiles expression. + */ + post(method: 'Runtime.compileScript', params?: Runtime.CompileScriptParameterType, callback?: (err: Error | null, params: Runtime.CompileScriptReturnType) => void): void; + post(method: 'Runtime.compileScript', callback?: (err: Error | null, params: Runtime.CompileScriptReturnType) => void): void; + /** + * Runs script with given id in a given context. + */ + post(method: 'Runtime.runScript', params?: Runtime.RunScriptParameterType, callback?: (err: Error | null, params: Runtime.RunScriptReturnType) => void): void; + post(method: 'Runtime.runScript', callback?: (err: Error | null, params: Runtime.RunScriptReturnType) => void): void; + post(method: 'Runtime.queryObjects', params?: Runtime.QueryObjectsParameterType, callback?: (err: Error | null, params: Runtime.QueryObjectsReturnType) => void): void; + post(method: 'Runtime.queryObjects', callback?: (err: Error | null, params: Runtime.QueryObjectsReturnType) => void): void; + /** + * Returns all let, const and class variables from global scope. + */ + post( + method: 'Runtime.globalLexicalScopeNames', + params?: Runtime.GlobalLexicalScopeNamesParameterType, + callback?: (err: Error | null, params: Runtime.GlobalLexicalScopeNamesReturnType) => void + ): void; + post(method: 'Runtime.globalLexicalScopeNames', callback?: (err: Error | null, params: Runtime.GlobalLexicalScopeNamesReturnType) => void): void; + /** + * Enables debugger for the given page. Clients should not assume that the debugging has been enabled until the result for this command is received. + */ + post(method: 'Debugger.enable', callback?: (err: Error | null, params: Debugger.EnableReturnType) => void): void; + /** + * Disables debugger for given page. + */ + post(method: 'Debugger.disable', callback?: (err: Error | null) => void): void; + /** + * Activates / deactivates all breakpoints on the page. + */ + post(method: 'Debugger.setBreakpointsActive', params?: Debugger.SetBreakpointsActiveParameterType, callback?: (err: Error | null) => void): void; + post(method: 'Debugger.setBreakpointsActive', callback?: (err: Error | null) => void): void; + /** + * Makes page not interrupt on any pauses (breakpoint, exception, dom exception etc). + */ + post(method: 'Debugger.setSkipAllPauses', params?: Debugger.SetSkipAllPausesParameterType, callback?: (err: Error | null) => void): void; + post(method: 'Debugger.setSkipAllPauses', callback?: (err: Error | null) => void): void; + /** + * Sets JavaScript breakpoint at given location specified either by URL or URL regex. Once this command is issued, all existing parsed scripts will have breakpoints resolved and returned in locations property. Further matching script parsing will result in subsequent breakpointResolved events issued. This logical breakpoint will survive page reloads. + */ + post(method: 'Debugger.setBreakpointByUrl', params?: Debugger.SetBreakpointByUrlParameterType, callback?: (err: Error | null, params: Debugger.SetBreakpointByUrlReturnType) => void): void; + post(method: 'Debugger.setBreakpointByUrl', callback?: (err: Error | null, params: Debugger.SetBreakpointByUrlReturnType) => void): void; + /** + * Sets JavaScript breakpoint at a given location. + */ + post(method: 'Debugger.setBreakpoint', params?: Debugger.SetBreakpointParameterType, callback?: (err: Error | null, params: Debugger.SetBreakpointReturnType) => void): void; + post(method: 'Debugger.setBreakpoint', callback?: (err: Error | null, params: Debugger.SetBreakpointReturnType) => void): void; + /** + * Removes JavaScript breakpoint. + */ + post(method: 'Debugger.removeBreakpoint', params?: Debugger.RemoveBreakpointParameterType, callback?: (err: Error | null) => void): void; + post(method: 'Debugger.removeBreakpoint', callback?: (err: Error | null) => void): void; + /** + * Returns possible locations for breakpoint. scriptId in start and end range locations should be the same. + */ + post( + method: 'Debugger.getPossibleBreakpoints', + params?: Debugger.GetPossibleBreakpointsParameterType, + callback?: (err: Error | null, params: Debugger.GetPossibleBreakpointsReturnType) => void + ): void; + post(method: 'Debugger.getPossibleBreakpoints', callback?: (err: Error | null, params: Debugger.GetPossibleBreakpointsReturnType) => void): void; + /** + * Continues execution until specific location is reached. + */ + post(method: 'Debugger.continueToLocation', params?: Debugger.ContinueToLocationParameterType, callback?: (err: Error | null) => void): void; + post(method: 'Debugger.continueToLocation', callback?: (err: Error | null) => void): void; + /** + * @experimental + */ + post(method: 'Debugger.pauseOnAsyncCall', params?: Debugger.PauseOnAsyncCallParameterType, callback?: (err: Error | null) => void): void; + post(method: 'Debugger.pauseOnAsyncCall', callback?: (err: Error | null) => void): void; + /** + * Steps over the statement. + */ + post(method: 'Debugger.stepOver', callback?: (err: Error | null) => void): void; + /** + * Steps into the function call. + */ + post(method: 'Debugger.stepInto', params?: Debugger.StepIntoParameterType, callback?: (err: Error | null) => void): void; + post(method: 'Debugger.stepInto', callback?: (err: Error | null) => void): void; + /** + * Steps out of the function call. + */ + post(method: 'Debugger.stepOut', callback?: (err: Error | null) => void): void; + /** + * Stops on the next JavaScript statement. + */ + post(method: 'Debugger.pause', callback?: (err: Error | null) => void): void; + /** + * This method is deprecated - use Debugger.stepInto with breakOnAsyncCall and Debugger.pauseOnAsyncTask instead. Steps into next scheduled async task if any is scheduled before next pause. Returns success when async task is actually scheduled, returns error if no task were scheduled or another scheduleStepIntoAsync was called. + * @experimental + */ + post(method: 'Debugger.scheduleStepIntoAsync', callback?: (err: Error | null) => void): void; + /** + * Resumes JavaScript execution. + */ + post(method: 'Debugger.resume', callback?: (err: Error | null) => void): void; + /** + * Returns stack trace with given stackTraceId. + * @experimental + */ + post(method: 'Debugger.getStackTrace', params?: Debugger.GetStackTraceParameterType, callback?: (err: Error | null, params: Debugger.GetStackTraceReturnType) => void): void; + post(method: 'Debugger.getStackTrace', callback?: (err: Error | null, params: Debugger.GetStackTraceReturnType) => void): void; + /** + * Searches for given string in script content. + */ + post(method: 'Debugger.searchInContent', params?: Debugger.SearchInContentParameterType, callback?: (err: Error | null, params: Debugger.SearchInContentReturnType) => void): void; + post(method: 'Debugger.searchInContent', callback?: (err: Error | null, params: Debugger.SearchInContentReturnType) => void): void; + /** + * Edits JavaScript source live. + */ + post(method: 'Debugger.setScriptSource', params?: Debugger.SetScriptSourceParameterType, callback?: (err: Error | null, params: Debugger.SetScriptSourceReturnType) => void): void; + post(method: 'Debugger.setScriptSource', callback?: (err: Error | null, params: Debugger.SetScriptSourceReturnType) => void): void; + /** + * Restarts particular call frame from the beginning. + */ + post(method: 'Debugger.restartFrame', params?: Debugger.RestartFrameParameterType, callback?: (err: Error | null, params: Debugger.RestartFrameReturnType) => void): void; + post(method: 'Debugger.restartFrame', callback?: (err: Error | null, params: Debugger.RestartFrameReturnType) => void): void; + /** + * Returns source for the script with given id. + */ + post(method: 'Debugger.getScriptSource', params?: Debugger.GetScriptSourceParameterType, callback?: (err: Error | null, params: Debugger.GetScriptSourceReturnType) => void): void; + post(method: 'Debugger.getScriptSource', callback?: (err: Error | null, params: Debugger.GetScriptSourceReturnType) => void): void; + /** + * Defines pause on exceptions state. Can be set to stop on all exceptions, uncaught exceptions or no exceptions. Initial pause on exceptions state is none. + */ + post(method: 'Debugger.setPauseOnExceptions', params?: Debugger.SetPauseOnExceptionsParameterType, callback?: (err: Error | null) => void): void; + post(method: 'Debugger.setPauseOnExceptions', callback?: (err: Error | null) => void): void; + /** + * Evaluates expression on a given call frame. + */ + post(method: 'Debugger.evaluateOnCallFrame', params?: Debugger.EvaluateOnCallFrameParameterType, callback?: (err: Error | null, params: Debugger.EvaluateOnCallFrameReturnType) => void): void; + post(method: 'Debugger.evaluateOnCallFrame', callback?: (err: Error | null, params: Debugger.EvaluateOnCallFrameReturnType) => void): void; + /** + * Changes value of variable in a callframe. Object-based scopes are not supported and must be mutated manually. + */ + post(method: 'Debugger.setVariableValue', params?: Debugger.SetVariableValueParameterType, callback?: (err: Error | null) => void): void; + post(method: 'Debugger.setVariableValue', callback?: (err: Error | null) => void): void; + /** + * Changes return value in top frame. Available only at return break position. + * @experimental + */ + post(method: 'Debugger.setReturnValue', params?: Debugger.SetReturnValueParameterType, callback?: (err: Error | null) => void): void; + post(method: 'Debugger.setReturnValue', callback?: (err: Error | null) => void): void; + /** + * Enables or disables async call stacks tracking. + */ + post(method: 'Debugger.setAsyncCallStackDepth', params?: Debugger.SetAsyncCallStackDepthParameterType, callback?: (err: Error | null) => void): void; + post(method: 'Debugger.setAsyncCallStackDepth', callback?: (err: Error | null) => void): void; + /** + * Replace previous blackbox patterns with passed ones. Forces backend to skip stepping/pausing in scripts with url matching one of the patterns. VM will try to leave blackboxed script by performing 'step in' several times, finally resorting to 'step out' if unsuccessful. + * @experimental + */ + post(method: 'Debugger.setBlackboxPatterns', params?: Debugger.SetBlackboxPatternsParameterType, callback?: (err: Error | null) => void): void; + post(method: 'Debugger.setBlackboxPatterns', callback?: (err: Error | null) => void): void; + /** + * Makes backend skip steps in the script in blackboxed ranges. VM will try leave blacklisted scripts by performing 'step in' several times, finally resorting to 'step out' if unsuccessful. Positions array contains positions where blackbox state is changed. First interval isn't blackboxed. Array should be sorted. + * @experimental + */ + post(method: 'Debugger.setBlackboxedRanges', params?: Debugger.SetBlackboxedRangesParameterType, callback?: (err: Error | null) => void): void; + post(method: 'Debugger.setBlackboxedRanges', callback?: (err: Error | null) => void): void; + /** + * Enables console domain, sends the messages collected so far to the client by means of the messageAdded notification. + */ + post(method: 'Console.enable', callback?: (err: Error | null) => void): void; + /** + * Disables console domain, prevents further console messages from being reported to the client. + */ + post(method: 'Console.disable', callback?: (err: Error | null) => void): void; + /** + * Does nothing. + */ + post(method: 'Console.clearMessages', callback?: (err: Error | null) => void): void; + post(method: 'Profiler.enable', callback?: (err: Error | null) => void): void; + post(method: 'Profiler.disable', callback?: (err: Error | null) => void): void; + /** + * Changes CPU profiler sampling interval. Must be called before CPU profiles recording started. + */ + post(method: 'Profiler.setSamplingInterval', params?: Profiler.SetSamplingIntervalParameterType, callback?: (err: Error | null) => void): void; + post(method: 'Profiler.setSamplingInterval', callback?: (err: Error | null) => void): void; + post(method: 'Profiler.start', callback?: (err: Error | null) => void): void; + post(method: 'Profiler.stop', callback?: (err: Error | null, params: Profiler.StopReturnType) => void): void; + /** + * Enable precise code coverage. Coverage data for JavaScript executed before enabling precise code coverage may be incomplete. Enabling prevents running optimized code and resets execution counters. + */ + post(method: 'Profiler.startPreciseCoverage', params?: Profiler.StartPreciseCoverageParameterType, callback?: (err: Error | null) => void): void; + post(method: 'Profiler.startPreciseCoverage', callback?: (err: Error | null) => void): void; + /** + * Disable precise code coverage. Disabling releases unnecessary execution count records and allows executing optimized code. + */ + post(method: 'Profiler.stopPreciseCoverage', callback?: (err: Error | null) => void): void; + /** + * Collect coverage data for the current isolate, and resets execution counters. Precise code coverage needs to have started. + */ + post(method: 'Profiler.takePreciseCoverage', callback?: (err: Error | null, params: Profiler.TakePreciseCoverageReturnType) => void): void; + /** + * Collect coverage data for the current isolate. The coverage data may be incomplete due to garbage collection. + */ + post(method: 'Profiler.getBestEffortCoverage', callback?: (err: Error | null, params: Profiler.GetBestEffortCoverageReturnType) => void): void; + /** + * Enable type profile. + * @experimental + */ + post(method: 'Profiler.startTypeProfile', callback?: (err: Error | null) => void): void; + /** + * Disable type profile. Disabling releases type profile data collected so far. + * @experimental + */ + post(method: 'Profiler.stopTypeProfile', callback?: (err: Error | null) => void): void; + /** + * Collect type profile. + * @experimental + */ + post(method: 'Profiler.takeTypeProfile', callback?: (err: Error | null, params: Profiler.TakeTypeProfileReturnType) => void): void; + post(method: 'HeapProfiler.enable', callback?: (err: Error | null) => void): void; + post(method: 'HeapProfiler.disable', callback?: (err: Error | null) => void): void; + post(method: 'HeapProfiler.startTrackingHeapObjects', params?: HeapProfiler.StartTrackingHeapObjectsParameterType, callback?: (err: Error | null) => void): void; + post(method: 'HeapProfiler.startTrackingHeapObjects', callback?: (err: Error | null) => void): void; + post(method: 'HeapProfiler.stopTrackingHeapObjects', params?: HeapProfiler.StopTrackingHeapObjectsParameterType, callback?: (err: Error | null) => void): void; + post(method: 'HeapProfiler.stopTrackingHeapObjects', callback?: (err: Error | null) => void): void; + post(method: 'HeapProfiler.takeHeapSnapshot', params?: HeapProfiler.TakeHeapSnapshotParameterType, callback?: (err: Error | null) => void): void; + post(method: 'HeapProfiler.takeHeapSnapshot', callback?: (err: Error | null) => void): void; + post(method: 'HeapProfiler.collectGarbage', callback?: (err: Error | null) => void): void; + post( + method: 'HeapProfiler.getObjectByHeapObjectId', + params?: HeapProfiler.GetObjectByHeapObjectIdParameterType, + callback?: (err: Error | null, params: HeapProfiler.GetObjectByHeapObjectIdReturnType) => void + ): void; + post(method: 'HeapProfiler.getObjectByHeapObjectId', callback?: (err: Error | null, params: HeapProfiler.GetObjectByHeapObjectIdReturnType) => void): void; + /** + * Enables console to refer to the node with given id via $x (see Command Line API for more details $x functions). + */ + post(method: 'HeapProfiler.addInspectedHeapObject', params?: HeapProfiler.AddInspectedHeapObjectParameterType, callback?: (err: Error | null) => void): void; + post(method: 'HeapProfiler.addInspectedHeapObject', callback?: (err: Error | null) => void): void; + post(method: 'HeapProfiler.getHeapObjectId', params?: HeapProfiler.GetHeapObjectIdParameterType, callback?: (err: Error | null, params: HeapProfiler.GetHeapObjectIdReturnType) => void): void; + post(method: 'HeapProfiler.getHeapObjectId', callback?: (err: Error | null, params: HeapProfiler.GetHeapObjectIdReturnType) => void): void; + post(method: 'HeapProfiler.startSampling', params?: HeapProfiler.StartSamplingParameterType, callback?: (err: Error | null) => void): void; + post(method: 'HeapProfiler.startSampling', callback?: (err: Error | null) => void): void; + post(method: 'HeapProfiler.stopSampling', callback?: (err: Error | null, params: HeapProfiler.StopSamplingReturnType) => void): void; + post(method: 'HeapProfiler.getSamplingProfile', callback?: (err: Error | null, params: HeapProfiler.GetSamplingProfileReturnType) => void): void; + /** + * Gets supported tracing categories. + */ + post(method: 'NodeTracing.getCategories', callback?: (err: Error | null, params: NodeTracing.GetCategoriesReturnType) => void): void; + /** + * Start trace events collection. + */ + post(method: 'NodeTracing.start', params?: NodeTracing.StartParameterType, callback?: (err: Error | null) => void): void; + post(method: 'NodeTracing.start', callback?: (err: Error | null) => void): void; + /** + * Stop trace events collection. Remaining collected events will be sent as a sequence of + * dataCollected events followed by tracingComplete event. + */ + post(method: 'NodeTracing.stop', callback?: (err: Error | null) => void): void; + /** + * Sends protocol message over session with given id. + */ + post(method: 'NodeWorker.sendMessageToWorker', params?: NodeWorker.SendMessageToWorkerParameterType, callback?: (err: Error | null) => void): void; + post(method: 'NodeWorker.sendMessageToWorker', callback?: (err: Error | null) => void): void; + /** + * Instructs the inspector to attach to running workers. Will also attach to new workers + * as they start + */ + post(method: 'NodeWorker.enable', params?: NodeWorker.EnableParameterType, callback?: (err: Error | null) => void): void; + post(method: 'NodeWorker.enable', callback?: (err: Error | null) => void): void; + /** + * Detaches from all running workers and disables attaching to new workers as they are started. + */ + post(method: 'NodeWorker.disable', callback?: (err: Error | null) => void): void; + /** + * Detached from the worker with given sessionId. + */ + post(method: 'NodeWorker.detach', params?: NodeWorker.DetachParameterType, callback?: (err: Error | null) => void): void; + post(method: 'NodeWorker.detach', callback?: (err: Error | null) => void): void; + /** + * Enable the `NodeRuntime.waitingForDisconnect`. + */ + post(method: 'NodeRuntime.notifyWhenWaitingForDisconnect', params?: NodeRuntime.NotifyWhenWaitingForDisconnectParameterType, callback?: (err: Error | null) => void): void; + post(method: 'NodeRuntime.notifyWhenWaitingForDisconnect', callback?: (err: Error | null) => void): void; + // Events + addListener(event: string, listener: (...args: any[]) => void): this; + /** + * Emitted when any notification from the V8 Inspector is received. + */ + addListener(event: 'inspectorNotification', listener: (message: InspectorNotification<{}>) => void): this; + /** + * Issued when new execution context is created. + */ + addListener(event: 'Runtime.executionContextCreated', listener: (message: InspectorNotification) => void): this; + /** + * Issued when execution context is destroyed. + */ + addListener(event: 'Runtime.executionContextDestroyed', listener: (message: InspectorNotification) => void): this; + /** + * Issued when all executionContexts were cleared in browser + */ + addListener(event: 'Runtime.executionContextsCleared', listener: () => void): this; + /** + * Issued when exception was thrown and unhandled. + */ + addListener(event: 'Runtime.exceptionThrown', listener: (message: InspectorNotification) => void): this; + /** + * Issued when unhandled exception was revoked. + */ + addListener(event: 'Runtime.exceptionRevoked', listener: (message: InspectorNotification) => void): this; + /** + * Issued when console API was called. + */ + addListener(event: 'Runtime.consoleAPICalled', listener: (message: InspectorNotification) => void): this; + /** + * Issued when object should be inspected (for example, as a result of inspect() command line API call). + */ + addListener(event: 'Runtime.inspectRequested', listener: (message: InspectorNotification) => void): this; + /** + * Fired when virtual machine parses script. This event is also fired for all known and uncollected scripts upon enabling debugger. + */ + addListener(event: 'Debugger.scriptParsed', listener: (message: InspectorNotification) => void): this; + /** + * Fired when virtual machine fails to parse the script. + */ + addListener(event: 'Debugger.scriptFailedToParse', listener: (message: InspectorNotification) => void): this; + /** + * Fired when breakpoint is resolved to an actual script and location. + */ + addListener(event: 'Debugger.breakpointResolved', listener: (message: InspectorNotification) => void): this; + /** + * Fired when the virtual machine stopped on breakpoint or exception or any other stop criteria. + */ + addListener(event: 'Debugger.paused', listener: (message: InspectorNotification) => void): this; + /** + * Fired when the virtual machine resumed execution. + */ + addListener(event: 'Debugger.resumed', listener: () => void): this; + /** + * Issued when new console message is added. + */ + addListener(event: 'Console.messageAdded', listener: (message: InspectorNotification) => void): this; + /** + * Sent when new profile recording is started using console.profile() call. + */ + addListener(event: 'Profiler.consoleProfileStarted', listener: (message: InspectorNotification) => void): this; + addListener(event: 'Profiler.consoleProfileFinished', listener: (message: InspectorNotification) => void): this; + addListener(event: 'HeapProfiler.addHeapSnapshotChunk', listener: (message: InspectorNotification) => void): this; + addListener(event: 'HeapProfiler.resetProfiles', listener: () => void): this; + addListener(event: 'HeapProfiler.reportHeapSnapshotProgress', listener: (message: InspectorNotification) => void): this; + /** + * If heap objects tracking has been started then backend regularly sends a current value for last seen object id and corresponding timestamp. If the were changes in the heap since last event then one or more heapStatsUpdate events will be sent before a new lastSeenObjectId event. + */ + addListener(event: 'HeapProfiler.lastSeenObjectId', listener: (message: InspectorNotification) => void): this; + /** + * If heap objects tracking has been started then backend may send update for one or more fragments + */ + addListener(event: 'HeapProfiler.heapStatsUpdate', listener: (message: InspectorNotification) => void): this; + /** + * Contains an bucket of collected trace events. + */ + addListener(event: 'NodeTracing.dataCollected', listener: (message: InspectorNotification) => void): this; + /** + * Signals that tracing is stopped and there is no trace buffers pending flush, all data were + * delivered via dataCollected events. + */ + addListener(event: 'NodeTracing.tracingComplete', listener: () => void): this; + /** + * Issued when attached to a worker. + */ + addListener(event: 'NodeWorker.attachedToWorker', listener: (message: InspectorNotification) => void): this; + /** + * Issued when detached from the worker. + */ + addListener(event: 'NodeWorker.detachedFromWorker', listener: (message: InspectorNotification) => void): this; + /** + * Notifies about a new protocol message received from the session + * (session ID is provided in attachedToWorker notification). + */ + addListener(event: 'NodeWorker.receivedMessageFromWorker', listener: (message: InspectorNotification) => void): this; + /** + * This event is fired instead of `Runtime.executionContextDestroyed` when + * enabled. + * It is fired when the Node process finished all code execution and is + * waiting for all frontends to disconnect. + */ + addListener(event: 'NodeRuntime.waitingForDisconnect', listener: () => void): this; + emit(event: string | symbol, ...args: any[]): boolean; + emit(event: 'inspectorNotification', message: InspectorNotification<{}>): boolean; + emit(event: 'Runtime.executionContextCreated', message: InspectorNotification): boolean; + emit(event: 'Runtime.executionContextDestroyed', message: InspectorNotification): boolean; + emit(event: 'Runtime.executionContextsCleared'): boolean; + emit(event: 'Runtime.exceptionThrown', message: InspectorNotification): boolean; + emit(event: 'Runtime.exceptionRevoked', message: InspectorNotification): boolean; + emit(event: 'Runtime.consoleAPICalled', message: InspectorNotification): boolean; + emit(event: 'Runtime.inspectRequested', message: InspectorNotification): boolean; + emit(event: 'Debugger.scriptParsed', message: InspectorNotification): boolean; + emit(event: 'Debugger.scriptFailedToParse', message: InspectorNotification): boolean; + emit(event: 'Debugger.breakpointResolved', message: InspectorNotification): boolean; + emit(event: 'Debugger.paused', message: InspectorNotification): boolean; + emit(event: 'Debugger.resumed'): boolean; + emit(event: 'Console.messageAdded', message: InspectorNotification): boolean; + emit(event: 'Profiler.consoleProfileStarted', message: InspectorNotification): boolean; + emit(event: 'Profiler.consoleProfileFinished', message: InspectorNotification): boolean; + emit(event: 'HeapProfiler.addHeapSnapshotChunk', message: InspectorNotification): boolean; + emit(event: 'HeapProfiler.resetProfiles'): boolean; + emit(event: 'HeapProfiler.reportHeapSnapshotProgress', message: InspectorNotification): boolean; + emit(event: 'HeapProfiler.lastSeenObjectId', message: InspectorNotification): boolean; + emit(event: 'HeapProfiler.heapStatsUpdate', message: InspectorNotification): boolean; + emit(event: 'NodeTracing.dataCollected', message: InspectorNotification): boolean; + emit(event: 'NodeTracing.tracingComplete'): boolean; + emit(event: 'NodeWorker.attachedToWorker', message: InspectorNotification): boolean; + emit(event: 'NodeWorker.detachedFromWorker', message: InspectorNotification): boolean; + emit(event: 'NodeWorker.receivedMessageFromWorker', message: InspectorNotification): boolean; + emit(event: 'NodeRuntime.waitingForDisconnect'): boolean; + on(event: string, listener: (...args: any[]) => void): this; + /** + * Emitted when any notification from the V8 Inspector is received. + */ + on(event: 'inspectorNotification', listener: (message: InspectorNotification<{}>) => void): this; + /** + * Issued when new execution context is created. + */ + on(event: 'Runtime.executionContextCreated', listener: (message: InspectorNotification) => void): this; + /** + * Issued when execution context is destroyed. + */ + on(event: 'Runtime.executionContextDestroyed', listener: (message: InspectorNotification) => void): this; + /** + * Issued when all executionContexts were cleared in browser + */ + on(event: 'Runtime.executionContextsCleared', listener: () => void): this; + /** + * Issued when exception was thrown and unhandled. + */ + on(event: 'Runtime.exceptionThrown', listener: (message: InspectorNotification) => void): this; + /** + * Issued when unhandled exception was revoked. + */ + on(event: 'Runtime.exceptionRevoked', listener: (message: InspectorNotification) => void): this; + /** + * Issued when console API was called. + */ + on(event: 'Runtime.consoleAPICalled', listener: (message: InspectorNotification) => void): this; + /** + * Issued when object should be inspected (for example, as a result of inspect() command line API call). + */ + on(event: 'Runtime.inspectRequested', listener: (message: InspectorNotification) => void): this; + /** + * Fired when virtual machine parses script. This event is also fired for all known and uncollected scripts upon enabling debugger. + */ + on(event: 'Debugger.scriptParsed', listener: (message: InspectorNotification) => void): this; + /** + * Fired when virtual machine fails to parse the script. + */ + on(event: 'Debugger.scriptFailedToParse', listener: (message: InspectorNotification) => void): this; + /** + * Fired when breakpoint is resolved to an actual script and location. + */ + on(event: 'Debugger.breakpointResolved', listener: (message: InspectorNotification) => void): this; + /** + * Fired when the virtual machine stopped on breakpoint or exception or any other stop criteria. + */ + on(event: 'Debugger.paused', listener: (message: InspectorNotification) => void): this; + /** + * Fired when the virtual machine resumed execution. + */ + on(event: 'Debugger.resumed', listener: () => void): this; + /** + * Issued when new console message is added. + */ + on(event: 'Console.messageAdded', listener: (message: InspectorNotification) => void): this; + /** + * Sent when new profile recording is started using console.profile() call. + */ + on(event: 'Profiler.consoleProfileStarted', listener: (message: InspectorNotification) => void): this; + on(event: 'Profiler.consoleProfileFinished', listener: (message: InspectorNotification) => void): this; + on(event: 'HeapProfiler.addHeapSnapshotChunk', listener: (message: InspectorNotification) => void): this; + on(event: 'HeapProfiler.resetProfiles', listener: () => void): this; + on(event: 'HeapProfiler.reportHeapSnapshotProgress', listener: (message: InspectorNotification) => void): this; + /** + * If heap objects tracking has been started then backend regularly sends a current value for last seen object id and corresponding timestamp. If the were changes in the heap since last event then one or more heapStatsUpdate events will be sent before a new lastSeenObjectId event. + */ + on(event: 'HeapProfiler.lastSeenObjectId', listener: (message: InspectorNotification) => void): this; + /** + * If heap objects tracking has been started then backend may send update for one or more fragments + */ + on(event: 'HeapProfiler.heapStatsUpdate', listener: (message: InspectorNotification) => void): this; + /** + * Contains an bucket of collected trace events. + */ + on(event: 'NodeTracing.dataCollected', listener: (message: InspectorNotification) => void): this; + /** + * Signals that tracing is stopped and there is no trace buffers pending flush, all data were + * delivered via dataCollected events. + */ + on(event: 'NodeTracing.tracingComplete', listener: () => void): this; + /** + * Issued when attached to a worker. + */ + on(event: 'NodeWorker.attachedToWorker', listener: (message: InspectorNotification) => void): this; + /** + * Issued when detached from the worker. + */ + on(event: 'NodeWorker.detachedFromWorker', listener: (message: InspectorNotification) => void): this; + /** + * Notifies about a new protocol message received from the session + * (session ID is provided in attachedToWorker notification). + */ + on(event: 'NodeWorker.receivedMessageFromWorker', listener: (message: InspectorNotification) => void): this; + /** + * This event is fired instead of `Runtime.executionContextDestroyed` when + * enabled. + * It is fired when the Node process finished all code execution and is + * waiting for all frontends to disconnect. + */ + on(event: 'NodeRuntime.waitingForDisconnect', listener: () => void): this; + once(event: string, listener: (...args: any[]) => void): this; + /** + * Emitted when any notification from the V8 Inspector is received. + */ + once(event: 'inspectorNotification', listener: (message: InspectorNotification<{}>) => void): this; + /** + * Issued when new execution context is created. + */ + once(event: 'Runtime.executionContextCreated', listener: (message: InspectorNotification) => void): this; + /** + * Issued when execution context is destroyed. + */ + once(event: 'Runtime.executionContextDestroyed', listener: (message: InspectorNotification) => void): this; + /** + * Issued when all executionContexts were cleared in browser + */ + once(event: 'Runtime.executionContextsCleared', listener: () => void): this; + /** + * Issued when exception was thrown and unhandled. + */ + once(event: 'Runtime.exceptionThrown', listener: (message: InspectorNotification) => void): this; + /** + * Issued when unhandled exception was revoked. + */ + once(event: 'Runtime.exceptionRevoked', listener: (message: InspectorNotification) => void): this; + /** + * Issued when console API was called. + */ + once(event: 'Runtime.consoleAPICalled', listener: (message: InspectorNotification) => void): this; + /** + * Issued when object should be inspected (for example, as a result of inspect() command line API call). + */ + once(event: 'Runtime.inspectRequested', listener: (message: InspectorNotification) => void): this; + /** + * Fired when virtual machine parses script. This event is also fired for all known and uncollected scripts upon enabling debugger. + */ + once(event: 'Debugger.scriptParsed', listener: (message: InspectorNotification) => void): this; + /** + * Fired when virtual machine fails to parse the script. + */ + once(event: 'Debugger.scriptFailedToParse', listener: (message: InspectorNotification) => void): this; + /** + * Fired when breakpoint is resolved to an actual script and location. + */ + once(event: 'Debugger.breakpointResolved', listener: (message: InspectorNotification) => void): this; + /** + * Fired when the virtual machine stopped on breakpoint or exception or any other stop criteria. + */ + once(event: 'Debugger.paused', listener: (message: InspectorNotification) => void): this; + /** + * Fired when the virtual machine resumed execution. + */ + once(event: 'Debugger.resumed', listener: () => void): this; + /** + * Issued when new console message is added. + */ + once(event: 'Console.messageAdded', listener: (message: InspectorNotification) => void): this; + /** + * Sent when new profile recording is started using console.profile() call. + */ + once(event: 'Profiler.consoleProfileStarted', listener: (message: InspectorNotification) => void): this; + once(event: 'Profiler.consoleProfileFinished', listener: (message: InspectorNotification) => void): this; + once(event: 'HeapProfiler.addHeapSnapshotChunk', listener: (message: InspectorNotification) => void): this; + once(event: 'HeapProfiler.resetProfiles', listener: () => void): this; + once(event: 'HeapProfiler.reportHeapSnapshotProgress', listener: (message: InspectorNotification) => void): this; + /** + * If heap objects tracking has been started then backend regularly sends a current value for last seen object id and corresponding timestamp. If the were changes in the heap since last event then one or more heapStatsUpdate events will be sent before a new lastSeenObjectId event. + */ + once(event: 'HeapProfiler.lastSeenObjectId', listener: (message: InspectorNotification) => void): this; + /** + * If heap objects tracking has been started then backend may send update for one or more fragments + */ + once(event: 'HeapProfiler.heapStatsUpdate', listener: (message: InspectorNotification) => void): this; + /** + * Contains an bucket of collected trace events. + */ + once(event: 'NodeTracing.dataCollected', listener: (message: InspectorNotification) => void): this; + /** + * Signals that tracing is stopped and there is no trace buffers pending flush, all data were + * delivered via dataCollected events. + */ + once(event: 'NodeTracing.tracingComplete', listener: () => void): this; + /** + * Issued when attached to a worker. + */ + once(event: 'NodeWorker.attachedToWorker', listener: (message: InspectorNotification) => void): this; + /** + * Issued when detached from the worker. + */ + once(event: 'NodeWorker.detachedFromWorker', listener: (message: InspectorNotification) => void): this; + /** + * Notifies about a new protocol message received from the session + * (session ID is provided in attachedToWorker notification). + */ + once(event: 'NodeWorker.receivedMessageFromWorker', listener: (message: InspectorNotification) => void): this; + /** + * This event is fired instead of `Runtime.executionContextDestroyed` when + * enabled. + * It is fired when the Node process finished all code execution and is + * waiting for all frontends to disconnect. + */ + once(event: 'NodeRuntime.waitingForDisconnect', listener: () => void): this; + prependListener(event: string, listener: (...args: any[]) => void): this; + /** + * Emitted when any notification from the V8 Inspector is received. + */ + prependListener(event: 'inspectorNotification', listener: (message: InspectorNotification<{}>) => void): this; + /** + * Issued when new execution context is created. + */ + prependListener(event: 'Runtime.executionContextCreated', listener: (message: InspectorNotification) => void): this; + /** + * Issued when execution context is destroyed. + */ + prependListener(event: 'Runtime.executionContextDestroyed', listener: (message: InspectorNotification) => void): this; + /** + * Issued when all executionContexts were cleared in browser + */ + prependListener(event: 'Runtime.executionContextsCleared', listener: () => void): this; + /** + * Issued when exception was thrown and unhandled. + */ + prependListener(event: 'Runtime.exceptionThrown', listener: (message: InspectorNotification) => void): this; + /** + * Issued when unhandled exception was revoked. + */ + prependListener(event: 'Runtime.exceptionRevoked', listener: (message: InspectorNotification) => void): this; + /** + * Issued when console API was called. + */ + prependListener(event: 'Runtime.consoleAPICalled', listener: (message: InspectorNotification) => void): this; + /** + * Issued when object should be inspected (for example, as a result of inspect() command line API call). + */ + prependListener(event: 'Runtime.inspectRequested', listener: (message: InspectorNotification) => void): this; + /** + * Fired when virtual machine parses script. This event is also fired for all known and uncollected scripts upon enabling debugger. + */ + prependListener(event: 'Debugger.scriptParsed', listener: (message: InspectorNotification) => void): this; + /** + * Fired when virtual machine fails to parse the script. + */ + prependListener(event: 'Debugger.scriptFailedToParse', listener: (message: InspectorNotification) => void): this; + /** + * Fired when breakpoint is resolved to an actual script and location. + */ + prependListener(event: 'Debugger.breakpointResolved', listener: (message: InspectorNotification) => void): this; + /** + * Fired when the virtual machine stopped on breakpoint or exception or any other stop criteria. + */ + prependListener(event: 'Debugger.paused', listener: (message: InspectorNotification) => void): this; + /** + * Fired when the virtual machine resumed execution. + */ + prependListener(event: 'Debugger.resumed', listener: () => void): this; + /** + * Issued when new console message is added. + */ + prependListener(event: 'Console.messageAdded', listener: (message: InspectorNotification) => void): this; + /** + * Sent when new profile recording is started using console.profile() call. + */ + prependListener(event: 'Profiler.consoleProfileStarted', listener: (message: InspectorNotification) => void): this; + prependListener(event: 'Profiler.consoleProfileFinished', listener: (message: InspectorNotification) => void): this; + prependListener(event: 'HeapProfiler.addHeapSnapshotChunk', listener: (message: InspectorNotification) => void): this; + prependListener(event: 'HeapProfiler.resetProfiles', listener: () => void): this; + prependListener(event: 'HeapProfiler.reportHeapSnapshotProgress', listener: (message: InspectorNotification) => void): this; + /** + * If heap objects tracking has been started then backend regularly sends a current value for last seen object id and corresponding timestamp. If the were changes in the heap since last event then one or more heapStatsUpdate events will be sent before a new lastSeenObjectId event. + */ + prependListener(event: 'HeapProfiler.lastSeenObjectId', listener: (message: InspectorNotification) => void): this; + /** + * If heap objects tracking has been started then backend may send update for one or more fragments + */ + prependListener(event: 'HeapProfiler.heapStatsUpdate', listener: (message: InspectorNotification) => void): this; + /** + * Contains an bucket of collected trace events. + */ + prependListener(event: 'NodeTracing.dataCollected', listener: (message: InspectorNotification) => void): this; + /** + * Signals that tracing is stopped and there is no trace buffers pending flush, all data were + * delivered via dataCollected events. + */ + prependListener(event: 'NodeTracing.tracingComplete', listener: () => void): this; + /** + * Issued when attached to a worker. + */ + prependListener(event: 'NodeWorker.attachedToWorker', listener: (message: InspectorNotification) => void): this; + /** + * Issued when detached from the worker. + */ + prependListener(event: 'NodeWorker.detachedFromWorker', listener: (message: InspectorNotification) => void): this; + /** + * Notifies about a new protocol message received from the session + * (session ID is provided in attachedToWorker notification). + */ + prependListener(event: 'NodeWorker.receivedMessageFromWorker', listener: (message: InspectorNotification) => void): this; + /** + * This event is fired instead of `Runtime.executionContextDestroyed` when + * enabled. + * It is fired when the Node process finished all code execution and is + * waiting for all frontends to disconnect. + */ + prependListener(event: 'NodeRuntime.waitingForDisconnect', listener: () => void): this; + prependOnceListener(event: string, listener: (...args: any[]) => void): this; + /** + * Emitted when any notification from the V8 Inspector is received. + */ + prependOnceListener(event: 'inspectorNotification', listener: (message: InspectorNotification<{}>) => void): this; + /** + * Issued when new execution context is created. + */ + prependOnceListener(event: 'Runtime.executionContextCreated', listener: (message: InspectorNotification) => void): this; + /** + * Issued when execution context is destroyed. + */ + prependOnceListener(event: 'Runtime.executionContextDestroyed', listener: (message: InspectorNotification) => void): this; + /** + * Issued when all executionContexts were cleared in browser + */ + prependOnceListener(event: 'Runtime.executionContextsCleared', listener: () => void): this; + /** + * Issued when exception was thrown and unhandled. + */ + prependOnceListener(event: 'Runtime.exceptionThrown', listener: (message: InspectorNotification) => void): this; + /** + * Issued when unhandled exception was revoked. + */ + prependOnceListener(event: 'Runtime.exceptionRevoked', listener: (message: InspectorNotification) => void): this; + /** + * Issued when console API was called. + */ + prependOnceListener(event: 'Runtime.consoleAPICalled', listener: (message: InspectorNotification) => void): this; + /** + * Issued when object should be inspected (for example, as a result of inspect() command line API call). + */ + prependOnceListener(event: 'Runtime.inspectRequested', listener: (message: InspectorNotification) => void): this; + /** + * Fired when virtual machine parses script. This event is also fired for all known and uncollected scripts upon enabling debugger. + */ + prependOnceListener(event: 'Debugger.scriptParsed', listener: (message: InspectorNotification) => void): this; + /** + * Fired when virtual machine fails to parse the script. + */ + prependOnceListener(event: 'Debugger.scriptFailedToParse', listener: (message: InspectorNotification) => void): this; + /** + * Fired when breakpoint is resolved to an actual script and location. + */ + prependOnceListener(event: 'Debugger.breakpointResolved', listener: (message: InspectorNotification) => void): this; + /** + * Fired when the virtual machine stopped on breakpoint or exception or any other stop criteria. + */ + prependOnceListener(event: 'Debugger.paused', listener: (message: InspectorNotification) => void): this; + /** + * Fired when the virtual machine resumed execution. + */ + prependOnceListener(event: 'Debugger.resumed', listener: () => void): this; + /** + * Issued when new console message is added. + */ + prependOnceListener(event: 'Console.messageAdded', listener: (message: InspectorNotification) => void): this; + /** + * Sent when new profile recording is started using console.profile() call. + */ + prependOnceListener(event: 'Profiler.consoleProfileStarted', listener: (message: InspectorNotification) => void): this; + prependOnceListener(event: 'Profiler.consoleProfileFinished', listener: (message: InspectorNotification) => void): this; + prependOnceListener(event: 'HeapProfiler.addHeapSnapshotChunk', listener: (message: InspectorNotification) => void): this; + prependOnceListener(event: 'HeapProfiler.resetProfiles', listener: () => void): this; + prependOnceListener(event: 'HeapProfiler.reportHeapSnapshotProgress', listener: (message: InspectorNotification) => void): this; + /** + * If heap objects tracking has been started then backend regularly sends a current value for last seen object id and corresponding timestamp. If the were changes in the heap since last event then one or more heapStatsUpdate events will be sent before a new lastSeenObjectId event. + */ + prependOnceListener(event: 'HeapProfiler.lastSeenObjectId', listener: (message: InspectorNotification) => void): this; + /** + * If heap objects tracking has been started then backend may send update for one or more fragments + */ + prependOnceListener(event: 'HeapProfiler.heapStatsUpdate', listener: (message: InspectorNotification) => void): this; + /** + * Contains an bucket of collected trace events. + */ + prependOnceListener(event: 'NodeTracing.dataCollected', listener: (message: InspectorNotification) => void): this; + /** + * Signals that tracing is stopped and there is no trace buffers pending flush, all data were + * delivered via dataCollected events. + */ + prependOnceListener(event: 'NodeTracing.tracingComplete', listener: () => void): this; + /** + * Issued when attached to a worker. + */ + prependOnceListener(event: 'NodeWorker.attachedToWorker', listener: (message: InspectorNotification) => void): this; + /** + * Issued when detached from the worker. + */ + prependOnceListener(event: 'NodeWorker.detachedFromWorker', listener: (message: InspectorNotification) => void): this; + /** + * Notifies about a new protocol message received from the session + * (session ID is provided in attachedToWorker notification). + */ + prependOnceListener(event: 'NodeWorker.receivedMessageFromWorker', listener: (message: InspectorNotification) => void): this; + /** + * This event is fired instead of `Runtime.executionContextDestroyed` when + * enabled. + * It is fired when the Node process finished all code execution and is + * waiting for all frontends to disconnect. + */ + prependOnceListener(event: 'NodeRuntime.waitingForDisconnect', listener: () => void): this; + } + /** + * Activate inspector on host and port. Equivalent to`node --inspect=[[host:]port]`, but can be done programmatically after node has + * started. + * + * If wait is `true`, will block until a client has connected to the inspect port + * and flow control has been passed to the debugger client. + * + * See the `security warning` regarding the `host`parameter usage. + * @param [port='what was specified on the CLI'] Port to listen on for inspector connections. Optional. + * @param [host='what was specified on the CLI'] Host to listen on for inspector connections. Optional. + * @param [wait=false] Block until a client has connected. Optional. + * @returns Disposable that calls `inspector.close()`. + */ + function open(port?: number, host?: string, wait?: boolean): Disposable; + /** + * Deactivate the inspector. Blocks until there are no active connections. + */ + function close(): void; + /** + * Return the URL of the active inspector, or `undefined` if there is none. + * + * ```console + * $ node --inspect -p 'inspector.url()' + * Debugger listening on ws://127.0.0.1:9229/166e272e-7a30-4d09-97ce-f1c012b43c34 + * For help, see: https://nodejs.org/en/docs/inspector + * ws://127.0.0.1:9229/166e272e-7a30-4d09-97ce-f1c012b43c34 + * + * $ node --inspect=localhost:3000 -p 'inspector.url()' + * Debugger listening on ws://localhost:3000/51cf8d0e-3c36-4c59-8efd-54519839e56a + * For help, see: https://nodejs.org/en/docs/inspector + * ws://localhost:3000/51cf8d0e-3c36-4c59-8efd-54519839e56a + * + * $ node -p 'inspector.url()' + * undefined + * ``` + */ + function url(): string | undefined; + /** + * Blocks until a client (existing or connected later) has sent`Runtime.runIfWaitingForDebugger` command. + * + * An exception will be thrown if there is no active inspector. + * @since v12.7.0 + */ + function waitForDebugger(): void; +} +/** + * The inspector module provides an API for interacting with the V8 inspector. + */ +declare module 'node:inspector' { + import inspector = require('inspector'); + export = inspector; +} diff --git a/Url-Shortner/node_modules/@types/node/module.d.ts b/Url-Shortner/node_modules/@types/node/module.d.ts new file mode 100644 index 0000000..9ec61d9 --- /dev/null +++ b/Url-Shortner/node_modules/@types/node/module.d.ts @@ -0,0 +1,264 @@ +/** + * @since v0.3.7 + */ +declare module "module" { + import { URL } from "node:url"; + import { MessagePort } from "node:worker_threads"; + namespace Module { + /** + * The `module.syncBuiltinESMExports()` method updates all the live bindings for + * builtin `ES Modules` to match the properties of the `CommonJS` exports. It + * does not add or remove exported names from the `ES Modules`. + * + * ```js + * const fs = require('node:fs'); + * const assert = require('node:assert'); + * const { syncBuiltinESMExports } = require('node:module'); + * + * fs.readFile = newAPI; + * + * delete fs.readFileSync; + * + * function newAPI() { + * // ... + * } + * + * fs.newAPI = newAPI; + * + * syncBuiltinESMExports(); + * + * import('node:fs').then((esmFS) => { + * // It syncs the existing readFile property with the new value + * assert.strictEqual(esmFS.readFile, newAPI); + * // readFileSync has been deleted from the required fs + * assert.strictEqual('readFileSync' in fs, false); + * // syncBuiltinESMExports() does not remove readFileSync from esmFS + * assert.strictEqual('readFileSync' in esmFS, true); + * // syncBuiltinESMExports() does not add names + * assert.strictEqual(esmFS.newAPI, undefined); + * }); + * ``` + * @since v12.12.0 + */ + function syncBuiltinESMExports(): void; + /** + * `path` is the resolved path for the file for which a corresponding source map + * should be fetched. + * @since v13.7.0, v12.17.0 + * @return Returns `module.SourceMap` if a source map is found, `undefined` otherwise. + */ + function findSourceMap(path: string, error?: Error): SourceMap; + interface SourceMapPayload { + file: string; + version: number; + sources: string[]; + sourcesContent: string[]; + names: string[]; + mappings: string; + sourceRoot: string; + } + interface SourceMapping { + generatedLine: number; + generatedColumn: number; + originalSource: string; + originalLine: number; + originalColumn: number; + } + /** + * @since v13.7.0, v12.17.0 + */ + class SourceMap { + /** + * Getter for the payload used to construct the `SourceMap` instance. + */ + readonly payload: SourceMapPayload; + constructor(payload: SourceMapPayload); + /** + * Given a line offset and column offset in the generated source + * file, returns an object representing the SourceMap range in the + * original file if found, or an empty object if not. + * + * The object returned contains the following keys: + * + * The returned value represents the raw range as it appears in the + * SourceMap, based on zero-indexed offsets, _not_ 1-indexed line and + * column numbers as they appear in Error messages and CallSite + * objects. + * + * To get the corresponding 1-indexed line and column numbers from a + * lineNumber and columnNumber as they are reported by Error stacks + * and CallSite objects, use `sourceMap.findOrigin(lineNumber, columnNumber)` + * @param lineOffset The zero-indexed line number offset in the generated source + * @param columnOffset The zero-indexed column number offset in the generated source + */ + findEntry(lineOffset: number, columnOffset: number): SourceMapping; + } + interface ImportAssertions extends NodeJS.Dict { + type?: string | undefined; + } + type ModuleFormat = "builtin" | "commonjs" | "json" | "module" | "wasm"; + type ModuleSource = string | ArrayBuffer | NodeJS.TypedArray; + interface GlobalPreloadContext { + port: MessagePort; + } + /** + * @deprecated This hook will be removed in a future version. + * Use `initialize` instead. When a loader has an `initialize` export, `globalPreload` will be ignored. + * + * Sometimes it might be necessary to run some code inside of the same global scope that the application runs in. + * This hook allows the return of a string that is run as a sloppy-mode script on startup. + * + * @param context Information to assist the preload code + * @return Code to run before application startup + */ + type GlobalPreloadHook = (context: GlobalPreloadContext) => string; + /** + * The `initialize` hook provides a way to define a custom function that runs in the loader's thread + * when the loader is initialized. Initialization happens when the loader is registered via `register` + * or registered via the `--experimental-loader` command line option. + * + * This hook can send and receive data from a `register` invocation, including ports and other transferrable objects. + */ + type InitializeHook = (data: Data) => ReturnType; + interface ResolveHookContext { + /** + * Export conditions of the relevant `package.json` + */ + conditions: string[]; + /** + * An object whose key-value pairs represent the assertions for the module to import + */ + importAssertions: ImportAssertions; + /** + * The module importing this one, or undefined if this is the Node.js entry point + */ + parentURL: string | undefined; + } + interface ResolveFnOutput { + /** + * A hint to the load hook (it might be ignored) + */ + format?: ModuleFormat | null | undefined; + /** + * The import assertions to use when caching the module (optional; if excluded the input will be used) + */ + importAssertions?: ImportAssertions | undefined; + /** + * A signal that this hook intends to terminate the chain of `resolve` hooks. + * @default false + */ + shortCircuit?: boolean | undefined; + /** + * The absolute URL to which this input resolves + */ + url: string; + } + /** + * The `resolve` hook chain is responsible for resolving file URL for a given module specifier and parent URL, and optionally its format (such as `'module'`) as a hint to the `load` hook. + * If a format is specified, the load hook is ultimately responsible for providing the final `format` value (and it is free to ignore the hint provided by `resolve`); + * if `resolve` provides a format, a custom `load` hook is required even if only to pass the value to the Node.js default `load` hook. + * + * @param specifier The specified URL path of the module to be resolved + * @param context + * @param nextResolve The subsequent `resolve` hook in the chain, or the Node.js default `resolve` hook after the last user-supplied resolve hook + */ + type ResolveHook = ( + specifier: string, + context: ResolveHookContext, + nextResolve: ( + specifier: string, + context?: ResolveHookContext, + ) => ResolveFnOutput | Promise, + ) => ResolveFnOutput | Promise; + interface LoadHookContext { + /** + * Export conditions of the relevant `package.json` + */ + conditions: string[]; + /** + * The format optionally supplied by the `resolve` hook chain + */ + format: ModuleFormat; + /** + * An object whose key-value pairs represent the assertions for the module to import + */ + importAssertions: ImportAssertions; + } + interface LoadFnOutput { + format: ModuleFormat; + /** + * A signal that this hook intends to terminate the chain of `resolve` hooks. + * @default false + */ + shortCircuit?: boolean | undefined; + /** + * The source for Node.js to evaluate + */ + source?: ModuleSource; + } + /** + * The `load` hook provides a way to define a custom method of determining how a URL should be interpreted, retrieved, and parsed. + * It is also in charge of validating the import assertion. + * + * @param url The URL/path of the module to be loaded + * @param context Metadata about the module + * @param nextLoad The subsequent `load` hook in the chain, or the Node.js default `load` hook after the last user-supplied `load` hook + */ + type LoadHook = ( + url: string, + context: LoadHookContext, + nextLoad: (url: string, context?: LoadHookContext) => LoadFnOutput | Promise, + ) => LoadFnOutput | Promise; + } + interface RegisterOptions { + parentURL: string; + data?: Data | undefined; + transferList?: any[] | undefined; + } + interface Module extends NodeModule {} + class Module { + static runMain(): void; + static wrap(code: string): string; + static createRequire(path: string | URL): NodeRequire; + static builtinModules: string[]; + static isBuiltin(moduleName: string): boolean; + static Module: typeof Module; + static register( + specifier: string, + parentURL?: string, + options?: RegisterOptions, + ): ReturnType; + static register(specifier: string, options?: RegisterOptions): ReturnType; + constructor(id: string, parent?: Module); + } + global { + interface ImportMeta { + url: string; + /** + * Provides a module-relative resolution function scoped to each module, returning + * the URL string. + * + * @param specified The module specifier to resolve relative to the current module. + * @returns The absolute (`file:`) URL string for the resolved module. + */ + resolve(specified: string): string; + /** + * This feature is only available with the `--experimental-import-meta-resolve` + * command flag enabled. + * + * Provides a module-relative resolution function scoped to each module, returning + * the URL string. + * + * @param specified The module specifier to resolve relative to `parent`. + * @param parent The absolute parent module URL to resolve from. + * @returns The absolute (`file:`) URL string for the resolved module. + */ + resolve(specified: string, parent: string | URL): string; + } + } + export = Module; +} +declare module "node:module" { + import module = require("module"); + export = module; +} diff --git a/Url-Shortner/node_modules/@types/node/net.d.ts b/Url-Shortner/node_modules/@types/node/net.d.ts new file mode 100644 index 0000000..63cf4d7 --- /dev/null +++ b/Url-Shortner/node_modules/@types/node/net.d.ts @@ -0,0 +1,912 @@ +/** + * > Stability: 2 - Stable + * + * The `node:net` module provides an asynchronous network API for creating stream-based + * TCP or `IPC` servers ({@link createServer}) and clients + * ({@link createConnection}). + * + * It can be accessed using: + * + * ```js + * const net = require('node:net'); + * ``` + * @see [source](https://github.com/nodejs/node/blob/v20.2.0/lib/net.js) + */ +declare module "net" { + import * as stream from "node:stream"; + import { Abortable, EventEmitter } from "node:events"; + import * as dns from "node:dns"; + type LookupFunction = ( + hostname: string, + options: dns.LookupAllOptions, + callback: (err: NodeJS.ErrnoException | null, addresses: dns.LookupAddress[]) => void, + ) => void; + interface AddressInfo { + address: string; + family: string; + port: number; + } + interface SocketConstructorOpts { + fd?: number | undefined; + allowHalfOpen?: boolean | undefined; + readable?: boolean | undefined; + writable?: boolean | undefined; + signal?: AbortSignal; + } + interface OnReadOpts { + buffer: Uint8Array | (() => Uint8Array); + /** + * This function is called for every chunk of incoming data. + * Two arguments are passed to it: the number of bytes written to buffer and a reference to buffer. + * Return false from this function to implicitly pause() the socket. + */ + callback(bytesWritten: number, buf: Uint8Array): boolean; + } + interface ConnectOpts { + /** + * If specified, incoming data is stored in a single buffer and passed to the supplied callback when data arrives on the socket. + * Note: this will cause the streaming functionality to not provide any data, however events like 'error', 'end', and 'close' will + * still be emitted as normal and methods like pause() and resume() will also behave as expected. + */ + onread?: OnReadOpts | undefined; + } + interface TcpSocketConnectOpts extends ConnectOpts { + port: number; + host?: string | undefined; + localAddress?: string | undefined; + localPort?: number | undefined; + hints?: number | undefined; + family?: number | undefined; + lookup?: LookupFunction | undefined; + noDelay?: boolean | undefined; + keepAlive?: boolean | undefined; + keepAliveInitialDelay?: number | undefined; + /** + * @since v18.13.0 + */ + autoSelectFamily?: boolean | undefined; + /** + * @since v18.13.0 + */ + autoSelectFamilyAttemptTimeout?: number | undefined; + } + interface IpcSocketConnectOpts extends ConnectOpts { + path: string; + } + type SocketConnectOpts = TcpSocketConnectOpts | IpcSocketConnectOpts; + type SocketReadyState = "opening" | "open" | "readOnly" | "writeOnly" | "closed"; + /** + * This class is an abstraction of a TCP socket or a streaming `IPC` endpoint + * (uses named pipes on Windows, and Unix domain sockets otherwise). It is also + * an `EventEmitter`. + * + * A `net.Socket` can be created by the user and used directly to interact with + * a server. For example, it is returned by {@link createConnection}, + * so the user can use it to talk to the server. + * + * It can also be created by Node.js and passed to the user when a connection + * is received. For example, it is passed to the listeners of a `'connection'` event emitted on a {@link Server}, so the user can use + * it to interact with the client. + * @since v0.3.4 + */ + class Socket extends stream.Duplex { + constructor(options?: SocketConstructorOpts); + /** + * Sends data on the socket. The second parameter specifies the encoding in the + * case of a string. It defaults to UTF8 encoding. + * + * Returns `true` if the entire data was flushed successfully to the kernel + * buffer. Returns `false` if all or part of the data was queued in user memory.`'drain'` will be emitted when the buffer is again free. + * + * The optional `callback` parameter will be executed when the data is finally + * written out, which may not be immediately. + * + * See `Writable` stream `write()` method for more + * information. + * @since v0.1.90 + * @param [encoding='utf8'] Only used when data is `string`. + */ + write(buffer: Uint8Array | string, cb?: (err?: Error) => void): boolean; + write(str: Uint8Array | string, encoding?: BufferEncoding, cb?: (err?: Error) => void): boolean; + /** + * Initiate a connection on a given socket. + * + * Possible signatures: + * + * * `socket.connect(options[, connectListener])` + * * `socket.connect(path[, connectListener])` for `IPC` connections. + * * `socket.connect(port[, host][, connectListener])` for TCP connections. + * * Returns: `net.Socket` The socket itself. + * + * This function is asynchronous. When the connection is established, the `'connect'` event will be emitted. If there is a problem connecting, + * instead of a `'connect'` event, an `'error'` event will be emitted with + * the error passed to the `'error'` listener. + * The last parameter `connectListener`, if supplied, will be added as a listener + * for the `'connect'` event **once**. + * + * This function should only be used for reconnecting a socket after`'close'` has been emitted or otherwise it may lead to undefined + * behavior. + */ + connect(options: SocketConnectOpts, connectionListener?: () => void): this; + connect(port: number, host: string, connectionListener?: () => void): this; + connect(port: number, connectionListener?: () => void): this; + connect(path: string, connectionListener?: () => void): this; + /** + * Set the encoding for the socket as a `Readable Stream`. See `readable.setEncoding()` for more information. + * @since v0.1.90 + * @return The socket itself. + */ + setEncoding(encoding?: BufferEncoding): this; + /** + * Pauses the reading of data. That is, `'data'` events will not be emitted. + * Useful to throttle back an upload. + * @return The socket itself. + */ + pause(): this; + /** + * Close the TCP connection by sending an RST packet and destroy the stream. + * If this TCP socket is in connecting status, it will send an RST packet and destroy this TCP socket once it is connected. + * Otherwise, it will call `socket.destroy` with an `ERR_SOCKET_CLOSED` Error. + * If this is not a TCP socket (for example, a pipe), calling this method will immediately throw an `ERR_INVALID_HANDLE_TYPE` Error. + * @since v18.3.0, v16.17.0 + */ + resetAndDestroy(): this; + /** + * Resumes reading after a call to `socket.pause()`. + * @return The socket itself. + */ + resume(): this; + /** + * Sets the socket to timeout after `timeout` milliseconds of inactivity on + * the socket. By default `net.Socket` do not have a timeout. + * + * When an idle timeout is triggered the socket will receive a `'timeout'` event but the connection will not be severed. The user must manually call `socket.end()` or `socket.destroy()` to + * end the connection. + * + * ```js + * socket.setTimeout(3000); + * socket.on('timeout', () => { + * console.log('socket timeout'); + * socket.end(); + * }); + * ``` + * + * If `timeout` is 0, then the existing idle timeout is disabled. + * + * The optional `callback` parameter will be added as a one-time listener for the `'timeout'` event. + * @since v0.1.90 + * @return The socket itself. + */ + setTimeout(timeout: number, callback?: () => void): this; + /** + * Enable/disable the use of Nagle's algorithm. + * + * When a TCP connection is created, it will have Nagle's algorithm enabled. + * + * Nagle's algorithm delays data before it is sent via the network. It attempts + * to optimize throughput at the expense of latency. + * + * Passing `true` for `noDelay` or not passing an argument will disable Nagle's + * algorithm for the socket. Passing `false` for `noDelay` will enable Nagle's + * algorithm. + * @since v0.1.90 + * @param [noDelay=true] + * @return The socket itself. + */ + setNoDelay(noDelay?: boolean): this; + /** + * Enable/disable keep-alive functionality, and optionally set the initial + * delay before the first keepalive probe is sent on an idle socket. + * + * Set `initialDelay` (in milliseconds) to set the delay between the last + * data packet received and the first keepalive probe. Setting `0` for`initialDelay` will leave the value unchanged from the default + * (or previous) setting. + * + * Enabling the keep-alive functionality will set the following socket options: + * + * * `SO_KEEPALIVE=1` + * * `TCP_KEEPIDLE=initialDelay` + * * `TCP_KEEPCNT=10` + * * `TCP_KEEPINTVL=1` + * @since v0.1.92 + * @param [enable=false] + * @param [initialDelay=0] + * @return The socket itself. + */ + setKeepAlive(enable?: boolean, initialDelay?: number): this; + /** + * Returns the bound `address`, the address `family` name and `port` of the + * socket as reported by the operating system:`{ port: 12346, family: 'IPv4', address: '127.0.0.1' }` + * @since v0.1.90 + */ + address(): AddressInfo | {}; + /** + * Calling `unref()` on a socket will allow the program to exit if this is the only + * active socket in the event system. If the socket is already `unref`ed calling`unref()` again will have no effect. + * @since v0.9.1 + * @return The socket itself. + */ + unref(): this; + /** + * Opposite of `unref()`, calling `ref()` on a previously `unref`ed socket will _not_ let the program exit if it's the only socket left (the default behavior). + * If the socket is `ref`ed calling `ref` again will have no effect. + * @since v0.9.1 + * @return The socket itself. + */ + ref(): this; + /** + * This property shows the number of characters buffered for writing. The buffer + * may contain strings whose length after encoding is not yet known. So this number + * is only an approximation of the number of bytes in the buffer. + * + * `net.Socket` has the property that `socket.write()` always works. This is to + * help users get up and running quickly. The computer cannot always keep up + * with the amount of data that is written to a socket. The network connection + * simply might be too slow. Node.js will internally queue up the data written to a + * socket and send it out over the wire when it is possible. + * + * The consequence of this internal buffering is that memory may grow. + * Users who experience large or growing `bufferSize` should attempt to + * "throttle" the data flows in their program with `socket.pause()` and `socket.resume()`. + * @since v0.3.8 + * @deprecated Since v14.6.0 - Use `writableLength` instead. + */ + readonly bufferSize: number; + /** + * The amount of received bytes. + * @since v0.5.3 + */ + readonly bytesRead: number; + /** + * The amount of bytes sent. + * @since v0.5.3 + */ + readonly bytesWritten: number; + /** + * If `true`,`socket.connect(options[, connectListener])` was + * called and has not yet finished. It will stay `true` until the socket becomes + * connected, then it is set to `false` and the `'connect'` event is emitted. Note + * that the `socket.connect(options[, connectListener])` callback is a listener for the `'connect'` event. + * @since v6.1.0 + */ + readonly connecting: boolean; + /** + * This is `true` if the socket is not connected yet, either because `.connect()`has not yet been called or because it is still in the process of connecting + * (see `socket.connecting`). + * @since v11.2.0, v10.16.0 + */ + readonly pending: boolean; + /** + * See `writable.destroyed` for further details. + */ + readonly destroyed: boolean; + /** + * The string representation of the local IP address the remote client is + * connecting on. For example, in a server listening on `'0.0.0.0'`, if a client + * connects on `'192.168.1.1'`, the value of `socket.localAddress` would be`'192.168.1.1'`. + * @since v0.9.6 + */ + readonly localAddress?: string; + /** + * The numeric representation of the local port. For example, `80` or `21`. + * @since v0.9.6 + */ + readonly localPort?: number; + /** + * The string representation of the local IP family. `'IPv4'` or `'IPv6'`. + * @since v18.8.0, v16.18.0 + */ + readonly localFamily?: string; + /** + * This property represents the state of the connection as a string. + * + * * If the stream is connecting `socket.readyState` is `opening`. + * * If the stream is readable and writable, it is `open`. + * * If the stream is readable and not writable, it is `readOnly`. + * * If the stream is not readable and writable, it is `writeOnly`. + * @since v0.5.0 + */ + readonly readyState: SocketReadyState; + /** + * The string representation of the remote IP address. For example,`'74.125.127.100'` or `'2001:4860:a005::68'`. Value may be `undefined` if + * the socket is destroyed (for example, if the client disconnected). + * @since v0.5.10 + */ + readonly remoteAddress?: string | undefined; + /** + * The string representation of the remote IP family. `'IPv4'` or `'IPv6'`. Value may be `undefined` if + * the socket is destroyed (for example, if the client disconnected). + * @since v0.11.14 + */ + readonly remoteFamily?: string | undefined; + /** + * The numeric representation of the remote port. For example, `80` or `21`. Value may be `undefined` if + * the socket is destroyed (for example, if the client disconnected). + * @since v0.5.10 + */ + readonly remotePort?: number | undefined; + /** + * The socket timeout in milliseconds as set by `socket.setTimeout()`. + * It is `undefined` if a timeout has not been set. + * @since v10.7.0 + */ + readonly timeout?: number | undefined; + /** + * Half-closes the socket. i.e., it sends a FIN packet. It is possible the + * server will still send some data. + * + * See `writable.end()` for further details. + * @since v0.1.90 + * @param [encoding='utf8'] Only used when data is `string`. + * @param callback Optional callback for when the socket is finished. + * @return The socket itself. + */ + end(callback?: () => void): this; + end(buffer: Uint8Array | string, callback?: () => void): this; + end(str: Uint8Array | string, encoding?: BufferEncoding, callback?: () => void): this; + /** + * events.EventEmitter + * 1. close + * 2. connect + * 3. data + * 4. drain + * 5. end + * 6. error + * 7. lookup + * 8. ready + * 9. timeout + */ + addListener(event: string, listener: (...args: any[]) => void): this; + addListener(event: "close", listener: (hadError: boolean) => void): this; + addListener(event: "connect", listener: () => void): this; + addListener(event: "data", listener: (data: Buffer) => void): this; + addListener(event: "drain", listener: () => void): this; + addListener(event: "end", listener: () => void): this; + addListener(event: "error", listener: (err: Error) => void): this; + addListener( + event: "lookup", + listener: (err: Error, address: string, family: string | number, host: string) => void, + ): this; + addListener(event: "ready", listener: () => void): this; + addListener(event: "timeout", listener: () => void): this; + emit(event: string | symbol, ...args: any[]): boolean; + emit(event: "close", hadError: boolean): boolean; + emit(event: "connect"): boolean; + emit(event: "data", data: Buffer): boolean; + emit(event: "drain"): boolean; + emit(event: "end"): boolean; + emit(event: "error", err: Error): boolean; + emit(event: "lookup", err: Error, address: string, family: string | number, host: string): boolean; + emit(event: "ready"): boolean; + emit(event: "timeout"): boolean; + on(event: string, listener: (...args: any[]) => void): this; + on(event: "close", listener: (hadError: boolean) => void): this; + on(event: "connect", listener: () => void): this; + on(event: "data", listener: (data: Buffer) => void): this; + on(event: "drain", listener: () => void): this; + on(event: "end", listener: () => void): this; + on(event: "error", listener: (err: Error) => void): this; + on( + event: "lookup", + listener: (err: Error, address: string, family: string | number, host: string) => void, + ): this; + on(event: "ready", listener: () => void): this; + on(event: "timeout", listener: () => void): this; + once(event: string, listener: (...args: any[]) => void): this; + once(event: "close", listener: (hadError: boolean) => void): this; + once(event: "connect", listener: () => void): this; + once(event: "data", listener: (data: Buffer) => void): this; + once(event: "drain", listener: () => void): this; + once(event: "end", listener: () => void): this; + once(event: "error", listener: (err: Error) => void): this; + once( + event: "lookup", + listener: (err: Error, address: string, family: string | number, host: string) => void, + ): this; + once(event: "ready", listener: () => void): this; + once(event: "timeout", listener: () => void): this; + prependListener(event: string, listener: (...args: any[]) => void): this; + prependListener(event: "close", listener: (hadError: boolean) => void): this; + prependListener(event: "connect", listener: () => void): this; + prependListener(event: "data", listener: (data: Buffer) => void): this; + prependListener(event: "drain", listener: () => void): this; + prependListener(event: "end", listener: () => void): this; + prependListener(event: "error", listener: (err: Error) => void): this; + prependListener( + event: "lookup", + listener: (err: Error, address: string, family: string | number, host: string) => void, + ): this; + prependListener(event: "ready", listener: () => void): this; + prependListener(event: "timeout", listener: () => void): this; + prependOnceListener(event: string, listener: (...args: any[]) => void): this; + prependOnceListener(event: "close", listener: (hadError: boolean) => void): this; + prependOnceListener(event: "connect", listener: () => void): this; + prependOnceListener(event: "data", listener: (data: Buffer) => void): this; + prependOnceListener(event: "drain", listener: () => void): this; + prependOnceListener(event: "end", listener: () => void): this; + prependOnceListener(event: "error", listener: (err: Error) => void): this; + prependOnceListener( + event: "lookup", + listener: (err: Error, address: string, family: string | number, host: string) => void, + ): this; + prependOnceListener(event: "ready", listener: () => void): this; + prependOnceListener(event: "timeout", listener: () => void): this; + } + interface ListenOptions extends Abortable { + port?: number | undefined; + host?: string | undefined; + backlog?: number | undefined; + path?: string | undefined; + exclusive?: boolean | undefined; + readableAll?: boolean | undefined; + writableAll?: boolean | undefined; + /** + * @default false + */ + ipv6Only?: boolean | undefined; + } + interface ServerOpts { + /** + * Indicates whether half-opened TCP connections are allowed. + * @default false + */ + allowHalfOpen?: boolean | undefined; + /** + * Indicates whether the socket should be paused on incoming connections. + * @default false + */ + pauseOnConnect?: boolean | undefined; + /** + * If set to `true`, it disables the use of Nagle's algorithm immediately after a new incoming connection is received. + * @default false + * @since v16.5.0 + */ + noDelay?: boolean | undefined; + /** + * If set to `true`, it enables keep-alive functionality on the socket immediately after a new incoming connection is received, + * similarly on what is done in `socket.setKeepAlive([enable][, initialDelay])`. + * @default false + * @since v16.5.0 + */ + keepAlive?: boolean | undefined; + /** + * If set to a positive number, it sets the initial delay before the first keepalive probe is sent on an idle socket. + * @default 0 + * @since v16.5.0 + */ + keepAliveInitialDelay?: number | undefined; + } + interface DropArgument { + localAddress?: string; + localPort?: number; + localFamily?: string; + remoteAddress?: string; + remotePort?: number; + remoteFamily?: string; + } + /** + * This class is used to create a TCP or `IPC` server. + * @since v0.1.90 + */ + class Server extends EventEmitter { + constructor(connectionListener?: (socket: Socket) => void); + constructor(options?: ServerOpts, connectionListener?: (socket: Socket) => void); + /** + * Start a server listening for connections. A `net.Server` can be a TCP or + * an `IPC` server depending on what it listens to. + * + * Possible signatures: + * + * * `server.listen(handle[, backlog][, callback])` + * * `server.listen(options[, callback])` + * * `server.listen(path[, backlog][, callback])` for `IPC` servers + * * `server.listen([port[, host[, backlog]]][, callback])` for TCP servers + * + * This function is asynchronous. When the server starts listening, the `'listening'` event will be emitted. The last parameter `callback`will be added as a listener for the `'listening'` + * event. + * + * All `listen()` methods can take a `backlog` parameter to specify the maximum + * length of the queue of pending connections. The actual length will be determined + * by the OS through sysctl settings such as `tcp_max_syn_backlog` and `somaxconn`on Linux. The default value of this parameter is 511 (not 512). + * + * All {@link Socket} are set to `SO_REUSEADDR` (see [`socket(7)`](https://man7.org/linux/man-pages/man7/socket.7.html) for + * details). + * + * The `server.listen()` method can be called again if and only if there was an + * error during the first `server.listen()` call or `server.close()` has been + * called. Otherwise, an `ERR_SERVER_ALREADY_LISTEN` error will be thrown. + * + * One of the most common errors raised when listening is `EADDRINUSE`. + * This happens when another server is already listening on the requested`port`/`path`/`handle`. One way to handle this would be to retry + * after a certain amount of time: + * + * ```js + * server.on('error', (e) => { + * if (e.code === 'EADDRINUSE') { + * console.error('Address in use, retrying...'); + * setTimeout(() => { + * server.close(); + * server.listen(PORT, HOST); + * }, 1000); + * } + * }); + * ``` + */ + listen(port?: number, hostname?: string, backlog?: number, listeningListener?: () => void): this; + listen(port?: number, hostname?: string, listeningListener?: () => void): this; + listen(port?: number, backlog?: number, listeningListener?: () => void): this; + listen(port?: number, listeningListener?: () => void): this; + listen(path: string, backlog?: number, listeningListener?: () => void): this; + listen(path: string, listeningListener?: () => void): this; + listen(options: ListenOptions, listeningListener?: () => void): this; + listen(handle: any, backlog?: number, listeningListener?: () => void): this; + listen(handle: any, listeningListener?: () => void): this; + /** + * Stops the server from accepting new connections and keeps existing + * connections. This function is asynchronous, the server is finally closed + * when all connections are ended and the server emits a `'close'` event. + * The optional `callback` will be called once the `'close'` event occurs. Unlike + * that event, it will be called with an `Error` as its only argument if the server + * was not open when it was closed. + * @since v0.1.90 + * @param callback Called when the server is closed. + */ + close(callback?: (err?: Error) => void): this; + /** + * Returns the bound `address`, the address `family` name, and `port` of the server + * as reported by the operating system if listening on an IP socket + * (useful to find which port was assigned when getting an OS-assigned address):`{ port: 12346, family: 'IPv4', address: '127.0.0.1' }`. + * + * For a server listening on a pipe or Unix domain socket, the name is returned + * as a string. + * + * ```js + * const server = net.createServer((socket) => { + * socket.end('goodbye\n'); + * }).on('error', (err) => { + * // Handle errors here. + * throw err; + * }); + * + * // Grab an arbitrary unused port. + * server.listen(() => { + * console.log('opened server on', server.address()); + * }); + * ``` + * + * `server.address()` returns `null` before the `'listening'` event has been + * emitted or after calling `server.close()`. + * @since v0.1.90 + */ + address(): AddressInfo | string | null; + /** + * Asynchronously get the number of concurrent connections on the server. Works + * when sockets were sent to forks. + * + * Callback should take two arguments `err` and `count`. + * @since v0.9.7 + */ + getConnections(cb: (error: Error | null, count: number) => void): void; + /** + * Opposite of `unref()`, calling `ref()` on a previously `unref`ed server will _not_ let the program exit if it's the only server left (the default behavior). + * If the server is `ref`ed calling `ref()` again will have no effect. + * @since v0.9.1 + */ + ref(): this; + /** + * Calling `unref()` on a server will allow the program to exit if this is the only + * active server in the event system. If the server is already `unref`ed calling`unref()` again will have no effect. + * @since v0.9.1 + */ + unref(): this; + /** + * Set this property to reject connections when the server's connection count gets + * high. + * + * It is not recommended to use this option once a socket has been sent to a child + * with `child_process.fork()`. + * @since v0.2.0 + */ + maxConnections: number; + connections: number; + /** + * Indicates whether or not the server is listening for connections. + * @since v5.7.0 + */ + listening: boolean; + /** + * events.EventEmitter + * 1. close + * 2. connection + * 3. error + * 4. listening + * 5. drop + */ + addListener(event: string, listener: (...args: any[]) => void): this; + addListener(event: "close", listener: () => void): this; + addListener(event: "connection", listener: (socket: Socket) => void): this; + addListener(event: "error", listener: (err: Error) => void): this; + addListener(event: "listening", listener: () => void): this; + addListener(event: "drop", listener: (data?: DropArgument) => void): this; + emit(event: string | symbol, ...args: any[]): boolean; + emit(event: "close"): boolean; + emit(event: "connection", socket: Socket): boolean; + emit(event: "error", err: Error): boolean; + emit(event: "listening"): boolean; + emit(event: "drop", data?: DropArgument): boolean; + on(event: string, listener: (...args: any[]) => void): this; + on(event: "close", listener: () => void): this; + on(event: "connection", listener: (socket: Socket) => void): this; + on(event: "error", listener: (err: Error) => void): this; + on(event: "listening", listener: () => void): this; + on(event: "drop", listener: (data?: DropArgument) => void): this; + once(event: string, listener: (...args: any[]) => void): this; + once(event: "close", listener: () => void): this; + once(event: "connection", listener: (socket: Socket) => void): this; + once(event: "error", listener: (err: Error) => void): this; + once(event: "listening", listener: () => void): this; + once(event: "drop", listener: (data?: DropArgument) => void): this; + prependListener(event: string, listener: (...args: any[]) => void): this; + prependListener(event: "close", listener: () => void): this; + prependListener(event: "connection", listener: (socket: Socket) => void): this; + prependListener(event: "error", listener: (err: Error) => void): this; + prependListener(event: "listening", listener: () => void): this; + prependListener(event: "drop", listener: (data?: DropArgument) => void): this; + prependOnceListener(event: string, listener: (...args: any[]) => void): this; + prependOnceListener(event: "close", listener: () => void): this; + prependOnceListener(event: "connection", listener: (socket: Socket) => void): this; + prependOnceListener(event: "error", listener: (err: Error) => void): this; + prependOnceListener(event: "listening", listener: () => void): this; + prependOnceListener(event: "drop", listener: (data?: DropArgument) => void): this; + /** + * Calls {@link Server.close()} and returns a promise that fulfills when the server has closed. + * @since v20.5.0 + */ + [Symbol.asyncDispose](): Promise; + } + type IPVersion = "ipv4" | "ipv6"; + /** + * The `BlockList` object can be used with some network APIs to specify rules for + * disabling inbound or outbound access to specific IP addresses, IP ranges, or + * IP subnets. + * @since v15.0.0, v14.18.0 + */ + class BlockList { + /** + * Adds a rule to block the given IP address. + * @since v15.0.0, v14.18.0 + * @param address An IPv4 or IPv6 address. + * @param [type='ipv4'] Either `'ipv4'` or `'ipv6'`. + */ + addAddress(address: string, type?: IPVersion): void; + addAddress(address: SocketAddress): void; + /** + * Adds a rule to block a range of IP addresses from `start` (inclusive) to`end` (inclusive). + * @since v15.0.0, v14.18.0 + * @param start The starting IPv4 or IPv6 address in the range. + * @param end The ending IPv4 or IPv6 address in the range. + * @param [type='ipv4'] Either `'ipv4'` or `'ipv6'`. + */ + addRange(start: string, end: string, type?: IPVersion): void; + addRange(start: SocketAddress, end: SocketAddress): void; + /** + * Adds a rule to block a range of IP addresses specified as a subnet mask. + * @since v15.0.0, v14.18.0 + * @param net The network IPv4 or IPv6 address. + * @param prefix The number of CIDR prefix bits. For IPv4, this must be a value between `0` and `32`. For IPv6, this must be between `0` and `128`. + * @param [type='ipv4'] Either `'ipv4'` or `'ipv6'`. + */ + addSubnet(net: SocketAddress, prefix: number): void; + addSubnet(net: string, prefix: number, type?: IPVersion): void; + /** + * Returns `true` if the given IP address matches any of the rules added to the`BlockList`. + * + * ```js + * const blockList = new net.BlockList(); + * blockList.addAddress('123.123.123.123'); + * blockList.addRange('10.0.0.1', '10.0.0.10'); + * blockList.addSubnet('8592:757c:efae:4e45::', 64, 'ipv6'); + * + * console.log(blockList.check('123.123.123.123')); // Prints: true + * console.log(blockList.check('10.0.0.3')); // Prints: true + * console.log(blockList.check('222.111.111.222')); // Prints: false + * + * // IPv6 notation for IPv4 addresses works: + * console.log(blockList.check('::ffff:7b7b:7b7b', 'ipv6')); // Prints: true + * console.log(blockList.check('::ffff:123.123.123.123', 'ipv6')); // Prints: true + * ``` + * @since v15.0.0, v14.18.0 + * @param address The IP address to check + * @param [type='ipv4'] Either `'ipv4'` or `'ipv6'`. + */ + check(address: SocketAddress): boolean; + check(address: string, type?: IPVersion): boolean; + } + interface TcpNetConnectOpts extends TcpSocketConnectOpts, SocketConstructorOpts { + timeout?: number | undefined; + } + interface IpcNetConnectOpts extends IpcSocketConnectOpts, SocketConstructorOpts { + timeout?: number | undefined; + } + type NetConnectOpts = TcpNetConnectOpts | IpcNetConnectOpts; + /** + * Creates a new TCP or `IPC` server. + * + * If `allowHalfOpen` is set to `true`, when the other end of the socket + * signals the end of transmission, the server will only send back the end of + * transmission when `socket.end()` is explicitly called. For example, in the + * context of TCP, when a FIN packed is received, a FIN packed is sent + * back only when `socket.end()` is explicitly called. Until then the + * connection is half-closed (non-readable but still writable). See `'end'` event and [RFC 1122](https://tools.ietf.org/html/rfc1122) (section 4.2.2.13) for more information. + * + * If `pauseOnConnect` is set to `true`, then the socket associated with each + * incoming connection will be paused, and no data will be read from its handle. + * This allows connections to be passed between processes without any data being + * read by the original process. To begin reading data from a paused socket, call `socket.resume()`. + * + * The server can be a TCP server or an `IPC` server, depending on what it `listen()` to. + * + * Here is an example of a TCP echo server which listens for connections + * on port 8124: + * + * ```js + * const net = require('node:net'); + * const server = net.createServer((c) => { + * // 'connection' listener. + * console.log('client connected'); + * c.on('end', () => { + * console.log('client disconnected'); + * }); + * c.write('hello\r\n'); + * c.pipe(c); + * }); + * server.on('error', (err) => { + * throw err; + * }); + * server.listen(8124, () => { + * console.log('server bound'); + * }); + * ``` + * + * Test this by using `telnet`: + * + * ```bash + * telnet localhost 8124 + * ``` + * + * To listen on the socket `/tmp/echo.sock`: + * + * ```js + * server.listen('/tmp/echo.sock', () => { + * console.log('server bound'); + * }); + * ``` + * + * Use `nc` to connect to a Unix domain socket server: + * + * ```bash + * nc -U /tmp/echo.sock + * ``` + * @since v0.5.0 + * @param connectionListener Automatically set as a listener for the {@link 'connection'} event. + */ + function createServer(connectionListener?: (socket: Socket) => void): Server; + function createServer(options?: ServerOpts, connectionListener?: (socket: Socket) => void): Server; + /** + * Aliases to {@link createConnection}. + * + * Possible signatures: + * + * * {@link connect} + * * {@link connect} for `IPC` connections. + * * {@link connect} for TCP connections. + */ + function connect(options: NetConnectOpts, connectionListener?: () => void): Socket; + function connect(port: number, host?: string, connectionListener?: () => void): Socket; + function connect(path: string, connectionListener?: () => void): Socket; + /** + * A factory function, which creates a new {@link Socket}, + * immediately initiates connection with `socket.connect()`, + * then returns the `net.Socket` that starts the connection. + * + * When the connection is established, a `'connect'` event will be emitted + * on the returned socket. The last parameter `connectListener`, if supplied, + * will be added as a listener for the `'connect'` event **once**. + * + * Possible signatures: + * + * * {@link createConnection} + * * {@link createConnection} for `IPC` connections. + * * {@link createConnection} for TCP connections. + * + * The {@link connect} function is an alias to this function. + */ + function createConnection(options: NetConnectOpts, connectionListener?: () => void): Socket; + function createConnection(port: number, host?: string, connectionListener?: () => void): Socket; + function createConnection(path: string, connectionListener?: () => void): Socket; + /** + * Returns `6` if `input` is an IPv6 address. Returns `4` if `input` is an IPv4 + * address in [dot-decimal notation](https://en.wikipedia.org/wiki/Dot-decimal_notation) with no leading zeroes. Otherwise, returns`0`. + * + * ```js + * net.isIP('::1'); // returns 6 + * net.isIP('127.0.0.1'); // returns 4 + * net.isIP('127.000.000.001'); // returns 0 + * net.isIP('127.0.0.1/24'); // returns 0 + * net.isIP('fhqwhgads'); // returns 0 + * ``` + * @since v0.3.0 + */ + function isIP(input: string): number; + /** + * Returns `true` if `input` is an IPv4 address in [dot-decimal notation](https://en.wikipedia.org/wiki/Dot-decimal_notation) with no + * leading zeroes. Otherwise, returns `false`. + * + * ```js + * net.isIPv4('127.0.0.1'); // returns true + * net.isIPv4('127.000.000.001'); // returns false + * net.isIPv4('127.0.0.1/24'); // returns false + * net.isIPv4('fhqwhgads'); // returns false + * ``` + * @since v0.3.0 + */ + function isIPv4(input: string): boolean; + /** + * Returns `true` if `input` is an IPv6 address. Otherwise, returns `false`. + * + * ```js + * net.isIPv6('::1'); // returns true + * net.isIPv6('fhqwhgads'); // returns false + * ``` + * @since v0.3.0 + */ + function isIPv6(input: string): boolean; + interface SocketAddressInitOptions { + /** + * The network address as either an IPv4 or IPv6 string. + * @default 127.0.0.1 + */ + address?: string | undefined; + /** + * @default `'ipv4'` + */ + family?: IPVersion | undefined; + /** + * An IPv6 flow-label used only if `family` is `'ipv6'`. + * @default 0 + */ + flowlabel?: number | undefined; + /** + * An IP port. + * @default 0 + */ + port?: number | undefined; + } + /** + * @since v15.14.0, v14.18.0 + */ + class SocketAddress { + constructor(options: SocketAddressInitOptions); + /** + * Either \`'ipv4'\` or \`'ipv6'\`. + * @since v15.14.0, v14.18.0 + */ + readonly address: string; + /** + * Either \`'ipv4'\` or \`'ipv6'\`. + * @since v15.14.0, v14.18.0 + */ + readonly family: IPVersion; + /** + * @since v15.14.0, v14.18.0 + */ + readonly port: number; + /** + * @since v15.14.0, v14.18.0 + */ + readonly flowlabel: number; + } +} +declare module "node:net" { + export * from "net"; +} diff --git a/Url-Shortner/node_modules/@types/node/os.d.ts b/Url-Shortner/node_modules/@types/node/os.d.ts new file mode 100644 index 0000000..c281506 --- /dev/null +++ b/Url-Shortner/node_modules/@types/node/os.d.ts @@ -0,0 +1,477 @@ +/** + * The `node:os` module provides operating system-related utility methods and + * properties. It can be accessed using: + * + * ```js + * const os = require('node:os'); + * ``` + * @see [source](https://github.com/nodejs/node/blob/v20.2.0/lib/os.js) + */ +declare module "os" { + interface CpuInfo { + model: string; + speed: number; + times: { + user: number; + nice: number; + sys: number; + idle: number; + irq: number; + }; + } + interface NetworkInterfaceBase { + address: string; + netmask: string; + mac: string; + internal: boolean; + cidr: string | null; + } + interface NetworkInterfaceInfoIPv4 extends NetworkInterfaceBase { + family: "IPv4"; + scopeid?: undefined; + } + interface NetworkInterfaceInfoIPv6 extends NetworkInterfaceBase { + family: "IPv6"; + scopeid: number; + } + interface UserInfo { + username: T; + uid: number; + gid: number; + shell: T; + homedir: T; + } + type NetworkInterfaceInfo = NetworkInterfaceInfoIPv4 | NetworkInterfaceInfoIPv6; + /** + * Returns the host name of the operating system as a string. + * @since v0.3.3 + */ + function hostname(): string; + /** + * Returns an array containing the 1, 5, and 15 minute load averages. + * + * The load average is a measure of system activity calculated by the operating + * system and expressed as a fractional number. + * + * The load average is a Unix-specific concept. On Windows, the return value is + * always `[0, 0, 0]`. + * @since v0.3.3 + */ + function loadavg(): number[]; + /** + * Returns the system uptime in number of seconds. + * @since v0.3.3 + */ + function uptime(): number; + /** + * Returns the amount of free system memory in bytes as an integer. + * @since v0.3.3 + */ + function freemem(): number; + /** + * Returns the total amount of system memory in bytes as an integer. + * @since v0.3.3 + */ + function totalmem(): number; + /** + * Returns an array of objects containing information about each logical CPU core. + * The array will be empty if no CPU information is available, such as if the`/proc` file system is unavailable. + * + * The properties included on each object include: + * + * ```js + * [ + * { + * model: 'Intel(R) Core(TM) i7 CPU 860 @ 2.80GHz', + * speed: 2926, + * times: { + * user: 252020, + * nice: 0, + * sys: 30340, + * idle: 1070356870, + * irq: 0, + * }, + * }, + * { + * model: 'Intel(R) Core(TM) i7 CPU 860 @ 2.80GHz', + * speed: 2926, + * times: { + * user: 306960, + * nice: 0, + * sys: 26980, + * idle: 1071569080, + * irq: 0, + * }, + * }, + * { + * model: 'Intel(R) Core(TM) i7 CPU 860 @ 2.80GHz', + * speed: 2926, + * times: { + * user: 248450, + * nice: 0, + * sys: 21750, + * idle: 1070919370, + * irq: 0, + * }, + * }, + * { + * model: 'Intel(R) Core(TM) i7 CPU 860 @ 2.80GHz', + * speed: 2926, + * times: { + * user: 256880, + * nice: 0, + * sys: 19430, + * idle: 1070905480, + * irq: 20, + * }, + * }, + * ] + * ``` + * + * `nice` values are POSIX-only. On Windows, the `nice` values of all processors + * are always 0. + * + * `os.cpus().length` should not be used to calculate the amount of parallelism + * available to an application. Use {@link availableParallelism} for this purpose. + * @since v0.3.3 + */ + function cpus(): CpuInfo[]; + /** + * Returns an estimate of the default amount of parallelism a program should use. + * Always returns a value greater than zero. + * + * This function is a small wrapper about libuv's [`uv_available_parallelism()`](https://docs.libuv.org/en/v1.x/misc.html#c.uv_available_parallelism). + * @since v19.4.0, v18.14.0 + */ + function availableParallelism(): number; + /** + * Returns the operating system name as returned by [`uname(3)`](https://linux.die.net/man/3/uname). For example, it + * returns `'Linux'` on Linux, `'Darwin'` on macOS, and `'Windows_NT'` on Windows. + * + * See [https://en.wikipedia.org/wiki/Uname#Examples](https://en.wikipedia.org/wiki/Uname#Examples) for additional information + * about the output of running [`uname(3)`](https://linux.die.net/man/3/uname) on various operating systems. + * @since v0.3.3 + */ + function type(): string; + /** + * Returns the operating system as a string. + * + * On POSIX systems, the operating system release is determined by calling [`uname(3)`](https://linux.die.net/man/3/uname). On Windows, `GetVersionExW()` is used. See + * [https://en.wikipedia.org/wiki/Uname#Examples](https://en.wikipedia.org/wiki/Uname#Examples) for more information. + * @since v0.3.3 + */ + function release(): string; + /** + * Returns an object containing network interfaces that have been assigned a + * network address. + * + * Each key on the returned object identifies a network interface. The associated + * value is an array of objects that each describe an assigned network address. + * + * The properties available on the assigned network address object include: + * + * ```js + * { + * lo: [ + * { + * address: '127.0.0.1', + * netmask: '255.0.0.0', + * family: 'IPv4', + * mac: '00:00:00:00:00:00', + * internal: true, + * cidr: '127.0.0.1/8' + * }, + * { + * address: '::1', + * netmask: 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff', + * family: 'IPv6', + * mac: '00:00:00:00:00:00', + * scopeid: 0, + * internal: true, + * cidr: '::1/128' + * } + * ], + * eth0: [ + * { + * address: '192.168.1.108', + * netmask: '255.255.255.0', + * family: 'IPv4', + * mac: '01:02:03:0a:0b:0c', + * internal: false, + * cidr: '192.168.1.108/24' + * }, + * { + * address: 'fe80::a00:27ff:fe4e:66a1', + * netmask: 'ffff:ffff:ffff:ffff::', + * family: 'IPv6', + * mac: '01:02:03:0a:0b:0c', + * scopeid: 1, + * internal: false, + * cidr: 'fe80::a00:27ff:fe4e:66a1/64' + * } + * ] + * } + * ``` + * @since v0.6.0 + */ + function networkInterfaces(): NodeJS.Dict; + /** + * Returns the string path of the current user's home directory. + * + * On POSIX, it uses the `$HOME` environment variable if defined. Otherwise it + * uses the [effective UID](https://en.wikipedia.org/wiki/User_identifier#Effective_user_ID) to look up the user's home directory. + * + * On Windows, it uses the `USERPROFILE` environment variable if defined. + * Otherwise it uses the path to the profile directory of the current user. + * @since v2.3.0 + */ + function homedir(): string; + /** + * Returns information about the currently effective user. On POSIX platforms, + * this is typically a subset of the password file. The returned object includes + * the `username`, `uid`, `gid`, `shell`, and `homedir`. On Windows, the `uid` and`gid` fields are `-1`, and `shell` is `null`. + * + * The value of `homedir` returned by `os.userInfo()` is provided by the operating + * system. This differs from the result of `os.homedir()`, which queries + * environment variables for the home directory before falling back to the + * operating system response. + * + * Throws a `SystemError` if a user has no `username` or `homedir`. + * @since v6.0.0 + */ + function userInfo(options: { encoding: "buffer" }): UserInfo; + function userInfo(options?: { encoding: BufferEncoding }): UserInfo; + type SignalConstants = { + [key in NodeJS.Signals]: number; + }; + namespace constants { + const UV_UDP_REUSEADDR: number; + namespace signals {} + const signals: SignalConstants; + namespace errno { + const E2BIG: number; + const EACCES: number; + const EADDRINUSE: number; + const EADDRNOTAVAIL: number; + const EAFNOSUPPORT: number; + const EAGAIN: number; + const EALREADY: number; + const EBADF: number; + const EBADMSG: number; + const EBUSY: number; + const ECANCELED: number; + const ECHILD: number; + const ECONNABORTED: number; + const ECONNREFUSED: number; + const ECONNRESET: number; + const EDEADLK: number; + const EDESTADDRREQ: number; + const EDOM: number; + const EDQUOT: number; + const EEXIST: number; + const EFAULT: number; + const EFBIG: number; + const EHOSTUNREACH: number; + const EIDRM: number; + const EILSEQ: number; + const EINPROGRESS: number; + const EINTR: number; + const EINVAL: number; + const EIO: number; + const EISCONN: number; + const EISDIR: number; + const ELOOP: number; + const EMFILE: number; + const EMLINK: number; + const EMSGSIZE: number; + const EMULTIHOP: number; + const ENAMETOOLONG: number; + const ENETDOWN: number; + const ENETRESET: number; + const ENETUNREACH: number; + const ENFILE: number; + const ENOBUFS: number; + const ENODATA: number; + const ENODEV: number; + const ENOENT: number; + const ENOEXEC: number; + const ENOLCK: number; + const ENOLINK: number; + const ENOMEM: number; + const ENOMSG: number; + const ENOPROTOOPT: number; + const ENOSPC: number; + const ENOSR: number; + const ENOSTR: number; + const ENOSYS: number; + const ENOTCONN: number; + const ENOTDIR: number; + const ENOTEMPTY: number; + const ENOTSOCK: number; + const ENOTSUP: number; + const ENOTTY: number; + const ENXIO: number; + const EOPNOTSUPP: number; + const EOVERFLOW: number; + const EPERM: number; + const EPIPE: number; + const EPROTO: number; + const EPROTONOSUPPORT: number; + const EPROTOTYPE: number; + const ERANGE: number; + const EROFS: number; + const ESPIPE: number; + const ESRCH: number; + const ESTALE: number; + const ETIME: number; + const ETIMEDOUT: number; + const ETXTBSY: number; + const EWOULDBLOCK: number; + const EXDEV: number; + const WSAEINTR: number; + const WSAEBADF: number; + const WSAEACCES: number; + const WSAEFAULT: number; + const WSAEINVAL: number; + const WSAEMFILE: number; + const WSAEWOULDBLOCK: number; + const WSAEINPROGRESS: number; + const WSAEALREADY: number; + const WSAENOTSOCK: number; + const WSAEDESTADDRREQ: number; + const WSAEMSGSIZE: number; + const WSAEPROTOTYPE: number; + const WSAENOPROTOOPT: number; + const WSAEPROTONOSUPPORT: number; + const WSAESOCKTNOSUPPORT: number; + const WSAEOPNOTSUPP: number; + const WSAEPFNOSUPPORT: number; + const WSAEAFNOSUPPORT: number; + const WSAEADDRINUSE: number; + const WSAEADDRNOTAVAIL: number; + const WSAENETDOWN: number; + const WSAENETUNREACH: number; + const WSAENETRESET: number; + const WSAECONNABORTED: number; + const WSAECONNRESET: number; + const WSAENOBUFS: number; + const WSAEISCONN: number; + const WSAENOTCONN: number; + const WSAESHUTDOWN: number; + const WSAETOOMANYREFS: number; + const WSAETIMEDOUT: number; + const WSAECONNREFUSED: number; + const WSAELOOP: number; + const WSAENAMETOOLONG: number; + const WSAEHOSTDOWN: number; + const WSAEHOSTUNREACH: number; + const WSAENOTEMPTY: number; + const WSAEPROCLIM: number; + const WSAEUSERS: number; + const WSAEDQUOT: number; + const WSAESTALE: number; + const WSAEREMOTE: number; + const WSASYSNOTREADY: number; + const WSAVERNOTSUPPORTED: number; + const WSANOTINITIALISED: number; + const WSAEDISCON: number; + const WSAENOMORE: number; + const WSAECANCELLED: number; + const WSAEINVALIDPROCTABLE: number; + const WSAEINVALIDPROVIDER: number; + const WSAEPROVIDERFAILEDINIT: number; + const WSASYSCALLFAILURE: number; + const WSASERVICE_NOT_FOUND: number; + const WSATYPE_NOT_FOUND: number; + const WSA_E_NO_MORE: number; + const WSA_E_CANCELLED: number; + const WSAEREFUSED: number; + } + namespace priority { + const PRIORITY_LOW: number; + const PRIORITY_BELOW_NORMAL: number; + const PRIORITY_NORMAL: number; + const PRIORITY_ABOVE_NORMAL: number; + const PRIORITY_HIGH: number; + const PRIORITY_HIGHEST: number; + } + } + const devNull: string; + const EOL: string; + /** + * Returns the operating system CPU architecture for which the Node.js binary was + * compiled. Possible values are `'arm'`, `'arm64'`, `'ia32'`, `'mips'`,`'mipsel'`, `'ppc'`, `'ppc64'`, `'s390'`, `'s390x'`, and `'x64'`. + * + * The return value is equivalent to `process.arch`. + * @since v0.5.0 + */ + function arch(): string; + /** + * Returns a string identifying the kernel version. + * + * On POSIX systems, the operating system release is determined by calling [`uname(3)`](https://linux.die.net/man/3/uname). On Windows, `RtlGetVersion()` is used, and if it is not + * available, `GetVersionExW()` will be used. See [https://en.wikipedia.org/wiki/Uname#Examples](https://en.wikipedia.org/wiki/Uname#Examples) for more information. + * @since v13.11.0, v12.17.0 + */ + function version(): string; + /** + * Returns a string identifying the operating system platform for which + * the Node.js binary was compiled. The value is set at compile time. + * Possible values are `'aix'`, `'darwin'`, `'freebsd'`,`'linux'`,`'openbsd'`, `'sunos'`, and `'win32'`. + * + * The return value is equivalent to `process.platform`. + * + * The value `'android'` may also be returned if Node.js is built on the Android + * operating system. [Android support is experimental](https://github.com/nodejs/node/blob/HEAD/BUILDING.md#androidandroid-based-devices-eg-firefox-os). + * @since v0.5.0 + */ + function platform(): NodeJS.Platform; + /** + * Returns the machine type as a string, such as `arm`, `arm64`, `aarch64`,`mips`, `mips64`, `ppc64`, `ppc64le`, `s390`, `s390x`, `i386`, `i686`, `x86_64`. + * + * On POSIX systems, the machine type is determined by calling [`uname(3)`](https://linux.die.net/man/3/uname). On Windows, `RtlGetVersion()` is used, and if it is not + * available, `GetVersionExW()` will be used. See [https://en.wikipedia.org/wiki/Uname#Examples](https://en.wikipedia.org/wiki/Uname#Examples) for more information. + * @since v18.9.0, v16.18.0 + */ + function machine(): string; + /** + * Returns the operating system's default directory for temporary files as a + * string. + * @since v0.9.9 + */ + function tmpdir(): string; + /** + * Returns a string identifying the endianness of the CPU for which the Node.js + * binary was compiled. + * + * Possible values are `'BE'` for big endian and `'LE'` for little endian. + * @since v0.9.4 + */ + function endianness(): "BE" | "LE"; + /** + * Returns the scheduling priority for the process specified by `pid`. If `pid` is + * not provided or is `0`, the priority of the current process is returned. + * @since v10.10.0 + * @param [pid=0] The process ID to retrieve scheduling priority for. + */ + function getPriority(pid?: number): number; + /** + * Attempts to set the scheduling priority for the process specified by `pid`. If`pid` is not provided or is `0`, the process ID of the current process is used. + * + * The `priority` input must be an integer between `-20` (high priority) and `19`(low priority). Due to differences between Unix priority levels and Windows + * priority classes, `priority` is mapped to one of six priority constants in`os.constants.priority`. When retrieving a process priority level, this range + * mapping may cause the return value to be slightly different on Windows. To avoid + * confusion, set `priority` to one of the priority constants. + * + * On Windows, setting priority to `PRIORITY_HIGHEST` requires elevated user + * privileges. Otherwise the set priority will be silently reduced to`PRIORITY_HIGH`. + * @since v10.10.0 + * @param [pid=0] The process ID to set scheduling priority for. + * @param priority The scheduling priority to assign to the process. + */ + function setPriority(priority: number): void; + function setPriority(pid: number, priority: number): void; +} +declare module "node:os" { + export * from "os"; +} diff --git a/Url-Shortner/node_modules/@types/node/package.json b/Url-Shortner/node_modules/@types/node/package.json new file mode 100644 index 0000000..f3dac5b --- /dev/null +++ b/Url-Shortner/node_modules/@types/node/package.json @@ -0,0 +1,232 @@ +{ + "name": "@types/node", + "version": "20.6.5", + "description": "TypeScript definitions for Node.js", + "homepage": "https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node", + "license": "MIT", + "contributors": [ + { + "name": "Microsoft TypeScript", + "url": "https://github.com/Microsoft", + "githubUsername": "Microsoft" + }, + { + "name": "DefinitelyTyped", + "url": "https://github.com/DefinitelyTyped", + "githubUsername": "DefinitelyTyped" + }, + { + "name": "Alberto Schiabel", + "url": "https://github.com/jkomyno", + "githubUsername": "jkomyno" + }, + { + "name": "Alvis HT Tang", + "url": "https://github.com/alvis", + "githubUsername": "alvis" + }, + { + "name": "Andrew Makarov", + "url": "https://github.com/r3nya", + "githubUsername": "r3nya" + }, + { + "name": "Benjamin Toueg", + "url": "https://github.com/btoueg", + "githubUsername": "btoueg" + }, + { + "name": "Chigozirim C.", + "url": "https://github.com/smac89", + "githubUsername": "smac89" + }, + { + "name": "David Junger", + "url": "https://github.com/touffy", + "githubUsername": "touffy" + }, + { + "name": "Deividas Bakanas", + "url": "https://github.com/DeividasBakanas", + "githubUsername": "DeividasBakanas" + }, + { + "name": "Eugene Y. Q. Shen", + "url": "https://github.com/eyqs", + "githubUsername": "eyqs" + }, + { + "name": "Hannes Magnusson", + "url": "https://github.com/Hannes-Magnusson-CK", + "githubUsername": "Hannes-Magnusson-CK" + }, + { + "name": "Huw", + "url": "https://github.com/hoo29", + "githubUsername": "hoo29" + }, + { + "name": "Kelvin Jin", + "url": "https://github.com/kjin", + "githubUsername": "kjin" + }, + { + "name": "Klaus Meinhardt", + "url": "https://github.com/ajafff", + "githubUsername": "ajafff" + }, + { + "name": "Lishude", + "url": "https://github.com/islishude", + "githubUsername": "islishude" + }, + { + "name": "Mariusz Wiktorczyk", + "url": "https://github.com/mwiktorczyk", + "githubUsername": "mwiktorczyk" + }, + { + "name": "Mohsen Azimi", + "url": "https://github.com/mohsen1", + "githubUsername": "mohsen1" + }, + { + "name": "Nicolas Even", + "url": "https://github.com/n-e", + "githubUsername": "n-e" + }, + { + "name": "Nikita Galkin", + "url": "https://github.com/galkin", + "githubUsername": "galkin" + }, + { + "name": "Parambir Singh", + "url": "https://github.com/parambirs", + "githubUsername": "parambirs" + }, + { + "name": "Sebastian Silbermann", + "url": "https://github.com/eps1lon", + "githubUsername": "eps1lon" + }, + { + "name": "Thomas den Hollander", + "url": "https://github.com/ThomasdenH", + "githubUsername": "ThomasdenH" + }, + { + "name": "Wilco Bakker", + "url": "https://github.com/WilcoBakker", + "githubUsername": "WilcoBakker" + }, + { + "name": "wwwy3y3", + "url": "https://github.com/wwwy3y3", + "githubUsername": "wwwy3y3" + }, + { + "name": "Samuel Ainsworth", + "url": "https://github.com/samuela", + "githubUsername": "samuela" + }, + { + "name": "Kyle Uehlein", + "url": "https://github.com/kuehlein", + "githubUsername": "kuehlein" + }, + { + "name": "Thanik Bhongbhibhat", + "url": "https://github.com/bhongy", + "githubUsername": "bhongy" + }, + { + "name": "Marcin Kopacz", + "url": "https://github.com/chyzwar", + "githubUsername": "chyzwar" + }, + { + "name": "Trivikram Kamat", + "url": "https://github.com/trivikr", + "githubUsername": "trivikr" + }, + { + "name": "Junxiao Shi", + "url": "https://github.com/yoursunny", + "githubUsername": "yoursunny" + }, + { + "name": "Ilia Baryshnikov", + "url": "https://github.com/qwelias", + "githubUsername": "qwelias" + }, + { + "name": "ExE Boss", + "url": "https://github.com/ExE-Boss", + "githubUsername": "ExE-Boss" + }, + { + "name": "Piotr Błażejewicz", + "url": "https://github.com/peterblazejewicz", + "githubUsername": "peterblazejewicz" + }, + { + "name": "Anna Henningsen", + "url": "https://github.com/addaleax", + "githubUsername": "addaleax" + }, + { + "name": "Victor Perin", + "url": "https://github.com/victorperin", + "githubUsername": "victorperin" + }, + { + "name": "Yongsheng Zhang", + "url": "https://github.com/ZYSzys", + "githubUsername": "ZYSzys" + }, + { + "name": "NodeJS Contributors", + "url": "https://github.com/NodeJS", + "githubUsername": "NodeJS" + }, + { + "name": "Linus Unnebäck", + "url": "https://github.com/LinusU", + "githubUsername": "LinusU" + }, + { + "name": "wafuwafu13", + "url": "https://github.com/wafuwafu13", + "githubUsername": "wafuwafu13" + }, + { + "name": "Matteo Collina", + "url": "https://github.com/mcollina", + "githubUsername": "mcollina" + }, + { + "name": "Dmitry Semigradsky", + "url": "https://github.com/Semigradsky", + "githubUsername": "Semigradsky" + } + ], + "main": "", + "types": "index.d.ts", + "typesVersions": { + "<=4.8": { + "*": [ + "ts4.8/*" + ] + } + }, + "repository": { + "type": "git", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped.git", + "directory": "types/node" + }, + "scripts": {}, + "dependencies": {}, + "typesPublisherContentHash": "072be5b926605aae9ef150e9c21bebd1e3f73cbda81a3a7b3ca17545c191ac85", + "typeScriptVersion": "4.5" +} \ No newline at end of file diff --git a/Url-Shortner/node_modules/@types/node/path.d.ts b/Url-Shortner/node_modules/@types/node/path.d.ts new file mode 100644 index 0000000..6f07681 --- /dev/null +++ b/Url-Shortner/node_modules/@types/node/path.d.ts @@ -0,0 +1,191 @@ +declare module "path/posix" { + import path = require("path"); + export = path; +} +declare module "path/win32" { + import path = require("path"); + export = path; +} +/** + * The `node:path` module provides utilities for working with file and directory + * paths. It can be accessed using: + * + * ```js + * const path = require('node:path'); + * ``` + * @see [source](https://github.com/nodejs/node/blob/v20.2.0/lib/path.js) + */ +declare module "path" { + namespace path { + /** + * A parsed path object generated by path.parse() or consumed by path.format(). + */ + interface ParsedPath { + /** + * The root of the path such as '/' or 'c:\' + */ + root: string; + /** + * The full directory path such as '/home/user/dir' or 'c:\path\dir' + */ + dir: string; + /** + * The file name including extension (if any) such as 'index.html' + */ + base: string; + /** + * The file extension (if any) such as '.html' + */ + ext: string; + /** + * The file name without extension (if any) such as 'index' + */ + name: string; + } + interface FormatInputPathObject { + /** + * The root of the path such as '/' or 'c:\' + */ + root?: string | undefined; + /** + * The full directory path such as '/home/user/dir' or 'c:\path\dir' + */ + dir?: string | undefined; + /** + * The file name including extension (if any) such as 'index.html' + */ + base?: string | undefined; + /** + * The file extension (if any) such as '.html' + */ + ext?: string | undefined; + /** + * The file name without extension (if any) such as 'index' + */ + name?: string | undefined; + } + interface PlatformPath { + /** + * Normalize a string path, reducing '..' and '.' parts. + * When multiple slashes are found, they're replaced by a single one; when the path contains a trailing slash, it is preserved. On Windows backslashes are used. + * + * @param path string path to normalize. + * @throws {TypeError} if `path` is not a string. + */ + normalize(path: string): string; + /** + * Join all arguments together and normalize the resulting path. + * + * @param paths paths to join. + * @throws {TypeError} if any of the path segments is not a string. + */ + join(...paths: string[]): string; + /** + * The right-most parameter is considered {to}. Other parameters are considered an array of {from}. + * + * Starting from leftmost {from} parameter, resolves {to} to an absolute path. + * + * If {to} isn't already absolute, {from} arguments are prepended in right to left order, + * until an absolute path is found. If after using all {from} paths still no absolute path is found, + * the current working directory is used as well. The resulting path is normalized, + * and trailing slashes are removed unless the path gets resolved to the root directory. + * + * @param paths A sequence of paths or path segments. + * @throws {TypeError} if any of the arguments is not a string. + */ + resolve(...paths: string[]): string; + /** + * Determines whether {path} is an absolute path. An absolute path will always resolve to the same location, regardless of the working directory. + * + * If the given {path} is a zero-length string, `false` will be returned. + * + * @param path path to test. + * @throws {TypeError} if `path` is not a string. + */ + isAbsolute(path: string): boolean; + /** + * Solve the relative path from {from} to {to} based on the current working directory. + * At times we have two absolute paths, and we need to derive the relative path from one to the other. This is actually the reverse transform of path.resolve. + * + * @throws {TypeError} if either `from` or `to` is not a string. + */ + relative(from: string, to: string): string; + /** + * Return the directory name of a path. Similar to the Unix dirname command. + * + * @param path the path to evaluate. + * @throws {TypeError} if `path` is not a string. + */ + dirname(path: string): string; + /** + * Return the last portion of a path. Similar to the Unix basename command. + * Often used to extract the file name from a fully qualified path. + * + * @param path the path to evaluate. + * @param suffix optionally, an extension to remove from the result. + * @throws {TypeError} if `path` is not a string or if `ext` is given and is not a string. + */ + basename(path: string, suffix?: string): string; + /** + * Return the extension of the path, from the last '.' to end of string in the last portion of the path. + * If there is no '.' in the last portion of the path or the first character of it is '.', then it returns an empty string. + * + * @param path the path to evaluate. + * @throws {TypeError} if `path` is not a string. + */ + extname(path: string): string; + /** + * The platform-specific file separator. '\\' or '/'. + */ + readonly sep: "\\" | "/"; + /** + * The platform-specific file delimiter. ';' or ':'. + */ + readonly delimiter: ";" | ":"; + /** + * Returns an object from a path string - the opposite of format(). + * + * @param path path to evaluate. + * @throws {TypeError} if `path` is not a string. + */ + parse(path: string): ParsedPath; + /** + * Returns a path string from an object - the opposite of parse(). + * + * @param pathObject path to evaluate. + */ + format(pathObject: FormatInputPathObject): string; + /** + * On Windows systems only, returns an equivalent namespace-prefixed path for the given path. + * If path is not a string, path will be returned without modifications. + * This method is meaningful only on Windows system. + * On POSIX systems, the method is non-operational and always returns path without modifications. + */ + toNamespacedPath(path: string): string; + /** + * Posix specific pathing. + * Same as parent object on posix. + */ + readonly posix: PlatformPath; + /** + * Windows specific pathing. + * Same as parent object on windows + */ + readonly win32: PlatformPath; + } + } + const path: path.PlatformPath; + export = path; +} +declare module "node:path" { + import path = require("path"); + export = path; +} +declare module "node:path/posix" { + import path = require("path/posix"); + export = path; +} +declare module "node:path/win32" { + import path = require("path/win32"); + export = path; +} diff --git a/Url-Shortner/node_modules/@types/node/perf_hooks.d.ts b/Url-Shortner/node_modules/@types/node/perf_hooks.d.ts new file mode 100644 index 0000000..5f89981 --- /dev/null +++ b/Url-Shortner/node_modules/@types/node/perf_hooks.d.ts @@ -0,0 +1,639 @@ +/** + * This module provides an implementation of a subset of the W3C [Web Performance APIs](https://w3c.github.io/perf-timing-primer/) as well as additional APIs for + * Node.js-specific performance measurements. + * + * Node.js supports the following [Web Performance APIs](https://w3c.github.io/perf-timing-primer/): + * + * * [High Resolution Time](https://www.w3.org/TR/hr-time-2) + * * [Performance Timeline](https://w3c.github.io/performance-timeline/) + * * [User Timing](https://www.w3.org/TR/user-timing/) + * * [Resource Timing](https://www.w3.org/TR/resource-timing-2/) + * + * ```js + * const { PerformanceObserver, performance } = require('node:perf_hooks'); + * + * const obs = new PerformanceObserver((items) => { + * console.log(items.getEntries()[0].duration); + * performance.clearMarks(); + * }); + * obs.observe({ type: 'measure' }); + * performance.measure('Start to Now'); + * + * performance.mark('A'); + * doSomeLongRunningProcess(() => { + * performance.measure('A to Now', 'A'); + * + * performance.mark('B'); + * performance.measure('A to B', 'A', 'B'); + * }); + * ``` + * @see [source](https://github.com/nodejs/node/blob/v20.2.0/lib/perf_hooks.js) + */ +declare module "perf_hooks" { + import { AsyncResource } from "node:async_hooks"; + type EntryType = "node" | "mark" | "measure" | "gc" | "function" | "http2" | "http" | "dns"; + interface NodeGCPerformanceDetail { + /** + * When `performanceEntry.entryType` is equal to 'gc', `the performance.kind` property identifies + * the type of garbage collection operation that occurred. + * See perf_hooks.constants for valid values. + */ + readonly kind?: number | undefined; + /** + * When `performanceEntry.entryType` is equal to 'gc', the `performance.flags` + * property contains additional information about garbage collection operation. + * See perf_hooks.constants for valid values. + */ + readonly flags?: number | undefined; + } + /** + * The constructor of this class is not exposed to users directly. + * @since v8.5.0 + */ + class PerformanceEntry { + protected constructor(); + /** + * The total number of milliseconds elapsed for this entry. This value will not + * be meaningful for all Performance Entry types. + * @since v8.5.0 + */ + readonly duration: number; + /** + * The name of the performance entry. + * @since v8.5.0 + */ + readonly name: string; + /** + * The high resolution millisecond timestamp marking the starting time of the + * Performance Entry. + * @since v8.5.0 + */ + readonly startTime: number; + /** + * The type of the performance entry. It may be one of: + * + * * `'node'` (Node.js only) + * * `'mark'` (available on the Web) + * * `'measure'` (available on the Web) + * * `'gc'` (Node.js only) + * * `'function'` (Node.js only) + * * `'http2'` (Node.js only) + * * `'http'` (Node.js only) + * @since v8.5.0 + */ + readonly entryType: EntryType; + /** + * Additional detail specific to the `entryType`. + * @since v16.0.0 + */ + readonly detail?: NodeGCPerformanceDetail | unknown | undefined; // TODO: Narrow this based on entry type. + toJSON(): any; + } + /** + * Exposes marks created via the `Performance.mark()` method. + * @since v18.2.0, v16.17.0 + */ + class PerformanceMark extends PerformanceEntry { + readonly duration: 0; + readonly entryType: "mark"; + } + /** + * Exposes measures created via the `Performance.measure()` method. + * + * The constructor of this class is not exposed to users directly. + * @since v18.2.0, v16.17.0 + */ + class PerformanceMeasure extends PerformanceEntry { + readonly entryType: "measure"; + } + /** + * _This property is an extension by Node.js. It is not available in Web browsers._ + * + * Provides timing details for Node.js itself. The constructor of this class + * is not exposed to users. + * @since v8.5.0 + */ + class PerformanceNodeTiming extends PerformanceEntry { + /** + * The high resolution millisecond timestamp at which the Node.js process + * completed bootstrapping. If bootstrapping has not yet finished, the property + * has the value of -1. + * @since v8.5.0 + */ + readonly bootstrapComplete: number; + /** + * The high resolution millisecond timestamp at which the Node.js environment was + * initialized. + * @since v8.5.0 + */ + readonly environment: number; + /** + * The high resolution millisecond timestamp of the amount of time the event loop + * has been idle within the event loop's event provider (e.g. `epoll_wait`). This + * does not take CPU usage into consideration. If the event loop has not yet + * started (e.g., in the first tick of the main script), the property has the + * value of 0. + * @since v14.10.0, v12.19.0 + */ + readonly idleTime: number; + /** + * The high resolution millisecond timestamp at which the Node.js event loop + * exited. If the event loop has not yet exited, the property has the value of -1\. + * It can only have a value of not -1 in a handler of the `'exit'` event. + * @since v8.5.0 + */ + readonly loopExit: number; + /** + * The high resolution millisecond timestamp at which the Node.js event loop + * started. If the event loop has not yet started (e.g., in the first tick of the + * main script), the property has the value of -1. + * @since v8.5.0 + */ + readonly loopStart: number; + /** + * The high resolution millisecond timestamp at which the V8 platform was + * initialized. + * @since v8.5.0 + */ + readonly v8Start: number; + } + interface EventLoopUtilization { + idle: number; + active: number; + utilization: number; + } + /** + * @param util1 The result of a previous call to eventLoopUtilization() + * @param util2 The result of a previous call to eventLoopUtilization() prior to util1 + */ + type EventLoopUtilityFunction = ( + util1?: EventLoopUtilization, + util2?: EventLoopUtilization, + ) => EventLoopUtilization; + interface MarkOptions { + /** + * Additional optional detail to include with the mark. + */ + detail?: unknown | undefined; + /** + * An optional timestamp to be used as the mark time. + * @default `performance.now()`. + */ + startTime?: number | undefined; + } + interface MeasureOptions { + /** + * Additional optional detail to include with the mark. + */ + detail?: unknown | undefined; + /** + * Duration between start and end times. + */ + duration?: number | undefined; + /** + * Timestamp to be used as the end time, or a string identifying a previously recorded mark. + */ + end?: number | string | undefined; + /** + * Timestamp to be used as the start time, or a string identifying a previously recorded mark. + */ + start?: number | string | undefined; + } + interface TimerifyOptions { + /** + * A histogram object created using + * `perf_hooks.createHistogram()` that will record runtime durations in + * nanoseconds. + */ + histogram?: RecordableHistogram | undefined; + } + interface Performance { + /** + * If name is not provided, removes all PerformanceMark objects from the Performance Timeline. + * If name is provided, removes only the named mark. + * @param name + */ + clearMarks(name?: string): void; + /** + * If name is not provided, removes all PerformanceMeasure objects from the Performance Timeline. + * If name is provided, removes only the named measure. + * @param name + * @since v16.7.0 + */ + clearMeasures(name?: string): void; + /** + * Returns a list of `PerformanceEntry` objects in chronological order with respect to `performanceEntry.startTime`. + * If you are only interested in performance entries of certain types or that have certain names, see + * `performance.getEntriesByType()` and `performance.getEntriesByName()`. + * @since v16.7.0 + */ + getEntries(): PerformanceEntry[]; + /** + * Returns a list of `PerformanceEntry` objects in chronological order with respect to `performanceEntry.startTime` + * whose `performanceEntry.name` is equal to `name`, and optionally, whose `performanceEntry.entryType` is equal to `type`. + * @param name + * @param type + * @since v16.7.0 + */ + getEntriesByName(name: string, type?: EntryType): PerformanceEntry[]; + /** + * Returns a list of `PerformanceEntry` objects in chronological order with respect to `performanceEntry.startTime` + * whose `performanceEntry.entryType` is equal to `type`. + * @param type + * @since v16.7.0 + */ + getEntriesByType(type: EntryType): PerformanceEntry[]; + /** + * Creates a new PerformanceMark entry in the Performance Timeline. + * A PerformanceMark is a subclass of PerformanceEntry whose performanceEntry.entryType is always 'mark', + * and whose performanceEntry.duration is always 0. + * Performance marks are used to mark specific significant moments in the Performance Timeline. + * @param name + * @return The PerformanceMark entry that was created + */ + mark(name?: string, options?: MarkOptions): PerformanceMark; + /** + * Creates a new PerformanceMeasure entry in the Performance Timeline. + * A PerformanceMeasure is a subclass of PerformanceEntry whose performanceEntry.entryType is always 'measure', + * and whose performanceEntry.duration measures the number of milliseconds elapsed since startMark and endMark. + * + * The startMark argument may identify any existing PerformanceMark in the the Performance Timeline, or may identify + * any of the timestamp properties provided by the PerformanceNodeTiming class. If the named startMark does not exist, + * then startMark is set to timeOrigin by default. + * + * The endMark argument must identify any existing PerformanceMark in the the Performance Timeline or any of the timestamp + * properties provided by the PerformanceNodeTiming class. If the named endMark does not exist, an error will be thrown. + * @param name + * @param startMark + * @param endMark + * @return The PerformanceMeasure entry that was created + */ + measure(name: string, startMark?: string, endMark?: string): PerformanceMeasure; + measure(name: string, options: MeasureOptions): PerformanceMeasure; + /** + * An instance of the PerformanceNodeTiming class that provides performance metrics for specific Node.js operational milestones. + */ + readonly nodeTiming: PerformanceNodeTiming; + /** + * @return the current high resolution millisecond timestamp + */ + now(): number; + /** + * The timeOrigin specifies the high resolution millisecond timestamp from which all performance metric durations are measured. + */ + readonly timeOrigin: number; + /** + * Wraps a function within a new function that measures the running time of the wrapped function. + * A PerformanceObserver must be subscribed to the 'function' event type in order for the timing details to be accessed. + * @param fn + */ + timerify any>(fn: T, options?: TimerifyOptions): T; + /** + * eventLoopUtilization is similar to CPU utilization except that it is calculated using high precision wall-clock time. + * It represents the percentage of time the event loop has spent outside the event loop's event provider (e.g. epoll_wait). + * No other CPU idle time is taken into consideration. + */ + eventLoopUtilization: EventLoopUtilityFunction; + } + interface PerformanceObserverEntryList { + /** + * Returns a list of `PerformanceEntry` objects in chronological order + * with respect to `performanceEntry.startTime`. + * + * ```js + * const { + * performance, + * PerformanceObserver, + * } = require('node:perf_hooks'); + * + * const obs = new PerformanceObserver((perfObserverList, observer) => { + * console.log(perfObserverList.getEntries()); + * + * * [ + * * PerformanceEntry { + * * name: 'test', + * * entryType: 'mark', + * * startTime: 81.465639, + * * duration: 0 + * * }, + * * PerformanceEntry { + * * name: 'meow', + * * entryType: 'mark', + * * startTime: 81.860064, + * * duration: 0 + * * } + * * ] + * + * performance.clearMarks(); + * performance.clearMeasures(); + * observer.disconnect(); + * }); + * obs.observe({ type: 'mark' }); + * + * performance.mark('test'); + * performance.mark('meow'); + * ``` + * @since v8.5.0 + */ + getEntries(): PerformanceEntry[]; + /** + * Returns a list of `PerformanceEntry` objects in chronological order + * with respect to `performanceEntry.startTime` whose `performanceEntry.name` is + * equal to `name`, and optionally, whose `performanceEntry.entryType` is equal to`type`. + * + * ```js + * const { + * performance, + * PerformanceObserver, + * } = require('node:perf_hooks'); + * + * const obs = new PerformanceObserver((perfObserverList, observer) => { + * console.log(perfObserverList.getEntriesByName('meow')); + * + * * [ + * * PerformanceEntry { + * * name: 'meow', + * * entryType: 'mark', + * * startTime: 98.545991, + * * duration: 0 + * * } + * * ] + * + * console.log(perfObserverList.getEntriesByName('nope')); // [] + * + * console.log(perfObserverList.getEntriesByName('test', 'mark')); + * + * * [ + * * PerformanceEntry { + * * name: 'test', + * * entryType: 'mark', + * * startTime: 63.518931, + * * duration: 0 + * * } + * * ] + * + * console.log(perfObserverList.getEntriesByName('test', 'measure')); // [] + * + * performance.clearMarks(); + * performance.clearMeasures(); + * observer.disconnect(); + * }); + * obs.observe({ entryTypes: ['mark', 'measure'] }); + * + * performance.mark('test'); + * performance.mark('meow'); + * ``` + * @since v8.5.0 + */ + getEntriesByName(name: string, type?: EntryType): PerformanceEntry[]; + /** + * Returns a list of `PerformanceEntry` objects in chronological order + * with respect to `performanceEntry.startTime` whose `performanceEntry.entryType`is equal to `type`. + * + * ```js + * const { + * performance, + * PerformanceObserver, + * } = require('node:perf_hooks'); + * + * const obs = new PerformanceObserver((perfObserverList, observer) => { + * console.log(perfObserverList.getEntriesByType('mark')); + * + * * [ + * * PerformanceEntry { + * * name: 'test', + * * entryType: 'mark', + * * startTime: 55.897834, + * * duration: 0 + * * }, + * * PerformanceEntry { + * * name: 'meow', + * * entryType: 'mark', + * * startTime: 56.350146, + * * duration: 0 + * * } + * * ] + * + * performance.clearMarks(); + * performance.clearMeasures(); + * observer.disconnect(); + * }); + * obs.observe({ type: 'mark' }); + * + * performance.mark('test'); + * performance.mark('meow'); + * ``` + * @since v8.5.0 + */ + getEntriesByType(type: EntryType): PerformanceEntry[]; + } + type PerformanceObserverCallback = (list: PerformanceObserverEntryList, observer: PerformanceObserver) => void; + /** + * @since v8.5.0 + */ + class PerformanceObserver extends AsyncResource { + constructor(callback: PerformanceObserverCallback); + /** + * Disconnects the `PerformanceObserver` instance from all notifications. + * @since v8.5.0 + */ + disconnect(): void; + /** + * Subscribes the `PerformanceObserver` instance to notifications of new `PerformanceEntry` instances identified either by `options.entryTypes`or `options.type`: + * + * ```js + * const { + * performance, + * PerformanceObserver, + * } = require('node:perf_hooks'); + * + * const obs = new PerformanceObserver((list, observer) => { + * // Called once asynchronously. `list` contains three items. + * }); + * obs.observe({ type: 'mark' }); + * + * for (let n = 0; n < 3; n++) + * performance.mark(`test${n}`); + * ``` + * @since v8.5.0 + */ + observe( + options: + | { + entryTypes: ReadonlyArray; + buffered?: boolean | undefined; + } + | { + type: EntryType; + buffered?: boolean | undefined; + }, + ): void; + } + namespace constants { + const NODE_PERFORMANCE_GC_MAJOR: number; + const NODE_PERFORMANCE_GC_MINOR: number; + const NODE_PERFORMANCE_GC_INCREMENTAL: number; + const NODE_PERFORMANCE_GC_WEAKCB: number; + const NODE_PERFORMANCE_GC_FLAGS_NO: number; + const NODE_PERFORMANCE_GC_FLAGS_CONSTRUCT_RETAINED: number; + const NODE_PERFORMANCE_GC_FLAGS_FORCED: number; + const NODE_PERFORMANCE_GC_FLAGS_SYNCHRONOUS_PHANTOM_PROCESSING: number; + const NODE_PERFORMANCE_GC_FLAGS_ALL_AVAILABLE_GARBAGE: number; + const NODE_PERFORMANCE_GC_FLAGS_ALL_EXTERNAL_MEMORY: number; + const NODE_PERFORMANCE_GC_FLAGS_SCHEDULE_IDLE: number; + } + const performance: Performance; + interface EventLoopMonitorOptions { + /** + * The sampling rate in milliseconds. + * Must be greater than zero. + * @default 10 + */ + resolution?: number | undefined; + } + interface Histogram { + /** + * Returns a `Map` object detailing the accumulated percentile distribution. + * @since v11.10.0 + */ + readonly percentiles: Map; + /** + * The number of times the event loop delay exceeded the maximum 1 hour event + * loop delay threshold. + * @since v11.10.0 + */ + readonly exceeds: number; + /** + * The minimum recorded event loop delay. + * @since v11.10.0 + */ + readonly min: number; + /** + * The maximum recorded event loop delay. + * @since v11.10.0 + */ + readonly max: number; + /** + * The mean of the recorded event loop delays. + * @since v11.10.0 + */ + readonly mean: number; + /** + * The standard deviation of the recorded event loop delays. + * @since v11.10.0 + */ + readonly stddev: number; + /** + * Resets the collected histogram data. + * @since v11.10.0 + */ + reset(): void; + /** + * Returns the value at the given percentile. + * @since v11.10.0 + * @param percentile A percentile value in the range (0, 100]. + */ + percentile(percentile: number): number; + } + interface IntervalHistogram extends Histogram { + /** + * Enables the update interval timer. Returns `true` if the timer was + * started, `false` if it was already started. + * @since v11.10.0 + */ + enable(): boolean; + /** + * Disables the update interval timer. Returns `true` if the timer was + * stopped, `false` if it was already stopped. + * @since v11.10.0 + */ + disable(): boolean; + } + interface RecordableHistogram extends Histogram { + /** + * @since v15.9.0, v14.18.0 + * @param val The amount to record in the histogram. + */ + record(val: number | bigint): void; + /** + * Calculates the amount of time (in nanoseconds) that has passed since the + * previous call to `recordDelta()` and records that amount in the histogram. + * + * ## Examples + * @since v15.9.0, v14.18.0 + */ + recordDelta(): void; + /** + * Adds the values from `other` to this histogram. + * @since v17.4.0, v16.14.0 + */ + add(other: RecordableHistogram): void; + } + /** + * _This property is an extension by Node.js. It is not available in Web browsers._ + * + * Creates an `IntervalHistogram` object that samples and reports the event loop + * delay over time. The delays will be reported in nanoseconds. + * + * Using a timer to detect approximate event loop delay works because the + * execution of timers is tied specifically to the lifecycle of the libuv + * event loop. That is, a delay in the loop will cause a delay in the execution + * of the timer, and those delays are specifically what this API is intended to + * detect. + * + * ```js + * const { monitorEventLoopDelay } = require('node:perf_hooks'); + * const h = monitorEventLoopDelay({ resolution: 20 }); + * h.enable(); + * // Do something. + * h.disable(); + * console.log(h.min); + * console.log(h.max); + * console.log(h.mean); + * console.log(h.stddev); + * console.log(h.percentiles); + * console.log(h.percentile(50)); + * console.log(h.percentile(99)); + * ``` + * @since v11.10.0 + */ + function monitorEventLoopDelay(options?: EventLoopMonitorOptions): IntervalHistogram; + interface CreateHistogramOptions { + /** + * The minimum recordable value. Must be an integer value greater than 0. + * @default 1 + */ + min?: number | bigint | undefined; + /** + * The maximum recordable value. Must be an integer value greater than min. + * @default Number.MAX_SAFE_INTEGER + */ + max?: number | bigint | undefined; + /** + * The number of accuracy digits. Must be a number between 1 and 5. + * @default 3 + */ + figures?: number | undefined; + } + /** + * Returns a `RecordableHistogram`. + * @since v15.9.0, v14.18.0 + */ + function createHistogram(options?: CreateHistogramOptions): RecordableHistogram; + import { performance as _performance } from "perf_hooks"; + global { + /** + * `performance` is a global reference for `require('perf_hooks').performance` + * https://nodejs.org/api/globals.html#performance + * @since v16.0.0 + */ + var performance: typeof globalThis extends { + onmessage: any; + performance: infer T; + } ? T + : typeof _performance; + } +} +declare module "node:perf_hooks" { + export * from "perf_hooks"; +} diff --git a/Url-Shortner/node_modules/@types/node/process.d.ts b/Url-Shortner/node_modules/@types/node/process.d.ts new file mode 100644 index 0000000..65f48d4 --- /dev/null +++ b/Url-Shortner/node_modules/@types/node/process.d.ts @@ -0,0 +1,1525 @@ +declare module "process" { + import * as tty from "node:tty"; + import { Worker } from "node:worker_threads"; + global { + var process: NodeJS.Process; + namespace NodeJS { + // this namespace merge is here because these are specifically used + // as the type for process.stdin, process.stdout, and process.stderr. + // they can't live in tty.d.ts because we need to disambiguate the imported name. + interface ReadStream extends tty.ReadStream {} + interface WriteStream extends tty.WriteStream {} + interface MemoryUsageFn { + /** + * The `process.memoryUsage()` method iterate over each page to gather informations about memory + * usage which can be slow depending on the program memory allocations. + */ + (): MemoryUsage; + /** + * method returns an integer representing the Resident Set Size (RSS) in bytes. + */ + rss(): number; + } + interface MemoryUsage { + rss: number; + heapTotal: number; + heapUsed: number; + external: number; + arrayBuffers: number; + } + interface CpuUsage { + user: number; + system: number; + } + interface ProcessRelease { + name: string; + sourceUrl?: string | undefined; + headersUrl?: string | undefined; + libUrl?: string | undefined; + lts?: string | undefined; + } + interface ProcessVersions extends Dict { + http_parser: string; + node: string; + v8: string; + ares: string; + uv: string; + zlib: string; + modules: string; + openssl: string; + } + type Platform = + | "aix" + | "android" + | "darwin" + | "freebsd" + | "haiku" + | "linux" + | "openbsd" + | "sunos" + | "win32" + | "cygwin" + | "netbsd"; + type Architecture = + | "arm" + | "arm64" + | "ia32" + | "mips" + | "mipsel" + | "ppc" + | "ppc64" + | "s390" + | "s390x" + | "x64"; + type Signals = + | "SIGABRT" + | "SIGALRM" + | "SIGBUS" + | "SIGCHLD" + | "SIGCONT" + | "SIGFPE" + | "SIGHUP" + | "SIGILL" + | "SIGINT" + | "SIGIO" + | "SIGIOT" + | "SIGKILL" + | "SIGPIPE" + | "SIGPOLL" + | "SIGPROF" + | "SIGPWR" + | "SIGQUIT" + | "SIGSEGV" + | "SIGSTKFLT" + | "SIGSTOP" + | "SIGSYS" + | "SIGTERM" + | "SIGTRAP" + | "SIGTSTP" + | "SIGTTIN" + | "SIGTTOU" + | "SIGUNUSED" + | "SIGURG" + | "SIGUSR1" + | "SIGUSR2" + | "SIGVTALRM" + | "SIGWINCH" + | "SIGXCPU" + | "SIGXFSZ" + | "SIGBREAK" + | "SIGLOST" + | "SIGINFO"; + type UncaughtExceptionOrigin = "uncaughtException" | "unhandledRejection"; + type MultipleResolveType = "resolve" | "reject"; + type BeforeExitListener = (code: number) => void; + type DisconnectListener = () => void; + type ExitListener = (code: number) => void; + type RejectionHandledListener = (promise: Promise) => void; + type UncaughtExceptionListener = (error: Error, origin: UncaughtExceptionOrigin) => void; + /** + * Most of the time the unhandledRejection will be an Error, but this should not be relied upon + * as *anything* can be thrown/rejected, it is therefore unsafe to assume that the value is an Error. + */ + type UnhandledRejectionListener = (reason: unknown, promise: Promise) => void; + type WarningListener = (warning: Error) => void; + type MessageListener = (message: unknown, sendHandle: unknown) => void; + type SignalsListener = (signal: Signals) => void; + type MultipleResolveListener = ( + type: MultipleResolveType, + promise: Promise, + value: unknown, + ) => void; + type WorkerListener = (worker: Worker) => void; + interface Socket extends ReadWriteStream { + isTTY?: true | undefined; + } + // Alias for compatibility + interface ProcessEnv extends Dict { + /** + * Can be used to change the default timezone at runtime + */ + TZ?: string; + } + interface HRTime { + (time?: [number, number]): [number, number]; + bigint(): bigint; + } + interface ProcessReport { + /** + * Directory where the report is written. + * working directory of the Node.js process. + * @default '' indicating that reports are written to the current + */ + directory: string; + /** + * Filename where the report is written. + * The default value is the empty string. + * @default '' the output filename will be comprised of a timestamp, + * PID, and sequence number. + */ + filename: string; + /** + * Returns a JSON-formatted diagnostic report for the running process. + * The report's JavaScript stack trace is taken from err, if present. + */ + getReport(err?: Error): string; + /** + * If true, a diagnostic report is generated on fatal errors, + * such as out of memory errors or failed C++ assertions. + * @default false + */ + reportOnFatalError: boolean; + /** + * If true, a diagnostic report is generated when the process + * receives the signal specified by process.report.signal. + * @default false + */ + reportOnSignal: boolean; + /** + * If true, a diagnostic report is generated on uncaught exception. + * @default false + */ + reportOnUncaughtException: boolean; + /** + * The signal used to trigger the creation of a diagnostic report. + * @default 'SIGUSR2' + */ + signal: Signals; + /** + * Writes a diagnostic report to a file. If filename is not provided, the default filename + * includes the date, time, PID, and a sequence number. + * The report's JavaScript stack trace is taken from err, if present. + * + * @param fileName Name of the file where the report is written. + * This should be a relative path, that will be appended to the directory specified in + * `process.report.directory`, or the current working directory of the Node.js process, + * if unspecified. + * @param error A custom error used for reporting the JavaScript stack. + * @return Filename of the generated report. + */ + writeReport(fileName?: string): string; + writeReport(error?: Error): string; + writeReport(fileName?: string, err?: Error): string; + } + interface ResourceUsage { + fsRead: number; + fsWrite: number; + involuntaryContextSwitches: number; + ipcReceived: number; + ipcSent: number; + majorPageFault: number; + maxRSS: number; + minorPageFault: number; + sharedMemorySize: number; + signalsCount: number; + swappedOut: number; + systemCPUTime: number; + unsharedDataSize: number; + unsharedStackSize: number; + userCPUTime: number; + voluntaryContextSwitches: number; + } + interface EmitWarningOptions { + /** + * When `warning` is a `string`, `type` is the name to use for the _type_ of warning being emitted. + * + * @default 'Warning' + */ + type?: string | undefined; + /** + * A unique identifier for the warning instance being emitted. + */ + code?: string | undefined; + /** + * When `warning` is a `string`, `ctor` is an optional function used to limit the generated stack trace. + * + * @default process.emitWarning + */ + ctor?: Function | undefined; + /** + * Additional text to include with the error. + */ + detail?: string | undefined; + } + interface ProcessConfig { + readonly target_defaults: { + readonly cflags: any[]; + readonly default_configuration: string; + readonly defines: string[]; + readonly include_dirs: string[]; + readonly libraries: string[]; + }; + readonly variables: { + readonly clang: number; + readonly host_arch: string; + readonly node_install_npm: boolean; + readonly node_install_waf: boolean; + readonly node_prefix: string; + readonly node_shared_openssl: boolean; + readonly node_shared_v8: boolean; + readonly node_shared_zlib: boolean; + readonly node_use_dtrace: boolean; + readonly node_use_etw: boolean; + readonly node_use_openssl: boolean; + readonly target_arch: string; + readonly v8_no_strict_aliasing: number; + readonly v8_use_snapshot: boolean; + readonly visibility: string; + }; + } + interface Process extends EventEmitter { + /** + * The `process.stdout` property returns a stream connected to`stdout` (fd `1`). It is a `net.Socket` (which is a `Duplex` stream) unless fd `1` refers to a file, in which case it is + * a `Writable` stream. + * + * For example, to copy `process.stdin` to `process.stdout`: + * + * ```js + * import { stdin, stdout } from 'node:process'; + * + * stdin.pipe(stdout); + * ``` + * + * `process.stdout` differs from other Node.js streams in important ways. See `note on process I/O` for more information. + */ + stdout: WriteStream & { + fd: 1; + }; + /** + * The `process.stderr` property returns a stream connected to`stderr` (fd `2`). It is a `net.Socket` (which is a `Duplex` stream) unless fd `2` refers to a file, in which case it is + * a `Writable` stream. + * + * `process.stderr` differs from other Node.js streams in important ways. See `note on process I/O` for more information. + */ + stderr: WriteStream & { + fd: 2; + }; + /** + * The `process.stdin` property returns a stream connected to`stdin` (fd `0`). It is a `net.Socket` (which is a `Duplex` stream) unless fd `0` refers to a file, in which case it is + * a `Readable` stream. + * + * For details of how to read from `stdin` see `readable.read()`. + * + * As a `Duplex` stream, `process.stdin` can also be used in "old" mode that + * is compatible with scripts written for Node.js prior to v0.10\. + * For more information see `Stream compatibility`. + * + * In "old" streams mode the `stdin` stream is paused by default, so one + * must call `process.stdin.resume()` to read from it. Note also that calling`process.stdin.resume()` itself would switch stream to "old" mode. + */ + stdin: ReadStream & { + fd: 0; + }; + openStdin(): Socket; + /** + * The `process.argv` property returns an array containing the command-line + * arguments passed when the Node.js process was launched. The first element will + * be {@link execPath}. See `process.argv0` if access to the original value + * of `argv[0]` is needed. The second element will be the path to the JavaScript + * file being executed. The remaining elements will be any additional command-line + * arguments. + * + * For example, assuming the following script for `process-args.js`: + * + * ```js + * import { argv } from 'node:process'; + * + * // print process.argv + * argv.forEach((val, index) => { + * console.log(`${index}: ${val}`); + * }); + * ``` + * + * Launching the Node.js process as: + * + * ```bash + * node process-args.js one two=three four + * ``` + * + * Would generate the output: + * + * ```text + * 0: /usr/local/bin/node + * 1: /Users/mjr/work/node/process-args.js + * 2: one + * 3: two=three + * 4: four + * ``` + * @since v0.1.27 + */ + argv: string[]; + /** + * The `process.argv0` property stores a read-only copy of the original value of`argv[0]` passed when Node.js starts. + * + * ```console + * $ bash -c 'exec -a customArgv0 ./node' + * > process.argv[0] + * '/Volumes/code/external/node/out/Release/node' + * > process.argv0 + * 'customArgv0' + * ``` + * @since v6.4.0 + */ + argv0: string; + /** + * The `process.execArgv` property returns the set of Node.js-specific command-line + * options passed when the Node.js process was launched. These options do not + * appear in the array returned by the {@link argv} property, and do not + * include the Node.js executable, the name of the script, or any options following + * the script name. These options are useful in order to spawn child processes with + * the same execution environment as the parent. + * + * ```bash + * node --harmony script.js --version + * ``` + * + * Results in `process.execArgv`: + * + * ```js + * ['--harmony'] + * ``` + * + * And `process.argv`: + * + * ```js + * ['/usr/local/bin/node', 'script.js', '--version'] + * ``` + * + * Refer to `Worker constructor` for the detailed behavior of worker + * threads with this property. + * @since v0.7.7 + */ + execArgv: string[]; + /** + * The `process.execPath` property returns the absolute pathname of the executable + * that started the Node.js process. Symbolic links, if any, are resolved. + * + * ```js + * '/usr/local/bin/node' + * ``` + * @since v0.1.100 + */ + execPath: string; + /** + * The `process.abort()` method causes the Node.js process to exit immediately and + * generate a core file. + * + * This feature is not available in `Worker` threads. + * @since v0.7.0 + */ + abort(): never; + /** + * The `process.chdir()` method changes the current working directory of the + * Node.js process or throws an exception if doing so fails (for instance, if + * the specified `directory` does not exist). + * + * ```js + * import { chdir, cwd } from 'node:process'; + * + * console.log(`Starting directory: ${cwd()}`); + * try { + * chdir('/tmp'); + * console.log(`New directory: ${cwd()}`); + * } catch (err) { + * console.error(`chdir: ${err}`); + * } + * ``` + * + * This feature is not available in `Worker` threads. + * @since v0.1.17 + */ + chdir(directory: string): void; + /** + * The `process.cwd()` method returns the current working directory of the Node.js + * process. + * + * ```js + * import { cwd } from 'node:process'; + * + * console.log(`Current directory: ${cwd()}`); + * ``` + * @since v0.1.8 + */ + cwd(): string; + /** + * The port used by the Node.js debugger when enabled. + * + * ```js + * import process from 'node:process'; + * + * process.debugPort = 5858; + * ``` + * @since v0.7.2 + */ + debugPort: number; + /** + * The `process.emitWarning()` method can be used to emit custom or application + * specific process warnings. These can be listened for by adding a handler to the `'warning'` event. + * + * ```js + * import { emitWarning } from 'node:process'; + * + * // Emit a warning with a code and additional detail. + * emitWarning('Something happened!', { + * code: 'MY_WARNING', + * detail: 'This is some additional information', + * }); + * // Emits: + * // (node:56338) [MY_WARNING] Warning: Something happened! + * // This is some additional information + * ``` + * + * In this example, an `Error` object is generated internally by`process.emitWarning()` and passed through to the `'warning'` handler. + * + * ```js + * import process from 'node:process'; + * + * process.on('warning', (warning) => { + * console.warn(warning.name); // 'Warning' + * console.warn(warning.message); // 'Something happened!' + * console.warn(warning.code); // 'MY_WARNING' + * console.warn(warning.stack); // Stack trace + * console.warn(warning.detail); // 'This is some additional information' + * }); + * ``` + * + * If `warning` is passed as an `Error` object, the `options` argument is ignored. + * @since v8.0.0 + * @param warning The warning to emit. + */ + emitWarning(warning: string | Error, ctor?: Function): void; + emitWarning(warning: string | Error, type?: string, ctor?: Function): void; + emitWarning(warning: string | Error, type?: string, code?: string, ctor?: Function): void; + emitWarning(warning: string | Error, options?: EmitWarningOptions): void; + /** + * The `process.env` property returns an object containing the user environment. + * See [`environ(7)`](http://man7.org/linux/man-pages/man7/environ.7.html). + * + * An example of this object looks like: + * + * ```js + * { + * TERM: 'xterm-256color', + * SHELL: '/usr/local/bin/bash', + * USER: 'maciej', + * PATH: '~/.bin/:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin', + * PWD: '/Users/maciej', + * EDITOR: 'vim', + * SHLVL: '1', + * HOME: '/Users/maciej', + * LOGNAME: 'maciej', + * _: '/usr/local/bin/node' + * } + * ``` + * + * It is possible to modify this object, but such modifications will not be + * reflected outside the Node.js process, or (unless explicitly requested) + * to other `Worker` threads. + * In other words, the following example would not work: + * + * ```bash + * node -e 'process.env.foo = "bar"' && echo $foo + * ``` + * + * While the following will: + * + * ```js + * import { env } from 'node:process'; + * + * env.foo = 'bar'; + * console.log(env.foo); + * ``` + * + * Assigning a property on `process.env` will implicitly convert the value + * to a string. **This behavior is deprecated.** Future versions of Node.js may + * throw an error when the value is not a string, number, or boolean. + * + * ```js + * import { env } from 'node:process'; + * + * env.test = null; + * console.log(env.test); + * // => 'null' + * env.test = undefined; + * console.log(env.test); + * // => 'undefined' + * ``` + * + * Use `delete` to delete a property from `process.env`. + * + * ```js + * import { env } from 'node:process'; + * + * env.TEST = 1; + * delete env.TEST; + * console.log(env.TEST); + * // => undefined + * ``` + * + * On Windows operating systems, environment variables are case-insensitive. + * + * ```js + * import { env } from 'node:process'; + * + * env.TEST = 1; + * console.log(env.test); + * // => 1 + * ``` + * + * Unless explicitly specified when creating a `Worker` instance, + * each `Worker` thread has its own copy of `process.env`, based on its + * parent thread's `process.env`, or whatever was specified as the `env` option + * to the `Worker` constructor. Changes to `process.env` will not be visible + * across `Worker` threads, and only the main thread can make changes that + * are visible to the operating system or to native add-ons. On Windows, a copy of`process.env` on a `Worker` instance operates in a case-sensitive manner + * unlike the main thread. + * @since v0.1.27 + */ + env: ProcessEnv; + /** + * The `process.exit()` method instructs Node.js to terminate the process + * synchronously with an exit status of `code`. If `code` is omitted, exit uses + * either the 'success' code `0` or the value of `process.exitCode` if it has been + * set. Node.js will not terminate until all the `'exit'` event listeners are + * called. + * + * To exit with a 'failure' code: + * + * ```js + * import { exit } from 'node:process'; + * + * exit(1); + * ``` + * + * The shell that executed Node.js should see the exit code as `1`. + * + * Calling `process.exit()` will force the process to exit as quickly as possible + * even if there are still asynchronous operations pending that have not yet + * completed fully, including I/O operations to `process.stdout` and`process.stderr`. + * + * In most situations, it is not actually necessary to call `process.exit()`explicitly. The Node.js process will exit on its own _if there is no additional_ + * _work pending_ in the event loop. The `process.exitCode` property can be set to + * tell the process which exit code to use when the process exits gracefully. + * + * For instance, the following example illustrates a _misuse_ of the`process.exit()` method that could lead to data printed to stdout being + * truncated and lost: + * + * ```js + * import { exit } from 'node:process'; + * + * // This is an example of what *not* to do: + * if (someConditionNotMet()) { + * printUsageToStdout(); + * exit(1); + * } + * ``` + * + * The reason this is problematic is because writes to `process.stdout` in Node.js + * are sometimes _asynchronous_ and may occur over multiple ticks of the Node.js + * event loop. Calling `process.exit()`, however, forces the process to exit _before_ those additional writes to `stdout` can be performed. + * + * Rather than calling `process.exit()` directly, the code _should_ set the`process.exitCode` and allow the process to exit naturally by avoiding + * scheduling any additional work for the event loop: + * + * ```js + * import process from 'node:process'; + * + * // How to properly set the exit code while letting + * // the process exit gracefully. + * if (someConditionNotMet()) { + * printUsageToStdout(); + * process.exitCode = 1; + * } + * ``` + * + * If it is necessary to terminate the Node.js process due to an error condition, + * throwing an _uncaught_ error and allowing the process to terminate accordingly + * is safer than calling `process.exit()`. + * + * In `Worker` threads, this function stops the current thread rather + * than the current process. + * @since v0.1.13 + * @param [code=0] The exit code. For string type, only integer strings (e.g.,'1') are allowed. + */ + exit(code?: number): never; + /** + * A number which will be the process exit code, when the process either + * exits gracefully, or is exited via {@link exit} without specifying + * a code. + * + * Specifying a code to {@link exit} will override any + * previous setting of `process.exitCode`. + * @since v0.11.8 + */ + exitCode?: number | undefined; + /** + * The `process.getgid()` method returns the numerical group identity of the + * process. (See [`getgid(2)`](http://man7.org/linux/man-pages/man2/getgid.2.html).) + * + * ```js + * import process from 'process'; + * + * if (process.getgid) { + * console.log(`Current gid: ${process.getgid()}`); + * } + * ``` + * + * This function is only available on POSIX platforms (i.e. not Windows or + * Android). + * @since v0.1.31 + */ + getgid?: () => number; + /** + * The `process.setgid()` method sets the group identity of the process. (See [`setgid(2)`](http://man7.org/linux/man-pages/man2/setgid.2.html).) The `id` can be passed as either a + * numeric ID or a group name + * string. If a group name is specified, this method blocks while resolving the + * associated numeric ID. + * + * ```js + * import process from 'process'; + * + * if (process.getgid && process.setgid) { + * console.log(`Current gid: ${process.getgid()}`); + * try { + * process.setgid(501); + * console.log(`New gid: ${process.getgid()}`); + * } catch (err) { + * console.log(`Failed to set gid: ${err}`); + * } + * } + * ``` + * + * This function is only available on POSIX platforms (i.e. not Windows or + * Android). + * This feature is not available in `Worker` threads. + * @since v0.1.31 + * @param id The group name or ID + */ + setgid?: (id: number | string) => void; + /** + * The `process.getuid()` method returns the numeric user identity of the process. + * (See [`getuid(2)`](http://man7.org/linux/man-pages/man2/getuid.2.html).) + * + * ```js + * import process from 'process'; + * + * if (process.getuid) { + * console.log(`Current uid: ${process.getuid()}`); + * } + * ``` + * + * This function is only available on POSIX platforms (i.e. not Windows or + * Android). + * @since v0.1.28 + */ + getuid?: () => number; + /** + * The `process.setuid(id)` method sets the user identity of the process. (See [`setuid(2)`](http://man7.org/linux/man-pages/man2/setuid.2.html).) The `id` can be passed as either a + * numeric ID or a username string. + * If a username is specified, the method blocks while resolving the associated + * numeric ID. + * + * ```js + * import process from 'process'; + * + * if (process.getuid && process.setuid) { + * console.log(`Current uid: ${process.getuid()}`); + * try { + * process.setuid(501); + * console.log(`New uid: ${process.getuid()}`); + * } catch (err) { + * console.log(`Failed to set uid: ${err}`); + * } + * } + * ``` + * + * This function is only available on POSIX platforms (i.e. not Windows or + * Android). + * This feature is not available in `Worker` threads. + * @since v0.1.28 + */ + setuid?: (id: number | string) => void; + /** + * The `process.geteuid()` method returns the numerical effective user identity of + * the process. (See [`geteuid(2)`](http://man7.org/linux/man-pages/man2/geteuid.2.html).) + * + * ```js + * import process from 'process'; + * + * if (process.geteuid) { + * console.log(`Current uid: ${process.geteuid()}`); + * } + * ``` + * + * This function is only available on POSIX platforms (i.e. not Windows or + * Android). + * @since v2.0.0 + */ + geteuid?: () => number; + /** + * The `process.seteuid()` method sets the effective user identity of the process. + * (See [`seteuid(2)`](http://man7.org/linux/man-pages/man2/seteuid.2.html).) The `id` can be passed as either a numeric ID or a username + * string. If a username is specified, the method blocks while resolving the + * associated numeric ID. + * + * ```js + * import process from 'process'; + * + * if (process.geteuid && process.seteuid) { + * console.log(`Current uid: ${process.geteuid()}`); + * try { + * process.seteuid(501); + * console.log(`New uid: ${process.geteuid()}`); + * } catch (err) { + * console.log(`Failed to set uid: ${err}`); + * } + * } + * ``` + * + * This function is only available on POSIX platforms (i.e. not Windows or + * Android). + * This feature is not available in `Worker` threads. + * @since v2.0.0 + * @param id A user name or ID + */ + seteuid?: (id: number | string) => void; + /** + * The `process.getegid()` method returns the numerical effective group identity + * of the Node.js process. (See [`getegid(2)`](http://man7.org/linux/man-pages/man2/getegid.2.html).) + * + * ```js + * import process from 'process'; + * + * if (process.getegid) { + * console.log(`Current gid: ${process.getegid()}`); + * } + * ``` + * + * This function is only available on POSIX platforms (i.e. not Windows or + * Android). + * @since v2.0.0 + */ + getegid?: () => number; + /** + * The `process.setegid()` method sets the effective group identity of the process. + * (See [`setegid(2)`](http://man7.org/linux/man-pages/man2/setegid.2.html).) The `id` can be passed as either a numeric ID or a group + * name string. If a group name is specified, this method blocks while resolving + * the associated a numeric ID. + * + * ```js + * import process from 'process'; + * + * if (process.getegid && process.setegid) { + * console.log(`Current gid: ${process.getegid()}`); + * try { + * process.setegid(501); + * console.log(`New gid: ${process.getegid()}`); + * } catch (err) { + * console.log(`Failed to set gid: ${err}`); + * } + * } + * ``` + * + * This function is only available on POSIX platforms (i.e. not Windows or + * Android). + * This feature is not available in `Worker` threads. + * @since v2.0.0 + * @param id A group name or ID + */ + setegid?: (id: number | string) => void; + /** + * The `process.getgroups()` method returns an array with the supplementary group + * IDs. POSIX leaves it unspecified if the effective group ID is included but + * Node.js ensures it always is. + * + * ```js + * import process from 'process'; + * + * if (process.getgroups) { + * console.log(process.getgroups()); // [ 16, 21, 297 ] + * } + * ``` + * + * This function is only available on POSIX platforms (i.e. not Windows or + * Android). + * @since v0.9.4 + */ + getgroups?: () => number[]; + /** + * The `process.setgroups()` method sets the supplementary group IDs for the + * Node.js process. This is a privileged operation that requires the Node.js + * process to have `root` or the `CAP_SETGID` capability. + * + * The `groups` array can contain numeric group IDs, group names, or both. + * + * ```js + * import process from 'process'; + * + * if (process.getgroups && process.setgroups) { + * try { + * process.setgroups([501]); + * console.log(process.getgroups()); // new groups + * } catch (err) { + * console.log(`Failed to set groups: ${err}`); + * } + * } + * ``` + * + * This function is only available on POSIX platforms (i.e. not Windows or + * Android). + * This feature is not available in `Worker` threads. + * @since v0.9.4 + */ + setgroups?: (groups: ReadonlyArray) => void; + /** + * The `process.setUncaughtExceptionCaptureCallback()` function sets a function + * that will be invoked when an uncaught exception occurs, which will receive the + * exception value itself as its first argument. + * + * If such a function is set, the `'uncaughtException'` event will + * not be emitted. If `--abort-on-uncaught-exception` was passed from the + * command line or set through `v8.setFlagsFromString()`, the process will + * not abort. Actions configured to take place on exceptions such as report + * generations will be affected too + * + * To unset the capture function,`process.setUncaughtExceptionCaptureCallback(null)` may be used. Calling this + * method with a non-`null` argument while another capture function is set will + * throw an error. + * + * Using this function is mutually exclusive with using the deprecated `domain` built-in module. + * @since v9.3.0 + */ + setUncaughtExceptionCaptureCallback(cb: ((err: Error) => void) | null): void; + /** + * Indicates whether a callback has been set using {@link setUncaughtExceptionCaptureCallback}. + * @since v9.3.0 + */ + hasUncaughtExceptionCaptureCallback(): boolean; + /** + * The `process.version` property contains the Node.js version string. + * + * ```js + * import { version } from 'node:process'; + * + * console.log(`Version: ${version}`); + * // Version: v14.8.0 + * ``` + * + * To get the version string without the prepended _v_, use`process.versions.node`. + * @since v0.1.3 + */ + readonly version: string; + /** + * The `process.versions` property returns an object listing the version strings of + * Node.js and its dependencies. `process.versions.modules` indicates the current + * ABI version, which is increased whenever a C++ API changes. Node.js will refuse + * to load modules that were compiled against a different module ABI version. + * + * ```js + * import { versions } from 'node:process'; + * + * console.log(versions); + * ``` + * + * Will generate an object similar to: + * + * ```console + * { node: '20.2.0', + * acorn: '8.8.2', + * ada: '2.4.0', + * ares: '1.19.0', + * base64: '0.5.0', + * brotli: '1.0.9', + * cjs_module_lexer: '1.2.2', + * cldr: '43.0', + * icu: '73.1', + * llhttp: '8.1.0', + * modules: '115', + * napi: '8', + * nghttp2: '1.52.0', + * nghttp3: '0.7.0', + * ngtcp2: '0.8.1', + * openssl: '3.0.8+quic', + * simdutf: '3.2.9', + * tz: '2023c', + * undici: '5.22.0', + * unicode: '15.0', + * uv: '1.44.2', + * uvwasi: '0.0.16', + * v8: '11.3.244.8-node.9', + * zlib: '1.2.13' } + * ``` + * @since v0.2.0 + */ + readonly versions: ProcessVersions; + /** + * The `process.config` property returns a frozen `Object` containing the + * JavaScript representation of the configure options used to compile the current + * Node.js executable. This is the same as the `config.gypi` file that was produced + * when running the `./configure` script. + * + * An example of the possible output looks like: + * + * ```js + * { + * target_defaults: + * { cflags: [], + * default_configuration: 'Release', + * defines: [], + * include_dirs: [], + * libraries: [] }, + * variables: + * { + * host_arch: 'x64', + * napi_build_version: 5, + * node_install_npm: 'true', + * node_prefix: '', + * node_shared_cares: 'false', + * node_shared_http_parser: 'false', + * node_shared_libuv: 'false', + * node_shared_zlib: 'false', + * node_use_openssl: 'true', + * node_shared_openssl: 'false', + * strict_aliasing: 'true', + * target_arch: 'x64', + * v8_use_snapshot: 1 + * } + * } + * ``` + * @since v0.7.7 + */ + readonly config: ProcessConfig; + /** + * The `process.kill()` method sends the `signal` to the process identified by`pid`. + * + * Signal names are strings such as `'SIGINT'` or `'SIGHUP'`. See `Signal Events` and [`kill(2)`](http://man7.org/linux/man-pages/man2/kill.2.html) for more information. + * + * This method will throw an error if the target `pid` does not exist. As a special + * case, a signal of `0` can be used to test for the existence of a process. + * Windows platforms will throw an error if the `pid` is used to kill a process + * group. + * + * Even though the name of this function is `process.kill()`, it is really just a + * signal sender, like the `kill` system call. The signal sent may do something + * other than kill the target process. + * + * ```js + * import process, { kill } from 'node:process'; + * + * process.on('SIGHUP', () => { + * console.log('Got SIGHUP signal.'); + * }); + * + * setTimeout(() => { + * console.log('Exiting.'); + * process.exit(0); + * }, 100); + * + * kill(process.pid, 'SIGHUP'); + * ``` + * + * When `SIGUSR1` is received by a Node.js process, Node.js will start the + * debugger. See `Signal Events`. + * @since v0.0.6 + * @param pid A process ID + * @param [signal='SIGTERM'] The signal to send, either as a string or number. + */ + kill(pid: number, signal?: string | number): true; + /** + * The `process.pid` property returns the PID of the process. + * + * ```js + * import { pid } from 'node:process'; + * + * console.log(`This process is pid ${pid}`); + * ``` + * @since v0.1.15 + */ + readonly pid: number; + /** + * The `process.ppid` property returns the PID of the parent of the + * current process. + * + * ```js + * import { ppid } from 'node:process'; + * + * console.log(`The parent process is pid ${ppid}`); + * ``` + * @since v9.2.0, v8.10.0, v6.13.0 + */ + readonly ppid: number; + /** + * The `process.title` property returns the current process title (i.e. returns + * the current value of `ps`). Assigning a new value to `process.title` modifies + * the current value of `ps`. + * + * When a new value is assigned, different platforms will impose different maximum + * length restrictions on the title. Usually such restrictions are quite limited. + * For instance, on Linux and macOS, `process.title` is limited to the size of the + * binary name plus the length of the command-line arguments because setting the`process.title` overwrites the `argv` memory of the process. Node.js v0.8 + * allowed for longer process title strings by also overwriting the `environ`memory but that was potentially insecure and confusing in some (rather obscure) + * cases. + * + * Assigning a value to `process.title` might not result in an accurate label + * within process manager applications such as macOS Activity Monitor or Windows + * Services Manager. + * @since v0.1.104 + */ + title: string; + /** + * The operating system CPU architecture for which the Node.js binary was compiled. + * Possible values are: `'arm'`, `'arm64'`, `'ia32'`, `'mips'`,`'mipsel'`, `'ppc'`,`'ppc64'`, `'s390'`, `'s390x'`, and `'x64'`. + * + * ```js + * import { arch } from 'node:process'; + * + * console.log(`This processor architecture is ${arch}`); + * ``` + * @since v0.5.0 + */ + readonly arch: Architecture; + /** + * The `process.platform` property returns a string identifying the operating + * system platform for which the Node.js binary was compiled. + * + * Currently possible values are: + * + * * `'aix'` + * * `'darwin'` + * * `'freebsd'` + * * `'linux'` + * * `'openbsd'` + * * `'sunos'` + * * `'win32'` + * + * ```js + * import { platform } from 'node:process'; + * + * console.log(`This platform is ${platform}`); + * ``` + * + * The value `'android'` may also be returned if the Node.js is built on the + * Android operating system. However, Android support in Node.js [is experimental](https://github.com/nodejs/node/blob/HEAD/BUILDING.md#androidandroid-based-devices-eg-firefox-os). + * @since v0.1.16 + */ + readonly platform: Platform; + /** + * The `process.mainModule` property provides an alternative way of retrieving `require.main`. The difference is that if the main module changes at + * runtime, `require.main` may still refer to the original main module in + * modules that were required before the change occurred. Generally, it's + * safe to assume that the two refer to the same module. + * + * As with `require.main`, `process.mainModule` will be `undefined` if there + * is no entry script. + * @since v0.1.17 + * @deprecated Since v14.0.0 - Use `main` instead. + */ + mainModule?: Module | undefined; + memoryUsage: MemoryUsageFn; + /** + * Gets the amount of memory available to the process (in bytes) based on + * limits imposed by the OS. If there is no such constraint, or the constraint + * is unknown, `undefined` is returned. + * + * See [`uv_get_constrained_memory`](https://docs.libuv.org/en/v1.x/misc.html#c.uv_get_constrained_memory) for more + * information. + * @since v19.6.0, v18.15.0 + * @experimental + */ + constrainedMemory(): number | undefined; + /** + * The `process.cpuUsage()` method returns the user and system CPU time usage of + * the current process, in an object with properties `user` and `system`, whose + * values are microsecond values (millionth of a second). These values measure time + * spent in user and system code respectively, and may end up being greater than + * actual elapsed time if multiple CPU cores are performing work for this process. + * + * The result of a previous call to `process.cpuUsage()` can be passed as the + * argument to the function, to get a diff reading. + * + * ```js + * import { cpuUsage } from 'node:process'; + * + * const startUsage = cpuUsage(); + * // { user: 38579, system: 6986 } + * + * // spin the CPU for 500 milliseconds + * const now = Date.now(); + * while (Date.now() - now < 500); + * + * console.log(cpuUsage(startUsage)); + * // { user: 514883, system: 11226 } + * ``` + * @since v6.1.0 + * @param previousValue A previous return value from calling `process.cpuUsage()` + */ + cpuUsage(previousValue?: CpuUsage): CpuUsage; + /** + * `process.nextTick()` adds `callback` to the "next tick queue". This queue is + * fully drained after the current operation on the JavaScript stack runs to + * completion and before the event loop is allowed to continue. It's possible to + * create an infinite loop if one were to recursively call `process.nextTick()`. + * See the [Event Loop](https://nodejs.org/en/docs/guides/event-loop-timers-and-nexttick/#process-nexttick) guide for more background. + * + * ```js + * import { nextTick } from 'node:process'; + * + * console.log('start'); + * nextTick(() => { + * console.log('nextTick callback'); + * }); + * console.log('scheduled'); + * // Output: + * // start + * // scheduled + * // nextTick callback + * ``` + * + * This is important when developing APIs in order to give users the opportunity + * to assign event handlers _after_ an object has been constructed but before any + * I/O has occurred: + * + * ```js + * import { nextTick } from 'node:process'; + * + * function MyThing(options) { + * this.setupOptions(options); + * + * nextTick(() => { + * this.startDoingStuff(); + * }); + * } + * + * const thing = new MyThing(); + * thing.getReadyForStuff(); + * + * // thing.startDoingStuff() gets called now, not before. + * ``` + * + * It is very important for APIs to be either 100% synchronous or 100% + * asynchronous. Consider this example: + * + * ```js + * // WARNING! DO NOT USE! BAD UNSAFE HAZARD! + * function maybeSync(arg, cb) { + * if (arg) { + * cb(); + * return; + * } + * + * fs.stat('file', cb); + * } + * ``` + * + * This API is hazardous because in the following case: + * + * ```js + * const maybeTrue = Math.random() > 0.5; + * + * maybeSync(maybeTrue, () => { + * foo(); + * }); + * + * bar(); + * ``` + * + * It is not clear whether `foo()` or `bar()` will be called first. + * + * The following approach is much better: + * + * ```js + * import { nextTick } from 'node:process'; + * + * function definitelyAsync(arg, cb) { + * if (arg) { + * nextTick(cb); + * return; + * } + * + * fs.stat('file', cb); + * } + * ``` + * @since v0.1.26 + * @param args Additional arguments to pass when invoking the `callback` + */ + nextTick(callback: Function, ...args: any[]): void; + /** + * The `process.release` property returns an `Object` containing metadata related + * to the current release, including URLs for the source tarball and headers-only + * tarball. + * + * `process.release` contains the following properties: + * + * ```js + * { + * name: 'node', + * lts: 'Hydrogen', + * sourceUrl: 'https://nodejs.org/download/release/v18.12.0/node-v18.12.0.tar.gz', + * headersUrl: 'https://nodejs.org/download/release/v18.12.0/node-v18.12.0-headers.tar.gz', + * libUrl: 'https://nodejs.org/download/release/v18.12.0/win-x64/node.lib' + * } + * ``` + * + * In custom builds from non-release versions of the source tree, only the`name` property may be present. The additional properties should not be + * relied upon to exist. + * @since v3.0.0 + */ + readonly release: ProcessRelease; + features: { + inspector: boolean; + debug: boolean; + uv: boolean; + ipv6: boolean; + tls_alpn: boolean; + tls_sni: boolean; + tls_ocsp: boolean; + tls: boolean; + }; + /** + * `process.umask()` returns the Node.js process's file mode creation mask. Child + * processes inherit the mask from the parent process. + * @since v0.1.19 + * @deprecated Calling `process.umask()` with no argument causes the process-wide umask to be written twice. This introduces a race condition between threads, and is a potential * + * security vulnerability. There is no safe, cross-platform alternative API. + */ + umask(): number; + /** + * Can only be set if not in worker thread. + */ + umask(mask: string | number): number; + /** + * The `process.uptime()` method returns the number of seconds the current Node.js + * process has been running. + * + * The return value includes fractions of a second. Use `Math.floor()` to get whole + * seconds. + * @since v0.5.0 + */ + uptime(): number; + hrtime: HRTime; + /** + * If Node.js is spawned with an IPC channel, the `process.send()` method can be + * used to send messages to the parent process. Messages will be received as a `'message'` event on the parent's `ChildProcess` object. + * + * If Node.js was not spawned with an IPC channel, `process.send` will be `undefined`. + * + * The message goes through serialization and parsing. The resulting message might + * not be the same as what is originally sent. + * @since v0.5.9 + * @param options used to parameterize the sending of certain types of handles.`options` supports the following properties: + */ + send?( + message: any, + sendHandle?: any, + options?: { + swallowErrors?: boolean | undefined; + }, + callback?: (error: Error | null) => void, + ): boolean; + /** + * If the Node.js process is spawned with an IPC channel (see the `Child Process` and `Cluster` documentation), the `process.disconnect()` method will close the + * IPC channel to the parent process, allowing the child process to exit gracefully + * once there are no other connections keeping it alive. + * + * The effect of calling `process.disconnect()` is the same as calling `ChildProcess.disconnect()` from the parent process. + * + * If the Node.js process was not spawned with an IPC channel,`process.disconnect()` will be `undefined`. + * @since v0.7.2 + */ + disconnect(): void; + /** + * If the Node.js process is spawned with an IPC channel (see the `Child Process` and `Cluster` documentation), the `process.connected` property will return`true` so long as the IPC + * channel is connected and will return `false` after`process.disconnect()` is called. + * + * Once `process.connected` is `false`, it is no longer possible to send messages + * over the IPC channel using `process.send()`. + * @since v0.7.2 + */ + connected: boolean; + /** + * The `process.allowedNodeEnvironmentFlags` property is a special, + * read-only `Set` of flags allowable within the `NODE_OPTIONS` environment variable. + * + * `process.allowedNodeEnvironmentFlags` extends `Set`, but overrides`Set.prototype.has` to recognize several different possible flag + * representations. `process.allowedNodeEnvironmentFlags.has()` will + * return `true` in the following cases: + * + * * Flags may omit leading single (`-`) or double (`--`) dashes; e.g.,`inspect-brk` for `--inspect-brk`, or `r` for `-r`. + * * Flags passed through to V8 (as listed in `--v8-options`) may replace + * one or more _non-leading_ dashes for an underscore, or vice-versa; + * e.g., `--perf_basic_prof`, `--perf-basic-prof`, `--perf_basic-prof`, + * etc. + * * Flags may contain one or more equals (`=`) characters; all + * characters after and including the first equals will be ignored; + * e.g., `--stack-trace-limit=100`. + * * Flags _must_ be allowable within `NODE_OPTIONS`. + * + * When iterating over `process.allowedNodeEnvironmentFlags`, flags will + * appear only _once_; each will begin with one or more dashes. Flags + * passed through to V8 will contain underscores instead of non-leading + * dashes: + * + * ```js + * import { allowedNodeEnvironmentFlags } from 'node:process'; + * + * allowedNodeEnvironmentFlags.forEach((flag) => { + * // -r + * // --inspect-brk + * // --abort_on_uncaught_exception + * // ... + * }); + * ``` + * + * The methods `add()`, `clear()`, and `delete()` of`process.allowedNodeEnvironmentFlags` do nothing, and will fail + * silently. + * + * If Node.js was compiled _without_ `NODE_OPTIONS` support (shown in {@link config}), `process.allowedNodeEnvironmentFlags` will + * contain what _would have_ been allowable. + * @since v10.10.0 + */ + allowedNodeEnvironmentFlags: ReadonlySet; + /** + * `process.report` is an object whose methods are used to generate diagnostic + * reports for the current process. Additional documentation is available in the `report documentation`. + * @since v11.8.0 + */ + report?: ProcessReport | undefined; + /** + * ```js + * import { resourceUsage } from 'node:process'; + * + * console.log(resourceUsage()); + * /* + * Will output: + * { + * userCPUTime: 82872, + * systemCPUTime: 4143, + * maxRSS: 33164, + * sharedMemorySize: 0, + * unsharedDataSize: 0, + * unsharedStackSize: 0, + * minorPageFault: 2469, + * majorPageFault: 0, + * swappedOut: 0, + * fsRead: 0, + * fsWrite: 8, + * ipcSent: 0, + * ipcReceived: 0, + * signalsCount: 0, + * voluntaryContextSwitches: 79, + * involuntaryContextSwitches: 1 + * } + * + * ``` + * @since v12.6.0 + * @return the resource usage for the current process. All of these values come from the `uv_getrusage` call which returns a [`uv_rusage_t` struct][uv_rusage_t]. + */ + resourceUsage(): ResourceUsage; + /** + * The `process.traceDeprecation` property indicates whether the`--trace-deprecation` flag is set on the current Node.js process. See the + * documentation for the `'warning' event` and the `emitWarning() method` for more information about this + * flag's behavior. + * @since v0.8.0 + */ + traceDeprecation: boolean; + /* EventEmitter */ + addListener(event: "beforeExit", listener: BeforeExitListener): this; + addListener(event: "disconnect", listener: DisconnectListener): this; + addListener(event: "exit", listener: ExitListener): this; + addListener(event: "rejectionHandled", listener: RejectionHandledListener): this; + addListener(event: "uncaughtException", listener: UncaughtExceptionListener): this; + addListener(event: "uncaughtExceptionMonitor", listener: UncaughtExceptionListener): this; + addListener(event: "unhandledRejection", listener: UnhandledRejectionListener): this; + addListener(event: "warning", listener: WarningListener): this; + addListener(event: "message", listener: MessageListener): this; + addListener(event: Signals, listener: SignalsListener): this; + addListener(event: "multipleResolves", listener: MultipleResolveListener): this; + addListener(event: "worker", listener: WorkerListener): this; + emit(event: "beforeExit", code: number): boolean; + emit(event: "disconnect"): boolean; + emit(event: "exit", code: number): boolean; + emit(event: "rejectionHandled", promise: Promise): boolean; + emit(event: "uncaughtException", error: Error): boolean; + emit(event: "uncaughtExceptionMonitor", error: Error): boolean; + emit(event: "unhandledRejection", reason: unknown, promise: Promise): boolean; + emit(event: "warning", warning: Error): boolean; + emit(event: "message", message: unknown, sendHandle: unknown): this; + emit(event: Signals, signal?: Signals): boolean; + emit( + event: "multipleResolves", + type: MultipleResolveType, + promise: Promise, + value: unknown, + ): this; + emit(event: "worker", listener: WorkerListener): this; + on(event: "beforeExit", listener: BeforeExitListener): this; + on(event: "disconnect", listener: DisconnectListener): this; + on(event: "exit", listener: ExitListener): this; + on(event: "rejectionHandled", listener: RejectionHandledListener): this; + on(event: "uncaughtException", listener: UncaughtExceptionListener): this; + on(event: "uncaughtExceptionMonitor", listener: UncaughtExceptionListener): this; + on(event: "unhandledRejection", listener: UnhandledRejectionListener): this; + on(event: "warning", listener: WarningListener): this; + on(event: "message", listener: MessageListener): this; + on(event: Signals, listener: SignalsListener): this; + on(event: "multipleResolves", listener: MultipleResolveListener): this; + on(event: "worker", listener: WorkerListener): this; + on(event: string | symbol, listener: (...args: any[]) => void): this; + once(event: "beforeExit", listener: BeforeExitListener): this; + once(event: "disconnect", listener: DisconnectListener): this; + once(event: "exit", listener: ExitListener): this; + once(event: "rejectionHandled", listener: RejectionHandledListener): this; + once(event: "uncaughtException", listener: UncaughtExceptionListener): this; + once(event: "uncaughtExceptionMonitor", listener: UncaughtExceptionListener): this; + once(event: "unhandledRejection", listener: UnhandledRejectionListener): this; + once(event: "warning", listener: WarningListener): this; + once(event: "message", listener: MessageListener): this; + once(event: Signals, listener: SignalsListener): this; + once(event: "multipleResolves", listener: MultipleResolveListener): this; + once(event: "worker", listener: WorkerListener): this; + once(event: string | symbol, listener: (...args: any[]) => void): this; + prependListener(event: "beforeExit", listener: BeforeExitListener): this; + prependListener(event: "disconnect", listener: DisconnectListener): this; + prependListener(event: "exit", listener: ExitListener): this; + prependListener(event: "rejectionHandled", listener: RejectionHandledListener): this; + prependListener(event: "uncaughtException", listener: UncaughtExceptionListener): this; + prependListener(event: "uncaughtExceptionMonitor", listener: UncaughtExceptionListener): this; + prependListener(event: "unhandledRejection", listener: UnhandledRejectionListener): this; + prependListener(event: "warning", listener: WarningListener): this; + prependListener(event: "message", listener: MessageListener): this; + prependListener(event: Signals, listener: SignalsListener): this; + prependListener(event: "multipleResolves", listener: MultipleResolveListener): this; + prependListener(event: "worker", listener: WorkerListener): this; + prependOnceListener(event: "beforeExit", listener: BeforeExitListener): this; + prependOnceListener(event: "disconnect", listener: DisconnectListener): this; + prependOnceListener(event: "exit", listener: ExitListener): this; + prependOnceListener(event: "rejectionHandled", listener: RejectionHandledListener): this; + prependOnceListener(event: "uncaughtException", listener: UncaughtExceptionListener): this; + prependOnceListener(event: "uncaughtExceptionMonitor", listener: UncaughtExceptionListener): this; + prependOnceListener(event: "unhandledRejection", listener: UnhandledRejectionListener): this; + prependOnceListener(event: "warning", listener: WarningListener): this; + prependOnceListener(event: "message", listener: MessageListener): this; + prependOnceListener(event: Signals, listener: SignalsListener): this; + prependOnceListener(event: "multipleResolves", listener: MultipleResolveListener): this; + prependOnceListener(event: "worker", listener: WorkerListener): this; + listeners(event: "beforeExit"): BeforeExitListener[]; + listeners(event: "disconnect"): DisconnectListener[]; + listeners(event: "exit"): ExitListener[]; + listeners(event: "rejectionHandled"): RejectionHandledListener[]; + listeners(event: "uncaughtException"): UncaughtExceptionListener[]; + listeners(event: "uncaughtExceptionMonitor"): UncaughtExceptionListener[]; + listeners(event: "unhandledRejection"): UnhandledRejectionListener[]; + listeners(event: "warning"): WarningListener[]; + listeners(event: "message"): MessageListener[]; + listeners(event: Signals): SignalsListener[]; + listeners(event: "multipleResolves"): MultipleResolveListener[]; + listeners(event: "worker"): WorkerListener[]; + } + } + } + export = process; +} +declare module "node:process" { + import process = require("process"); + export = process; +} diff --git a/Url-Shortner/node_modules/@types/node/punycode.d.ts b/Url-Shortner/node_modules/@types/node/punycode.d.ts new file mode 100644 index 0000000..64ddd3e --- /dev/null +++ b/Url-Shortner/node_modules/@types/node/punycode.d.ts @@ -0,0 +1,117 @@ +/** + * **The version of the punycode module bundled in Node.js is being deprecated.**In a future major version of Node.js this module will be removed. Users + * currently depending on the `punycode` module should switch to using the + * userland-provided [Punycode.js](https://github.com/bestiejs/punycode.js) module instead. For punycode-based URL + * encoding, see `url.domainToASCII` or, more generally, the `WHATWG URL API`. + * + * The `punycode` module is a bundled version of the [Punycode.js](https://github.com/bestiejs/punycode.js) module. It + * can be accessed using: + * + * ```js + * const punycode = require('punycode'); + * ``` + * + * [Punycode](https://tools.ietf.org/html/rfc3492) is a character encoding scheme defined by RFC 3492 that is + * primarily intended for use in Internationalized Domain Names. Because host + * names in URLs are limited to ASCII characters only, Domain Names that contain + * non-ASCII characters must be converted into ASCII using the Punycode scheme. + * For instance, the Japanese character that translates into the English word,`'example'` is `'例'`. The Internationalized Domain Name, `'例.com'` (equivalent + * to `'example.com'`) is represented by Punycode as the ASCII string`'xn--fsq.com'`. + * + * The `punycode` module provides a simple implementation of the Punycode standard. + * + * The `punycode` module is a third-party dependency used by Node.js and + * made available to developers as a convenience. Fixes or other modifications to + * the module must be directed to the [Punycode.js](https://github.com/bestiejs/punycode.js) project. + * @deprecated Since v7.0.0 - Deprecated + * @see [source](https://github.com/nodejs/node/blob/v20.2.0/lib/punycode.js) + */ +declare module "punycode" { + /** + * The `punycode.decode()` method converts a [Punycode](https://tools.ietf.org/html/rfc3492) string of ASCII-only + * characters to the equivalent string of Unicode codepoints. + * + * ```js + * punycode.decode('maana-pta'); // 'mañana' + * punycode.decode('--dqo34k'); // '☃-⌘' + * ``` + * @since v0.5.1 + */ + function decode(string: string): string; + /** + * The `punycode.encode()` method converts a string of Unicode codepoints to a [Punycode](https://tools.ietf.org/html/rfc3492) string of ASCII-only characters. + * + * ```js + * punycode.encode('mañana'); // 'maana-pta' + * punycode.encode('☃-⌘'); // '--dqo34k' + * ``` + * @since v0.5.1 + */ + function encode(string: string): string; + /** + * The `punycode.toUnicode()` method converts a string representing a domain name + * containing [Punycode](https://tools.ietf.org/html/rfc3492) encoded characters into Unicode. Only the [Punycode](https://tools.ietf.org/html/rfc3492) encoded parts of the domain name are be + * converted. + * + * ```js + * // decode domain names + * punycode.toUnicode('xn--maana-pta.com'); // 'mañana.com' + * punycode.toUnicode('xn----dqo34k.com'); // '☃-⌘.com' + * punycode.toUnicode('example.com'); // 'example.com' + * ``` + * @since v0.6.1 + */ + function toUnicode(domain: string): string; + /** + * The `punycode.toASCII()` method converts a Unicode string representing an + * Internationalized Domain Name to [Punycode](https://tools.ietf.org/html/rfc3492). Only the non-ASCII parts of the + * domain name will be converted. Calling `punycode.toASCII()` on a string that + * already only contains ASCII characters will have no effect. + * + * ```js + * // encode domain names + * punycode.toASCII('mañana.com'); // 'xn--maana-pta.com' + * punycode.toASCII('☃-⌘.com'); // 'xn----dqo34k.com' + * punycode.toASCII('example.com'); // 'example.com' + * ``` + * @since v0.6.1 + */ + function toASCII(domain: string): string; + /** + * @deprecated since v7.0.0 + * The version of the punycode module bundled in Node.js is being deprecated. + * In a future major version of Node.js this module will be removed. + * Users currently depending on the punycode module should switch to using + * the userland-provided Punycode.js module instead. + */ + const ucs2: ucs2; + interface ucs2 { + /** + * @deprecated since v7.0.0 + * The version of the punycode module bundled in Node.js is being deprecated. + * In a future major version of Node.js this module will be removed. + * Users currently depending on the punycode module should switch to using + * the userland-provided Punycode.js module instead. + */ + decode(string: string): number[]; + /** + * @deprecated since v7.0.0 + * The version of the punycode module bundled in Node.js is being deprecated. + * In a future major version of Node.js this module will be removed. + * Users currently depending on the punycode module should switch to using + * the userland-provided Punycode.js module instead. + */ + encode(codePoints: ReadonlyArray): string; + } + /** + * @deprecated since v7.0.0 + * The version of the punycode module bundled in Node.js is being deprecated. + * In a future major version of Node.js this module will be removed. + * Users currently depending on the punycode module should switch to using + * the userland-provided Punycode.js module instead. + */ + const version: string; +} +declare module "node:punycode" { + export * from "punycode"; +} diff --git a/Url-Shortner/node_modules/@types/node/querystring.d.ts b/Url-Shortner/node_modules/@types/node/querystring.d.ts new file mode 100644 index 0000000..388ebc3 --- /dev/null +++ b/Url-Shortner/node_modules/@types/node/querystring.d.ts @@ -0,0 +1,141 @@ +/** + * The `node:querystring` module provides utilities for parsing and formatting URL + * query strings. It can be accessed using: + * + * ```js + * const querystring = require('node:querystring'); + * ``` + * + * `querystring` is more performant than `URLSearchParams` but is not a + * standardized API. Use `URLSearchParams` when performance is not critical or + * when compatibility with browser code is desirable. + * @see [source](https://github.com/nodejs/node/blob/v20.2.0/lib/querystring.js) + */ +declare module "querystring" { + interface StringifyOptions { + encodeURIComponent?: ((str: string) => string) | undefined; + } + interface ParseOptions { + maxKeys?: number | undefined; + decodeURIComponent?: ((str: string) => string) | undefined; + } + interface ParsedUrlQuery extends NodeJS.Dict {} + interface ParsedUrlQueryInput extends + NodeJS.Dict< + | string + | number + | boolean + | ReadonlyArray + | ReadonlyArray + | ReadonlyArray + | null + > + {} + /** + * The `querystring.stringify()` method produces a URL query string from a + * given `obj` by iterating through the object's "own properties". + * + * It serializes the following types of values passed in `obj`:[string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type) | + * [number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type) | + * [bigint](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt) | + * [boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Boolean_type) | + * [string\[\]](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type) | + * [number\[\]](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type) | + * [bigint\[\]](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt) | + * [boolean\[\]](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Boolean_type) The numeric values must be finite. Any other input values will be coerced to + * empty strings. + * + * ```js + * querystring.stringify({ foo: 'bar', baz: ['qux', 'quux'], corge: '' }); + * // Returns 'foo=bar&baz=qux&baz=quux&corge=' + * + * querystring.stringify({ foo: 'bar', baz: 'qux' }, ';', ':'); + * // Returns 'foo:bar;baz:qux' + * ``` + * + * By default, characters requiring percent-encoding within the query string will + * be encoded as UTF-8\. If an alternative encoding is required, then an alternative`encodeURIComponent` option will need to be specified: + * + * ```js + * // Assuming gbkEncodeURIComponent function already exists, + * + * querystring.stringify({ w: '中文', foo: 'bar' }, null, null, + * { encodeURIComponent: gbkEncodeURIComponent }); + * ``` + * @since v0.1.25 + * @param obj The object to serialize into a URL query string + * @param [sep='&'] The substring used to delimit key and value pairs in the query string. + * @param [eq='='] . The substring used to delimit keys and values in the query string. + */ + function stringify(obj?: ParsedUrlQueryInput, sep?: string, eq?: string, options?: StringifyOptions): string; + /** + * The `querystring.parse()` method parses a URL query string (`str`) into a + * collection of key and value pairs. + * + * For example, the query string `'foo=bar&abc=xyz&abc=123'` is parsed into: + * + * ```js + * { + * foo: 'bar', + * abc: ['xyz', '123'] + * } + * ``` + * + * The object returned by the `querystring.parse()` method _does not_prototypically inherit from the JavaScript `Object`. This means that typical`Object` methods such as `obj.toString()`, + * `obj.hasOwnProperty()`, and others + * are not defined and _will not work_. + * + * By default, percent-encoded characters within the query string will be assumed + * to use UTF-8 encoding. If an alternative character encoding is used, then an + * alternative `decodeURIComponent` option will need to be specified: + * + * ```js + * // Assuming gbkDecodeURIComponent function already exists... + * + * querystring.parse('w=%D6%D0%CE%C4&foo=bar', null, null, + * { decodeURIComponent: gbkDecodeURIComponent }); + * ``` + * @since v0.1.25 + * @param str The URL query string to parse + * @param [sep='&'] The substring used to delimit key and value pairs in the query string. + * @param [eq='='] . The substring used to delimit keys and values in the query string. + */ + function parse(str: string, sep?: string, eq?: string, options?: ParseOptions): ParsedUrlQuery; + /** + * The querystring.encode() function is an alias for querystring.stringify(). + */ + const encode: typeof stringify; + /** + * The querystring.decode() function is an alias for querystring.parse(). + */ + const decode: typeof parse; + /** + * The `querystring.escape()` method performs URL percent-encoding on the given`str` in a manner that is optimized for the specific requirements of URL + * query strings. + * + * The `querystring.escape()` method is used by `querystring.stringify()` and is + * generally not expected to be used directly. It is exported primarily to allow + * application code to provide a replacement percent-encoding implementation if + * necessary by assigning `querystring.escape` to an alternative function. + * @since v0.1.25 + */ + function escape(str: string): string; + /** + * The `querystring.unescape()` method performs decoding of URL percent-encoded + * characters on the given `str`. + * + * The `querystring.unescape()` method is used by `querystring.parse()` and is + * generally not expected to be used directly. It is exported primarily to allow + * application code to provide a replacement decoding implementation if + * necessary by assigning `querystring.unescape` to an alternative function. + * + * By default, the `querystring.unescape()` method will attempt to use the + * JavaScript built-in `decodeURIComponent()` method to decode. If that fails, + * a safer equivalent that does not throw on malformed URLs will be used. + * @since v0.1.25 + */ + function unescape(str: string): string; +} +declare module "node:querystring" { + export * from "querystring"; +} diff --git a/Url-Shortner/node_modules/@types/node/readline.d.ts b/Url-Shortner/node_modules/@types/node/readline.d.ts new file mode 100644 index 0000000..b06d58b --- /dev/null +++ b/Url-Shortner/node_modules/@types/node/readline.d.ts @@ -0,0 +1,539 @@ +/** + * The `node:readline` module provides an interface for reading data from a `Readable` stream (such as `process.stdin`) one line at a time. + * + * To use the promise-based APIs: + * + * ```js + * import * as readline from 'node:readline/promises'; + * ``` + * + * To use the callback and sync APIs: + * + * ```js + * import * as readline from 'node:readline'; + * ``` + * + * The following simple example illustrates the basic use of the `node:readline`module. + * + * ```js + * import * as readline from 'node:readline/promises'; + * import { stdin as input, stdout as output } from 'node:process'; + * + * const rl = readline.createInterface({ input, output }); + * + * const answer = await rl.question('What do you think of Node.js? '); + * + * console.log(`Thank you for your valuable feedback: ${answer}`); + * + * rl.close(); + * ``` + * + * Once this code is invoked, the Node.js application will not terminate until the`readline.Interface` is closed because the interface waits for data to be + * received on the `input` stream. + * @see [source](https://github.com/nodejs/node/blob/v20.2.0/lib/readline.js) + */ +declare module "readline" { + import { Abortable, EventEmitter } from "node:events"; + import * as promises from "node:readline/promises"; + export { promises }; + export interface Key { + sequence?: string | undefined; + name?: string | undefined; + ctrl?: boolean | undefined; + meta?: boolean | undefined; + shift?: boolean | undefined; + } + /** + * Instances of the `readline.Interface` class are constructed using the`readline.createInterface()` method. Every instance is associated with a + * single `input` `Readable` stream and a single `output` `Writable` stream. + * The `output` stream is used to print prompts for user input that arrives on, + * and is read from, the `input` stream. + * @since v0.1.104 + */ + export class Interface extends EventEmitter { + readonly terminal: boolean; + /** + * The current input data being processed by node. + * + * This can be used when collecting input from a TTY stream to retrieve the + * current value that has been processed thus far, prior to the `line` event + * being emitted. Once the `line` event has been emitted, this property will + * be an empty string. + * + * Be aware that modifying the value during the instance runtime may have + * unintended consequences if `rl.cursor` is not also controlled. + * + * **If not using a TTY stream for input, use the `'line'` event.** + * + * One possible use case would be as follows: + * + * ```js + * const values = ['lorem ipsum', 'dolor sit amet']; + * const rl = readline.createInterface(process.stdin); + * const showResults = debounce(() => { + * console.log( + * '\n', + * values.filter((val) => val.startsWith(rl.line)).join(' '), + * ); + * }, 300); + * process.stdin.on('keypress', (c, k) => { + * showResults(); + * }); + * ``` + * @since v0.1.98 + */ + readonly line: string; + /** + * The cursor position relative to `rl.line`. + * + * This will track where the current cursor lands in the input string, when + * reading input from a TTY stream. The position of cursor determines the + * portion of the input string that will be modified as input is processed, + * as well as the column where the terminal caret will be rendered. + * @since v0.1.98 + */ + readonly cursor: number; + /** + * NOTE: According to the documentation: + * + * > Instances of the `readline.Interface` class are constructed using the + * > `readline.createInterface()` method. + * + * @see https://nodejs.org/dist/latest-v20.x/docs/api/readline.html#class-interfaceconstructor + */ + protected constructor( + input: NodeJS.ReadableStream, + output?: NodeJS.WritableStream, + completer?: Completer | AsyncCompleter, + terminal?: boolean, + ); + /** + * NOTE: According to the documentation: + * + * > Instances of the `readline.Interface` class are constructed using the + * > `readline.createInterface()` method. + * + * @see https://nodejs.org/dist/latest-v20.x/docs/api/readline.html#class-interfaceconstructor + */ + protected constructor(options: ReadLineOptions); + /** + * The `rl.getPrompt()` method returns the current prompt used by `rl.prompt()`. + * @since v15.3.0, v14.17.0 + * @return the current prompt string + */ + getPrompt(): string; + /** + * The `rl.setPrompt()` method sets the prompt that will be written to `output`whenever `rl.prompt()` is called. + * @since v0.1.98 + */ + setPrompt(prompt: string): void; + /** + * The `rl.prompt()` method writes the `Interface` instances configured`prompt` to a new line in `output` in order to provide a user with a new + * location at which to provide input. + * + * When called, `rl.prompt()` will resume the `input` stream if it has been + * paused. + * + * If the `Interface` was created with `output` set to `null` or`undefined` the prompt is not written. + * @since v0.1.98 + * @param preserveCursor If `true`, prevents the cursor placement from being reset to `0`. + */ + prompt(preserveCursor?: boolean): void; + /** + * The `rl.question()` method displays the `query` by writing it to the `output`, + * waits for user input to be provided on `input`, then invokes the `callback`function passing the provided input as the first argument. + * + * When called, `rl.question()` will resume the `input` stream if it has been + * paused. + * + * If the `Interface` was created with `output` set to `null` or`undefined` the `query` is not written. + * + * The `callback` function passed to `rl.question()` does not follow the typical + * pattern of accepting an `Error` object or `null` as the first argument. + * The `callback` is called with the provided answer as the only argument. + * + * An error will be thrown if calling `rl.question()` after `rl.close()`. + * + * Example usage: + * + * ```js + * rl.question('What is your favorite food? ', (answer) => { + * console.log(`Oh, so your favorite food is ${answer}`); + * }); + * ``` + * + * Using an `AbortController` to cancel a question. + * + * ```js + * const ac = new AbortController(); + * const signal = ac.signal; + * + * rl.question('What is your favorite food? ', { signal }, (answer) => { + * console.log(`Oh, so your favorite food is ${answer}`); + * }); + * + * signal.addEventListener('abort', () => { + * console.log('The food question timed out'); + * }, { once: true }); + * + * setTimeout(() => ac.abort(), 10000); + * ``` + * @since v0.3.3 + * @param query A statement or query to write to `output`, prepended to the prompt. + * @param callback A callback function that is invoked with the user's input in response to the `query`. + */ + question(query: string, callback: (answer: string) => void): void; + question(query: string, options: Abortable, callback: (answer: string) => void): void; + /** + * The `rl.pause()` method pauses the `input` stream, allowing it to be resumed + * later if necessary. + * + * Calling `rl.pause()` does not immediately pause other events (including`'line'`) from being emitted by the `Interface` instance. + * @since v0.3.4 + */ + pause(): this; + /** + * The `rl.resume()` method resumes the `input` stream if it has been paused. + * @since v0.3.4 + */ + resume(): this; + /** + * The `rl.close()` method closes the `Interface` instance and + * relinquishes control over the `input` and `output` streams. When called, + * the `'close'` event will be emitted. + * + * Calling `rl.close()` does not immediately stop other events (including `'line'`) + * from being emitted by the `Interface` instance. + * @since v0.1.98 + */ + close(): void; + /** + * The `rl.write()` method will write either `data` or a key sequence identified + * by `key` to the `output`. The `key` argument is supported only if `output` is + * a `TTY` text terminal. See `TTY keybindings` for a list of key + * combinations. + * + * If `key` is specified, `data` is ignored. + * + * When called, `rl.write()` will resume the `input` stream if it has been + * paused. + * + * If the `Interface` was created with `output` set to `null` or`undefined` the `data` and `key` are not written. + * + * ```js + * rl.write('Delete this!'); + * // Simulate Ctrl+U to delete the line written previously + * rl.write(null, { ctrl: true, name: 'u' }); + * ``` + * + * The `rl.write()` method will write the data to the `readline` `Interface`'s`input`_as if it were provided by the user_. + * @since v0.1.98 + */ + write(data: string | Buffer, key?: Key): void; + write(data: undefined | null | string | Buffer, key: Key): void; + /** + * Returns the real position of the cursor in relation to the input + * prompt + string. Long input (wrapping) strings, as well as multiple + * line prompts are included in the calculations. + * @since v13.5.0, v12.16.0 + */ + getCursorPos(): CursorPos; + /** + * events.EventEmitter + * 1. close + * 2. line + * 3. pause + * 4. resume + * 5. SIGCONT + * 6. SIGINT + * 7. SIGTSTP + * 8. history + */ + addListener(event: string, listener: (...args: any[]) => void): this; + addListener(event: "close", listener: () => void): this; + addListener(event: "line", listener: (input: string) => void): this; + addListener(event: "pause", listener: () => void): this; + addListener(event: "resume", listener: () => void): this; + addListener(event: "SIGCONT", listener: () => void): this; + addListener(event: "SIGINT", listener: () => void): this; + addListener(event: "SIGTSTP", listener: () => void): this; + addListener(event: "history", listener: (history: string[]) => void): this; + emit(event: string | symbol, ...args: any[]): boolean; + emit(event: "close"): boolean; + emit(event: "line", input: string): boolean; + emit(event: "pause"): boolean; + emit(event: "resume"): boolean; + emit(event: "SIGCONT"): boolean; + emit(event: "SIGINT"): boolean; + emit(event: "SIGTSTP"): boolean; + emit(event: "history", history: string[]): boolean; + on(event: string, listener: (...args: any[]) => void): this; + on(event: "close", listener: () => void): this; + on(event: "line", listener: (input: string) => void): this; + on(event: "pause", listener: () => void): this; + on(event: "resume", listener: () => void): this; + on(event: "SIGCONT", listener: () => void): this; + on(event: "SIGINT", listener: () => void): this; + on(event: "SIGTSTP", listener: () => void): this; + on(event: "history", listener: (history: string[]) => void): this; + once(event: string, listener: (...args: any[]) => void): this; + once(event: "close", listener: () => void): this; + once(event: "line", listener: (input: string) => void): this; + once(event: "pause", listener: () => void): this; + once(event: "resume", listener: () => void): this; + once(event: "SIGCONT", listener: () => void): this; + once(event: "SIGINT", listener: () => void): this; + once(event: "SIGTSTP", listener: () => void): this; + once(event: "history", listener: (history: string[]) => void): this; + prependListener(event: string, listener: (...args: any[]) => void): this; + prependListener(event: "close", listener: () => void): this; + prependListener(event: "line", listener: (input: string) => void): this; + prependListener(event: "pause", listener: () => void): this; + prependListener(event: "resume", listener: () => void): this; + prependListener(event: "SIGCONT", listener: () => void): this; + prependListener(event: "SIGINT", listener: () => void): this; + prependListener(event: "SIGTSTP", listener: () => void): this; + prependListener(event: "history", listener: (history: string[]) => void): this; + prependOnceListener(event: string, listener: (...args: any[]) => void): this; + prependOnceListener(event: "close", listener: () => void): this; + prependOnceListener(event: "line", listener: (input: string) => void): this; + prependOnceListener(event: "pause", listener: () => void): this; + prependOnceListener(event: "resume", listener: () => void): this; + prependOnceListener(event: "SIGCONT", listener: () => void): this; + prependOnceListener(event: "SIGINT", listener: () => void): this; + prependOnceListener(event: "SIGTSTP", listener: () => void): this; + prependOnceListener(event: "history", listener: (history: string[]) => void): this; + [Symbol.asyncIterator](): AsyncIterableIterator; + } + export type ReadLine = Interface; // type forwarded for backwards compatibility + export type Completer = (line: string) => CompleterResult; + export type AsyncCompleter = ( + line: string, + callback: (err?: null | Error, result?: CompleterResult) => void, + ) => void; + export type CompleterResult = [string[], string]; + export interface ReadLineOptions { + input: NodeJS.ReadableStream; + output?: NodeJS.WritableStream | undefined; + completer?: Completer | AsyncCompleter | undefined; + terminal?: boolean | undefined; + /** + * Initial list of history lines. This option makes sense + * only if `terminal` is set to `true` by the user or by an internal `output` + * check, otherwise the history caching mechanism is not initialized at all. + * @default [] + */ + history?: string[] | undefined; + historySize?: number | undefined; + prompt?: string | undefined; + crlfDelay?: number | undefined; + /** + * If `true`, when a new input line added + * to the history list duplicates an older one, this removes the older line + * from the list. + * @default false + */ + removeHistoryDuplicates?: boolean | undefined; + escapeCodeTimeout?: number | undefined; + tabSize?: number | undefined; + } + /** + * The `readline.createInterface()` method creates a new `readline.Interface`instance. + * + * ```js + * const readline = require('node:readline'); + * const rl = readline.createInterface({ + * input: process.stdin, + * output: process.stdout, + * }); + * ``` + * + * Once the `readline.Interface` instance is created, the most common case is to + * listen for the `'line'` event: + * + * ```js + * rl.on('line', (line) => { + * console.log(`Received: ${line}`); + * }); + * ``` + * + * If `terminal` is `true` for this instance then the `output` stream will get + * the best compatibility if it defines an `output.columns` property and emits + * a `'resize'` event on the `output` if or when the columns ever change + * (`process.stdout` does this automatically when it is a TTY). + * + * When creating a `readline.Interface` using `stdin` as input, the program + * will not terminate until it receives an [EOF character](https://en.wikipedia.org/wiki/End-of-file#EOF_character). To exit without + * waiting for user input, call `process.stdin.unref()`. + * @since v0.1.98 + */ + export function createInterface( + input: NodeJS.ReadableStream, + output?: NodeJS.WritableStream, + completer?: Completer | AsyncCompleter, + terminal?: boolean, + ): Interface; + export function createInterface(options: ReadLineOptions): Interface; + /** + * The `readline.emitKeypressEvents()` method causes the given `Readable` stream to begin emitting `'keypress'` events corresponding to received input. + * + * Optionally, `interface` specifies a `readline.Interface` instance for which + * autocompletion is disabled when copy-pasted input is detected. + * + * If the `stream` is a `TTY`, then it must be in raw mode. + * + * This is automatically called by any readline instance on its `input` if the`input` is a terminal. Closing the `readline` instance does not stop + * the `input` from emitting `'keypress'` events. + * + * ```js + * readline.emitKeypressEvents(process.stdin); + * if (process.stdin.isTTY) + * process.stdin.setRawMode(true); + * ``` + * + * ## Example: Tiny CLI + * + * The following example illustrates the use of `readline.Interface` class to + * implement a small command-line interface: + * + * ```js + * const readline = require('node:readline'); + * const rl = readline.createInterface({ + * input: process.stdin, + * output: process.stdout, + * prompt: 'OHAI> ', + * }); + * + * rl.prompt(); + * + * rl.on('line', (line) => { + * switch (line.trim()) { + * case 'hello': + * console.log('world!'); + * break; + * default: + * console.log(`Say what? I might have heard '${line.trim()}'`); + * break; + * } + * rl.prompt(); + * }).on('close', () => { + * console.log('Have a great day!'); + * process.exit(0); + * }); + * ``` + * + * ## Example: Read file stream line-by-Line + * + * A common use case for `readline` is to consume an input file one line at a + * time. The easiest way to do so is leveraging the `fs.ReadStream` API as + * well as a `for await...of` loop: + * + * ```js + * const fs = require('node:fs'); + * const readline = require('node:readline'); + * + * async function processLineByLine() { + * const fileStream = fs.createReadStream('input.txt'); + * + * const rl = readline.createInterface({ + * input: fileStream, + * crlfDelay: Infinity, + * }); + * // Note: we use the crlfDelay option to recognize all instances of CR LF + * // ('\r\n') in input.txt as a single line break. + * + * for await (const line of rl) { + * // Each line in input.txt will be successively available here as `line`. + * console.log(`Line from file: ${line}`); + * } + * } + * + * processLineByLine(); + * ``` + * + * Alternatively, one could use the `'line'` event: + * + * ```js + * const fs = require('node:fs'); + * const readline = require('node:readline'); + * + * const rl = readline.createInterface({ + * input: fs.createReadStream('sample.txt'), + * crlfDelay: Infinity, + * }); + * + * rl.on('line', (line) => { + * console.log(`Line from file: ${line}`); + * }); + * ``` + * + * Currently, `for await...of` loop can be a bit slower. If `async` / `await`flow and speed are both essential, a mixed approach can be applied: + * + * ```js + * const { once } = require('node:events'); + * const { createReadStream } = require('node:fs'); + * const { createInterface } = require('node:readline'); + * + * (async function processLineByLine() { + * try { + * const rl = createInterface({ + * input: createReadStream('big-file.txt'), + * crlfDelay: Infinity, + * }); + * + * rl.on('line', (line) => { + * // Process the line. + * }); + * + * await once(rl, 'close'); + * + * console.log('File processed.'); + * } catch (err) { + * console.error(err); + * } + * })(); + * ``` + * @since v0.7.7 + */ + export function emitKeypressEvents(stream: NodeJS.ReadableStream, readlineInterface?: Interface): void; + export type Direction = -1 | 0 | 1; + export interface CursorPos { + rows: number; + cols: number; + } + /** + * The `readline.clearLine()` method clears current line of given `TTY` stream + * in a specified direction identified by `dir`. + * @since v0.7.7 + * @param callback Invoked once the operation completes. + * @return `false` if `stream` wishes for the calling code to wait for the `'drain'` event to be emitted before continuing to write additional data; otherwise `true`. + */ + export function clearLine(stream: NodeJS.WritableStream, dir: Direction, callback?: () => void): boolean; + /** + * The `readline.clearScreenDown()` method clears the given `TTY` stream from + * the current position of the cursor down. + * @since v0.7.7 + * @param callback Invoked once the operation completes. + * @return `false` if `stream` wishes for the calling code to wait for the `'drain'` event to be emitted before continuing to write additional data; otherwise `true`. + */ + export function clearScreenDown(stream: NodeJS.WritableStream, callback?: () => void): boolean; + /** + * The `readline.cursorTo()` method moves cursor to the specified position in a + * given `TTY` `stream`. + * @since v0.7.7 + * @param callback Invoked once the operation completes. + * @return `false` if `stream` wishes for the calling code to wait for the `'drain'` event to be emitted before continuing to write additional data; otherwise `true`. + */ + export function cursorTo(stream: NodeJS.WritableStream, x: number, y?: number, callback?: () => void): boolean; + /** + * The `readline.moveCursor()` method moves the cursor _relative_ to its current + * position in a given `TTY` `stream`. + * @since v0.7.7 + * @param callback Invoked once the operation completes. + * @return `false` if `stream` wishes for the calling code to wait for the `'drain'` event to be emitted before continuing to write additional data; otherwise `true`. + */ + export function moveCursor(stream: NodeJS.WritableStream, dx: number, dy: number, callback?: () => void): boolean; +} +declare module "node:readline" { + export * from "readline"; +} diff --git a/Url-Shortner/node_modules/@types/node/readline/promises.d.ts b/Url-Shortner/node_modules/@types/node/readline/promises.d.ts new file mode 100644 index 0000000..73fb111 --- /dev/null +++ b/Url-Shortner/node_modules/@types/node/readline/promises.d.ts @@ -0,0 +1,150 @@ +/** + * @since v17.0.0 + * @experimental + */ +declare module "readline/promises" { + import { AsyncCompleter, Completer, Direction, Interface as _Interface, ReadLineOptions } from "node:readline"; + import { Abortable } from "node:events"; + /** + * Instances of the `readlinePromises.Interface` class are constructed using the`readlinePromises.createInterface()` method. Every instance is associated with a + * single `input` `Readable` stream and a single `output` `Writable` stream. + * The `output` stream is used to print prompts for user input that arrives on, + * and is read from, the `input` stream. + * @since v17.0.0 + */ + class Interface extends _Interface { + /** + * The `rl.question()` method displays the `query` by writing it to the `output`, + * waits for user input to be provided on `input`, then invokes the `callback`function passing the provided input as the first argument. + * + * When called, `rl.question()` will resume the `input` stream if it has been + * paused. + * + * If the `Interface` was created with `output` set to `null` or`undefined` the `query` is not written. + * + * If the question is called after `rl.close()`, it returns a rejected promise. + * + * Example usage: + * + * ```js + * const answer = await rl.question('What is your favorite food? '); + * console.log(`Oh, so your favorite food is ${answer}`); + * ``` + * + * Using an `AbortSignal` to cancel a question. + * + * ```js + * const signal = AbortSignal.timeout(10_000); + * + * signal.addEventListener('abort', () => { + * console.log('The food question timed out'); + * }, { once: true }); + * + * const answer = await rl.question('What is your favorite food? ', { signal }); + * console.log(`Oh, so your favorite food is ${answer}`); + * ``` + * @since v17.0.0 + * @param query A statement or query to write to `output`, prepended to the prompt. + * @return A promise that is fulfilled with the user's input in response to the `query`. + */ + question(query: string): Promise; + question(query: string, options: Abortable): Promise; + } + /** + * @since v17.0.0 + */ + class Readline { + /** + * @param stream A TTY stream. + */ + constructor( + stream: NodeJS.WritableStream, + options?: { + autoCommit?: boolean; + }, + ); + /** + * The `rl.clearLine()` method adds to the internal list of pending action an + * action that clears current line of the associated `stream` in a specified + * direction identified by `dir`. + * Call `rl.commit()` to see the effect of this method, unless `autoCommit: true`was passed to the constructor. + * @since v17.0.0 + * @return this + */ + clearLine(dir: Direction): this; + /** + * The `rl.clearScreenDown()` method adds to the internal list of pending action an + * action that clears the associated stream from the current position of the + * cursor down. + * Call `rl.commit()` to see the effect of this method, unless `autoCommit: true`was passed to the constructor. + * @since v17.0.0 + * @return this + */ + clearScreenDown(): this; + /** + * The `rl.commit()` method sends all the pending actions to the associated`stream` and clears the internal list of pending actions. + * @since v17.0.0 + */ + commit(): Promise; + /** + * The `rl.cursorTo()` method adds to the internal list of pending action an action + * that moves cursor to the specified position in the associated `stream`. + * Call `rl.commit()` to see the effect of this method, unless `autoCommit: true`was passed to the constructor. + * @since v17.0.0 + * @return this + */ + cursorTo(x: number, y?: number): this; + /** + * The `rl.moveCursor()` method adds to the internal list of pending action an + * action that moves the cursor _relative_ to its current position in the + * associated `stream`. + * Call `rl.commit()` to see the effect of this method, unless `autoCommit: true`was passed to the constructor. + * @since v17.0.0 + * @return this + */ + moveCursor(dx: number, dy: number): this; + /** + * The `rl.rollback` methods clears the internal list of pending actions without + * sending it to the associated `stream`. + * @since v17.0.0 + * @return this + */ + rollback(): this; + } + /** + * The `readlinePromises.createInterface()` method creates a new `readlinePromises.Interface`instance. + * + * ```js + * const readlinePromises = require('node:readline/promises'); + * const rl = readlinePromises.createInterface({ + * input: process.stdin, + * output: process.stdout, + * }); + * ``` + * + * Once the `readlinePromises.Interface` instance is created, the most common case + * is to listen for the `'line'` event: + * + * ```js + * rl.on('line', (line) => { + * console.log(`Received: ${line}`); + * }); + * ``` + * + * If `terminal` is `true` for this instance then the `output` stream will get + * the best compatibility if it defines an `output.columns` property and emits + * a `'resize'` event on the `output` if or when the columns ever change + * (`process.stdout` does this automatically when it is a TTY). + * @since v17.0.0 + */ + function createInterface( + input: NodeJS.ReadableStream, + output?: NodeJS.WritableStream, + completer?: Completer | AsyncCompleter, + terminal?: boolean, + ): Interface; + function createInterface(options: ReadLineOptions): Interface; +} +declare module "node:readline/promises" { + export * from "readline/promises"; +} diff --git a/Url-Shortner/node_modules/@types/node/repl.d.ts b/Url-Shortner/node_modules/@types/node/repl.d.ts new file mode 100644 index 0000000..6c5f81b --- /dev/null +++ b/Url-Shortner/node_modules/@types/node/repl.d.ts @@ -0,0 +1,430 @@ +/** + * The `node:repl` module provides a Read-Eval-Print-Loop (REPL) implementation + * that is available both as a standalone program or includible in other + * applications. It can be accessed using: + * + * ```js + * const repl = require('node:repl'); + * ``` + * @see [source](https://github.com/nodejs/node/blob/v20.2.0/lib/repl.js) + */ +declare module "repl" { + import { AsyncCompleter, Completer, Interface } from "node:readline"; + import { Context } from "node:vm"; + import { InspectOptions } from "node:util"; + interface ReplOptions { + /** + * The input prompt to display. + * @default "> " + */ + prompt?: string | undefined; + /** + * The `Readable` stream from which REPL input will be read. + * @default process.stdin + */ + input?: NodeJS.ReadableStream | undefined; + /** + * The `Writable` stream to which REPL output will be written. + * @default process.stdout + */ + output?: NodeJS.WritableStream | undefined; + /** + * If `true`, specifies that the output should be treated as a TTY terminal, and have + * ANSI/VT100 escape codes written to it. + * Default: checking the value of the `isTTY` property on the output stream upon + * instantiation. + */ + terminal?: boolean | undefined; + /** + * The function to be used when evaluating each given line of input. + * Default: an async wrapper for the JavaScript `eval()` function. An `eval` function can + * error with `repl.Recoverable` to indicate the input was incomplete and prompt for + * additional lines. + * + * @see https://nodejs.org/dist/latest-v20.x/docs/api/repl.html#repl_default_evaluation + * @see https://nodejs.org/dist/latest-v20.x/docs/api/repl.html#repl_custom_evaluation_functions + */ + eval?: REPLEval | undefined; + /** + * Defines if the repl prints output previews or not. + * @default `true` Always `false` in case `terminal` is falsy. + */ + preview?: boolean | undefined; + /** + * If `true`, specifies that the default `writer` function should include ANSI color + * styling to REPL output. If a custom `writer` function is provided then this has no + * effect. + * Default: the REPL instance's `terminal` value. + */ + useColors?: boolean | undefined; + /** + * If `true`, specifies that the default evaluation function will use the JavaScript + * `global` as the context as opposed to creating a new separate context for the REPL + * instance. The node CLI REPL sets this value to `true`. + * Default: `false`. + */ + useGlobal?: boolean | undefined; + /** + * If `true`, specifies that the default writer will not output the return value of a + * command if it evaluates to `undefined`. + * Default: `false`. + */ + ignoreUndefined?: boolean | undefined; + /** + * The function to invoke to format the output of each command before writing to `output`. + * Default: a wrapper for `util.inspect`. + * + * @see https://nodejs.org/dist/latest-v20.x/docs/api/repl.html#repl_customizing_repl_output + */ + writer?: REPLWriter | undefined; + /** + * An optional function used for custom Tab auto completion. + * + * @see https://nodejs.org/dist/latest-v20.x/docs/api/readline.html#readline_use_of_the_completer_function + */ + completer?: Completer | AsyncCompleter | undefined; + /** + * A flag that specifies whether the default evaluator executes all JavaScript commands in + * strict mode or default (sloppy) mode. + * Accepted values are: + * - `repl.REPL_MODE_SLOPPY` - evaluates expressions in sloppy mode. + * - `repl.REPL_MODE_STRICT` - evaluates expressions in strict mode. This is equivalent to + * prefacing every repl statement with `'use strict'`. + */ + replMode?: typeof REPL_MODE_SLOPPY | typeof REPL_MODE_STRICT | undefined; + /** + * Stop evaluating the current piece of code when `SIGINT` is received, i.e. `Ctrl+C` is + * pressed. This cannot be used together with a custom `eval` function. + * Default: `false`. + */ + breakEvalOnSigint?: boolean | undefined; + } + type REPLEval = ( + this: REPLServer, + evalCmd: string, + context: Context, + file: string, + cb: (err: Error | null, result: any) => void, + ) => void; + type REPLWriter = (this: REPLServer, obj: any) => string; + /** + * This is the default "writer" value, if none is passed in the REPL options, + * and it can be overridden by custom print functions. + */ + const writer: REPLWriter & { + options: InspectOptions; + }; + type REPLCommandAction = (this: REPLServer, text: string) => void; + interface REPLCommand { + /** + * Help text to be displayed when `.help` is entered. + */ + help?: string | undefined; + /** + * The function to execute, optionally accepting a single string argument. + */ + action: REPLCommandAction; + } + /** + * Instances of `repl.REPLServer` are created using the {@link start} method + * or directly using the JavaScript `new` keyword. + * + * ```js + * const repl = require('node:repl'); + * + * const options = { useColors: true }; + * + * const firstInstance = repl.start(options); + * const secondInstance = new repl.REPLServer(options); + * ``` + * @since v0.1.91 + */ + class REPLServer extends Interface { + /** + * The `vm.Context` provided to the `eval` function to be used for JavaScript + * evaluation. + */ + readonly context: Context; + /** + * @deprecated since v14.3.0 - Use `input` instead. + */ + readonly inputStream: NodeJS.ReadableStream; + /** + * @deprecated since v14.3.0 - Use `output` instead. + */ + readonly outputStream: NodeJS.WritableStream; + /** + * The `Readable` stream from which REPL input will be read. + */ + readonly input: NodeJS.ReadableStream; + /** + * The `Writable` stream to which REPL output will be written. + */ + readonly output: NodeJS.WritableStream; + /** + * The commands registered via `replServer.defineCommand()`. + */ + readonly commands: NodeJS.ReadOnlyDict; + /** + * A value indicating whether the REPL is currently in "editor mode". + * + * @see https://nodejs.org/dist/latest-v20.x/docs/api/repl.html#repl_commands_and_special_keys + */ + readonly editorMode: boolean; + /** + * A value indicating whether the `_` variable has been assigned. + * + * @see https://nodejs.org/dist/latest-v20.x/docs/api/repl.html#repl_assignment_of_the_underscore_variable + */ + readonly underscoreAssigned: boolean; + /** + * The last evaluation result from the REPL (assigned to the `_` variable inside of the REPL). + * + * @see https://nodejs.org/dist/latest-v20.x/docs/api/repl.html#repl_assignment_of_the_underscore_variable + */ + readonly last: any; + /** + * A value indicating whether the `_error` variable has been assigned. + * + * @since v9.8.0 + * @see https://nodejs.org/dist/latest-v20.x/docs/api/repl.html#repl_assignment_of_the_underscore_variable + */ + readonly underscoreErrAssigned: boolean; + /** + * The last error raised inside the REPL (assigned to the `_error` variable inside of the REPL). + * + * @since v9.8.0 + * @see https://nodejs.org/dist/latest-v20.x/docs/api/repl.html#repl_assignment_of_the_underscore_variable + */ + readonly lastError: any; + /** + * Specified in the REPL options, this is the function to be used when evaluating each + * given line of input. If not specified in the REPL options, this is an async wrapper + * for the JavaScript `eval()` function. + */ + readonly eval: REPLEval; + /** + * Specified in the REPL options, this is a value indicating whether the default + * `writer` function should include ANSI color styling to REPL output. + */ + readonly useColors: boolean; + /** + * Specified in the REPL options, this is a value indicating whether the default `eval` + * function will use the JavaScript `global` as the context as opposed to creating a new + * separate context for the REPL instance. + */ + readonly useGlobal: boolean; + /** + * Specified in the REPL options, this is a value indicating whether the default `writer` + * function should output the result of a command if it evaluates to `undefined`. + */ + readonly ignoreUndefined: boolean; + /** + * Specified in the REPL options, this is the function to invoke to format the output of + * each command before writing to `outputStream`. If not specified in the REPL options, + * this will be a wrapper for `util.inspect`. + */ + readonly writer: REPLWriter; + /** + * Specified in the REPL options, this is the function to use for custom Tab auto-completion. + */ + readonly completer: Completer | AsyncCompleter; + /** + * Specified in the REPL options, this is a flag that specifies whether the default `eval` + * function should execute all JavaScript commands in strict mode or default (sloppy) mode. + * Possible values are: + * - `repl.REPL_MODE_SLOPPY` - evaluates expressions in sloppy mode. + * - `repl.REPL_MODE_STRICT` - evaluates expressions in strict mode. This is equivalent to + * prefacing every repl statement with `'use strict'`. + */ + readonly replMode: typeof REPL_MODE_SLOPPY | typeof REPL_MODE_STRICT; + /** + * NOTE: According to the documentation: + * + * > Instances of `repl.REPLServer` are created using the `repl.start()` method and + * > _should not_ be created directly using the JavaScript `new` keyword. + * + * `REPLServer` cannot be subclassed due to implementation specifics in NodeJS. + * + * @see https://nodejs.org/dist/latest-v20.x/docs/api/repl.html#repl_class_replserver + */ + private constructor(); + /** + * The `replServer.defineCommand()` method is used to add new `.`\-prefixed commands + * to the REPL instance. Such commands are invoked by typing a `.` followed by the`keyword`. The `cmd` is either a `Function` or an `Object` with the following + * properties: + * + * The following example shows two new commands added to the REPL instance: + * + * ```js + * const repl = require('node:repl'); + * + * const replServer = repl.start({ prompt: '> ' }); + * replServer.defineCommand('sayhello', { + * help: 'Say hello', + * action(name) { + * this.clearBufferedCommand(); + * console.log(`Hello, ${name}!`); + * this.displayPrompt(); + * }, + * }); + * replServer.defineCommand('saybye', function saybye() { + * console.log('Goodbye!'); + * this.close(); + * }); + * ``` + * + * The new commands can then be used from within the REPL instance: + * + * ```console + * > .sayhello Node.js User + * Hello, Node.js User! + * > .saybye + * Goodbye! + * ``` + * @since v0.3.0 + * @param keyword The command keyword (_without_ a leading `.` character). + * @param cmd The function to invoke when the command is processed. + */ + defineCommand(keyword: string, cmd: REPLCommandAction | REPLCommand): void; + /** + * The `replServer.displayPrompt()` method readies the REPL instance for input + * from the user, printing the configured `prompt` to a new line in the `output`and resuming the `input` to accept new input. + * + * When multi-line input is being entered, an ellipsis is printed rather than the + * 'prompt'. + * + * When `preserveCursor` is `true`, the cursor placement will not be reset to `0`. + * + * The `replServer.displayPrompt` method is primarily intended to be called from + * within the action function for commands registered using the`replServer.defineCommand()` method. + * @since v0.1.91 + */ + displayPrompt(preserveCursor?: boolean): void; + /** + * The `replServer.clearBufferedCommand()` method clears any command that has been + * buffered but not yet executed. This method is primarily intended to be + * called from within the action function for commands registered using the`replServer.defineCommand()` method. + * @since v9.0.0 + */ + clearBufferedCommand(): void; + /** + * Initializes a history log file for the REPL instance. When executing the + * Node.js binary and using the command-line REPL, a history file is initialized + * by default. However, this is not the case when creating a REPL + * programmatically. Use this method to initialize a history log file when working + * with REPL instances programmatically. + * @since v11.10.0 + * @param historyPath the path to the history file + * @param callback called when history writes are ready or upon error + */ + setupHistory(path: string, callback: (err: Error | null, repl: this) => void): void; + /** + * events.EventEmitter + * 1. close - inherited from `readline.Interface` + * 2. line - inherited from `readline.Interface` + * 3. pause - inherited from `readline.Interface` + * 4. resume - inherited from `readline.Interface` + * 5. SIGCONT - inherited from `readline.Interface` + * 6. SIGINT - inherited from `readline.Interface` + * 7. SIGTSTP - inherited from `readline.Interface` + * 8. exit + * 9. reset + */ + addListener(event: string, listener: (...args: any[]) => void): this; + addListener(event: "close", listener: () => void): this; + addListener(event: "line", listener: (input: string) => void): this; + addListener(event: "pause", listener: () => void): this; + addListener(event: "resume", listener: () => void): this; + addListener(event: "SIGCONT", listener: () => void): this; + addListener(event: "SIGINT", listener: () => void): this; + addListener(event: "SIGTSTP", listener: () => void): this; + addListener(event: "exit", listener: () => void): this; + addListener(event: "reset", listener: (context: Context) => void): this; + emit(event: string | symbol, ...args: any[]): boolean; + emit(event: "close"): boolean; + emit(event: "line", input: string): boolean; + emit(event: "pause"): boolean; + emit(event: "resume"): boolean; + emit(event: "SIGCONT"): boolean; + emit(event: "SIGINT"): boolean; + emit(event: "SIGTSTP"): boolean; + emit(event: "exit"): boolean; + emit(event: "reset", context: Context): boolean; + on(event: string, listener: (...args: any[]) => void): this; + on(event: "close", listener: () => void): this; + on(event: "line", listener: (input: string) => void): this; + on(event: "pause", listener: () => void): this; + on(event: "resume", listener: () => void): this; + on(event: "SIGCONT", listener: () => void): this; + on(event: "SIGINT", listener: () => void): this; + on(event: "SIGTSTP", listener: () => void): this; + on(event: "exit", listener: () => void): this; + on(event: "reset", listener: (context: Context) => void): this; + once(event: string, listener: (...args: any[]) => void): this; + once(event: "close", listener: () => void): this; + once(event: "line", listener: (input: string) => void): this; + once(event: "pause", listener: () => void): this; + once(event: "resume", listener: () => void): this; + once(event: "SIGCONT", listener: () => void): this; + once(event: "SIGINT", listener: () => void): this; + once(event: "SIGTSTP", listener: () => void): this; + once(event: "exit", listener: () => void): this; + once(event: "reset", listener: (context: Context) => void): this; + prependListener(event: string, listener: (...args: any[]) => void): this; + prependListener(event: "close", listener: () => void): this; + prependListener(event: "line", listener: (input: string) => void): this; + prependListener(event: "pause", listener: () => void): this; + prependListener(event: "resume", listener: () => void): this; + prependListener(event: "SIGCONT", listener: () => void): this; + prependListener(event: "SIGINT", listener: () => void): this; + prependListener(event: "SIGTSTP", listener: () => void): this; + prependListener(event: "exit", listener: () => void): this; + prependListener(event: "reset", listener: (context: Context) => void): this; + prependOnceListener(event: string, listener: (...args: any[]) => void): this; + prependOnceListener(event: "close", listener: () => void): this; + prependOnceListener(event: "line", listener: (input: string) => void): this; + prependOnceListener(event: "pause", listener: () => void): this; + prependOnceListener(event: "resume", listener: () => void): this; + prependOnceListener(event: "SIGCONT", listener: () => void): this; + prependOnceListener(event: "SIGINT", listener: () => void): this; + prependOnceListener(event: "SIGTSTP", listener: () => void): this; + prependOnceListener(event: "exit", listener: () => void): this; + prependOnceListener(event: "reset", listener: (context: Context) => void): this; + } + /** + * A flag passed in the REPL options. Evaluates expressions in sloppy mode. + */ + const REPL_MODE_SLOPPY: unique symbol; + /** + * A flag passed in the REPL options. Evaluates expressions in strict mode. + * This is equivalent to prefacing every repl statement with `'use strict'`. + */ + const REPL_MODE_STRICT: unique symbol; + /** + * The `repl.start()` method creates and starts a {@link REPLServer} instance. + * + * If `options` is a string, then it specifies the input prompt: + * + * ```js + * const repl = require('node:repl'); + * + * // a Unix style prompt + * repl.start('$ '); + * ``` + * @since v0.1.91 + */ + function start(options?: string | ReplOptions): REPLServer; + /** + * Indicates a recoverable error that a `REPLServer` can use to support multi-line input. + * + * @see https://nodejs.org/dist/latest-v20.x/docs/api/repl.html#repl_recoverable_errors + */ + class Recoverable extends SyntaxError { + err: Error; + constructor(err: Error); + } +} +declare module "node:repl" { + export * from "repl"; +} diff --git a/Url-Shortner/node_modules/@types/node/stream.d.ts b/Url-Shortner/node_modules/@types/node/stream.d.ts new file mode 100644 index 0000000..15c633f --- /dev/null +++ b/Url-Shortner/node_modules/@types/node/stream.d.ts @@ -0,0 +1,1701 @@ +/** + * A stream is an abstract interface for working with streaming data in Node.js. + * The `node:stream` module provides an API for implementing the stream interface. + * + * There are many stream objects provided by Node.js. For instance, a `request to an HTTP server` and `process.stdout` are both stream instances. + * + * Streams can be readable, writable, or both. All streams are instances of `EventEmitter`. + * + * To access the `node:stream` module: + * + * ```js + * const stream = require('node:stream'); + * ``` + * + * The `node:stream` module is useful for creating new types of stream instances. + * It is usually not necessary to use the `node:stream` module to consume streams. + * @see [source](https://github.com/nodejs/node/blob/v20.2.0/lib/stream.js) + */ +declare module "stream" { + import { Abortable, EventEmitter } from "node:events"; + import { Blob as NodeBlob } from "node:buffer"; + import * as streamPromises from "node:stream/promises"; + import * as streamConsumers from "node:stream/consumers"; + import * as streamWeb from "node:stream/web"; + + type ComposeFnParam = (source: any) => void; + + class internal extends EventEmitter { + pipe( + destination: T, + options?: { + end?: boolean | undefined; + }, + ): T; + compose( + stream: T | ComposeFnParam | Iterable | AsyncIterable, + options?: { signal: AbortSignal }, + ): T; + } + import Stream = internal.Stream; + import Readable = internal.Readable; + import ReadableOptions = internal.ReadableOptions; + interface ArrayOptions { + /** the maximum concurrent invocations of `fn` to call on the stream at once. **Default: 1**. */ + concurrency?: number; + /** allows destroying the stream if the signal is aborted. */ + signal?: AbortSignal; + } + class ReadableBase extends Stream implements NodeJS.ReadableStream { + /** + * A utility method for creating Readable Streams out of iterators. + */ + static from(iterable: Iterable | AsyncIterable, options?: ReadableOptions): Readable; + /** + * Returns whether the stream has been read from or cancelled. + * @since v16.8.0 + */ + static isDisturbed(stream: Readable | NodeJS.ReadableStream): boolean; + /** + * Returns whether the stream was destroyed or errored before emitting `'end'`. + * @since v16.8.0 + * @experimental + */ + readonly readableAborted: boolean; + /** + * Is `true` if it is safe to call `readable.read()`, which means + * the stream has not been destroyed or emitted `'error'` or `'end'`. + * @since v11.4.0 + */ + readable: boolean; + /** + * Returns whether `'data'` has been emitted. + * @since v16.7.0, v14.18.0 + * @experimental + */ + readonly readableDidRead: boolean; + /** + * Getter for the property `encoding` of a given `Readable` stream. The `encoding`property can be set using the `readable.setEncoding()` method. + * @since v12.7.0 + */ + readonly readableEncoding: BufferEncoding | null; + /** + * Becomes `true` when `'end'` event is emitted. + * @since v12.9.0 + */ + readonly readableEnded: boolean; + /** + * This property reflects the current state of a `Readable` stream as described + * in the `Three states` section. + * @since v9.4.0 + */ + readonly readableFlowing: boolean | null; + /** + * Returns the value of `highWaterMark` passed when creating this `Readable`. + * @since v9.3.0 + */ + readonly readableHighWaterMark: number; + /** + * This property contains the number of bytes (or objects) in the queue + * ready to be read. The value provides introspection data regarding + * the status of the `highWaterMark`. + * @since v9.4.0 + */ + readonly readableLength: number; + /** + * Getter for the property `objectMode` of a given `Readable` stream. + * @since v12.3.0 + */ + readonly readableObjectMode: boolean; + /** + * Is `true` after `readable.destroy()` has been called. + * @since v8.0.0 + */ + destroyed: boolean; + /** + * Is `true` after `'close'` has been emitted. + * @since v18.0.0 + */ + readonly closed: boolean; + /** + * Returns error if the stream has been destroyed with an error. + * @since v18.0.0 + */ + readonly errored: Error | null; + constructor(opts?: ReadableOptions); + _construct?(callback: (error?: Error | null) => void): void; + _read(size: number): void; + /** + * The `readable.read()` method reads data out of the internal buffer and + * returns it. If no data is available to be read, `null` is returned. By default, + * the data is returned as a `Buffer` object unless an encoding has been + * specified using the `readable.setEncoding()` method or the stream is operating + * in object mode. + * + * The optional `size` argument specifies a specific number of bytes to read. If`size` bytes are not available to be read, `null` will be returned _unless_the stream has ended, in which + * case all of the data remaining in the internal + * buffer will be returned. + * + * If the `size` argument is not specified, all of the data contained in the + * internal buffer will be returned. + * + * The `size` argument must be less than or equal to 1 GiB. + * + * The `readable.read()` method should only be called on `Readable` streams + * operating in paused mode. In flowing mode, `readable.read()` is called + * automatically until the internal buffer is fully drained. + * + * ```js + * const readable = getReadableStreamSomehow(); + * + * // 'readable' may be triggered multiple times as data is buffered in + * readable.on('readable', () => { + * let chunk; + * console.log('Stream is readable (new data received in buffer)'); + * // Use a loop to make sure we read all currently available data + * while (null !== (chunk = readable.read())) { + * console.log(`Read ${chunk.length} bytes of data...`); + * } + * }); + * + * // 'end' will be triggered once when there is no more data available + * readable.on('end', () => { + * console.log('Reached end of stream.'); + * }); + * ``` + * + * Each call to `readable.read()` returns a chunk of data, or `null`. The chunks + * are not concatenated. A `while` loop is necessary to consume all data + * currently in the buffer. When reading a large file `.read()` may return `null`, + * having consumed all buffered content so far, but there is still more data to + * come not yet buffered. In this case a new `'readable'` event will be emitted + * when there is more data in the buffer. Finally the `'end'` event will be + * emitted when there is no more data to come. + * + * Therefore to read a file's whole contents from a `readable`, it is necessary + * to collect chunks across multiple `'readable'` events: + * + * ```js + * const chunks = []; + * + * readable.on('readable', () => { + * let chunk; + * while (null !== (chunk = readable.read())) { + * chunks.push(chunk); + * } + * }); + * + * readable.on('end', () => { + * const content = chunks.join(''); + * }); + * ``` + * + * A `Readable` stream in object mode will always return a single item from + * a call to `readable.read(size)`, regardless of the value of the`size` argument. + * + * If the `readable.read()` method returns a chunk of data, a `'data'` event will + * also be emitted. + * + * Calling {@link read} after the `'end'` event has + * been emitted will return `null`. No runtime error will be raised. + * @since v0.9.4 + * @param size Optional argument to specify how much data to read. + */ + read(size?: number): any; + /** + * The `readable.setEncoding()` method sets the character encoding for + * data read from the `Readable` stream. + * + * By default, no encoding is assigned and stream data will be returned as`Buffer` objects. Setting an encoding causes the stream data + * to be returned as strings of the specified encoding rather than as `Buffer`objects. For instance, calling `readable.setEncoding('utf8')` will cause the + * output data to be interpreted as UTF-8 data, and passed as strings. Calling`readable.setEncoding('hex')` will cause the data to be encoded in hexadecimal + * string format. + * + * The `Readable` stream will properly handle multi-byte characters delivered + * through the stream that would otherwise become improperly decoded if simply + * pulled from the stream as `Buffer` objects. + * + * ```js + * const readable = getReadableStreamSomehow(); + * readable.setEncoding('utf8'); + * readable.on('data', (chunk) => { + * assert.equal(typeof chunk, 'string'); + * console.log('Got %d characters of string data:', chunk.length); + * }); + * ``` + * @since v0.9.4 + * @param encoding The encoding to use. + */ + setEncoding(encoding: BufferEncoding): this; + /** + * The `readable.pause()` method will cause a stream in flowing mode to stop + * emitting `'data'` events, switching out of flowing mode. Any data that + * becomes available will remain in the internal buffer. + * + * ```js + * const readable = getReadableStreamSomehow(); + * readable.on('data', (chunk) => { + * console.log(`Received ${chunk.length} bytes of data.`); + * readable.pause(); + * console.log('There will be no additional data for 1 second.'); + * setTimeout(() => { + * console.log('Now data will start flowing again.'); + * readable.resume(); + * }, 1000); + * }); + * ``` + * + * The `readable.pause()` method has no effect if there is a `'readable'`event listener. + * @since v0.9.4 + */ + pause(): this; + /** + * The `readable.resume()` method causes an explicitly paused `Readable` stream to + * resume emitting `'data'` events, switching the stream into flowing mode. + * + * The `readable.resume()` method can be used to fully consume the data from a + * stream without actually processing any of that data: + * + * ```js + * getReadableStreamSomehow() + * .resume() + * .on('end', () => { + * console.log('Reached the end, but did not read anything.'); + * }); + * ``` + * + * The `readable.resume()` method has no effect if there is a `'readable'`event listener. + * @since v0.9.4 + */ + resume(): this; + /** + * The `readable.isPaused()` method returns the current operating state of the`Readable`. This is used primarily by the mechanism that underlies the`readable.pipe()` method. In most + * typical cases, there will be no reason to + * use this method directly. + * + * ```js + * const readable = new stream.Readable(); + * + * readable.isPaused(); // === false + * readable.pause(); + * readable.isPaused(); // === true + * readable.resume(); + * readable.isPaused(); // === false + * ``` + * @since v0.11.14 + */ + isPaused(): boolean; + /** + * The `readable.unpipe()` method detaches a `Writable` stream previously attached + * using the {@link pipe} method. + * + * If the `destination` is not specified, then _all_ pipes are detached. + * + * If the `destination` is specified, but no pipe is set up for it, then + * the method does nothing. + * + * ```js + * const fs = require('node:fs'); + * const readable = getReadableStreamSomehow(); + * const writable = fs.createWriteStream('file.txt'); + * // All the data from readable goes into 'file.txt', + * // but only for the first second. + * readable.pipe(writable); + * setTimeout(() => { + * console.log('Stop writing to file.txt.'); + * readable.unpipe(writable); + * console.log('Manually close the file stream.'); + * writable.end(); + * }, 1000); + * ``` + * @since v0.9.4 + * @param destination Optional specific stream to unpipe + */ + unpipe(destination?: NodeJS.WritableStream): this; + /** + * Passing `chunk` as `null` signals the end of the stream (EOF) and behaves the + * same as `readable.push(null)`, after which no more data can be written. The EOF + * signal is put at the end of the buffer and any buffered data will still be + * flushed. + * + * The `readable.unshift()` method pushes a chunk of data back into the internal + * buffer. This is useful in certain situations where a stream is being consumed by + * code that needs to "un-consume" some amount of data that it has optimistically + * pulled out of the source, so that the data can be passed on to some other party. + * + * The `stream.unshift(chunk)` method cannot be called after the `'end'` event + * has been emitted or a runtime error will be thrown. + * + * Developers using `stream.unshift()` often should consider switching to + * use of a `Transform` stream instead. See the `API for stream implementers` section for more information. + * + * ```js + * // Pull off a header delimited by \n\n. + * // Use unshift() if we get too much. + * // Call the callback with (error, header, stream). + * const { StringDecoder } = require('node:string_decoder'); + * function parseHeader(stream, callback) { + * stream.on('error', callback); + * stream.on('readable', onReadable); + * const decoder = new StringDecoder('utf8'); + * let header = ''; + * function onReadable() { + * let chunk; + * while (null !== (chunk = stream.read())) { + * const str = decoder.write(chunk); + * if (str.includes('\n\n')) { + * // Found the header boundary. + * const split = str.split(/\n\n/); + * header += split.shift(); + * const remaining = split.join('\n\n'); + * const buf = Buffer.from(remaining, 'utf8'); + * stream.removeListener('error', callback); + * // Remove the 'readable' listener before unshifting. + * stream.removeListener('readable', onReadable); + * if (buf.length) + * stream.unshift(buf); + * // Now the body of the message can be read from the stream. + * callback(null, header, stream); + * return; + * } + * // Still reading the header. + * header += str; + * } + * } + * } + * ``` + * + * Unlike {@link push}, `stream.unshift(chunk)` will not + * end the reading process by resetting the internal reading state of the stream. + * This can cause unexpected results if `readable.unshift()` is called during a + * read (i.e. from within a {@link _read} implementation on a + * custom stream). Following the call to `readable.unshift()` with an immediate {@link push} will reset the reading state appropriately, + * however it is best to simply avoid calling `readable.unshift()` while in the + * process of performing a read. + * @since v0.9.11 + * @param chunk Chunk of data to unshift onto the read queue. For streams not operating in object mode, `chunk` must be a string, `Buffer`, `Uint8Array`, or `null`. For object mode + * streams, `chunk` may be any JavaScript value. + * @param encoding Encoding of string chunks. Must be a valid `Buffer` encoding, such as `'utf8'` or `'ascii'`. + */ + unshift(chunk: any, encoding?: BufferEncoding): void; + /** + * Prior to Node.js 0.10, streams did not implement the entire `node:stream`module API as it is currently defined. (See `Compatibility` for more + * information.) + * + * When using an older Node.js library that emits `'data'` events and has a {@link pause} method that is advisory only, the`readable.wrap()` method can be used to create a `Readable` + * stream that uses + * the old stream as its data source. + * + * It will rarely be necessary to use `readable.wrap()` but the method has been + * provided as a convenience for interacting with older Node.js applications and + * libraries. + * + * ```js + * const { OldReader } = require('./old-api-module.js'); + * const { Readable } = require('node:stream'); + * const oreader = new OldReader(); + * const myReader = new Readable().wrap(oreader); + * + * myReader.on('readable', () => { + * myReader.read(); // etc. + * }); + * ``` + * @since v0.9.4 + * @param stream An "old style" readable stream + */ + wrap(stream: NodeJS.ReadableStream): this; + push(chunk: any, encoding?: BufferEncoding): boolean; + /** + * The iterator created by this method gives users the option to cancel the destruction + * of the stream if the `for await...of` loop is exited by `return`, `break`, or `throw`, + * or if the iterator should destroy the stream if the stream emitted an error during iteration. + * @since v16.3.0 + * @param options.destroyOnReturn When set to `false`, calling `return` on the async iterator, + * or exiting a `for await...of` iteration using a `break`, `return`, or `throw` will not destroy the stream. + * **Default: `true`**. + */ + iterator(options?: { destroyOnReturn?: boolean }): AsyncIterableIterator; + /** + * This method allows mapping over the stream. The *fn* function will be called for every chunk in the stream. + * If the *fn* function returns a promise - that promise will be `await`ed before being passed to the result stream. + * @since v17.4.0, v16.14.0 + * @param fn a function to map over every chunk in the stream. Async or not. + * @returns a stream mapped with the function *fn*. + */ + map(fn: (data: any, options?: Pick) => any, options?: ArrayOptions): Readable; + /** + * This method allows filtering the stream. For each chunk in the stream the *fn* function will be called + * and if it returns a truthy value, the chunk will be passed to the result stream. + * If the *fn* function returns a promise - that promise will be `await`ed. + * @since v17.4.0, v16.14.0 + * @param fn a function to filter chunks from the stream. Async or not. + * @returns a stream filtered with the predicate *fn*. + */ + filter( + fn: (data: any, options?: Pick) => boolean | Promise, + options?: ArrayOptions, + ): Readable; + /** + * This method allows iterating a stream. For each chunk in the stream the *fn* function will be called. + * If the *fn* function returns a promise - that promise will be `await`ed. + * + * This method is different from `for await...of` loops in that it can optionally process chunks concurrently. + * In addition, a `forEach` iteration can only be stopped by having passed a `signal` option + * and aborting the related AbortController while `for await...of` can be stopped with `break` or `return`. + * In either case the stream will be destroyed. + * + * This method is different from listening to the `'data'` event in that it uses the `readable` event + * in the underlying machinary and can limit the number of concurrent *fn* calls. + * @since v17.5.0 + * @param fn a function to call on each chunk of the stream. Async or not. + * @returns a promise for when the stream has finished. + */ + forEach( + fn: (data: any, options?: Pick) => void | Promise, + options?: ArrayOptions, + ): Promise; + /** + * This method allows easily obtaining the contents of a stream. + * + * As this method reads the entire stream into memory, it negates the benefits of streams. It's intended + * for interoperability and convenience, not as the primary way to consume streams. + * @since v17.5.0 + * @returns a promise containing an array with the contents of the stream. + */ + toArray(options?: Pick): Promise; + /** + * This method is similar to `Array.prototype.some` and calls *fn* on each chunk in the stream + * until the awaited return value is `true` (or any truthy value). Once an *fn* call on a chunk + * `await`ed return value is truthy, the stream is destroyed and the promise is fulfilled with `true`. + * If none of the *fn* calls on the chunks return a truthy value, the promise is fulfilled with `false`. + * @since v17.5.0 + * @param fn a function to call on each chunk of the stream. Async or not. + * @returns a promise evaluating to `true` if *fn* returned a truthy value for at least one of the chunks. + */ + some( + fn: (data: any, options?: Pick) => boolean | Promise, + options?: ArrayOptions, + ): Promise; + /** + * This method is similar to `Array.prototype.find` and calls *fn* on each chunk in the stream + * to find a chunk with a truthy value for *fn*. Once an *fn* call's awaited return value is truthy, + * the stream is destroyed and the promise is fulfilled with value for which *fn* returned a truthy value. + * If all of the *fn* calls on the chunks return a falsy value, the promise is fulfilled with `undefined`. + * @since v17.5.0 + * @param fn a function to call on each chunk of the stream. Async or not. + * @returns a promise evaluating to the first chunk for which *fn* evaluated with a truthy value, + * or `undefined` if no element was found. + */ + find( + fn: (data: any, options?: Pick) => data is T, + options?: ArrayOptions, + ): Promise; + find( + fn: (data: any, options?: Pick) => boolean | Promise, + options?: ArrayOptions, + ): Promise; + /** + * This method is similar to `Array.prototype.every` and calls *fn* on each chunk in the stream + * to check if all awaited return values are truthy value for *fn*. Once an *fn* call on a chunk + * `await`ed return value is falsy, the stream is destroyed and the promise is fulfilled with `false`. + * If all of the *fn* calls on the chunks return a truthy value, the promise is fulfilled with `true`. + * @since v17.5.0 + * @param fn a function to call on each chunk of the stream. Async or not. + * @returns a promise evaluating to `true` if *fn* returned a truthy value for every one of the chunks. + */ + every( + fn: (data: any, options?: Pick) => boolean | Promise, + options?: ArrayOptions, + ): Promise; + /** + * This method returns a new stream by applying the given callback to each chunk of the stream + * and then flattening the result. + * + * It is possible to return a stream or another iterable or async iterable from *fn* and the result streams + * will be merged (flattened) into the returned stream. + * @since v17.5.0 + * @param fn a function to map over every chunk in the stream. May be async. May be a stream or generator. + * @returns a stream flat-mapped with the function *fn*. + */ + flatMap(fn: (data: any, options?: Pick) => any, options?: ArrayOptions): Readable; + /** + * This method returns a new stream with the first *limit* chunks dropped from the start. + * @since v17.5.0 + * @param limit the number of chunks to drop from the readable. + * @returns a stream with *limit* chunks dropped from the start. + */ + drop(limit: number, options?: Pick): Readable; + /** + * This method returns a new stream with the first *limit* chunks. + * @since v17.5.0 + * @param limit the number of chunks to take from the readable. + * @returns a stream with *limit* chunks taken. + */ + take(limit: number, options?: Pick): Readable; + /** + * This method returns a new stream with chunks of the underlying stream paired with a counter + * in the form `[index, chunk]`. The first index value is `0` and it increases by 1 for each chunk produced. + * @since v17.5.0 + * @returns a stream of indexed pairs. + */ + asIndexedPairs(options?: Pick): Readable; + /** + * This method calls *fn* on each chunk of the stream in order, passing it the result from the calculation + * on the previous element. It returns a promise for the final value of the reduction. + * + * If no *initial* value is supplied the first chunk of the stream is used as the initial value. + * If the stream is empty, the promise is rejected with a `TypeError` with the `ERR_INVALID_ARGS` code property. + * + * The reducer function iterates the stream element-by-element which means that there is no *concurrency* parameter + * or parallelism. To perform a reduce concurrently, you can extract the async function to `readable.map` method. + * @since v17.5.0 + * @param fn a reducer function to call over every chunk in the stream. Async or not. + * @param initial the initial value to use in the reduction. + * @returns a promise for the final value of the reduction. + */ + reduce( + fn: (previous: any, data: any, options?: Pick) => T, + initial?: undefined, + options?: Pick, + ): Promise; + reduce( + fn: (previous: T, data: any, options?: Pick) => T, + initial: T, + options?: Pick, + ): Promise; + _destroy(error: Error | null, callback: (error?: Error | null) => void): void; + /** + * Destroy the stream. Optionally emit an `'error'` event, and emit a `'close'`event (unless `emitClose` is set to `false`). After this call, the readable + * stream will release any internal resources and subsequent calls to `push()`will be ignored. + * + * Once `destroy()` has been called any further calls will be a no-op and no + * further errors except from `_destroy()` may be emitted as `'error'`. + * + * Implementors should not override this method, but instead implement `readable._destroy()`. + * @since v8.0.0 + * @param error Error which will be passed as payload in `'error'` event + */ + destroy(error?: Error): this; + /** + * Event emitter + * The defined events on documents including: + * 1. close + * 2. data + * 3. end + * 4. error + * 5. pause + * 6. readable + * 7. resume + */ + addListener(event: "close", listener: () => void): this; + addListener(event: "data", listener: (chunk: any) => void): this; + addListener(event: "end", listener: () => void): this; + addListener(event: "error", listener: (err: Error) => void): this; + addListener(event: "pause", listener: () => void): this; + addListener(event: "readable", listener: () => void): this; + addListener(event: "resume", listener: () => void): this; + addListener(event: string | symbol, listener: (...args: any[]) => void): this; + emit(event: "close"): boolean; + emit(event: "data", chunk: any): boolean; + emit(event: "end"): boolean; + emit(event: "error", err: Error): boolean; + emit(event: "pause"): boolean; + emit(event: "readable"): boolean; + emit(event: "resume"): boolean; + emit(event: string | symbol, ...args: any[]): boolean; + on(event: "close", listener: () => void): this; + on(event: "data", listener: (chunk: any) => void): this; + on(event: "end", listener: () => void): this; + on(event: "error", listener: (err: Error) => void): this; + on(event: "pause", listener: () => void): this; + on(event: "readable", listener: () => void): this; + on(event: "resume", listener: () => void): this; + on(event: string | symbol, listener: (...args: any[]) => void): this; + once(event: "close", listener: () => void): this; + once(event: "data", listener: (chunk: any) => void): this; + once(event: "end", listener: () => void): this; + once(event: "error", listener: (err: Error) => void): this; + once(event: "pause", listener: () => void): this; + once(event: "readable", listener: () => void): this; + once(event: "resume", listener: () => void): this; + once(event: string | symbol, listener: (...args: any[]) => void): this; + prependListener(event: "close", listener: () => void): this; + prependListener(event: "data", listener: (chunk: any) => void): this; + prependListener(event: "end", listener: () => void): this; + prependListener(event: "error", listener: (err: Error) => void): this; + prependListener(event: "pause", listener: () => void): this; + prependListener(event: "readable", listener: () => void): this; + prependListener(event: "resume", listener: () => void): this; + prependListener(event: string | symbol, listener: (...args: any[]) => void): this; + prependOnceListener(event: "close", listener: () => void): this; + prependOnceListener(event: "data", listener: (chunk: any) => void): this; + prependOnceListener(event: "end", listener: () => void): this; + prependOnceListener(event: "error", listener: (err: Error) => void): this; + prependOnceListener(event: "pause", listener: () => void): this; + prependOnceListener(event: "readable", listener: () => void): this; + prependOnceListener(event: "resume", listener: () => void): this; + prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this; + removeListener(event: "close", listener: () => void): this; + removeListener(event: "data", listener: (chunk: any) => void): this; + removeListener(event: "end", listener: () => void): this; + removeListener(event: "error", listener: (err: Error) => void): this; + removeListener(event: "pause", listener: () => void): this; + removeListener(event: "readable", listener: () => void): this; + removeListener(event: "resume", listener: () => void): this; + removeListener(event: string | symbol, listener: (...args: any[]) => void): this; + [Symbol.asyncIterator](): AsyncIterableIterator; + /** + * Calls `readable.destroy()` with an `AbortError` and returns a promise that fulfills when the stream is finished. + * @since v20.4.0 + */ + [Symbol.asyncDispose](): Promise; + } + import WritableOptions = internal.WritableOptions; + class WritableBase extends Stream implements NodeJS.WritableStream { + /** + * Is `true` if it is safe to call `writable.write()`, which means + * the stream has not been destroyed, errored, or ended. + * @since v11.4.0 + */ + readonly writable: boolean; + /** + * Is `true` after `writable.end()` has been called. This property + * does not indicate whether the data has been flushed, for this use `writable.writableFinished` instead. + * @since v12.9.0 + */ + readonly writableEnded: boolean; + /** + * Is set to `true` immediately before the `'finish'` event is emitted. + * @since v12.6.0 + */ + readonly writableFinished: boolean; + /** + * Return the value of `highWaterMark` passed when creating this `Writable`. + * @since v9.3.0 + */ + readonly writableHighWaterMark: number; + /** + * This property contains the number of bytes (or objects) in the queue + * ready to be written. The value provides introspection data regarding + * the status of the `highWaterMark`. + * @since v9.4.0 + */ + readonly writableLength: number; + /** + * Getter for the property `objectMode` of a given `Writable` stream. + * @since v12.3.0 + */ + readonly writableObjectMode: boolean; + /** + * Number of times `writable.uncork()` needs to be + * called in order to fully uncork the stream. + * @since v13.2.0, v12.16.0 + */ + readonly writableCorked: number; + /** + * Is `true` after `writable.destroy()` has been called. + * @since v8.0.0 + */ + destroyed: boolean; + /** + * Is `true` after `'close'` has been emitted. + * @since v18.0.0 + */ + readonly closed: boolean; + /** + * Returns error if the stream has been destroyed with an error. + * @since v18.0.0 + */ + readonly errored: Error | null; + /** + * Is `true` if the stream's buffer has been full and stream will emit `'drain'`. + * @since v15.2.0, v14.17.0 + */ + readonly writableNeedDrain: boolean; + constructor(opts?: WritableOptions); + _write(chunk: any, encoding: BufferEncoding, callback: (error?: Error | null) => void): void; + _writev?( + chunks: Array<{ + chunk: any; + encoding: BufferEncoding; + }>, + callback: (error?: Error | null) => void, + ): void; + _construct?(callback: (error?: Error | null) => void): void; + _destroy(error: Error | null, callback: (error?: Error | null) => void): void; + _final(callback: (error?: Error | null) => void): void; + /** + * The `writable.write()` method writes some data to the stream, and calls the + * supplied `callback` once the data has been fully handled. If an error + * occurs, the `callback` will be called with the error as its + * first argument. The `callback` is called asynchronously and before `'error'` is + * emitted. + * + * The return value is `true` if the internal buffer is less than the`highWaterMark` configured when the stream was created after admitting `chunk`. + * If `false` is returned, further attempts to write data to the stream should + * stop until the `'drain'` event is emitted. + * + * While a stream is not draining, calls to `write()` will buffer `chunk`, and + * return false. Once all currently buffered chunks are drained (accepted for + * delivery by the operating system), the `'drain'` event will be emitted. + * Once `write()` returns false, do not write more chunks + * until the `'drain'` event is emitted. While calling `write()` on a stream that + * is not draining is allowed, Node.js will buffer all written chunks until + * maximum memory usage occurs, at which point it will abort unconditionally. + * Even before it aborts, high memory usage will cause poor garbage collector + * performance and high RSS (which is not typically released back to the system, + * even after the memory is no longer required). Since TCP sockets may never + * drain if the remote peer does not read the data, writing a socket that is + * not draining may lead to a remotely exploitable vulnerability. + * + * Writing data while the stream is not draining is particularly + * problematic for a `Transform`, because the `Transform` streams are paused + * by default until they are piped or a `'data'` or `'readable'` event handler + * is added. + * + * If the data to be written can be generated or fetched on demand, it is + * recommended to encapsulate the logic into a `Readable` and use {@link pipe}. However, if calling `write()` is preferred, it is + * possible to respect backpressure and avoid memory issues using the `'drain'` event: + * + * ```js + * function write(data, cb) { + * if (!stream.write(data)) { + * stream.once('drain', cb); + * } else { + * process.nextTick(cb); + * } + * } + * + * // Wait for cb to be called before doing any other write. + * write('hello', () => { + * console.log('Write completed, do more writes now.'); + * }); + * ``` + * + * A `Writable` stream in object mode will always ignore the `encoding` argument. + * @since v0.9.4 + * @param chunk Optional data to write. For streams not operating in object mode, `chunk` must be a string, `Buffer` or `Uint8Array`. For object mode streams, `chunk` may be any + * JavaScript value other than `null`. + * @param [encoding='utf8'] The encoding, if `chunk` is a string. + * @param callback Callback for when this chunk of data is flushed. + * @return `false` if the stream wishes for the calling code to wait for the `'drain'` event to be emitted before continuing to write additional data; otherwise `true`. + */ + write(chunk: any, callback?: (error: Error | null | undefined) => void): boolean; + write(chunk: any, encoding: BufferEncoding, callback?: (error: Error | null | undefined) => void): boolean; + /** + * The `writable.setDefaultEncoding()` method sets the default `encoding` for a `Writable` stream. + * @since v0.11.15 + * @param encoding The new default encoding + */ + setDefaultEncoding(encoding: BufferEncoding): this; + /** + * Calling the `writable.end()` method signals that no more data will be written + * to the `Writable`. The optional `chunk` and `encoding` arguments allow one + * final additional chunk of data to be written immediately before closing the + * stream. + * + * Calling the {@link write} method after calling {@link end} will raise an error. + * + * ```js + * // Write 'hello, ' and then end with 'world!'. + * const fs = require('node:fs'); + * const file = fs.createWriteStream('example.txt'); + * file.write('hello, '); + * file.end('world!'); + * // Writing more now is not allowed! + * ``` + * @since v0.9.4 + * @param chunk Optional data to write. For streams not operating in object mode, `chunk` must be a string, `Buffer` or `Uint8Array`. For object mode streams, `chunk` may be any + * JavaScript value other than `null`. + * @param encoding The encoding if `chunk` is a string + * @param callback Callback for when the stream is finished. + */ + end(cb?: () => void): this; + end(chunk: any, cb?: () => void): this; + end(chunk: any, encoding: BufferEncoding, cb?: () => void): this; + /** + * The `writable.cork()` method forces all written data to be buffered in memory. + * The buffered data will be flushed when either the {@link uncork} or {@link end} methods are called. + * + * The primary intent of `writable.cork()` is to accommodate a situation in which + * several small chunks are written to the stream in rapid succession. Instead of + * immediately forwarding them to the underlying destination, `writable.cork()`buffers all the chunks until `writable.uncork()` is called, which will pass them + * all to `writable._writev()`, if present. This prevents a head-of-line blocking + * situation where data is being buffered while waiting for the first small chunk + * to be processed. However, use of `writable.cork()` without implementing`writable._writev()` may have an adverse effect on throughput. + * + * See also: `writable.uncork()`, `writable._writev()`. + * @since v0.11.2 + */ + cork(): void; + /** + * The `writable.uncork()` method flushes all data buffered since {@link cork} was called. + * + * When using `writable.cork()` and `writable.uncork()` to manage the buffering + * of writes to a stream, defer calls to `writable.uncork()` using`process.nextTick()`. Doing so allows batching of all`writable.write()` calls that occur within a given Node.js event + * loop phase. + * + * ```js + * stream.cork(); + * stream.write('some '); + * stream.write('data '); + * process.nextTick(() => stream.uncork()); + * ``` + * + * If the `writable.cork()` method is called multiple times on a stream, the + * same number of calls to `writable.uncork()` must be called to flush the buffered + * data. + * + * ```js + * stream.cork(); + * stream.write('some '); + * stream.cork(); + * stream.write('data '); + * process.nextTick(() => { + * stream.uncork(); + * // The data will not be flushed until uncork() is called a second time. + * stream.uncork(); + * }); + * ``` + * + * See also: `writable.cork()`. + * @since v0.11.2 + */ + uncork(): void; + /** + * Destroy the stream. Optionally emit an `'error'` event, and emit a `'close'`event (unless `emitClose` is set to `false`). After this call, the writable + * stream has ended and subsequent calls to `write()` or `end()` will result in + * an `ERR_STREAM_DESTROYED` error. + * This is a destructive and immediate way to destroy a stream. Previous calls to`write()` may not have drained, and may trigger an `ERR_STREAM_DESTROYED` error. + * Use `end()` instead of destroy if data should flush before close, or wait for + * the `'drain'` event before destroying the stream. + * + * Once `destroy()` has been called any further calls will be a no-op and no + * further errors except from `_destroy()` may be emitted as `'error'`. + * + * Implementors should not override this method, + * but instead implement `writable._destroy()`. + * @since v8.0.0 + * @param error Optional, an error to emit with `'error'` event. + */ + destroy(error?: Error): this; + /** + * Event emitter + * The defined events on documents including: + * 1. close + * 2. drain + * 3. error + * 4. finish + * 5. pipe + * 6. unpipe + */ + addListener(event: "close", listener: () => void): this; + addListener(event: "drain", listener: () => void): this; + addListener(event: "error", listener: (err: Error) => void): this; + addListener(event: "finish", listener: () => void): this; + addListener(event: "pipe", listener: (src: Readable) => void): this; + addListener(event: "unpipe", listener: (src: Readable) => void): this; + addListener(event: string | symbol, listener: (...args: any[]) => void): this; + emit(event: "close"): boolean; + emit(event: "drain"): boolean; + emit(event: "error", err: Error): boolean; + emit(event: "finish"): boolean; + emit(event: "pipe", src: Readable): boolean; + emit(event: "unpipe", src: Readable): boolean; + emit(event: string | symbol, ...args: any[]): boolean; + on(event: "close", listener: () => void): this; + on(event: "drain", listener: () => void): this; + on(event: "error", listener: (err: Error) => void): this; + on(event: "finish", listener: () => void): this; + on(event: "pipe", listener: (src: Readable) => void): this; + on(event: "unpipe", listener: (src: Readable) => void): this; + on(event: string | symbol, listener: (...args: any[]) => void): this; + once(event: "close", listener: () => void): this; + once(event: "drain", listener: () => void): this; + once(event: "error", listener: (err: Error) => void): this; + once(event: "finish", listener: () => void): this; + once(event: "pipe", listener: (src: Readable) => void): this; + once(event: "unpipe", listener: (src: Readable) => void): this; + once(event: string | symbol, listener: (...args: any[]) => void): this; + prependListener(event: "close", listener: () => void): this; + prependListener(event: "drain", listener: () => void): this; + prependListener(event: "error", listener: (err: Error) => void): this; + prependListener(event: "finish", listener: () => void): this; + prependListener(event: "pipe", listener: (src: Readable) => void): this; + prependListener(event: "unpipe", listener: (src: Readable) => void): this; + prependListener(event: string | symbol, listener: (...args: any[]) => void): this; + prependOnceListener(event: "close", listener: () => void): this; + prependOnceListener(event: "drain", listener: () => void): this; + prependOnceListener(event: "error", listener: (err: Error) => void): this; + prependOnceListener(event: "finish", listener: () => void): this; + prependOnceListener(event: "pipe", listener: (src: Readable) => void): this; + prependOnceListener(event: "unpipe", listener: (src: Readable) => void): this; + prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this; + removeListener(event: "close", listener: () => void): this; + removeListener(event: "drain", listener: () => void): this; + removeListener(event: "error", listener: (err: Error) => void): this; + removeListener(event: "finish", listener: () => void): this; + removeListener(event: "pipe", listener: (src: Readable) => void): this; + removeListener(event: "unpipe", listener: (src: Readable) => void): this; + removeListener(event: string | symbol, listener: (...args: any[]) => void): this; + } + namespace internal { + class Stream extends internal { + constructor(opts?: ReadableOptions); + } + interface StreamOptions extends Abortable { + emitClose?: boolean | undefined; + highWaterMark?: number | undefined; + objectMode?: boolean | undefined; + construct?(this: T, callback: (error?: Error | null) => void): void; + destroy?(this: T, error: Error | null, callback: (error: Error | null) => void): void; + autoDestroy?: boolean | undefined; + } + interface ReadableOptions extends StreamOptions { + encoding?: BufferEncoding | undefined; + read?(this: Readable, size: number): void; + } + /** + * @since v0.9.4 + */ + class Readable extends ReadableBase { + /** + * A utility method for creating a `Readable` from a web `ReadableStream`. + * @since v17.0.0 + * @experimental + */ + static fromWeb( + readableStream: streamWeb.ReadableStream, + options?: Pick, + ): Readable; + /** + * A utility method for creating a web `ReadableStream` from a `Readable`. + * @since v17.0.0 + * @experimental + */ + static toWeb(streamReadable: Readable): streamWeb.ReadableStream; + } + interface WritableOptions extends StreamOptions { + decodeStrings?: boolean | undefined; + defaultEncoding?: BufferEncoding | undefined; + write?( + this: Writable, + chunk: any, + encoding: BufferEncoding, + callback: (error?: Error | null) => void, + ): void; + writev?( + this: Writable, + chunks: Array<{ + chunk: any; + encoding: BufferEncoding; + }>, + callback: (error?: Error | null) => void, + ): void; + final?(this: Writable, callback: (error?: Error | null) => void): void; + } + /** + * @since v0.9.4 + */ + class Writable extends WritableBase { + /** + * A utility method for creating a `Writable` from a web `WritableStream`. + * @since v17.0.0 + * @experimental + */ + static fromWeb( + writableStream: streamWeb.WritableStream, + options?: Pick, + ): Writable; + /** + * A utility method for creating a web `WritableStream` from a `Writable`. + * @since v17.0.0 + * @experimental + */ + static toWeb(streamWritable: Writable): streamWeb.WritableStream; + } + interface DuplexOptions extends ReadableOptions, WritableOptions { + allowHalfOpen?: boolean | undefined; + readableObjectMode?: boolean | undefined; + writableObjectMode?: boolean | undefined; + readableHighWaterMark?: number | undefined; + writableHighWaterMark?: number | undefined; + writableCorked?: number | undefined; + construct?(this: Duplex, callback: (error?: Error | null) => void): void; + read?(this: Duplex, size: number): void; + write?(this: Duplex, chunk: any, encoding: BufferEncoding, callback: (error?: Error | null) => void): void; + writev?( + this: Duplex, + chunks: Array<{ + chunk: any; + encoding: BufferEncoding; + }>, + callback: (error?: Error | null) => void, + ): void; + final?(this: Duplex, callback: (error?: Error | null) => void): void; + destroy?(this: Duplex, error: Error | null, callback: (error: Error | null) => void): void; + } + /** + * Duplex streams are streams that implement both the `Readable` and `Writable` interfaces. + * + * Examples of `Duplex` streams include: + * + * * `TCP sockets` + * * `zlib streams` + * * `crypto streams` + * @since v0.9.4 + */ + class Duplex extends ReadableBase implements WritableBase { + readonly writable: boolean; + readonly writableEnded: boolean; + readonly writableFinished: boolean; + readonly writableHighWaterMark: number; + readonly writableLength: number; + readonly writableObjectMode: boolean; + readonly writableCorked: number; + readonly writableNeedDrain: boolean; + readonly closed: boolean; + readonly errored: Error | null; + /** + * If `false` then the stream will automatically end the writable side when the + * readable side ends. Set initially by the `allowHalfOpen` constructor option, + * which defaults to `true`. + * + * This can be changed manually to change the half-open behavior of an existing`Duplex` stream instance, but must be changed before the `'end'` event is + * emitted. + * @since v0.9.4 + */ + allowHalfOpen: boolean; + constructor(opts?: DuplexOptions); + /** + * A utility method for creating duplex streams. + * + * - `Stream` converts writable stream into writable `Duplex` and readable stream + * to `Duplex`. + * - `Blob` converts into readable `Duplex`. + * - `string` converts into readable `Duplex`. + * - `ArrayBuffer` converts into readable `Duplex`. + * - `AsyncIterable` converts into a readable `Duplex`. Cannot yield `null`. + * - `AsyncGeneratorFunction` converts into a readable/writable transform + * `Duplex`. Must take a source `AsyncIterable` as first parameter. Cannot yield + * `null`. + * - `AsyncFunction` converts into a writable `Duplex`. Must return + * either `null` or `undefined` + * - `Object ({ writable, readable })` converts `readable` and + * `writable` into `Stream` and then combines them into `Duplex` where the + * `Duplex` will write to the `writable` and read from the `readable`. + * - `Promise` converts into readable `Duplex`. Value `null` is ignored. + * + * @since v16.8.0 + */ + static from( + src: + | Stream + | NodeBlob + | ArrayBuffer + | string + | Iterable + | AsyncIterable + | AsyncGeneratorFunction + | Promise + | Object, + ): Duplex; + _write(chunk: any, encoding: BufferEncoding, callback: (error?: Error | null) => void): void; + _writev?( + chunks: Array<{ + chunk: any; + encoding: BufferEncoding; + }>, + callback: (error?: Error | null) => void, + ): void; + _destroy(error: Error | null, callback: (error: Error | null) => void): void; + _final(callback: (error?: Error | null) => void): void; + write(chunk: any, encoding?: BufferEncoding, cb?: (error: Error | null | undefined) => void): boolean; + write(chunk: any, cb?: (error: Error | null | undefined) => void): boolean; + setDefaultEncoding(encoding: BufferEncoding): this; + end(cb?: () => void): this; + end(chunk: any, cb?: () => void): this; + end(chunk: any, encoding?: BufferEncoding, cb?: () => void): this; + cork(): void; + uncork(): void; + /** + * A utility method for creating a web `ReadableStream` and `WritableStream` from a `Duplex`. + * @since v17.0.0 + * @experimental + */ + static toWeb(streamDuplex: Duplex): { + readable: streamWeb.ReadableStream; + writable: streamWeb.WritableStream; + }; + /** + * A utility method for creating a `Duplex` from a web `ReadableStream` and `WritableStream`. + * @since v17.0.0 + * @experimental + */ + static fromWeb( + duplexStream: { + readable: streamWeb.ReadableStream; + writable: streamWeb.WritableStream; + }, + options?: Pick< + DuplexOptions, + "allowHalfOpen" | "decodeStrings" | "encoding" | "highWaterMark" | "objectMode" | "signal" + >, + ): Duplex; + /** + * Event emitter + * The defined events on documents including: + * 1. close + * 2. data + * 3. drain + * 4. end + * 5. error + * 6. finish + * 7. pause + * 8. pipe + * 9. readable + * 10. resume + * 11. unpipe + */ + addListener(event: "close", listener: () => void): this; + addListener(event: "data", listener: (chunk: any) => void): this; + addListener(event: "drain", listener: () => void): this; + addListener(event: "end", listener: () => void): this; + addListener(event: "error", listener: (err: Error) => void): this; + addListener(event: "finish", listener: () => void): this; + addListener(event: "pause", listener: () => void): this; + addListener(event: "pipe", listener: (src: Readable) => void): this; + addListener(event: "readable", listener: () => void): this; + addListener(event: "resume", listener: () => void): this; + addListener(event: "unpipe", listener: (src: Readable) => void): this; + addListener(event: string | symbol, listener: (...args: any[]) => void): this; + emit(event: "close"): boolean; + emit(event: "data", chunk: any): boolean; + emit(event: "drain"): boolean; + emit(event: "end"): boolean; + emit(event: "error", err: Error): boolean; + emit(event: "finish"): boolean; + emit(event: "pause"): boolean; + emit(event: "pipe", src: Readable): boolean; + emit(event: "readable"): boolean; + emit(event: "resume"): boolean; + emit(event: "unpipe", src: Readable): boolean; + emit(event: string | symbol, ...args: any[]): boolean; + on(event: "close", listener: () => void): this; + on(event: "data", listener: (chunk: any) => void): this; + on(event: "drain", listener: () => void): this; + on(event: "end", listener: () => void): this; + on(event: "error", listener: (err: Error) => void): this; + on(event: "finish", listener: () => void): this; + on(event: "pause", listener: () => void): this; + on(event: "pipe", listener: (src: Readable) => void): this; + on(event: "readable", listener: () => void): this; + on(event: "resume", listener: () => void): this; + on(event: "unpipe", listener: (src: Readable) => void): this; + on(event: string | symbol, listener: (...args: any[]) => void): this; + once(event: "close", listener: () => void): this; + once(event: "data", listener: (chunk: any) => void): this; + once(event: "drain", listener: () => void): this; + once(event: "end", listener: () => void): this; + once(event: "error", listener: (err: Error) => void): this; + once(event: "finish", listener: () => void): this; + once(event: "pause", listener: () => void): this; + once(event: "pipe", listener: (src: Readable) => void): this; + once(event: "readable", listener: () => void): this; + once(event: "resume", listener: () => void): this; + once(event: "unpipe", listener: (src: Readable) => void): this; + once(event: string | symbol, listener: (...args: any[]) => void): this; + prependListener(event: "close", listener: () => void): this; + prependListener(event: "data", listener: (chunk: any) => void): this; + prependListener(event: "drain", listener: () => void): this; + prependListener(event: "end", listener: () => void): this; + prependListener(event: "error", listener: (err: Error) => void): this; + prependListener(event: "finish", listener: () => void): this; + prependListener(event: "pause", listener: () => void): this; + prependListener(event: "pipe", listener: (src: Readable) => void): this; + prependListener(event: "readable", listener: () => void): this; + prependListener(event: "resume", listener: () => void): this; + prependListener(event: "unpipe", listener: (src: Readable) => void): this; + prependListener(event: string | symbol, listener: (...args: any[]) => void): this; + prependOnceListener(event: "close", listener: () => void): this; + prependOnceListener(event: "data", listener: (chunk: any) => void): this; + prependOnceListener(event: "drain", listener: () => void): this; + prependOnceListener(event: "end", listener: () => void): this; + prependOnceListener(event: "error", listener: (err: Error) => void): this; + prependOnceListener(event: "finish", listener: () => void): this; + prependOnceListener(event: "pause", listener: () => void): this; + prependOnceListener(event: "pipe", listener: (src: Readable) => void): this; + prependOnceListener(event: "readable", listener: () => void): this; + prependOnceListener(event: "resume", listener: () => void): this; + prependOnceListener(event: "unpipe", listener: (src: Readable) => void): this; + prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this; + removeListener(event: "close", listener: () => void): this; + removeListener(event: "data", listener: (chunk: any) => void): this; + removeListener(event: "drain", listener: () => void): this; + removeListener(event: "end", listener: () => void): this; + removeListener(event: "error", listener: (err: Error) => void): this; + removeListener(event: "finish", listener: () => void): this; + removeListener(event: "pause", listener: () => void): this; + removeListener(event: "pipe", listener: (src: Readable) => void): this; + removeListener(event: "readable", listener: () => void): this; + removeListener(event: "resume", listener: () => void): this; + removeListener(event: "unpipe", listener: (src: Readable) => void): this; + removeListener(event: string | symbol, listener: (...args: any[]) => void): this; + } + type TransformCallback = (error?: Error | null, data?: any) => void; + interface TransformOptions extends DuplexOptions { + construct?(this: Transform, callback: (error?: Error | null) => void): void; + read?(this: Transform, size: number): void; + write?( + this: Transform, + chunk: any, + encoding: BufferEncoding, + callback: (error?: Error | null) => void, + ): void; + writev?( + this: Transform, + chunks: Array<{ + chunk: any; + encoding: BufferEncoding; + }>, + callback: (error?: Error | null) => void, + ): void; + final?(this: Transform, callback: (error?: Error | null) => void): void; + destroy?(this: Transform, error: Error | null, callback: (error: Error | null) => void): void; + transform?(this: Transform, chunk: any, encoding: BufferEncoding, callback: TransformCallback): void; + flush?(this: Transform, callback: TransformCallback): void; + } + /** + * Transform streams are `Duplex` streams where the output is in some way + * related to the input. Like all `Duplex` streams, `Transform` streams + * implement both the `Readable` and `Writable` interfaces. + * + * Examples of `Transform` streams include: + * + * * `zlib streams` + * * `crypto streams` + * @since v0.9.4 + */ + class Transform extends Duplex { + constructor(opts?: TransformOptions); + _transform(chunk: any, encoding: BufferEncoding, callback: TransformCallback): void; + _flush(callback: TransformCallback): void; + } + /** + * The `stream.PassThrough` class is a trivial implementation of a `Transform` stream that simply passes the input bytes across to the output. Its purpose is + * primarily for examples and testing, but there are some use cases where`stream.PassThrough` is useful as a building block for novel sorts of streams. + */ + class PassThrough extends Transform {} + /** + * A stream to attach a signal to. + * + * Attaches an AbortSignal to a readable or writeable stream. This lets code + * control stream destruction using an `AbortController`. + * + * Calling `abort` on the `AbortController` corresponding to the passed`AbortSignal` will behave the same way as calling `.destroy(new AbortError())`on the stream, and `controller.error(new + * AbortError())` for webstreams. + * + * ```js + * const fs = require('node:fs'); + * + * const controller = new AbortController(); + * const read = addAbortSignal( + * controller.signal, + * fs.createReadStream(('object.json')), + * ); + * // Later, abort the operation closing the stream + * controller.abort(); + * ``` + * + * Or using an `AbortSignal` with a readable stream as an async iterable: + * + * ```js + * const controller = new AbortController(); + * setTimeout(() => controller.abort(), 10_000); // set a timeout + * const stream = addAbortSignal( + * controller.signal, + * fs.createReadStream(('object.json')), + * ); + * (async () => { + * try { + * for await (const chunk of stream) { + * await process(chunk); + * } + * } catch (e) { + * if (e.name === 'AbortError') { + * // The operation was cancelled + * } else { + * throw e; + * } + * } + * })(); + * ``` + * + * Or using an `AbortSignal` with a ReadableStream: + * + * ```js + * const controller = new AbortController(); + * const rs = new ReadableStream({ + * start(controller) { + * controller.enqueue('hello'); + * controller.enqueue('world'); + * controller.close(); + * }, + * }); + * + * addAbortSignal(controller.signal, rs); + * + * finished(rs, (err) => { + * if (err) { + * if (err.name === 'AbortError') { + * // The operation was cancelled + * } + * } + * }); + * + * const reader = rs.getReader(); + * + * reader.read().then(({ value, done }) => { + * console.log(value); // hello + * console.log(done); // false + * controller.abort(); + * }); + * ``` + * @since v15.4.0 + * @param signal A signal representing possible cancellation + * @param stream a stream to attach a signal to + */ + function addAbortSignal(signal: AbortSignal, stream: T): T; + /** + * Returns the default highWaterMark used by streams. + * Defaults to `16384` (16 KiB), or `16` for `objectMode`. + * @since v19.9.0 + * @param objectMode + */ + function getDefaultHighWaterMark(objectMode: boolean): number; + /** + * Sets the default highWaterMark used by streams. + * @since v19.9.0 + * @param objectMode + * @param value highWaterMark value + */ + function setDefaultHighWaterMark(objectMode: boolean, value: number): void; + interface FinishedOptions extends Abortable { + error?: boolean | undefined; + readable?: boolean | undefined; + writable?: boolean | undefined; + } + /** + * A readable and/or writable stream/webstream. + * + * A function to get notified when a stream is no longer readable, writable + * or has experienced an error or a premature close event. + * + * ```js + * const { finished } = require('node:stream'); + * const fs = require('node:fs'); + * + * const rs = fs.createReadStream('archive.tar'); + * + * finished(rs, (err) => { + * if (err) { + * console.error('Stream failed.', err); + * } else { + * console.log('Stream is done reading.'); + * } + * }); + * + * rs.resume(); // Drain the stream. + * ``` + * + * Especially useful in error handling scenarios where a stream is destroyed + * prematurely (like an aborted HTTP request), and will not emit `'end'`or `'finish'`. + * + * The `finished` API provides `promise version`. + * + * `stream.finished()` leaves dangling event listeners (in particular`'error'`, `'end'`, `'finish'` and `'close'`) after `callback` has been + * invoked. The reason for this is so that unexpected `'error'` events (due to + * incorrect stream implementations) do not cause unexpected crashes. + * If this is unwanted behavior then the returned cleanup function needs to be + * invoked in the callback: + * + * ```js + * const cleanup = finished(rs, (err) => { + * cleanup(); + * // ... + * }); + * ``` + * @since v10.0.0 + * @param stream A readable and/or writable stream. + * @param callback A callback function that takes an optional error argument. + * @return A cleanup function which removes all registered listeners. + */ + function finished( + stream: NodeJS.ReadableStream | NodeJS.WritableStream | NodeJS.ReadWriteStream, + options: FinishedOptions, + callback: (err?: NodeJS.ErrnoException | null) => void, + ): () => void; + function finished( + stream: NodeJS.ReadableStream | NodeJS.WritableStream | NodeJS.ReadWriteStream, + callback: (err?: NodeJS.ErrnoException | null) => void, + ): () => void; + namespace finished { + function __promisify__( + stream: NodeJS.ReadableStream | NodeJS.WritableStream | NodeJS.ReadWriteStream, + options?: FinishedOptions, + ): Promise; + } + type PipelineSourceFunction = () => Iterable | AsyncIterable; + type PipelineSource = Iterable | AsyncIterable | NodeJS.ReadableStream | PipelineSourceFunction; + type PipelineTransform, U> = + | NodeJS.ReadWriteStream + | (( + source: S extends (...args: any[]) => Iterable | AsyncIterable ? AsyncIterable + : S, + ) => AsyncIterable); + type PipelineTransformSource = PipelineSource | PipelineTransform; + type PipelineDestinationIterableFunction = (source: AsyncIterable) => AsyncIterable; + type PipelineDestinationPromiseFunction = (source: AsyncIterable) => Promise

; + type PipelineDestination, P> = S extends + PipelineTransformSource ? + | NodeJS.WritableStream + | PipelineDestinationIterableFunction + | PipelineDestinationPromiseFunction + : never; + type PipelineCallback> = S extends + PipelineDestinationPromiseFunction ? (err: NodeJS.ErrnoException | null, value: P) => void + : (err: NodeJS.ErrnoException | null) => void; + type PipelinePromise> = S extends + PipelineDestinationPromiseFunction ? Promise

: Promise; + interface PipelineOptions { + signal?: AbortSignal | undefined; + end?: boolean | undefined; + } + /** + * A module method to pipe between streams and generators forwarding errors and + * properly cleaning up and provide a callback when the pipeline is complete. + * + * ```js + * const { pipeline } = require('node:stream'); + * const fs = require('node:fs'); + * const zlib = require('node:zlib'); + * + * // Use the pipeline API to easily pipe a series of streams + * // together and get notified when the pipeline is fully done. + * + * // A pipeline to gzip a potentially huge tar file efficiently: + * + * pipeline( + * fs.createReadStream('archive.tar'), + * zlib.createGzip(), + * fs.createWriteStream('archive.tar.gz'), + * (err) => { + * if (err) { + * console.error('Pipeline failed.', err); + * } else { + * console.log('Pipeline succeeded.'); + * } + * }, + * ); + * ``` + * + * The `pipeline` API provides a `promise version`. + * + * `stream.pipeline()` will call `stream.destroy(err)` on all streams except: + * + * * `Readable` streams which have emitted `'end'` or `'close'`. + * * `Writable` streams which have emitted `'finish'` or `'close'`. + * + * `stream.pipeline()` leaves dangling event listeners on the streams + * after the `callback` has been invoked. In the case of reuse of streams after + * failure, this can cause event listener leaks and swallowed errors. If the last + * stream is readable, dangling event listeners will be removed so that the last + * stream can be consumed later. + * + * `stream.pipeline()` closes all the streams when an error is raised. + * The `IncomingRequest` usage with `pipeline` could lead to an unexpected behavior + * once it would destroy the socket without sending the expected response. + * See the example below: + * + * ```js + * const fs = require('node:fs'); + * const http = require('node:http'); + * const { pipeline } = require('node:stream'); + * + * const server = http.createServer((req, res) => { + * const fileStream = fs.createReadStream('./fileNotExist.txt'); + * pipeline(fileStream, res, (err) => { + * if (err) { + * console.log(err); // No such file + * // this message can't be sent once `pipeline` already destroyed the socket + * return res.end('error!!!'); + * } + * }); + * }); + * ``` + * @since v10.0.0 + * @param callback Called when the pipeline is fully done. + */ + function pipeline, B extends PipelineDestination>( + source: A, + destination: B, + callback?: PipelineCallback, + ): B extends NodeJS.WritableStream ? B : NodeJS.WritableStream; + function pipeline< + A extends PipelineSource, + T1 extends PipelineTransform, + B extends PipelineDestination, + >( + source: A, + transform1: T1, + destination: B, + callback?: PipelineCallback, + ): B extends NodeJS.WritableStream ? B : NodeJS.WritableStream; + function pipeline< + A extends PipelineSource, + T1 extends PipelineTransform, + T2 extends PipelineTransform, + B extends PipelineDestination, + >( + source: A, + transform1: T1, + transform2: T2, + destination: B, + callback?: PipelineCallback, + ): B extends NodeJS.WritableStream ? B : NodeJS.WritableStream; + function pipeline< + A extends PipelineSource, + T1 extends PipelineTransform, + T2 extends PipelineTransform, + T3 extends PipelineTransform, + B extends PipelineDestination, + >( + source: A, + transform1: T1, + transform2: T2, + transform3: T3, + destination: B, + callback?: PipelineCallback, + ): B extends NodeJS.WritableStream ? B : NodeJS.WritableStream; + function pipeline< + A extends PipelineSource, + T1 extends PipelineTransform, + T2 extends PipelineTransform, + T3 extends PipelineTransform, + T4 extends PipelineTransform, + B extends PipelineDestination, + >( + source: A, + transform1: T1, + transform2: T2, + transform3: T3, + transform4: T4, + destination: B, + callback?: PipelineCallback, + ): B extends NodeJS.WritableStream ? B : NodeJS.WritableStream; + function pipeline( + streams: ReadonlyArray, + callback?: (err: NodeJS.ErrnoException | null) => void, + ): NodeJS.WritableStream; + function pipeline( + stream1: NodeJS.ReadableStream, + stream2: NodeJS.ReadWriteStream | NodeJS.WritableStream, + ...streams: Array< + NodeJS.ReadWriteStream | NodeJS.WritableStream | ((err: NodeJS.ErrnoException | null) => void) + > + ): NodeJS.WritableStream; + namespace pipeline { + function __promisify__, B extends PipelineDestination>( + source: A, + destination: B, + options?: PipelineOptions, + ): PipelinePromise; + function __promisify__< + A extends PipelineSource, + T1 extends PipelineTransform, + B extends PipelineDestination, + >( + source: A, + transform1: T1, + destination: B, + options?: PipelineOptions, + ): PipelinePromise; + function __promisify__< + A extends PipelineSource, + T1 extends PipelineTransform, + T2 extends PipelineTransform, + B extends PipelineDestination, + >( + source: A, + transform1: T1, + transform2: T2, + destination: B, + options?: PipelineOptions, + ): PipelinePromise; + function __promisify__< + A extends PipelineSource, + T1 extends PipelineTransform, + T2 extends PipelineTransform, + T3 extends PipelineTransform, + B extends PipelineDestination, + >( + source: A, + transform1: T1, + transform2: T2, + transform3: T3, + destination: B, + options?: PipelineOptions, + ): PipelinePromise; + function __promisify__< + A extends PipelineSource, + T1 extends PipelineTransform, + T2 extends PipelineTransform, + T3 extends PipelineTransform, + T4 extends PipelineTransform, + B extends PipelineDestination, + >( + source: A, + transform1: T1, + transform2: T2, + transform3: T3, + transform4: T4, + destination: B, + options?: PipelineOptions, + ): PipelinePromise; + function __promisify__( + streams: ReadonlyArray, + options?: PipelineOptions, + ): Promise; + function __promisify__( + stream1: NodeJS.ReadableStream, + stream2: NodeJS.ReadWriteStream | NodeJS.WritableStream, + ...streams: Array + ): Promise; + } + interface Pipe { + close(): void; + hasRef(): boolean; + ref(): void; + unref(): void; + } + /** + * Returns whether the stream has encountered an error. + * @since v17.3.0, v16.14.0 + * @experimental + */ + function isErrored(stream: Readable | Writable | NodeJS.ReadableStream | NodeJS.WritableStream): boolean; + /** + * Returns whether the stream is readable. + * @since v17.4.0, v16.14.0 + * @experimental + */ + function isReadable(stream: Readable | NodeJS.ReadableStream): boolean; + const promises: typeof streamPromises; + const consumers: typeof streamConsumers; + } + export = internal; +} +declare module "node:stream" { + import stream = require("stream"); + export = stream; +} diff --git a/Url-Shortner/node_modules/@types/node/stream/consumers.d.ts b/Url-Shortner/node_modules/@types/node/stream/consumers.d.ts new file mode 100644 index 0000000..de6e66b --- /dev/null +++ b/Url-Shortner/node_modules/@types/node/stream/consumers.d.ts @@ -0,0 +1,12 @@ +declare module "stream/consumers" { + import { Blob as NodeBlob } from "node:buffer"; + import { Readable } from "node:stream"; + function buffer(stream: NodeJS.ReadableStream | Readable | AsyncIterator): Promise; + function text(stream: NodeJS.ReadableStream | Readable | AsyncIterator): Promise; + function arrayBuffer(stream: NodeJS.ReadableStream | Readable | AsyncIterator): Promise; + function blob(stream: NodeJS.ReadableStream | Readable | AsyncIterator): Promise; + function json(stream: NodeJS.ReadableStream | Readable | AsyncIterator): Promise; +} +declare module "node:stream/consumers" { + export * from "stream/consumers"; +} diff --git a/Url-Shortner/node_modules/@types/node/stream/promises.d.ts b/Url-Shortner/node_modules/@types/node/stream/promises.d.ts new file mode 100644 index 0000000..6eac5b7 --- /dev/null +++ b/Url-Shortner/node_modules/@types/node/stream/promises.d.ts @@ -0,0 +1,83 @@ +declare module "stream/promises" { + import { + FinishedOptions, + PipelineDestination, + PipelineOptions, + PipelinePromise, + PipelineSource, + PipelineTransform, + } from "node:stream"; + function finished( + stream: NodeJS.ReadableStream | NodeJS.WritableStream | NodeJS.ReadWriteStream, + options?: FinishedOptions, + ): Promise; + function pipeline, B extends PipelineDestination>( + source: A, + destination: B, + options?: PipelineOptions, + ): PipelinePromise; + function pipeline< + A extends PipelineSource, + T1 extends PipelineTransform, + B extends PipelineDestination, + >( + source: A, + transform1: T1, + destination: B, + options?: PipelineOptions, + ): PipelinePromise; + function pipeline< + A extends PipelineSource, + T1 extends PipelineTransform, + T2 extends PipelineTransform, + B extends PipelineDestination, + >( + source: A, + transform1: T1, + transform2: T2, + destination: B, + options?: PipelineOptions, + ): PipelinePromise; + function pipeline< + A extends PipelineSource, + T1 extends PipelineTransform, + T2 extends PipelineTransform, + T3 extends PipelineTransform, + B extends PipelineDestination, + >( + source: A, + transform1: T1, + transform2: T2, + transform3: T3, + destination: B, + options?: PipelineOptions, + ): PipelinePromise; + function pipeline< + A extends PipelineSource, + T1 extends PipelineTransform, + T2 extends PipelineTransform, + T3 extends PipelineTransform, + T4 extends PipelineTransform, + B extends PipelineDestination, + >( + source: A, + transform1: T1, + transform2: T2, + transform3: T3, + transform4: T4, + destination: B, + options?: PipelineOptions, + ): PipelinePromise; + function pipeline( + streams: ReadonlyArray, + options?: PipelineOptions, + ): Promise; + function pipeline( + stream1: NodeJS.ReadableStream, + stream2: NodeJS.ReadWriteStream | NodeJS.WritableStream, + ...streams: Array + ): Promise; +} +declare module "node:stream/promises" { + export * from "stream/promises"; +} diff --git a/Url-Shortner/node_modules/@types/node/stream/web.d.ts b/Url-Shortner/node_modules/@types/node/stream/web.d.ts new file mode 100644 index 0000000..634936e --- /dev/null +++ b/Url-Shortner/node_modules/@types/node/stream/web.d.ts @@ -0,0 +1,336 @@ +declare module "stream/web" { + // stub module, pending copy&paste from .d.ts or manual impl + // copy from lib.dom.d.ts + interface ReadableWritablePair { + readable: ReadableStream; + /** + * Provides a convenient, chainable way of piping this readable stream + * through a transform stream (or any other { writable, readable } + * pair). It simply pipes the stream into the writable side of the + * supplied pair, and returns the readable side for further use. + * + * Piping a stream will lock it for the duration of the pipe, preventing + * any other consumer from acquiring a reader. + */ + writable: WritableStream; + } + interface StreamPipeOptions { + preventAbort?: boolean; + preventCancel?: boolean; + /** + * Pipes this readable stream to a given writable stream destination. + * The way in which the piping process behaves under various error + * conditions can be customized with a number of passed options. It + * returns a promise that fulfills when the piping process completes + * successfully, or rejects if any errors were encountered. + * + * Piping a stream will lock it for the duration of the pipe, preventing + * any other consumer from acquiring a reader. + * + * Errors and closures of the source and destination streams propagate + * as follows: + * + * An error in this source readable stream will abort destination, + * unless preventAbort is truthy. The returned promise will be rejected + * with the source's error, or with any error that occurs during + * aborting the destination. + * + * An error in destination will cancel this source readable stream, + * unless preventCancel is truthy. The returned promise will be rejected + * with the destination's error, or with any error that occurs during + * canceling the source. + * + * When this source readable stream closes, destination will be closed, + * unless preventClose is truthy. The returned promise will be fulfilled + * once this process completes, unless an error is encountered while + * closing the destination, in which case it will be rejected with that + * error. + * + * If destination starts out closed or closing, this source readable + * stream will be canceled, unless preventCancel is true. The returned + * promise will be rejected with an error indicating piping to a closed + * stream failed, or with any error that occurs during canceling the + * source. + * + * The signal option can be set to an AbortSignal to allow aborting an + * ongoing pipe operation via the corresponding AbortController. In this + * case, this source readable stream will be canceled, and destination + * aborted, unless the respective options preventCancel or preventAbort + * are set. + */ + preventClose?: boolean; + signal?: AbortSignal; + } + interface ReadableStreamGenericReader { + readonly closed: Promise; + cancel(reason?: any): Promise; + } + interface ReadableStreamDefaultReadValueResult { + done: false; + value: T; + } + interface ReadableStreamDefaultReadDoneResult { + done: true; + value?: undefined; + } + type ReadableStreamController = ReadableStreamDefaultController; + type ReadableStreamDefaultReadResult = + | ReadableStreamDefaultReadValueResult + | ReadableStreamDefaultReadDoneResult; + interface ReadableByteStreamControllerCallback { + (controller: ReadableByteStreamController): void | PromiseLike; + } + interface UnderlyingSinkAbortCallback { + (reason?: any): void | PromiseLike; + } + interface UnderlyingSinkCloseCallback { + (): void | PromiseLike; + } + interface UnderlyingSinkStartCallback { + (controller: WritableStreamDefaultController): any; + } + interface UnderlyingSinkWriteCallback { + (chunk: W, controller: WritableStreamDefaultController): void | PromiseLike; + } + interface UnderlyingSourceCancelCallback { + (reason?: any): void | PromiseLike; + } + interface UnderlyingSourcePullCallback { + (controller: ReadableStreamController): void | PromiseLike; + } + interface UnderlyingSourceStartCallback { + (controller: ReadableStreamController): any; + } + interface TransformerFlushCallback { + (controller: TransformStreamDefaultController): void | PromiseLike; + } + interface TransformerStartCallback { + (controller: TransformStreamDefaultController): any; + } + interface TransformerTransformCallback { + (chunk: I, controller: TransformStreamDefaultController): void | PromiseLike; + } + interface UnderlyingByteSource { + autoAllocateChunkSize?: number; + cancel?: ReadableStreamErrorCallback; + pull?: ReadableByteStreamControllerCallback; + start?: ReadableByteStreamControllerCallback; + type: "bytes"; + } + interface UnderlyingSource { + cancel?: UnderlyingSourceCancelCallback; + pull?: UnderlyingSourcePullCallback; + start?: UnderlyingSourceStartCallback; + type?: undefined; + } + interface UnderlyingSink { + abort?: UnderlyingSinkAbortCallback; + close?: UnderlyingSinkCloseCallback; + start?: UnderlyingSinkStartCallback; + type?: undefined; + write?: UnderlyingSinkWriteCallback; + } + interface ReadableStreamErrorCallback { + (reason: any): void | PromiseLike; + } + /** This Streams API interface represents a readable stream of byte data. */ + interface ReadableStream { + readonly locked: boolean; + cancel(reason?: any): Promise; + getReader(): ReadableStreamDefaultReader; + pipeThrough(transform: ReadableWritablePair, options?: StreamPipeOptions): ReadableStream; + pipeTo(destination: WritableStream, options?: StreamPipeOptions): Promise; + tee(): [ReadableStream, ReadableStream]; + values(options?: { preventCancel?: boolean }): AsyncIterableIterator; + [Symbol.asyncIterator](): AsyncIterableIterator; + } + const ReadableStream: { + prototype: ReadableStream; + new(underlyingSource: UnderlyingByteSource, strategy?: QueuingStrategy): ReadableStream; + new(underlyingSource?: UnderlyingSource, strategy?: QueuingStrategy): ReadableStream; + }; + interface ReadableStreamDefaultReader extends ReadableStreamGenericReader { + read(): Promise>; + releaseLock(): void; + } + const ReadableStreamDefaultReader: { + prototype: ReadableStreamDefaultReader; + new(stream: ReadableStream): ReadableStreamDefaultReader; + }; + const ReadableStreamBYOBReader: any; + const ReadableStreamBYOBRequest: any; + interface ReadableByteStreamController { + readonly byobRequest: undefined; + readonly desiredSize: number | null; + close(): void; + enqueue(chunk: ArrayBufferView): void; + error(error?: any): void; + } + const ReadableByteStreamController: { + prototype: ReadableByteStreamController; + new(): ReadableByteStreamController; + }; + interface ReadableStreamDefaultController { + readonly desiredSize: number | null; + close(): void; + enqueue(chunk?: R): void; + error(e?: any): void; + } + const ReadableStreamDefaultController: { + prototype: ReadableStreamDefaultController; + new(): ReadableStreamDefaultController; + }; + interface Transformer { + flush?: TransformerFlushCallback; + readableType?: undefined; + start?: TransformerStartCallback; + transform?: TransformerTransformCallback; + writableType?: undefined; + } + interface TransformStream { + readonly readable: ReadableStream; + readonly writable: WritableStream; + } + const TransformStream: { + prototype: TransformStream; + new( + transformer?: Transformer, + writableStrategy?: QueuingStrategy, + readableStrategy?: QueuingStrategy, + ): TransformStream; + }; + interface TransformStreamDefaultController { + readonly desiredSize: number | null; + enqueue(chunk?: O): void; + error(reason?: any): void; + terminate(): void; + } + const TransformStreamDefaultController: { + prototype: TransformStreamDefaultController; + new(): TransformStreamDefaultController; + }; + /** + * This Streams API interface provides a standard abstraction for writing + * streaming data to a destination, known as a sink. This object comes with + * built-in back pressure and queuing. + */ + interface WritableStream { + readonly locked: boolean; + abort(reason?: any): Promise; + close(): Promise; + getWriter(): WritableStreamDefaultWriter; + } + const WritableStream: { + prototype: WritableStream; + new(underlyingSink?: UnderlyingSink, strategy?: QueuingStrategy): WritableStream; + }; + /** + * This Streams API interface is the object returned by + * WritableStream.getWriter() and once created locks the < writer to the + * WritableStream ensuring that no other streams can write to the underlying + * sink. + */ + interface WritableStreamDefaultWriter { + readonly closed: Promise; + readonly desiredSize: number | null; + readonly ready: Promise; + abort(reason?: any): Promise; + close(): Promise; + releaseLock(): void; + write(chunk?: W): Promise; + } + const WritableStreamDefaultWriter: { + prototype: WritableStreamDefaultWriter; + new(stream: WritableStream): WritableStreamDefaultWriter; + }; + /** + * This Streams API interface represents a controller allowing control of a + * WritableStream's state. When constructing a WritableStream, the + * underlying sink is given a corresponding WritableStreamDefaultController + * instance to manipulate. + */ + interface WritableStreamDefaultController { + error(e?: any): void; + } + const WritableStreamDefaultController: { + prototype: WritableStreamDefaultController; + new(): WritableStreamDefaultController; + }; + interface QueuingStrategy { + highWaterMark?: number; + size?: QueuingStrategySize; + } + interface QueuingStrategySize { + (chunk?: T): number; + } + interface QueuingStrategyInit { + /** + * Creates a new ByteLengthQueuingStrategy with the provided high water + * mark. + * + * Note that the provided high water mark will not be validated ahead of + * time. Instead, if it is negative, NaN, or not a number, the resulting + * ByteLengthQueuingStrategy will cause the corresponding stream + * constructor to throw. + */ + highWaterMark: number; + } + /** + * This Streams API interface provides a built-in byte length queuing + * strategy that can be used when constructing streams. + */ + interface ByteLengthQueuingStrategy extends QueuingStrategy { + readonly highWaterMark: number; + readonly size: QueuingStrategySize; + } + const ByteLengthQueuingStrategy: { + prototype: ByteLengthQueuingStrategy; + new(init: QueuingStrategyInit): ByteLengthQueuingStrategy; + }; + /** + * This Streams API interface provides a built-in byte length queuing + * strategy that can be used when constructing streams. + */ + interface CountQueuingStrategy extends QueuingStrategy { + readonly highWaterMark: number; + readonly size: QueuingStrategySize; + } + const CountQueuingStrategy: { + prototype: CountQueuingStrategy; + new(init: QueuingStrategyInit): CountQueuingStrategy; + }; + interface TextEncoderStream { + /** Returns "utf-8". */ + readonly encoding: "utf-8"; + readonly readable: ReadableStream; + readonly writable: WritableStream; + readonly [Symbol.toStringTag]: string; + } + const TextEncoderStream: { + prototype: TextEncoderStream; + new(): TextEncoderStream; + }; + interface TextDecoderOptions { + fatal?: boolean; + ignoreBOM?: boolean; + } + type BufferSource = ArrayBufferView | ArrayBuffer; + interface TextDecoderStream { + /** Returns encoding's name, lower cased. */ + readonly encoding: string; + /** Returns `true` if error mode is "fatal", and `false` otherwise. */ + readonly fatal: boolean; + /** Returns `true` if ignore BOM flag is set, and `false` otherwise. */ + readonly ignoreBOM: boolean; + readonly readable: ReadableStream; + readonly writable: WritableStream; + readonly [Symbol.toStringTag]: string; + } + const TextDecoderStream: { + prototype: TextDecoderStream; + new(label?: string, options?: TextDecoderOptions): TextDecoderStream; + }; +} +declare module "node:stream/web" { + export * from "stream/web"; +} diff --git a/Url-Shortner/node_modules/@types/node/string_decoder.d.ts b/Url-Shortner/node_modules/@types/node/string_decoder.d.ts new file mode 100644 index 0000000..19fd107 --- /dev/null +++ b/Url-Shortner/node_modules/@types/node/string_decoder.d.ts @@ -0,0 +1,67 @@ +/** + * The `node:string_decoder` module provides an API for decoding `Buffer` objects + * into strings in a manner that preserves encoded multi-byte UTF-8 and UTF-16 + * characters. It can be accessed using: + * + * ```js + * const { StringDecoder } = require('node:string_decoder'); + * ``` + * + * The following example shows the basic use of the `StringDecoder` class. + * + * ```js + * const { StringDecoder } = require('node:string_decoder'); + * const decoder = new StringDecoder('utf8'); + * + * const cent = Buffer.from([0xC2, 0xA2]); + * console.log(decoder.write(cent)); + * + * const euro = Buffer.from([0xE2, 0x82, 0xAC]); + * console.log(decoder.write(euro)); + * ``` + * + * When a `Buffer` instance is written to the `StringDecoder` instance, an + * internal buffer is used to ensure that the decoded string does not contain + * any incomplete multibyte characters. These are held in the buffer until the + * next call to `stringDecoder.write()` or until `stringDecoder.end()` is called. + * + * In the following example, the three UTF-8 encoded bytes of the European Euro + * symbol (`€`) are written over three separate operations: + * + * ```js + * const { StringDecoder } = require('node:string_decoder'); + * const decoder = new StringDecoder('utf8'); + * + * decoder.write(Buffer.from([0xE2])); + * decoder.write(Buffer.from([0x82])); + * console.log(decoder.end(Buffer.from([0xAC]))); + * ``` + * @see [source](https://github.com/nodejs/node/blob/v20.2.0/lib/string_decoder.js) + */ +declare module "string_decoder" { + class StringDecoder { + constructor(encoding?: BufferEncoding); + /** + * Returns a decoded string, ensuring that any incomplete multibyte characters at + * the end of the `Buffer`, or `TypedArray`, or `DataView` are omitted from the + * returned string and stored in an internal buffer for the next call to`stringDecoder.write()` or `stringDecoder.end()`. + * @since v0.1.99 + * @param buffer A `Buffer`, or `TypedArray`, or `DataView` containing the bytes to decode. + */ + write(buffer: Buffer): string; + /** + * Returns any remaining input stored in the internal buffer as a string. Bytes + * representing incomplete UTF-8 and UTF-16 characters will be replaced with + * substitution characters appropriate for the character encoding. + * + * If the `buffer` argument is provided, one final call to `stringDecoder.write()`is performed before returning the remaining input. + * After `end()` is called, the `stringDecoder` object can be reused for new input. + * @since v0.9.3 + * @param buffer A `Buffer`, or `TypedArray`, or `DataView` containing the bytes to decode. + */ + end(buffer?: Buffer): string; + } +} +declare module "node:string_decoder" { + export * from "string_decoder"; +} diff --git a/Url-Shortner/node_modules/@types/node/test.d.ts b/Url-Shortner/node_modules/@types/node/test.d.ts new file mode 100644 index 0000000..b808e27 --- /dev/null +++ b/Url-Shortner/node_modules/@types/node/test.d.ts @@ -0,0 +1,1446 @@ +/** + * The `node:test` module facilitates the creation of JavaScript tests. + * To access it: + * + * ```js + * import test from 'node:test'; + * ``` + * + * This module is only available under the `node:` scheme. The following will not + * work: + * + * ```js + * import test from 'test'; + * ``` + * + * Tests created via the `test` module consist of a single function that is + * processed in one of three ways: + * + * 1. A synchronous function that is considered failing if it throws an exception, + * and is considered passing otherwise. + * 2. A function that returns a `Promise` that is considered failing if the`Promise` rejects, and is considered passing if the `Promise` resolves. + * 3. A function that receives a callback function. If the callback receives any + * truthy value as its first argument, the test is considered failing. If a + * falsy value is passed as the first argument to the callback, the test is + * considered passing. If the test function receives a callback function and + * also returns a `Promise`, the test will fail. + * + * The following example illustrates how tests are written using the`test` module. + * + * ```js + * test('synchronous passing test', (t) => { + * // This test passes because it does not throw an exception. + * assert.strictEqual(1, 1); + * }); + * + * test('synchronous failing test', (t) => { + * // This test fails because it throws an exception. + * assert.strictEqual(1, 2); + * }); + * + * test('asynchronous passing test', async (t) => { + * // This test passes because the Promise returned by the async + * // function is not rejected. + * assert.strictEqual(1, 1); + * }); + * + * test('asynchronous failing test', async (t) => { + * // This test fails because the Promise returned by the async + * // function is rejected. + * assert.strictEqual(1, 2); + * }); + * + * test('failing test using Promises', (t) => { + * // Promises can be used directly as well. + * return new Promise((resolve, reject) => { + * setImmediate(() => { + * reject(new Error('this will cause the test to fail')); + * }); + * }); + * }); + * + * test('callback passing test', (t, done) => { + * // done() is the callback function. When the setImmediate() runs, it invokes + * // done() with no arguments. + * setImmediate(done); + * }); + * + * test('callback failing test', (t, done) => { + * // When the setImmediate() runs, done() is invoked with an Error object and + * // the test fails. + * setImmediate(() => { + * done(new Error('callback failure')); + * }); + * }); + * ``` + * + * If any tests fail, the process exit code is set to `1`. + * @since v18.0.0, v16.17.0 + * @see [source](https://github.com/nodejs/node/blob/v20.4.0/lib/test.js) + */ +declare module "node:test" { + import { Readable } from "node:stream"; + import { AsyncResource } from "node:async_hooks"; + /** + * ```js + * import { tap } from 'node:test/reporters'; + * import process from 'node:process'; + * + * run({ files: [path.resolve('./tests/test.js')] }) + * .compose(tap) + * .pipe(process.stdout); + * ``` + * @since v18.9.0, v16.19.0 + * @param options Configuration options for running tests. The following properties are supported: + */ + function run(options?: RunOptions): TestsStream; + /** + * The `test()` function is the value imported from the `test` module. Each + * invocation of this function results in reporting the test to the `TestsStream`. + * + * The `TestContext` object passed to the `fn` argument can be used to perform + * actions related to the current test. Examples include skipping the test, adding + * additional diagnostic information, or creating subtests. + * + * `test()` returns a `Promise` that resolves once the test completes. + * if `test()` is called within a `describe()` block, it resolve immediately. + * The return value can usually be discarded for top level tests. + * However, the return value from subtests should be used to prevent the parent + * test from finishing first and cancelling the subtest + * as shown in the following example. + * + * ```js + * test('top level test', async (t) => { + * // The setTimeout() in the following subtest would cause it to outlive its + * // parent test if 'await' is removed on the next line. Once the parent test + * // completes, it will cancel any outstanding subtests. + * await t.test('longer running subtest', async (t) => { + * return new Promise((resolve, reject) => { + * setTimeout(resolve, 1000); + * }); + * }); + * }); + * ``` + * + * The `timeout` option can be used to fail the test if it takes longer than`timeout` milliseconds to complete. However, it is not a reliable mechanism for + * canceling tests because a running test might block the application thread and + * thus prevent the scheduled cancellation. + * @since v18.0.0, v16.17.0 + * @param [name='The name'] The name of the test, which is displayed when reporting test results. + * @param options Configuration options for the test. The following properties are supported: + * @param [fn='A no-op function'] The function under test. The first argument to this function is a {@link TestContext} object. If the test uses callbacks, the callback function is passed as the + * second argument. + * @return Resolved with `undefined` once the test completes, or immediately if the test runs within {@link describe}. + */ + function test(name?: string, fn?: TestFn): Promise; + function test(name?: string, options?: TestOptions, fn?: TestFn): Promise; + function test(options?: TestOptions, fn?: TestFn): Promise; + function test(fn?: TestFn): Promise; + namespace test { + export { after, afterEach, before, beforeEach, describe, it, mock, only, run, skip, test, todo }; + } + /** + * The `describe()` function imported from the `node:test` module. Each + * invocation of this function results in the creation of a Subtest. + * After invocation of top level `describe` functions, + * all top level tests and suites will execute. + * @param [name='The name'] The name of the suite, which is displayed when reporting test results. + * @param options Configuration options for the suite. supports the same options as `test([name][, options][, fn])`. + * @param [fn='A no-op function'] The function under suite declaring all subtests and subsuites. The first argument to this function is a {@link SuiteContext} object. + * @return Immediately fulfilled with `undefined`. + */ + function describe(name?: string, options?: TestOptions, fn?: SuiteFn): Promise; + function describe(name?: string, fn?: SuiteFn): Promise; + function describe(options?: TestOptions, fn?: SuiteFn): Promise; + function describe(fn?: SuiteFn): Promise; + namespace describe { + /** + * Shorthand for skipping a suite, same as `describe([name], { skip: true }[, fn])`. + */ + function skip(name?: string, options?: TestOptions, fn?: SuiteFn): Promise; + function skip(name?: string, fn?: SuiteFn): Promise; + function skip(options?: TestOptions, fn?: SuiteFn): Promise; + function skip(fn?: SuiteFn): Promise; + /** + * Shorthand for marking a suite as `TODO`, same as `describe([name], { todo: true }[, fn])`. + */ + function todo(name?: string, options?: TestOptions, fn?: SuiteFn): Promise; + function todo(name?: string, fn?: SuiteFn): Promise; + function todo(options?: TestOptions, fn?: SuiteFn): Promise; + function todo(fn?: SuiteFn): Promise; + /** + * Shorthand for marking a suite as `only`, same as `describe([name], { only: true }[, fn])`. + * @since v18.15.0 + */ + function only(name?: string, options?: TestOptions, fn?: SuiteFn): Promise; + function only(name?: string, fn?: SuiteFn): Promise; + function only(options?: TestOptions, fn?: SuiteFn): Promise; + function only(fn?: SuiteFn): Promise; + } + /** + * Shorthand for `test()`. + * + * The `it()` function is imported from the `node:test` module. + * @since v18.6.0, v16.17.0 + */ + function it(name?: string, options?: TestOptions, fn?: TestFn): Promise; + function it(name?: string, fn?: TestFn): Promise; + function it(options?: TestOptions, fn?: TestFn): Promise; + function it(fn?: TestFn): Promise; + namespace it { + /** + * Shorthand for skipping a test, same as `it([name], { skip: true }[, fn])`. + */ + function skip(name?: string, options?: TestOptions, fn?: TestFn): Promise; + function skip(name?: string, fn?: TestFn): Promise; + function skip(options?: TestOptions, fn?: TestFn): Promise; + function skip(fn?: TestFn): Promise; + /** + * Shorthand for marking a test as `TODO`, same as `it([name], { todo: true }[, fn])`. + */ + function todo(name?: string, options?: TestOptions, fn?: TestFn): Promise; + function todo(name?: string, fn?: TestFn): Promise; + function todo(options?: TestOptions, fn?: TestFn): Promise; + function todo(fn?: TestFn): Promise; + /** + * Shorthand for marking a test as `only`, same as `it([name], { only: true }[, fn])`. + * @since v18.15.0 + */ + function only(name?: string, options?: TestOptions, fn?: TestFn): Promise; + function only(name?: string, fn?: TestFn): Promise; + function only(options?: TestOptions, fn?: TestFn): Promise; + function only(fn?: TestFn): Promise; + } + /** + * Shorthand for skipping a test, same as `test([name], { skip: true }[, fn])`. + * @since v20.2.0 + */ + function skip(name?: string, options?: TestOptions, fn?: TestFn): Promise; + function skip(name?: string, fn?: TestFn): Promise; + function skip(options?: TestOptions, fn?: TestFn): Promise; + function skip(fn?: TestFn): Promise; + /** + * Shorthand for marking a test as `TODO`, same as `test([name], { todo: true }[, fn])`. + * @since v20.2.0 + */ + function todo(name?: string, options?: TestOptions, fn?: TestFn): Promise; + function todo(name?: string, fn?: TestFn): Promise; + function todo(options?: TestOptions, fn?: TestFn): Promise; + function todo(fn?: TestFn): Promise; + /** + * Shorthand for marking a test as `only`, same as `test([name], { only: true }[, fn])`. + * @since v20.2.0 + */ + function only(name?: string, options?: TestOptions, fn?: TestFn): Promise; + function only(name?: string, fn?: TestFn): Promise; + function only(options?: TestOptions, fn?: TestFn): Promise; + function only(fn?: TestFn): Promise; + /** + * The type of a function under test. The first argument to this function is a + * {@link TestContext} object. If the test uses callbacks, the callback function is passed as + * the second argument. + */ + type TestFn = (t: TestContext, done: (result?: any) => void) => void | Promise; + /** + * The type of a function under Suite. + */ + type SuiteFn = (s: SuiteContext) => void | Promise; + interface TestShard { + /** + * A positive integer between 1 and `` that specifies the index of the shard to run. + */ + index: number; + /** + * A positive integer that specifies the total number of shards to split the test files to. + */ + total: number; + } + interface RunOptions { + /** + * If a number is provided, then that many files would run in parallel. + * If truthy, it would run (number of cpu cores - 1) files in parallel. + * If falsy, it would only run one file at a time. + * If unspecified, subtests inherit this value from their parent. + * @default true + */ + concurrency?: number | boolean | undefined; + /** + * An array containing the list of files to run. + * If unspecified, the test runner execution model will be used. + */ + files?: readonly string[] | undefined; + /** + * Allows aborting an in-progress test execution. + * @default undefined + */ + signal?: AbortSignal | undefined; + /** + * A number of milliseconds the test will fail after. + * If unspecified, subtests inherit this value from their parent. + * @default Infinity + */ + timeout?: number | undefined; + /** + * Sets inspector port of test child process. + * If a nullish value is provided, each process gets its own port, + * incremented from the primary's `process.debugPort`. + */ + inspectPort?: number | (() => number) | undefined; + /** + * That can be used to only run tests whose name matches the provided pattern. + * Test name patterns are interpreted as JavaScript regular expressions. + * For each test that is executed, any corresponding test hooks, such as `beforeEach()`, are also run. + */ + testNamePatterns?: string | RegExp | string[] | RegExp[]; + /** + * A function that accepts the TestsStream instance and can be used to setup listeners before any tests are run. + */ + setup?: (root: Test) => void | Promise; + /** + * Whether to run in watch mode or not. + * @default false + */ + watch?: boolean | undefined; + /** + * Running tests in a specific shard. + * @default undefined + */ + shard?: TestShard | undefined; + } + class Test extends AsyncResource { + concurrency: number; + nesting: number; + only: boolean; + reporter: TestsStream; + runOnlySubtests: boolean; + testNumber: number; + timeout: number | null; + } + /** + * A successful call to `run()` method will return a new `TestsStream` object, streaming a series of events representing the execution of the tests.`TestsStream` will emit events, in the + * order of the tests definition + * @since v18.9.0, v16.19.0 + */ + class TestsStream extends Readable implements NodeJS.ReadableStream { + addListener(event: "test:diagnostic", listener: (data: DiagnosticData) => void): this; + addListener(event: "test:fail", listener: (data: TestFail) => void): this; + addListener(event: "test:pass", listener: (data: TestPass) => void): this; + addListener(event: "test:plan", listener: (data: TestPlan) => void): this; + addListener(event: "test:start", listener: (data: TestStart) => void): this; + addListener(event: "test:stderr", listener: (data: TestStderr) => void): this; + addListener(event: "test:stdout", listener: (data: TestStdout) => void): this; + addListener(event: string, listener: (...args: any[]) => void): this; + emit(event: "test:diagnostic", data: DiagnosticData): boolean; + emit(event: "test:fail", data: TestFail): boolean; + emit(event: "test:pass", data: TestPass): boolean; + emit(event: "test:plan", data: TestPlan): boolean; + emit(event: "test:start", data: TestStart): boolean; + emit(event: "test:stderr", data: TestStderr): boolean; + emit(event: "test:stdout", data: TestStdout): boolean; + emit(event: string | symbol, ...args: any[]): boolean; + on(event: "test:diagnostic", listener: (data: DiagnosticData) => void): this; + on(event: "test:fail", listener: (data: TestFail) => void): this; + on(event: "test:pass", listener: (data: TestPass) => void): this; + on(event: "test:plan", listener: (data: TestPlan) => void): this; + on(event: "test:start", listener: (data: TestStart) => void): this; + on(event: "test:stderr", listener: (data: TestStderr) => void): this; + on(event: "test:stdout", listener: (data: TestStdout) => void): this; + on(event: string, listener: (...args: any[]) => void): this; + once(event: "test:diagnostic", listener: (data: DiagnosticData) => void): this; + once(event: "test:fail", listener: (data: TestFail) => void): this; + once(event: "test:pass", listener: (data: TestPass) => void): this; + once(event: "test:plan", listener: (data: TestPlan) => void): this; + once(event: "test:start", listener: (data: TestStart) => void): this; + once(event: "test:stderr", listener: (data: TestStderr) => void): this; + once(event: "test:stdout", listener: (data: TestStdout) => void): this; + once(event: string, listener: (...args: any[]) => void): this; + prependListener(event: "test:diagnostic", listener: (data: DiagnosticData) => void): this; + prependListener(event: "test:fail", listener: (data: TestFail) => void): this; + prependListener(event: "test:pass", listener: (data: TestPass) => void): this; + prependListener(event: "test:plan", listener: (data: TestPlan) => void): this; + prependListener(event: "test:start", listener: (data: TestStart) => void): this; + prependListener(event: "test:stderr", listener: (data: TestStderr) => void): this; + prependListener(event: "test:stdout", listener: (data: TestStdout) => void): this; + prependListener(event: string, listener: (...args: any[]) => void): this; + prependOnceListener(event: "test:diagnostic", listener: (data: DiagnosticData) => void): this; + prependOnceListener(event: "test:fail", listener: (data: TestFail) => void): this; + prependOnceListener(event: "test:pass", listener: (data: TestPass) => void): this; + prependOnceListener(event: "test:plan", listener: (data: TestPlan) => void): this; + prependOnceListener(event: "test:start", listener: (data: TestStart) => void): this; + prependOnceListener(event: "test:stderr", listener: (data: TestStderr) => void): this; + prependOnceListener(event: "test:stdout", listener: (data: TestStdout) => void): this; + prependOnceListener(event: string, listener: (...args: any[]) => void): this; + } + /** + * An instance of `TestContext` is passed to each test function in order to + * interact with the test runner. However, the `TestContext` constructor is not + * exposed as part of the API. + * @since v18.0.0, v16.17.0 + */ + class TestContext { + /** + * This function is used to create a hook running before subtest of the current test. + * @param fn The hook function. If the hook uses callbacks, the callback function is passed as + * the second argument. Default: A no-op function. + * @param options Configuration options for the hook. + * @since v20.1.0 + */ + before: typeof before; + /** + * This function is used to create a hook running before each subtest of the current test. + * @param fn The hook function. If the hook uses callbacks, the callback function is passed as + * the second argument. Default: A no-op function. + * @param options Configuration options for the hook. + * @since v18.8.0 + */ + beforeEach: typeof beforeEach; + /** + * This function is used to create a hook that runs after the current test finishes. + * @param fn The hook function. If the hook uses callbacks, the callback function is passed as + * the second argument. Default: A no-op function. + * @param options Configuration options for the hook. + * @since v18.13.0 + */ + after: typeof after; + /** + * This function is used to create a hook running after each subtest of the current test. + * @param fn The hook function. If the hook uses callbacks, the callback function is passed as + * the second argument. Default: A no-op function. + * @param options Configuration options for the hook. + * @since v18.8.0 + */ + afterEach: typeof afterEach; + /** + * This function is used to write diagnostics to the output. Any diagnostic + * information is included at the end of the test's results. This function does + * not return a value. + * + * ```js + * test('top level test', (t) => { + * t.diagnostic('A diagnostic message'); + * }); + * ``` + * @since v18.0.0, v16.17.0 + * @param message Message to be reported. + */ + diagnostic(message: string): void; + /** + * The name of the test. + * @since v18.8.0, v16.18.0 + */ + readonly name: string; + /** + * If `shouldRunOnlyTests` is truthy, the test context will only run tests that + * have the `only` option set. Otherwise, all tests are run. If Node.js was not + * started with the `--test-only` command-line option, this function is a + * no-op. + * + * ```js + * test('top level test', (t) => { + * // The test context can be set to run subtests with the 'only' option. + * t.runOnly(true); + * return Promise.all([ + * t.test('this subtest is now skipped'), + * t.test('this subtest is run', { only: true }), + * ]); + * }); + * ``` + * @since v18.0.0, v16.17.0 + * @param shouldRunOnlyTests Whether or not to run `only` tests. + */ + runOnly(shouldRunOnlyTests: boolean): void; + /** + * ```js + * test('top level test', async (t) => { + * await fetch('some/uri', { signal: t.signal }); + * }); + * ``` + * @since v18.7.0, v16.17.0 + */ + readonly signal: AbortSignal; + /** + * This function causes the test's output to indicate the test as skipped. If`message` is provided, it is included in the output. Calling `skip()` does + * not terminate execution of the test function. This function does not return a + * value. + * + * ```js + * test('top level test', (t) => { + * // Make sure to return here as well if the test contains additional logic. + * t.skip('this is skipped'); + * }); + * ``` + * @since v18.0.0, v16.17.0 + * @param message Optional skip message. + */ + skip(message?: string): void; + /** + * This function adds a `TODO` directive to the test's output. If `message` is + * provided, it is included in the output. Calling `todo()` does not terminate + * execution of the test function. This function does not return a value. + * + * ```js + * test('top level test', (t) => { + * // This test is marked as `TODO` + * t.todo('this is a todo'); + * }); + * ``` + * @since v18.0.0, v16.17.0 + * @param message Optional `TODO` message. + */ + todo(message?: string): void; + /** + * This function is used to create subtests under the current test. This function behaves in + * the same fashion as the top level {@link test} function. + * @since v18.0.0 + * @param name The name of the test, which is displayed when reporting test results. + * Default: The `name` property of fn, or `''` if `fn` does not have a name. + * @param options Configuration options for the test + * @param fn The function under test. This first argument to this function is a + * {@link TestContext} object. If the test uses callbacks, the callback function is + * passed as the second argument. Default: A no-op function. + * @returns A {@link Promise} resolved with `undefined` once the test completes. + */ + test: typeof test; + /** + * Each test provides its own MockTracker instance. + */ + readonly mock: MockTracker; + } + /** + * An instance of `SuiteContext` is passed to each suite function in order to + * interact with the test runner. However, the `SuiteContext` constructor is not + * exposed as part of the API. + * @since v18.7.0, v16.17.0 + */ + class SuiteContext { + /** + * The name of the suite. + * @since v18.8.0, v16.18.0 + */ + readonly name: string; + /** + * Can be used to abort test subtasks when the test has been aborted. + * @since v18.7.0, v16.17.0 + */ + readonly signal: AbortSignal; + } + interface TestOptions { + /** + * If a number is provided, then that many tests would run in parallel. + * If truthy, it would run (number of cpu cores - 1) tests in parallel. + * For subtests, it will be `Infinity` tests in parallel. + * If falsy, it would only run one test at a time. + * If unspecified, subtests inherit this value from their parent. + * @default false + */ + concurrency?: number | boolean | undefined; + /** + * If truthy, and the test context is configured to run `only` tests, then this test will be + * run. Otherwise, the test is skipped. + * @default false + */ + only?: boolean | undefined; + /** + * Allows aborting an in-progress test. + * @since v18.8.0 + */ + signal?: AbortSignal | undefined; + /** + * If truthy, the test is skipped. If a string is provided, that string is displayed in the + * test results as the reason for skipping the test. + * @default false + */ + skip?: boolean | string | undefined; + /** + * A number of milliseconds the test will fail after. If unspecified, subtests inherit this + * value from their parent. + * @default Infinity + * @since v18.7.0 + */ + timeout?: number | undefined; + /** + * If truthy, the test marked as `TODO`. If a string is provided, that string is displayed in + * the test results as the reason why the test is `TODO`. + * @default false + */ + todo?: boolean | string | undefined; + } + /** + * This function is used to create a hook running before running a suite. + * + * ```js + * describe('tests', async () => { + * before(() => console.log('about to run some test')); + * it('is a subtest', () => { + * assert.ok('some relevant assertion here'); + * }); + * }); + * ``` + * @since v18.8.0, v16.18.0 + * @param [fn='A no-op function'] The hook function. If the hook uses callbacks, the callback function is passed as the second argument. + * @param options Configuration options for the hook. The following properties are supported: + */ + function before(fn?: HookFn, options?: HookOptions): void; + /** + * This function is used to create a hook running after running a suite. + * + * ```js + * describe('tests', async () => { + * after(() => console.log('finished running tests')); + * it('is a subtest', () => { + * assert.ok('some relevant assertion here'); + * }); + * }); + * ``` + * @since v18.8.0, v16.18.0 + * @param [fn='A no-op function'] The hook function. If the hook uses callbacks, the callback function is passed as the second argument. + * @param options Configuration options for the hook. The following properties are supported: + */ + function after(fn?: HookFn, options?: HookOptions): void; + /** + * This function is used to create a hook running + * before each subtest of the current suite. + * + * ```js + * describe('tests', async () => { + * beforeEach(() => console.log('about to run a test')); + * it('is a subtest', () => { + * assert.ok('some relevant assertion here'); + * }); + * }); + * ``` + * @since v18.8.0, v16.18.0 + * @param [fn='A no-op function'] The hook function. If the hook uses callbacks, the callback function is passed as the second argument. + * @param options Configuration options for the hook. The following properties are supported: + */ + function beforeEach(fn?: HookFn, options?: HookOptions): void; + /** + * This function is used to create a hook running + * after each subtest of the current test. + * + * ```js + * describe('tests', async () => { + * afterEach(() => console.log('finished running a test')); + * it('is a subtest', () => { + * assert.ok('some relevant assertion here'); + * }); + * }); + * ``` + * @since v18.8.0, v16.18.0 + * @param [fn='A no-op function'] The hook function. If the hook uses callbacks, the callback function is passed as the second argument. + * @param options Configuration options for the hook. The following properties are supported: + */ + function afterEach(fn?: HookFn, options?: HookOptions): void; + /** + * The hook function. If the hook uses callbacks, the callback function is passed as the + * second argument. + */ + type HookFn = (s: SuiteContext, done: (result?: any) => void) => any; + /** + * Configuration options for hooks. + * @since v18.8.0 + */ + interface HookOptions { + /** + * Allows aborting an in-progress hook. + */ + signal?: AbortSignal | undefined; + /** + * A number of milliseconds the hook will fail after. If unspecified, subtests inherit this + * value from their parent. + * @default Infinity + */ + timeout?: number | undefined; + } + interface MockFunctionOptions { + /** + * The number of times that the mock will use the behavior of `implementation`. + * Once the mock function has been called `times` times, + * it will automatically restore the behavior of `original`. + * This value must be an integer greater than zero. + * @default Infinity + */ + times?: number | undefined; + } + interface MockMethodOptions extends MockFunctionOptions { + /** + * If `true`, `object[methodName]` is treated as a getter. + * This option cannot be used with the `setter` option. + */ + getter?: boolean | undefined; + /** + * If `true`, `object[methodName]` is treated as a setter. + * This option cannot be used with the `getter` option. + */ + setter?: boolean | undefined; + } + type Mock = F & { + mock: MockFunctionContext; + }; + type NoOpFunction = (...args: any[]) => undefined; + type FunctionPropertyNames = { + [K in keyof T]: T[K] extends Function ? K : never; + }[keyof T]; + /** + * The `MockTracker` class is used to manage mocking functionality. The test runner + * module provides a top level `mock` export which is a `MockTracker` instance. + * Each test also provides its own `MockTracker` instance via the test context's`mock` property. + * @since v19.1.0, v18.13.0 + */ + class MockTracker { + /** + * This function is used to create a mock function. + * + * The following example creates a mock function that increments a counter by one + * on each invocation. The `times` option is used to modify the mock behavior such + * that the first two invocations add two to the counter instead of one. + * + * ```js + * test('mocks a counting function', (t) => { + * let cnt = 0; + * + * function addOne() { + * cnt++; + * return cnt; + * } + * + * function addTwo() { + * cnt += 2; + * return cnt; + * } + * + * const fn = t.mock.fn(addOne, addTwo, { times: 2 }); + * + * assert.strictEqual(fn(), 2); + * assert.strictEqual(fn(), 4); + * assert.strictEqual(fn(), 5); + * assert.strictEqual(fn(), 6); + * }); + * ``` + * @since v19.1.0, v18.13.0 + * @param [original='A no-op function'] An optional function to create a mock on. + * @param implementation An optional function used as the mock implementation for `original`. This is useful for creating mocks that exhibit one behavior for a specified number of calls and + * then restore the behavior of `original`. + * @param options Optional configuration options for the mock function. The following properties are supported: + * @return The mocked function. The mocked function contains a special `mock` property, which is an instance of {@link MockFunctionContext}, and can be used for inspecting and changing the + * behavior of the mocked function. + */ + fn(original?: F, options?: MockFunctionOptions): Mock; + fn( + original?: F, + implementation?: Implementation, + options?: MockFunctionOptions, + ): Mock; + /** + * This function is used to create a mock on an existing object method. The + * following example demonstrates how a mock is created on an existing object + * method. + * + * ```js + * test('spies on an object method', (t) => { + * const number = { + * value: 5, + * subtract(a) { + * return this.value - a; + * }, + * }; + * + * t.mock.method(number, 'subtract'); + * assert.strictEqual(number.subtract.mock.calls.length, 0); + * assert.strictEqual(number.subtract(3), 2); + * assert.strictEqual(number.subtract.mock.calls.length, 1); + * + * const call = number.subtract.mock.calls[0]; + * + * assert.deepStrictEqual(call.arguments, [3]); + * assert.strictEqual(call.result, 2); + * assert.strictEqual(call.error, undefined); + * assert.strictEqual(call.target, undefined); + * assert.strictEqual(call.this, number); + * }); + * ``` + * @since v19.1.0, v18.13.0 + * @param object The object whose method is being mocked. + * @param methodName The identifier of the method on `object` to mock. If `object[methodName]` is not a function, an error is thrown. + * @param implementation An optional function used as the mock implementation for `object[methodName]`. + * @param options Optional configuration options for the mock method. The following properties are supported: + * @return The mocked method. The mocked method contains a special `mock` property, which is an instance of {@link MockFunctionContext}, and can be used for inspecting and changing the + * behavior of the mocked method. + */ + method< + MockedObject extends object, + MethodName extends FunctionPropertyNames, + >( + object: MockedObject, + methodName: MethodName, + options?: MockFunctionOptions, + ): MockedObject[MethodName] extends Function ? Mock + : never; + method< + MockedObject extends object, + MethodName extends FunctionPropertyNames, + Implementation extends Function, + >( + object: MockedObject, + methodName: MethodName, + implementation: Implementation, + options?: MockFunctionOptions, + ): MockedObject[MethodName] extends Function ? Mock + : never; + method( + object: MockedObject, + methodName: keyof MockedObject, + options: MockMethodOptions, + ): Mock; + method( + object: MockedObject, + methodName: keyof MockedObject, + implementation: Function, + options: MockMethodOptions, + ): Mock; + + /** + * This function is syntax sugar for `MockTracker.method` with `options.getter`set to `true`. + * @since v19.3.0, v18.13.0 + */ + getter< + MockedObject extends object, + MethodName extends keyof MockedObject, + >( + object: MockedObject, + methodName: MethodName, + options?: MockFunctionOptions, + ): Mock<() => MockedObject[MethodName]>; + getter< + MockedObject extends object, + MethodName extends keyof MockedObject, + Implementation extends Function, + >( + object: MockedObject, + methodName: MethodName, + implementation?: Implementation, + options?: MockFunctionOptions, + ): Mock<(() => MockedObject[MethodName]) | Implementation>; + /** + * This function is syntax sugar for `MockTracker.method` with `options.setter`set to `true`. + * @since v19.3.0, v18.13.0 + */ + setter< + MockedObject extends object, + MethodName extends keyof MockedObject, + >( + object: MockedObject, + methodName: MethodName, + options?: MockFunctionOptions, + ): Mock<(value: MockedObject[MethodName]) => void>; + setter< + MockedObject extends object, + MethodName extends keyof MockedObject, + Implementation extends Function, + >( + object: MockedObject, + methodName: MethodName, + implementation?: Implementation, + options?: MockFunctionOptions, + ): Mock<((value: MockedObject[MethodName]) => void) | Implementation>; + /** + * This function restores the default behavior of all mocks that were previously + * created by this `MockTracker` and disassociates the mocks from the`MockTracker` instance. Once disassociated, the mocks can still be used, but the`MockTracker` instance can no longer be + * used to reset their behavior or + * otherwise interact with them. + * + * After each test completes, this function is called on the test context's`MockTracker`. If the global `MockTracker` is used extensively, calling this + * function manually is recommended. + * @since v19.1.0, v18.13.0 + */ + reset(): void; + /** + * This function restores the default behavior of all mocks that were previously + * created by this `MockTracker`. Unlike `mock.reset()`, `mock.restoreAll()` does + * not disassociate the mocks from the `MockTracker` instance. + * @since v19.1.0, v18.13.0 + */ + restoreAll(): void; + timers: MockTimers; + } + const mock: MockTracker; + interface MockFunctionCall< + F extends Function, + ReturnType = F extends (...args: any) => infer T ? T + : F extends abstract new(...args: any) => infer T ? T + : unknown, + Args = F extends (...args: infer Y) => any ? Y + : F extends abstract new(...args: infer Y) => any ? Y + : unknown[], + > { + /** + * An array of the arguments passed to the mock function. + */ + arguments: Args; + /** + * If the mocked function threw then this property contains the thrown value. + */ + error: unknown | undefined; + /** + * The value returned by the mocked function. + * + * If the mocked function threw, it will be `undefined`. + */ + result: ReturnType | undefined; + /** + * An `Error` object whose stack can be used to determine the callsite of the mocked function invocation. + */ + stack: Error; + /** + * If the mocked function is a constructor, this field contains the class being constructed. + * Otherwise this will be `undefined`. + */ + target: F extends abstract new(...args: any) => any ? F : undefined; + /** + * The mocked function's `this` value. + */ + this: unknown; + } + /** + * The `MockFunctionContext` class is used to inspect or manipulate the behavior of + * mocks created via the `MockTracker` APIs. + * @since v19.1.0, v18.13.0 + */ + class MockFunctionContext { + /** + * A getter that returns a copy of the internal array used to track calls to the + * mock. Each entry in the array is an object with the following properties. + * @since v19.1.0, v18.13.0 + */ + readonly calls: Array>; + /** + * This function returns the number of times that this mock has been invoked. This + * function is more efficient than checking `ctx.calls.length` because `ctx.calls`is a getter that creates a copy of the internal call tracking array. + * @since v19.1.0, v18.13.0 + * @return The number of times that this mock has been invoked. + */ + callCount(): number; + /** + * This function is used to change the behavior of an existing mock. + * + * The following example creates a mock function using `t.mock.fn()`, calls the + * mock function, and then changes the mock implementation to a different function. + * + * ```js + * test('changes a mock behavior', (t) => { + * let cnt = 0; + * + * function addOne() { + * cnt++; + * return cnt; + * } + * + * function addTwo() { + * cnt += 2; + * return cnt; + * } + * + * const fn = t.mock.fn(addOne); + * + * assert.strictEqual(fn(), 1); + * fn.mock.mockImplementation(addTwo); + * assert.strictEqual(fn(), 3); + * assert.strictEqual(fn(), 5); + * }); + * ``` + * @since v19.1.0, v18.13.0 + * @param implementation The function to be used as the mock's new implementation. + */ + mockImplementation(implementation: Function): void; + /** + * This function is used to change the behavior of an existing mock for a single + * invocation. Once invocation `onCall` has occurred, the mock will revert to + * whatever behavior it would have used had `mockImplementationOnce()` not been + * called. + * + * The following example creates a mock function using `t.mock.fn()`, calls the + * mock function, changes the mock implementation to a different function for the + * next invocation, and then resumes its previous behavior. + * + * ```js + * test('changes a mock behavior once', (t) => { + * let cnt = 0; + * + * function addOne() { + * cnt++; + * return cnt; + * } + * + * function addTwo() { + * cnt += 2; + * return cnt; + * } + * + * const fn = t.mock.fn(addOne); + * + * assert.strictEqual(fn(), 1); + * fn.mock.mockImplementationOnce(addTwo); + * assert.strictEqual(fn(), 3); + * assert.strictEqual(fn(), 4); + * }); + * ``` + * @since v19.1.0, v18.13.0 + * @param implementation The function to be used as the mock's implementation for the invocation number specified by `onCall`. + * @param onCall The invocation number that will use `implementation`. If the specified invocation has already occurred then an exception is thrown. + */ + mockImplementationOnce(implementation: Function, onCall?: number): void; + /** + * Resets the call history of the mock function. + * @since v19.3.0, v18.13.0 + */ + resetCalls(): void; + /** + * Resets the implementation of the mock function to its original behavior. The + * mock can still be used after calling this function. + * @since v19.1.0, v18.13.0 + */ + restore(): void; + } + type Timer = "setInterval" | "clearInterval" | "setTimeout" | "clearTimeout"; + /** + * Mocking timers is a technique commonly used in software testing to simulate and + * control the behavior of timers, such as `setInterval` and `setTimeout`, + * without actually waiting for the specified time intervals. + * + * The `MockTracker` provides a top-level `timers` export + * which is a `MockTimers` instance. + * @since v20.4.0 + * @experimental + */ + class MockTimers { + /** + * Enables timer mocking for the specified timers. + * + * **Note:** When you enable mocking for a specific timer, its associated + * clear function will also be implicitly mocked. + * + * Example usage: + * + * ```js + * import { mock } from 'node:test'; + * mock.timers.enable(['setInterval']); + * ``` + * + * ```js + * const { mock } = require('node:test'); + * mock.timers.enable(['setInterval']); + * ``` + * + * The above example enables mocking for the `setInterval` timer and + * implicitly mocks the `clearInterval` function. Only the `setInterval`and `clearInterval` functions from `node:timers`,`node:timers/promises`, and`globalThis` will be mocked. + * + * Alternatively, if you call `mock.timers.enable()` without any parameters: + * + * All timers (`'setInterval'`, `'clearInterval'`, `'setTimeout'`, and `'clearTimeout'`) + * will be mocked. The `setInterval`, `clearInterval`, `setTimeout`, and `clearTimeout`functions from `node:timers`, `node:timers/promises`, + * and `globalThis` will be mocked. + * @since v20.4.0 + */ + enable(timers?: Timer[]): void; + /** + * This function restores the default behavior of all mocks that were previously + * created by this `MockTimers` instance and disassociates the mocks + * from the `MockTracker` instance. + * + * **Note:** After each test completes, this function is called on + * the test context's `MockTracker`. + * + * ```js + * import { mock } from 'node:test'; + * mock.timers.reset(); + * ``` + * + * ```js + * const { mock } = require('node:test'); + * mock.timers.reset(); + * ``` + * @since v20.4.0 + */ + reset(): void; + /** + * Advances time for all mocked timers. + * + * **Note:** This diverges from how `setTimeout` in Node.js behaves and accepts + * only positive numbers. In Node.js, `setTimeout` with negative numbers is + * only supported for web compatibility reasons. + * + * The following example mocks a `setTimeout` function and + * by using `.tick` advances in + * time triggering all pending timers. + * + * ```js + * import assert from 'node:assert'; + * import { test } from 'node:test'; + * + * test('mocks setTimeout to be executed synchronously without having to actually wait for it', (context) => { + * const fn = context.mock.fn(); + * + * context.mock.timers.enable(['setTimeout']); + * + * setTimeout(fn, 9999); + * + * assert.strictEqual(fn.mock.callCount(), 0); + * + * // Advance in time + * context.mock.timers.tick(9999); + * + * assert.strictEqual(fn.mock.callCount(), 1); + * }); + * ``` + * + * ```js + * const assert = require('node:assert'); + * const { test } = require('node:test'); + * + * test('mocks setTimeout to be executed synchronously without having to actually wait for it', (context) => { + * const fn = context.mock.fn(); + * context.mock.timers.enable(['setTimeout']); + * + * setTimeout(fn, 9999); + * assert.strictEqual(fn.mock.callCount(), 0); + * + * // Advance in time + * context.mock.timers.tick(9999); + * + * assert.strictEqual(fn.mock.callCount(), 1); + * }); + * ``` + * + * Alternativelly, the `.tick` function can be called many times + * + * ```js + * import assert from 'node:assert'; + * import { test } from 'node:test'; + * + * test('mocks setTimeout to be executed synchronously without having to actually wait for it', (context) => { + * const fn = context.mock.fn(); + * context.mock.timers.enable(['setTimeout']); + * const nineSecs = 9000; + * setTimeout(fn, nineSecs); + * + * const twoSeconds = 3000; + * context.mock.timers.tick(twoSeconds); + * context.mock.timers.tick(twoSeconds); + * context.mock.timers.tick(twoSeconds); + * + * assert.strictEqual(fn.mock.callCount(), 1); + * }); + * ``` + * + * ```js + * const assert = require('node:assert'); + * const { test } = require('node:test'); + * + * test('mocks setTimeout to be executed synchronously without having to actually wait for it', (context) => { + * const fn = context.mock.fn(); + * context.mock.timers.enable(['setTimeout']); + * const nineSecs = 9000; + * setTimeout(fn, nineSecs); + * + * const twoSeconds = 3000; + * context.mock.timers.tick(twoSeconds); + * context.mock.timers.tick(twoSeconds); + * context.mock.timers.tick(twoSeconds); + * + * assert.strictEqual(fn.mock.callCount(), 1); + * }); + * ``` + * @since v20.4.0 + */ + tick(milliseconds: number): void; + /** + * Triggers all pending mocked timers immediately. + * + * The example below triggers all pending timers immediately, + * causing them to execute without any delay. + * + * ```js + * import assert from 'node:assert'; + * import { test } from 'node:test'; + * + * test('runAll functions following the given order', (context) => { + * context.mock.timers.enable(['setTimeout']); + * const results = []; + * setTimeout(() => results.push(1), 9999); + * + * // Notice that if both timers have the same timeout, + * // the order of execution is guaranteed + * setTimeout(() => results.push(3), 8888); + * setTimeout(() => results.push(2), 8888); + * + * assert.deepStrictEqual(results, []); + * + * context.mock.timers.runAll(); + * + * assert.deepStrictEqual(results, [3, 2, 1]); + * }); + * ``` + * + * ```js + * const assert = require('node:assert'); + * const { test } = require('node:test'); + * + * test('runAll functions following the given order', (context) => { + * context.mock.timers.enable(['setTimeout']); + * const results = []; + * setTimeout(() => results.push(1), 9999); + * + * // Notice that if both timers have the same timeout, + * // the order of execution is guaranteed + * setTimeout(() => results.push(3), 8888); + * setTimeout(() => results.push(2), 8888); + * + * assert.deepStrictEqual(results, []); + * + * context.mock.timers.runAll(); + * + * assert.deepStrictEqual(results, [3, 2, 1]); + * }); + * ``` + * + * **Note:** The `runAll()` function is specifically designed for + * triggering timers in the context of timer mocking. + * It does not have any effect on real-time system + * clocks or actual timers outside of the mocking environment. + * @since v20.4.0 + */ + runAll(): void; + /** + * Calls {@link MockTimers.reset()}. + */ + [Symbol.dispose](): void; + } + export { after, afterEach, before, beforeEach, describe, it, mock, only, run, skip, test, test as default, todo, Mock }; +} + +interface DiagnosticData { + /** + * The diagnostic message. + */ + message: string; + /** + * The nesting level of the test. + */ + nesting: number; + /** + * The path of the test file, undefined if test is not ran through a file. + */ + file?: string; +} +interface TestFail { + /** + * Additional execution metadata. + */ + details: { + /** + * The duration of the test in milliseconds. + */ + duration_ms: number; + /** + * The error thrown by the test. + */ + error: Error; + /** + * The type of the test, used to denote whether this is a suite. + * @since 20.0.0, 19.9.0, 18.17.0 + */ + type?: "suite"; + }; + /** + * The test name. + */ + name: string; + /** + * The nesting level of the test. + */ + nesting: number; + /** + * The ordinal number of the test. + */ + testNumber: number; + /** + * Present if `context.todo` is called. + */ + todo?: string | boolean; + /** + * Present if `context.skip` is called. + */ + skip?: string | boolean; + /** + * The path of the test file, undefined if test is not ran through a file. + */ + file?: string; +} +interface TestPass { + /** + * Additional execution metadata. + */ + details: { + /** + * The duration of the test in milliseconds. + */ + duration_ms: number; + /** + * The type of the test, used to denote whether this is a suite. + * @since 20.0.0, 19.9.0, 18.17.0 + */ + type?: "suite"; + }; + /** + * The test name. + */ + name: string; + /** + * The nesting level of the test. + */ + nesting: number; + /** + * The ordinal number of the test. + */ + testNumber: number; + /** + * Present if `context.todo` is called. + */ + todo?: string | boolean; + /** + * Present if `context.skip` is called. + */ + skip?: string | boolean; + /** + * The path of the test file, undefined if test is not ran through a file. + */ + file?: string; +} +interface TestPlan { + /** + * The nesting level of the test. + */ + nesting: number; + /** + * The number of subtests that have ran. + */ + count: number; + /** + * The path of the test file, undefined if test is not ran through a file. + */ + file?: string; +} +interface TestStart { + /** + * The test name. + */ + name: string; + /** + * The nesting level of the test. + */ + nesting: number; + /** + * The path of the test file, undefined if test is not ran through a file. + */ + file?: string; +} +interface TestStderr { + /** + * The path of the test file, undefined if test is not ran through a file. + */ + file?: string; + /** + * The message written to `stderr` + */ + message: string; +} +interface TestStdout { + /** + * The path of the test file, undefined if test is not ran through a file. + */ + file?: string; + /** + * The message written to `stdout` + */ + message: string; +} +interface TestEnqueue { + /** + * The test name + */ + name: string; + /** + * The path of the test file, undefined if test is not ran through a file. + */ + file?: string; + /** + * The nesting level of the test. + */ + nesting: number; +} +interface TestDequeue { + /** + * The test name + */ + name: string; + /** + * The path of the test file, undefined if test is not ran through a file. + */ + file?: string; + /** + * The nesting level of the test. + */ + nesting: number; +} + +/** + * The `node:test/reporters` module exposes the builtin-reporters for `node:test`. + * To access it: + * + * ```js + * import test from 'node:test/reporters'; + * ``` + * + * This module is only available under the `node:` scheme. The following will not + * work: + * + * ```js + * import test from 'test/reporters'; + * ``` + * @since v19.9.0 + * @see [source](https://github.com/nodejs/node/blob/v20.2.0/lib/test/reporters.js) + */ +declare module "node:test/reporters" { + import { Transform } from "node:stream"; + + type TestEvent = + | { type: "test:diagnostic"; data: DiagnosticData } + | { type: "test:fail"; data: TestFail } + | { type: "test:pass"; data: TestPass } + | { type: "test:plan"; data: TestPlan } + | { type: "test:start"; data: TestStart } + | { type: "test:stderr"; data: TestStderr } + | { type: "test:stdout"; data: TestStdout } + | { type: "test:enqueue"; data: TestEnqueue } + | { type: "test:dequeue"; data: TestDequeue } + | { type: "test:watch:drained" }; + type TestEventGenerator = AsyncGenerator; + + /** + * The `dot` reporter outputs the test results in a compact format, + * where each passing test is represented by a `.`, + * and each failing test is represented by a `X`. + */ + function dot(source: TestEventGenerator): AsyncGenerator<"\n" | "." | "X", void>; + /** + * The `tap` reporter outputs the test results in the [TAP](https://testanything.org/) format. + */ + function tap(source: TestEventGenerator): AsyncGenerator; + /** + * The `spec` reporter outputs the test results in a human-readable format. + */ + class Spec extends Transform { + constructor(); + } + export { dot, Spec as spec, tap, TestEvent }; +} diff --git a/Url-Shortner/node_modules/@types/node/timers.d.ts b/Url-Shortner/node_modules/@types/node/timers.d.ts new file mode 100644 index 0000000..1434e7d --- /dev/null +++ b/Url-Shortner/node_modules/@types/node/timers.d.ts @@ -0,0 +1,240 @@ +/** + * The `timer` module exposes a global API for scheduling functions to + * be called at some future period of time. Because the timer functions are + * globals, there is no need to call `require('node:timers')` to use the API. + * + * The timer functions within Node.js implement a similar API as the timers API + * provided by Web Browsers but use a different internal implementation that is + * built around the Node.js [Event Loop](https://nodejs.org/en/docs/guides/event-loop-timers-and-nexttick/#setimmediate-vs-settimeout). + * @see [source](https://github.com/nodejs/node/blob/v20.2.0/lib/timers.js) + */ +declare module "timers" { + import { Abortable } from "node:events"; + import { + setImmediate as setImmediatePromise, + setInterval as setIntervalPromise, + setTimeout as setTimeoutPromise, + } from "node:timers/promises"; + interface TimerOptions extends Abortable { + /** + * Set to `false` to indicate that the scheduled `Timeout` + * should not require the Node.js event loop to remain active. + * @default true + */ + ref?: boolean | undefined; + } + let setTimeout: typeof global.setTimeout; + let clearTimeout: typeof global.clearTimeout; + let setInterval: typeof global.setInterval; + let clearInterval: typeof global.clearInterval; + let setImmediate: typeof global.setImmediate; + let clearImmediate: typeof global.clearImmediate; + global { + namespace NodeJS { + // compatibility with older typings + interface Timer extends RefCounted { + hasRef(): boolean; + refresh(): this; + [Symbol.toPrimitive](): number; + } + /** + * This object is created internally and is returned from `setImmediate()`. It + * can be passed to `clearImmediate()` in order to cancel the scheduled + * actions. + * + * By default, when an immediate is scheduled, the Node.js event loop will continue + * running as long as the immediate is active. The `Immediate` object returned by `setImmediate()` exports both `immediate.ref()` and `immediate.unref()`functions that can be used to + * control this default behavior. + */ + class Immediate implements RefCounted { + /** + * When called, requests that the Node.js event loop _not_ exit so long as the`Immediate` is active. Calling `immediate.ref()` multiple times will have no + * effect. + * + * By default, all `Immediate` objects are "ref'ed", making it normally unnecessary + * to call `immediate.ref()` unless `immediate.unref()` had been called previously. + * @since v9.7.0 + * @return a reference to `immediate` + */ + ref(): this; + /** + * When called, the active `Immediate` object will not require the Node.js event + * loop to remain active. If there is no other activity keeping the event loop + * running, the process may exit before the `Immediate` object's callback is + * invoked. Calling `immediate.unref()` multiple times will have no effect. + * @since v9.7.0 + * @return a reference to `immediate` + */ + unref(): this; + /** + * If true, the `Immediate` object will keep the Node.js event loop active. + * @since v11.0.0 + */ + hasRef(): boolean; + _onImmediate: Function; // to distinguish it from the Timeout class + /** + * Cancels the immediate. This is similar to calling `clearImmediate()`. + * @since v20.5.0 + */ + [Symbol.dispose](): void; + } + /** + * This object is created internally and is returned from `setTimeout()` and `setInterval()`. It can be passed to either `clearTimeout()` or `clearInterval()` in order to cancel the + * scheduled actions. + * + * By default, when a timer is scheduled using either `setTimeout()` or `setInterval()`, the Node.js event loop will continue running as long as the + * timer is active. Each of the `Timeout` objects returned by these functions + * export both `timeout.ref()` and `timeout.unref()` functions that can be used to + * control this default behavior. + */ + class Timeout implements Timer { + /** + * When called, requests that the Node.js event loop _not_ exit so long as the`Timeout` is active. Calling `timeout.ref()` multiple times will have no effect. + * + * By default, all `Timeout` objects are "ref'ed", making it normally unnecessary + * to call `timeout.ref()` unless `timeout.unref()` had been called previously. + * @since v0.9.1 + * @return a reference to `timeout` + */ + ref(): this; + /** + * When called, the active `Timeout` object will not require the Node.js event loop + * to remain active. If there is no other activity keeping the event loop running, + * the process may exit before the `Timeout` object's callback is invoked. Calling`timeout.unref()` multiple times will have no effect. + * @since v0.9.1 + * @return a reference to `timeout` + */ + unref(): this; + /** + * If true, the `Timeout` object will keep the Node.js event loop active. + * @since v11.0.0 + */ + hasRef(): boolean; + /** + * Sets the timer's start time to the current time, and reschedules the timer to + * call its callback at the previously specified duration adjusted to the current + * time. This is useful for refreshing a timer without allocating a new + * JavaScript object. + * + * Using this on a timer that has already called its callback will reactivate the + * timer. + * @since v10.2.0 + * @return a reference to `timeout` + */ + refresh(): this; + [Symbol.toPrimitive](): number; + /** + * Cancels the timeout. + * @since v20.5.0 + */ + [Symbol.dispose](): void; + } + } + /** + * Schedules execution of a one-time `callback` after `delay` milliseconds. + * + * The `callback` will likely not be invoked in precisely `delay` milliseconds. + * Node.js makes no guarantees about the exact timing of when callbacks will fire, + * nor of their ordering. The callback will be called as close as possible to the + * time specified. + * + * When `delay` is larger than `2147483647` or less than `1`, the `delay`will be set to `1`. Non-integer delays are truncated to an integer. + * + * If `callback` is not a function, a `TypeError` will be thrown. + * + * This method has a custom variant for promises that is available using `timersPromises.setTimeout()`. + * @since v0.0.1 + * @param callback The function to call when the timer elapses. + * @param [delay=1] The number of milliseconds to wait before calling the `callback`. + * @param args Optional arguments to pass when the `callback` is called. + * @return for use with {@link clearTimeout} + */ + function setTimeout( + callback: (...args: TArgs) => void, + ms?: number, + ...args: TArgs + ): NodeJS.Timeout; + // util.promisify no rest args compability + // tslint:disable-next-line void-return + function setTimeout(callback: (args: void) => void, ms?: number): NodeJS.Timeout; + namespace setTimeout { + const __promisify__: typeof setTimeoutPromise; + } + /** + * Cancels a `Timeout` object created by `setTimeout()`. + * @since v0.0.1 + * @param timeout A `Timeout` object as returned by {@link setTimeout} or the `primitive` of the `Timeout` object as a string or a number. + */ + function clearTimeout(timeoutId: NodeJS.Timeout | string | number | undefined): void; + /** + * Schedules repeated execution of `callback` every `delay` milliseconds. + * + * When `delay` is larger than `2147483647` or less than `1`, the `delay` will be + * set to `1`. Non-integer delays are truncated to an integer. + * + * If `callback` is not a function, a `TypeError` will be thrown. + * + * This method has a custom variant for promises that is available using `timersPromises.setInterval()`. + * @since v0.0.1 + * @param callback The function to call when the timer elapses. + * @param [delay=1] The number of milliseconds to wait before calling the `callback`. + * @param args Optional arguments to pass when the `callback` is called. + * @return for use with {@link clearInterval} + */ + function setInterval( + callback: (...args: TArgs) => void, + ms?: number, + ...args: TArgs + ): NodeJS.Timeout; + // util.promisify no rest args compability + // tslint:disable-next-line void-return + function setInterval(callback: (args: void) => void, ms?: number): NodeJS.Timeout; + namespace setInterval { + const __promisify__: typeof setIntervalPromise; + } + /** + * Cancels a `Timeout` object created by `setInterval()`. + * @since v0.0.1 + * @param timeout A `Timeout` object as returned by {@link setInterval} or the `primitive` of the `Timeout` object as a string or a number. + */ + function clearInterval(intervalId: NodeJS.Timeout | string | number | undefined): void; + /** + * Schedules the "immediate" execution of the `callback` after I/O events' + * callbacks. + * + * When multiple calls to `setImmediate()` are made, the `callback` functions are + * queued for execution in the order in which they are created. The entire callback + * queue is processed every event loop iteration. If an immediate timer is queued + * from inside an executing callback, that timer will not be triggered until the + * next event loop iteration. + * + * If `callback` is not a function, a `TypeError` will be thrown. + * + * This method has a custom variant for promises that is available using `timersPromises.setImmediate()`. + * @since v0.9.1 + * @param callback The function to call at the end of this turn of the Node.js `Event Loop` + * @param args Optional arguments to pass when the `callback` is called. + * @return for use with {@link clearImmediate} + */ + function setImmediate( + callback: (...args: TArgs) => void, + ...args: TArgs + ): NodeJS.Immediate; + // util.promisify no rest args compability + // tslint:disable-next-line void-return + function setImmediate(callback: (args: void) => void): NodeJS.Immediate; + namespace setImmediate { + const __promisify__: typeof setImmediatePromise; + } + /** + * Cancels an `Immediate` object created by `setImmediate()`. + * @since v0.9.1 + * @param immediate An `Immediate` object as returned by {@link setImmediate}. + */ + function clearImmediate(immediateId: NodeJS.Immediate | undefined): void; + function queueMicrotask(callback: () => void): void; + } +} +declare module "node:timers" { + export * from "timers"; +} diff --git a/Url-Shortner/node_modules/@types/node/timers/promises.d.ts b/Url-Shortner/node_modules/@types/node/timers/promises.d.ts new file mode 100644 index 0000000..5a54dc7 --- /dev/null +++ b/Url-Shortner/node_modules/@types/node/timers/promises.d.ts @@ -0,0 +1,93 @@ +/** + * The `timers/promises` API provides an alternative set of timer functions + * that return `Promise` objects. The API is accessible via`require('node:timers/promises')`. + * + * ```js + * import { + * setTimeout, + * setImmediate, + * setInterval, + * } from 'timers/promises'; + * ``` + * @since v15.0.0 + */ +declare module "timers/promises" { + import { TimerOptions } from "node:timers"; + /** + * ```js + * import { + * setTimeout, + * } from 'timers/promises'; + * + * const res = await setTimeout(100, 'result'); + * + * console.log(res); // Prints 'result' + * ``` + * @since v15.0.0 + * @param [delay=1] The number of milliseconds to wait before fulfilling the promise. + * @param value A value with which the promise is fulfilled. + */ + function setTimeout(delay?: number, value?: T, options?: TimerOptions): Promise; + /** + * ```js + * import { + * setImmediate, + * } from 'timers/promises'; + * + * const res = await setImmediate('result'); + * + * console.log(res); // Prints 'result' + * ``` + * @since v15.0.0 + * @param value A value with which the promise is fulfilled. + */ + function setImmediate(value?: T, options?: TimerOptions): Promise; + /** + * Returns an async iterator that generates values in an interval of `delay` ms. + * If `ref` is `true`, you need to call `next()` of async iterator explicitly + * or implicitly to keep the event loop alive. + * + * ```js + * import { + * setInterval, + * } from 'timers/promises'; + * + * const interval = 100; + * for await (const startTime of setInterval(interval, Date.now())) { + * const now = Date.now(); + * console.log(now); + * if ((now - startTime) > 1000) + * break; + * } + * console.log(Date.now()); + * ``` + * @since v15.9.0 + */ + function setInterval(delay?: number, value?: T, options?: TimerOptions): AsyncIterable; + interface Scheduler { + /** + * ```js + * import { scheduler } from 'node:timers/promises'; + * + * await scheduler.wait(1000); // Wait one second before continuing + * ``` + * An experimental API defined by the Scheduling APIs draft specification being developed as a standard Web Platform API. + * Calling timersPromises.scheduler.wait(delay, options) is roughly equivalent to calling timersPromises.setTimeout(delay, undefined, options) except that the ref option is not supported. + * @since v16.14.0 + * @experimental + * @param [delay=1] The number of milliseconds to wait before fulfilling the promise. + */ + wait: (delay?: number, options?: TimerOptions) => Promise; + /** + * An experimental API defined by the Scheduling APIs draft specification being developed as a standard Web Platform API. + * Calling timersPromises.scheduler.yield() is equivalent to calling timersPromises.setImmediate() with no arguments. + * @since v16.14.0 + * @experimental + */ + yield: () => Promise; + } + const scheduler: Scheduler; +} +declare module "node:timers/promises" { + export * from "timers/promises"; +} diff --git a/Url-Shortner/node_modules/@types/node/tls.d.ts b/Url-Shortner/node_modules/@types/node/tls.d.ts new file mode 100644 index 0000000..141af8e --- /dev/null +++ b/Url-Shortner/node_modules/@types/node/tls.d.ts @@ -0,0 +1,1210 @@ +/** + * The `node:tls` module provides an implementation of the Transport Layer Security + * (TLS) and Secure Socket Layer (SSL) protocols that is built on top of OpenSSL. + * The module can be accessed using: + * + * ```js + * const tls = require('node:tls'); + * ``` + * @see [source](https://github.com/nodejs/node/blob/v20.2.0/lib/tls.js) + */ +declare module "tls" { + import { X509Certificate } from "node:crypto"; + import * as net from "node:net"; + import * as stream from "stream"; + const CLIENT_RENEG_LIMIT: number; + const CLIENT_RENEG_WINDOW: number; + interface Certificate { + /** + * Country code. + */ + C: string; + /** + * Street. + */ + ST: string; + /** + * Locality. + */ + L: string; + /** + * Organization. + */ + O: string; + /** + * Organizational unit. + */ + OU: string; + /** + * Common name. + */ + CN: string; + } + interface PeerCertificate { + /** + * `true` if a Certificate Authority (CA), `false` otherwise. + * @since v18.13.0 + */ + ca: boolean; + /** + * The DER encoded X.509 certificate data. + */ + raw: Buffer; + /** + * The certificate subject. + */ + subject: Certificate; + /** + * The certificate issuer, described in the same terms as the `subject`. + */ + issuer: Certificate; + /** + * The date-time the certificate is valid from. + */ + valid_from: string; + /** + * The date-time the certificate is valid to. + */ + valid_to: string; + /** + * The certificate serial number, as a hex string. + */ + serialNumber: string; + /** + * The SHA-1 digest of the DER encoded certificate. + * It is returned as a `:` separated hexadecimal string. + */ + fingerprint: string; + /** + * The SHA-256 digest of the DER encoded certificate. + * It is returned as a `:` separated hexadecimal string. + */ + fingerprint256: string; + /** + * The SHA-512 digest of the DER encoded certificate. + * It is returned as a `:` separated hexadecimal string. + */ + fingerprint512: string; + /** + * The extended key usage, a set of OIDs. + */ + ext_key_usage?: string[]; + /** + * A string containing concatenated names for the subject, + * an alternative to the `subject` names. + */ + subjectaltname?: string; + /** + * An array describing the AuthorityInfoAccess, used with OCSP. + */ + infoAccess?: NodeJS.Dict; + /** + * For RSA keys: The RSA bit size. + * + * For EC keys: The key size in bits. + */ + bits?: number; + /** + * The RSA exponent, as a string in hexadecimal number notation. + */ + exponent?: string; + /** + * The RSA modulus, as a hexadecimal string. + */ + modulus?: string; + /** + * The public key. + */ + pubkey?: Buffer; + /** + * The ASN.1 name of the OID of the elliptic curve. + * Well-known curves are identified by an OID. + * While it is unusual, it is possible that the curve + * is identified by its mathematical properties, + * in which case it will not have an OID. + */ + asn1Curve?: string; + /** + * The NIST name for the elliptic curve,if it has one + * (not all well-known curves have been assigned names by NIST). + */ + nistCurve?: string; + } + interface DetailedPeerCertificate extends PeerCertificate { + /** + * The issuer certificate object. + * For self-signed certificates, this may be a circular reference. + */ + issuerCertificate: DetailedPeerCertificate; + } + interface CipherNameAndProtocol { + /** + * The cipher name. + */ + name: string; + /** + * SSL/TLS protocol version. + */ + version: string; + /** + * IETF name for the cipher suite. + */ + standardName: string; + } + interface EphemeralKeyInfo { + /** + * The supported types are 'DH' and 'ECDH'. + */ + type: string; + /** + * The name property is available only when type is 'ECDH'. + */ + name?: string | undefined; + /** + * The size of parameter of an ephemeral key exchange. + */ + size: number; + } + interface KeyObject { + /** + * Private keys in PEM format. + */ + pem: string | Buffer; + /** + * Optional passphrase. + */ + passphrase?: string | undefined; + } + interface PxfObject { + /** + * PFX or PKCS12 encoded private key and certificate chain. + */ + buf: string | Buffer; + /** + * Optional passphrase. + */ + passphrase?: string | undefined; + } + interface TLSSocketOptions extends SecureContextOptions, CommonConnectionOptions { + /** + * If true the TLS socket will be instantiated in server-mode. + * Defaults to false. + */ + isServer?: boolean | undefined; + /** + * An optional net.Server instance. + */ + server?: net.Server | undefined; + /** + * An optional Buffer instance containing a TLS session. + */ + session?: Buffer | undefined; + /** + * If true, specifies that the OCSP status request extension will be + * added to the client hello and an 'OCSPResponse' event will be + * emitted on the socket before establishing a secure communication + */ + requestOCSP?: boolean | undefined; + } + /** + * Performs transparent encryption of written data and all required TLS + * negotiation. + * + * Instances of `tls.TLSSocket` implement the duplex `Stream` interface. + * + * Methods that return TLS connection metadata (e.g.{@link TLSSocket.getPeerCertificate}) will only return data while the + * connection is open. + * @since v0.11.4 + */ + class TLSSocket extends net.Socket { + /** + * Construct a new tls.TLSSocket object from an existing TCP socket. + */ + constructor(socket: net.Socket, options?: TLSSocketOptions); + /** + * This property is `true` if the peer certificate was signed by one of the CAs + * specified when creating the `tls.TLSSocket` instance, otherwise `false`. + * @since v0.11.4 + */ + authorized: boolean; + /** + * Returns the reason why the peer's certificate was not been verified. This + * property is set only when `tlsSocket.authorized === false`. + * @since v0.11.4 + */ + authorizationError: Error; + /** + * Always returns `true`. This may be used to distinguish TLS sockets from regular`net.Socket` instances. + * @since v0.11.4 + */ + encrypted: true; + /** + * String containing the selected ALPN protocol. + * Before a handshake has completed, this value is always null. + * When a handshake is completed but not ALPN protocol was selected, tlsSocket.alpnProtocol equals false. + */ + alpnProtocol: string | false | null; + /** + * Returns an object representing the local certificate. The returned object has + * some properties corresponding to the fields of the certificate. + * + * See {@link TLSSocket.getPeerCertificate} for an example of the certificate + * structure. + * + * If there is no local certificate, an empty object will be returned. If the + * socket has been destroyed, `null` will be returned. + * @since v11.2.0 + */ + getCertificate(): PeerCertificate | object | null; + /** + * Returns an object containing information on the negotiated cipher suite. + * + * For example, a TLSv1.2 protocol with AES256-SHA cipher: + * + * ```json + * { + * "name": "AES256-SHA", + * "standardName": "TLS_RSA_WITH_AES_256_CBC_SHA", + * "version": "SSLv3" + * } + * ``` + * + * See [SSL\_CIPHER\_get\_name](https://www.openssl.org/docs/man1.1.1/man3/SSL_CIPHER_get_name.html) for more information. + * @since v0.11.4 + */ + getCipher(): CipherNameAndProtocol; + /** + * Returns an object representing the type, name, and size of parameter of + * an ephemeral key exchange in `perfect forward secrecy` on a client + * connection. It returns an empty object when the key exchange is not + * ephemeral. As this is only supported on a client socket; `null` is returned + * if called on a server socket. The supported types are `'DH'` and `'ECDH'`. The`name` property is available only when type is `'ECDH'`. + * + * For example: `{ type: 'ECDH', name: 'prime256v1', size: 256 }`. + * @since v5.0.0 + */ + getEphemeralKeyInfo(): EphemeralKeyInfo | object | null; + /** + * As the `Finished` messages are message digests of the complete handshake + * (with a total of 192 bits for TLS 1.0 and more for SSL 3.0), they can + * be used for external authentication procedures when the authentication + * provided by SSL/TLS is not desired or is not enough. + * + * Corresponds to the `SSL_get_finished` routine in OpenSSL and may be used + * to implement the `tls-unique` channel binding from [RFC 5929](https://tools.ietf.org/html/rfc5929). + * @since v9.9.0 + * @return The latest `Finished` message that has been sent to the socket as part of a SSL/TLS handshake, or `undefined` if no `Finished` message has been sent yet. + */ + getFinished(): Buffer | undefined; + /** + * Returns an object representing the peer's certificate. If the peer does not + * provide a certificate, an empty object will be returned. If the socket has been + * destroyed, `null` will be returned. + * + * If the full certificate chain was requested, each certificate will include an`issuerCertificate` property containing an object representing its issuer's + * certificate. + * @since v0.11.4 + * @param detailed Include the full certificate chain if `true`, otherwise include just the peer's certificate. + * @return A certificate object. + */ + getPeerCertificate(detailed: true): DetailedPeerCertificate; + getPeerCertificate(detailed?: false): PeerCertificate; + getPeerCertificate(detailed?: boolean): PeerCertificate | DetailedPeerCertificate; + /** + * As the `Finished` messages are message digests of the complete handshake + * (with a total of 192 bits for TLS 1.0 and more for SSL 3.0), they can + * be used for external authentication procedures when the authentication + * provided by SSL/TLS is not desired or is not enough. + * + * Corresponds to the `SSL_get_peer_finished` routine in OpenSSL and may be used + * to implement the `tls-unique` channel binding from [RFC 5929](https://tools.ietf.org/html/rfc5929). + * @since v9.9.0 + * @return The latest `Finished` message that is expected or has actually been received from the socket as part of a SSL/TLS handshake, or `undefined` if there is no `Finished` message so + * far. + */ + getPeerFinished(): Buffer | undefined; + /** + * Returns a string containing the negotiated SSL/TLS protocol version of the + * current connection. The value `'unknown'` will be returned for connected + * sockets that have not completed the handshaking process. The value `null` will + * be returned for server sockets or disconnected client sockets. + * + * Protocol versions are: + * + * * `'SSLv3'` + * * `'TLSv1'` + * * `'TLSv1.1'` + * * `'TLSv1.2'` + * * `'TLSv1.3'` + * + * See the OpenSSL [`SSL_get_version`](https://www.openssl.org/docs/man1.1.1/man3/SSL_get_version.html) documentation for more information. + * @since v5.7.0 + */ + getProtocol(): string | null; + /** + * Returns the TLS session data or `undefined` if no session was + * negotiated. On the client, the data can be provided to the `session` option of {@link connect} to resume the connection. On the server, it may be useful + * for debugging. + * + * See `Session Resumption` for more information. + * + * Note: `getSession()` works only for TLSv1.2 and below. For TLSv1.3, applications + * must use the `'session'` event (it also works for TLSv1.2 and below). + * @since v0.11.4 + */ + getSession(): Buffer | undefined; + /** + * See [SSL\_get\_shared\_sigalgs](https://www.openssl.org/docs/man1.1.1/man3/SSL_get_shared_sigalgs.html) for more information. + * @since v12.11.0 + * @return List of signature algorithms shared between the server and the client in the order of decreasing preference. + */ + getSharedSigalgs(): string[]; + /** + * For a client, returns the TLS session ticket if one is available, or`undefined`. For a server, always returns `undefined`. + * + * It may be useful for debugging. + * + * See `Session Resumption` for more information. + * @since v0.11.4 + */ + getTLSTicket(): Buffer | undefined; + /** + * See `Session Resumption` for more information. + * @since v0.5.6 + * @return `true` if the session was reused, `false` otherwise. + */ + isSessionReused(): boolean; + /** + * The `tlsSocket.renegotiate()` method initiates a TLS renegotiation process. + * Upon completion, the `callback` function will be passed a single argument + * that is either an `Error` (if the request failed) or `null`. + * + * This method can be used to request a peer's certificate after the secure + * connection has been established. + * + * When running as the server, the socket will be destroyed with an error after`handshakeTimeout` timeout. + * + * For TLSv1.3, renegotiation cannot be initiated, it is not supported by the + * protocol. + * @since v0.11.8 + * @param callback If `renegotiate()` returned `true`, callback is attached once to the `'secure'` event. If `renegotiate()` returned `false`, `callback` will be called in the next tick with + * an error, unless the `tlsSocket` has been destroyed, in which case `callback` will not be called at all. + * @return `true` if renegotiation was initiated, `false` otherwise. + */ + renegotiate( + options: { + rejectUnauthorized?: boolean | undefined; + requestCert?: boolean | undefined; + }, + callback: (err: Error | null) => void, + ): undefined | boolean; + /** + * The `tlsSocket.setMaxSendFragment()` method sets the maximum TLS fragment size. + * Returns `true` if setting the limit succeeded; `false` otherwise. + * + * Smaller fragment sizes decrease the buffering latency on the client: larger + * fragments are buffered by the TLS layer until the entire fragment is received + * and its integrity is verified; large fragments can span multiple roundtrips + * and their processing can be delayed due to packet loss or reordering. However, + * smaller fragments add extra TLS framing bytes and CPU overhead, which may + * decrease overall server throughput. + * @since v0.11.11 + * @param [size=16384] The maximum TLS fragment size. The maximum value is `16384`. + */ + setMaxSendFragment(size: number): boolean; + /** + * Disables TLS renegotiation for this `TLSSocket` instance. Once called, attempts + * to renegotiate will trigger an `'error'` event on the `TLSSocket`. + * @since v8.4.0 + */ + disableRenegotiation(): void; + /** + * When enabled, TLS packet trace information is written to `stderr`. This can be + * used to debug TLS connection problems. + * + * The format of the output is identical to the output of`openssl s_client -trace` or `openssl s_server -trace`. While it is produced by + * OpenSSL's `SSL_trace()` function, the format is undocumented, can change + * without notice, and should not be relied on. + * @since v12.2.0 + */ + enableTrace(): void; + /** + * Returns the peer certificate as an `X509Certificate` object. + * + * If there is no peer certificate, or the socket has been destroyed,`undefined` will be returned. + * @since v15.9.0 + */ + getPeerX509Certificate(): X509Certificate | undefined; + /** + * Returns the local certificate as an `X509Certificate` object. + * + * If there is no local certificate, or the socket has been destroyed,`undefined` will be returned. + * @since v15.9.0 + */ + getX509Certificate(): X509Certificate | undefined; + /** + * Keying material is used for validations to prevent different kind of attacks in + * network protocols, for example in the specifications of IEEE 802.1X. + * + * Example + * + * ```js + * const keyingMaterial = tlsSocket.exportKeyingMaterial( + * 128, + * 'client finished'); + * + * /* + * Example return value of keyingMaterial: + * + * + * ``` + * + * See the OpenSSL [`SSL_export_keying_material`](https://www.openssl.org/docs/man1.1.1/man3/SSL_export_keying_material.html) documentation for more + * information. + * @since v13.10.0, v12.17.0 + * @param length number of bytes to retrieve from keying material + * @param label an application specific label, typically this will be a value from the [IANA Exporter Label + * Registry](https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml#exporter-labels). + * @param context Optionally provide a context. + * @return requested bytes of the keying material + */ + exportKeyingMaterial(length: number, label: string, context: Buffer): Buffer; + addListener(event: string, listener: (...args: any[]) => void): this; + addListener(event: "OCSPResponse", listener: (response: Buffer) => void): this; + addListener(event: "secureConnect", listener: () => void): this; + addListener(event: "session", listener: (session: Buffer) => void): this; + addListener(event: "keylog", listener: (line: Buffer) => void): this; + emit(event: string | symbol, ...args: any[]): boolean; + emit(event: "OCSPResponse", response: Buffer): boolean; + emit(event: "secureConnect"): boolean; + emit(event: "session", session: Buffer): boolean; + emit(event: "keylog", line: Buffer): boolean; + on(event: string, listener: (...args: any[]) => void): this; + on(event: "OCSPResponse", listener: (response: Buffer) => void): this; + on(event: "secureConnect", listener: () => void): this; + on(event: "session", listener: (session: Buffer) => void): this; + on(event: "keylog", listener: (line: Buffer) => void): this; + once(event: string, listener: (...args: any[]) => void): this; + once(event: "OCSPResponse", listener: (response: Buffer) => void): this; + once(event: "secureConnect", listener: () => void): this; + once(event: "session", listener: (session: Buffer) => void): this; + once(event: "keylog", listener: (line: Buffer) => void): this; + prependListener(event: string, listener: (...args: any[]) => void): this; + prependListener(event: "OCSPResponse", listener: (response: Buffer) => void): this; + prependListener(event: "secureConnect", listener: () => void): this; + prependListener(event: "session", listener: (session: Buffer) => void): this; + prependListener(event: "keylog", listener: (line: Buffer) => void): this; + prependOnceListener(event: string, listener: (...args: any[]) => void): this; + prependOnceListener(event: "OCSPResponse", listener: (response: Buffer) => void): this; + prependOnceListener(event: "secureConnect", listener: () => void): this; + prependOnceListener(event: "session", listener: (session: Buffer) => void): this; + prependOnceListener(event: "keylog", listener: (line: Buffer) => void): this; + } + interface CommonConnectionOptions { + /** + * An optional TLS context object from tls.createSecureContext() + */ + secureContext?: SecureContext | undefined; + /** + * When enabled, TLS packet trace information is written to `stderr`. This can be + * used to debug TLS connection problems. + * @default false + */ + enableTrace?: boolean | undefined; + /** + * If true the server will request a certificate from clients that + * connect and attempt to verify that certificate. Defaults to + * false. + */ + requestCert?: boolean | undefined; + /** + * An array of strings or a Buffer naming possible ALPN protocols. + * (Protocols should be ordered by their priority.) + */ + ALPNProtocols?: string[] | Uint8Array[] | Uint8Array | undefined; + /** + * SNICallback(servername, cb) A function that will be + * called if the client supports SNI TLS extension. Two arguments + * will be passed when called: servername and cb. SNICallback should + * invoke cb(null, ctx), where ctx is a SecureContext instance. + * (tls.createSecureContext(...) can be used to get a proper + * SecureContext.) If SNICallback wasn't provided the default callback + * with high-level API will be used (see below). + */ + SNICallback?: ((servername: string, cb: (err: Error | null, ctx?: SecureContext) => void) => void) | undefined; + /** + * If true the server will reject any connection which is not + * authorized with the list of supplied CAs. This option only has an + * effect if requestCert is true. + * @default true + */ + rejectUnauthorized?: boolean | undefined; + } + interface TlsOptions extends SecureContextOptions, CommonConnectionOptions, net.ServerOpts { + /** + * Abort the connection if the SSL/TLS handshake does not finish in the + * specified number of milliseconds. A 'tlsClientError' is emitted on + * the tls.Server object whenever a handshake times out. Default: + * 120000 (120 seconds). + */ + handshakeTimeout?: number | undefined; + /** + * The number of seconds after which a TLS session created by the + * server will no longer be resumable. See Session Resumption for more + * information. Default: 300. + */ + sessionTimeout?: number | undefined; + /** + * 48-bytes of cryptographically strong pseudo-random data. + */ + ticketKeys?: Buffer | undefined; + /** + * @param socket + * @param identity identity parameter sent from the client. + * @return pre-shared key that must either be + * a buffer or `null` to stop the negotiation process. Returned PSK must be + * compatible with the selected cipher's digest. + * + * When negotiating TLS-PSK (pre-shared keys), this function is called + * with the identity provided by the client. + * If the return value is `null` the negotiation process will stop and an + * "unknown_psk_identity" alert message will be sent to the other party. + * If the server wishes to hide the fact that the PSK identity was not known, + * the callback must provide some random data as `psk` to make the connection + * fail with "decrypt_error" before negotiation is finished. + * PSK ciphers are disabled by default, and using TLS-PSK thus + * requires explicitly specifying a cipher suite with the `ciphers` option. + * More information can be found in the RFC 4279. + */ + pskCallback?(socket: TLSSocket, identity: string): DataView | NodeJS.TypedArray | null; + /** + * hint to send to a client to help + * with selecting the identity during TLS-PSK negotiation. Will be ignored + * in TLS 1.3. Upon failing to set pskIdentityHint `tlsClientError` will be + * emitted with `ERR_TLS_PSK_SET_IDENTIY_HINT_FAILED` code. + */ + pskIdentityHint?: string | undefined; + } + interface PSKCallbackNegotation { + psk: DataView | NodeJS.TypedArray; + identity: string; + } + interface ConnectionOptions extends SecureContextOptions, CommonConnectionOptions { + host?: string | undefined; + port?: number | undefined; + path?: string | undefined; // Creates unix socket connection to path. If this option is specified, `host` and `port` are ignored. + socket?: stream.Duplex | undefined; // Establish secure connection on a given socket rather than creating a new socket + checkServerIdentity?: typeof checkServerIdentity | undefined; + servername?: string | undefined; // SNI TLS Extension + session?: Buffer | undefined; + minDHSize?: number | undefined; + lookup?: net.LookupFunction | undefined; + timeout?: number | undefined; + /** + * When negotiating TLS-PSK (pre-shared keys), this function is called + * with optional identity `hint` provided by the server or `null` + * in case of TLS 1.3 where `hint` was removed. + * It will be necessary to provide a custom `tls.checkServerIdentity()` + * for the connection as the default one will try to check hostname/IP + * of the server against the certificate but that's not applicable for PSK + * because there won't be a certificate present. + * More information can be found in the RFC 4279. + * + * @param hint message sent from the server to help client + * decide which identity to use during negotiation. + * Always `null` if TLS 1.3 is used. + * @returns Return `null` to stop the negotiation process. `psk` must be + * compatible with the selected cipher's digest. + * `identity` must use UTF-8 encoding. + */ + pskCallback?(hint: string | null): PSKCallbackNegotation | null; + } + /** + * Accepts encrypted connections using TLS or SSL. + * @since v0.3.2 + */ + class Server extends net.Server { + constructor(secureConnectionListener?: (socket: TLSSocket) => void); + constructor(options: TlsOptions, secureConnectionListener?: (socket: TLSSocket) => void); + /** + * The `server.addContext()` method adds a secure context that will be used if + * the client request's SNI name matches the supplied `hostname` (or wildcard). + * + * When there are multiple matching contexts, the most recently added one is + * used. + * @since v0.5.3 + * @param hostname A SNI host name or wildcard (e.g. `'*'`) + * @param context An object containing any of the possible properties from the {@link createSecureContext} `options` arguments (e.g. `key`, `cert`, `ca`, etc), or a TLS context object created + * with {@link createSecureContext} itself. + */ + addContext(hostname: string, context: SecureContextOptions): void; + /** + * Returns the session ticket keys. + * + * See `Session Resumption` for more information. + * @since v3.0.0 + * @return A 48-byte buffer containing the session ticket keys. + */ + getTicketKeys(): Buffer; + /** + * The `server.setSecureContext()` method replaces the secure context of an + * existing server. Existing connections to the server are not interrupted. + * @since v11.0.0 + * @param options An object containing any of the possible properties from the {@link createSecureContext} `options` arguments (e.g. `key`, `cert`, `ca`, etc). + */ + setSecureContext(options: SecureContextOptions): void; + /** + * Sets the session ticket keys. + * + * Changes to the ticket keys are effective only for future server connections. + * Existing or currently pending server connections will use the previous keys. + * + * See `Session Resumption` for more information. + * @since v3.0.0 + * @param keys A 48-byte buffer containing the session ticket keys. + */ + setTicketKeys(keys: Buffer): void; + /** + * events.EventEmitter + * 1. tlsClientError + * 2. newSession + * 3. OCSPRequest + * 4. resumeSession + * 5. secureConnection + * 6. keylog + */ + addListener(event: string, listener: (...args: any[]) => void): this; + addListener(event: "tlsClientError", listener: (err: Error, tlsSocket: TLSSocket) => void): this; + addListener( + event: "newSession", + listener: (sessionId: Buffer, sessionData: Buffer, callback: () => void) => void, + ): this; + addListener( + event: "OCSPRequest", + listener: ( + certificate: Buffer, + issuer: Buffer, + callback: (err: Error | null, resp: Buffer) => void, + ) => void, + ): this; + addListener( + event: "resumeSession", + listener: (sessionId: Buffer, callback: (err: Error | null, sessionData: Buffer | null) => void) => void, + ): this; + addListener(event: "secureConnection", listener: (tlsSocket: TLSSocket) => void): this; + addListener(event: "keylog", listener: (line: Buffer, tlsSocket: TLSSocket) => void): this; + emit(event: string | symbol, ...args: any[]): boolean; + emit(event: "tlsClientError", err: Error, tlsSocket: TLSSocket): boolean; + emit(event: "newSession", sessionId: Buffer, sessionData: Buffer, callback: () => void): boolean; + emit( + event: "OCSPRequest", + certificate: Buffer, + issuer: Buffer, + callback: (err: Error | null, resp: Buffer) => void, + ): boolean; + emit( + event: "resumeSession", + sessionId: Buffer, + callback: (err: Error | null, sessionData: Buffer | null) => void, + ): boolean; + emit(event: "secureConnection", tlsSocket: TLSSocket): boolean; + emit(event: "keylog", line: Buffer, tlsSocket: TLSSocket): boolean; + on(event: string, listener: (...args: any[]) => void): this; + on(event: "tlsClientError", listener: (err: Error, tlsSocket: TLSSocket) => void): this; + on(event: "newSession", listener: (sessionId: Buffer, sessionData: Buffer, callback: () => void) => void): this; + on( + event: "OCSPRequest", + listener: ( + certificate: Buffer, + issuer: Buffer, + callback: (err: Error | null, resp: Buffer) => void, + ) => void, + ): this; + on( + event: "resumeSession", + listener: (sessionId: Buffer, callback: (err: Error | null, sessionData: Buffer | null) => void) => void, + ): this; + on(event: "secureConnection", listener: (tlsSocket: TLSSocket) => void): this; + on(event: "keylog", listener: (line: Buffer, tlsSocket: TLSSocket) => void): this; + once(event: string, listener: (...args: any[]) => void): this; + once(event: "tlsClientError", listener: (err: Error, tlsSocket: TLSSocket) => void): this; + once( + event: "newSession", + listener: (sessionId: Buffer, sessionData: Buffer, callback: () => void) => void, + ): this; + once( + event: "OCSPRequest", + listener: ( + certificate: Buffer, + issuer: Buffer, + callback: (err: Error | null, resp: Buffer) => void, + ) => void, + ): this; + once( + event: "resumeSession", + listener: (sessionId: Buffer, callback: (err: Error | null, sessionData: Buffer | null) => void) => void, + ): this; + once(event: "secureConnection", listener: (tlsSocket: TLSSocket) => void): this; + once(event: "keylog", listener: (line: Buffer, tlsSocket: TLSSocket) => void): this; + prependListener(event: string, listener: (...args: any[]) => void): this; + prependListener(event: "tlsClientError", listener: (err: Error, tlsSocket: TLSSocket) => void): this; + prependListener( + event: "newSession", + listener: (sessionId: Buffer, sessionData: Buffer, callback: () => void) => void, + ): this; + prependListener( + event: "OCSPRequest", + listener: ( + certificate: Buffer, + issuer: Buffer, + callback: (err: Error | null, resp: Buffer) => void, + ) => void, + ): this; + prependListener( + event: "resumeSession", + listener: (sessionId: Buffer, callback: (err: Error | null, sessionData: Buffer | null) => void) => void, + ): this; + prependListener(event: "secureConnection", listener: (tlsSocket: TLSSocket) => void): this; + prependListener(event: "keylog", listener: (line: Buffer, tlsSocket: TLSSocket) => void): this; + prependOnceListener(event: string, listener: (...args: any[]) => void): this; + prependOnceListener(event: "tlsClientError", listener: (err: Error, tlsSocket: TLSSocket) => void): this; + prependOnceListener( + event: "newSession", + listener: (sessionId: Buffer, sessionData: Buffer, callback: () => void) => void, + ): this; + prependOnceListener( + event: "OCSPRequest", + listener: ( + certificate: Buffer, + issuer: Buffer, + callback: (err: Error | null, resp: Buffer) => void, + ) => void, + ): this; + prependOnceListener( + event: "resumeSession", + listener: (sessionId: Buffer, callback: (err: Error | null, sessionData: Buffer | null) => void) => void, + ): this; + prependOnceListener(event: "secureConnection", listener: (tlsSocket: TLSSocket) => void): this; + prependOnceListener(event: "keylog", listener: (line: Buffer, tlsSocket: TLSSocket) => void): this; + } + /** + * @deprecated since v0.11.3 Use `tls.TLSSocket` instead. + */ + interface SecurePair { + encrypted: TLSSocket; + cleartext: TLSSocket; + } + type SecureVersion = "TLSv1.3" | "TLSv1.2" | "TLSv1.1" | "TLSv1"; + interface SecureContextOptions { + /** + * If set, this will be called when a client opens a connection using the ALPN extension. + * One argument will be passed to the callback: an object containing `servername` and `protocols` fields, + * respectively containing the server name from the SNI extension (if any) and an array of + * ALPN protocol name strings. The callback must return either one of the strings listed in `protocols`, + * which will be returned to the client as the selected ALPN protocol, or `undefined`, + * to reject the connection with a fatal alert. If a string is returned that does not match one of + * the client's ALPN protocols, an error will be thrown. + * This option cannot be used with the `ALPNProtocols` option, and setting both options will throw an error. + */ + ALPNCallback?: ((arg: { servername: string; protocols: string[] }) => string | undefined) | undefined; + /** + * Optionally override the trusted CA certificates. Default is to trust + * the well-known CAs curated by Mozilla. Mozilla's CAs are completely + * replaced when CAs are explicitly specified using this option. + */ + ca?: string | Buffer | Array | undefined; + /** + * Cert chains in PEM format. One cert chain should be provided per + * private key. Each cert chain should consist of the PEM formatted + * certificate for a provided private key, followed by the PEM + * formatted intermediate certificates (if any), in order, and not + * including the root CA (the root CA must be pre-known to the peer, + * see ca). When providing multiple cert chains, they do not have to + * be in the same order as their private keys in key. If the + * intermediate certificates are not provided, the peer will not be + * able to validate the certificate, and the handshake will fail. + */ + cert?: string | Buffer | Array | undefined; + /** + * Colon-separated list of supported signature algorithms. The list + * can contain digest algorithms (SHA256, MD5 etc.), public key + * algorithms (RSA-PSS, ECDSA etc.), combination of both (e.g + * 'RSA+SHA384') or TLS v1.3 scheme names (e.g. rsa_pss_pss_sha512). + */ + sigalgs?: string | undefined; + /** + * Cipher suite specification, replacing the default. For more + * information, see modifying the default cipher suite. Permitted + * ciphers can be obtained via tls.getCiphers(). Cipher names must be + * uppercased in order for OpenSSL to accept them. + */ + ciphers?: string | undefined; + /** + * Name of an OpenSSL engine which can provide the client certificate. + */ + clientCertEngine?: string | undefined; + /** + * PEM formatted CRLs (Certificate Revocation Lists). + */ + crl?: string | Buffer | Array | undefined; + /** + * `'auto'` or custom Diffie-Hellman parameters, required for non-ECDHE perfect forward secrecy. + * If omitted or invalid, the parameters are silently discarded and DHE ciphers will not be available. + * ECDHE-based perfect forward secrecy will still be available. + */ + dhparam?: string | Buffer | undefined; + /** + * A string describing a named curve or a colon separated list of curve + * NIDs or names, for example P-521:P-384:P-256, to use for ECDH key + * agreement. Set to auto to select the curve automatically. Use + * crypto.getCurves() to obtain a list of available curve names. On + * recent releases, openssl ecparam -list_curves will also display the + * name and description of each available elliptic curve. Default: + * tls.DEFAULT_ECDH_CURVE. + */ + ecdhCurve?: string | undefined; + /** + * Attempt to use the server's cipher suite preferences instead of the + * client's. When true, causes SSL_OP_CIPHER_SERVER_PREFERENCE to be + * set in secureOptions + */ + honorCipherOrder?: boolean | undefined; + /** + * Private keys in PEM format. PEM allows the option of private keys + * being encrypted. Encrypted keys will be decrypted with + * options.passphrase. Multiple keys using different algorithms can be + * provided either as an array of unencrypted key strings or buffers, + * or an array of objects in the form {pem: [, + * passphrase: ]}. The object form can only occur in an array. + * object.passphrase is optional. Encrypted keys will be decrypted with + * object.passphrase if provided, or options.passphrase if it is not. + */ + key?: string | Buffer | Array | undefined; + /** + * Name of an OpenSSL engine to get private key from. Should be used + * together with privateKeyIdentifier. + */ + privateKeyEngine?: string | undefined; + /** + * Identifier of a private key managed by an OpenSSL engine. Should be + * used together with privateKeyEngine. Should not be set together with + * key, because both options define a private key in different ways. + */ + privateKeyIdentifier?: string | undefined; + /** + * Optionally set the maximum TLS version to allow. One + * of `'TLSv1.3'`, `'TLSv1.2'`, `'TLSv1.1'`, or `'TLSv1'`. Cannot be specified along with the + * `secureProtocol` option, use one or the other. + * **Default:** `'TLSv1.3'`, unless changed using CLI options. Using + * `--tls-max-v1.2` sets the default to `'TLSv1.2'`. Using `--tls-max-v1.3` sets the default to + * `'TLSv1.3'`. If multiple of the options are provided, the highest maximum is used. + */ + maxVersion?: SecureVersion | undefined; + /** + * Optionally set the minimum TLS version to allow. One + * of `'TLSv1.3'`, `'TLSv1.2'`, `'TLSv1.1'`, or `'TLSv1'`. Cannot be specified along with the + * `secureProtocol` option, use one or the other. It is not recommended to use + * less than TLSv1.2, but it may be required for interoperability. + * **Default:** `'TLSv1.2'`, unless changed using CLI options. Using + * `--tls-v1.0` sets the default to `'TLSv1'`. Using `--tls-v1.1` sets the default to + * `'TLSv1.1'`. Using `--tls-min-v1.3` sets the default to + * 'TLSv1.3'. If multiple of the options are provided, the lowest minimum is used. + */ + minVersion?: SecureVersion | undefined; + /** + * Shared passphrase used for a single private key and/or a PFX. + */ + passphrase?: string | undefined; + /** + * PFX or PKCS12 encoded private key and certificate chain. pfx is an + * alternative to providing key and cert individually. PFX is usually + * encrypted, if it is, passphrase will be used to decrypt it. Multiple + * PFX can be provided either as an array of unencrypted PFX buffers, + * or an array of objects in the form {buf: [, + * passphrase: ]}. The object form can only occur in an array. + * object.passphrase is optional. Encrypted PFX will be decrypted with + * object.passphrase if provided, or options.passphrase if it is not. + */ + pfx?: string | Buffer | Array | undefined; + /** + * Optionally affect the OpenSSL protocol behavior, which is not + * usually necessary. This should be used carefully if at all! Value is + * a numeric bitmask of the SSL_OP_* options from OpenSSL Options + */ + secureOptions?: number | undefined; // Value is a numeric bitmask of the `SSL_OP_*` options + /** + * Legacy mechanism to select the TLS protocol version to use, it does + * not support independent control of the minimum and maximum version, + * and does not support limiting the protocol to TLSv1.3. Use + * minVersion and maxVersion instead. The possible values are listed as + * SSL_METHODS, use the function names as strings. For example, use + * 'TLSv1_1_method' to force TLS version 1.1, or 'TLS_method' to allow + * any TLS protocol version up to TLSv1.3. It is not recommended to use + * TLS versions less than 1.2, but it may be required for + * interoperability. Default: none, see minVersion. + */ + secureProtocol?: string | undefined; + /** + * Opaque identifier used by servers to ensure session state is not + * shared between applications. Unused by clients. + */ + sessionIdContext?: string | undefined; + /** + * 48-bytes of cryptographically strong pseudo-random data. + * See Session Resumption for more information. + */ + ticketKeys?: Buffer | undefined; + /** + * The number of seconds after which a TLS session created by the + * server will no longer be resumable. See Session Resumption for more + * information. Default: 300. + */ + sessionTimeout?: number | undefined; + } + interface SecureContext { + context: any; + } + /** + * Verifies the certificate `cert` is issued to `hostname`. + * + * Returns [Error](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error) object, populating it with `reason`, `host`, and `cert` on + * failure. On success, returns [undefined](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Undefined_type). + * + * This function is intended to be used in combination with the`checkServerIdentity` option that can be passed to {@link connect} and as + * such operates on a `certificate object`. For other purposes, consider using `x509.checkHost()` instead. + * + * This function can be overwritten by providing an alternative function as the`options.checkServerIdentity` option that is passed to `tls.connect()`. The + * overwriting function can call `tls.checkServerIdentity()` of course, to augment + * the checks done with additional verification. + * + * This function is only called if the certificate passed all other checks, such as + * being issued by trusted CA (`options.ca`). + * + * Earlier versions of Node.js incorrectly accepted certificates for a given`hostname` if a matching `uniformResourceIdentifier` subject alternative name + * was present (see [CVE-2021-44531](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-44531)). Applications that wish to accept`uniformResourceIdentifier` subject alternative names can use + * a custom`options.checkServerIdentity` function that implements the desired behavior. + * @since v0.8.4 + * @param hostname The host name or IP address to verify the certificate against. + * @param cert A `certificate object` representing the peer's certificate. + */ + function checkServerIdentity(hostname: string, cert: PeerCertificate): Error | undefined; + /** + * Creates a new {@link Server}. The `secureConnectionListener`, if provided, is + * automatically set as a listener for the `'secureConnection'` event. + * + * The `ticketKeys` options is automatically shared between `node:cluster` module + * workers. + * + * The following illustrates a simple echo server: + * + * ```js + * const tls = require('node:tls'); + * const fs = require('node:fs'); + * + * const options = { + * key: fs.readFileSync('server-key.pem'), + * cert: fs.readFileSync('server-cert.pem'), + * + * // This is necessary only if using client certificate authentication. + * requestCert: true, + * + * // This is necessary only if the client uses a self-signed certificate. + * ca: [ fs.readFileSync('client-cert.pem') ], + * }; + * + * const server = tls.createServer(options, (socket) => { + * console.log('server connected', + * socket.authorized ? 'authorized' : 'unauthorized'); + * socket.write('welcome!\n'); + * socket.setEncoding('utf8'); + * socket.pipe(socket); + * }); + * server.listen(8000, () => { + * console.log('server bound'); + * }); + * ``` + * + * The server can be tested by connecting to it using the example client from {@link connect}. + * @since v0.3.2 + */ + function createServer(secureConnectionListener?: (socket: TLSSocket) => void): Server; + function createServer(options: TlsOptions, secureConnectionListener?: (socket: TLSSocket) => void): Server; + /** + * The `callback` function, if specified, will be added as a listener for the `'secureConnect'` event. + * + * `tls.connect()` returns a {@link TLSSocket} object. + * + * Unlike the `https` API, `tls.connect()` does not enable the + * SNI (Server Name Indication) extension by default, which may cause some + * servers to return an incorrect certificate or reject the connection + * altogether. To enable SNI, set the `servername` option in addition + * to `host`. + * + * The following illustrates a client for the echo server example from {@link createServer}: + * + * ```js + * // Assumes an echo server that is listening on port 8000. + * const tls = require('node:tls'); + * const fs = require('node:fs'); + * + * const options = { + * // Necessary only if the server requires client certificate authentication. + * key: fs.readFileSync('client-key.pem'), + * cert: fs.readFileSync('client-cert.pem'), + * + * // Necessary only if the server uses a self-signed certificate. + * ca: [ fs.readFileSync('server-cert.pem') ], + * + * // Necessary only if the server's cert isn't for "localhost". + * checkServerIdentity: () => { return null; }, + * }; + * + * const socket = tls.connect(8000, options, () => { + * console.log('client connected', + * socket.authorized ? 'authorized' : 'unauthorized'); + * process.stdin.pipe(socket); + * process.stdin.resume(); + * }); + * socket.setEncoding('utf8'); + * socket.on('data', (data) => { + * console.log(data); + * }); + * socket.on('end', () => { + * console.log('server ends connection'); + * }); + * ``` + * @since v0.11.3 + */ + function connect(options: ConnectionOptions, secureConnectListener?: () => void): TLSSocket; + function connect( + port: number, + host?: string, + options?: ConnectionOptions, + secureConnectListener?: () => void, + ): TLSSocket; + function connect(port: number, options?: ConnectionOptions, secureConnectListener?: () => void): TLSSocket; + /** + * Creates a new secure pair object with two streams, one of which reads and writes + * the encrypted data and the other of which reads and writes the cleartext data. + * Generally, the encrypted stream is piped to/from an incoming encrypted data + * stream and the cleartext one is used as a replacement for the initial encrypted + * stream. + * + * `tls.createSecurePair()` returns a `tls.SecurePair` object with `cleartext` and`encrypted` stream properties. + * + * Using `cleartext` has the same API as {@link TLSSocket}. + * + * The `tls.createSecurePair()` method is now deprecated in favor of`tls.TLSSocket()`. For example, the code: + * + * ```js + * pair = tls.createSecurePair(// ... ); + * pair.encrypted.pipe(socket); + * socket.pipe(pair.encrypted); + * ``` + * + * can be replaced by: + * + * ```js + * secureSocket = tls.TLSSocket(socket, options); + * ``` + * + * where `secureSocket` has the same API as `pair.cleartext`. + * @since v0.3.2 + * @deprecated Since v0.11.3 - Use {@link TLSSocket} instead. + * @param context A secure context object as returned by `tls.createSecureContext()` + * @param isServer `true` to specify that this TLS connection should be opened as a server. + * @param requestCert `true` to specify whether a server should request a certificate from a connecting client. Only applies when `isServer` is `true`. + * @param rejectUnauthorized If not `false` a server automatically reject clients with invalid certificates. Only applies when `isServer` is `true`. + */ + function createSecurePair( + context?: SecureContext, + isServer?: boolean, + requestCert?: boolean, + rejectUnauthorized?: boolean, + ): SecurePair; + /** + * {@link createServer} sets the default value of the `honorCipherOrder` option + * to `true`, other APIs that create secure contexts leave it unset. + * + * {@link createServer} uses a 128 bit truncated SHA1 hash value generated + * from `process.argv` as the default value of the `sessionIdContext` option, other + * APIs that create secure contexts have no default value. + * + * The `tls.createSecureContext()` method creates a `SecureContext` object. It is + * usable as an argument to several `tls` APIs, such as `server.addContext()`, + * but has no public methods. The {@link Server} constructor and the {@link createServer} method do not support the `secureContext` option. + * + * A key is _required_ for ciphers that use certificates. Either `key` or`pfx` can be used to provide it. + * + * If the `ca` option is not given, then Node.js will default to using [Mozilla's publicly trusted list of + * CAs](https://hg.mozilla.org/mozilla-central/raw-file/tip/security/nss/lib/ckfw/builtins/certdata.txt). + * + * Custom DHE parameters are discouraged in favor of the new `dhparam: 'auto'`option. When set to `'auto'`, well-known DHE parameters of sufficient strength + * will be selected automatically. Otherwise, if necessary, `openssl dhparam` can + * be used to create custom parameters. The key length must be greater than or + * equal to 1024 bits or else an error will be thrown. Although 1024 bits is + * permissible, use 2048 bits or larger for stronger security. + * @since v0.11.13 + */ + function createSecureContext(options?: SecureContextOptions): SecureContext; + /** + * Returns an array with the names of the supported TLS ciphers. The names are + * lower-case for historical reasons, but must be uppercased to be used in + * the `ciphers` option of {@link createSecureContext}. + * + * Not all supported ciphers are enabled by default. See `Modifying the default TLS cipher suite`. + * + * Cipher names that start with `'tls_'` are for TLSv1.3, all the others are for + * TLSv1.2 and below. + * + * ```js + * console.log(tls.getCiphers()); // ['aes128-gcm-sha256', 'aes128-sha', ...] + * ``` + * @since v0.10.2 + */ + function getCiphers(): string[]; + /** + * The default curve name to use for ECDH key agreement in a tls server. + * The default value is 'auto'. See tls.createSecureContext() for further + * information. + */ + let DEFAULT_ECDH_CURVE: string; + /** + * The default value of the maxVersion option of + * tls.createSecureContext(). It can be assigned any of the supported TLS + * protocol versions, 'TLSv1.3', 'TLSv1.2', 'TLSv1.1', or 'TLSv1'. Default: + * 'TLSv1.3', unless changed using CLI options. Using --tls-max-v1.2 sets + * the default to 'TLSv1.2'. Using --tls-max-v1.3 sets the default to + * 'TLSv1.3'. If multiple of the options are provided, the highest maximum + * is used. + */ + let DEFAULT_MAX_VERSION: SecureVersion; + /** + * The default value of the minVersion option of tls.createSecureContext(). + * It can be assigned any of the supported TLS protocol versions, + * 'TLSv1.3', 'TLSv1.2', 'TLSv1.1', or 'TLSv1'. Default: 'TLSv1.2', unless + * changed using CLI options. Using --tls-min-v1.0 sets the default to + * 'TLSv1'. Using --tls-min-v1.1 sets the default to 'TLSv1.1'. Using + * --tls-min-v1.3 sets the default to 'TLSv1.3'. If multiple of the options + * are provided, the lowest minimum is used. + */ + let DEFAULT_MIN_VERSION: SecureVersion; + /** + * The default value of the ciphers option of tls.createSecureContext(). + * It can be assigned any of the supported OpenSSL ciphers. + * Defaults to the content of crypto.constants.defaultCoreCipherList, unless + * changed using CLI options using --tls-default-ciphers. + */ + let DEFAULT_CIPHERS: string; + /** + * An immutable array of strings representing the root certificates (in PEM + * format) used for verifying peer certificates. This is the default value + * of the ca option to tls.createSecureContext(). + */ + const rootCertificates: ReadonlyArray; +} +declare module "node:tls" { + export * from "tls"; +} diff --git a/Url-Shortner/node_modules/@types/node/trace_events.d.ts b/Url-Shortner/node_modules/@types/node/trace_events.d.ts new file mode 100644 index 0000000..3361359 --- /dev/null +++ b/Url-Shortner/node_modules/@types/node/trace_events.d.ts @@ -0,0 +1,182 @@ +/** + * The `node:trace_events` module provides a mechanism to centralize tracing + * information generated by V8, Node.js core, and userspace code. + * + * Tracing can be enabled with the `--trace-event-categories` command-line flag + * or by using the `node:trace_events` module. The `--trace-event-categories` flag + * accepts a list of comma-separated category names. + * + * The available categories are: + * + * * `node`: An empty placeholder. + * * `node.async_hooks`: Enables capture of detailed `async_hooks` trace data. + * The `async_hooks` events have a unique `asyncId` and a special `triggerId` `triggerAsyncId` property. + * * `node.bootstrap`: Enables capture of Node.js bootstrap milestones. + * * `node.console`: Enables capture of `console.time()` and `console.count()`output. + * * `node.threadpoolwork.sync`: Enables capture of trace data for threadpool + * synchronous operations, such as `blob`, `zlib`, `crypto` and `node_api`. + * * `node.threadpoolwork.async`: Enables capture of trace data for threadpool + * asynchronous operations, such as `blob`, `zlib`, `crypto` and `node_api`. + * * `node.dns.native`: Enables capture of trace data for DNS queries. + * * `node.net.native`: Enables capture of trace data for network. + * * `node.environment`: Enables capture of Node.js Environment milestones. + * * `node.fs.sync`: Enables capture of trace data for file system sync methods. + * * `node.fs_dir.sync`: Enables capture of trace data for file system sync + * directory methods. + * * `node.fs.async`: Enables capture of trace data for file system async methods. + * * `node.fs_dir.async`: Enables capture of trace data for file system async + * directory methods. + * * `node.perf`: Enables capture of `Performance API` measurements. + * * `node.perf.usertiming`: Enables capture of only Performance API User Timing + * measures and marks. + * * `node.perf.timerify`: Enables capture of only Performance API timerify + * measurements. + * * `node.promises.rejections`: Enables capture of trace data tracking the number + * of unhandled Promise rejections and handled-after-rejections. + * * `node.vm.script`: Enables capture of trace data for the `node:vm` module's`runInNewContext()`, `runInContext()`, and `runInThisContext()` methods. + * * `v8`: The `V8` events are GC, compiling, and execution related. + * * `node.http`: Enables capture of trace data for http request / response. + * + * By default the `node`, `node.async_hooks`, and `v8` categories are enabled. + * + * ```bash + * node --trace-event-categories v8,node,node.async_hooks server.js + * ``` + * + * Prior versions of Node.js required the use of the `--trace-events-enabled`flag to enable trace events. This requirement has been removed. However, the`--trace-events-enabled` flag _may_ still be + * used and will enable the`node`, `node.async_hooks`, and `v8` trace event categories by default. + * + * ```bash + * node --trace-events-enabled + * + * # is equivalent to + * + * node --trace-event-categories v8,node,node.async_hooks + * ``` + * + * Alternatively, trace events may be enabled using the `node:trace_events` module: + * + * ```js + * const trace_events = require('node:trace_events'); + * const tracing = trace_events.createTracing({ categories: ['node.perf'] }); + * tracing.enable(); // Enable trace event capture for the 'node.perf' category + * + * // do work + * + * tracing.disable(); // Disable trace event capture for the 'node.perf' category + * ``` + * + * Running Node.js with tracing enabled will produce log files that can be opened + * in the [`chrome://tracing`](https://www.chromium.org/developers/how-tos/trace-event-profiling-tool) tab of Chrome. + * + * The logging file is by default called `node_trace.${rotation}.log`, where`${rotation}` is an incrementing log-rotation id. The filepath pattern can + * be specified with `--trace-event-file-pattern` that accepts a template + * string that supports `${rotation}` and `${pid}`: + * + * ```bash + * node --trace-event-categories v8 --trace-event-file-pattern '${pid}-${rotation}.log' server.js + * ``` + * + * To guarantee that the log file is properly generated after signal events like`SIGINT`, `SIGTERM`, or `SIGBREAK`, make sure to have the appropriate handlers + * in your code, such as: + * + * ```js + * process.on('SIGINT', function onSigint() { + * console.info('Received SIGINT.'); + * process.exit(130); // Or applicable exit code depending on OS and signal + * }); + * ``` + * + * The tracing system uses the same time source + * as the one used by `process.hrtime()`. + * However the trace-event timestamps are expressed in microseconds, + * unlike `process.hrtime()` which returns nanoseconds. + * + * The features from this module are not available in `Worker` threads. + * @experimental + * @see [source](https://github.com/nodejs/node/blob/v20.2.0/lib/trace_events.js) + */ +declare module "trace_events" { + /** + * The `Tracing` object is used to enable or disable tracing for sets of + * categories. Instances are created using the + * `trace_events.createTracing()` method. + * + * When created, the `Tracing` object is disabled. Calling the + * `tracing.enable()` method adds the categories to the set of enabled trace + * event categories. Calling `tracing.disable()` will remove the categories + * from the set of enabled trace event categories. + */ + interface Tracing { + /** + * A comma-separated list of the trace event categories covered by this + * `Tracing` object. + */ + readonly categories: string; + /** + * Disables this `Tracing` object. + * + * Only trace event categories _not_ covered by other enabled `Tracing` + * objects and _not_ specified by the `--trace-event-categories` flag + * will be disabled. + */ + disable(): void; + /** + * Enables this `Tracing` object for the set of categories covered by + * the `Tracing` object. + */ + enable(): void; + /** + * `true` only if the `Tracing` object has been enabled. + */ + readonly enabled: boolean; + } + interface CreateTracingOptions { + /** + * An array of trace category names. Values included in the array are + * coerced to a string when possible. An error will be thrown if the + * value cannot be coerced. + */ + categories: string[]; + } + /** + * Creates and returns a `Tracing` object for the given set of `categories`. + * + * ```js + * const trace_events = require('node:trace_events'); + * const categories = ['node.perf', 'node.async_hooks']; + * const tracing = trace_events.createTracing({ categories }); + * tracing.enable(); + * // do stuff + * tracing.disable(); + * ``` + * @since v10.0.0 + * @return . + */ + function createTracing(options: CreateTracingOptions): Tracing; + /** + * Returns a comma-separated list of all currently-enabled trace event + * categories. The current set of enabled trace event categories is determined + * by the _union_ of all currently-enabled `Tracing` objects and any categories + * enabled using the `--trace-event-categories` flag. + * + * Given the file `test.js` below, the command`node --trace-event-categories node.perf test.js` will print`'node.async_hooks,node.perf'` to the console. + * + * ```js + * const trace_events = require('node:trace_events'); + * const t1 = trace_events.createTracing({ categories: ['node.async_hooks'] }); + * const t2 = trace_events.createTracing({ categories: ['node.perf'] }); + * const t3 = trace_events.createTracing({ categories: ['v8'] }); + * + * t1.enable(); + * t2.enable(); + * + * console.log(trace_events.getEnabledCategories()); + * ``` + * @since v10.0.0 + */ + function getEnabledCategories(): string | undefined; +} +declare module "node:trace_events" { + export * from "trace_events"; +} diff --git a/Url-Shortner/node_modules/@types/node/ts4.8/assert.d.ts b/Url-Shortner/node_modules/@types/node/ts4.8/assert.d.ts new file mode 100644 index 0000000..e237c56 --- /dev/null +++ b/Url-Shortner/node_modules/@types/node/ts4.8/assert.d.ts @@ -0,0 +1,996 @@ +/** + * The `node:assert` module provides a set of assertion functions for verifying + * invariants. + * @see [source](https://github.com/nodejs/node/blob/v20.2.0/lib/assert.js) + */ +declare module "assert" { + /** + * An alias of {@link ok}. + * @since v0.5.9 + * @param value The input that is checked for being truthy. + */ + function assert(value: unknown, message?: string | Error): asserts value; + namespace assert { + /** + * Indicates the failure of an assertion. All errors thrown by the `node:assert`module will be instances of the `AssertionError` class. + */ + class AssertionError extends Error { + /** + * Set to the `actual` argument for methods such as {@link assert.strictEqual()}. + */ + actual: unknown; + /** + * Set to the `expected` argument for methods such as {@link assert.strictEqual()}. + */ + expected: unknown; + /** + * Set to the passed in operator value. + */ + operator: string; + /** + * Indicates if the message was auto-generated (`true`) or not. + */ + generatedMessage: boolean; + /** + * Value is always `ERR_ASSERTION` to show that the error is an assertion error. + */ + code: "ERR_ASSERTION"; + constructor(options?: { + /** If provided, the error message is set to this value. */ + message?: string | undefined; + /** The `actual` property on the error instance. */ + actual?: unknown | undefined; + /** The `expected` property on the error instance. */ + expected?: unknown | undefined; + /** The `operator` property on the error instance. */ + operator?: string | undefined; + /** If provided, the generated stack trace omits frames before this function. */ + // tslint:disable-next-line:ban-types + stackStartFn?: Function | undefined; + }); + } + /** + * This feature is deprecated and will be removed in a future version. + * Please consider using alternatives such as the `mock` helper function. + * @since v14.2.0, v12.19.0 + * @deprecated Deprecated + */ + class CallTracker { + /** + * The wrapper function is expected to be called exactly `exact` times. If the + * function has not been called exactly `exact` times when `tracker.verify()` is called, then `tracker.verify()` will throw an + * error. + * + * ```js + * import assert from 'node:assert'; + * + * // Creates call tracker. + * const tracker = new assert.CallTracker(); + * + * function func() {} + * + * // Returns a function that wraps func() that must be called exact times + * // before tracker.verify(). + * const callsfunc = tracker.calls(func); + * ``` + * @since v14.2.0, v12.19.0 + * @param [fn='A no-op function'] + * @param [exact=1] + * @return that wraps `fn`. + */ + calls(exact?: number): () => void; + calls any>(fn?: Func, exact?: number): Func; + /** + * Example: + * + * ```js + * import assert from 'node:assert'; + * + * const tracker = new assert.CallTracker(); + * + * function func() {} + * const callsfunc = tracker.calls(func); + * callsfunc(1, 2, 3); + * + * assert.deepStrictEqual(tracker.getCalls(callsfunc), + * [{ thisArg: undefined, arguments: [1, 2, 3] }]); + * ``` + * @since v18.8.0, v16.18.0 + * @param fn + * @return An Array with all the calls to a tracked function. + */ + getCalls(fn: Function): CallTrackerCall[]; + /** + * The arrays contains information about the expected and actual number of calls of + * the functions that have not been called the expected number of times. + * + * ```js + * import assert from 'node:assert'; + * + * // Creates call tracker. + * const tracker = new assert.CallTracker(); + * + * function func() {} + * + * // Returns a function that wraps func() that must be called exact times + * // before tracker.verify(). + * const callsfunc = tracker.calls(func, 2); + * + * // Returns an array containing information on callsfunc() + * console.log(tracker.report()); + * // [ + * // { + * // message: 'Expected the func function to be executed 2 time(s) but was + * // executed 0 time(s).', + * // actual: 0, + * // expected: 2, + * // operator: 'func', + * // stack: stack trace + * // } + * // ] + * ``` + * @since v14.2.0, v12.19.0 + * @return An Array of objects containing information about the wrapper functions returned by `calls`. + */ + report(): CallTrackerReportInformation[]; + /** + * Reset calls of the call tracker. + * If a tracked function is passed as an argument, the calls will be reset for it. + * If no arguments are passed, all tracked functions will be reset. + * + * ```js + * import assert from 'node:assert'; + * + * const tracker = new assert.CallTracker(); + * + * function func() {} + * const callsfunc = tracker.calls(func); + * + * callsfunc(); + * // Tracker was called once + * assert.strictEqual(tracker.getCalls(callsfunc).length, 1); + * + * tracker.reset(callsfunc); + * assert.strictEqual(tracker.getCalls(callsfunc).length, 0); + * ``` + * @since v18.8.0, v16.18.0 + * @param fn a tracked function to reset. + */ + reset(fn?: Function): void; + /** + * Iterates through the list of functions passed to `tracker.calls()` and will throw an error for functions that + * have not been called the expected number of times. + * + * ```js + * import assert from 'node:assert'; + * + * // Creates call tracker. + * const tracker = new assert.CallTracker(); + * + * function func() {} + * + * // Returns a function that wraps func() that must be called exact times + * // before tracker.verify(). + * const callsfunc = tracker.calls(func, 2); + * + * callsfunc(); + * + * // Will throw an error since callsfunc() was only called once. + * tracker.verify(); + * ``` + * @since v14.2.0, v12.19.0 + */ + verify(): void; + } + interface CallTrackerCall { + thisArg: object; + arguments: unknown[]; + } + interface CallTrackerReportInformation { + message: string; + /** The actual number of times the function was called. */ + actual: number; + /** The number of times the function was expected to be called. */ + expected: number; + /** The name of the function that is wrapped. */ + operator: string; + /** A stack trace of the function. */ + stack: object; + } + type AssertPredicate = RegExp | (new() => object) | ((thrown: unknown) => boolean) | object | Error; + /** + * Throws an `AssertionError` with the provided error message or a default + * error message. If the `message` parameter is an instance of an `Error` then + * it will be thrown instead of the `AssertionError`. + * + * ```js + * import assert from 'node:assert/strict'; + * + * assert.fail(); + * // AssertionError [ERR_ASSERTION]: Failed + * + * assert.fail('boom'); + * // AssertionError [ERR_ASSERTION]: boom + * + * assert.fail(new TypeError('need array')); + * // TypeError: need array + * ``` + * + * Using `assert.fail()` with more than two arguments is possible but deprecated. + * See below for further details. + * @since v0.1.21 + * @param [message='Failed'] + */ + function fail(message?: string | Error): never; + /** @deprecated since v10.0.0 - use fail([message]) or other assert functions instead. */ + function fail( + actual: unknown, + expected: unknown, + message?: string | Error, + operator?: string, + // tslint:disable-next-line:ban-types + stackStartFn?: Function, + ): never; + /** + * Tests if `value` is truthy. It is equivalent to`assert.equal(!!value, true, message)`. + * + * If `value` is not truthy, an `AssertionError` is thrown with a `message`property set equal to the value of the `message` parameter. If the `message`parameter is `undefined`, a default + * error message is assigned. If the `message`parameter is an instance of an `Error` then it will be thrown instead of the`AssertionError`. + * If no arguments are passed in at all `message` will be set to the string:`` 'No value argument passed to `assert.ok()`' ``. + * + * Be aware that in the `repl` the error message will be different to the one + * thrown in a file! See below for further details. + * + * ```js + * import assert from 'node:assert/strict'; + * + * assert.ok(true); + * // OK + * assert.ok(1); + * // OK + * + * assert.ok(); + * // AssertionError: No value argument passed to `assert.ok()` + * + * assert.ok(false, 'it\'s false'); + * // AssertionError: it's false + * + * // In the repl: + * assert.ok(typeof 123 === 'string'); + * // AssertionError: false == true + * + * // In a file (e.g. test.js): + * assert.ok(typeof 123 === 'string'); + * // AssertionError: The expression evaluated to a falsy value: + * // + * // assert.ok(typeof 123 === 'string') + * + * assert.ok(false); + * // AssertionError: The expression evaluated to a falsy value: + * // + * // assert.ok(false) + * + * assert.ok(0); + * // AssertionError: The expression evaluated to a falsy value: + * // + * // assert.ok(0) + * ``` + * + * ```js + * import assert from 'node:assert/strict'; + * + * // Using `assert()` works the same: + * assert(0); + * // AssertionError: The expression evaluated to a falsy value: + * // + * // assert(0) + * ``` + * @since v0.1.21 + */ + function ok(value: unknown, message?: string | Error): asserts value; + /** + * **Strict assertion mode** + * + * An alias of {@link strictEqual}. + * + * **Legacy assertion mode** + * + * > Stability: 3 - Legacy: Use {@link strictEqual} instead. + * + * Tests shallow, coercive equality between the `actual` and `expected` parameters + * using the [`==` operator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Equality). `NaN` is specially handled + * and treated as being identical if both sides are `NaN`. + * + * ```js + * import assert from 'node:assert'; + * + * assert.equal(1, 1); + * // OK, 1 == 1 + * assert.equal(1, '1'); + * // OK, 1 == '1' + * assert.equal(NaN, NaN); + * // OK + * + * assert.equal(1, 2); + * // AssertionError: 1 == 2 + * assert.equal({ a: { b: 1 } }, { a: { b: 1 } }); + * // AssertionError: { a: { b: 1 } } == { a: { b: 1 } } + * ``` + * + * If the values are not equal, an `AssertionError` is thrown with a `message`property set equal to the value of the `message` parameter. If the `message`parameter is undefined, a default + * error message is assigned. If the `message`parameter is an instance of an `Error` then it will be thrown instead of the`AssertionError`. + * @since v0.1.21 + */ + function equal(actual: unknown, expected: unknown, message?: string | Error): void; + /** + * **Strict assertion mode** + * + * An alias of {@link notStrictEqual}. + * + * **Legacy assertion mode** + * + * > Stability: 3 - Legacy: Use {@link notStrictEqual} instead. + * + * Tests shallow, coercive inequality with the [`!=` operator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Inequality). `NaN` is + * specially handled and treated as being identical if both sides are `NaN`. + * + * ```js + * import assert from 'node:assert'; + * + * assert.notEqual(1, 2); + * // OK + * + * assert.notEqual(1, 1); + * // AssertionError: 1 != 1 + * + * assert.notEqual(1, '1'); + * // AssertionError: 1 != '1' + * ``` + * + * If the values are equal, an `AssertionError` is thrown with a `message`property set equal to the value of the `message` parameter. If the `message`parameter is undefined, a default error + * message is assigned. If the `message`parameter is an instance of an `Error` then it will be thrown instead of the`AssertionError`. + * @since v0.1.21 + */ + function notEqual(actual: unknown, expected: unknown, message?: string | Error): void; + /** + * **Strict assertion mode** + * + * An alias of {@link deepStrictEqual}. + * + * **Legacy assertion mode** + * + * > Stability: 3 - Legacy: Use {@link deepStrictEqual} instead. + * + * Tests for deep equality between the `actual` and `expected` parameters. Consider + * using {@link deepStrictEqual} instead. {@link deepEqual} can have + * surprising results. + * + * _Deep equality_ means that the enumerable "own" properties of child objects + * are also recursively evaluated by the following rules. + * @since v0.1.21 + */ + function deepEqual(actual: unknown, expected: unknown, message?: string | Error): void; + /** + * **Strict assertion mode** + * + * An alias of {@link notDeepStrictEqual}. + * + * **Legacy assertion mode** + * + * > Stability: 3 - Legacy: Use {@link notDeepStrictEqual} instead. + * + * Tests for any deep inequality. Opposite of {@link deepEqual}. + * + * ```js + * import assert from 'node:assert'; + * + * const obj1 = { + * a: { + * b: 1, + * }, + * }; + * const obj2 = { + * a: { + * b: 2, + * }, + * }; + * const obj3 = { + * a: { + * b: 1, + * }, + * }; + * const obj4 = { __proto__: obj1 }; + * + * assert.notDeepEqual(obj1, obj1); + * // AssertionError: { a: { b: 1 } } notDeepEqual { a: { b: 1 } } + * + * assert.notDeepEqual(obj1, obj2); + * // OK + * + * assert.notDeepEqual(obj1, obj3); + * // AssertionError: { a: { b: 1 } } notDeepEqual { a: { b: 1 } } + * + * assert.notDeepEqual(obj1, obj4); + * // OK + * ``` + * + * If the values are deeply equal, an `AssertionError` is thrown with a`message` property set equal to the value of the `message` parameter. If the`message` parameter is undefined, a default + * error message is assigned. If the`message` parameter is an instance of an `Error` then it will be thrown + * instead of the `AssertionError`. + * @since v0.1.21 + */ + function notDeepEqual(actual: unknown, expected: unknown, message?: string | Error): void; + /** + * Tests strict equality between the `actual` and `expected` parameters as + * determined by [`Object.is()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is). + * + * ```js + * import assert from 'node:assert/strict'; + * + * assert.strictEqual(1, 2); + * // AssertionError [ERR_ASSERTION]: Expected inputs to be strictly equal: + * // + * // 1 !== 2 + * + * assert.strictEqual(1, 1); + * // OK + * + * assert.strictEqual('Hello foobar', 'Hello World!'); + * // AssertionError [ERR_ASSERTION]: Expected inputs to be strictly equal: + * // + actual - expected + * // + * // + 'Hello foobar' + * // - 'Hello World!' + * // ^ + * + * const apples = 1; + * const oranges = 2; + * assert.strictEqual(apples, oranges, `apples ${apples} !== oranges ${oranges}`); + * // AssertionError [ERR_ASSERTION]: apples 1 !== oranges 2 + * + * assert.strictEqual(1, '1', new TypeError('Inputs are not identical')); + * // TypeError: Inputs are not identical + * ``` + * + * If the values are not strictly equal, an `AssertionError` is thrown with a`message` property set equal to the value of the `message` parameter. If the`message` parameter is undefined, a + * default error message is assigned. If the`message` parameter is an instance of an `Error` then it will be thrown + * instead of the `AssertionError`. + * @since v0.1.21 + */ + function strictEqual(actual: unknown, expected: T, message?: string | Error): asserts actual is T; + /** + * Tests strict inequality between the `actual` and `expected` parameters as + * determined by [`Object.is()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is). + * + * ```js + * import assert from 'node:assert/strict'; + * + * assert.notStrictEqual(1, 2); + * // OK + * + * assert.notStrictEqual(1, 1); + * // AssertionError [ERR_ASSERTION]: Expected "actual" to be strictly unequal to: + * // + * // 1 + * + * assert.notStrictEqual(1, '1'); + * // OK + * ``` + * + * If the values are strictly equal, an `AssertionError` is thrown with a`message` property set equal to the value of the `message` parameter. If the`message` parameter is undefined, a + * default error message is assigned. If the`message` parameter is an instance of an `Error` then it will be thrown + * instead of the `AssertionError`. + * @since v0.1.21 + */ + function notStrictEqual(actual: unknown, expected: unknown, message?: string | Error): void; + /** + * Tests for deep equality between the `actual` and `expected` parameters. + * "Deep" equality means that the enumerable "own" properties of child objects + * are recursively evaluated also by the following rules. + * @since v1.2.0 + */ + function deepStrictEqual(actual: unknown, expected: T, message?: string | Error): asserts actual is T; + /** + * Tests for deep strict inequality. Opposite of {@link deepStrictEqual}. + * + * ```js + * import assert from 'node:assert/strict'; + * + * assert.notDeepStrictEqual({ a: 1 }, { a: '1' }); + * // OK + * ``` + * + * If the values are deeply and strictly equal, an `AssertionError` is thrown + * with a `message` property set equal to the value of the `message` parameter. If + * the `message` parameter is undefined, a default error message is assigned. If + * the `message` parameter is an instance of an `Error` then it will be thrown + * instead of the `AssertionError`. + * @since v1.2.0 + */ + function notDeepStrictEqual(actual: unknown, expected: unknown, message?: string | Error): void; + /** + * Expects the function `fn` to throw an error. + * + * If specified, `error` can be a [`Class`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes), + * [`RegExp`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions), a validation function, + * a validation object where each property will be tested for strict deep equality, + * or an instance of error where each property will be tested for strict deep + * equality including the non-enumerable `message` and `name` properties. When + * using an object, it is also possible to use a regular expression, when + * validating against a string property. See below for examples. + * + * If specified, `message` will be appended to the message provided by the`AssertionError` if the `fn` call fails to throw or in case the error validation + * fails. + * + * Custom validation object/error instance: + * + * ```js + * import assert from 'node:assert/strict'; + * + * const err = new TypeError('Wrong value'); + * err.code = 404; + * err.foo = 'bar'; + * err.info = { + * nested: true, + * baz: 'text', + * }; + * err.reg = /abc/i; + * + * assert.throws( + * () => { + * throw err; + * }, + * { + * name: 'TypeError', + * message: 'Wrong value', + * info: { + * nested: true, + * baz: 'text', + * }, + * // Only properties on the validation object will be tested for. + * // Using nested objects requires all properties to be present. Otherwise + * // the validation is going to fail. + * }, + * ); + * + * // Using regular expressions to validate error properties: + * assert.throws( + * () => { + * throw err; + * }, + * { + * // The `name` and `message` properties are strings and using regular + * // expressions on those will match against the string. If they fail, an + * // error is thrown. + * name: /^TypeError$/, + * message: /Wrong/, + * foo: 'bar', + * info: { + * nested: true, + * // It is not possible to use regular expressions for nested properties! + * baz: 'text', + * }, + * // The `reg` property contains a regular expression and only if the + * // validation object contains an identical regular expression, it is going + * // to pass. + * reg: /abc/i, + * }, + * ); + * + * // Fails due to the different `message` and `name` properties: + * assert.throws( + * () => { + * const otherErr = new Error('Not found'); + * // Copy all enumerable properties from `err` to `otherErr`. + * for (const [key, value] of Object.entries(err)) { + * otherErr[key] = value; + * } + * throw otherErr; + * }, + * // The error's `message` and `name` properties will also be checked when using + * // an error as validation object. + * err, + * ); + * ``` + * + * Validate instanceof using constructor: + * + * ```js + * import assert from 'node:assert/strict'; + * + * assert.throws( + * () => { + * throw new Error('Wrong value'); + * }, + * Error, + * ); + * ``` + * + * Validate error message using [`RegExp`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions): + * + * Using a regular expression runs `.toString` on the error object, and will + * therefore also include the error name. + * + * ```js + * import assert from 'node:assert/strict'; + * + * assert.throws( + * () => { + * throw new Error('Wrong value'); + * }, + * /^Error: Wrong value$/, + * ); + * ``` + * + * Custom error validation: + * + * The function must return `true` to indicate all internal validations passed. + * It will otherwise fail with an `AssertionError`. + * + * ```js + * import assert from 'node:assert/strict'; + * + * assert.throws( + * () => { + * throw new Error('Wrong value'); + * }, + * (err) => { + * assert(err instanceof Error); + * assert(/value/.test(err)); + * // Avoid returning anything from validation functions besides `true`. + * // Otherwise, it's not clear what part of the validation failed. Instead, + * // throw an error about the specific validation that failed (as done in this + * // example) and add as much helpful debugging information to that error as + * // possible. + * return true; + * }, + * 'unexpected error', + * ); + * ``` + * + * `error` cannot be a string. If a string is provided as the second + * argument, then `error` is assumed to be omitted and the string will be used for`message` instead. This can lead to easy-to-miss mistakes. Using the same + * message as the thrown error message is going to result in an`ERR_AMBIGUOUS_ARGUMENT` error. Please read the example below carefully if using + * a string as the second argument gets considered: + * + * ```js + * import assert from 'node:assert/strict'; + * + * function throwingFirst() { + * throw new Error('First'); + * } + * + * function throwingSecond() { + * throw new Error('Second'); + * } + * + * function notThrowing() {} + * + * // The second argument is a string and the input function threw an Error. + * // The first case will not throw as it does not match for the error message + * // thrown by the input function! + * assert.throws(throwingFirst, 'Second'); + * // In the next example the message has no benefit over the message from the + * // error and since it is not clear if the user intended to actually match + * // against the error message, Node.js throws an `ERR_AMBIGUOUS_ARGUMENT` error. + * assert.throws(throwingSecond, 'Second'); + * // TypeError [ERR_AMBIGUOUS_ARGUMENT] + * + * // The string is only used (as message) in case the function does not throw: + * assert.throws(notThrowing, 'Second'); + * // AssertionError [ERR_ASSERTION]: Missing expected exception: Second + * + * // If it was intended to match for the error message do this instead: + * // It does not throw because the error messages match. + * assert.throws(throwingSecond, /Second$/); + * + * // If the error message does not match, an AssertionError is thrown. + * assert.throws(throwingFirst, /Second$/); + * // AssertionError [ERR_ASSERTION] + * ``` + * + * Due to the confusing error-prone notation, avoid a string as the second + * argument. + * @since v0.1.21 + */ + function throws(block: () => unknown, message?: string | Error): void; + function throws(block: () => unknown, error: AssertPredicate, message?: string | Error): void; + /** + * Asserts that the function `fn` does not throw an error. + * + * Using `assert.doesNotThrow()` is actually not useful because there + * is no benefit in catching an error and then rethrowing it. Instead, consider + * adding a comment next to the specific code path that should not throw and keep + * error messages as expressive as possible. + * + * When `assert.doesNotThrow()` is called, it will immediately call the `fn`function. + * + * If an error is thrown and it is the same type as that specified by the `error`parameter, then an `AssertionError` is thrown. If the error is of a + * different type, or if the `error` parameter is undefined, the error is + * propagated back to the caller. + * + * If specified, `error` can be a [`Class`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes), + * [`RegExp`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions), or a validation + * function. See {@link throws} for more details. + * + * The following, for instance, will throw the `TypeError` because there is no + * matching error type in the assertion: + * + * ```js + * import assert from 'node:assert/strict'; + * + * assert.doesNotThrow( + * () => { + * throw new TypeError('Wrong value'); + * }, + * SyntaxError, + * ); + * ``` + * + * However, the following will result in an `AssertionError` with the message + * 'Got unwanted exception...': + * + * ```js + * import assert from 'node:assert/strict'; + * + * assert.doesNotThrow( + * () => { + * throw new TypeError('Wrong value'); + * }, + * TypeError, + * ); + * ``` + * + * If an `AssertionError` is thrown and a value is provided for the `message`parameter, the value of `message` will be appended to the `AssertionError` message: + * + * ```js + * import assert from 'node:assert/strict'; + * + * assert.doesNotThrow( + * () => { + * throw new TypeError('Wrong value'); + * }, + * /Wrong value/, + * 'Whoops', + * ); + * // Throws: AssertionError: Got unwanted exception: Whoops + * ``` + * @since v0.1.21 + */ + function doesNotThrow(block: () => unknown, message?: string | Error): void; + function doesNotThrow(block: () => unknown, error: AssertPredicate, message?: string | Error): void; + /** + * Throws `value` if `value` is not `undefined` or `null`. This is useful when + * testing the `error` argument in callbacks. The stack trace contains all frames + * from the error passed to `ifError()` including the potential new frames for`ifError()` itself. + * + * ```js + * import assert from 'node:assert/strict'; + * + * assert.ifError(null); + * // OK + * assert.ifError(0); + * // AssertionError [ERR_ASSERTION]: ifError got unwanted exception: 0 + * assert.ifError('error'); + * // AssertionError [ERR_ASSERTION]: ifError got unwanted exception: 'error' + * assert.ifError(new Error()); + * // AssertionError [ERR_ASSERTION]: ifError got unwanted exception: Error + * + * // Create some random error frames. + * let err; + * (function errorFrame() { + * err = new Error('test error'); + * })(); + * + * (function ifErrorFrame() { + * assert.ifError(err); + * })(); + * // AssertionError [ERR_ASSERTION]: ifError got unwanted exception: test error + * // at ifErrorFrame + * // at errorFrame + * ``` + * @since v0.1.97 + */ + function ifError(value: unknown): asserts value is null | undefined; + /** + * Awaits the `asyncFn` promise or, if `asyncFn` is a function, immediately + * calls the function and awaits the returned promise to complete. It will then + * check that the promise is rejected. + * + * If `asyncFn` is a function and it throws an error synchronously,`assert.rejects()` will return a rejected `Promise` with that error. If the + * function does not return a promise, `assert.rejects()` will return a rejected`Promise` with an `ERR_INVALID_RETURN_VALUE` error. In both cases the error + * handler is skipped. + * + * Besides the async nature to await the completion behaves identically to {@link throws}. + * + * If specified, `error` can be a [`Class`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes), + * [`RegExp`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions), a validation function, + * an object where each property will be tested for, or an instance of error where + * each property will be tested for including the non-enumerable `message` and`name` properties. + * + * If specified, `message` will be the message provided by the `AssertionError` if the `asyncFn` fails to reject. + * + * ```js + * import assert from 'node:assert/strict'; + * + * await assert.rejects( + * async () => { + * throw new TypeError('Wrong value'); + * }, + * { + * name: 'TypeError', + * message: 'Wrong value', + * }, + * ); + * ``` + * + * ```js + * import assert from 'node:assert/strict'; + * + * await assert.rejects( + * async () => { + * throw new TypeError('Wrong value'); + * }, + * (err) => { + * assert.strictEqual(err.name, 'TypeError'); + * assert.strictEqual(err.message, 'Wrong value'); + * return true; + * }, + * ); + * ``` + * + * ```js + * import assert from 'node:assert/strict'; + * + * assert.rejects( + * Promise.reject(new Error('Wrong value')), + * Error, + * ).then(() => { + * // ... + * }); + * ``` + * + * `error` cannot be a string. If a string is provided as the second + * argument, then `error` is assumed to be omitted and the string will be used for`message` instead. This can lead to easy-to-miss mistakes. Please read the + * example in {@link throws} carefully if using a string as the second + * argument gets considered. + * @since v10.0.0 + */ + function rejects(block: (() => Promise) | Promise, message?: string | Error): Promise; + function rejects( + block: (() => Promise) | Promise, + error: AssertPredicate, + message?: string | Error, + ): Promise; + /** + * Awaits the `asyncFn` promise or, if `asyncFn` is a function, immediately + * calls the function and awaits the returned promise to complete. It will then + * check that the promise is not rejected. + * + * If `asyncFn` is a function and it throws an error synchronously,`assert.doesNotReject()` will return a rejected `Promise` with that error. If + * the function does not return a promise, `assert.doesNotReject()` will return a + * rejected `Promise` with an `ERR_INVALID_RETURN_VALUE` error. In both cases + * the error handler is skipped. + * + * Using `assert.doesNotReject()` is actually not useful because there is little + * benefit in catching a rejection and then rejecting it again. Instead, consider + * adding a comment next to the specific code path that should not reject and keep + * error messages as expressive as possible. + * + * If specified, `error` can be a [`Class`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes), + * [`RegExp`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions), or a validation + * function. See {@link throws} for more details. + * + * Besides the async nature to await the completion behaves identically to {@link doesNotThrow}. + * + * ```js + * import assert from 'node:assert/strict'; + * + * await assert.doesNotReject( + * async () => { + * throw new TypeError('Wrong value'); + * }, + * SyntaxError, + * ); + * ``` + * + * ```js + * import assert from 'node:assert/strict'; + * + * assert.doesNotReject(Promise.reject(new TypeError('Wrong value'))) + * .then(() => { + * // ... + * }); + * ``` + * @since v10.0.0 + */ + function doesNotReject( + block: (() => Promise) | Promise, + message?: string | Error, + ): Promise; + function doesNotReject( + block: (() => Promise) | Promise, + error: AssertPredicate, + message?: string | Error, + ): Promise; + /** + * Expects the `string` input to match the regular expression. + * + * ```js + * import assert from 'node:assert/strict'; + * + * assert.match('I will fail', /pass/); + * // AssertionError [ERR_ASSERTION]: The input did not match the regular ... + * + * assert.match(123, /pass/); + * // AssertionError [ERR_ASSERTION]: The "string" argument must be of type string. + * + * assert.match('I will pass', /pass/); + * // OK + * ``` + * + * If the values do not match, or if the `string` argument is of another type than`string`, an `AssertionError` is thrown with a `message` property set equal + * to the value of the `message` parameter. If the `message` parameter is + * undefined, a default error message is assigned. If the `message` parameter is an + * instance of an `Error` then it will be thrown instead of the `AssertionError`. + * @since v13.6.0, v12.16.0 + */ + function match(value: string, regExp: RegExp, message?: string | Error): void; + /** + * Expects the `string` input not to match the regular expression. + * + * ```js + * import assert from 'node:assert/strict'; + * + * assert.doesNotMatch('I will fail', /fail/); + * // AssertionError [ERR_ASSERTION]: The input was expected to not match the ... + * + * assert.doesNotMatch(123, /pass/); + * // AssertionError [ERR_ASSERTION]: The "string" argument must be of type string. + * + * assert.doesNotMatch('I will pass', /different/); + * // OK + * ``` + * + * If the values do match, or if the `string` argument is of another type than`string`, an `AssertionError` is thrown with a `message` property set equal + * to the value of the `message` parameter. If the `message` parameter is + * undefined, a default error message is assigned. If the `message` parameter is an + * instance of an `Error` then it will be thrown instead of the `AssertionError`. + * @since v13.6.0, v12.16.0 + */ + function doesNotMatch(value: string, regExp: RegExp, message?: string | Error): void; + const strict: + & Omit< + typeof assert, + | "equal" + | "notEqual" + | "deepEqual" + | "notDeepEqual" + | "ok" + | "strictEqual" + | "deepStrictEqual" + | "ifError" + | "strict" + > + & { + (value: unknown, message?: string | Error): asserts value; + equal: typeof strictEqual; + notEqual: typeof notStrictEqual; + deepEqual: typeof deepStrictEqual; + notDeepEqual: typeof notDeepStrictEqual; + // Mapped types and assertion functions are incompatible? + // TS2775: Assertions require every name in the call target + // to be declared with an explicit type annotation. + ok: typeof ok; + strictEqual: typeof strictEqual; + deepStrictEqual: typeof deepStrictEqual; + ifError: typeof ifError; + strict: typeof strict; + }; + } + export = assert; +} +declare module "node:assert" { + import assert = require("assert"); + export = assert; +} diff --git a/Url-Shortner/node_modules/@types/node/ts4.8/assert/strict.d.ts b/Url-Shortner/node_modules/@types/node/ts4.8/assert/strict.d.ts new file mode 100644 index 0000000..f333913 --- /dev/null +++ b/Url-Shortner/node_modules/@types/node/ts4.8/assert/strict.d.ts @@ -0,0 +1,8 @@ +declare module "assert/strict" { + import { strict } from "node:assert"; + export = strict; +} +declare module "node:assert/strict" { + import { strict } from "node:assert"; + export = strict; +} diff --git a/Url-Shortner/node_modules/@types/node/ts4.8/async_hooks.d.ts b/Url-Shortner/node_modules/@types/node/ts4.8/async_hooks.d.ts new file mode 100644 index 0000000..0667a61 --- /dev/null +++ b/Url-Shortner/node_modules/@types/node/ts4.8/async_hooks.d.ts @@ -0,0 +1,539 @@ +/** + * We strongly discourage the use of the `async_hooks` API. + * Other APIs that can cover most of its use cases include: + * + * * `AsyncLocalStorage` tracks async context + * * `process.getActiveResourcesInfo()` tracks active resources + * + * The `node:async_hooks` module provides an API to track asynchronous resources. + * It can be accessed using: + * + * ```js + * import async_hooks from 'node:async_hooks'; + * ``` + * @experimental + * @see [source](https://github.com/nodejs/node/blob/v20.2.0/lib/async_hooks.js) + */ +declare module "async_hooks" { + /** + * ```js + * import { executionAsyncId } from 'node:async_hooks'; + * import fs from 'node:fs'; + * + * console.log(executionAsyncId()); // 1 - bootstrap + * const path = '.'; + * fs.open(path, 'r', (err, fd) => { + * console.log(executionAsyncId()); // 6 - open() + * }); + * ``` + * + * The ID returned from `executionAsyncId()` is related to execution timing, not + * causality (which is covered by `triggerAsyncId()`): + * + * ```js + * const server = net.createServer((conn) => { + * // Returns the ID of the server, not of the new connection, because the + * // callback runs in the execution scope of the server's MakeCallback(). + * async_hooks.executionAsyncId(); + * + * }).listen(port, () => { + * // Returns the ID of a TickObject (process.nextTick()) because all + * // callbacks passed to .listen() are wrapped in a nextTick(). + * async_hooks.executionAsyncId(); + * }); + * ``` + * + * Promise contexts may not get precise `executionAsyncIds` by default. + * See the section on `promise execution tracking`. + * @since v8.1.0 + * @return The `asyncId` of the current execution context. Useful to track when something calls. + */ + function executionAsyncId(): number; + /** + * Resource objects returned by `executionAsyncResource()` are most often internal + * Node.js handle objects with undocumented APIs. Using any functions or properties + * on the object is likely to crash your application and should be avoided. + * + * Using `executionAsyncResource()` in the top-level execution context will + * return an empty object as there is no handle or request object to use, + * but having an object representing the top-level can be helpful. + * + * ```js + * import { open } from 'node:fs'; + * import { executionAsyncId, executionAsyncResource } from 'node:async_hooks'; + * + * console.log(executionAsyncId(), executionAsyncResource()); // 1 {} + * open(new URL(import.meta.url), 'r', (err, fd) => { + * console.log(executionAsyncId(), executionAsyncResource()); // 7 FSReqWrap + * }); + * ``` + * + * This can be used to implement continuation local storage without the + * use of a tracking `Map` to store the metadata: + * + * ```js + * import { createServer } from 'node:http'; + * import { + * executionAsyncId, + * executionAsyncResource, + * createHook, + * } from 'async_hooks'; + * const sym = Symbol('state'); // Private symbol to avoid pollution + * + * createHook({ + * init(asyncId, type, triggerAsyncId, resource) { + * const cr = executionAsyncResource(); + * if (cr) { + * resource[sym] = cr[sym]; + * } + * }, + * }).enable(); + * + * const server = createServer((req, res) => { + * executionAsyncResource()[sym] = { state: req.url }; + * setTimeout(function() { + * res.end(JSON.stringify(executionAsyncResource()[sym])); + * }, 100); + * }).listen(3000); + * ``` + * @since v13.9.0, v12.17.0 + * @return The resource representing the current execution. Useful to store data within the resource. + */ + function executionAsyncResource(): object; + /** + * ```js + * const server = net.createServer((conn) => { + * // The resource that caused (or triggered) this callback to be called + * // was that of the new connection. Thus the return value of triggerAsyncId() + * // is the asyncId of "conn". + * async_hooks.triggerAsyncId(); + * + * }).listen(port, () => { + * // Even though all callbacks passed to .listen() are wrapped in a nextTick() + * // the callback itself exists because the call to the server's .listen() + * // was made. So the return value would be the ID of the server. + * async_hooks.triggerAsyncId(); + * }); + * ``` + * + * Promise contexts may not get valid `triggerAsyncId`s by default. See + * the section on `promise execution tracking`. + * @return The ID of the resource responsible for calling the callback that is currently being executed. + */ + function triggerAsyncId(): number; + interface HookCallbacks { + /** + * Called when a class is constructed that has the possibility to emit an asynchronous event. + * @param asyncId a unique ID for the async resource + * @param type the type of the async resource + * @param triggerAsyncId the unique ID of the async resource in whose execution context this async resource was created + * @param resource reference to the resource representing the async operation, needs to be released during destroy + */ + init?(asyncId: number, type: string, triggerAsyncId: number, resource: object): void; + /** + * When an asynchronous operation is initiated or completes a callback is called to notify the user. + * The before callback is called just before said callback is executed. + * @param asyncId the unique identifier assigned to the resource about to execute the callback. + */ + before?(asyncId: number): void; + /** + * Called immediately after the callback specified in before is completed. + * @param asyncId the unique identifier assigned to the resource which has executed the callback. + */ + after?(asyncId: number): void; + /** + * Called when a promise has resolve() called. This may not be in the same execution id + * as the promise itself. + * @param asyncId the unique id for the promise that was resolve()d. + */ + promiseResolve?(asyncId: number): void; + /** + * Called after the resource corresponding to asyncId is destroyed + * @param asyncId a unique ID for the async resource + */ + destroy?(asyncId: number): void; + } + interface AsyncHook { + /** + * Enable the callbacks for a given AsyncHook instance. If no callbacks are provided enabling is a noop. + */ + enable(): this; + /** + * Disable the callbacks for a given AsyncHook instance from the global pool of AsyncHook callbacks to be executed. Once a hook has been disabled it will not be called again until enabled. + */ + disable(): this; + } + /** + * Registers functions to be called for different lifetime events of each async + * operation. + * + * The callbacks `init()`/`before()`/`after()`/`destroy()` are called for the + * respective asynchronous event during a resource's lifetime. + * + * All callbacks are optional. For example, if only resource cleanup needs to + * be tracked, then only the `destroy` callback needs to be passed. The + * specifics of all functions that can be passed to `callbacks` is in the `Hook Callbacks` section. + * + * ```js + * import { createHook } from 'node:async_hooks'; + * + * const asyncHook = createHook({ + * init(asyncId, type, triggerAsyncId, resource) { }, + * destroy(asyncId) { }, + * }); + * ``` + * + * The callbacks will be inherited via the prototype chain: + * + * ```js + * class MyAsyncCallbacks { + * init(asyncId, type, triggerAsyncId, resource) { } + * destroy(asyncId) {} + * } + * + * class MyAddedCallbacks extends MyAsyncCallbacks { + * before(asyncId) { } + * after(asyncId) { } + * } + * + * const asyncHook = async_hooks.createHook(new MyAddedCallbacks()); + * ``` + * + * Because promises are asynchronous resources whose lifecycle is tracked + * via the async hooks mechanism, the `init()`, `before()`, `after()`, and`destroy()` callbacks _must not_ be async functions that return promises. + * @since v8.1.0 + * @param callbacks The `Hook Callbacks` to register + * @return Instance used for disabling and enabling hooks + */ + function createHook(callbacks: HookCallbacks): AsyncHook; + interface AsyncResourceOptions { + /** + * The ID of the execution context that created this async event. + * @default executionAsyncId() + */ + triggerAsyncId?: number | undefined; + /** + * Disables automatic `emitDestroy` when the object is garbage collected. + * This usually does not need to be set (even if `emitDestroy` is called + * manually), unless the resource's `asyncId` is retrieved and the + * sensitive API's `emitDestroy` is called with it. + * @default false + */ + requireManualDestroy?: boolean | undefined; + } + /** + * The class `AsyncResource` is designed to be extended by the embedder's async + * resources. Using this, users can easily trigger the lifetime events of their + * own resources. + * + * The `init` hook will trigger when an `AsyncResource` is instantiated. + * + * The following is an overview of the `AsyncResource` API. + * + * ```js + * import { AsyncResource, executionAsyncId } from 'node:async_hooks'; + * + * // AsyncResource() is meant to be extended. Instantiating a + * // new AsyncResource() also triggers init. If triggerAsyncId is omitted then + * // async_hook.executionAsyncId() is used. + * const asyncResource = new AsyncResource( + * type, { triggerAsyncId: executionAsyncId(), requireManualDestroy: false }, + * ); + * + * // Run a function in the execution context of the resource. This will + * // * establish the context of the resource + * // * trigger the AsyncHooks before callbacks + * // * call the provided function `fn` with the supplied arguments + * // * trigger the AsyncHooks after callbacks + * // * restore the original execution context + * asyncResource.runInAsyncScope(fn, thisArg, ...args); + * + * // Call AsyncHooks destroy callbacks. + * asyncResource.emitDestroy(); + * + * // Return the unique ID assigned to the AsyncResource instance. + * asyncResource.asyncId(); + * + * // Return the trigger ID for the AsyncResource instance. + * asyncResource.triggerAsyncId(); + * ``` + */ + class AsyncResource { + /** + * AsyncResource() is meant to be extended. Instantiating a + * new AsyncResource() also triggers init. If triggerAsyncId is omitted then + * async_hook.executionAsyncId() is used. + * @param type The type of async event. + * @param triggerAsyncId The ID of the execution context that created + * this async event (default: `executionAsyncId()`), or an + * AsyncResourceOptions object (since v9.3.0) + */ + constructor(type: string, triggerAsyncId?: number | AsyncResourceOptions); + /** + * Binds the given function to the current execution context. + * @since v14.8.0, v12.19.0 + * @param fn The function to bind to the current execution context. + * @param type An optional name to associate with the underlying `AsyncResource`. + */ + static bind any, ThisArg>( + fn: Func, + type?: string, + thisArg?: ThisArg, + ): Func; + /** + * Binds the given function to execute to this `AsyncResource`'s scope. + * @since v14.8.0, v12.19.0 + * @param fn The function to bind to the current `AsyncResource`. + */ + bind any>(fn: Func): Func; + /** + * Call the provided function with the provided arguments in the execution context + * of the async resource. This will establish the context, trigger the AsyncHooks + * before callbacks, call the function, trigger the AsyncHooks after callbacks, and + * then restore the original execution context. + * @since v9.6.0 + * @param fn The function to call in the execution context of this async resource. + * @param thisArg The receiver to be used for the function call. + * @param args Optional arguments to pass to the function. + */ + runInAsyncScope( + fn: (this: This, ...args: any[]) => Result, + thisArg?: This, + ...args: any[] + ): Result; + /** + * Call all `destroy` hooks. This should only ever be called once. An error will + * be thrown if it is called more than once. This **must** be manually called. If + * the resource is left to be collected by the GC then the `destroy` hooks will + * never be called. + * @return A reference to `asyncResource`. + */ + emitDestroy(): this; + /** + * @return The unique `asyncId` assigned to the resource. + */ + asyncId(): number; + /** + * @return The same `triggerAsyncId` that is passed to the `AsyncResource` constructor. + */ + triggerAsyncId(): number; + } + /** + * This class creates stores that stay coherent through asynchronous operations. + * + * While you can create your own implementation on top of the `node:async_hooks`module, `AsyncLocalStorage` should be preferred as it is a performant and memory + * safe implementation that involves significant optimizations that are non-obvious + * to implement. + * + * The following example uses `AsyncLocalStorage` to build a simple logger + * that assigns IDs to incoming HTTP requests and includes them in messages + * logged within each request. + * + * ```js + * import http from 'node:http'; + * import { AsyncLocalStorage } from 'node:async_hooks'; + * + * const asyncLocalStorage = new AsyncLocalStorage(); + * + * function logWithId(msg) { + * const id = asyncLocalStorage.getStore(); + * console.log(`${id !== undefined ? id : '-'}:`, msg); + * } + * + * let idSeq = 0; + * http.createServer((req, res) => { + * asyncLocalStorage.run(idSeq++, () => { + * logWithId('start'); + * // Imagine any chain of async operations here + * setImmediate(() => { + * logWithId('finish'); + * res.end(); + * }); + * }); + * }).listen(8080); + * + * http.get('http://localhost:8080'); + * http.get('http://localhost:8080'); + * // Prints: + * // 0: start + * // 1: start + * // 0: finish + * // 1: finish + * ``` + * + * Each instance of `AsyncLocalStorage` maintains an independent storage context. + * Multiple instances can safely exist simultaneously without risk of interfering + * with each other's data. + * @since v13.10.0, v12.17.0 + */ + class AsyncLocalStorage { + /** + * Binds the given function to the current execution context. + * @since v19.8.0 + * @experimental + * @param fn The function to bind to the current execution context. + * @return A new function that calls `fn` within the captured execution context. + */ + static bind any>(fn: Func): Func; + /** + * Captures the current execution context and returns a function that accepts a + * function as an argument. Whenever the returned function is called, it + * calls the function passed to it within the captured context. + * + * ```js + * const asyncLocalStorage = new AsyncLocalStorage(); + * const runInAsyncScope = asyncLocalStorage.run(123, () => AsyncLocalStorage.snapshot()); + * const result = asyncLocalStorage.run(321, () => runInAsyncScope(() => asyncLocalStorage.getStore())); + * console.log(result); // returns 123 + * ``` + * + * AsyncLocalStorage.snapshot() can replace the use of AsyncResource for simple + * async context tracking purposes, for example: + * + * ```js + * class Foo { + * #runInAsyncScope = AsyncLocalStorage.snapshot(); + * + * get() { return this.#runInAsyncScope(() => asyncLocalStorage.getStore()); } + * } + * + * const foo = asyncLocalStorage.run(123, () => new Foo()); + * console.log(asyncLocalStorage.run(321, () => foo.get())); // returns 123 + * ``` + * @since v19.8.0 + * @experimental + * @return A new function with the signature `(fn: (...args) : R, ...args) : R`. + */ + static snapshot(): (fn: (...args: TArgs) => R, ...args: TArgs) => R; + /** + * Disables the instance of `AsyncLocalStorage`. All subsequent calls + * to `asyncLocalStorage.getStore()` will return `undefined` until`asyncLocalStorage.run()` or `asyncLocalStorage.enterWith()` is called again. + * + * When calling `asyncLocalStorage.disable()`, all current contexts linked to the + * instance will be exited. + * + * Calling `asyncLocalStorage.disable()` is required before the`asyncLocalStorage` can be garbage collected. This does not apply to stores + * provided by the `asyncLocalStorage`, as those objects are garbage collected + * along with the corresponding async resources. + * + * Use this method when the `asyncLocalStorage` is not in use anymore + * in the current process. + * @since v13.10.0, v12.17.0 + * @experimental + */ + disable(): void; + /** + * Returns the current store. + * If called outside of an asynchronous context initialized by + * calling `asyncLocalStorage.run()` or `asyncLocalStorage.enterWith()`, it + * returns `undefined`. + * @since v13.10.0, v12.17.0 + */ + getStore(): T | undefined; + /** + * Runs a function synchronously within a context and returns its + * return value. The store is not accessible outside of the callback function. + * The store is accessible to any asynchronous operations created within the + * callback. + * + * The optional `args` are passed to the callback function. + * + * If the callback function throws an error, the error is thrown by `run()` too. + * The stacktrace is not impacted by this call and the context is exited. + * + * Example: + * + * ```js + * const store = { id: 2 }; + * try { + * asyncLocalStorage.run(store, () => { + * asyncLocalStorage.getStore(); // Returns the store object + * setTimeout(() => { + * asyncLocalStorage.getStore(); // Returns the store object + * }, 200); + * throw new Error(); + * }); + * } catch (e) { + * asyncLocalStorage.getStore(); // Returns undefined + * // The error will be caught here + * } + * ``` + * @since v13.10.0, v12.17.0 + */ + run(store: T, callback: () => R): R; + run(store: T, callback: (...args: TArgs) => R, ...args: TArgs): R; + /** + * Runs a function synchronously outside of a context and returns its + * return value. The store is not accessible within the callback function or + * the asynchronous operations created within the callback. Any `getStore()`call done within the callback function will always return `undefined`. + * + * The optional `args` are passed to the callback function. + * + * If the callback function throws an error, the error is thrown by `exit()` too. + * The stacktrace is not impacted by this call and the context is re-entered. + * + * Example: + * + * ```js + * // Within a call to run + * try { + * asyncLocalStorage.getStore(); // Returns the store object or value + * asyncLocalStorage.exit(() => { + * asyncLocalStorage.getStore(); // Returns undefined + * throw new Error(); + * }); + * } catch (e) { + * asyncLocalStorage.getStore(); // Returns the same object or value + * // The error will be caught here + * } + * ``` + * @since v13.10.0, v12.17.0 + * @experimental + */ + exit(callback: (...args: TArgs) => R, ...args: TArgs): R; + /** + * Transitions into the context for the remainder of the current + * synchronous execution and then persists the store through any following + * asynchronous calls. + * + * Example: + * + * ```js + * const store = { id: 1 }; + * // Replaces previous store with the given store object + * asyncLocalStorage.enterWith(store); + * asyncLocalStorage.getStore(); // Returns the store object + * someAsyncOperation(() => { + * asyncLocalStorage.getStore(); // Returns the same object + * }); + * ``` + * + * This transition will continue for the _entire_ synchronous execution. + * This means that if, for example, the context is entered within an event + * handler subsequent event handlers will also run within that context unless + * specifically bound to another context with an `AsyncResource`. That is why`run()` should be preferred over `enterWith()` unless there are strong reasons + * to use the latter method. + * + * ```js + * const store = { id: 1 }; + * + * emitter.on('my-event', () => { + * asyncLocalStorage.enterWith(store); + * }); + * emitter.on('my-event', () => { + * asyncLocalStorage.getStore(); // Returns the same object + * }); + * + * asyncLocalStorage.getStore(); // Returns undefined + * emitter.emit('my-event'); + * asyncLocalStorage.getStore(); // Returns the same object + * ``` + * @since v13.11.0, v12.17.0 + * @experimental + */ + enterWith(store: T): void; + } +} +declare module "node:async_hooks" { + export * from "async_hooks"; +} diff --git a/Url-Shortner/node_modules/@types/node/ts4.8/buffer.d.ts b/Url-Shortner/node_modules/@types/node/ts4.8/buffer.d.ts new file mode 100644 index 0000000..84c0c19 --- /dev/null +++ b/Url-Shortner/node_modules/@types/node/ts4.8/buffer.d.ts @@ -0,0 +1,2352 @@ +/** + * `Buffer` objects are used to represent a fixed-length sequence of bytes. Many + * Node.js APIs support `Buffer`s. + * + * The `Buffer` class is a subclass of JavaScript's [`Uint8Array`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array) class and + * extends it with methods that cover additional use cases. Node.js APIs accept + * plain [`Uint8Array`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array) s wherever `Buffer`s are supported as well. + * + * While the `Buffer` class is available within the global scope, it is still + * recommended to explicitly reference it via an import or require statement. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * // Creates a zero-filled Buffer of length 10. + * const buf1 = Buffer.alloc(10); + * + * // Creates a Buffer of length 10, + * // filled with bytes which all have the value `1`. + * const buf2 = Buffer.alloc(10, 1); + * + * // Creates an uninitialized buffer of length 10. + * // This is faster than calling Buffer.alloc() but the returned + * // Buffer instance might contain old data that needs to be + * // overwritten using fill(), write(), or other functions that fill the Buffer's + * // contents. + * const buf3 = Buffer.allocUnsafe(10); + * + * // Creates a Buffer containing the bytes [1, 2, 3]. + * const buf4 = Buffer.from([1, 2, 3]); + * + * // Creates a Buffer containing the bytes [1, 1, 1, 1] – the entries + * // are all truncated using `(value & 255)` to fit into the range 0–255. + * const buf5 = Buffer.from([257, 257.5, -255, '1']); + * + * // Creates a Buffer containing the UTF-8-encoded bytes for the string 'tést': + * // [0x74, 0xc3, 0xa9, 0x73, 0x74] (in hexadecimal notation) + * // [116, 195, 169, 115, 116] (in decimal notation) + * const buf6 = Buffer.from('tést'); + * + * // Creates a Buffer containing the Latin-1 bytes [0x74, 0xe9, 0x73, 0x74]. + * const buf7 = Buffer.from('tést', 'latin1'); + * ``` + * @see [source](https://github.com/nodejs/node/blob/v20.2.0/lib/buffer.js) + */ +declare module "buffer" { + import { BinaryLike } from "node:crypto"; + import { ReadableStream as WebReadableStream } from "node:stream/web"; + /** + * This function returns `true` if `input` contains only valid UTF-8-encoded data, + * including the case in which `input` is empty. + * + * Throws if the `input` is a detached array buffer. + * @since v19.4.0, v18.14.0 + * @param input The input to validate. + */ + export function isUtf8(input: Buffer | ArrayBuffer | NodeJS.TypedArray): boolean; + /** + * This function returns `true` if `input` contains only valid ASCII-encoded data, + * including the case in which `input` is empty. + * + * Throws if the `input` is a detached array buffer. + * @since v19.6.0, v18.15.0 + * @param input The input to validate. + */ + export function isAscii(input: Buffer | ArrayBuffer | NodeJS.TypedArray): boolean; + export const INSPECT_MAX_BYTES: number; + export const kMaxLength: number; + export const kStringMaxLength: number; + export const constants: { + MAX_LENGTH: number; + MAX_STRING_LENGTH: number; + }; + export type TranscodeEncoding = "ascii" | "utf8" | "utf16le" | "ucs2" | "latin1" | "binary"; + /** + * Re-encodes the given `Buffer` or `Uint8Array` instance from one character + * encoding to another. Returns a new `Buffer` instance. + * + * Throws if the `fromEnc` or `toEnc` specify invalid character encodings or if + * conversion from `fromEnc` to `toEnc` is not permitted. + * + * Encodings supported by `buffer.transcode()` are: `'ascii'`, `'utf8'`,`'utf16le'`, `'ucs2'`, `'latin1'`, and `'binary'`. + * + * The transcoding process will use substitution characters if a given byte + * sequence cannot be adequately represented in the target encoding. For instance: + * + * ```js + * import { Buffer, transcode } from 'node:buffer'; + * + * const newBuf = transcode(Buffer.from('€'), 'utf8', 'ascii'); + * console.log(newBuf.toString('ascii')); + * // Prints: '?' + * ``` + * + * Because the Euro (`€`) sign is not representable in US-ASCII, it is replaced + * with `?` in the transcoded `Buffer`. + * @since v7.1.0 + * @param source A `Buffer` or `Uint8Array` instance. + * @param fromEnc The current encoding. + * @param toEnc To target encoding. + */ + export function transcode(source: Uint8Array, fromEnc: TranscodeEncoding, toEnc: TranscodeEncoding): Buffer; + export const SlowBuffer: { + /** @deprecated since v6.0.0, use `Buffer.allocUnsafeSlow()` */ + new(size: number): Buffer; + prototype: Buffer; + }; + /** + * Resolves a `'blob:nodedata:...'` an associated `Blob` object registered using + * a prior call to `URL.createObjectURL()`. + * @since v16.7.0 + * @experimental + * @param id A `'blob:nodedata:...` URL string returned by a prior call to `URL.createObjectURL()`. + */ + export function resolveObjectURL(id: string): Blob | undefined; + export { Buffer }; + /** + * @experimental + */ + export interface BlobOptions { + /** + * @default 'utf8' + */ + encoding?: BufferEncoding | undefined; + /** + * The Blob content-type. The intent is for `type` to convey + * the MIME media type of the data, however no validation of the type format + * is performed. + */ + type?: string | undefined; + } + /** + * A [`Blob`](https://developer.mozilla.org/en-US/docs/Web/API/Blob) encapsulates immutable, raw data that can be safely shared across + * multiple worker threads. + * @since v15.7.0, v14.18.0 + */ + export class Blob { + /** + * The total size of the `Blob` in bytes. + * @since v15.7.0, v14.18.0 + */ + readonly size: number; + /** + * The content-type of the `Blob`. + * @since v15.7.0, v14.18.0 + */ + readonly type: string; + /** + * Creates a new `Blob` object containing a concatenation of the given sources. + * + * {ArrayBuffer}, {TypedArray}, {DataView}, and {Buffer} sources are copied into + * the 'Blob' and can therefore be safely modified after the 'Blob' is created. + * + * String sources are also copied into the `Blob`. + */ + constructor(sources: Array, options?: BlobOptions); + /** + * Returns a promise that fulfills with an [ArrayBuffer](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer) containing a copy of + * the `Blob` data. + * @since v15.7.0, v14.18.0 + */ + arrayBuffer(): Promise; + /** + * Creates and returns a new `Blob` containing a subset of this `Blob` objects + * data. The original `Blob` is not altered. + * @since v15.7.0, v14.18.0 + * @param start The starting index. + * @param end The ending index. + * @param type The content-type for the new `Blob` + */ + slice(start?: number, end?: number, type?: string): Blob; + /** + * Returns a promise that fulfills with the contents of the `Blob` decoded as a + * UTF-8 string. + * @since v15.7.0, v14.18.0 + */ + text(): Promise; + /** + * Returns a new `ReadableStream` that allows the content of the `Blob` to be read. + * @since v16.7.0 + */ + stream(): WebReadableStream; + } + export interface FileOptions { + /** + * One of either `'transparent'` or `'native'`. When set to `'native'`, line endings in string source parts will be + * converted to the platform native line-ending as specified by `require('node:os').EOL`. + */ + endings?: "native" | "transparent"; + /** The File content-type. */ + type?: string; + /** The last modified date of the file. `Default`: Date.now(). */ + lastModified?: number; + } + /** + * A [`File`](https://developer.mozilla.org/en-US/docs/Web/API/File) provides information about files. + * @since v19.2.0, v18.13.0 + */ + export class File extends Blob { + constructor(sources: Array, fileName: string, options?: FileOptions); + /** + * The name of the `File`. + * @since v19.2.0, v18.13.0 + */ + readonly name: string; + /** + * The last modified date of the `File`. + * @since v19.2.0, v18.13.0 + */ + readonly lastModified: number; + } + export import atob = globalThis.atob; + export import btoa = globalThis.btoa; + import { Blob as NodeBlob } from "buffer"; + // This conditional type will be the existing global Blob in a browser, or + // the copy below in a Node environment. + type __Blob = typeof globalThis extends { onmessage: any; Blob: infer T } ? T : NodeBlob; + global { + namespace NodeJS { + export { BufferEncoding }; + } + // Buffer class + type BufferEncoding = + | "ascii" + | "utf8" + | "utf-8" + | "utf16le" + | "ucs2" + | "ucs-2" + | "base64" + | "base64url" + | "latin1" + | "binary" + | "hex"; + type WithImplicitCoercion = + | T + | { + valueOf(): T; + }; + /** + * Raw data is stored in instances of the Buffer class. + * A Buffer is similar to an array of integers but corresponds to a raw memory allocation outside the V8 heap. A Buffer cannot be resized. + * Valid string encodings: 'ascii'|'utf8'|'utf16le'|'ucs2'(alias of 'utf16le')|'base64'|'base64url'|'binary'(deprecated)|'hex' + */ + interface BufferConstructor { + /** + * Allocates a new buffer containing the given {str}. + * + * @param str String to store in buffer. + * @param encoding encoding to use, optional. Default is 'utf8' + * @deprecated since v10.0.0 - Use `Buffer.from(string[, encoding])` instead. + */ + new(str: string, encoding?: BufferEncoding): Buffer; + /** + * Allocates a new buffer of {size} octets. + * + * @param size count of octets to allocate. + * @deprecated since v10.0.0 - Use `Buffer.alloc()` instead (also see `Buffer.allocUnsafe()`). + */ + new(size: number): Buffer; + /** + * Allocates a new buffer containing the given {array} of octets. + * + * @param array The octets to store. + * @deprecated since v10.0.0 - Use `Buffer.from(array)` instead. + */ + new(array: Uint8Array): Buffer; + /** + * Produces a Buffer backed by the same allocated memory as + * the given {ArrayBuffer}/{SharedArrayBuffer}. + * + * @param arrayBuffer The ArrayBuffer with which to share memory. + * @deprecated since v10.0.0 - Use `Buffer.from(arrayBuffer[, byteOffset[, length]])` instead. + */ + new(arrayBuffer: ArrayBuffer | SharedArrayBuffer): Buffer; + /** + * Allocates a new buffer containing the given {array} of octets. + * + * @param array The octets to store. + * @deprecated since v10.0.0 - Use `Buffer.from(array)` instead. + */ + new(array: ReadonlyArray): Buffer; + /** + * Copies the passed {buffer} data onto a new {Buffer} instance. + * + * @param buffer The buffer to copy. + * @deprecated since v10.0.0 - Use `Buffer.from(buffer)` instead. + */ + new(buffer: Buffer): Buffer; + /** + * Allocates a new `Buffer` using an `array` of bytes in the range `0` – `255`. + * Array entries outside that range will be truncated to fit into it. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * // Creates a new Buffer containing the UTF-8 bytes of the string 'buffer'. + * const buf = Buffer.from([0x62, 0x75, 0x66, 0x66, 0x65, 0x72]); + * ``` + * + * If `array` is an `Array`\-like object (that is, one with a `length` property of + * type `number`), it is treated as if it is an array, unless it is a `Buffer` or + * a `Uint8Array`. This means all other `TypedArray` variants get treated as an`Array`. To create a `Buffer` from the bytes backing a `TypedArray`, use `Buffer.copyBytesFrom()`. + * + * A `TypeError` will be thrown if `array` is not an `Array` or another type + * appropriate for `Buffer.from()` variants. + * + * `Buffer.from(array)` and `Buffer.from(string)` may also use the internal`Buffer` pool like `Buffer.allocUnsafe()` does. + * @since v5.10.0 + */ + from( + arrayBuffer: WithImplicitCoercion, + byteOffset?: number, + length?: number, + ): Buffer; + /** + * Creates a new Buffer using the passed {data} + * @param data data to create a new Buffer + */ + from(data: Uint8Array | ReadonlyArray): Buffer; + from(data: WithImplicitCoercion | string>): Buffer; + /** + * Creates a new Buffer containing the given JavaScript string {str}. + * If provided, the {encoding} parameter identifies the character encoding. + * If not provided, {encoding} defaults to 'utf8'. + */ + from( + str: + | WithImplicitCoercion + | { + [Symbol.toPrimitive](hint: "string"): string; + }, + encoding?: BufferEncoding, + ): Buffer; + /** + * Creates a new Buffer using the passed {data} + * @param values to create a new Buffer + */ + of(...items: number[]): Buffer; + /** + * Returns `true` if `obj` is a `Buffer`, `false` otherwise. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * Buffer.isBuffer(Buffer.alloc(10)); // true + * Buffer.isBuffer(Buffer.from('foo')); // true + * Buffer.isBuffer('a string'); // false + * Buffer.isBuffer([]); // false + * Buffer.isBuffer(new Uint8Array(1024)); // false + * ``` + * @since v0.1.101 + */ + isBuffer(obj: any): obj is Buffer; + /** + * Returns `true` if `encoding` is the name of a supported character encoding, + * or `false` otherwise. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * console.log(Buffer.isEncoding('utf8')); + * // Prints: true + * + * console.log(Buffer.isEncoding('hex')); + * // Prints: true + * + * console.log(Buffer.isEncoding('utf/8')); + * // Prints: false + * + * console.log(Buffer.isEncoding('')); + * // Prints: false + * ``` + * @since v0.9.1 + * @param encoding A character encoding name to check. + */ + isEncoding(encoding: string): encoding is BufferEncoding; + /** + * Returns the byte length of a string when encoded using `encoding`. + * This is not the same as [`String.prototype.length`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/length), which does not account + * for the encoding that is used to convert the string into bytes. + * + * For `'base64'`, `'base64url'`, and `'hex'`, this function assumes valid input. + * For strings that contain non-base64/hex-encoded data (e.g. whitespace), the + * return value might be greater than the length of a `Buffer` created from the + * string. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const str = '\u00bd + \u00bc = \u00be'; + * + * console.log(`${str}: ${str.length} characters, ` + + * `${Buffer.byteLength(str, 'utf8')} bytes`); + * // Prints: ½ + ¼ = ¾: 9 characters, 12 bytes + * ``` + * + * When `string` is a + * `Buffer`/[`DataView`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView)/[`TypedArray`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/- + * Reference/Global_Objects/TypedArray)/[`ArrayBuffer`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer)/[`SharedArrayBuffer`](https://develop- + * er.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer), the byte length as reported by `.byteLength`is returned. + * @since v0.1.90 + * @param string A value to calculate the length of. + * @param [encoding='utf8'] If `string` is a string, this is its encoding. + * @return The number of bytes contained within `string`. + */ + byteLength( + string: string | NodeJS.ArrayBufferView | ArrayBuffer | SharedArrayBuffer, + encoding?: BufferEncoding, + ): number; + /** + * Returns a new `Buffer` which is the result of concatenating all the `Buffer`instances in the `list` together. + * + * If the list has no items, or if the `totalLength` is 0, then a new zero-length`Buffer` is returned. + * + * If `totalLength` is not provided, it is calculated from the `Buffer` instances + * in `list` by adding their lengths. + * + * If `totalLength` is provided, it is coerced to an unsigned integer. If the + * combined length of the `Buffer`s in `list` exceeds `totalLength`, the result is + * truncated to `totalLength`. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * // Create a single `Buffer` from a list of three `Buffer` instances. + * + * const buf1 = Buffer.alloc(10); + * const buf2 = Buffer.alloc(14); + * const buf3 = Buffer.alloc(18); + * const totalLength = buf1.length + buf2.length + buf3.length; + * + * console.log(totalLength); + * // Prints: 42 + * + * const bufA = Buffer.concat([buf1, buf2, buf3], totalLength); + * + * console.log(bufA); + * // Prints: + * console.log(bufA.length); + * // Prints: 42 + * ``` + * + * `Buffer.concat()` may also use the internal `Buffer` pool like `Buffer.allocUnsafe()` does. + * @since v0.7.11 + * @param list List of `Buffer` or {@link Uint8Array} instances to concatenate. + * @param totalLength Total length of the `Buffer` instances in `list` when concatenated. + */ + concat(list: ReadonlyArray, totalLength?: number): Buffer; + /** + * Copies the underlying memory of `view` into a new `Buffer`. + * + * ```js + * const u16 = new Uint16Array([0, 0xffff]); + * const buf = Buffer.copyBytesFrom(u16, 1, 1); + * u16[1] = 0; + * console.log(buf.length); // 2 + * console.log(buf[0]); // 255 + * console.log(buf[1]); // 255 + * ``` + * @since v19.8.0 + * @param view The {TypedArray} to copy. + * @param [offset=': 0'] The starting offset within `view`. + * @param [length=view.length - offset] The number of elements from `view` to copy. + */ + copyBytesFrom(view: NodeJS.TypedArray, offset?: number, length?: number): Buffer; + /** + * Compares `buf1` to `buf2`, typically for the purpose of sorting arrays of`Buffer` instances. This is equivalent to calling `buf1.compare(buf2)`. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf1 = Buffer.from('1234'); + * const buf2 = Buffer.from('0123'); + * const arr = [buf1, buf2]; + * + * console.log(arr.sort(Buffer.compare)); + * // Prints: [ , ] + * // (This result is equal to: [buf2, buf1].) + * ``` + * @since v0.11.13 + * @return Either `-1`, `0`, or `1`, depending on the result of the comparison. See `compare` for details. + */ + compare(buf1: Uint8Array, buf2: Uint8Array): -1 | 0 | 1; + /** + * Allocates a new `Buffer` of `size` bytes. If `fill` is `undefined`, the`Buffer` will be zero-filled. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.alloc(5); + * + * console.log(buf); + * // Prints: + * ``` + * + * If `size` is larger than {@link constants.MAX_LENGTH} or smaller than 0, `ERR_OUT_OF_RANGE` is thrown. + * + * If `fill` is specified, the allocated `Buffer` will be initialized by calling `buf.fill(fill)`. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.alloc(5, 'a'); + * + * console.log(buf); + * // Prints: + * ``` + * + * If both `fill` and `encoding` are specified, the allocated `Buffer` will be + * initialized by calling `buf.fill(fill, encoding)`. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.alloc(11, 'aGVsbG8gd29ybGQ=', 'base64'); + * + * console.log(buf); + * // Prints: + * ``` + * + * Calling `Buffer.alloc()` can be measurably slower than the alternative `Buffer.allocUnsafe()` but ensures that the newly created `Buffer` instance + * contents will never contain sensitive data from previous allocations, including + * data that might not have been allocated for `Buffer`s. + * + * A `TypeError` will be thrown if `size` is not a number. + * @since v5.10.0 + * @param size The desired length of the new `Buffer`. + * @param [fill=0] A value to pre-fill the new `Buffer` with. + * @param [encoding='utf8'] If `fill` is a string, this is its encoding. + */ + alloc(size: number, fill?: string | Buffer | number, encoding?: BufferEncoding): Buffer; + /** + * Allocates a new `Buffer` of `size` bytes. If `size` is larger than {@link constants.MAX_LENGTH} or smaller than 0, `ERR_OUT_OF_RANGE` is thrown. + * + * The underlying memory for `Buffer` instances created in this way is _not_ + * _initialized_. The contents of the newly created `Buffer` are unknown and _may contain sensitive data_. Use `Buffer.alloc()` instead to initialize`Buffer` instances with zeroes. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.allocUnsafe(10); + * + * console.log(buf); + * // Prints (contents may vary): + * + * buf.fill(0); + * + * console.log(buf); + * // Prints: + * ``` + * + * A `TypeError` will be thrown if `size` is not a number. + * + * The `Buffer` module pre-allocates an internal `Buffer` instance of + * size `Buffer.poolSize` that is used as a pool for the fast allocation of new`Buffer` instances created using `Buffer.allocUnsafe()`, `Buffer.from(array)`, + * and `Buffer.concat()` only when `size` is less than or equal to`Buffer.poolSize >> 1` (floor of `Buffer.poolSize` divided by two). + * + * Use of this pre-allocated internal memory pool is a key difference between + * calling `Buffer.alloc(size, fill)` vs. `Buffer.allocUnsafe(size).fill(fill)`. + * Specifically, `Buffer.alloc(size, fill)` will _never_ use the internal `Buffer`pool, while `Buffer.allocUnsafe(size).fill(fill)`_will_ use the internal`Buffer` pool if `size` is less + * than or equal to half `Buffer.poolSize`. The + * difference is subtle but can be important when an application requires the + * additional performance that `Buffer.allocUnsafe()` provides. + * @since v5.10.0 + * @param size The desired length of the new `Buffer`. + */ + allocUnsafe(size: number): Buffer; + /** + * Allocates a new `Buffer` of `size` bytes. If `size` is larger than {@link constants.MAX_LENGTH} or smaller than 0, `ERR_OUT_OF_RANGE` is thrown. A zero-length `Buffer` is created if + * `size` is 0. + * + * The underlying memory for `Buffer` instances created in this way is _not_ + * _initialized_. The contents of the newly created `Buffer` are unknown and _may contain sensitive data_. Use `buf.fill(0)` to initialize + * such `Buffer` instances with zeroes. + * + * When using `Buffer.allocUnsafe()` to allocate new `Buffer` instances, + * allocations under 4 KiB are sliced from a single pre-allocated `Buffer`. This + * allows applications to avoid the garbage collection overhead of creating many + * individually allocated `Buffer` instances. This approach improves both + * performance and memory usage by eliminating the need to track and clean up as + * many individual `ArrayBuffer` objects. + * + * However, in the case where a developer may need to retain a small chunk of + * memory from a pool for an indeterminate amount of time, it may be appropriate + * to create an un-pooled `Buffer` instance using `Buffer.allocUnsafeSlow()` and + * then copying out the relevant bits. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * // Need to keep around a few small chunks of memory. + * const store = []; + * + * socket.on('readable', () => { + * let data; + * while (null !== (data = readable.read())) { + * // Allocate for retained data. + * const sb = Buffer.allocUnsafeSlow(10); + * + * // Copy the data into the new allocation. + * data.copy(sb, 0, 0, 10); + * + * store.push(sb); + * } + * }); + * ``` + * + * A `TypeError` will be thrown if `size` is not a number. + * @since v5.12.0 + * @param size The desired length of the new `Buffer`. + */ + allocUnsafeSlow(size: number): Buffer; + /** + * This is the size (in bytes) of pre-allocated internal `Buffer` instances used + * for pooling. This value may be modified. + * @since v0.11.3 + */ + poolSize: number; + } + interface Buffer extends Uint8Array { + /** + * Writes `string` to `buf` at `offset` according to the character encoding in`encoding`. The `length` parameter is the number of bytes to write. If `buf` did + * not contain enough space to fit the entire string, only part of `string` will be + * written. However, partially encoded characters will not be written. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.alloc(256); + * + * const len = buf.write('\u00bd + \u00bc = \u00be', 0); + * + * console.log(`${len} bytes: ${buf.toString('utf8', 0, len)}`); + * // Prints: 12 bytes: ½ + ¼ = ¾ + * + * const buffer = Buffer.alloc(10); + * + * const length = buffer.write('abcd', 8); + * + * console.log(`${length} bytes: ${buffer.toString('utf8', 8, 10)}`); + * // Prints: 2 bytes : ab + * ``` + * @since v0.1.90 + * @param string String to write to `buf`. + * @param [offset=0] Number of bytes to skip before starting to write `string`. + * @param [length=buf.length - offset] Maximum number of bytes to write (written bytes will not exceed `buf.length - offset`). + * @param [encoding='utf8'] The character encoding of `string`. + * @return Number of bytes written. + */ + write(string: string, encoding?: BufferEncoding): number; + write(string: string, offset: number, encoding?: BufferEncoding): number; + write(string: string, offset: number, length: number, encoding?: BufferEncoding): number; + /** + * Decodes `buf` to a string according to the specified character encoding in`encoding`. `start` and `end` may be passed to decode only a subset of `buf`. + * + * If `encoding` is `'utf8'` and a byte sequence in the input is not valid UTF-8, + * then each invalid byte is replaced with the replacement character `U+FFFD`. + * + * The maximum length of a string instance (in UTF-16 code units) is available + * as {@link constants.MAX_STRING_LENGTH}. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf1 = Buffer.allocUnsafe(26); + * + * for (let i = 0; i < 26; i++) { + * // 97 is the decimal ASCII value for 'a'. + * buf1[i] = i + 97; + * } + * + * console.log(buf1.toString('utf8')); + * // Prints: abcdefghijklmnopqrstuvwxyz + * console.log(buf1.toString('utf8', 0, 5)); + * // Prints: abcde + * + * const buf2 = Buffer.from('tést'); + * + * console.log(buf2.toString('hex')); + * // Prints: 74c3a97374 + * console.log(buf2.toString('utf8', 0, 3)); + * // Prints: té + * console.log(buf2.toString(undefined, 0, 3)); + * // Prints: té + * ``` + * @since v0.1.90 + * @param [encoding='utf8'] The character encoding to use. + * @param [start=0] The byte offset to start decoding at. + * @param [end=buf.length] The byte offset to stop decoding at (not inclusive). + */ + toString(encoding?: BufferEncoding, start?: number, end?: number): string; + /** + * Returns a JSON representation of `buf`. [`JSON.stringify()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify) implicitly calls + * this function when stringifying a `Buffer` instance. + * + * `Buffer.from()` accepts objects in the format returned from this method. + * In particular, `Buffer.from(buf.toJSON())` works like `Buffer.from(buf)`. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.from([0x1, 0x2, 0x3, 0x4, 0x5]); + * const json = JSON.stringify(buf); + * + * console.log(json); + * // Prints: {"type":"Buffer","data":[1,2,3,4,5]} + * + * const copy = JSON.parse(json, (key, value) => { + * return value && value.type === 'Buffer' ? + * Buffer.from(value) : + * value; + * }); + * + * console.log(copy); + * // Prints: + * ``` + * @since v0.9.2 + */ + toJSON(): { + type: "Buffer"; + data: number[]; + }; + /** + * Returns `true` if both `buf` and `otherBuffer` have exactly the same bytes,`false` otherwise. Equivalent to `buf.compare(otherBuffer) === 0`. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf1 = Buffer.from('ABC'); + * const buf2 = Buffer.from('414243', 'hex'); + * const buf3 = Buffer.from('ABCD'); + * + * console.log(buf1.equals(buf2)); + * // Prints: true + * console.log(buf1.equals(buf3)); + * // Prints: false + * ``` + * @since v0.11.13 + * @param otherBuffer A `Buffer` or {@link Uint8Array} with which to compare `buf`. + */ + equals(otherBuffer: Uint8Array): boolean; + /** + * Compares `buf` with `target` and returns a number indicating whether `buf`comes before, after, or is the same as `target` in sort order. + * Comparison is based on the actual sequence of bytes in each `Buffer`. + * + * * `0` is returned if `target` is the same as `buf` + * * `1` is returned if `target` should come _before_`buf` when sorted. + * * `-1` is returned if `target` should come _after_`buf` when sorted. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf1 = Buffer.from('ABC'); + * const buf2 = Buffer.from('BCD'); + * const buf3 = Buffer.from('ABCD'); + * + * console.log(buf1.compare(buf1)); + * // Prints: 0 + * console.log(buf1.compare(buf2)); + * // Prints: -1 + * console.log(buf1.compare(buf3)); + * // Prints: -1 + * console.log(buf2.compare(buf1)); + * // Prints: 1 + * console.log(buf2.compare(buf3)); + * // Prints: 1 + * console.log([buf1, buf2, buf3].sort(Buffer.compare)); + * // Prints: [ , , ] + * // (This result is equal to: [buf1, buf3, buf2].) + * ``` + * + * The optional `targetStart`, `targetEnd`, `sourceStart`, and `sourceEnd`arguments can be used to limit the comparison to specific ranges within `target`and `buf` respectively. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf1 = Buffer.from([1, 2, 3, 4, 5, 6, 7, 8, 9]); + * const buf2 = Buffer.from([5, 6, 7, 8, 9, 1, 2, 3, 4]); + * + * console.log(buf1.compare(buf2, 5, 9, 0, 4)); + * // Prints: 0 + * console.log(buf1.compare(buf2, 0, 6, 4)); + * // Prints: -1 + * console.log(buf1.compare(buf2, 5, 6, 5)); + * // Prints: 1 + * ``` + * + * `ERR_OUT_OF_RANGE` is thrown if `targetStart < 0`, `sourceStart < 0`,`targetEnd > target.byteLength`, or `sourceEnd > source.byteLength`. + * @since v0.11.13 + * @param target A `Buffer` or {@link Uint8Array} with which to compare `buf`. + * @param [targetStart=0] The offset within `target` at which to begin comparison. + * @param [targetEnd=target.length] The offset within `target` at which to end comparison (not inclusive). + * @param [sourceStart=0] The offset within `buf` at which to begin comparison. + * @param [sourceEnd=buf.length] The offset within `buf` at which to end comparison (not inclusive). + */ + compare( + target: Uint8Array, + targetStart?: number, + targetEnd?: number, + sourceStart?: number, + sourceEnd?: number, + ): -1 | 0 | 1; + /** + * Copies data from a region of `buf` to a region in `target`, even if the `target`memory region overlaps with `buf`. + * + * [`TypedArray.prototype.set()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/set) performs the same operation, and is available + * for all TypedArrays, including Node.js `Buffer`s, although it takes + * different function arguments. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * // Create two `Buffer` instances. + * const buf1 = Buffer.allocUnsafe(26); + * const buf2 = Buffer.allocUnsafe(26).fill('!'); + * + * for (let i = 0; i < 26; i++) { + * // 97 is the decimal ASCII value for 'a'. + * buf1[i] = i + 97; + * } + * + * // Copy `buf1` bytes 16 through 19 into `buf2` starting at byte 8 of `buf2`. + * buf1.copy(buf2, 8, 16, 20); + * // This is equivalent to: + * // buf2.set(buf1.subarray(16, 20), 8); + * + * console.log(buf2.toString('ascii', 0, 25)); + * // Prints: !!!!!!!!qrst!!!!!!!!!!!!! + * ``` + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * // Create a `Buffer` and copy data from one region to an overlapping region + * // within the same `Buffer`. + * + * const buf = Buffer.allocUnsafe(26); + * + * for (let i = 0; i < 26; i++) { + * // 97 is the decimal ASCII value for 'a'. + * buf[i] = i + 97; + * } + * + * buf.copy(buf, 0, 4, 10); + * + * console.log(buf.toString()); + * // Prints: efghijghijklmnopqrstuvwxyz + * ``` + * @since v0.1.90 + * @param target A `Buffer` or {@link Uint8Array} to copy into. + * @param [targetStart=0] The offset within `target` at which to begin writing. + * @param [sourceStart=0] The offset within `buf` from which to begin copying. + * @param [sourceEnd=buf.length] The offset within `buf` at which to stop copying (not inclusive). + * @return The number of bytes copied. + */ + copy(target: Uint8Array, targetStart?: number, sourceStart?: number, sourceEnd?: number): number; + /** + * Returns a new `Buffer` that references the same memory as the original, but + * offset and cropped by the `start` and `end` indices. + * + * This method is not compatible with the `Uint8Array.prototype.slice()`, + * which is a superclass of `Buffer`. To copy the slice, use`Uint8Array.prototype.slice()`. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.from('buffer'); + * + * const copiedBuf = Uint8Array.prototype.slice.call(buf); + * copiedBuf[0]++; + * console.log(copiedBuf.toString()); + * // Prints: cuffer + * + * console.log(buf.toString()); + * // Prints: buffer + * + * // With buf.slice(), the original buffer is modified. + * const notReallyCopiedBuf = buf.slice(); + * notReallyCopiedBuf[0]++; + * console.log(notReallyCopiedBuf.toString()); + * // Prints: cuffer + * console.log(buf.toString()); + * // Also prints: cuffer (!) + * ``` + * @since v0.3.0 + * @deprecated Use `subarray` instead. + * @param [start=0] Where the new `Buffer` will start. + * @param [end=buf.length] Where the new `Buffer` will end (not inclusive). + */ + slice(start?: number, end?: number): Buffer; + /** + * Returns a new `Buffer` that references the same memory as the original, but + * offset and cropped by the `start` and `end` indices. + * + * Specifying `end` greater than `buf.length` will return the same result as + * that of `end` equal to `buf.length`. + * + * This method is inherited from [`TypedArray.prototype.subarray()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/subarray). + * + * Modifying the new `Buffer` slice will modify the memory in the original `Buffer`because the allocated memory of the two objects overlap. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * // Create a `Buffer` with the ASCII alphabet, take a slice, and modify one byte + * // from the original `Buffer`. + * + * const buf1 = Buffer.allocUnsafe(26); + * + * for (let i = 0; i < 26; i++) { + * // 97 is the decimal ASCII value for 'a'. + * buf1[i] = i + 97; + * } + * + * const buf2 = buf1.subarray(0, 3); + * + * console.log(buf2.toString('ascii', 0, buf2.length)); + * // Prints: abc + * + * buf1[0] = 33; + * + * console.log(buf2.toString('ascii', 0, buf2.length)); + * // Prints: !bc + * ``` + * + * Specifying negative indexes causes the slice to be generated relative to the + * end of `buf` rather than the beginning. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.from('buffer'); + * + * console.log(buf.subarray(-6, -1).toString()); + * // Prints: buffe + * // (Equivalent to buf.subarray(0, 5).) + * + * console.log(buf.subarray(-6, -2).toString()); + * // Prints: buff + * // (Equivalent to buf.subarray(0, 4).) + * + * console.log(buf.subarray(-5, -2).toString()); + * // Prints: uff + * // (Equivalent to buf.subarray(1, 4).) + * ``` + * @since v3.0.0 + * @param [start=0] Where the new `Buffer` will start. + * @param [end=buf.length] Where the new `Buffer` will end (not inclusive). + */ + subarray(start?: number, end?: number): Buffer; + /** + * Writes `value` to `buf` at the specified `offset` as big-endian. + * + * `value` is interpreted and written as a two's complement signed integer. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.allocUnsafe(8); + * + * buf.writeBigInt64BE(0x0102030405060708n, 0); + * + * console.log(buf); + * // Prints: + * ``` + * @since v12.0.0, v10.20.0 + * @param value Number to be written to `buf`. + * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy: `0 <= offset <= buf.length - 8`. + * @return `offset` plus the number of bytes written. + */ + writeBigInt64BE(value: bigint, offset?: number): number; + /** + * Writes `value` to `buf` at the specified `offset` as little-endian. + * + * `value` is interpreted and written as a two's complement signed integer. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.allocUnsafe(8); + * + * buf.writeBigInt64LE(0x0102030405060708n, 0); + * + * console.log(buf); + * // Prints: + * ``` + * @since v12.0.0, v10.20.0 + * @param value Number to be written to `buf`. + * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy: `0 <= offset <= buf.length - 8`. + * @return `offset` plus the number of bytes written. + */ + writeBigInt64LE(value: bigint, offset?: number): number; + /** + * Writes `value` to `buf` at the specified `offset` as big-endian. + * + * This function is also available under the `writeBigUint64BE` alias. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.allocUnsafe(8); + * + * buf.writeBigUInt64BE(0xdecafafecacefaden, 0); + * + * console.log(buf); + * // Prints: + * ``` + * @since v12.0.0, v10.20.0 + * @param value Number to be written to `buf`. + * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy: `0 <= offset <= buf.length - 8`. + * @return `offset` plus the number of bytes written. + */ + writeBigUInt64BE(value: bigint, offset?: number): number; + /** + * @alias Buffer.writeBigUInt64BE + * @since v14.10.0, v12.19.0 + */ + writeBigUint64BE(value: bigint, offset?: number): number; + /** + * Writes `value` to `buf` at the specified `offset` as little-endian + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.allocUnsafe(8); + * + * buf.writeBigUInt64LE(0xdecafafecacefaden, 0); + * + * console.log(buf); + * // Prints: + * ``` + * + * This function is also available under the `writeBigUint64LE` alias. + * @since v12.0.0, v10.20.0 + * @param value Number to be written to `buf`. + * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy: `0 <= offset <= buf.length - 8`. + * @return `offset` plus the number of bytes written. + */ + writeBigUInt64LE(value: bigint, offset?: number): number; + /** + * @alias Buffer.writeBigUInt64LE + * @since v14.10.0, v12.19.0 + */ + writeBigUint64LE(value: bigint, offset?: number): number; + /** + * Writes `byteLength` bytes of `value` to `buf` at the specified `offset`as little-endian. Supports up to 48 bits of accuracy. Behavior is undefined + * when `value` is anything other than an unsigned integer. + * + * This function is also available under the `writeUintLE` alias. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.allocUnsafe(6); + * + * buf.writeUIntLE(0x1234567890ab, 0, 6); + * + * console.log(buf); + * // Prints: + * ``` + * @since v0.5.5 + * @param value Number to be written to `buf`. + * @param offset Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - byteLength`. + * @param byteLength Number of bytes to write. Must satisfy `0 < byteLength <= 6`. + * @return `offset` plus the number of bytes written. + */ + writeUIntLE(value: number, offset: number, byteLength: number): number; + /** + * @alias Buffer.writeUIntLE + * @since v14.9.0, v12.19.0 + */ + writeUintLE(value: number, offset: number, byteLength: number): number; + /** + * Writes `byteLength` bytes of `value` to `buf` at the specified `offset`as big-endian. Supports up to 48 bits of accuracy. Behavior is undefined + * when `value` is anything other than an unsigned integer. + * + * This function is also available under the `writeUintBE` alias. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.allocUnsafe(6); + * + * buf.writeUIntBE(0x1234567890ab, 0, 6); + * + * console.log(buf); + * // Prints: + * ``` + * @since v0.5.5 + * @param value Number to be written to `buf`. + * @param offset Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - byteLength`. + * @param byteLength Number of bytes to write. Must satisfy `0 < byteLength <= 6`. + * @return `offset` plus the number of bytes written. + */ + writeUIntBE(value: number, offset: number, byteLength: number): number; + /** + * @alias Buffer.writeUIntBE + * @since v14.9.0, v12.19.0 + */ + writeUintBE(value: number, offset: number, byteLength: number): number; + /** + * Writes `byteLength` bytes of `value` to `buf` at the specified `offset`as little-endian. Supports up to 48 bits of accuracy. Behavior is undefined + * when `value` is anything other than a signed integer. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.allocUnsafe(6); + * + * buf.writeIntLE(0x1234567890ab, 0, 6); + * + * console.log(buf); + * // Prints: + * ``` + * @since v0.11.15 + * @param value Number to be written to `buf`. + * @param offset Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - byteLength`. + * @param byteLength Number of bytes to write. Must satisfy `0 < byteLength <= 6`. + * @return `offset` plus the number of bytes written. + */ + writeIntLE(value: number, offset: number, byteLength: number): number; + /** + * Writes `byteLength` bytes of `value` to `buf` at the specified `offset`as big-endian. Supports up to 48 bits of accuracy. Behavior is undefined when`value` is anything other than a + * signed integer. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.allocUnsafe(6); + * + * buf.writeIntBE(0x1234567890ab, 0, 6); + * + * console.log(buf); + * // Prints: + * ``` + * @since v0.11.15 + * @param value Number to be written to `buf`. + * @param offset Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - byteLength`. + * @param byteLength Number of bytes to write. Must satisfy `0 < byteLength <= 6`. + * @return `offset` plus the number of bytes written. + */ + writeIntBE(value: number, offset: number, byteLength: number): number; + /** + * Reads an unsigned, big-endian 64-bit integer from `buf` at the specified`offset`. + * + * This function is also available under the `readBigUint64BE` alias. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.from([0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff]); + * + * console.log(buf.readBigUInt64BE(0)); + * // Prints: 4294967295n + * ``` + * @since v12.0.0, v10.20.0 + * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy: `0 <= offset <= buf.length - 8`. + */ + readBigUInt64BE(offset?: number): bigint; + /** + * @alias Buffer.readBigUInt64BE + * @since v14.10.0, v12.19.0 + */ + readBigUint64BE(offset?: number): bigint; + /** + * Reads an unsigned, little-endian 64-bit integer from `buf` at the specified`offset`. + * + * This function is also available under the `readBigUint64LE` alias. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.from([0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff]); + * + * console.log(buf.readBigUInt64LE(0)); + * // Prints: 18446744069414584320n + * ``` + * @since v12.0.0, v10.20.0 + * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy: `0 <= offset <= buf.length - 8`. + */ + readBigUInt64LE(offset?: number): bigint; + /** + * @alias Buffer.readBigUInt64LE + * @since v14.10.0, v12.19.0 + */ + readBigUint64LE(offset?: number): bigint; + /** + * Reads a signed, big-endian 64-bit integer from `buf` at the specified `offset`. + * + * Integers read from a `Buffer` are interpreted as two's complement signed + * values. + * @since v12.0.0, v10.20.0 + * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy: `0 <= offset <= buf.length - 8`. + */ + readBigInt64BE(offset?: number): bigint; + /** + * Reads a signed, little-endian 64-bit integer from `buf` at the specified`offset`. + * + * Integers read from a `Buffer` are interpreted as two's complement signed + * values. + * @since v12.0.0, v10.20.0 + * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy: `0 <= offset <= buf.length - 8`. + */ + readBigInt64LE(offset?: number): bigint; + /** + * Reads `byteLength` number of bytes from `buf` at the specified `offset`and interprets the result as an unsigned, little-endian integer supporting + * up to 48 bits of accuracy. + * + * This function is also available under the `readUintLE` alias. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.from([0x12, 0x34, 0x56, 0x78, 0x90, 0xab]); + * + * console.log(buf.readUIntLE(0, 6).toString(16)); + * // Prints: ab9078563412 + * ``` + * @since v0.11.15 + * @param offset Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - byteLength`. + * @param byteLength Number of bytes to read. Must satisfy `0 < byteLength <= 6`. + */ + readUIntLE(offset: number, byteLength: number): number; + /** + * @alias Buffer.readUIntLE + * @since v14.9.0, v12.19.0 + */ + readUintLE(offset: number, byteLength: number): number; + /** + * Reads `byteLength` number of bytes from `buf` at the specified `offset`and interprets the result as an unsigned big-endian integer supporting + * up to 48 bits of accuracy. + * + * This function is also available under the `readUintBE` alias. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.from([0x12, 0x34, 0x56, 0x78, 0x90, 0xab]); + * + * console.log(buf.readUIntBE(0, 6).toString(16)); + * // Prints: 1234567890ab + * console.log(buf.readUIntBE(1, 6).toString(16)); + * // Throws ERR_OUT_OF_RANGE. + * ``` + * @since v0.11.15 + * @param offset Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - byteLength`. + * @param byteLength Number of bytes to read. Must satisfy `0 < byteLength <= 6`. + */ + readUIntBE(offset: number, byteLength: number): number; + /** + * @alias Buffer.readUIntBE + * @since v14.9.0, v12.19.0 + */ + readUintBE(offset: number, byteLength: number): number; + /** + * Reads `byteLength` number of bytes from `buf` at the specified `offset`and interprets the result as a little-endian, two's complement signed value + * supporting up to 48 bits of accuracy. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.from([0x12, 0x34, 0x56, 0x78, 0x90, 0xab]); + * + * console.log(buf.readIntLE(0, 6).toString(16)); + * // Prints: -546f87a9cbee + * ``` + * @since v0.11.15 + * @param offset Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - byteLength`. + * @param byteLength Number of bytes to read. Must satisfy `0 < byteLength <= 6`. + */ + readIntLE(offset: number, byteLength: number): number; + /** + * Reads `byteLength` number of bytes from `buf` at the specified `offset`and interprets the result as a big-endian, two's complement signed value + * supporting up to 48 bits of accuracy. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.from([0x12, 0x34, 0x56, 0x78, 0x90, 0xab]); + * + * console.log(buf.readIntBE(0, 6).toString(16)); + * // Prints: 1234567890ab + * console.log(buf.readIntBE(1, 6).toString(16)); + * // Throws ERR_OUT_OF_RANGE. + * console.log(buf.readIntBE(1, 0).toString(16)); + * // Throws ERR_OUT_OF_RANGE. + * ``` + * @since v0.11.15 + * @param offset Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - byteLength`. + * @param byteLength Number of bytes to read. Must satisfy `0 < byteLength <= 6`. + */ + readIntBE(offset: number, byteLength: number): number; + /** + * Reads an unsigned 8-bit integer from `buf` at the specified `offset`. + * + * This function is also available under the `readUint8` alias. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.from([1, -2]); + * + * console.log(buf.readUInt8(0)); + * // Prints: 1 + * console.log(buf.readUInt8(1)); + * // Prints: 254 + * console.log(buf.readUInt8(2)); + * // Throws ERR_OUT_OF_RANGE. + * ``` + * @since v0.5.0 + * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - 1`. + */ + readUInt8(offset?: number): number; + /** + * @alias Buffer.readUInt8 + * @since v14.9.0, v12.19.0 + */ + readUint8(offset?: number): number; + /** + * Reads an unsigned, little-endian 16-bit integer from `buf` at the specified`offset`. + * + * This function is also available under the `readUint16LE` alias. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.from([0x12, 0x34, 0x56]); + * + * console.log(buf.readUInt16LE(0).toString(16)); + * // Prints: 3412 + * console.log(buf.readUInt16LE(1).toString(16)); + * // Prints: 5634 + * console.log(buf.readUInt16LE(2).toString(16)); + * // Throws ERR_OUT_OF_RANGE. + * ``` + * @since v0.5.5 + * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - 2`. + */ + readUInt16LE(offset?: number): number; + /** + * @alias Buffer.readUInt16LE + * @since v14.9.0, v12.19.0 + */ + readUint16LE(offset?: number): number; + /** + * Reads an unsigned, big-endian 16-bit integer from `buf` at the specified`offset`. + * + * This function is also available under the `readUint16BE` alias. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.from([0x12, 0x34, 0x56]); + * + * console.log(buf.readUInt16BE(0).toString(16)); + * // Prints: 1234 + * console.log(buf.readUInt16BE(1).toString(16)); + * // Prints: 3456 + * ``` + * @since v0.5.5 + * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - 2`. + */ + readUInt16BE(offset?: number): number; + /** + * @alias Buffer.readUInt16BE + * @since v14.9.0, v12.19.0 + */ + readUint16BE(offset?: number): number; + /** + * Reads an unsigned, little-endian 32-bit integer from `buf` at the specified`offset`. + * + * This function is also available under the `readUint32LE` alias. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.from([0x12, 0x34, 0x56, 0x78]); + * + * console.log(buf.readUInt32LE(0).toString(16)); + * // Prints: 78563412 + * console.log(buf.readUInt32LE(1).toString(16)); + * // Throws ERR_OUT_OF_RANGE. + * ``` + * @since v0.5.5 + * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - 4`. + */ + readUInt32LE(offset?: number): number; + /** + * @alias Buffer.readUInt32LE + * @since v14.9.0, v12.19.0 + */ + readUint32LE(offset?: number): number; + /** + * Reads an unsigned, big-endian 32-bit integer from `buf` at the specified`offset`. + * + * This function is also available under the `readUint32BE` alias. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.from([0x12, 0x34, 0x56, 0x78]); + * + * console.log(buf.readUInt32BE(0).toString(16)); + * // Prints: 12345678 + * ``` + * @since v0.5.5 + * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - 4`. + */ + readUInt32BE(offset?: number): number; + /** + * @alias Buffer.readUInt32BE + * @since v14.9.0, v12.19.0 + */ + readUint32BE(offset?: number): number; + /** + * Reads a signed 8-bit integer from `buf` at the specified `offset`. + * + * Integers read from a `Buffer` are interpreted as two's complement signed values. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.from([-1, 5]); + * + * console.log(buf.readInt8(0)); + * // Prints: -1 + * console.log(buf.readInt8(1)); + * // Prints: 5 + * console.log(buf.readInt8(2)); + * // Throws ERR_OUT_OF_RANGE. + * ``` + * @since v0.5.0 + * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - 1`. + */ + readInt8(offset?: number): number; + /** + * Reads a signed, little-endian 16-bit integer from `buf` at the specified`offset`. + * + * Integers read from a `Buffer` are interpreted as two's complement signed values. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.from([0, 5]); + * + * console.log(buf.readInt16LE(0)); + * // Prints: 1280 + * console.log(buf.readInt16LE(1)); + * // Throws ERR_OUT_OF_RANGE. + * ``` + * @since v0.5.5 + * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - 2`. + */ + readInt16LE(offset?: number): number; + /** + * Reads a signed, big-endian 16-bit integer from `buf` at the specified `offset`. + * + * Integers read from a `Buffer` are interpreted as two's complement signed values. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.from([0, 5]); + * + * console.log(buf.readInt16BE(0)); + * // Prints: 5 + * ``` + * @since v0.5.5 + * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - 2`. + */ + readInt16BE(offset?: number): number; + /** + * Reads a signed, little-endian 32-bit integer from `buf` at the specified`offset`. + * + * Integers read from a `Buffer` are interpreted as two's complement signed values. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.from([0, 0, 0, 5]); + * + * console.log(buf.readInt32LE(0)); + * // Prints: 83886080 + * console.log(buf.readInt32LE(1)); + * // Throws ERR_OUT_OF_RANGE. + * ``` + * @since v0.5.5 + * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - 4`. + */ + readInt32LE(offset?: number): number; + /** + * Reads a signed, big-endian 32-bit integer from `buf` at the specified `offset`. + * + * Integers read from a `Buffer` are interpreted as two's complement signed values. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.from([0, 0, 0, 5]); + * + * console.log(buf.readInt32BE(0)); + * // Prints: 5 + * ``` + * @since v0.5.5 + * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - 4`. + */ + readInt32BE(offset?: number): number; + /** + * Reads a 32-bit, little-endian float from `buf` at the specified `offset`. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.from([1, 2, 3, 4]); + * + * console.log(buf.readFloatLE(0)); + * // Prints: 1.539989614439558e-36 + * console.log(buf.readFloatLE(1)); + * // Throws ERR_OUT_OF_RANGE. + * ``` + * @since v0.11.15 + * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - 4`. + */ + readFloatLE(offset?: number): number; + /** + * Reads a 32-bit, big-endian float from `buf` at the specified `offset`. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.from([1, 2, 3, 4]); + * + * console.log(buf.readFloatBE(0)); + * // Prints: 2.387939260590663e-38 + * ``` + * @since v0.11.15 + * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - 4`. + */ + readFloatBE(offset?: number): number; + /** + * Reads a 64-bit, little-endian double from `buf` at the specified `offset`. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.from([1, 2, 3, 4, 5, 6, 7, 8]); + * + * console.log(buf.readDoubleLE(0)); + * // Prints: 5.447603722011605e-270 + * console.log(buf.readDoubleLE(1)); + * // Throws ERR_OUT_OF_RANGE. + * ``` + * @since v0.11.15 + * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - 8`. + */ + readDoubleLE(offset?: number): number; + /** + * Reads a 64-bit, big-endian double from `buf` at the specified `offset`. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.from([1, 2, 3, 4, 5, 6, 7, 8]); + * + * console.log(buf.readDoubleBE(0)); + * // Prints: 8.20788039913184e-304 + * ``` + * @since v0.11.15 + * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - 8`. + */ + readDoubleBE(offset?: number): number; + reverse(): this; + /** + * Interprets `buf` as an array of unsigned 16-bit integers and swaps the + * byte order _in-place_. Throws `ERR_INVALID_BUFFER_SIZE` if `buf.length` is not a multiple of 2. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf1 = Buffer.from([0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8]); + * + * console.log(buf1); + * // Prints: + * + * buf1.swap16(); + * + * console.log(buf1); + * // Prints: + * + * const buf2 = Buffer.from([0x1, 0x2, 0x3]); + * + * buf2.swap16(); + * // Throws ERR_INVALID_BUFFER_SIZE. + * ``` + * + * One convenient use of `buf.swap16()` is to perform a fast in-place conversion + * between UTF-16 little-endian and UTF-16 big-endian: + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.from('This is little-endian UTF-16', 'utf16le'); + * buf.swap16(); // Convert to big-endian UTF-16 text. + * ``` + * @since v5.10.0 + * @return A reference to `buf`. + */ + swap16(): Buffer; + /** + * Interprets `buf` as an array of unsigned 32-bit integers and swaps the + * byte order _in-place_. Throws `ERR_INVALID_BUFFER_SIZE` if `buf.length` is not a multiple of 4. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf1 = Buffer.from([0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8]); + * + * console.log(buf1); + * // Prints: + * + * buf1.swap32(); + * + * console.log(buf1); + * // Prints: + * + * const buf2 = Buffer.from([0x1, 0x2, 0x3]); + * + * buf2.swap32(); + * // Throws ERR_INVALID_BUFFER_SIZE. + * ``` + * @since v5.10.0 + * @return A reference to `buf`. + */ + swap32(): Buffer; + /** + * Interprets `buf` as an array of 64-bit numbers and swaps byte order _in-place_. + * Throws `ERR_INVALID_BUFFER_SIZE` if `buf.length` is not a multiple of 8. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf1 = Buffer.from([0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8]); + * + * console.log(buf1); + * // Prints: + * + * buf1.swap64(); + * + * console.log(buf1); + * // Prints: + * + * const buf2 = Buffer.from([0x1, 0x2, 0x3]); + * + * buf2.swap64(); + * // Throws ERR_INVALID_BUFFER_SIZE. + * ``` + * @since v6.3.0 + * @return A reference to `buf`. + */ + swap64(): Buffer; + /** + * Writes `value` to `buf` at the specified `offset`. `value` must be a + * valid unsigned 8-bit integer. Behavior is undefined when `value` is anything + * other than an unsigned 8-bit integer. + * + * This function is also available under the `writeUint8` alias. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.allocUnsafe(4); + * + * buf.writeUInt8(0x3, 0); + * buf.writeUInt8(0x4, 1); + * buf.writeUInt8(0x23, 2); + * buf.writeUInt8(0x42, 3); + * + * console.log(buf); + * // Prints: + * ``` + * @since v0.5.0 + * @param value Number to be written to `buf`. + * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - 1`. + * @return `offset` plus the number of bytes written. + */ + writeUInt8(value: number, offset?: number): number; + /** + * @alias Buffer.writeUInt8 + * @since v14.9.0, v12.19.0 + */ + writeUint8(value: number, offset?: number): number; + /** + * Writes `value` to `buf` at the specified `offset` as little-endian. The `value`must be a valid unsigned 16-bit integer. Behavior is undefined when `value` is + * anything other than an unsigned 16-bit integer. + * + * This function is also available under the `writeUint16LE` alias. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.allocUnsafe(4); + * + * buf.writeUInt16LE(0xdead, 0); + * buf.writeUInt16LE(0xbeef, 2); + * + * console.log(buf); + * // Prints: + * ``` + * @since v0.5.5 + * @param value Number to be written to `buf`. + * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - 2`. + * @return `offset` plus the number of bytes written. + */ + writeUInt16LE(value: number, offset?: number): number; + /** + * @alias Buffer.writeUInt16LE + * @since v14.9.0, v12.19.0 + */ + writeUint16LE(value: number, offset?: number): number; + /** + * Writes `value` to `buf` at the specified `offset` as big-endian. The `value`must be a valid unsigned 16-bit integer. Behavior is undefined when `value`is anything other than an + * unsigned 16-bit integer. + * + * This function is also available under the `writeUint16BE` alias. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.allocUnsafe(4); + * + * buf.writeUInt16BE(0xdead, 0); + * buf.writeUInt16BE(0xbeef, 2); + * + * console.log(buf); + * // Prints: + * ``` + * @since v0.5.5 + * @param value Number to be written to `buf`. + * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - 2`. + * @return `offset` plus the number of bytes written. + */ + writeUInt16BE(value: number, offset?: number): number; + /** + * @alias Buffer.writeUInt16BE + * @since v14.9.0, v12.19.0 + */ + writeUint16BE(value: number, offset?: number): number; + /** + * Writes `value` to `buf` at the specified `offset` as little-endian. The `value`must be a valid unsigned 32-bit integer. Behavior is undefined when `value` is + * anything other than an unsigned 32-bit integer. + * + * This function is also available under the `writeUint32LE` alias. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.allocUnsafe(4); + * + * buf.writeUInt32LE(0xfeedface, 0); + * + * console.log(buf); + * // Prints: + * ``` + * @since v0.5.5 + * @param value Number to be written to `buf`. + * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - 4`. + * @return `offset` plus the number of bytes written. + */ + writeUInt32LE(value: number, offset?: number): number; + /** + * @alias Buffer.writeUInt32LE + * @since v14.9.0, v12.19.0 + */ + writeUint32LE(value: number, offset?: number): number; + /** + * Writes `value` to `buf` at the specified `offset` as big-endian. The `value`must be a valid unsigned 32-bit integer. Behavior is undefined when `value`is anything other than an + * unsigned 32-bit integer. + * + * This function is also available under the `writeUint32BE` alias. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.allocUnsafe(4); + * + * buf.writeUInt32BE(0xfeedface, 0); + * + * console.log(buf); + * // Prints: + * ``` + * @since v0.5.5 + * @param value Number to be written to `buf`. + * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - 4`. + * @return `offset` plus the number of bytes written. + */ + writeUInt32BE(value: number, offset?: number): number; + /** + * @alias Buffer.writeUInt32BE + * @since v14.9.0, v12.19.0 + */ + writeUint32BE(value: number, offset?: number): number; + /** + * Writes `value` to `buf` at the specified `offset`. `value` must be a valid + * signed 8-bit integer. Behavior is undefined when `value` is anything other than + * a signed 8-bit integer. + * + * `value` is interpreted and written as a two's complement signed integer. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.allocUnsafe(2); + * + * buf.writeInt8(2, 0); + * buf.writeInt8(-2, 1); + * + * console.log(buf); + * // Prints: + * ``` + * @since v0.5.0 + * @param value Number to be written to `buf`. + * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - 1`. + * @return `offset` plus the number of bytes written. + */ + writeInt8(value: number, offset?: number): number; + /** + * Writes `value` to `buf` at the specified `offset` as little-endian. The `value`must be a valid signed 16-bit integer. Behavior is undefined when `value` is + * anything other than a signed 16-bit integer. + * + * The `value` is interpreted and written as a two's complement signed integer. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.allocUnsafe(2); + * + * buf.writeInt16LE(0x0304, 0); + * + * console.log(buf); + * // Prints: + * ``` + * @since v0.5.5 + * @param value Number to be written to `buf`. + * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - 2`. + * @return `offset` plus the number of bytes written. + */ + writeInt16LE(value: number, offset?: number): number; + /** + * Writes `value` to `buf` at the specified `offset` as big-endian. The `value`must be a valid signed 16-bit integer. Behavior is undefined when `value` is + * anything other than a signed 16-bit integer. + * + * The `value` is interpreted and written as a two's complement signed integer. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.allocUnsafe(2); + * + * buf.writeInt16BE(0x0102, 0); + * + * console.log(buf); + * // Prints: + * ``` + * @since v0.5.5 + * @param value Number to be written to `buf`. + * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - 2`. + * @return `offset` plus the number of bytes written. + */ + writeInt16BE(value: number, offset?: number): number; + /** + * Writes `value` to `buf` at the specified `offset` as little-endian. The `value`must be a valid signed 32-bit integer. Behavior is undefined when `value` is + * anything other than a signed 32-bit integer. + * + * The `value` is interpreted and written as a two's complement signed integer. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.allocUnsafe(4); + * + * buf.writeInt32LE(0x05060708, 0); + * + * console.log(buf); + * // Prints: + * ``` + * @since v0.5.5 + * @param value Number to be written to `buf`. + * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - 4`. + * @return `offset` plus the number of bytes written. + */ + writeInt32LE(value: number, offset?: number): number; + /** + * Writes `value` to `buf` at the specified `offset` as big-endian. The `value`must be a valid signed 32-bit integer. Behavior is undefined when `value` is + * anything other than a signed 32-bit integer. + * + * The `value` is interpreted and written as a two's complement signed integer. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.allocUnsafe(4); + * + * buf.writeInt32BE(0x01020304, 0); + * + * console.log(buf); + * // Prints: + * ``` + * @since v0.5.5 + * @param value Number to be written to `buf`. + * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - 4`. + * @return `offset` plus the number of bytes written. + */ + writeInt32BE(value: number, offset?: number): number; + /** + * Writes `value` to `buf` at the specified `offset` as little-endian. Behavior is + * undefined when `value` is anything other than a JavaScript number. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.allocUnsafe(4); + * + * buf.writeFloatLE(0xcafebabe, 0); + * + * console.log(buf); + * // Prints: + * ``` + * @since v0.11.15 + * @param value Number to be written to `buf`. + * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - 4`. + * @return `offset` plus the number of bytes written. + */ + writeFloatLE(value: number, offset?: number): number; + /** + * Writes `value` to `buf` at the specified `offset` as big-endian. Behavior is + * undefined when `value` is anything other than a JavaScript number. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.allocUnsafe(4); + * + * buf.writeFloatBE(0xcafebabe, 0); + * + * console.log(buf); + * // Prints: + * ``` + * @since v0.11.15 + * @param value Number to be written to `buf`. + * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - 4`. + * @return `offset` plus the number of bytes written. + */ + writeFloatBE(value: number, offset?: number): number; + /** + * Writes `value` to `buf` at the specified `offset` as little-endian. The `value`must be a JavaScript number. Behavior is undefined when `value` is anything + * other than a JavaScript number. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.allocUnsafe(8); + * + * buf.writeDoubleLE(123.456, 0); + * + * console.log(buf); + * // Prints: + * ``` + * @since v0.11.15 + * @param value Number to be written to `buf`. + * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - 8`. + * @return `offset` plus the number of bytes written. + */ + writeDoubleLE(value: number, offset?: number): number; + /** + * Writes `value` to `buf` at the specified `offset` as big-endian. The `value`must be a JavaScript number. Behavior is undefined when `value` is anything + * other than a JavaScript number. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.allocUnsafe(8); + * + * buf.writeDoubleBE(123.456, 0); + * + * console.log(buf); + * // Prints: + * ``` + * @since v0.11.15 + * @param value Number to be written to `buf`. + * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - 8`. + * @return `offset` plus the number of bytes written. + */ + writeDoubleBE(value: number, offset?: number): number; + /** + * Fills `buf` with the specified `value`. If the `offset` and `end` are not given, + * the entire `buf` will be filled: + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * // Fill a `Buffer` with the ASCII character 'h'. + * + * const b = Buffer.allocUnsafe(50).fill('h'); + * + * console.log(b.toString()); + * // Prints: hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh + * + * // Fill a buffer with empty string + * const c = Buffer.allocUnsafe(5).fill(''); + * + * console.log(c.fill('')); + * // Prints: + * ``` + * + * `value` is coerced to a `uint32` value if it is not a string, `Buffer`, or + * integer. If the resulting integer is greater than `255` (decimal), `buf` will be + * filled with `value & 255`. + * + * If the final write of a `fill()` operation falls on a multi-byte character, + * then only the bytes of that character that fit into `buf` are written: + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * // Fill a `Buffer` with character that takes up two bytes in UTF-8. + * + * console.log(Buffer.allocUnsafe(5).fill('\u0222')); + * // Prints: + * ``` + * + * If `value` contains invalid characters, it is truncated; if no valid + * fill data remains, an exception is thrown: + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.allocUnsafe(5); + * + * console.log(buf.fill('a')); + * // Prints: + * console.log(buf.fill('aazz', 'hex')); + * // Prints: + * console.log(buf.fill('zz', 'hex')); + * // Throws an exception. + * ``` + * @since v0.5.0 + * @param value The value with which to fill `buf`. Empty value (string, Uint8Array, Buffer) is coerced to `0`. + * @param [offset=0] Number of bytes to skip before starting to fill `buf`. + * @param [end=buf.length] Where to stop filling `buf` (not inclusive). + * @param [encoding='utf8'] The encoding for `value` if `value` is a string. + * @return A reference to `buf`. + */ + fill(value: string | Uint8Array | number, offset?: number, end?: number, encoding?: BufferEncoding): this; + /** + * If `value` is: + * + * * a string, `value` is interpreted according to the character encoding in`encoding`. + * * a `Buffer` or [`Uint8Array`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array), `value` will be used in its entirety. + * To compare a partial `Buffer`, use `buf.subarray`. + * * a number, `value` will be interpreted as an unsigned 8-bit integer + * value between `0` and `255`. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.from('this is a buffer'); + * + * console.log(buf.indexOf('this')); + * // Prints: 0 + * console.log(buf.indexOf('is')); + * // Prints: 2 + * console.log(buf.indexOf(Buffer.from('a buffer'))); + * // Prints: 8 + * console.log(buf.indexOf(97)); + * // Prints: 8 (97 is the decimal ASCII value for 'a') + * console.log(buf.indexOf(Buffer.from('a buffer example'))); + * // Prints: -1 + * console.log(buf.indexOf(Buffer.from('a buffer example').slice(0, 8))); + * // Prints: 8 + * + * const utf16Buffer = Buffer.from('\u039a\u0391\u03a3\u03a3\u0395', 'utf16le'); + * + * console.log(utf16Buffer.indexOf('\u03a3', 0, 'utf16le')); + * // Prints: 4 + * console.log(utf16Buffer.indexOf('\u03a3', -4, 'utf16le')); + * // Prints: 6 + * ``` + * + * If `value` is not a string, number, or `Buffer`, this method will throw a`TypeError`. If `value` is a number, it will be coerced to a valid byte value, + * an integer between 0 and 255. + * + * If `byteOffset` is not a number, it will be coerced to a number. If the result + * of coercion is `NaN` or `0`, then the entire buffer will be searched. This + * behavior matches [`String.prototype.indexOf()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/indexOf). + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const b = Buffer.from('abcdef'); + * + * // Passing a value that's a number, but not a valid byte. + * // Prints: 2, equivalent to searching for 99 or 'c'. + * console.log(b.indexOf(99.9)); + * console.log(b.indexOf(256 + 99)); + * + * // Passing a byteOffset that coerces to NaN or 0. + * // Prints: 1, searching the whole buffer. + * console.log(b.indexOf('b', undefined)); + * console.log(b.indexOf('b', {})); + * console.log(b.indexOf('b', null)); + * console.log(b.indexOf('b', [])); + * ``` + * + * If `value` is an empty string or empty `Buffer` and `byteOffset` is less + * than `buf.length`, `byteOffset` will be returned. If `value` is empty and`byteOffset` is at least `buf.length`, `buf.length` will be returned. + * @since v1.5.0 + * @param value What to search for. + * @param [byteOffset=0] Where to begin searching in `buf`. If negative, then offset is calculated from the end of `buf`. + * @param [encoding='utf8'] If `value` is a string, this is the encoding used to determine the binary representation of the string that will be searched for in `buf`. + * @return The index of the first occurrence of `value` in `buf`, or `-1` if `buf` does not contain `value`. + */ + indexOf(value: string | number | Uint8Array, byteOffset?: number, encoding?: BufferEncoding): number; + /** + * Identical to `buf.indexOf()`, except the last occurrence of `value` is found + * rather than the first occurrence. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.from('this buffer is a buffer'); + * + * console.log(buf.lastIndexOf('this')); + * // Prints: 0 + * console.log(buf.lastIndexOf('buffer')); + * // Prints: 17 + * console.log(buf.lastIndexOf(Buffer.from('buffer'))); + * // Prints: 17 + * console.log(buf.lastIndexOf(97)); + * // Prints: 15 (97 is the decimal ASCII value for 'a') + * console.log(buf.lastIndexOf(Buffer.from('yolo'))); + * // Prints: -1 + * console.log(buf.lastIndexOf('buffer', 5)); + * // Prints: 5 + * console.log(buf.lastIndexOf('buffer', 4)); + * // Prints: -1 + * + * const utf16Buffer = Buffer.from('\u039a\u0391\u03a3\u03a3\u0395', 'utf16le'); + * + * console.log(utf16Buffer.lastIndexOf('\u03a3', undefined, 'utf16le')); + * // Prints: 6 + * console.log(utf16Buffer.lastIndexOf('\u03a3', -5, 'utf16le')); + * // Prints: 4 + * ``` + * + * If `value` is not a string, number, or `Buffer`, this method will throw a`TypeError`. If `value` is a number, it will be coerced to a valid byte value, + * an integer between 0 and 255. + * + * If `byteOffset` is not a number, it will be coerced to a number. Any arguments + * that coerce to `NaN`, like `{}` or `undefined`, will search the whole buffer. + * This behavior matches [`String.prototype.lastIndexOf()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/lastIndexOf). + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const b = Buffer.from('abcdef'); + * + * // Passing a value that's a number, but not a valid byte. + * // Prints: 2, equivalent to searching for 99 or 'c'. + * console.log(b.lastIndexOf(99.9)); + * console.log(b.lastIndexOf(256 + 99)); + * + * // Passing a byteOffset that coerces to NaN. + * // Prints: 1, searching the whole buffer. + * console.log(b.lastIndexOf('b', undefined)); + * console.log(b.lastIndexOf('b', {})); + * + * // Passing a byteOffset that coerces to 0. + * // Prints: -1, equivalent to passing 0. + * console.log(b.lastIndexOf('b', null)); + * console.log(b.lastIndexOf('b', [])); + * ``` + * + * If `value` is an empty string or empty `Buffer`, `byteOffset` will be returned. + * @since v6.0.0 + * @param value What to search for. + * @param [byteOffset=buf.length - 1] Where to begin searching in `buf`. If negative, then offset is calculated from the end of `buf`. + * @param [encoding='utf8'] If `value` is a string, this is the encoding used to determine the binary representation of the string that will be searched for in `buf`. + * @return The index of the last occurrence of `value` in `buf`, or `-1` if `buf` does not contain `value`. + */ + lastIndexOf(value: string | number | Uint8Array, byteOffset?: number, encoding?: BufferEncoding): number; + /** + * Creates and returns an [iterator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols) of `[index, byte]` pairs from the contents + * of `buf`. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * // Log the entire contents of a `Buffer`. + * + * const buf = Buffer.from('buffer'); + * + * for (const pair of buf.entries()) { + * console.log(pair); + * } + * // Prints: + * // [0, 98] + * // [1, 117] + * // [2, 102] + * // [3, 102] + * // [4, 101] + * // [5, 114] + * ``` + * @since v1.1.0 + */ + entries(): IterableIterator<[number, number]>; + /** + * Equivalent to `buf.indexOf() !== -1`. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.from('this is a buffer'); + * + * console.log(buf.includes('this')); + * // Prints: true + * console.log(buf.includes('is')); + * // Prints: true + * console.log(buf.includes(Buffer.from('a buffer'))); + * // Prints: true + * console.log(buf.includes(97)); + * // Prints: true (97 is the decimal ASCII value for 'a') + * console.log(buf.includes(Buffer.from('a buffer example'))); + * // Prints: false + * console.log(buf.includes(Buffer.from('a buffer example').slice(0, 8))); + * // Prints: true + * console.log(buf.includes('this', 4)); + * // Prints: false + * ``` + * @since v5.3.0 + * @param value What to search for. + * @param [byteOffset=0] Where to begin searching in `buf`. If negative, then offset is calculated from the end of `buf`. + * @param [encoding='utf8'] If `value` is a string, this is its encoding. + * @return `true` if `value` was found in `buf`, `false` otherwise. + */ + includes(value: string | number | Buffer, byteOffset?: number, encoding?: BufferEncoding): boolean; + /** + * Creates and returns an [iterator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols) of `buf` keys (indices). + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.from('buffer'); + * + * for (const key of buf.keys()) { + * console.log(key); + * } + * // Prints: + * // 0 + * // 1 + * // 2 + * // 3 + * // 4 + * // 5 + * ``` + * @since v1.1.0 + */ + keys(): IterableIterator; + /** + * Creates and returns an [iterator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols) for `buf` values (bytes). This function is + * called automatically when a `Buffer` is used in a `for..of` statement. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.from('buffer'); + * + * for (const value of buf.values()) { + * console.log(value); + * } + * // Prints: + * // 98 + * // 117 + * // 102 + * // 102 + * // 101 + * // 114 + * + * for (const value of buf) { + * console.log(value); + * } + * // Prints: + * // 98 + * // 117 + * // 102 + * // 102 + * // 101 + * // 114 + * ``` + * @since v1.1.0 + */ + values(): IterableIterator; + } + var Buffer: BufferConstructor; + /** + * Decodes a string of Base64-encoded data into bytes, and encodes those bytes + * into a string using Latin-1 (ISO-8859-1). + * + * The `data` may be any JavaScript-value that can be coerced into a string. + * + * **This function is only provided for compatibility with legacy web platform APIs** + * **and should never be used in new code, because they use strings to represent** + * **binary data and predate the introduction of typed arrays in JavaScript.** + * **For code running using Node.js APIs, converting between base64-encoded strings** + * **and binary data should be performed using `Buffer.from(str, 'base64')` and`buf.toString('base64')`.** + * @since v15.13.0, v14.17.0 + * @legacy Use `Buffer.from(data, 'base64')` instead. + * @param data The Base64-encoded input string. + */ + function atob(data: string): string; + /** + * Decodes a string into bytes using Latin-1 (ISO-8859), and encodes those bytes + * into a string using Base64. + * + * The `data` may be any JavaScript-value that can be coerced into a string. + * + * **This function is only provided for compatibility with legacy web platform APIs** + * **and should never be used in new code, because they use strings to represent** + * **binary data and predate the introduction of typed arrays in JavaScript.** + * **For code running using Node.js APIs, converting between base64-encoded strings** + * **and binary data should be performed using `Buffer.from(str, 'base64')` and`buf.toString('base64')`.** + * @since v15.13.0, v14.17.0 + * @legacy Use `buf.toString('base64')` instead. + * @param data An ASCII (Latin1) string. + */ + function btoa(data: string): string; + interface Blob extends __Blob {} + /** + * `Blob` class is a global reference for `require('node:buffer').Blob` + * https://nodejs.org/api/buffer.html#class-blob + * @since v18.0.0 + */ + var Blob: typeof globalThis extends { + onmessage: any; + Blob: infer T; + } ? T + : typeof NodeBlob; + } +} +declare module "node:buffer" { + export * from "buffer"; +} diff --git a/Url-Shortner/node_modules/@types/node/ts4.8/child_process.d.ts b/Url-Shortner/node_modules/@types/node/ts4.8/child_process.d.ts new file mode 100644 index 0000000..9f1a38a --- /dev/null +++ b/Url-Shortner/node_modules/@types/node/ts4.8/child_process.d.ts @@ -0,0 +1,1540 @@ +/** + * The `node:child_process` module provides the ability to spawn subprocesses in + * a manner that is similar, but not identical, to [`popen(3)`](http://man7.org/linux/man-pages/man3/popen.3.html). This capability + * is primarily provided by the {@link spawn} function: + * + * ```js + * const { spawn } = require('node:child_process'); + * const ls = spawn('ls', ['-lh', '/usr']); + * + * ls.stdout.on('data', (data) => { + * console.log(`stdout: ${data}`); + * }); + * + * ls.stderr.on('data', (data) => { + * console.error(`stderr: ${data}`); + * }); + * + * ls.on('close', (code) => { + * console.log(`child process exited with code ${code}`); + * }); + * ``` + * + * By default, pipes for `stdin`, `stdout`, and `stderr` are established between + * the parent Node.js process and the spawned subprocess. These pipes have + * limited (and platform-specific) capacity. If the subprocess writes to + * stdout in excess of that limit without the output being captured, the + * subprocess blocks waiting for the pipe buffer to accept more data. This is + * identical to the behavior of pipes in the shell. Use the `{ stdio: 'ignore' }`option if the output will not be consumed. + * + * The command lookup is performed using the `options.env.PATH` environment + * variable if `env` is in the `options` object. Otherwise, `process.env.PATH` is + * used. If `options.env` is set without `PATH`, lookup on Unix is performed + * on a default search path search of `/usr/bin:/bin` (see your operating system's + * manual for execvpe/execvp), on Windows the current processes environment + * variable `PATH` is used. + * + * On Windows, environment variables are case-insensitive. Node.js + * lexicographically sorts the `env` keys and uses the first one that + * case-insensitively matches. Only first (in lexicographic order) entry will be + * passed to the subprocess. This might lead to issues on Windows when passing + * objects to the `env` option that have multiple variants of the same key, such as`PATH` and `Path`. + * + * The {@link spawn} method spawns the child process asynchronously, + * without blocking the Node.js event loop. The {@link spawnSync} function provides equivalent functionality in a synchronous manner that blocks + * the event loop until the spawned process either exits or is terminated. + * + * For convenience, the `node:child_process` module provides a handful of + * synchronous and asynchronous alternatives to {@link spawn} and {@link spawnSync}. Each of these alternatives are implemented on + * top of {@link spawn} or {@link spawnSync}. + * + * * {@link exec}: spawns a shell and runs a command within that + * shell, passing the `stdout` and `stderr` to a callback function when + * complete. + * * {@link execFile}: similar to {@link exec} except + * that it spawns the command directly without first spawning a shell by + * default. + * * {@link fork}: spawns a new Node.js process and invokes a + * specified module with an IPC communication channel established that allows + * sending messages between parent and child. + * * {@link execSync}: a synchronous version of {@link exec} that will block the Node.js event loop. + * * {@link execFileSync}: a synchronous version of {@link execFile} that will block the Node.js event loop. + * + * For certain use cases, such as automating shell scripts, the `synchronous counterparts` may be more convenient. In many cases, however, + * the synchronous methods can have significant impact on performance due to + * stalling the event loop while spawned processes complete. + * @see [source](https://github.com/nodejs/node/blob/v20.2.0/lib/child_process.js) + */ +declare module "child_process" { + import { ObjectEncodingOptions } from "node:fs"; + import { Abortable, EventEmitter } from "node:events"; + import * as net from "node:net"; + import { Pipe, Readable, Stream, Writable } from "node:stream"; + import { URL } from "node:url"; + type Serializable = string | object | number | boolean | bigint; + type SendHandle = net.Socket | net.Server; + /** + * Instances of the `ChildProcess` represent spawned child processes. + * + * Instances of `ChildProcess` are not intended to be created directly. Rather, + * use the {@link spawn}, {@link exec},{@link execFile}, or {@link fork} methods to create + * instances of `ChildProcess`. + * @since v2.2.0 + */ + class ChildProcess extends EventEmitter { + /** + * A `Writable Stream` that represents the child process's `stdin`. + * + * If a child process waits to read all of its input, the child will not continue + * until this stream has been closed via `end()`. + * + * If the child was spawned with `stdio[0]` set to anything other than `'pipe'`, + * then this will be `null`. + * + * `subprocess.stdin` is an alias for `subprocess.stdio[0]`. Both properties will + * refer to the same value. + * + * The `subprocess.stdin` property can be `null` or `undefined`if the child process could not be successfully spawned. + * @since v0.1.90 + */ + stdin: Writable | null; + /** + * A `Readable Stream` that represents the child process's `stdout`. + * + * If the child was spawned with `stdio[1]` set to anything other than `'pipe'`, + * then this will be `null`. + * + * `subprocess.stdout` is an alias for `subprocess.stdio[1]`. Both properties will + * refer to the same value. + * + * ```js + * const { spawn } = require('node:child_process'); + * + * const subprocess = spawn('ls'); + * + * subprocess.stdout.on('data', (data) => { + * console.log(`Received chunk ${data}`); + * }); + * ``` + * + * The `subprocess.stdout` property can be `null` or `undefined`if the child process could not be successfully spawned. + * @since v0.1.90 + */ + stdout: Readable | null; + /** + * A `Readable Stream` that represents the child process's `stderr`. + * + * If the child was spawned with `stdio[2]` set to anything other than `'pipe'`, + * then this will be `null`. + * + * `subprocess.stderr` is an alias for `subprocess.stdio[2]`. Both properties will + * refer to the same value. + * + * The `subprocess.stderr` property can be `null` or `undefined`if the child process could not be successfully spawned. + * @since v0.1.90 + */ + stderr: Readable | null; + /** + * The `subprocess.channel` property is a reference to the child's IPC channel. If + * no IPC channel exists, this property is `undefined`. + * @since v7.1.0 + */ + readonly channel?: Pipe | null | undefined; + /** + * A sparse array of pipes to the child process, corresponding with positions in + * the `stdio` option passed to {@link spawn} that have been set + * to the value `'pipe'`. `subprocess.stdio[0]`, `subprocess.stdio[1]`, and`subprocess.stdio[2]` are also available as `subprocess.stdin`,`subprocess.stdout`, and `subprocess.stderr`, + * respectively. + * + * In the following example, only the child's fd `1` (stdout) is configured as a + * pipe, so only the parent's `subprocess.stdio[1]` is a stream, all other values + * in the array are `null`. + * + * ```js + * const assert = require('node:assert'); + * const fs = require('node:fs'); + * const child_process = require('node:child_process'); + * + * const subprocess = child_process.spawn('ls', { + * stdio: [ + * 0, // Use parent's stdin for child. + * 'pipe', // Pipe child's stdout to parent. + * fs.openSync('err.out', 'w'), // Direct child's stderr to a file. + * ], + * }); + * + * assert.strictEqual(subprocess.stdio[0], null); + * assert.strictEqual(subprocess.stdio[0], subprocess.stdin); + * + * assert(subprocess.stdout); + * assert.strictEqual(subprocess.stdio[1], subprocess.stdout); + * + * assert.strictEqual(subprocess.stdio[2], null); + * assert.strictEqual(subprocess.stdio[2], subprocess.stderr); + * ``` + * + * The `subprocess.stdio` property can be `undefined` if the child process could + * not be successfully spawned. + * @since v0.7.10 + */ + readonly stdio: [ + Writable | null, + // stdin + Readable | null, + // stdout + Readable | null, + // stderr + Readable | Writable | null | undefined, + // extra + Readable | Writable | null | undefined, // extra + ]; + /** + * The `subprocess.killed` property indicates whether the child process + * successfully received a signal from `subprocess.kill()`. The `killed` property + * does not indicate that the child process has been terminated. + * @since v0.5.10 + */ + readonly killed: boolean; + /** + * Returns the process identifier (PID) of the child process. If the child process + * fails to spawn due to errors, then the value is `undefined` and `error` is + * emitted. + * + * ```js + * const { spawn } = require('node:child_process'); + * const grep = spawn('grep', ['ssh']); + * + * console.log(`Spawned child pid: ${grep.pid}`); + * grep.stdin.end(); + * ``` + * @since v0.1.90 + */ + readonly pid?: number | undefined; + /** + * The `subprocess.connected` property indicates whether it is still possible to + * send and receive messages from a child process. When `subprocess.connected` is`false`, it is no longer possible to send or receive messages. + * @since v0.7.2 + */ + readonly connected: boolean; + /** + * The `subprocess.exitCode` property indicates the exit code of the child process. + * If the child process is still running, the field will be `null`. + */ + readonly exitCode: number | null; + /** + * The `subprocess.signalCode` property indicates the signal received by + * the child process if any, else `null`. + */ + readonly signalCode: NodeJS.Signals | null; + /** + * The `subprocess.spawnargs` property represents the full list of command-line + * arguments the child process was launched with. + */ + readonly spawnargs: string[]; + /** + * The `subprocess.spawnfile` property indicates the executable file name of + * the child process that is launched. + * + * For {@link fork}, its value will be equal to `process.execPath`. + * For {@link spawn}, its value will be the name of + * the executable file. + * For {@link exec}, its value will be the name of the shell + * in which the child process is launched. + */ + readonly spawnfile: string; + /** + * The `subprocess.kill()` method sends a signal to the child process. If no + * argument is given, the process will be sent the `'SIGTERM'` signal. See [`signal(7)`](http://man7.org/linux/man-pages/man7/signal.7.html) for a list of available signals. This function + * returns `true` if [`kill(2)`](http://man7.org/linux/man-pages/man2/kill.2.html) succeeds, and `false` otherwise. + * + * ```js + * const { spawn } = require('node:child_process'); + * const grep = spawn('grep', ['ssh']); + * + * grep.on('close', (code, signal) => { + * console.log( + * `child process terminated due to receipt of signal ${signal}`); + * }); + * + * // Send SIGHUP to process. + * grep.kill('SIGHUP'); + * ``` + * + * The `ChildProcess` object may emit an `'error'` event if the signal + * cannot be delivered. Sending a signal to a child process that has already exited + * is not an error but may have unforeseen consequences. Specifically, if the + * process identifier (PID) has been reassigned to another process, the signal will + * be delivered to that process instead which can have unexpected results. + * + * While the function is called `kill`, the signal delivered to the child process + * may not actually terminate the process. + * + * See [`kill(2)`](http://man7.org/linux/man-pages/man2/kill.2.html) for reference. + * + * On Windows, where POSIX signals do not exist, the `signal` argument will be + * ignored, and the process will be killed forcefully and abruptly (similar to`'SIGKILL'`). + * See `Signal Events` for more details. + * + * On Linux, child processes of child processes will not be terminated + * when attempting to kill their parent. This is likely to happen when running a + * new process in a shell or with the use of the `shell` option of `ChildProcess`: + * + * ```js + * 'use strict'; + * const { spawn } = require('node:child_process'); + * + * const subprocess = spawn( + * 'sh', + * [ + * '-c', + * `node -e "setInterval(() => { + * console.log(process.pid, 'is alive') + * }, 500);"`, + * ], { + * stdio: ['inherit', 'inherit', 'inherit'], + * }, + * ); + * + * setTimeout(() => { + * subprocess.kill(); // Does not terminate the Node.js process in the shell. + * }, 2000); + * ``` + * @since v0.1.90 + */ + kill(signal?: NodeJS.Signals | number): boolean; + /** + * Calls {@link ChildProcess.kill} with `'SIGTERM'`. + * @since v20.5.0 + */ + [Symbol.dispose](): void; + /** + * When an IPC channel has been established between the parent and child ( + * i.e. when using {@link fork}), the `subprocess.send()` method can + * be used to send messages to the child process. When the child process is a + * Node.js instance, these messages can be received via the `'message'` event. + * + * The message goes through serialization and parsing. The resulting + * message might not be the same as what is originally sent. + * + * For example, in the parent script: + * + * ```js + * const cp = require('node:child_process'); + * const n = cp.fork(`${__dirname}/sub.js`); + * + * n.on('message', (m) => { + * console.log('PARENT got message:', m); + * }); + * + * // Causes the child to print: CHILD got message: { hello: 'world' } + * n.send({ hello: 'world' }); + * ``` + * + * And then the child script, `'sub.js'` might look like this: + * + * ```js + * process.on('message', (m) => { + * console.log('CHILD got message:', m); + * }); + * + * // Causes the parent to print: PARENT got message: { foo: 'bar', baz: null } + * process.send({ foo: 'bar', baz: NaN }); + * ``` + * + * Child Node.js processes will have a `process.send()` method of their own + * that allows the child to send messages back to the parent. + * + * There is a special case when sending a `{cmd: 'NODE_foo'}` message. Messages + * containing a `NODE_` prefix in the `cmd` property are reserved for use within + * Node.js core and will not be emitted in the child's `'message'` event. Rather, such messages are emitted using the`'internalMessage'` event and are consumed internally by Node.js. + * Applications should avoid using such messages or listening for`'internalMessage'` events as it is subject to change without notice. + * + * The optional `sendHandle` argument that may be passed to `subprocess.send()` is + * for passing a TCP server or socket object to the child process. The child will + * receive the object as the second argument passed to the callback function + * registered on the `'message'` event. Any data that is received + * and buffered in the socket will not be sent to the child. + * + * The optional `callback` is a function that is invoked after the message is + * sent but before the child may have received it. The function is called with a + * single argument: `null` on success, or an `Error` object on failure. + * + * If no `callback` function is provided and the message cannot be sent, an`'error'` event will be emitted by the `ChildProcess` object. This can + * happen, for instance, when the child process has already exited. + * + * `subprocess.send()` will return `false` if the channel has closed or when the + * backlog of unsent messages exceeds a threshold that makes it unwise to send + * more. Otherwise, the method returns `true`. The `callback` function can be + * used to implement flow control. + * + * #### Example: sending a server object + * + * The `sendHandle` argument can be used, for instance, to pass the handle of + * a TCP server object to the child process as illustrated in the example below: + * + * ```js + * const subprocess = require('node:child_process').fork('subprocess.js'); + * + * // Open up the server object and send the handle. + * const server = require('node:net').createServer(); + * server.on('connection', (socket) => { + * socket.end('handled by parent'); + * }); + * server.listen(1337, () => { + * subprocess.send('server', server); + * }); + * ``` + * + * The child would then receive the server object as: + * + * ```js + * process.on('message', (m, server) => { + * if (m === 'server') { + * server.on('connection', (socket) => { + * socket.end('handled by child'); + * }); + * } + * }); + * ``` + * + * Once the server is now shared between the parent and child, some connections + * can be handled by the parent and some by the child. + * + * While the example above uses a server created using the `node:net` module,`node:dgram` module servers use exactly the same workflow with the exceptions of + * listening on a `'message'` event instead of `'connection'` and using`server.bind()` instead of `server.listen()`. This is, however, only + * supported on Unix platforms. + * + * #### Example: sending a socket object + * + * Similarly, the `sendHandler` argument can be used to pass the handle of a + * socket to the child process. The example below spawns two children that each + * handle connections with "normal" or "special" priority: + * + * ```js + * const { fork } = require('node:child_process'); + * const normal = fork('subprocess.js', ['normal']); + * const special = fork('subprocess.js', ['special']); + * + * // Open up the server and send sockets to child. Use pauseOnConnect to prevent + * // the sockets from being read before they are sent to the child process. + * const server = require('node:net').createServer({ pauseOnConnect: true }); + * server.on('connection', (socket) => { + * + * // If this is special priority... + * if (socket.remoteAddress === '74.125.127.100') { + * special.send('socket', socket); + * return; + * } + * // This is normal priority. + * normal.send('socket', socket); + * }); + * server.listen(1337); + * ``` + * + * The `subprocess.js` would receive the socket handle as the second argument + * passed to the event callback function: + * + * ```js + * process.on('message', (m, socket) => { + * if (m === 'socket') { + * if (socket) { + * // Check that the client socket exists. + * // It is possible for the socket to be closed between the time it is + * // sent and the time it is received in the child process. + * socket.end(`Request handled with ${process.argv[2]} priority`); + * } + * } + * }); + * ``` + * + * Do not use `.maxConnections` on a socket that has been passed to a subprocess. + * The parent cannot track when the socket is destroyed. + * + * Any `'message'` handlers in the subprocess should verify that `socket` exists, + * as the connection may have been closed during the time it takes to send the + * connection to the child. + * @since v0.5.9 + * @param options The `options` argument, if present, is an object used to parameterize the sending of certain types of handles. `options` supports the following properties: + */ + send(message: Serializable, callback?: (error: Error | null) => void): boolean; + send(message: Serializable, sendHandle?: SendHandle, callback?: (error: Error | null) => void): boolean; + send( + message: Serializable, + sendHandle?: SendHandle, + options?: MessageOptions, + callback?: (error: Error | null) => void, + ): boolean; + /** + * Closes the IPC channel between parent and child, allowing the child to exit + * gracefully once there are no other connections keeping it alive. After calling + * this method the `subprocess.connected` and `process.connected` properties in + * both the parent and child (respectively) will be set to `false`, and it will be + * no longer possible to pass messages between the processes. + * + * The `'disconnect'` event will be emitted when there are no messages in the + * process of being received. This will most often be triggered immediately after + * calling `subprocess.disconnect()`. + * + * When the child process is a Node.js instance (e.g. spawned using {@link fork}), the `process.disconnect()` method can be invoked + * within the child process to close the IPC channel as well. + * @since v0.7.2 + */ + disconnect(): void; + /** + * By default, the parent will wait for the detached child to exit. To prevent the + * parent from waiting for a given `subprocess` to exit, use the`subprocess.unref()` method. Doing so will cause the parent's event loop to not + * include the child in its reference count, allowing the parent to exit + * independently of the child, unless there is an established IPC channel between + * the child and the parent. + * + * ```js + * const { spawn } = require('node:child_process'); + * + * const subprocess = spawn(process.argv[0], ['child_program.js'], { + * detached: true, + * stdio: 'ignore', + * }); + * + * subprocess.unref(); + * ``` + * @since v0.7.10 + */ + unref(): void; + /** + * Calling `subprocess.ref()` after making a call to `subprocess.unref()` will + * restore the removed reference count for the child process, forcing the parent + * to wait for the child to exit before exiting itself. + * + * ```js + * const { spawn } = require('node:child_process'); + * + * const subprocess = spawn(process.argv[0], ['child_program.js'], { + * detached: true, + * stdio: 'ignore', + * }); + * + * subprocess.unref(); + * subprocess.ref(); + * ``` + * @since v0.7.10 + */ + ref(): void; + /** + * events.EventEmitter + * 1. close + * 2. disconnect + * 3. error + * 4. exit + * 5. message + * 6. spawn + */ + addListener(event: string, listener: (...args: any[]) => void): this; + addListener(event: "close", listener: (code: number | null, signal: NodeJS.Signals | null) => void): this; + addListener(event: "disconnect", listener: () => void): this; + addListener(event: "error", listener: (err: Error) => void): this; + addListener(event: "exit", listener: (code: number | null, signal: NodeJS.Signals | null) => void): this; + addListener(event: "message", listener: (message: Serializable, sendHandle: SendHandle) => void): this; + addListener(event: "spawn", listener: () => void): this; + emit(event: string | symbol, ...args: any[]): boolean; + emit(event: "close", code: number | null, signal: NodeJS.Signals | null): boolean; + emit(event: "disconnect"): boolean; + emit(event: "error", err: Error): boolean; + emit(event: "exit", code: number | null, signal: NodeJS.Signals | null): boolean; + emit(event: "message", message: Serializable, sendHandle: SendHandle): boolean; + emit(event: "spawn", listener: () => void): boolean; + on(event: string, listener: (...args: any[]) => void): this; + on(event: "close", listener: (code: number | null, signal: NodeJS.Signals | null) => void): this; + on(event: "disconnect", listener: () => void): this; + on(event: "error", listener: (err: Error) => void): this; + on(event: "exit", listener: (code: number | null, signal: NodeJS.Signals | null) => void): this; + on(event: "message", listener: (message: Serializable, sendHandle: SendHandle) => void): this; + on(event: "spawn", listener: () => void): this; + once(event: string, listener: (...args: any[]) => void): this; + once(event: "close", listener: (code: number | null, signal: NodeJS.Signals | null) => void): this; + once(event: "disconnect", listener: () => void): this; + once(event: "error", listener: (err: Error) => void): this; + once(event: "exit", listener: (code: number | null, signal: NodeJS.Signals | null) => void): this; + once(event: "message", listener: (message: Serializable, sendHandle: SendHandle) => void): this; + once(event: "spawn", listener: () => void): this; + prependListener(event: string, listener: (...args: any[]) => void): this; + prependListener(event: "close", listener: (code: number | null, signal: NodeJS.Signals | null) => void): this; + prependListener(event: "disconnect", listener: () => void): this; + prependListener(event: "error", listener: (err: Error) => void): this; + prependListener(event: "exit", listener: (code: number | null, signal: NodeJS.Signals | null) => void): this; + prependListener(event: "message", listener: (message: Serializable, sendHandle: SendHandle) => void): this; + prependListener(event: "spawn", listener: () => void): this; + prependOnceListener(event: string, listener: (...args: any[]) => void): this; + prependOnceListener( + event: "close", + listener: (code: number | null, signal: NodeJS.Signals | null) => void, + ): this; + prependOnceListener(event: "disconnect", listener: () => void): this; + prependOnceListener(event: "error", listener: (err: Error) => void): this; + prependOnceListener( + event: "exit", + listener: (code: number | null, signal: NodeJS.Signals | null) => void, + ): this; + prependOnceListener(event: "message", listener: (message: Serializable, sendHandle: SendHandle) => void): this; + prependOnceListener(event: "spawn", listener: () => void): this; + } + // return this object when stdio option is undefined or not specified + interface ChildProcessWithoutNullStreams extends ChildProcess { + stdin: Writable; + stdout: Readable; + stderr: Readable; + readonly stdio: [ + Writable, + Readable, + Readable, + // stderr + Readable | Writable | null | undefined, + // extra, no modification + Readable | Writable | null | undefined, // extra, no modification + ]; + } + // return this object when stdio option is a tuple of 3 + interface ChildProcessByStdio + extends ChildProcess + { + stdin: I; + stdout: O; + stderr: E; + readonly stdio: [ + I, + O, + E, + Readable | Writable | null | undefined, + // extra, no modification + Readable | Writable | null | undefined, // extra, no modification + ]; + } + interface MessageOptions { + keepOpen?: boolean | undefined; + } + type IOType = "overlapped" | "pipe" | "ignore" | "inherit"; + type StdioOptions = IOType | Array; + type SerializationType = "json" | "advanced"; + interface MessagingOptions extends Abortable { + /** + * Specify the kind of serialization used for sending messages between processes. + * @default 'json' + */ + serialization?: SerializationType | undefined; + /** + * The signal value to be used when the spawned process will be killed by the abort signal. + * @default 'SIGTERM' + */ + killSignal?: NodeJS.Signals | number | undefined; + /** + * In milliseconds the maximum amount of time the process is allowed to run. + */ + timeout?: number | undefined; + } + interface ProcessEnvOptions { + uid?: number | undefined; + gid?: number | undefined; + cwd?: string | URL | undefined; + env?: NodeJS.ProcessEnv | undefined; + } + interface CommonOptions extends ProcessEnvOptions { + /** + * @default false + */ + windowsHide?: boolean | undefined; + /** + * @default 0 + */ + timeout?: number | undefined; + } + interface CommonSpawnOptions extends CommonOptions, MessagingOptions, Abortable { + argv0?: string | undefined; + /** + * Can be set to 'pipe', 'inherit', 'overlapped', or 'ignore', or an array of these strings. + * If passed as an array, the first element is used for `stdin`, the second for + * `stdout`, and the third for `stderr`. A fourth element can be used to + * specify the `stdio` behavior beyond the standard streams. See + * {@link ChildProcess.stdio} for more information. + * + * @default 'pipe' + */ + stdio?: StdioOptions | undefined; + shell?: boolean | string | undefined; + windowsVerbatimArguments?: boolean | undefined; + } + interface SpawnOptions extends CommonSpawnOptions { + detached?: boolean | undefined; + } + interface SpawnOptionsWithoutStdio extends SpawnOptions { + stdio?: StdioPipeNamed | StdioPipe[] | undefined; + } + type StdioNull = "inherit" | "ignore" | Stream; + type StdioPipeNamed = "pipe" | "overlapped"; + type StdioPipe = undefined | null | StdioPipeNamed; + interface SpawnOptionsWithStdioTuple< + Stdin extends StdioNull | StdioPipe, + Stdout extends StdioNull | StdioPipe, + Stderr extends StdioNull | StdioPipe, + > extends SpawnOptions { + stdio: [Stdin, Stdout, Stderr]; + } + /** + * The `child_process.spawn()` method spawns a new process using the given`command`, with command-line arguments in `args`. If omitted, `args` defaults + * to an empty array. + * + * **If the `shell` option is enabled, do not pass unsanitized user input to this** + * **function. Any input containing shell metacharacters may be used to trigger** + * **arbitrary command execution.** + * + * A third argument may be used to specify additional options, with these defaults: + * + * ```js + * const defaults = { + * cwd: undefined, + * env: process.env, + * }; + * ``` + * + * Use `cwd` to specify the working directory from which the process is spawned. + * If not given, the default is to inherit the current working directory. If given, + * but the path does not exist, the child process emits an `ENOENT` error + * and exits immediately. `ENOENT` is also emitted when the command + * does not exist. + * + * Use `env` to specify environment variables that will be visible to the new + * process, the default is `process.env`. + * + * `undefined` values in `env` will be ignored. + * + * Example of running `ls -lh /usr`, capturing `stdout`, `stderr`, and the + * exit code: + * + * ```js + * const { spawn } = require('node:child_process'); + * const ls = spawn('ls', ['-lh', '/usr']); + * + * ls.stdout.on('data', (data) => { + * console.log(`stdout: ${data}`); + * }); + * + * ls.stderr.on('data', (data) => { + * console.error(`stderr: ${data}`); + * }); + * + * ls.on('close', (code) => { + * console.log(`child process exited with code ${code}`); + * }); + * ``` + * + * Example: A very elaborate way to run `ps ax | grep ssh` + * + * ```js + * const { spawn } = require('node:child_process'); + * const ps = spawn('ps', ['ax']); + * const grep = spawn('grep', ['ssh']); + * + * ps.stdout.on('data', (data) => { + * grep.stdin.write(data); + * }); + * + * ps.stderr.on('data', (data) => { + * console.error(`ps stderr: ${data}`); + * }); + * + * ps.on('close', (code) => { + * if (code !== 0) { + * console.log(`ps process exited with code ${code}`); + * } + * grep.stdin.end(); + * }); + * + * grep.stdout.on('data', (data) => { + * console.log(data.toString()); + * }); + * + * grep.stderr.on('data', (data) => { + * console.error(`grep stderr: ${data}`); + * }); + * + * grep.on('close', (code) => { + * if (code !== 0) { + * console.log(`grep process exited with code ${code}`); + * } + * }); + * ``` + * + * Example of checking for failed `spawn`: + * + * ```js + * const { spawn } = require('node:child_process'); + * const subprocess = spawn('bad_command'); + * + * subprocess.on('error', (err) => { + * console.error('Failed to start subprocess.'); + * }); + * ``` + * + * Certain platforms (macOS, Linux) will use the value of `argv[0]` for the process + * title while others (Windows, SunOS) will use `command`. + * + * Node.js overwrites `argv[0]` with `process.execPath` on startup, so`process.argv[0]` in a Node.js child process will not match the `argv0`parameter passed to `spawn` from the parent. Retrieve + * it with the`process.argv0` property instead. + * + * If the `signal` option is enabled, calling `.abort()` on the corresponding`AbortController` is similar to calling `.kill()` on the child process except + * the error passed to the callback will be an `AbortError`: + * + * ```js + * const { spawn } = require('node:child_process'); + * const controller = new AbortController(); + * const { signal } = controller; + * const grep = spawn('grep', ['ssh'], { signal }); + * grep.on('error', (err) => { + * // This will be called with err being an AbortError if the controller aborts + * }); + * controller.abort(); // Stops the child process + * ``` + * @since v0.1.90 + * @param command The command to run. + * @param args List of string arguments. + */ + function spawn(command: string, options?: SpawnOptionsWithoutStdio): ChildProcessWithoutNullStreams; + function spawn( + command: string, + options: SpawnOptionsWithStdioTuple, + ): ChildProcessByStdio; + function spawn( + command: string, + options: SpawnOptionsWithStdioTuple, + ): ChildProcessByStdio; + function spawn( + command: string, + options: SpawnOptionsWithStdioTuple, + ): ChildProcessByStdio; + function spawn( + command: string, + options: SpawnOptionsWithStdioTuple, + ): ChildProcessByStdio; + function spawn( + command: string, + options: SpawnOptionsWithStdioTuple, + ): ChildProcessByStdio; + function spawn( + command: string, + options: SpawnOptionsWithStdioTuple, + ): ChildProcessByStdio; + function spawn( + command: string, + options: SpawnOptionsWithStdioTuple, + ): ChildProcessByStdio; + function spawn( + command: string, + options: SpawnOptionsWithStdioTuple, + ): ChildProcessByStdio; + function spawn(command: string, options: SpawnOptions): ChildProcess; + // overloads of spawn with 'args' + function spawn( + command: string, + args?: ReadonlyArray, + options?: SpawnOptionsWithoutStdio, + ): ChildProcessWithoutNullStreams; + function spawn( + command: string, + args: ReadonlyArray, + options: SpawnOptionsWithStdioTuple, + ): ChildProcessByStdio; + function spawn( + command: string, + args: ReadonlyArray, + options: SpawnOptionsWithStdioTuple, + ): ChildProcessByStdio; + function spawn( + command: string, + args: ReadonlyArray, + options: SpawnOptionsWithStdioTuple, + ): ChildProcessByStdio; + function spawn( + command: string, + args: ReadonlyArray, + options: SpawnOptionsWithStdioTuple, + ): ChildProcessByStdio; + function spawn( + command: string, + args: ReadonlyArray, + options: SpawnOptionsWithStdioTuple, + ): ChildProcessByStdio; + function spawn( + command: string, + args: ReadonlyArray, + options: SpawnOptionsWithStdioTuple, + ): ChildProcessByStdio; + function spawn( + command: string, + args: ReadonlyArray, + options: SpawnOptionsWithStdioTuple, + ): ChildProcessByStdio; + function spawn( + command: string, + args: ReadonlyArray, + options: SpawnOptionsWithStdioTuple, + ): ChildProcessByStdio; + function spawn(command: string, args: ReadonlyArray, options: SpawnOptions): ChildProcess; + interface ExecOptions extends CommonOptions { + shell?: string | undefined; + signal?: AbortSignal | undefined; + maxBuffer?: number | undefined; + killSignal?: NodeJS.Signals | number | undefined; + } + interface ExecOptionsWithStringEncoding extends ExecOptions { + encoding: BufferEncoding; + } + interface ExecOptionsWithBufferEncoding extends ExecOptions { + encoding: BufferEncoding | null; // specify `null`. + } + interface ExecException extends Error { + cmd?: string | undefined; + killed?: boolean | undefined; + code?: number | undefined; + signal?: NodeJS.Signals | undefined; + } + /** + * Spawns a shell then executes the `command` within that shell, buffering any + * generated output. The `command` string passed to the exec function is processed + * directly by the shell and special characters (vary based on [shell](https://en.wikipedia.org/wiki/List_of_command-line_interpreters)) + * need to be dealt with accordingly: + * + * ```js + * const { exec } = require('node:child_process'); + * + * exec('"/path/to/test file/test.sh" arg1 arg2'); + * // Double quotes are used so that the space in the path is not interpreted as + * // a delimiter of multiple arguments. + * + * exec('echo "The \\$HOME variable is $HOME"'); + * // The $HOME variable is escaped in the first instance, but not in the second. + * ``` + * + * **Never pass unsanitized user input to this function. Any input containing shell** + * **metacharacters may be used to trigger arbitrary command execution.** + * + * If a `callback` function is provided, it is called with the arguments`(error, stdout, stderr)`. On success, `error` will be `null`. On error,`error` will be an instance of `Error`. The + * `error.code` property will be + * the exit code of the process. By convention, any exit code other than `0`indicates an error. `error.signal` will be the signal that terminated the + * process. + * + * The `stdout` and `stderr` arguments passed to the callback will contain the + * stdout and stderr output of the child process. By default, Node.js will decode + * the output as UTF-8 and pass strings to the callback. The `encoding` option + * can be used to specify the character encoding used to decode the stdout and + * stderr output. If `encoding` is `'buffer'`, or an unrecognized character + * encoding, `Buffer` objects will be passed to the callback instead. + * + * ```js + * const { exec } = require('node:child_process'); + * exec('cat *.js missing_file | wc -l', (error, stdout, stderr) => { + * if (error) { + * console.error(`exec error: ${error}`); + * return; + * } + * console.log(`stdout: ${stdout}`); + * console.error(`stderr: ${stderr}`); + * }); + * ``` + * + * If `timeout` is greater than `0`, the parent will send the signal + * identified by the `killSignal` property (the default is `'SIGTERM'`) if the + * child runs longer than `timeout` milliseconds. + * + * Unlike the [`exec(3)`](http://man7.org/linux/man-pages/man3/exec.3.html) POSIX system call, `child_process.exec()` does not replace + * the existing process and uses a shell to execute the command. + * + * If this method is invoked as its `util.promisify()` ed version, it returns + * a `Promise` for an `Object` with `stdout` and `stderr` properties. The returned`ChildProcess` instance is attached to the `Promise` as a `child` property. In + * case of an error (including any error resulting in an exit code other than 0), a + * rejected promise is returned, with the same `error` object given in the + * callback, but with two additional properties `stdout` and `stderr`. + * + * ```js + * const util = require('node:util'); + * const exec = util.promisify(require('node:child_process').exec); + * + * async function lsExample() { + * const { stdout, stderr } = await exec('ls'); + * console.log('stdout:', stdout); + * console.error('stderr:', stderr); + * } + * lsExample(); + * ``` + * + * If the `signal` option is enabled, calling `.abort()` on the corresponding`AbortController` is similar to calling `.kill()` on the child process except + * the error passed to the callback will be an `AbortError`: + * + * ```js + * const { exec } = require('node:child_process'); + * const controller = new AbortController(); + * const { signal } = controller; + * const child = exec('grep ssh', { signal }, (error) => { + * console.error(error); // an AbortError + * }); + * controller.abort(); + * ``` + * @since v0.1.90 + * @param command The command to run, with space-separated arguments. + * @param callback called with the output when process terminates. + */ + function exec( + command: string, + callback?: (error: ExecException | null, stdout: string, stderr: string) => void, + ): ChildProcess; + // `options` with `"buffer"` or `null` for `encoding` means stdout/stderr are definitely `Buffer`. + function exec( + command: string, + options: { + encoding: "buffer" | null; + } & ExecOptions, + callback?: (error: ExecException | null, stdout: Buffer, stderr: Buffer) => void, + ): ChildProcess; + // `options` with well known `encoding` means stdout/stderr are definitely `string`. + function exec( + command: string, + options: { + encoding: BufferEncoding; + } & ExecOptions, + callback?: (error: ExecException | null, stdout: string, stderr: string) => void, + ): ChildProcess; + // `options` with an `encoding` whose type is `string` means stdout/stderr could either be `Buffer` or `string`. + // There is no guarantee the `encoding` is unknown as `string` is a superset of `BufferEncoding`. + function exec( + command: string, + options: { + encoding: BufferEncoding; + } & ExecOptions, + callback?: (error: ExecException | null, stdout: string | Buffer, stderr: string | Buffer) => void, + ): ChildProcess; + // `options` without an `encoding` means stdout/stderr are definitely `string`. + function exec( + command: string, + options: ExecOptions, + callback?: (error: ExecException | null, stdout: string, stderr: string) => void, + ): ChildProcess; + // fallback if nothing else matches. Worst case is always `string | Buffer`. + function exec( + command: string, + options: (ObjectEncodingOptions & ExecOptions) | undefined | null, + callback?: (error: ExecException | null, stdout: string | Buffer, stderr: string | Buffer) => void, + ): ChildProcess; + interface PromiseWithChild extends Promise { + child: ChildProcess; + } + namespace exec { + function __promisify__(command: string): PromiseWithChild<{ + stdout: string; + stderr: string; + }>; + function __promisify__( + command: string, + options: { + encoding: "buffer" | null; + } & ExecOptions, + ): PromiseWithChild<{ + stdout: Buffer; + stderr: Buffer; + }>; + function __promisify__( + command: string, + options: { + encoding: BufferEncoding; + } & ExecOptions, + ): PromiseWithChild<{ + stdout: string; + stderr: string; + }>; + function __promisify__( + command: string, + options: ExecOptions, + ): PromiseWithChild<{ + stdout: string; + stderr: string; + }>; + function __promisify__( + command: string, + options?: (ObjectEncodingOptions & ExecOptions) | null, + ): PromiseWithChild<{ + stdout: string | Buffer; + stderr: string | Buffer; + }>; + } + interface ExecFileOptions extends CommonOptions, Abortable { + maxBuffer?: number | undefined; + killSignal?: NodeJS.Signals | number | undefined; + windowsVerbatimArguments?: boolean | undefined; + shell?: boolean | string | undefined; + signal?: AbortSignal | undefined; + } + interface ExecFileOptionsWithStringEncoding extends ExecFileOptions { + encoding: BufferEncoding; + } + interface ExecFileOptionsWithBufferEncoding extends ExecFileOptions { + encoding: "buffer" | null; + } + interface ExecFileOptionsWithOtherEncoding extends ExecFileOptions { + encoding: BufferEncoding; + } + type ExecFileException = + & Omit + & Omit + & { code?: string | number | undefined | null }; + /** + * The `child_process.execFile()` function is similar to {@link exec} except that it does not spawn a shell by default. Rather, the specified + * executable `file` is spawned directly as a new process making it slightly more + * efficient than {@link exec}. + * + * The same options as {@link exec} are supported. Since a shell is + * not spawned, behaviors such as I/O redirection and file globbing are not + * supported. + * + * ```js + * const { execFile } = require('node:child_process'); + * const child = execFile('node', ['--version'], (error, stdout, stderr) => { + * if (error) { + * throw error; + * } + * console.log(stdout); + * }); + * ``` + * + * The `stdout` and `stderr` arguments passed to the callback will contain the + * stdout and stderr output of the child process. By default, Node.js will decode + * the output as UTF-8 and pass strings to the callback. The `encoding` option + * can be used to specify the character encoding used to decode the stdout and + * stderr output. If `encoding` is `'buffer'`, or an unrecognized character + * encoding, `Buffer` objects will be passed to the callback instead. + * + * If this method is invoked as its `util.promisify()` ed version, it returns + * a `Promise` for an `Object` with `stdout` and `stderr` properties. The returned`ChildProcess` instance is attached to the `Promise` as a `child` property. In + * case of an error (including any error resulting in an exit code other than 0), a + * rejected promise is returned, with the same `error` object given in the + * callback, but with two additional properties `stdout` and `stderr`. + * + * ```js + * const util = require('node:util'); + * const execFile = util.promisify(require('node:child_process').execFile); + * async function getVersion() { + * const { stdout } = await execFile('node', ['--version']); + * console.log(stdout); + * } + * getVersion(); + * ``` + * + * **If the `shell` option is enabled, do not pass unsanitized user input to this** + * **function. Any input containing shell metacharacters may be used to trigger** + * **arbitrary command execution.** + * + * If the `signal` option is enabled, calling `.abort()` on the corresponding`AbortController` is similar to calling `.kill()` on the child process except + * the error passed to the callback will be an `AbortError`: + * + * ```js + * const { execFile } = require('node:child_process'); + * const controller = new AbortController(); + * const { signal } = controller; + * const child = execFile('node', ['--version'], { signal }, (error) => { + * console.error(error); // an AbortError + * }); + * controller.abort(); + * ``` + * @since v0.1.91 + * @param file The name or path of the executable file to run. + * @param args List of string arguments. + * @param callback Called with the output when process terminates. + */ + function execFile(file: string): ChildProcess; + function execFile( + file: string, + options: (ObjectEncodingOptions & ExecFileOptions) | undefined | null, + ): ChildProcess; + function execFile(file: string, args?: ReadonlyArray | null): ChildProcess; + function execFile( + file: string, + args: ReadonlyArray | undefined | null, + options: (ObjectEncodingOptions & ExecFileOptions) | undefined | null, + ): ChildProcess; + // no `options` definitely means stdout/stderr are `string`. + function execFile( + file: string, + callback: (error: ExecFileException | null, stdout: string, stderr: string) => void, + ): ChildProcess; + function execFile( + file: string, + args: ReadonlyArray | undefined | null, + callback: (error: ExecFileException | null, stdout: string, stderr: string) => void, + ): ChildProcess; + // `options` with `"buffer"` or `null` for `encoding` means stdout/stderr are definitely `Buffer`. + function execFile( + file: string, + options: ExecFileOptionsWithBufferEncoding, + callback: (error: ExecFileException | null, stdout: Buffer, stderr: Buffer) => void, + ): ChildProcess; + function execFile( + file: string, + args: ReadonlyArray | undefined | null, + options: ExecFileOptionsWithBufferEncoding, + callback: (error: ExecFileException | null, stdout: Buffer, stderr: Buffer) => void, + ): ChildProcess; + // `options` with well known `encoding` means stdout/stderr are definitely `string`. + function execFile( + file: string, + options: ExecFileOptionsWithStringEncoding, + callback: (error: ExecFileException | null, stdout: string, stderr: string) => void, + ): ChildProcess; + function execFile( + file: string, + args: ReadonlyArray | undefined | null, + options: ExecFileOptionsWithStringEncoding, + callback: (error: ExecFileException | null, stdout: string, stderr: string) => void, + ): ChildProcess; + // `options` with an `encoding` whose type is `string` means stdout/stderr could either be `Buffer` or `string`. + // There is no guarantee the `encoding` is unknown as `string` is a superset of `BufferEncoding`. + function execFile( + file: string, + options: ExecFileOptionsWithOtherEncoding, + callback: (error: ExecFileException | null, stdout: string | Buffer, stderr: string | Buffer) => void, + ): ChildProcess; + function execFile( + file: string, + args: ReadonlyArray | undefined | null, + options: ExecFileOptionsWithOtherEncoding, + callback: (error: ExecFileException | null, stdout: string | Buffer, stderr: string | Buffer) => void, + ): ChildProcess; + // `options` without an `encoding` means stdout/stderr are definitely `string`. + function execFile( + file: string, + options: ExecFileOptions, + callback: (error: ExecFileException | null, stdout: string, stderr: string) => void, + ): ChildProcess; + function execFile( + file: string, + args: ReadonlyArray | undefined | null, + options: ExecFileOptions, + callback: (error: ExecFileException | null, stdout: string, stderr: string) => void, + ): ChildProcess; + // fallback if nothing else matches. Worst case is always `string | Buffer`. + function execFile( + file: string, + options: (ObjectEncodingOptions & ExecFileOptions) | undefined | null, + callback: + | ((error: ExecFileException | null, stdout: string | Buffer, stderr: string | Buffer) => void) + | undefined + | null, + ): ChildProcess; + function execFile( + file: string, + args: ReadonlyArray | undefined | null, + options: (ObjectEncodingOptions & ExecFileOptions) | undefined | null, + callback: + | ((error: ExecFileException | null, stdout: string | Buffer, stderr: string | Buffer) => void) + | undefined + | null, + ): ChildProcess; + namespace execFile { + function __promisify__(file: string): PromiseWithChild<{ + stdout: string; + stderr: string; + }>; + function __promisify__( + file: string, + args: ReadonlyArray | undefined | null, + ): PromiseWithChild<{ + stdout: string; + stderr: string; + }>; + function __promisify__( + file: string, + options: ExecFileOptionsWithBufferEncoding, + ): PromiseWithChild<{ + stdout: Buffer; + stderr: Buffer; + }>; + function __promisify__( + file: string, + args: ReadonlyArray | undefined | null, + options: ExecFileOptionsWithBufferEncoding, + ): PromiseWithChild<{ + stdout: Buffer; + stderr: Buffer; + }>; + function __promisify__( + file: string, + options: ExecFileOptionsWithStringEncoding, + ): PromiseWithChild<{ + stdout: string; + stderr: string; + }>; + function __promisify__( + file: string, + args: ReadonlyArray | undefined | null, + options: ExecFileOptionsWithStringEncoding, + ): PromiseWithChild<{ + stdout: string; + stderr: string; + }>; + function __promisify__( + file: string, + options: ExecFileOptionsWithOtherEncoding, + ): PromiseWithChild<{ + stdout: string | Buffer; + stderr: string | Buffer; + }>; + function __promisify__( + file: string, + args: ReadonlyArray | undefined | null, + options: ExecFileOptionsWithOtherEncoding, + ): PromiseWithChild<{ + stdout: string | Buffer; + stderr: string | Buffer; + }>; + function __promisify__( + file: string, + options: ExecFileOptions, + ): PromiseWithChild<{ + stdout: string; + stderr: string; + }>; + function __promisify__( + file: string, + args: ReadonlyArray | undefined | null, + options: ExecFileOptions, + ): PromiseWithChild<{ + stdout: string; + stderr: string; + }>; + function __promisify__( + file: string, + options: (ObjectEncodingOptions & ExecFileOptions) | undefined | null, + ): PromiseWithChild<{ + stdout: string | Buffer; + stderr: string | Buffer; + }>; + function __promisify__( + file: string, + args: ReadonlyArray | undefined | null, + options: (ObjectEncodingOptions & ExecFileOptions) | undefined | null, + ): PromiseWithChild<{ + stdout: string | Buffer; + stderr: string | Buffer; + }>; + } + interface ForkOptions extends ProcessEnvOptions, MessagingOptions, Abortable { + execPath?: string | undefined; + execArgv?: string[] | undefined; + silent?: boolean | undefined; + /** + * Can be set to 'pipe', 'inherit', 'overlapped', or 'ignore', or an array of these strings. + * If passed as an array, the first element is used for `stdin`, the second for + * `stdout`, and the third for `stderr`. A fourth element can be used to + * specify the `stdio` behavior beyond the standard streams. See + * {@link ChildProcess.stdio} for more information. + * + * @default 'pipe' + */ + stdio?: StdioOptions | undefined; + detached?: boolean | undefined; + windowsVerbatimArguments?: boolean | undefined; + } + /** + * The `child_process.fork()` method is a special case of {@link spawn} used specifically to spawn new Node.js processes. + * Like {@link spawn}, a `ChildProcess` object is returned. The + * returned `ChildProcess` will have an additional communication channel + * built-in that allows messages to be passed back and forth between the parent and + * child. See `subprocess.send()` for details. + * + * Keep in mind that spawned Node.js child processes are + * independent of the parent with exception of the IPC communication channel + * that is established between the two. Each process has its own memory, with + * their own V8 instances. Because of the additional resource allocations + * required, spawning a large number of child Node.js processes is not + * recommended. + * + * By default, `child_process.fork()` will spawn new Node.js instances using the `process.execPath` of the parent process. The `execPath` property in the`options` object allows for an alternative + * execution path to be used. + * + * Node.js processes launched with a custom `execPath` will communicate with the + * parent process using the file descriptor (fd) identified using the + * environment variable `NODE_CHANNEL_FD` on the child process. + * + * Unlike the [`fork(2)`](http://man7.org/linux/man-pages/man2/fork.2.html) POSIX system call, `child_process.fork()` does not clone the + * current process. + * + * The `shell` option available in {@link spawn} is not supported by`child_process.fork()` and will be ignored if set. + * + * If the `signal` option is enabled, calling `.abort()` on the corresponding`AbortController` is similar to calling `.kill()` on the child process except + * the error passed to the callback will be an `AbortError`: + * + * ```js + * if (process.argv[2] === 'child') { + * setTimeout(() => { + * console.log(`Hello from ${process.argv[2]}!`); + * }, 1_000); + * } else { + * const { fork } = require('node:child_process'); + * const controller = new AbortController(); + * const { signal } = controller; + * const child = fork(__filename, ['child'], { signal }); + * child.on('error', (err) => { + * // This will be called with err being an AbortError if the controller aborts + * }); + * controller.abort(); // Stops the child process + * } + * ``` + * @since v0.5.0 + * @param modulePath The module to run in the child. + * @param args List of string arguments. + */ + function fork(modulePath: string, options?: ForkOptions): ChildProcess; + function fork(modulePath: string, args?: ReadonlyArray, options?: ForkOptions): ChildProcess; + interface SpawnSyncOptions extends CommonSpawnOptions { + input?: string | NodeJS.ArrayBufferView | undefined; + maxBuffer?: number | undefined; + encoding?: BufferEncoding | "buffer" | null | undefined; + } + interface SpawnSyncOptionsWithStringEncoding extends SpawnSyncOptions { + encoding: BufferEncoding; + } + interface SpawnSyncOptionsWithBufferEncoding extends SpawnSyncOptions { + encoding?: "buffer" | null | undefined; + } + interface SpawnSyncReturns { + pid: number; + output: Array; + stdout: T; + stderr: T; + status: number | null; + signal: NodeJS.Signals | null; + error?: Error | undefined; + } + /** + * The `child_process.spawnSync()` method is generally identical to {@link spawn} with the exception that the function will not return + * until the child process has fully closed. When a timeout has been encountered + * and `killSignal` is sent, the method won't return until the process has + * completely exited. If the process intercepts and handles the `SIGTERM` signal + * and doesn't exit, the parent process will wait until the child process has + * exited. + * + * **If the `shell` option is enabled, do not pass unsanitized user input to this** + * **function. Any input containing shell metacharacters may be used to trigger** + * **arbitrary command execution.** + * @since v0.11.12 + * @param command The command to run. + * @param args List of string arguments. + */ + function spawnSync(command: string): SpawnSyncReturns; + function spawnSync(command: string, options: SpawnSyncOptionsWithStringEncoding): SpawnSyncReturns; + function spawnSync(command: string, options: SpawnSyncOptionsWithBufferEncoding): SpawnSyncReturns; + function spawnSync(command: string, options?: SpawnSyncOptions): SpawnSyncReturns; + function spawnSync(command: string, args: ReadonlyArray): SpawnSyncReturns; + function spawnSync( + command: string, + args: ReadonlyArray, + options: SpawnSyncOptionsWithStringEncoding, + ): SpawnSyncReturns; + function spawnSync( + command: string, + args: ReadonlyArray, + options: SpawnSyncOptionsWithBufferEncoding, + ): SpawnSyncReturns; + function spawnSync( + command: string, + args?: ReadonlyArray, + options?: SpawnSyncOptions, + ): SpawnSyncReturns; + interface CommonExecOptions extends CommonOptions { + input?: string | NodeJS.ArrayBufferView | undefined; + /** + * Can be set to 'pipe', 'inherit, or 'ignore', or an array of these strings. + * If passed as an array, the first element is used for `stdin`, the second for + * `stdout`, and the third for `stderr`. A fourth element can be used to + * specify the `stdio` behavior beyond the standard streams. See + * {@link ChildProcess.stdio} for more information. + * + * @default 'pipe' + */ + stdio?: StdioOptions | undefined; + killSignal?: NodeJS.Signals | number | undefined; + maxBuffer?: number | undefined; + encoding?: BufferEncoding | "buffer" | null | undefined; + } + interface ExecSyncOptions extends CommonExecOptions { + shell?: string | undefined; + } + interface ExecSyncOptionsWithStringEncoding extends ExecSyncOptions { + encoding: BufferEncoding; + } + interface ExecSyncOptionsWithBufferEncoding extends ExecSyncOptions { + encoding?: "buffer" | null | undefined; + } + /** + * The `child_process.execSync()` method is generally identical to {@link exec} with the exception that the method will not return + * until the child process has fully closed. When a timeout has been encountered + * and `killSignal` is sent, the method won't return until the process has + * completely exited. If the child process intercepts and handles the `SIGTERM`signal and doesn't exit, the parent process will wait until the child process + * has exited. + * + * If the process times out or has a non-zero exit code, this method will throw. + * The `Error` object will contain the entire result from {@link spawnSync}. + * + * **Never pass unsanitized user input to this function. Any input containing shell** + * **metacharacters may be used to trigger arbitrary command execution.** + * @since v0.11.12 + * @param command The command to run. + * @return The stdout from the command. + */ + function execSync(command: string): Buffer; + function execSync(command: string, options: ExecSyncOptionsWithStringEncoding): string; + function execSync(command: string, options: ExecSyncOptionsWithBufferEncoding): Buffer; + function execSync(command: string, options?: ExecSyncOptions): string | Buffer; + interface ExecFileSyncOptions extends CommonExecOptions { + shell?: boolean | string | undefined; + } + interface ExecFileSyncOptionsWithStringEncoding extends ExecFileSyncOptions { + encoding: BufferEncoding; + } + interface ExecFileSyncOptionsWithBufferEncoding extends ExecFileSyncOptions { + encoding?: "buffer" | null; // specify `null`. + } + /** + * The `child_process.execFileSync()` method is generally identical to {@link execFile} with the exception that the method will not + * return until the child process has fully closed. When a timeout has been + * encountered and `killSignal` is sent, the method won't return until the process + * has completely exited. + * + * If the child process intercepts and handles the `SIGTERM` signal and + * does not exit, the parent process will still wait until the child process has + * exited. + * + * If the process times out or has a non-zero exit code, this method will throw an `Error` that will include the full result of the underlying {@link spawnSync}. + * + * **If the `shell` option is enabled, do not pass unsanitized user input to this** + * **function. Any input containing shell metacharacters may be used to trigger** + * **arbitrary command execution.** + * @since v0.11.12 + * @param file The name or path of the executable file to run. + * @param args List of string arguments. + * @return The stdout from the command. + */ + function execFileSync(file: string): Buffer; + function execFileSync(file: string, options: ExecFileSyncOptionsWithStringEncoding): string; + function execFileSync(file: string, options: ExecFileSyncOptionsWithBufferEncoding): Buffer; + function execFileSync(file: string, options?: ExecFileSyncOptions): string | Buffer; + function execFileSync(file: string, args: ReadonlyArray): Buffer; + function execFileSync( + file: string, + args: ReadonlyArray, + options: ExecFileSyncOptionsWithStringEncoding, + ): string; + function execFileSync( + file: string, + args: ReadonlyArray, + options: ExecFileSyncOptionsWithBufferEncoding, + ): Buffer; + function execFileSync(file: string, args?: ReadonlyArray, options?: ExecFileSyncOptions): string | Buffer; +} +declare module "node:child_process" { + export * from "child_process"; +} diff --git a/Url-Shortner/node_modules/@types/node/ts4.8/cluster.d.ts b/Url-Shortner/node_modules/@types/node/ts4.8/cluster.d.ts new file mode 100644 index 0000000..39cd56a --- /dev/null +++ b/Url-Shortner/node_modules/@types/node/ts4.8/cluster.d.ts @@ -0,0 +1,432 @@ +/** + * Clusters of Node.js processes can be used to run multiple instances of Node.js + * that can distribute workloads among their application threads. When process + * isolation is not needed, use the `worker_threads` module instead, which + * allows running multiple application threads within a single Node.js instance. + * + * The cluster module allows easy creation of child processes that all share + * server ports. + * + * ```js + * import cluster from 'node:cluster'; + * import http from 'node:http'; + * import { availableParallelism } from 'node:os'; + * import process from 'node:process'; + * + * const numCPUs = availableParallelism(); + * + * if (cluster.isPrimary) { + * console.log(`Primary ${process.pid} is running`); + * + * // Fork workers. + * for (let i = 0; i < numCPUs; i++) { + * cluster.fork(); + * } + * + * cluster.on('exit', (worker, code, signal) => { + * console.log(`worker ${worker.process.pid} died`); + * }); + * } else { + * // Workers can share any TCP connection + * // In this case it is an HTTP server + * http.createServer((req, res) => { + * res.writeHead(200); + * res.end('hello world\n'); + * }).listen(8000); + * + * console.log(`Worker ${process.pid} started`); + * } + * ``` + * + * Running Node.js will now share port 8000 between the workers: + * + * ```console + * $ node server.js + * Primary 3596 is running + * Worker 4324 started + * Worker 4520 started + * Worker 6056 started + * Worker 5644 started + * ``` + * + * On Windows, it is not yet possible to set up a named pipe server in a worker. + * @see [source](https://github.com/nodejs/node/blob/v20.2.0/lib/cluster.js) + */ +declare module "cluster" { + import * as child from "node:child_process"; + import EventEmitter = require("node:events"); + import * as net from "node:net"; + type SerializationType = "json" | "advanced"; + export interface ClusterSettings { + execArgv?: string[] | undefined; // default: process.execArgv + exec?: string | undefined; + args?: string[] | undefined; + silent?: boolean | undefined; + stdio?: any[] | undefined; + uid?: number | undefined; + gid?: number | undefined; + inspectPort?: number | (() => number) | undefined; + serialization?: SerializationType | undefined; + cwd?: string | undefined; + windowsHide?: boolean | undefined; + } + export interface Address { + address: string; + port: number; + addressType: number | "udp4" | "udp6"; // 4, 6, -1, "udp4", "udp6" + } + /** + * A `Worker` object contains all public information and method about a worker. + * In the primary it can be obtained using `cluster.workers`. In a worker + * it can be obtained using `cluster.worker`. + * @since v0.7.0 + */ + export class Worker extends EventEmitter { + /** + * Each new worker is given its own unique id, this id is stored in the`id`. + * + * While a worker is alive, this is the key that indexes it in`cluster.workers`. + * @since v0.8.0 + */ + id: number; + /** + * All workers are created using `child_process.fork()`, the returned object + * from this function is stored as `.process`. In a worker, the global `process`is stored. + * + * See: `Child Process module`. + * + * Workers will call `process.exit(0)` if the `'disconnect'` event occurs + * on `process` and `.exitedAfterDisconnect` is not `true`. This protects against + * accidental disconnection. + * @since v0.7.0 + */ + process: child.ChildProcess; + /** + * Send a message to a worker or primary, optionally with a handle. + * + * In the primary, this sends a message to a specific worker. It is identical to `ChildProcess.send()`. + * + * In a worker, this sends a message to the primary. It is identical to`process.send()`. + * + * This example will echo back all messages from the primary: + * + * ```js + * if (cluster.isPrimary) { + * const worker = cluster.fork(); + * worker.send('hi there'); + * + * } else if (cluster.isWorker) { + * process.on('message', (msg) => { + * process.send(msg); + * }); + * } + * ``` + * @since v0.7.0 + * @param options The `options` argument, if present, is an object used to parameterize the sending of certain types of handles. `options` supports the following properties: + */ + send(message: child.Serializable, callback?: (error: Error | null) => void): boolean; + send( + message: child.Serializable, + sendHandle: child.SendHandle, + callback?: (error: Error | null) => void, + ): boolean; + send( + message: child.Serializable, + sendHandle: child.SendHandle, + options?: child.MessageOptions, + callback?: (error: Error | null) => void, + ): boolean; + /** + * This function will kill the worker. In the primary worker, it does this by + * disconnecting the `worker.process`, and once disconnected, killing with`signal`. In the worker, it does it by killing the process with `signal`. + * + * The `kill()` function kills the worker process without waiting for a graceful + * disconnect, it has the same behavior as `worker.process.kill()`. + * + * This method is aliased as `worker.destroy()` for backwards compatibility. + * + * In a worker, `process.kill()` exists, but it is not this function; + * it is `kill()`. + * @since v0.9.12 + * @param [signal='SIGTERM'] Name of the kill signal to send to the worker process. + */ + kill(signal?: string): void; + destroy(signal?: string): void; + /** + * In a worker, this function will close all servers, wait for the `'close'` event + * on those servers, and then disconnect the IPC channel. + * + * In the primary, an internal message is sent to the worker causing it to call`.disconnect()` on itself. + * + * Causes `.exitedAfterDisconnect` to be set. + * + * After a server is closed, it will no longer accept new connections, + * but connections may be accepted by any other listening worker. Existing + * connections will be allowed to close as usual. When no more connections exist, + * see `server.close()`, the IPC channel to the worker will close allowing it + * to die gracefully. + * + * The above applies _only_ to server connections, client connections are not + * automatically closed by workers, and disconnect does not wait for them to close + * before exiting. + * + * In a worker, `process.disconnect` exists, but it is not this function; + * it is `disconnect()`. + * + * Because long living server connections may block workers from disconnecting, it + * may be useful to send a message, so application specific actions may be taken to + * close them. It also may be useful to implement a timeout, killing a worker if + * the `'disconnect'` event has not been emitted after some time. + * + * ```js + * if (cluster.isPrimary) { + * const worker = cluster.fork(); + * let timeout; + * + * worker.on('listening', (address) => { + * worker.send('shutdown'); + * worker.disconnect(); + * timeout = setTimeout(() => { + * worker.kill(); + * }, 2000); + * }); + * + * worker.on('disconnect', () => { + * clearTimeout(timeout); + * }); + * + * } else if (cluster.isWorker) { + * const net = require('node:net'); + * const server = net.createServer((socket) => { + * // Connections never end + * }); + * + * server.listen(8000); + * + * process.on('message', (msg) => { + * if (msg === 'shutdown') { + * // Initiate graceful close of any connections to server + * } + * }); + * } + * ``` + * @since v0.7.7 + * @return A reference to `worker`. + */ + disconnect(): void; + /** + * This function returns `true` if the worker is connected to its primary via its + * IPC channel, `false` otherwise. A worker is connected to its primary after it + * has been created. It is disconnected after the `'disconnect'` event is emitted. + * @since v0.11.14 + */ + isConnected(): boolean; + /** + * This function returns `true` if the worker's process has terminated (either + * because of exiting or being signaled). Otherwise, it returns `false`. + * + * ```js + * import cluster from 'node:cluster'; + * import http from 'node:http'; + * import { availableParallelism } from 'node:os'; + * import process from 'node:process'; + * + * const numCPUs = availableParallelism(); + * + * if (cluster.isPrimary) { + * console.log(`Primary ${process.pid} is running`); + * + * // Fork workers. + * for (let i = 0; i < numCPUs; i++) { + * cluster.fork(); + * } + * + * cluster.on('fork', (worker) => { + * console.log('worker is dead:', worker.isDead()); + * }); + * + * cluster.on('exit', (worker, code, signal) => { + * console.log('worker is dead:', worker.isDead()); + * }); + * } else { + * // Workers can share any TCP connection. In this case, it is an HTTP server. + * http.createServer((req, res) => { + * res.writeHead(200); + * res.end(`Current process\n ${process.pid}`); + * process.kill(process.pid); + * }).listen(8000); + * } + * ``` + * @since v0.11.14 + */ + isDead(): boolean; + /** + * This property is `true` if the worker exited due to `.disconnect()`. + * If the worker exited any other way, it is `false`. If the + * worker has not exited, it is `undefined`. + * + * The boolean `worker.exitedAfterDisconnect` allows distinguishing between + * voluntary and accidental exit, the primary may choose not to respawn a worker + * based on this value. + * + * ```js + * cluster.on('exit', (worker, code, signal) => { + * if (worker.exitedAfterDisconnect === true) { + * console.log('Oh, it was just voluntary – no need to worry'); + * } + * }); + * + * // kill worker + * worker.kill(); + * ``` + * @since v6.0.0 + */ + exitedAfterDisconnect: boolean; + /** + * events.EventEmitter + * 1. disconnect + * 2. error + * 3. exit + * 4. listening + * 5. message + * 6. online + */ + addListener(event: string, listener: (...args: any[]) => void): this; + addListener(event: "disconnect", listener: () => void): this; + addListener(event: "error", listener: (error: Error) => void): this; + addListener(event: "exit", listener: (code: number, signal: string) => void): this; + addListener(event: "listening", listener: (address: Address) => void): this; + addListener(event: "message", listener: (message: any, handle: net.Socket | net.Server) => void): this; // the handle is a net.Socket or net.Server object, or undefined. + addListener(event: "online", listener: () => void): this; + emit(event: string | symbol, ...args: any[]): boolean; + emit(event: "disconnect"): boolean; + emit(event: "error", error: Error): boolean; + emit(event: "exit", code: number, signal: string): boolean; + emit(event: "listening", address: Address): boolean; + emit(event: "message", message: any, handle: net.Socket | net.Server): boolean; + emit(event: "online"): boolean; + on(event: string, listener: (...args: any[]) => void): this; + on(event: "disconnect", listener: () => void): this; + on(event: "error", listener: (error: Error) => void): this; + on(event: "exit", listener: (code: number, signal: string) => void): this; + on(event: "listening", listener: (address: Address) => void): this; + on(event: "message", listener: (message: any, handle: net.Socket | net.Server) => void): this; // the handle is a net.Socket or net.Server object, or undefined. + on(event: "online", listener: () => void): this; + once(event: string, listener: (...args: any[]) => void): this; + once(event: "disconnect", listener: () => void): this; + once(event: "error", listener: (error: Error) => void): this; + once(event: "exit", listener: (code: number, signal: string) => void): this; + once(event: "listening", listener: (address: Address) => void): this; + once(event: "message", listener: (message: any, handle: net.Socket | net.Server) => void): this; // the handle is a net.Socket or net.Server object, or undefined. + once(event: "online", listener: () => void): this; + prependListener(event: string, listener: (...args: any[]) => void): this; + prependListener(event: "disconnect", listener: () => void): this; + prependListener(event: "error", listener: (error: Error) => void): this; + prependListener(event: "exit", listener: (code: number, signal: string) => void): this; + prependListener(event: "listening", listener: (address: Address) => void): this; + prependListener(event: "message", listener: (message: any, handle: net.Socket | net.Server) => void): this; // the handle is a net.Socket or net.Server object, or undefined. + prependListener(event: "online", listener: () => void): this; + prependOnceListener(event: string, listener: (...args: any[]) => void): this; + prependOnceListener(event: "disconnect", listener: () => void): this; + prependOnceListener(event: "error", listener: (error: Error) => void): this; + prependOnceListener(event: "exit", listener: (code: number, signal: string) => void): this; + prependOnceListener(event: "listening", listener: (address: Address) => void): this; + prependOnceListener(event: "message", listener: (message: any, handle: net.Socket | net.Server) => void): this; // the handle is a net.Socket or net.Server object, or undefined. + prependOnceListener(event: "online", listener: () => void): this; + } + export interface Cluster extends EventEmitter { + disconnect(callback?: () => void): void; + fork(env?: any): Worker; + /** @deprecated since v16.0.0 - use isPrimary. */ + readonly isMaster: boolean; + readonly isPrimary: boolean; + readonly isWorker: boolean; + schedulingPolicy: number; + readonly settings: ClusterSettings; + /** @deprecated since v16.0.0 - use setupPrimary. */ + setupMaster(settings?: ClusterSettings): void; + /** + * `setupPrimary` is used to change the default 'fork' behavior. Once called, the settings will be present in cluster.settings. + */ + setupPrimary(settings?: ClusterSettings): void; + readonly worker?: Worker | undefined; + readonly workers?: NodeJS.Dict | undefined; + readonly SCHED_NONE: number; + readonly SCHED_RR: number; + /** + * events.EventEmitter + * 1. disconnect + * 2. exit + * 3. fork + * 4. listening + * 5. message + * 6. online + * 7. setup + */ + addListener(event: string, listener: (...args: any[]) => void): this; + addListener(event: "disconnect", listener: (worker: Worker) => void): this; + addListener(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): this; + addListener(event: "fork", listener: (worker: Worker) => void): this; + addListener(event: "listening", listener: (worker: Worker, address: Address) => void): this; + addListener( + event: "message", + listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void, + ): this; // the handle is a net.Socket or net.Server object, or undefined. + addListener(event: "online", listener: (worker: Worker) => void): this; + addListener(event: "setup", listener: (settings: ClusterSettings) => void): this; + emit(event: string | symbol, ...args: any[]): boolean; + emit(event: "disconnect", worker: Worker): boolean; + emit(event: "exit", worker: Worker, code: number, signal: string): boolean; + emit(event: "fork", worker: Worker): boolean; + emit(event: "listening", worker: Worker, address: Address): boolean; + emit(event: "message", worker: Worker, message: any, handle: net.Socket | net.Server): boolean; + emit(event: "online", worker: Worker): boolean; + emit(event: "setup", settings: ClusterSettings): boolean; + on(event: string, listener: (...args: any[]) => void): this; + on(event: "disconnect", listener: (worker: Worker) => void): this; + on(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): this; + on(event: "fork", listener: (worker: Worker) => void): this; + on(event: "listening", listener: (worker: Worker, address: Address) => void): this; + on(event: "message", listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void): this; // the handle is a net.Socket or net.Server object, or undefined. + on(event: "online", listener: (worker: Worker) => void): this; + on(event: "setup", listener: (settings: ClusterSettings) => void): this; + once(event: string, listener: (...args: any[]) => void): this; + once(event: "disconnect", listener: (worker: Worker) => void): this; + once(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): this; + once(event: "fork", listener: (worker: Worker) => void): this; + once(event: "listening", listener: (worker: Worker, address: Address) => void): this; + once(event: "message", listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void): this; // the handle is a net.Socket or net.Server object, or undefined. + once(event: "online", listener: (worker: Worker) => void): this; + once(event: "setup", listener: (settings: ClusterSettings) => void): this; + prependListener(event: string, listener: (...args: any[]) => void): this; + prependListener(event: "disconnect", listener: (worker: Worker) => void): this; + prependListener(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): this; + prependListener(event: "fork", listener: (worker: Worker) => void): this; + prependListener(event: "listening", listener: (worker: Worker, address: Address) => void): this; + // the handle is a net.Socket or net.Server object, or undefined. + prependListener( + event: "message", + listener: (worker: Worker, message: any, handle?: net.Socket | net.Server) => void, + ): this; + prependListener(event: "online", listener: (worker: Worker) => void): this; + prependListener(event: "setup", listener: (settings: ClusterSettings) => void): this; + prependOnceListener(event: string, listener: (...args: any[]) => void): this; + prependOnceListener(event: "disconnect", listener: (worker: Worker) => void): this; + prependOnceListener(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): this; + prependOnceListener(event: "fork", listener: (worker: Worker) => void): this; + prependOnceListener(event: "listening", listener: (worker: Worker, address: Address) => void): this; + // the handle is a net.Socket or net.Server object, or undefined. + prependOnceListener( + event: "message", + listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void, + ): this; + prependOnceListener(event: "online", listener: (worker: Worker) => void): this; + prependOnceListener(event: "setup", listener: (settings: ClusterSettings) => void): this; + } + const cluster: Cluster; + export default cluster; +} +declare module "node:cluster" { + export * from "cluster"; + export { default as default } from "cluster"; +} diff --git a/Url-Shortner/node_modules/@types/node/ts4.8/console.d.ts b/Url-Shortner/node_modules/@types/node/ts4.8/console.d.ts new file mode 100644 index 0000000..a7edcaf --- /dev/null +++ b/Url-Shortner/node_modules/@types/node/ts4.8/console.d.ts @@ -0,0 +1,412 @@ +/** + * The `node:console` module provides a simple debugging console that is similar to + * the JavaScript console mechanism provided by web browsers. + * + * The module exports two specific components: + * + * * A `Console` class with methods such as `console.log()`, `console.error()`, and`console.warn()` that can be used to write to any Node.js stream. + * * A global `console` instance configured to write to `process.stdout` and `process.stderr`. The global `console` can be used without calling`require('node:console')`. + * + * _**Warning**_: The global console object's methods are neither consistently + * synchronous like the browser APIs they resemble, nor are they consistently + * asynchronous like all other Node.js streams. See the `note on process I/O` for + * more information. + * + * Example using the global `console`: + * + * ```js + * console.log('hello world'); + * // Prints: hello world, to stdout + * console.log('hello %s', 'world'); + * // Prints: hello world, to stdout + * console.error(new Error('Whoops, something bad happened')); + * // Prints error message and stack trace to stderr: + * // Error: Whoops, something bad happened + * // at [eval]:5:15 + * // at Script.runInThisContext (node:vm:132:18) + * // at Object.runInThisContext (node:vm:309:38) + * // at node:internal/process/execution:77:19 + * // at [eval]-wrapper:6:22 + * // at evalScript (node:internal/process/execution:76:60) + * // at node:internal/main/eval_string:23:3 + * + * const name = 'Will Robinson'; + * console.warn(`Danger ${name}! Danger!`); + * // Prints: Danger Will Robinson! Danger!, to stderr + * ``` + * + * Example using the `Console` class: + * + * ```js + * const out = getStreamSomehow(); + * const err = getStreamSomehow(); + * const myConsole = new console.Console(out, err); + * + * myConsole.log('hello world'); + * // Prints: hello world, to out + * myConsole.log('hello %s', 'world'); + * // Prints: hello world, to out + * myConsole.error(new Error('Whoops, something bad happened')); + * // Prints: [Error: Whoops, something bad happened], to err + * + * const name = 'Will Robinson'; + * myConsole.warn(`Danger ${name}! Danger!`); + * // Prints: Danger Will Robinson! Danger!, to err + * ``` + * @see [source](https://github.com/nodejs/node/blob/v20.2.0/lib/console.js) + */ +declare module "console" { + import console = require("node:console"); + export = console; +} +declare module "node:console" { + import { InspectOptions } from "node:util"; + global { + // This needs to be global to avoid TS2403 in case lib.dom.d.ts is present in the same build + interface Console { + Console: console.ConsoleConstructor; + /** + * `console.assert()` writes a message if `value` is [falsy](https://developer.mozilla.org/en-US/docs/Glossary/Falsy) or omitted. It only + * writes a message and does not otherwise affect execution. The output always + * starts with `"Assertion failed"`. If provided, `message` is formatted using `util.format()`. + * + * If `value` is [truthy](https://developer.mozilla.org/en-US/docs/Glossary/Truthy), nothing happens. + * + * ```js + * console.assert(true, 'does nothing'); + * + * console.assert(false, 'Whoops %s work', 'didn\'t'); + * // Assertion failed: Whoops didn't work + * + * console.assert(); + * // Assertion failed + * ``` + * @since v0.1.101 + * @param value The value tested for being truthy. + * @param message All arguments besides `value` are used as error message. + */ + assert(value: any, message?: string, ...optionalParams: any[]): void; + /** + * When `stdout` is a TTY, calling `console.clear()` will attempt to clear the + * TTY. When `stdout` is not a TTY, this method does nothing. + * + * The specific operation of `console.clear()` can vary across operating systems + * and terminal types. For most Linux operating systems, `console.clear()`operates similarly to the `clear` shell command. On Windows, `console.clear()`will clear only the output in the + * current terminal viewport for the Node.js + * binary. + * @since v8.3.0 + */ + clear(): void; + /** + * Maintains an internal counter specific to `label` and outputs to `stdout` the + * number of times `console.count()` has been called with the given `label`. + * + * ```js + * > console.count() + * default: 1 + * undefined + * > console.count('default') + * default: 2 + * undefined + * > console.count('abc') + * abc: 1 + * undefined + * > console.count('xyz') + * xyz: 1 + * undefined + * > console.count('abc') + * abc: 2 + * undefined + * > console.count() + * default: 3 + * undefined + * > + * ``` + * @since v8.3.0 + * @param label The display label for the counter. + */ + count(label?: string): void; + /** + * Resets the internal counter specific to `label`. + * + * ```js + * > console.count('abc'); + * abc: 1 + * undefined + * > console.countReset('abc'); + * undefined + * > console.count('abc'); + * abc: 1 + * undefined + * > + * ``` + * @since v8.3.0 + * @param label The display label for the counter. + */ + countReset(label?: string): void; + /** + * The `console.debug()` function is an alias for {@link log}. + * @since v8.0.0 + */ + debug(message?: any, ...optionalParams: any[]): void; + /** + * Uses `util.inspect()` on `obj` and prints the resulting string to `stdout`. + * This function bypasses any custom `inspect()` function defined on `obj`. + * @since v0.1.101 + */ + dir(obj: any, options?: InspectOptions): void; + /** + * This method calls `console.log()` passing it the arguments received. + * This method does not produce any XML formatting. + * @since v8.0.0 + */ + dirxml(...data: any[]): void; + /** + * Prints to `stderr` with newline. Multiple arguments can be passed, with the + * first used as the primary message and all additional used as substitution + * values similar to [`printf(3)`](http://man7.org/linux/man-pages/man3/printf.3.html) (the arguments are all passed to `util.format()`). + * + * ```js + * const code = 5; + * console.error('error #%d', code); + * // Prints: error #5, to stderr + * console.error('error', code); + * // Prints: error 5, to stderr + * ``` + * + * If formatting elements (e.g. `%d`) are not found in the first string then `util.inspect()` is called on each argument and the resulting string + * values are concatenated. See `util.format()` for more information. + * @since v0.1.100 + */ + error(message?: any, ...optionalParams: any[]): void; + /** + * Increases indentation of subsequent lines by spaces for `groupIndentation`length. + * + * If one or more `label`s are provided, those are printed first without the + * additional indentation. + * @since v8.5.0 + */ + group(...label: any[]): void; + /** + * An alias for {@link group}. + * @since v8.5.0 + */ + groupCollapsed(...label: any[]): void; + /** + * Decreases indentation of subsequent lines by spaces for `groupIndentation`length. + * @since v8.5.0 + */ + groupEnd(): void; + /** + * The `console.info()` function is an alias for {@link log}. + * @since v0.1.100 + */ + info(message?: any, ...optionalParams: any[]): void; + /** + * Prints to `stdout` with newline. Multiple arguments can be passed, with the + * first used as the primary message and all additional used as substitution + * values similar to [`printf(3)`](http://man7.org/linux/man-pages/man3/printf.3.html) (the arguments are all passed to `util.format()`). + * + * ```js + * const count = 5; + * console.log('count: %d', count); + * // Prints: count: 5, to stdout + * console.log('count:', count); + * // Prints: count: 5, to stdout + * ``` + * + * See `util.format()` for more information. + * @since v0.1.100 + */ + log(message?: any, ...optionalParams: any[]): void; + /** + * Try to construct a table with the columns of the properties of `tabularData`(or use `properties`) and rows of `tabularData` and log it. Falls back to just + * logging the argument if it can’t be parsed as tabular. + * + * ```js + * // These can't be parsed as tabular data + * console.table(Symbol()); + * // Symbol() + * + * console.table(undefined); + * // undefined + * + * console.table([{ a: 1, b: 'Y' }, { a: 'Z', b: 2 }]); + * // ┌─────────┬─────┬─────┐ + * // │ (index) │ a │ b │ + * // ├─────────┼─────┼─────┤ + * // │ 0 │ 1 │ 'Y' │ + * // │ 1 │ 'Z' │ 2 │ + * // └─────────┴─────┴─────┘ + * + * console.table([{ a: 1, b: 'Y' }, { a: 'Z', b: 2 }], ['a']); + * // ┌─────────┬─────┐ + * // │ (index) │ a │ + * // ├─────────┼─────┤ + * // │ 0 │ 1 │ + * // │ 1 │ 'Z' │ + * // └─────────┴─────┘ + * ``` + * @since v10.0.0 + * @param properties Alternate properties for constructing the table. + */ + table(tabularData: any, properties?: ReadonlyArray): void; + /** + * Starts a timer that can be used to compute the duration of an operation. Timers + * are identified by a unique `label`. Use the same `label` when calling {@link timeEnd} to stop the timer and output the elapsed time in + * suitable time units to `stdout`. For example, if the elapsed + * time is 3869ms, `console.timeEnd()` displays "3.869s". + * @since v0.1.104 + */ + time(label?: string): void; + /** + * Stops a timer that was previously started by calling {@link time} and + * prints the result to `stdout`: + * + * ```js + * console.time('100-elements'); + * for (let i = 0; i < 100; i++) {} + * console.timeEnd('100-elements'); + * // prints 100-elements: 225.438ms + * ``` + * @since v0.1.104 + */ + timeEnd(label?: string): void; + /** + * For a timer that was previously started by calling {@link time}, prints + * the elapsed time and other `data` arguments to `stdout`: + * + * ```js + * console.time('process'); + * const value = expensiveProcess1(); // Returns 42 + * console.timeLog('process', value); + * // Prints "process: 365.227ms 42". + * doExpensiveProcess2(value); + * console.timeEnd('process'); + * ``` + * @since v10.7.0 + */ + timeLog(label?: string, ...data: any[]): void; + /** + * Prints to `stderr` the string `'Trace: '`, followed by the `util.format()` formatted message and stack trace to the current position in the code. + * + * ```js + * console.trace('Show me'); + * // Prints: (stack trace will vary based on where trace is called) + * // Trace: Show me + * // at repl:2:9 + * // at REPLServer.defaultEval (repl.js:248:27) + * // at bound (domain.js:287:14) + * // at REPLServer.runBound [as eval] (domain.js:300:12) + * // at REPLServer. (repl.js:412:12) + * // at emitOne (events.js:82:20) + * // at REPLServer.emit (events.js:169:7) + * // at REPLServer.Interface._onLine (readline.js:210:10) + * // at REPLServer.Interface._line (readline.js:549:8) + * // at REPLServer.Interface._ttyWrite (readline.js:826:14) + * ``` + * @since v0.1.104 + */ + trace(message?: any, ...optionalParams: any[]): void; + /** + * The `console.warn()` function is an alias for {@link error}. + * @since v0.1.100 + */ + warn(message?: any, ...optionalParams: any[]): void; + // --- Inspector mode only --- + /** + * This method does not display anything unless used in the inspector. + * Starts a JavaScript CPU profile with an optional label. + */ + profile(label?: string): void; + /** + * This method does not display anything unless used in the inspector. + * Stops the current JavaScript CPU profiling session if one has been started and prints the report to the Profiles panel of the inspector. + */ + profileEnd(label?: string): void; + /** + * This method does not display anything unless used in the inspector. + * Adds an event with the label `label` to the Timeline panel of the inspector. + */ + timeStamp(label?: string): void; + } + /** + * The `console` module provides a simple debugging console that is similar to the + * JavaScript console mechanism provided by web browsers. + * + * The module exports two specific components: + * + * * A `Console` class with methods such as `console.log()`, `console.error()` and`console.warn()` that can be used to write to any Node.js stream. + * * A global `console` instance configured to write to `process.stdout` and `process.stderr`. The global `console` can be used without calling`require('console')`. + * + * _**Warning**_: The global console object's methods are neither consistently + * synchronous like the browser APIs they resemble, nor are they consistently + * asynchronous like all other Node.js streams. See the `note on process I/O` for + * more information. + * + * Example using the global `console`: + * + * ```js + * console.log('hello world'); + * // Prints: hello world, to stdout + * console.log('hello %s', 'world'); + * // Prints: hello world, to stdout + * console.error(new Error('Whoops, something bad happened')); + * // Prints error message and stack trace to stderr: + * // Error: Whoops, something bad happened + * // at [eval]:5:15 + * // at Script.runInThisContext (node:vm:132:18) + * // at Object.runInThisContext (node:vm:309:38) + * // at node:internal/process/execution:77:19 + * // at [eval]-wrapper:6:22 + * // at evalScript (node:internal/process/execution:76:60) + * // at node:internal/main/eval_string:23:3 + * + * const name = 'Will Robinson'; + * console.warn(`Danger ${name}! Danger!`); + * // Prints: Danger Will Robinson! Danger!, to stderr + * ``` + * + * Example using the `Console` class: + * + * ```js + * const out = getStreamSomehow(); + * const err = getStreamSomehow(); + * const myConsole = new console.Console(out, err); + * + * myConsole.log('hello world'); + * // Prints: hello world, to out + * myConsole.log('hello %s', 'world'); + * // Prints: hello world, to out + * myConsole.error(new Error('Whoops, something bad happened')); + * // Prints: [Error: Whoops, something bad happened], to err + * + * const name = 'Will Robinson'; + * myConsole.warn(`Danger ${name}! Danger!`); + * // Prints: Danger Will Robinson! Danger!, to err + * ``` + * @see [source](https://github.com/nodejs/node/blob/v16.4.2/lib/console.js) + */ + namespace console { + interface ConsoleConstructorOptions { + stdout: NodeJS.WritableStream; + stderr?: NodeJS.WritableStream | undefined; + ignoreErrors?: boolean | undefined; + colorMode?: boolean | "auto" | undefined; + inspectOptions?: InspectOptions | undefined; + /** + * Set group indentation + * @default 2 + */ + groupIndentation?: number | undefined; + } + interface ConsoleConstructor { + prototype: Console; + new(stdout: NodeJS.WritableStream, stderr?: NodeJS.WritableStream, ignoreErrors?: boolean): Console; + new(options: ConsoleConstructorOptions): Console; + } + } + var console: Console; + } + export = globalThis.console; +} diff --git a/Url-Shortner/node_modules/@types/node/ts4.8/constants.d.ts b/Url-Shortner/node_modules/@types/node/ts4.8/constants.d.ts new file mode 100644 index 0000000..c3ac2b8 --- /dev/null +++ b/Url-Shortner/node_modules/@types/node/ts4.8/constants.d.ts @@ -0,0 +1,19 @@ +/** @deprecated since v6.3.0 - use constants property exposed by the relevant module instead. */ +declare module "constants" { + import { constants as osConstants, SignalConstants } from "node:os"; + import { constants as cryptoConstants } from "node:crypto"; + import { constants as fsConstants } from "node:fs"; + + const exp: + & typeof osConstants.errno + & typeof osConstants.priority + & SignalConstants + & typeof cryptoConstants + & typeof fsConstants; + export = exp; +} + +declare module "node:constants" { + import constants = require("constants"); + export = constants; +} diff --git a/Url-Shortner/node_modules/@types/node/ts4.8/crypto.d.ts b/Url-Shortner/node_modules/@types/node/ts4.8/crypto.d.ts new file mode 100644 index 0000000..f914b29 --- /dev/null +++ b/Url-Shortner/node_modules/@types/node/ts4.8/crypto.d.ts @@ -0,0 +1,4455 @@ +/** + * The `node:crypto` module provides cryptographic functionality that includes a + * set of wrappers for OpenSSL's hash, HMAC, cipher, decipher, sign, and verify + * functions. + * + * ```js + * const { createHmac } = await import('node:crypto'); + * + * const secret = 'abcdefg'; + * const hash = createHmac('sha256', secret) + * .update('I love cupcakes') + * .digest('hex'); + * console.log(hash); + * // Prints: + * // c0fa1bc00531bd78ef38c628449c5102aeabd49b5dc3a2a516ea6ea959d6658e + * ``` + * @see [source](https://github.com/nodejs/node/blob/v20.2.0/lib/crypto.js) + */ +declare module "crypto" { + import * as stream from "node:stream"; + import { PeerCertificate } from "node:tls"; + /** + * SPKAC is a Certificate Signing Request mechanism originally implemented by + * Netscape and was specified formally as part of HTML5's `keygen` element. + * + * `` is deprecated since [HTML 5.2](https://www.w3.org/TR/html52/changes.html#features-removed) and new projects + * should not use this element anymore. + * + * The `node:crypto` module provides the `Certificate` class for working with SPKAC + * data. The most common usage is handling output generated by the HTML5`` element. Node.js uses [OpenSSL's SPKAC + * implementation](https://www.openssl.org/docs/man3.0/man1/openssl-spkac.html) internally. + * @since v0.11.8 + */ + class Certificate { + /** + * ```js + * const { Certificate } = await import('node:crypto'); + * const spkac = getSpkacSomehow(); + * const challenge = Certificate.exportChallenge(spkac); + * console.log(challenge.toString('utf8')); + * // Prints: the challenge as a UTF8 string + * ``` + * @since v9.0.0 + * @param encoding The `encoding` of the `spkac` string. + * @return The challenge component of the `spkac` data structure, which includes a public key and a challenge. + */ + static exportChallenge(spkac: BinaryLike): Buffer; + /** + * ```js + * const { Certificate } = await import('node:crypto'); + * const spkac = getSpkacSomehow(); + * const publicKey = Certificate.exportPublicKey(spkac); + * console.log(publicKey); + * // Prints: the public key as + * ``` + * @since v9.0.0 + * @param encoding The `encoding` of the `spkac` string. + * @return The public key component of the `spkac` data structure, which includes a public key and a challenge. + */ + static exportPublicKey(spkac: BinaryLike, encoding?: string): Buffer; + /** + * ```js + * import { Buffer } from 'node:buffer'; + * const { Certificate } = await import('node:crypto'); + * + * const spkac = getSpkacSomehow(); + * console.log(Certificate.verifySpkac(Buffer.from(spkac))); + * // Prints: true or false + * ``` + * @since v9.0.0 + * @param encoding The `encoding` of the `spkac` string. + * @return `true` if the given `spkac` data structure is valid, `false` otherwise. + */ + static verifySpkac(spkac: NodeJS.ArrayBufferView): boolean; + /** + * @deprecated + * @param spkac + * @returns The challenge component of the `spkac` data structure, + * which includes a public key and a challenge. + */ + exportChallenge(spkac: BinaryLike): Buffer; + /** + * @deprecated + * @param spkac + * @param encoding The encoding of the spkac string. + * @returns The public key component of the `spkac` data structure, + * which includes a public key and a challenge. + */ + exportPublicKey(spkac: BinaryLike, encoding?: string): Buffer; + /** + * @deprecated + * @param spkac + * @returns `true` if the given `spkac` data structure is valid, + * `false` otherwise. + */ + verifySpkac(spkac: NodeJS.ArrayBufferView): boolean; + } + namespace constants { + // https://nodejs.org/dist/latest-v20.x/docs/api/crypto.html#crypto-constants + const OPENSSL_VERSION_NUMBER: number; + /** Applies multiple bug workarounds within OpenSSL. See https://www.openssl.org/docs/man1.0.2/ssl/SSL_CTX_set_options.html for detail. */ + const SSL_OP_ALL: number; + /** Allows legacy insecure renegotiation between OpenSSL and unpatched clients or servers. See https://www.openssl.org/docs/man1.0.2/ssl/SSL_CTX_set_options.html. */ + const SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION: number; + /** Attempts to use the server's preferences instead of the client's when selecting a cipher. See https://www.openssl.org/docs/man1.0.2/ssl/SSL_CTX_set_options.html. */ + const SSL_OP_CIPHER_SERVER_PREFERENCE: number; + /** Instructs OpenSSL to use Cisco's "speshul" version of DTLS_BAD_VER. */ + const SSL_OP_CISCO_ANYCONNECT: number; + /** Instructs OpenSSL to turn on cookie exchange. */ + const SSL_OP_COOKIE_EXCHANGE: number; + /** Instructs OpenSSL to add server-hello extension from an early version of the cryptopro draft. */ + const SSL_OP_CRYPTOPRO_TLSEXT_BUG: number; + /** Instructs OpenSSL to disable a SSL 3.0/TLS 1.0 vulnerability workaround added in OpenSSL 0.9.6d. */ + const SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS: number; + /** Allows initial connection to servers that do not support RI. */ + const SSL_OP_LEGACY_SERVER_CONNECT: number; + /** Instructs OpenSSL to disable support for SSL/TLS compression. */ + const SSL_OP_NO_COMPRESSION: number; + const SSL_OP_NO_QUERY_MTU: number; + /** Instructs OpenSSL to always start a new session when performing renegotiation. */ + const SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION: number; + const SSL_OP_NO_SSLv2: number; + const SSL_OP_NO_SSLv3: number; + const SSL_OP_NO_TICKET: number; + const SSL_OP_NO_TLSv1: number; + const SSL_OP_NO_TLSv1_1: number; + const SSL_OP_NO_TLSv1_2: number; + /** Instructs OpenSSL to disable version rollback attack detection. */ + const SSL_OP_TLS_ROLLBACK_BUG: number; + const ENGINE_METHOD_RSA: number; + const ENGINE_METHOD_DSA: number; + const ENGINE_METHOD_DH: number; + const ENGINE_METHOD_RAND: number; + const ENGINE_METHOD_EC: number; + const ENGINE_METHOD_CIPHERS: number; + const ENGINE_METHOD_DIGESTS: number; + const ENGINE_METHOD_PKEY_METHS: number; + const ENGINE_METHOD_PKEY_ASN1_METHS: number; + const ENGINE_METHOD_ALL: number; + const ENGINE_METHOD_NONE: number; + const DH_CHECK_P_NOT_SAFE_PRIME: number; + const DH_CHECK_P_NOT_PRIME: number; + const DH_UNABLE_TO_CHECK_GENERATOR: number; + const DH_NOT_SUITABLE_GENERATOR: number; + const RSA_PKCS1_PADDING: number; + const RSA_SSLV23_PADDING: number; + const RSA_NO_PADDING: number; + const RSA_PKCS1_OAEP_PADDING: number; + const RSA_X931_PADDING: number; + const RSA_PKCS1_PSS_PADDING: number; + /** Sets the salt length for RSA_PKCS1_PSS_PADDING to the digest size when signing or verifying. */ + const RSA_PSS_SALTLEN_DIGEST: number; + /** Sets the salt length for RSA_PKCS1_PSS_PADDING to the maximum permissible value when signing data. */ + const RSA_PSS_SALTLEN_MAX_SIGN: number; + /** Causes the salt length for RSA_PKCS1_PSS_PADDING to be determined automatically when verifying a signature. */ + const RSA_PSS_SALTLEN_AUTO: number; + const POINT_CONVERSION_COMPRESSED: number; + const POINT_CONVERSION_UNCOMPRESSED: number; + const POINT_CONVERSION_HYBRID: number; + /** Specifies the built-in default cipher list used by Node.js (colon-separated values). */ + const defaultCoreCipherList: string; + /** Specifies the active default cipher list used by the current Node.js process (colon-separated values). */ + const defaultCipherList: string; + } + interface HashOptions extends stream.TransformOptions { + /** + * For XOF hash functions such as `shake256`, the + * outputLength option can be used to specify the desired output length in bytes. + */ + outputLength?: number | undefined; + } + /** @deprecated since v10.0.0 */ + const fips: boolean; + /** + * Creates and returns a `Hash` object that can be used to generate hash digests + * using the given `algorithm`. Optional `options` argument controls stream + * behavior. For XOF hash functions such as `'shake256'`, the `outputLength` option + * can be used to specify the desired output length in bytes. + * + * The `algorithm` is dependent on the available algorithms supported by the + * version of OpenSSL on the platform. Examples are `'sha256'`, `'sha512'`, etc. + * On recent releases of OpenSSL, `openssl list -digest-algorithms` will + * display the available digest algorithms. + * + * Example: generating the sha256 sum of a file + * + * ```js + * import { + * createReadStream, + * } from 'node:fs'; + * import { argv } from 'node:process'; + * const { + * createHash, + * } = await import('node:crypto'); + * + * const filename = argv[2]; + * + * const hash = createHash('sha256'); + * + * const input = createReadStream(filename); + * input.on('readable', () => { + * // Only one element is going to be produced by the + * // hash stream. + * const data = input.read(); + * if (data) + * hash.update(data); + * else { + * console.log(`${hash.digest('hex')} ${filename}`); + * } + * }); + * ``` + * @since v0.1.92 + * @param options `stream.transform` options + */ + function createHash(algorithm: string, options?: HashOptions): Hash; + /** + * Creates and returns an `Hmac` object that uses the given `algorithm` and `key`. + * Optional `options` argument controls stream behavior. + * + * The `algorithm` is dependent on the available algorithms supported by the + * version of OpenSSL on the platform. Examples are `'sha256'`, `'sha512'`, etc. + * On recent releases of OpenSSL, `openssl list -digest-algorithms` will + * display the available digest algorithms. + * + * The `key` is the HMAC key used to generate the cryptographic HMAC hash. If it is + * a `KeyObject`, its type must be `secret`. If it is a string, please consider `caveats when using strings as inputs to cryptographic APIs`. If it was + * obtained from a cryptographically secure source of entropy, such as {@link randomBytes} or {@link generateKey}, its length should not + * exceed the block size of `algorithm` (e.g., 512 bits for SHA-256). + * + * Example: generating the sha256 HMAC of a file + * + * ```js + * import { + * createReadStream, + * } from 'node:fs'; + * import { argv } from 'node:process'; + * const { + * createHmac, + * } = await import('node:crypto'); + * + * const filename = argv[2]; + * + * const hmac = createHmac('sha256', 'a secret'); + * + * const input = createReadStream(filename); + * input.on('readable', () => { + * // Only one element is going to be produced by the + * // hash stream. + * const data = input.read(); + * if (data) + * hmac.update(data); + * else { + * console.log(`${hmac.digest('hex')} ${filename}`); + * } + * }); + * ``` + * @since v0.1.94 + * @param options `stream.transform` options + */ + function createHmac(algorithm: string, key: BinaryLike | KeyObject, options?: stream.TransformOptions): Hmac; + // https://nodejs.org/api/buffer.html#buffer_buffers_and_character_encodings + type BinaryToTextEncoding = "base64" | "base64url" | "hex" | "binary"; + type CharacterEncoding = "utf8" | "utf-8" | "utf16le" | "latin1"; + type LegacyCharacterEncoding = "ascii" | "binary" | "ucs2" | "ucs-2"; + type Encoding = BinaryToTextEncoding | CharacterEncoding | LegacyCharacterEncoding; + type ECDHKeyFormat = "compressed" | "uncompressed" | "hybrid"; + /** + * The `Hash` class is a utility for creating hash digests of data. It can be + * used in one of two ways: + * + * * As a `stream` that is both readable and writable, where data is written + * to produce a computed hash digest on the readable side, or + * * Using the `hash.update()` and `hash.digest()` methods to produce the + * computed hash. + * + * The {@link createHash} method is used to create `Hash` instances. `Hash`objects are not to be created directly using the `new` keyword. + * + * Example: Using `Hash` objects as streams: + * + * ```js + * const { + * createHash, + * } = await import('node:crypto'); + * + * const hash = createHash('sha256'); + * + * hash.on('readable', () => { + * // Only one element is going to be produced by the + * // hash stream. + * const data = hash.read(); + * if (data) { + * console.log(data.toString('hex')); + * // Prints: + * // 6a2da20943931e9834fc12cfe5bb47bbd9ae43489a30726962b576f4e3993e50 + * } + * }); + * + * hash.write('some data to hash'); + * hash.end(); + * ``` + * + * Example: Using `Hash` and piped streams: + * + * ```js + * import { createReadStream } from 'node:fs'; + * import { stdout } from 'node:process'; + * const { createHash } = await import('node:crypto'); + * + * const hash = createHash('sha256'); + * + * const input = createReadStream('test.js'); + * input.pipe(hash).setEncoding('hex').pipe(stdout); + * ``` + * + * Example: Using the `hash.update()` and `hash.digest()` methods: + * + * ```js + * const { + * createHash, + * } = await import('node:crypto'); + * + * const hash = createHash('sha256'); + * + * hash.update('some data to hash'); + * console.log(hash.digest('hex')); + * // Prints: + * // 6a2da20943931e9834fc12cfe5bb47bbd9ae43489a30726962b576f4e3993e50 + * ``` + * @since v0.1.92 + */ + class Hash extends stream.Transform { + private constructor(); + /** + * Creates a new `Hash` object that contains a deep copy of the internal state + * of the current `Hash` object. + * + * The optional `options` argument controls stream behavior. For XOF hash + * functions such as `'shake256'`, the `outputLength` option can be used to + * specify the desired output length in bytes. + * + * An error is thrown when an attempt is made to copy the `Hash` object after + * its `hash.digest()` method has been called. + * + * ```js + * // Calculate a rolling hash. + * const { + * createHash, + * } = await import('node:crypto'); + * + * const hash = createHash('sha256'); + * + * hash.update('one'); + * console.log(hash.copy().digest('hex')); + * + * hash.update('two'); + * console.log(hash.copy().digest('hex')); + * + * hash.update('three'); + * console.log(hash.copy().digest('hex')); + * + * // Etc. + * ``` + * @since v13.1.0 + * @param options `stream.transform` options + */ + copy(options?: stream.TransformOptions): Hash; + /** + * Updates the hash content with the given `data`, the encoding of which + * is given in `inputEncoding`. + * If `encoding` is not provided, and the `data` is a string, an + * encoding of `'utf8'` is enforced. If `data` is a `Buffer`, `TypedArray`, or`DataView`, then `inputEncoding` is ignored. + * + * This can be called many times with new data as it is streamed. + * @since v0.1.92 + * @param inputEncoding The `encoding` of the `data` string. + */ + update(data: BinaryLike): Hash; + update(data: string, inputEncoding: Encoding): Hash; + /** + * Calculates the digest of all of the data passed to be hashed (using the `hash.update()` method). + * If `encoding` is provided a string will be returned; otherwise + * a `Buffer` is returned. + * + * The `Hash` object can not be used again after `hash.digest()` method has been + * called. Multiple calls will cause an error to be thrown. + * @since v0.1.92 + * @param encoding The `encoding` of the return value. + */ + digest(): Buffer; + digest(encoding: BinaryToTextEncoding): string; + } + /** + * The `Hmac` class is a utility for creating cryptographic HMAC digests. It can + * be used in one of two ways: + * + * * As a `stream` that is both readable and writable, where data is written + * to produce a computed HMAC digest on the readable side, or + * * Using the `hmac.update()` and `hmac.digest()` methods to produce the + * computed HMAC digest. + * + * The {@link createHmac} method is used to create `Hmac` instances. `Hmac`objects are not to be created directly using the `new` keyword. + * + * Example: Using `Hmac` objects as streams: + * + * ```js + * const { + * createHmac, + * } = await import('node:crypto'); + * + * const hmac = createHmac('sha256', 'a secret'); + * + * hmac.on('readable', () => { + * // Only one element is going to be produced by the + * // hash stream. + * const data = hmac.read(); + * if (data) { + * console.log(data.toString('hex')); + * // Prints: + * // 7fd04df92f636fd450bc841c9418e5825c17f33ad9c87c518115a45971f7f77e + * } + * }); + * + * hmac.write('some data to hash'); + * hmac.end(); + * ``` + * + * Example: Using `Hmac` and piped streams: + * + * ```js + * import { createReadStream } from 'node:fs'; + * import { stdout } from 'node:process'; + * const { + * createHmac, + * } = await import('node:crypto'); + * + * const hmac = createHmac('sha256', 'a secret'); + * + * const input = createReadStream('test.js'); + * input.pipe(hmac).pipe(stdout); + * ``` + * + * Example: Using the `hmac.update()` and `hmac.digest()` methods: + * + * ```js + * const { + * createHmac, + * } = await import('node:crypto'); + * + * const hmac = createHmac('sha256', 'a secret'); + * + * hmac.update('some data to hash'); + * console.log(hmac.digest('hex')); + * // Prints: + * // 7fd04df92f636fd450bc841c9418e5825c17f33ad9c87c518115a45971f7f77e + * ``` + * @since v0.1.94 + */ + class Hmac extends stream.Transform { + private constructor(); + /** + * Updates the `Hmac` content with the given `data`, the encoding of which + * is given in `inputEncoding`. + * If `encoding` is not provided, and the `data` is a string, an + * encoding of `'utf8'` is enforced. If `data` is a `Buffer`, `TypedArray`, or`DataView`, then `inputEncoding` is ignored. + * + * This can be called many times with new data as it is streamed. + * @since v0.1.94 + * @param inputEncoding The `encoding` of the `data` string. + */ + update(data: BinaryLike): Hmac; + update(data: string, inputEncoding: Encoding): Hmac; + /** + * Calculates the HMAC digest of all of the data passed using `hmac.update()`. + * If `encoding` is + * provided a string is returned; otherwise a `Buffer` is returned; + * + * The `Hmac` object can not be used again after `hmac.digest()` has been + * called. Multiple calls to `hmac.digest()` will result in an error being thrown. + * @since v0.1.94 + * @param encoding The `encoding` of the return value. + */ + digest(): Buffer; + digest(encoding: BinaryToTextEncoding): string; + } + type KeyObjectType = "secret" | "public" | "private"; + interface KeyExportOptions { + type: "pkcs1" | "spki" | "pkcs8" | "sec1"; + format: T; + cipher?: string | undefined; + passphrase?: string | Buffer | undefined; + } + interface JwkKeyExportOptions { + format: "jwk"; + } + interface JsonWebKey { + crv?: string | undefined; + d?: string | undefined; + dp?: string | undefined; + dq?: string | undefined; + e?: string | undefined; + k?: string | undefined; + kty?: string | undefined; + n?: string | undefined; + p?: string | undefined; + q?: string | undefined; + qi?: string | undefined; + x?: string | undefined; + y?: string | undefined; + [key: string]: unknown; + } + interface AsymmetricKeyDetails { + /** + * Key size in bits (RSA, DSA). + */ + modulusLength?: number | undefined; + /** + * Public exponent (RSA). + */ + publicExponent?: bigint | undefined; + /** + * Name of the message digest (RSA-PSS). + */ + hashAlgorithm?: string | undefined; + /** + * Name of the message digest used by MGF1 (RSA-PSS). + */ + mgf1HashAlgorithm?: string | undefined; + /** + * Minimal salt length in bytes (RSA-PSS). + */ + saltLength?: number | undefined; + /** + * Size of q in bits (DSA). + */ + divisorLength?: number | undefined; + /** + * Name of the curve (EC). + */ + namedCurve?: string | undefined; + } + /** + * Node.js uses a `KeyObject` class to represent a symmetric or asymmetric key, + * and each kind of key exposes different functions. The {@link createSecretKey}, {@link createPublicKey} and {@link createPrivateKey} methods are used to create `KeyObject`instances. `KeyObject` + * objects are not to be created directly using the `new`keyword. + * + * Most applications should consider using the new `KeyObject` API instead of + * passing keys as strings or `Buffer`s due to improved security features. + * + * `KeyObject` instances can be passed to other threads via `postMessage()`. + * The receiver obtains a cloned `KeyObject`, and the `KeyObject` does not need to + * be listed in the `transferList` argument. + * @since v11.6.0 + */ + class KeyObject { + private constructor(); + /** + * Example: Converting a `CryptoKey` instance to a `KeyObject`: + * + * ```js + * const { KeyObject } = await import('node:crypto'); + * const { subtle } = globalThis.crypto; + * + * const key = await subtle.generateKey({ + * name: 'HMAC', + * hash: 'SHA-256', + * length: 256, + * }, true, ['sign', 'verify']); + * + * const keyObject = KeyObject.from(key); + * console.log(keyObject.symmetricKeySize); + * // Prints: 32 (symmetric key size in bytes) + * ``` + * @since v15.0.0 + */ + static from(key: webcrypto.CryptoKey): KeyObject; + /** + * For asymmetric keys, this property represents the type of the key. Supported key + * types are: + * + * * `'rsa'` (OID 1.2.840.113549.1.1.1) + * * `'rsa-pss'` (OID 1.2.840.113549.1.1.10) + * * `'dsa'` (OID 1.2.840.10040.4.1) + * * `'ec'` (OID 1.2.840.10045.2.1) + * * `'x25519'` (OID 1.3.101.110) + * * `'x448'` (OID 1.3.101.111) + * * `'ed25519'` (OID 1.3.101.112) + * * `'ed448'` (OID 1.3.101.113) + * * `'dh'` (OID 1.2.840.113549.1.3.1) + * + * This property is `undefined` for unrecognized `KeyObject` types and symmetric + * keys. + * @since v11.6.0 + */ + asymmetricKeyType?: KeyType | undefined; + /** + * For asymmetric keys, this property represents the size of the embedded key in + * bytes. This property is `undefined` for symmetric keys. + */ + asymmetricKeySize?: number | undefined; + /** + * This property exists only on asymmetric keys. Depending on the type of the key, + * this object contains information about the key. None of the information obtained + * through this property can be used to uniquely identify a key or to compromise + * the security of the key. + * + * For RSA-PSS keys, if the key material contains a `RSASSA-PSS-params` sequence, + * the `hashAlgorithm`, `mgf1HashAlgorithm`, and `saltLength` properties will be + * set. + * + * Other key details might be exposed via this API using additional attributes. + * @since v15.7.0 + */ + asymmetricKeyDetails?: AsymmetricKeyDetails | undefined; + /** + * For symmetric keys, the following encoding options can be used: + * + * For public keys, the following encoding options can be used: + * + * For private keys, the following encoding options can be used: + * + * The result type depends on the selected encoding format, when PEM the + * result is a string, when DER it will be a buffer containing the data + * encoded as DER, when [JWK](https://tools.ietf.org/html/rfc7517) it will be an object. + * + * When [JWK](https://tools.ietf.org/html/rfc7517) encoding format was selected, all other encoding options are + * ignored. + * + * PKCS#1, SEC1, and PKCS#8 type keys can be encrypted by using a combination of + * the `cipher` and `format` options. The PKCS#8 `type` can be used with any`format` to encrypt any key algorithm (RSA, EC, or DH) by specifying a`cipher`. PKCS#1 and SEC1 can only be + * encrypted by specifying a `cipher`when the PEM `format` is used. For maximum compatibility, use PKCS#8 for + * encrypted private keys. Since PKCS#8 defines its own + * encryption mechanism, PEM-level encryption is not supported when encrypting + * a PKCS#8 key. See [RFC 5208](https://www.rfc-editor.org/rfc/rfc5208.txt) for PKCS#8 encryption and [RFC 1421](https://www.rfc-editor.org/rfc/rfc1421.txt) for + * PKCS#1 and SEC1 encryption. + * @since v11.6.0 + */ + export(options: KeyExportOptions<"pem">): string | Buffer; + export(options?: KeyExportOptions<"der">): Buffer; + export(options?: JwkKeyExportOptions): JsonWebKey; + /** + * For secret keys, this property represents the size of the key in bytes. This + * property is `undefined` for asymmetric keys. + * @since v11.6.0 + */ + symmetricKeySize?: number | undefined; + /** + * Depending on the type of this `KeyObject`, this property is either`'secret'` for secret (symmetric) keys, `'public'` for public (asymmetric) keys + * or `'private'` for private (asymmetric) keys. + * @since v11.6.0 + */ + type: KeyObjectType; + } + type CipherCCMTypes = "aes-128-ccm" | "aes-192-ccm" | "aes-256-ccm" | "chacha20-poly1305"; + type CipherGCMTypes = "aes-128-gcm" | "aes-192-gcm" | "aes-256-gcm"; + type CipherOCBTypes = "aes-128-ocb" | "aes-192-ocb" | "aes-256-ocb"; + type BinaryLike = string | NodeJS.ArrayBufferView; + type CipherKey = BinaryLike | KeyObject; + interface CipherCCMOptions extends stream.TransformOptions { + authTagLength: number; + } + interface CipherGCMOptions extends stream.TransformOptions { + authTagLength?: number | undefined; + } + interface CipherOCBOptions extends stream.TransformOptions { + authTagLength: number; + } + /** + * Creates and returns a `Cipher` object that uses the given `algorithm` and`password`. + * + * The `options` argument controls stream behavior and is optional except when a + * cipher in CCM or OCB mode (e.g. `'aes-128-ccm'`) is used. In that case, the`authTagLength` option is required and specifies the length of the + * authentication tag in bytes, see `CCM mode`. In GCM mode, the `authTagLength`option is not required but can be used to set the length of the authentication + * tag that will be returned by `getAuthTag()` and defaults to 16 bytes. + * For `chacha20-poly1305`, the `authTagLength` option defaults to 16 bytes. + * + * The `algorithm` is dependent on OpenSSL, examples are `'aes192'`, etc. On + * recent OpenSSL releases, `openssl list -cipher-algorithms` will + * display the available cipher algorithms. + * + * The `password` is used to derive the cipher key and initialization vector (IV). + * The value must be either a `'latin1'` encoded string, a `Buffer`, a`TypedArray`, or a `DataView`. + * + * **This function is semantically insecure for all** + * **supported ciphers and fatally flawed for ciphers in counter mode (such as CTR,** + * **GCM, or CCM).** + * + * The implementation of `crypto.createCipher()` derives keys using the OpenSSL + * function [`EVP_BytesToKey`](https://www.openssl.org/docs/man3.0/man3/EVP_BytesToKey.html) with the digest algorithm set to MD5, one + * iteration, and no salt. The lack of salt allows dictionary attacks as the same + * password always creates the same key. The low iteration count and + * non-cryptographically secure hash algorithm allow passwords to be tested very + * rapidly. + * + * In line with OpenSSL's recommendation to use a more modern algorithm instead of [`EVP_BytesToKey`](https://www.openssl.org/docs/man3.0/man3/EVP_BytesToKey.html) it is recommended that + * developers derive a key and IV on + * their own using {@link scrypt} and to use {@link createCipheriv} to create the `Cipher` object. Users should not use ciphers with counter mode + * (e.g. CTR, GCM, or CCM) in `crypto.createCipher()`. A warning is emitted when + * they are used in order to avoid the risk of IV reuse that causes + * vulnerabilities. For the case when IV is reused in GCM, see [Nonce-Disrespecting Adversaries](https://github.com/nonce-disrespect/nonce-disrespect) for details. + * @since v0.1.94 + * @deprecated Since v10.0.0 - Use {@link createCipheriv} instead. + * @param options `stream.transform` options + */ + function createCipher(algorithm: CipherCCMTypes, password: BinaryLike, options: CipherCCMOptions): CipherCCM; + /** @deprecated since v10.0.0 use `createCipheriv()` */ + function createCipher(algorithm: CipherGCMTypes, password: BinaryLike, options?: CipherGCMOptions): CipherGCM; + /** @deprecated since v10.0.0 use `createCipheriv()` */ + function createCipher(algorithm: string, password: BinaryLike, options?: stream.TransformOptions): Cipher; + /** + * Creates and returns a `Cipher` object, with the given `algorithm`, `key` and + * initialization vector (`iv`). + * + * The `options` argument controls stream behavior and is optional except when a + * cipher in CCM or OCB mode (e.g. `'aes-128-ccm'`) is used. In that case, the`authTagLength` option is required and specifies the length of the + * authentication tag in bytes, see `CCM mode`. In GCM mode, the `authTagLength`option is not required but can be used to set the length of the authentication + * tag that will be returned by `getAuthTag()` and defaults to 16 bytes. + * For `chacha20-poly1305`, the `authTagLength` option defaults to 16 bytes. + * + * The `algorithm` is dependent on OpenSSL, examples are `'aes192'`, etc. On + * recent OpenSSL releases, `openssl list -cipher-algorithms` will + * display the available cipher algorithms. + * + * The `key` is the raw key used by the `algorithm` and `iv` is an [initialization vector](https://en.wikipedia.org/wiki/Initialization_vector). Both arguments must be `'utf8'` encoded + * strings,`Buffers`, `TypedArray`, or `DataView`s. The `key` may optionally be + * a `KeyObject` of type `secret`. If the cipher does not need + * an initialization vector, `iv` may be `null`. + * + * When passing strings for `key` or `iv`, please consider `caveats when using strings as inputs to cryptographic APIs`. + * + * Initialization vectors should be unpredictable and unique; ideally, they will be + * cryptographically random. They do not have to be secret: IVs are typically just + * added to ciphertext messages unencrypted. It may sound contradictory that + * something has to be unpredictable and unique, but does not have to be secret; + * remember that an attacker must not be able to predict ahead of time what a + * given IV will be. + * @since v0.1.94 + * @param options `stream.transform` options + */ + function createCipheriv( + algorithm: CipherCCMTypes, + key: CipherKey, + iv: BinaryLike, + options: CipherCCMOptions, + ): CipherCCM; + function createCipheriv( + algorithm: CipherOCBTypes, + key: CipherKey, + iv: BinaryLike, + options: CipherOCBOptions, + ): CipherOCB; + function createCipheriv( + algorithm: CipherGCMTypes, + key: CipherKey, + iv: BinaryLike, + options?: CipherGCMOptions, + ): CipherGCM; + function createCipheriv( + algorithm: string, + key: CipherKey, + iv: BinaryLike | null, + options?: stream.TransformOptions, + ): Cipher; + /** + * Instances of the `Cipher` class are used to encrypt data. The class can be + * used in one of two ways: + * + * * As a `stream` that is both readable and writable, where plain unencrypted + * data is written to produce encrypted data on the readable side, or + * * Using the `cipher.update()` and `cipher.final()` methods to produce + * the encrypted data. + * + * The {@link createCipher} or {@link createCipheriv} methods are + * used to create `Cipher` instances. `Cipher` objects are not to be created + * directly using the `new` keyword. + * + * Example: Using `Cipher` objects as streams: + * + * ```js + * const { + * scrypt, + * randomFill, + * createCipheriv, + * } = await import('node:crypto'); + * + * const algorithm = 'aes-192-cbc'; + * const password = 'Password used to generate key'; + * + * // First, we'll generate the key. The key length is dependent on the algorithm. + * // In this case for aes192, it is 24 bytes (192 bits). + * scrypt(password, 'salt', 24, (err, key) => { + * if (err) throw err; + * // Then, we'll generate a random initialization vector + * randomFill(new Uint8Array(16), (err, iv) => { + * if (err) throw err; + * + * // Once we have the key and iv, we can create and use the cipher... + * const cipher = createCipheriv(algorithm, key, iv); + * + * let encrypted = ''; + * cipher.setEncoding('hex'); + * + * cipher.on('data', (chunk) => encrypted += chunk); + * cipher.on('end', () => console.log(encrypted)); + * + * cipher.write('some clear text data'); + * cipher.end(); + * }); + * }); + * ``` + * + * Example: Using `Cipher` and piped streams: + * + * ```js + * import { + * createReadStream, + * createWriteStream, + * } from 'node:fs'; + * + * import { + * pipeline, + * } from 'node:stream'; + * + * const { + * scrypt, + * randomFill, + * createCipheriv, + * } = await import('node:crypto'); + * + * const algorithm = 'aes-192-cbc'; + * const password = 'Password used to generate key'; + * + * // First, we'll generate the key. The key length is dependent on the algorithm. + * // In this case for aes192, it is 24 bytes (192 bits). + * scrypt(password, 'salt', 24, (err, key) => { + * if (err) throw err; + * // Then, we'll generate a random initialization vector + * randomFill(new Uint8Array(16), (err, iv) => { + * if (err) throw err; + * + * const cipher = createCipheriv(algorithm, key, iv); + * + * const input = createReadStream('test.js'); + * const output = createWriteStream('test.enc'); + * + * pipeline(input, cipher, output, (err) => { + * if (err) throw err; + * }); + * }); + * }); + * ``` + * + * Example: Using the `cipher.update()` and `cipher.final()` methods: + * + * ```js + * const { + * scrypt, + * randomFill, + * createCipheriv, + * } = await import('node:crypto'); + * + * const algorithm = 'aes-192-cbc'; + * const password = 'Password used to generate key'; + * + * // First, we'll generate the key. The key length is dependent on the algorithm. + * // In this case for aes192, it is 24 bytes (192 bits). + * scrypt(password, 'salt', 24, (err, key) => { + * if (err) throw err; + * // Then, we'll generate a random initialization vector + * randomFill(new Uint8Array(16), (err, iv) => { + * if (err) throw err; + * + * const cipher = createCipheriv(algorithm, key, iv); + * + * let encrypted = cipher.update('some clear text data', 'utf8', 'hex'); + * encrypted += cipher.final('hex'); + * console.log(encrypted); + * }); + * }); + * ``` + * @since v0.1.94 + */ + class Cipher extends stream.Transform { + private constructor(); + /** + * Updates the cipher with `data`. If the `inputEncoding` argument is given, + * the `data`argument is a string using the specified encoding. If the `inputEncoding`argument is not given, `data` must be a `Buffer`, `TypedArray`, or`DataView`. If `data` is a `Buffer`, + * `TypedArray`, or `DataView`, then`inputEncoding` is ignored. + * + * The `outputEncoding` specifies the output format of the enciphered + * data. If the `outputEncoding`is specified, a string using the specified encoding is returned. If no`outputEncoding` is provided, a `Buffer` is returned. + * + * The `cipher.update()` method can be called multiple times with new data until `cipher.final()` is called. Calling `cipher.update()` after `cipher.final()` will result in an error being + * thrown. + * @since v0.1.94 + * @param inputEncoding The `encoding` of the data. + * @param outputEncoding The `encoding` of the return value. + */ + update(data: BinaryLike): Buffer; + update(data: string, inputEncoding: Encoding): Buffer; + update(data: NodeJS.ArrayBufferView, inputEncoding: undefined, outputEncoding: Encoding): string; + update(data: string, inputEncoding: Encoding | undefined, outputEncoding: Encoding): string; + /** + * Once the `cipher.final()` method has been called, the `Cipher` object can no + * longer be used to encrypt data. Attempts to call `cipher.final()` more than + * once will result in an error being thrown. + * @since v0.1.94 + * @param outputEncoding The `encoding` of the return value. + * @return Any remaining enciphered contents. If `outputEncoding` is specified, a string is returned. If an `outputEncoding` is not provided, a {@link Buffer} is returned. + */ + final(): Buffer; + final(outputEncoding: BufferEncoding): string; + /** + * When using block encryption algorithms, the `Cipher` class will automatically + * add padding to the input data to the appropriate block size. To disable the + * default padding call `cipher.setAutoPadding(false)`. + * + * When `autoPadding` is `false`, the length of the entire input data must be a + * multiple of the cipher's block size or `cipher.final()` will throw an error. + * Disabling automatic padding is useful for non-standard padding, for instance + * using `0x0` instead of PKCS padding. + * + * The `cipher.setAutoPadding()` method must be called before `cipher.final()`. + * @since v0.7.1 + * @param [autoPadding=true] + * @return for method chaining. + */ + setAutoPadding(autoPadding?: boolean): this; + } + interface CipherCCM extends Cipher { + setAAD( + buffer: NodeJS.ArrayBufferView, + options: { + plaintextLength: number; + }, + ): this; + getAuthTag(): Buffer; + } + interface CipherGCM extends Cipher { + setAAD( + buffer: NodeJS.ArrayBufferView, + options?: { + plaintextLength: number; + }, + ): this; + getAuthTag(): Buffer; + } + interface CipherOCB extends Cipher { + setAAD( + buffer: NodeJS.ArrayBufferView, + options?: { + plaintextLength: number; + }, + ): this; + getAuthTag(): Buffer; + } + /** + * Creates and returns a `Decipher` object that uses the given `algorithm` and`password` (key). + * + * The `options` argument controls stream behavior and is optional except when a + * cipher in CCM or OCB mode (e.g. `'aes-128-ccm'`) is used. In that case, the`authTagLength` option is required and specifies the length of the + * authentication tag in bytes, see `CCM mode`. + * For `chacha20-poly1305`, the `authTagLength` option defaults to 16 bytes. + * + * **This function is semantically insecure for all** + * **supported ciphers and fatally flawed for ciphers in counter mode (such as CTR,** + * **GCM, or CCM).** + * + * The implementation of `crypto.createDecipher()` derives keys using the OpenSSL + * function [`EVP_BytesToKey`](https://www.openssl.org/docs/man3.0/man3/EVP_BytesToKey.html) with the digest algorithm set to MD5, one + * iteration, and no salt. The lack of salt allows dictionary attacks as the same + * password always creates the same key. The low iteration count and + * non-cryptographically secure hash algorithm allow passwords to be tested very + * rapidly. + * + * In line with OpenSSL's recommendation to use a more modern algorithm instead of [`EVP_BytesToKey`](https://www.openssl.org/docs/man3.0/man3/EVP_BytesToKey.html) it is recommended that + * developers derive a key and IV on + * their own using {@link scrypt} and to use {@link createDecipheriv} to create the `Decipher` object. + * @since v0.1.94 + * @deprecated Since v10.0.0 - Use {@link createDecipheriv} instead. + * @param options `stream.transform` options + */ + function createDecipher(algorithm: CipherCCMTypes, password: BinaryLike, options: CipherCCMOptions): DecipherCCM; + /** @deprecated since v10.0.0 use `createDecipheriv()` */ + function createDecipher(algorithm: CipherGCMTypes, password: BinaryLike, options?: CipherGCMOptions): DecipherGCM; + /** @deprecated since v10.0.0 use `createDecipheriv()` */ + function createDecipher(algorithm: string, password: BinaryLike, options?: stream.TransformOptions): Decipher; + /** + * Creates and returns a `Decipher` object that uses the given `algorithm`, `key`and initialization vector (`iv`). + * + * The `options` argument controls stream behavior and is optional except when a + * cipher in CCM or OCB mode (e.g. `'aes-128-ccm'`) is used. In that case, the`authTagLength` option is required and specifies the length of the + * authentication tag in bytes, see `CCM mode`. In GCM mode, the `authTagLength`option is not required but can be used to restrict accepted authentication tags + * to those with the specified length. + * For `chacha20-poly1305`, the `authTagLength` option defaults to 16 bytes. + * + * The `algorithm` is dependent on OpenSSL, examples are `'aes192'`, etc. On + * recent OpenSSL releases, `openssl list -cipher-algorithms` will + * display the available cipher algorithms. + * + * The `key` is the raw key used by the `algorithm` and `iv` is an [initialization vector](https://en.wikipedia.org/wiki/Initialization_vector). Both arguments must be `'utf8'` encoded + * strings,`Buffers`, `TypedArray`, or `DataView`s. The `key` may optionally be + * a `KeyObject` of type `secret`. If the cipher does not need + * an initialization vector, `iv` may be `null`. + * + * When passing strings for `key` or `iv`, please consider `caveats when using strings as inputs to cryptographic APIs`. + * + * Initialization vectors should be unpredictable and unique; ideally, they will be + * cryptographically random. They do not have to be secret: IVs are typically just + * added to ciphertext messages unencrypted. It may sound contradictory that + * something has to be unpredictable and unique, but does not have to be secret; + * remember that an attacker must not be able to predict ahead of time what a given + * IV will be. + * @since v0.1.94 + * @param options `stream.transform` options + */ + function createDecipheriv( + algorithm: CipherCCMTypes, + key: CipherKey, + iv: BinaryLike, + options: CipherCCMOptions, + ): DecipherCCM; + function createDecipheriv( + algorithm: CipherOCBTypes, + key: CipherKey, + iv: BinaryLike, + options: CipherOCBOptions, + ): DecipherOCB; + function createDecipheriv( + algorithm: CipherGCMTypes, + key: CipherKey, + iv: BinaryLike, + options?: CipherGCMOptions, + ): DecipherGCM; + function createDecipheriv( + algorithm: string, + key: CipherKey, + iv: BinaryLike | null, + options?: stream.TransformOptions, + ): Decipher; + /** + * Instances of the `Decipher` class are used to decrypt data. The class can be + * used in one of two ways: + * + * * As a `stream` that is both readable and writable, where plain encrypted + * data is written to produce unencrypted data on the readable side, or + * * Using the `decipher.update()` and `decipher.final()` methods to + * produce the unencrypted data. + * + * The {@link createDecipher} or {@link createDecipheriv} methods are + * used to create `Decipher` instances. `Decipher` objects are not to be created + * directly using the `new` keyword. + * + * Example: Using `Decipher` objects as streams: + * + * ```js + * import { Buffer } from 'node:buffer'; + * const { + * scryptSync, + * createDecipheriv, + * } = await import('node:crypto'); + * + * const algorithm = 'aes-192-cbc'; + * const password = 'Password used to generate key'; + * // Key length is dependent on the algorithm. In this case for aes192, it is + * // 24 bytes (192 bits). + * // Use the async `crypto.scrypt()` instead. + * const key = scryptSync(password, 'salt', 24); + * // The IV is usually passed along with the ciphertext. + * const iv = Buffer.alloc(16, 0); // Initialization vector. + * + * const decipher = createDecipheriv(algorithm, key, iv); + * + * let decrypted = ''; + * decipher.on('readable', () => { + * let chunk; + * while (null !== (chunk = decipher.read())) { + * decrypted += chunk.toString('utf8'); + * } + * }); + * decipher.on('end', () => { + * console.log(decrypted); + * // Prints: some clear text data + * }); + * + * // Encrypted with same algorithm, key and iv. + * const encrypted = + * 'e5f79c5915c02171eec6b212d5520d44480993d7d622a7c4c2da32f6efda0ffa'; + * decipher.write(encrypted, 'hex'); + * decipher.end(); + * ``` + * + * Example: Using `Decipher` and piped streams: + * + * ```js + * import { + * createReadStream, + * createWriteStream, + * } from 'node:fs'; + * import { Buffer } from 'node:buffer'; + * const { + * scryptSync, + * createDecipheriv, + * } = await import('node:crypto'); + * + * const algorithm = 'aes-192-cbc'; + * const password = 'Password used to generate key'; + * // Use the async `crypto.scrypt()` instead. + * const key = scryptSync(password, 'salt', 24); + * // The IV is usually passed along with the ciphertext. + * const iv = Buffer.alloc(16, 0); // Initialization vector. + * + * const decipher = createDecipheriv(algorithm, key, iv); + * + * const input = createReadStream('test.enc'); + * const output = createWriteStream('test.js'); + * + * input.pipe(decipher).pipe(output); + * ``` + * + * Example: Using the `decipher.update()` and `decipher.final()` methods: + * + * ```js + * import { Buffer } from 'node:buffer'; + * const { + * scryptSync, + * createDecipheriv, + * } = await import('node:crypto'); + * + * const algorithm = 'aes-192-cbc'; + * const password = 'Password used to generate key'; + * // Use the async `crypto.scrypt()` instead. + * const key = scryptSync(password, 'salt', 24); + * // The IV is usually passed along with the ciphertext. + * const iv = Buffer.alloc(16, 0); // Initialization vector. + * + * const decipher = createDecipheriv(algorithm, key, iv); + * + * // Encrypted using same algorithm, key and iv. + * const encrypted = + * 'e5f79c5915c02171eec6b212d5520d44480993d7d622a7c4c2da32f6efda0ffa'; + * let decrypted = decipher.update(encrypted, 'hex', 'utf8'); + * decrypted += decipher.final('utf8'); + * console.log(decrypted); + * // Prints: some clear text data + * ``` + * @since v0.1.94 + */ + class Decipher extends stream.Transform { + private constructor(); + /** + * Updates the decipher with `data`. If the `inputEncoding` argument is given, + * the `data`argument is a string using the specified encoding. If the `inputEncoding`argument is not given, `data` must be a `Buffer`. If `data` is a `Buffer` then `inputEncoding` is + * ignored. + * + * The `outputEncoding` specifies the output format of the enciphered + * data. If the `outputEncoding`is specified, a string using the specified encoding is returned. If no`outputEncoding` is provided, a `Buffer` is returned. + * + * The `decipher.update()` method can be called multiple times with new data until `decipher.final()` is called. Calling `decipher.update()` after `decipher.final()` will result in an error + * being thrown. + * @since v0.1.94 + * @param inputEncoding The `encoding` of the `data` string. + * @param outputEncoding The `encoding` of the return value. + */ + update(data: NodeJS.ArrayBufferView): Buffer; + update(data: string, inputEncoding: Encoding): Buffer; + update(data: NodeJS.ArrayBufferView, inputEncoding: undefined, outputEncoding: Encoding): string; + update(data: string, inputEncoding: Encoding | undefined, outputEncoding: Encoding): string; + /** + * Once the `decipher.final()` method has been called, the `Decipher` object can + * no longer be used to decrypt data. Attempts to call `decipher.final()` more + * than once will result in an error being thrown. + * @since v0.1.94 + * @param outputEncoding The `encoding` of the return value. + * @return Any remaining deciphered contents. If `outputEncoding` is specified, a string is returned. If an `outputEncoding` is not provided, a {@link Buffer} is returned. + */ + final(): Buffer; + final(outputEncoding: BufferEncoding): string; + /** + * When data has been encrypted without standard block padding, calling`decipher.setAutoPadding(false)` will disable automatic padding to prevent `decipher.final()` from checking for and + * removing padding. + * + * Turning auto padding off will only work if the input data's length is a + * multiple of the ciphers block size. + * + * The `decipher.setAutoPadding()` method must be called before `decipher.final()`. + * @since v0.7.1 + * @param [autoPadding=true] + * @return for method chaining. + */ + setAutoPadding(auto_padding?: boolean): this; + } + interface DecipherCCM extends Decipher { + setAuthTag(buffer: NodeJS.ArrayBufferView): this; + setAAD( + buffer: NodeJS.ArrayBufferView, + options: { + plaintextLength: number; + }, + ): this; + } + interface DecipherGCM extends Decipher { + setAuthTag(buffer: NodeJS.ArrayBufferView): this; + setAAD( + buffer: NodeJS.ArrayBufferView, + options?: { + plaintextLength: number; + }, + ): this; + } + interface DecipherOCB extends Decipher { + setAuthTag(buffer: NodeJS.ArrayBufferView): this; + setAAD( + buffer: NodeJS.ArrayBufferView, + options?: { + plaintextLength: number; + }, + ): this; + } + interface PrivateKeyInput { + key: string | Buffer; + format?: KeyFormat | undefined; + type?: "pkcs1" | "pkcs8" | "sec1" | undefined; + passphrase?: string | Buffer | undefined; + encoding?: string | undefined; + } + interface PublicKeyInput { + key: string | Buffer; + format?: KeyFormat | undefined; + type?: "pkcs1" | "spki" | undefined; + encoding?: string | undefined; + } + /** + * Asynchronously generates a new random secret key of the given `length`. The`type` will determine which validations will be performed on the `length`. + * + * ```js + * const { + * generateKey, + * } = await import('node:crypto'); + * + * generateKey('hmac', { length: 512 }, (err, key) => { + * if (err) throw err; + * console.log(key.export().toString('hex')); // 46e..........620 + * }); + * ``` + * + * The size of a generated HMAC key should not exceed the block size of the + * underlying hash function. See {@link createHmac} for more information. + * @since v15.0.0 + * @param type The intended use of the generated secret key. Currently accepted values are `'hmac'` and `'aes'`. + */ + function generateKey( + type: "hmac" | "aes", + options: { + length: number; + }, + callback: (err: Error | null, key: KeyObject) => void, + ): void; + /** + * Synchronously generates a new random secret key of the given `length`. The`type` will determine which validations will be performed on the `length`. + * + * ```js + * const { + * generateKeySync, + * } = await import('node:crypto'); + * + * const key = generateKeySync('hmac', { length: 512 }); + * console.log(key.export().toString('hex')); // e89..........41e + * ``` + * + * The size of a generated HMAC key should not exceed the block size of the + * underlying hash function. See {@link createHmac} for more information. + * @since v15.0.0 + * @param type The intended use of the generated secret key. Currently accepted values are `'hmac'` and `'aes'`. + */ + function generateKeySync( + type: "hmac" | "aes", + options: { + length: number; + }, + ): KeyObject; + interface JsonWebKeyInput { + key: JsonWebKey; + format: "jwk"; + } + /** + * Creates and returns a new key object containing a private key. If `key` is a + * string or `Buffer`, `format` is assumed to be `'pem'`; otherwise, `key`must be an object with the properties described above. + * + * If the private key is encrypted, a `passphrase` must be specified. The length + * of the passphrase is limited to 1024 bytes. + * @since v11.6.0 + */ + function createPrivateKey(key: PrivateKeyInput | string | Buffer | JsonWebKeyInput): KeyObject; + /** + * Creates and returns a new key object containing a public key. If `key` is a + * string or `Buffer`, `format` is assumed to be `'pem'`; if `key` is a `KeyObject`with type `'private'`, the public key is derived from the given private key; + * otherwise, `key` must be an object with the properties described above. + * + * If the format is `'pem'`, the `'key'` may also be an X.509 certificate. + * + * Because public keys can be derived from private keys, a private key may be + * passed instead of a public key. In that case, this function behaves as if {@link createPrivateKey} had been called, except that the type of the + * returned `KeyObject` will be `'public'` and that the private key cannot be + * extracted from the returned `KeyObject`. Similarly, if a `KeyObject` with type`'private'` is given, a new `KeyObject` with type `'public'` will be returned + * and it will be impossible to extract the private key from the returned object. + * @since v11.6.0 + */ + function createPublicKey(key: PublicKeyInput | string | Buffer | KeyObject | JsonWebKeyInput): KeyObject; + /** + * Creates and returns a new key object containing a secret key for symmetric + * encryption or `Hmac`. + * @since v11.6.0 + * @param encoding The string encoding when `key` is a string. + */ + function createSecretKey(key: NodeJS.ArrayBufferView): KeyObject; + function createSecretKey(key: string, encoding: BufferEncoding): KeyObject; + /** + * Creates and returns a `Sign` object that uses the given `algorithm`. Use {@link getHashes} to obtain the names of the available digest algorithms. + * Optional `options` argument controls the `stream.Writable` behavior. + * + * In some cases, a `Sign` instance can be created using the name of a signature + * algorithm, such as `'RSA-SHA256'`, instead of a digest algorithm. This will use + * the corresponding digest algorithm. This does not work for all signature + * algorithms, such as `'ecdsa-with-SHA256'`, so it is best to always use digest + * algorithm names. + * @since v0.1.92 + * @param options `stream.Writable` options + */ + function createSign(algorithm: string, options?: stream.WritableOptions): Sign; + type DSAEncoding = "der" | "ieee-p1363"; + interface SigningOptions { + /** + * @see crypto.constants.RSA_PKCS1_PADDING + */ + padding?: number | undefined; + saltLength?: number | undefined; + dsaEncoding?: DSAEncoding | undefined; + } + interface SignPrivateKeyInput extends PrivateKeyInput, SigningOptions {} + interface SignKeyObjectInput extends SigningOptions { + key: KeyObject; + } + interface VerifyPublicKeyInput extends PublicKeyInput, SigningOptions {} + interface VerifyKeyObjectInput extends SigningOptions { + key: KeyObject; + } + interface VerifyJsonWebKeyInput extends JsonWebKeyInput, SigningOptions {} + type KeyLike = string | Buffer | KeyObject; + /** + * The `Sign` class is a utility for generating signatures. It can be used in one + * of two ways: + * + * * As a writable `stream`, where data to be signed is written and the `sign.sign()` method is used to generate and return the signature, or + * * Using the `sign.update()` and `sign.sign()` methods to produce the + * signature. + * + * The {@link createSign} method is used to create `Sign` instances. The + * argument is the string name of the hash function to use. `Sign` objects are not + * to be created directly using the `new` keyword. + * + * Example: Using `Sign` and `Verify` objects as streams: + * + * ```js + * const { + * generateKeyPairSync, + * createSign, + * createVerify, + * } = await import('node:crypto'); + * + * const { privateKey, publicKey } = generateKeyPairSync('ec', { + * namedCurve: 'sect239k1', + * }); + * + * const sign = createSign('SHA256'); + * sign.write('some data to sign'); + * sign.end(); + * const signature = sign.sign(privateKey, 'hex'); + * + * const verify = createVerify('SHA256'); + * verify.write('some data to sign'); + * verify.end(); + * console.log(verify.verify(publicKey, signature, 'hex')); + * // Prints: true + * ``` + * + * Example: Using the `sign.update()` and `verify.update()` methods: + * + * ```js + * const { + * generateKeyPairSync, + * createSign, + * createVerify, + * } = await import('node:crypto'); + * + * const { privateKey, publicKey } = generateKeyPairSync('rsa', { + * modulusLength: 2048, + * }); + * + * const sign = createSign('SHA256'); + * sign.update('some data to sign'); + * sign.end(); + * const signature = sign.sign(privateKey); + * + * const verify = createVerify('SHA256'); + * verify.update('some data to sign'); + * verify.end(); + * console.log(verify.verify(publicKey, signature)); + * // Prints: true + * ``` + * @since v0.1.92 + */ + class Sign extends stream.Writable { + private constructor(); + /** + * Updates the `Sign` content with the given `data`, the encoding of which + * is given in `inputEncoding`. + * If `encoding` is not provided, and the `data` is a string, an + * encoding of `'utf8'` is enforced. If `data` is a `Buffer`, `TypedArray`, or`DataView`, then `inputEncoding` is ignored. + * + * This can be called many times with new data as it is streamed. + * @since v0.1.92 + * @param inputEncoding The `encoding` of the `data` string. + */ + update(data: BinaryLike): this; + update(data: string, inputEncoding: Encoding): this; + /** + * Calculates the signature on all the data passed through using either `sign.update()` or `sign.write()`. + * + * If `privateKey` is not a `KeyObject`, this function behaves as if`privateKey` had been passed to {@link createPrivateKey}. If it is an + * object, the following additional properties can be passed: + * + * If `outputEncoding` is provided a string is returned; otherwise a `Buffer` is returned. + * + * The `Sign` object can not be again used after `sign.sign()` method has been + * called. Multiple calls to `sign.sign()` will result in an error being thrown. + * @since v0.1.92 + */ + sign(privateKey: KeyLike | SignKeyObjectInput | SignPrivateKeyInput): Buffer; + sign( + privateKey: KeyLike | SignKeyObjectInput | SignPrivateKeyInput, + outputFormat: BinaryToTextEncoding, + ): string; + } + /** + * Creates and returns a `Verify` object that uses the given algorithm. + * Use {@link getHashes} to obtain an array of names of the available + * signing algorithms. Optional `options` argument controls the`stream.Writable` behavior. + * + * In some cases, a `Verify` instance can be created using the name of a signature + * algorithm, such as `'RSA-SHA256'`, instead of a digest algorithm. This will use + * the corresponding digest algorithm. This does not work for all signature + * algorithms, such as `'ecdsa-with-SHA256'`, so it is best to always use digest + * algorithm names. + * @since v0.1.92 + * @param options `stream.Writable` options + */ + function createVerify(algorithm: string, options?: stream.WritableOptions): Verify; + /** + * The `Verify` class is a utility for verifying signatures. It can be used in one + * of two ways: + * + * * As a writable `stream` where written data is used to validate against the + * supplied signature, or + * * Using the `verify.update()` and `verify.verify()` methods to verify + * the signature. + * + * The {@link createVerify} method is used to create `Verify` instances.`Verify` objects are not to be created directly using the `new` keyword. + * + * See `Sign` for examples. + * @since v0.1.92 + */ + class Verify extends stream.Writable { + private constructor(); + /** + * Updates the `Verify` content with the given `data`, the encoding of which + * is given in `inputEncoding`. + * If `inputEncoding` is not provided, and the `data` is a string, an + * encoding of `'utf8'` is enforced. If `data` is a `Buffer`, `TypedArray`, or`DataView`, then `inputEncoding` is ignored. + * + * This can be called many times with new data as it is streamed. + * @since v0.1.92 + * @param inputEncoding The `encoding` of the `data` string. + */ + update(data: BinaryLike): Verify; + update(data: string, inputEncoding: Encoding): Verify; + /** + * Verifies the provided data using the given `object` and `signature`. + * + * If `object` is not a `KeyObject`, this function behaves as if`object` had been passed to {@link createPublicKey}. If it is an + * object, the following additional properties can be passed: + * + * The `signature` argument is the previously calculated signature for the data, in + * the `signatureEncoding`. + * If a `signatureEncoding` is specified, the `signature` is expected to be a + * string; otherwise `signature` is expected to be a `Buffer`,`TypedArray`, or `DataView`. + * + * The `verify` object can not be used again after `verify.verify()` has been + * called. Multiple calls to `verify.verify()` will result in an error being + * thrown. + * + * Because public keys can be derived from private keys, a private key may + * be passed instead of a public key. + * @since v0.1.92 + */ + verify( + object: KeyLike | VerifyKeyObjectInput | VerifyPublicKeyInput | VerifyJsonWebKeyInput, + signature: NodeJS.ArrayBufferView, + ): boolean; + verify( + object: KeyLike | VerifyKeyObjectInput | VerifyPublicKeyInput | VerifyJsonWebKeyInput, + signature: string, + signature_format?: BinaryToTextEncoding, + ): boolean; + } + /** + * Creates a `DiffieHellman` key exchange object using the supplied `prime` and an + * optional specific `generator`. + * + * The `generator` argument can be a number, string, or `Buffer`. If`generator` is not specified, the value `2` is used. + * + * If `primeEncoding` is specified, `prime` is expected to be a string; otherwise + * a `Buffer`, `TypedArray`, or `DataView` is expected. + * + * If `generatorEncoding` is specified, `generator` is expected to be a string; + * otherwise a number, `Buffer`, `TypedArray`, or `DataView` is expected. + * @since v0.11.12 + * @param primeEncoding The `encoding` of the `prime` string. + * @param [generator=2] + * @param generatorEncoding The `encoding` of the `generator` string. + */ + function createDiffieHellman(primeLength: number, generator?: number): DiffieHellman; + function createDiffieHellman( + prime: ArrayBuffer | NodeJS.ArrayBufferView, + generator?: number | ArrayBuffer | NodeJS.ArrayBufferView, + ): DiffieHellman; + function createDiffieHellman( + prime: ArrayBuffer | NodeJS.ArrayBufferView, + generator: string, + generatorEncoding: BinaryToTextEncoding, + ): DiffieHellman; + function createDiffieHellman( + prime: string, + primeEncoding: BinaryToTextEncoding, + generator?: number | ArrayBuffer | NodeJS.ArrayBufferView, + ): DiffieHellman; + function createDiffieHellman( + prime: string, + primeEncoding: BinaryToTextEncoding, + generator: string, + generatorEncoding: BinaryToTextEncoding, + ): DiffieHellman; + /** + * The `DiffieHellman` class is a utility for creating Diffie-Hellman key + * exchanges. + * + * Instances of the `DiffieHellman` class can be created using the {@link createDiffieHellman} function. + * + * ```js + * import assert from 'node:assert'; + * + * const { + * createDiffieHellman, + * } = await import('node:crypto'); + * + * // Generate Alice's keys... + * const alice = createDiffieHellman(2048); + * const aliceKey = alice.generateKeys(); + * + * // Generate Bob's keys... + * const bob = createDiffieHellman(alice.getPrime(), alice.getGenerator()); + * const bobKey = bob.generateKeys(); + * + * // Exchange and generate the secret... + * const aliceSecret = alice.computeSecret(bobKey); + * const bobSecret = bob.computeSecret(aliceKey); + * + * // OK + * assert.strictEqual(aliceSecret.toString('hex'), bobSecret.toString('hex')); + * ``` + * @since v0.5.0 + */ + class DiffieHellman { + private constructor(); + /** + * Generates private and public Diffie-Hellman key values unless they have been + * generated or computed already, and returns + * the public key in the specified `encoding`. This key should be + * transferred to the other party. + * If `encoding` is provided a string is returned; otherwise a `Buffer` is returned. + * + * This function is a thin wrapper around [`DH_generate_key()`](https://www.openssl.org/docs/man3.0/man3/DH_generate_key.html). In particular, + * once a private key has been generated or set, calling this function only updates + * the public key but does not generate a new private key. + * @since v0.5.0 + * @param encoding The `encoding` of the return value. + */ + generateKeys(): Buffer; + generateKeys(encoding: BinaryToTextEncoding): string; + /** + * Computes the shared secret using `otherPublicKey` as the other + * party's public key and returns the computed shared secret. The supplied + * key is interpreted using the specified `inputEncoding`, and secret is + * encoded using specified `outputEncoding`. + * If the `inputEncoding` is not + * provided, `otherPublicKey` is expected to be a `Buffer`,`TypedArray`, or `DataView`. + * + * If `outputEncoding` is given a string is returned; otherwise, a `Buffer` is returned. + * @since v0.5.0 + * @param inputEncoding The `encoding` of an `otherPublicKey` string. + * @param outputEncoding The `encoding` of the return value. + */ + computeSecret(otherPublicKey: NodeJS.ArrayBufferView, inputEncoding?: null, outputEncoding?: null): Buffer; + computeSecret(otherPublicKey: string, inputEncoding: BinaryToTextEncoding, outputEncoding?: null): Buffer; + computeSecret( + otherPublicKey: NodeJS.ArrayBufferView, + inputEncoding: null, + outputEncoding: BinaryToTextEncoding, + ): string; + computeSecret( + otherPublicKey: string, + inputEncoding: BinaryToTextEncoding, + outputEncoding: BinaryToTextEncoding, + ): string; + /** + * Returns the Diffie-Hellman prime in the specified `encoding`. + * If `encoding` is provided a string is + * returned; otherwise a `Buffer` is returned. + * @since v0.5.0 + * @param encoding The `encoding` of the return value. + */ + getPrime(): Buffer; + getPrime(encoding: BinaryToTextEncoding): string; + /** + * Returns the Diffie-Hellman generator in the specified `encoding`. + * If `encoding` is provided a string is + * returned; otherwise a `Buffer` is returned. + * @since v0.5.0 + * @param encoding The `encoding` of the return value. + */ + getGenerator(): Buffer; + getGenerator(encoding: BinaryToTextEncoding): string; + /** + * Returns the Diffie-Hellman public key in the specified `encoding`. + * If `encoding` is provided a + * string is returned; otherwise a `Buffer` is returned. + * @since v0.5.0 + * @param encoding The `encoding` of the return value. + */ + getPublicKey(): Buffer; + getPublicKey(encoding: BinaryToTextEncoding): string; + /** + * Returns the Diffie-Hellman private key in the specified `encoding`. + * If `encoding` is provided a + * string is returned; otherwise a `Buffer` is returned. + * @since v0.5.0 + * @param encoding The `encoding` of the return value. + */ + getPrivateKey(): Buffer; + getPrivateKey(encoding: BinaryToTextEncoding): string; + /** + * Sets the Diffie-Hellman public key. If the `encoding` argument is provided,`publicKey` is expected + * to be a string. If no `encoding` is provided, `publicKey` is expected + * to be a `Buffer`, `TypedArray`, or `DataView`. + * @since v0.5.0 + * @param encoding The `encoding` of the `publicKey` string. + */ + setPublicKey(publicKey: NodeJS.ArrayBufferView): void; + setPublicKey(publicKey: string, encoding: BufferEncoding): void; + /** + * Sets the Diffie-Hellman private key. If the `encoding` argument is provided,`privateKey` is expected + * to be a string. If no `encoding` is provided, `privateKey` is expected + * to be a `Buffer`, `TypedArray`, or `DataView`. + * + * This function does not automatically compute the associated public key. Either `diffieHellman.setPublicKey()` or `diffieHellman.generateKeys()` can be + * used to manually provide the public key or to automatically derive it. + * @since v0.5.0 + * @param encoding The `encoding` of the `privateKey` string. + */ + setPrivateKey(privateKey: NodeJS.ArrayBufferView): void; + setPrivateKey(privateKey: string, encoding: BufferEncoding): void; + /** + * A bit field containing any warnings and/or errors resulting from a check + * performed during initialization of the `DiffieHellman` object. + * + * The following values are valid for this property (as defined in `node:constants` module): + * + * * `DH_CHECK_P_NOT_SAFE_PRIME` + * * `DH_CHECK_P_NOT_PRIME` + * * `DH_UNABLE_TO_CHECK_GENERATOR` + * * `DH_NOT_SUITABLE_GENERATOR` + * @since v0.11.12 + */ + verifyError: number; + } + /** + * The `DiffieHellmanGroup` class takes a well-known modp group as its argument. + * It works the same as `DiffieHellman`, except that it does not allow changing its keys after creation. + * In other words, it does not implement `setPublicKey()` or `setPrivateKey()` methods. + * + * ```js + * const { createDiffieHellmanGroup } = await import('node:crypto'); + * const dh = createDiffieHellmanGroup('modp1'); + * ``` + * The name (e.g. `'modp1'`) is taken from [RFC 2412](https://www.rfc-editor.org/rfc/rfc2412.txt) (modp1 and 2) and [RFC 3526](https://www.rfc-editor.org/rfc/rfc3526.txt): + * ```bash + * $ perl -ne 'print "$1\n" if /"(modp\d+)"/' src/node_crypto_groups.h + * modp1 # 768 bits + * modp2 # 1024 bits + * modp5 # 1536 bits + * modp14 # 2048 bits + * modp15 # etc. + * modp16 + * modp17 + * modp18 + * ``` + * @since v0.7.5 + */ + const DiffieHellmanGroup: DiffieHellmanGroupConstructor; + interface DiffieHellmanGroupConstructor { + new(name: string): DiffieHellmanGroup; + (name: string): DiffieHellmanGroup; + readonly prototype: DiffieHellmanGroup; + } + type DiffieHellmanGroup = Omit; + /** + * Creates a predefined `DiffieHellmanGroup` key exchange object. The + * supported groups are listed in the documentation for `DiffieHellmanGroup`. + * + * The returned object mimics the interface of objects created by {@link createDiffieHellman}, but will not allow changing + * the keys (with `diffieHellman.setPublicKey()`, for example). The + * advantage of using this method is that the parties do not have to + * generate nor exchange a group modulus beforehand, saving both processor + * and communication time. + * + * Example (obtaining a shared secret): + * + * ```js + * const { + * getDiffieHellman, + * } = await import('node:crypto'); + * const alice = getDiffieHellman('modp14'); + * const bob = getDiffieHellman('modp14'); + * + * alice.generateKeys(); + * bob.generateKeys(); + * + * const aliceSecret = alice.computeSecret(bob.getPublicKey(), null, 'hex'); + * const bobSecret = bob.computeSecret(alice.getPublicKey(), null, 'hex'); + * + * // aliceSecret and bobSecret should be the same + * console.log(aliceSecret === bobSecret); + * ``` + * @since v0.7.5 + */ + function getDiffieHellman(groupName: string): DiffieHellmanGroup; + /** + * An alias for {@link getDiffieHellman} + * @since v0.9.3 + */ + function createDiffieHellmanGroup(name: string): DiffieHellmanGroup; + /** + * Provides an asynchronous Password-Based Key Derivation Function 2 (PBKDF2) + * implementation. A selected HMAC digest algorithm specified by `digest` is + * applied to derive a key of the requested byte length (`keylen`) from the`password`, `salt` and `iterations`. + * + * The supplied `callback` function is called with two arguments: `err` and`derivedKey`. If an error occurs while deriving the key, `err` will be set; + * otherwise `err` will be `null`. By default, the successfully generated`derivedKey` will be passed to the callback as a `Buffer`. An error will be + * thrown if any of the input arguments specify invalid values or types. + * + * The `iterations` argument must be a number set as high as possible. The + * higher the number of iterations, the more secure the derived key will be, + * but will take a longer amount of time to complete. + * + * The `salt` should be as unique as possible. It is recommended that a salt is + * random and at least 16 bytes long. See [NIST SP 800-132](https://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-132.pdf) for details. + * + * When passing strings for `password` or `salt`, please consider `caveats when using strings as inputs to cryptographic APIs`. + * + * ```js + * const { + * pbkdf2, + * } = await import('node:crypto'); + * + * pbkdf2('secret', 'salt', 100000, 64, 'sha512', (err, derivedKey) => { + * if (err) throw err; + * console.log(derivedKey.toString('hex')); // '3745e48...08d59ae' + * }); + * ``` + * + * An array of supported digest functions can be retrieved using {@link getHashes}. + * + * This API uses libuv's threadpool, which can have surprising and + * negative performance implications for some applications; see the `UV_THREADPOOL_SIZE` documentation for more information. + * @since v0.5.5 + */ + function pbkdf2( + password: BinaryLike, + salt: BinaryLike, + iterations: number, + keylen: number, + digest: string, + callback: (err: Error | null, derivedKey: Buffer) => void, + ): void; + /** + * Provides a synchronous Password-Based Key Derivation Function 2 (PBKDF2) + * implementation. A selected HMAC digest algorithm specified by `digest` is + * applied to derive a key of the requested byte length (`keylen`) from the`password`, `salt` and `iterations`. + * + * If an error occurs an `Error` will be thrown, otherwise the derived key will be + * returned as a `Buffer`. + * + * The `iterations` argument must be a number set as high as possible. The + * higher the number of iterations, the more secure the derived key will be, + * but will take a longer amount of time to complete. + * + * The `salt` should be as unique as possible. It is recommended that a salt is + * random and at least 16 bytes long. See [NIST SP 800-132](https://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-132.pdf) for details. + * + * When passing strings for `password` or `salt`, please consider `caveats when using strings as inputs to cryptographic APIs`. + * + * ```js + * const { + * pbkdf2Sync, + * } = await import('node:crypto'); + * + * const key = pbkdf2Sync('secret', 'salt', 100000, 64, 'sha512'); + * console.log(key.toString('hex')); // '3745e48...08d59ae' + * ``` + * + * An array of supported digest functions can be retrieved using {@link getHashes}. + * @since v0.9.3 + */ + function pbkdf2Sync( + password: BinaryLike, + salt: BinaryLike, + iterations: number, + keylen: number, + digest: string, + ): Buffer; + /** + * Generates cryptographically strong pseudorandom data. The `size` argument + * is a number indicating the number of bytes to generate. + * + * If a `callback` function is provided, the bytes are generated asynchronously + * and the `callback` function is invoked with two arguments: `err` and `buf`. + * If an error occurs, `err` will be an `Error` object; otherwise it is `null`. The`buf` argument is a `Buffer` containing the generated bytes. + * + * ```js + * // Asynchronous + * const { + * randomBytes, + * } = await import('node:crypto'); + * + * randomBytes(256, (err, buf) => { + * if (err) throw err; + * console.log(`${buf.length} bytes of random data: ${buf.toString('hex')}`); + * }); + * ``` + * + * If the `callback` function is not provided, the random bytes are generated + * synchronously and returned as a `Buffer`. An error will be thrown if + * there is a problem generating the bytes. + * + * ```js + * // Synchronous + * const { + * randomBytes, + * } = await import('node:crypto'); + * + * const buf = randomBytes(256); + * console.log( + * `${buf.length} bytes of random data: ${buf.toString('hex')}`); + * ``` + * + * The `crypto.randomBytes()` method will not complete until there is + * sufficient entropy available. + * This should normally never take longer than a few milliseconds. The only time + * when generating the random bytes may conceivably block for a longer period of + * time is right after boot, when the whole system is still low on entropy. + * + * This API uses libuv's threadpool, which can have surprising and + * negative performance implications for some applications; see the `UV_THREADPOOL_SIZE` documentation for more information. + * + * The asynchronous version of `crypto.randomBytes()` is carried out in a single + * threadpool request. To minimize threadpool task length variation, partition + * large `randomBytes` requests when doing so as part of fulfilling a client + * request. + * @since v0.5.8 + * @param size The number of bytes to generate. The `size` must not be larger than `2**31 - 1`. + * @return if the `callback` function is not provided. + */ + function randomBytes(size: number): Buffer; + function randomBytes(size: number, callback: (err: Error | null, buf: Buffer) => void): void; + function pseudoRandomBytes(size: number): Buffer; + function pseudoRandomBytes(size: number, callback: (err: Error | null, buf: Buffer) => void): void; + /** + * Return a random integer `n` such that `min <= n < max`. This + * implementation avoids [modulo bias](https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle#Modulo_bias). + * + * The range (`max - min`) must be less than 248. `min` and `max` must + * be [safe integers](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isSafeInteger). + * + * If the `callback` function is not provided, the random integer is + * generated synchronously. + * + * ```js + * // Asynchronous + * const { + * randomInt, + * } = await import('node:crypto'); + * + * randomInt(3, (err, n) => { + * if (err) throw err; + * console.log(`Random number chosen from (0, 1, 2): ${n}`); + * }); + * ``` + * + * ```js + * // Synchronous + * const { + * randomInt, + * } = await import('node:crypto'); + * + * const n = randomInt(3); + * console.log(`Random number chosen from (0, 1, 2): ${n}`); + * ``` + * + * ```js + * // With `min` argument + * const { + * randomInt, + * } = await import('node:crypto'); + * + * const n = randomInt(1, 7); + * console.log(`The dice rolled: ${n}`); + * ``` + * @since v14.10.0, v12.19.0 + * @param [min=0] Start of random range (inclusive). + * @param max End of random range (exclusive). + * @param callback `function(err, n) {}`. + */ + function randomInt(max: number): number; + function randomInt(min: number, max: number): number; + function randomInt(max: number, callback: (err: Error | null, value: number) => void): void; + function randomInt(min: number, max: number, callback: (err: Error | null, value: number) => void): void; + /** + * Synchronous version of {@link randomFill}. + * + * ```js + * import { Buffer } from 'node:buffer'; + * const { randomFillSync } = await import('node:crypto'); + * + * const buf = Buffer.alloc(10); + * console.log(randomFillSync(buf).toString('hex')); + * + * randomFillSync(buf, 5); + * console.log(buf.toString('hex')); + * + * // The above is equivalent to the following: + * randomFillSync(buf, 5, 5); + * console.log(buf.toString('hex')); + * ``` + * + * Any `ArrayBuffer`, `TypedArray` or `DataView` instance may be passed as`buffer`. + * + * ```js + * import { Buffer } from 'node:buffer'; + * const { randomFillSync } = await import('node:crypto'); + * + * const a = new Uint32Array(10); + * console.log(Buffer.from(randomFillSync(a).buffer, + * a.byteOffset, a.byteLength).toString('hex')); + * + * const b = new DataView(new ArrayBuffer(10)); + * console.log(Buffer.from(randomFillSync(b).buffer, + * b.byteOffset, b.byteLength).toString('hex')); + * + * const c = new ArrayBuffer(10); + * console.log(Buffer.from(randomFillSync(c)).toString('hex')); + * ``` + * @since v7.10.0, v6.13.0 + * @param buffer Must be supplied. The size of the provided `buffer` must not be larger than `2**31 - 1`. + * @param [offset=0] + * @param [size=buffer.length - offset] + * @return The object passed as `buffer` argument. + */ + function randomFillSync(buffer: T, offset?: number, size?: number): T; + /** + * This function is similar to {@link randomBytes} but requires the first + * argument to be a `Buffer` that will be filled. It also + * requires that a callback is passed in. + * + * If the `callback` function is not provided, an error will be thrown. + * + * ```js + * import { Buffer } from 'node:buffer'; + * const { randomFill } = await import('node:crypto'); + * + * const buf = Buffer.alloc(10); + * randomFill(buf, (err, buf) => { + * if (err) throw err; + * console.log(buf.toString('hex')); + * }); + * + * randomFill(buf, 5, (err, buf) => { + * if (err) throw err; + * console.log(buf.toString('hex')); + * }); + * + * // The above is equivalent to the following: + * randomFill(buf, 5, 5, (err, buf) => { + * if (err) throw err; + * console.log(buf.toString('hex')); + * }); + * ``` + * + * Any `ArrayBuffer`, `TypedArray`, or `DataView` instance may be passed as`buffer`. + * + * While this includes instances of `Float32Array` and `Float64Array`, this + * function should not be used to generate random floating-point numbers. The + * result may contain `+Infinity`, `-Infinity`, and `NaN`, and even if the array + * contains finite numbers only, they are not drawn from a uniform random + * distribution and have no meaningful lower or upper bounds. + * + * ```js + * import { Buffer } from 'node:buffer'; + * const { randomFill } = await import('node:crypto'); + * + * const a = new Uint32Array(10); + * randomFill(a, (err, buf) => { + * if (err) throw err; + * console.log(Buffer.from(buf.buffer, buf.byteOffset, buf.byteLength) + * .toString('hex')); + * }); + * + * const b = new DataView(new ArrayBuffer(10)); + * randomFill(b, (err, buf) => { + * if (err) throw err; + * console.log(Buffer.from(buf.buffer, buf.byteOffset, buf.byteLength) + * .toString('hex')); + * }); + * + * const c = new ArrayBuffer(10); + * randomFill(c, (err, buf) => { + * if (err) throw err; + * console.log(Buffer.from(buf).toString('hex')); + * }); + * ``` + * + * This API uses libuv's threadpool, which can have surprising and + * negative performance implications for some applications; see the `UV_THREADPOOL_SIZE` documentation for more information. + * + * The asynchronous version of `crypto.randomFill()` is carried out in a single + * threadpool request. To minimize threadpool task length variation, partition + * large `randomFill` requests when doing so as part of fulfilling a client + * request. + * @since v7.10.0, v6.13.0 + * @param buffer Must be supplied. The size of the provided `buffer` must not be larger than `2**31 - 1`. + * @param [offset=0] + * @param [size=buffer.length - offset] + * @param callback `function(err, buf) {}`. + */ + function randomFill( + buffer: T, + callback: (err: Error | null, buf: T) => void, + ): void; + function randomFill( + buffer: T, + offset: number, + callback: (err: Error | null, buf: T) => void, + ): void; + function randomFill( + buffer: T, + offset: number, + size: number, + callback: (err: Error | null, buf: T) => void, + ): void; + interface ScryptOptions { + cost?: number | undefined; + blockSize?: number | undefined; + parallelization?: number | undefined; + N?: number | undefined; + r?: number | undefined; + p?: number | undefined; + maxmem?: number | undefined; + } + /** + * Provides an asynchronous [scrypt](https://en.wikipedia.org/wiki/Scrypt) implementation. Scrypt is a password-based + * key derivation function that is designed to be expensive computationally and + * memory-wise in order to make brute-force attacks unrewarding. + * + * The `salt` should be as unique as possible. It is recommended that a salt is + * random and at least 16 bytes long. See [NIST SP 800-132](https://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-132.pdf) for details. + * + * When passing strings for `password` or `salt`, please consider `caveats when using strings as inputs to cryptographic APIs`. + * + * The `callback` function is called with two arguments: `err` and `derivedKey`.`err` is an exception object when key derivation fails, otherwise `err` is`null`. `derivedKey` is passed to the + * callback as a `Buffer`. + * + * An exception is thrown when any of the input arguments specify invalid values + * or types. + * + * ```js + * const { + * scrypt, + * } = await import('node:crypto'); + * + * // Using the factory defaults. + * scrypt('password', 'salt', 64, (err, derivedKey) => { + * if (err) throw err; + * console.log(derivedKey.toString('hex')); // '3745e48...08d59ae' + * }); + * // Using a custom N parameter. Must be a power of two. + * scrypt('password', 'salt', 64, { N: 1024 }, (err, derivedKey) => { + * if (err) throw err; + * console.log(derivedKey.toString('hex')); // '3745e48...aa39b34' + * }); + * ``` + * @since v10.5.0 + */ + function scrypt( + password: BinaryLike, + salt: BinaryLike, + keylen: number, + callback: (err: Error | null, derivedKey: Buffer) => void, + ): void; + function scrypt( + password: BinaryLike, + salt: BinaryLike, + keylen: number, + options: ScryptOptions, + callback: (err: Error | null, derivedKey: Buffer) => void, + ): void; + /** + * Provides a synchronous [scrypt](https://en.wikipedia.org/wiki/Scrypt) implementation. Scrypt is a password-based + * key derivation function that is designed to be expensive computationally and + * memory-wise in order to make brute-force attacks unrewarding. + * + * The `salt` should be as unique as possible. It is recommended that a salt is + * random and at least 16 bytes long. See [NIST SP 800-132](https://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-132.pdf) for details. + * + * When passing strings for `password` or `salt`, please consider `caveats when using strings as inputs to cryptographic APIs`. + * + * An exception is thrown when key derivation fails, otherwise the derived key is + * returned as a `Buffer`. + * + * An exception is thrown when any of the input arguments specify invalid values + * or types. + * + * ```js + * const { + * scryptSync, + * } = await import('node:crypto'); + * // Using the factory defaults. + * + * const key1 = scryptSync('password', 'salt', 64); + * console.log(key1.toString('hex')); // '3745e48...08d59ae' + * // Using a custom N parameter. Must be a power of two. + * const key2 = scryptSync('password', 'salt', 64, { N: 1024 }); + * console.log(key2.toString('hex')); // '3745e48...aa39b34' + * ``` + * @since v10.5.0 + */ + function scryptSync(password: BinaryLike, salt: BinaryLike, keylen: number, options?: ScryptOptions): Buffer; + interface RsaPublicKey { + key: KeyLike; + padding?: number | undefined; + } + interface RsaPrivateKey { + key: KeyLike; + passphrase?: string | undefined; + /** + * @default 'sha1' + */ + oaepHash?: string | undefined; + oaepLabel?: NodeJS.TypedArray | undefined; + padding?: number | undefined; + } + /** + * Encrypts the content of `buffer` with `key` and returns a new `Buffer` with encrypted content. The returned data can be decrypted using + * the corresponding private key, for example using {@link privateDecrypt}. + * + * If `key` is not a `KeyObject`, this function behaves as if`key` had been passed to {@link createPublicKey}. If it is an + * object, the `padding` property can be passed. Otherwise, this function uses`RSA_PKCS1_OAEP_PADDING`. + * + * Because RSA public keys can be derived from private keys, a private key may + * be passed instead of a public key. + * @since v0.11.14 + */ + function publicEncrypt(key: RsaPublicKey | RsaPrivateKey | KeyLike, buffer: NodeJS.ArrayBufferView): Buffer; + /** + * Decrypts `buffer` with `key`.`buffer` was previously encrypted using + * the corresponding private key, for example using {@link privateEncrypt}. + * + * If `key` is not a `KeyObject`, this function behaves as if`key` had been passed to {@link createPublicKey}. If it is an + * object, the `padding` property can be passed. Otherwise, this function uses`RSA_PKCS1_PADDING`. + * + * Because RSA public keys can be derived from private keys, a private key may + * be passed instead of a public key. + * @since v1.1.0 + */ + function publicDecrypt(key: RsaPublicKey | RsaPrivateKey | KeyLike, buffer: NodeJS.ArrayBufferView): Buffer; + /** + * Decrypts `buffer` with `privateKey`. `buffer` was previously encrypted using + * the corresponding public key, for example using {@link publicEncrypt}. + * + * If `privateKey` is not a `KeyObject`, this function behaves as if`privateKey` had been passed to {@link createPrivateKey}. If it is an + * object, the `padding` property can be passed. Otherwise, this function uses`RSA_PKCS1_OAEP_PADDING`. + * @since v0.11.14 + */ + function privateDecrypt(privateKey: RsaPrivateKey | KeyLike, buffer: NodeJS.ArrayBufferView): Buffer; + /** + * Encrypts `buffer` with `privateKey`. The returned data can be decrypted using + * the corresponding public key, for example using {@link publicDecrypt}. + * + * If `privateKey` is not a `KeyObject`, this function behaves as if`privateKey` had been passed to {@link createPrivateKey}. If it is an + * object, the `padding` property can be passed. Otherwise, this function uses`RSA_PKCS1_PADDING`. + * @since v1.1.0 + */ + function privateEncrypt(privateKey: RsaPrivateKey | KeyLike, buffer: NodeJS.ArrayBufferView): Buffer; + /** + * ```js + * const { + * getCiphers, + * } = await import('node:crypto'); + * + * console.log(getCiphers()); // ['aes-128-cbc', 'aes-128-ccm', ...] + * ``` + * @since v0.9.3 + * @return An array with the names of the supported cipher algorithms. + */ + function getCiphers(): string[]; + /** + * ```js + * const { + * getCurves, + * } = await import('node:crypto'); + * + * console.log(getCurves()); // ['Oakley-EC2N-3', 'Oakley-EC2N-4', ...] + * ``` + * @since v2.3.0 + * @return An array with the names of the supported elliptic curves. + */ + function getCurves(): string[]; + /** + * @since v10.0.0 + * @return `1` if and only if a FIPS compliant crypto provider is currently in use, `0` otherwise. A future semver-major release may change the return type of this API to a {boolean}. + */ + function getFips(): 1 | 0; + /** + * Enables the FIPS compliant crypto provider in a FIPS-enabled Node.js build. + * Throws an error if FIPS mode is not available. + * @since v10.0.0 + * @param bool `true` to enable FIPS mode. + */ + function setFips(bool: boolean): void; + /** + * ```js + * const { + * getHashes, + * } = await import('node:crypto'); + * + * console.log(getHashes()); // ['DSA', 'DSA-SHA', 'DSA-SHA1', ...] + * ``` + * @since v0.9.3 + * @return An array of the names of the supported hash algorithms, such as `'RSA-SHA256'`. Hash algorithms are also called "digest" algorithms. + */ + function getHashes(): string[]; + /** + * The `ECDH` class is a utility for creating Elliptic Curve Diffie-Hellman (ECDH) + * key exchanges. + * + * Instances of the `ECDH` class can be created using the {@link createECDH} function. + * + * ```js + * import assert from 'node:assert'; + * + * const { + * createECDH, + * } = await import('node:crypto'); + * + * // Generate Alice's keys... + * const alice = createECDH('secp521r1'); + * const aliceKey = alice.generateKeys(); + * + * // Generate Bob's keys... + * const bob = createECDH('secp521r1'); + * const bobKey = bob.generateKeys(); + * + * // Exchange and generate the secret... + * const aliceSecret = alice.computeSecret(bobKey); + * const bobSecret = bob.computeSecret(aliceKey); + * + * assert.strictEqual(aliceSecret.toString('hex'), bobSecret.toString('hex')); + * // OK + * ``` + * @since v0.11.14 + */ + class ECDH { + private constructor(); + /** + * Converts the EC Diffie-Hellman public key specified by `key` and `curve` to the + * format specified by `format`. The `format` argument specifies point encoding + * and can be `'compressed'`, `'uncompressed'` or `'hybrid'`. The supplied key is + * interpreted using the specified `inputEncoding`, and the returned key is encoded + * using the specified `outputEncoding`. + * + * Use {@link getCurves} to obtain a list of available curve names. + * On recent OpenSSL releases, `openssl ecparam -list_curves` will also display + * the name and description of each available elliptic curve. + * + * If `format` is not specified the point will be returned in `'uncompressed'`format. + * + * If the `inputEncoding` is not provided, `key` is expected to be a `Buffer`,`TypedArray`, or `DataView`. + * + * Example (uncompressing a key): + * + * ```js + * const { + * createECDH, + * ECDH, + * } = await import('node:crypto'); + * + * const ecdh = createECDH('secp256k1'); + * ecdh.generateKeys(); + * + * const compressedKey = ecdh.getPublicKey('hex', 'compressed'); + * + * const uncompressedKey = ECDH.convertKey(compressedKey, + * 'secp256k1', + * 'hex', + * 'hex', + * 'uncompressed'); + * + * // The converted key and the uncompressed public key should be the same + * console.log(uncompressedKey === ecdh.getPublicKey('hex')); + * ``` + * @since v10.0.0 + * @param inputEncoding The `encoding` of the `key` string. + * @param outputEncoding The `encoding` of the return value. + * @param [format='uncompressed'] + */ + static convertKey( + key: BinaryLike, + curve: string, + inputEncoding?: BinaryToTextEncoding, + outputEncoding?: "latin1" | "hex" | "base64" | "base64url", + format?: "uncompressed" | "compressed" | "hybrid", + ): Buffer | string; + /** + * Generates private and public EC Diffie-Hellman key values, and returns + * the public key in the specified `format` and `encoding`. This key should be + * transferred to the other party. + * + * The `format` argument specifies point encoding and can be `'compressed'` or`'uncompressed'`. If `format` is not specified, the point will be returned in`'uncompressed'` format. + * + * If `encoding` is provided a string is returned; otherwise a `Buffer` is returned. + * @since v0.11.14 + * @param encoding The `encoding` of the return value. + * @param [format='uncompressed'] + */ + generateKeys(): Buffer; + generateKeys(encoding: BinaryToTextEncoding, format?: ECDHKeyFormat): string; + /** + * Computes the shared secret using `otherPublicKey` as the other + * party's public key and returns the computed shared secret. The supplied + * key is interpreted using specified `inputEncoding`, and the returned secret + * is encoded using the specified `outputEncoding`. + * If the `inputEncoding` is not + * provided, `otherPublicKey` is expected to be a `Buffer`, `TypedArray`, or`DataView`. + * + * If `outputEncoding` is given a string will be returned; otherwise a `Buffer` is returned. + * + * `ecdh.computeSecret` will throw an`ERR_CRYPTO_ECDH_INVALID_PUBLIC_KEY` error when `otherPublicKey`lies outside of the elliptic curve. Since `otherPublicKey` is + * usually supplied from a remote user over an insecure network, + * be sure to handle this exception accordingly. + * @since v0.11.14 + * @param inputEncoding The `encoding` of the `otherPublicKey` string. + * @param outputEncoding The `encoding` of the return value. + */ + computeSecret(otherPublicKey: NodeJS.ArrayBufferView): Buffer; + computeSecret(otherPublicKey: string, inputEncoding: BinaryToTextEncoding): Buffer; + computeSecret(otherPublicKey: NodeJS.ArrayBufferView, outputEncoding: BinaryToTextEncoding): string; + computeSecret( + otherPublicKey: string, + inputEncoding: BinaryToTextEncoding, + outputEncoding: BinaryToTextEncoding, + ): string; + /** + * If `encoding` is specified, a string is returned; otherwise a `Buffer` is + * returned. + * @since v0.11.14 + * @param encoding The `encoding` of the return value. + * @return The EC Diffie-Hellman in the specified `encoding`. + */ + getPrivateKey(): Buffer; + getPrivateKey(encoding: BinaryToTextEncoding): string; + /** + * The `format` argument specifies point encoding and can be `'compressed'` or`'uncompressed'`. If `format` is not specified the point will be returned in`'uncompressed'` format. + * + * If `encoding` is specified, a string is returned; otherwise a `Buffer` is + * returned. + * @since v0.11.14 + * @param encoding The `encoding` of the return value. + * @param [format='uncompressed'] + * @return The EC Diffie-Hellman public key in the specified `encoding` and `format`. + */ + getPublicKey(encoding?: null, format?: ECDHKeyFormat): Buffer; + getPublicKey(encoding: BinaryToTextEncoding, format?: ECDHKeyFormat): string; + /** + * Sets the EC Diffie-Hellman private key. + * If `encoding` is provided, `privateKey` is expected + * to be a string; otherwise `privateKey` is expected to be a `Buffer`,`TypedArray`, or `DataView`. + * + * If `privateKey` is not valid for the curve specified when the `ECDH` object was + * created, an error is thrown. Upon setting the private key, the associated + * public point (key) is also generated and set in the `ECDH` object. + * @since v0.11.14 + * @param encoding The `encoding` of the `privateKey` string. + */ + setPrivateKey(privateKey: NodeJS.ArrayBufferView): void; + setPrivateKey(privateKey: string, encoding: BinaryToTextEncoding): void; + } + /** + * Creates an Elliptic Curve Diffie-Hellman (`ECDH`) key exchange object using a + * predefined curve specified by the `curveName` string. Use {@link getCurves} to obtain a list of available curve names. On recent + * OpenSSL releases, `openssl ecparam -list_curves` will also display the name + * and description of each available elliptic curve. + * @since v0.11.14 + */ + function createECDH(curveName: string): ECDH; + /** + * This function compares the underlying bytes that represent the given`ArrayBuffer`, `TypedArray`, or `DataView` instances using a constant-time + * algorithm. + * + * This function does not leak timing information that + * would allow an attacker to guess one of the values. This is suitable for + * comparing HMAC digests or secret values like authentication cookies or [capability urls](https://www.w3.org/TR/capability-urls/). + * + * `a` and `b` must both be `Buffer`s, `TypedArray`s, or `DataView`s, and they + * must have the same byte length. An error is thrown if `a` and `b` have + * different byte lengths. + * + * If at least one of `a` and `b` is a `TypedArray` with more than one byte per + * entry, such as `Uint16Array`, the result will be computed using the platform + * byte order. + * + * **When both of the inputs are `Float32Array`s or`Float64Array`s, this function might return unexpected results due to IEEE 754** + * **encoding of floating-point numbers. In particular, neither `x === y` nor`Object.is(x, y)` implies that the byte representations of two floating-point** + * **numbers `x` and `y` are equal.** + * + * Use of `crypto.timingSafeEqual` does not guarantee that the _surrounding_ code + * is timing-safe. Care should be taken to ensure that the surrounding code does + * not introduce timing vulnerabilities. + * @since v6.6.0 + */ + function timingSafeEqual(a: NodeJS.ArrayBufferView, b: NodeJS.ArrayBufferView): boolean; + type KeyType = "rsa" | "rsa-pss" | "dsa" | "ec" | "ed25519" | "ed448" | "x25519" | "x448"; + type KeyFormat = "pem" | "der" | "jwk"; + interface BasePrivateKeyEncodingOptions { + format: T; + cipher?: string | undefined; + passphrase?: string | undefined; + } + interface KeyPairKeyObjectResult { + publicKey: KeyObject; + privateKey: KeyObject; + } + interface ED25519KeyPairKeyObjectOptions {} + interface ED448KeyPairKeyObjectOptions {} + interface X25519KeyPairKeyObjectOptions {} + interface X448KeyPairKeyObjectOptions {} + interface ECKeyPairKeyObjectOptions { + /** + * Name of the curve to use + */ + namedCurve: string; + } + interface RSAKeyPairKeyObjectOptions { + /** + * Key size in bits + */ + modulusLength: number; + /** + * Public exponent + * @default 0x10001 + */ + publicExponent?: number | undefined; + } + interface RSAPSSKeyPairKeyObjectOptions { + /** + * Key size in bits + */ + modulusLength: number; + /** + * Public exponent + * @default 0x10001 + */ + publicExponent?: number | undefined; + /** + * Name of the message digest + */ + hashAlgorithm?: string; + /** + * Name of the message digest used by MGF1 + */ + mgf1HashAlgorithm?: string; + /** + * Minimal salt length in bytes + */ + saltLength?: string; + } + interface DSAKeyPairKeyObjectOptions { + /** + * Key size in bits + */ + modulusLength: number; + /** + * Size of q in bits + */ + divisorLength: number; + } + interface RSAKeyPairOptions { + /** + * Key size in bits + */ + modulusLength: number; + /** + * Public exponent + * @default 0x10001 + */ + publicExponent?: number | undefined; + publicKeyEncoding: { + type: "pkcs1" | "spki"; + format: PubF; + }; + privateKeyEncoding: BasePrivateKeyEncodingOptions & { + type: "pkcs1" | "pkcs8"; + }; + } + interface RSAPSSKeyPairOptions { + /** + * Key size in bits + */ + modulusLength: number; + /** + * Public exponent + * @default 0x10001 + */ + publicExponent?: number | undefined; + /** + * Name of the message digest + */ + hashAlgorithm?: string; + /** + * Name of the message digest used by MGF1 + */ + mgf1HashAlgorithm?: string; + /** + * Minimal salt length in bytes + */ + saltLength?: string; + publicKeyEncoding: { + type: "spki"; + format: PubF; + }; + privateKeyEncoding: BasePrivateKeyEncodingOptions & { + type: "pkcs8"; + }; + } + interface DSAKeyPairOptions { + /** + * Key size in bits + */ + modulusLength: number; + /** + * Size of q in bits + */ + divisorLength: number; + publicKeyEncoding: { + type: "spki"; + format: PubF; + }; + privateKeyEncoding: BasePrivateKeyEncodingOptions & { + type: "pkcs8"; + }; + } + interface ECKeyPairOptions { + /** + * Name of the curve to use. + */ + namedCurve: string; + publicKeyEncoding: { + type: "pkcs1" | "spki"; + format: PubF; + }; + privateKeyEncoding: BasePrivateKeyEncodingOptions & { + type: "sec1" | "pkcs8"; + }; + } + interface ED25519KeyPairOptions { + publicKeyEncoding: { + type: "spki"; + format: PubF; + }; + privateKeyEncoding: BasePrivateKeyEncodingOptions & { + type: "pkcs8"; + }; + } + interface ED448KeyPairOptions { + publicKeyEncoding: { + type: "spki"; + format: PubF; + }; + privateKeyEncoding: BasePrivateKeyEncodingOptions & { + type: "pkcs8"; + }; + } + interface X25519KeyPairOptions { + publicKeyEncoding: { + type: "spki"; + format: PubF; + }; + privateKeyEncoding: BasePrivateKeyEncodingOptions & { + type: "pkcs8"; + }; + } + interface X448KeyPairOptions { + publicKeyEncoding: { + type: "spki"; + format: PubF; + }; + privateKeyEncoding: BasePrivateKeyEncodingOptions & { + type: "pkcs8"; + }; + } + interface KeyPairSyncResult { + publicKey: T1; + privateKey: T2; + } + /** + * Generates a new asymmetric key pair of the given `type`. RSA, RSA-PSS, DSA, EC, + * Ed25519, Ed448, X25519, X448, and DH are currently supported. + * + * If a `publicKeyEncoding` or `privateKeyEncoding` was specified, this function + * behaves as if `keyObject.export()` had been called on its result. Otherwise, + * the respective part of the key is returned as a `KeyObject`. + * + * When encoding public keys, it is recommended to use `'spki'`. When encoding + * private keys, it is recommended to use `'pkcs8'` with a strong passphrase, + * and to keep the passphrase confidential. + * + * ```js + * const { + * generateKeyPairSync, + * } = await import('node:crypto'); + * + * const { + * publicKey, + * privateKey, + * } = generateKeyPairSync('rsa', { + * modulusLength: 4096, + * publicKeyEncoding: { + * type: 'spki', + * format: 'pem', + * }, + * privateKeyEncoding: { + * type: 'pkcs8', + * format: 'pem', + * cipher: 'aes-256-cbc', + * passphrase: 'top secret', + * }, + * }); + * ``` + * + * The return value `{ publicKey, privateKey }` represents the generated key pair. + * When PEM encoding was selected, the respective key will be a string, otherwise + * it will be a buffer containing the data encoded as DER. + * @since v10.12.0 + * @param type Must be `'rsa'`, `'rsa-pss'`, `'dsa'`, `'ec'`, `'ed25519'`, `'ed448'`, `'x25519'`, `'x448'`, or `'dh'`. + */ + function generateKeyPairSync( + type: "rsa", + options: RSAKeyPairOptions<"pem", "pem">, + ): KeyPairSyncResult; + function generateKeyPairSync( + type: "rsa", + options: RSAKeyPairOptions<"pem", "der">, + ): KeyPairSyncResult; + function generateKeyPairSync( + type: "rsa", + options: RSAKeyPairOptions<"der", "pem">, + ): KeyPairSyncResult; + function generateKeyPairSync( + type: "rsa", + options: RSAKeyPairOptions<"der", "der">, + ): KeyPairSyncResult; + function generateKeyPairSync(type: "rsa", options: RSAKeyPairKeyObjectOptions): KeyPairKeyObjectResult; + function generateKeyPairSync( + type: "rsa-pss", + options: RSAPSSKeyPairOptions<"pem", "pem">, + ): KeyPairSyncResult; + function generateKeyPairSync( + type: "rsa-pss", + options: RSAPSSKeyPairOptions<"pem", "der">, + ): KeyPairSyncResult; + function generateKeyPairSync( + type: "rsa-pss", + options: RSAPSSKeyPairOptions<"der", "pem">, + ): KeyPairSyncResult; + function generateKeyPairSync( + type: "rsa-pss", + options: RSAPSSKeyPairOptions<"der", "der">, + ): KeyPairSyncResult; + function generateKeyPairSync(type: "rsa-pss", options: RSAPSSKeyPairKeyObjectOptions): KeyPairKeyObjectResult; + function generateKeyPairSync( + type: "dsa", + options: DSAKeyPairOptions<"pem", "pem">, + ): KeyPairSyncResult; + function generateKeyPairSync( + type: "dsa", + options: DSAKeyPairOptions<"pem", "der">, + ): KeyPairSyncResult; + function generateKeyPairSync( + type: "dsa", + options: DSAKeyPairOptions<"der", "pem">, + ): KeyPairSyncResult; + function generateKeyPairSync( + type: "dsa", + options: DSAKeyPairOptions<"der", "der">, + ): KeyPairSyncResult; + function generateKeyPairSync(type: "dsa", options: DSAKeyPairKeyObjectOptions): KeyPairKeyObjectResult; + function generateKeyPairSync( + type: "ec", + options: ECKeyPairOptions<"pem", "pem">, + ): KeyPairSyncResult; + function generateKeyPairSync( + type: "ec", + options: ECKeyPairOptions<"pem", "der">, + ): KeyPairSyncResult; + function generateKeyPairSync( + type: "ec", + options: ECKeyPairOptions<"der", "pem">, + ): KeyPairSyncResult; + function generateKeyPairSync( + type: "ec", + options: ECKeyPairOptions<"der", "der">, + ): KeyPairSyncResult; + function generateKeyPairSync(type: "ec", options: ECKeyPairKeyObjectOptions): KeyPairKeyObjectResult; + function generateKeyPairSync( + type: "ed25519", + options: ED25519KeyPairOptions<"pem", "pem">, + ): KeyPairSyncResult; + function generateKeyPairSync( + type: "ed25519", + options: ED25519KeyPairOptions<"pem", "der">, + ): KeyPairSyncResult; + function generateKeyPairSync( + type: "ed25519", + options: ED25519KeyPairOptions<"der", "pem">, + ): KeyPairSyncResult; + function generateKeyPairSync( + type: "ed25519", + options: ED25519KeyPairOptions<"der", "der">, + ): KeyPairSyncResult; + function generateKeyPairSync(type: "ed25519", options?: ED25519KeyPairKeyObjectOptions): KeyPairKeyObjectResult; + function generateKeyPairSync( + type: "ed448", + options: ED448KeyPairOptions<"pem", "pem">, + ): KeyPairSyncResult; + function generateKeyPairSync( + type: "ed448", + options: ED448KeyPairOptions<"pem", "der">, + ): KeyPairSyncResult; + function generateKeyPairSync( + type: "ed448", + options: ED448KeyPairOptions<"der", "pem">, + ): KeyPairSyncResult; + function generateKeyPairSync( + type: "ed448", + options: ED448KeyPairOptions<"der", "der">, + ): KeyPairSyncResult; + function generateKeyPairSync(type: "ed448", options?: ED448KeyPairKeyObjectOptions): KeyPairKeyObjectResult; + function generateKeyPairSync( + type: "x25519", + options: X25519KeyPairOptions<"pem", "pem">, + ): KeyPairSyncResult; + function generateKeyPairSync( + type: "x25519", + options: X25519KeyPairOptions<"pem", "der">, + ): KeyPairSyncResult; + function generateKeyPairSync( + type: "x25519", + options: X25519KeyPairOptions<"der", "pem">, + ): KeyPairSyncResult; + function generateKeyPairSync( + type: "x25519", + options: X25519KeyPairOptions<"der", "der">, + ): KeyPairSyncResult; + function generateKeyPairSync(type: "x25519", options?: X25519KeyPairKeyObjectOptions): KeyPairKeyObjectResult; + function generateKeyPairSync( + type: "x448", + options: X448KeyPairOptions<"pem", "pem">, + ): KeyPairSyncResult; + function generateKeyPairSync( + type: "x448", + options: X448KeyPairOptions<"pem", "der">, + ): KeyPairSyncResult; + function generateKeyPairSync( + type: "x448", + options: X448KeyPairOptions<"der", "pem">, + ): KeyPairSyncResult; + function generateKeyPairSync( + type: "x448", + options: X448KeyPairOptions<"der", "der">, + ): KeyPairSyncResult; + function generateKeyPairSync(type: "x448", options?: X448KeyPairKeyObjectOptions): KeyPairKeyObjectResult; + /** + * Generates a new asymmetric key pair of the given `type`. RSA, RSA-PSS, DSA, EC, + * Ed25519, Ed448, X25519, X448, and DH are currently supported. + * + * If a `publicKeyEncoding` or `privateKeyEncoding` was specified, this function + * behaves as if `keyObject.export()` had been called on its result. Otherwise, + * the respective part of the key is returned as a `KeyObject`. + * + * It is recommended to encode public keys as `'spki'` and private keys as`'pkcs8'` with encryption for long-term storage: + * + * ```js + * const { + * generateKeyPair, + * } = await import('node:crypto'); + * + * generateKeyPair('rsa', { + * modulusLength: 4096, + * publicKeyEncoding: { + * type: 'spki', + * format: 'pem', + * }, + * privateKeyEncoding: { + * type: 'pkcs8', + * format: 'pem', + * cipher: 'aes-256-cbc', + * passphrase: 'top secret', + * }, + * }, (err, publicKey, privateKey) => { + * // Handle errors and use the generated key pair. + * }); + * ``` + * + * On completion, `callback` will be called with `err` set to `undefined` and`publicKey` / `privateKey` representing the generated key pair. + * + * If this method is invoked as its `util.promisify()` ed version, it returns + * a `Promise` for an `Object` with `publicKey` and `privateKey` properties. + * @since v10.12.0 + * @param type Must be `'rsa'`, `'rsa-pss'`, `'dsa'`, `'ec'`, `'ed25519'`, `'ed448'`, `'x25519'`, `'x448'`, or `'dh'`. + */ + function generateKeyPair( + type: "rsa", + options: RSAKeyPairOptions<"pem", "pem">, + callback: (err: Error | null, publicKey: string, privateKey: string) => void, + ): void; + function generateKeyPair( + type: "rsa", + options: RSAKeyPairOptions<"pem", "der">, + callback: (err: Error | null, publicKey: string, privateKey: Buffer) => void, + ): void; + function generateKeyPair( + type: "rsa", + options: RSAKeyPairOptions<"der", "pem">, + callback: (err: Error | null, publicKey: Buffer, privateKey: string) => void, + ): void; + function generateKeyPair( + type: "rsa", + options: RSAKeyPairOptions<"der", "der">, + callback: (err: Error | null, publicKey: Buffer, privateKey: Buffer) => void, + ): void; + function generateKeyPair( + type: "rsa", + options: RSAKeyPairKeyObjectOptions, + callback: (err: Error | null, publicKey: KeyObject, privateKey: KeyObject) => void, + ): void; + function generateKeyPair( + type: "rsa-pss", + options: RSAPSSKeyPairOptions<"pem", "pem">, + callback: (err: Error | null, publicKey: string, privateKey: string) => void, + ): void; + function generateKeyPair( + type: "rsa-pss", + options: RSAPSSKeyPairOptions<"pem", "der">, + callback: (err: Error | null, publicKey: string, privateKey: Buffer) => void, + ): void; + function generateKeyPair( + type: "rsa-pss", + options: RSAPSSKeyPairOptions<"der", "pem">, + callback: (err: Error | null, publicKey: Buffer, privateKey: string) => void, + ): void; + function generateKeyPair( + type: "rsa-pss", + options: RSAPSSKeyPairOptions<"der", "der">, + callback: (err: Error | null, publicKey: Buffer, privateKey: Buffer) => void, + ): void; + function generateKeyPair( + type: "rsa-pss", + options: RSAPSSKeyPairKeyObjectOptions, + callback: (err: Error | null, publicKey: KeyObject, privateKey: KeyObject) => void, + ): void; + function generateKeyPair( + type: "dsa", + options: DSAKeyPairOptions<"pem", "pem">, + callback: (err: Error | null, publicKey: string, privateKey: string) => void, + ): void; + function generateKeyPair( + type: "dsa", + options: DSAKeyPairOptions<"pem", "der">, + callback: (err: Error | null, publicKey: string, privateKey: Buffer) => void, + ): void; + function generateKeyPair( + type: "dsa", + options: DSAKeyPairOptions<"der", "pem">, + callback: (err: Error | null, publicKey: Buffer, privateKey: string) => void, + ): void; + function generateKeyPair( + type: "dsa", + options: DSAKeyPairOptions<"der", "der">, + callback: (err: Error | null, publicKey: Buffer, privateKey: Buffer) => void, + ): void; + function generateKeyPair( + type: "dsa", + options: DSAKeyPairKeyObjectOptions, + callback: (err: Error | null, publicKey: KeyObject, privateKey: KeyObject) => void, + ): void; + function generateKeyPair( + type: "ec", + options: ECKeyPairOptions<"pem", "pem">, + callback: (err: Error | null, publicKey: string, privateKey: string) => void, + ): void; + function generateKeyPair( + type: "ec", + options: ECKeyPairOptions<"pem", "der">, + callback: (err: Error | null, publicKey: string, privateKey: Buffer) => void, + ): void; + function generateKeyPair( + type: "ec", + options: ECKeyPairOptions<"der", "pem">, + callback: (err: Error | null, publicKey: Buffer, privateKey: string) => void, + ): void; + function generateKeyPair( + type: "ec", + options: ECKeyPairOptions<"der", "der">, + callback: (err: Error | null, publicKey: Buffer, privateKey: Buffer) => void, + ): void; + function generateKeyPair( + type: "ec", + options: ECKeyPairKeyObjectOptions, + callback: (err: Error | null, publicKey: KeyObject, privateKey: KeyObject) => void, + ): void; + function generateKeyPair( + type: "ed25519", + options: ED25519KeyPairOptions<"pem", "pem">, + callback: (err: Error | null, publicKey: string, privateKey: string) => void, + ): void; + function generateKeyPair( + type: "ed25519", + options: ED25519KeyPairOptions<"pem", "der">, + callback: (err: Error | null, publicKey: string, privateKey: Buffer) => void, + ): void; + function generateKeyPair( + type: "ed25519", + options: ED25519KeyPairOptions<"der", "pem">, + callback: (err: Error | null, publicKey: Buffer, privateKey: string) => void, + ): void; + function generateKeyPair( + type: "ed25519", + options: ED25519KeyPairOptions<"der", "der">, + callback: (err: Error | null, publicKey: Buffer, privateKey: Buffer) => void, + ): void; + function generateKeyPair( + type: "ed25519", + options: ED25519KeyPairKeyObjectOptions | undefined, + callback: (err: Error | null, publicKey: KeyObject, privateKey: KeyObject) => void, + ): void; + function generateKeyPair( + type: "ed448", + options: ED448KeyPairOptions<"pem", "pem">, + callback: (err: Error | null, publicKey: string, privateKey: string) => void, + ): void; + function generateKeyPair( + type: "ed448", + options: ED448KeyPairOptions<"pem", "der">, + callback: (err: Error | null, publicKey: string, privateKey: Buffer) => void, + ): void; + function generateKeyPair( + type: "ed448", + options: ED448KeyPairOptions<"der", "pem">, + callback: (err: Error | null, publicKey: Buffer, privateKey: string) => void, + ): void; + function generateKeyPair( + type: "ed448", + options: ED448KeyPairOptions<"der", "der">, + callback: (err: Error | null, publicKey: Buffer, privateKey: Buffer) => void, + ): void; + function generateKeyPair( + type: "ed448", + options: ED448KeyPairKeyObjectOptions | undefined, + callback: (err: Error | null, publicKey: KeyObject, privateKey: KeyObject) => void, + ): void; + function generateKeyPair( + type: "x25519", + options: X25519KeyPairOptions<"pem", "pem">, + callback: (err: Error | null, publicKey: string, privateKey: string) => void, + ): void; + function generateKeyPair( + type: "x25519", + options: X25519KeyPairOptions<"pem", "der">, + callback: (err: Error | null, publicKey: string, privateKey: Buffer) => void, + ): void; + function generateKeyPair( + type: "x25519", + options: X25519KeyPairOptions<"der", "pem">, + callback: (err: Error | null, publicKey: Buffer, privateKey: string) => void, + ): void; + function generateKeyPair( + type: "x25519", + options: X25519KeyPairOptions<"der", "der">, + callback: (err: Error | null, publicKey: Buffer, privateKey: Buffer) => void, + ): void; + function generateKeyPair( + type: "x25519", + options: X25519KeyPairKeyObjectOptions | undefined, + callback: (err: Error | null, publicKey: KeyObject, privateKey: KeyObject) => void, + ): void; + function generateKeyPair( + type: "x448", + options: X448KeyPairOptions<"pem", "pem">, + callback: (err: Error | null, publicKey: string, privateKey: string) => void, + ): void; + function generateKeyPair( + type: "x448", + options: X448KeyPairOptions<"pem", "der">, + callback: (err: Error | null, publicKey: string, privateKey: Buffer) => void, + ): void; + function generateKeyPair( + type: "x448", + options: X448KeyPairOptions<"der", "pem">, + callback: (err: Error | null, publicKey: Buffer, privateKey: string) => void, + ): void; + function generateKeyPair( + type: "x448", + options: X448KeyPairOptions<"der", "der">, + callback: (err: Error | null, publicKey: Buffer, privateKey: Buffer) => void, + ): void; + function generateKeyPair( + type: "x448", + options: X448KeyPairKeyObjectOptions | undefined, + callback: (err: Error | null, publicKey: KeyObject, privateKey: KeyObject) => void, + ): void; + namespace generateKeyPair { + function __promisify__( + type: "rsa", + options: RSAKeyPairOptions<"pem", "pem">, + ): Promise<{ + publicKey: string; + privateKey: string; + }>; + function __promisify__( + type: "rsa", + options: RSAKeyPairOptions<"pem", "der">, + ): Promise<{ + publicKey: string; + privateKey: Buffer; + }>; + function __promisify__( + type: "rsa", + options: RSAKeyPairOptions<"der", "pem">, + ): Promise<{ + publicKey: Buffer; + privateKey: string; + }>; + function __promisify__( + type: "rsa", + options: RSAKeyPairOptions<"der", "der">, + ): Promise<{ + publicKey: Buffer; + privateKey: Buffer; + }>; + function __promisify__(type: "rsa", options: RSAKeyPairKeyObjectOptions): Promise; + function __promisify__( + type: "rsa-pss", + options: RSAPSSKeyPairOptions<"pem", "pem">, + ): Promise<{ + publicKey: string; + privateKey: string; + }>; + function __promisify__( + type: "rsa-pss", + options: RSAPSSKeyPairOptions<"pem", "der">, + ): Promise<{ + publicKey: string; + privateKey: Buffer; + }>; + function __promisify__( + type: "rsa-pss", + options: RSAPSSKeyPairOptions<"der", "pem">, + ): Promise<{ + publicKey: Buffer; + privateKey: string; + }>; + function __promisify__( + type: "rsa-pss", + options: RSAPSSKeyPairOptions<"der", "der">, + ): Promise<{ + publicKey: Buffer; + privateKey: Buffer; + }>; + function __promisify__( + type: "rsa-pss", + options: RSAPSSKeyPairKeyObjectOptions, + ): Promise; + function __promisify__( + type: "dsa", + options: DSAKeyPairOptions<"pem", "pem">, + ): Promise<{ + publicKey: string; + privateKey: string; + }>; + function __promisify__( + type: "dsa", + options: DSAKeyPairOptions<"pem", "der">, + ): Promise<{ + publicKey: string; + privateKey: Buffer; + }>; + function __promisify__( + type: "dsa", + options: DSAKeyPairOptions<"der", "pem">, + ): Promise<{ + publicKey: Buffer; + privateKey: string; + }>; + function __promisify__( + type: "dsa", + options: DSAKeyPairOptions<"der", "der">, + ): Promise<{ + publicKey: Buffer; + privateKey: Buffer; + }>; + function __promisify__(type: "dsa", options: DSAKeyPairKeyObjectOptions): Promise; + function __promisify__( + type: "ec", + options: ECKeyPairOptions<"pem", "pem">, + ): Promise<{ + publicKey: string; + privateKey: string; + }>; + function __promisify__( + type: "ec", + options: ECKeyPairOptions<"pem", "der">, + ): Promise<{ + publicKey: string; + privateKey: Buffer; + }>; + function __promisify__( + type: "ec", + options: ECKeyPairOptions<"der", "pem">, + ): Promise<{ + publicKey: Buffer; + privateKey: string; + }>; + function __promisify__( + type: "ec", + options: ECKeyPairOptions<"der", "der">, + ): Promise<{ + publicKey: Buffer; + privateKey: Buffer; + }>; + function __promisify__(type: "ec", options: ECKeyPairKeyObjectOptions): Promise; + function __promisify__( + type: "ed25519", + options: ED25519KeyPairOptions<"pem", "pem">, + ): Promise<{ + publicKey: string; + privateKey: string; + }>; + function __promisify__( + type: "ed25519", + options: ED25519KeyPairOptions<"pem", "der">, + ): Promise<{ + publicKey: string; + privateKey: Buffer; + }>; + function __promisify__( + type: "ed25519", + options: ED25519KeyPairOptions<"der", "pem">, + ): Promise<{ + publicKey: Buffer; + privateKey: string; + }>; + function __promisify__( + type: "ed25519", + options: ED25519KeyPairOptions<"der", "der">, + ): Promise<{ + publicKey: Buffer; + privateKey: Buffer; + }>; + function __promisify__( + type: "ed25519", + options?: ED25519KeyPairKeyObjectOptions, + ): Promise; + function __promisify__( + type: "ed448", + options: ED448KeyPairOptions<"pem", "pem">, + ): Promise<{ + publicKey: string; + privateKey: string; + }>; + function __promisify__( + type: "ed448", + options: ED448KeyPairOptions<"pem", "der">, + ): Promise<{ + publicKey: string; + privateKey: Buffer; + }>; + function __promisify__( + type: "ed448", + options: ED448KeyPairOptions<"der", "pem">, + ): Promise<{ + publicKey: Buffer; + privateKey: string; + }>; + function __promisify__( + type: "ed448", + options: ED448KeyPairOptions<"der", "der">, + ): Promise<{ + publicKey: Buffer; + privateKey: Buffer; + }>; + function __promisify__(type: "ed448", options?: ED448KeyPairKeyObjectOptions): Promise; + function __promisify__( + type: "x25519", + options: X25519KeyPairOptions<"pem", "pem">, + ): Promise<{ + publicKey: string; + privateKey: string; + }>; + function __promisify__( + type: "x25519", + options: X25519KeyPairOptions<"pem", "der">, + ): Promise<{ + publicKey: string; + privateKey: Buffer; + }>; + function __promisify__( + type: "x25519", + options: X25519KeyPairOptions<"der", "pem">, + ): Promise<{ + publicKey: Buffer; + privateKey: string; + }>; + function __promisify__( + type: "x25519", + options: X25519KeyPairOptions<"der", "der">, + ): Promise<{ + publicKey: Buffer; + privateKey: Buffer; + }>; + function __promisify__( + type: "x25519", + options?: X25519KeyPairKeyObjectOptions, + ): Promise; + function __promisify__( + type: "x448", + options: X448KeyPairOptions<"pem", "pem">, + ): Promise<{ + publicKey: string; + privateKey: string; + }>; + function __promisify__( + type: "x448", + options: X448KeyPairOptions<"pem", "der">, + ): Promise<{ + publicKey: string; + privateKey: Buffer; + }>; + function __promisify__( + type: "x448", + options: X448KeyPairOptions<"der", "pem">, + ): Promise<{ + publicKey: Buffer; + privateKey: string; + }>; + function __promisify__( + type: "x448", + options: X448KeyPairOptions<"der", "der">, + ): Promise<{ + publicKey: Buffer; + privateKey: Buffer; + }>; + function __promisify__(type: "x448", options?: X448KeyPairKeyObjectOptions): Promise; + } + /** + * Calculates and returns the signature for `data` using the given private key and + * algorithm. If `algorithm` is `null` or `undefined`, then the algorithm is + * dependent upon the key type (especially Ed25519 and Ed448). + * + * If `key` is not a `KeyObject`, this function behaves as if `key` had been + * passed to {@link createPrivateKey}. If it is an object, the following + * additional properties can be passed: + * + * If the `callback` function is provided this function uses libuv's threadpool. + * @since v12.0.0 + */ + function sign( + algorithm: string | null | undefined, + data: NodeJS.ArrayBufferView, + key: KeyLike | SignKeyObjectInput | SignPrivateKeyInput, + ): Buffer; + function sign( + algorithm: string | null | undefined, + data: NodeJS.ArrayBufferView, + key: KeyLike | SignKeyObjectInput | SignPrivateKeyInput, + callback: (error: Error | null, data: Buffer) => void, + ): void; + /** + * Verifies the given signature for `data` using the given key and algorithm. If`algorithm` is `null` or `undefined`, then the algorithm is dependent upon the + * key type (especially Ed25519 and Ed448). + * + * If `key` is not a `KeyObject`, this function behaves as if `key` had been + * passed to {@link createPublicKey}. If it is an object, the following + * additional properties can be passed: + * + * The `signature` argument is the previously calculated signature for the `data`. + * + * Because public keys can be derived from private keys, a private key or a public + * key may be passed for `key`. + * + * If the `callback` function is provided this function uses libuv's threadpool. + * @since v12.0.0 + */ + function verify( + algorithm: string | null | undefined, + data: NodeJS.ArrayBufferView, + key: KeyLike | VerifyKeyObjectInput | VerifyPublicKeyInput | VerifyJsonWebKeyInput, + signature: NodeJS.ArrayBufferView, + ): boolean; + function verify( + algorithm: string | null | undefined, + data: NodeJS.ArrayBufferView, + key: KeyLike | VerifyKeyObjectInput | VerifyPublicKeyInput | VerifyJsonWebKeyInput, + signature: NodeJS.ArrayBufferView, + callback: (error: Error | null, result: boolean) => void, + ): void; + /** + * Computes the Diffie-Hellman secret based on a `privateKey` and a `publicKey`. + * Both keys must have the same `asymmetricKeyType`, which must be one of `'dh'`(for Diffie-Hellman), `'ec'` (for ECDH), `'x448'`, or `'x25519'` (for ECDH-ES). + * @since v13.9.0, v12.17.0 + */ + function diffieHellman(options: { privateKey: KeyObject; publicKey: KeyObject }): Buffer; + type CipherMode = "cbc" | "ccm" | "cfb" | "ctr" | "ecb" | "gcm" | "ocb" | "ofb" | "stream" | "wrap" | "xts"; + interface CipherInfoOptions { + /** + * A test key length. + */ + keyLength?: number | undefined; + /** + * A test IV length. + */ + ivLength?: number | undefined; + } + interface CipherInfo { + /** + * The name of the cipher. + */ + name: string; + /** + * The nid of the cipher. + */ + nid: number; + /** + * The block size of the cipher in bytes. + * This property is omitted when mode is 'stream'. + */ + blockSize?: number | undefined; + /** + * The expected or default initialization vector length in bytes. + * This property is omitted if the cipher does not use an initialization vector. + */ + ivLength?: number | undefined; + /** + * The expected or default key length in bytes. + */ + keyLength: number; + /** + * The cipher mode. + */ + mode: CipherMode; + } + /** + * Returns information about a given cipher. + * + * Some ciphers accept variable length keys and initialization vectors. By default, + * the `crypto.getCipherInfo()` method will return the default values for these + * ciphers. To test if a given key length or iv length is acceptable for given + * cipher, use the `keyLength` and `ivLength` options. If the given values are + * unacceptable, `undefined` will be returned. + * @since v15.0.0 + * @param nameOrNid The name or nid of the cipher to query. + */ + function getCipherInfo(nameOrNid: string | number, options?: CipherInfoOptions): CipherInfo | undefined; + /** + * HKDF is a simple key derivation function defined in RFC 5869\. The given `ikm`,`salt` and `info` are used with the `digest` to derive a key of `keylen` bytes. + * + * The supplied `callback` function is called with two arguments: `err` and`derivedKey`. If an errors occurs while deriving the key, `err` will be set; + * otherwise `err` will be `null`. The successfully generated `derivedKey` will + * be passed to the callback as an [ArrayBuffer](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer). An error will be thrown if any + * of the input arguments specify invalid values or types. + * + * ```js + * import { Buffer } from 'node:buffer'; + * const { + * hkdf, + * } = await import('node:crypto'); + * + * hkdf('sha512', 'key', 'salt', 'info', 64, (err, derivedKey) => { + * if (err) throw err; + * console.log(Buffer.from(derivedKey).toString('hex')); // '24156e2...5391653' + * }); + * ``` + * @since v15.0.0 + * @param digest The digest algorithm to use. + * @param ikm The input keying material. Must be provided but can be zero-length. + * @param salt The salt value. Must be provided but can be zero-length. + * @param info Additional info value. Must be provided but can be zero-length, and cannot be more than 1024 bytes. + * @param keylen The length of the key to generate. Must be greater than 0. The maximum allowable value is `255` times the number of bytes produced by the selected digest function (e.g. `sha512` + * generates 64-byte hashes, making the maximum HKDF output 16320 bytes). + */ + function hkdf( + digest: string, + irm: BinaryLike | KeyObject, + salt: BinaryLike, + info: BinaryLike, + keylen: number, + callback: (err: Error | null, derivedKey: ArrayBuffer) => void, + ): void; + /** + * Provides a synchronous HKDF key derivation function as defined in RFC 5869\. The + * given `ikm`, `salt` and `info` are used with the `digest` to derive a key of`keylen` bytes. + * + * The successfully generated `derivedKey` will be returned as an [ArrayBuffer](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer). + * + * An error will be thrown if any of the input arguments specify invalid values or + * types, or if the derived key cannot be generated. + * + * ```js + * import { Buffer } from 'node:buffer'; + * const { + * hkdfSync, + * } = await import('node:crypto'); + * + * const derivedKey = hkdfSync('sha512', 'key', 'salt', 'info', 64); + * console.log(Buffer.from(derivedKey).toString('hex')); // '24156e2...5391653' + * ``` + * @since v15.0.0 + * @param digest The digest algorithm to use. + * @param ikm The input keying material. Must be provided but can be zero-length. + * @param salt The salt value. Must be provided but can be zero-length. + * @param info Additional info value. Must be provided but can be zero-length, and cannot be more than 1024 bytes. + * @param keylen The length of the key to generate. Must be greater than 0. The maximum allowable value is `255` times the number of bytes produced by the selected digest function (e.g. `sha512` + * generates 64-byte hashes, making the maximum HKDF output 16320 bytes). + */ + function hkdfSync( + digest: string, + ikm: BinaryLike | KeyObject, + salt: BinaryLike, + info: BinaryLike, + keylen: number, + ): ArrayBuffer; + interface SecureHeapUsage { + /** + * The total allocated secure heap size as specified using the `--secure-heap=n` command-line flag. + */ + total: number; + /** + * The minimum allocation from the secure heap as specified using the `--secure-heap-min` command-line flag. + */ + min: number; + /** + * The total number of bytes currently allocated from the secure heap. + */ + used: number; + /** + * The calculated ratio of `used` to `total` allocated bytes. + */ + utilization: number; + } + /** + * @since v15.6.0 + */ + function secureHeapUsed(): SecureHeapUsage; + interface RandomUUIDOptions { + /** + * By default, to improve performance, + * Node.js will pre-emptively generate and persistently cache enough + * random data to generate up to 128 random UUIDs. To generate a UUID + * without using the cache, set `disableEntropyCache` to `true`. + * + * @default `false` + */ + disableEntropyCache?: boolean | undefined; + } + /** + * Generates a random [RFC 4122](https://www.rfc-editor.org/rfc/rfc4122.txt) version 4 UUID. The UUID is generated using a + * cryptographic pseudorandom number generator. + * @since v15.6.0, v14.17.0 + */ + function randomUUID(options?: RandomUUIDOptions): string; + interface X509CheckOptions { + /** + * @default 'always' + */ + subject?: "always" | "default" | "never"; + /** + * @default true + */ + wildcards?: boolean; + /** + * @default true + */ + partialWildcards?: boolean; + /** + * @default false + */ + multiLabelWildcards?: boolean; + /** + * @default false + */ + singleLabelSubdomains?: boolean; + } + /** + * Encapsulates an X509 certificate and provides read-only access to + * its information. + * + * ```js + * const { X509Certificate } = await import('node:crypto'); + * + * const x509 = new X509Certificate('{... pem encoded cert ...}'); + * + * console.log(x509.subject); + * ``` + * @since v15.6.0 + */ + class X509Certificate { + /** + * Will be \`true\` if this is a Certificate Authority (CA) certificate. + * @since v15.6.0 + */ + readonly ca: boolean; + /** + * The SHA-1 fingerprint of this certificate. + * + * Because SHA-1 is cryptographically broken and because the security of SHA-1 is + * significantly worse than that of algorithms that are commonly used to sign + * certificates, consider using `x509.fingerprint256` instead. + * @since v15.6.0 + */ + readonly fingerprint: string; + /** + * The SHA-256 fingerprint of this certificate. + * @since v15.6.0 + */ + readonly fingerprint256: string; + /** + * The SHA-512 fingerprint of this certificate. + * + * Because computing the SHA-256 fingerprint is usually faster and because it is + * only half the size of the SHA-512 fingerprint, `x509.fingerprint256` may be + * a better choice. While SHA-512 presumably provides a higher level of security in + * general, the security of SHA-256 matches that of most algorithms that are + * commonly used to sign certificates. + * @since v17.2.0, v16.14.0 + */ + readonly fingerprint512: string; + /** + * The complete subject of this certificate. + * @since v15.6.0 + */ + readonly subject: string; + /** + * The subject alternative name specified for this certificate. + * + * This is a comma-separated list of subject alternative names. Each entry begins + * with a string identifying the kind of the subject alternative name followed by + * a colon and the value associated with the entry. + * + * Earlier versions of Node.js incorrectly assumed that it is safe to split this + * property at the two-character sequence `', '` (see [CVE-2021-44532](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-44532)). However, + * both malicious and legitimate certificates can contain subject alternative names + * that include this sequence when represented as a string. + * + * After the prefix denoting the type of the entry, the remainder of each entry + * might be enclosed in quotes to indicate that the value is a JSON string literal. + * For backward compatibility, Node.js only uses JSON string literals within this + * property when necessary to avoid ambiguity. Third-party code should be prepared + * to handle both possible entry formats. + * @since v15.6.0 + */ + readonly subjectAltName: string | undefined; + /** + * A textual representation of the certificate's authority information access + * extension. + * + * This is a line feed separated list of access descriptions. Each line begins with + * the access method and the kind of the access location, followed by a colon and + * the value associated with the access location. + * + * After the prefix denoting the access method and the kind of the access location, + * the remainder of each line might be enclosed in quotes to indicate that the + * value is a JSON string literal. For backward compatibility, Node.js only uses + * JSON string literals within this property when necessary to avoid ambiguity. + * Third-party code should be prepared to handle both possible entry formats. + * @since v15.6.0 + */ + readonly infoAccess: string | undefined; + /** + * An array detailing the key usages for this certificate. + * @since v15.6.0 + */ + readonly keyUsage: string[]; + /** + * The issuer identification included in this certificate. + * @since v15.6.0 + */ + readonly issuer: string; + /** + * The issuer certificate or `undefined` if the issuer certificate is not + * available. + * @since v15.9.0 + */ + readonly issuerCertificate?: X509Certificate | undefined; + /** + * The public key `KeyObject` for this certificate. + * @since v15.6.0 + */ + readonly publicKey: KeyObject; + /** + * A `Buffer` containing the DER encoding of this certificate. + * @since v15.6.0 + */ + readonly raw: Buffer; + /** + * The serial number of this certificate. + * + * Serial numbers are assigned by certificate authorities and do not uniquely + * identify certificates. Consider using `x509.fingerprint256` as a unique + * identifier instead. + * @since v15.6.0 + */ + readonly serialNumber: string; + /** + * The date/time from which this certificate is considered valid. + * @since v15.6.0 + */ + readonly validFrom: string; + /** + * The date/time until which this certificate is considered valid. + * @since v15.6.0 + */ + readonly validTo: string; + constructor(buffer: BinaryLike); + /** + * Checks whether the certificate matches the given email address. + * + * If the `'subject'` option is undefined or set to `'default'`, the certificate + * subject is only considered if the subject alternative name extension either does + * not exist or does not contain any email addresses. + * + * If the `'subject'` option is set to `'always'` and if the subject alternative + * name extension either does not exist or does not contain a matching email + * address, the certificate subject is considered. + * + * If the `'subject'` option is set to `'never'`, the certificate subject is never + * considered, even if the certificate contains no subject alternative names. + * @since v15.6.0 + * @return Returns `email` if the certificate matches, `undefined` if it does not. + */ + checkEmail(email: string, options?: Pick): string | undefined; + /** + * Checks whether the certificate matches the given host name. + * + * If the certificate matches the given host name, the matching subject name is + * returned. The returned name might be an exact match (e.g., `foo.example.com`) + * or it might contain wildcards (e.g., `*.example.com`). Because host name + * comparisons are case-insensitive, the returned subject name might also differ + * from the given `name` in capitalization. + * + * If the `'subject'` option is undefined or set to `'default'`, the certificate + * subject is only considered if the subject alternative name extension either does + * not exist or does not contain any DNS names. This behavior is consistent with [RFC 2818](https://www.rfc-editor.org/rfc/rfc2818.txt) ("HTTP Over TLS"). + * + * If the `'subject'` option is set to `'always'` and if the subject alternative + * name extension either does not exist or does not contain a matching DNS name, + * the certificate subject is considered. + * + * If the `'subject'` option is set to `'never'`, the certificate subject is never + * considered, even if the certificate contains no subject alternative names. + * @since v15.6.0 + * @return Returns a subject name that matches `name`, or `undefined` if no subject name matches `name`. + */ + checkHost(name: string, options?: X509CheckOptions): string | undefined; + /** + * Checks whether the certificate matches the given IP address (IPv4 or IPv6). + * + * Only [RFC 5280](https://www.rfc-editor.org/rfc/rfc5280.txt) `iPAddress` subject alternative names are considered, and they + * must match the given `ip` address exactly. Other subject alternative names as + * well as the subject field of the certificate are ignored. + * @since v15.6.0 + * @return Returns `ip` if the certificate matches, `undefined` if it does not. + */ + checkIP(ip: string): string | undefined; + /** + * Checks whether this certificate was issued by the given `otherCert`. + * @since v15.6.0 + */ + checkIssued(otherCert: X509Certificate): boolean; + /** + * Checks whether the public key for this certificate is consistent with + * the given private key. + * @since v15.6.0 + * @param privateKey A private key. + */ + checkPrivateKey(privateKey: KeyObject): boolean; + /** + * There is no standard JSON encoding for X509 certificates. The`toJSON()` method returns a string containing the PEM encoded + * certificate. + * @since v15.6.0 + */ + toJSON(): string; + /** + * Returns information about this certificate using the legacy `certificate object` encoding. + * @since v15.6.0 + */ + toLegacyObject(): PeerCertificate; + /** + * Returns the PEM-encoded certificate. + * @since v15.6.0 + */ + toString(): string; + /** + * Verifies that this certificate was signed by the given public key. + * Does not perform any other validation checks on the certificate. + * @since v15.6.0 + * @param publicKey A public key. + */ + verify(publicKey: KeyObject): boolean; + } + type LargeNumberLike = NodeJS.ArrayBufferView | SharedArrayBuffer | ArrayBuffer | bigint; + interface GeneratePrimeOptions { + add?: LargeNumberLike | undefined; + rem?: LargeNumberLike | undefined; + /** + * @default false + */ + safe?: boolean | undefined; + bigint?: boolean | undefined; + } + interface GeneratePrimeOptionsBigInt extends GeneratePrimeOptions { + bigint: true; + } + interface GeneratePrimeOptionsArrayBuffer extends GeneratePrimeOptions { + bigint?: false | undefined; + } + /** + * Generates a pseudorandom prime of `size` bits. + * + * If `options.safe` is `true`, the prime will be a safe prime -- that is,`(prime - 1) / 2` will also be a prime. + * + * The `options.add` and `options.rem` parameters can be used to enforce additional + * requirements, e.g., for Diffie-Hellman: + * + * * If `options.add` and `options.rem` are both set, the prime will satisfy the + * condition that `prime % add = rem`. + * * If only `options.add` is set and `options.safe` is not `true`, the prime will + * satisfy the condition that `prime % add = 1`. + * * If only `options.add` is set and `options.safe` is set to `true`, the prime + * will instead satisfy the condition that `prime % add = 3`. This is necessary + * because `prime % add = 1` for `options.add > 2` would contradict the condition + * enforced by `options.safe`. + * * `options.rem` is ignored if `options.add` is not given. + * + * Both `options.add` and `options.rem` must be encoded as big-endian sequences + * if given as an `ArrayBuffer`, `SharedArrayBuffer`, `TypedArray`, `Buffer`, or`DataView`. + * + * By default, the prime is encoded as a big-endian sequence of octets + * in an [ArrayBuffer](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer). If the `bigint` option is `true`, then a + * [bigint](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt) is provided. + * @since v15.8.0 + * @param size The size (in bits) of the prime to generate. + */ + function generatePrime(size: number, callback: (err: Error | null, prime: ArrayBuffer) => void): void; + function generatePrime( + size: number, + options: GeneratePrimeOptionsBigInt, + callback: (err: Error | null, prime: bigint) => void, + ): void; + function generatePrime( + size: number, + options: GeneratePrimeOptionsArrayBuffer, + callback: (err: Error | null, prime: ArrayBuffer) => void, + ): void; + function generatePrime( + size: number, + options: GeneratePrimeOptions, + callback: (err: Error | null, prime: ArrayBuffer | bigint) => void, + ): void; + /** + * Generates a pseudorandom prime of `size` bits. + * + * If `options.safe` is `true`, the prime will be a safe prime -- that is,`(prime - 1) / 2` will also be a prime. + * + * The `options.add` and `options.rem` parameters can be used to enforce additional + * requirements, e.g., for Diffie-Hellman: + * + * * If `options.add` and `options.rem` are both set, the prime will satisfy the + * condition that `prime % add = rem`. + * * If only `options.add` is set and `options.safe` is not `true`, the prime will + * satisfy the condition that `prime % add = 1`. + * * If only `options.add` is set and `options.safe` is set to `true`, the prime + * will instead satisfy the condition that `prime % add = 3`. This is necessary + * because `prime % add = 1` for `options.add > 2` would contradict the condition + * enforced by `options.safe`. + * * `options.rem` is ignored if `options.add` is not given. + * + * Both `options.add` and `options.rem` must be encoded as big-endian sequences + * if given as an `ArrayBuffer`, `SharedArrayBuffer`, `TypedArray`, `Buffer`, or`DataView`. + * + * By default, the prime is encoded as a big-endian sequence of octets + * in an [ArrayBuffer](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer). If the `bigint` option is `true`, then a + * [bigint](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt) is provided. + * @since v15.8.0 + * @param size The size (in bits) of the prime to generate. + */ + function generatePrimeSync(size: number): ArrayBuffer; + function generatePrimeSync(size: number, options: GeneratePrimeOptionsBigInt): bigint; + function generatePrimeSync(size: number, options: GeneratePrimeOptionsArrayBuffer): ArrayBuffer; + function generatePrimeSync(size: number, options: GeneratePrimeOptions): ArrayBuffer | bigint; + interface CheckPrimeOptions { + /** + * The number of Miller-Rabin probabilistic primality iterations to perform. + * When the value is 0 (zero), a number of checks is used that yields a false positive rate of at most `2**-64` for random input. + * Care must be used when selecting a number of checks. + * Refer to the OpenSSL documentation for the BN_is_prime_ex function nchecks options for more details. + * + * @default 0 + */ + checks?: number | undefined; + } + /** + * Checks the primality of the `candidate`. + * @since v15.8.0 + * @param candidate A possible prime encoded as a sequence of big endian octets of arbitrary length. + */ + function checkPrime(value: LargeNumberLike, callback: (err: Error | null, result: boolean) => void): void; + function checkPrime( + value: LargeNumberLike, + options: CheckPrimeOptions, + callback: (err: Error | null, result: boolean) => void, + ): void; + /** + * Checks the primality of the `candidate`. + * @since v15.8.0 + * @param candidate A possible prime encoded as a sequence of big endian octets of arbitrary length. + * @return `true` if the candidate is a prime with an error probability less than `0.25 ** options.checks`. + */ + function checkPrimeSync(candidate: LargeNumberLike, options?: CheckPrimeOptions): boolean; + /** + * Load and set the `engine` for some or all OpenSSL functions (selected by flags). + * + * `engine` could be either an id or a path to the engine's shared library. + * + * The optional `flags` argument uses `ENGINE_METHOD_ALL` by default. The `flags`is a bit field taking one of or a mix of the following flags (defined in`crypto.constants`): + * + * * `crypto.constants.ENGINE_METHOD_RSA` + * * `crypto.constants.ENGINE_METHOD_DSA` + * * `crypto.constants.ENGINE_METHOD_DH` + * * `crypto.constants.ENGINE_METHOD_RAND` + * * `crypto.constants.ENGINE_METHOD_EC` + * * `crypto.constants.ENGINE_METHOD_CIPHERS` + * * `crypto.constants.ENGINE_METHOD_DIGESTS` + * * `crypto.constants.ENGINE_METHOD_PKEY_METHS` + * * `crypto.constants.ENGINE_METHOD_PKEY_ASN1_METHS` + * * `crypto.constants.ENGINE_METHOD_ALL` + * * `crypto.constants.ENGINE_METHOD_NONE` + * @since v0.11.11 + * @param flags + */ + function setEngine(engine: string, flags?: number): void; + /** + * A convenient alias for {@link webcrypto.getRandomValues}. This + * implementation is not compliant with the Web Crypto spec, to write + * web-compatible code use {@link webcrypto.getRandomValues} instead. + * @since v17.4.0 + * @return Returns `typedArray`. + */ + function getRandomValues(typedArray: T): T; + /** + * A convenient alias for `crypto.webcrypto.subtle`. + * @since v17.4.0 + */ + const subtle: webcrypto.SubtleCrypto; + /** + * An implementation of the Web Crypto API standard. + * + * See the {@link https://nodejs.org/docs/latest/api/webcrypto.html Web Crypto API documentation} for details. + * @since v15.0.0 + */ + const webcrypto: webcrypto.Crypto; + namespace webcrypto { + type BufferSource = ArrayBufferView | ArrayBuffer; + type KeyFormat = "jwk" | "pkcs8" | "raw" | "spki"; + type KeyType = "private" | "public" | "secret"; + type KeyUsage = + | "decrypt" + | "deriveBits" + | "deriveKey" + | "encrypt" + | "sign" + | "unwrapKey" + | "verify" + | "wrapKey"; + type AlgorithmIdentifier = Algorithm | string; + type HashAlgorithmIdentifier = AlgorithmIdentifier; + type NamedCurve = string; + type BigInteger = Uint8Array; + interface AesCbcParams extends Algorithm { + iv: BufferSource; + } + interface AesCtrParams extends Algorithm { + counter: BufferSource; + length: number; + } + interface AesDerivedKeyParams extends Algorithm { + length: number; + } + interface AesGcmParams extends Algorithm { + additionalData?: BufferSource; + iv: BufferSource; + tagLength?: number; + } + interface AesKeyAlgorithm extends KeyAlgorithm { + length: number; + } + interface AesKeyGenParams extends Algorithm { + length: number; + } + interface Algorithm { + name: string; + } + interface EcKeyAlgorithm extends KeyAlgorithm { + namedCurve: NamedCurve; + } + interface EcKeyGenParams extends Algorithm { + namedCurve: NamedCurve; + } + interface EcKeyImportParams extends Algorithm { + namedCurve: NamedCurve; + } + interface EcdhKeyDeriveParams extends Algorithm { + public: CryptoKey; + } + interface EcdsaParams extends Algorithm { + hash: HashAlgorithmIdentifier; + } + interface Ed448Params extends Algorithm { + context?: BufferSource; + } + interface HkdfParams extends Algorithm { + hash: HashAlgorithmIdentifier; + info: BufferSource; + salt: BufferSource; + } + interface HmacImportParams extends Algorithm { + hash: HashAlgorithmIdentifier; + length?: number; + } + interface HmacKeyAlgorithm extends KeyAlgorithm { + hash: KeyAlgorithm; + length: number; + } + interface HmacKeyGenParams extends Algorithm { + hash: HashAlgorithmIdentifier; + length?: number; + } + interface JsonWebKey { + alg?: string; + crv?: string; + d?: string; + dp?: string; + dq?: string; + e?: string; + ext?: boolean; + k?: string; + key_ops?: string[]; + kty?: string; + n?: string; + oth?: RsaOtherPrimesInfo[]; + p?: string; + q?: string; + qi?: string; + use?: string; + x?: string; + y?: string; + } + interface KeyAlgorithm { + name: string; + } + interface Pbkdf2Params extends Algorithm { + hash: HashAlgorithmIdentifier; + iterations: number; + salt: BufferSource; + } + interface RsaHashedImportParams extends Algorithm { + hash: HashAlgorithmIdentifier; + } + interface RsaHashedKeyAlgorithm extends RsaKeyAlgorithm { + hash: KeyAlgorithm; + } + interface RsaHashedKeyGenParams extends RsaKeyGenParams { + hash: HashAlgorithmIdentifier; + } + interface RsaKeyAlgorithm extends KeyAlgorithm { + modulusLength: number; + publicExponent: BigInteger; + } + interface RsaKeyGenParams extends Algorithm { + modulusLength: number; + publicExponent: BigInteger; + } + interface RsaOaepParams extends Algorithm { + label?: BufferSource; + } + interface RsaOtherPrimesInfo { + d?: string; + r?: string; + t?: string; + } + interface RsaPssParams extends Algorithm { + saltLength: number; + } + /** + * Calling `require('node:crypto').webcrypto` returns an instance of the `Crypto` class. + * `Crypto` is a singleton that provides access to the remainder of the crypto API. + * @since v15.0.0 + */ + interface Crypto { + /** + * Provides access to the `SubtleCrypto` API. + * @since v15.0.0 + */ + readonly subtle: SubtleCrypto; + /** + * Generates cryptographically strong random values. + * The given `typedArray` is filled with random values, and a reference to `typedArray` is returned. + * + * The given `typedArray` must be an integer-based instance of {@link NodeJS.TypedArray}, i.e. `Float32Array` and `Float64Array` are not accepted. + * + * An error will be thrown if the given `typedArray` is larger than 65,536 bytes. + * @since v15.0.0 + */ + getRandomValues>(typedArray: T): T; + /** + * Generates a random {@link https://www.rfc-editor.org/rfc/rfc4122.txt RFC 4122} version 4 UUID. + * The UUID is generated using a cryptographic pseudorandom number generator. + * @since v16.7.0 + */ + randomUUID(): string; + CryptoKey: CryptoKeyConstructor; + } + // This constructor throws ILLEGAL_CONSTRUCTOR so it should not be newable. + interface CryptoKeyConstructor { + /** Illegal constructor */ + (_: { readonly _: unique symbol }): never; // Allows instanceof to work but not be callable by the user. + readonly length: 0; + readonly name: "CryptoKey"; + readonly prototype: CryptoKey; + } + /** + * @since v15.0.0 + */ + interface CryptoKey { + /** + * An object detailing the algorithm for which the key can be used along with additional algorithm-specific parameters. + * @since v15.0.0 + */ + readonly algorithm: KeyAlgorithm; + /** + * When `true`, the {@link CryptoKey} can be extracted using either `subtleCrypto.exportKey()` or `subtleCrypto.wrapKey()`. + * @since v15.0.0 + */ + readonly extractable: boolean; + /** + * A string identifying whether the key is a symmetric (`'secret'`) or asymmetric (`'private'` or `'public'`) key. + * @since v15.0.0 + */ + readonly type: KeyType; + /** + * An array of strings identifying the operations for which the key may be used. + * + * The possible usages are: + * - `'encrypt'` - The key may be used to encrypt data. + * - `'decrypt'` - The key may be used to decrypt data. + * - `'sign'` - The key may be used to generate digital signatures. + * - `'verify'` - The key may be used to verify digital signatures. + * - `'deriveKey'` - The key may be used to derive a new key. + * - `'deriveBits'` - The key may be used to derive bits. + * - `'wrapKey'` - The key may be used to wrap another key. + * - `'unwrapKey'` - The key may be used to unwrap another key. + * + * Valid key usages depend on the key algorithm (identified by `cryptokey.algorithm.name`). + * @since v15.0.0 + */ + readonly usages: KeyUsage[]; + } + /** + * The `CryptoKeyPair` is a simple dictionary object with `publicKey` and `privateKey` properties, representing an asymmetric key pair. + * @since v15.0.0 + */ + interface CryptoKeyPair { + /** + * A {@link CryptoKey} whose type will be `'private'`. + * @since v15.0.0 + */ + privateKey: CryptoKey; + /** + * A {@link CryptoKey} whose type will be `'public'`. + * @since v15.0.0 + */ + publicKey: CryptoKey; + } + /** + * @since v15.0.0 + */ + interface SubtleCrypto { + /** + * Using the method and parameters specified in `algorithm` and the keying material provided by `key`, + * `subtle.decrypt()` attempts to decipher the provided `data`. If successful, + * the returned promise will be resolved with an `` containing the plaintext result. + * + * The algorithms currently supported include: + * + * - `'RSA-OAEP'` + * - `'AES-CTR'` + * - `'AES-CBC'` + * - `'AES-GCM'` + * @since v15.0.0 + */ + decrypt( + algorithm: AlgorithmIdentifier | RsaOaepParams | AesCtrParams | AesCbcParams | AesGcmParams, + key: CryptoKey, + data: BufferSource, + ): Promise; + /** + * Using the method and parameters specified in `algorithm` and the keying material provided by `baseKey`, + * `subtle.deriveBits()` attempts to generate `length` bits. + * The Node.js implementation requires that when `length` is a number it must be multiple of `8`. + * When `length` is `null` the maximum number of bits for a given algorithm is generated. This is allowed + * for the `'ECDH'`, `'X25519'`, and `'X448'` algorithms. + * If successful, the returned promise will be resolved with an `` containing the generated data. + * + * The algorithms currently supported include: + * + * - `'ECDH'` + * - `'X25519'` + * - `'X448'` + * - `'HKDF'` + * - `'PBKDF2'` + * @since v15.0.0 + */ + deriveBits(algorithm: EcdhKeyDeriveParams, baseKey: CryptoKey, length: number | null): Promise; + deriveBits( + algorithm: AlgorithmIdentifier | HkdfParams | Pbkdf2Params, + baseKey: CryptoKey, + length: number, + ): Promise; + /** + * Using the method and parameters specified in `algorithm`, and the keying material provided by `baseKey`, + * `subtle.deriveKey()` attempts to generate a new ` based on the method and parameters in `derivedKeyAlgorithm`. + * + * Calling `subtle.deriveKey()` is equivalent to calling `subtle.deriveBits()` to generate raw keying material, + * then passing the result into the `subtle.importKey()` method using the `deriveKeyAlgorithm`, `extractable`, and `keyUsages` parameters as input. + * + * The algorithms currently supported include: + * + * - `'ECDH'` + * - `'X25519'` + * - `'X448'` + * - `'HKDF'` + * - `'PBKDF2'` + * @param keyUsages See {@link https://nodejs.org/docs/latest/api/webcrypto.html#cryptokeyusages Key usages}. + * @since v15.0.0 + */ + deriveKey( + algorithm: AlgorithmIdentifier | EcdhKeyDeriveParams | HkdfParams | Pbkdf2Params, + baseKey: CryptoKey, + derivedKeyAlgorithm: + | AlgorithmIdentifier + | AesDerivedKeyParams + | HmacImportParams + | HkdfParams + | Pbkdf2Params, + extractable: boolean, + keyUsages: ReadonlyArray, + ): Promise; + /** + * Using the method identified by `algorithm`, `subtle.digest()` attempts to generate a digest of `data`. + * If successful, the returned promise is resolved with an `` containing the computed digest. + * + * If `algorithm` is provided as a ``, it must be one of: + * + * - `'SHA-1'` + * - `'SHA-256'` + * - `'SHA-384'` + * - `'SHA-512'` + * + * If `algorithm` is provided as an ``, it must have a `name` property whose value is one of the above. + * @since v15.0.0 + */ + digest(algorithm: AlgorithmIdentifier, data: BufferSource): Promise; + /** + * Using the method and parameters specified by `algorithm` and the keying material provided by `key`, + * `subtle.encrypt()` attempts to encipher `data`. If successful, + * the returned promise is resolved with an `` containing the encrypted result. + * + * The algorithms currently supported include: + * + * - `'RSA-OAEP'` + * - `'AES-CTR'` + * - `'AES-CBC'` + * - `'AES-GCM'` + * @since v15.0.0 + */ + encrypt( + algorithm: AlgorithmIdentifier | RsaOaepParams | AesCtrParams | AesCbcParams | AesGcmParams, + key: CryptoKey, + data: BufferSource, + ): Promise; + /** + * Exports the given key into the specified format, if supported. + * + * If the `` is not extractable, the returned promise will reject. + * + * When `format` is either `'pkcs8'` or `'spki'` and the export is successful, + * the returned promise will be resolved with an `` containing the exported key data. + * + * When `format` is `'jwk'` and the export is successful, the returned promise will be resolved with a + * JavaScript object conforming to the {@link https://tools.ietf.org/html/rfc7517 JSON Web Key} specification. + * @param format Must be one of `'raw'`, `'pkcs8'`, `'spki'`, or `'jwk'`. + * @returns `` containing ``. + * @since v15.0.0 + */ + exportKey(format: "jwk", key: CryptoKey): Promise; + exportKey(format: Exclude, key: CryptoKey): Promise; + /** + * Using the method and parameters provided in `algorithm`, + * `subtle.generateKey()` attempts to generate new keying material. + * Depending the method used, the method may generate either a single `` or a ``. + * + * The `` (public and private key) generating algorithms supported include: + * + * - `'RSASSA-PKCS1-v1_5'` + * - `'RSA-PSS'` + * - `'RSA-OAEP'` + * - `'ECDSA'` + * - `'Ed25519'` + * - `'Ed448'` + * - `'ECDH'` + * - `'X25519'` + * - `'X448'` + * The `` (secret key) generating algorithms supported include: + * + * - `'HMAC'` + * - `'AES-CTR'` + * - `'AES-CBC'` + * - `'AES-GCM'` + * - `'AES-KW'` + * @param keyUsages See {@link https://nodejs.org/docs/latest/api/webcrypto.html#cryptokeyusages Key usages}. + * @since v15.0.0 + */ + generateKey( + algorithm: RsaHashedKeyGenParams | EcKeyGenParams, + extractable: boolean, + keyUsages: ReadonlyArray, + ): Promise; + generateKey( + algorithm: AesKeyGenParams | HmacKeyGenParams | Pbkdf2Params, + extractable: boolean, + keyUsages: ReadonlyArray, + ): Promise; + generateKey( + algorithm: AlgorithmIdentifier, + extractable: boolean, + keyUsages: KeyUsage[], + ): Promise; + /** + * The `subtle.importKey()` method attempts to interpret the provided `keyData` as the given `format` + * to create a `` instance using the provided `algorithm`, `extractable`, and `keyUsages` arguments. + * If the import is successful, the returned promise will be resolved with the created ``. + * + * If importing a `'PBKDF2'` key, `extractable` must be `false`. + * @param format Must be one of `'raw'`, `'pkcs8'`, `'spki'`, or `'jwk'`. + * @param keyUsages See {@link https://nodejs.org/docs/latest/api/webcrypto.html#cryptokeyusages Key usages}. + * @since v15.0.0 + */ + importKey( + format: "jwk", + keyData: JsonWebKey, + algorithm: + | AlgorithmIdentifier + | RsaHashedImportParams + | EcKeyImportParams + | HmacImportParams + | AesKeyAlgorithm, + extractable: boolean, + keyUsages: ReadonlyArray, + ): Promise; + importKey( + format: Exclude, + keyData: BufferSource, + algorithm: + | AlgorithmIdentifier + | RsaHashedImportParams + | EcKeyImportParams + | HmacImportParams + | AesKeyAlgorithm, + extractable: boolean, + keyUsages: KeyUsage[], + ): Promise; + /** + * Using the method and parameters given by `algorithm` and the keying material provided by `key`, + * `subtle.sign()` attempts to generate a cryptographic signature of `data`. If successful, + * the returned promise is resolved with an `` containing the generated signature. + * + * The algorithms currently supported include: + * + * - `'RSASSA-PKCS1-v1_5'` + * - `'RSA-PSS'` + * - `'ECDSA'` + * - `'Ed25519'` + * - `'Ed448'` + * - `'HMAC'` + * @since v15.0.0 + */ + sign( + algorithm: AlgorithmIdentifier | RsaPssParams | EcdsaParams | Ed448Params, + key: CryptoKey, + data: BufferSource, + ): Promise; + /** + * In cryptography, "wrapping a key" refers to exporting and then encrypting the keying material. + * The `subtle.unwrapKey()` method attempts to decrypt a wrapped key and create a `` instance. + * It is equivalent to calling `subtle.decrypt()` first on the encrypted key data (using the `wrappedKey`, `unwrapAlgo`, and `unwrappingKey` arguments as input) + * then passing the results in to the `subtle.importKey()` method using the `unwrappedKeyAlgo`, `extractable`, and `keyUsages` arguments as inputs. + * If successful, the returned promise is resolved with a `` object. + * + * The wrapping algorithms currently supported include: + * + * - `'RSA-OAEP'` + * - `'AES-CTR'` + * - `'AES-CBC'` + * - `'AES-GCM'` + * - `'AES-KW'` + * + * The unwrapped key algorithms supported include: + * + * - `'RSASSA-PKCS1-v1_5'` + * - `'RSA-PSS'` + * - `'RSA-OAEP'` + * - `'ECDSA'` + * - `'Ed25519'` + * - `'Ed448'` + * - `'ECDH'` + * - `'X25519'` + * - `'X448'` + * - `'HMAC'` + * - `'AES-CTR'` + * - `'AES-CBC'` + * - `'AES-GCM'` + * - `'AES-KW'` + * @param format Must be one of `'raw'`, `'pkcs8'`, `'spki'`, or `'jwk'`. + * @param keyUsages See {@link https://nodejs.org/docs/latest/api/webcrypto.html#cryptokeyusages Key usages}. + * @since v15.0.0 + */ + unwrapKey( + format: KeyFormat, + wrappedKey: BufferSource, + unwrappingKey: CryptoKey, + unwrapAlgorithm: AlgorithmIdentifier | RsaOaepParams | AesCtrParams | AesCbcParams | AesGcmParams, + unwrappedKeyAlgorithm: + | AlgorithmIdentifier + | RsaHashedImportParams + | EcKeyImportParams + | HmacImportParams + | AesKeyAlgorithm, + extractable: boolean, + keyUsages: KeyUsage[], + ): Promise; + /** + * Using the method and parameters given in `algorithm` and the keying material provided by `key`, + * `subtle.verify()` attempts to verify that `signature` is a valid cryptographic signature of `data`. + * The returned promise is resolved with either `true` or `false`. + * + * The algorithms currently supported include: + * + * - `'RSASSA-PKCS1-v1_5'` + * - `'RSA-PSS'` + * - `'ECDSA'` + * - `'Ed25519'` + * - `'Ed448'` + * - `'HMAC'` + * @since v15.0.0 + */ + verify( + algorithm: AlgorithmIdentifier | RsaPssParams | EcdsaParams | Ed448Params, + key: CryptoKey, + signature: BufferSource, + data: BufferSource, + ): Promise; + /** + * In cryptography, "wrapping a key" refers to exporting and then encrypting the keying material. + * The `subtle.wrapKey()` method exports the keying material into the format identified by `format`, + * then encrypts it using the method and parameters specified by `wrapAlgo` and the keying material provided by `wrappingKey`. + * It is the equivalent to calling `subtle.exportKey()` using `format` and `key` as the arguments, + * then passing the result to the `subtle.encrypt()` method using `wrappingKey` and `wrapAlgo` as inputs. + * If successful, the returned promise will be resolved with an `` containing the encrypted key data. + * + * The wrapping algorithms currently supported include: + * + * - `'RSA-OAEP'` + * - `'AES-CTR'` + * - `'AES-CBC'` + * - `'AES-GCM'` + * - `'AES-KW'` + * @param format Must be one of `'raw'`, `'pkcs8'`, `'spki'`, or `'jwk'`. + * @since v15.0.0 + */ + wrapKey( + format: KeyFormat, + key: CryptoKey, + wrappingKey: CryptoKey, + wrapAlgorithm: AlgorithmIdentifier | RsaOaepParams | AesCtrParams | AesCbcParams | AesGcmParams, + ): Promise; + } + } +} +declare module "node:crypto" { + export * from "crypto"; +} diff --git a/Url-Shortner/node_modules/@types/node/ts4.8/dgram.d.ts b/Url-Shortner/node_modules/@types/node/ts4.8/dgram.d.ts new file mode 100644 index 0000000..79cfcd4 --- /dev/null +++ b/Url-Shortner/node_modules/@types/node/ts4.8/dgram.d.ts @@ -0,0 +1,586 @@ +/** + * The `node:dgram` module provides an implementation of UDP datagram sockets. + * + * ```js + * import dgram from 'node:dgram'; + * + * const server = dgram.createSocket('udp4'); + * + * server.on('error', (err) => { + * console.error(`server error:\n${err.stack}`); + * server.close(); + * }); + * + * server.on('message', (msg, rinfo) => { + * console.log(`server got: ${msg} from ${rinfo.address}:${rinfo.port}`); + * }); + * + * server.on('listening', () => { + * const address = server.address(); + * console.log(`server listening ${address.address}:${address.port}`); + * }); + * + * server.bind(41234); + * // Prints: server listening 0.0.0.0:41234 + * ``` + * @see [source](https://github.com/nodejs/node/blob/v20.2.0/lib/dgram.js) + */ +declare module "dgram" { + import { AddressInfo } from "node:net"; + import * as dns from "node:dns"; + import { Abortable, EventEmitter } from "node:events"; + interface RemoteInfo { + address: string; + family: "IPv4" | "IPv6"; + port: number; + size: number; + } + interface BindOptions { + port?: number | undefined; + address?: string | undefined; + exclusive?: boolean | undefined; + fd?: number | undefined; + } + type SocketType = "udp4" | "udp6"; + interface SocketOptions extends Abortable { + type: SocketType; + reuseAddr?: boolean | undefined; + /** + * @default false + */ + ipv6Only?: boolean | undefined; + recvBufferSize?: number | undefined; + sendBufferSize?: number | undefined; + lookup?: + | (( + hostname: string, + options: dns.LookupOneOptions, + callback: (err: NodeJS.ErrnoException | null, address: string, family: number) => void, + ) => void) + | undefined; + } + /** + * Creates a `dgram.Socket` object. Once the socket is created, calling `socket.bind()` will instruct the socket to begin listening for datagram + * messages. When `address` and `port` are not passed to `socket.bind()` the + * method will bind the socket to the "all interfaces" address on a random port + * (it does the right thing for both `udp4` and `udp6` sockets). The bound address + * and port can be retrieved using `socket.address().address` and `socket.address().port`. + * + * If the `signal` option is enabled, calling `.abort()` on the corresponding`AbortController` is similar to calling `.close()` on the socket: + * + * ```js + * const controller = new AbortController(); + * const { signal } = controller; + * const server = dgram.createSocket({ type: 'udp4', signal }); + * server.on('message', (msg, rinfo) => { + * console.log(`server got: ${msg} from ${rinfo.address}:${rinfo.port}`); + * }); + * // Later, when you want to close the server. + * controller.abort(); + * ``` + * @since v0.11.13 + * @param options Available options are: + * @param callback Attached as a listener for `'message'` events. Optional. + */ + function createSocket(type: SocketType, callback?: (msg: Buffer, rinfo: RemoteInfo) => void): Socket; + function createSocket(options: SocketOptions, callback?: (msg: Buffer, rinfo: RemoteInfo) => void): Socket; + /** + * Encapsulates the datagram functionality. + * + * New instances of `dgram.Socket` are created using {@link createSocket}. + * The `new` keyword is not to be used to create `dgram.Socket` instances. + * @since v0.1.99 + */ + class Socket extends EventEmitter { + /** + * Tells the kernel to join a multicast group at the given `multicastAddress` and`multicastInterface` using the `IP_ADD_MEMBERSHIP` socket option. If the`multicastInterface` argument is not + * specified, the operating system will choose + * one interface and will add membership to it. To add membership to every + * available interface, call `addMembership` multiple times, once per interface. + * + * When called on an unbound socket, this method will implicitly bind to a random + * port, listening on all interfaces. + * + * When sharing a UDP socket across multiple `cluster` workers, the`socket.addMembership()` function must be called only once or an`EADDRINUSE` error will occur: + * + * ```js + * import cluster from 'node:cluster'; + * import dgram from 'node:dgram'; + * + * if (cluster.isPrimary) { + * cluster.fork(); // Works ok. + * cluster.fork(); // Fails with EADDRINUSE. + * } else { + * const s = dgram.createSocket('udp4'); + * s.bind(1234, () => { + * s.addMembership('224.0.0.114'); + * }); + * } + * ``` + * @since v0.6.9 + */ + addMembership(multicastAddress: string, multicastInterface?: string): void; + /** + * Returns an object containing the address information for a socket. + * For UDP sockets, this object will contain `address`, `family`, and `port`properties. + * + * This method throws `EBADF` if called on an unbound socket. + * @since v0.1.99 + */ + address(): AddressInfo; + /** + * For UDP sockets, causes the `dgram.Socket` to listen for datagram + * messages on a named `port` and optional `address`. If `port` is not + * specified or is `0`, the operating system will attempt to bind to a + * random port. If `address` is not specified, the operating system will + * attempt to listen on all addresses. Once binding is complete, a`'listening'` event is emitted and the optional `callback` function is + * called. + * + * Specifying both a `'listening'` event listener and passing a`callback` to the `socket.bind()` method is not harmful but not very + * useful. + * + * A bound datagram socket keeps the Node.js process running to receive + * datagram messages. + * + * If binding fails, an `'error'` event is generated. In rare case (e.g. + * attempting to bind with a closed socket), an `Error` may be thrown. + * + * Example of a UDP server listening on port 41234: + * + * ```js + * import dgram from 'node:dgram'; + * + * const server = dgram.createSocket('udp4'); + * + * server.on('error', (err) => { + * console.error(`server error:\n${err.stack}`); + * server.close(); + * }); + * + * server.on('message', (msg, rinfo) => { + * console.log(`server got: ${msg} from ${rinfo.address}:${rinfo.port}`); + * }); + * + * server.on('listening', () => { + * const address = server.address(); + * console.log(`server listening ${address.address}:${address.port}`); + * }); + * + * server.bind(41234); + * // Prints: server listening 0.0.0.0:41234 + * ``` + * @since v0.1.99 + * @param callback with no parameters. Called when binding is complete. + */ + bind(port?: number, address?: string, callback?: () => void): this; + bind(port?: number, callback?: () => void): this; + bind(callback?: () => void): this; + bind(options: BindOptions, callback?: () => void): this; + /** + * Close the underlying socket and stop listening for data on it. If a callback is + * provided, it is added as a listener for the `'close'` event. + * @since v0.1.99 + * @param callback Called when the socket has been closed. + */ + close(callback?: () => void): this; + /** + * Associates the `dgram.Socket` to a remote address and port. Every + * message sent by this handle is automatically sent to that destination. Also, + * the socket will only receive messages from that remote peer. + * Trying to call `connect()` on an already connected socket will result + * in an `ERR_SOCKET_DGRAM_IS_CONNECTED` exception. If `address` is not + * provided, `'127.0.0.1'` (for `udp4` sockets) or `'::1'` (for `udp6` sockets) + * will be used by default. Once the connection is complete, a `'connect'` event + * is emitted and the optional `callback` function is called. In case of failure, + * the `callback` is called or, failing this, an `'error'` event is emitted. + * @since v12.0.0 + * @param callback Called when the connection is completed or on error. + */ + connect(port: number, address?: string, callback?: () => void): void; + connect(port: number, callback: () => void): void; + /** + * A synchronous function that disassociates a connected `dgram.Socket` from + * its remote address. Trying to call `disconnect()` on an unbound or already + * disconnected socket will result in an `ERR_SOCKET_DGRAM_NOT_CONNECTED` exception. + * @since v12.0.0 + */ + disconnect(): void; + /** + * Instructs the kernel to leave a multicast group at `multicastAddress` using the`IP_DROP_MEMBERSHIP` socket option. This method is automatically called by the + * kernel when the socket is closed or the process terminates, so most apps will + * never have reason to call this. + * + * If `multicastInterface` is not specified, the operating system will attempt to + * drop membership on all valid interfaces. + * @since v0.6.9 + */ + dropMembership(multicastAddress: string, multicastInterface?: string): void; + /** + * This method throws `ERR_SOCKET_BUFFER_SIZE` if called on an unbound socket. + * @since v8.7.0 + * @return the `SO_RCVBUF` socket receive buffer size in bytes. + */ + getRecvBufferSize(): number; + /** + * This method throws `ERR_SOCKET_BUFFER_SIZE` if called on an unbound socket. + * @since v8.7.0 + * @return the `SO_SNDBUF` socket send buffer size in bytes. + */ + getSendBufferSize(): number; + /** + * By default, binding a socket will cause it to block the Node.js process from + * exiting as long as the socket is open. The `socket.unref()` method can be used + * to exclude the socket from the reference counting that keeps the Node.js + * process active. The `socket.ref()` method adds the socket back to the reference + * counting and restores the default behavior. + * + * Calling `socket.ref()` multiples times will have no additional effect. + * + * The `socket.ref()` method returns a reference to the socket so calls can be + * chained. + * @since v0.9.1 + */ + ref(): this; + /** + * Returns an object containing the `address`, `family`, and `port` of the remote + * endpoint. This method throws an `ERR_SOCKET_DGRAM_NOT_CONNECTED` exception + * if the socket is not connected. + * @since v12.0.0 + */ + remoteAddress(): AddressInfo; + /** + * Broadcasts a datagram on the socket. + * For connectionless sockets, the destination `port` and `address` must be + * specified. Connected sockets, on the other hand, will use their associated + * remote endpoint, so the `port` and `address` arguments must not be set. + * + * The `msg` argument contains the message to be sent. + * Depending on its type, different behavior can apply. If `msg` is a `Buffer`, + * any `TypedArray` or a `DataView`, + * the `offset` and `length` specify the offset within the `Buffer` where the + * message begins and the number of bytes in the message, respectively. + * If `msg` is a `String`, then it is automatically converted to a `Buffer`with `'utf8'` encoding. With messages that + * contain multi-byte characters, `offset` and `length` will be calculated with + * respect to `byte length` and not the character position. + * If `msg` is an array, `offset` and `length` must not be specified. + * + * The `address` argument is a string. If the value of `address` is a host name, + * DNS will be used to resolve the address of the host. If `address` is not + * provided or otherwise nullish, `'127.0.0.1'` (for `udp4` sockets) or `'::1'`(for `udp6` sockets) will be used by default. + * + * If the socket has not been previously bound with a call to `bind`, the socket + * is assigned a random port number and is bound to the "all interfaces" address + * (`'0.0.0.0'` for `udp4` sockets, `'::0'` for `udp6` sockets.) + * + * An optional `callback` function may be specified to as a way of reporting + * DNS errors or for determining when it is safe to reuse the `buf` object. + * DNS lookups delay the time to send for at least one tick of the + * Node.js event loop. + * + * The only way to know for sure that the datagram has been sent is by using a`callback`. If an error occurs and a `callback` is given, the error will be + * passed as the first argument to the `callback`. If a `callback` is not given, + * the error is emitted as an `'error'` event on the `socket` object. + * + * Offset and length are optional but both _must_ be set if either are used. + * They are supported only when the first argument is a `Buffer`, a `TypedArray`, + * or a `DataView`. + * + * This method throws `ERR_SOCKET_BAD_PORT` if called on an unbound socket. + * + * Example of sending a UDP packet to a port on `localhost`; + * + * ```js + * import dgram from 'node:dgram'; + * import { Buffer } from 'node:buffer'; + * + * const message = Buffer.from('Some bytes'); + * const client = dgram.createSocket('udp4'); + * client.send(message, 41234, 'localhost', (err) => { + * client.close(); + * }); + * ``` + * + * Example of sending a UDP packet composed of multiple buffers to a port on`127.0.0.1`; + * + * ```js + * import dgram from 'node:dgram'; + * import { Buffer } from 'node:buffer'; + * + * const buf1 = Buffer.from('Some '); + * const buf2 = Buffer.from('bytes'); + * const client = dgram.createSocket('udp4'); + * client.send([buf1, buf2], 41234, (err) => { + * client.close(); + * }); + * ``` + * + * Sending multiple buffers might be faster or slower depending on the + * application and operating system. Run benchmarks to + * determine the optimal strategy on a case-by-case basis. Generally speaking, + * however, sending multiple buffers is faster. + * + * Example of sending a UDP packet using a socket connected to a port on`localhost`: + * + * ```js + * import dgram from 'node:dgram'; + * import { Buffer } from 'node:buffer'; + * + * const message = Buffer.from('Some bytes'); + * const client = dgram.createSocket('udp4'); + * client.connect(41234, 'localhost', (err) => { + * client.send(message, (err) => { + * client.close(); + * }); + * }); + * ``` + * @since v0.1.99 + * @param msg Message to be sent. + * @param offset Offset in the buffer where the message starts. + * @param length Number of bytes in the message. + * @param port Destination port. + * @param address Destination host name or IP address. + * @param callback Called when the message has been sent. + */ + send( + msg: string | Uint8Array | ReadonlyArray, + port?: number, + address?: string, + callback?: (error: Error | null, bytes: number) => void, + ): void; + send( + msg: string | Uint8Array | ReadonlyArray, + port?: number, + callback?: (error: Error | null, bytes: number) => void, + ): void; + send( + msg: string | Uint8Array | ReadonlyArray, + callback?: (error: Error | null, bytes: number) => void, + ): void; + send( + msg: string | Uint8Array, + offset: number, + length: number, + port?: number, + address?: string, + callback?: (error: Error | null, bytes: number) => void, + ): void; + send( + msg: string | Uint8Array, + offset: number, + length: number, + port?: number, + callback?: (error: Error | null, bytes: number) => void, + ): void; + send( + msg: string | Uint8Array, + offset: number, + length: number, + callback?: (error: Error | null, bytes: number) => void, + ): void; + /** + * Sets or clears the `SO_BROADCAST` socket option. When set to `true`, UDP + * packets may be sent to a local interface's broadcast address. + * + * This method throws `EBADF` if called on an unbound socket. + * @since v0.6.9 + */ + setBroadcast(flag: boolean): void; + /** + * _All references to scope in this section are referring to [IPv6 Zone Indices](https://en.wikipedia.org/wiki/IPv6_address#Scoped_literal_IPv6_addresses), which are defined by [RFC + * 4007](https://tools.ietf.org/html/rfc4007). In string form, an IP_ + * _with a scope index is written as `'IP%scope'` where scope is an interface name_ + * _or interface number._ + * + * Sets the default outgoing multicast interface of the socket to a chosen + * interface or back to system interface selection. The `multicastInterface` must + * be a valid string representation of an IP from the socket's family. + * + * For IPv4 sockets, this should be the IP configured for the desired physical + * interface. All packets sent to multicast on the socket will be sent on the + * interface determined by the most recent successful use of this call. + * + * For IPv6 sockets, `multicastInterface` should include a scope to indicate the + * interface as in the examples that follow. In IPv6, individual `send` calls can + * also use explicit scope in addresses, so only packets sent to a multicast + * address without specifying an explicit scope are affected by the most recent + * successful use of this call. + * + * This method throws `EBADF` if called on an unbound socket. + * + * #### Example: IPv6 outgoing multicast interface + * + * On most systems, where scope format uses the interface name: + * + * ```js + * const socket = dgram.createSocket('udp6'); + * + * socket.bind(1234, () => { + * socket.setMulticastInterface('::%eth1'); + * }); + * ``` + * + * On Windows, where scope format uses an interface number: + * + * ```js + * const socket = dgram.createSocket('udp6'); + * + * socket.bind(1234, () => { + * socket.setMulticastInterface('::%2'); + * }); + * ``` + * + * #### Example: IPv4 outgoing multicast interface + * + * All systems use an IP of the host on the desired physical interface: + * + * ```js + * const socket = dgram.createSocket('udp4'); + * + * socket.bind(1234, () => { + * socket.setMulticastInterface('10.0.0.2'); + * }); + * ``` + * @since v8.6.0 + */ + setMulticastInterface(multicastInterface: string): void; + /** + * Sets or clears the `IP_MULTICAST_LOOP` socket option. When set to `true`, + * multicast packets will also be received on the local interface. + * + * This method throws `EBADF` if called on an unbound socket. + * @since v0.3.8 + */ + setMulticastLoopback(flag: boolean): boolean; + /** + * Sets the `IP_MULTICAST_TTL` socket option. While TTL generally stands for + * "Time to Live", in this context it specifies the number of IP hops that a + * packet is allowed to travel through, specifically for multicast traffic. Each + * router or gateway that forwards a packet decrements the TTL. If the TTL is + * decremented to 0 by a router, it will not be forwarded. + * + * The `ttl` argument may be between 0 and 255\. The default on most systems is `1`. + * + * This method throws `EBADF` if called on an unbound socket. + * @since v0.3.8 + */ + setMulticastTTL(ttl: number): number; + /** + * Sets the `SO_RCVBUF` socket option. Sets the maximum socket receive buffer + * in bytes. + * + * This method throws `ERR_SOCKET_BUFFER_SIZE` if called on an unbound socket. + * @since v8.7.0 + */ + setRecvBufferSize(size: number): void; + /** + * Sets the `SO_SNDBUF` socket option. Sets the maximum socket send buffer + * in bytes. + * + * This method throws `ERR_SOCKET_BUFFER_SIZE` if called on an unbound socket. + * @since v8.7.0 + */ + setSendBufferSize(size: number): void; + /** + * Sets the `IP_TTL` socket option. While TTL generally stands for "Time to Live", + * in this context it specifies the number of IP hops that a packet is allowed to + * travel through. Each router or gateway that forwards a packet decrements the + * TTL. If the TTL is decremented to 0 by a router, it will not be forwarded. + * Changing TTL values is typically done for network probes or when multicasting. + * + * The `ttl` argument may be between 1 and 255\. The default on most systems + * is 64. + * + * This method throws `EBADF` if called on an unbound socket. + * @since v0.1.101 + */ + setTTL(ttl: number): number; + /** + * By default, binding a socket will cause it to block the Node.js process from + * exiting as long as the socket is open. The `socket.unref()` method can be used + * to exclude the socket from the reference counting that keeps the Node.js + * process active, allowing the process to exit even if the socket is still + * listening. + * + * Calling `socket.unref()` multiple times will have no addition effect. + * + * The `socket.unref()` method returns a reference to the socket so calls can be + * chained. + * @since v0.9.1 + */ + unref(): this; + /** + * Tells the kernel to join a source-specific multicast channel at the given`sourceAddress` and `groupAddress`, using the `multicastInterface` with the`IP_ADD_SOURCE_MEMBERSHIP` socket + * option. If the `multicastInterface` argument + * is not specified, the operating system will choose one interface and will add + * membership to it. To add membership to every available interface, call`socket.addSourceSpecificMembership()` multiple times, once per interface. + * + * When called on an unbound socket, this method will implicitly bind to a random + * port, listening on all interfaces. + * @since v13.1.0, v12.16.0 + */ + addSourceSpecificMembership(sourceAddress: string, groupAddress: string, multicastInterface?: string): void; + /** + * Instructs the kernel to leave a source-specific multicast channel at the given`sourceAddress` and `groupAddress` using the `IP_DROP_SOURCE_MEMBERSHIP`socket option. This method is + * automatically called by the kernel when the + * socket is closed or the process terminates, so most apps will never have + * reason to call this. + * + * If `multicastInterface` is not specified, the operating system will attempt to + * drop membership on all valid interfaces. + * @since v13.1.0, v12.16.0 + */ + dropSourceSpecificMembership(sourceAddress: string, groupAddress: string, multicastInterface?: string): void; + /** + * events.EventEmitter + * 1. close + * 2. connect + * 3. error + * 4. listening + * 5. message + */ + addListener(event: string, listener: (...args: any[]) => void): this; + addListener(event: "close", listener: () => void): this; + addListener(event: "connect", listener: () => void): this; + addListener(event: "error", listener: (err: Error) => void): this; + addListener(event: "listening", listener: () => void): this; + addListener(event: "message", listener: (msg: Buffer, rinfo: RemoteInfo) => void): this; + emit(event: string | symbol, ...args: any[]): boolean; + emit(event: "close"): boolean; + emit(event: "connect"): boolean; + emit(event: "error", err: Error): boolean; + emit(event: "listening"): boolean; + emit(event: "message", msg: Buffer, rinfo: RemoteInfo): boolean; + on(event: string, listener: (...args: any[]) => void): this; + on(event: "close", listener: () => void): this; + on(event: "connect", listener: () => void): this; + on(event: "error", listener: (err: Error) => void): this; + on(event: "listening", listener: () => void): this; + on(event: "message", listener: (msg: Buffer, rinfo: RemoteInfo) => void): this; + once(event: string, listener: (...args: any[]) => void): this; + once(event: "close", listener: () => void): this; + once(event: "connect", listener: () => void): this; + once(event: "error", listener: (err: Error) => void): this; + once(event: "listening", listener: () => void): this; + once(event: "message", listener: (msg: Buffer, rinfo: RemoteInfo) => void): this; + prependListener(event: string, listener: (...args: any[]) => void): this; + prependListener(event: "close", listener: () => void): this; + prependListener(event: "connect", listener: () => void): this; + prependListener(event: "error", listener: (err: Error) => void): this; + prependListener(event: "listening", listener: () => void): this; + prependListener(event: "message", listener: (msg: Buffer, rinfo: RemoteInfo) => void): this; + prependOnceListener(event: string, listener: (...args: any[]) => void): this; + prependOnceListener(event: "close", listener: () => void): this; + prependOnceListener(event: "connect", listener: () => void): this; + prependOnceListener(event: "error", listener: (err: Error) => void): this; + prependOnceListener(event: "listening", listener: () => void): this; + prependOnceListener(event: "message", listener: (msg: Buffer, rinfo: RemoteInfo) => void): this; + /** + * Calls `socket.close()` and returns a promise that fulfills when the socket has closed. + * @since v20.5.0 + */ + [Symbol.asyncDispose](): Promise; + } +} +declare module "node:dgram" { + export * from "dgram"; +} diff --git a/Url-Shortner/node_modules/@types/node/ts4.8/diagnostics_channel.d.ts b/Url-Shortner/node_modules/@types/node/ts4.8/diagnostics_channel.d.ts new file mode 100644 index 0000000..b02f591 --- /dev/null +++ b/Url-Shortner/node_modules/@types/node/ts4.8/diagnostics_channel.d.ts @@ -0,0 +1,191 @@ +/** + * The `node:diagnostics_channel` module provides an API to create named channels + * to report arbitrary message data for diagnostics purposes. + * + * It can be accessed using: + * + * ```js + * import diagnostics_channel from 'node:diagnostics_channel'; + * ``` + * + * It is intended that a module writer wanting to report diagnostics messages + * will create one or many top-level channels to report messages through. + * Channels may also be acquired at runtime but it is not encouraged + * due to the additional overhead of doing so. Channels may be exported for + * convenience, but as long as the name is known it can be acquired anywhere. + * + * If you intend for your module to produce diagnostics data for others to + * consume it is recommended that you include documentation of what named + * channels are used along with the shape of the message data. Channel names + * should generally include the module name to avoid collisions with data from + * other modules. + * @since v15.1.0, v14.17.0 + * @see [source](https://github.com/nodejs/node/blob/v20.2.0/lib/diagnostics_channel.js) + */ +declare module "diagnostics_channel" { + /** + * Check if there are active subscribers to the named channel. This is helpful if + * the message you want to send might be expensive to prepare. + * + * This API is optional but helpful when trying to publish messages from very + * performance-sensitive code. + * + * ```js + * import diagnostics_channel from 'node:diagnostics_channel'; + * + * if (diagnostics_channel.hasSubscribers('my-channel')) { + * // There are subscribers, prepare and publish message + * } + * ``` + * @since v15.1.0, v14.17.0 + * @param name The channel name + * @return If there are active subscribers + */ + function hasSubscribers(name: string | symbol): boolean; + /** + * This is the primary entry-point for anyone wanting to publish to a named + * channel. It produces a channel object which is optimized to reduce overhead at + * publish time as much as possible. + * + * ```js + * import diagnostics_channel from 'node:diagnostics_channel'; + * + * const channel = diagnostics_channel.channel('my-channel'); + * ``` + * @since v15.1.0, v14.17.0 + * @param name The channel name + * @return The named channel object + */ + function channel(name: string | symbol): Channel; + type ChannelListener = (message: unknown, name: string | symbol) => void; + /** + * Register a message handler to subscribe to this channel. This message handler + * will be run synchronously whenever a message is published to the channel. Any + * errors thrown in the message handler will trigger an `'uncaughtException'`. + * + * ```js + * import diagnostics_channel from 'node:diagnostics_channel'; + * + * diagnostics_channel.subscribe('my-channel', (message, name) => { + * // Received data + * }); + * ``` + * @since v18.7.0, v16.17.0 + * @param name The channel name + * @param onMessage The handler to receive channel messages + */ + function subscribe(name: string | symbol, onMessage: ChannelListener): void; + /** + * Remove a message handler previously registered to this channel with {@link subscribe}. + * + * ```js + * import diagnostics_channel from 'node:diagnostics_channel'; + * + * function onMessage(message, name) { + * // Received data + * } + * + * diagnostics_channel.subscribe('my-channel', onMessage); + * + * diagnostics_channel.unsubscribe('my-channel', onMessage); + * ``` + * @since v18.7.0, v16.17.0 + * @param name The channel name + * @param onMessage The previous subscribed handler to remove + * @return `true` if the handler was found, `false` otherwise. + */ + function unsubscribe(name: string | symbol, onMessage: ChannelListener): boolean; + /** + * The class `Channel` represents an individual named channel within the data + * pipeline. It is used to track subscribers and to publish messages when there + * are subscribers present. It exists as a separate object to avoid channel + * lookups at publish time, enabling very fast publish speeds and allowing + * for heavy use while incurring very minimal cost. Channels are created with {@link channel}, constructing a channel directly + * with `new Channel(name)` is not supported. + * @since v15.1.0, v14.17.0 + */ + class Channel { + readonly name: string | symbol; + /** + * Check if there are active subscribers to this channel. This is helpful if + * the message you want to send might be expensive to prepare. + * + * This API is optional but helpful when trying to publish messages from very + * performance-sensitive code. + * + * ```js + * import diagnostics_channel from 'node:diagnostics_channel'; + * + * const channel = diagnostics_channel.channel('my-channel'); + * + * if (channel.hasSubscribers) { + * // There are subscribers, prepare and publish message + * } + * ``` + * @since v15.1.0, v14.17.0 + */ + readonly hasSubscribers: boolean; + private constructor(name: string | symbol); + /** + * Publish a message to any subscribers to the channel. This will trigger + * message handlers synchronously so they will execute within the same context. + * + * ```js + * import diagnostics_channel from 'node:diagnostics_channel'; + * + * const channel = diagnostics_channel.channel('my-channel'); + * + * channel.publish({ + * some: 'message', + * }); + * ``` + * @since v15.1.0, v14.17.0 + * @param message The message to send to the channel subscribers + */ + publish(message: unknown): void; + /** + * Register a message handler to subscribe to this channel. This message handler + * will be run synchronously whenever a message is published to the channel. Any + * errors thrown in the message handler will trigger an `'uncaughtException'`. + * + * ```js + * import diagnostics_channel from 'node:diagnostics_channel'; + * + * const channel = diagnostics_channel.channel('my-channel'); + * + * channel.subscribe((message, name) => { + * // Received data + * }); + * ``` + * @since v15.1.0, v14.17.0 + * @deprecated Since v18.7.0,v16.17.0 - Use {@link subscribe(name, onMessage)} + * @param onMessage The handler to receive channel messages + */ + subscribe(onMessage: ChannelListener): void; + /** + * Remove a message handler previously registered to this channel with `channel.subscribe(onMessage)`. + * + * ```js + * import diagnostics_channel from 'node:diagnostics_channel'; + * + * const channel = diagnostics_channel.channel('my-channel'); + * + * function onMessage(message, name) { + * // Received data + * } + * + * channel.subscribe(onMessage); + * + * channel.unsubscribe(onMessage); + * ``` + * @since v15.1.0, v14.17.0 + * @deprecated Since v18.7.0,v16.17.0 - Use {@link unsubscribe(name, onMessage)} + * @param onMessage The previous subscribed handler to remove + * @return `true` if the handler was found, `false` otherwise. + */ + unsubscribe(onMessage: ChannelListener): void; + } +} +declare module "node:diagnostics_channel" { + export * from "diagnostics_channel"; +} diff --git a/Url-Shortner/node_modules/@types/node/ts4.8/dns.d.ts b/Url-Shortner/node_modules/@types/node/ts4.8/dns.d.ts new file mode 100644 index 0000000..bef32b1 --- /dev/null +++ b/Url-Shortner/node_modules/@types/node/ts4.8/dns.d.ts @@ -0,0 +1,809 @@ +/** + * The `node:dns` module enables name resolution. For example, use it to look up IP + * addresses of host names. + * + * Although named for the [Domain Name System (DNS)](https://en.wikipedia.org/wiki/Domain_Name_System), it does not always use the + * DNS protocol for lookups. {@link lookup} uses the operating system + * facilities to perform name resolution. It may not need to perform any network + * communication. To perform name resolution the way other applications on the same + * system do, use {@link lookup}. + * + * ```js + * const dns = require('node:dns'); + * + * dns.lookup('example.org', (err, address, family) => { + * console.log('address: %j family: IPv%s', address, family); + * }); + * // address: "93.184.216.34" family: IPv4 + * ``` + * + * All other functions in the `node:dns` module connect to an actual DNS server to + * perform name resolution. They will always use the network to perform DNS + * queries. These functions do not use the same set of configuration files used by {@link lookup} (e.g. `/etc/hosts`). Use these functions to always perform + * DNS queries, bypassing other name-resolution facilities. + * + * ```js + * const dns = require('node:dns'); + * + * dns.resolve4('archive.org', (err, addresses) => { + * if (err) throw err; + * + * console.log(`addresses: ${JSON.stringify(addresses)}`); + * + * addresses.forEach((a) => { + * dns.reverse(a, (err, hostnames) => { + * if (err) { + * throw err; + * } + * console.log(`reverse for ${a}: ${JSON.stringify(hostnames)}`); + * }); + * }); + * }); + * ``` + * + * See the `Implementation considerations section` for more information. + * @see [source](https://github.com/nodejs/node/blob/v20.2.0/lib/dns.js) + */ +declare module "dns" { + import * as dnsPromises from "node:dns/promises"; + // Supported getaddrinfo flags. + export const ADDRCONFIG: number; + export const V4MAPPED: number; + /** + * If `dns.V4MAPPED` is specified, return resolved IPv6 addresses as + * well as IPv4 mapped IPv6 addresses. + */ + export const ALL: number; + export interface LookupOptions { + family?: number | undefined; + hints?: number | undefined; + all?: boolean | undefined; + /** + * @default true + */ + verbatim?: boolean | undefined; + } + export interface LookupOneOptions extends LookupOptions { + all?: false | undefined; + } + export interface LookupAllOptions extends LookupOptions { + all: true; + } + export interface LookupAddress { + address: string; + family: number; + } + /** + * Resolves a host name (e.g. `'nodejs.org'`) into the first found A (IPv4) or + * AAAA (IPv6) record. All `option` properties are optional. If `options` is an + * integer, then it must be `4` or `6` – if `options` is `0` or not provided, then + * IPv4 and IPv6 addresses are both returned if found. + * + * With the `all` option set to `true`, the arguments for `callback` change to`(err, addresses)`, with `addresses` being an array of objects with the + * properties `address` and `family`. + * + * On error, `err` is an `Error` object, where `err.code` is the error code. + * Keep in mind that `err.code` will be set to `'ENOTFOUND'` not only when + * the host name does not exist but also when the lookup fails in other ways + * such as no available file descriptors. + * + * `dns.lookup()` does not necessarily have anything to do with the DNS protocol. + * The implementation uses an operating system facility that can associate names + * with addresses and vice versa. This implementation can have subtle but + * important consequences on the behavior of any Node.js program. Please take some + * time to consult the `Implementation considerations section` before using`dns.lookup()`. + * + * Example usage: + * + * ```js + * const dns = require('node:dns'); + * const options = { + * family: 6, + * hints: dns.ADDRCONFIG | dns.V4MAPPED, + * }; + * dns.lookup('example.com', options, (err, address, family) => + * console.log('address: %j family: IPv%s', address, family)); + * // address: "2606:2800:220:1:248:1893:25c8:1946" family: IPv6 + * + * // When options.all is true, the result will be an Array. + * options.all = true; + * dns.lookup('example.com', options, (err, addresses) => + * console.log('addresses: %j', addresses)); + * // addresses: [{"address":"2606:2800:220:1:248:1893:25c8:1946","family":6}] + * ``` + * + * If this method is invoked as its `util.promisify()` ed version, and `all`is not set to `true`, it returns a `Promise` for an `Object` with `address` and`family` properties. + * @since v0.1.90 + */ + export function lookup( + hostname: string, + family: number, + callback: (err: NodeJS.ErrnoException | null, address: string, family: number) => void, + ): void; + export function lookup( + hostname: string, + options: LookupOneOptions, + callback: (err: NodeJS.ErrnoException | null, address: string, family: number) => void, + ): void; + export function lookup( + hostname: string, + options: LookupAllOptions, + callback: (err: NodeJS.ErrnoException | null, addresses: LookupAddress[]) => void, + ): void; + export function lookup( + hostname: string, + options: LookupOptions, + callback: (err: NodeJS.ErrnoException | null, address: string | LookupAddress[], family: number) => void, + ): void; + export function lookup( + hostname: string, + callback: (err: NodeJS.ErrnoException | null, address: string, family: number) => void, + ): void; + export namespace lookup { + function __promisify__(hostname: string, options: LookupAllOptions): Promise; + function __promisify__(hostname: string, options?: LookupOneOptions | number): Promise; + function __promisify__(hostname: string, options: LookupOptions): Promise; + } + /** + * Resolves the given `address` and `port` into a host name and service using + * the operating system's underlying `getnameinfo` implementation. + * + * If `address` is not a valid IP address, a `TypeError` will be thrown. + * The `port` will be coerced to a number. If it is not a legal port, a `TypeError`will be thrown. + * + * On an error, `err` is an `Error` object, where `err.code` is the error code. + * + * ```js + * const dns = require('node:dns'); + * dns.lookupService('127.0.0.1', 22, (err, hostname, service) => { + * console.log(hostname, service); + * // Prints: localhost ssh + * }); + * ``` + * + * If this method is invoked as its `util.promisify()` ed version, it returns a`Promise` for an `Object` with `hostname` and `service` properties. + * @since v0.11.14 + */ + export function lookupService( + address: string, + port: number, + callback: (err: NodeJS.ErrnoException | null, hostname: string, service: string) => void, + ): void; + export namespace lookupService { + function __promisify__( + address: string, + port: number, + ): Promise<{ + hostname: string; + service: string; + }>; + } + export interface ResolveOptions { + ttl: boolean; + } + export interface ResolveWithTtlOptions extends ResolveOptions { + ttl: true; + } + export interface RecordWithTtl { + address: string; + ttl: number; + } + /** @deprecated Use `AnyARecord` or `AnyAaaaRecord` instead. */ + export type AnyRecordWithTtl = AnyARecord | AnyAaaaRecord; + export interface AnyARecord extends RecordWithTtl { + type: "A"; + } + export interface AnyAaaaRecord extends RecordWithTtl { + type: "AAAA"; + } + export interface CaaRecord { + critical: number; + issue?: string | undefined; + issuewild?: string | undefined; + iodef?: string | undefined; + contactemail?: string | undefined; + contactphone?: string | undefined; + } + export interface MxRecord { + priority: number; + exchange: string; + } + export interface AnyMxRecord extends MxRecord { + type: "MX"; + } + export interface NaptrRecord { + flags: string; + service: string; + regexp: string; + replacement: string; + order: number; + preference: number; + } + export interface AnyNaptrRecord extends NaptrRecord { + type: "NAPTR"; + } + export interface SoaRecord { + nsname: string; + hostmaster: string; + serial: number; + refresh: number; + retry: number; + expire: number; + minttl: number; + } + export interface AnySoaRecord extends SoaRecord { + type: "SOA"; + } + export interface SrvRecord { + priority: number; + weight: number; + port: number; + name: string; + } + export interface AnySrvRecord extends SrvRecord { + type: "SRV"; + } + export interface AnyTxtRecord { + type: "TXT"; + entries: string[]; + } + export interface AnyNsRecord { + type: "NS"; + value: string; + } + export interface AnyPtrRecord { + type: "PTR"; + value: string; + } + export interface AnyCnameRecord { + type: "CNAME"; + value: string; + } + export type AnyRecord = + | AnyARecord + | AnyAaaaRecord + | AnyCnameRecord + | AnyMxRecord + | AnyNaptrRecord + | AnyNsRecord + | AnyPtrRecord + | AnySoaRecord + | AnySrvRecord + | AnyTxtRecord; + /** + * Uses the DNS protocol to resolve a host name (e.g. `'nodejs.org'`) into an array + * of the resource records. The `callback` function has arguments`(err, records)`. When successful, `records` will be an array of resource + * records. The type and structure of individual results varies based on `rrtype`: + * + * + * + * On error, `err` is an `Error` object, where `err.code` is one of the `DNS error codes`. + * @since v0.1.27 + * @param hostname Host name to resolve. + * @param [rrtype='A'] Resource record type. + */ + export function resolve( + hostname: string, + callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void, + ): void; + export function resolve( + hostname: string, + rrtype: "A", + callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void, + ): void; + export function resolve( + hostname: string, + rrtype: "AAAA", + callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void, + ): void; + export function resolve( + hostname: string, + rrtype: "ANY", + callback: (err: NodeJS.ErrnoException | null, addresses: AnyRecord[]) => void, + ): void; + export function resolve( + hostname: string, + rrtype: "CNAME", + callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void, + ): void; + export function resolve( + hostname: string, + rrtype: "MX", + callback: (err: NodeJS.ErrnoException | null, addresses: MxRecord[]) => void, + ): void; + export function resolve( + hostname: string, + rrtype: "NAPTR", + callback: (err: NodeJS.ErrnoException | null, addresses: NaptrRecord[]) => void, + ): void; + export function resolve( + hostname: string, + rrtype: "NS", + callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void, + ): void; + export function resolve( + hostname: string, + rrtype: "PTR", + callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void, + ): void; + export function resolve( + hostname: string, + rrtype: "SOA", + callback: (err: NodeJS.ErrnoException | null, addresses: SoaRecord) => void, + ): void; + export function resolve( + hostname: string, + rrtype: "SRV", + callback: (err: NodeJS.ErrnoException | null, addresses: SrvRecord[]) => void, + ): void; + export function resolve( + hostname: string, + rrtype: "TXT", + callback: (err: NodeJS.ErrnoException | null, addresses: string[][]) => void, + ): void; + export function resolve( + hostname: string, + rrtype: string, + callback: ( + err: NodeJS.ErrnoException | null, + addresses: string[] | MxRecord[] | NaptrRecord[] | SoaRecord | SrvRecord[] | string[][] | AnyRecord[], + ) => void, + ): void; + export namespace resolve { + function __promisify__(hostname: string, rrtype?: "A" | "AAAA" | "CNAME" | "NS" | "PTR"): Promise; + function __promisify__(hostname: string, rrtype: "ANY"): Promise; + function __promisify__(hostname: string, rrtype: "MX"): Promise; + function __promisify__(hostname: string, rrtype: "NAPTR"): Promise; + function __promisify__(hostname: string, rrtype: "SOA"): Promise; + function __promisify__(hostname: string, rrtype: "SRV"): Promise; + function __promisify__(hostname: string, rrtype: "TXT"): Promise; + function __promisify__( + hostname: string, + rrtype: string, + ): Promise; + } + /** + * Uses the DNS protocol to resolve a IPv4 addresses (`A` records) for the`hostname`. The `addresses` argument passed to the `callback` function + * will contain an array of IPv4 addresses (e.g.`['74.125.79.104', '74.125.79.105', '74.125.79.106']`). + * @since v0.1.16 + * @param hostname Host name to resolve. + */ + export function resolve4( + hostname: string, + callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void, + ): void; + export function resolve4( + hostname: string, + options: ResolveWithTtlOptions, + callback: (err: NodeJS.ErrnoException | null, addresses: RecordWithTtl[]) => void, + ): void; + export function resolve4( + hostname: string, + options: ResolveOptions, + callback: (err: NodeJS.ErrnoException | null, addresses: string[] | RecordWithTtl[]) => void, + ): void; + export namespace resolve4 { + function __promisify__(hostname: string): Promise; + function __promisify__(hostname: string, options: ResolveWithTtlOptions): Promise; + function __promisify__(hostname: string, options?: ResolveOptions): Promise; + } + /** + * Uses the DNS protocol to resolve IPv6 addresses (`AAAA` records) for the`hostname`. The `addresses` argument passed to the `callback` function + * will contain an array of IPv6 addresses. + * @since v0.1.16 + * @param hostname Host name to resolve. + */ + export function resolve6( + hostname: string, + callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void, + ): void; + export function resolve6( + hostname: string, + options: ResolveWithTtlOptions, + callback: (err: NodeJS.ErrnoException | null, addresses: RecordWithTtl[]) => void, + ): void; + export function resolve6( + hostname: string, + options: ResolveOptions, + callback: (err: NodeJS.ErrnoException | null, addresses: string[] | RecordWithTtl[]) => void, + ): void; + export namespace resolve6 { + function __promisify__(hostname: string): Promise; + function __promisify__(hostname: string, options: ResolveWithTtlOptions): Promise; + function __promisify__(hostname: string, options?: ResolveOptions): Promise; + } + /** + * Uses the DNS protocol to resolve `CNAME` records for the `hostname`. The`addresses` argument passed to the `callback` function + * will contain an array of canonical name records available for the `hostname`(e.g. `['bar.example.com']`). + * @since v0.3.2 + */ + export function resolveCname( + hostname: string, + callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void, + ): void; + export namespace resolveCname { + function __promisify__(hostname: string): Promise; + } + /** + * Uses the DNS protocol to resolve `CAA` records for the `hostname`. The`addresses` argument passed to the `callback` function + * will contain an array of certification authority authorization records + * available for the `hostname` (e.g. `[{critical: 0, iodef: 'mailto:pki@example.com'}, {critical: 128, issue: 'pki.example.com'}]`). + * @since v15.0.0, v14.17.0 + */ + export function resolveCaa( + hostname: string, + callback: (err: NodeJS.ErrnoException | null, records: CaaRecord[]) => void, + ): void; + export namespace resolveCaa { + function __promisify__(hostname: string): Promise; + } + /** + * Uses the DNS protocol to resolve mail exchange records (`MX` records) for the`hostname`. The `addresses` argument passed to the `callback` function will + * contain an array of objects containing both a `priority` and `exchange`property (e.g. `[{priority: 10, exchange: 'mx.example.com'}, ...]`). + * @since v0.1.27 + */ + export function resolveMx( + hostname: string, + callback: (err: NodeJS.ErrnoException | null, addresses: MxRecord[]) => void, + ): void; + export namespace resolveMx { + function __promisify__(hostname: string): Promise; + } + /** + * Uses the DNS protocol to resolve regular expression-based records (`NAPTR`records) for the `hostname`. The `addresses` argument passed to the `callback`function will contain an array of + * objects with the following properties: + * + * * `flags` + * * `service` + * * `regexp` + * * `replacement` + * * `order` + * * `preference` + * + * ```js + * { + * flags: 's', + * service: 'SIP+D2U', + * regexp: '', + * replacement: '_sip._udp.example.com', + * order: 30, + * preference: 100 + * } + * ``` + * @since v0.9.12 + */ + export function resolveNaptr( + hostname: string, + callback: (err: NodeJS.ErrnoException | null, addresses: NaptrRecord[]) => void, + ): void; + export namespace resolveNaptr { + function __promisify__(hostname: string): Promise; + } + /** + * Uses the DNS protocol to resolve name server records (`NS` records) for the`hostname`. The `addresses` argument passed to the `callback` function will + * contain an array of name server records available for `hostname`(e.g. `['ns1.example.com', 'ns2.example.com']`). + * @since v0.1.90 + */ + export function resolveNs( + hostname: string, + callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void, + ): void; + export namespace resolveNs { + function __promisify__(hostname: string): Promise; + } + /** + * Uses the DNS protocol to resolve pointer records (`PTR` records) for the`hostname`. The `addresses` argument passed to the `callback` function will + * be an array of strings containing the reply records. + * @since v6.0.0 + */ + export function resolvePtr( + hostname: string, + callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void, + ): void; + export namespace resolvePtr { + function __promisify__(hostname: string): Promise; + } + /** + * Uses the DNS protocol to resolve a start of authority record (`SOA` record) for + * the `hostname`. The `address` argument passed to the `callback` function will + * be an object with the following properties: + * + * * `nsname` + * * `hostmaster` + * * `serial` + * * `refresh` + * * `retry` + * * `expire` + * * `minttl` + * + * ```js + * { + * nsname: 'ns.example.com', + * hostmaster: 'root.example.com', + * serial: 2013101809, + * refresh: 10000, + * retry: 2400, + * expire: 604800, + * minttl: 3600 + * } + * ``` + * @since v0.11.10 + */ + export function resolveSoa( + hostname: string, + callback: (err: NodeJS.ErrnoException | null, address: SoaRecord) => void, + ): void; + export namespace resolveSoa { + function __promisify__(hostname: string): Promise; + } + /** + * Uses the DNS protocol to resolve service records (`SRV` records) for the`hostname`. The `addresses` argument passed to the `callback` function will + * be an array of objects with the following properties: + * + * * `priority` + * * `weight` + * * `port` + * * `name` + * + * ```js + * { + * priority: 10, + * weight: 5, + * port: 21223, + * name: 'service.example.com' + * } + * ``` + * @since v0.1.27 + */ + export function resolveSrv( + hostname: string, + callback: (err: NodeJS.ErrnoException | null, addresses: SrvRecord[]) => void, + ): void; + export namespace resolveSrv { + function __promisify__(hostname: string): Promise; + } + /** + * Uses the DNS protocol to resolve text queries (`TXT` records) for the`hostname`. The `records` argument passed to the `callback` function is a + * two-dimensional array of the text records available for `hostname` (e.g.`[ ['v=spf1 ip4:0.0.0.0 ', '~all' ] ]`). Each sub-array contains TXT chunks of + * one record. Depending on the use case, these could be either joined together or + * treated separately. + * @since v0.1.27 + */ + export function resolveTxt( + hostname: string, + callback: (err: NodeJS.ErrnoException | null, addresses: string[][]) => void, + ): void; + export namespace resolveTxt { + function __promisify__(hostname: string): Promise; + } + /** + * Uses the DNS protocol to resolve all records (also known as `ANY` or `*` query). + * The `ret` argument passed to the `callback` function will be an array containing + * various types of records. Each object has a property `type` that indicates the + * type of the current record. And depending on the `type`, additional properties + * will be present on the object: + * + * + * + * Here is an example of the `ret` object passed to the callback: + * + * ```js + * [ { type: 'A', address: '127.0.0.1', ttl: 299 }, + * { type: 'CNAME', value: 'example.com' }, + * { type: 'MX', exchange: 'alt4.aspmx.l.example.com', priority: 50 }, + * { type: 'NS', value: 'ns1.example.com' }, + * { type: 'TXT', entries: [ 'v=spf1 include:_spf.example.com ~all' ] }, + * { type: 'SOA', + * nsname: 'ns1.example.com', + * hostmaster: 'admin.example.com', + * serial: 156696742, + * refresh: 900, + * retry: 900, + * expire: 1800, + * minttl: 60 } ] + * ``` + * + * DNS server operators may choose not to respond to `ANY`queries. It may be better to call individual methods like {@link resolve4},{@link resolveMx}, and so on. For more details, see [RFC + * 8482](https://tools.ietf.org/html/rfc8482). + */ + export function resolveAny( + hostname: string, + callback: (err: NodeJS.ErrnoException | null, addresses: AnyRecord[]) => void, + ): void; + export namespace resolveAny { + function __promisify__(hostname: string): Promise; + } + /** + * Performs a reverse DNS query that resolves an IPv4 or IPv6 address to an + * array of host names. + * + * On error, `err` is an `Error` object, where `err.code` is + * one of the `DNS error codes`. + * @since v0.1.16 + */ + export function reverse( + ip: string, + callback: (err: NodeJS.ErrnoException | null, hostnames: string[]) => void, + ): void; + /** + * Get the default value for `verbatim` in {@link lookup} and `dnsPromises.lookup()`. The value could be: + * + * * `ipv4first`: for `verbatim` defaulting to `false`. + * * `verbatim`: for `verbatim` defaulting to `true`. + * @since v20.1.0 + */ + export function getDefaultResultOrder(): "ipv4first" | "verbatim"; + /** + * Sets the IP address and port of servers to be used when performing DNS + * resolution. The `servers` argument is an array of [RFC 5952](https://tools.ietf.org/html/rfc5952#section-6) formatted + * addresses. If the port is the IANA default DNS port (53) it can be omitted. + * + * ```js + * dns.setServers([ + * '4.4.4.4', + * '[2001:4860:4860::8888]', + * '4.4.4.4:1053', + * '[2001:4860:4860::8888]:1053', + * ]); + * ``` + * + * An error will be thrown if an invalid address is provided. + * + * The `dns.setServers()` method must not be called while a DNS query is in + * progress. + * + * The {@link setServers} method affects only {@link resolve},`dns.resolve*()` and {@link reverse} (and specifically _not_ {@link lookup}). + * + * This method works much like [resolve.conf](https://man7.org/linux/man-pages/man5/resolv.conf.5.html). + * That is, if attempting to resolve with the first server provided results in a`NOTFOUND` error, the `resolve()` method will _not_ attempt to resolve with + * subsequent servers provided. Fallback DNS servers will only be used if the + * earlier ones time out or result in some other error. + * @since v0.11.3 + * @param servers array of `RFC 5952` formatted addresses + */ + export function setServers(servers: ReadonlyArray): void; + /** + * Returns an array of IP address strings, formatted according to [RFC 5952](https://tools.ietf.org/html/rfc5952#section-6), + * that are currently configured for DNS resolution. A string will include a port + * section if a custom port is used. + * + * ```js + * [ + * '4.4.4.4', + * '2001:4860:4860::8888', + * '4.4.4.4:1053', + * '[2001:4860:4860::8888]:1053', + * ] + * ``` + * @since v0.11.3 + */ + export function getServers(): string[]; + /** + * Set the default value of `verbatim` in {@link lookup} and `dnsPromises.lookup()`. The value could be: + * + * * `ipv4first`: sets default `verbatim` `false`. + * * `verbatim`: sets default `verbatim` `true`. + * + * The default is `verbatim` and {@link setDefaultResultOrder} have higher + * priority than `--dns-result-order`. When using `worker threads`,{@link setDefaultResultOrder} from the main thread won't affect the default + * dns orders in workers. + * @since v16.4.0, v14.18.0 + * @param order must be `'ipv4first'` or `'verbatim'`. + */ + export function setDefaultResultOrder(order: "ipv4first" | "verbatim"): void; + // Error codes + export const NODATA: string; + export const FORMERR: string; + export const SERVFAIL: string; + export const NOTFOUND: string; + export const NOTIMP: string; + export const REFUSED: string; + export const BADQUERY: string; + export const BADNAME: string; + export const BADFAMILY: string; + export const BADRESP: string; + export const CONNREFUSED: string; + export const TIMEOUT: string; + export const EOF: string; + export const FILE: string; + export const NOMEM: string; + export const DESTRUCTION: string; + export const BADSTR: string; + export const BADFLAGS: string; + export const NONAME: string; + export const BADHINTS: string; + export const NOTINITIALIZED: string; + export const LOADIPHLPAPI: string; + export const ADDRGETNETWORKPARAMS: string; + export const CANCELLED: string; + export interface ResolverOptions { + timeout?: number | undefined; + /** + * @default 4 + */ + tries?: number; + } + /** + * An independent resolver for DNS requests. + * + * Creating a new resolver uses the default server settings. Setting + * the servers used for a resolver using `resolver.setServers()` does not affect + * other resolvers: + * + * ```js + * const { Resolver } = require('node:dns'); + * const resolver = new Resolver(); + * resolver.setServers(['4.4.4.4']); + * + * // This request will use the server at 4.4.4.4, independent of global settings. + * resolver.resolve4('example.org', (err, addresses) => { + * // ... + * }); + * ``` + * + * The following methods from the `node:dns` module are available: + * + * * `resolver.getServers()` + * * `resolver.resolve()` + * * `resolver.resolve4()` + * * `resolver.resolve6()` + * * `resolver.resolveAny()` + * * `resolver.resolveCaa()` + * * `resolver.resolveCname()` + * * `resolver.resolveMx()` + * * `resolver.resolveNaptr()` + * * `resolver.resolveNs()` + * * `resolver.resolvePtr()` + * * `resolver.resolveSoa()` + * * `resolver.resolveSrv()` + * * `resolver.resolveTxt()` + * * `resolver.reverse()` + * * `resolver.setServers()` + * @since v8.3.0 + */ + export class Resolver { + constructor(options?: ResolverOptions); + /** + * Cancel all outstanding DNS queries made by this resolver. The corresponding + * callbacks will be called with an error with code `ECANCELLED`. + * @since v8.3.0 + */ + cancel(): void; + getServers: typeof getServers; + resolve: typeof resolve; + resolve4: typeof resolve4; + resolve6: typeof resolve6; + resolveAny: typeof resolveAny; + resolveCaa: typeof resolveCaa; + resolveCname: typeof resolveCname; + resolveMx: typeof resolveMx; + resolveNaptr: typeof resolveNaptr; + resolveNs: typeof resolveNs; + resolvePtr: typeof resolvePtr; + resolveSoa: typeof resolveSoa; + resolveSrv: typeof resolveSrv; + resolveTxt: typeof resolveTxt; + reverse: typeof reverse; + /** + * The resolver instance will send its requests from the specified IP address. + * This allows programs to specify outbound interfaces when used on multi-homed + * systems. + * + * If a v4 or v6 address is not specified, it is set to the default and the + * operating system will choose a local address automatically. + * + * The resolver will use the v4 local address when making requests to IPv4 DNS + * servers, and the v6 local address when making requests to IPv6 DNS servers. + * The `rrtype` of resolution requests has no impact on the local address used. + * @since v15.1.0, v14.17.0 + * @param [ipv4='0.0.0.0'] A string representation of an IPv4 address. + * @param [ipv6='::0'] A string representation of an IPv6 address. + */ + setLocalAddress(ipv4?: string, ipv6?: string): void; + setServers: typeof setServers; + } + export { dnsPromises as promises }; +} +declare module "node:dns" { + export * from "dns"; +} diff --git a/Url-Shortner/node_modules/@types/node/ts4.8/dns/promises.d.ts b/Url-Shortner/node_modules/@types/node/ts4.8/dns/promises.d.ts new file mode 100644 index 0000000..79d8b07 --- /dev/null +++ b/Url-Shortner/node_modules/@types/node/ts4.8/dns/promises.d.ts @@ -0,0 +1,417 @@ +/** + * The `dns.promises` API provides an alternative set of asynchronous DNS methods + * that return `Promise` objects rather than using callbacks. The API is accessible + * via `require('node:dns').promises` or `require('node:dns/promises')`. + * @since v10.6.0 + */ +declare module "dns/promises" { + import { + AnyRecord, + CaaRecord, + LookupAddress, + LookupAllOptions, + LookupOneOptions, + LookupOptions, + MxRecord, + NaptrRecord, + RecordWithTtl, + ResolveOptions, + ResolverOptions, + ResolveWithTtlOptions, + SoaRecord, + SrvRecord, + } from "node:dns"; + /** + * Returns an array of IP address strings, formatted according to [RFC 5952](https://tools.ietf.org/html/rfc5952#section-6), + * that are currently configured for DNS resolution. A string will include a port + * section if a custom port is used. + * + * ```js + * [ + * '4.4.4.4', + * '2001:4860:4860::8888', + * '4.4.4.4:1053', + * '[2001:4860:4860::8888]:1053', + * ] + * ``` + * @since v10.6.0 + */ + function getServers(): string[]; + /** + * Resolves a host name (e.g. `'nodejs.org'`) into the first found A (IPv4) or + * AAAA (IPv6) record. All `option` properties are optional. If `options` is an + * integer, then it must be `4` or `6` – if `options` is not provided, then IPv4 + * and IPv6 addresses are both returned if found. + * + * With the `all` option set to `true`, the `Promise` is resolved with `addresses`being an array of objects with the properties `address` and `family`. + * + * On error, the `Promise` is rejected with an `Error` object, where `err.code`is the error code. + * Keep in mind that `err.code` will be set to `'ENOTFOUND'` not only when + * the host name does not exist but also when the lookup fails in other ways + * such as no available file descriptors. + * + * `dnsPromises.lookup()` does not necessarily have anything to do with the DNS + * protocol. The implementation uses an operating system facility that can + * associate names with addresses and vice versa. This implementation can have + * subtle but important consequences on the behavior of any Node.js program. Please + * take some time to consult the `Implementation considerations section` before + * using `dnsPromises.lookup()`. + * + * Example usage: + * + * ```js + * const dns = require('node:dns'); + * const dnsPromises = dns.promises; + * const options = { + * family: 6, + * hints: dns.ADDRCONFIG | dns.V4MAPPED, + * }; + * + * dnsPromises.lookup('example.com', options).then((result) => { + * console.log('address: %j family: IPv%s', result.address, result.family); + * // address: "2606:2800:220:1:248:1893:25c8:1946" family: IPv6 + * }); + * + * // When options.all is true, the result will be an Array. + * options.all = true; + * dnsPromises.lookup('example.com', options).then((result) => { + * console.log('addresses: %j', result); + * // addresses: [{"address":"2606:2800:220:1:248:1893:25c8:1946","family":6}] + * }); + * ``` + * @since v10.6.0 + */ + function lookup(hostname: string, family: number): Promise; + function lookup(hostname: string, options: LookupOneOptions): Promise; + function lookup(hostname: string, options: LookupAllOptions): Promise; + function lookup(hostname: string, options: LookupOptions): Promise; + function lookup(hostname: string): Promise; + /** + * Resolves the given `address` and `port` into a host name and service using + * the operating system's underlying `getnameinfo` implementation. + * + * If `address` is not a valid IP address, a `TypeError` will be thrown. + * The `port` will be coerced to a number. If it is not a legal port, a `TypeError`will be thrown. + * + * On error, the `Promise` is rejected with an `Error` object, where `err.code`is the error code. + * + * ```js + * const dnsPromises = require('node:dns').promises; + * dnsPromises.lookupService('127.0.0.1', 22).then((result) => { + * console.log(result.hostname, result.service); + * // Prints: localhost ssh + * }); + * ``` + * @since v10.6.0 + */ + function lookupService( + address: string, + port: number, + ): Promise<{ + hostname: string; + service: string; + }>; + /** + * Uses the DNS protocol to resolve a host name (e.g. `'nodejs.org'`) into an array + * of the resource records. When successful, the `Promise` is resolved with an + * array of resource records. The type and structure of individual results vary + * based on `rrtype`: + * + * + * + * On error, the `Promise` is rejected with an `Error` object, where `err.code`is one of the `DNS error codes`. + * @since v10.6.0 + * @param hostname Host name to resolve. + * @param [rrtype='A'] Resource record type. + */ + function resolve(hostname: string): Promise; + function resolve(hostname: string, rrtype: "A"): Promise; + function resolve(hostname: string, rrtype: "AAAA"): Promise; + function resolve(hostname: string, rrtype: "ANY"): Promise; + function resolve(hostname: string, rrtype: "CAA"): Promise; + function resolve(hostname: string, rrtype: "CNAME"): Promise; + function resolve(hostname: string, rrtype: "MX"): Promise; + function resolve(hostname: string, rrtype: "NAPTR"): Promise; + function resolve(hostname: string, rrtype: "NS"): Promise; + function resolve(hostname: string, rrtype: "PTR"): Promise; + function resolve(hostname: string, rrtype: "SOA"): Promise; + function resolve(hostname: string, rrtype: "SRV"): Promise; + function resolve(hostname: string, rrtype: "TXT"): Promise; + function resolve( + hostname: string, + rrtype: string, + ): Promise; + /** + * Uses the DNS protocol to resolve IPv4 addresses (`A` records) for the`hostname`. On success, the `Promise` is resolved with an array of IPv4 + * addresses (e.g. `['74.125.79.104', '74.125.79.105', '74.125.79.106']`). + * @since v10.6.0 + * @param hostname Host name to resolve. + */ + function resolve4(hostname: string): Promise; + function resolve4(hostname: string, options: ResolveWithTtlOptions): Promise; + function resolve4(hostname: string, options: ResolveOptions): Promise; + /** + * Uses the DNS protocol to resolve IPv6 addresses (`AAAA` records) for the`hostname`. On success, the `Promise` is resolved with an array of IPv6 + * addresses. + * @since v10.6.0 + * @param hostname Host name to resolve. + */ + function resolve6(hostname: string): Promise; + function resolve6(hostname: string, options: ResolveWithTtlOptions): Promise; + function resolve6(hostname: string, options: ResolveOptions): Promise; + /** + * Uses the DNS protocol to resolve all records (also known as `ANY` or `*` query). + * On success, the `Promise` is resolved with an array containing various types of + * records. Each object has a property `type` that indicates the type of the + * current record. And depending on the `type`, additional properties will be + * present on the object: + * + * + * + * Here is an example of the result object: + * + * ```js + * [ { type: 'A', address: '127.0.0.1', ttl: 299 }, + * { type: 'CNAME', value: 'example.com' }, + * { type: 'MX', exchange: 'alt4.aspmx.l.example.com', priority: 50 }, + * { type: 'NS', value: 'ns1.example.com' }, + * { type: 'TXT', entries: [ 'v=spf1 include:_spf.example.com ~all' ] }, + * { type: 'SOA', + * nsname: 'ns1.example.com', + * hostmaster: 'admin.example.com', + * serial: 156696742, + * refresh: 900, + * retry: 900, + * expire: 1800, + * minttl: 60 } ] + * ``` + * @since v10.6.0 + */ + function resolveAny(hostname: string): Promise; + /** + * Uses the DNS protocol to resolve `CAA` records for the `hostname`. On success, + * the `Promise` is resolved with an array of objects containing available + * certification authority authorization records available for the `hostname`(e.g. `[{critical: 0, iodef: 'mailto:pki@example.com'},{critical: 128, issue: 'pki.example.com'}]`). + * @since v15.0.0, v14.17.0 + */ + function resolveCaa(hostname: string): Promise; + /** + * Uses the DNS protocol to resolve `CNAME` records for the `hostname`. On success, + * the `Promise` is resolved with an array of canonical name records available for + * the `hostname` (e.g. `['bar.example.com']`). + * @since v10.6.0 + */ + function resolveCname(hostname: string): Promise; + /** + * Uses the DNS protocol to resolve mail exchange records (`MX` records) for the`hostname`. On success, the `Promise` is resolved with an array of objects + * containing both a `priority` and `exchange` property (e.g.`[{priority: 10, exchange: 'mx.example.com'}, ...]`). + * @since v10.6.0 + */ + function resolveMx(hostname: string): Promise; + /** + * Uses the DNS protocol to resolve regular expression-based records (`NAPTR`records) for the `hostname`. On success, the `Promise` is resolved with an array + * of objects with the following properties: + * + * * `flags` + * * `service` + * * `regexp` + * * `replacement` + * * `order` + * * `preference` + * + * ```js + * { + * flags: 's', + * service: 'SIP+D2U', + * regexp: '', + * replacement: '_sip._udp.example.com', + * order: 30, + * preference: 100 + * } + * ``` + * @since v10.6.0 + */ + function resolveNaptr(hostname: string): Promise; + /** + * Uses the DNS protocol to resolve name server records (`NS` records) for the`hostname`. On success, the `Promise` is resolved with an array of name server + * records available for `hostname` (e.g.`['ns1.example.com', 'ns2.example.com']`). + * @since v10.6.0 + */ + function resolveNs(hostname: string): Promise; + /** + * Uses the DNS protocol to resolve pointer records (`PTR` records) for the`hostname`. On success, the `Promise` is resolved with an array of strings + * containing the reply records. + * @since v10.6.0 + */ + function resolvePtr(hostname: string): Promise; + /** + * Uses the DNS protocol to resolve a start of authority record (`SOA` record) for + * the `hostname`. On success, the `Promise` is resolved with an object with the + * following properties: + * + * * `nsname` + * * `hostmaster` + * * `serial` + * * `refresh` + * * `retry` + * * `expire` + * * `minttl` + * + * ```js + * { + * nsname: 'ns.example.com', + * hostmaster: 'root.example.com', + * serial: 2013101809, + * refresh: 10000, + * retry: 2400, + * expire: 604800, + * minttl: 3600 + * } + * ``` + * @since v10.6.0 + */ + function resolveSoa(hostname: string): Promise; + /** + * Uses the DNS protocol to resolve service records (`SRV` records) for the`hostname`. On success, the `Promise` is resolved with an array of objects with + * the following properties: + * + * * `priority` + * * `weight` + * * `port` + * * `name` + * + * ```js + * { + * priority: 10, + * weight: 5, + * port: 21223, + * name: 'service.example.com' + * } + * ``` + * @since v10.6.0 + */ + function resolveSrv(hostname: string): Promise; + /** + * Uses the DNS protocol to resolve text queries (`TXT` records) for the`hostname`. On success, the `Promise` is resolved with a two-dimensional array + * of the text records available for `hostname` (e.g.`[ ['v=spf1 ip4:0.0.0.0 ', '~all' ] ]`). Each sub-array contains TXT chunks of + * one record. Depending on the use case, these could be either joined together or + * treated separately. + * @since v10.6.0 + */ + function resolveTxt(hostname: string): Promise; + /** + * Performs a reverse DNS query that resolves an IPv4 or IPv6 address to an + * array of host names. + * + * On error, the `Promise` is rejected with an `Error` object, where `err.code`is one of the `DNS error codes`. + * @since v10.6.0 + */ + function reverse(ip: string): Promise; + /** + * Sets the IP address and port of servers to be used when performing DNS + * resolution. The `servers` argument is an array of [RFC 5952](https://tools.ietf.org/html/rfc5952#section-6) formatted + * addresses. If the port is the IANA default DNS port (53) it can be omitted. + * + * ```js + * dnsPromises.setServers([ + * '4.4.4.4', + * '[2001:4860:4860::8888]', + * '4.4.4.4:1053', + * '[2001:4860:4860::8888]:1053', + * ]); + * ``` + * + * An error will be thrown if an invalid address is provided. + * + * The `dnsPromises.setServers()` method must not be called while a DNS query is in + * progress. + * + * This method works much like [resolve.conf](https://man7.org/linux/man-pages/man5/resolv.conf.5.html). + * That is, if attempting to resolve with the first server provided results in a`NOTFOUND` error, the `resolve()` method will _not_ attempt to resolve with + * subsequent servers provided. Fallback DNS servers will only be used if the + * earlier ones time out or result in some other error. + * @since v10.6.0 + * @param servers array of `RFC 5952` formatted addresses + */ + function setServers(servers: ReadonlyArray): void; + /** + * Set the default value of `verbatim` in `dns.lookup()` and `dnsPromises.lookup()`. The value could be: + * + * * `ipv4first`: sets default `verbatim` `false`. + * * `verbatim`: sets default `verbatim` `true`. + * + * The default is `verbatim` and `dnsPromises.setDefaultResultOrder()` have + * higher priority than `--dns-result-order`. When using `worker threads`,`dnsPromises.setDefaultResultOrder()` from the main thread won't affect the + * default dns orders in workers. + * @since v16.4.0, v14.18.0 + * @param order must be `'ipv4first'` or `'verbatim'`. + */ + function setDefaultResultOrder(order: "ipv4first" | "verbatim"): void; + /** + * An independent resolver for DNS requests. + * + * Creating a new resolver uses the default server settings. Setting + * the servers used for a resolver using `resolver.setServers()` does not affect + * other resolvers: + * + * ```js + * const { Resolver } = require('node:dns').promises; + * const resolver = new Resolver(); + * resolver.setServers(['4.4.4.4']); + * + * // This request will use the server at 4.4.4.4, independent of global settings. + * resolver.resolve4('example.org').then((addresses) => { + * // ... + * }); + * + * // Alternatively, the same code can be written using async-await style. + * (async function() { + * const addresses = await resolver.resolve4('example.org'); + * })(); + * ``` + * + * The following methods from the `dnsPromises` API are available: + * + * * `resolver.getServers()` + * * `resolver.resolve()` + * * `resolver.resolve4()` + * * `resolver.resolve6()` + * * `resolver.resolveAny()` + * * `resolver.resolveCaa()` + * * `resolver.resolveCname()` + * * `resolver.resolveMx()` + * * `resolver.resolveNaptr()` + * * `resolver.resolveNs()` + * * `resolver.resolvePtr()` + * * `resolver.resolveSoa()` + * * `resolver.resolveSrv()` + * * `resolver.resolveTxt()` + * * `resolver.reverse()` + * * `resolver.setServers()` + * @since v10.6.0 + */ + class Resolver { + constructor(options?: ResolverOptions); + cancel(): void; + getServers: typeof getServers; + resolve: typeof resolve; + resolve4: typeof resolve4; + resolve6: typeof resolve6; + resolveAny: typeof resolveAny; + resolveCaa: typeof resolveCaa; + resolveCname: typeof resolveCname; + resolveMx: typeof resolveMx; + resolveNaptr: typeof resolveNaptr; + resolveNs: typeof resolveNs; + resolvePtr: typeof resolvePtr; + resolveSoa: typeof resolveSoa; + resolveSrv: typeof resolveSrv; + resolveTxt: typeof resolveTxt; + reverse: typeof reverse; + setLocalAddress(ipv4?: string, ipv6?: string): void; + setServers: typeof setServers; + } +} +declare module "node:dns/promises" { + export * from "dns/promises"; +} diff --git a/Url-Shortner/node_modules/@types/node/ts4.8/dom-events.d.ts b/Url-Shortner/node_modules/@types/node/ts4.8/dom-events.d.ts new file mode 100644 index 0000000..147a7b6 --- /dev/null +++ b/Url-Shortner/node_modules/@types/node/ts4.8/dom-events.d.ts @@ -0,0 +1,122 @@ +export {}; // Don't export anything! + +//// DOM-like Events +// NB: The Event / EventTarget / EventListener implementations below were copied +// from lib.dom.d.ts, then edited to reflect Node's documentation at +// https://nodejs.org/api/events.html#class-eventtarget. +// Please read that link to understand important implementation differences. + +// This conditional type will be the existing global Event in a browser, or +// the copy below in a Node environment. +type __Event = typeof globalThis extends { onmessage: any; Event: any } ? {} + : { + /** This is not used in Node.js and is provided purely for completeness. */ + readonly bubbles: boolean; + /** Alias for event.stopPropagation(). This is not used in Node.js and is provided purely for completeness. */ + cancelBubble: () => void; + /** True if the event was created with the cancelable option */ + readonly cancelable: boolean; + /** This is not used in Node.js and is provided purely for completeness. */ + readonly composed: boolean; + /** Returns an array containing the current EventTarget as the only entry or empty if the event is not being dispatched. This is not used in Node.js and is provided purely for completeness. */ + composedPath(): [EventTarget?]; + /** Alias for event.target. */ + readonly currentTarget: EventTarget | null; + /** Is true if cancelable is true and event.preventDefault() has been called. */ + readonly defaultPrevented: boolean; + /** This is not used in Node.js and is provided purely for completeness. */ + readonly eventPhase: 0 | 2; + /** The `AbortSignal` "abort" event is emitted with `isTrusted` set to `true`. The value is `false` in all other cases. */ + readonly isTrusted: boolean; + /** Sets the `defaultPrevented` property to `true` if `cancelable` is `true`. */ + preventDefault(): void; + /** This is not used in Node.js and is provided purely for completeness. */ + returnValue: boolean; + /** Alias for event.target. */ + readonly srcElement: EventTarget | null; + /** Stops the invocation of event listeners after the current one completes. */ + stopImmediatePropagation(): void; + /** This is not used in Node.js and is provided purely for completeness. */ + stopPropagation(): void; + /** The `EventTarget` dispatching the event */ + readonly target: EventTarget | null; + /** The millisecond timestamp when the Event object was created. */ + readonly timeStamp: number; + /** Returns the type of event, e.g. "click", "hashchange", or "submit". */ + readonly type: string; + }; + +// See comment above explaining conditional type +type __EventTarget = typeof globalThis extends { onmessage: any; EventTarget: any } ? {} + : { + /** + * Adds a new handler for the `type` event. Any given `listener` is added only once per `type` and per `capture` option value. + * + * If the `once` option is true, the `listener` is removed after the next time a `type` event is dispatched. + * + * The `capture` option is not used by Node.js in any functional way other than tracking registered event listeners per the `EventTarget` specification. + * Specifically, the `capture` option is used as part of the key when registering a `listener`. + * Any individual `listener` may be added once with `capture = false`, and once with `capture = true`. + */ + addEventListener( + type: string, + listener: EventListener | EventListenerObject, + options?: AddEventListenerOptions | boolean, + ): void; + /** Dispatches a synthetic event event to target and returns true if either event's cancelable attribute value is false or its preventDefault() method was not invoked, and false otherwise. */ + dispatchEvent(event: Event): boolean; + /** Removes the event listener in target's event listener list with the same type, callback, and options. */ + removeEventListener( + type: string, + listener: EventListener | EventListenerObject, + options?: EventListenerOptions | boolean, + ): void; + }; + +interface EventInit { + bubbles?: boolean; + cancelable?: boolean; + composed?: boolean; +} + +interface EventListenerOptions { + /** Not directly used by Node.js. Added for API completeness. Default: `false`. */ + capture?: boolean; +} + +interface AddEventListenerOptions extends EventListenerOptions { + /** When `true`, the listener is automatically removed when it is first invoked. Default: `false`. */ + once?: boolean; + /** When `true`, serves as a hint that the listener will not call the `Event` object's `preventDefault()` method. Default: false. */ + passive?: boolean; +} + +interface EventListener { + (evt: Event): void; +} + +interface EventListenerObject { + handleEvent(object: Event): void; +} + +import {} from "events"; // Make this an ambient declaration +declare global { + /** An event which takes place in the DOM. */ + interface Event extends __Event {} + var Event: typeof globalThis extends { onmessage: any; Event: infer T } ? T + : { + prototype: __Event; + new(type: string, eventInitDict?: EventInit): __Event; + }; + + /** + * EventTarget is a DOM interface implemented by objects that can + * receive events and may have listeners for them. + */ + interface EventTarget extends __EventTarget {} + var EventTarget: typeof globalThis extends { onmessage: any; EventTarget: infer T } ? T + : { + prototype: __EventTarget; + new(): __EventTarget; + }; +} diff --git a/Url-Shortner/node_modules/@types/node/ts4.8/domain.d.ts b/Url-Shortner/node_modules/@types/node/ts4.8/domain.d.ts new file mode 100644 index 0000000..72f17bd --- /dev/null +++ b/Url-Shortner/node_modules/@types/node/ts4.8/domain.d.ts @@ -0,0 +1,170 @@ +/** + * **This module is pending deprecation.** Once a replacement API has been + * finalized, this module will be fully deprecated. Most developers should + * **not** have cause to use this module. Users who absolutely must have + * the functionality that domains provide may rely on it for the time being + * but should expect to have to migrate to a different solution + * in the future. + * + * Domains provide a way to handle multiple different IO operations as a + * single group. If any of the event emitters or callbacks registered to a + * domain emit an `'error'` event, or throw an error, then the domain object + * will be notified, rather than losing the context of the error in the`process.on('uncaughtException')` handler, or causing the program to + * exit immediately with an error code. + * @deprecated Since v1.4.2 - Deprecated + * @see [source](https://github.com/nodejs/node/blob/v20.2.0/lib/domain.js) + */ +declare module "domain" { + import EventEmitter = require("node:events"); + /** + * The `Domain` class encapsulates the functionality of routing errors and + * uncaught exceptions to the active `Domain` object. + * + * To handle the errors that it catches, listen to its `'error'` event. + */ + class Domain extends EventEmitter { + /** + * An array of timers and event emitters that have been explicitly added + * to the domain. + */ + members: Array; + /** + * The `enter()` method is plumbing used by the `run()`, `bind()`, and`intercept()` methods to set the active domain. It sets `domain.active` and`process.domain` to the domain, and implicitly + * pushes the domain onto the domain + * stack managed by the domain module (see {@link exit} for details on the + * domain stack). The call to `enter()` delimits the beginning of a chain of + * asynchronous calls and I/O operations bound to a domain. + * + * Calling `enter()` changes only the active domain, and does not alter the domain + * itself. `enter()` and `exit()` can be called an arbitrary number of times on a + * single domain. + */ + enter(): void; + /** + * The `exit()` method exits the current domain, popping it off the domain stack. + * Any time execution is going to switch to the context of a different chain of + * asynchronous calls, it's important to ensure that the current domain is exited. + * The call to `exit()` delimits either the end of or an interruption to the chain + * of asynchronous calls and I/O operations bound to a domain. + * + * If there are multiple, nested domains bound to the current execution context,`exit()` will exit any domains nested within this domain. + * + * Calling `exit()` changes only the active domain, and does not alter the domain + * itself. `enter()` and `exit()` can be called an arbitrary number of times on a + * single domain. + */ + exit(): void; + /** + * Run the supplied function in the context of the domain, implicitly + * binding all event emitters, timers, and low-level requests that are + * created in that context. Optionally, arguments can be passed to + * the function. + * + * This is the most basic way to use a domain. + * + * ```js + * const domain = require('node:domain'); + * const fs = require('node:fs'); + * const d = domain.create(); + * d.on('error', (er) => { + * console.error('Caught error!', er); + * }); + * d.run(() => { + * process.nextTick(() => { + * setTimeout(() => { // Simulating some various async stuff + * fs.open('non-existent file', 'r', (er, fd) => { + * if (er) throw er; + * // proceed... + * }); + * }, 100); + * }); + * }); + * ``` + * + * In this example, the `d.on('error')` handler will be triggered, rather + * than crashing the program. + */ + run(fn: (...args: any[]) => T, ...args: any[]): T; + /** + * Explicitly adds an emitter to the domain. If any event handlers called by + * the emitter throw an error, or if the emitter emits an `'error'` event, it + * will be routed to the domain's `'error'` event, just like with implicit + * binding. + * + * This also works with timers that are returned from `setInterval()` and `setTimeout()`. If their callback function throws, it will be caught by + * the domain `'error'` handler. + * + * If the Timer or `EventEmitter` was already bound to a domain, it is removed + * from that one, and bound to this one instead. + * @param emitter emitter or timer to be added to the domain + */ + add(emitter: EventEmitter | NodeJS.Timer): void; + /** + * The opposite of {@link add}. Removes domain handling from the + * specified emitter. + * @param emitter emitter or timer to be removed from the domain + */ + remove(emitter: EventEmitter | NodeJS.Timer): void; + /** + * The returned function will be a wrapper around the supplied callback + * function. When the returned function is called, any errors that are + * thrown will be routed to the domain's `'error'` event. + * + * ```js + * const d = domain.create(); + * + * function readSomeFile(filename, cb) { + * fs.readFile(filename, 'utf8', d.bind((er, data) => { + * // If this throws, it will also be passed to the domain. + * return cb(er, data ? JSON.parse(data) : null); + * })); + * } + * + * d.on('error', (er) => { + * // An error occurred somewhere. If we throw it now, it will crash the program + * // with the normal line number and stack message. + * }); + * ``` + * @param callback The callback function + * @return The bound function + */ + bind(callback: T): T; + /** + * This method is almost identical to {@link bind}. However, in + * addition to catching thrown errors, it will also intercept `Error` objects sent as the first argument to the function. + * + * In this way, the common `if (err) return callback(err);` pattern can be replaced + * with a single error handler in a single place. + * + * ```js + * const d = domain.create(); + * + * function readSomeFile(filename, cb) { + * fs.readFile(filename, 'utf8', d.intercept((data) => { + * // Note, the first argument is never passed to the + * // callback since it is assumed to be the 'Error' argument + * // and thus intercepted by the domain. + * + * // If this throws, it will also be passed to the domain + * // so the error-handling logic can be moved to the 'error' + * // event on the domain instead of being repeated throughout + * // the program. + * return cb(null, JSON.parse(data)); + * })); + * } + * + * d.on('error', (er) => { + * // An error occurred somewhere. If we throw it now, it will crash the program + * // with the normal line number and stack message. + * }); + * ``` + * @param callback The callback function + * @return The intercepted function + */ + intercept(callback: T): T; + } + function create(): Domain; +} +declare module "node:domain" { + export * from "domain"; +} diff --git a/Url-Shortner/node_modules/@types/node/ts4.8/events.d.ts b/Url-Shortner/node_modules/@types/node/ts4.8/events.d.ts new file mode 100644 index 0000000..4d33044 --- /dev/null +++ b/Url-Shortner/node_modules/@types/node/ts4.8/events.d.ts @@ -0,0 +1,796 @@ +/** + * Much of the Node.js core API is built around an idiomatic asynchronous + * event-driven architecture in which certain kinds of objects (called "emitters") + * emit named events that cause `Function` objects ("listeners") to be called. + * + * For instance: a `net.Server` object emits an event each time a peer + * connects to it; a `fs.ReadStream` emits an event when the file is opened; + * a `stream` emits an event whenever data is available to be read. + * + * All objects that emit events are instances of the `EventEmitter` class. These + * objects expose an `eventEmitter.on()` function that allows one or more + * functions to be attached to named events emitted by the object. Typically, + * event names are camel-cased strings but any valid JavaScript property key + * can be used. + * + * When the `EventEmitter` object emits an event, all of the functions attached + * to that specific event are called _synchronously_. Any values returned by the + * called listeners are _ignored_ and discarded. + * + * The following example shows a simple `EventEmitter` instance with a single + * listener. The `eventEmitter.on()` method is used to register listeners, while + * the `eventEmitter.emit()` method is used to trigger the event. + * + * ```js + * import { EventEmitter } from 'node:events'; + * + * class MyEmitter extends EventEmitter {} + * + * const myEmitter = new MyEmitter(); + * myEmitter.on('event', () => { + * console.log('an event occurred!'); + * }); + * myEmitter.emit('event'); + * ``` + * @see [source](https://github.com/nodejs/node/blob/v20.2.0/lib/events.js) + */ +declare module "events" { + // NOTE: This class is in the docs but is **not actually exported** by Node. + // If https://github.com/nodejs/node/issues/39903 gets resolved and Node + // actually starts exporting the class, uncomment below. + // import { EventListener, EventListenerObject } from '__dom-events'; + // /** The NodeEventTarget is a Node.js-specific extension to EventTarget that emulates a subset of the EventEmitter API. */ + // interface NodeEventTarget extends EventTarget { + // /** + // * Node.js-specific extension to the `EventTarget` class that emulates the equivalent `EventEmitter` API. + // * The only difference between `addListener()` and `addEventListener()` is that addListener() will return a reference to the EventTarget. + // */ + // addListener(type: string, listener: EventListener | EventListenerObject, options?: { once: boolean }): this; + // /** Node.js-specific extension to the `EventTarget` class that returns an array of event `type` names for which event listeners are registered. */ + // eventNames(): string[]; + // /** Node.js-specific extension to the `EventTarget` class that returns the number of event listeners registered for the `type`. */ + // listenerCount(type: string): number; + // /** Node.js-specific alias for `eventTarget.removeListener()`. */ + // off(type: string, listener: EventListener | EventListenerObject): this; + // /** Node.js-specific alias for `eventTarget.addListener()`. */ + // on(type: string, listener: EventListener | EventListenerObject, options?: { once: boolean }): this; + // /** Node.js-specific extension to the `EventTarget` class that adds a `once` listener for the given event `type`. This is equivalent to calling `on` with the `once` option set to `true`. */ + // once(type: string, listener: EventListener | EventListenerObject): this; + // /** + // * Node.js-specific extension to the `EventTarget` class. + // * If `type` is specified, removes all registered listeners for `type`, + // * otherwise removes all registered listeners. + // */ + // removeAllListeners(type: string): this; + // /** + // * Node.js-specific extension to the `EventTarget` class that removes the listener for the given `type`. + // * The only difference between `removeListener()` and `removeEventListener()` is that `removeListener()` will return a reference to the `EventTarget`. + // */ + // removeListener(type: string, listener: EventListener | EventListenerObject): this; + // } + interface EventEmitterOptions { + /** + * Enables automatic capturing of promise rejection. + */ + captureRejections?: boolean | undefined; + } + // Any EventTarget with a Node-style `once` function + interface _NodeEventTarget { + once(eventName: string | symbol, listener: (...args: any[]) => void): this; + } + // Any EventTarget with a DOM-style `addEventListener` + interface _DOMEventTarget { + addEventListener( + eventName: string, + listener: (...args: any[]) => void, + opts?: { + once: boolean; + }, + ): any; + } + interface StaticEventEmitterOptions { + signal?: AbortSignal | undefined; + } + interface EventEmitter extends NodeJS.EventEmitter {} + /** + * The `EventEmitter` class is defined and exposed by the `node:events` module: + * + * ```js + * import { EventEmitter } from 'node:events'; + * ``` + * + * All `EventEmitter`s emit the event `'newListener'` when new listeners are + * added and `'removeListener'` when existing listeners are removed. + * + * It supports the following option: + * @since v0.1.26 + */ + class EventEmitter { + constructor(options?: EventEmitterOptions); + /** + * Creates a `Promise` that is fulfilled when the `EventEmitter` emits the given + * event or that is rejected if the `EventEmitter` emits `'error'` while waiting. + * The `Promise` will resolve with an array of all the arguments emitted to the + * given event. + * + * This method is intentionally generic and works with the web platform [EventTarget](https://dom.spec.whatwg.org/#interface-eventtarget) interface, which has no special`'error'` event + * semantics and does not listen to the `'error'` event. + * + * ```js + * import { once, EventEmitter } from 'node:events'; + * import process from 'node:process'; + * + * const ee = new EventEmitter(); + * + * process.nextTick(() => { + * ee.emit('myevent', 42); + * }); + * + * const [value] = await once(ee, 'myevent'); + * console.log(value); + * + * const err = new Error('kaboom'); + * process.nextTick(() => { + * ee.emit('error', err); + * }); + * + * try { + * await once(ee, 'myevent'); + * } catch (err) { + * console.error('error happened', err); + * } + * ``` + * + * The special handling of the `'error'` event is only used when `events.once()`is used to wait for another event. If `events.once()` is used to wait for the + * '`error'` event itself, then it is treated as any other kind of event without + * special handling: + * + * ```js + * import { EventEmitter, once } from 'node:events'; + * + * const ee = new EventEmitter(); + * + * once(ee, 'error') + * .then(([err]) => console.log('ok', err.message)) + * .catch((err) => console.error('error', err.message)); + * + * ee.emit('error', new Error('boom')); + * + * // Prints: ok boom + * ``` + * + * An `AbortSignal` can be used to cancel waiting for the event: + * + * ```js + * import { EventEmitter, once } from 'node:events'; + * + * const ee = new EventEmitter(); + * const ac = new AbortController(); + * + * async function foo(emitter, event, signal) { + * try { + * await once(emitter, event, { signal }); + * console.log('event emitted!'); + * } catch (error) { + * if (error.name === 'AbortError') { + * console.error('Waiting for the event was canceled!'); + * } else { + * console.error('There was an error', error.message); + * } + * } + * } + * + * foo(ee, 'foo', ac.signal); + * ac.abort(); // Abort waiting for the event + * ee.emit('foo'); // Prints: Waiting for the event was canceled! + * ``` + * @since v11.13.0, v10.16.0 + */ + static once( + emitter: _NodeEventTarget, + eventName: string | symbol, + options?: StaticEventEmitterOptions, + ): Promise; + static once(emitter: _DOMEventTarget, eventName: string, options?: StaticEventEmitterOptions): Promise; + /** + * ```js + * import { on, EventEmitter } from 'node:events'; + * import process from 'node:process'; + * + * const ee = new EventEmitter(); + * + * // Emit later on + * process.nextTick(() => { + * ee.emit('foo', 'bar'); + * ee.emit('foo', 42); + * }); + * + * for await (const event of on(ee, 'foo')) { + * // The execution of this inner block is synchronous and it + * // processes one event at a time (even with await). Do not use + * // if concurrent execution is required. + * console.log(event); // prints ['bar'] [42] + * } + * // Unreachable here + * ``` + * + * Returns an `AsyncIterator` that iterates `eventName` events. It will throw + * if the `EventEmitter` emits `'error'`. It removes all listeners when + * exiting the loop. The `value` returned by each iteration is an array + * composed of the emitted event arguments. + * + * An `AbortSignal` can be used to cancel waiting on events: + * + * ```js + * import { on, EventEmitter } from 'node:events'; + * import process from 'node:process'; + * + * const ac = new AbortController(); + * + * (async () => { + * const ee = new EventEmitter(); + * + * // Emit later on + * process.nextTick(() => { + * ee.emit('foo', 'bar'); + * ee.emit('foo', 42); + * }); + * + * for await (const event of on(ee, 'foo', { signal: ac.signal })) { + * // The execution of this inner block is synchronous and it + * // processes one event at a time (even with await). Do not use + * // if concurrent execution is required. + * console.log(event); // prints ['bar'] [42] + * } + * // Unreachable here + * })(); + * + * process.nextTick(() => ac.abort()); + * ``` + * @since v13.6.0, v12.16.0 + * @param eventName The name of the event being listened for + * @return that iterates `eventName` events emitted by the `emitter` + */ + static on( + emitter: NodeJS.EventEmitter, + eventName: string, + options?: StaticEventEmitterOptions, + ): AsyncIterableIterator; + /** + * A class method that returns the number of listeners for the given `eventName`registered on the given `emitter`. + * + * ```js + * import { EventEmitter, listenerCount } from 'node:events'; + * + * const myEmitter = new EventEmitter(); + * myEmitter.on('event', () => {}); + * myEmitter.on('event', () => {}); + * console.log(listenerCount(myEmitter, 'event')); + * // Prints: 2 + * ``` + * @since v0.9.12 + * @deprecated Since v3.2.0 - Use `listenerCount` instead. + * @param emitter The emitter to query + * @param eventName The event name + */ + static listenerCount(emitter: NodeJS.EventEmitter, eventName: string | symbol): number; + /** + * Returns a copy of the array of listeners for the event named `eventName`. + * + * For `EventEmitter`s this behaves exactly the same as calling `.listeners` on + * the emitter. + * + * For `EventTarget`s this is the only way to get the event listeners for the + * event target. This is useful for debugging and diagnostic purposes. + * + * ```js + * import { getEventListeners, EventEmitter } from 'node:events'; + * + * { + * const ee = new EventEmitter(); + * const listener = () => console.log('Events are fun'); + * ee.on('foo', listener); + * console.log(getEventListeners(ee, 'foo')); // [ [Function: listener] ] + * } + * { + * const et = new EventTarget(); + * const listener = () => console.log('Events are fun'); + * et.addEventListener('foo', listener); + * console.log(getEventListeners(et, 'foo')); // [ [Function: listener] ] + * } + * ``` + * @since v15.2.0, v14.17.0 + */ + static getEventListeners(emitter: _DOMEventTarget | NodeJS.EventEmitter, name: string | symbol): Function[]; + /** + * Returns the currently set max amount of listeners. + * + * For `EventEmitter`s this behaves exactly the same as calling `.getMaxListeners` on + * the emitter. + * + * For `EventTarget`s this is the only way to get the max event listeners for the + * event target. If the number of event handlers on a single EventTarget exceeds + * the max set, the EventTarget will print a warning. + * + * ```js + * import { getMaxListeners, setMaxListeners, EventEmitter } from 'node:events'; + * + * { + * const ee = new EventEmitter(); + * console.log(getMaxListeners(ee)); // 10 + * setMaxListeners(11, ee); + * console.log(getMaxListeners(ee)); // 11 + * } + * { + * const et = new EventTarget(); + * console.log(getMaxListeners(et)); // 10 + * setMaxListeners(11, et); + * console.log(getMaxListeners(et)); // 11 + * } + * ``` + * @since v19.9.0 + */ + static getMaxListeners(emitter: _DOMEventTarget | NodeJS.EventEmitter): number; + /** + * ```js + * import { setMaxListeners, EventEmitter } from 'node:events'; + * + * const target = new EventTarget(); + * const emitter = new EventEmitter(); + * + * setMaxListeners(5, target, emitter); + * ``` + * @since v15.4.0 + * @param n A non-negative number. The maximum number of listeners per `EventTarget` event. + * @param eventsTargets Zero or more {EventTarget} or {EventEmitter} instances. If none are specified, `n` is set as the default max for all newly created {EventTarget} and {EventEmitter} + * objects. + */ + static setMaxListeners(n?: number, ...eventTargets: Array<_DOMEventTarget | NodeJS.EventEmitter>): void; + /** + * Listens once to the `abort` event on the provided `signal`. + * + * Listening to the `abort` event on abort signals is unsafe and may + * lead to resource leaks since another third party with the signal can + * call `e.stopImmediatePropagation()`. Unfortunately Node.js cannot change + * this since it would violate the web standard. Additionally, the original + * API makes it easy to forget to remove listeners. + * + * This API allows safely using `AbortSignal`s in Node.js APIs by solving these + * two issues by listening to the event such that `stopImmediatePropagation` does + * not prevent the listener from running. + * + * Returns a disposable so that it may be unsubscribed from more easily. + * + * ```js + * import { addAbortListener } from 'node:events'; + * + * function example(signal) { + * let disposable; + * try { + * signal.addEventListener('abort', (e) => e.stopImmediatePropagation()); + * disposable = addAbortListener(signal, (e) => { + * // Do something when signal is aborted. + * }); + * } finally { + * disposable?.[Symbol.dispose](); + * } + * } + * ``` + * @since v20.5.0 + * @experimental + * @return that removes the `abort` listener. + */ + static addAbortListener(signal: AbortSignal, resource: (event: Event) => void): Disposable; + /** + * This symbol shall be used to install a listener for only monitoring `'error'`events. Listeners installed using this symbol are called before the regular`'error'` listeners are called. + * + * Installing a listener using this symbol does not change the behavior once an`'error'` event is emitted. Therefore, the process will still crash if no + * regular `'error'` listener is installed. + * @since v13.6.0, v12.17.0 + */ + static readonly errorMonitor: unique symbol; + /** + * Value: `Symbol.for('nodejs.rejection')` + * + * See how to write a custom `rejection handler`. + * @since v13.4.0, v12.16.0 + */ + static readonly captureRejectionSymbol: unique symbol; + /** + * Value: [boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Boolean_type) + * + * Change the default `captureRejections` option on all new `EventEmitter` objects. + * @since v13.4.0, v12.16.0 + */ + static captureRejections: boolean; + /** + * By default, a maximum of `10` listeners can be registered for any single + * event. This limit can be changed for individual `EventEmitter` instances + * using the `emitter.setMaxListeners(n)` method. To change the default + * for _all_`EventEmitter` instances, the `events.defaultMaxListeners`property can be used. If this value is not a positive number, a `RangeError`is thrown. + * + * Take caution when setting the `events.defaultMaxListeners` because the + * change affects _all_`EventEmitter` instances, including those created before + * the change is made. However, calling `emitter.setMaxListeners(n)` still has + * precedence over `events.defaultMaxListeners`. + * + * This is not a hard limit. The `EventEmitter` instance will allow + * more listeners to be added but will output a trace warning to stderr indicating + * that a "possible EventEmitter memory leak" has been detected. For any single`EventEmitter`, the `emitter.getMaxListeners()` and `emitter.setMaxListeners()`methods can be used to + * temporarily avoid this warning: + * + * ```js + * import { EventEmitter } from 'node:events'; + * const emitter = new EventEmitter(); + * emitter.setMaxListeners(emitter.getMaxListeners() + 1); + * emitter.once('event', () => { + * // do stuff + * emitter.setMaxListeners(Math.max(emitter.getMaxListeners() - 1, 0)); + * }); + * ``` + * + * The `--trace-warnings` command-line flag can be used to display the + * stack trace for such warnings. + * + * The emitted warning can be inspected with `process.on('warning')` and will + * have the additional `emitter`, `type`, and `count` properties, referring to + * the event emitter instance, the event's name and the number of attached + * listeners, respectively. + * Its `name` property is set to `'MaxListenersExceededWarning'`. + * @since v0.11.2 + */ + static defaultMaxListeners: number; + } + import internal = require("node:events"); + namespace EventEmitter { + // Should just be `export { EventEmitter }`, but that doesn't work in TypeScript 3.4 + export { internal as EventEmitter }; + export interface Abortable { + /** + * When provided the corresponding `AbortController` can be used to cancel an asynchronous action. + */ + signal?: AbortSignal | undefined; + } + } + global { + namespace NodeJS { + interface EventEmitter { + /** + * Alias for `emitter.on(eventName, listener)`. + * @since v0.1.26 + */ + addListener(eventName: string | symbol, listener: (...args: any[]) => void): this; + /** + * Adds the `listener` function to the end of the listeners array for the + * event named `eventName`. No checks are made to see if the `listener` has + * already been added. Multiple calls passing the same combination of `eventName`and `listener` will result in the `listener` being added, and called, multiple + * times. + * + * ```js + * server.on('connection', (stream) => { + * console.log('someone connected!'); + * }); + * ``` + * + * Returns a reference to the `EventEmitter`, so that calls can be chained. + * + * By default, event listeners are invoked in the order they are added. The`emitter.prependListener()` method can be used as an alternative to add the + * event listener to the beginning of the listeners array. + * + * ```js + * import { EventEmitter } from 'node:events'; + * const myEE = new EventEmitter(); + * myEE.on('foo', () => console.log('a')); + * myEE.prependListener('foo', () => console.log('b')); + * myEE.emit('foo'); + * // Prints: + * // b + * // a + * ``` + * @since v0.1.101 + * @param eventName The name of the event. + * @param listener The callback function + */ + on(eventName: string | symbol, listener: (...args: any[]) => void): this; + /** + * Adds a **one-time**`listener` function for the event named `eventName`. The + * next time `eventName` is triggered, this listener is removed and then invoked. + * + * ```js + * server.once('connection', (stream) => { + * console.log('Ah, we have our first user!'); + * }); + * ``` + * + * Returns a reference to the `EventEmitter`, so that calls can be chained. + * + * By default, event listeners are invoked in the order they are added. The`emitter.prependOnceListener()` method can be used as an alternative to add the + * event listener to the beginning of the listeners array. + * + * ```js + * import { EventEmitter } from 'node:events'; + * const myEE = new EventEmitter(); + * myEE.once('foo', () => console.log('a')); + * myEE.prependOnceListener('foo', () => console.log('b')); + * myEE.emit('foo'); + * // Prints: + * // b + * // a + * ``` + * @since v0.3.0 + * @param eventName The name of the event. + * @param listener The callback function + */ + once(eventName: string | symbol, listener: (...args: any[]) => void): this; + /** + * Removes the specified `listener` from the listener array for the event named`eventName`. + * + * ```js + * const callback = (stream) => { + * console.log('someone connected!'); + * }; + * server.on('connection', callback); + * // ... + * server.removeListener('connection', callback); + * ``` + * + * `removeListener()` will remove, at most, one instance of a listener from the + * listener array. If any single listener has been added multiple times to the + * listener array for the specified `eventName`, then `removeListener()` must be + * called multiple times to remove each instance. + * + * Once an event is emitted, all listeners attached to it at the + * time of emitting are called in order. This implies that any`removeListener()` or `removeAllListeners()` calls _after_ emitting and _before_ the last listener finishes execution + * will not remove them from`emit()` in progress. Subsequent events behave as expected. + * + * ```js + * import { EventEmitter } from 'node:events'; + * class MyEmitter extends EventEmitter {} + * const myEmitter = new MyEmitter(); + * + * const callbackA = () => { + * console.log('A'); + * myEmitter.removeListener('event', callbackB); + * }; + * + * const callbackB = () => { + * console.log('B'); + * }; + * + * myEmitter.on('event', callbackA); + * + * myEmitter.on('event', callbackB); + * + * // callbackA removes listener callbackB but it will still be called. + * // Internal listener array at time of emit [callbackA, callbackB] + * myEmitter.emit('event'); + * // Prints: + * // A + * // B + * + * // callbackB is now removed. + * // Internal listener array [callbackA] + * myEmitter.emit('event'); + * // Prints: + * // A + * ``` + * + * Because listeners are managed using an internal array, calling this will + * change the position indices of any listener registered _after_ the listener + * being removed. This will not impact the order in which listeners are called, + * but it means that any copies of the listener array as returned by + * the `emitter.listeners()` method will need to be recreated. + * + * When a single function has been added as a handler multiple times for a single + * event (as in the example below), `removeListener()` will remove the most + * recently added instance. In the example the `once('ping')`listener is removed: + * + * ```js + * import { EventEmitter } from 'node:events'; + * const ee = new EventEmitter(); + * + * function pong() { + * console.log('pong'); + * } + * + * ee.on('ping', pong); + * ee.once('ping', pong); + * ee.removeListener('ping', pong); + * + * ee.emit('ping'); + * ee.emit('ping'); + * ``` + * + * Returns a reference to the `EventEmitter`, so that calls can be chained. + * @since v0.1.26 + */ + removeListener(eventName: string | symbol, listener: (...args: any[]) => void): this; + /** + * Alias for `emitter.removeListener()`. + * @since v10.0.0 + */ + off(eventName: string | symbol, listener: (...args: any[]) => void): this; + /** + * Removes all listeners, or those of the specified `eventName`. + * + * It is bad practice to remove listeners added elsewhere in the code, + * particularly when the `EventEmitter` instance was created by some other + * component or module (e.g. sockets or file streams). + * + * Returns a reference to the `EventEmitter`, so that calls can be chained. + * @since v0.1.26 + */ + removeAllListeners(event?: string | symbol): this; + /** + * By default `EventEmitter`s will print a warning if more than `10` listeners are + * added for a particular event. This is a useful default that helps finding + * memory leaks. The `emitter.setMaxListeners()` method allows the limit to be + * modified for this specific `EventEmitter` instance. The value can be set to`Infinity` (or `0`) to indicate an unlimited number of listeners. + * + * Returns a reference to the `EventEmitter`, so that calls can be chained. + * @since v0.3.5 + */ + setMaxListeners(n: number): this; + /** + * Returns the current max listener value for the `EventEmitter` which is either + * set by `emitter.setMaxListeners(n)` or defaults to {@link defaultMaxListeners}. + * @since v1.0.0 + */ + getMaxListeners(): number; + /** + * Returns a copy of the array of listeners for the event named `eventName`. + * + * ```js + * server.on('connection', (stream) => { + * console.log('someone connected!'); + * }); + * console.log(util.inspect(server.listeners('connection'))); + * // Prints: [ [Function] ] + * ``` + * @since v0.1.26 + */ + listeners(eventName: string | symbol): Function[]; + /** + * Returns a copy of the array of listeners for the event named `eventName`, + * including any wrappers (such as those created by `.once()`). + * + * ```js + * import { EventEmitter } from 'node:events'; + * const emitter = new EventEmitter(); + * emitter.once('log', () => console.log('log once')); + * + * // Returns a new Array with a function `onceWrapper` which has a property + * // `listener` which contains the original listener bound above + * const listeners = emitter.rawListeners('log'); + * const logFnWrapper = listeners[0]; + * + * // Logs "log once" to the console and does not unbind the `once` event + * logFnWrapper.listener(); + * + * // Logs "log once" to the console and removes the listener + * logFnWrapper(); + * + * emitter.on('log', () => console.log('log persistently')); + * // Will return a new Array with a single function bound by `.on()` above + * const newListeners = emitter.rawListeners('log'); + * + * // Logs "log persistently" twice + * newListeners[0](); + * emitter.emit('log'); + * ``` + * @since v9.4.0 + */ + rawListeners(eventName: string | symbol): Function[]; + /** + * Synchronously calls each of the listeners registered for the event named`eventName`, in the order they were registered, passing the supplied arguments + * to each. + * + * Returns `true` if the event had listeners, `false` otherwise. + * + * ```js + * import { EventEmitter } from 'node:events'; + * const myEmitter = new EventEmitter(); + * + * // First listener + * myEmitter.on('event', function firstListener() { + * console.log('Helloooo! first listener'); + * }); + * // Second listener + * myEmitter.on('event', function secondListener(arg1, arg2) { + * console.log(`event with parameters ${arg1}, ${arg2} in second listener`); + * }); + * // Third listener + * myEmitter.on('event', function thirdListener(...args) { + * const parameters = args.join(', '); + * console.log(`event with parameters ${parameters} in third listener`); + * }); + * + * console.log(myEmitter.listeners('event')); + * + * myEmitter.emit('event', 1, 2, 3, 4, 5); + * + * // Prints: + * // [ + * // [Function: firstListener], + * // [Function: secondListener], + * // [Function: thirdListener] + * // ] + * // Helloooo! first listener + * // event with parameters 1, 2 in second listener + * // event with parameters 1, 2, 3, 4, 5 in third listener + * ``` + * @since v0.1.26 + */ + emit(eventName: string | symbol, ...args: any[]): boolean; + /** + * Returns the number of listeners listening for the event named `eventName`. + * If `listener` is provided, it will return how many times the listener is found + * in the list of the listeners of the event. + * @since v3.2.0 + * @param eventName The name of the event being listened for + * @param listener The event handler function + */ + listenerCount(eventName: string | symbol, listener?: Function): number; + /** + * Adds the `listener` function to the _beginning_ of the listeners array for the + * event named `eventName`. No checks are made to see if the `listener` has + * already been added. Multiple calls passing the same combination of `eventName`and `listener` will result in the `listener` being added, and called, multiple + * times. + * + * ```js + * server.prependListener('connection', (stream) => { + * console.log('someone connected!'); + * }); + * ``` + * + * Returns a reference to the `EventEmitter`, so that calls can be chained. + * @since v6.0.0 + * @param eventName The name of the event. + * @param listener The callback function + */ + prependListener(eventName: string | symbol, listener: (...args: any[]) => void): this; + /** + * Adds a **one-time**`listener` function for the event named `eventName` to the _beginning_ of the listeners array. The next time `eventName` is triggered, this + * listener is removed, and then invoked. + * + * ```js + * server.prependOnceListener('connection', (stream) => { + * console.log('Ah, we have our first user!'); + * }); + * ``` + * + * Returns a reference to the `EventEmitter`, so that calls can be chained. + * @since v6.0.0 + * @param eventName The name of the event. + * @param listener The callback function + */ + prependOnceListener(eventName: string | symbol, listener: (...args: any[]) => void): this; + /** + * Returns an array listing the events for which the emitter has registered + * listeners. The values in the array are strings or `Symbol`s. + * + * ```js + * import { EventEmitter } from 'node:events'; + * + * const myEE = new EventEmitter(); + * myEE.on('foo', () => {}); + * myEE.on('bar', () => {}); + * + * const sym = Symbol('symbol'); + * myEE.on(sym, () => {}); + * + * console.log(myEE.eventNames()); + * // Prints: [ 'foo', 'bar', Symbol(symbol) ] + * ``` + * @since v6.0.0 + */ + eventNames(): Array; + } + } + } + export = EventEmitter; +} +declare module "node:events" { + import events = require("events"); + export = events; +} diff --git a/Url-Shortner/node_modules/@types/node/ts4.8/fs.d.ts b/Url-Shortner/node_modules/@types/node/ts4.8/fs.d.ts new file mode 100644 index 0000000..3f5d9a1 --- /dev/null +++ b/Url-Shortner/node_modules/@types/node/ts4.8/fs.d.ts @@ -0,0 +1,4289 @@ +/** + * The `node:fs` module enables interacting with the file system in a + * way modeled on standard POSIX functions. + * + * To use the promise-based APIs: + * + * ```js + * import * as fs from 'node:fs/promises'; + * ``` + * + * To use the callback and sync APIs: + * + * ```js + * import * as fs from 'node:fs'; + * ``` + * + * All file system operations have synchronous, callback, and promise-based + * forms, and are accessible using both CommonJS syntax and ES6 Modules (ESM). + * @see [source](https://github.com/nodejs/node/blob/v20.2.0/lib/fs.js) + */ +declare module "fs" { + import * as stream from "node:stream"; + import { Abortable, EventEmitter } from "node:events"; + import { URL } from "node:url"; + import * as promises from "node:fs/promises"; + export { promises }; + /** + * Valid types for path values in "fs". + */ + export type PathLike = string | Buffer | URL; + export type PathOrFileDescriptor = PathLike | number; + export type TimeLike = string | number | Date; + export type NoParamCallback = (err: NodeJS.ErrnoException | null) => void; + export type BufferEncodingOption = + | "buffer" + | { + encoding: "buffer"; + }; + export interface ObjectEncodingOptions { + encoding?: BufferEncoding | null | undefined; + } + export type EncodingOption = ObjectEncodingOptions | BufferEncoding | undefined | null; + export type OpenMode = number | string; + export type Mode = number | string; + export interface StatsBase { + isFile(): boolean; + isDirectory(): boolean; + isBlockDevice(): boolean; + isCharacterDevice(): boolean; + isSymbolicLink(): boolean; + isFIFO(): boolean; + isSocket(): boolean; + dev: T; + ino: T; + mode: T; + nlink: T; + uid: T; + gid: T; + rdev: T; + size: T; + blksize: T; + blocks: T; + atimeMs: T; + mtimeMs: T; + ctimeMs: T; + birthtimeMs: T; + atime: Date; + mtime: Date; + ctime: Date; + birthtime: Date; + } + export interface Stats extends StatsBase {} + /** + * A `fs.Stats` object provides information about a file. + * + * Objects returned from {@link stat}, {@link lstat}, {@link fstat}, and + * their synchronous counterparts are of this type. + * If `bigint` in the `options` passed to those methods is true, the numeric values + * will be `bigint` instead of `number`, and the object will contain additional + * nanosecond-precision properties suffixed with `Ns`. + * + * ```console + * Stats { + * dev: 2114, + * ino: 48064969, + * mode: 33188, + * nlink: 1, + * uid: 85, + * gid: 100, + * rdev: 0, + * size: 527, + * blksize: 4096, + * blocks: 8, + * atimeMs: 1318289051000.1, + * mtimeMs: 1318289051000.1, + * ctimeMs: 1318289051000.1, + * birthtimeMs: 1318289051000.1, + * atime: Mon, 10 Oct 2011 23:24:11 GMT, + * mtime: Mon, 10 Oct 2011 23:24:11 GMT, + * ctime: Mon, 10 Oct 2011 23:24:11 GMT, + * birthtime: Mon, 10 Oct 2011 23:24:11 GMT } + * ``` + * + * `bigint` version: + * + * ```console + * BigIntStats { + * dev: 2114n, + * ino: 48064969n, + * mode: 33188n, + * nlink: 1n, + * uid: 85n, + * gid: 100n, + * rdev: 0n, + * size: 527n, + * blksize: 4096n, + * blocks: 8n, + * atimeMs: 1318289051000n, + * mtimeMs: 1318289051000n, + * ctimeMs: 1318289051000n, + * birthtimeMs: 1318289051000n, + * atimeNs: 1318289051000000000n, + * mtimeNs: 1318289051000000000n, + * ctimeNs: 1318289051000000000n, + * birthtimeNs: 1318289051000000000n, + * atime: Mon, 10 Oct 2011 23:24:11 GMT, + * mtime: Mon, 10 Oct 2011 23:24:11 GMT, + * ctime: Mon, 10 Oct 2011 23:24:11 GMT, + * birthtime: Mon, 10 Oct 2011 23:24:11 GMT } + * ``` + * @since v0.1.21 + */ + export class Stats {} + export interface StatsFsBase { + /** Type of file system. */ + type: T; + /** Optimal transfer block size. */ + bsize: T; + /** Total data blocks in file system. */ + blocks: T; + /** Free blocks in file system. */ + bfree: T; + /** Available blocks for unprivileged users */ + bavail: T; + /** Total file nodes in file system. */ + files: T; + /** Free file nodes in file system. */ + ffree: T; + } + export interface StatsFs extends StatsFsBase {} + /** + * Provides information about a mounted file system. + * + * Objects returned from {@link statfs} and its synchronous counterpart are of + * this type. If `bigint` in the `options` passed to those methods is `true`, the + * numeric values will be `bigint` instead of `number`. + * + * ```console + * StatFs { + * type: 1397114950, + * bsize: 4096, + * blocks: 121938943, + * bfree: 61058895, + * bavail: 61058895, + * files: 999, + * ffree: 1000000 + * } + * ``` + * + * `bigint` version: + * + * ```console + * StatFs { + * type: 1397114950n, + * bsize: 4096n, + * blocks: 121938943n, + * bfree: 61058895n, + * bavail: 61058895n, + * files: 999n, + * ffree: 1000000n + * } + * ``` + * @since v19.6.0, v18.15.0 + */ + export class StatsFs {} + export interface BigIntStatsFs extends StatsFsBase {} + export interface StatFsOptions { + bigint?: boolean | undefined; + } + /** + * A representation of a directory entry, which can be a file or a subdirectory + * within the directory, as returned by reading from an `fs.Dir`. The + * directory entry is a combination of the file name and file type pairs. + * + * Additionally, when {@link readdir} or {@link readdirSync} is called with + * the `withFileTypes` option set to `true`, the resulting array is filled with `fs.Dirent` objects, rather than strings or `Buffer` s. + * @since v10.10.0 + */ + export class Dirent { + /** + * Returns `true` if the `fs.Dirent` object describes a regular file. + * @since v10.10.0 + */ + isFile(): boolean; + /** + * Returns `true` if the `fs.Dirent` object describes a file system + * directory. + * @since v10.10.0 + */ + isDirectory(): boolean; + /** + * Returns `true` if the `fs.Dirent` object describes a block device. + * @since v10.10.0 + */ + isBlockDevice(): boolean; + /** + * Returns `true` if the `fs.Dirent` object describes a character device. + * @since v10.10.0 + */ + isCharacterDevice(): boolean; + /** + * Returns `true` if the `fs.Dirent` object describes a symbolic link. + * @since v10.10.0 + */ + isSymbolicLink(): boolean; + /** + * Returns `true` if the `fs.Dirent` object describes a first-in-first-out + * (FIFO) pipe. + * @since v10.10.0 + */ + isFIFO(): boolean; + /** + * Returns `true` if the `fs.Dirent` object describes a socket. + * @since v10.10.0 + */ + isSocket(): boolean; + /** + * The file name that this `fs.Dirent` object refers to. The type of this + * value is determined by the `options.encoding` passed to {@link readdir} or {@link readdirSync}. + * @since v10.10.0 + */ + name: string; + /** + * The base path that this `fs.Dirent` object refers to. + * @since v20.1.0 + */ + path: string; + } + /** + * A class representing a directory stream. + * + * Created by {@link opendir}, {@link opendirSync}, or `fsPromises.opendir()`. + * + * ```js + * import { opendir } from 'node:fs/promises'; + * + * try { + * const dir = await opendir('./'); + * for await (const dirent of dir) + * console.log(dirent.name); + * } catch (err) { + * console.error(err); + * } + * ``` + * + * When using the async iterator, the `fs.Dir` object will be automatically + * closed after the iterator exits. + * @since v12.12.0 + */ + export class Dir implements AsyncIterable { + /** + * The read-only path of this directory as was provided to {@link opendir},{@link opendirSync}, or `fsPromises.opendir()`. + * @since v12.12.0 + */ + readonly path: string; + /** + * Asynchronously iterates over the directory via `readdir(3)` until all entries have been read. + */ + [Symbol.asyncIterator](): AsyncIterableIterator; + /** + * Asynchronously close the directory's underlying resource handle. + * Subsequent reads will result in errors. + * + * A promise is returned that will be resolved after the resource has been + * closed. + * @since v12.12.0 + */ + close(): Promise; + close(cb: NoParamCallback): void; + /** + * Synchronously close the directory's underlying resource handle. + * Subsequent reads will result in errors. + * @since v12.12.0 + */ + closeSync(): void; + /** + * Asynchronously read the next directory entry via [`readdir(3)`](http://man7.org/linux/man-pages/man3/readdir.3.html) as an `fs.Dirent`. + * + * A promise is returned that will be resolved with an `fs.Dirent`, or `null`if there are no more directory entries to read. + * + * Directory entries returned by this function are in no particular order as + * provided by the operating system's underlying directory mechanisms. + * Entries added or removed while iterating over the directory might not be + * included in the iteration results. + * @since v12.12.0 + * @return containing {fs.Dirent|null} + */ + read(): Promise; + read(cb: (err: NodeJS.ErrnoException | null, dirEnt: Dirent | null) => void): void; + /** + * Synchronously read the next directory entry as an `fs.Dirent`. See the + * POSIX [`readdir(3)`](http://man7.org/linux/man-pages/man3/readdir.3.html) documentation for more detail. + * + * If there are no more directory entries to read, `null` will be returned. + * + * Directory entries returned by this function are in no particular order as + * provided by the operating system's underlying directory mechanisms. + * Entries added or removed while iterating over the directory might not be + * included in the iteration results. + * @since v12.12.0 + */ + readSync(): Dirent | null; + } + /** + * Class: fs.StatWatcher + * @since v14.3.0, v12.20.0 + * Extends `EventEmitter` + * A successful call to {@link watchFile} method will return a new fs.StatWatcher object. + */ + export interface StatWatcher extends EventEmitter { + /** + * When called, requests that the Node.js event loop _not_ exit so long as the `fs.StatWatcher` is active. Calling `watcher.ref()` multiple times will have + * no effect. + * + * By default, all `fs.StatWatcher` objects are "ref'ed", making it normally + * unnecessary to call `watcher.ref()` unless `watcher.unref()` had been + * called previously. + * @since v14.3.0, v12.20.0 + */ + ref(): this; + /** + * When called, the active `fs.StatWatcher` object will not require the Node.js + * event loop to remain active. If there is no other activity keeping the + * event loop running, the process may exit before the `fs.StatWatcher` object's + * callback is invoked. Calling `watcher.unref()` multiple times will have + * no effect. + * @since v14.3.0, v12.20.0 + */ + unref(): this; + } + export interface FSWatcher extends EventEmitter { + /** + * Stop watching for changes on the given `fs.FSWatcher`. Once stopped, the `fs.FSWatcher` object is no longer usable. + * @since v0.5.8 + */ + close(): void; + /** + * events.EventEmitter + * 1. change + * 2. error + */ + addListener(event: string, listener: (...args: any[]) => void): this; + addListener(event: "change", listener: (eventType: string, filename: string | Buffer) => void): this; + addListener(event: "error", listener: (error: Error) => void): this; + addListener(event: "close", listener: () => void): this; + on(event: string, listener: (...args: any[]) => void): this; + on(event: "change", listener: (eventType: string, filename: string | Buffer) => void): this; + on(event: "error", listener: (error: Error) => void): this; + on(event: "close", listener: () => void): this; + once(event: string, listener: (...args: any[]) => void): this; + once(event: "change", listener: (eventType: string, filename: string | Buffer) => void): this; + once(event: "error", listener: (error: Error) => void): this; + once(event: "close", listener: () => void): this; + prependListener(event: string, listener: (...args: any[]) => void): this; + prependListener(event: "change", listener: (eventType: string, filename: string | Buffer) => void): this; + prependListener(event: "error", listener: (error: Error) => void): this; + prependListener(event: "close", listener: () => void): this; + prependOnceListener(event: string, listener: (...args: any[]) => void): this; + prependOnceListener(event: "change", listener: (eventType: string, filename: string | Buffer) => void): this; + prependOnceListener(event: "error", listener: (error: Error) => void): this; + prependOnceListener(event: "close", listener: () => void): this; + } + /** + * Instances of `fs.ReadStream` are created and returned using the {@link createReadStream} function. + * @since v0.1.93 + */ + export class ReadStream extends stream.Readable { + close(callback?: (err?: NodeJS.ErrnoException | null) => void): void; + /** + * The number of bytes that have been read so far. + * @since v6.4.0 + */ + bytesRead: number; + /** + * The path to the file the stream is reading from as specified in the first + * argument to `fs.createReadStream()`. If `path` is passed as a string, then`readStream.path` will be a string. If `path` is passed as a `Buffer`, then`readStream.path` will be a + * `Buffer`. If `fd` is specified, then`readStream.path` will be `undefined`. + * @since v0.1.93 + */ + path: string | Buffer; + /** + * This property is `true` if the underlying file has not been opened yet, + * i.e. before the `'ready'` event is emitted. + * @since v11.2.0, v10.16.0 + */ + pending: boolean; + /** + * events.EventEmitter + * 1. open + * 2. close + * 3. ready + */ + addListener(event: "close", listener: () => void): this; + addListener(event: "data", listener: (chunk: Buffer | string) => void): this; + addListener(event: "end", listener: () => void): this; + addListener(event: "error", listener: (err: Error) => void): this; + addListener(event: "open", listener: (fd: number) => void): this; + addListener(event: "pause", listener: () => void): this; + addListener(event: "readable", listener: () => void): this; + addListener(event: "ready", listener: () => void): this; + addListener(event: "resume", listener: () => void): this; + addListener(event: string | symbol, listener: (...args: any[]) => void): this; + on(event: "close", listener: () => void): this; + on(event: "data", listener: (chunk: Buffer | string) => void): this; + on(event: "end", listener: () => void): this; + on(event: "error", listener: (err: Error) => void): this; + on(event: "open", listener: (fd: number) => void): this; + on(event: "pause", listener: () => void): this; + on(event: "readable", listener: () => void): this; + on(event: "ready", listener: () => void): this; + on(event: "resume", listener: () => void): this; + on(event: string | symbol, listener: (...args: any[]) => void): this; + once(event: "close", listener: () => void): this; + once(event: "data", listener: (chunk: Buffer | string) => void): this; + once(event: "end", listener: () => void): this; + once(event: "error", listener: (err: Error) => void): this; + once(event: "open", listener: (fd: number) => void): this; + once(event: "pause", listener: () => void): this; + once(event: "readable", listener: () => void): this; + once(event: "ready", listener: () => void): this; + once(event: "resume", listener: () => void): this; + once(event: string | symbol, listener: (...args: any[]) => void): this; + prependListener(event: "close", listener: () => void): this; + prependListener(event: "data", listener: (chunk: Buffer | string) => void): this; + prependListener(event: "end", listener: () => void): this; + prependListener(event: "error", listener: (err: Error) => void): this; + prependListener(event: "open", listener: (fd: number) => void): this; + prependListener(event: "pause", listener: () => void): this; + prependListener(event: "readable", listener: () => void): this; + prependListener(event: "ready", listener: () => void): this; + prependListener(event: "resume", listener: () => void): this; + prependListener(event: string | symbol, listener: (...args: any[]) => void): this; + prependOnceListener(event: "close", listener: () => void): this; + prependOnceListener(event: "data", listener: (chunk: Buffer | string) => void): this; + prependOnceListener(event: "end", listener: () => void): this; + prependOnceListener(event: "error", listener: (err: Error) => void): this; + prependOnceListener(event: "open", listener: (fd: number) => void): this; + prependOnceListener(event: "pause", listener: () => void): this; + prependOnceListener(event: "readable", listener: () => void): this; + prependOnceListener(event: "ready", listener: () => void): this; + prependOnceListener(event: "resume", listener: () => void): this; + prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this; + } + /** + * * Extends `stream.Writable` + * + * Instances of `fs.WriteStream` are created and returned using the {@link createWriteStream} function. + * @since v0.1.93 + */ + export class WriteStream extends stream.Writable { + /** + * Closes `writeStream`. Optionally accepts a + * callback that will be executed once the `writeStream`is closed. + * @since v0.9.4 + */ + close(callback?: (err?: NodeJS.ErrnoException | null) => void): void; + /** + * The number of bytes written so far. Does not include data that is still queued + * for writing. + * @since v0.4.7 + */ + bytesWritten: number; + /** + * The path to the file the stream is writing to as specified in the first + * argument to {@link createWriteStream}. If `path` is passed as a string, then`writeStream.path` will be a string. If `path` is passed as a `Buffer`, then`writeStream.path` will be a + * `Buffer`. + * @since v0.1.93 + */ + path: string | Buffer; + /** + * This property is `true` if the underlying file has not been opened yet, + * i.e. before the `'ready'` event is emitted. + * @since v11.2.0 + */ + pending: boolean; + /** + * events.EventEmitter + * 1. open + * 2. close + * 3. ready + */ + addListener(event: "close", listener: () => void): this; + addListener(event: "drain", listener: () => void): this; + addListener(event: "error", listener: (err: Error) => void): this; + addListener(event: "finish", listener: () => void): this; + addListener(event: "open", listener: (fd: number) => void): this; + addListener(event: "pipe", listener: (src: stream.Readable) => void): this; + addListener(event: "ready", listener: () => void): this; + addListener(event: "unpipe", listener: (src: stream.Readable) => void): this; + addListener(event: string | symbol, listener: (...args: any[]) => void): this; + on(event: "close", listener: () => void): this; + on(event: "drain", listener: () => void): this; + on(event: "error", listener: (err: Error) => void): this; + on(event: "finish", listener: () => void): this; + on(event: "open", listener: (fd: number) => void): this; + on(event: "pipe", listener: (src: stream.Readable) => void): this; + on(event: "ready", listener: () => void): this; + on(event: "unpipe", listener: (src: stream.Readable) => void): this; + on(event: string | symbol, listener: (...args: any[]) => void): this; + once(event: "close", listener: () => void): this; + once(event: "drain", listener: () => void): this; + once(event: "error", listener: (err: Error) => void): this; + once(event: "finish", listener: () => void): this; + once(event: "open", listener: (fd: number) => void): this; + once(event: "pipe", listener: (src: stream.Readable) => void): this; + once(event: "ready", listener: () => void): this; + once(event: "unpipe", listener: (src: stream.Readable) => void): this; + once(event: string | symbol, listener: (...args: any[]) => void): this; + prependListener(event: "close", listener: () => void): this; + prependListener(event: "drain", listener: () => void): this; + prependListener(event: "error", listener: (err: Error) => void): this; + prependListener(event: "finish", listener: () => void): this; + prependListener(event: "open", listener: (fd: number) => void): this; + prependListener(event: "pipe", listener: (src: stream.Readable) => void): this; + prependListener(event: "ready", listener: () => void): this; + prependListener(event: "unpipe", listener: (src: stream.Readable) => void): this; + prependListener(event: string | symbol, listener: (...args: any[]) => void): this; + prependOnceListener(event: "close", listener: () => void): this; + prependOnceListener(event: "drain", listener: () => void): this; + prependOnceListener(event: "error", listener: (err: Error) => void): this; + prependOnceListener(event: "finish", listener: () => void): this; + prependOnceListener(event: "open", listener: (fd: number) => void): this; + prependOnceListener(event: "pipe", listener: (src: stream.Readable) => void): this; + prependOnceListener(event: "ready", listener: () => void): this; + prependOnceListener(event: "unpipe", listener: (src: stream.Readable) => void): this; + prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this; + } + /** + * Asynchronously rename file at `oldPath` to the pathname provided + * as `newPath`. In the case that `newPath` already exists, it will + * be overwritten. If there is a directory at `newPath`, an error will + * be raised instead. No arguments other than a possible exception are + * given to the completion callback. + * + * See also: [`rename(2)`](http://man7.org/linux/man-pages/man2/rename.2.html). + * + * ```js + * import { rename } from 'node:fs'; + * + * rename('oldFile.txt', 'newFile.txt', (err) => { + * if (err) throw err; + * console.log('Rename complete!'); + * }); + * ``` + * @since v0.0.2 + */ + export function rename(oldPath: PathLike, newPath: PathLike, callback: NoParamCallback): void; + export namespace rename { + /** + * Asynchronous rename(2) - Change the name or location of a file or directory. + * @param oldPath A path to a file. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + * @param newPath A path to a file. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + */ + function __promisify__(oldPath: PathLike, newPath: PathLike): Promise; + } + /** + * Renames the file from `oldPath` to `newPath`. Returns `undefined`. + * + * See the POSIX [`rename(2)`](http://man7.org/linux/man-pages/man2/rename.2.html) documentation for more details. + * @since v0.1.21 + */ + export function renameSync(oldPath: PathLike, newPath: PathLike): void; + /** + * Truncates the file. No arguments other than a possible exception are + * given to the completion callback. A file descriptor can also be passed as the + * first argument. In this case, `fs.ftruncate()` is called. + * + * ```js + * import { truncate } from 'node:fs'; + * // Assuming that 'path/file.txt' is a regular file. + * truncate('path/file.txt', (err) => { + * if (err) throw err; + * console.log('path/file.txt was truncated'); + * }); + * ``` + * + * Passing a file descriptor is deprecated and may result in an error being thrown + * in the future. + * + * See the POSIX [`truncate(2)`](http://man7.org/linux/man-pages/man2/truncate.2.html) documentation for more details. + * @since v0.8.6 + * @param [len=0] + */ + export function truncate(path: PathLike, len: number | undefined | null, callback: NoParamCallback): void; + /** + * Asynchronous truncate(2) - Truncate a file to a specified length. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + export function truncate(path: PathLike, callback: NoParamCallback): void; + export namespace truncate { + /** + * Asynchronous truncate(2) - Truncate a file to a specified length. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param len If not specified, defaults to `0`. + */ + function __promisify__(path: PathLike, len?: number | null): Promise; + } + /** + * Truncates the file. Returns `undefined`. A file descriptor can also be + * passed as the first argument. In this case, `fs.ftruncateSync()` is called. + * + * Passing a file descriptor is deprecated and may result in an error being thrown + * in the future. + * @since v0.8.6 + * @param [len=0] + */ + export function truncateSync(path: PathLike, len?: number | null): void; + /** + * Truncates the file descriptor. No arguments other than a possible exception are + * given to the completion callback. + * + * See the POSIX [`ftruncate(2)`](http://man7.org/linux/man-pages/man2/ftruncate.2.html) documentation for more detail. + * + * If the file referred to by the file descriptor was larger than `len` bytes, only + * the first `len` bytes will be retained in the file. + * + * For example, the following program retains only the first four bytes of the + * file: + * + * ```js + * import { open, close, ftruncate } from 'node:fs'; + * + * function closeFd(fd) { + * close(fd, (err) => { + * if (err) throw err; + * }); + * } + * + * open('temp.txt', 'r+', (err, fd) => { + * if (err) throw err; + * + * try { + * ftruncate(fd, 4, (err) => { + * closeFd(fd); + * if (err) throw err; + * }); + * } catch (err) { + * closeFd(fd); + * if (err) throw err; + * } + * }); + * ``` + * + * If the file previously was shorter than `len` bytes, it is extended, and the + * extended part is filled with null bytes (`'\0'`): + * + * If `len` is negative then `0` will be used. + * @since v0.8.6 + * @param [len=0] + */ + export function ftruncate(fd: number, len: number | undefined | null, callback: NoParamCallback): void; + /** + * Asynchronous ftruncate(2) - Truncate a file to a specified length. + * @param fd A file descriptor. + */ + export function ftruncate(fd: number, callback: NoParamCallback): void; + export namespace ftruncate { + /** + * Asynchronous ftruncate(2) - Truncate a file to a specified length. + * @param fd A file descriptor. + * @param len If not specified, defaults to `0`. + */ + function __promisify__(fd: number, len?: number | null): Promise; + } + /** + * Truncates the file descriptor. Returns `undefined`. + * + * For detailed information, see the documentation of the asynchronous version of + * this API: {@link ftruncate}. + * @since v0.8.6 + * @param [len=0] + */ + export function ftruncateSync(fd: number, len?: number | null): void; + /** + * Asynchronously changes owner and group of a file. No arguments other than a + * possible exception are given to the completion callback. + * + * See the POSIX [`chown(2)`](http://man7.org/linux/man-pages/man2/chown.2.html) documentation for more detail. + * @since v0.1.97 + */ + export function chown(path: PathLike, uid: number, gid: number, callback: NoParamCallback): void; + export namespace chown { + /** + * Asynchronous chown(2) - Change ownership of a file. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + function __promisify__(path: PathLike, uid: number, gid: number): Promise; + } + /** + * Synchronously changes owner and group of a file. Returns `undefined`. + * This is the synchronous version of {@link chown}. + * + * See the POSIX [`chown(2)`](http://man7.org/linux/man-pages/man2/chown.2.html) documentation for more detail. + * @since v0.1.97 + */ + export function chownSync(path: PathLike, uid: number, gid: number): void; + /** + * Sets the owner of the file. No arguments other than a possible exception are + * given to the completion callback. + * + * See the POSIX [`fchown(2)`](http://man7.org/linux/man-pages/man2/fchown.2.html) documentation for more detail. + * @since v0.4.7 + */ + export function fchown(fd: number, uid: number, gid: number, callback: NoParamCallback): void; + export namespace fchown { + /** + * Asynchronous fchown(2) - Change ownership of a file. + * @param fd A file descriptor. + */ + function __promisify__(fd: number, uid: number, gid: number): Promise; + } + /** + * Sets the owner of the file. Returns `undefined`. + * + * See the POSIX [`fchown(2)`](http://man7.org/linux/man-pages/man2/fchown.2.html) documentation for more detail. + * @since v0.4.7 + * @param uid The file's new owner's user id. + * @param gid The file's new group's group id. + */ + export function fchownSync(fd: number, uid: number, gid: number): void; + /** + * Set the owner of the symbolic link. No arguments other than a possible + * exception are given to the completion callback. + * + * See the POSIX [`lchown(2)`](http://man7.org/linux/man-pages/man2/lchown.2.html) documentation for more detail. + */ + export function lchown(path: PathLike, uid: number, gid: number, callback: NoParamCallback): void; + export namespace lchown { + /** + * Asynchronous lchown(2) - Change ownership of a file. Does not dereference symbolic links. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + function __promisify__(path: PathLike, uid: number, gid: number): Promise; + } + /** + * Set the owner for the path. Returns `undefined`. + * + * See the POSIX [`lchown(2)`](http://man7.org/linux/man-pages/man2/lchown.2.html) documentation for more details. + * @param uid The file's new owner's user id. + * @param gid The file's new group's group id. + */ + export function lchownSync(path: PathLike, uid: number, gid: number): void; + /** + * Changes the access and modification times of a file in the same way as {@link utimes}, with the difference that if the path refers to a symbolic + * link, then the link is not dereferenced: instead, the timestamps of the + * symbolic link itself are changed. + * + * No arguments other than a possible exception are given to the completion + * callback. + * @since v14.5.0, v12.19.0 + */ + export function lutimes(path: PathLike, atime: TimeLike, mtime: TimeLike, callback: NoParamCallback): void; + export namespace lutimes { + /** + * Changes the access and modification times of a file in the same way as `fsPromises.utimes()`, + * with the difference that if the path refers to a symbolic link, then the link is not + * dereferenced: instead, the timestamps of the symbolic link itself are changed. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param atime The last access time. If a string is provided, it will be coerced to number. + * @param mtime The last modified time. If a string is provided, it will be coerced to number. + */ + function __promisify__(path: PathLike, atime: TimeLike, mtime: TimeLike): Promise; + } + /** + * Change the file system timestamps of the symbolic link referenced by `path`. + * Returns `undefined`, or throws an exception when parameters are incorrect or + * the operation fails. This is the synchronous version of {@link lutimes}. + * @since v14.5.0, v12.19.0 + */ + export function lutimesSync(path: PathLike, atime: TimeLike, mtime: TimeLike): void; + /** + * Asynchronously changes the permissions of a file. No arguments other than a + * possible exception are given to the completion callback. + * + * See the POSIX [`chmod(2)`](http://man7.org/linux/man-pages/man2/chmod.2.html) documentation for more detail. + * + * ```js + * import { chmod } from 'node:fs'; + * + * chmod('my_file.txt', 0o775, (err) => { + * if (err) throw err; + * console.log('The permissions for file "my_file.txt" have been changed!'); + * }); + * ``` + * @since v0.1.30 + */ + export function chmod(path: PathLike, mode: Mode, callback: NoParamCallback): void; + export namespace chmod { + /** + * Asynchronous chmod(2) - Change permissions of a file. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param mode A file mode. If a string is passed, it is parsed as an octal integer. + */ + function __promisify__(path: PathLike, mode: Mode): Promise; + } + /** + * For detailed information, see the documentation of the asynchronous version of + * this API: {@link chmod}. + * + * See the POSIX [`chmod(2)`](http://man7.org/linux/man-pages/man2/chmod.2.html) documentation for more detail. + * @since v0.6.7 + */ + export function chmodSync(path: PathLike, mode: Mode): void; + /** + * Sets the permissions on the file. No arguments other than a possible exception + * are given to the completion callback. + * + * See the POSIX [`fchmod(2)`](http://man7.org/linux/man-pages/man2/fchmod.2.html) documentation for more detail. + * @since v0.4.7 + */ + export function fchmod(fd: number, mode: Mode, callback: NoParamCallback): void; + export namespace fchmod { + /** + * Asynchronous fchmod(2) - Change permissions of a file. + * @param fd A file descriptor. + * @param mode A file mode. If a string is passed, it is parsed as an octal integer. + */ + function __promisify__(fd: number, mode: Mode): Promise; + } + /** + * Sets the permissions on the file. Returns `undefined`. + * + * See the POSIX [`fchmod(2)`](http://man7.org/linux/man-pages/man2/fchmod.2.html) documentation for more detail. + * @since v0.4.7 + */ + export function fchmodSync(fd: number, mode: Mode): void; + /** + * Changes the permissions on a symbolic link. No arguments other than a possible + * exception are given to the completion callback. + * + * This method is only implemented on macOS. + * + * See the POSIX [`lchmod(2)`](https://www.freebsd.org/cgi/man.cgi?query=lchmod&sektion=2) documentation for more detail. + * @deprecated Since v0.4.7 + */ + export function lchmod(path: PathLike, mode: Mode, callback: NoParamCallback): void; + /** @deprecated */ + export namespace lchmod { + /** + * Asynchronous lchmod(2) - Change permissions of a file. Does not dereference symbolic links. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param mode A file mode. If a string is passed, it is parsed as an octal integer. + */ + function __promisify__(path: PathLike, mode: Mode): Promise; + } + /** + * Changes the permissions on a symbolic link. Returns `undefined`. + * + * This method is only implemented on macOS. + * + * See the POSIX [`lchmod(2)`](https://www.freebsd.org/cgi/man.cgi?query=lchmod&sektion=2) documentation for more detail. + * @deprecated Since v0.4.7 + */ + export function lchmodSync(path: PathLike, mode: Mode): void; + /** + * Asynchronous [`stat(2)`](http://man7.org/linux/man-pages/man2/stat.2.html). The callback gets two arguments `(err, stats)` where`stats` is an `fs.Stats` object. + * + * In case of an error, the `err.code` will be one of `Common System Errors`. + * + * {@link stat} follows symbolic links. Use {@link lstat} to look at the + * links themselves. + * + * Using `fs.stat()` to check for the existence of a file before calling`fs.open()`, `fs.readFile()`, or `fs.writeFile()` is not recommended. + * Instead, user code should open/read/write the file directly and handle the + * error raised if the file is not available. + * + * To check if a file exists without manipulating it afterwards, {@link access} is recommended. + * + * For example, given the following directory structure: + * + * ```text + * - txtDir + * -- file.txt + * - app.js + * ``` + * + * The next program will check for the stats of the given paths: + * + * ```js + * import { stat } from 'node:fs'; + * + * const pathsToCheck = ['./txtDir', './txtDir/file.txt']; + * + * for (let i = 0; i < pathsToCheck.length; i++) { + * stat(pathsToCheck[i], (err, stats) => { + * console.log(stats.isDirectory()); + * console.log(stats); + * }); + * } + * ``` + * + * The resulting output will resemble: + * + * ```console + * true + * Stats { + * dev: 16777220, + * mode: 16877, + * nlink: 3, + * uid: 501, + * gid: 20, + * rdev: 0, + * blksize: 4096, + * ino: 14214262, + * size: 96, + * blocks: 0, + * atimeMs: 1561174653071.963, + * mtimeMs: 1561174614583.3518, + * ctimeMs: 1561174626623.5366, + * birthtimeMs: 1561174126937.2893, + * atime: 2019-06-22T03:37:33.072Z, + * mtime: 2019-06-22T03:36:54.583Z, + * ctime: 2019-06-22T03:37:06.624Z, + * birthtime: 2019-06-22T03:28:46.937Z + * } + * false + * Stats { + * dev: 16777220, + * mode: 33188, + * nlink: 1, + * uid: 501, + * gid: 20, + * rdev: 0, + * blksize: 4096, + * ino: 14214074, + * size: 8, + * blocks: 8, + * atimeMs: 1561174616618.8555, + * mtimeMs: 1561174614584, + * ctimeMs: 1561174614583.8145, + * birthtimeMs: 1561174007710.7478, + * atime: 2019-06-22T03:36:56.619Z, + * mtime: 2019-06-22T03:36:54.584Z, + * ctime: 2019-06-22T03:36:54.584Z, + * birthtime: 2019-06-22T03:26:47.711Z + * } + * ``` + * @since v0.0.2 + */ + export function stat(path: PathLike, callback: (err: NodeJS.ErrnoException | null, stats: Stats) => void): void; + export function stat( + path: PathLike, + options: + | (StatOptions & { + bigint?: false | undefined; + }) + | undefined, + callback: (err: NodeJS.ErrnoException | null, stats: Stats) => void, + ): void; + export function stat( + path: PathLike, + options: StatOptions & { + bigint: true; + }, + callback: (err: NodeJS.ErrnoException | null, stats: BigIntStats) => void, + ): void; + export function stat( + path: PathLike, + options: StatOptions | undefined, + callback: (err: NodeJS.ErrnoException | null, stats: Stats | BigIntStats) => void, + ): void; + export namespace stat { + /** + * Asynchronous stat(2) - Get file status. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + function __promisify__( + path: PathLike, + options?: StatOptions & { + bigint?: false | undefined; + }, + ): Promise; + function __promisify__( + path: PathLike, + options: StatOptions & { + bigint: true; + }, + ): Promise; + function __promisify__(path: PathLike, options?: StatOptions): Promise; + } + export interface StatSyncFn extends Function { + (path: PathLike, options?: undefined): Stats; + ( + path: PathLike, + options?: StatSyncOptions & { + bigint?: false | undefined; + throwIfNoEntry: false; + }, + ): Stats | undefined; + ( + path: PathLike, + options: StatSyncOptions & { + bigint: true; + throwIfNoEntry: false; + }, + ): BigIntStats | undefined; + ( + path: PathLike, + options?: StatSyncOptions & { + bigint?: false | undefined; + }, + ): Stats; + ( + path: PathLike, + options: StatSyncOptions & { + bigint: true; + }, + ): BigIntStats; + ( + path: PathLike, + options: StatSyncOptions & { + bigint: boolean; + throwIfNoEntry?: false | undefined; + }, + ): Stats | BigIntStats; + (path: PathLike, options?: StatSyncOptions): Stats | BigIntStats | undefined; + } + /** + * Synchronous stat(2) - Get file status. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + export const statSync: StatSyncFn; + /** + * Invokes the callback with the `fs.Stats` for the file descriptor. + * + * See the POSIX [`fstat(2)`](http://man7.org/linux/man-pages/man2/fstat.2.html) documentation for more detail. + * @since v0.1.95 + */ + export function fstat(fd: number, callback: (err: NodeJS.ErrnoException | null, stats: Stats) => void): void; + export function fstat( + fd: number, + options: + | (StatOptions & { + bigint?: false | undefined; + }) + | undefined, + callback: (err: NodeJS.ErrnoException | null, stats: Stats) => void, + ): void; + export function fstat( + fd: number, + options: StatOptions & { + bigint: true; + }, + callback: (err: NodeJS.ErrnoException | null, stats: BigIntStats) => void, + ): void; + export function fstat( + fd: number, + options: StatOptions | undefined, + callback: (err: NodeJS.ErrnoException | null, stats: Stats | BigIntStats) => void, + ): void; + export namespace fstat { + /** + * Asynchronous fstat(2) - Get file status. + * @param fd A file descriptor. + */ + function __promisify__( + fd: number, + options?: StatOptions & { + bigint?: false | undefined; + }, + ): Promise; + function __promisify__( + fd: number, + options: StatOptions & { + bigint: true; + }, + ): Promise; + function __promisify__(fd: number, options?: StatOptions): Promise; + } + /** + * Retrieves the `fs.Stats` for the file descriptor. + * + * See the POSIX [`fstat(2)`](http://man7.org/linux/man-pages/man2/fstat.2.html) documentation for more detail. + * @since v0.1.95 + */ + export function fstatSync( + fd: number, + options?: StatOptions & { + bigint?: false | undefined; + }, + ): Stats; + export function fstatSync( + fd: number, + options: StatOptions & { + bigint: true; + }, + ): BigIntStats; + export function fstatSync(fd: number, options?: StatOptions): Stats | BigIntStats; + /** + * Retrieves the `fs.Stats` for the symbolic link referred to by the path. + * The callback gets two arguments `(err, stats)` where `stats` is a `fs.Stats` object. `lstat()` is identical to `stat()`, except that if `path` is a symbolic + * link, then the link itself is stat-ed, not the file that it refers to. + * + * See the POSIX [`lstat(2)`](http://man7.org/linux/man-pages/man2/lstat.2.html) documentation for more details. + * @since v0.1.30 + */ + export function lstat(path: PathLike, callback: (err: NodeJS.ErrnoException | null, stats: Stats) => void): void; + export function lstat( + path: PathLike, + options: + | (StatOptions & { + bigint?: false | undefined; + }) + | undefined, + callback: (err: NodeJS.ErrnoException | null, stats: Stats) => void, + ): void; + export function lstat( + path: PathLike, + options: StatOptions & { + bigint: true; + }, + callback: (err: NodeJS.ErrnoException | null, stats: BigIntStats) => void, + ): void; + export function lstat( + path: PathLike, + options: StatOptions | undefined, + callback: (err: NodeJS.ErrnoException | null, stats: Stats | BigIntStats) => void, + ): void; + export namespace lstat { + /** + * Asynchronous lstat(2) - Get file status. Does not dereference symbolic links. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + function __promisify__( + path: PathLike, + options?: StatOptions & { + bigint?: false | undefined; + }, + ): Promise; + function __promisify__( + path: PathLike, + options: StatOptions & { + bigint: true; + }, + ): Promise; + function __promisify__(path: PathLike, options?: StatOptions): Promise; + } + /** + * Asynchronous [`statfs(2)`](http://man7.org/linux/man-pages/man2/statfs.2.html). Returns information about the mounted file system which + * contains `path`. The callback gets two arguments `(err, stats)` where `stats`is an `fs.StatFs` object. + * + * In case of an error, the `err.code` will be one of `Common System Errors`. + * @since v19.6.0, v18.15.0 + * @param path A path to an existing file or directory on the file system to be queried. + */ + export function statfs(path: PathLike, callback: (err: NodeJS.ErrnoException | null, stats: StatsFs) => void): void; + export function statfs( + path: PathLike, + options: + | (StatFsOptions & { + bigint?: false | undefined; + }) + | undefined, + callback: (err: NodeJS.ErrnoException | null, stats: StatsFs) => void, + ): void; + export function statfs( + path: PathLike, + options: StatFsOptions & { + bigint: true; + }, + callback: (err: NodeJS.ErrnoException | null, stats: BigIntStatsFs) => void, + ): void; + export function statfs( + path: PathLike, + options: StatFsOptions | undefined, + callback: (err: NodeJS.ErrnoException | null, stats: StatsFs | BigIntStatsFs) => void, + ): void; + export namespace statfs { + /** + * Asynchronous statfs(2) - Returns information about the mounted file system which contains path. The callback gets two arguments (err, stats) where stats is an object. + * @param path A path to an existing file or directory on the file system to be queried. + */ + function __promisify__( + path: PathLike, + options?: StatFsOptions & { + bigint?: false | undefined; + }, + ): Promise; + function __promisify__( + path: PathLike, + options: StatFsOptions & { + bigint: true; + }, + ): Promise; + function __promisify__(path: PathLike, options?: StatFsOptions): Promise; + } + /** + * Synchronous [`statfs(2)`](http://man7.org/linux/man-pages/man2/statfs.2.html). Returns information about the mounted file system which + * contains `path`. + * + * In case of an error, the `err.code` will be one of `Common System Errors`. + * @since v19.6.0, v18.15.0 + * @param path A path to an existing file or directory on the file system to be queried. + */ + export function statfsSync( + path: PathLike, + options?: StatFsOptions & { + bigint?: false | undefined; + }, + ): StatsFs; + export function statfsSync( + path: PathLike, + options: StatFsOptions & { + bigint: true; + }, + ): BigIntStatsFs; + export function statfsSync(path: PathLike, options?: StatFsOptions): StatsFs | BigIntStatsFs; + /** + * Synchronous lstat(2) - Get file status. Does not dereference symbolic links. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + export const lstatSync: StatSyncFn; + /** + * Creates a new link from the `existingPath` to the `newPath`. See the POSIX [`link(2)`](http://man7.org/linux/man-pages/man2/link.2.html) documentation for more detail. No arguments other than + * a possible + * exception are given to the completion callback. + * @since v0.1.31 + */ + export function link(existingPath: PathLike, newPath: PathLike, callback: NoParamCallback): void; + export namespace link { + /** + * Asynchronous link(2) - Create a new link (also known as a hard link) to an existing file. + * @param existingPath A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param newPath A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + function __promisify__(existingPath: PathLike, newPath: PathLike): Promise; + } + /** + * Creates a new link from the `existingPath` to the `newPath`. See the POSIX [`link(2)`](http://man7.org/linux/man-pages/man2/link.2.html) documentation for more detail. Returns `undefined`. + * @since v0.1.31 + */ + export function linkSync(existingPath: PathLike, newPath: PathLike): void; + /** + * Creates the link called `path` pointing to `target`. No arguments other than a + * possible exception are given to the completion callback. + * + * See the POSIX [`symlink(2)`](http://man7.org/linux/man-pages/man2/symlink.2.html) documentation for more details. + * + * The `type` argument is only available on Windows and ignored on other platforms. + * It can be set to `'dir'`, `'file'`, or `'junction'`. If the `type` argument is + * not a string, Node.js will autodetect `target` type and use `'file'` or `'dir'`. + * If the `target` does not exist, `'file'` will be used. Windows junction points + * require the destination path to be absolute. When using `'junction'`, the`target` argument will automatically be normalized to absolute path. Junction + * points on NTFS volumes can only point to directories. + * + * Relative targets are relative to the link's parent directory. + * + * ```js + * import { symlink } from 'node:fs'; + * + * symlink('./mew', './mewtwo', callback); + * ``` + * + * The above example creates a symbolic link `mewtwo` which points to `mew` in the + * same directory: + * + * ```bash + * $ tree . + * . + * ├── mew + * └── mewtwo -> ./mew + * ``` + * @since v0.1.31 + * @param [type='null'] + */ + export function symlink( + target: PathLike, + path: PathLike, + type: symlink.Type | undefined | null, + callback: NoParamCallback, + ): void; + /** + * Asynchronous symlink(2) - Create a new symbolic link to an existing file. + * @param target A path to an existing file. If a URL is provided, it must use the `file:` protocol. + * @param path A path to the new symlink. If a URL is provided, it must use the `file:` protocol. + */ + export function symlink(target: PathLike, path: PathLike, callback: NoParamCallback): void; + export namespace symlink { + /** + * Asynchronous symlink(2) - Create a new symbolic link to an existing file. + * @param target A path to an existing file. If a URL is provided, it must use the `file:` protocol. + * @param path A path to the new symlink. If a URL is provided, it must use the `file:` protocol. + * @param type May be set to `'dir'`, `'file'`, or `'junction'` (default is `'file'`) and is only available on Windows (ignored on other platforms). + * When using `'junction'`, the `target` argument will automatically be normalized to an absolute path. + */ + function __promisify__(target: PathLike, path: PathLike, type?: string | null): Promise; + type Type = "dir" | "file" | "junction"; + } + /** + * Returns `undefined`. + * + * For detailed information, see the documentation of the asynchronous version of + * this API: {@link symlink}. + * @since v0.1.31 + * @param [type='null'] + */ + export function symlinkSync(target: PathLike, path: PathLike, type?: symlink.Type | null): void; + /** + * Reads the contents of the symbolic link referred to by `path`. The callback gets + * two arguments `(err, linkString)`. + * + * See the POSIX [`readlink(2)`](http://man7.org/linux/man-pages/man2/readlink.2.html) documentation for more details. + * + * The optional `options` argument can be a string specifying an encoding, or an + * object with an `encoding` property specifying the character encoding to use for + * the link path passed to the callback. If the `encoding` is set to `'buffer'`, + * the link path returned will be passed as a `Buffer` object. + * @since v0.1.31 + */ + export function readlink( + path: PathLike, + options: EncodingOption, + callback: (err: NodeJS.ErrnoException | null, linkString: string) => void, + ): void; + /** + * Asynchronous readlink(2) - read value of a symbolic link. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + export function readlink( + path: PathLike, + options: BufferEncodingOption, + callback: (err: NodeJS.ErrnoException | null, linkString: Buffer) => void, + ): void; + /** + * Asynchronous readlink(2) - read value of a symbolic link. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + export function readlink( + path: PathLike, + options: EncodingOption, + callback: (err: NodeJS.ErrnoException | null, linkString: string | Buffer) => void, + ): void; + /** + * Asynchronous readlink(2) - read value of a symbolic link. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + export function readlink( + path: PathLike, + callback: (err: NodeJS.ErrnoException | null, linkString: string) => void, + ): void; + export namespace readlink { + /** + * Asynchronous readlink(2) - read value of a symbolic link. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function __promisify__(path: PathLike, options?: EncodingOption): Promise; + /** + * Asynchronous readlink(2) - read value of a symbolic link. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function __promisify__(path: PathLike, options: BufferEncodingOption): Promise; + /** + * Asynchronous readlink(2) - read value of a symbolic link. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function __promisify__(path: PathLike, options?: EncodingOption): Promise; + } + /** + * Returns the symbolic link's string value. + * + * See the POSIX [`readlink(2)`](http://man7.org/linux/man-pages/man2/readlink.2.html) documentation for more details. + * + * The optional `options` argument can be a string specifying an encoding, or an + * object with an `encoding` property specifying the character encoding to use for + * the link path returned. If the `encoding` is set to `'buffer'`, + * the link path returned will be passed as a `Buffer` object. + * @since v0.1.31 + */ + export function readlinkSync(path: PathLike, options?: EncodingOption): string; + /** + * Synchronous readlink(2) - read value of a symbolic link. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + export function readlinkSync(path: PathLike, options: BufferEncodingOption): Buffer; + /** + * Synchronous readlink(2) - read value of a symbolic link. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + export function readlinkSync(path: PathLike, options?: EncodingOption): string | Buffer; + /** + * Asynchronously computes the canonical pathname by resolving `.`, `..`, and + * symbolic links. + * + * A canonical pathname is not necessarily unique. Hard links and bind mounts can + * expose a file system entity through many pathnames. + * + * This function behaves like [`realpath(3)`](http://man7.org/linux/man-pages/man3/realpath.3.html), with some exceptions: + * + * 1. No case conversion is performed on case-insensitive file systems. + * 2. The maximum number of symbolic links is platform-independent and generally + * (much) higher than what the native [`realpath(3)`](http://man7.org/linux/man-pages/man3/realpath.3.html) implementation supports. + * + * The `callback` gets two arguments `(err, resolvedPath)`. May use `process.cwd`to resolve relative paths. + * + * Only paths that can be converted to UTF8 strings are supported. + * + * The optional `options` argument can be a string specifying an encoding, or an + * object with an `encoding` property specifying the character encoding to use for + * the path passed to the callback. If the `encoding` is set to `'buffer'`, + * the path returned will be passed as a `Buffer` object. + * + * If `path` resolves to a socket or a pipe, the function will return a system + * dependent name for that object. + * @since v0.1.31 + */ + export function realpath( + path: PathLike, + options: EncodingOption, + callback: (err: NodeJS.ErrnoException | null, resolvedPath: string) => void, + ): void; + /** + * Asynchronous realpath(3) - return the canonicalized absolute pathname. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + export function realpath( + path: PathLike, + options: BufferEncodingOption, + callback: (err: NodeJS.ErrnoException | null, resolvedPath: Buffer) => void, + ): void; + /** + * Asynchronous realpath(3) - return the canonicalized absolute pathname. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + export function realpath( + path: PathLike, + options: EncodingOption, + callback: (err: NodeJS.ErrnoException | null, resolvedPath: string | Buffer) => void, + ): void; + /** + * Asynchronous realpath(3) - return the canonicalized absolute pathname. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + export function realpath( + path: PathLike, + callback: (err: NodeJS.ErrnoException | null, resolvedPath: string) => void, + ): void; + export namespace realpath { + /** + * Asynchronous realpath(3) - return the canonicalized absolute pathname. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function __promisify__(path: PathLike, options?: EncodingOption): Promise; + /** + * Asynchronous realpath(3) - return the canonicalized absolute pathname. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function __promisify__(path: PathLike, options: BufferEncodingOption): Promise; + /** + * Asynchronous realpath(3) - return the canonicalized absolute pathname. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function __promisify__(path: PathLike, options?: EncodingOption): Promise; + /** + * Asynchronous [`realpath(3)`](http://man7.org/linux/man-pages/man3/realpath.3.html). + * + * The `callback` gets two arguments `(err, resolvedPath)`. + * + * Only paths that can be converted to UTF8 strings are supported. + * + * The optional `options` argument can be a string specifying an encoding, or an + * object with an `encoding` property specifying the character encoding to use for + * the path passed to the callback. If the `encoding` is set to `'buffer'`, + * the path returned will be passed as a `Buffer` object. + * + * On Linux, when Node.js is linked against musl libc, the procfs file system must + * be mounted on `/proc` in order for this function to work. Glibc does not have + * this restriction. + * @since v9.2.0 + */ + function native( + path: PathLike, + options: EncodingOption, + callback: (err: NodeJS.ErrnoException | null, resolvedPath: string) => void, + ): void; + function native( + path: PathLike, + options: BufferEncodingOption, + callback: (err: NodeJS.ErrnoException | null, resolvedPath: Buffer) => void, + ): void; + function native( + path: PathLike, + options: EncodingOption, + callback: (err: NodeJS.ErrnoException | null, resolvedPath: string | Buffer) => void, + ): void; + function native( + path: PathLike, + callback: (err: NodeJS.ErrnoException | null, resolvedPath: string) => void, + ): void; + } + /** + * Returns the resolved pathname. + * + * For detailed information, see the documentation of the asynchronous version of + * this API: {@link realpath}. + * @since v0.1.31 + */ + export function realpathSync(path: PathLike, options?: EncodingOption): string; + /** + * Synchronous realpath(3) - return the canonicalized absolute pathname. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + export function realpathSync(path: PathLike, options: BufferEncodingOption): Buffer; + /** + * Synchronous realpath(3) - return the canonicalized absolute pathname. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + export function realpathSync(path: PathLike, options?: EncodingOption): string | Buffer; + export namespace realpathSync { + function native(path: PathLike, options?: EncodingOption): string; + function native(path: PathLike, options: BufferEncodingOption): Buffer; + function native(path: PathLike, options?: EncodingOption): string | Buffer; + } + /** + * Asynchronously removes a file or symbolic link. No arguments other than a + * possible exception are given to the completion callback. + * + * ```js + * import { unlink } from 'node:fs'; + * // Assuming that 'path/file.txt' is a regular file. + * unlink('path/file.txt', (err) => { + * if (err) throw err; + * console.log('path/file.txt was deleted'); + * }); + * ``` + * + * `fs.unlink()` will not work on a directory, empty or otherwise. To remove a + * directory, use {@link rmdir}. + * + * See the POSIX [`unlink(2)`](http://man7.org/linux/man-pages/man2/unlink.2.html) documentation for more details. + * @since v0.0.2 + */ + export function unlink(path: PathLike, callback: NoParamCallback): void; + export namespace unlink { + /** + * Asynchronous unlink(2) - delete a name and possibly the file it refers to. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + function __promisify__(path: PathLike): Promise; + } + /** + * Synchronous [`unlink(2)`](http://man7.org/linux/man-pages/man2/unlink.2.html). Returns `undefined`. + * @since v0.1.21 + */ + export function unlinkSync(path: PathLike): void; + export interface RmDirOptions { + /** + * If an `EBUSY`, `EMFILE`, `ENFILE`, `ENOTEMPTY`, or + * `EPERM` error is encountered, Node.js will retry the operation with a linear + * backoff wait of `retryDelay` ms longer on each try. This option represents the + * number of retries. This option is ignored if the `recursive` option is not + * `true`. + * @default 0 + */ + maxRetries?: number | undefined; + /** + * @deprecated since v14.14.0 In future versions of Node.js and will trigger a warning + * `fs.rmdir(path, { recursive: true })` will throw if `path` does not exist or is a file. + * Use `fs.rm(path, { recursive: true, force: true })` instead. + * + * If `true`, perform a recursive directory removal. In + * recursive mode, operations are retried on failure. + * @default false + */ + recursive?: boolean | undefined; + /** + * The amount of time in milliseconds to wait between retries. + * This option is ignored if the `recursive` option is not `true`. + * @default 100 + */ + retryDelay?: number | undefined; + } + /** + * Asynchronous [`rmdir(2)`](http://man7.org/linux/man-pages/man2/rmdir.2.html). No arguments other than a possible exception are given + * to the completion callback. + * + * Using `fs.rmdir()` on a file (not a directory) results in an `ENOENT` error on + * Windows and an `ENOTDIR` error on POSIX. + * + * To get a behavior similar to the `rm -rf` Unix command, use {@link rm} with options `{ recursive: true, force: true }`. + * @since v0.0.2 + */ + export function rmdir(path: PathLike, callback: NoParamCallback): void; + export function rmdir(path: PathLike, options: RmDirOptions, callback: NoParamCallback): void; + export namespace rmdir { + /** + * Asynchronous rmdir(2) - delete a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + function __promisify__(path: PathLike, options?: RmDirOptions): Promise; + } + /** + * Synchronous [`rmdir(2)`](http://man7.org/linux/man-pages/man2/rmdir.2.html). Returns `undefined`. + * + * Using `fs.rmdirSync()` on a file (not a directory) results in an `ENOENT` error + * on Windows and an `ENOTDIR` error on POSIX. + * + * To get a behavior similar to the `rm -rf` Unix command, use {@link rmSync} with options `{ recursive: true, force: true }`. + * @since v0.1.21 + */ + export function rmdirSync(path: PathLike, options?: RmDirOptions): void; + export interface RmOptions { + /** + * When `true`, exceptions will be ignored if `path` does not exist. + * @default false + */ + force?: boolean | undefined; + /** + * If an `EBUSY`, `EMFILE`, `ENFILE`, `ENOTEMPTY`, or + * `EPERM` error is encountered, Node.js will retry the operation with a linear + * backoff wait of `retryDelay` ms longer on each try. This option represents the + * number of retries. This option is ignored if the `recursive` option is not + * `true`. + * @default 0 + */ + maxRetries?: number | undefined; + /** + * If `true`, perform a recursive directory removal. In + * recursive mode, operations are retried on failure. + * @default false + */ + recursive?: boolean | undefined; + /** + * The amount of time in milliseconds to wait between retries. + * This option is ignored if the `recursive` option is not `true`. + * @default 100 + */ + retryDelay?: number | undefined; + } + /** + * Asynchronously removes files and directories (modeled on the standard POSIX `rm`utility). No arguments other than a possible exception are given to the + * completion callback. + * @since v14.14.0 + */ + export function rm(path: PathLike, callback: NoParamCallback): void; + export function rm(path: PathLike, options: RmOptions, callback: NoParamCallback): void; + export namespace rm { + /** + * Asynchronously removes files and directories (modeled on the standard POSIX `rm` utility). + */ + function __promisify__(path: PathLike, options?: RmOptions): Promise; + } + /** + * Synchronously removes files and directories (modeled on the standard POSIX `rm`utility). Returns `undefined`. + * @since v14.14.0 + */ + export function rmSync(path: PathLike, options?: RmOptions): void; + export interface MakeDirectoryOptions { + /** + * Indicates whether parent folders should be created. + * If a folder was created, the path to the first created folder will be returned. + * @default false + */ + recursive?: boolean | undefined; + /** + * A file mode. If a string is passed, it is parsed as an octal integer. If not specified + * @default 0o777 + */ + mode?: Mode | undefined; + } + /** + * Asynchronously creates a directory. + * + * The callback is given a possible exception and, if `recursive` is `true`, the + * first directory path created, `(err[, path])`.`path` can still be `undefined` when `recursive` is `true`, if no directory was + * created (for instance, if it was previously created). + * + * The optional `options` argument can be an integer specifying `mode` (permission + * and sticky bits), or an object with a `mode` property and a `recursive`property indicating whether parent directories should be created. Calling`fs.mkdir()` when `path` is a directory that + * exists results in an error only + * when `recursive` is false. If `recursive` is false and the directory exists, + * an `EEXIST` error occurs. + * + * ```js + * import { mkdir } from 'node:fs'; + * + * // Create ./tmp/a/apple, regardless of whether ./tmp and ./tmp/a exist. + * mkdir('./tmp/a/apple', { recursive: true }, (err) => { + * if (err) throw err; + * }); + * ``` + * + * On Windows, using `fs.mkdir()` on the root directory even with recursion will + * result in an error: + * + * ```js + * import { mkdir } from 'node:fs'; + * + * mkdir('/', { recursive: true }, (err) => { + * // => [Error: EPERM: operation not permitted, mkdir 'C:\'] + * }); + * ``` + * + * See the POSIX [`mkdir(2)`](http://man7.org/linux/man-pages/man2/mkdir.2.html) documentation for more details. + * @since v0.1.8 + */ + export function mkdir( + path: PathLike, + options: MakeDirectoryOptions & { + recursive: true; + }, + callback: (err: NodeJS.ErrnoException | null, path?: string) => void, + ): void; + /** + * Asynchronous mkdir(2) - create a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options Either the file mode, or an object optionally specifying the file mode and whether parent folders + * should be created. If a string is passed, it is parsed as an octal integer. If not specified, defaults to `0o777`. + */ + export function mkdir( + path: PathLike, + options: + | Mode + | (MakeDirectoryOptions & { + recursive?: false | undefined; + }) + | null + | undefined, + callback: NoParamCallback, + ): void; + /** + * Asynchronous mkdir(2) - create a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options Either the file mode, or an object optionally specifying the file mode and whether parent folders + * should be created. If a string is passed, it is parsed as an octal integer. If not specified, defaults to `0o777`. + */ + export function mkdir( + path: PathLike, + options: Mode | MakeDirectoryOptions | null | undefined, + callback: (err: NodeJS.ErrnoException | null, path?: string) => void, + ): void; + /** + * Asynchronous mkdir(2) - create a directory with a mode of `0o777`. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + export function mkdir(path: PathLike, callback: NoParamCallback): void; + export namespace mkdir { + /** + * Asynchronous mkdir(2) - create a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options Either the file mode, or an object optionally specifying the file mode and whether parent folders + * should be created. If a string is passed, it is parsed as an octal integer. If not specified, defaults to `0o777`. + */ + function __promisify__( + path: PathLike, + options: MakeDirectoryOptions & { + recursive: true; + }, + ): Promise; + /** + * Asynchronous mkdir(2) - create a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options Either the file mode, or an object optionally specifying the file mode and whether parent folders + * should be created. If a string is passed, it is parsed as an octal integer. If not specified, defaults to `0o777`. + */ + function __promisify__( + path: PathLike, + options?: + | Mode + | (MakeDirectoryOptions & { + recursive?: false | undefined; + }) + | null, + ): Promise; + /** + * Asynchronous mkdir(2) - create a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options Either the file mode, or an object optionally specifying the file mode and whether parent folders + * should be created. If a string is passed, it is parsed as an octal integer. If not specified, defaults to `0o777`. + */ + function __promisify__( + path: PathLike, + options?: Mode | MakeDirectoryOptions | null, + ): Promise; + } + /** + * Synchronously creates a directory. Returns `undefined`, or if `recursive` is`true`, the first directory path created. + * This is the synchronous version of {@link mkdir}. + * + * See the POSIX [`mkdir(2)`](http://man7.org/linux/man-pages/man2/mkdir.2.html) documentation for more details. + * @since v0.1.21 + */ + export function mkdirSync( + path: PathLike, + options: MakeDirectoryOptions & { + recursive: true; + }, + ): string | undefined; + /** + * Synchronous mkdir(2) - create a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options Either the file mode, or an object optionally specifying the file mode and whether parent folders + * should be created. If a string is passed, it is parsed as an octal integer. If not specified, defaults to `0o777`. + */ + export function mkdirSync( + path: PathLike, + options?: + | Mode + | (MakeDirectoryOptions & { + recursive?: false | undefined; + }) + | null, + ): void; + /** + * Synchronous mkdir(2) - create a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options Either the file mode, or an object optionally specifying the file mode and whether parent folders + * should be created. If a string is passed, it is parsed as an octal integer. If not specified, defaults to `0o777`. + */ + export function mkdirSync(path: PathLike, options?: Mode | MakeDirectoryOptions | null): string | undefined; + /** + * Creates a unique temporary directory. + * + * Generates six random characters to be appended behind a required`prefix` to create a unique temporary directory. Due to platform + * inconsistencies, avoid trailing `X` characters in `prefix`. Some platforms, + * notably the BSDs, can return more than six random characters, and replace + * trailing `X` characters in `prefix` with random characters. + * + * The created directory path is passed as a string to the callback's second + * parameter. + * + * The optional `options` argument can be a string specifying an encoding, or an + * object with an `encoding` property specifying the character encoding to use. + * + * ```js + * import { mkdtemp } from 'node:fs'; + * import { join } from 'node:path'; + * import { tmpdir } from 'node:os'; + * + * mkdtemp(join(tmpdir(), 'foo-'), (err, directory) => { + * if (err) throw err; + * console.log(directory); + * // Prints: /tmp/foo-itXde2 or C:\Users\...\AppData\Local\Temp\foo-itXde2 + * }); + * ``` + * + * The `fs.mkdtemp()` method will append the six randomly selected characters + * directly to the `prefix` string. For instance, given a directory `/tmp`, if the + * intention is to create a temporary directory _within_`/tmp`, the `prefix`must end with a trailing platform-specific path separator + * (`require('node:path').sep`). + * + * ```js + * import { tmpdir } from 'node:os'; + * import { mkdtemp } from 'node:fs'; + * + * // The parent directory for the new temporary directory + * const tmpDir = tmpdir(); + * + * // This method is *INCORRECT*: + * mkdtemp(tmpDir, (err, directory) => { + * if (err) throw err; + * console.log(directory); + * // Will print something similar to `/tmpabc123`. + * // A new temporary directory is created at the file system root + * // rather than *within* the /tmp directory. + * }); + * + * // This method is *CORRECT*: + * import { sep } from 'node:path'; + * mkdtemp(`${tmpDir}${sep}`, (err, directory) => { + * if (err) throw err; + * console.log(directory); + * // Will print something similar to `/tmp/abc123`. + * // A new temporary directory is created within + * // the /tmp directory. + * }); + * ``` + * @since v5.10.0 + */ + export function mkdtemp( + prefix: string, + options: EncodingOption, + callback: (err: NodeJS.ErrnoException | null, folder: string) => void, + ): void; + /** + * Asynchronously creates a unique temporary directory. + * Generates six random characters to be appended behind a required prefix to create a unique temporary directory. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + export function mkdtemp( + prefix: string, + options: + | "buffer" + | { + encoding: "buffer"; + }, + callback: (err: NodeJS.ErrnoException | null, folder: Buffer) => void, + ): void; + /** + * Asynchronously creates a unique temporary directory. + * Generates six random characters to be appended behind a required prefix to create a unique temporary directory. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + export function mkdtemp( + prefix: string, + options: EncodingOption, + callback: (err: NodeJS.ErrnoException | null, folder: string | Buffer) => void, + ): void; + /** + * Asynchronously creates a unique temporary directory. + * Generates six random characters to be appended behind a required prefix to create a unique temporary directory. + */ + export function mkdtemp( + prefix: string, + callback: (err: NodeJS.ErrnoException | null, folder: string) => void, + ): void; + export namespace mkdtemp { + /** + * Asynchronously creates a unique temporary directory. + * Generates six random characters to be appended behind a required prefix to create a unique temporary directory. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function __promisify__(prefix: string, options?: EncodingOption): Promise; + /** + * Asynchronously creates a unique temporary directory. + * Generates six random characters to be appended behind a required prefix to create a unique temporary directory. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function __promisify__(prefix: string, options: BufferEncodingOption): Promise; + /** + * Asynchronously creates a unique temporary directory. + * Generates six random characters to be appended behind a required prefix to create a unique temporary directory. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function __promisify__(prefix: string, options?: EncodingOption): Promise; + } + /** + * Returns the created directory path. + * + * For detailed information, see the documentation of the asynchronous version of + * this API: {@link mkdtemp}. + * + * The optional `options` argument can be a string specifying an encoding, or an + * object with an `encoding` property specifying the character encoding to use. + * @since v5.10.0 + */ + export function mkdtempSync(prefix: string, options?: EncodingOption): string; + /** + * Synchronously creates a unique temporary directory. + * Generates six random characters to be appended behind a required prefix to create a unique temporary directory. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + export function mkdtempSync(prefix: string, options: BufferEncodingOption): Buffer; + /** + * Synchronously creates a unique temporary directory. + * Generates six random characters to be appended behind a required prefix to create a unique temporary directory. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + export function mkdtempSync(prefix: string, options?: EncodingOption): string | Buffer; + /** + * Reads the contents of a directory. The callback gets two arguments `(err, files)`where `files` is an array of the names of the files in the directory excluding`'.'` and `'..'`. + * + * See the POSIX [`readdir(3)`](http://man7.org/linux/man-pages/man3/readdir.3.html) documentation for more details. + * + * The optional `options` argument can be a string specifying an encoding, or an + * object with an `encoding` property specifying the character encoding to use for + * the filenames passed to the callback. If the `encoding` is set to `'buffer'`, + * the filenames returned will be passed as `Buffer` objects. + * + * If `options.withFileTypes` is set to `true`, the `files` array will contain `fs.Dirent` objects. + * @since v0.1.8 + */ + export function readdir( + path: PathLike, + options: + | { + encoding: BufferEncoding | null; + withFileTypes?: false | undefined; + recursive?: boolean | undefined; + } + | BufferEncoding + | undefined + | null, + callback: (err: NodeJS.ErrnoException | null, files: string[]) => void, + ): void; + /** + * Asynchronous readdir(3) - read a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + export function readdir( + path: PathLike, + options: + | { + encoding: "buffer"; + withFileTypes?: false | undefined; + recursive?: boolean | undefined; + } + | "buffer", + callback: (err: NodeJS.ErrnoException | null, files: Buffer[]) => void, + ): void; + /** + * Asynchronous readdir(3) - read a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + export function readdir( + path: PathLike, + options: + | (ObjectEncodingOptions & { + withFileTypes?: false | undefined; + recursive?: boolean | undefined; + }) + | BufferEncoding + | undefined + | null, + callback: (err: NodeJS.ErrnoException | null, files: string[] | Buffer[]) => void, + ): void; + /** + * Asynchronous readdir(3) - read a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + export function readdir( + path: PathLike, + callback: (err: NodeJS.ErrnoException | null, files: string[]) => void, + ): void; + /** + * Asynchronous readdir(3) - read a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options If called with `withFileTypes: true` the result data will be an array of Dirent. + */ + export function readdir( + path: PathLike, + options: ObjectEncodingOptions & { + withFileTypes: true; + recursive?: boolean | undefined; + }, + callback: (err: NodeJS.ErrnoException | null, files: Dirent[]) => void, + ): void; + export namespace readdir { + /** + * Asynchronous readdir(3) - read a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function __promisify__( + path: PathLike, + options?: + | { + encoding: BufferEncoding | null; + withFileTypes?: false | undefined; + recursive?: boolean | undefined; + } + | BufferEncoding + | null, + ): Promise; + /** + * Asynchronous readdir(3) - read a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function __promisify__( + path: PathLike, + options: + | "buffer" + | { + encoding: "buffer"; + withFileTypes?: false | undefined; + recursive?: boolean | undefined; + }, + ): Promise; + /** + * Asynchronous readdir(3) - read a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function __promisify__( + path: PathLike, + options?: + | (ObjectEncodingOptions & { + withFileTypes?: false | undefined; + recursive?: boolean | undefined; + }) + | BufferEncoding + | null, + ): Promise; + /** + * Asynchronous readdir(3) - read a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options If called with `withFileTypes: true` the result data will be an array of Dirent + */ + function __promisify__( + path: PathLike, + options: ObjectEncodingOptions & { + withFileTypes: true; + recursive?: boolean | undefined; + }, + ): Promise; + } + /** + * Reads the contents of the directory. + * + * See the POSIX [`readdir(3)`](http://man7.org/linux/man-pages/man3/readdir.3.html) documentation for more details. + * + * The optional `options` argument can be a string specifying an encoding, or an + * object with an `encoding` property specifying the character encoding to use for + * the filenames returned. If the `encoding` is set to `'buffer'`, + * the filenames returned will be passed as `Buffer` objects. + * + * If `options.withFileTypes` is set to `true`, the result will contain `fs.Dirent` objects. + * @since v0.1.21 + */ + export function readdirSync( + path: PathLike, + options?: + | { + encoding: BufferEncoding | null; + withFileTypes?: false | undefined; + recursive?: boolean | undefined; + } + | BufferEncoding + | null, + ): string[]; + /** + * Synchronous readdir(3) - read a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + export function readdirSync( + path: PathLike, + options: + | { + encoding: "buffer"; + withFileTypes?: false | undefined; + recursive?: boolean | undefined; + } + | "buffer", + ): Buffer[]; + /** + * Synchronous readdir(3) - read a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + export function readdirSync( + path: PathLike, + options?: + | (ObjectEncodingOptions & { + withFileTypes?: false | undefined; + recursive?: boolean | undefined; + }) + | BufferEncoding + | null, + ): string[] | Buffer[]; + /** + * Synchronous readdir(3) - read a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options If called with `withFileTypes: true` the result data will be an array of Dirent. + */ + export function readdirSync( + path: PathLike, + options: ObjectEncodingOptions & { + withFileTypes: true; + recursive?: boolean | undefined; + }, + ): Dirent[]; + /** + * Closes the file descriptor. No arguments other than a possible exception are + * given to the completion callback. + * + * Calling `fs.close()` on any file descriptor (`fd`) that is currently in use + * through any other `fs` operation may lead to undefined behavior. + * + * See the POSIX [`close(2)`](http://man7.org/linux/man-pages/man2/close.2.html) documentation for more detail. + * @since v0.0.2 + */ + export function close(fd: number, callback?: NoParamCallback): void; + export namespace close { + /** + * Asynchronous close(2) - close a file descriptor. + * @param fd A file descriptor. + */ + function __promisify__(fd: number): Promise; + } + /** + * Closes the file descriptor. Returns `undefined`. + * + * Calling `fs.closeSync()` on any file descriptor (`fd`) that is currently in use + * through any other `fs` operation may lead to undefined behavior. + * + * See the POSIX [`close(2)`](http://man7.org/linux/man-pages/man2/close.2.html) documentation for more detail. + * @since v0.1.21 + */ + export function closeSync(fd: number): void; + /** + * Asynchronous file open. See the POSIX [`open(2)`](http://man7.org/linux/man-pages/man2/open.2.html) documentation for more details. + * + * `mode` sets the file mode (permission and sticky bits), but only if the file was + * created. On Windows, only the write permission can be manipulated; see {@link chmod}. + * + * The callback gets two arguments `(err, fd)`. + * + * Some characters (`< > : " / \ | ? *`) are reserved under Windows as documented + * by [Naming Files, Paths, and Namespaces](https://docs.microsoft.com/en-us/windows/desktop/FileIO/naming-a-file). Under NTFS, if the filename contains + * a colon, Node.js will open a file system stream, as described by [this MSDN page](https://docs.microsoft.com/en-us/windows/desktop/FileIO/using-streams). + * + * Functions based on `fs.open()` exhibit this behavior as well:`fs.writeFile()`, `fs.readFile()`, etc. + * @since v0.0.2 + * @param [flags='r'] See `support of file system `flags``. + * @param [mode=0o666] + */ + export function open( + path: PathLike, + flags: OpenMode | undefined, + mode: Mode | undefined | null, + callback: (err: NodeJS.ErrnoException | null, fd: number) => void, + ): void; + /** + * Asynchronous open(2) - open and possibly create a file. If the file is created, its mode will be `0o666`. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param [flags='r'] See `support of file system `flags``. + */ + export function open( + path: PathLike, + flags: OpenMode | undefined, + callback: (err: NodeJS.ErrnoException | null, fd: number) => void, + ): void; + /** + * Asynchronous open(2) - open and possibly create a file. If the file is created, its mode will be `0o666`. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + export function open(path: PathLike, callback: (err: NodeJS.ErrnoException | null, fd: number) => void): void; + export namespace open { + /** + * Asynchronous open(2) - open and possibly create a file. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param mode A file mode. If a string is passed, it is parsed as an octal integer. If not supplied, defaults to `0o666`. + */ + function __promisify__(path: PathLike, flags: OpenMode, mode?: Mode | null): Promise; + } + /** + * Returns an integer representing the file descriptor. + * + * For detailed information, see the documentation of the asynchronous version of + * this API: {@link open}. + * @since v0.1.21 + * @param [flags='r'] + * @param [mode=0o666] + */ + export function openSync(path: PathLike, flags: OpenMode, mode?: Mode | null): number; + /** + * Change the file system timestamps of the object referenced by `path`. + * + * The `atime` and `mtime` arguments follow these rules: + * + * * Values can be either numbers representing Unix epoch time in seconds,`Date`s, or a numeric string like `'123456789.0'`. + * * If the value can not be converted to a number, or is `NaN`, `Infinity`, or`-Infinity`, an `Error` will be thrown. + * @since v0.4.2 + */ + export function utimes(path: PathLike, atime: TimeLike, mtime: TimeLike, callback: NoParamCallback): void; + export namespace utimes { + /** + * Asynchronously change file timestamps of the file referenced by the supplied path. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param atime The last access time. If a string is provided, it will be coerced to number. + * @param mtime The last modified time. If a string is provided, it will be coerced to number. + */ + function __promisify__(path: PathLike, atime: TimeLike, mtime: TimeLike): Promise; + } + /** + * Returns `undefined`. + * + * For detailed information, see the documentation of the asynchronous version of + * this API: {@link utimes}. + * @since v0.4.2 + */ + export function utimesSync(path: PathLike, atime: TimeLike, mtime: TimeLike): void; + /** + * Change the file system timestamps of the object referenced by the supplied file + * descriptor. See {@link utimes}. + * @since v0.4.2 + */ + export function futimes(fd: number, atime: TimeLike, mtime: TimeLike, callback: NoParamCallback): void; + export namespace futimes { + /** + * Asynchronously change file timestamps of the file referenced by the supplied file descriptor. + * @param fd A file descriptor. + * @param atime The last access time. If a string is provided, it will be coerced to number. + * @param mtime The last modified time. If a string is provided, it will be coerced to number. + */ + function __promisify__(fd: number, atime: TimeLike, mtime: TimeLike): Promise; + } + /** + * Synchronous version of {@link futimes}. Returns `undefined`. + * @since v0.4.2 + */ + export function futimesSync(fd: number, atime: TimeLike, mtime: TimeLike): void; + /** + * Request that all data for the open file descriptor is flushed to the storage + * device. The specific implementation is operating system and device specific. + * Refer to the POSIX [`fsync(2)`](http://man7.org/linux/man-pages/man2/fsync.2.html) documentation for more detail. No arguments other + * than a possible exception are given to the completion callback. + * @since v0.1.96 + */ + export function fsync(fd: number, callback: NoParamCallback): void; + export namespace fsync { + /** + * Asynchronous fsync(2) - synchronize a file's in-core state with the underlying storage device. + * @param fd A file descriptor. + */ + function __promisify__(fd: number): Promise; + } + /** + * Request that all data for the open file descriptor is flushed to the storage + * device. The specific implementation is operating system and device specific. + * Refer to the POSIX [`fsync(2)`](http://man7.org/linux/man-pages/man2/fsync.2.html) documentation for more detail. Returns `undefined`. + * @since v0.1.96 + */ + export function fsyncSync(fd: number): void; + /** + * Write `buffer` to the file specified by `fd`. + * + * `offset` determines the part of the buffer to be written, and `length` is + * an integer specifying the number of bytes to write. + * + * `position` refers to the offset from the beginning of the file where this data + * should be written. If `typeof position !== 'number'`, the data will be written + * at the current position. See [`pwrite(2)`](http://man7.org/linux/man-pages/man2/pwrite.2.html). + * + * The callback will be given three arguments `(err, bytesWritten, buffer)` where`bytesWritten` specifies how many _bytes_ were written from `buffer`. + * + * If this method is invoked as its `util.promisify()` ed version, it returns + * a promise for an `Object` with `bytesWritten` and `buffer` properties. + * + * It is unsafe to use `fs.write()` multiple times on the same file without waiting + * for the callback. For this scenario, {@link createWriteStream} is + * recommended. + * + * On Linux, positional writes don't work when the file is opened in append mode. + * The kernel ignores the position argument and always appends the data to + * the end of the file. + * @since v0.0.2 + * @param [offset=0] + * @param [length=buffer.byteLength - offset] + * @param [position='null'] + */ + export function write( + fd: number, + buffer: TBuffer, + offset: number | undefined | null, + length: number | undefined | null, + position: number | undefined | null, + callback: (err: NodeJS.ErrnoException | null, written: number, buffer: TBuffer) => void, + ): void; + /** + * Asynchronously writes `buffer` to the file referenced by the supplied file descriptor. + * @param fd A file descriptor. + * @param offset The part of the buffer to be written. If not supplied, defaults to `0`. + * @param length The number of bytes to write. If not supplied, defaults to `buffer.length - offset`. + */ + export function write( + fd: number, + buffer: TBuffer, + offset: number | undefined | null, + length: number | undefined | null, + callback: (err: NodeJS.ErrnoException | null, written: number, buffer: TBuffer) => void, + ): void; + /** + * Asynchronously writes `buffer` to the file referenced by the supplied file descriptor. + * @param fd A file descriptor. + * @param offset The part of the buffer to be written. If not supplied, defaults to `0`. + */ + export function write( + fd: number, + buffer: TBuffer, + offset: number | undefined | null, + callback: (err: NodeJS.ErrnoException | null, written: number, buffer: TBuffer) => void, + ): void; + /** + * Asynchronously writes `buffer` to the file referenced by the supplied file descriptor. + * @param fd A file descriptor. + */ + export function write( + fd: number, + buffer: TBuffer, + callback: (err: NodeJS.ErrnoException | null, written: number, buffer: TBuffer) => void, + ): void; + /** + * Asynchronously writes `string` to the file referenced by the supplied file descriptor. + * @param fd A file descriptor. + * @param string A string to write. + * @param position The offset from the beginning of the file where this data should be written. If not supplied, defaults to the current position. + * @param encoding The expected string encoding. + */ + export function write( + fd: number, + string: string, + position: number | undefined | null, + encoding: BufferEncoding | undefined | null, + callback: (err: NodeJS.ErrnoException | null, written: number, str: string) => void, + ): void; + /** + * Asynchronously writes `string` to the file referenced by the supplied file descriptor. + * @param fd A file descriptor. + * @param string A string to write. + * @param position The offset from the beginning of the file where this data should be written. If not supplied, defaults to the current position. + */ + export function write( + fd: number, + string: string, + position: number | undefined | null, + callback: (err: NodeJS.ErrnoException | null, written: number, str: string) => void, + ): void; + /** + * Asynchronously writes `string` to the file referenced by the supplied file descriptor. + * @param fd A file descriptor. + * @param string A string to write. + */ + export function write( + fd: number, + string: string, + callback: (err: NodeJS.ErrnoException | null, written: number, str: string) => void, + ): void; + export namespace write { + /** + * Asynchronously writes `buffer` to the file referenced by the supplied file descriptor. + * @param fd A file descriptor. + * @param offset The part of the buffer to be written. If not supplied, defaults to `0`. + * @param length The number of bytes to write. If not supplied, defaults to `buffer.length - offset`. + * @param position The offset from the beginning of the file where this data should be written. If not supplied, defaults to the current position. + */ + function __promisify__( + fd: number, + buffer?: TBuffer, + offset?: number, + length?: number, + position?: number | null, + ): Promise<{ + bytesWritten: number; + buffer: TBuffer; + }>; + /** + * Asynchronously writes `string` to the file referenced by the supplied file descriptor. + * @param fd A file descriptor. + * @param string A string to write. + * @param position The offset from the beginning of the file where this data should be written. If not supplied, defaults to the current position. + * @param encoding The expected string encoding. + */ + function __promisify__( + fd: number, + string: string, + position?: number | null, + encoding?: BufferEncoding | null, + ): Promise<{ + bytesWritten: number; + buffer: string; + }>; + } + /** + * For detailed information, see the documentation of the asynchronous version of + * this API: {@link write}. + * @since v0.1.21 + * @param [offset=0] + * @param [length=buffer.byteLength - offset] + * @param [position='null'] + * @return The number of bytes written. + */ + export function writeSync( + fd: number, + buffer: NodeJS.ArrayBufferView, + offset?: number | null, + length?: number | null, + position?: number | null, + ): number; + /** + * Synchronously writes `string` to the file referenced by the supplied file descriptor, returning the number of bytes written. + * @param fd A file descriptor. + * @param string A string to write. + * @param position The offset from the beginning of the file where this data should be written. If not supplied, defaults to the current position. + * @param encoding The expected string encoding. + */ + export function writeSync( + fd: number, + string: string, + position?: number | null, + encoding?: BufferEncoding | null, + ): number; + export type ReadPosition = number | bigint; + export interface ReadSyncOptions { + /** + * @default 0 + */ + offset?: number | undefined; + /** + * @default `length of buffer` + */ + length?: number | undefined; + /** + * @default null + */ + position?: ReadPosition | null | undefined; + } + export interface ReadAsyncOptions extends ReadSyncOptions { + buffer?: TBuffer; + } + /** + * Read data from the file specified by `fd`. + * + * The callback is given the three arguments, `(err, bytesRead, buffer)`. + * + * If the file is not modified concurrently, the end-of-file is reached when the + * number of bytes read is zero. + * + * If this method is invoked as its `util.promisify()` ed version, it returns + * a promise for an `Object` with `bytesRead` and `buffer` properties. + * @since v0.0.2 + * @param buffer The buffer that the data will be written to. + * @param offset The position in `buffer` to write the data to. + * @param length The number of bytes to read. + * @param position Specifies where to begin reading from in the file. If `position` is `null` or `-1 `, data will be read from the current file position, and the file position will be updated. If + * `position` is an integer, the file position will be unchanged. + */ + export function read( + fd: number, + buffer: TBuffer, + offset: number, + length: number, + position: ReadPosition | null, + callback: (err: NodeJS.ErrnoException | null, bytesRead: number, buffer: TBuffer) => void, + ): void; + /** + * Similar to the above `fs.read` function, this version takes an optional `options` object. + * If not otherwise specified in an `options` object, + * `buffer` defaults to `Buffer.alloc(16384)`, + * `offset` defaults to `0`, + * `length` defaults to `buffer.byteLength`, `- offset` as of Node 17.6.0 + * `position` defaults to `null` + * @since v12.17.0, 13.11.0 + */ + export function read( + fd: number, + options: ReadAsyncOptions, + callback: (err: NodeJS.ErrnoException | null, bytesRead: number, buffer: TBuffer) => void, + ): void; + export function read( + fd: number, + callback: (err: NodeJS.ErrnoException | null, bytesRead: number, buffer: NodeJS.ArrayBufferView) => void, + ): void; + export namespace read { + /** + * @param fd A file descriptor. + * @param buffer The buffer that the data will be written to. + * @param offset The offset in the buffer at which to start writing. + * @param length The number of bytes to read. + * @param position The offset from the beginning of the file from which data should be read. If `null`, data will be read from the current position. + */ + function __promisify__( + fd: number, + buffer: TBuffer, + offset: number, + length: number, + position: number | null, + ): Promise<{ + bytesRead: number; + buffer: TBuffer; + }>; + function __promisify__( + fd: number, + options: ReadAsyncOptions, + ): Promise<{ + bytesRead: number; + buffer: TBuffer; + }>; + function __promisify__(fd: number): Promise<{ + bytesRead: number; + buffer: NodeJS.ArrayBufferView; + }>; + } + /** + * Returns the number of `bytesRead`. + * + * For detailed information, see the documentation of the asynchronous version of + * this API: {@link read}. + * @since v0.1.21 + * @param [position='null'] + */ + export function readSync( + fd: number, + buffer: NodeJS.ArrayBufferView, + offset: number, + length: number, + position: ReadPosition | null, + ): number; + /** + * Similar to the above `fs.readSync` function, this version takes an optional `options` object. + * If no `options` object is specified, it will default with the above values. + */ + export function readSync(fd: number, buffer: NodeJS.ArrayBufferView, opts?: ReadSyncOptions): number; + /** + * Asynchronously reads the entire contents of a file. + * + * ```js + * import { readFile } from 'node:fs'; + * + * readFile('/etc/passwd', (err, data) => { + * if (err) throw err; + * console.log(data); + * }); + * ``` + * + * The callback is passed two arguments `(err, data)`, where `data` is the + * contents of the file. + * + * If no encoding is specified, then the raw buffer is returned. + * + * If `options` is a string, then it specifies the encoding: + * + * ```js + * import { readFile } from 'node:fs'; + * + * readFile('/etc/passwd', 'utf8', callback); + * ``` + * + * When the path is a directory, the behavior of `fs.readFile()` and {@link readFileSync} is platform-specific. On macOS, Linux, and Windows, an + * error will be returned. On FreeBSD, a representation of the directory's contents + * will be returned. + * + * ```js + * import { readFile } from 'node:fs'; + * + * // macOS, Linux, and Windows + * readFile('', (err, data) => { + * // => [Error: EISDIR: illegal operation on a directory, read ] + * }); + * + * // FreeBSD + * readFile('', (err, data) => { + * // => null, + * }); + * ``` + * + * It is possible to abort an ongoing request using an `AbortSignal`. If a + * request is aborted the callback is called with an `AbortError`: + * + * ```js + * import { readFile } from 'node:fs'; + * + * const controller = new AbortController(); + * const signal = controller.signal; + * readFile(fileInfo[0].name, { signal }, (err, buf) => { + * // ... + * }); + * // When you want to abort the request + * controller.abort(); + * ``` + * + * The `fs.readFile()` function buffers the entire file. To minimize memory costs, + * when possible prefer streaming via `fs.createReadStream()`. + * + * Aborting an ongoing request does not abort individual operating + * system requests but rather the internal buffering `fs.readFile` performs. + * @since v0.1.29 + * @param path filename or file descriptor + */ + export function readFile( + path: PathOrFileDescriptor, + options: + | ({ + encoding?: null | undefined; + flag?: string | undefined; + } & Abortable) + | undefined + | null, + callback: (err: NodeJS.ErrnoException | null, data: Buffer) => void, + ): void; + /** + * Asynchronously reads the entire contents of a file. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * If a file descriptor is provided, the underlying file will _not_ be closed automatically. + * @param options Either the encoding for the result, or an object that contains the encoding and an optional flag. + * If a flag is not provided, it defaults to `'r'`. + */ + export function readFile( + path: PathOrFileDescriptor, + options: + | ({ + encoding: BufferEncoding; + flag?: string | undefined; + } & Abortable) + | BufferEncoding, + callback: (err: NodeJS.ErrnoException | null, data: string) => void, + ): void; + /** + * Asynchronously reads the entire contents of a file. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * If a file descriptor is provided, the underlying file will _not_ be closed automatically. + * @param options Either the encoding for the result, or an object that contains the encoding and an optional flag. + * If a flag is not provided, it defaults to `'r'`. + */ + export function readFile( + path: PathOrFileDescriptor, + options: + | (ObjectEncodingOptions & { + flag?: string | undefined; + } & Abortable) + | BufferEncoding + | undefined + | null, + callback: (err: NodeJS.ErrnoException | null, data: string | Buffer) => void, + ): void; + /** + * Asynchronously reads the entire contents of a file. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * If a file descriptor is provided, the underlying file will _not_ be closed automatically. + */ + export function readFile( + path: PathOrFileDescriptor, + callback: (err: NodeJS.ErrnoException | null, data: Buffer) => void, + ): void; + export namespace readFile { + /** + * Asynchronously reads the entire contents of a file. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * If a file descriptor is provided, the underlying file will _not_ be closed automatically. + * @param options An object that may contain an optional flag. + * If a flag is not provided, it defaults to `'r'`. + */ + function __promisify__( + path: PathOrFileDescriptor, + options?: { + encoding?: null | undefined; + flag?: string | undefined; + } | null, + ): Promise; + /** + * Asynchronously reads the entire contents of a file. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + * If a file descriptor is provided, the underlying file will _not_ be closed automatically. + * @param options Either the encoding for the result, or an object that contains the encoding and an optional flag. + * If a flag is not provided, it defaults to `'r'`. + */ + function __promisify__( + path: PathOrFileDescriptor, + options: + | { + encoding: BufferEncoding; + flag?: string | undefined; + } + | BufferEncoding, + ): Promise; + /** + * Asynchronously reads the entire contents of a file. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + * If a file descriptor is provided, the underlying file will _not_ be closed automatically. + * @param options Either the encoding for the result, or an object that contains the encoding and an optional flag. + * If a flag is not provided, it defaults to `'r'`. + */ + function __promisify__( + path: PathOrFileDescriptor, + options?: + | (ObjectEncodingOptions & { + flag?: string | undefined; + }) + | BufferEncoding + | null, + ): Promise; + } + /** + * Returns the contents of the `path`. + * + * For detailed information, see the documentation of the asynchronous version of + * this API: {@link readFile}. + * + * If the `encoding` option is specified then this function returns a + * string. Otherwise it returns a buffer. + * + * Similar to {@link readFile}, when the path is a directory, the behavior of`fs.readFileSync()` is platform-specific. + * + * ```js + * import { readFileSync } from 'node:fs'; + * + * // macOS, Linux, and Windows + * readFileSync(''); + * // => [Error: EISDIR: illegal operation on a directory, read ] + * + * // FreeBSD + * readFileSync(''); // => + * ``` + * @since v0.1.8 + * @param path filename or file descriptor + */ + export function readFileSync( + path: PathOrFileDescriptor, + options?: { + encoding?: null | undefined; + flag?: string | undefined; + } | null, + ): Buffer; + /** + * Synchronously reads the entire contents of a file. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * If a file descriptor is provided, the underlying file will _not_ be closed automatically. + * @param options Either the encoding for the result, or an object that contains the encoding and an optional flag. + * If a flag is not provided, it defaults to `'r'`. + */ + export function readFileSync( + path: PathOrFileDescriptor, + options: + | { + encoding: BufferEncoding; + flag?: string | undefined; + } + | BufferEncoding, + ): string; + /** + * Synchronously reads the entire contents of a file. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * If a file descriptor is provided, the underlying file will _not_ be closed automatically. + * @param options Either the encoding for the result, or an object that contains the encoding and an optional flag. + * If a flag is not provided, it defaults to `'r'`. + */ + export function readFileSync( + path: PathOrFileDescriptor, + options?: + | (ObjectEncodingOptions & { + flag?: string | undefined; + }) + | BufferEncoding + | null, + ): string | Buffer; + export type WriteFileOptions = + | ( + & ObjectEncodingOptions + & Abortable + & { + mode?: Mode | undefined; + flag?: string | undefined; + } + ) + | BufferEncoding + | null; + /** + * When `file` is a filename, asynchronously writes data to the file, replacing the + * file if it already exists. `data` can be a string or a buffer. + * + * When `file` is a file descriptor, the behavior is similar to calling`fs.write()` directly (which is recommended). See the notes below on using + * a file descriptor. + * + * The `encoding` option is ignored if `data` is a buffer. + * + * The `mode` option only affects the newly created file. See {@link open} for more details. + * + * ```js + * import { writeFile } from 'node:fs'; + * import { Buffer } from 'node:buffer'; + * + * const data = new Uint8Array(Buffer.from('Hello Node.js')); + * writeFile('message.txt', data, (err) => { + * if (err) throw err; + * console.log('The file has been saved!'); + * }); + * ``` + * + * If `options` is a string, then it specifies the encoding: + * + * ```js + * import { writeFile } from 'node:fs'; + * + * writeFile('message.txt', 'Hello Node.js', 'utf8', callback); + * ``` + * + * It is unsafe to use `fs.writeFile()` multiple times on the same file without + * waiting for the callback. For this scenario, {@link createWriteStream} is + * recommended. + * + * Similarly to `fs.readFile` \- `fs.writeFile` is a convenience method that + * performs multiple `write` calls internally to write the buffer passed to it. + * For performance sensitive code consider using {@link createWriteStream}. + * + * It is possible to use an `AbortSignal` to cancel an `fs.writeFile()`. + * Cancelation is "best effort", and some amount of data is likely still + * to be written. + * + * ```js + * import { writeFile } from 'node:fs'; + * import { Buffer } from 'node:buffer'; + * + * const controller = new AbortController(); + * const { signal } = controller; + * const data = new Uint8Array(Buffer.from('Hello Node.js')); + * writeFile('message.txt', data, { signal }, (err) => { + * // When a request is aborted - the callback is called with an AbortError + * }); + * // When the request should be aborted + * controller.abort(); + * ``` + * + * Aborting an ongoing request does not abort individual operating + * system requests but rather the internal buffering `fs.writeFile` performs. + * @since v0.1.29 + * @param file filename or file descriptor + */ + export function writeFile( + file: PathOrFileDescriptor, + data: string | NodeJS.ArrayBufferView, + options: WriteFileOptions, + callback: NoParamCallback, + ): void; + /** + * Asynchronously writes data to a file, replacing the file if it already exists. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * If a file descriptor is provided, the underlying file will _not_ be closed automatically. + * @param data The data to write. If something other than a Buffer or Uint8Array is provided, the value is coerced to a string. + */ + export function writeFile( + path: PathOrFileDescriptor, + data: string | NodeJS.ArrayBufferView, + callback: NoParamCallback, + ): void; + export namespace writeFile { + /** + * Asynchronously writes data to a file, replacing the file if it already exists. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + * If a file descriptor is provided, the underlying file will _not_ be closed automatically. + * @param data The data to write. If something other than a Buffer or Uint8Array is provided, the value is coerced to a string. + * @param options Either the encoding for the file, or an object optionally specifying the encoding, file mode, and flag. + * If `encoding` is not supplied, the default of `'utf8'` is used. + * If `mode` is not supplied, the default of `0o666` is used. + * If `mode` is a string, it is parsed as an octal integer. + * If `flag` is not supplied, the default of `'w'` is used. + */ + function __promisify__( + path: PathOrFileDescriptor, + data: string | NodeJS.ArrayBufferView, + options?: WriteFileOptions, + ): Promise; + } + /** + * Returns `undefined`. + * + * The `mode` option only affects the newly created file. See {@link open} for more details. + * + * For detailed information, see the documentation of the asynchronous version of + * this API: {@link writeFile}. + * @since v0.1.29 + * @param file filename or file descriptor + */ + export function writeFileSync( + file: PathOrFileDescriptor, + data: string | NodeJS.ArrayBufferView, + options?: WriteFileOptions, + ): void; + /** + * Asynchronously append data to a file, creating the file if it does not yet + * exist. `data` can be a string or a `Buffer`. + * + * The `mode` option only affects the newly created file. See {@link open} for more details. + * + * ```js + * import { appendFile } from 'node:fs'; + * + * appendFile('message.txt', 'data to append', (err) => { + * if (err) throw err; + * console.log('The "data to append" was appended to file!'); + * }); + * ``` + * + * If `options` is a string, then it specifies the encoding: + * + * ```js + * import { appendFile } from 'node:fs'; + * + * appendFile('message.txt', 'data to append', 'utf8', callback); + * ``` + * + * The `path` may be specified as a numeric file descriptor that has been opened + * for appending (using `fs.open()` or `fs.openSync()`). The file descriptor will + * not be closed automatically. + * + * ```js + * import { open, close, appendFile } from 'node:fs'; + * + * function closeFd(fd) { + * close(fd, (err) => { + * if (err) throw err; + * }); + * } + * + * open('message.txt', 'a', (err, fd) => { + * if (err) throw err; + * + * try { + * appendFile(fd, 'data to append', 'utf8', (err) => { + * closeFd(fd); + * if (err) throw err; + * }); + * } catch (err) { + * closeFd(fd); + * throw err; + * } + * }); + * ``` + * @since v0.6.7 + * @param path filename or file descriptor + */ + export function appendFile( + path: PathOrFileDescriptor, + data: string | Uint8Array, + options: WriteFileOptions, + callback: NoParamCallback, + ): void; + /** + * Asynchronously append data to a file, creating the file if it does not exist. + * @param file A path to a file. If a URL is provided, it must use the `file:` protocol. + * If a file descriptor is provided, the underlying file will _not_ be closed automatically. + * @param data The data to write. If something other than a Buffer or Uint8Array is provided, the value is coerced to a string. + */ + export function appendFile(file: PathOrFileDescriptor, data: string | Uint8Array, callback: NoParamCallback): void; + export namespace appendFile { + /** + * Asynchronously append data to a file, creating the file if it does not exist. + * @param file A path to a file. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + * If a file descriptor is provided, the underlying file will _not_ be closed automatically. + * @param data The data to write. If something other than a Buffer or Uint8Array is provided, the value is coerced to a string. + * @param options Either the encoding for the file, or an object optionally specifying the encoding, file mode, and flag. + * If `encoding` is not supplied, the default of `'utf8'` is used. + * If `mode` is not supplied, the default of `0o666` is used. + * If `mode` is a string, it is parsed as an octal integer. + * If `flag` is not supplied, the default of `'a'` is used. + */ + function __promisify__( + file: PathOrFileDescriptor, + data: string | Uint8Array, + options?: WriteFileOptions, + ): Promise; + } + /** + * Synchronously append data to a file, creating the file if it does not yet + * exist. `data` can be a string or a `Buffer`. + * + * The `mode` option only affects the newly created file. See {@link open} for more details. + * + * ```js + * import { appendFileSync } from 'node:fs'; + * + * try { + * appendFileSync('message.txt', 'data to append'); + * console.log('The "data to append" was appended to file!'); + * } catch (err) { + * // Handle the error + * } + * ``` + * + * If `options` is a string, then it specifies the encoding: + * + * ```js + * import { appendFileSync } from 'node:fs'; + * + * appendFileSync('message.txt', 'data to append', 'utf8'); + * ``` + * + * The `path` may be specified as a numeric file descriptor that has been opened + * for appending (using `fs.open()` or `fs.openSync()`). The file descriptor will + * not be closed automatically. + * + * ```js + * import { openSync, closeSync, appendFileSync } from 'node:fs'; + * + * let fd; + * + * try { + * fd = openSync('message.txt', 'a'); + * appendFileSync(fd, 'data to append', 'utf8'); + * } catch (err) { + * // Handle the error + * } finally { + * if (fd !== undefined) + * closeSync(fd); + * } + * ``` + * @since v0.6.7 + * @param path filename or file descriptor + */ + export function appendFileSync( + path: PathOrFileDescriptor, + data: string | Uint8Array, + options?: WriteFileOptions, + ): void; + /** + * Watch for changes on `filename`. The callback `listener` will be called each + * time the file is accessed. + * + * The `options` argument may be omitted. If provided, it should be an object. The`options` object may contain a boolean named `persistent` that indicates + * whether the process should continue to run as long as files are being watched. + * The `options` object may specify an `interval` property indicating how often the + * target should be polled in milliseconds. + * + * The `listener` gets two arguments the current stat object and the previous + * stat object: + * + * ```js + * import { watchFile } from 'fs'; + * + * watchFile('message.text', (curr, prev) => { + * console.log(`the current mtime is: ${curr.mtime}`); + * console.log(`the previous mtime was: ${prev.mtime}`); + * }); + * ``` + * + * These stat objects are instances of `fs.Stat`. If the `bigint` option is `true`, + * the numeric values in these objects are specified as `BigInt`s. + * + * To be notified when the file was modified, not just accessed, it is necessary + * to compare `curr.mtimeMs` and `prev.mtimeMs`. + * + * When an `fs.watchFile` operation results in an `ENOENT` error, it + * will invoke the listener once, with all the fields zeroed (or, for dates, the + * Unix Epoch). If the file is created later on, the listener will be called + * again, with the latest stat objects. This is a change in functionality since + * v0.10. + * + * Using {@link watch} is more efficient than `fs.watchFile` and`fs.unwatchFile`. `fs.watch` should be used instead of `fs.watchFile` and`fs.unwatchFile` when possible. + * + * When a file being watched by `fs.watchFile()` disappears and reappears, + * then the contents of `previous` in the second callback event (the file's + * reappearance) will be the same as the contents of `previous` in the first + * callback event (its disappearance). + * + * This happens when: + * + * * the file is deleted, followed by a restore + * * the file is renamed and then renamed a second time back to its original name + * @since v0.1.31 + */ + export interface WatchFileOptions { + bigint?: boolean | undefined; + persistent?: boolean | undefined; + interval?: number | undefined; + } + /** + * Watch for changes on `filename`. The callback `listener` will be called each + * time the file is accessed. + * + * The `options` argument may be omitted. If provided, it should be an object. The`options` object may contain a boolean named `persistent` that indicates + * whether the process should continue to run as long as files are being watched. + * The `options` object may specify an `interval` property indicating how often the + * target should be polled in milliseconds. + * + * The `listener` gets two arguments the current stat object and the previous + * stat object: + * + * ```js + * import { watchFile } from 'node:fs'; + * + * watchFile('message.text', (curr, prev) => { + * console.log(`the current mtime is: ${curr.mtime}`); + * console.log(`the previous mtime was: ${prev.mtime}`); + * }); + * ``` + * + * These stat objects are instances of `fs.Stat`. If the `bigint` option is `true`, + * the numeric values in these objects are specified as `BigInt`s. + * + * To be notified when the file was modified, not just accessed, it is necessary + * to compare `curr.mtimeMs` and `prev.mtimeMs`. + * + * When an `fs.watchFile` operation results in an `ENOENT` error, it + * will invoke the listener once, with all the fields zeroed (or, for dates, the + * Unix Epoch). If the file is created later on, the listener will be called + * again, with the latest stat objects. This is a change in functionality since + * v0.10. + * + * Using {@link watch} is more efficient than `fs.watchFile` and`fs.unwatchFile`. `fs.watch` should be used instead of `fs.watchFile` and`fs.unwatchFile` when possible. + * + * When a file being watched by `fs.watchFile()` disappears and reappears, + * then the contents of `previous` in the second callback event (the file's + * reappearance) will be the same as the contents of `previous` in the first + * callback event (its disappearance). + * + * This happens when: + * + * * the file is deleted, followed by a restore + * * the file is renamed and then renamed a second time back to its original name + * @since v0.1.31 + */ + export function watchFile( + filename: PathLike, + options: + | (WatchFileOptions & { + bigint?: false | undefined; + }) + | undefined, + listener: StatsListener, + ): StatWatcher; + export function watchFile( + filename: PathLike, + options: + | (WatchFileOptions & { + bigint: true; + }) + | undefined, + listener: BigIntStatsListener, + ): StatWatcher; + /** + * Watch for changes on `filename`. The callback `listener` will be called each time the file is accessed. + * @param filename A path to a file or directory. If a URL is provided, it must use the `file:` protocol. + */ + export function watchFile(filename: PathLike, listener: StatsListener): StatWatcher; + /** + * Stop watching for changes on `filename`. If `listener` is specified, only that + * particular listener is removed. Otherwise, _all_ listeners are removed, + * effectively stopping watching of `filename`. + * + * Calling `fs.unwatchFile()` with a filename that is not being watched is a + * no-op, not an error. + * + * Using {@link watch} is more efficient than `fs.watchFile()` and`fs.unwatchFile()`. `fs.watch()` should be used instead of `fs.watchFile()`and `fs.unwatchFile()` when possible. + * @since v0.1.31 + * @param listener Optional, a listener previously attached using `fs.watchFile()` + */ + export function unwatchFile(filename: PathLike, listener?: StatsListener): void; + export function unwatchFile(filename: PathLike, listener?: BigIntStatsListener): void; + export interface WatchOptions extends Abortable { + encoding?: BufferEncoding | "buffer" | undefined; + persistent?: boolean | undefined; + recursive?: boolean | undefined; + } + export type WatchEventType = "rename" | "change"; + export type WatchListener = (event: WatchEventType, filename: T | null) => void; + export type StatsListener = (curr: Stats, prev: Stats) => void; + export type BigIntStatsListener = (curr: BigIntStats, prev: BigIntStats) => void; + /** + * Watch for changes on `filename`, where `filename` is either a file or a + * directory. + * + * The second argument is optional. If `options` is provided as a string, it + * specifies the `encoding`. Otherwise `options` should be passed as an object. + * + * The listener callback gets two arguments `(eventType, filename)`. `eventType`is either `'rename'` or `'change'`, and `filename` is the name of the file + * which triggered the event. + * + * On most platforms, `'rename'` is emitted whenever a filename appears or + * disappears in the directory. + * + * The listener callback is attached to the `'change'` event fired by `fs.FSWatcher`, but it is not the same thing as the `'change'` value of`eventType`. + * + * If a `signal` is passed, aborting the corresponding AbortController will close + * the returned `fs.FSWatcher`. + * @since v0.5.10 + * @param listener + */ + export function watch( + filename: PathLike, + options: + | (WatchOptions & { + encoding: "buffer"; + }) + | "buffer", + listener?: WatchListener, + ): FSWatcher; + /** + * Watch for changes on `filename`, where `filename` is either a file or a directory, returning an `FSWatcher`. + * @param filename A path to a file or directory. If a URL is provided, it must use the `file:` protocol. + * @param options Either the encoding for the filename provided to the listener, or an object optionally specifying encoding, persistent, and recursive options. + * If `encoding` is not supplied, the default of `'utf8'` is used. + * If `persistent` is not supplied, the default of `true` is used. + * If `recursive` is not supplied, the default of `false` is used. + */ + export function watch( + filename: PathLike, + options?: WatchOptions | BufferEncoding | null, + listener?: WatchListener, + ): FSWatcher; + /** + * Watch for changes on `filename`, where `filename` is either a file or a directory, returning an `FSWatcher`. + * @param filename A path to a file or directory. If a URL is provided, it must use the `file:` protocol. + * @param options Either the encoding for the filename provided to the listener, or an object optionally specifying encoding, persistent, and recursive options. + * If `encoding` is not supplied, the default of `'utf8'` is used. + * If `persistent` is not supplied, the default of `true` is used. + * If `recursive` is not supplied, the default of `false` is used. + */ + export function watch( + filename: PathLike, + options: WatchOptions | string, + listener?: WatchListener, + ): FSWatcher; + /** + * Watch for changes on `filename`, where `filename` is either a file or a directory, returning an `FSWatcher`. + * @param filename A path to a file or directory. If a URL is provided, it must use the `file:` protocol. + */ + export function watch(filename: PathLike, listener?: WatchListener): FSWatcher; + /** + * Test whether or not the given path exists by checking with the file system. + * Then call the `callback` argument with either true or false: + * + * ```js + * import { exists } from 'node:fs'; + * + * exists('/etc/passwd', (e) => { + * console.log(e ? 'it exists' : 'no passwd!'); + * }); + * ``` + * + * **The parameters for this callback are not consistent with other Node.js** + * **callbacks.** Normally, the first parameter to a Node.js callback is an `err`parameter, optionally followed by other parameters. The `fs.exists()` callback + * has only one boolean parameter. This is one reason `fs.access()` is recommended + * instead of `fs.exists()`. + * + * Using `fs.exists()` to check for the existence of a file before calling`fs.open()`, `fs.readFile()`, or `fs.writeFile()` is not recommended. Doing + * so introduces a race condition, since other processes may change the file's + * state between the two calls. Instead, user code should open/read/write the + * file directly and handle the error raised if the file does not exist. + * + * **write (NOT RECOMMENDED)** + * + * ```js + * import { exists, open, close } from 'node:fs'; + * + * exists('myfile', (e) => { + * if (e) { + * console.error('myfile already exists'); + * } else { + * open('myfile', 'wx', (err, fd) => { + * if (err) throw err; + * + * try { + * writeMyData(fd); + * } finally { + * close(fd, (err) => { + * if (err) throw err; + * }); + * } + * }); + * } + * }); + * ``` + * + * **write (RECOMMENDED)** + * + * ```js + * import { open, close } from 'node:fs'; + * open('myfile', 'wx', (err, fd) => { + * if (err) { + * if (err.code === 'EEXIST') { + * console.error('myfile already exists'); + * return; + * } + * + * throw err; + * } + * + * try { + * writeMyData(fd); + * } finally { + * close(fd, (err) => { + * if (err) throw err; + * }); + * } + * }); + * ``` + * + * **read (NOT RECOMMENDED)** + * + * ```js + * import { open, close, exists } from 'node:fs'; + * + * exists('myfile', (e) => { + * if (e) { + * open('myfile', 'r', (err, fd) => { + * if (err) throw err; + * + * try { + * readMyData(fd); + * } finally { + * close(fd, (err) => { + * if (err) throw err; + * }); + * } + * }); + * } else { + * console.error('myfile does not exist'); + * } + * }); + * ``` + * + * **read (RECOMMENDED)** + * + * ```js + * import { open, close } from 'node:fs'; + * + * open('myfile', 'r', (err, fd) => { + * if (err) { + * if (err.code === 'ENOENT') { + * console.error('myfile does not exist'); + * return; + * } + * + * throw err; + * } + * + * try { + * readMyData(fd); + * } finally { + * close(fd, (err) => { + * if (err) throw err; + * }); + * } + * }); + * ``` + * + * The "not recommended" examples above check for existence and then use the + * file; the "recommended" examples are better because they use the file directly + * and handle the error, if any. + * + * In general, check for the existence of a file only if the file won't be + * used directly, for example when its existence is a signal from another + * process. + * @since v0.0.2 + * @deprecated Since v1.0.0 - Use {@link stat} or {@link access} instead. + */ + export function exists(path: PathLike, callback: (exists: boolean) => void): void; + /** @deprecated */ + export namespace exists { + /** + * @param path A path to a file or directory. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + */ + function __promisify__(path: PathLike): Promise; + } + /** + * Returns `true` if the path exists, `false` otherwise. + * + * For detailed information, see the documentation of the asynchronous version of + * this API: {@link exists}. + * + * `fs.exists()` is deprecated, but `fs.existsSync()` is not. The `callback`parameter to `fs.exists()` accepts parameters that are inconsistent with other + * Node.js callbacks. `fs.existsSync()` does not use a callback. + * + * ```js + * import { existsSync } from 'node:fs'; + * + * if (existsSync('/etc/passwd')) + * console.log('The path exists.'); + * ``` + * @since v0.1.21 + */ + export function existsSync(path: PathLike): boolean; + export namespace constants { + // File Access Constants + /** Constant for fs.access(). File is visible to the calling process. */ + const F_OK: number; + /** Constant for fs.access(). File can be read by the calling process. */ + const R_OK: number; + /** Constant for fs.access(). File can be written by the calling process. */ + const W_OK: number; + /** Constant for fs.access(). File can be executed by the calling process. */ + const X_OK: number; + // File Copy Constants + /** Constant for fs.copyFile. Flag indicating the destination file should not be overwritten if it already exists. */ + const COPYFILE_EXCL: number; + /** + * Constant for fs.copyFile. copy operation will attempt to create a copy-on-write reflink. + * If the underlying platform does not support copy-on-write, then a fallback copy mechanism is used. + */ + const COPYFILE_FICLONE: number; + /** + * Constant for fs.copyFile. Copy operation will attempt to create a copy-on-write reflink. + * If the underlying platform does not support copy-on-write, then the operation will fail with an error. + */ + const COPYFILE_FICLONE_FORCE: number; + // File Open Constants + /** Constant for fs.open(). Flag indicating to open a file for read-only access. */ + const O_RDONLY: number; + /** Constant for fs.open(). Flag indicating to open a file for write-only access. */ + const O_WRONLY: number; + /** Constant for fs.open(). Flag indicating to open a file for read-write access. */ + const O_RDWR: number; + /** Constant for fs.open(). Flag indicating to create the file if it does not already exist. */ + const O_CREAT: number; + /** Constant for fs.open(). Flag indicating that opening a file should fail if the O_CREAT flag is set and the file already exists. */ + const O_EXCL: number; + /** + * Constant for fs.open(). Flag indicating that if path identifies a terminal device, + * opening the path shall not cause that terminal to become the controlling terminal for the process + * (if the process does not already have one). + */ + const O_NOCTTY: number; + /** Constant for fs.open(). Flag indicating that if the file exists and is a regular file, and the file is opened successfully for write access, its length shall be truncated to zero. */ + const O_TRUNC: number; + /** Constant for fs.open(). Flag indicating that data will be appended to the end of the file. */ + const O_APPEND: number; + /** Constant for fs.open(). Flag indicating that the open should fail if the path is not a directory. */ + const O_DIRECTORY: number; + /** + * constant for fs.open(). + * Flag indicating reading accesses to the file system will no longer result in + * an update to the atime information associated with the file. + * This flag is available on Linux operating systems only. + */ + const O_NOATIME: number; + /** Constant for fs.open(). Flag indicating that the open should fail if the path is a symbolic link. */ + const O_NOFOLLOW: number; + /** Constant for fs.open(). Flag indicating that the file is opened for synchronous I/O. */ + const O_SYNC: number; + /** Constant for fs.open(). Flag indicating that the file is opened for synchronous I/O with write operations waiting for data integrity. */ + const O_DSYNC: number; + /** Constant for fs.open(). Flag indicating to open the symbolic link itself rather than the resource it is pointing to. */ + const O_SYMLINK: number; + /** Constant for fs.open(). When set, an attempt will be made to minimize caching effects of file I/O. */ + const O_DIRECT: number; + /** Constant for fs.open(). Flag indicating to open the file in nonblocking mode when possible. */ + const O_NONBLOCK: number; + // File Type Constants + /** Constant for fs.Stats mode property for determining a file's type. Bit mask used to extract the file type code. */ + const S_IFMT: number; + /** Constant for fs.Stats mode property for determining a file's type. File type constant for a regular file. */ + const S_IFREG: number; + /** Constant for fs.Stats mode property for determining a file's type. File type constant for a directory. */ + const S_IFDIR: number; + /** Constant for fs.Stats mode property for determining a file's type. File type constant for a character-oriented device file. */ + const S_IFCHR: number; + /** Constant for fs.Stats mode property for determining a file's type. File type constant for a block-oriented device file. */ + const S_IFBLK: number; + /** Constant for fs.Stats mode property for determining a file's type. File type constant for a FIFO/pipe. */ + const S_IFIFO: number; + /** Constant for fs.Stats mode property for determining a file's type. File type constant for a symbolic link. */ + const S_IFLNK: number; + /** Constant for fs.Stats mode property for determining a file's type. File type constant for a socket. */ + const S_IFSOCK: number; + // File Mode Constants + /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating readable, writable and executable by owner. */ + const S_IRWXU: number; + /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating readable by owner. */ + const S_IRUSR: number; + /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating writable by owner. */ + const S_IWUSR: number; + /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating executable by owner. */ + const S_IXUSR: number; + /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating readable, writable and executable by group. */ + const S_IRWXG: number; + /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating readable by group. */ + const S_IRGRP: number; + /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating writable by group. */ + const S_IWGRP: number; + /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating executable by group. */ + const S_IXGRP: number; + /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating readable, writable and executable by others. */ + const S_IRWXO: number; + /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating readable by others. */ + const S_IROTH: number; + /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating writable by others. */ + const S_IWOTH: number; + /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating executable by others. */ + const S_IXOTH: number; + /** + * When set, a memory file mapping is used to access the file. This flag + * is available on Windows operating systems only. On other operating systems, + * this flag is ignored. + */ + const UV_FS_O_FILEMAP: number; + } + /** + * Tests a user's permissions for the file or directory specified by `path`. + * The `mode` argument is an optional integer that specifies the accessibility + * checks to be performed. `mode` should be either the value `fs.constants.F_OK`or a mask consisting of the bitwise OR of any of `fs.constants.R_OK`,`fs.constants.W_OK`, and `fs.constants.X_OK` + * (e.g.`fs.constants.W_OK | fs.constants.R_OK`). Check `File access constants` for + * possible values of `mode`. + * + * The final argument, `callback`, is a callback function that is invoked with + * a possible error argument. If any of the accessibility checks fail, the error + * argument will be an `Error` object. The following examples check if`package.json` exists, and if it is readable or writable. + * + * ```js + * import { access, constants } from 'node:fs'; + * + * const file = 'package.json'; + * + * // Check if the file exists in the current directory. + * access(file, constants.F_OK, (err) => { + * console.log(`${file} ${err ? 'does not exist' : 'exists'}`); + * }); + * + * // Check if the file is readable. + * access(file, constants.R_OK, (err) => { + * console.log(`${file} ${err ? 'is not readable' : 'is readable'}`); + * }); + * + * // Check if the file is writable. + * access(file, constants.W_OK, (err) => { + * console.log(`${file} ${err ? 'is not writable' : 'is writable'}`); + * }); + * + * // Check if the file is readable and writable. + * access(file, constants.R_OK | constants.W_OK, (err) => { + * console.log(`${file} ${err ? 'is not' : 'is'} readable and writable`); + * }); + * ``` + * + * Do not use `fs.access()` to check for the accessibility of a file before calling`fs.open()`, `fs.readFile()`, or `fs.writeFile()`. Doing + * so introduces a race condition, since other processes may change the file's + * state between the two calls. Instead, user code should open/read/write the + * file directly and handle the error raised if the file is not accessible. + * + * **write (NOT RECOMMENDED)** + * + * ```js + * import { access, open, close } from 'node:fs'; + * + * access('myfile', (err) => { + * if (!err) { + * console.error('myfile already exists'); + * return; + * } + * + * open('myfile', 'wx', (err, fd) => { + * if (err) throw err; + * + * try { + * writeMyData(fd); + * } finally { + * close(fd, (err) => { + * if (err) throw err; + * }); + * } + * }); + * }); + * ``` + * + * **write (RECOMMENDED)** + * + * ```js + * import { open, close } from 'node:fs'; + * + * open('myfile', 'wx', (err, fd) => { + * if (err) { + * if (err.code === 'EEXIST') { + * console.error('myfile already exists'); + * return; + * } + * + * throw err; + * } + * + * try { + * writeMyData(fd); + * } finally { + * close(fd, (err) => { + * if (err) throw err; + * }); + * } + * }); + * ``` + * + * **read (NOT RECOMMENDED)** + * + * ```js + * import { access, open, close } from 'node:fs'; + * access('myfile', (err) => { + * if (err) { + * if (err.code === 'ENOENT') { + * console.error('myfile does not exist'); + * return; + * } + * + * throw err; + * } + * + * open('myfile', 'r', (err, fd) => { + * if (err) throw err; + * + * try { + * readMyData(fd); + * } finally { + * close(fd, (err) => { + * if (err) throw err; + * }); + * } + * }); + * }); + * ``` + * + * **read (RECOMMENDED)** + * + * ```js + * import { open, close } from 'node:fs'; + * + * open('myfile', 'r', (err, fd) => { + * if (err) { + * if (err.code === 'ENOENT') { + * console.error('myfile does not exist'); + * return; + * } + * + * throw err; + * } + * + * try { + * readMyData(fd); + * } finally { + * close(fd, (err) => { + * if (err) throw err; + * }); + * } + * }); + * ``` + * + * The "not recommended" examples above check for accessibility and then use the + * file; the "recommended" examples are better because they use the file directly + * and handle the error, if any. + * + * In general, check for the accessibility of a file only if the file will not be + * used directly, for example when its accessibility is a signal from another + * process. + * + * On Windows, access-control policies (ACLs) on a directory may limit access to + * a file or directory. The `fs.access()` function, however, does not check the + * ACL and therefore may report that a path is accessible even if the ACL restricts + * the user from reading or writing to it. + * @since v0.11.15 + * @param [mode=fs.constants.F_OK] + */ + export function access(path: PathLike, mode: number | undefined, callback: NoParamCallback): void; + /** + * Asynchronously tests a user's permissions for the file specified by path. + * @param path A path to a file or directory. If a URL is provided, it must use the `file:` protocol. + */ + export function access(path: PathLike, callback: NoParamCallback): void; + export namespace access { + /** + * Asynchronously tests a user's permissions for the file specified by path. + * @param path A path to a file or directory. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + */ + function __promisify__(path: PathLike, mode?: number): Promise; + } + /** + * Synchronously tests a user's permissions for the file or directory specified + * by `path`. The `mode` argument is an optional integer that specifies the + * accessibility checks to be performed. `mode` should be either the value`fs.constants.F_OK` or a mask consisting of the bitwise OR of any of`fs.constants.R_OK`, `fs.constants.W_OK`, and + * `fs.constants.X_OK` (e.g.`fs.constants.W_OK | fs.constants.R_OK`). Check `File access constants` for + * possible values of `mode`. + * + * If any of the accessibility checks fail, an `Error` will be thrown. Otherwise, + * the method will return `undefined`. + * + * ```js + * import { accessSync, constants } from 'node:fs'; + * + * try { + * accessSync('etc/passwd', constants.R_OK | constants.W_OK); + * console.log('can read/write'); + * } catch (err) { + * console.error('no access!'); + * } + * ``` + * @since v0.11.15 + * @param [mode=fs.constants.F_OK] + */ + export function accessSync(path: PathLike, mode?: number): void; + interface StreamOptions { + flags?: string | undefined; + encoding?: BufferEncoding | undefined; + fd?: number | promises.FileHandle | undefined; + mode?: number | undefined; + autoClose?: boolean | undefined; + emitClose?: boolean | undefined; + start?: number | undefined; + signal?: AbortSignal | null | undefined; + highWaterMark?: number | undefined; + } + interface FSImplementation { + open?: (...args: any[]) => any; + close?: (...args: any[]) => any; + } + interface CreateReadStreamFSImplementation extends FSImplementation { + read: (...args: any[]) => any; + } + interface CreateWriteStreamFSImplementation extends FSImplementation { + write: (...args: any[]) => any; + writev?: (...args: any[]) => any; + } + interface ReadStreamOptions extends StreamOptions { + fs?: CreateReadStreamFSImplementation | null | undefined; + end?: number | undefined; + } + interface WriteStreamOptions extends StreamOptions { + fs?: CreateWriteStreamFSImplementation | null | undefined; + } + /** + * Unlike the 16 KiB default `highWaterMark` for a `stream.Readable`, the stream + * returned by this method has a default `highWaterMark` of 64 KiB. + * + * `options` can include `start` and `end` values to read a range of bytes from + * the file instead of the entire file. Both `start` and `end` are inclusive and + * start counting at 0, allowed values are in the + * \[0, [`Number.MAX_SAFE_INTEGER`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MAX_SAFE_INTEGER)\] range. If `fd` is specified and `start` is + * omitted or `undefined`, `fs.createReadStream()` reads sequentially from the + * current file position. The `encoding` can be any one of those accepted by `Buffer`. + * + * If `fd` is specified, `ReadStream` will ignore the `path` argument and will use + * the specified file descriptor. This means that no `'open'` event will be + * emitted. `fd` should be blocking; non-blocking `fd`s should be passed to `net.Socket`. + * + * If `fd` points to a character device that only supports blocking reads + * (such as keyboard or sound card), read operations do not finish until data is + * available. This can prevent the process from exiting and the stream from + * closing naturally. + * + * By default, the stream will emit a `'close'` event after it has been + * destroyed. Set the `emitClose` option to `false` to change this behavior. + * + * By providing the `fs` option, it is possible to override the corresponding `fs`implementations for `open`, `read`, and `close`. When providing the `fs` option, + * an override for `read` is required. If no `fd` is provided, an override for`open` is also required. If `autoClose` is `true`, an override for `close` is + * also required. + * + * ```js + * import { createReadStream } from 'node:fs'; + * + * // Create a stream from some character device. + * const stream = createReadStream('/dev/input/event0'); + * setTimeout(() => { + * stream.close(); // This may not close the stream. + * // Artificially marking end-of-stream, as if the underlying resource had + * // indicated end-of-file by itself, allows the stream to close. + * // This does not cancel pending read operations, and if there is such an + * // operation, the process may still not be able to exit successfully + * // until it finishes. + * stream.push(null); + * stream.read(0); + * }, 100); + * ``` + * + * If `autoClose` is false, then the file descriptor won't be closed, even if + * there's an error. It is the application's responsibility to close it and make + * sure there's no file descriptor leak. If `autoClose` is set to true (default + * behavior), on `'error'` or `'end'` the file descriptor will be closed + * automatically. + * + * `mode` sets the file mode (permission and sticky bits), but only if the + * file was created. + * + * An example to read the last 10 bytes of a file which is 100 bytes long: + * + * ```js + * import { createReadStream } from 'node:fs'; + * + * createReadStream('sample.txt', { start: 90, end: 99 }); + * ``` + * + * If `options` is a string, then it specifies the encoding. + * @since v0.1.31 + */ + export function createReadStream(path: PathLike, options?: BufferEncoding | ReadStreamOptions): ReadStream; + /** + * `options` may also include a `start` option to allow writing data at some + * position past the beginning of the file, allowed values are in the + * \[0, [`Number.MAX_SAFE_INTEGER`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MAX_SAFE_INTEGER)\] range. Modifying a file rather than + * replacing it may require the `flags` option to be set to `r+` rather than the + * default `w`. The `encoding` can be any one of those accepted by `Buffer`. + * + * If `autoClose` is set to true (default behavior) on `'error'` or `'finish'`the file descriptor will be closed automatically. If `autoClose` is false, + * then the file descriptor won't be closed, even if there's an error. + * It is the application's responsibility to close it and make sure there's no + * file descriptor leak. + * + * By default, the stream will emit a `'close'` event after it has been + * destroyed. Set the `emitClose` option to `false` to change this behavior. + * + * By providing the `fs` option it is possible to override the corresponding `fs`implementations for `open`, `write`, `writev`, and `close`. Overriding `write()`without `writev()` can reduce + * performance as some optimizations (`_writev()`) + * will be disabled. When providing the `fs` option, overrides for at least one of`write` and `writev` are required. If no `fd` option is supplied, an override + * for `open` is also required. If `autoClose` is `true`, an override for `close`is also required. + * + * Like `fs.ReadStream`, if `fd` is specified, `fs.WriteStream` will ignore the`path` argument and will use the specified file descriptor. This means that no`'open'` event will be + * emitted. `fd` should be blocking; non-blocking `fd`s + * should be passed to `net.Socket`. + * + * If `options` is a string, then it specifies the encoding. + * @since v0.1.31 + */ + export function createWriteStream(path: PathLike, options?: BufferEncoding | WriteStreamOptions): WriteStream; + /** + * Forces all currently queued I/O operations associated with the file to the + * operating system's synchronized I/O completion state. Refer to the POSIX [`fdatasync(2)`](http://man7.org/linux/man-pages/man2/fdatasync.2.html) documentation for details. No arguments other + * than a possible + * exception are given to the completion callback. + * @since v0.1.96 + */ + export function fdatasync(fd: number, callback: NoParamCallback): void; + export namespace fdatasync { + /** + * Asynchronous fdatasync(2) - synchronize a file's in-core state with storage device. + * @param fd A file descriptor. + */ + function __promisify__(fd: number): Promise; + } + /** + * Forces all currently queued I/O operations associated with the file to the + * operating system's synchronized I/O completion state. Refer to the POSIX [`fdatasync(2)`](http://man7.org/linux/man-pages/man2/fdatasync.2.html) documentation for details. Returns `undefined`. + * @since v0.1.96 + */ + export function fdatasyncSync(fd: number): void; + /** + * Asynchronously copies `src` to `dest`. By default, `dest` is overwritten if it + * already exists. No arguments other than a possible exception are given to the + * callback function. Node.js makes no guarantees about the atomicity of the copy + * operation. If an error occurs after the destination file has been opened for + * writing, Node.js will attempt to remove the destination. + * + * `mode` is an optional integer that specifies the behavior + * of the copy operation. It is possible to create a mask consisting of the bitwise + * OR of two or more values (e.g.`fs.constants.COPYFILE_EXCL | fs.constants.COPYFILE_FICLONE`). + * + * * `fs.constants.COPYFILE_EXCL`: The copy operation will fail if `dest` already + * exists. + * * `fs.constants.COPYFILE_FICLONE`: The copy operation will attempt to create a + * copy-on-write reflink. If the platform does not support copy-on-write, then a + * fallback copy mechanism is used. + * * `fs.constants.COPYFILE_FICLONE_FORCE`: The copy operation will attempt to + * create a copy-on-write reflink. If the platform does not support + * copy-on-write, then the operation will fail. + * + * ```js + * import { copyFile, constants } from 'node:fs'; + * + * function callback(err) { + * if (err) throw err; + * console.log('source.txt was copied to destination.txt'); + * } + * + * // destination.txt will be created or overwritten by default. + * copyFile('source.txt', 'destination.txt', callback); + * + * // By using COPYFILE_EXCL, the operation will fail if destination.txt exists. + * copyFile('source.txt', 'destination.txt', constants.COPYFILE_EXCL, callback); + * ``` + * @since v8.5.0 + * @param src source filename to copy + * @param dest destination filename of the copy operation + * @param [mode=0] modifiers for copy operation. + */ + export function copyFile(src: PathLike, dest: PathLike, callback: NoParamCallback): void; + export function copyFile(src: PathLike, dest: PathLike, mode: number, callback: NoParamCallback): void; + export namespace copyFile { + function __promisify__(src: PathLike, dst: PathLike, mode?: number): Promise; + } + /** + * Synchronously copies `src` to `dest`. By default, `dest` is overwritten if it + * already exists. Returns `undefined`. Node.js makes no guarantees about the + * atomicity of the copy operation. If an error occurs after the destination file + * has been opened for writing, Node.js will attempt to remove the destination. + * + * `mode` is an optional integer that specifies the behavior + * of the copy operation. It is possible to create a mask consisting of the bitwise + * OR of two or more values (e.g.`fs.constants.COPYFILE_EXCL | fs.constants.COPYFILE_FICLONE`). + * + * * `fs.constants.COPYFILE_EXCL`: The copy operation will fail if `dest` already + * exists. + * * `fs.constants.COPYFILE_FICLONE`: The copy operation will attempt to create a + * copy-on-write reflink. If the platform does not support copy-on-write, then a + * fallback copy mechanism is used. + * * `fs.constants.COPYFILE_FICLONE_FORCE`: The copy operation will attempt to + * create a copy-on-write reflink. If the platform does not support + * copy-on-write, then the operation will fail. + * + * ```js + * import { copyFileSync, constants } from 'node:fs'; + * + * // destination.txt will be created or overwritten by default. + * copyFileSync('source.txt', 'destination.txt'); + * console.log('source.txt was copied to destination.txt'); + * + * // By using COPYFILE_EXCL, the operation will fail if destination.txt exists. + * copyFileSync('source.txt', 'destination.txt', constants.COPYFILE_EXCL); + * ``` + * @since v8.5.0 + * @param src source filename to copy + * @param dest destination filename of the copy operation + * @param [mode=0] modifiers for copy operation. + */ + export function copyFileSync(src: PathLike, dest: PathLike, mode?: number): void; + /** + * Write an array of `ArrayBufferView`s to the file specified by `fd` using`writev()`. + * + * `position` is the offset from the beginning of the file where this data + * should be written. If `typeof position !== 'number'`, the data will be written + * at the current position. + * + * The callback will be given three arguments: `err`, `bytesWritten`, and`buffers`. `bytesWritten` is how many bytes were written from `buffers`. + * + * If this method is `util.promisify()` ed, it returns a promise for an`Object` with `bytesWritten` and `buffers` properties. + * + * It is unsafe to use `fs.writev()` multiple times on the same file without + * waiting for the callback. For this scenario, use {@link createWriteStream}. + * + * On Linux, positional writes don't work when the file is opened in append mode. + * The kernel ignores the position argument and always appends the data to + * the end of the file. + * @since v12.9.0 + * @param [position='null'] + */ + export function writev( + fd: number, + buffers: ReadonlyArray, + cb: (err: NodeJS.ErrnoException | null, bytesWritten: number, buffers: NodeJS.ArrayBufferView[]) => void, + ): void; + export function writev( + fd: number, + buffers: ReadonlyArray, + position: number, + cb: (err: NodeJS.ErrnoException | null, bytesWritten: number, buffers: NodeJS.ArrayBufferView[]) => void, + ): void; + export interface WriteVResult { + bytesWritten: number; + buffers: NodeJS.ArrayBufferView[]; + } + export namespace writev { + function __promisify__( + fd: number, + buffers: ReadonlyArray, + position?: number, + ): Promise; + } + /** + * For detailed information, see the documentation of the asynchronous version of + * this API: {@link writev}. + * @since v12.9.0 + * @param [position='null'] + * @return The number of bytes written. + */ + export function writevSync(fd: number, buffers: ReadonlyArray, position?: number): number; + /** + * Read from a file specified by `fd` and write to an array of `ArrayBufferView`s + * using `readv()`. + * + * `position` is the offset from the beginning of the file from where data + * should be read. If `typeof position !== 'number'`, the data will be read + * from the current position. + * + * The callback will be given three arguments: `err`, `bytesRead`, and`buffers`. `bytesRead` is how many bytes were read from the file. + * + * If this method is invoked as its `util.promisify()` ed version, it returns + * a promise for an `Object` with `bytesRead` and `buffers` properties. + * @since v13.13.0, v12.17.0 + * @param [position='null'] + */ + export function readv( + fd: number, + buffers: ReadonlyArray, + cb: (err: NodeJS.ErrnoException | null, bytesRead: number, buffers: NodeJS.ArrayBufferView[]) => void, + ): void; + export function readv( + fd: number, + buffers: ReadonlyArray, + position: number, + cb: (err: NodeJS.ErrnoException | null, bytesRead: number, buffers: NodeJS.ArrayBufferView[]) => void, + ): void; + export interface ReadVResult { + bytesRead: number; + buffers: NodeJS.ArrayBufferView[]; + } + export namespace readv { + function __promisify__( + fd: number, + buffers: ReadonlyArray, + position?: number, + ): Promise; + } + /** + * For detailed information, see the documentation of the asynchronous version of + * this API: {@link readv}. + * @since v13.13.0, v12.17.0 + * @param [position='null'] + * @return The number of bytes read. + */ + export function readvSync(fd: number, buffers: ReadonlyArray, position?: number): number; + + export interface OpenAsBlobOptions { + /** + * An optional mime type for the blob. + * + * @default 'undefined' + */ + type?: string | undefined; + } + + /** + * Returns a `Blob` whose data is backed by the given file. + * + * The file must not be modified after the `Blob` is created. Any modifications + * will cause reading the `Blob` data to fail with a `DOMException` error. + * Synchronous stat operations on the file when the `Blob` is created, and before + * each read in order to detect whether the file data has been modified on disk. + * + * ```js + * import { openAsBlob } from 'node:fs'; + * + * const blob = await openAsBlob('the.file.txt'); + * const ab = await blob.arrayBuffer(); + * blob.stream(); + * ``` + * @since v19.8.0 + * @experimental + */ + export function openAsBlob(path: PathLike, options?: OpenAsBlobOptions): Promise; + + export interface OpenDirOptions { + /** + * @default 'utf8' + */ + encoding?: BufferEncoding | undefined; + /** + * Number of directory entries that are buffered + * internally when reading from the directory. Higher values lead to better + * performance but higher memory usage. + * @default 32 + */ + bufferSize?: number | undefined; + /** + * @default false + */ + recursive?: boolean; + } + /** + * Synchronously open a directory. See [`opendir(3)`](http://man7.org/linux/man-pages/man3/opendir.3.html). + * + * Creates an `fs.Dir`, which contains all further functions for reading from + * and cleaning up the directory. + * + * The `encoding` option sets the encoding for the `path` while opening the + * directory and subsequent read operations. + * @since v12.12.0 + */ + export function opendirSync(path: PathLike, options?: OpenDirOptions): Dir; + /** + * Asynchronously open a directory. See the POSIX [`opendir(3)`](http://man7.org/linux/man-pages/man3/opendir.3.html) documentation for + * more details. + * + * Creates an `fs.Dir`, which contains all further functions for reading from + * and cleaning up the directory. + * + * The `encoding` option sets the encoding for the `path` while opening the + * directory and subsequent read operations. + * @since v12.12.0 + */ + export function opendir(path: PathLike, cb: (err: NodeJS.ErrnoException | null, dir: Dir) => void): void; + export function opendir( + path: PathLike, + options: OpenDirOptions, + cb: (err: NodeJS.ErrnoException | null, dir: Dir) => void, + ): void; + export namespace opendir { + function __promisify__(path: PathLike, options?: OpenDirOptions): Promise; + } + export interface BigIntStats extends StatsBase { + atimeNs: bigint; + mtimeNs: bigint; + ctimeNs: bigint; + birthtimeNs: bigint; + } + export interface BigIntOptions { + bigint: true; + } + export interface StatOptions { + bigint?: boolean | undefined; + } + export interface StatSyncOptions extends StatOptions { + throwIfNoEntry?: boolean | undefined; + } + interface CopyOptionsBase { + /** + * Dereference symlinks + * @default false + */ + dereference?: boolean; + /** + * When `force` is `false`, and the destination + * exists, throw an error. + * @default false + */ + errorOnExist?: boolean; + /** + * Overwrite existing file or directory. _The copy + * operation will ignore errors if you set this to false and the destination + * exists. Use the `errorOnExist` option to change this behavior. + * @default true + */ + force?: boolean; + /** + * Modifiers for copy operation. See `mode` flag of {@link copyFileSync()} + */ + mode?: number; + /** + * When `true` timestamps from `src` will + * be preserved. + * @default false + */ + preserveTimestamps?: boolean; + /** + * Copy directories recursively. + * @default false + */ + recursive?: boolean; + /** + * When true, path resolution for symlinks will be skipped + * @default false + */ + verbatimSymlinks?: boolean; + } + export interface CopyOptions extends CopyOptionsBase { + /** + * Function to filter copied files/directories. Return + * `true` to copy the item, `false` to ignore it. + */ + filter?(source: string, destination: string): boolean | Promise; + } + export interface CopySyncOptions extends CopyOptionsBase { + /** + * Function to filter copied files/directories. Return + * `true` to copy the item, `false` to ignore it. + */ + filter?(source: string, destination: string): boolean; + } + /** + * Asynchronously copies the entire directory structure from `src` to `dest`, + * including subdirectories and files. + * + * When copying a directory to another directory, globs are not supported and + * behavior is similar to `cp dir1/ dir2/`. + * @since v16.7.0 + * @experimental + * @param src source path to copy. + * @param dest destination path to copy to. + */ + export function cp( + source: string | URL, + destination: string | URL, + callback: (err: NodeJS.ErrnoException | null) => void, + ): void; + export function cp( + source: string | URL, + destination: string | URL, + opts: CopyOptions, + callback: (err: NodeJS.ErrnoException | null) => void, + ): void; + /** + * Synchronously copies the entire directory structure from `src` to `dest`, + * including subdirectories and files. + * + * When copying a directory to another directory, globs are not supported and + * behavior is similar to `cp dir1/ dir2/`. + * @since v16.7.0 + * @experimental + * @param src source path to copy. + * @param dest destination path to copy to. + */ + export function cpSync(source: string | URL, destination: string | URL, opts?: CopySyncOptions): void; +} +declare module "node:fs" { + export * from "fs"; +} diff --git a/Url-Shortner/node_modules/@types/node/ts4.8/fs/promises.d.ts b/Url-Shortner/node_modules/@types/node/ts4.8/fs/promises.d.ts new file mode 100644 index 0000000..084ee6e --- /dev/null +++ b/Url-Shortner/node_modules/@types/node/ts4.8/fs/promises.d.ts @@ -0,0 +1,1232 @@ +/** + * The `fs/promises` API provides asynchronous file system methods that return + * promises. + * + * The promise APIs use the underlying Node.js threadpool to perform file + * system operations off the event loop thread. These operations are not + * synchronized or threadsafe. Care must be taken when performing multiple + * concurrent modifications on the same file or data corruption may occur. + * @since v10.0.0 + */ +declare module "fs/promises" { + import { Abortable } from "node:events"; + import { Stream } from "node:stream"; + import { ReadableStream } from "node:stream/web"; + import { + BigIntStats, + BigIntStatsFs, + BufferEncodingOption, + constants as fsConstants, + CopyOptions, + Dir, + Dirent, + MakeDirectoryOptions, + Mode, + ObjectEncodingOptions, + OpenDirOptions, + OpenMode, + PathLike, + ReadStream, + ReadVResult, + RmDirOptions, + RmOptions, + StatFsOptions, + StatOptions, + Stats, + StatsFs, + TimeLike, + WatchEventType, + WatchOptions, + WriteStream, + WriteVResult, + } from "node:fs"; + import { Interface as ReadlineInterface } from "node:readline"; + interface FileChangeInfo { + eventType: WatchEventType; + filename: T | null; + } + interface FlagAndOpenMode { + mode?: Mode | undefined; + flag?: OpenMode | undefined; + } + interface FileReadResult { + bytesRead: number; + buffer: T; + } + interface FileReadOptions { + /** + * @default `Buffer.alloc(0xffff)` + */ + buffer?: T; + /** + * @default 0 + */ + offset?: number | null; + /** + * @default `buffer.byteLength` + */ + length?: number | null; + position?: number | null; + } + interface CreateReadStreamOptions { + encoding?: BufferEncoding | null | undefined; + autoClose?: boolean | undefined; + emitClose?: boolean | undefined; + start?: number | undefined; + end?: number | undefined; + highWaterMark?: number | undefined; + } + interface CreateWriteStreamOptions { + encoding?: BufferEncoding | null | undefined; + autoClose?: boolean | undefined; + emitClose?: boolean | undefined; + start?: number | undefined; + highWaterMark?: number | undefined; + } + interface ReadableWebStreamOptions { + /** + * Whether to open a normal or a `'bytes'` stream. + * @since v20.0.0 + */ + type?: "bytes" | undefined; + } + // TODO: Add `EventEmitter` close + interface FileHandle { + /** + * The numeric file descriptor managed by the {FileHandle} object. + * @since v10.0.0 + */ + readonly fd: number; + /** + * Alias of `filehandle.writeFile()`. + * + * When operating on file handles, the mode cannot be changed from what it was set + * to with `fsPromises.open()`. Therefore, this is equivalent to `filehandle.writeFile()`. + * @since v10.0.0 + * @return Fulfills with `undefined` upon success. + */ + appendFile( + data: string | Uint8Array, + options?: (ObjectEncodingOptions & FlagAndOpenMode) | BufferEncoding | null, + ): Promise; + /** + * Changes the ownership of the file. A wrapper for [`chown(2)`](http://man7.org/linux/man-pages/man2/chown.2.html). + * @since v10.0.0 + * @param uid The file's new owner's user id. + * @param gid The file's new group's group id. + * @return Fulfills with `undefined` upon success. + */ + chown(uid: number, gid: number): Promise; + /** + * Modifies the permissions on the file. See [`chmod(2)`](http://man7.org/linux/man-pages/man2/chmod.2.html). + * @since v10.0.0 + * @param mode the file mode bit mask. + * @return Fulfills with `undefined` upon success. + */ + chmod(mode: Mode): Promise; + /** + * Unlike the 16 KiB default `highWaterMark` for a `stream.Readable`, the stream + * returned by this method has a default `highWaterMark` of 64 KiB. + * + * `options` can include `start` and `end` values to read a range of bytes from + * the file instead of the entire file. Both `start` and `end` are inclusive and + * start counting at 0, allowed values are in the + * \[0, [`Number.MAX_SAFE_INTEGER`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MAX_SAFE_INTEGER)\] range. If `start` is + * omitted or `undefined`, `filehandle.createReadStream()` reads sequentially from + * the current file position. The `encoding` can be any one of those accepted by `Buffer`. + * + * If the `FileHandle` points to a character device that only supports blocking + * reads (such as keyboard or sound card), read operations do not finish until data + * is available. This can prevent the process from exiting and the stream from + * closing naturally. + * + * By default, the stream will emit a `'close'` event after it has been + * destroyed. Set the `emitClose` option to `false` to change this behavior. + * + * ```js + * import { open } from 'node:fs/promises'; + * + * const fd = await open('/dev/input/event0'); + * // Create a stream from some character device. + * const stream = fd.createReadStream(); + * setTimeout(() => { + * stream.close(); // This may not close the stream. + * // Artificially marking end-of-stream, as if the underlying resource had + * // indicated end-of-file by itself, allows the stream to close. + * // This does not cancel pending read operations, and if there is such an + * // operation, the process may still not be able to exit successfully + * // until it finishes. + * stream.push(null); + * stream.read(0); + * }, 100); + * ``` + * + * If `autoClose` is false, then the file descriptor won't be closed, even if + * there's an error. It is the application's responsibility to close it and make + * sure there's no file descriptor leak. If `autoClose` is set to true (default + * behavior), on `'error'` or `'end'` the file descriptor will be closed + * automatically. + * + * An example to read the last 10 bytes of a file which is 100 bytes long: + * + * ```js + * import { open } from 'node:fs/promises'; + * + * const fd = await open('sample.txt'); + * fd.createReadStream({ start: 90, end: 99 }); + * ``` + * @since v16.11.0 + */ + createReadStream(options?: CreateReadStreamOptions): ReadStream; + /** + * `options` may also include a `start` option to allow writing data at some + * position past the beginning of the file, allowed values are in the + * \[0, [`Number.MAX_SAFE_INTEGER`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MAX_SAFE_INTEGER)\] range. Modifying a file rather than + * replacing it may require the `flags` `open` option to be set to `r+` rather than + * the default `r`. The `encoding` can be any one of those accepted by `Buffer`. + * + * If `autoClose` is set to true (default behavior) on `'error'` or `'finish'`the file descriptor will be closed automatically. If `autoClose` is false, + * then the file descriptor won't be closed, even if there's an error. + * It is the application's responsibility to close it and make sure there's no + * file descriptor leak. + * + * By default, the stream will emit a `'close'` event after it has been + * destroyed. Set the `emitClose` option to `false` to change this behavior. + * @since v16.11.0 + */ + createWriteStream(options?: CreateWriteStreamOptions): WriteStream; + /** + * Forces all currently queued I/O operations associated with the file to the + * operating system's synchronized I/O completion state. Refer to the POSIX [`fdatasync(2)`](http://man7.org/linux/man-pages/man2/fdatasync.2.html) documentation for details. + * + * Unlike `filehandle.sync` this method does not flush modified metadata. + * @since v10.0.0 + * @return Fulfills with `undefined` upon success. + */ + datasync(): Promise; + /** + * Request that all data for the open file descriptor is flushed to the storage + * device. The specific implementation is operating system and device specific. + * Refer to the POSIX [`fsync(2)`](http://man7.org/linux/man-pages/man2/fsync.2.html) documentation for more detail. + * @since v10.0.0 + * @return Fulfills with `undefined` upon success. + */ + sync(): Promise; + /** + * Reads data from the file and stores that in the given buffer. + * + * If the file is not modified concurrently, the end-of-file is reached when the + * number of bytes read is zero. + * @since v10.0.0 + * @param buffer A buffer that will be filled with the file data read. + * @param offset The location in the buffer at which to start filling. + * @param length The number of bytes to read. + * @param position The location where to begin reading data from the file. If `null`, data will be read from the current file position, and the position will be updated. If `position` is an + * integer, the current file position will remain unchanged. + * @return Fulfills upon success with an object with two properties: + */ + read( + buffer: T, + offset?: number | null, + length?: number | null, + position?: number | null, + ): Promise>; + read(options?: FileReadOptions): Promise>; + /** + * Returns a `ReadableStream` that may be used to read the files data. + * + * An error will be thrown if this method is called more than once or is called + * after the `FileHandle` is closed or closing. + * + * ```js + * import { + * open, + * } from 'node:fs/promises'; + * + * const file = await open('./some/file/to/read'); + * + * for await (const chunk of file.readableWebStream()) + * console.log(chunk); + * + * await file.close(); + * ``` + * + * While the `ReadableStream` will read the file to completion, it will not + * close the `FileHandle` automatically. User code must still call the`fileHandle.close()` method. + * @since v17.0.0 + * @experimental + */ + readableWebStream(options?: ReadableWebStreamOptions): ReadableStream; + /** + * Asynchronously reads the entire contents of a file. + * + * If `options` is a string, then it specifies the `encoding`. + * + * The `FileHandle` has to support reading. + * + * If one or more `filehandle.read()` calls are made on a file handle and then a`filehandle.readFile()` call is made, the data will be read from the current + * position till the end of the file. It doesn't always read from the beginning + * of the file. + * @since v10.0.0 + * @return Fulfills upon a successful read with the contents of the file. If no encoding is specified (using `options.encoding`), the data is returned as a {Buffer} object. Otherwise, the + * data will be a string. + */ + readFile( + options?: { + encoding?: null | undefined; + flag?: OpenMode | undefined; + } | null, + ): Promise; + /** + * Asynchronously reads the entire contents of a file. The underlying file will _not_ be closed automatically. + * The `FileHandle` must have been opened for reading. + * @param options An object that may contain an optional flag. + * If a flag is not provided, it defaults to `'r'`. + */ + readFile( + options: + | { + encoding: BufferEncoding; + flag?: OpenMode | undefined; + } + | BufferEncoding, + ): Promise; + /** + * Asynchronously reads the entire contents of a file. The underlying file will _not_ be closed automatically. + * The `FileHandle` must have been opened for reading. + * @param options An object that may contain an optional flag. + * If a flag is not provided, it defaults to `'r'`. + */ + readFile( + options?: + | (ObjectEncodingOptions & { + flag?: OpenMode | undefined; + }) + | BufferEncoding + | null, + ): Promise; + /** + * Convenience method to create a `readline` interface and stream over the file. + * See `filehandle.createReadStream()` for the options. + * + * ```js + * import { open } from 'node:fs/promises'; + * + * const file = await open('./some/file/to/read'); + * + * for await (const line of file.readLines()) { + * console.log(line); + * } + * ``` + * @since v18.11.0 + */ + readLines(options?: CreateReadStreamOptions): ReadlineInterface; + /** + * @since v10.0.0 + * @return Fulfills with an {fs.Stats} for the file. + */ + stat( + opts?: StatOptions & { + bigint?: false | undefined; + }, + ): Promise; + stat( + opts: StatOptions & { + bigint: true; + }, + ): Promise; + stat(opts?: StatOptions): Promise; + /** + * Truncates the file. + * + * If the file was larger than `len` bytes, only the first `len` bytes will be + * retained in the file. + * + * The following example retains only the first four bytes of the file: + * + * ```js + * import { open } from 'node:fs/promises'; + * + * let filehandle = null; + * try { + * filehandle = await open('temp.txt', 'r+'); + * await filehandle.truncate(4); + * } finally { + * await filehandle?.close(); + * } + * ``` + * + * If the file previously was shorter than `len` bytes, it is extended, and the + * extended part is filled with null bytes (`'\0'`): + * + * If `len` is negative then `0` will be used. + * @since v10.0.0 + * @param [len=0] + * @return Fulfills with `undefined` upon success. + */ + truncate(len?: number): Promise; + /** + * Change the file system timestamps of the object referenced by the `FileHandle` then resolves the promise with no arguments upon success. + * @since v10.0.0 + */ + utimes(atime: TimeLike, mtime: TimeLike): Promise; + /** + * Asynchronously writes data to a file, replacing the file if it already exists.`data` can be a string, a buffer, an + * [AsyncIterable](https://tc39.github.io/ecma262/#sec-asynciterable-interface), or an + * [Iterable](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols#The_iterable_protocol) object. + * The promise is resolved with no arguments upon success. + * + * If `options` is a string, then it specifies the `encoding`. + * + * The `FileHandle` has to support writing. + * + * It is unsafe to use `filehandle.writeFile()` multiple times on the same file + * without waiting for the promise to be resolved (or rejected). + * + * If one or more `filehandle.write()` calls are made on a file handle and then a`filehandle.writeFile()` call is made, the data will be written from the + * current position till the end of the file. It doesn't always write from the + * beginning of the file. + * @since v10.0.0 + */ + writeFile( + data: string | Uint8Array, + options?: (ObjectEncodingOptions & FlagAndOpenMode & Abortable) | BufferEncoding | null, + ): Promise; + /** + * Write `buffer` to the file. + * + * The promise is resolved with an object containing two properties: + * + * It is unsafe to use `filehandle.write()` multiple times on the same file + * without waiting for the promise to be resolved (or rejected). For this + * scenario, use `filehandle.createWriteStream()`. + * + * On Linux, positional writes do not work when the file is opened in append mode. + * The kernel ignores the position argument and always appends the data to + * the end of the file. + * @since v10.0.0 + * @param offset The start position from within `buffer` where the data to write begins. + * @param [length=buffer.byteLength - offset] The number of bytes from `buffer` to write. + * @param [position='null'] The offset from the beginning of the file where the data from `buffer` should be written. If `position` is not a `number`, the data will be written at the current + * position. See the POSIX pwrite(2) documentation for more detail. + */ + write( + buffer: TBuffer, + offset?: number | null, + length?: number | null, + position?: number | null, + ): Promise<{ + bytesWritten: number; + buffer: TBuffer; + }>; + write( + data: string, + position?: number | null, + encoding?: BufferEncoding | null, + ): Promise<{ + bytesWritten: number; + buffer: string; + }>; + /** + * Write an array of [ArrayBufferView](https://developer.mozilla.org/en-US/docs/Web/API/ArrayBufferView) s to the file. + * + * The promise is resolved with an object containing a two properties: + * + * It is unsafe to call `writev()` multiple times on the same file without waiting + * for the promise to be resolved (or rejected). + * + * On Linux, positional writes don't work when the file is opened in append mode. + * The kernel ignores the position argument and always appends the data to + * the end of the file. + * @since v12.9.0 + * @param [position='null'] The offset from the beginning of the file where the data from `buffers` should be written. If `position` is not a `number`, the data will be written at the current + * position. + */ + writev(buffers: ReadonlyArray, position?: number): Promise; + /** + * Read from a file and write to an array of [ArrayBufferView](https://developer.mozilla.org/en-US/docs/Web/API/ArrayBufferView) s + * @since v13.13.0, v12.17.0 + * @param [position='null'] The offset from the beginning of the file where the data should be read from. If `position` is not a `number`, the data will be read from the current position. + * @return Fulfills upon success an object containing two properties: + */ + readv(buffers: ReadonlyArray, position?: number): Promise; + /** + * Closes the file handle after waiting for any pending operation on the handle to + * complete. + * + * ```js + * import { open } from 'node:fs/promises'; + * + * let filehandle; + * try { + * filehandle = await open('thefile.txt', 'r'); + * } finally { + * await filehandle?.close(); + * } + * ``` + * @since v10.0.0 + * @return Fulfills with `undefined` upon success. + */ + close(): Promise; + /** + * An alias for {@link FileHandle.close()}. + * @since v20.4.0 + */ + [Symbol.asyncDispose](): Promise; + } + const constants: typeof fsConstants; + /** + * Tests a user's permissions for the file or directory specified by `path`. + * The `mode` argument is an optional integer that specifies the accessibility + * checks to be performed. `mode` should be either the value `fs.constants.F_OK`or a mask consisting of the bitwise OR of any of `fs.constants.R_OK`,`fs.constants.W_OK`, and `fs.constants.X_OK` + * (e.g.`fs.constants.W_OK | fs.constants.R_OK`). Check `File access constants` for + * possible values of `mode`. + * + * If the accessibility check is successful, the promise is resolved with no + * value. If any of the accessibility checks fail, the promise is rejected + * with an [Error](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error) object. The following example checks if the file`/etc/passwd` can be read and + * written by the current process. + * + * ```js + * import { access, constants } from 'node:fs/promises'; + * + * try { + * await access('/etc/passwd', constants.R_OK | constants.W_OK); + * console.log('can access'); + * } catch { + * console.error('cannot access'); + * } + * ``` + * + * Using `fsPromises.access()` to check for the accessibility of a file before + * calling `fsPromises.open()` is not recommended. Doing so introduces a race + * condition, since other processes may change the file's state between the two + * calls. Instead, user code should open/read/write the file directly and handle + * the error raised if the file is not accessible. + * @since v10.0.0 + * @param [mode=fs.constants.F_OK] + * @return Fulfills with `undefined` upon success. + */ + function access(path: PathLike, mode?: number): Promise; + /** + * Asynchronously copies `src` to `dest`. By default, `dest` is overwritten if it + * already exists. + * + * No guarantees are made about the atomicity of the copy operation. If an + * error occurs after the destination file has been opened for writing, an attempt + * will be made to remove the destination. + * + * ```js + * import { copyFile, constants } from 'node:fs/promises'; + * + * try { + * await copyFile('source.txt', 'destination.txt'); + * console.log('source.txt was copied to destination.txt'); + * } catch { + * console.error('The file could not be copied'); + * } + * + * // By using COPYFILE_EXCL, the operation will fail if destination.txt exists. + * try { + * await copyFile('source.txt', 'destination.txt', constants.COPYFILE_EXCL); + * console.log('source.txt was copied to destination.txt'); + * } catch { + * console.error('The file could not be copied'); + * } + * ``` + * @since v10.0.0 + * @param src source filename to copy + * @param dest destination filename of the copy operation + * @param [mode=0] Optional modifiers that specify the behavior of the copy operation. It is possible to create a mask consisting of the bitwise OR of two or more values (e.g. + * `fs.constants.COPYFILE_EXCL | fs.constants.COPYFILE_FICLONE`) + * @return Fulfills with `undefined` upon success. + */ + function copyFile(src: PathLike, dest: PathLike, mode?: number): Promise; + /** + * Opens a `FileHandle`. + * + * Refer to the POSIX [`open(2)`](http://man7.org/linux/man-pages/man2/open.2.html) documentation for more detail. + * + * Some characters (`< > : " / \ | ? *`) are reserved under Windows as documented + * by [Naming Files, Paths, and Namespaces](https://docs.microsoft.com/en-us/windows/desktop/FileIO/naming-a-file). Under NTFS, if the filename contains + * a colon, Node.js will open a file system stream, as described by [this MSDN page](https://docs.microsoft.com/en-us/windows/desktop/FileIO/using-streams). + * @since v10.0.0 + * @param [flags='r'] See `support of file system `flags``. + * @param [mode=0o666] Sets the file mode (permission and sticky bits) if the file is created. + * @return Fulfills with a {FileHandle} object. + */ + function open(path: PathLike, flags?: string | number, mode?: Mode): Promise; + /** + * Renames `oldPath` to `newPath`. + * @since v10.0.0 + * @return Fulfills with `undefined` upon success. + */ + function rename(oldPath: PathLike, newPath: PathLike): Promise; + /** + * Truncates (shortens or extends the length) of the content at `path` to `len`bytes. + * @since v10.0.0 + * @param [len=0] + * @return Fulfills with `undefined` upon success. + */ + function truncate(path: PathLike, len?: number): Promise; + /** + * Removes the directory identified by `path`. + * + * Using `fsPromises.rmdir()` on a file (not a directory) results in the + * promise being rejected with an `ENOENT` error on Windows and an `ENOTDIR`error on POSIX. + * + * To get a behavior similar to the `rm -rf` Unix command, use `fsPromises.rm()` with options `{ recursive: true, force: true }`. + * @since v10.0.0 + * @return Fulfills with `undefined` upon success. + */ + function rmdir(path: PathLike, options?: RmDirOptions): Promise; + /** + * Removes files and directories (modeled on the standard POSIX `rm` utility). + * @since v14.14.0 + * @return Fulfills with `undefined` upon success. + */ + function rm(path: PathLike, options?: RmOptions): Promise; + /** + * Asynchronously creates a directory. + * + * The optional `options` argument can be an integer specifying `mode` (permission + * and sticky bits), or an object with a `mode` property and a `recursive`property indicating whether parent directories should be created. Calling`fsPromises.mkdir()` when `path` is a directory + * that exists results in a + * rejection only when `recursive` is false. + * + * ```js + * import { mkdir } from 'node:fs/promises'; + * + * try { + * const projectFolder = new URL('./test/project/', import.meta.url); + * const createDir = await mkdir(projectFolder, { recursive: true }); + * + * console.log(`created ${createDir}`); + * } catch (err) { + * console.error(err.message); + * } + * ``` + * @since v10.0.0 + * @return Upon success, fulfills with `undefined` if `recursive` is `false`, or the first directory path created if `recursive` is `true`. + */ + function mkdir( + path: PathLike, + options: MakeDirectoryOptions & { + recursive: true; + }, + ): Promise; + /** + * Asynchronous mkdir(2) - create a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options Either the file mode, or an object optionally specifying the file mode and whether parent folders + * should be created. If a string is passed, it is parsed as an octal integer. If not specified, defaults to `0o777`. + */ + function mkdir( + path: PathLike, + options?: + | Mode + | (MakeDirectoryOptions & { + recursive?: false | undefined; + }) + | null, + ): Promise; + /** + * Asynchronous mkdir(2) - create a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options Either the file mode, or an object optionally specifying the file mode and whether parent folders + * should be created. If a string is passed, it is parsed as an octal integer. If not specified, defaults to `0o777`. + */ + function mkdir(path: PathLike, options?: Mode | MakeDirectoryOptions | null): Promise; + /** + * Reads the contents of a directory. + * + * The optional `options` argument can be a string specifying an encoding, or an + * object with an `encoding` property specifying the character encoding to use for + * the filenames. If the `encoding` is set to `'buffer'`, the filenames returned + * will be passed as `Buffer` objects. + * + * If `options.withFileTypes` is set to `true`, the resolved array will contain `fs.Dirent` objects. + * + * ```js + * import { readdir } from 'node:fs/promises'; + * + * try { + * const files = await readdir(path); + * for (const file of files) + * console.log(file); + * } catch (err) { + * console.error(err); + * } + * ``` + * @since v10.0.0 + * @return Fulfills with an array of the names of the files in the directory excluding `'.'` and `'..'`. + */ + function readdir( + path: PathLike, + options?: + | (ObjectEncodingOptions & { + withFileTypes?: false | undefined; + recursive?: boolean | undefined; + }) + | BufferEncoding + | null, + ): Promise; + /** + * Asynchronous readdir(3) - read a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function readdir( + path: PathLike, + options: + | { + encoding: "buffer"; + withFileTypes?: false | undefined; + recursive?: boolean | undefined; + } + | "buffer", + ): Promise; + /** + * Asynchronous readdir(3) - read a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function readdir( + path: PathLike, + options?: + | (ObjectEncodingOptions & { + withFileTypes?: false | undefined; + recursive?: boolean | undefined; + }) + | BufferEncoding + | null, + ): Promise; + /** + * Asynchronous readdir(3) - read a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options If called with `withFileTypes: true` the result data will be an array of Dirent. + */ + function readdir( + path: PathLike, + options: ObjectEncodingOptions & { + withFileTypes: true; + recursive?: boolean | undefined; + }, + ): Promise; + /** + * Reads the contents of the symbolic link referred to by `path`. See the POSIX [`readlink(2)`](http://man7.org/linux/man-pages/man2/readlink.2.html) documentation for more detail. The promise is + * resolved with the`linkString` upon success. + * + * The optional `options` argument can be a string specifying an encoding, or an + * object with an `encoding` property specifying the character encoding to use for + * the link path returned. If the `encoding` is set to `'buffer'`, the link path + * returned will be passed as a `Buffer` object. + * @since v10.0.0 + * @return Fulfills with the `linkString` upon success. + */ + function readlink(path: PathLike, options?: ObjectEncodingOptions | BufferEncoding | null): Promise; + /** + * Asynchronous readlink(2) - read value of a symbolic link. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function readlink(path: PathLike, options: BufferEncodingOption): Promise; + /** + * Asynchronous readlink(2) - read value of a symbolic link. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function readlink(path: PathLike, options?: ObjectEncodingOptions | string | null): Promise; + /** + * Creates a symbolic link. + * + * The `type` argument is only used on Windows platforms and can be one of `'dir'`,`'file'`, or `'junction'`. If the `type` argument is not a string, Node.js will + * autodetect `target` type and use `'file'` or `'dir'`. If the `target` does not + * exist, `'file'` will be used. Windows junction points require the destination + * path to be absolute. When using `'junction'`, the `target` argument will + * automatically be normalized to absolute path. Junction points on NTFS volumes + * can only point to directories. + * @since v10.0.0 + * @param [type='null'] + * @return Fulfills with `undefined` upon success. + */ + function symlink(target: PathLike, path: PathLike, type?: string | null): Promise; + /** + * Equivalent to `fsPromises.stat()` unless `path` refers to a symbolic link, + * in which case the link itself is stat-ed, not the file that it refers to. + * Refer to the POSIX [`lstat(2)`](http://man7.org/linux/man-pages/man2/lstat.2.html) document for more detail. + * @since v10.0.0 + * @return Fulfills with the {fs.Stats} object for the given symbolic link `path`. + */ + function lstat( + path: PathLike, + opts?: StatOptions & { + bigint?: false | undefined; + }, + ): Promise; + function lstat( + path: PathLike, + opts: StatOptions & { + bigint: true; + }, + ): Promise; + function lstat(path: PathLike, opts?: StatOptions): Promise; + /** + * @since v10.0.0 + * @return Fulfills with the {fs.Stats} object for the given `path`. + */ + function stat( + path: PathLike, + opts?: StatOptions & { + bigint?: false | undefined; + }, + ): Promise; + function stat( + path: PathLike, + opts: StatOptions & { + bigint: true; + }, + ): Promise; + function stat(path: PathLike, opts?: StatOptions): Promise; + /** + * @since v19.6.0, v18.15.0 + * @return Fulfills with the {fs.StatFs} object for the given `path`. + */ + function statfs( + path: PathLike, + opts?: StatFsOptions & { + bigint?: false | undefined; + }, + ): Promise; + function statfs( + path: PathLike, + opts: StatFsOptions & { + bigint: true; + }, + ): Promise; + function statfs(path: PathLike, opts?: StatFsOptions): Promise; + /** + * Creates a new link from the `existingPath` to the `newPath`. See the POSIX [`link(2)`](http://man7.org/linux/man-pages/man2/link.2.html) documentation for more detail. + * @since v10.0.0 + * @return Fulfills with `undefined` upon success. + */ + function link(existingPath: PathLike, newPath: PathLike): Promise; + /** + * If `path` refers to a symbolic link, then the link is removed without affecting + * the file or directory to which that link refers. If the `path` refers to a file + * path that is not a symbolic link, the file is deleted. See the POSIX [`unlink(2)`](http://man7.org/linux/man-pages/man2/unlink.2.html) documentation for more detail. + * @since v10.0.0 + * @return Fulfills with `undefined` upon success. + */ + function unlink(path: PathLike): Promise; + /** + * Changes the permissions of a file. + * @since v10.0.0 + * @return Fulfills with `undefined` upon success. + */ + function chmod(path: PathLike, mode: Mode): Promise; + /** + * Changes the permissions on a symbolic link. + * + * This method is only implemented on macOS. + * @deprecated Since v10.0.0 + * @return Fulfills with `undefined` upon success. + */ + function lchmod(path: PathLike, mode: Mode): Promise; + /** + * Changes the ownership on a symbolic link. + * @since v10.0.0 + * @return Fulfills with `undefined` upon success. + */ + function lchown(path: PathLike, uid: number, gid: number): Promise; + /** + * Changes the access and modification times of a file in the same way as `fsPromises.utimes()`, with the difference that if the path refers to a + * symbolic link, then the link is not dereferenced: instead, the timestamps of + * the symbolic link itself are changed. + * @since v14.5.0, v12.19.0 + * @return Fulfills with `undefined` upon success. + */ + function lutimes(path: PathLike, atime: TimeLike, mtime: TimeLike): Promise; + /** + * Changes the ownership of a file. + * @since v10.0.0 + * @return Fulfills with `undefined` upon success. + */ + function chown(path: PathLike, uid: number, gid: number): Promise; + /** + * Change the file system timestamps of the object referenced by `path`. + * + * The `atime` and `mtime` arguments follow these rules: + * + * * Values can be either numbers representing Unix epoch time, `Date`s, or a + * numeric string like `'123456789.0'`. + * * If the value can not be converted to a number, or is `NaN`, `Infinity`, or`-Infinity`, an `Error` will be thrown. + * @since v10.0.0 + * @return Fulfills with `undefined` upon success. + */ + function utimes(path: PathLike, atime: TimeLike, mtime: TimeLike): Promise; + /** + * Determines the actual location of `path` using the same semantics as the`fs.realpath.native()` function. + * + * Only paths that can be converted to UTF8 strings are supported. + * + * The optional `options` argument can be a string specifying an encoding, or an + * object with an `encoding` property specifying the character encoding to use for + * the path. If the `encoding` is set to `'buffer'`, the path returned will be + * passed as a `Buffer` object. + * + * On Linux, when Node.js is linked against musl libc, the procfs file system must + * be mounted on `/proc` in order for this function to work. Glibc does not have + * this restriction. + * @since v10.0.0 + * @return Fulfills with the resolved path upon success. + */ + function realpath(path: PathLike, options?: ObjectEncodingOptions | BufferEncoding | null): Promise; + /** + * Asynchronous realpath(3) - return the canonicalized absolute pathname. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function realpath(path: PathLike, options: BufferEncodingOption): Promise; + /** + * Asynchronous realpath(3) - return the canonicalized absolute pathname. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function realpath( + path: PathLike, + options?: ObjectEncodingOptions | BufferEncoding | null, + ): Promise; + /** + * Creates a unique temporary directory. A unique directory name is generated by + * appending six random characters to the end of the provided `prefix`. Due to + * platform inconsistencies, avoid trailing `X` characters in `prefix`. Some + * platforms, notably the BSDs, can return more than six random characters, and + * replace trailing `X` characters in `prefix` with random characters. + * + * The optional `options` argument can be a string specifying an encoding, or an + * object with an `encoding` property specifying the character encoding to use. + * + * ```js + * import { mkdtemp } from 'node:fs/promises'; + * import { join } from 'node:path'; + * import { tmpdir } from 'node:os'; + * + * try { + * await mkdtemp(join(tmpdir(), 'foo-')); + * } catch (err) { + * console.error(err); + * } + * ``` + * + * The `fsPromises.mkdtemp()` method will append the six randomly selected + * characters directly to the `prefix` string. For instance, given a directory`/tmp`, if the intention is to create a temporary directory _within_`/tmp`, the`prefix` must end with a trailing + * platform-specific path separator + * (`require('node:path').sep`). + * @since v10.0.0 + * @return Fulfills with a string containing the file system path of the newly created temporary directory. + */ + function mkdtemp(prefix: string, options?: ObjectEncodingOptions | BufferEncoding | null): Promise; + /** + * Asynchronously creates a unique temporary directory. + * Generates six random characters to be appended behind a required `prefix` to create a unique temporary directory. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function mkdtemp(prefix: string, options: BufferEncodingOption): Promise; + /** + * Asynchronously creates a unique temporary directory. + * Generates six random characters to be appended behind a required `prefix` to create a unique temporary directory. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function mkdtemp(prefix: string, options?: ObjectEncodingOptions | BufferEncoding | null): Promise; + /** + * Asynchronously writes data to a file, replacing the file if it already exists.`data` can be a string, a buffer, an + * [AsyncIterable](https://tc39.github.io/ecma262/#sec-asynciterable-interface), or an + * [Iterable](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols#The_iterable_protocol) object. + * + * The `encoding` option is ignored if `data` is a buffer. + * + * If `options` is a string, then it specifies the encoding. + * + * The `mode` option only affects the newly created file. See `fs.open()` for more details. + * + * Any specified `FileHandle` has to support writing. + * + * It is unsafe to use `fsPromises.writeFile()` multiple times on the same file + * without waiting for the promise to be settled. + * + * Similarly to `fsPromises.readFile` \- `fsPromises.writeFile` is a convenience + * method that performs multiple `write` calls internally to write the buffer + * passed to it. For performance sensitive code consider using `fs.createWriteStream()` or `filehandle.createWriteStream()`. + * + * It is possible to use an `AbortSignal` to cancel an `fsPromises.writeFile()`. + * Cancelation is "best effort", and some amount of data is likely still + * to be written. + * + * ```js + * import { writeFile } from 'node:fs/promises'; + * import { Buffer } from 'node:buffer'; + * + * try { + * const controller = new AbortController(); + * const { signal } = controller; + * const data = new Uint8Array(Buffer.from('Hello Node.js')); + * const promise = writeFile('message.txt', data, { signal }); + * + * // Abort the request before the promise settles. + * controller.abort(); + * + * await promise; + * } catch (err) { + * // When a request is aborted - err is an AbortError + * console.error(err); + * } + * ``` + * + * Aborting an ongoing request does not abort individual operating + * system requests but rather the internal buffering `fs.writeFile` performs. + * @since v10.0.0 + * @param file filename or `FileHandle` + * @return Fulfills with `undefined` upon success. + */ + function writeFile( + file: PathLike | FileHandle, + data: + | string + | NodeJS.ArrayBufferView + | Iterable + | AsyncIterable + | Stream, + options?: + | (ObjectEncodingOptions & { + mode?: Mode | undefined; + flag?: OpenMode | undefined; + } & Abortable) + | BufferEncoding + | null, + ): Promise; + /** + * Asynchronously append data to a file, creating the file if it does not yet + * exist. `data` can be a string or a `Buffer`. + * + * If `options` is a string, then it specifies the `encoding`. + * + * The `mode` option only affects the newly created file. See `fs.open()` for more details. + * + * The `path` may be specified as a `FileHandle` that has been opened + * for appending (using `fsPromises.open()`). + * @since v10.0.0 + * @param path filename or {FileHandle} + * @return Fulfills with `undefined` upon success. + */ + function appendFile( + path: PathLike | FileHandle, + data: string | Uint8Array, + options?: (ObjectEncodingOptions & FlagAndOpenMode) | BufferEncoding | null, + ): Promise; + /** + * Asynchronously reads the entire contents of a file. + * + * If no encoding is specified (using `options.encoding`), the data is returned + * as a `Buffer` object. Otherwise, the data will be a string. + * + * If `options` is a string, then it specifies the encoding. + * + * When the `path` is a directory, the behavior of `fsPromises.readFile()` is + * platform-specific. On macOS, Linux, and Windows, the promise will be rejected + * with an error. On FreeBSD, a representation of the directory's contents will be + * returned. + * + * An example of reading a `package.json` file located in the same directory of the + * running code: + * + * ```js + * import { readFile } from 'node:fs/promises'; + * try { + * const filePath = new URL('./package.json', import.meta.url); + * const contents = await readFile(filePath, { encoding: 'utf8' }); + * console.log(contents); + * } catch (err) { + * console.error(err.message); + * } + * ``` + * + * It is possible to abort an ongoing `readFile` using an `AbortSignal`. If a + * request is aborted the promise returned is rejected with an `AbortError`: + * + * ```js + * import { readFile } from 'node:fs/promises'; + * + * try { + * const controller = new AbortController(); + * const { signal } = controller; + * const promise = readFile(fileName, { signal }); + * + * // Abort the request before the promise settles. + * controller.abort(); + * + * await promise; + * } catch (err) { + * // When a request is aborted - err is an AbortError + * console.error(err); + * } + * ``` + * + * Aborting an ongoing request does not abort individual operating + * system requests but rather the internal buffering `fs.readFile` performs. + * + * Any specified `FileHandle` has to support reading. + * @since v10.0.0 + * @param path filename or `FileHandle` + * @return Fulfills with the contents of the file. + */ + function readFile( + path: PathLike | FileHandle, + options?: + | ({ + encoding?: null | undefined; + flag?: OpenMode | undefined; + } & Abortable) + | null, + ): Promise; + /** + * Asynchronously reads the entire contents of a file. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * If a `FileHandle` is provided, the underlying file will _not_ be closed automatically. + * @param options An object that may contain an optional flag. + * If a flag is not provided, it defaults to `'r'`. + */ + function readFile( + path: PathLike | FileHandle, + options: + | ({ + encoding: BufferEncoding; + flag?: OpenMode | undefined; + } & Abortable) + | BufferEncoding, + ): Promise; + /** + * Asynchronously reads the entire contents of a file. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * If a `FileHandle` is provided, the underlying file will _not_ be closed automatically. + * @param options An object that may contain an optional flag. + * If a flag is not provided, it defaults to `'r'`. + */ + function readFile( + path: PathLike | FileHandle, + options?: + | ( + & ObjectEncodingOptions + & Abortable + & { + flag?: OpenMode | undefined; + } + ) + | BufferEncoding + | null, + ): Promise; + /** + * Asynchronously open a directory for iterative scanning. See the POSIX [`opendir(3)`](http://man7.org/linux/man-pages/man3/opendir.3.html) documentation for more detail. + * + * Creates an `fs.Dir`, which contains all further functions for reading from + * and cleaning up the directory. + * + * The `encoding` option sets the encoding for the `path` while opening the + * directory and subsequent read operations. + * + * Example using async iteration: + * + * ```js + * import { opendir } from 'node:fs/promises'; + * + * try { + * const dir = await opendir('./'); + * for await (const dirent of dir) + * console.log(dirent.name); + * } catch (err) { + * console.error(err); + * } + * ``` + * + * When using the async iterator, the `fs.Dir` object will be automatically + * closed after the iterator exits. + * @since v12.12.0 + * @return Fulfills with an {fs.Dir}. + */ + function opendir(path: PathLike, options?: OpenDirOptions): Promise; + /** + * Returns an async iterator that watches for changes on `filename`, where `filename`is either a file or a directory. + * + * ```js + * const { watch } = require('node:fs/promises'); + * + * const ac = new AbortController(); + * const { signal } = ac; + * setTimeout(() => ac.abort(), 10000); + * + * (async () => { + * try { + * const watcher = watch(__filename, { signal }); + * for await (const event of watcher) + * console.log(event); + * } catch (err) { + * if (err.name === 'AbortError') + * return; + * throw err; + * } + * })(); + * ``` + * + * On most platforms, `'rename'` is emitted whenever a filename appears or + * disappears in the directory. + * + * All the `caveats` for `fs.watch()` also apply to `fsPromises.watch()`. + * @since v15.9.0, v14.18.0 + * @return of objects with the properties: + */ + function watch( + filename: PathLike, + options: + | (WatchOptions & { + encoding: "buffer"; + }) + | "buffer", + ): AsyncIterable>; + /** + * Watch for changes on `filename`, where `filename` is either a file or a directory, returning an `FSWatcher`. + * @param filename A path to a file or directory. If a URL is provided, it must use the `file:` protocol. + * @param options Either the encoding for the filename provided to the listener, or an object optionally specifying encoding, persistent, and recursive options. + * If `encoding` is not supplied, the default of `'utf8'` is used. + * If `persistent` is not supplied, the default of `true` is used. + * If `recursive` is not supplied, the default of `false` is used. + */ + function watch(filename: PathLike, options?: WatchOptions | BufferEncoding): AsyncIterable>; + /** + * Watch for changes on `filename`, where `filename` is either a file or a directory, returning an `FSWatcher`. + * @param filename A path to a file or directory. If a URL is provided, it must use the `file:` protocol. + * @param options Either the encoding for the filename provided to the listener, or an object optionally specifying encoding, persistent, and recursive options. + * If `encoding` is not supplied, the default of `'utf8'` is used. + * If `persistent` is not supplied, the default of `true` is used. + * If `recursive` is not supplied, the default of `false` is used. + */ + function watch( + filename: PathLike, + options: WatchOptions | string, + ): AsyncIterable> | AsyncIterable>; + /** + * Asynchronously copies the entire directory structure from `src` to `dest`, + * including subdirectories and files. + * + * When copying a directory to another directory, globs are not supported and + * behavior is similar to `cp dir1/ dir2/`. + * @since v16.7.0 + * @experimental + * @param src source path to copy. + * @param dest destination path to copy to. + * @return Fulfills with `undefined` upon success. + */ + function cp(source: string | URL, destination: string | URL, opts?: CopyOptions): Promise; +} +declare module "node:fs/promises" { + export * from "fs/promises"; +} diff --git a/Url-Shortner/node_modules/@types/node/ts4.8/globals.d.ts b/Url-Shortner/node_modules/@types/node/ts4.8/globals.d.ts new file mode 100644 index 0000000..64d1a2e --- /dev/null +++ b/Url-Shortner/node_modules/@types/node/ts4.8/globals.d.ts @@ -0,0 +1,323 @@ +// Declare "static" methods in Error +interface ErrorConstructor { + /** Create .stack property on a target object */ + captureStackTrace(targetObject: object, constructorOpt?: Function): void; + + /** + * Optional override for formatting stack traces + * + * @see https://v8.dev/docs/stack-trace-api#customizing-stack-traces + */ + prepareStackTrace?: ((err: Error, stackTraces: NodeJS.CallSite[]) => any) | undefined; + + stackTraceLimit: number; +} + +/*-----------------------------------------------* + * * + * GLOBAL * + * * + ------------------------------------------------*/ + +// For backwards compability +interface NodeRequire extends NodeJS.Require {} +interface RequireResolve extends NodeJS.RequireResolve {} +interface NodeModule extends NodeJS.Module {} + +declare var process: NodeJS.Process; +declare var console: Console; + +declare var __filename: string; +declare var __dirname: string; + +declare var require: NodeRequire; +declare var module: NodeModule; + +// Same as module.exports +declare var exports: any; + +/** + * Only available if `--expose-gc` is passed to the process. + */ +declare var gc: undefined | (() => void); + +// #region borrowed +// from https://github.com/microsoft/TypeScript/blob/38da7c600c83e7b31193a62495239a0fe478cb67/lib/lib.webworker.d.ts#L633 until moved to separate lib +/** A controller object that allows you to abort one or more DOM requests as and when desired. */ +interface AbortController { + /** + * Returns the AbortSignal object associated with this object. + */ + + readonly signal: AbortSignal; + /** + * Invoking this method will set this object's AbortSignal's aborted flag and signal to any observers that the associated activity is to be aborted. + */ + abort(reason?: any): void; +} + +/** A signal object that allows you to communicate with a DOM request (such as a Fetch) and abort it if required via an AbortController object. */ +interface AbortSignal extends EventTarget { + /** + * Returns true if this AbortSignal's AbortController has signaled to abort, and false otherwise. + */ + readonly aborted: boolean; + readonly reason: any; + onabort: null | ((this: AbortSignal, event: Event) => any); + throwIfAborted(): void; +} + +declare var AbortController: typeof globalThis extends { onmessage: any; AbortController: infer T } ? T + : { + prototype: AbortController; + new(): AbortController; + }; + +declare var AbortSignal: typeof globalThis extends { onmessage: any; AbortSignal: infer T } ? T + : { + prototype: AbortSignal; + new(): AbortSignal; + abort(reason?: any): AbortSignal; + timeout(milliseconds: number): AbortSignal; + }; +// #endregion borrowed + +// #region Disposable +interface SymbolConstructor { + /** + * A method that is used to release resources held by an object. Called by the semantics of the `using` statement. + */ + readonly dispose: unique symbol; + + /** + * A method that is used to asynchronously release resources held by an object. Called by the semantics of the `await using` statement. + */ + readonly asyncDispose: unique symbol; +} + +interface Disposable { + [Symbol.dispose](): void; +} + +interface AsyncDisposable { + [Symbol.asyncDispose](): PromiseLike; +} +// #endregion Disposable + +// #region ArrayLike.at() +interface RelativeIndexable { + /** + * Takes an integer value and returns the item at that index, + * allowing for positive and negative integers. + * Negative integers count back from the last item in the array. + */ + at(index: number): T | undefined; +} +interface String extends RelativeIndexable {} +interface Array extends RelativeIndexable {} +interface ReadonlyArray extends RelativeIndexable {} +interface Int8Array extends RelativeIndexable {} +interface Uint8Array extends RelativeIndexable {} +interface Uint8ClampedArray extends RelativeIndexable {} +interface Int16Array extends RelativeIndexable {} +interface Uint16Array extends RelativeIndexable {} +interface Int32Array extends RelativeIndexable {} +interface Uint32Array extends RelativeIndexable {} +interface Float32Array extends RelativeIndexable {} +interface Float64Array extends RelativeIndexable {} +interface BigInt64Array extends RelativeIndexable {} +interface BigUint64Array extends RelativeIndexable {} +// #endregion ArrayLike.at() end + +/** + * @since v17.0.0 + * + * Creates a deep clone of an object. + */ +declare function structuredClone( + value: T, + transfer?: { transfer: ReadonlyArray }, +): T; + +/*----------------------------------------------* +* * +* GLOBAL INTERFACES * +* * +*-----------------------------------------------*/ +declare namespace NodeJS { + interface CallSite { + /** + * Value of "this" + */ + getThis(): unknown; + + /** + * Type of "this" as a string. + * This is the name of the function stored in the constructor field of + * "this", if available. Otherwise the object's [[Class]] internal + * property. + */ + getTypeName(): string | null; + + /** + * Current function + */ + getFunction(): Function | undefined; + + /** + * Name of the current function, typically its name property. + * If a name property is not available an attempt will be made to try + * to infer a name from the function's context. + */ + getFunctionName(): string | null; + + /** + * Name of the property [of "this" or one of its prototypes] that holds + * the current function + */ + getMethodName(): string | null; + + /** + * Name of the script [if this function was defined in a script] + */ + getFileName(): string | undefined; + + /** + * Current line number [if this function was defined in a script] + */ + getLineNumber(): number | null; + + /** + * Current column number [if this function was defined in a script] + */ + getColumnNumber(): number | null; + + /** + * A call site object representing the location where eval was called + * [if this function was created using a call to eval] + */ + getEvalOrigin(): string | undefined; + + /** + * Is this a toplevel invocation, that is, is "this" the global object? + */ + isToplevel(): boolean; + + /** + * Does this call take place in code defined by a call to eval? + */ + isEval(): boolean; + + /** + * Is this call in native V8 code? + */ + isNative(): boolean; + + /** + * Is this a constructor call? + */ + isConstructor(): boolean; + } + + interface ErrnoException extends Error { + errno?: number | undefined; + code?: string | undefined; + path?: string | undefined; + syscall?: string | undefined; + } + + interface ReadableStream extends EventEmitter { + readable: boolean; + read(size?: number): string | Buffer; + setEncoding(encoding: BufferEncoding): this; + pause(): this; + resume(): this; + isPaused(): boolean; + pipe(destination: T, options?: { end?: boolean | undefined }): T; + unpipe(destination?: WritableStream): this; + unshift(chunk: string | Uint8Array, encoding?: BufferEncoding): void; + wrap(oldStream: ReadableStream): this; + [Symbol.asyncIterator](): AsyncIterableIterator; + } + + interface WritableStream extends EventEmitter { + writable: boolean; + write(buffer: Uint8Array | string, cb?: (err?: Error | null) => void): boolean; + write(str: string, encoding?: BufferEncoding, cb?: (err?: Error | null) => void): boolean; + end(cb?: () => void): this; + end(data: string | Uint8Array, cb?: () => void): this; + end(str: string, encoding?: BufferEncoding, cb?: () => void): this; + } + + interface ReadWriteStream extends ReadableStream, WritableStream {} + + interface RefCounted { + ref(): this; + unref(): this; + } + + type TypedArray = + | Uint8Array + | Uint8ClampedArray + | Uint16Array + | Uint32Array + | Int8Array + | Int16Array + | Int32Array + | BigUint64Array + | BigInt64Array + | Float32Array + | Float64Array; + type ArrayBufferView = TypedArray | DataView; + + interface Require { + (id: string): any; + resolve: RequireResolve; + cache: Dict; + /** + * @deprecated + */ + extensions: RequireExtensions; + main: Module | undefined; + } + + interface RequireResolve { + (id: string, options?: { paths?: string[] | undefined }): string; + paths(request: string): string[] | null; + } + + interface RequireExtensions extends Dict<(m: Module, filename: string) => any> { + ".js": (m: Module, filename: string) => any; + ".json": (m: Module, filename: string) => any; + ".node": (m: Module, filename: string) => any; + } + interface Module { + /** + * `true` if the module is running during the Node.js preload + */ + isPreloading: boolean; + exports: any; + require: Require; + id: string; + filename: string; + loaded: boolean; + /** @deprecated since v14.6.0 Please use `require.main` and `module.children` instead. */ + parent: Module | null | undefined; + children: Module[]; + /** + * @since v11.14.0 + * + * The directory name of the module. This is usually the same as the path.dirname() of the module.id. + */ + path: string; + paths: string[]; + } + + interface Dict { + [key: string]: T | undefined; + } + + interface ReadOnlyDict { + readonly [key: string]: T | undefined; + } +} diff --git a/Url-Shortner/node_modules/@types/node/ts4.8/globals.global.d.ts b/Url-Shortner/node_modules/@types/node/ts4.8/globals.global.d.ts new file mode 100644 index 0000000..ef1198c --- /dev/null +++ b/Url-Shortner/node_modules/@types/node/ts4.8/globals.global.d.ts @@ -0,0 +1 @@ +declare var global: typeof globalThis; diff --git a/Url-Shortner/node_modules/@types/node/ts4.8/http.d.ts b/Url-Shortner/node_modules/@types/node/ts4.8/http.d.ts new file mode 100644 index 0000000..bdc446c --- /dev/null +++ b/Url-Shortner/node_modules/@types/node/ts4.8/http.d.ts @@ -0,0 +1,1808 @@ +/** + * To use the HTTP server and client one must `require('node:http')`. + * + * The HTTP interfaces in Node.js are designed to support many features + * of the protocol which have been traditionally difficult to use. + * In particular, large, possibly chunk-encoded, messages. The interface is + * careful to never buffer entire requests or responses, so the + * user is able to stream data. + * + * HTTP message headers are represented by an object like this: + * + * ```js + * { 'content-length': '123', + * 'content-type': 'text/plain', + * 'connection': 'keep-alive', + * 'host': 'example.com', + * 'accept': '*' } + * ``` + * + * Keys are lowercased. Values are not modified. + * + * In order to support the full spectrum of possible HTTP applications, the Node.js + * HTTP API is very low-level. It deals with stream handling and message + * parsing only. It parses a message into headers and body but it does not + * parse the actual headers or the body. + * + * See `message.headers` for details on how duplicate headers are handled. + * + * The raw headers as they were received are retained in the `rawHeaders`property, which is an array of `[key, value, key2, value2, ...]`. For + * example, the previous message header object might have a `rawHeaders`list like the following: + * + * ```js + * [ 'ConTent-Length', '123456', + * 'content-LENGTH', '123', + * 'content-type', 'text/plain', + * 'CONNECTION', 'keep-alive', + * 'Host', 'example.com', + * 'accepT', '*' ] + * ``` + * @see [source](https://github.com/nodejs/node/blob/v20.2.0/lib/http.js) + */ +declare module "http" { + import * as stream from "node:stream"; + import { URL } from "node:url"; + import { LookupOptions } from "node:dns"; + import { EventEmitter } from "node:events"; + import { LookupFunction, Server as NetServer, Socket, TcpSocketConnectOpts } from "node:net"; + // incoming headers will never contain number + interface IncomingHttpHeaders extends NodeJS.Dict { + accept?: string | undefined; + "accept-language"?: string | undefined; + "accept-patch"?: string | undefined; + "accept-ranges"?: string | undefined; + "access-control-allow-credentials"?: string | undefined; + "access-control-allow-headers"?: string | undefined; + "access-control-allow-methods"?: string | undefined; + "access-control-allow-origin"?: string | undefined; + "access-control-expose-headers"?: string | undefined; + "access-control-max-age"?: string | undefined; + "access-control-request-headers"?: string | undefined; + "access-control-request-method"?: string | undefined; + age?: string | undefined; + allow?: string | undefined; + "alt-svc"?: string | undefined; + authorization?: string | undefined; + "cache-control"?: string | undefined; + connection?: string | undefined; + "content-disposition"?: string | undefined; + "content-encoding"?: string | undefined; + "content-language"?: string | undefined; + "content-length"?: string | undefined; + "content-location"?: string | undefined; + "content-range"?: string | undefined; + "content-type"?: string | undefined; + cookie?: string | undefined; + date?: string | undefined; + etag?: string | undefined; + expect?: string | undefined; + expires?: string | undefined; + forwarded?: string | undefined; + from?: string | undefined; + host?: string | undefined; + "if-match"?: string | undefined; + "if-modified-since"?: string | undefined; + "if-none-match"?: string | undefined; + "if-unmodified-since"?: string | undefined; + "last-modified"?: string | undefined; + location?: string | undefined; + origin?: string | undefined; + pragma?: string | undefined; + "proxy-authenticate"?: string | undefined; + "proxy-authorization"?: string | undefined; + "public-key-pins"?: string | undefined; + range?: string | undefined; + referer?: string | undefined; + "retry-after"?: string | undefined; + "sec-websocket-accept"?: string | undefined; + "sec-websocket-extensions"?: string | undefined; + "sec-websocket-key"?: string | undefined; + "sec-websocket-protocol"?: string | undefined; + "sec-websocket-version"?: string | undefined; + "set-cookie"?: string[] | undefined; + "strict-transport-security"?: string | undefined; + tk?: string | undefined; + trailer?: string | undefined; + "transfer-encoding"?: string | undefined; + upgrade?: string | undefined; + "user-agent"?: string | undefined; + vary?: string | undefined; + via?: string | undefined; + warning?: string | undefined; + "www-authenticate"?: string | undefined; + } + // outgoing headers allows numbers (as they are converted internally to strings) + type OutgoingHttpHeader = number | string | string[]; + interface OutgoingHttpHeaders extends NodeJS.Dict {} + interface ClientRequestArgs { + _defaultAgent?: Agent | undefined; + agent?: Agent | boolean | undefined; + auth?: string | null | undefined; + // https://github.com/nodejs/node/blob/master/lib/_http_client.js#L278 + createConnection?: + | ((options: ClientRequestArgs, oncreate: (err: Error, socket: Socket) => void) => Socket) + | undefined; + defaultPort?: number | string | undefined; + family?: number | undefined; + headers?: OutgoingHttpHeaders | undefined; + hints?: LookupOptions["hints"]; + host?: string | null | undefined; + hostname?: string | null | undefined; + insecureHTTPParser?: boolean | undefined; + localAddress?: string | undefined; + localPort?: number | undefined; + lookup?: LookupFunction | undefined; + /** + * @default 16384 + */ + maxHeaderSize?: number | undefined; + method?: string | undefined; + path?: string | null | undefined; + port?: number | string | null | undefined; + protocol?: string | null | undefined; + setHost?: boolean | undefined; + signal?: AbortSignal | undefined; + socketPath?: string | undefined; + timeout?: number | undefined; + uniqueHeaders?: Array | undefined; + joinDuplicateHeaders?: boolean; + } + interface ServerOptions< + Request extends typeof IncomingMessage = typeof IncomingMessage, + Response extends typeof ServerResponse = typeof ServerResponse, + > { + /** + * Specifies the `IncomingMessage` class to be used. Useful for extending the original `IncomingMessage`. + */ + IncomingMessage?: Request | undefined; + /** + * Specifies the `ServerResponse` class to be used. Useful for extending the original `ServerResponse`. + */ + ServerResponse?: Response | undefined; + /** + * Sets the timeout value in milliseconds for receiving the entire request from the client. + * @see Server.requestTimeout for more information. + * @default 300000 + * @since v18.0.0 + */ + requestTimeout?: number | undefined; + /** + * It joins the field line values of multiple headers in a request with `, ` instead of discarding the duplicates. + * @default false + * @since v18.14.0 + */ + joinDuplicateHeaders?: boolean; + /** + * The number of milliseconds of inactivity a server needs to wait for additional incoming data, + * after it has finished writing the last response, before a socket will be destroyed. + * @see Server.keepAliveTimeout for more information. + * @default 5000 + * @since v18.0.0 + */ + keepAliveTimeout?: number | undefined; + /** + * Sets the interval value in milliseconds to check for request and headers timeout in incomplete requests. + * @default 30000 + */ + connectionsCheckingInterval?: number | undefined; + /** + * Optionally overrides all `socket`s' `readableHighWaterMark` and `writableHighWaterMark`. + * This affects `highWaterMark` property of both `IncomingMessage` and `ServerResponse`. + * Default: @see stream.getDefaultHighWaterMark(). + * @since v20.1.0 + */ + highWaterMark?: number | undefined; + /** + * Use an insecure HTTP parser that accepts invalid HTTP headers when `true`. + * Using the insecure parser should be avoided. + * See --insecure-http-parser for more information. + * @default false + */ + insecureHTTPParser?: boolean | undefined; + /** + * Optionally overrides the value of + * `--max-http-header-size` for requests received by this server, i.e. + * the maximum length of request headers in bytes. + * @default 16384 + * @since v13.3.0 + */ + maxHeaderSize?: number | undefined; + /** + * If set to `true`, it disables the use of Nagle's algorithm immediately after a new incoming connection is received. + * @default true + * @since v16.5.0 + */ + noDelay?: boolean | undefined; + /** + * If set to `true`, it enables keep-alive functionality on the socket immediately after a new incoming connection is received, + * similarly on what is done in `socket.setKeepAlive([enable][, initialDelay])`. + * @default false + * @since v16.5.0 + */ + keepAlive?: boolean | undefined; + /** + * If set to a positive number, it sets the initial delay before the first keepalive probe is sent on an idle socket. + * @default 0 + * @since v16.5.0 + */ + keepAliveInitialDelay?: number | undefined; + /** + * A list of response headers that should be sent only once. + * If the header's value is an array, the items will be joined using `; `. + */ + uniqueHeaders?: Array | undefined; + } + type RequestListener< + Request extends typeof IncomingMessage = typeof IncomingMessage, + Response extends typeof ServerResponse = typeof ServerResponse, + > = (req: InstanceType, res: InstanceType & { req: InstanceType }) => void; + /** + * @since v0.1.17 + */ + class Server< + Request extends typeof IncomingMessage = typeof IncomingMessage, + Response extends typeof ServerResponse = typeof ServerResponse, + > extends NetServer { + constructor(requestListener?: RequestListener); + constructor(options: ServerOptions, requestListener?: RequestListener); + /** + * Sets the timeout value for sockets, and emits a `'timeout'` event on + * the Server object, passing the socket as an argument, if a timeout + * occurs. + * + * If there is a `'timeout'` event listener on the Server object, then it + * will be called with the timed-out socket as an argument. + * + * By default, the Server does not timeout sockets. However, if a callback + * is assigned to the Server's `'timeout'` event, timeouts must be handled + * explicitly. + * @since v0.9.12 + * @param [msecs=0 (no timeout)] + */ + setTimeout(msecs?: number, callback?: () => void): this; + setTimeout(callback: () => void): this; + /** + * Limits maximum incoming headers count. If set to 0, no limit will be applied. + * @since v0.7.0 + */ + maxHeadersCount: number | null; + /** + * The maximum number of requests socket can handle + * before closing keep alive connection. + * + * A value of `0` will disable the limit. + * + * When the limit is reached it will set the `Connection` header value to `close`, + * but will not actually close the connection, subsequent requests sent + * after the limit is reached will get `503 Service Unavailable` as a response. + * @since v16.10.0 + */ + maxRequestsPerSocket: number | null; + /** + * The number of milliseconds of inactivity before a socket is presumed + * to have timed out. + * + * A value of `0` will disable the timeout behavior on incoming connections. + * + * The socket timeout logic is set up on connection, so changing this + * value only affects new connections to the server, not any existing connections. + * @since v0.9.12 + */ + timeout: number; + /** + * Limit the amount of time the parser will wait to receive the complete HTTP + * headers. + * + * If the timeout expires, the server responds with status 408 without + * forwarding the request to the request listener and then closes the connection. + * + * It must be set to a non-zero value (e.g. 120 seconds) to protect against + * potential Denial-of-Service attacks in case the server is deployed without a + * reverse proxy in front. + * @since v11.3.0, v10.14.0 + */ + headersTimeout: number; + /** + * The number of milliseconds of inactivity a server needs to wait for additional + * incoming data, after it has finished writing the last response, before a socket + * will be destroyed. If the server receives new data before the keep-alive + * timeout has fired, it will reset the regular inactivity timeout, i.e.,`server.timeout`. + * + * A value of `0` will disable the keep-alive timeout behavior on incoming + * connections. + * A value of `0` makes the http server behave similarly to Node.js versions prior + * to 8.0.0, which did not have a keep-alive timeout. + * + * The socket timeout logic is set up on connection, so changing this value only + * affects new connections to the server, not any existing connections. + * @since v8.0.0 + */ + keepAliveTimeout: number; + /** + * Sets the timeout value in milliseconds for receiving the entire request from + * the client. + * + * If the timeout expires, the server responds with status 408 without + * forwarding the request to the request listener and then closes the connection. + * + * It must be set to a non-zero value (e.g. 120 seconds) to protect against + * potential Denial-of-Service attacks in case the server is deployed without a + * reverse proxy in front. + * @since v14.11.0 + */ + requestTimeout: number; + /** + * Closes all connections connected to this server. + * @since v18.2.0 + */ + closeAllConnections(): void; + /** + * Closes all connections connected to this server which are not sending a request + * or waiting for a response. + * @since v18.2.0 + */ + closeIdleConnections(): void; + addListener(event: string, listener: (...args: any[]) => void): this; + addListener(event: "close", listener: () => void): this; + addListener(event: "connection", listener: (socket: Socket) => void): this; + addListener(event: "error", listener: (err: Error) => void): this; + addListener(event: "listening", listener: () => void): this; + addListener(event: "checkContinue", listener: RequestListener): this; + addListener(event: "checkExpectation", listener: RequestListener): this; + addListener(event: "clientError", listener: (err: Error, socket: stream.Duplex) => void): this; + addListener( + event: "connect", + listener: (req: InstanceType, socket: stream.Duplex, head: Buffer) => void, + ): this; + addListener(event: "dropRequest", listener: (req: InstanceType, socket: stream.Duplex) => void): this; + addListener(event: "request", listener: RequestListener): this; + addListener( + event: "upgrade", + listener: (req: InstanceType, socket: stream.Duplex, head: Buffer) => void, + ): this; + emit(event: string, ...args: any[]): boolean; + emit(event: "close"): boolean; + emit(event: "connection", socket: Socket): boolean; + emit(event: "error", err: Error): boolean; + emit(event: "listening"): boolean; + emit( + event: "checkContinue", + req: InstanceType, + res: InstanceType & { req: InstanceType }, + ): boolean; + emit( + event: "checkExpectation", + req: InstanceType, + res: InstanceType & { req: InstanceType }, + ): boolean; + emit(event: "clientError", err: Error, socket: stream.Duplex): boolean; + emit(event: "connect", req: InstanceType, socket: stream.Duplex, head: Buffer): boolean; + emit(event: "dropRequest", req: InstanceType, socket: stream.Duplex): boolean; + emit( + event: "request", + req: InstanceType, + res: InstanceType & { req: InstanceType }, + ): boolean; + emit(event: "upgrade", req: InstanceType, socket: stream.Duplex, head: Buffer): boolean; + on(event: string, listener: (...args: any[]) => void): this; + on(event: "close", listener: () => void): this; + on(event: "connection", listener: (socket: Socket) => void): this; + on(event: "error", listener: (err: Error) => void): this; + on(event: "listening", listener: () => void): this; + on(event: "checkContinue", listener: RequestListener): this; + on(event: "checkExpectation", listener: RequestListener): this; + on(event: "clientError", listener: (err: Error, socket: stream.Duplex) => void): this; + on(event: "connect", listener: (req: InstanceType, socket: stream.Duplex, head: Buffer) => void): this; + on(event: "dropRequest", listener: (req: InstanceType, socket: stream.Duplex) => void): this; + on(event: "request", listener: RequestListener): this; + on(event: "upgrade", listener: (req: InstanceType, socket: stream.Duplex, head: Buffer) => void): this; + once(event: string, listener: (...args: any[]) => void): this; + once(event: "close", listener: () => void): this; + once(event: "connection", listener: (socket: Socket) => void): this; + once(event: "error", listener: (err: Error) => void): this; + once(event: "listening", listener: () => void): this; + once(event: "checkContinue", listener: RequestListener): this; + once(event: "checkExpectation", listener: RequestListener): this; + once(event: "clientError", listener: (err: Error, socket: stream.Duplex) => void): this; + once( + event: "connect", + listener: (req: InstanceType, socket: stream.Duplex, head: Buffer) => void, + ): this; + once(event: "dropRequest", listener: (req: InstanceType, socket: stream.Duplex) => void): this; + once(event: "request", listener: RequestListener): this; + once( + event: "upgrade", + listener: (req: InstanceType, socket: stream.Duplex, head: Buffer) => void, + ): this; + prependListener(event: string, listener: (...args: any[]) => void): this; + prependListener(event: "close", listener: () => void): this; + prependListener(event: "connection", listener: (socket: Socket) => void): this; + prependListener(event: "error", listener: (err: Error) => void): this; + prependListener(event: "listening", listener: () => void): this; + prependListener(event: "checkContinue", listener: RequestListener): this; + prependListener(event: "checkExpectation", listener: RequestListener): this; + prependListener(event: "clientError", listener: (err: Error, socket: stream.Duplex) => void): this; + prependListener( + event: "connect", + listener: (req: InstanceType, socket: stream.Duplex, head: Buffer) => void, + ): this; + prependListener( + event: "dropRequest", + listener: (req: InstanceType, socket: stream.Duplex) => void, + ): this; + prependListener(event: "request", listener: RequestListener): this; + prependListener( + event: "upgrade", + listener: (req: InstanceType, socket: stream.Duplex, head: Buffer) => void, + ): this; + prependOnceListener(event: string, listener: (...args: any[]) => void): this; + prependOnceListener(event: "close", listener: () => void): this; + prependOnceListener(event: "connection", listener: (socket: Socket) => void): this; + prependOnceListener(event: "error", listener: (err: Error) => void): this; + prependOnceListener(event: "listening", listener: () => void): this; + prependOnceListener(event: "checkContinue", listener: RequestListener): this; + prependOnceListener(event: "checkExpectation", listener: RequestListener): this; + prependOnceListener(event: "clientError", listener: (err: Error, socket: stream.Duplex) => void): this; + prependOnceListener( + event: "connect", + listener: (req: InstanceType, socket: stream.Duplex, head: Buffer) => void, + ): this; + prependOnceListener( + event: "dropRequest", + listener: (req: InstanceType, socket: stream.Duplex) => void, + ): this; + prependOnceListener(event: "request", listener: RequestListener): this; + prependOnceListener( + event: "upgrade", + listener: (req: InstanceType, socket: stream.Duplex, head: Buffer) => void, + ): this; + } + /** + * This class serves as the parent class of {@link ClientRequest} and {@link ServerResponse}. It is an abstract outgoing message from + * the perspective of the participants of an HTTP transaction. + * @since v0.1.17 + */ + class OutgoingMessage extends stream.Writable { + readonly req: Request; + chunkedEncoding: boolean; + shouldKeepAlive: boolean; + useChunkedEncodingByDefault: boolean; + sendDate: boolean; + /** + * @deprecated Use `writableEnded` instead. + */ + finished: boolean; + /** + * Read-only. `true` if the headers were sent, otherwise `false`. + * @since v0.9.3 + */ + readonly headersSent: boolean; + /** + * Alias of `outgoingMessage.socket`. + * @since v0.3.0 + * @deprecated Since v15.12.0,v14.17.1 - Use `socket` instead. + */ + readonly connection: Socket | null; + /** + * Reference to the underlying socket. Usually, users will not want to access + * this property. + * + * After calling `outgoingMessage.end()`, this property will be nulled. + * @since v0.3.0 + */ + readonly socket: Socket | null; + constructor(); + /** + * Once a socket is associated with the message and is connected,`socket.setTimeout()` will be called with `msecs` as the first parameter. + * @since v0.9.12 + * @param callback Optional function to be called when a timeout occurs. Same as binding to the `timeout` event. + */ + setTimeout(msecs: number, callback?: () => void): this; + /** + * Sets a single header value. If the header already exists in the to-be-sent + * headers, its value will be replaced. Use an array of strings to send multiple + * headers with the same name. + * @since v0.4.0 + * @param name Header name + * @param value Header value + */ + setHeader(name: string, value: number | string | ReadonlyArray): this; + /** + * Append a single header value for the header object. + * + * If the value is an array, this is equivalent of calling this method multiple + * times. + * + * If there were no previous value for the header, this is equivalent of calling `outgoingMessage.setHeader(name, value)`. + * + * Depending of the value of `options.uniqueHeaders` when the client request or the + * server were created, this will end up in the header being sent multiple times or + * a single time with values joined using `; `. + * @since v18.3.0, v16.17.0 + * @param name Header name + * @param value Header value + */ + appendHeader(name: string, value: string | ReadonlyArray): this; + /** + * Gets the value of the HTTP header with the given name. If that header is not + * set, the returned value will be `undefined`. + * @since v0.4.0 + * @param name Name of header + */ + getHeader(name: string): number | string | string[] | undefined; + /** + * Returns a shallow copy of the current outgoing headers. Since a shallow + * copy is used, array values may be mutated without additional calls to + * various header-related HTTP module methods. The keys of the returned + * object are the header names and the values are the respective header + * values. All header names are lowercase. + * + * The object returned by the `outgoingMessage.getHeaders()` method does + * not prototypically inherit from the JavaScript `Object`. This means that + * typical `Object` methods such as `obj.toString()`, `obj.hasOwnProperty()`, + * and others are not defined and will not work. + * + * ```js + * outgoingMessage.setHeader('Foo', 'bar'); + * outgoingMessage.setHeader('Set-Cookie', ['foo=bar', 'bar=baz']); + * + * const headers = outgoingMessage.getHeaders(); + * // headers === { foo: 'bar', 'set-cookie': ['foo=bar', 'bar=baz'] } + * ``` + * @since v7.7.0 + */ + getHeaders(): OutgoingHttpHeaders; + /** + * Returns an array containing the unique names of the current outgoing headers. + * All names are lowercase. + * @since v7.7.0 + */ + getHeaderNames(): string[]; + /** + * Returns `true` if the header identified by `name` is currently set in the + * outgoing headers. The header name is case-insensitive. + * + * ```js + * const hasContentType = outgoingMessage.hasHeader('content-type'); + * ``` + * @since v7.7.0 + */ + hasHeader(name: string): boolean; + /** + * Removes a header that is queued for implicit sending. + * + * ```js + * outgoingMessage.removeHeader('Content-Encoding'); + * ``` + * @since v0.4.0 + * @param name Header name + */ + removeHeader(name: string): void; + /** + * Adds HTTP trailers (headers but at the end of the message) to the message. + * + * Trailers will **only** be emitted if the message is chunked encoded. If not, + * the trailers will be silently discarded. + * + * HTTP requires the `Trailer` header to be sent to emit trailers, + * with a list of header field names in its value, e.g. + * + * ```js + * message.writeHead(200, { 'Content-Type': 'text/plain', + * 'Trailer': 'Content-MD5' }); + * message.write(fileData); + * message.addTrailers({ 'Content-MD5': '7895bf4b8828b55ceaf47747b4bca667' }); + * message.end(); + * ``` + * + * Attempting to set a header field name or value that contains invalid characters + * will result in a `TypeError` being thrown. + * @since v0.3.0 + */ + addTrailers(headers: OutgoingHttpHeaders | ReadonlyArray<[string, string]>): void; + /** + * Flushes the message headers. + * + * For efficiency reason, Node.js normally buffers the message headers + * until `outgoingMessage.end()` is called or the first chunk of message data + * is written. It then tries to pack the headers and data into a single TCP + * packet. + * + * It is usually desired (it saves a TCP round-trip), but not when the first + * data is not sent until possibly much later. `outgoingMessage.flushHeaders()`bypasses the optimization and kickstarts the message. + * @since v1.6.0 + */ + flushHeaders(): void; + } + /** + * This object is created internally by an HTTP server, not by the user. It is + * passed as the second parameter to the `'request'` event. + * @since v0.1.17 + */ + class ServerResponse extends OutgoingMessage { + /** + * When using implicit headers (not calling `response.writeHead()` explicitly), + * this property controls the status code that will be sent to the client when + * the headers get flushed. + * + * ```js + * response.statusCode = 404; + * ``` + * + * After response header was sent to the client, this property indicates the + * status code which was sent out. + * @since v0.4.0 + */ + statusCode: number; + /** + * When using implicit headers (not calling `response.writeHead()` explicitly), + * this property controls the status message that will be sent to the client when + * the headers get flushed. If this is left as `undefined` then the standard + * message for the status code will be used. + * + * ```js + * response.statusMessage = 'Not found'; + * ``` + * + * After response header was sent to the client, this property indicates the + * status message which was sent out. + * @since v0.11.8 + */ + statusMessage: string; + /** + * If set to `true`, Node.js will check whether the `Content-Length`header value and the size of the body, in bytes, are equal. + * Mismatching the `Content-Length` header value will result + * in an `Error` being thrown, identified by `code:``'ERR_HTTP_CONTENT_LENGTH_MISMATCH'`. + * @since v18.10.0, v16.18.0 + */ + strictContentLength: boolean; + constructor(req: Request); + assignSocket(socket: Socket): void; + detachSocket(socket: Socket): void; + /** + * Sends an HTTP/1.1 100 Continue message to the client, indicating that + * the request body should be sent. See the `'checkContinue'` event on`Server`. + * @since v0.3.0 + */ + writeContinue(callback?: () => void): void; + /** + * Sends an HTTP/1.1 103 Early Hints message to the client with a Link header, + * indicating that the user agent can preload/preconnect the linked resources. + * The `hints` is an object containing the values of headers to be sent with + * early hints message. The optional `callback` argument will be called when + * the response message has been written. + * + * **Example** + * + * ```js + * const earlyHintsLink = '; rel=preload; as=style'; + * response.writeEarlyHints({ + * 'link': earlyHintsLink, + * }); + * + * const earlyHintsLinks = [ + * '; rel=preload; as=style', + * '; rel=preload; as=script', + * ]; + * response.writeEarlyHints({ + * 'link': earlyHintsLinks, + * 'x-trace-id': 'id for diagnostics', + * }); + * + * const earlyHintsCallback = () => console.log('early hints message sent'); + * response.writeEarlyHints({ + * 'link': earlyHintsLinks, + * }, earlyHintsCallback); + * ``` + * @since v18.11.0 + * @param hints An object containing the values of headers + * @param callback Will be called when the response message has been written + */ + writeEarlyHints(hints: Record, callback?: () => void): void; + /** + * Sends a response header to the request. The status code is a 3-digit HTTP + * status code, like `404`. The last argument, `headers`, are the response headers. + * Optionally one can give a human-readable `statusMessage` as the second + * argument. + * + * `headers` may be an `Array` where the keys and values are in the same list. + * It is _not_ a list of tuples. So, the even-numbered offsets are key values, + * and the odd-numbered offsets are the associated values. The array is in the same + * format as `request.rawHeaders`. + * + * Returns a reference to the `ServerResponse`, so that calls can be chained. + * + * ```js + * const body = 'hello world'; + * response + * .writeHead(200, { + * 'Content-Length': Buffer.byteLength(body), + * 'Content-Type': 'text/plain', + * }) + * .end(body); + * ``` + * + * This method must only be called once on a message and it must + * be called before `response.end()` is called. + * + * If `response.write()` or `response.end()` are called before calling + * this, the implicit/mutable headers will be calculated and call this function. + * + * When headers have been set with `response.setHeader()`, they will be merged + * with any headers passed to `response.writeHead()`, with the headers passed + * to `response.writeHead()` given precedence. + * + * If this method is called and `response.setHeader()` has not been called, + * it will directly write the supplied header values onto the network channel + * without caching internally, and the `response.getHeader()` on the header + * will not yield the expected result. If progressive population of headers is + * desired with potential future retrieval and modification, use `response.setHeader()` instead. + * + * ```js + * // Returns content-type = text/plain + * const server = http.createServer((req, res) => { + * res.setHeader('Content-Type', 'text/html'); + * res.setHeader('X-Foo', 'bar'); + * res.writeHead(200, { 'Content-Type': 'text/plain' }); + * res.end('ok'); + * }); + * ``` + * + * `Content-Length` is read in bytes, not characters. Use `Buffer.byteLength()` to determine the length of the body in bytes. Node.js + * will check whether `Content-Length` and the length of the body which has + * been transmitted are equal or not. + * + * Attempting to set a header field name or value that contains invalid characters + * will result in a \[`Error`\]\[\] being thrown. + * @since v0.1.30 + */ + writeHead( + statusCode: number, + statusMessage?: string, + headers?: OutgoingHttpHeaders | OutgoingHttpHeader[], + ): this; + writeHead(statusCode: number, headers?: OutgoingHttpHeaders | OutgoingHttpHeader[]): this; + /** + * Sends a HTTP/1.1 102 Processing message to the client, indicating that + * the request body should be sent. + * @since v10.0.0 + */ + writeProcessing(): void; + } + interface InformationEvent { + statusCode: number; + statusMessage: string; + httpVersion: string; + httpVersionMajor: number; + httpVersionMinor: number; + headers: IncomingHttpHeaders; + rawHeaders: string[]; + } + /** + * This object is created internally and returned from {@link request}. It + * represents an _in-progress_ request whose header has already been queued. The + * header is still mutable using the `setHeader(name, value)`,`getHeader(name)`, `removeHeader(name)` API. The actual header will + * be sent along with the first data chunk or when calling `request.end()`. + * + * To get the response, add a listener for `'response'` to the request object.`'response'` will be emitted from the request object when the response + * headers have been received. The `'response'` event is executed with one + * argument which is an instance of {@link IncomingMessage}. + * + * During the `'response'` event, one can add listeners to the + * response object; particularly to listen for the `'data'` event. + * + * If no `'response'` handler is added, then the response will be + * entirely discarded. However, if a `'response'` event handler is added, + * then the data from the response object **must** be consumed, either by + * calling `response.read()` whenever there is a `'readable'` event, or + * by adding a `'data'` handler, or by calling the `.resume()` method. + * Until the data is consumed, the `'end'` event will not fire. Also, until + * the data is read it will consume memory that can eventually lead to a + * 'process out of memory' error. + * + * For backward compatibility, `res` will only emit `'error'` if there is an`'error'` listener registered. + * + * Set `Content-Length` header to limit the response body size. + * If `response.strictContentLength` is set to `true`, mismatching the`Content-Length` header value will result in an `Error` being thrown, + * identified by `code:``'ERR_HTTP_CONTENT_LENGTH_MISMATCH'`. + * + * `Content-Length` value should be in bytes, not characters. Use `Buffer.byteLength()` to determine the length of the body in bytes. + * @since v0.1.17 + */ + class ClientRequest extends OutgoingMessage { + /** + * The `request.aborted` property will be `true` if the request has + * been aborted. + * @since v0.11.14 + * @deprecated Since v17.0.0,v16.12.0 - Check `destroyed` instead. + */ + aborted: boolean; + /** + * The request host. + * @since v14.5.0, v12.19.0 + */ + host: string; + /** + * The request protocol. + * @since v14.5.0, v12.19.0 + */ + protocol: string; + /** + * When sending request through a keep-alive enabled agent, the underlying socket + * might be reused. But if server closes connection at unfortunate time, client + * may run into a 'ECONNRESET' error. + * + * ```js + * import http from 'node:http'; + * + * // Server has a 5 seconds keep-alive timeout by default + * http + * .createServer((req, res) => { + * res.write('hello\n'); + * res.end(); + * }) + * .listen(3000); + * + * setInterval(() => { + * // Adapting a keep-alive agent + * http.get('http://localhost:3000', { agent }, (res) => { + * res.on('data', (data) => { + * // Do nothing + * }); + * }); + * }, 5000); // Sending request on 5s interval so it's easy to hit idle timeout + * ``` + * + * By marking a request whether it reused socket or not, we can do + * automatic error retry base on it. + * + * ```js + * import http from 'node:http'; + * const agent = new http.Agent({ keepAlive: true }); + * + * function retriableRequest() { + * const req = http + * .get('http://localhost:3000', { agent }, (res) => { + * // ... + * }) + * .on('error', (err) => { + * // Check if retry is needed + * if (req.reusedSocket && err.code === 'ECONNRESET') { + * retriableRequest(); + * } + * }); + * } + * + * retriableRequest(); + * ``` + * @since v13.0.0, v12.16.0 + */ + reusedSocket: boolean; + /** + * Limits maximum response headers count. If set to 0, no limit will be applied. + */ + maxHeadersCount: number; + constructor(url: string | URL | ClientRequestArgs, cb?: (res: IncomingMessage) => void); + /** + * The request method. + * @since v0.1.97 + */ + method: string; + /** + * The request path. + * @since v0.4.0 + */ + path: string; + /** + * Marks the request as aborting. Calling this will cause remaining data + * in the response to be dropped and the socket to be destroyed. + * @since v0.3.8 + * @deprecated Since v14.1.0,v13.14.0 - Use `destroy` instead. + */ + abort(): void; + onSocket(socket: Socket): void; + /** + * Once a socket is assigned to this request and is connected `socket.setTimeout()` will be called. + * @since v0.5.9 + * @param timeout Milliseconds before a request times out. + * @param callback Optional function to be called when a timeout occurs. Same as binding to the `'timeout'` event. + */ + setTimeout(timeout: number, callback?: () => void): this; + /** + * Once a socket is assigned to this request and is connected `socket.setNoDelay()` will be called. + * @since v0.5.9 + */ + setNoDelay(noDelay?: boolean): void; + /** + * Once a socket is assigned to this request and is connected `socket.setKeepAlive()` will be called. + * @since v0.5.9 + */ + setSocketKeepAlive(enable?: boolean, initialDelay?: number): void; + /** + * Returns an array containing the unique names of the current outgoing raw + * headers. Header names are returned with their exact casing being set. + * + * ```js + * request.setHeader('Foo', 'bar'); + * request.setHeader('Set-Cookie', ['foo=bar', 'bar=baz']); + * + * const headerNames = request.getRawHeaderNames(); + * // headerNames === ['Foo', 'Set-Cookie'] + * ``` + * @since v15.13.0, v14.17.0 + */ + getRawHeaderNames(): string[]; + /** + * @deprecated + */ + addListener(event: "abort", listener: () => void): this; + addListener( + event: "connect", + listener: (response: IncomingMessage, socket: Socket, head: Buffer) => void, + ): this; + addListener(event: "continue", listener: () => void): this; + addListener(event: "information", listener: (info: InformationEvent) => void): this; + addListener(event: "response", listener: (response: IncomingMessage) => void): this; + addListener(event: "socket", listener: (socket: Socket) => void): this; + addListener(event: "timeout", listener: () => void): this; + addListener( + event: "upgrade", + listener: (response: IncomingMessage, socket: Socket, head: Buffer) => void, + ): this; + addListener(event: "close", listener: () => void): this; + addListener(event: "drain", listener: () => void): this; + addListener(event: "error", listener: (err: Error) => void): this; + addListener(event: "finish", listener: () => void): this; + addListener(event: "pipe", listener: (src: stream.Readable) => void): this; + addListener(event: "unpipe", listener: (src: stream.Readable) => void): this; + addListener(event: string | symbol, listener: (...args: any[]) => void): this; + /** + * @deprecated + */ + on(event: "abort", listener: () => void): this; + on(event: "connect", listener: (response: IncomingMessage, socket: Socket, head: Buffer) => void): this; + on(event: "continue", listener: () => void): this; + on(event: "information", listener: (info: InformationEvent) => void): this; + on(event: "response", listener: (response: IncomingMessage) => void): this; + on(event: "socket", listener: (socket: Socket) => void): this; + on(event: "timeout", listener: () => void): this; + on(event: "upgrade", listener: (response: IncomingMessage, socket: Socket, head: Buffer) => void): this; + on(event: "close", listener: () => void): this; + on(event: "drain", listener: () => void): this; + on(event: "error", listener: (err: Error) => void): this; + on(event: "finish", listener: () => void): this; + on(event: "pipe", listener: (src: stream.Readable) => void): this; + on(event: "unpipe", listener: (src: stream.Readable) => void): this; + on(event: string | symbol, listener: (...args: any[]) => void): this; + /** + * @deprecated + */ + once(event: "abort", listener: () => void): this; + once(event: "connect", listener: (response: IncomingMessage, socket: Socket, head: Buffer) => void): this; + once(event: "continue", listener: () => void): this; + once(event: "information", listener: (info: InformationEvent) => void): this; + once(event: "response", listener: (response: IncomingMessage) => void): this; + once(event: "socket", listener: (socket: Socket) => void): this; + once(event: "timeout", listener: () => void): this; + once(event: "upgrade", listener: (response: IncomingMessage, socket: Socket, head: Buffer) => void): this; + once(event: "close", listener: () => void): this; + once(event: "drain", listener: () => void): this; + once(event: "error", listener: (err: Error) => void): this; + once(event: "finish", listener: () => void): this; + once(event: "pipe", listener: (src: stream.Readable) => void): this; + once(event: "unpipe", listener: (src: stream.Readable) => void): this; + once(event: string | symbol, listener: (...args: any[]) => void): this; + /** + * @deprecated + */ + prependListener(event: "abort", listener: () => void): this; + prependListener( + event: "connect", + listener: (response: IncomingMessage, socket: Socket, head: Buffer) => void, + ): this; + prependListener(event: "continue", listener: () => void): this; + prependListener(event: "information", listener: (info: InformationEvent) => void): this; + prependListener(event: "response", listener: (response: IncomingMessage) => void): this; + prependListener(event: "socket", listener: (socket: Socket) => void): this; + prependListener(event: "timeout", listener: () => void): this; + prependListener( + event: "upgrade", + listener: (response: IncomingMessage, socket: Socket, head: Buffer) => void, + ): this; + prependListener(event: "close", listener: () => void): this; + prependListener(event: "drain", listener: () => void): this; + prependListener(event: "error", listener: (err: Error) => void): this; + prependListener(event: "finish", listener: () => void): this; + prependListener(event: "pipe", listener: (src: stream.Readable) => void): this; + prependListener(event: "unpipe", listener: (src: stream.Readable) => void): this; + prependListener(event: string | symbol, listener: (...args: any[]) => void): this; + /** + * @deprecated + */ + prependOnceListener(event: "abort", listener: () => void): this; + prependOnceListener( + event: "connect", + listener: (response: IncomingMessage, socket: Socket, head: Buffer) => void, + ): this; + prependOnceListener(event: "continue", listener: () => void): this; + prependOnceListener(event: "information", listener: (info: InformationEvent) => void): this; + prependOnceListener(event: "response", listener: (response: IncomingMessage) => void): this; + prependOnceListener(event: "socket", listener: (socket: Socket) => void): this; + prependOnceListener(event: "timeout", listener: () => void): this; + prependOnceListener( + event: "upgrade", + listener: (response: IncomingMessage, socket: Socket, head: Buffer) => void, + ): this; + prependOnceListener(event: "close", listener: () => void): this; + prependOnceListener(event: "drain", listener: () => void): this; + prependOnceListener(event: "error", listener: (err: Error) => void): this; + prependOnceListener(event: "finish", listener: () => void): this; + prependOnceListener(event: "pipe", listener: (src: stream.Readable) => void): this; + prependOnceListener(event: "unpipe", listener: (src: stream.Readable) => void): this; + prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this; + } + /** + * An `IncomingMessage` object is created by {@link Server} or {@link ClientRequest} and passed as the first argument to the `'request'` and `'response'` event respectively. It may be used to + * access response + * status, headers, and data. + * + * Different from its `socket` value which is a subclass of `stream.Duplex`, the`IncomingMessage` itself extends `stream.Readable` and is created separately to + * parse and emit the incoming HTTP headers and payload, as the underlying socket + * may be reused multiple times in case of keep-alive. + * @since v0.1.17 + */ + class IncomingMessage extends stream.Readable { + constructor(socket: Socket); + /** + * The `message.aborted` property will be `true` if the request has + * been aborted. + * @since v10.1.0 + * @deprecated Since v17.0.0,v16.12.0 - Check `message.destroyed` from stream.Readable. + */ + aborted: boolean; + /** + * In case of server request, the HTTP version sent by the client. In the case of + * client response, the HTTP version of the connected-to server. + * Probably either `'1.1'` or `'1.0'`. + * + * Also `message.httpVersionMajor` is the first integer and`message.httpVersionMinor` is the second. + * @since v0.1.1 + */ + httpVersion: string; + httpVersionMajor: number; + httpVersionMinor: number; + /** + * The `message.complete` property will be `true` if a complete HTTP message has + * been received and successfully parsed. + * + * This property is particularly useful as a means of determining if a client or + * server fully transmitted a message before a connection was terminated: + * + * ```js + * const req = http.request({ + * host: '127.0.0.1', + * port: 8080, + * method: 'POST', + * }, (res) => { + * res.resume(); + * res.on('end', () => { + * if (!res.complete) + * console.error( + * 'The connection was terminated while the message was still being sent'); + * }); + * }); + * ``` + * @since v0.3.0 + */ + complete: boolean; + /** + * Alias for `message.socket`. + * @since v0.1.90 + * @deprecated Since v16.0.0 - Use `socket`. + */ + connection: Socket; + /** + * The `net.Socket` object associated with the connection. + * + * With HTTPS support, use `request.socket.getPeerCertificate()` to obtain the + * client's authentication details. + * + * This property is guaranteed to be an instance of the `net.Socket` class, + * a subclass of `stream.Duplex`, unless the user specified a socket + * type other than `net.Socket` or internally nulled. + * @since v0.3.0 + */ + socket: Socket; + /** + * The request/response headers object. + * + * Key-value pairs of header names and values. Header names are lower-cased. + * + * ```js + * // Prints something like: + * // + * // { 'user-agent': 'curl/7.22.0', + * // host: '127.0.0.1:8000', + * // accept: '*' } + * console.log(request.headers); + * ``` + * + * Duplicates in raw headers are handled in the following ways, depending on the + * header name: + * + * * Duplicates of `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`, `server`, or `user-agent` are discarded. + * To allow duplicate values of the headers listed above to be joined, + * use the option `joinDuplicateHeaders` in {@link request} and {@link createServer}. See RFC 9110 Section 5.3 for more + * information. + * * `set-cookie` is always an array. Duplicates are added to the array. + * * For duplicate `cookie` headers, the values are joined together with `; `. + * * For all other headers, the values are joined together with `, `. + * @since v0.1.5 + */ + headers: IncomingHttpHeaders; + /** + * Similar to `message.headers`, but there is no join logic and the values are + * always arrays of strings, even for headers received just once. + * + * ```js + * // Prints something like: + * // + * // { 'user-agent': ['curl/7.22.0'], + * // host: ['127.0.0.1:8000'], + * // accept: ['*'] } + * console.log(request.headersDistinct); + * ``` + * @since v18.3.0, v16.17.0 + */ + headersDistinct: NodeJS.Dict; + /** + * The raw request/response headers list exactly as they were received. + * + * The keys and values are in the same list. It is _not_ a + * list of tuples. So, the even-numbered offsets are key values, and the + * odd-numbered offsets are the associated values. + * + * Header names are not lowercased, and duplicates are not merged. + * + * ```js + * // Prints something like: + * // + * // [ 'user-agent', + * // 'this is invalid because there can be only one', + * // 'User-Agent', + * // 'curl/7.22.0', + * // 'Host', + * // '127.0.0.1:8000', + * // 'ACCEPT', + * // '*' ] + * console.log(request.rawHeaders); + * ``` + * @since v0.11.6 + */ + rawHeaders: string[]; + /** + * The request/response trailers object. Only populated at the `'end'` event. + * @since v0.3.0 + */ + trailers: NodeJS.Dict; + /** + * Similar to `message.trailers`, but there is no join logic and the values are + * always arrays of strings, even for headers received just once. + * Only populated at the `'end'` event. + * @since v18.3.0, v16.17.0 + */ + trailersDistinct: NodeJS.Dict; + /** + * The raw request/response trailer keys and values exactly as they were + * received. Only populated at the `'end'` event. + * @since v0.11.6 + */ + rawTrailers: string[]; + /** + * Calls `message.socket.setTimeout(msecs, callback)`. + * @since v0.5.9 + */ + setTimeout(msecs: number, callback?: () => void): this; + /** + * **Only valid for request obtained from {@link Server}.** + * + * The request method as a string. Read only. Examples: `'GET'`, `'DELETE'`. + * @since v0.1.1 + */ + method?: string | undefined; + /** + * **Only valid for request obtained from {@link Server}.** + * + * Request URL string. This contains only the URL that is present in the actual + * HTTP request. Take the following request: + * + * ```http + * GET /status?name=ryan HTTP/1.1 + * Accept: text/plain + * ``` + * + * To parse the URL into its parts: + * + * ```js + * new URL(request.url, `http://${request.headers.host}`); + * ``` + * + * When `request.url` is `'/status?name=ryan'` and `request.headers.host` is`'localhost:3000'`: + * + * ```console + * $ node + * > new URL(request.url, `http://${request.headers.host}`) + * URL { + * href: 'http://localhost:3000/status?name=ryan', + * origin: 'http://localhost:3000', + * protocol: 'http:', + * username: '', + * password: '', + * host: 'localhost:3000', + * hostname: 'localhost', + * port: '3000', + * pathname: '/status', + * search: '?name=ryan', + * searchParams: URLSearchParams { 'name' => 'ryan' }, + * hash: '' + * } + * ``` + * @since v0.1.90 + */ + url?: string | undefined; + /** + * **Only valid for response obtained from {@link ClientRequest}.** + * + * The 3-digit HTTP response status code. E.G. `404`. + * @since v0.1.1 + */ + statusCode?: number | undefined; + /** + * **Only valid for response obtained from {@link ClientRequest}.** + * + * The HTTP response status message (reason phrase). E.G. `OK` or `Internal Server Error`. + * @since v0.11.10 + */ + statusMessage?: string | undefined; + /** + * Calls `destroy()` on the socket that received the `IncomingMessage`. If `error`is provided, an `'error'` event is emitted on the socket and `error` is passed + * as an argument to any listeners on the event. + * @since v0.3.0 + */ + destroy(error?: Error): this; + } + interface AgentOptions extends Partial { + /** + * Keep sockets around in a pool to be used by other requests in the future. Default = false + */ + keepAlive?: boolean | undefined; + /** + * When using HTTP KeepAlive, how often to send TCP KeepAlive packets over sockets being kept alive. Default = 1000. + * Only relevant if keepAlive is set to true. + */ + keepAliveMsecs?: number | undefined; + /** + * Maximum number of sockets to allow per host. Default for Node 0.10 is 5, default for Node 0.12 is Infinity + */ + maxSockets?: number | undefined; + /** + * Maximum number of sockets allowed for all hosts in total. Each request will use a new socket until the maximum is reached. Default: Infinity. + */ + maxTotalSockets?: number | undefined; + /** + * Maximum number of sockets to leave open in a free state. Only relevant if keepAlive is set to true. Default = 256. + */ + maxFreeSockets?: number | undefined; + /** + * Socket timeout in milliseconds. This will set the timeout after the socket is connected. + */ + timeout?: number | undefined; + /** + * Scheduling strategy to apply when picking the next free socket to use. + * @default `lifo` + */ + scheduling?: "fifo" | "lifo" | undefined; + } + /** + * An `Agent` is responsible for managing connection persistence + * and reuse for HTTP clients. It maintains a queue of pending requests + * for a given host and port, reusing a single socket connection for each + * until the queue is empty, at which time the socket is either destroyed + * or put into a pool where it is kept to be used again for requests to the + * same host and port. Whether it is destroyed or pooled depends on the`keepAlive` `option`. + * + * Pooled connections have TCP Keep-Alive enabled for them, but servers may + * still close idle connections, in which case they will be removed from the + * pool and a new connection will be made when a new HTTP request is made for + * that host and port. Servers may also refuse to allow multiple requests + * over the same connection, in which case the connection will have to be + * remade for every request and cannot be pooled. The `Agent` will still make + * the requests to that server, but each one will occur over a new connection. + * + * When a connection is closed by the client or the server, it is removed + * from the pool. Any unused sockets in the pool will be unrefed so as not + * to keep the Node.js process running when there are no outstanding requests. + * (see `socket.unref()`). + * + * It is good practice, to `destroy()` an `Agent` instance when it is no + * longer in use, because unused sockets consume OS resources. + * + * Sockets are removed from an agent when the socket emits either + * a `'close'` event or an `'agentRemove'` event. When intending to keep one + * HTTP request open for a long time without keeping it in the agent, something + * like the following may be done: + * + * ```js + * http.get(options, (res) => { + * // Do stuff + * }).on('socket', (socket) => { + * socket.emit('agentRemove'); + * }); + * ``` + * + * An agent may also be used for an individual request. By providing`{agent: false}` as an option to the `http.get()` or `http.request()`functions, a one-time use `Agent` with default options + * will be used + * for the client connection. + * + * `agent:false`: + * + * ```js + * http.get({ + * hostname: 'localhost', + * port: 80, + * path: '/', + * agent: false, // Create a new agent just for this one request + * }, (res) => { + * // Do stuff with response + * }); + * ``` + * @since v0.3.4 + */ + class Agent extends EventEmitter { + /** + * By default set to 256. For agents with `keepAlive` enabled, this + * sets the maximum number of sockets that will be left open in the free + * state. + * @since v0.11.7 + */ + maxFreeSockets: number; + /** + * By default set to `Infinity`. Determines how many concurrent sockets the agent + * can have open per origin. Origin is the returned value of `agent.getName()`. + * @since v0.3.6 + */ + maxSockets: number; + /** + * By default set to `Infinity`. Determines how many concurrent sockets the agent + * can have open. Unlike `maxSockets`, this parameter applies across all origins. + * @since v14.5.0, v12.19.0 + */ + maxTotalSockets: number; + /** + * An object which contains arrays of sockets currently awaiting use by + * the agent when `keepAlive` is enabled. Do not modify. + * + * Sockets in the `freeSockets` list will be automatically destroyed and + * removed from the array on `'timeout'`. + * @since v0.11.4 + */ + readonly freeSockets: NodeJS.ReadOnlyDict; + /** + * An object which contains arrays of sockets currently in use by the + * agent. Do not modify. + * @since v0.3.6 + */ + readonly sockets: NodeJS.ReadOnlyDict; + /** + * An object which contains queues of requests that have not yet been assigned to + * sockets. Do not modify. + * @since v0.5.9 + */ + readonly requests: NodeJS.ReadOnlyDict; + constructor(opts?: AgentOptions); + /** + * Destroy any sockets that are currently in use by the agent. + * + * It is usually not necessary to do this. However, if using an + * agent with `keepAlive` enabled, then it is best to explicitly shut down + * the agent when it is no longer needed. Otherwise, + * sockets might stay open for quite a long time before the server + * terminates them. + * @since v0.11.4 + */ + destroy(): void; + } + const METHODS: string[]; + const STATUS_CODES: { + [errorCode: number]: string | undefined; + [errorCode: string]: string | undefined; + }; + /** + * Returns a new instance of {@link Server}. + * + * The `requestListener` is a function which is automatically + * added to the `'request'` event. + * + * ```js + * import http from 'node:http'; + * + * // Create a local server to receive data from + * const server = http.createServer((req, res) => { + * res.writeHead(200, { 'Content-Type': 'application/json' }); + * res.end(JSON.stringify({ + * data: 'Hello World!', + * })); + * }); + * + * server.listen(8000); + * ``` + * + * ```js + * import http from 'node:http'; + * + * // Create a local server to receive data from + * const server = http.createServer(); + * + * // Listen to the request event + * server.on('request', (request, res) => { + * res.writeHead(200, { 'Content-Type': 'application/json' }); + * res.end(JSON.stringify({ + * data: 'Hello World!', + * })); + * }); + * + * server.listen(8000); + * ``` + * @since v0.1.13 + */ + function createServer< + Request extends typeof IncomingMessage = typeof IncomingMessage, + Response extends typeof ServerResponse = typeof ServerResponse, + >(requestListener?: RequestListener): Server; + function createServer< + Request extends typeof IncomingMessage = typeof IncomingMessage, + Response extends typeof ServerResponse = typeof ServerResponse, + >( + options: ServerOptions, + requestListener?: RequestListener, + ): Server; + // although RequestOptions are passed as ClientRequestArgs to ClientRequest directly, + // create interface RequestOptions would make the naming more clear to developers + interface RequestOptions extends ClientRequestArgs {} + /** + * `options` in `socket.connect()` are also supported. + * + * Node.js maintains several connections per server to make HTTP requests. + * This function allows one to transparently issue requests. + * + * `url` can be a string or a `URL` object. If `url` is a + * string, it is automatically parsed with `new URL()`. If it is a `URL` object, it will be automatically converted to an ordinary `options` object. + * + * If both `url` and `options` are specified, the objects are merged, with the`options` properties taking precedence. + * + * The optional `callback` parameter will be added as a one-time listener for + * the `'response'` event. + * + * `http.request()` returns an instance of the {@link ClientRequest} class. The `ClientRequest` instance is a writable stream. If one needs to + * upload a file with a POST request, then write to the `ClientRequest` object. + * + * ```js + * import http from 'node:http'; + * import { Buffer } from 'node:buffer'; + * + * const postData = JSON.stringify({ + * 'msg': 'Hello World!', + * }); + * + * const options = { + * hostname: 'www.google.com', + * port: 80, + * path: '/upload', + * method: 'POST', + * headers: { + * 'Content-Type': 'application/json', + * 'Content-Length': Buffer.byteLength(postData), + * }, + * }; + * + * const req = http.request(options, (res) => { + * console.log(`STATUS: ${res.statusCode}`); + * console.log(`HEADERS: ${JSON.stringify(res.headers)}`); + * res.setEncoding('utf8'); + * res.on('data', (chunk) => { + * console.log(`BODY: ${chunk}`); + * }); + * res.on('end', () => { + * console.log('No more data in response.'); + * }); + * }); + * + * req.on('error', (e) => { + * console.error(`problem with request: ${e.message}`); + * }); + * + * // Write data to request body + * req.write(postData); + * req.end(); + * ``` + * + * In the example `req.end()` was called. With `http.request()` one + * must always call `req.end()` to signify the end of the request - + * even if there is no data being written to the request body. + * + * If any error is encountered during the request (be that with DNS resolution, + * TCP level errors, or actual HTTP parse errors) an `'error'` event is emitted + * on the returned request object. As with all `'error'` events, if no listeners + * are registered the error will be thrown. + * + * There are a few special headers that should be noted. + * + * * Sending a 'Connection: keep-alive' will notify Node.js that the connection to + * the server should be persisted until the next request. + * * Sending a 'Content-Length' header will disable the default chunked encoding. + * * Sending an 'Expect' header will immediately send the request headers. + * Usually, when sending 'Expect: 100-continue', both a timeout and a listener + * for the `'continue'` event should be set. See RFC 2616 Section 8.2.3 for more + * information. + * * Sending an Authorization header will override using the `auth` option + * to compute basic authentication. + * + * Example using a `URL` as `options`: + * + * ```js + * const options = new URL('http://abc:xyz@example.com'); + * + * const req = http.request(options, (res) => { + * // ... + * }); + * ``` + * + * In a successful request, the following events will be emitted in the following + * order: + * + * * `'socket'` + * * `'response'` + * * `'data'` any number of times, on the `res` object + * (`'data'` will not be emitted at all if the response body is empty, for + * instance, in most redirects) + * * `'end'` on the `res` object + * * `'close'` + * + * In the case of a connection error, the following events will be emitted: + * + * * `'socket'` + * * `'error'` + * * `'close'` + * + * In the case of a premature connection close before the response is received, + * the following events will be emitted in the following order: + * + * * `'socket'` + * * `'error'` with an error with message `'Error: socket hang up'` and code`'ECONNRESET'` + * * `'close'` + * + * In the case of a premature connection close after the response is received, + * the following events will be emitted in the following order: + * + * * `'socket'` + * * `'response'` + * * `'data'` any number of times, on the `res` object + * * (connection closed here) + * * `'aborted'` on the `res` object + * * `'error'` on the `res` object with an error with message`'Error: aborted'` and code `'ECONNRESET'` + * * `'close'` + * * `'close'` on the `res` object + * + * If `req.destroy()` is called before a socket is assigned, the following + * events will be emitted in the following order: + * + * * (`req.destroy()` called here) + * * `'error'` with an error with message `'Error: socket hang up'` and code`'ECONNRESET'`, or the error with which `req.destroy()` was called + * * `'close'` + * + * If `req.destroy()` is called before the connection succeeds, the following + * events will be emitted in the following order: + * + * * `'socket'` + * * (`req.destroy()` called here) + * * `'error'` with an error with message `'Error: socket hang up'` and code`'ECONNRESET'`, or the error with which `req.destroy()` was called + * * `'close'` + * + * If `req.destroy()` is called after the response is received, the following + * events will be emitted in the following order: + * + * * `'socket'` + * * `'response'` + * * `'data'` any number of times, on the `res` object + * * (`req.destroy()` called here) + * * `'aborted'` on the `res` object + * * `'error'` on the `res` object with an error with message `'Error: aborted'`and code `'ECONNRESET'`, or the error with which `req.destroy()` was called + * * `'close'` + * * `'close'` on the `res` object + * + * If `req.abort()` is called before a socket is assigned, the following + * events will be emitted in the following order: + * + * * (`req.abort()` called here) + * * `'abort'` + * * `'close'` + * + * If `req.abort()` is called before the connection succeeds, the following + * events will be emitted in the following order: + * + * * `'socket'` + * * (`req.abort()` called here) + * * `'abort'` + * * `'error'` with an error with message `'Error: socket hang up'` and code`'ECONNRESET'` + * * `'close'` + * + * If `req.abort()` is called after the response is received, the following + * events will be emitted in the following order: + * + * * `'socket'` + * * `'response'` + * * `'data'` any number of times, on the `res` object + * * (`req.abort()` called here) + * * `'abort'` + * * `'aborted'` on the `res` object + * * `'error'` on the `res` object with an error with message`'Error: aborted'` and code `'ECONNRESET'`. + * * `'close'` + * * `'close'` on the `res` object + * + * Setting the `timeout` option or using the `setTimeout()` function will + * not abort the request or do anything besides add a `'timeout'` event. + * + * Passing an `AbortSignal` and then calling `abort()` on the corresponding`AbortController` will behave the same way as calling `.destroy()` on the + * request. Specifically, the `'error'` event will be emitted with an error with + * the message `'AbortError: The operation was aborted'`, the code `'ABORT_ERR'`and the `cause`, if one was provided. + * @since v0.3.6 + */ + function request(options: RequestOptions | string | URL, callback?: (res: IncomingMessage) => void): ClientRequest; + function request( + url: string | URL, + options: RequestOptions, + callback?: (res: IncomingMessage) => void, + ): ClientRequest; + /** + * Since most requests are GET requests without bodies, Node.js provides this + * convenience method. The only difference between this method and {@link request} is that it sets the method to GET by default and calls `req.end()`automatically. The callback must take care to + * consume the response + * data for reasons stated in {@link ClientRequest} section. + * + * The `callback` is invoked with a single argument that is an instance of {@link IncomingMessage}. + * + * JSON fetching example: + * + * ```js + * http.get('http://localhost:8000/', (res) => { + * const { statusCode } = res; + * const contentType = res.headers['content-type']; + * + * let error; + * // Any 2xx status code signals a successful response but + * // here we're only checking for 200. + * if (statusCode !== 200) { + * error = new Error('Request Failed.\n' + + * `Status Code: ${statusCode}`); + * } else if (!/^application\/json/.test(contentType)) { + * error = new Error('Invalid content-type.\n' + + * `Expected application/json but received ${contentType}`); + * } + * if (error) { + * console.error(error.message); + * // Consume response data to free up memory + * res.resume(); + * return; + * } + * + * res.setEncoding('utf8'); + * let rawData = ''; + * res.on('data', (chunk) => { rawData += chunk; }); + * res.on('end', () => { + * try { + * const parsedData = JSON.parse(rawData); + * console.log(parsedData); + * } catch (e) { + * console.error(e.message); + * } + * }); + * }).on('error', (e) => { + * console.error(`Got error: ${e.message}`); + * }); + * + * // Create a local server to receive data from + * const server = http.createServer((req, res) => { + * res.writeHead(200, { 'Content-Type': 'application/json' }); + * res.end(JSON.stringify({ + * data: 'Hello World!', + * })); + * }); + * + * server.listen(8000); + * ``` + * @since v0.3.6 + * @param options Accepts the same `options` as {@link request}, with the method set to GET by default. + */ + function get(options: RequestOptions | string | URL, callback?: (res: IncomingMessage) => void): ClientRequest; + function get(url: string | URL, options: RequestOptions, callback?: (res: IncomingMessage) => void): ClientRequest; + /** + * Performs the low-level validations on the provided `name` that are done when`res.setHeader(name, value)` is called. + * + * Passing illegal value as `name` will result in a `TypeError` being thrown, + * identified by `code: 'ERR_INVALID_HTTP_TOKEN'`. + * + * It is not necessary to use this method before passing headers to an HTTP request + * or response. The HTTP module will automatically validate such headers. + * Examples: + * + * Example: + * + * ```js + * import { validateHeaderName } from 'node:http'; + * + * try { + * validateHeaderName(''); + * } catch (err) { + * console.error(err instanceof TypeError); // --> true + * console.error(err.code); // --> 'ERR_INVALID_HTTP_TOKEN' + * console.error(err.message); // --> 'Header name must be a valid HTTP token [""]' + * } + * ``` + * @since v14.3.0 + * @param [label='Header name'] Label for error message. + */ + function validateHeaderName(name: string): void; + /** + * Performs the low-level validations on the provided `value` that are done when`res.setHeader(name, value)` is called. + * + * Passing illegal value as `value` will result in a `TypeError` being thrown. + * + * * Undefined value error is identified by `code: 'ERR_HTTP_INVALID_HEADER_VALUE'`. + * * Invalid value character error is identified by `code: 'ERR_INVALID_CHAR'`. + * + * It is not necessary to use this method before passing headers to an HTTP request + * or response. The HTTP module will automatically validate such headers. + * + * Examples: + * + * ```js + * import { validateHeaderValue } from 'node:http'; + * + * try { + * validateHeaderValue('x-my-header', undefined); + * } catch (err) { + * console.error(err instanceof TypeError); // --> true + * console.error(err.code === 'ERR_HTTP_INVALID_HEADER_VALUE'); // --> true + * console.error(err.message); // --> 'Invalid value "undefined" for header "x-my-header"' + * } + * + * try { + * validateHeaderValue('x-my-header', 'oʊmɪɡə'); + * } catch (err) { + * console.error(err instanceof TypeError); // --> true + * console.error(err.code === 'ERR_INVALID_CHAR'); // --> true + * console.error(err.message); // --> 'Invalid character in header content ["x-my-header"]' + * } + * ``` + * @since v14.3.0 + * @param name Header name + * @param value Header value + */ + function validateHeaderValue(name: string, value: string): void; + /** + * Set the maximum number of idle HTTP parsers. + * @since v18.8.0, v16.18.0 + * @param [max=1000] + */ + function setMaxIdleHTTPParsers(max: number): void; + let globalAgent: Agent; + /** + * Read-only property specifying the maximum allowed size of HTTP headers in bytes. + * Defaults to 16KB. Configurable using the `--max-http-header-size` CLI option. + */ + const maxHeaderSize: number; +} +declare module "node:http" { + export * from "http"; +} diff --git a/Url-Shortner/node_modules/@types/node/ts4.8/http2.d.ts b/Url-Shortner/node_modules/@types/node/ts4.8/http2.d.ts new file mode 100644 index 0000000..7f0dd57 --- /dev/null +++ b/Url-Shortner/node_modules/@types/node/ts4.8/http2.d.ts @@ -0,0 +1,2381 @@ +/** + * The `node:http2` module provides an implementation of the [HTTP/2](https://tools.ietf.org/html/rfc7540) protocol. + * It can be accessed using: + * + * ```js + * const http2 = require('node:http2'); + * ``` + * @since v8.4.0 + * @see [source](https://github.com/nodejs/node/blob/v20.2.0/lib/http2.js) + */ +declare module "http2" { + import EventEmitter = require("node:events"); + import * as fs from "node:fs"; + import * as net from "node:net"; + import * as stream from "node:stream"; + import * as tls from "node:tls"; + import * as url from "node:url"; + import { + IncomingHttpHeaders as Http1IncomingHttpHeaders, + IncomingMessage, + OutgoingHttpHeaders, + ServerResponse, + } from "node:http"; + export { OutgoingHttpHeaders } from "node:http"; + export interface IncomingHttpStatusHeader { + ":status"?: number | undefined; + } + export interface IncomingHttpHeaders extends Http1IncomingHttpHeaders { + ":path"?: string | undefined; + ":method"?: string | undefined; + ":authority"?: string | undefined; + ":scheme"?: string | undefined; + } + // Http2Stream + export interface StreamPriorityOptions { + exclusive?: boolean | undefined; + parent?: number | undefined; + weight?: number | undefined; + silent?: boolean | undefined; + } + export interface StreamState { + localWindowSize?: number | undefined; + state?: number | undefined; + localClose?: number | undefined; + remoteClose?: number | undefined; + sumDependencyWeight?: number | undefined; + weight?: number | undefined; + } + export interface ServerStreamResponseOptions { + endStream?: boolean | undefined; + waitForTrailers?: boolean | undefined; + } + export interface StatOptions { + offset: number; + length: number; + } + export interface ServerStreamFileResponseOptions { + statCheck?(stats: fs.Stats, headers: OutgoingHttpHeaders, statOptions: StatOptions): void | boolean; + waitForTrailers?: boolean | undefined; + offset?: number | undefined; + length?: number | undefined; + } + export interface ServerStreamFileResponseOptionsWithError extends ServerStreamFileResponseOptions { + onError?(err: NodeJS.ErrnoException): void; + } + export interface Http2Stream extends stream.Duplex { + /** + * Set to `true` if the `Http2Stream` instance was aborted abnormally. When set, + * the `'aborted'` event will have been emitted. + * @since v8.4.0 + */ + readonly aborted: boolean; + /** + * This property shows the number of characters currently buffered to be written. + * See `net.Socket.bufferSize` for details. + * @since v11.2.0, v10.16.0 + */ + readonly bufferSize: number; + /** + * Set to `true` if the `Http2Stream` instance has been closed. + * @since v9.4.0 + */ + readonly closed: boolean; + /** + * Set to `true` if the `Http2Stream` instance has been destroyed and is no longer + * usable. + * @since v8.4.0 + */ + readonly destroyed: boolean; + /** + * Set to `true` if the `END_STREAM` flag was set in the request or response + * HEADERS frame received, indicating that no additional data should be received + * and the readable side of the `Http2Stream` will be closed. + * @since v10.11.0 + */ + readonly endAfterHeaders: boolean; + /** + * The numeric stream identifier of this `Http2Stream` instance. Set to `undefined`if the stream identifier has not yet been assigned. + * @since v8.4.0 + */ + readonly id?: number | undefined; + /** + * Set to `true` if the `Http2Stream` instance has not yet been assigned a + * numeric stream identifier. + * @since v9.4.0 + */ + readonly pending: boolean; + /** + * Set to the `RST_STREAM` `error code` reported when the `Http2Stream` is + * destroyed after either receiving an `RST_STREAM` frame from the connected peer, + * calling `http2stream.close()`, or `http2stream.destroy()`. Will be`undefined` if the `Http2Stream` has not been closed. + * @since v8.4.0 + */ + readonly rstCode: number; + /** + * An object containing the outbound headers sent for this `Http2Stream`. + * @since v9.5.0 + */ + readonly sentHeaders: OutgoingHttpHeaders; + /** + * An array of objects containing the outbound informational (additional) headers + * sent for this `Http2Stream`. + * @since v9.5.0 + */ + readonly sentInfoHeaders?: OutgoingHttpHeaders[] | undefined; + /** + * An object containing the outbound trailers sent for this `HttpStream`. + * @since v9.5.0 + */ + readonly sentTrailers?: OutgoingHttpHeaders | undefined; + /** + * A reference to the `Http2Session` instance that owns this `Http2Stream`. The + * value will be `undefined` after the `Http2Stream` instance is destroyed. + * @since v8.4.0 + */ + readonly session: Http2Session | undefined; + /** + * Provides miscellaneous information about the current state of the`Http2Stream`. + * + * A current state of this `Http2Stream`. + * @since v8.4.0 + */ + readonly state: StreamState; + /** + * Closes the `Http2Stream` instance by sending an `RST_STREAM` frame to the + * connected HTTP/2 peer. + * @since v8.4.0 + * @param [code=http2.constants.NGHTTP2_NO_ERROR] Unsigned 32-bit integer identifying the error code. + * @param callback An optional function registered to listen for the `'close'` event. + */ + close(code?: number, callback?: () => void): void; + /** + * Updates the priority for this `Http2Stream` instance. + * @since v8.4.0 + */ + priority(options: StreamPriorityOptions): void; + /** + * ```js + * const http2 = require('node:http2'); + * const client = http2.connect('http://example.org:8000'); + * const { NGHTTP2_CANCEL } = http2.constants; + * const req = client.request({ ':path': '/' }); + * + * // Cancel the stream if there's no activity after 5 seconds + * req.setTimeout(5000, () => req.close(NGHTTP2_CANCEL)); + * ``` + * @since v8.4.0 + */ + setTimeout(msecs: number, callback?: () => void): void; + /** + * Sends a trailing `HEADERS` frame to the connected HTTP/2 peer. This method + * will cause the `Http2Stream` to be immediately closed and must only be + * called after the `'wantTrailers'` event has been emitted. When sending a + * request or sending a response, the `options.waitForTrailers` option must be set + * in order to keep the `Http2Stream` open after the final `DATA` frame so that + * trailers can be sent. + * + * ```js + * const http2 = require('node:http2'); + * const server = http2.createServer(); + * server.on('stream', (stream) => { + * stream.respond(undefined, { waitForTrailers: true }); + * stream.on('wantTrailers', () => { + * stream.sendTrailers({ xyz: 'abc' }); + * }); + * stream.end('Hello World'); + * }); + * ``` + * + * The HTTP/1 specification forbids trailers from containing HTTP/2 pseudo-header + * fields (e.g. `':method'`, `':path'`, etc). + * @since v10.0.0 + */ + sendTrailers(headers: OutgoingHttpHeaders): void; + addListener(event: "aborted", listener: () => void): this; + addListener(event: "close", listener: () => void): this; + addListener(event: "data", listener: (chunk: Buffer | string) => void): this; + addListener(event: "drain", listener: () => void): this; + addListener(event: "end", listener: () => void): this; + addListener(event: "error", listener: (err: Error) => void): this; + addListener(event: "finish", listener: () => void): this; + addListener(event: "frameError", listener: (frameType: number, errorCode: number) => void): this; + addListener(event: "pipe", listener: (src: stream.Readable) => void): this; + addListener(event: "unpipe", listener: (src: stream.Readable) => void): this; + addListener(event: "streamClosed", listener: (code: number) => void): this; + addListener(event: "timeout", listener: () => void): this; + addListener(event: "trailers", listener: (trailers: IncomingHttpHeaders, flags: number) => void): this; + addListener(event: "wantTrailers", listener: () => void): this; + addListener(event: string | symbol, listener: (...args: any[]) => void): this; + emit(event: "aborted"): boolean; + emit(event: "close"): boolean; + emit(event: "data", chunk: Buffer | string): boolean; + emit(event: "drain"): boolean; + emit(event: "end"): boolean; + emit(event: "error", err: Error): boolean; + emit(event: "finish"): boolean; + emit(event: "frameError", frameType: number, errorCode: number): boolean; + emit(event: "pipe", src: stream.Readable): boolean; + emit(event: "unpipe", src: stream.Readable): boolean; + emit(event: "streamClosed", code: number): boolean; + emit(event: "timeout"): boolean; + emit(event: "trailers", trailers: IncomingHttpHeaders, flags: number): boolean; + emit(event: "wantTrailers"): boolean; + emit(event: string | symbol, ...args: any[]): boolean; + on(event: "aborted", listener: () => void): this; + on(event: "close", listener: () => void): this; + on(event: "data", listener: (chunk: Buffer | string) => void): this; + on(event: "drain", listener: () => void): this; + on(event: "end", listener: () => void): this; + on(event: "error", listener: (err: Error) => void): this; + on(event: "finish", listener: () => void): this; + on(event: "frameError", listener: (frameType: number, errorCode: number) => void): this; + on(event: "pipe", listener: (src: stream.Readable) => void): this; + on(event: "unpipe", listener: (src: stream.Readable) => void): this; + on(event: "streamClosed", listener: (code: number) => void): this; + on(event: "timeout", listener: () => void): this; + on(event: "trailers", listener: (trailers: IncomingHttpHeaders, flags: number) => void): this; + on(event: "wantTrailers", listener: () => void): this; + on(event: string | symbol, listener: (...args: any[]) => void): this; + once(event: "aborted", listener: () => void): this; + once(event: "close", listener: () => void): this; + once(event: "data", listener: (chunk: Buffer | string) => void): this; + once(event: "drain", listener: () => void): this; + once(event: "end", listener: () => void): this; + once(event: "error", listener: (err: Error) => void): this; + once(event: "finish", listener: () => void): this; + once(event: "frameError", listener: (frameType: number, errorCode: number) => void): this; + once(event: "pipe", listener: (src: stream.Readable) => void): this; + once(event: "unpipe", listener: (src: stream.Readable) => void): this; + once(event: "streamClosed", listener: (code: number) => void): this; + once(event: "timeout", listener: () => void): this; + once(event: "trailers", listener: (trailers: IncomingHttpHeaders, flags: number) => void): this; + once(event: "wantTrailers", listener: () => void): this; + once(event: string | symbol, listener: (...args: any[]) => void): this; + prependListener(event: "aborted", listener: () => void): this; + prependListener(event: "close", listener: () => void): this; + prependListener(event: "data", listener: (chunk: Buffer | string) => void): this; + prependListener(event: "drain", listener: () => void): this; + prependListener(event: "end", listener: () => void): this; + prependListener(event: "error", listener: (err: Error) => void): this; + prependListener(event: "finish", listener: () => void): this; + prependListener(event: "frameError", listener: (frameType: number, errorCode: number) => void): this; + prependListener(event: "pipe", listener: (src: stream.Readable) => void): this; + prependListener(event: "unpipe", listener: (src: stream.Readable) => void): this; + prependListener(event: "streamClosed", listener: (code: number) => void): this; + prependListener(event: "timeout", listener: () => void): this; + prependListener(event: "trailers", listener: (trailers: IncomingHttpHeaders, flags: number) => void): this; + prependListener(event: "wantTrailers", listener: () => void): this; + prependListener(event: string | symbol, listener: (...args: any[]) => void): this; + prependOnceListener(event: "aborted", listener: () => void): this; + prependOnceListener(event: "close", listener: () => void): this; + prependOnceListener(event: "data", listener: (chunk: Buffer | string) => void): this; + prependOnceListener(event: "drain", listener: () => void): this; + prependOnceListener(event: "end", listener: () => void): this; + prependOnceListener(event: "error", listener: (err: Error) => void): this; + prependOnceListener(event: "finish", listener: () => void): this; + prependOnceListener(event: "frameError", listener: (frameType: number, errorCode: number) => void): this; + prependOnceListener(event: "pipe", listener: (src: stream.Readable) => void): this; + prependOnceListener(event: "unpipe", listener: (src: stream.Readable) => void): this; + prependOnceListener(event: "streamClosed", listener: (code: number) => void): this; + prependOnceListener(event: "timeout", listener: () => void): this; + prependOnceListener(event: "trailers", listener: (trailers: IncomingHttpHeaders, flags: number) => void): this; + prependOnceListener(event: "wantTrailers", listener: () => void): this; + prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this; + } + export interface ClientHttp2Stream extends Http2Stream { + addListener(event: "continue", listener: () => {}): this; + addListener( + event: "headers", + listener: (headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void, + ): this; + addListener(event: "push", listener: (headers: IncomingHttpHeaders, flags: number) => void): this; + addListener( + event: "response", + listener: (headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void, + ): this; + addListener(event: string | symbol, listener: (...args: any[]) => void): this; + emit(event: "continue"): boolean; + emit(event: "headers", headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number): boolean; + emit(event: "push", headers: IncomingHttpHeaders, flags: number): boolean; + emit(event: "response", headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number): boolean; + emit(event: string | symbol, ...args: any[]): boolean; + on(event: "continue", listener: () => {}): this; + on( + event: "headers", + listener: (headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void, + ): this; + on(event: "push", listener: (headers: IncomingHttpHeaders, flags: number) => void): this; + on( + event: "response", + listener: (headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void, + ): this; + on(event: string | symbol, listener: (...args: any[]) => void): this; + once(event: "continue", listener: () => {}): this; + once( + event: "headers", + listener: (headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void, + ): this; + once(event: "push", listener: (headers: IncomingHttpHeaders, flags: number) => void): this; + once( + event: "response", + listener: (headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void, + ): this; + once(event: string | symbol, listener: (...args: any[]) => void): this; + prependListener(event: "continue", listener: () => {}): this; + prependListener( + event: "headers", + listener: (headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void, + ): this; + prependListener(event: "push", listener: (headers: IncomingHttpHeaders, flags: number) => void): this; + prependListener( + event: "response", + listener: (headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void, + ): this; + prependListener(event: string | symbol, listener: (...args: any[]) => void): this; + prependOnceListener(event: "continue", listener: () => {}): this; + prependOnceListener( + event: "headers", + listener: (headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void, + ): this; + prependOnceListener(event: "push", listener: (headers: IncomingHttpHeaders, flags: number) => void): this; + prependOnceListener( + event: "response", + listener: (headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void, + ): this; + prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this; + } + export interface ServerHttp2Stream extends Http2Stream { + /** + * True if headers were sent, false otherwise (read-only). + * @since v8.4.0 + */ + readonly headersSent: boolean; + /** + * Read-only property mapped to the `SETTINGS_ENABLE_PUSH` flag of the remote + * client's most recent `SETTINGS` frame. Will be `true` if the remote peer + * accepts push streams, `false` otherwise. Settings are the same for every`Http2Stream` in the same `Http2Session`. + * @since v8.4.0 + */ + readonly pushAllowed: boolean; + /** + * Sends an additional informational `HEADERS` frame to the connected HTTP/2 peer. + * @since v8.4.0 + */ + additionalHeaders(headers: OutgoingHttpHeaders): void; + /** + * Initiates a push stream. The callback is invoked with the new `Http2Stream`instance created for the push stream passed as the second argument, or an`Error` passed as the first argument. + * + * ```js + * const http2 = require('node:http2'); + * const server = http2.createServer(); + * server.on('stream', (stream) => { + * stream.respond({ ':status': 200 }); + * stream.pushStream({ ':path': '/' }, (err, pushStream, headers) => { + * if (err) throw err; + * pushStream.respond({ ':status': 200 }); + * pushStream.end('some pushed data'); + * }); + * stream.end('some data'); + * }); + * ``` + * + * Setting the weight of a push stream is not allowed in the `HEADERS` frame. Pass + * a `weight` value to `http2stream.priority` with the `silent` option set to`true` to enable server-side bandwidth balancing between concurrent streams. + * + * Calling `http2stream.pushStream()` from within a pushed stream is not permitted + * and will throw an error. + * @since v8.4.0 + * @param callback Callback that is called once the push stream has been initiated. + */ + pushStream( + headers: OutgoingHttpHeaders, + callback?: (err: Error | null, pushStream: ServerHttp2Stream, headers: OutgoingHttpHeaders) => void, + ): void; + pushStream( + headers: OutgoingHttpHeaders, + options?: StreamPriorityOptions, + callback?: (err: Error | null, pushStream: ServerHttp2Stream, headers: OutgoingHttpHeaders) => void, + ): void; + /** + * ```js + * const http2 = require('node:http2'); + * const server = http2.createServer(); + * server.on('stream', (stream) => { + * stream.respond({ ':status': 200 }); + * stream.end('some data'); + * }); + * ``` + * + * Initiates a response. When the `options.waitForTrailers` option is set, the`'wantTrailers'` event will be emitted immediately after queuing the last chunk + * of payload data to be sent. The `http2stream.sendTrailers()` method can then be + * used to sent trailing header fields to the peer. + * + * When `options.waitForTrailers` is set, the `Http2Stream` will not automatically + * close when the final `DATA` frame is transmitted. User code must call either`http2stream.sendTrailers()` or `http2stream.close()` to close the`Http2Stream`. + * + * ```js + * const http2 = require('node:http2'); + * const server = http2.createServer(); + * server.on('stream', (stream) => { + * stream.respond({ ':status': 200 }, { waitForTrailers: true }); + * stream.on('wantTrailers', () => { + * stream.sendTrailers({ ABC: 'some value to send' }); + * }); + * stream.end('some data'); + * }); + * ``` + * @since v8.4.0 + */ + respond(headers?: OutgoingHttpHeaders, options?: ServerStreamResponseOptions): void; + /** + * Initiates a response whose data is read from the given file descriptor. No + * validation is performed on the given file descriptor. If an error occurs while + * attempting to read data using the file descriptor, the `Http2Stream` will be + * closed using an `RST_STREAM` frame using the standard `INTERNAL_ERROR` code. + * + * When used, the `Http2Stream` object's `Duplex` interface will be closed + * automatically. + * + * ```js + * const http2 = require('node:http2'); + * const fs = require('node:fs'); + * + * const server = http2.createServer(); + * server.on('stream', (stream) => { + * const fd = fs.openSync('/some/file', 'r'); + * + * const stat = fs.fstatSync(fd); + * const headers = { + * 'content-length': stat.size, + * 'last-modified': stat.mtime.toUTCString(), + * 'content-type': 'text/plain; charset=utf-8', + * }; + * stream.respondWithFD(fd, headers); + * stream.on('close', () => fs.closeSync(fd)); + * }); + * ``` + * + * The optional `options.statCheck` function may be specified to give user code + * an opportunity to set additional content headers based on the `fs.Stat` details + * of the given fd. If the `statCheck` function is provided, the`http2stream.respondWithFD()` method will perform an `fs.fstat()` call to + * collect details on the provided file descriptor. + * + * The `offset` and `length` options may be used to limit the response to a + * specific range subset. This can be used, for instance, to support HTTP Range + * requests. + * + * The file descriptor or `FileHandle` is not closed when the stream is closed, + * so it will need to be closed manually once it is no longer needed. + * Using the same file descriptor concurrently for multiple streams + * is not supported and may result in data loss. Re-using a file descriptor + * after a stream has finished is supported. + * + * When the `options.waitForTrailers` option is set, the `'wantTrailers'` event + * will be emitted immediately after queuing the last chunk of payload data to be + * sent. The `http2stream.sendTrailers()` method can then be used to sent trailing + * header fields to the peer. + * + * When `options.waitForTrailers` is set, the `Http2Stream` will not automatically + * close when the final `DATA` frame is transmitted. User code _must_ call either`http2stream.sendTrailers()` or `http2stream.close()` to close the`Http2Stream`. + * + * ```js + * const http2 = require('node:http2'); + * const fs = require('node:fs'); + * + * const server = http2.createServer(); + * server.on('stream', (stream) => { + * const fd = fs.openSync('/some/file', 'r'); + * + * const stat = fs.fstatSync(fd); + * const headers = { + * 'content-length': stat.size, + * 'last-modified': stat.mtime.toUTCString(), + * 'content-type': 'text/plain; charset=utf-8', + * }; + * stream.respondWithFD(fd, headers, { waitForTrailers: true }); + * stream.on('wantTrailers', () => { + * stream.sendTrailers({ ABC: 'some value to send' }); + * }); + * + * stream.on('close', () => fs.closeSync(fd)); + * }); + * ``` + * @since v8.4.0 + * @param fd A readable file descriptor. + */ + respondWithFD( + fd: number | fs.promises.FileHandle, + headers?: OutgoingHttpHeaders, + options?: ServerStreamFileResponseOptions, + ): void; + /** + * Sends a regular file as the response. The `path` must specify a regular file + * or an `'error'` event will be emitted on the `Http2Stream` object. + * + * When used, the `Http2Stream` object's `Duplex` interface will be closed + * automatically. + * + * The optional `options.statCheck` function may be specified to give user code + * an opportunity to set additional content headers based on the `fs.Stat` details + * of the given file: + * + * If an error occurs while attempting to read the file data, the `Http2Stream`will be closed using an `RST_STREAM` frame using the standard `INTERNAL_ERROR`code. If the `onError` callback is + * defined, then it will be called. Otherwise + * the stream will be destroyed. + * + * Example using a file path: + * + * ```js + * const http2 = require('node:http2'); + * const server = http2.createServer(); + * server.on('stream', (stream) => { + * function statCheck(stat, headers) { + * headers['last-modified'] = stat.mtime.toUTCString(); + * } + * + * function onError(err) { + * // stream.respond() can throw if the stream has been destroyed by + * // the other side. + * try { + * if (err.code === 'ENOENT') { + * stream.respond({ ':status': 404 }); + * } else { + * stream.respond({ ':status': 500 }); + * } + * } catch (err) { + * // Perform actual error handling. + * console.error(err); + * } + * stream.end(); + * } + * + * stream.respondWithFile('/some/file', + * { 'content-type': 'text/plain; charset=utf-8' }, + * { statCheck, onError }); + * }); + * ``` + * + * The `options.statCheck` function may also be used to cancel the send operation + * by returning `false`. For instance, a conditional request may check the stat + * results to determine if the file has been modified to return an appropriate`304` response: + * + * ```js + * const http2 = require('node:http2'); + * const server = http2.createServer(); + * server.on('stream', (stream) => { + * function statCheck(stat, headers) { + * // Check the stat here... + * stream.respond({ ':status': 304 }); + * return false; // Cancel the send operation + * } + * stream.respondWithFile('/some/file', + * { 'content-type': 'text/plain; charset=utf-8' }, + * { statCheck }); + * }); + * ``` + * + * The `content-length` header field will be automatically set. + * + * The `offset` and `length` options may be used to limit the response to a + * specific range subset. This can be used, for instance, to support HTTP Range + * requests. + * + * The `options.onError` function may also be used to handle all the errors + * that could happen before the delivery of the file is initiated. The + * default behavior is to destroy the stream. + * + * When the `options.waitForTrailers` option is set, the `'wantTrailers'` event + * will be emitted immediately after queuing the last chunk of payload data to be + * sent. The `http2stream.sendTrailers()` method can then be used to sent trailing + * header fields to the peer. + * + * When `options.waitForTrailers` is set, the `Http2Stream` will not automatically + * close when the final `DATA` frame is transmitted. User code must call either`http2stream.sendTrailers()` or `http2stream.close()` to close the`Http2Stream`. + * + * ```js + * const http2 = require('node:http2'); + * const server = http2.createServer(); + * server.on('stream', (stream) => { + * stream.respondWithFile('/some/file', + * { 'content-type': 'text/plain; charset=utf-8' }, + * { waitForTrailers: true }); + * stream.on('wantTrailers', () => { + * stream.sendTrailers({ ABC: 'some value to send' }); + * }); + * }); + * ``` + * @since v8.4.0 + */ + respondWithFile( + path: string, + headers?: OutgoingHttpHeaders, + options?: ServerStreamFileResponseOptionsWithError, + ): void; + } + // Http2Session + export interface Settings { + headerTableSize?: number | undefined; + enablePush?: boolean | undefined; + initialWindowSize?: number | undefined; + maxFrameSize?: number | undefined; + maxConcurrentStreams?: number | undefined; + maxHeaderListSize?: number | undefined; + enableConnectProtocol?: boolean | undefined; + } + export interface ClientSessionRequestOptions { + endStream?: boolean | undefined; + exclusive?: boolean | undefined; + parent?: number | undefined; + weight?: number | undefined; + waitForTrailers?: boolean | undefined; + signal?: AbortSignal | undefined; + } + export interface SessionState { + effectiveLocalWindowSize?: number | undefined; + effectiveRecvDataLength?: number | undefined; + nextStreamID?: number | undefined; + localWindowSize?: number | undefined; + lastProcStreamID?: number | undefined; + remoteWindowSize?: number | undefined; + outboundQueueSize?: number | undefined; + deflateDynamicTableSize?: number | undefined; + inflateDynamicTableSize?: number | undefined; + } + export interface Http2Session extends EventEmitter { + /** + * Value will be `undefined` if the `Http2Session` is not yet connected to a + * socket, `h2c` if the `Http2Session` is not connected to a `TLSSocket`, or + * will return the value of the connected `TLSSocket`'s own `alpnProtocol`property. + * @since v9.4.0 + */ + readonly alpnProtocol?: string | undefined; + /** + * Will be `true` if this `Http2Session` instance has been closed, otherwise`false`. + * @since v9.4.0 + */ + readonly closed: boolean; + /** + * Will be `true` if this `Http2Session` instance is still connecting, will be set + * to `false` before emitting `connect` event and/or calling the `http2.connect`callback. + * @since v10.0.0 + */ + readonly connecting: boolean; + /** + * Will be `true` if this `Http2Session` instance has been destroyed and must no + * longer be used, otherwise `false`. + * @since v8.4.0 + */ + readonly destroyed: boolean; + /** + * Value is `undefined` if the `Http2Session` session socket has not yet been + * connected, `true` if the `Http2Session` is connected with a `TLSSocket`, + * and `false` if the `Http2Session` is connected to any other kind of socket + * or stream. + * @since v9.4.0 + */ + readonly encrypted?: boolean | undefined; + /** + * A prototype-less object describing the current local settings of this`Http2Session`. The local settings are local to _this_`Http2Session` instance. + * @since v8.4.0 + */ + readonly localSettings: Settings; + /** + * If the `Http2Session` is connected to a `TLSSocket`, the `originSet` property + * will return an `Array` of origins for which the `Http2Session` may be + * considered authoritative. + * + * The `originSet` property is only available when using a secure TLS connection. + * @since v9.4.0 + */ + readonly originSet?: string[] | undefined; + /** + * Indicates whether the `Http2Session` is currently waiting for acknowledgment of + * a sent `SETTINGS` frame. Will be `true` after calling the`http2session.settings()` method. Will be `false` once all sent `SETTINGS`frames have been acknowledged. + * @since v8.4.0 + */ + readonly pendingSettingsAck: boolean; + /** + * A prototype-less object describing the current remote settings of this`Http2Session`. The remote settings are set by the _connected_ HTTP/2 peer. + * @since v8.4.0 + */ + readonly remoteSettings: Settings; + /** + * Returns a `Proxy` object that acts as a `net.Socket` (or `tls.TLSSocket`) but + * limits available methods to ones safe to use with HTTP/2. + * + * `destroy`, `emit`, `end`, `pause`, `read`, `resume`, and `write` will throw + * an error with code `ERR_HTTP2_NO_SOCKET_MANIPULATION`. See `Http2Session and Sockets` for more information. + * + * `setTimeout` method will be called on this `Http2Session`. + * + * All other interactions will be routed directly to the socket. + * @since v8.4.0 + */ + readonly socket: net.Socket | tls.TLSSocket; + /** + * Provides miscellaneous information about the current state of the`Http2Session`. + * + * An object describing the current status of this `Http2Session`. + * @since v8.4.0 + */ + readonly state: SessionState; + /** + * The `http2session.type` will be equal to`http2.constants.NGHTTP2_SESSION_SERVER` if this `Http2Session` instance is a + * server, and `http2.constants.NGHTTP2_SESSION_CLIENT` if the instance is a + * client. + * @since v8.4.0 + */ + readonly type: number; + /** + * Gracefully closes the `Http2Session`, allowing any existing streams to + * complete on their own and preventing new `Http2Stream` instances from being + * created. Once closed, `http2session.destroy()`_might_ be called if there + * are no open `Http2Stream` instances. + * + * If specified, the `callback` function is registered as a handler for the`'close'` event. + * @since v9.4.0 + */ + close(callback?: () => void): void; + /** + * Immediately terminates the `Http2Session` and the associated `net.Socket` or`tls.TLSSocket`. + * + * Once destroyed, the `Http2Session` will emit the `'close'` event. If `error`is not undefined, an `'error'` event will be emitted immediately before the`'close'` event. + * + * If there are any remaining open `Http2Streams` associated with the`Http2Session`, those will also be destroyed. + * @since v8.4.0 + * @param error An `Error` object if the `Http2Session` is being destroyed due to an error. + * @param code The HTTP/2 error code to send in the final `GOAWAY` frame. If unspecified, and `error` is not undefined, the default is `INTERNAL_ERROR`, otherwise defaults to `NO_ERROR`. + */ + destroy(error?: Error, code?: number): void; + /** + * Transmits a `GOAWAY` frame to the connected peer _without_ shutting down the`Http2Session`. + * @since v9.4.0 + * @param code An HTTP/2 error code + * @param lastStreamID The numeric ID of the last processed `Http2Stream` + * @param opaqueData A `TypedArray` or `DataView` instance containing additional data to be carried within the `GOAWAY` frame. + */ + goaway(code?: number, lastStreamID?: number, opaqueData?: NodeJS.ArrayBufferView): void; + /** + * Sends a `PING` frame to the connected HTTP/2 peer. A `callback` function must + * be provided. The method will return `true` if the `PING` was sent, `false`otherwise. + * + * The maximum number of outstanding (unacknowledged) pings is determined by the`maxOutstandingPings` configuration option. The default maximum is 10. + * + * If provided, the `payload` must be a `Buffer`, `TypedArray`, or `DataView`containing 8 bytes of data that will be transmitted with the `PING` and + * returned with the ping acknowledgment. + * + * The callback will be invoked with three arguments: an error argument that will + * be `null` if the `PING` was successfully acknowledged, a `duration` argument + * that reports the number of milliseconds elapsed since the ping was sent and the + * acknowledgment was received, and a `Buffer` containing the 8-byte `PING`payload. + * + * ```js + * session.ping(Buffer.from('abcdefgh'), (err, duration, payload) => { + * if (!err) { + * console.log(`Ping acknowledged in ${duration} milliseconds`); + * console.log(`With payload '${payload.toString()}'`); + * } + * }); + * ``` + * + * If the `payload` argument is not specified, the default payload will be the + * 64-bit timestamp (little endian) marking the start of the `PING` duration. + * @since v8.9.3 + * @param payload Optional ping payload. + */ + ping(callback: (err: Error | null, duration: number, payload: Buffer) => void): boolean; + ping( + payload: NodeJS.ArrayBufferView, + callback: (err: Error | null, duration: number, payload: Buffer) => void, + ): boolean; + /** + * Calls `ref()` on this `Http2Session`instance's underlying `net.Socket`. + * @since v9.4.0 + */ + ref(): void; + /** + * Sets the local endpoint's window size. + * The `windowSize` is the total window size to set, not + * the delta. + * + * ```js + * const http2 = require('node:http2'); + * + * const server = http2.createServer(); + * const expectedWindowSize = 2 ** 20; + * server.on('connect', (session) => { + * + * // Set local window size to be 2 ** 20 + * session.setLocalWindowSize(expectedWindowSize); + * }); + * ``` + * @since v15.3.0, v14.18.0 + */ + setLocalWindowSize(windowSize: number): void; + /** + * Used to set a callback function that is called when there is no activity on + * the `Http2Session` after `msecs` milliseconds. The given `callback` is + * registered as a listener on the `'timeout'` event. + * @since v8.4.0 + */ + setTimeout(msecs: number, callback?: () => void): void; + /** + * Updates the current local settings for this `Http2Session` and sends a new`SETTINGS` frame to the connected HTTP/2 peer. + * + * Once called, the `http2session.pendingSettingsAck` property will be `true`while the session is waiting for the remote peer to acknowledge the new + * settings. + * + * The new settings will not become effective until the `SETTINGS` acknowledgment + * is received and the `'localSettings'` event is emitted. It is possible to send + * multiple `SETTINGS` frames while acknowledgment is still pending. + * @since v8.4.0 + * @param callback Callback that is called once the session is connected or right away if the session is already connected. + */ + settings( + settings: Settings, + callback?: (err: Error | null, settings: Settings, duration: number) => void, + ): void; + /** + * Calls `unref()` on this `Http2Session`instance's underlying `net.Socket`. + * @since v9.4.0 + */ + unref(): void; + addListener(event: "close", listener: () => void): this; + addListener(event: "error", listener: (err: Error) => void): this; + addListener( + event: "frameError", + listener: (frameType: number, errorCode: number, streamID: number) => void, + ): this; + addListener( + event: "goaway", + listener: (errorCode: number, lastStreamID: number, opaqueData: Buffer) => void, + ): this; + addListener(event: "localSettings", listener: (settings: Settings) => void): this; + addListener(event: "ping", listener: () => void): this; + addListener(event: "remoteSettings", listener: (settings: Settings) => void): this; + addListener(event: "timeout", listener: () => void): this; + addListener(event: string | symbol, listener: (...args: any[]) => void): this; + emit(event: "close"): boolean; + emit(event: "error", err: Error): boolean; + emit(event: "frameError", frameType: number, errorCode: number, streamID: number): boolean; + emit(event: "goaway", errorCode: number, lastStreamID: number, opaqueData: Buffer): boolean; + emit(event: "localSettings", settings: Settings): boolean; + emit(event: "ping"): boolean; + emit(event: "remoteSettings", settings: Settings): boolean; + emit(event: "timeout"): boolean; + emit(event: string | symbol, ...args: any[]): boolean; + on(event: "close", listener: () => void): this; + on(event: "error", listener: (err: Error) => void): this; + on(event: "frameError", listener: (frameType: number, errorCode: number, streamID: number) => void): this; + on(event: "goaway", listener: (errorCode: number, lastStreamID: number, opaqueData: Buffer) => void): this; + on(event: "localSettings", listener: (settings: Settings) => void): this; + on(event: "ping", listener: () => void): this; + on(event: "remoteSettings", listener: (settings: Settings) => void): this; + on(event: "timeout", listener: () => void): this; + on(event: string | symbol, listener: (...args: any[]) => void): this; + once(event: "close", listener: () => void): this; + once(event: "error", listener: (err: Error) => void): this; + once(event: "frameError", listener: (frameType: number, errorCode: number, streamID: number) => void): this; + once(event: "goaway", listener: (errorCode: number, lastStreamID: number, opaqueData: Buffer) => void): this; + once(event: "localSettings", listener: (settings: Settings) => void): this; + once(event: "ping", listener: () => void): this; + once(event: "remoteSettings", listener: (settings: Settings) => void): this; + once(event: "timeout", listener: () => void): this; + once(event: string | symbol, listener: (...args: any[]) => void): this; + prependListener(event: "close", listener: () => void): this; + prependListener(event: "error", listener: (err: Error) => void): this; + prependListener( + event: "frameError", + listener: (frameType: number, errorCode: number, streamID: number) => void, + ): this; + prependListener( + event: "goaway", + listener: (errorCode: number, lastStreamID: number, opaqueData: Buffer) => void, + ): this; + prependListener(event: "localSettings", listener: (settings: Settings) => void): this; + prependListener(event: "ping", listener: () => void): this; + prependListener(event: "remoteSettings", listener: (settings: Settings) => void): this; + prependListener(event: "timeout", listener: () => void): this; + prependListener(event: string | symbol, listener: (...args: any[]) => void): this; + prependOnceListener(event: "close", listener: () => void): this; + prependOnceListener(event: "error", listener: (err: Error) => void): this; + prependOnceListener( + event: "frameError", + listener: (frameType: number, errorCode: number, streamID: number) => void, + ): this; + prependOnceListener( + event: "goaway", + listener: (errorCode: number, lastStreamID: number, opaqueData: Buffer) => void, + ): this; + prependOnceListener(event: "localSettings", listener: (settings: Settings) => void): this; + prependOnceListener(event: "ping", listener: () => void): this; + prependOnceListener(event: "remoteSettings", listener: (settings: Settings) => void): this; + prependOnceListener(event: "timeout", listener: () => void): this; + prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this; + } + export interface ClientHttp2Session extends Http2Session { + /** + * For HTTP/2 Client `Http2Session` instances only, the `http2session.request()`creates and returns an `Http2Stream` instance that can be used to send an + * HTTP/2 request to the connected server. + * + * When a `ClientHttp2Session` is first created, the socket may not yet be + * connected. if `clienthttp2session.request()` is called during this time, the + * actual request will be deferred until the socket is ready to go. + * If the `session` is closed before the actual request be executed, an`ERR_HTTP2_GOAWAY_SESSION` is thrown. + * + * This method is only available if `http2session.type` is equal to`http2.constants.NGHTTP2_SESSION_CLIENT`. + * + * ```js + * const http2 = require('node:http2'); + * const clientSession = http2.connect('https://localhost:1234'); + * const { + * HTTP2_HEADER_PATH, + * HTTP2_HEADER_STATUS, + * } = http2.constants; + * + * const req = clientSession.request({ [HTTP2_HEADER_PATH]: '/' }); + * req.on('response', (headers) => { + * console.log(headers[HTTP2_HEADER_STATUS]); + * req.on('data', (chunk) => { // .. }); + * req.on('end', () => { // .. }); + * }); + * ``` + * + * When the `options.waitForTrailers` option is set, the `'wantTrailers'` event + * is emitted immediately after queuing the last chunk of payload data to be sent. + * The `http2stream.sendTrailers()` method can then be called to send trailing + * headers to the peer. + * + * When `options.waitForTrailers` is set, the `Http2Stream` will not automatically + * close when the final `DATA` frame is transmitted. User code must call either`http2stream.sendTrailers()` or `http2stream.close()` to close the`Http2Stream`. + * + * When `options.signal` is set with an `AbortSignal` and then `abort` on the + * corresponding `AbortController` is called, the request will emit an `'error'`event with an `AbortError` error. + * + * The `:method` and `:path` pseudo-headers are not specified within `headers`, + * they respectively default to: + * + * * `:method` \= `'GET'` + * * `:path` \= `/` + * @since v8.4.0 + */ + request(headers?: OutgoingHttpHeaders, options?: ClientSessionRequestOptions): ClientHttp2Stream; + addListener(event: "altsvc", listener: (alt: string, origin: string, stream: number) => void): this; + addListener(event: "origin", listener: (origins: string[]) => void): this; + addListener( + event: "connect", + listener: (session: ClientHttp2Session, socket: net.Socket | tls.TLSSocket) => void, + ): this; + addListener( + event: "stream", + listener: ( + stream: ClientHttp2Stream, + headers: IncomingHttpHeaders & IncomingHttpStatusHeader, + flags: number, + ) => void, + ): this; + addListener(event: string | symbol, listener: (...args: any[]) => void): this; + emit(event: "altsvc", alt: string, origin: string, stream: number): boolean; + emit(event: "origin", origins: ReadonlyArray): boolean; + emit(event: "connect", session: ClientHttp2Session, socket: net.Socket | tls.TLSSocket): boolean; + emit( + event: "stream", + stream: ClientHttp2Stream, + headers: IncomingHttpHeaders & IncomingHttpStatusHeader, + flags: number, + ): boolean; + emit(event: string | symbol, ...args: any[]): boolean; + on(event: "altsvc", listener: (alt: string, origin: string, stream: number) => void): this; + on(event: "origin", listener: (origins: string[]) => void): this; + on(event: "connect", listener: (session: ClientHttp2Session, socket: net.Socket | tls.TLSSocket) => void): this; + on( + event: "stream", + listener: ( + stream: ClientHttp2Stream, + headers: IncomingHttpHeaders & IncomingHttpStatusHeader, + flags: number, + ) => void, + ): this; + on(event: string | symbol, listener: (...args: any[]) => void): this; + once(event: "altsvc", listener: (alt: string, origin: string, stream: number) => void): this; + once(event: "origin", listener: (origins: string[]) => void): this; + once( + event: "connect", + listener: (session: ClientHttp2Session, socket: net.Socket | tls.TLSSocket) => void, + ): this; + once( + event: "stream", + listener: ( + stream: ClientHttp2Stream, + headers: IncomingHttpHeaders & IncomingHttpStatusHeader, + flags: number, + ) => void, + ): this; + once(event: string | symbol, listener: (...args: any[]) => void): this; + prependListener(event: "altsvc", listener: (alt: string, origin: string, stream: number) => void): this; + prependListener(event: "origin", listener: (origins: string[]) => void): this; + prependListener( + event: "connect", + listener: (session: ClientHttp2Session, socket: net.Socket | tls.TLSSocket) => void, + ): this; + prependListener( + event: "stream", + listener: ( + stream: ClientHttp2Stream, + headers: IncomingHttpHeaders & IncomingHttpStatusHeader, + flags: number, + ) => void, + ): this; + prependListener(event: string | symbol, listener: (...args: any[]) => void): this; + prependOnceListener(event: "altsvc", listener: (alt: string, origin: string, stream: number) => void): this; + prependOnceListener(event: "origin", listener: (origins: string[]) => void): this; + prependOnceListener( + event: "connect", + listener: (session: ClientHttp2Session, socket: net.Socket | tls.TLSSocket) => void, + ): this; + prependOnceListener( + event: "stream", + listener: ( + stream: ClientHttp2Stream, + headers: IncomingHttpHeaders & IncomingHttpStatusHeader, + flags: number, + ) => void, + ): this; + prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this; + } + export interface AlternativeServiceOptions { + origin: number | string | url.URL; + } + export interface ServerHttp2Session extends Http2Session { + readonly server: Http2Server | Http2SecureServer; + /** + * Submits an `ALTSVC` frame (as defined by [RFC 7838](https://tools.ietf.org/html/rfc7838)) to the connected client. + * + * ```js + * const http2 = require('node:http2'); + * + * const server = http2.createServer(); + * server.on('session', (session) => { + * // Set altsvc for origin https://example.org:80 + * session.altsvc('h2=":8000"', 'https://example.org:80'); + * }); + * + * server.on('stream', (stream) => { + * // Set altsvc for a specific stream + * stream.session.altsvc('h2=":8000"', stream.id); + * }); + * ``` + * + * Sending an `ALTSVC` frame with a specific stream ID indicates that the alternate + * service is associated with the origin of the given `Http2Stream`. + * + * The `alt` and origin string _must_ contain only ASCII bytes and are + * strictly interpreted as a sequence of ASCII bytes. The special value `'clear'`may be passed to clear any previously set alternative service for a given + * domain. + * + * When a string is passed for the `originOrStream` argument, it will be parsed as + * a URL and the origin will be derived. For instance, the origin for the + * HTTP URL `'https://example.org/foo/bar'` is the ASCII string`'https://example.org'`. An error will be thrown if either the given string + * cannot be parsed as a URL or if a valid origin cannot be derived. + * + * A `URL` object, or any object with an `origin` property, may be passed as`originOrStream`, in which case the value of the `origin` property will be + * used. The value of the `origin` property _must_ be a properly serialized + * ASCII origin. + * @since v9.4.0 + * @param alt A description of the alternative service configuration as defined by `RFC 7838`. + * @param originOrStream Either a URL string specifying the origin (or an `Object` with an `origin` property) or the numeric identifier of an active `Http2Stream` as given by the + * `http2stream.id` property. + */ + altsvc(alt: string, originOrStream: number | string | url.URL | AlternativeServiceOptions): void; + /** + * Submits an `ORIGIN` frame (as defined by [RFC 8336](https://tools.ietf.org/html/rfc8336)) to the connected client + * to advertise the set of origins for which the server is capable of providing + * authoritative responses. + * + * ```js + * const http2 = require('node:http2'); + * const options = getSecureOptionsSomehow(); + * const server = http2.createSecureServer(options); + * server.on('stream', (stream) => { + * stream.respond(); + * stream.end('ok'); + * }); + * server.on('session', (session) => { + * session.origin('https://example.com', 'https://example.org'); + * }); + * ``` + * + * When a string is passed as an `origin`, it will be parsed as a URL and the + * origin will be derived. For instance, the origin for the HTTP URL`'https://example.org/foo/bar'` is the ASCII string`'https://example.org'`. An error will be thrown if either the given + * string + * cannot be parsed as a URL or if a valid origin cannot be derived. + * + * A `URL` object, or any object with an `origin` property, may be passed as + * an `origin`, in which case the value of the `origin` property will be + * used. The value of the `origin` property _must_ be a properly serialized + * ASCII origin. + * + * Alternatively, the `origins` option may be used when creating a new HTTP/2 + * server using the `http2.createSecureServer()` method: + * + * ```js + * const http2 = require('node:http2'); + * const options = getSecureOptionsSomehow(); + * options.origins = ['https://example.com', 'https://example.org']; + * const server = http2.createSecureServer(options); + * server.on('stream', (stream) => { + * stream.respond(); + * stream.end('ok'); + * }); + * ``` + * @since v10.12.0 + * @param origins One or more URL Strings passed as separate arguments. + */ + origin( + ...origins: Array< + | string + | url.URL + | { + origin: string; + } + > + ): void; + addListener( + event: "connect", + listener: (session: ServerHttp2Session, socket: net.Socket | tls.TLSSocket) => void, + ): this; + addListener( + event: "stream", + listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void, + ): this; + addListener(event: string | symbol, listener: (...args: any[]) => void): this; + emit(event: "connect", session: ServerHttp2Session, socket: net.Socket | tls.TLSSocket): boolean; + emit(event: "stream", stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number): boolean; + emit(event: string | symbol, ...args: any[]): boolean; + on(event: "connect", listener: (session: ServerHttp2Session, socket: net.Socket | tls.TLSSocket) => void): this; + on( + event: "stream", + listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void, + ): this; + on(event: string | symbol, listener: (...args: any[]) => void): this; + once( + event: "connect", + listener: (session: ServerHttp2Session, socket: net.Socket | tls.TLSSocket) => void, + ): this; + once( + event: "stream", + listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void, + ): this; + once(event: string | symbol, listener: (...args: any[]) => void): this; + prependListener( + event: "connect", + listener: (session: ServerHttp2Session, socket: net.Socket | tls.TLSSocket) => void, + ): this; + prependListener( + event: "stream", + listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void, + ): this; + prependListener(event: string | symbol, listener: (...args: any[]) => void): this; + prependOnceListener( + event: "connect", + listener: (session: ServerHttp2Session, socket: net.Socket | tls.TLSSocket) => void, + ): this; + prependOnceListener( + event: "stream", + listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void, + ): this; + prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this; + } + // Http2Server + export interface SessionOptions { + maxDeflateDynamicTableSize?: number | undefined; + maxSessionMemory?: number | undefined; + maxHeaderListPairs?: number | undefined; + maxOutstandingPings?: number | undefined; + maxSendHeaderBlockLength?: number | undefined; + paddingStrategy?: number | undefined; + peerMaxConcurrentStreams?: number | undefined; + settings?: Settings | undefined; + /** + * Specifies a timeout in milliseconds that + * a server should wait when an [`'unknownProtocol'`][] is emitted. If the + * socket has not been destroyed by that time the server will destroy it. + * @default 100000 + */ + unknownProtocolTimeout?: number | undefined; + selectPadding?(frameLen: number, maxFrameLen: number): number; + } + export interface ClientSessionOptions extends SessionOptions { + maxReservedRemoteStreams?: number | undefined; + createConnection?: ((authority: url.URL, option: SessionOptions) => stream.Duplex) | undefined; + protocol?: "http:" | "https:" | undefined; + } + export interface ServerSessionOptions extends SessionOptions { + Http1IncomingMessage?: typeof IncomingMessage | undefined; + Http1ServerResponse?: typeof ServerResponse | undefined; + Http2ServerRequest?: typeof Http2ServerRequest | undefined; + Http2ServerResponse?: typeof Http2ServerResponse | undefined; + } + export interface SecureClientSessionOptions extends ClientSessionOptions, tls.ConnectionOptions {} + export interface SecureServerSessionOptions extends ServerSessionOptions, tls.TlsOptions {} + export interface ServerOptions extends ServerSessionOptions {} + export interface SecureServerOptions extends SecureServerSessionOptions { + allowHTTP1?: boolean | undefined; + origins?: string[] | undefined; + } + interface HTTP2ServerCommon { + setTimeout(msec?: number, callback?: () => void): this; + /** + * Throws ERR_HTTP2_INVALID_SETTING_VALUE for invalid settings values. + * Throws ERR_INVALID_ARG_TYPE for invalid settings argument. + */ + updateSettings(settings: Settings): void; + } + export interface Http2Server extends net.Server, HTTP2ServerCommon { + addListener( + event: "checkContinue", + listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void, + ): this; + addListener( + event: "request", + listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void, + ): this; + addListener(event: "session", listener: (session: ServerHttp2Session) => void): this; + addListener(event: "sessionError", listener: (err: Error) => void): this; + addListener( + event: "stream", + listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void, + ): this; + addListener(event: "timeout", listener: () => void): this; + addListener(event: string | symbol, listener: (...args: any[]) => void): this; + emit(event: "checkContinue", request: Http2ServerRequest, response: Http2ServerResponse): boolean; + emit(event: "request", request: Http2ServerRequest, response: Http2ServerResponse): boolean; + emit(event: "session", session: ServerHttp2Session): boolean; + emit(event: "sessionError", err: Error): boolean; + emit(event: "stream", stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number): boolean; + emit(event: "timeout"): boolean; + emit(event: string | symbol, ...args: any[]): boolean; + on( + event: "checkContinue", + listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void, + ): this; + on(event: "request", listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this; + on(event: "session", listener: (session: ServerHttp2Session) => void): this; + on(event: "sessionError", listener: (err: Error) => void): this; + on( + event: "stream", + listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void, + ): this; + on(event: "timeout", listener: () => void): this; + on(event: string | symbol, listener: (...args: any[]) => void): this; + once( + event: "checkContinue", + listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void, + ): this; + once(event: "request", listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this; + once(event: "session", listener: (session: ServerHttp2Session) => void): this; + once(event: "sessionError", listener: (err: Error) => void): this; + once( + event: "stream", + listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void, + ): this; + once(event: "timeout", listener: () => void): this; + once(event: string | symbol, listener: (...args: any[]) => void): this; + prependListener( + event: "checkContinue", + listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void, + ): this; + prependListener( + event: "request", + listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void, + ): this; + prependListener(event: "session", listener: (session: ServerHttp2Session) => void): this; + prependListener(event: "sessionError", listener: (err: Error) => void): this; + prependListener( + event: "stream", + listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void, + ): this; + prependListener(event: "timeout", listener: () => void): this; + prependListener(event: string | symbol, listener: (...args: any[]) => void): this; + prependOnceListener( + event: "checkContinue", + listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void, + ): this; + prependOnceListener( + event: "request", + listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void, + ): this; + prependOnceListener(event: "session", listener: (session: ServerHttp2Session) => void): this; + prependOnceListener(event: "sessionError", listener: (err: Error) => void): this; + prependOnceListener( + event: "stream", + listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void, + ): this; + prependOnceListener(event: "timeout", listener: () => void): this; + prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this; + } + export interface Http2SecureServer extends tls.Server, HTTP2ServerCommon { + addListener( + event: "checkContinue", + listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void, + ): this; + addListener( + event: "request", + listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void, + ): this; + addListener(event: "session", listener: (session: ServerHttp2Session) => void): this; + addListener(event: "sessionError", listener: (err: Error) => void): this; + addListener( + event: "stream", + listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void, + ): this; + addListener(event: "timeout", listener: () => void): this; + addListener(event: "unknownProtocol", listener: (socket: tls.TLSSocket) => void): this; + addListener(event: string | symbol, listener: (...args: any[]) => void): this; + emit(event: "checkContinue", request: Http2ServerRequest, response: Http2ServerResponse): boolean; + emit(event: "request", request: Http2ServerRequest, response: Http2ServerResponse): boolean; + emit(event: "session", session: ServerHttp2Session): boolean; + emit(event: "sessionError", err: Error): boolean; + emit(event: "stream", stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number): boolean; + emit(event: "timeout"): boolean; + emit(event: "unknownProtocol", socket: tls.TLSSocket): boolean; + emit(event: string | symbol, ...args: any[]): boolean; + on( + event: "checkContinue", + listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void, + ): this; + on(event: "request", listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this; + on(event: "session", listener: (session: ServerHttp2Session) => void): this; + on(event: "sessionError", listener: (err: Error) => void): this; + on( + event: "stream", + listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void, + ): this; + on(event: "timeout", listener: () => void): this; + on(event: "unknownProtocol", listener: (socket: tls.TLSSocket) => void): this; + on(event: string | symbol, listener: (...args: any[]) => void): this; + once( + event: "checkContinue", + listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void, + ): this; + once(event: "request", listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this; + once(event: "session", listener: (session: ServerHttp2Session) => void): this; + once(event: "sessionError", listener: (err: Error) => void): this; + once( + event: "stream", + listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void, + ): this; + once(event: "timeout", listener: () => void): this; + once(event: "unknownProtocol", listener: (socket: tls.TLSSocket) => void): this; + once(event: string | symbol, listener: (...args: any[]) => void): this; + prependListener( + event: "checkContinue", + listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void, + ): this; + prependListener( + event: "request", + listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void, + ): this; + prependListener(event: "session", listener: (session: ServerHttp2Session) => void): this; + prependListener(event: "sessionError", listener: (err: Error) => void): this; + prependListener( + event: "stream", + listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void, + ): this; + prependListener(event: "timeout", listener: () => void): this; + prependListener(event: "unknownProtocol", listener: (socket: tls.TLSSocket) => void): this; + prependListener(event: string | symbol, listener: (...args: any[]) => void): this; + prependOnceListener( + event: "checkContinue", + listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void, + ): this; + prependOnceListener( + event: "request", + listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void, + ): this; + prependOnceListener(event: "session", listener: (session: ServerHttp2Session) => void): this; + prependOnceListener(event: "sessionError", listener: (err: Error) => void): this; + prependOnceListener( + event: "stream", + listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void, + ): this; + prependOnceListener(event: "timeout", listener: () => void): this; + prependOnceListener(event: "unknownProtocol", listener: (socket: tls.TLSSocket) => void): this; + prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this; + } + /** + * A `Http2ServerRequest` object is created by {@link Server} or {@link SecureServer} and passed as the first argument to the `'request'` event. It may be used to access a request status, + * headers, and + * data. + * @since v8.4.0 + */ + export class Http2ServerRequest extends stream.Readable { + constructor( + stream: ServerHttp2Stream, + headers: IncomingHttpHeaders, + options: stream.ReadableOptions, + rawHeaders: ReadonlyArray, + ); + /** + * The `request.aborted` property will be `true` if the request has + * been aborted. + * @since v10.1.0 + */ + readonly aborted: boolean; + /** + * The request authority pseudo header field. Because HTTP/2 allows requests + * to set either `:authority` or `host`, this value is derived from`req.headers[':authority']` if present. Otherwise, it is derived from`req.headers['host']`. + * @since v8.4.0 + */ + readonly authority: string; + /** + * See `request.socket`. + * @since v8.4.0 + * @deprecated Since v13.0.0 - Use `socket`. + */ + readonly connection: net.Socket | tls.TLSSocket; + /** + * The `request.complete` property will be `true` if the request has + * been completed, aborted, or destroyed. + * @since v12.10.0 + */ + readonly complete: boolean; + /** + * The request/response headers object. + * + * Key-value pairs of header names and values. Header names are lower-cased. + * + * ```js + * // Prints something like: + * // + * // { 'user-agent': 'curl/7.22.0', + * // host: '127.0.0.1:8000', + * // accept: '*' } + * console.log(request.headers); + * ``` + * + * See `HTTP/2 Headers Object`. + * + * In HTTP/2, the request path, host name, protocol, and method are represented as + * special headers prefixed with the `:` character (e.g. `':path'`). These special + * headers will be included in the `request.headers` object. Care must be taken not + * to inadvertently modify these special headers or errors may occur. For instance, + * removing all headers from the request will cause errors to occur: + * + * ```js + * removeAllHeaders(request.headers); + * assert(request.url); // Fails because the :path header has been removed + * ``` + * @since v8.4.0 + */ + readonly headers: IncomingHttpHeaders; + /** + * In case of server request, the HTTP version sent by the client. In the case of + * client response, the HTTP version of the connected-to server. Returns`'2.0'`. + * + * Also `message.httpVersionMajor` is the first integer and`message.httpVersionMinor` is the second. + * @since v8.4.0 + */ + readonly httpVersion: string; + readonly httpVersionMinor: number; + readonly httpVersionMajor: number; + /** + * The request method as a string. Read-only. Examples: `'GET'`, `'DELETE'`. + * @since v8.4.0 + */ + readonly method: string; + /** + * The raw request/response headers list exactly as they were received. + * + * The keys and values are in the same list. It is _not_ a + * list of tuples. So, the even-numbered offsets are key values, and the + * odd-numbered offsets are the associated values. + * + * Header names are not lowercased, and duplicates are not merged. + * + * ```js + * // Prints something like: + * // + * // [ 'user-agent', + * // 'this is invalid because there can be only one', + * // 'User-Agent', + * // 'curl/7.22.0', + * // 'Host', + * // '127.0.0.1:8000', + * // 'ACCEPT', + * // '*' ] + * console.log(request.rawHeaders); + * ``` + * @since v8.4.0 + */ + readonly rawHeaders: string[]; + /** + * The raw request/response trailer keys and values exactly as they were + * received. Only populated at the `'end'` event. + * @since v8.4.0 + */ + readonly rawTrailers: string[]; + /** + * The request scheme pseudo header field indicating the scheme + * portion of the target URL. + * @since v8.4.0 + */ + readonly scheme: string; + /** + * Returns a `Proxy` object that acts as a `net.Socket` (or `tls.TLSSocket`) but + * applies getters, setters, and methods based on HTTP/2 logic. + * + * `destroyed`, `readable`, and `writable` properties will be retrieved from and + * set on `request.stream`. + * + * `destroy`, `emit`, `end`, `on` and `once` methods will be called on`request.stream`. + * + * `setTimeout` method will be called on `request.stream.session`. + * + * `pause`, `read`, `resume`, and `write` will throw an error with code`ERR_HTTP2_NO_SOCKET_MANIPULATION`. See `Http2Session and Sockets` for + * more information. + * + * All other interactions will be routed directly to the socket. With TLS support, + * use `request.socket.getPeerCertificate()` to obtain the client's + * authentication details. + * @since v8.4.0 + */ + readonly socket: net.Socket | tls.TLSSocket; + /** + * The `Http2Stream` object backing the request. + * @since v8.4.0 + */ + readonly stream: ServerHttp2Stream; + /** + * The request/response trailers object. Only populated at the `'end'` event. + * @since v8.4.0 + */ + readonly trailers: IncomingHttpHeaders; + /** + * Request URL string. This contains only the URL that is present in the actual + * HTTP request. If the request is: + * + * ```http + * GET /status?name=ryan HTTP/1.1 + * Accept: text/plain + * ``` + * + * Then `request.url` will be: + * + * ```js + * '/status?name=ryan' + * ``` + * + * To parse the url into its parts, `new URL()` can be used: + * + * ```console + * $ node + * > new URL('/status?name=ryan', 'http://example.com') + * URL { + * href: 'http://example.com/status?name=ryan', + * origin: 'http://example.com', + * protocol: 'http:', + * username: '', + * password: '', + * host: 'example.com', + * hostname: 'example.com', + * port: '', + * pathname: '/status', + * search: '?name=ryan', + * searchParams: URLSearchParams { 'name' => 'ryan' }, + * hash: '' + * } + * ``` + * @since v8.4.0 + */ + url: string; + /** + * Sets the `Http2Stream`'s timeout value to `msecs`. If a callback is + * provided, then it is added as a listener on the `'timeout'` event on + * the response object. + * + * If no `'timeout'` listener is added to the request, the response, or + * the server, then `Http2Stream` s are destroyed when they time out. If a + * handler is assigned to the request, the response, or the server's `'timeout'`events, timed out sockets must be handled explicitly. + * @since v8.4.0 + */ + setTimeout(msecs: number, callback?: () => void): void; + read(size?: number): Buffer | string | null; + addListener(event: "aborted", listener: (hadError: boolean, code: number) => void): this; + addListener(event: "close", listener: () => void): this; + addListener(event: "data", listener: (chunk: Buffer | string) => void): this; + addListener(event: "end", listener: () => void): this; + addListener(event: "readable", listener: () => void): this; + addListener(event: "error", listener: (err: Error) => void): this; + addListener(event: string | symbol, listener: (...args: any[]) => void): this; + emit(event: "aborted", hadError: boolean, code: number): boolean; + emit(event: "close"): boolean; + emit(event: "data", chunk: Buffer | string): boolean; + emit(event: "end"): boolean; + emit(event: "readable"): boolean; + emit(event: "error", err: Error): boolean; + emit(event: string | symbol, ...args: any[]): boolean; + on(event: "aborted", listener: (hadError: boolean, code: number) => void): this; + on(event: "close", listener: () => void): this; + on(event: "data", listener: (chunk: Buffer | string) => void): this; + on(event: "end", listener: () => void): this; + on(event: "readable", listener: () => void): this; + on(event: "error", listener: (err: Error) => void): this; + on(event: string | symbol, listener: (...args: any[]) => void): this; + once(event: "aborted", listener: (hadError: boolean, code: number) => void): this; + once(event: "close", listener: () => void): this; + once(event: "data", listener: (chunk: Buffer | string) => void): this; + once(event: "end", listener: () => void): this; + once(event: "readable", listener: () => void): this; + once(event: "error", listener: (err: Error) => void): this; + once(event: string | symbol, listener: (...args: any[]) => void): this; + prependListener(event: "aborted", listener: (hadError: boolean, code: number) => void): this; + prependListener(event: "close", listener: () => void): this; + prependListener(event: "data", listener: (chunk: Buffer | string) => void): this; + prependListener(event: "end", listener: () => void): this; + prependListener(event: "readable", listener: () => void): this; + prependListener(event: "error", listener: (err: Error) => void): this; + prependListener(event: string | symbol, listener: (...args: any[]) => void): this; + prependOnceListener(event: "aborted", listener: (hadError: boolean, code: number) => void): this; + prependOnceListener(event: "close", listener: () => void): this; + prependOnceListener(event: "data", listener: (chunk: Buffer | string) => void): this; + prependOnceListener(event: "end", listener: () => void): this; + prependOnceListener(event: "readable", listener: () => void): this; + prependOnceListener(event: "error", listener: (err: Error) => void): this; + prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this; + } + /** + * This object is created internally by an HTTP server, not by the user. It is + * passed as the second parameter to the `'request'` event. + * @since v8.4.0 + */ + export class Http2ServerResponse extends stream.Writable { + constructor(stream: ServerHttp2Stream); + /** + * See `response.socket`. + * @since v8.4.0 + * @deprecated Since v13.0.0 - Use `socket`. + */ + readonly connection: net.Socket | tls.TLSSocket; + /** + * Boolean value that indicates whether the response has completed. Starts + * as `false`. After `response.end()` executes, the value will be `true`. + * @since v8.4.0 + * @deprecated Since v13.4.0,v12.16.0 - Use `writableEnded`. + */ + readonly finished: boolean; + /** + * True if headers were sent, false otherwise (read-only). + * @since v8.4.0 + */ + readonly headersSent: boolean; + /** + * A reference to the original HTTP2 `request` object. + * @since v15.7.0 + */ + readonly req: Http2ServerRequest; + /** + * Returns a `Proxy` object that acts as a `net.Socket` (or `tls.TLSSocket`) but + * applies getters, setters, and methods based on HTTP/2 logic. + * + * `destroyed`, `readable`, and `writable` properties will be retrieved from and + * set on `response.stream`. + * + * `destroy`, `emit`, `end`, `on` and `once` methods will be called on`response.stream`. + * + * `setTimeout` method will be called on `response.stream.session`. + * + * `pause`, `read`, `resume`, and `write` will throw an error with code`ERR_HTTP2_NO_SOCKET_MANIPULATION`. See `Http2Session and Sockets` for + * more information. + * + * All other interactions will be routed directly to the socket. + * + * ```js + * const http2 = require('node:http2'); + * const server = http2.createServer((req, res) => { + * const ip = req.socket.remoteAddress; + * const port = req.socket.remotePort; + * res.end(`Your IP address is ${ip} and your source port is ${port}.`); + * }).listen(3000); + * ``` + * @since v8.4.0 + */ + readonly socket: net.Socket | tls.TLSSocket; + /** + * The `Http2Stream` object backing the response. + * @since v8.4.0 + */ + readonly stream: ServerHttp2Stream; + /** + * When true, the Date header will be automatically generated and sent in + * the response if it is not already present in the headers. Defaults to true. + * + * This should only be disabled for testing; HTTP requires the Date header + * in responses. + * @since v8.4.0 + */ + sendDate: boolean; + /** + * When using implicit headers (not calling `response.writeHead()` explicitly), + * this property controls the status code that will be sent to the client when + * the headers get flushed. + * + * ```js + * response.statusCode = 404; + * ``` + * + * After response header was sent to the client, this property indicates the + * status code which was sent out. + * @since v8.4.0 + */ + statusCode: number; + /** + * Status message is not supported by HTTP/2 (RFC 7540 8.1.2.4). It returns + * an empty string. + * @since v8.4.0 + */ + statusMessage: ""; + /** + * This method adds HTTP trailing headers (a header but at the end of the + * message) to the response. + * + * Attempting to set a header field name or value that contains invalid characters + * will result in a `TypeError` being thrown. + * @since v8.4.0 + */ + addTrailers(trailers: OutgoingHttpHeaders): void; + /** + * This method signals to the server that all of the response headers and body + * have been sent; that server should consider this message complete. + * The method, `response.end()`, MUST be called on each response. + * + * If `data` is specified, it is equivalent to calling `response.write(data, encoding)` followed by `response.end(callback)`. + * + * If `callback` is specified, it will be called when the response stream + * is finished. + * @since v8.4.0 + */ + end(callback?: () => void): this; + end(data: string | Uint8Array, callback?: () => void): this; + end(data: string | Uint8Array, encoding: BufferEncoding, callback?: () => void): this; + /** + * Reads out a header that has already been queued but not sent to the client. + * The name is case-insensitive. + * + * ```js + * const contentType = response.getHeader('content-type'); + * ``` + * @since v8.4.0 + */ + getHeader(name: string): string; + /** + * Returns an array containing the unique names of the current outgoing headers. + * All header names are lowercase. + * + * ```js + * response.setHeader('Foo', 'bar'); + * response.setHeader('Set-Cookie', ['foo=bar', 'bar=baz']); + * + * const headerNames = response.getHeaderNames(); + * // headerNames === ['foo', 'set-cookie'] + * ``` + * @since v8.4.0 + */ + getHeaderNames(): string[]; + /** + * Returns a shallow copy of the current outgoing headers. Since a shallow copy + * is used, array values may be mutated without additional calls to various + * header-related http module methods. The keys of the returned object are the + * header names and the values are the respective header values. All header names + * are lowercase. + * + * The object returned by the `response.getHeaders()` method _does not_prototypically inherit from the JavaScript `Object`. This means that typical`Object` methods such as `obj.toString()`, + * `obj.hasOwnProperty()`, and others + * are not defined and _will not work_. + * + * ```js + * response.setHeader('Foo', 'bar'); + * response.setHeader('Set-Cookie', ['foo=bar', 'bar=baz']); + * + * const headers = response.getHeaders(); + * // headers === { foo: 'bar', 'set-cookie': ['foo=bar', 'bar=baz'] } + * ``` + * @since v8.4.0 + */ + getHeaders(): OutgoingHttpHeaders; + /** + * Returns `true` if the header identified by `name` is currently set in the + * outgoing headers. The header name matching is case-insensitive. + * + * ```js + * const hasContentType = response.hasHeader('content-type'); + * ``` + * @since v8.4.0 + */ + hasHeader(name: string): boolean; + /** + * Removes a header that has been queued for implicit sending. + * + * ```js + * response.removeHeader('Content-Encoding'); + * ``` + * @since v8.4.0 + */ + removeHeader(name: string): void; + /** + * Sets a single header value for implicit headers. If this header already exists + * in the to-be-sent headers, its value will be replaced. Use an array of strings + * here to send multiple headers with the same name. + * + * ```js + * response.setHeader('Content-Type', 'text/html; charset=utf-8'); + * ``` + * + * or + * + * ```js + * response.setHeader('Set-Cookie', ['type=ninja', 'language=javascript']); + * ``` + * + * Attempting to set a header field name or value that contains invalid characters + * will result in a `TypeError` being thrown. + * + * When headers have been set with `response.setHeader()`, they will be merged + * with any headers passed to `response.writeHead()`, with the headers passed + * to `response.writeHead()` given precedence. + * + * ```js + * // Returns content-type = text/plain + * const server = http2.createServer((req, res) => { + * res.setHeader('Content-Type', 'text/html; charset=utf-8'); + * res.setHeader('X-Foo', 'bar'); + * res.writeHead(200, { 'Content-Type': 'text/plain; charset=utf-8' }); + * res.end('ok'); + * }); + * ``` + * @since v8.4.0 + */ + setHeader(name: string, value: number | string | ReadonlyArray): void; + /** + * Sets the `Http2Stream`'s timeout value to `msecs`. If a callback is + * provided, then it is added as a listener on the `'timeout'` event on + * the response object. + * + * If no `'timeout'` listener is added to the request, the response, or + * the server, then `Http2Stream` s are destroyed when they time out. If a + * handler is assigned to the request, the response, or the server's `'timeout'`events, timed out sockets must be handled explicitly. + * @since v8.4.0 + */ + setTimeout(msecs: number, callback?: () => void): void; + /** + * If this method is called and `response.writeHead()` has not been called, + * it will switch to implicit header mode and flush the implicit headers. + * + * This sends a chunk of the response body. This method may + * be called multiple times to provide successive parts of the body. + * + * In the `node:http` module, the response body is omitted when the + * request is a HEAD request. Similarly, the `204` and `304` responses _must not_ include a message body. + * + * `chunk` can be a string or a buffer. If `chunk` is a string, + * the second parameter specifies how to encode it into a byte stream. + * By default the `encoding` is `'utf8'`. `callback` will be called when this chunk + * of data is flushed. + * + * This is the raw HTTP body and has nothing to do with higher-level multi-part + * body encodings that may be used. + * + * The first time `response.write()` is called, it will send the buffered + * header information and the first chunk of the body to the client. The second + * time `response.write()` is called, Node.js assumes data will be streamed, + * and sends the new data separately. That is, the response is buffered up to the + * first chunk of the body. + * + * Returns `true` if the entire data was flushed successfully to the kernel + * buffer. Returns `false` if all or part of the data was queued in user memory.`'drain'` will be emitted when the buffer is free again. + * @since v8.4.0 + */ + write(chunk: string | Uint8Array, callback?: (err: Error) => void): boolean; + write(chunk: string | Uint8Array, encoding: BufferEncoding, callback?: (err: Error) => void): boolean; + /** + * Sends a status `100 Continue` to the client, indicating that the request body + * should be sent. See the `'checkContinue'` event on `Http2Server` and`Http2SecureServer`. + * @since v8.4.0 + */ + writeContinue(): void; + /** + * Sends a status `103 Early Hints` to the client with a Link header, + * indicating that the user agent can preload/preconnect the linked resources. + * The `hints` is an object containing the values of headers to be sent with + * early hints message. + * + * **Example** + * + * ```js + * const earlyHintsLink = '; rel=preload; as=style'; + * response.writeEarlyHints({ + * 'link': earlyHintsLink, + * }); + * + * const earlyHintsLinks = [ + * '; rel=preload; as=style', + * '; rel=preload; as=script', + * ]; + * response.writeEarlyHints({ + * 'link': earlyHintsLinks, + * }); + * ``` + * @since v18.11.0 + */ + writeEarlyHints(hints: Record): void; + /** + * Sends a response header to the request. The status code is a 3-digit HTTP + * status code, like `404`. The last argument, `headers`, are the response headers. + * + * Returns a reference to the `Http2ServerResponse`, so that calls can be chained. + * + * For compatibility with `HTTP/1`, a human-readable `statusMessage` may be + * passed as the second argument. However, because the `statusMessage` has no + * meaning within HTTP/2, the argument will have no effect and a process warning + * will be emitted. + * + * ```js + * const body = 'hello world'; + * response.writeHead(200, { + * 'Content-Length': Buffer.byteLength(body), + * 'Content-Type': 'text/plain; charset=utf-8', + * }); + * ``` + * + * `Content-Length` is given in bytes not characters. The`Buffer.byteLength()` API may be used to determine the number of bytes in a + * given encoding. On outbound messages, Node.js does not check if Content-Length + * and the length of the body being transmitted are equal or not. However, when + * receiving messages, Node.js will automatically reject messages when the`Content-Length` does not match the actual payload size. + * + * This method may be called at most one time on a message before `response.end()` is called. + * + * If `response.write()` or `response.end()` are called before calling + * this, the implicit/mutable headers will be calculated and call this function. + * + * When headers have been set with `response.setHeader()`, they will be merged + * with any headers passed to `response.writeHead()`, with the headers passed + * to `response.writeHead()` given precedence. + * + * ```js + * // Returns content-type = text/plain + * const server = http2.createServer((req, res) => { + * res.setHeader('Content-Type', 'text/html; charset=utf-8'); + * res.setHeader('X-Foo', 'bar'); + * res.writeHead(200, { 'Content-Type': 'text/plain; charset=utf-8' }); + * res.end('ok'); + * }); + * ``` + * + * Attempting to set a header field name or value that contains invalid characters + * will result in a `TypeError` being thrown. + * @since v8.4.0 + */ + writeHead(statusCode: number, headers?: OutgoingHttpHeaders): this; + writeHead(statusCode: number, statusMessage: string, headers?: OutgoingHttpHeaders): this; + /** + * Call `http2stream.pushStream()` with the given headers, and wrap the + * given `Http2Stream` on a newly created `Http2ServerResponse` as the callback + * parameter if successful. When `Http2ServerRequest` is closed, the callback is + * called with an error `ERR_HTTP2_INVALID_STREAM`. + * @since v8.4.0 + * @param headers An object describing the headers + * @param callback Called once `http2stream.pushStream()` is finished, or either when the attempt to create the pushed `Http2Stream` has failed or has been rejected, or the state of + * `Http2ServerRequest` is closed prior to calling the `http2stream.pushStream()` method + */ + createPushResponse( + headers: OutgoingHttpHeaders, + callback: (err: Error | null, res: Http2ServerResponse) => void, + ): void; + addListener(event: "close", listener: () => void): this; + addListener(event: "drain", listener: () => void): this; + addListener(event: "error", listener: (error: Error) => void): this; + addListener(event: "finish", listener: () => void): this; + addListener(event: "pipe", listener: (src: stream.Readable) => void): this; + addListener(event: "unpipe", listener: (src: stream.Readable) => void): this; + addListener(event: string | symbol, listener: (...args: any[]) => void): this; + emit(event: "close"): boolean; + emit(event: "drain"): boolean; + emit(event: "error", error: Error): boolean; + emit(event: "finish"): boolean; + emit(event: "pipe", src: stream.Readable): boolean; + emit(event: "unpipe", src: stream.Readable): boolean; + emit(event: string | symbol, ...args: any[]): boolean; + on(event: "close", listener: () => void): this; + on(event: "drain", listener: () => void): this; + on(event: "error", listener: (error: Error) => void): this; + on(event: "finish", listener: () => void): this; + on(event: "pipe", listener: (src: stream.Readable) => void): this; + on(event: "unpipe", listener: (src: stream.Readable) => void): this; + on(event: string | symbol, listener: (...args: any[]) => void): this; + once(event: "close", listener: () => void): this; + once(event: "drain", listener: () => void): this; + once(event: "error", listener: (error: Error) => void): this; + once(event: "finish", listener: () => void): this; + once(event: "pipe", listener: (src: stream.Readable) => void): this; + once(event: "unpipe", listener: (src: stream.Readable) => void): this; + once(event: string | symbol, listener: (...args: any[]) => void): this; + prependListener(event: "close", listener: () => void): this; + prependListener(event: "drain", listener: () => void): this; + prependListener(event: "error", listener: (error: Error) => void): this; + prependListener(event: "finish", listener: () => void): this; + prependListener(event: "pipe", listener: (src: stream.Readable) => void): this; + prependListener(event: "unpipe", listener: (src: stream.Readable) => void): this; + prependListener(event: string | symbol, listener: (...args: any[]) => void): this; + prependOnceListener(event: "close", listener: () => void): this; + prependOnceListener(event: "drain", listener: () => void): this; + prependOnceListener(event: "error", listener: (error: Error) => void): this; + prependOnceListener(event: "finish", listener: () => void): this; + prependOnceListener(event: "pipe", listener: (src: stream.Readable) => void): this; + prependOnceListener(event: "unpipe", listener: (src: stream.Readable) => void): this; + prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this; + } + export namespace constants { + const NGHTTP2_SESSION_SERVER: number; + const NGHTTP2_SESSION_CLIENT: number; + const NGHTTP2_STREAM_STATE_IDLE: number; + const NGHTTP2_STREAM_STATE_OPEN: number; + const NGHTTP2_STREAM_STATE_RESERVED_LOCAL: number; + const NGHTTP2_STREAM_STATE_RESERVED_REMOTE: number; + const NGHTTP2_STREAM_STATE_HALF_CLOSED_LOCAL: number; + const NGHTTP2_STREAM_STATE_HALF_CLOSED_REMOTE: number; + const NGHTTP2_STREAM_STATE_CLOSED: number; + const NGHTTP2_NO_ERROR: number; + const NGHTTP2_PROTOCOL_ERROR: number; + const NGHTTP2_INTERNAL_ERROR: number; + const NGHTTP2_FLOW_CONTROL_ERROR: number; + const NGHTTP2_SETTINGS_TIMEOUT: number; + const NGHTTP2_STREAM_CLOSED: number; + const NGHTTP2_FRAME_SIZE_ERROR: number; + const NGHTTP2_REFUSED_STREAM: number; + const NGHTTP2_CANCEL: number; + const NGHTTP2_COMPRESSION_ERROR: number; + const NGHTTP2_CONNECT_ERROR: number; + const NGHTTP2_ENHANCE_YOUR_CALM: number; + const NGHTTP2_INADEQUATE_SECURITY: number; + const NGHTTP2_HTTP_1_1_REQUIRED: number; + const NGHTTP2_ERR_FRAME_SIZE_ERROR: number; + const NGHTTP2_FLAG_NONE: number; + const NGHTTP2_FLAG_END_STREAM: number; + const NGHTTP2_FLAG_END_HEADERS: number; + const NGHTTP2_FLAG_ACK: number; + const NGHTTP2_FLAG_PADDED: number; + const NGHTTP2_FLAG_PRIORITY: number; + const DEFAULT_SETTINGS_HEADER_TABLE_SIZE: number; + const DEFAULT_SETTINGS_ENABLE_PUSH: number; + const DEFAULT_SETTINGS_INITIAL_WINDOW_SIZE: number; + const DEFAULT_SETTINGS_MAX_FRAME_SIZE: number; + const MAX_MAX_FRAME_SIZE: number; + const MIN_MAX_FRAME_SIZE: number; + const MAX_INITIAL_WINDOW_SIZE: number; + const NGHTTP2_DEFAULT_WEIGHT: number; + const NGHTTP2_SETTINGS_HEADER_TABLE_SIZE: number; + const NGHTTP2_SETTINGS_ENABLE_PUSH: number; + const NGHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS: number; + const NGHTTP2_SETTINGS_INITIAL_WINDOW_SIZE: number; + const NGHTTP2_SETTINGS_MAX_FRAME_SIZE: number; + const NGHTTP2_SETTINGS_MAX_HEADER_LIST_SIZE: number; + const PADDING_STRATEGY_NONE: number; + const PADDING_STRATEGY_MAX: number; + const PADDING_STRATEGY_CALLBACK: number; + const HTTP2_HEADER_STATUS: string; + const HTTP2_HEADER_METHOD: string; + const HTTP2_HEADER_AUTHORITY: string; + const HTTP2_HEADER_SCHEME: string; + const HTTP2_HEADER_PATH: string; + const HTTP2_HEADER_ACCEPT_CHARSET: string; + const HTTP2_HEADER_ACCEPT_ENCODING: string; + const HTTP2_HEADER_ACCEPT_LANGUAGE: string; + const HTTP2_HEADER_ACCEPT_RANGES: string; + const HTTP2_HEADER_ACCEPT: string; + const HTTP2_HEADER_ACCESS_CONTROL_ALLOW_ORIGIN: string; + const HTTP2_HEADER_AGE: string; + const HTTP2_HEADER_ALLOW: string; + const HTTP2_HEADER_AUTHORIZATION: string; + const HTTP2_HEADER_CACHE_CONTROL: string; + const HTTP2_HEADER_CONNECTION: string; + const HTTP2_HEADER_CONTENT_DISPOSITION: string; + const HTTP2_HEADER_CONTENT_ENCODING: string; + const HTTP2_HEADER_CONTENT_LANGUAGE: string; + const HTTP2_HEADER_CONTENT_LENGTH: string; + const HTTP2_HEADER_CONTENT_LOCATION: string; + const HTTP2_HEADER_CONTENT_MD5: string; + const HTTP2_HEADER_CONTENT_RANGE: string; + const HTTP2_HEADER_CONTENT_TYPE: string; + const HTTP2_HEADER_COOKIE: string; + const HTTP2_HEADER_DATE: string; + const HTTP2_HEADER_ETAG: string; + const HTTP2_HEADER_EXPECT: string; + const HTTP2_HEADER_EXPIRES: string; + const HTTP2_HEADER_FROM: string; + const HTTP2_HEADER_HOST: string; + const HTTP2_HEADER_IF_MATCH: string; + const HTTP2_HEADER_IF_MODIFIED_SINCE: string; + const HTTP2_HEADER_IF_NONE_MATCH: string; + const HTTP2_HEADER_IF_RANGE: string; + const HTTP2_HEADER_IF_UNMODIFIED_SINCE: string; + const HTTP2_HEADER_LAST_MODIFIED: string; + const HTTP2_HEADER_LINK: string; + const HTTP2_HEADER_LOCATION: string; + const HTTP2_HEADER_MAX_FORWARDS: string; + const HTTP2_HEADER_PREFER: string; + const HTTP2_HEADER_PROXY_AUTHENTICATE: string; + const HTTP2_HEADER_PROXY_AUTHORIZATION: string; + const HTTP2_HEADER_RANGE: string; + const HTTP2_HEADER_REFERER: string; + const HTTP2_HEADER_REFRESH: string; + const HTTP2_HEADER_RETRY_AFTER: string; + const HTTP2_HEADER_SERVER: string; + const HTTP2_HEADER_SET_COOKIE: string; + const HTTP2_HEADER_STRICT_TRANSPORT_SECURITY: string; + const HTTP2_HEADER_TRANSFER_ENCODING: string; + const HTTP2_HEADER_TE: string; + const HTTP2_HEADER_UPGRADE: string; + const HTTP2_HEADER_USER_AGENT: string; + const HTTP2_HEADER_VARY: string; + const HTTP2_HEADER_VIA: string; + const HTTP2_HEADER_WWW_AUTHENTICATE: string; + const HTTP2_HEADER_HTTP2_SETTINGS: string; + const HTTP2_HEADER_KEEP_ALIVE: string; + const HTTP2_HEADER_PROXY_CONNECTION: string; + const HTTP2_METHOD_ACL: string; + const HTTP2_METHOD_BASELINE_CONTROL: string; + const HTTP2_METHOD_BIND: string; + const HTTP2_METHOD_CHECKIN: string; + const HTTP2_METHOD_CHECKOUT: string; + const HTTP2_METHOD_CONNECT: string; + const HTTP2_METHOD_COPY: string; + const HTTP2_METHOD_DELETE: string; + const HTTP2_METHOD_GET: string; + const HTTP2_METHOD_HEAD: string; + const HTTP2_METHOD_LABEL: string; + const HTTP2_METHOD_LINK: string; + const HTTP2_METHOD_LOCK: string; + const HTTP2_METHOD_MERGE: string; + const HTTP2_METHOD_MKACTIVITY: string; + const HTTP2_METHOD_MKCALENDAR: string; + const HTTP2_METHOD_MKCOL: string; + const HTTP2_METHOD_MKREDIRECTREF: string; + const HTTP2_METHOD_MKWORKSPACE: string; + const HTTP2_METHOD_MOVE: string; + const HTTP2_METHOD_OPTIONS: string; + const HTTP2_METHOD_ORDERPATCH: string; + const HTTP2_METHOD_PATCH: string; + const HTTP2_METHOD_POST: string; + const HTTP2_METHOD_PRI: string; + const HTTP2_METHOD_PROPFIND: string; + const HTTP2_METHOD_PROPPATCH: string; + const HTTP2_METHOD_PUT: string; + const HTTP2_METHOD_REBIND: string; + const HTTP2_METHOD_REPORT: string; + const HTTP2_METHOD_SEARCH: string; + const HTTP2_METHOD_TRACE: string; + const HTTP2_METHOD_UNBIND: string; + const HTTP2_METHOD_UNCHECKOUT: string; + const HTTP2_METHOD_UNLINK: string; + const HTTP2_METHOD_UNLOCK: string; + const HTTP2_METHOD_UPDATE: string; + const HTTP2_METHOD_UPDATEREDIRECTREF: string; + const HTTP2_METHOD_VERSION_CONTROL: string; + const HTTP_STATUS_CONTINUE: number; + const HTTP_STATUS_SWITCHING_PROTOCOLS: number; + const HTTP_STATUS_PROCESSING: number; + const HTTP_STATUS_OK: number; + const HTTP_STATUS_CREATED: number; + const HTTP_STATUS_ACCEPTED: number; + const HTTP_STATUS_NON_AUTHORITATIVE_INFORMATION: number; + const HTTP_STATUS_NO_CONTENT: number; + const HTTP_STATUS_RESET_CONTENT: number; + const HTTP_STATUS_PARTIAL_CONTENT: number; + const HTTP_STATUS_MULTI_STATUS: number; + const HTTP_STATUS_ALREADY_REPORTED: number; + const HTTP_STATUS_IM_USED: number; + const HTTP_STATUS_MULTIPLE_CHOICES: number; + const HTTP_STATUS_MOVED_PERMANENTLY: number; + const HTTP_STATUS_FOUND: number; + const HTTP_STATUS_SEE_OTHER: number; + const HTTP_STATUS_NOT_MODIFIED: number; + const HTTP_STATUS_USE_PROXY: number; + const HTTP_STATUS_TEMPORARY_REDIRECT: number; + const HTTP_STATUS_PERMANENT_REDIRECT: number; + const HTTP_STATUS_BAD_REQUEST: number; + const HTTP_STATUS_UNAUTHORIZED: number; + const HTTP_STATUS_PAYMENT_REQUIRED: number; + const HTTP_STATUS_FORBIDDEN: number; + const HTTP_STATUS_NOT_FOUND: number; + const HTTP_STATUS_METHOD_NOT_ALLOWED: number; + const HTTP_STATUS_NOT_ACCEPTABLE: number; + const HTTP_STATUS_PROXY_AUTHENTICATION_REQUIRED: number; + const HTTP_STATUS_REQUEST_TIMEOUT: number; + const HTTP_STATUS_CONFLICT: number; + const HTTP_STATUS_GONE: number; + const HTTP_STATUS_LENGTH_REQUIRED: number; + const HTTP_STATUS_PRECONDITION_FAILED: number; + const HTTP_STATUS_PAYLOAD_TOO_LARGE: number; + const HTTP_STATUS_URI_TOO_LONG: number; + const HTTP_STATUS_UNSUPPORTED_MEDIA_TYPE: number; + const HTTP_STATUS_RANGE_NOT_SATISFIABLE: number; + const HTTP_STATUS_EXPECTATION_FAILED: number; + const HTTP_STATUS_TEAPOT: number; + const HTTP_STATUS_MISDIRECTED_REQUEST: number; + const HTTP_STATUS_UNPROCESSABLE_ENTITY: number; + const HTTP_STATUS_LOCKED: number; + const HTTP_STATUS_FAILED_DEPENDENCY: number; + const HTTP_STATUS_UNORDERED_COLLECTION: number; + const HTTP_STATUS_UPGRADE_REQUIRED: number; + const HTTP_STATUS_PRECONDITION_REQUIRED: number; + const HTTP_STATUS_TOO_MANY_REQUESTS: number; + const HTTP_STATUS_REQUEST_HEADER_FIELDS_TOO_LARGE: number; + const HTTP_STATUS_UNAVAILABLE_FOR_LEGAL_REASONS: number; + const HTTP_STATUS_INTERNAL_SERVER_ERROR: number; + const HTTP_STATUS_NOT_IMPLEMENTED: number; + const HTTP_STATUS_BAD_GATEWAY: number; + const HTTP_STATUS_SERVICE_UNAVAILABLE: number; + const HTTP_STATUS_GATEWAY_TIMEOUT: number; + const HTTP_STATUS_HTTP_VERSION_NOT_SUPPORTED: number; + const HTTP_STATUS_VARIANT_ALSO_NEGOTIATES: number; + const HTTP_STATUS_INSUFFICIENT_STORAGE: number; + const HTTP_STATUS_LOOP_DETECTED: number; + const HTTP_STATUS_BANDWIDTH_LIMIT_EXCEEDED: number; + const HTTP_STATUS_NOT_EXTENDED: number; + const HTTP_STATUS_NETWORK_AUTHENTICATION_REQUIRED: number; + } + /** + * This symbol can be set as a property on the HTTP/2 headers object with + * an array value in order to provide a list of headers considered sensitive. + */ + export const sensitiveHeaders: symbol; + /** + * Returns an object containing the default settings for an `Http2Session`instance. This method returns a new object instance every time it is called + * so instances returned may be safely modified for use. + * @since v8.4.0 + */ + export function getDefaultSettings(): Settings; + /** + * Returns a `Buffer` instance containing serialized representation of the given + * HTTP/2 settings as specified in the [HTTP/2](https://tools.ietf.org/html/rfc7540) specification. This is intended + * for use with the `HTTP2-Settings` header field. + * + * ```js + * const http2 = require('node:http2'); + * + * const packed = http2.getPackedSettings({ enablePush: false }); + * + * console.log(packed.toString('base64')); + * // Prints: AAIAAAAA + * ``` + * @since v8.4.0 + */ + export function getPackedSettings(settings: Settings): Buffer; + /** + * Returns a `HTTP/2 Settings Object` containing the deserialized settings from + * the given `Buffer` as generated by `http2.getPackedSettings()`. + * @since v8.4.0 + * @param buf The packed settings. + */ + export function getUnpackedSettings(buf: Uint8Array): Settings; + /** + * Returns a `net.Server` instance that creates and manages `Http2Session`instances. + * + * Since there are no browsers known that support [unencrypted HTTP/2](https://http2.github.io/faq/#does-http2-require-encryption), the use of {@link createSecureServer} is necessary when + * communicating + * with browser clients. + * + * ```js + * const http2 = require('node:http2'); + * + * // Create an unencrypted HTTP/2 server. + * // Since there are no browsers known that support + * // unencrypted HTTP/2, the use of `http2.createSecureServer()` + * // is necessary when communicating with browser clients. + * const server = http2.createServer(); + * + * server.on('stream', (stream, headers) => { + * stream.respond({ + * 'content-type': 'text/html; charset=utf-8', + * ':status': 200, + * }); + * stream.end('

Hello World

'); + * }); + * + * server.listen(8000); + * ``` + * @since v8.4.0 + * @param onRequestHandler See `Compatibility API` + */ + export function createServer( + onRequestHandler?: (request: Http2ServerRequest, response: Http2ServerResponse) => void, + ): Http2Server; + export function createServer( + options: ServerOptions, + onRequestHandler?: (request: Http2ServerRequest, response: Http2ServerResponse) => void, + ): Http2Server; + /** + * Returns a `tls.Server` instance that creates and manages `Http2Session`instances. + * + * ```js + * const http2 = require('node:http2'); + * const fs = require('node:fs'); + * + * const options = { + * key: fs.readFileSync('server-key.pem'), + * cert: fs.readFileSync('server-cert.pem'), + * }; + * + * // Create a secure HTTP/2 server + * const server = http2.createSecureServer(options); + * + * server.on('stream', (stream, headers) => { + * stream.respond({ + * 'content-type': 'text/html; charset=utf-8', + * ':status': 200, + * }); + * stream.end('

Hello World

'); + * }); + * + * server.listen(8443); + * ``` + * @since v8.4.0 + * @param onRequestHandler See `Compatibility API` + */ + export function createSecureServer( + onRequestHandler?: (request: Http2ServerRequest, response: Http2ServerResponse) => void, + ): Http2SecureServer; + export function createSecureServer( + options: SecureServerOptions, + onRequestHandler?: (request: Http2ServerRequest, response: Http2ServerResponse) => void, + ): Http2SecureServer; + /** + * Returns a `ClientHttp2Session` instance. + * + * ```js + * const http2 = require('node:http2'); + * const client = http2.connect('https://localhost:1234'); + * + * // Use the client + * + * client.close(); + * ``` + * @since v8.4.0 + * @param authority The remote HTTP/2 server to connect to. This must be in the form of a minimal, valid URL with the `http://` or `https://` prefix, host name, and IP port (if a non-default port + * is used). Userinfo (user ID and password), path, querystring, and fragment details in the URL will be ignored. + * @param listener Will be registered as a one-time listener of the {@link 'connect'} event. + */ + export function connect( + authority: string | url.URL, + listener: (session: ClientHttp2Session, socket: net.Socket | tls.TLSSocket) => void, + ): ClientHttp2Session; + export function connect( + authority: string | url.URL, + options?: ClientSessionOptions | SecureClientSessionOptions, + listener?: (session: ClientHttp2Session, socket: net.Socket | tls.TLSSocket) => void, + ): ClientHttp2Session; +} +declare module "node:http2" { + export * from "http2"; +} diff --git a/Url-Shortner/node_modules/@types/node/ts4.8/https.d.ts b/Url-Shortner/node_modules/@types/node/ts4.8/https.d.ts new file mode 100644 index 0000000..36ae5b2 --- /dev/null +++ b/Url-Shortner/node_modules/@types/node/ts4.8/https.d.ts @@ -0,0 +1,550 @@ +/** + * HTTPS is the HTTP protocol over TLS/SSL. In Node.js this is implemented as a + * separate module. + * @see [source](https://github.com/nodejs/node/blob/v20.2.0/lib/https.js) + */ +declare module "https" { + import { Duplex } from "node:stream"; + import * as tls from "node:tls"; + import * as http from "node:http"; + import { URL } from "node:url"; + type ServerOptions< + Request extends typeof http.IncomingMessage = typeof http.IncomingMessage, + Response extends typeof http.ServerResponse = typeof http.ServerResponse, + > = tls.SecureContextOptions & tls.TlsOptions & http.ServerOptions; + type RequestOptions = + & http.RequestOptions + & tls.SecureContextOptions + & { + checkServerIdentity?: typeof tls.checkServerIdentity | undefined; + rejectUnauthorized?: boolean | undefined; // Defaults to true + servername?: string | undefined; // SNI TLS Extension + }; + interface AgentOptions extends http.AgentOptions, tls.ConnectionOptions { + rejectUnauthorized?: boolean | undefined; + maxCachedSessions?: number | undefined; + } + /** + * An `Agent` object for HTTPS similar to `http.Agent`. See {@link request} for more information. + * @since v0.4.5 + */ + class Agent extends http.Agent { + constructor(options?: AgentOptions); + options: AgentOptions; + } + interface Server< + Request extends typeof http.IncomingMessage = typeof http.IncomingMessage, + Response extends typeof http.ServerResponse = typeof http.ServerResponse, + > extends http.Server {} + /** + * See `http.Server` for more information. + * @since v0.3.4 + */ + class Server< + Request extends typeof http.IncomingMessage = typeof http.IncomingMessage, + Response extends typeof http.ServerResponse = typeof http.ServerResponse, + > extends tls.Server { + constructor(requestListener?: http.RequestListener); + constructor( + options: ServerOptions, + requestListener?: http.RequestListener, + ); + /** + * Closes all connections connected to this server. + * @since v18.2.0 + */ + closeAllConnections(): void; + /** + * Closes all connections connected to this server which are not sending a request or waiting for a response. + * @since v18.2.0 + */ + closeIdleConnections(): void; + addListener(event: string, listener: (...args: any[]) => void): this; + addListener(event: "keylog", listener: (line: Buffer, tlsSocket: tls.TLSSocket) => void): this; + addListener( + event: "newSession", + listener: (sessionId: Buffer, sessionData: Buffer, callback: (err: Error, resp: Buffer) => void) => void, + ): this; + addListener( + event: "OCSPRequest", + listener: ( + certificate: Buffer, + issuer: Buffer, + callback: (err: Error | null, resp: Buffer) => void, + ) => void, + ): this; + addListener( + event: "resumeSession", + listener: (sessionId: Buffer, callback: (err: Error, sessionData: Buffer) => void) => void, + ): this; + addListener(event: "secureConnection", listener: (tlsSocket: tls.TLSSocket) => void): this; + addListener(event: "tlsClientError", listener: (err: Error, tlsSocket: tls.TLSSocket) => void): this; + addListener(event: "close", listener: () => void): this; + addListener(event: "connection", listener: (socket: Duplex) => void): this; + addListener(event: "error", listener: (err: Error) => void): this; + addListener(event: "listening", listener: () => void): this; + addListener(event: "checkContinue", listener: http.RequestListener): this; + addListener(event: "checkExpectation", listener: http.RequestListener): this; + addListener(event: "clientError", listener: (err: Error, socket: Duplex) => void): this; + addListener( + event: "connect", + listener: (req: InstanceType, socket: Duplex, head: Buffer) => void, + ): this; + addListener(event: "request", listener: http.RequestListener): this; + addListener( + event: "upgrade", + listener: (req: InstanceType, socket: Duplex, head: Buffer) => void, + ): this; + emit(event: string, ...args: any[]): boolean; + emit(event: "keylog", line: Buffer, tlsSocket: tls.TLSSocket): boolean; + emit( + event: "newSession", + sessionId: Buffer, + sessionData: Buffer, + callback: (err: Error, resp: Buffer) => void, + ): boolean; + emit( + event: "OCSPRequest", + certificate: Buffer, + issuer: Buffer, + callback: (err: Error | null, resp: Buffer) => void, + ): boolean; + emit(event: "resumeSession", sessionId: Buffer, callback: (err: Error, sessionData: Buffer) => void): boolean; + emit(event: "secureConnection", tlsSocket: tls.TLSSocket): boolean; + emit(event: "tlsClientError", err: Error, tlsSocket: tls.TLSSocket): boolean; + emit(event: "close"): boolean; + emit(event: "connection", socket: Duplex): boolean; + emit(event: "error", err: Error): boolean; + emit(event: "listening"): boolean; + emit( + event: "checkContinue", + req: InstanceType, + res: InstanceType & { + req: InstanceType; + }, + ): boolean; + emit( + event: "checkExpectation", + req: InstanceType, + res: InstanceType & { + req: InstanceType; + }, + ): boolean; + emit(event: "clientError", err: Error, socket: Duplex): boolean; + emit(event: "connect", req: InstanceType, socket: Duplex, head: Buffer): boolean; + emit( + event: "request", + req: InstanceType, + res: InstanceType & { + req: InstanceType; + }, + ): boolean; + emit(event: "upgrade", req: InstanceType, socket: Duplex, head: Buffer): boolean; + on(event: string, listener: (...args: any[]) => void): this; + on(event: "keylog", listener: (line: Buffer, tlsSocket: tls.TLSSocket) => void): this; + on( + event: "newSession", + listener: (sessionId: Buffer, sessionData: Buffer, callback: (err: Error, resp: Buffer) => void) => void, + ): this; + on( + event: "OCSPRequest", + listener: ( + certificate: Buffer, + issuer: Buffer, + callback: (err: Error | null, resp: Buffer) => void, + ) => void, + ): this; + on( + event: "resumeSession", + listener: (sessionId: Buffer, callback: (err: Error, sessionData: Buffer) => void) => void, + ): this; + on(event: "secureConnection", listener: (tlsSocket: tls.TLSSocket) => void): this; + on(event: "tlsClientError", listener: (err: Error, tlsSocket: tls.TLSSocket) => void): this; + on(event: "close", listener: () => void): this; + on(event: "connection", listener: (socket: Duplex) => void): this; + on(event: "error", listener: (err: Error) => void): this; + on(event: "listening", listener: () => void): this; + on(event: "checkContinue", listener: http.RequestListener): this; + on(event: "checkExpectation", listener: http.RequestListener): this; + on(event: "clientError", listener: (err: Error, socket: Duplex) => void): this; + on(event: "connect", listener: (req: InstanceType, socket: Duplex, head: Buffer) => void): this; + on(event: "request", listener: http.RequestListener): this; + on(event: "upgrade", listener: (req: InstanceType, socket: Duplex, head: Buffer) => void): this; + once(event: string, listener: (...args: any[]) => void): this; + once(event: "keylog", listener: (line: Buffer, tlsSocket: tls.TLSSocket) => void): this; + once( + event: "newSession", + listener: (sessionId: Buffer, sessionData: Buffer, callback: (err: Error, resp: Buffer) => void) => void, + ): this; + once( + event: "OCSPRequest", + listener: ( + certificate: Buffer, + issuer: Buffer, + callback: (err: Error | null, resp: Buffer) => void, + ) => void, + ): this; + once( + event: "resumeSession", + listener: (sessionId: Buffer, callback: (err: Error, sessionData: Buffer) => void) => void, + ): this; + once(event: "secureConnection", listener: (tlsSocket: tls.TLSSocket) => void): this; + once(event: "tlsClientError", listener: (err: Error, tlsSocket: tls.TLSSocket) => void): this; + once(event: "close", listener: () => void): this; + once(event: "connection", listener: (socket: Duplex) => void): this; + once(event: "error", listener: (err: Error) => void): this; + once(event: "listening", listener: () => void): this; + once(event: "checkContinue", listener: http.RequestListener): this; + once(event: "checkExpectation", listener: http.RequestListener): this; + once(event: "clientError", listener: (err: Error, socket: Duplex) => void): this; + once(event: "connect", listener: (req: InstanceType, socket: Duplex, head: Buffer) => void): this; + once(event: "request", listener: http.RequestListener): this; + once(event: "upgrade", listener: (req: InstanceType, socket: Duplex, head: Buffer) => void): this; + prependListener(event: string, listener: (...args: any[]) => void): this; + prependListener(event: "keylog", listener: (line: Buffer, tlsSocket: tls.TLSSocket) => void): this; + prependListener( + event: "newSession", + listener: (sessionId: Buffer, sessionData: Buffer, callback: (err: Error, resp: Buffer) => void) => void, + ): this; + prependListener( + event: "OCSPRequest", + listener: ( + certificate: Buffer, + issuer: Buffer, + callback: (err: Error | null, resp: Buffer) => void, + ) => void, + ): this; + prependListener( + event: "resumeSession", + listener: (sessionId: Buffer, callback: (err: Error, sessionData: Buffer) => void) => void, + ): this; + prependListener(event: "secureConnection", listener: (tlsSocket: tls.TLSSocket) => void): this; + prependListener(event: "tlsClientError", listener: (err: Error, tlsSocket: tls.TLSSocket) => void): this; + prependListener(event: "close", listener: () => void): this; + prependListener(event: "connection", listener: (socket: Duplex) => void): this; + prependListener(event: "error", listener: (err: Error) => void): this; + prependListener(event: "listening", listener: () => void): this; + prependListener(event: "checkContinue", listener: http.RequestListener): this; + prependListener(event: "checkExpectation", listener: http.RequestListener): this; + prependListener(event: "clientError", listener: (err: Error, socket: Duplex) => void): this; + prependListener( + event: "connect", + listener: (req: InstanceType, socket: Duplex, head: Buffer) => void, + ): this; + prependListener(event: "request", listener: http.RequestListener): this; + prependListener( + event: "upgrade", + listener: (req: InstanceType, socket: Duplex, head: Buffer) => void, + ): this; + prependOnceListener(event: string, listener: (...args: any[]) => void): this; + prependOnceListener(event: "keylog", listener: (line: Buffer, tlsSocket: tls.TLSSocket) => void): this; + prependOnceListener( + event: "newSession", + listener: (sessionId: Buffer, sessionData: Buffer, callback: (err: Error, resp: Buffer) => void) => void, + ): this; + prependOnceListener( + event: "OCSPRequest", + listener: ( + certificate: Buffer, + issuer: Buffer, + callback: (err: Error | null, resp: Buffer) => void, + ) => void, + ): this; + prependOnceListener( + event: "resumeSession", + listener: (sessionId: Buffer, callback: (err: Error, sessionData: Buffer) => void) => void, + ): this; + prependOnceListener(event: "secureConnection", listener: (tlsSocket: tls.TLSSocket) => void): this; + prependOnceListener(event: "tlsClientError", listener: (err: Error, tlsSocket: tls.TLSSocket) => void): this; + prependOnceListener(event: "close", listener: () => void): this; + prependOnceListener(event: "connection", listener: (socket: Duplex) => void): this; + prependOnceListener(event: "error", listener: (err: Error) => void): this; + prependOnceListener(event: "listening", listener: () => void): this; + prependOnceListener(event: "checkContinue", listener: http.RequestListener): this; + prependOnceListener(event: "checkExpectation", listener: http.RequestListener): this; + prependOnceListener(event: "clientError", listener: (err: Error, socket: Duplex) => void): this; + prependOnceListener( + event: "connect", + listener: (req: InstanceType, socket: Duplex, head: Buffer) => void, + ): this; + prependOnceListener(event: "request", listener: http.RequestListener): this; + prependOnceListener( + event: "upgrade", + listener: (req: InstanceType, socket: Duplex, head: Buffer) => void, + ): this; + } + /** + * ```js + * // curl -k https://localhost:8000/ + * const https = require('node:https'); + * const fs = require('node:fs'); + * + * const options = { + * key: fs.readFileSync('test/fixtures/keys/agent2-key.pem'), + * cert: fs.readFileSync('test/fixtures/keys/agent2-cert.pem'), + * }; + * + * https.createServer(options, (req, res) => { + * res.writeHead(200); + * res.end('hello world\n'); + * }).listen(8000); + * ``` + * + * Or + * + * ```js + * const https = require('node:https'); + * const fs = require('node:fs'); + * + * const options = { + * pfx: fs.readFileSync('test/fixtures/test_cert.pfx'), + * passphrase: 'sample', + * }; + * + * https.createServer(options, (req, res) => { + * res.writeHead(200); + * res.end('hello world\n'); + * }).listen(8000); + * ``` + * @since v0.3.4 + * @param options Accepts `options` from `createServer`, `createSecureContext` and `createServer`. + * @param requestListener A listener to be added to the `'request'` event. + */ + function createServer< + Request extends typeof http.IncomingMessage = typeof http.IncomingMessage, + Response extends typeof http.ServerResponse = typeof http.ServerResponse, + >(requestListener?: http.RequestListener): Server; + function createServer< + Request extends typeof http.IncomingMessage = typeof http.IncomingMessage, + Response extends typeof http.ServerResponse = typeof http.ServerResponse, + >( + options: ServerOptions, + requestListener?: http.RequestListener, + ): Server; + /** + * Makes a request to a secure web server. + * + * The following additional `options` from `tls.connect()` are also accepted:`ca`, `cert`, `ciphers`, `clientCertEngine`, `crl`, `dhparam`, `ecdhCurve`,`honorCipherOrder`, `key`, `passphrase`, + * `pfx`, `rejectUnauthorized`,`secureOptions`, `secureProtocol`, `servername`, `sessionIdContext`,`highWaterMark`. + * + * `options` can be an object, a string, or a `URL` object. If `options` is a + * string, it is automatically parsed with `new URL()`. If it is a `URL` object, it will be automatically converted to an ordinary `options` object. + * + * `https.request()` returns an instance of the `http.ClientRequest` class. The `ClientRequest` instance is a writable stream. If one needs to + * upload a file with a POST request, then write to the `ClientRequest` object. + * + * ```js + * const https = require('node:https'); + * + * const options = { + * hostname: 'encrypted.google.com', + * port: 443, + * path: '/', + * method: 'GET', + * }; + * + * const req = https.request(options, (res) => { + * console.log('statusCode:', res.statusCode); + * console.log('headers:', res.headers); + * + * res.on('data', (d) => { + * process.stdout.write(d); + * }); + * }); + * + * req.on('error', (e) => { + * console.error(e); + * }); + * req.end(); + * ``` + * + * Example using options from `tls.connect()`: + * + * ```js + * const options = { + * hostname: 'encrypted.google.com', + * port: 443, + * path: '/', + * method: 'GET', + * key: fs.readFileSync('test/fixtures/keys/agent2-key.pem'), + * cert: fs.readFileSync('test/fixtures/keys/agent2-cert.pem'), + * }; + * options.agent = new https.Agent(options); + * + * const req = https.request(options, (res) => { + * // ... + * }); + * ``` + * + * Alternatively, opt out of connection pooling by not using an `Agent`. + * + * ```js + * const options = { + * hostname: 'encrypted.google.com', + * port: 443, + * path: '/', + * method: 'GET', + * key: fs.readFileSync('test/fixtures/keys/agent2-key.pem'), + * cert: fs.readFileSync('test/fixtures/keys/agent2-cert.pem'), + * agent: false, + * }; + * + * const req = https.request(options, (res) => { + * // ... + * }); + * ``` + * + * Example using a `URL` as `options`: + * + * ```js + * const options = new URL('https://abc:xyz@example.com'); + * + * const req = https.request(options, (res) => { + * // ... + * }); + * ``` + * + * Example pinning on certificate fingerprint, or the public key (similar to`pin-sha256`): + * + * ```js + * const tls = require('node:tls'); + * const https = require('node:https'); + * const crypto = require('node:crypto'); + * + * function sha256(s) { + * return crypto.createHash('sha256').update(s).digest('base64'); + * } + * const options = { + * hostname: 'github.com', + * port: 443, + * path: '/', + * method: 'GET', + * checkServerIdentity: function(host, cert) { + * // Make sure the certificate is issued to the host we are connected to + * const err = tls.checkServerIdentity(host, cert); + * if (err) { + * return err; + * } + * + * // Pin the public key, similar to HPKP pin-sha256 pinning + * const pubkey256 = 'pL1+qb9HTMRZJmuC/bB/ZI9d302BYrrqiVuRyW+DGrU='; + * if (sha256(cert.pubkey) !== pubkey256) { + * const msg = 'Certificate verification error: ' + + * `The public key of '${cert.subject.CN}' ` + + * 'does not match our pinned fingerprint'; + * return new Error(msg); + * } + * + * // Pin the exact certificate, rather than the pub key + * const cert256 = '25:FE:39:32:D9:63:8C:8A:FC:A1:9A:29:87:' + + * 'D8:3E:4C:1D:98:DB:71:E4:1A:48:03:98:EA:22:6A:BD:8B:93:16'; + * if (cert.fingerprint256 !== cert256) { + * const msg = 'Certificate verification error: ' + + * `The certificate of '${cert.subject.CN}' ` + + * 'does not match our pinned fingerprint'; + * return new Error(msg); + * } + * + * // This loop is informational only. + * // Print the certificate and public key fingerprints of all certs in the + * // chain. Its common to pin the public key of the issuer on the public + * // internet, while pinning the public key of the service in sensitive + * // environments. + * do { + * console.log('Subject Common Name:', cert.subject.CN); + * console.log(' Certificate SHA256 fingerprint:', cert.fingerprint256); + * + * hash = crypto.createHash('sha256'); + * console.log(' Public key ping-sha256:', sha256(cert.pubkey)); + * + * lastprint256 = cert.fingerprint256; + * cert = cert.issuerCertificate; + * } while (cert.fingerprint256 !== lastprint256); + * + * }, + * }; + * + * options.agent = new https.Agent(options); + * const req = https.request(options, (res) => { + * console.log('All OK. Server matched our pinned cert or public key'); + * console.log('statusCode:', res.statusCode); + * // Print the HPKP values + * console.log('headers:', res.headers['public-key-pins']); + * + * res.on('data', (d) => {}); + * }); + * + * req.on('error', (e) => { + * console.error(e.message); + * }); + * req.end(); + * ``` + * + * Outputs for example: + * + * ```text + * Subject Common Name: github.com + * Certificate SHA256 fingerprint: 25:FE:39:32:D9:63:8C:8A:FC:A1:9A:29:87:D8:3E:4C:1D:98:DB:71:E4:1A:48:03:98:EA:22:6A:BD:8B:93:16 + * Public key ping-sha256: pL1+qb9HTMRZJmuC/bB/ZI9d302BYrrqiVuRyW+DGrU= + * Subject Common Name: DigiCert SHA2 Extended Validation Server CA + * Certificate SHA256 fingerprint: 40:3E:06:2A:26:53:05:91:13:28:5B:AF:80:A0:D4:AE:42:2C:84:8C:9F:78:FA:D0:1F:C9:4B:C5:B8:7F:EF:1A + * Public key ping-sha256: RRM1dGqnDFsCJXBTHky16vi1obOlCgFFn/yOhI/y+ho= + * Subject Common Name: DigiCert High Assurance EV Root CA + * Certificate SHA256 fingerprint: 74:31:E5:F4:C3:C1:CE:46:90:77:4F:0B:61:E0:54:40:88:3B:A9:A0:1E:D0:0B:A6:AB:D7:80:6E:D3:B1:18:CF + * Public key ping-sha256: WoiWRyIOVNa9ihaBciRSC7XHjliYS9VwUGOIud4PB18= + * All OK. Server matched our pinned cert or public key + * statusCode: 200 + * headers: max-age=0; pin-sha256="WoiWRyIOVNa9ihaBciRSC7XHjliYS9VwUGOIud4PB18="; pin-sha256="RRM1dGqnDFsCJXBTHky16vi1obOlCgFFn/yOhI/y+ho="; + * pin-sha256="k2v657xBsOVe1PQRwOsHsw3bsGT2VzIqz5K+59sNQws="; pin-sha256="K87oWBWM9UZfyddvDfoxL+8lpNyoUB2ptGtn0fv6G2Q="; pin-sha256="IQBnNBEiFuhj+8x6X8XLgh01V9Ic5/V3IRQLNFFc7v4="; + * pin-sha256="iie1VXtL7HzAMF+/PVPR9xzT80kQxdZeJ+zduCB3uj0="; pin-sha256="LvRiGEjRqfzurezaWuj8Wie2gyHMrW5Q06LspMnox7A="; includeSubDomains + * ``` + * @since v0.3.6 + * @param options Accepts all `options` from `request`, with some differences in default values: + */ + function request( + options: RequestOptions | string | URL, + callback?: (res: http.IncomingMessage) => void, + ): http.ClientRequest; + function request( + url: string | URL, + options: RequestOptions, + callback?: (res: http.IncomingMessage) => void, + ): http.ClientRequest; + /** + * Like `http.get()` but for HTTPS. + * + * `options` can be an object, a string, or a `URL` object. If `options` is a + * string, it is automatically parsed with `new URL()`. If it is a `URL` object, it will be automatically converted to an ordinary `options` object. + * + * ```js + * const https = require('node:https'); + * + * https.get('https://encrypted.google.com/', (res) => { + * console.log('statusCode:', res.statusCode); + * console.log('headers:', res.headers); + * + * res.on('data', (d) => { + * process.stdout.write(d); + * }); + * + * }).on('error', (e) => { + * console.error(e); + * }); + * ``` + * @since v0.3.6 + * @param options Accepts the same `options` as {@link request}, with the `method` always set to `GET`. + */ + function get( + options: RequestOptions | string | URL, + callback?: (res: http.IncomingMessage) => void, + ): http.ClientRequest; + function get( + url: string | URL, + options: RequestOptions, + callback?: (res: http.IncomingMessage) => void, + ): http.ClientRequest; + let globalAgent: Agent; +} +declare module "node:https" { + export * from "https"; +} diff --git a/Url-Shortner/node_modules/@types/node/ts4.8/index.d.ts b/Url-Shortner/node_modules/@types/node/ts4.8/index.d.ts new file mode 100644 index 0000000..7c8b38c --- /dev/null +++ b/Url-Shortner/node_modules/@types/node/ts4.8/index.d.ts @@ -0,0 +1,88 @@ +/** + * License for programmatically and manually incorporated + * documentation aka. `JSDoc` from https://github.com/nodejs/node/tree/master/doc + * + * Copyright Node.js contributors. 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. + */ + +// NOTE: These definitions support NodeJS and TypeScript 4.8 and earlier. + +// Reference required types from the default lib: +/// +/// +/// +/// + +// Base definitions for all NodeJS modules that are not specific to any version of TypeScript: +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// + +/// diff --git a/Url-Shortner/node_modules/@types/node/ts4.8/inspector.d.ts b/Url-Shortner/node_modules/@types/node/ts4.8/inspector.d.ts new file mode 100644 index 0000000..0e976e5 --- /dev/null +++ b/Url-Shortner/node_modules/@types/node/ts4.8/inspector.d.ts @@ -0,0 +1,2748 @@ +// eslint-disable-next-line @definitelytyped/dt-header +// Type definitions for inspector + +// These definitions are auto-generated. +// Please see https://github.com/DefinitelyTyped/DefinitelyTyped/pull/19330 +// for more information. + + +/** + * The `node:inspector` module provides an API for interacting with the V8 + * inspector. + * + * It can be accessed using: + * + * ```js + * import * as inspector from 'node:inspector/promises'; + * ``` + * + * or + * + * ```js + * import * as inspector from 'node:inspector'; + * ``` + * @see [source](https://github.com/nodejs/node/blob/v20.2.0/lib/inspector.js) + */ +declare module 'inspector' { + import EventEmitter = require('node:events'); + interface InspectorNotification { + method: string; + params: T; + } + namespace Schema { + /** + * Description of the protocol domain. + */ + interface Domain { + /** + * Domain name. + */ + name: string; + /** + * Domain version. + */ + version: string; + } + interface GetDomainsReturnType { + /** + * List of supported domains. + */ + domains: Domain[]; + } + } + namespace Runtime { + /** + * Unique script identifier. + */ + type ScriptId = string; + /** + * Unique object identifier. + */ + type RemoteObjectId = string; + /** + * Primitive value which cannot be JSON-stringified. + */ + type UnserializableValue = string; + /** + * Mirror object referencing original JavaScript object. + */ + interface RemoteObject { + /** + * Object type. + */ + type: string; + /** + * Object subtype hint. Specified for object type values only. + */ + subtype?: string | undefined; + /** + * Object class (constructor) name. Specified for object type values only. + */ + className?: string | undefined; + /** + * Remote object value in case of primitive values or JSON values (if it was requested). + */ + value?: any; + /** + * Primitive value which can not be JSON-stringified does not have value, but gets this property. + */ + unserializableValue?: UnserializableValue | undefined; + /** + * String representation of the object. + */ + description?: string | undefined; + /** + * Unique object identifier (for non-primitive values). + */ + objectId?: RemoteObjectId | undefined; + /** + * Preview containing abbreviated property values. Specified for object type values only. + * @experimental + */ + preview?: ObjectPreview | undefined; + /** + * @experimental + */ + customPreview?: CustomPreview | undefined; + } + /** + * @experimental + */ + interface CustomPreview { + header: string; + hasBody: boolean; + formatterObjectId: RemoteObjectId; + bindRemoteObjectFunctionId: RemoteObjectId; + configObjectId?: RemoteObjectId | undefined; + } + /** + * Object containing abbreviated remote object value. + * @experimental + */ + interface ObjectPreview { + /** + * Object type. + */ + type: string; + /** + * Object subtype hint. Specified for object type values only. + */ + subtype?: string | undefined; + /** + * String representation of the object. + */ + description?: string | undefined; + /** + * True iff some of the properties or entries of the original object did not fit. + */ + overflow: boolean; + /** + * List of the properties. + */ + properties: PropertyPreview[]; + /** + * List of the entries. Specified for map and set subtype values only. + */ + entries?: EntryPreview[] | undefined; + } + /** + * @experimental + */ + interface PropertyPreview { + /** + * Property name. + */ + name: string; + /** + * Object type. Accessor means that the property itself is an accessor property. + */ + type: string; + /** + * User-friendly property value string. + */ + value?: string | undefined; + /** + * Nested value preview. + */ + valuePreview?: ObjectPreview | undefined; + /** + * Object subtype hint. Specified for object type values only. + */ + subtype?: string | undefined; + } + /** + * @experimental + */ + interface EntryPreview { + /** + * Preview of the key. Specified for map-like collection entries. + */ + key?: ObjectPreview | undefined; + /** + * Preview of the value. + */ + value: ObjectPreview; + } + /** + * Object property descriptor. + */ + interface PropertyDescriptor { + /** + * Property name or symbol description. + */ + name: string; + /** + * The value associated with the property. + */ + value?: RemoteObject | undefined; + /** + * True if the value associated with the property may be changed (data descriptors only). + */ + writable?: boolean | undefined; + /** + * A function which serves as a getter for the property, or undefined if there is no getter (accessor descriptors only). + */ + get?: RemoteObject | undefined; + /** + * A function which serves as a setter for the property, or undefined if there is no setter (accessor descriptors only). + */ + set?: RemoteObject | undefined; + /** + * True if the type of this property descriptor may be changed and if the property may be deleted from the corresponding object. + */ + configurable: boolean; + /** + * True if this property shows up during enumeration of the properties on the corresponding object. + */ + enumerable: boolean; + /** + * True if the result was thrown during the evaluation. + */ + wasThrown?: boolean | undefined; + /** + * True if the property is owned for the object. + */ + isOwn?: boolean | undefined; + /** + * Property symbol object, if the property is of the symbol type. + */ + symbol?: RemoteObject | undefined; + } + /** + * Object internal property descriptor. This property isn't normally visible in JavaScript code. + */ + interface InternalPropertyDescriptor { + /** + * Conventional property name. + */ + name: string; + /** + * The value associated with the property. + */ + value?: RemoteObject | undefined; + } + /** + * Represents function call argument. Either remote object id objectId, primitive value, unserializable primitive value or neither of (for undefined) them should be specified. + */ + interface CallArgument { + /** + * Primitive value or serializable javascript object. + */ + value?: any; + /** + * Primitive value which can not be JSON-stringified. + */ + unserializableValue?: UnserializableValue | undefined; + /** + * Remote object handle. + */ + objectId?: RemoteObjectId | undefined; + } + /** + * Id of an execution context. + */ + type ExecutionContextId = number; + /** + * Description of an isolated world. + */ + interface ExecutionContextDescription { + /** + * Unique id of the execution context. It can be used to specify in which execution context script evaluation should be performed. + */ + id: ExecutionContextId; + /** + * Execution context origin. + */ + origin: string; + /** + * Human readable name describing given context. + */ + name: string; + /** + * Embedder-specific auxiliary data. + */ + auxData?: {} | undefined; + } + /** + * Detailed information about exception (or error) that was thrown during script compilation or execution. + */ + interface ExceptionDetails { + /** + * Exception id. + */ + exceptionId: number; + /** + * Exception text, which should be used together with exception object when available. + */ + text: string; + /** + * Line number of the exception location (0-based). + */ + lineNumber: number; + /** + * Column number of the exception location (0-based). + */ + columnNumber: number; + /** + * Script ID of the exception location. + */ + scriptId?: ScriptId | undefined; + /** + * URL of the exception location, to be used when the script was not reported. + */ + url?: string | undefined; + /** + * JavaScript stack trace if available. + */ + stackTrace?: StackTrace | undefined; + /** + * Exception object if available. + */ + exception?: RemoteObject | undefined; + /** + * Identifier of the context where exception happened. + */ + executionContextId?: ExecutionContextId | undefined; + } + /** + * Number of milliseconds since epoch. + */ + type Timestamp = number; + /** + * Stack entry for runtime errors and assertions. + */ + interface CallFrame { + /** + * JavaScript function name. + */ + functionName: string; + /** + * JavaScript script id. + */ + scriptId: ScriptId; + /** + * JavaScript script name or url. + */ + url: string; + /** + * JavaScript script line number (0-based). + */ + lineNumber: number; + /** + * JavaScript script column number (0-based). + */ + columnNumber: number; + } + /** + * Call frames for assertions or error messages. + */ + interface StackTrace { + /** + * String label of this stack trace. For async traces this may be a name of the function that initiated the async call. + */ + description?: string | undefined; + /** + * JavaScript function name. + */ + callFrames: CallFrame[]; + /** + * Asynchronous JavaScript stack trace that preceded this stack, if available. + */ + parent?: StackTrace | undefined; + /** + * Asynchronous JavaScript stack trace that preceded this stack, if available. + * @experimental + */ + parentId?: StackTraceId | undefined; + } + /** + * Unique identifier of current debugger. + * @experimental + */ + type UniqueDebuggerId = string; + /** + * If debuggerId is set stack trace comes from another debugger and can be resolved there. This allows to track cross-debugger calls. See Runtime.StackTrace and Debugger.paused for usages. + * @experimental + */ + interface StackTraceId { + id: string; + debuggerId?: UniqueDebuggerId | undefined; + } + interface EvaluateParameterType { + /** + * Expression to evaluate. + */ + expression: string; + /** + * Symbolic group name that can be used to release multiple objects. + */ + objectGroup?: string | undefined; + /** + * Determines whether Command Line API should be available during the evaluation. + */ + includeCommandLineAPI?: boolean | undefined; + /** + * In silent mode exceptions thrown during evaluation are not reported and do not pause execution. Overrides setPauseOnException state. + */ + silent?: boolean | undefined; + /** + * Specifies in which execution context to perform evaluation. If the parameter is omitted the evaluation will be performed in the context of the inspected page. + */ + contextId?: ExecutionContextId | undefined; + /** + * Whether the result is expected to be a JSON object that should be sent by value. + */ + returnByValue?: boolean | undefined; + /** + * Whether preview should be generated for the result. + * @experimental + */ + generatePreview?: boolean | undefined; + /** + * Whether execution should be treated as initiated by user in the UI. + */ + userGesture?: boolean | undefined; + /** + * Whether execution should await for resulting value and return once awaited promise is resolved. + */ + awaitPromise?: boolean | undefined; + } + interface AwaitPromiseParameterType { + /** + * Identifier of the promise. + */ + promiseObjectId: RemoteObjectId; + /** + * Whether the result is expected to be a JSON object that should be sent by value. + */ + returnByValue?: boolean | undefined; + /** + * Whether preview should be generated for the result. + */ + generatePreview?: boolean | undefined; + } + interface CallFunctionOnParameterType { + /** + * Declaration of the function to call. + */ + functionDeclaration: string; + /** + * Identifier of the object to call function on. Either objectId or executionContextId should be specified. + */ + objectId?: RemoteObjectId | undefined; + /** + * Call arguments. All call arguments must belong to the same JavaScript world as the target object. + */ + arguments?: CallArgument[] | undefined; + /** + * In silent mode exceptions thrown during evaluation are not reported and do not pause execution. Overrides setPauseOnException state. + */ + silent?: boolean | undefined; + /** + * Whether the result is expected to be a JSON object which should be sent by value. + */ + returnByValue?: boolean | undefined; + /** + * Whether preview should be generated for the result. + * @experimental + */ + generatePreview?: boolean | undefined; + /** + * Whether execution should be treated as initiated by user in the UI. + */ + userGesture?: boolean | undefined; + /** + * Whether execution should await for resulting value and return once awaited promise is resolved. + */ + awaitPromise?: boolean | undefined; + /** + * Specifies execution context which global object will be used to call function on. Either executionContextId or objectId should be specified. + */ + executionContextId?: ExecutionContextId | undefined; + /** + * Symbolic group name that can be used to release multiple objects. If objectGroup is not specified and objectId is, objectGroup will be inherited from object. + */ + objectGroup?: string | undefined; + } + interface GetPropertiesParameterType { + /** + * Identifier of the object to return properties for. + */ + objectId: RemoteObjectId; + /** + * If true, returns properties belonging only to the element itself, not to its prototype chain. + */ + ownProperties?: boolean | undefined; + /** + * If true, returns accessor properties (with getter/setter) only; internal properties are not returned either. + * @experimental + */ + accessorPropertiesOnly?: boolean | undefined; + /** + * Whether preview should be generated for the results. + * @experimental + */ + generatePreview?: boolean | undefined; + } + interface ReleaseObjectParameterType { + /** + * Identifier of the object to release. + */ + objectId: RemoteObjectId; + } + interface ReleaseObjectGroupParameterType { + /** + * Symbolic object group name. + */ + objectGroup: string; + } + interface SetCustomObjectFormatterEnabledParameterType { + enabled: boolean; + } + interface CompileScriptParameterType { + /** + * Expression to compile. + */ + expression: string; + /** + * Source url to be set for the script. + */ + sourceURL: string; + /** + * Specifies whether the compiled script should be persisted. + */ + persistScript: boolean; + /** + * Specifies in which execution context to perform script run. If the parameter is omitted the evaluation will be performed in the context of the inspected page. + */ + executionContextId?: ExecutionContextId | undefined; + } + interface RunScriptParameterType { + /** + * Id of the script to run. + */ + scriptId: ScriptId; + /** + * Specifies in which execution context to perform script run. If the parameter is omitted the evaluation will be performed in the context of the inspected page. + */ + executionContextId?: ExecutionContextId | undefined; + /** + * Symbolic group name that can be used to release multiple objects. + */ + objectGroup?: string | undefined; + /** + * In silent mode exceptions thrown during evaluation are not reported and do not pause execution. Overrides setPauseOnException state. + */ + silent?: boolean | undefined; + /** + * Determines whether Command Line API should be available during the evaluation. + */ + includeCommandLineAPI?: boolean | undefined; + /** + * Whether the result is expected to be a JSON object which should be sent by value. + */ + returnByValue?: boolean | undefined; + /** + * Whether preview should be generated for the result. + */ + generatePreview?: boolean | undefined; + /** + * Whether execution should await for resulting value and return once awaited promise is resolved. + */ + awaitPromise?: boolean | undefined; + } + interface QueryObjectsParameterType { + /** + * Identifier of the prototype to return objects for. + */ + prototypeObjectId: RemoteObjectId; + } + interface GlobalLexicalScopeNamesParameterType { + /** + * Specifies in which execution context to lookup global scope variables. + */ + executionContextId?: ExecutionContextId | undefined; + } + interface EvaluateReturnType { + /** + * Evaluation result. + */ + result: RemoteObject; + /** + * Exception details. + */ + exceptionDetails?: ExceptionDetails | undefined; + } + interface AwaitPromiseReturnType { + /** + * Promise result. Will contain rejected value if promise was rejected. + */ + result: RemoteObject; + /** + * Exception details if stack strace is available. + */ + exceptionDetails?: ExceptionDetails | undefined; + } + interface CallFunctionOnReturnType { + /** + * Call result. + */ + result: RemoteObject; + /** + * Exception details. + */ + exceptionDetails?: ExceptionDetails | undefined; + } + interface GetPropertiesReturnType { + /** + * Object properties. + */ + result: PropertyDescriptor[]; + /** + * Internal object properties (only of the element itself). + */ + internalProperties?: InternalPropertyDescriptor[] | undefined; + /** + * Exception details. + */ + exceptionDetails?: ExceptionDetails | undefined; + } + interface CompileScriptReturnType { + /** + * Id of the script. + */ + scriptId?: ScriptId | undefined; + /** + * Exception details. + */ + exceptionDetails?: ExceptionDetails | undefined; + } + interface RunScriptReturnType { + /** + * Run result. + */ + result: RemoteObject; + /** + * Exception details. + */ + exceptionDetails?: ExceptionDetails | undefined; + } + interface QueryObjectsReturnType { + /** + * Array with objects. + */ + objects: RemoteObject; + } + interface GlobalLexicalScopeNamesReturnType { + names: string[]; + } + interface ExecutionContextCreatedEventDataType { + /** + * A newly created execution context. + */ + context: ExecutionContextDescription; + } + interface ExecutionContextDestroyedEventDataType { + /** + * Id of the destroyed context + */ + executionContextId: ExecutionContextId; + } + interface ExceptionThrownEventDataType { + /** + * Timestamp of the exception. + */ + timestamp: Timestamp; + exceptionDetails: ExceptionDetails; + } + interface ExceptionRevokedEventDataType { + /** + * Reason describing why exception was revoked. + */ + reason: string; + /** + * The id of revoked exception, as reported in exceptionThrown. + */ + exceptionId: number; + } + interface ConsoleAPICalledEventDataType { + /** + * Type of the call. + */ + type: string; + /** + * Call arguments. + */ + args: RemoteObject[]; + /** + * Identifier of the context where the call was made. + */ + executionContextId: ExecutionContextId; + /** + * Call timestamp. + */ + timestamp: Timestamp; + /** + * Stack trace captured when the call was made. + */ + stackTrace?: StackTrace | undefined; + /** + * Console context descriptor for calls on non-default console context (not console.*): 'anonymous#unique-logger-id' for call on unnamed context, 'name#unique-logger-id' for call on named context. + * @experimental + */ + context?: string | undefined; + } + interface InspectRequestedEventDataType { + object: RemoteObject; + hints: {}; + } + } + namespace Debugger { + /** + * Breakpoint identifier. + */ + type BreakpointId = string; + /** + * Call frame identifier. + */ + type CallFrameId = string; + /** + * Location in the source code. + */ + interface Location { + /** + * Script identifier as reported in the Debugger.scriptParsed. + */ + scriptId: Runtime.ScriptId; + /** + * Line number in the script (0-based). + */ + lineNumber: number; + /** + * Column number in the script (0-based). + */ + columnNumber?: number | undefined; + } + /** + * Location in the source code. + * @experimental + */ + interface ScriptPosition { + lineNumber: number; + columnNumber: number; + } + /** + * JavaScript call frame. Array of call frames form the call stack. + */ + interface CallFrame { + /** + * Call frame identifier. This identifier is only valid while the virtual machine is paused. + */ + callFrameId: CallFrameId; + /** + * Name of the JavaScript function called on this call frame. + */ + functionName: string; + /** + * Location in the source code. + */ + functionLocation?: Location | undefined; + /** + * Location in the source code. + */ + location: Location; + /** + * JavaScript script name or url. + */ + url: string; + /** + * Scope chain for this call frame. + */ + scopeChain: Scope[]; + /** + * this object for this call frame. + */ + this: Runtime.RemoteObject; + /** + * The value being returned, if the function is at return point. + */ + returnValue?: Runtime.RemoteObject | undefined; + } + /** + * Scope description. + */ + interface Scope { + /** + * Scope type. + */ + type: string; + /** + * Object representing the scope. For global and with scopes it represents the actual object; for the rest of the scopes, it is artificial transient object enumerating scope variables as its properties. + */ + object: Runtime.RemoteObject; + name?: string | undefined; + /** + * Location in the source code where scope starts + */ + startLocation?: Location | undefined; + /** + * Location in the source code where scope ends + */ + endLocation?: Location | undefined; + } + /** + * Search match for resource. + */ + interface SearchMatch { + /** + * Line number in resource content. + */ + lineNumber: number; + /** + * Line with match content. + */ + lineContent: string; + } + interface BreakLocation { + /** + * Script identifier as reported in the Debugger.scriptParsed. + */ + scriptId: Runtime.ScriptId; + /** + * Line number in the script (0-based). + */ + lineNumber: number; + /** + * Column number in the script (0-based). + */ + columnNumber?: number | undefined; + type?: string | undefined; + } + interface SetBreakpointsActiveParameterType { + /** + * New value for breakpoints active state. + */ + active: boolean; + } + interface SetSkipAllPausesParameterType { + /** + * New value for skip pauses state. + */ + skip: boolean; + } + interface SetBreakpointByUrlParameterType { + /** + * Line number to set breakpoint at. + */ + lineNumber: number; + /** + * URL of the resources to set breakpoint on. + */ + url?: string | undefined; + /** + * Regex pattern for the URLs of the resources to set breakpoints on. Either url or urlRegex must be specified. + */ + urlRegex?: string | undefined; + /** + * Script hash of the resources to set breakpoint on. + */ + scriptHash?: string | undefined; + /** + * Offset in the line to set breakpoint at. + */ + columnNumber?: number | undefined; + /** + * Expression to use as a breakpoint condition. When specified, debugger will only stop on the breakpoint if this expression evaluates to true. + */ + condition?: string | undefined; + } + interface SetBreakpointParameterType { + /** + * Location to set breakpoint in. + */ + location: Location; + /** + * Expression to use as a breakpoint condition. When specified, debugger will only stop on the breakpoint if this expression evaluates to true. + */ + condition?: string | undefined; + } + interface RemoveBreakpointParameterType { + breakpointId: BreakpointId; + } + interface GetPossibleBreakpointsParameterType { + /** + * Start of range to search possible breakpoint locations in. + */ + start: Location; + /** + * End of range to search possible breakpoint locations in (excluding). When not specified, end of scripts is used as end of range. + */ + end?: Location | undefined; + /** + * Only consider locations which are in the same (non-nested) function as start. + */ + restrictToFunction?: boolean | undefined; + } + interface ContinueToLocationParameterType { + /** + * Location to continue to. + */ + location: Location; + targetCallFrames?: string | undefined; + } + interface PauseOnAsyncCallParameterType { + /** + * Debugger will pause when async call with given stack trace is started. + */ + parentStackTraceId: Runtime.StackTraceId; + } + interface StepIntoParameterType { + /** + * Debugger will issue additional Debugger.paused notification if any async task is scheduled before next pause. + * @experimental + */ + breakOnAsyncCall?: boolean | undefined; + } + interface GetStackTraceParameterType { + stackTraceId: Runtime.StackTraceId; + } + interface SearchInContentParameterType { + /** + * Id of the script to search in. + */ + scriptId: Runtime.ScriptId; + /** + * String to search for. + */ + query: string; + /** + * If true, search is case sensitive. + */ + caseSensitive?: boolean | undefined; + /** + * If true, treats string parameter as regex. + */ + isRegex?: boolean | undefined; + } + interface SetScriptSourceParameterType { + /** + * Id of the script to edit. + */ + scriptId: Runtime.ScriptId; + /** + * New content of the script. + */ + scriptSource: string; + /** + * If true the change will not actually be applied. Dry run may be used to get result description without actually modifying the code. + */ + dryRun?: boolean | undefined; + } + interface RestartFrameParameterType { + /** + * Call frame identifier to evaluate on. + */ + callFrameId: CallFrameId; + } + interface GetScriptSourceParameterType { + /** + * Id of the script to get source for. + */ + scriptId: Runtime.ScriptId; + } + interface SetPauseOnExceptionsParameterType { + /** + * Pause on exceptions mode. + */ + state: string; + } + interface EvaluateOnCallFrameParameterType { + /** + * Call frame identifier to evaluate on. + */ + callFrameId: CallFrameId; + /** + * Expression to evaluate. + */ + expression: string; + /** + * String object group name to put result into (allows rapid releasing resulting object handles using releaseObjectGroup). + */ + objectGroup?: string | undefined; + /** + * Specifies whether command line API should be available to the evaluated expression, defaults to false. + */ + includeCommandLineAPI?: boolean | undefined; + /** + * In silent mode exceptions thrown during evaluation are not reported and do not pause execution. Overrides setPauseOnException state. + */ + silent?: boolean | undefined; + /** + * Whether the result is expected to be a JSON object that should be sent by value. + */ + returnByValue?: boolean | undefined; + /** + * Whether preview should be generated for the result. + * @experimental + */ + generatePreview?: boolean | undefined; + /** + * Whether to throw an exception if side effect cannot be ruled out during evaluation. + */ + throwOnSideEffect?: boolean | undefined; + } + interface SetVariableValueParameterType { + /** + * 0-based number of scope as was listed in scope chain. Only 'local', 'closure' and 'catch' scope types are allowed. Other scopes could be manipulated manually. + */ + scopeNumber: number; + /** + * Variable name. + */ + variableName: string; + /** + * New variable value. + */ + newValue: Runtime.CallArgument; + /** + * Id of callframe that holds variable. + */ + callFrameId: CallFrameId; + } + interface SetReturnValueParameterType { + /** + * New return value. + */ + newValue: Runtime.CallArgument; + } + interface SetAsyncCallStackDepthParameterType { + /** + * Maximum depth of async call stacks. Setting to 0 will effectively disable collecting async call stacks (default). + */ + maxDepth: number; + } + interface SetBlackboxPatternsParameterType { + /** + * Array of regexps that will be used to check script url for blackbox state. + */ + patterns: string[]; + } + interface SetBlackboxedRangesParameterType { + /** + * Id of the script. + */ + scriptId: Runtime.ScriptId; + positions: ScriptPosition[]; + } + interface EnableReturnType { + /** + * Unique identifier of the debugger. + * @experimental + */ + debuggerId: Runtime.UniqueDebuggerId; + } + interface SetBreakpointByUrlReturnType { + /** + * Id of the created breakpoint for further reference. + */ + breakpointId: BreakpointId; + /** + * List of the locations this breakpoint resolved into upon addition. + */ + locations: Location[]; + } + interface SetBreakpointReturnType { + /** + * Id of the created breakpoint for further reference. + */ + breakpointId: BreakpointId; + /** + * Location this breakpoint resolved into. + */ + actualLocation: Location; + } + interface GetPossibleBreakpointsReturnType { + /** + * List of the possible breakpoint locations. + */ + locations: BreakLocation[]; + } + interface GetStackTraceReturnType { + stackTrace: Runtime.StackTrace; + } + interface SearchInContentReturnType { + /** + * List of search matches. + */ + result: SearchMatch[]; + } + interface SetScriptSourceReturnType { + /** + * New stack trace in case editing has happened while VM was stopped. + */ + callFrames?: CallFrame[] | undefined; + /** + * Whether current call stack was modified after applying the changes. + */ + stackChanged?: boolean | undefined; + /** + * Async stack trace, if any. + */ + asyncStackTrace?: Runtime.StackTrace | undefined; + /** + * Async stack trace, if any. + * @experimental + */ + asyncStackTraceId?: Runtime.StackTraceId | undefined; + /** + * Exception details if any. + */ + exceptionDetails?: Runtime.ExceptionDetails | undefined; + } + interface RestartFrameReturnType { + /** + * New stack trace. + */ + callFrames: CallFrame[]; + /** + * Async stack trace, if any. + */ + asyncStackTrace?: Runtime.StackTrace | undefined; + /** + * Async stack trace, if any. + * @experimental + */ + asyncStackTraceId?: Runtime.StackTraceId | undefined; + } + interface GetScriptSourceReturnType { + /** + * Script source. + */ + scriptSource: string; + } + interface EvaluateOnCallFrameReturnType { + /** + * Object wrapper for the evaluation result. + */ + result: Runtime.RemoteObject; + /** + * Exception details. + */ + exceptionDetails?: Runtime.ExceptionDetails | undefined; + } + interface ScriptParsedEventDataType { + /** + * Identifier of the script parsed. + */ + scriptId: Runtime.ScriptId; + /** + * URL or name of the script parsed (if any). + */ + url: string; + /** + * Line offset of the script within the resource with given URL (for script tags). + */ + startLine: number; + /** + * Column offset of the script within the resource with given URL. + */ + startColumn: number; + /** + * Last line of the script. + */ + endLine: number; + /** + * Length of the last line of the script. + */ + endColumn: number; + /** + * Specifies script creation context. + */ + executionContextId: Runtime.ExecutionContextId; + /** + * Content hash of the script. + */ + hash: string; + /** + * Embedder-specific auxiliary data. + */ + executionContextAuxData?: {} | undefined; + /** + * True, if this script is generated as a result of the live edit operation. + * @experimental + */ + isLiveEdit?: boolean | undefined; + /** + * URL of source map associated with script (if any). + */ + sourceMapURL?: string | undefined; + /** + * True, if this script has sourceURL. + */ + hasSourceURL?: boolean | undefined; + /** + * True, if this script is ES6 module. + */ + isModule?: boolean | undefined; + /** + * This script length. + */ + length?: number | undefined; + /** + * JavaScript top stack frame of where the script parsed event was triggered if available. + * @experimental + */ + stackTrace?: Runtime.StackTrace | undefined; + } + interface ScriptFailedToParseEventDataType { + /** + * Identifier of the script parsed. + */ + scriptId: Runtime.ScriptId; + /** + * URL or name of the script parsed (if any). + */ + url: string; + /** + * Line offset of the script within the resource with given URL (for script tags). + */ + startLine: number; + /** + * Column offset of the script within the resource with given URL. + */ + startColumn: number; + /** + * Last line of the script. + */ + endLine: number; + /** + * Length of the last line of the script. + */ + endColumn: number; + /** + * Specifies script creation context. + */ + executionContextId: Runtime.ExecutionContextId; + /** + * Content hash of the script. + */ + hash: string; + /** + * Embedder-specific auxiliary data. + */ + executionContextAuxData?: {} | undefined; + /** + * URL of source map associated with script (if any). + */ + sourceMapURL?: string | undefined; + /** + * True, if this script has sourceURL. + */ + hasSourceURL?: boolean | undefined; + /** + * True, if this script is ES6 module. + */ + isModule?: boolean | undefined; + /** + * This script length. + */ + length?: number | undefined; + /** + * JavaScript top stack frame of where the script parsed event was triggered if available. + * @experimental + */ + stackTrace?: Runtime.StackTrace | undefined; + } + interface BreakpointResolvedEventDataType { + /** + * Breakpoint unique identifier. + */ + breakpointId: BreakpointId; + /** + * Actual breakpoint location. + */ + location: Location; + } + interface PausedEventDataType { + /** + * Call stack the virtual machine stopped on. + */ + callFrames: CallFrame[]; + /** + * Pause reason. + */ + reason: string; + /** + * Object containing break-specific auxiliary properties. + */ + data?: {} | undefined; + /** + * Hit breakpoints IDs + */ + hitBreakpoints?: string[] | undefined; + /** + * Async stack trace, if any. + */ + asyncStackTrace?: Runtime.StackTrace | undefined; + /** + * Async stack trace, if any. + * @experimental + */ + asyncStackTraceId?: Runtime.StackTraceId | undefined; + /** + * Just scheduled async call will have this stack trace as parent stack during async execution. This field is available only after Debugger.stepInto call with breakOnAsynCall flag. + * @experimental + */ + asyncCallStackTraceId?: Runtime.StackTraceId | undefined; + } + } + namespace Console { + /** + * Console message. + */ + interface ConsoleMessage { + /** + * Message source. + */ + source: string; + /** + * Message severity. + */ + level: string; + /** + * Message text. + */ + text: string; + /** + * URL of the message origin. + */ + url?: string | undefined; + /** + * Line number in the resource that generated this message (1-based). + */ + line?: number | undefined; + /** + * Column number in the resource that generated this message (1-based). + */ + column?: number | undefined; + } + interface MessageAddedEventDataType { + /** + * Console message that has been added. + */ + message: ConsoleMessage; + } + } + namespace Profiler { + /** + * Profile node. Holds callsite information, execution statistics and child nodes. + */ + interface ProfileNode { + /** + * Unique id of the node. + */ + id: number; + /** + * Function location. + */ + callFrame: Runtime.CallFrame; + /** + * Number of samples where this node was on top of the call stack. + */ + hitCount?: number | undefined; + /** + * Child node ids. + */ + children?: number[] | undefined; + /** + * The reason of being not optimized. The function may be deoptimized or marked as don't optimize. + */ + deoptReason?: string | undefined; + /** + * An array of source position ticks. + */ + positionTicks?: PositionTickInfo[] | undefined; + } + /** + * Profile. + */ + interface Profile { + /** + * The list of profile nodes. First item is the root node. + */ + nodes: ProfileNode[]; + /** + * Profiling start timestamp in microseconds. + */ + startTime: number; + /** + * Profiling end timestamp in microseconds. + */ + endTime: number; + /** + * Ids of samples top nodes. + */ + samples?: number[] | undefined; + /** + * Time intervals between adjacent samples in microseconds. The first delta is relative to the profile startTime. + */ + timeDeltas?: number[] | undefined; + } + /** + * Specifies a number of samples attributed to a certain source position. + */ + interface PositionTickInfo { + /** + * Source line number (1-based). + */ + line: number; + /** + * Number of samples attributed to the source line. + */ + ticks: number; + } + /** + * Coverage data for a source range. + */ + interface CoverageRange { + /** + * JavaScript script source offset for the range start. + */ + startOffset: number; + /** + * JavaScript script source offset for the range end. + */ + endOffset: number; + /** + * Collected execution count of the source range. + */ + count: number; + } + /** + * Coverage data for a JavaScript function. + */ + interface FunctionCoverage { + /** + * JavaScript function name. + */ + functionName: string; + /** + * Source ranges inside the function with coverage data. + */ + ranges: CoverageRange[]; + /** + * Whether coverage data for this function has block granularity. + */ + isBlockCoverage: boolean; + } + /** + * Coverage data for a JavaScript script. + */ + interface ScriptCoverage { + /** + * JavaScript script id. + */ + scriptId: Runtime.ScriptId; + /** + * JavaScript script name or url. + */ + url: string; + /** + * Functions contained in the script that has coverage data. + */ + functions: FunctionCoverage[]; + } + /** + * Describes a type collected during runtime. + * @experimental + */ + interface TypeObject { + /** + * Name of a type collected with type profiling. + */ + name: string; + } + /** + * Source offset and types for a parameter or return value. + * @experimental + */ + interface TypeProfileEntry { + /** + * Source offset of the parameter or end of function for return values. + */ + offset: number; + /** + * The types for this parameter or return value. + */ + types: TypeObject[]; + } + /** + * Type profile data collected during runtime for a JavaScript script. + * @experimental + */ + interface ScriptTypeProfile { + /** + * JavaScript script id. + */ + scriptId: Runtime.ScriptId; + /** + * JavaScript script name or url. + */ + url: string; + /** + * Type profile entries for parameters and return values of the functions in the script. + */ + entries: TypeProfileEntry[]; + } + interface SetSamplingIntervalParameterType { + /** + * New sampling interval in microseconds. + */ + interval: number; + } + interface StartPreciseCoverageParameterType { + /** + * Collect accurate call counts beyond simple 'covered' or 'not covered'. + */ + callCount?: boolean | undefined; + /** + * Collect block-based coverage. + */ + detailed?: boolean | undefined; + } + interface StopReturnType { + /** + * Recorded profile. + */ + profile: Profile; + } + interface TakePreciseCoverageReturnType { + /** + * Coverage data for the current isolate. + */ + result: ScriptCoverage[]; + } + interface GetBestEffortCoverageReturnType { + /** + * Coverage data for the current isolate. + */ + result: ScriptCoverage[]; + } + interface TakeTypeProfileReturnType { + /** + * Type profile for all scripts since startTypeProfile() was turned on. + */ + result: ScriptTypeProfile[]; + } + interface ConsoleProfileStartedEventDataType { + id: string; + /** + * Location of console.profile(). + */ + location: Debugger.Location; + /** + * Profile title passed as an argument to console.profile(). + */ + title?: string | undefined; + } + interface ConsoleProfileFinishedEventDataType { + id: string; + /** + * Location of console.profileEnd(). + */ + location: Debugger.Location; + profile: Profile; + /** + * Profile title passed as an argument to console.profile(). + */ + title?: string | undefined; + } + } + namespace HeapProfiler { + /** + * Heap snapshot object id. + */ + type HeapSnapshotObjectId = string; + /** + * Sampling Heap Profile node. Holds callsite information, allocation statistics and child nodes. + */ + interface SamplingHeapProfileNode { + /** + * Function location. + */ + callFrame: Runtime.CallFrame; + /** + * Allocations size in bytes for the node excluding children. + */ + selfSize: number; + /** + * Child nodes. + */ + children: SamplingHeapProfileNode[]; + } + /** + * Profile. + */ + interface SamplingHeapProfile { + head: SamplingHeapProfileNode; + } + interface StartTrackingHeapObjectsParameterType { + trackAllocations?: boolean | undefined; + } + interface StopTrackingHeapObjectsParameterType { + /** + * If true 'reportHeapSnapshotProgress' events will be generated while snapshot is being taken when the tracking is stopped. + */ + reportProgress?: boolean | undefined; + } + interface TakeHeapSnapshotParameterType { + /** + * If true 'reportHeapSnapshotProgress' events will be generated while snapshot is being taken. + */ + reportProgress?: boolean | undefined; + } + interface GetObjectByHeapObjectIdParameterType { + objectId: HeapSnapshotObjectId; + /** + * Symbolic group name that can be used to release multiple objects. + */ + objectGroup?: string | undefined; + } + interface AddInspectedHeapObjectParameterType { + /** + * Heap snapshot object id to be accessible by means of $x command line API. + */ + heapObjectId: HeapSnapshotObjectId; + } + interface GetHeapObjectIdParameterType { + /** + * Identifier of the object to get heap object id for. + */ + objectId: Runtime.RemoteObjectId; + } + interface StartSamplingParameterType { + /** + * Average sample interval in bytes. Poisson distribution is used for the intervals. The default value is 32768 bytes. + */ + samplingInterval?: number | undefined; + } + interface GetObjectByHeapObjectIdReturnType { + /** + * Evaluation result. + */ + result: Runtime.RemoteObject; + } + interface GetHeapObjectIdReturnType { + /** + * Id of the heap snapshot object corresponding to the passed remote object id. + */ + heapSnapshotObjectId: HeapSnapshotObjectId; + } + interface StopSamplingReturnType { + /** + * Recorded sampling heap profile. + */ + profile: SamplingHeapProfile; + } + interface GetSamplingProfileReturnType { + /** + * Return the sampling profile being collected. + */ + profile: SamplingHeapProfile; + } + interface AddHeapSnapshotChunkEventDataType { + chunk: string; + } + interface ReportHeapSnapshotProgressEventDataType { + done: number; + total: number; + finished?: boolean | undefined; + } + interface LastSeenObjectIdEventDataType { + lastSeenObjectId: number; + timestamp: number; + } + interface HeapStatsUpdateEventDataType { + /** + * An array of triplets. Each triplet describes a fragment. The first integer is the fragment index, the second integer is a total count of objects for the fragment, the third integer is a total size of the objects for the fragment. + */ + statsUpdate: number[]; + } + } + namespace NodeTracing { + interface TraceConfig { + /** + * Controls how the trace buffer stores data. + */ + recordMode?: string | undefined; + /** + * Included category filters. + */ + includedCategories: string[]; + } + interface StartParameterType { + traceConfig: TraceConfig; + } + interface GetCategoriesReturnType { + /** + * A list of supported tracing categories. + */ + categories: string[]; + } + interface DataCollectedEventDataType { + value: Array<{}>; + } + } + namespace NodeWorker { + type WorkerID = string; + /** + * Unique identifier of attached debugging session. + */ + type SessionID = string; + interface WorkerInfo { + workerId: WorkerID; + type: string; + title: string; + url: string; + } + interface SendMessageToWorkerParameterType { + message: string; + /** + * Identifier of the session. + */ + sessionId: SessionID; + } + interface EnableParameterType { + /** + * Whether to new workers should be paused until the frontend sends `Runtime.runIfWaitingForDebugger` + * message to run them. + */ + waitForDebuggerOnStart: boolean; + } + interface DetachParameterType { + sessionId: SessionID; + } + interface AttachedToWorkerEventDataType { + /** + * Identifier assigned to the session used to send/receive messages. + */ + sessionId: SessionID; + workerInfo: WorkerInfo; + waitingForDebugger: boolean; + } + interface DetachedFromWorkerEventDataType { + /** + * Detached session identifier. + */ + sessionId: SessionID; + } + interface ReceivedMessageFromWorkerEventDataType { + /** + * Identifier of a session which sends a message. + */ + sessionId: SessionID; + message: string; + } + } + namespace NodeRuntime { + interface NotifyWhenWaitingForDisconnectParameterType { + enabled: boolean; + } + } + /** + * The `inspector.Session` is used for dispatching messages to the V8 inspector + * back-end and receiving message responses and notifications. + */ + class Session extends EventEmitter { + /** + * Create a new instance of the inspector.Session class. + * The inspector session needs to be connected through session.connect() before the messages can be dispatched to the inspector backend. + */ + constructor(); + /** + * Connects a session to the inspector back-end. + * @since v8.0.0 + */ + connect(): void; + /** + * Immediately close the session. All pending message callbacks will be called + * with an error. `session.connect()` will need to be called to be able to send + * messages again. Reconnected session will lose all inspector state, such as + * enabled agents or configured breakpoints. + * @since v8.0.0 + */ + disconnect(): void; + /** + * Posts a message to the inspector back-end. `callback` will be notified when + * a response is received. `callback` is a function that accepts two optional + * arguments: error and message-specific result. + * + * ```js + * session.post('Runtime.evaluate', { expression: '2 + 2' }, + * (error, { result }) => console.log(result)); + * // Output: { type: 'number', value: 4, description: '4' } + * ``` + * + * The latest version of the V8 inspector protocol is published on the [Chrome DevTools Protocol Viewer](https://chromedevtools.github.io/devtools-protocol/v8/). + * + * Node.js inspector supports all the Chrome DevTools Protocol domains declared + * by V8\. Chrome DevTools Protocol domain provides an interface for interacting + * with one of the runtime agents used to inspect the application state and listen + * to the run-time events. + * + * ## Example usage + * + * Apart from the debugger, various V8 Profilers are available through the DevTools + * protocol. + * @since v8.0.0 + */ + post(method: string, params?: {}, callback?: (err: Error | null, params?: {}) => void): void; + post(method: string, callback?: (err: Error | null, params?: {}) => void): void; + /** + * Returns supported domains. + */ + post(method: 'Schema.getDomains', callback?: (err: Error | null, params: Schema.GetDomainsReturnType) => void): void; + /** + * Evaluates expression on global object. + */ + post(method: 'Runtime.evaluate', params?: Runtime.EvaluateParameterType, callback?: (err: Error | null, params: Runtime.EvaluateReturnType) => void): void; + post(method: 'Runtime.evaluate', callback?: (err: Error | null, params: Runtime.EvaluateReturnType) => void): void; + /** + * Add handler to promise with given promise object id. + */ + post(method: 'Runtime.awaitPromise', params?: Runtime.AwaitPromiseParameterType, callback?: (err: Error | null, params: Runtime.AwaitPromiseReturnType) => void): void; + post(method: 'Runtime.awaitPromise', callback?: (err: Error | null, params: Runtime.AwaitPromiseReturnType) => void): void; + /** + * Calls function with given declaration on the given object. Object group of the result is inherited from the target object. + */ + post(method: 'Runtime.callFunctionOn', params?: Runtime.CallFunctionOnParameterType, callback?: (err: Error | null, params: Runtime.CallFunctionOnReturnType) => void): void; + post(method: 'Runtime.callFunctionOn', callback?: (err: Error | null, params: Runtime.CallFunctionOnReturnType) => void): void; + /** + * Returns properties of a given object. Object group of the result is inherited from the target object. + */ + post(method: 'Runtime.getProperties', params?: Runtime.GetPropertiesParameterType, callback?: (err: Error | null, params: Runtime.GetPropertiesReturnType) => void): void; + post(method: 'Runtime.getProperties', callback?: (err: Error | null, params: Runtime.GetPropertiesReturnType) => void): void; + /** + * Releases remote object with given id. + */ + post(method: 'Runtime.releaseObject', params?: Runtime.ReleaseObjectParameterType, callback?: (err: Error | null) => void): void; + post(method: 'Runtime.releaseObject', callback?: (err: Error | null) => void): void; + /** + * Releases all remote objects that belong to a given group. + */ + post(method: 'Runtime.releaseObjectGroup', params?: Runtime.ReleaseObjectGroupParameterType, callback?: (err: Error | null) => void): void; + post(method: 'Runtime.releaseObjectGroup', callback?: (err: Error | null) => void): void; + /** + * Tells inspected instance to run if it was waiting for debugger to attach. + */ + post(method: 'Runtime.runIfWaitingForDebugger', callback?: (err: Error | null) => void): void; + /** + * Enables reporting of execution contexts creation by means of executionContextCreated event. When the reporting gets enabled the event will be sent immediately for each existing execution context. + */ + post(method: 'Runtime.enable', callback?: (err: Error | null) => void): void; + /** + * Disables reporting of execution contexts creation. + */ + post(method: 'Runtime.disable', callback?: (err: Error | null) => void): void; + /** + * Discards collected exceptions and console API calls. + */ + post(method: 'Runtime.discardConsoleEntries', callback?: (err: Error | null) => void): void; + /** + * @experimental + */ + post(method: 'Runtime.setCustomObjectFormatterEnabled', params?: Runtime.SetCustomObjectFormatterEnabledParameterType, callback?: (err: Error | null) => void): void; + post(method: 'Runtime.setCustomObjectFormatterEnabled', callback?: (err: Error | null) => void): void; + /** + * Compiles expression. + */ + post(method: 'Runtime.compileScript', params?: Runtime.CompileScriptParameterType, callback?: (err: Error | null, params: Runtime.CompileScriptReturnType) => void): void; + post(method: 'Runtime.compileScript', callback?: (err: Error | null, params: Runtime.CompileScriptReturnType) => void): void; + /** + * Runs script with given id in a given context. + */ + post(method: 'Runtime.runScript', params?: Runtime.RunScriptParameterType, callback?: (err: Error | null, params: Runtime.RunScriptReturnType) => void): void; + post(method: 'Runtime.runScript', callback?: (err: Error | null, params: Runtime.RunScriptReturnType) => void): void; + post(method: 'Runtime.queryObjects', params?: Runtime.QueryObjectsParameterType, callback?: (err: Error | null, params: Runtime.QueryObjectsReturnType) => void): void; + post(method: 'Runtime.queryObjects', callback?: (err: Error | null, params: Runtime.QueryObjectsReturnType) => void): void; + /** + * Returns all let, const and class variables from global scope. + */ + post( + method: 'Runtime.globalLexicalScopeNames', + params?: Runtime.GlobalLexicalScopeNamesParameterType, + callback?: (err: Error | null, params: Runtime.GlobalLexicalScopeNamesReturnType) => void + ): void; + post(method: 'Runtime.globalLexicalScopeNames', callback?: (err: Error | null, params: Runtime.GlobalLexicalScopeNamesReturnType) => void): void; + /** + * Enables debugger for the given page. Clients should not assume that the debugging has been enabled until the result for this command is received. + */ + post(method: 'Debugger.enable', callback?: (err: Error | null, params: Debugger.EnableReturnType) => void): void; + /** + * Disables debugger for given page. + */ + post(method: 'Debugger.disable', callback?: (err: Error | null) => void): void; + /** + * Activates / deactivates all breakpoints on the page. + */ + post(method: 'Debugger.setBreakpointsActive', params?: Debugger.SetBreakpointsActiveParameterType, callback?: (err: Error | null) => void): void; + post(method: 'Debugger.setBreakpointsActive', callback?: (err: Error | null) => void): void; + /** + * Makes page not interrupt on any pauses (breakpoint, exception, dom exception etc). + */ + post(method: 'Debugger.setSkipAllPauses', params?: Debugger.SetSkipAllPausesParameterType, callback?: (err: Error | null) => void): void; + post(method: 'Debugger.setSkipAllPauses', callback?: (err: Error | null) => void): void; + /** + * Sets JavaScript breakpoint at given location specified either by URL or URL regex. Once this command is issued, all existing parsed scripts will have breakpoints resolved and returned in locations property. Further matching script parsing will result in subsequent breakpointResolved events issued. This logical breakpoint will survive page reloads. + */ + post(method: 'Debugger.setBreakpointByUrl', params?: Debugger.SetBreakpointByUrlParameterType, callback?: (err: Error | null, params: Debugger.SetBreakpointByUrlReturnType) => void): void; + post(method: 'Debugger.setBreakpointByUrl', callback?: (err: Error | null, params: Debugger.SetBreakpointByUrlReturnType) => void): void; + /** + * Sets JavaScript breakpoint at a given location. + */ + post(method: 'Debugger.setBreakpoint', params?: Debugger.SetBreakpointParameterType, callback?: (err: Error | null, params: Debugger.SetBreakpointReturnType) => void): void; + post(method: 'Debugger.setBreakpoint', callback?: (err: Error | null, params: Debugger.SetBreakpointReturnType) => void): void; + /** + * Removes JavaScript breakpoint. + */ + post(method: 'Debugger.removeBreakpoint', params?: Debugger.RemoveBreakpointParameterType, callback?: (err: Error | null) => void): void; + post(method: 'Debugger.removeBreakpoint', callback?: (err: Error | null) => void): void; + /** + * Returns possible locations for breakpoint. scriptId in start and end range locations should be the same. + */ + post( + method: 'Debugger.getPossibleBreakpoints', + params?: Debugger.GetPossibleBreakpointsParameterType, + callback?: (err: Error | null, params: Debugger.GetPossibleBreakpointsReturnType) => void + ): void; + post(method: 'Debugger.getPossibleBreakpoints', callback?: (err: Error | null, params: Debugger.GetPossibleBreakpointsReturnType) => void): void; + /** + * Continues execution until specific location is reached. + */ + post(method: 'Debugger.continueToLocation', params?: Debugger.ContinueToLocationParameterType, callback?: (err: Error | null) => void): void; + post(method: 'Debugger.continueToLocation', callback?: (err: Error | null) => void): void; + /** + * @experimental + */ + post(method: 'Debugger.pauseOnAsyncCall', params?: Debugger.PauseOnAsyncCallParameterType, callback?: (err: Error | null) => void): void; + post(method: 'Debugger.pauseOnAsyncCall', callback?: (err: Error | null) => void): void; + /** + * Steps over the statement. + */ + post(method: 'Debugger.stepOver', callback?: (err: Error | null) => void): void; + /** + * Steps into the function call. + */ + post(method: 'Debugger.stepInto', params?: Debugger.StepIntoParameterType, callback?: (err: Error | null) => void): void; + post(method: 'Debugger.stepInto', callback?: (err: Error | null) => void): void; + /** + * Steps out of the function call. + */ + post(method: 'Debugger.stepOut', callback?: (err: Error | null) => void): void; + /** + * Stops on the next JavaScript statement. + */ + post(method: 'Debugger.pause', callback?: (err: Error | null) => void): void; + /** + * This method is deprecated - use Debugger.stepInto with breakOnAsyncCall and Debugger.pauseOnAsyncTask instead. Steps into next scheduled async task if any is scheduled before next pause. Returns success when async task is actually scheduled, returns error if no task were scheduled or another scheduleStepIntoAsync was called. + * @experimental + */ + post(method: 'Debugger.scheduleStepIntoAsync', callback?: (err: Error | null) => void): void; + /** + * Resumes JavaScript execution. + */ + post(method: 'Debugger.resume', callback?: (err: Error | null) => void): void; + /** + * Returns stack trace with given stackTraceId. + * @experimental + */ + post(method: 'Debugger.getStackTrace', params?: Debugger.GetStackTraceParameterType, callback?: (err: Error | null, params: Debugger.GetStackTraceReturnType) => void): void; + post(method: 'Debugger.getStackTrace', callback?: (err: Error | null, params: Debugger.GetStackTraceReturnType) => void): void; + /** + * Searches for given string in script content. + */ + post(method: 'Debugger.searchInContent', params?: Debugger.SearchInContentParameterType, callback?: (err: Error | null, params: Debugger.SearchInContentReturnType) => void): void; + post(method: 'Debugger.searchInContent', callback?: (err: Error | null, params: Debugger.SearchInContentReturnType) => void): void; + /** + * Edits JavaScript source live. + */ + post(method: 'Debugger.setScriptSource', params?: Debugger.SetScriptSourceParameterType, callback?: (err: Error | null, params: Debugger.SetScriptSourceReturnType) => void): void; + post(method: 'Debugger.setScriptSource', callback?: (err: Error | null, params: Debugger.SetScriptSourceReturnType) => void): void; + /** + * Restarts particular call frame from the beginning. + */ + post(method: 'Debugger.restartFrame', params?: Debugger.RestartFrameParameterType, callback?: (err: Error | null, params: Debugger.RestartFrameReturnType) => void): void; + post(method: 'Debugger.restartFrame', callback?: (err: Error | null, params: Debugger.RestartFrameReturnType) => void): void; + /** + * Returns source for the script with given id. + */ + post(method: 'Debugger.getScriptSource', params?: Debugger.GetScriptSourceParameterType, callback?: (err: Error | null, params: Debugger.GetScriptSourceReturnType) => void): void; + post(method: 'Debugger.getScriptSource', callback?: (err: Error | null, params: Debugger.GetScriptSourceReturnType) => void): void; + /** + * Defines pause on exceptions state. Can be set to stop on all exceptions, uncaught exceptions or no exceptions. Initial pause on exceptions state is none. + */ + post(method: 'Debugger.setPauseOnExceptions', params?: Debugger.SetPauseOnExceptionsParameterType, callback?: (err: Error | null) => void): void; + post(method: 'Debugger.setPauseOnExceptions', callback?: (err: Error | null) => void): void; + /** + * Evaluates expression on a given call frame. + */ + post(method: 'Debugger.evaluateOnCallFrame', params?: Debugger.EvaluateOnCallFrameParameterType, callback?: (err: Error | null, params: Debugger.EvaluateOnCallFrameReturnType) => void): void; + post(method: 'Debugger.evaluateOnCallFrame', callback?: (err: Error | null, params: Debugger.EvaluateOnCallFrameReturnType) => void): void; + /** + * Changes value of variable in a callframe. Object-based scopes are not supported and must be mutated manually. + */ + post(method: 'Debugger.setVariableValue', params?: Debugger.SetVariableValueParameterType, callback?: (err: Error | null) => void): void; + post(method: 'Debugger.setVariableValue', callback?: (err: Error | null) => void): void; + /** + * Changes return value in top frame. Available only at return break position. + * @experimental + */ + post(method: 'Debugger.setReturnValue', params?: Debugger.SetReturnValueParameterType, callback?: (err: Error | null) => void): void; + post(method: 'Debugger.setReturnValue', callback?: (err: Error | null) => void): void; + /** + * Enables or disables async call stacks tracking. + */ + post(method: 'Debugger.setAsyncCallStackDepth', params?: Debugger.SetAsyncCallStackDepthParameterType, callback?: (err: Error | null) => void): void; + post(method: 'Debugger.setAsyncCallStackDepth', callback?: (err: Error | null) => void): void; + /** + * Replace previous blackbox patterns with passed ones. Forces backend to skip stepping/pausing in scripts with url matching one of the patterns. VM will try to leave blackboxed script by performing 'step in' several times, finally resorting to 'step out' if unsuccessful. + * @experimental + */ + post(method: 'Debugger.setBlackboxPatterns', params?: Debugger.SetBlackboxPatternsParameterType, callback?: (err: Error | null) => void): void; + post(method: 'Debugger.setBlackboxPatterns', callback?: (err: Error | null) => void): void; + /** + * Makes backend skip steps in the script in blackboxed ranges. VM will try leave blacklisted scripts by performing 'step in' several times, finally resorting to 'step out' if unsuccessful. Positions array contains positions where blackbox state is changed. First interval isn't blackboxed. Array should be sorted. + * @experimental + */ + post(method: 'Debugger.setBlackboxedRanges', params?: Debugger.SetBlackboxedRangesParameterType, callback?: (err: Error | null) => void): void; + post(method: 'Debugger.setBlackboxedRanges', callback?: (err: Error | null) => void): void; + /** + * Enables console domain, sends the messages collected so far to the client by means of the messageAdded notification. + */ + post(method: 'Console.enable', callback?: (err: Error | null) => void): void; + /** + * Disables console domain, prevents further console messages from being reported to the client. + */ + post(method: 'Console.disable', callback?: (err: Error | null) => void): void; + /** + * Does nothing. + */ + post(method: 'Console.clearMessages', callback?: (err: Error | null) => void): void; + post(method: 'Profiler.enable', callback?: (err: Error | null) => void): void; + post(method: 'Profiler.disable', callback?: (err: Error | null) => void): void; + /** + * Changes CPU profiler sampling interval. Must be called before CPU profiles recording started. + */ + post(method: 'Profiler.setSamplingInterval', params?: Profiler.SetSamplingIntervalParameterType, callback?: (err: Error | null) => void): void; + post(method: 'Profiler.setSamplingInterval', callback?: (err: Error | null) => void): void; + post(method: 'Profiler.start', callback?: (err: Error | null) => void): void; + post(method: 'Profiler.stop', callback?: (err: Error | null, params: Profiler.StopReturnType) => void): void; + /** + * Enable precise code coverage. Coverage data for JavaScript executed before enabling precise code coverage may be incomplete. Enabling prevents running optimized code and resets execution counters. + */ + post(method: 'Profiler.startPreciseCoverage', params?: Profiler.StartPreciseCoverageParameterType, callback?: (err: Error | null) => void): void; + post(method: 'Profiler.startPreciseCoverage', callback?: (err: Error | null) => void): void; + /** + * Disable precise code coverage. Disabling releases unnecessary execution count records and allows executing optimized code. + */ + post(method: 'Profiler.stopPreciseCoverage', callback?: (err: Error | null) => void): void; + /** + * Collect coverage data for the current isolate, and resets execution counters. Precise code coverage needs to have started. + */ + post(method: 'Profiler.takePreciseCoverage', callback?: (err: Error | null, params: Profiler.TakePreciseCoverageReturnType) => void): void; + /** + * Collect coverage data for the current isolate. The coverage data may be incomplete due to garbage collection. + */ + post(method: 'Profiler.getBestEffortCoverage', callback?: (err: Error | null, params: Profiler.GetBestEffortCoverageReturnType) => void): void; + /** + * Enable type profile. + * @experimental + */ + post(method: 'Profiler.startTypeProfile', callback?: (err: Error | null) => void): void; + /** + * Disable type profile. Disabling releases type profile data collected so far. + * @experimental + */ + post(method: 'Profiler.stopTypeProfile', callback?: (err: Error | null) => void): void; + /** + * Collect type profile. + * @experimental + */ + post(method: 'Profiler.takeTypeProfile', callback?: (err: Error | null, params: Profiler.TakeTypeProfileReturnType) => void): void; + post(method: 'HeapProfiler.enable', callback?: (err: Error | null) => void): void; + post(method: 'HeapProfiler.disable', callback?: (err: Error | null) => void): void; + post(method: 'HeapProfiler.startTrackingHeapObjects', params?: HeapProfiler.StartTrackingHeapObjectsParameterType, callback?: (err: Error | null) => void): void; + post(method: 'HeapProfiler.startTrackingHeapObjects', callback?: (err: Error | null) => void): void; + post(method: 'HeapProfiler.stopTrackingHeapObjects', params?: HeapProfiler.StopTrackingHeapObjectsParameterType, callback?: (err: Error | null) => void): void; + post(method: 'HeapProfiler.stopTrackingHeapObjects', callback?: (err: Error | null) => void): void; + post(method: 'HeapProfiler.takeHeapSnapshot', params?: HeapProfiler.TakeHeapSnapshotParameterType, callback?: (err: Error | null) => void): void; + post(method: 'HeapProfiler.takeHeapSnapshot', callback?: (err: Error | null) => void): void; + post(method: 'HeapProfiler.collectGarbage', callback?: (err: Error | null) => void): void; + post( + method: 'HeapProfiler.getObjectByHeapObjectId', + params?: HeapProfiler.GetObjectByHeapObjectIdParameterType, + callback?: (err: Error | null, params: HeapProfiler.GetObjectByHeapObjectIdReturnType) => void + ): void; + post(method: 'HeapProfiler.getObjectByHeapObjectId', callback?: (err: Error | null, params: HeapProfiler.GetObjectByHeapObjectIdReturnType) => void): void; + /** + * Enables console to refer to the node with given id via $x (see Command Line API for more details $x functions). + */ + post(method: 'HeapProfiler.addInspectedHeapObject', params?: HeapProfiler.AddInspectedHeapObjectParameterType, callback?: (err: Error | null) => void): void; + post(method: 'HeapProfiler.addInspectedHeapObject', callback?: (err: Error | null) => void): void; + post(method: 'HeapProfiler.getHeapObjectId', params?: HeapProfiler.GetHeapObjectIdParameterType, callback?: (err: Error | null, params: HeapProfiler.GetHeapObjectIdReturnType) => void): void; + post(method: 'HeapProfiler.getHeapObjectId', callback?: (err: Error | null, params: HeapProfiler.GetHeapObjectIdReturnType) => void): void; + post(method: 'HeapProfiler.startSampling', params?: HeapProfiler.StartSamplingParameterType, callback?: (err: Error | null) => void): void; + post(method: 'HeapProfiler.startSampling', callback?: (err: Error | null) => void): void; + post(method: 'HeapProfiler.stopSampling', callback?: (err: Error | null, params: HeapProfiler.StopSamplingReturnType) => void): void; + post(method: 'HeapProfiler.getSamplingProfile', callback?: (err: Error | null, params: HeapProfiler.GetSamplingProfileReturnType) => void): void; + /** + * Gets supported tracing categories. + */ + post(method: 'NodeTracing.getCategories', callback?: (err: Error | null, params: NodeTracing.GetCategoriesReturnType) => void): void; + /** + * Start trace events collection. + */ + post(method: 'NodeTracing.start', params?: NodeTracing.StartParameterType, callback?: (err: Error | null) => void): void; + post(method: 'NodeTracing.start', callback?: (err: Error | null) => void): void; + /** + * Stop trace events collection. Remaining collected events will be sent as a sequence of + * dataCollected events followed by tracingComplete event. + */ + post(method: 'NodeTracing.stop', callback?: (err: Error | null) => void): void; + /** + * Sends protocol message over session with given id. + */ + post(method: 'NodeWorker.sendMessageToWorker', params?: NodeWorker.SendMessageToWorkerParameterType, callback?: (err: Error | null) => void): void; + post(method: 'NodeWorker.sendMessageToWorker', callback?: (err: Error | null) => void): void; + /** + * Instructs the inspector to attach to running workers. Will also attach to new workers + * as they start + */ + post(method: 'NodeWorker.enable', params?: NodeWorker.EnableParameterType, callback?: (err: Error | null) => void): void; + post(method: 'NodeWorker.enable', callback?: (err: Error | null) => void): void; + /** + * Detaches from all running workers and disables attaching to new workers as they are started. + */ + post(method: 'NodeWorker.disable', callback?: (err: Error | null) => void): void; + /** + * Detached from the worker with given sessionId. + */ + post(method: 'NodeWorker.detach', params?: NodeWorker.DetachParameterType, callback?: (err: Error | null) => void): void; + post(method: 'NodeWorker.detach', callback?: (err: Error | null) => void): void; + /** + * Enable the `NodeRuntime.waitingForDisconnect`. + */ + post(method: 'NodeRuntime.notifyWhenWaitingForDisconnect', params?: NodeRuntime.NotifyWhenWaitingForDisconnectParameterType, callback?: (err: Error | null) => void): void; + post(method: 'NodeRuntime.notifyWhenWaitingForDisconnect', callback?: (err: Error | null) => void): void; + // Events + addListener(event: string, listener: (...args: any[]) => void): this; + /** + * Emitted when any notification from the V8 Inspector is received. + */ + addListener(event: 'inspectorNotification', listener: (message: InspectorNotification<{}>) => void): this; + /** + * Issued when new execution context is created. + */ + addListener(event: 'Runtime.executionContextCreated', listener: (message: InspectorNotification) => void): this; + /** + * Issued when execution context is destroyed. + */ + addListener(event: 'Runtime.executionContextDestroyed', listener: (message: InspectorNotification) => void): this; + /** + * Issued when all executionContexts were cleared in browser + */ + addListener(event: 'Runtime.executionContextsCleared', listener: () => void): this; + /** + * Issued when exception was thrown and unhandled. + */ + addListener(event: 'Runtime.exceptionThrown', listener: (message: InspectorNotification) => void): this; + /** + * Issued when unhandled exception was revoked. + */ + addListener(event: 'Runtime.exceptionRevoked', listener: (message: InspectorNotification) => void): this; + /** + * Issued when console API was called. + */ + addListener(event: 'Runtime.consoleAPICalled', listener: (message: InspectorNotification) => void): this; + /** + * Issued when object should be inspected (for example, as a result of inspect() command line API call). + */ + addListener(event: 'Runtime.inspectRequested', listener: (message: InspectorNotification) => void): this; + /** + * Fired when virtual machine parses script. This event is also fired for all known and uncollected scripts upon enabling debugger. + */ + addListener(event: 'Debugger.scriptParsed', listener: (message: InspectorNotification) => void): this; + /** + * Fired when virtual machine fails to parse the script. + */ + addListener(event: 'Debugger.scriptFailedToParse', listener: (message: InspectorNotification) => void): this; + /** + * Fired when breakpoint is resolved to an actual script and location. + */ + addListener(event: 'Debugger.breakpointResolved', listener: (message: InspectorNotification) => void): this; + /** + * Fired when the virtual machine stopped on breakpoint or exception or any other stop criteria. + */ + addListener(event: 'Debugger.paused', listener: (message: InspectorNotification) => void): this; + /** + * Fired when the virtual machine resumed execution. + */ + addListener(event: 'Debugger.resumed', listener: () => void): this; + /** + * Issued when new console message is added. + */ + addListener(event: 'Console.messageAdded', listener: (message: InspectorNotification) => void): this; + /** + * Sent when new profile recording is started using console.profile() call. + */ + addListener(event: 'Profiler.consoleProfileStarted', listener: (message: InspectorNotification) => void): this; + addListener(event: 'Profiler.consoleProfileFinished', listener: (message: InspectorNotification) => void): this; + addListener(event: 'HeapProfiler.addHeapSnapshotChunk', listener: (message: InspectorNotification) => void): this; + addListener(event: 'HeapProfiler.resetProfiles', listener: () => void): this; + addListener(event: 'HeapProfiler.reportHeapSnapshotProgress', listener: (message: InspectorNotification) => void): this; + /** + * If heap objects tracking has been started then backend regularly sends a current value for last seen object id and corresponding timestamp. If the were changes in the heap since last event then one or more heapStatsUpdate events will be sent before a new lastSeenObjectId event. + */ + addListener(event: 'HeapProfiler.lastSeenObjectId', listener: (message: InspectorNotification) => void): this; + /** + * If heap objects tracking has been started then backend may send update for one or more fragments + */ + addListener(event: 'HeapProfiler.heapStatsUpdate', listener: (message: InspectorNotification) => void): this; + /** + * Contains an bucket of collected trace events. + */ + addListener(event: 'NodeTracing.dataCollected', listener: (message: InspectorNotification) => void): this; + /** + * Signals that tracing is stopped and there is no trace buffers pending flush, all data were + * delivered via dataCollected events. + */ + addListener(event: 'NodeTracing.tracingComplete', listener: () => void): this; + /** + * Issued when attached to a worker. + */ + addListener(event: 'NodeWorker.attachedToWorker', listener: (message: InspectorNotification) => void): this; + /** + * Issued when detached from the worker. + */ + addListener(event: 'NodeWorker.detachedFromWorker', listener: (message: InspectorNotification) => void): this; + /** + * Notifies about a new protocol message received from the session + * (session ID is provided in attachedToWorker notification). + */ + addListener(event: 'NodeWorker.receivedMessageFromWorker', listener: (message: InspectorNotification) => void): this; + /** + * This event is fired instead of `Runtime.executionContextDestroyed` when + * enabled. + * It is fired when the Node process finished all code execution and is + * waiting for all frontends to disconnect. + */ + addListener(event: 'NodeRuntime.waitingForDisconnect', listener: () => void): this; + emit(event: string | symbol, ...args: any[]): boolean; + emit(event: 'inspectorNotification', message: InspectorNotification<{}>): boolean; + emit(event: 'Runtime.executionContextCreated', message: InspectorNotification): boolean; + emit(event: 'Runtime.executionContextDestroyed', message: InspectorNotification): boolean; + emit(event: 'Runtime.executionContextsCleared'): boolean; + emit(event: 'Runtime.exceptionThrown', message: InspectorNotification): boolean; + emit(event: 'Runtime.exceptionRevoked', message: InspectorNotification): boolean; + emit(event: 'Runtime.consoleAPICalled', message: InspectorNotification): boolean; + emit(event: 'Runtime.inspectRequested', message: InspectorNotification): boolean; + emit(event: 'Debugger.scriptParsed', message: InspectorNotification): boolean; + emit(event: 'Debugger.scriptFailedToParse', message: InspectorNotification): boolean; + emit(event: 'Debugger.breakpointResolved', message: InspectorNotification): boolean; + emit(event: 'Debugger.paused', message: InspectorNotification): boolean; + emit(event: 'Debugger.resumed'): boolean; + emit(event: 'Console.messageAdded', message: InspectorNotification): boolean; + emit(event: 'Profiler.consoleProfileStarted', message: InspectorNotification): boolean; + emit(event: 'Profiler.consoleProfileFinished', message: InspectorNotification): boolean; + emit(event: 'HeapProfiler.addHeapSnapshotChunk', message: InspectorNotification): boolean; + emit(event: 'HeapProfiler.resetProfiles'): boolean; + emit(event: 'HeapProfiler.reportHeapSnapshotProgress', message: InspectorNotification): boolean; + emit(event: 'HeapProfiler.lastSeenObjectId', message: InspectorNotification): boolean; + emit(event: 'HeapProfiler.heapStatsUpdate', message: InspectorNotification): boolean; + emit(event: 'NodeTracing.dataCollected', message: InspectorNotification): boolean; + emit(event: 'NodeTracing.tracingComplete'): boolean; + emit(event: 'NodeWorker.attachedToWorker', message: InspectorNotification): boolean; + emit(event: 'NodeWorker.detachedFromWorker', message: InspectorNotification): boolean; + emit(event: 'NodeWorker.receivedMessageFromWorker', message: InspectorNotification): boolean; + emit(event: 'NodeRuntime.waitingForDisconnect'): boolean; + on(event: string, listener: (...args: any[]) => void): this; + /** + * Emitted when any notification from the V8 Inspector is received. + */ + on(event: 'inspectorNotification', listener: (message: InspectorNotification<{}>) => void): this; + /** + * Issued when new execution context is created. + */ + on(event: 'Runtime.executionContextCreated', listener: (message: InspectorNotification) => void): this; + /** + * Issued when execution context is destroyed. + */ + on(event: 'Runtime.executionContextDestroyed', listener: (message: InspectorNotification) => void): this; + /** + * Issued when all executionContexts were cleared in browser + */ + on(event: 'Runtime.executionContextsCleared', listener: () => void): this; + /** + * Issued when exception was thrown and unhandled. + */ + on(event: 'Runtime.exceptionThrown', listener: (message: InspectorNotification) => void): this; + /** + * Issued when unhandled exception was revoked. + */ + on(event: 'Runtime.exceptionRevoked', listener: (message: InspectorNotification) => void): this; + /** + * Issued when console API was called. + */ + on(event: 'Runtime.consoleAPICalled', listener: (message: InspectorNotification) => void): this; + /** + * Issued when object should be inspected (for example, as a result of inspect() command line API call). + */ + on(event: 'Runtime.inspectRequested', listener: (message: InspectorNotification) => void): this; + /** + * Fired when virtual machine parses script. This event is also fired for all known and uncollected scripts upon enabling debugger. + */ + on(event: 'Debugger.scriptParsed', listener: (message: InspectorNotification) => void): this; + /** + * Fired when virtual machine fails to parse the script. + */ + on(event: 'Debugger.scriptFailedToParse', listener: (message: InspectorNotification) => void): this; + /** + * Fired when breakpoint is resolved to an actual script and location. + */ + on(event: 'Debugger.breakpointResolved', listener: (message: InspectorNotification) => void): this; + /** + * Fired when the virtual machine stopped on breakpoint or exception or any other stop criteria. + */ + on(event: 'Debugger.paused', listener: (message: InspectorNotification) => void): this; + /** + * Fired when the virtual machine resumed execution. + */ + on(event: 'Debugger.resumed', listener: () => void): this; + /** + * Issued when new console message is added. + */ + on(event: 'Console.messageAdded', listener: (message: InspectorNotification) => void): this; + /** + * Sent when new profile recording is started using console.profile() call. + */ + on(event: 'Profiler.consoleProfileStarted', listener: (message: InspectorNotification) => void): this; + on(event: 'Profiler.consoleProfileFinished', listener: (message: InspectorNotification) => void): this; + on(event: 'HeapProfiler.addHeapSnapshotChunk', listener: (message: InspectorNotification) => void): this; + on(event: 'HeapProfiler.resetProfiles', listener: () => void): this; + on(event: 'HeapProfiler.reportHeapSnapshotProgress', listener: (message: InspectorNotification) => void): this; + /** + * If heap objects tracking has been started then backend regularly sends a current value for last seen object id and corresponding timestamp. If the were changes in the heap since last event then one or more heapStatsUpdate events will be sent before a new lastSeenObjectId event. + */ + on(event: 'HeapProfiler.lastSeenObjectId', listener: (message: InspectorNotification) => void): this; + /** + * If heap objects tracking has been started then backend may send update for one or more fragments + */ + on(event: 'HeapProfiler.heapStatsUpdate', listener: (message: InspectorNotification) => void): this; + /** + * Contains an bucket of collected trace events. + */ + on(event: 'NodeTracing.dataCollected', listener: (message: InspectorNotification) => void): this; + /** + * Signals that tracing is stopped and there is no trace buffers pending flush, all data were + * delivered via dataCollected events. + */ + on(event: 'NodeTracing.tracingComplete', listener: () => void): this; + /** + * Issued when attached to a worker. + */ + on(event: 'NodeWorker.attachedToWorker', listener: (message: InspectorNotification) => void): this; + /** + * Issued when detached from the worker. + */ + on(event: 'NodeWorker.detachedFromWorker', listener: (message: InspectorNotification) => void): this; + /** + * Notifies about a new protocol message received from the session + * (session ID is provided in attachedToWorker notification). + */ + on(event: 'NodeWorker.receivedMessageFromWorker', listener: (message: InspectorNotification) => void): this; + /** + * This event is fired instead of `Runtime.executionContextDestroyed` when + * enabled. + * It is fired when the Node process finished all code execution and is + * waiting for all frontends to disconnect. + */ + on(event: 'NodeRuntime.waitingForDisconnect', listener: () => void): this; + once(event: string, listener: (...args: any[]) => void): this; + /** + * Emitted when any notification from the V8 Inspector is received. + */ + once(event: 'inspectorNotification', listener: (message: InspectorNotification<{}>) => void): this; + /** + * Issued when new execution context is created. + */ + once(event: 'Runtime.executionContextCreated', listener: (message: InspectorNotification) => void): this; + /** + * Issued when execution context is destroyed. + */ + once(event: 'Runtime.executionContextDestroyed', listener: (message: InspectorNotification) => void): this; + /** + * Issued when all executionContexts were cleared in browser + */ + once(event: 'Runtime.executionContextsCleared', listener: () => void): this; + /** + * Issued when exception was thrown and unhandled. + */ + once(event: 'Runtime.exceptionThrown', listener: (message: InspectorNotification) => void): this; + /** + * Issued when unhandled exception was revoked. + */ + once(event: 'Runtime.exceptionRevoked', listener: (message: InspectorNotification) => void): this; + /** + * Issued when console API was called. + */ + once(event: 'Runtime.consoleAPICalled', listener: (message: InspectorNotification) => void): this; + /** + * Issued when object should be inspected (for example, as a result of inspect() command line API call). + */ + once(event: 'Runtime.inspectRequested', listener: (message: InspectorNotification) => void): this; + /** + * Fired when virtual machine parses script. This event is also fired for all known and uncollected scripts upon enabling debugger. + */ + once(event: 'Debugger.scriptParsed', listener: (message: InspectorNotification) => void): this; + /** + * Fired when virtual machine fails to parse the script. + */ + once(event: 'Debugger.scriptFailedToParse', listener: (message: InspectorNotification) => void): this; + /** + * Fired when breakpoint is resolved to an actual script and location. + */ + once(event: 'Debugger.breakpointResolved', listener: (message: InspectorNotification) => void): this; + /** + * Fired when the virtual machine stopped on breakpoint or exception or any other stop criteria. + */ + once(event: 'Debugger.paused', listener: (message: InspectorNotification) => void): this; + /** + * Fired when the virtual machine resumed execution. + */ + once(event: 'Debugger.resumed', listener: () => void): this; + /** + * Issued when new console message is added. + */ + once(event: 'Console.messageAdded', listener: (message: InspectorNotification) => void): this; + /** + * Sent when new profile recording is started using console.profile() call. + */ + once(event: 'Profiler.consoleProfileStarted', listener: (message: InspectorNotification) => void): this; + once(event: 'Profiler.consoleProfileFinished', listener: (message: InspectorNotification) => void): this; + once(event: 'HeapProfiler.addHeapSnapshotChunk', listener: (message: InspectorNotification) => void): this; + once(event: 'HeapProfiler.resetProfiles', listener: () => void): this; + once(event: 'HeapProfiler.reportHeapSnapshotProgress', listener: (message: InspectorNotification) => void): this; + /** + * If heap objects tracking has been started then backend regularly sends a current value for last seen object id and corresponding timestamp. If the were changes in the heap since last event then one or more heapStatsUpdate events will be sent before a new lastSeenObjectId event. + */ + once(event: 'HeapProfiler.lastSeenObjectId', listener: (message: InspectorNotification) => void): this; + /** + * If heap objects tracking has been started then backend may send update for one or more fragments + */ + once(event: 'HeapProfiler.heapStatsUpdate', listener: (message: InspectorNotification) => void): this; + /** + * Contains an bucket of collected trace events. + */ + once(event: 'NodeTracing.dataCollected', listener: (message: InspectorNotification) => void): this; + /** + * Signals that tracing is stopped and there is no trace buffers pending flush, all data were + * delivered via dataCollected events. + */ + once(event: 'NodeTracing.tracingComplete', listener: () => void): this; + /** + * Issued when attached to a worker. + */ + once(event: 'NodeWorker.attachedToWorker', listener: (message: InspectorNotification) => void): this; + /** + * Issued when detached from the worker. + */ + once(event: 'NodeWorker.detachedFromWorker', listener: (message: InspectorNotification) => void): this; + /** + * Notifies about a new protocol message received from the session + * (session ID is provided in attachedToWorker notification). + */ + once(event: 'NodeWorker.receivedMessageFromWorker', listener: (message: InspectorNotification) => void): this; + /** + * This event is fired instead of `Runtime.executionContextDestroyed` when + * enabled. + * It is fired when the Node process finished all code execution and is + * waiting for all frontends to disconnect. + */ + once(event: 'NodeRuntime.waitingForDisconnect', listener: () => void): this; + prependListener(event: string, listener: (...args: any[]) => void): this; + /** + * Emitted when any notification from the V8 Inspector is received. + */ + prependListener(event: 'inspectorNotification', listener: (message: InspectorNotification<{}>) => void): this; + /** + * Issued when new execution context is created. + */ + prependListener(event: 'Runtime.executionContextCreated', listener: (message: InspectorNotification) => void): this; + /** + * Issued when execution context is destroyed. + */ + prependListener(event: 'Runtime.executionContextDestroyed', listener: (message: InspectorNotification) => void): this; + /** + * Issued when all executionContexts were cleared in browser + */ + prependListener(event: 'Runtime.executionContextsCleared', listener: () => void): this; + /** + * Issued when exception was thrown and unhandled. + */ + prependListener(event: 'Runtime.exceptionThrown', listener: (message: InspectorNotification) => void): this; + /** + * Issued when unhandled exception was revoked. + */ + prependListener(event: 'Runtime.exceptionRevoked', listener: (message: InspectorNotification) => void): this; + /** + * Issued when console API was called. + */ + prependListener(event: 'Runtime.consoleAPICalled', listener: (message: InspectorNotification) => void): this; + /** + * Issued when object should be inspected (for example, as a result of inspect() command line API call). + */ + prependListener(event: 'Runtime.inspectRequested', listener: (message: InspectorNotification) => void): this; + /** + * Fired when virtual machine parses script. This event is also fired for all known and uncollected scripts upon enabling debugger. + */ + prependListener(event: 'Debugger.scriptParsed', listener: (message: InspectorNotification) => void): this; + /** + * Fired when virtual machine fails to parse the script. + */ + prependListener(event: 'Debugger.scriptFailedToParse', listener: (message: InspectorNotification) => void): this; + /** + * Fired when breakpoint is resolved to an actual script and location. + */ + prependListener(event: 'Debugger.breakpointResolved', listener: (message: InspectorNotification) => void): this; + /** + * Fired when the virtual machine stopped on breakpoint or exception or any other stop criteria. + */ + prependListener(event: 'Debugger.paused', listener: (message: InspectorNotification) => void): this; + /** + * Fired when the virtual machine resumed execution. + */ + prependListener(event: 'Debugger.resumed', listener: () => void): this; + /** + * Issued when new console message is added. + */ + prependListener(event: 'Console.messageAdded', listener: (message: InspectorNotification) => void): this; + /** + * Sent when new profile recording is started using console.profile() call. + */ + prependListener(event: 'Profiler.consoleProfileStarted', listener: (message: InspectorNotification) => void): this; + prependListener(event: 'Profiler.consoleProfileFinished', listener: (message: InspectorNotification) => void): this; + prependListener(event: 'HeapProfiler.addHeapSnapshotChunk', listener: (message: InspectorNotification) => void): this; + prependListener(event: 'HeapProfiler.resetProfiles', listener: () => void): this; + prependListener(event: 'HeapProfiler.reportHeapSnapshotProgress', listener: (message: InspectorNotification) => void): this; + /** + * If heap objects tracking has been started then backend regularly sends a current value for last seen object id and corresponding timestamp. If the were changes in the heap since last event then one or more heapStatsUpdate events will be sent before a new lastSeenObjectId event. + */ + prependListener(event: 'HeapProfiler.lastSeenObjectId', listener: (message: InspectorNotification) => void): this; + /** + * If heap objects tracking has been started then backend may send update for one or more fragments + */ + prependListener(event: 'HeapProfiler.heapStatsUpdate', listener: (message: InspectorNotification) => void): this; + /** + * Contains an bucket of collected trace events. + */ + prependListener(event: 'NodeTracing.dataCollected', listener: (message: InspectorNotification) => void): this; + /** + * Signals that tracing is stopped and there is no trace buffers pending flush, all data were + * delivered via dataCollected events. + */ + prependListener(event: 'NodeTracing.tracingComplete', listener: () => void): this; + /** + * Issued when attached to a worker. + */ + prependListener(event: 'NodeWorker.attachedToWorker', listener: (message: InspectorNotification) => void): this; + /** + * Issued when detached from the worker. + */ + prependListener(event: 'NodeWorker.detachedFromWorker', listener: (message: InspectorNotification) => void): this; + /** + * Notifies about a new protocol message received from the session + * (session ID is provided in attachedToWorker notification). + */ + prependListener(event: 'NodeWorker.receivedMessageFromWorker', listener: (message: InspectorNotification) => void): this; + /** + * This event is fired instead of `Runtime.executionContextDestroyed` when + * enabled. + * It is fired when the Node process finished all code execution and is + * waiting for all frontends to disconnect. + */ + prependListener(event: 'NodeRuntime.waitingForDisconnect', listener: () => void): this; + prependOnceListener(event: string, listener: (...args: any[]) => void): this; + /** + * Emitted when any notification from the V8 Inspector is received. + */ + prependOnceListener(event: 'inspectorNotification', listener: (message: InspectorNotification<{}>) => void): this; + /** + * Issued when new execution context is created. + */ + prependOnceListener(event: 'Runtime.executionContextCreated', listener: (message: InspectorNotification) => void): this; + /** + * Issued when execution context is destroyed. + */ + prependOnceListener(event: 'Runtime.executionContextDestroyed', listener: (message: InspectorNotification) => void): this; + /** + * Issued when all executionContexts were cleared in browser + */ + prependOnceListener(event: 'Runtime.executionContextsCleared', listener: () => void): this; + /** + * Issued when exception was thrown and unhandled. + */ + prependOnceListener(event: 'Runtime.exceptionThrown', listener: (message: InspectorNotification) => void): this; + /** + * Issued when unhandled exception was revoked. + */ + prependOnceListener(event: 'Runtime.exceptionRevoked', listener: (message: InspectorNotification) => void): this; + /** + * Issued when console API was called. + */ + prependOnceListener(event: 'Runtime.consoleAPICalled', listener: (message: InspectorNotification) => void): this; + /** + * Issued when object should be inspected (for example, as a result of inspect() command line API call). + */ + prependOnceListener(event: 'Runtime.inspectRequested', listener: (message: InspectorNotification) => void): this; + /** + * Fired when virtual machine parses script. This event is also fired for all known and uncollected scripts upon enabling debugger. + */ + prependOnceListener(event: 'Debugger.scriptParsed', listener: (message: InspectorNotification) => void): this; + /** + * Fired when virtual machine fails to parse the script. + */ + prependOnceListener(event: 'Debugger.scriptFailedToParse', listener: (message: InspectorNotification) => void): this; + /** + * Fired when breakpoint is resolved to an actual script and location. + */ + prependOnceListener(event: 'Debugger.breakpointResolved', listener: (message: InspectorNotification) => void): this; + /** + * Fired when the virtual machine stopped on breakpoint or exception or any other stop criteria. + */ + prependOnceListener(event: 'Debugger.paused', listener: (message: InspectorNotification) => void): this; + /** + * Fired when the virtual machine resumed execution. + */ + prependOnceListener(event: 'Debugger.resumed', listener: () => void): this; + /** + * Issued when new console message is added. + */ + prependOnceListener(event: 'Console.messageAdded', listener: (message: InspectorNotification) => void): this; + /** + * Sent when new profile recording is started using console.profile() call. + */ + prependOnceListener(event: 'Profiler.consoleProfileStarted', listener: (message: InspectorNotification) => void): this; + prependOnceListener(event: 'Profiler.consoleProfileFinished', listener: (message: InspectorNotification) => void): this; + prependOnceListener(event: 'HeapProfiler.addHeapSnapshotChunk', listener: (message: InspectorNotification) => void): this; + prependOnceListener(event: 'HeapProfiler.resetProfiles', listener: () => void): this; + prependOnceListener(event: 'HeapProfiler.reportHeapSnapshotProgress', listener: (message: InspectorNotification) => void): this; + /** + * If heap objects tracking has been started then backend regularly sends a current value for last seen object id and corresponding timestamp. If the were changes in the heap since last event then one or more heapStatsUpdate events will be sent before a new lastSeenObjectId event. + */ + prependOnceListener(event: 'HeapProfiler.lastSeenObjectId', listener: (message: InspectorNotification) => void): this; + /** + * If heap objects tracking has been started then backend may send update for one or more fragments + */ + prependOnceListener(event: 'HeapProfiler.heapStatsUpdate', listener: (message: InspectorNotification) => void): this; + /** + * Contains an bucket of collected trace events. + */ + prependOnceListener(event: 'NodeTracing.dataCollected', listener: (message: InspectorNotification) => void): this; + /** + * Signals that tracing is stopped and there is no trace buffers pending flush, all data were + * delivered via dataCollected events. + */ + prependOnceListener(event: 'NodeTracing.tracingComplete', listener: () => void): this; + /** + * Issued when attached to a worker. + */ + prependOnceListener(event: 'NodeWorker.attachedToWorker', listener: (message: InspectorNotification) => void): this; + /** + * Issued when detached from the worker. + */ + prependOnceListener(event: 'NodeWorker.detachedFromWorker', listener: (message: InspectorNotification) => void): this; + /** + * Notifies about a new protocol message received from the session + * (session ID is provided in attachedToWorker notification). + */ + prependOnceListener(event: 'NodeWorker.receivedMessageFromWorker', listener: (message: InspectorNotification) => void): this; + /** + * This event is fired instead of `Runtime.executionContextDestroyed` when + * enabled. + * It is fired when the Node process finished all code execution and is + * waiting for all frontends to disconnect. + */ + prependOnceListener(event: 'NodeRuntime.waitingForDisconnect', listener: () => void): this; + } + /** + * Activate inspector on host and port. Equivalent to`node --inspect=[[host:]port]`, but can be done programmatically after node has + * started. + * + * If wait is `true`, will block until a client has connected to the inspect port + * and flow control has been passed to the debugger client. + * + * See the `security warning` regarding the `host`parameter usage. + * @param [port='what was specified on the CLI'] Port to listen on for inspector connections. Optional. + * @param [host='what was specified on the CLI'] Host to listen on for inspector connections. Optional. + * @param [wait=false] Block until a client has connected. Optional. + * @returns Disposable that calls `inspector.close()`. + */ + function open(port?: number, host?: string, wait?: boolean): Disposable; + /** + * Deactivate the inspector. Blocks until there are no active connections. + */ + function close(): void; + /** + * Return the URL of the active inspector, or `undefined` if there is none. + * + * ```console + * $ node --inspect -p 'inspector.url()' + * Debugger listening on ws://127.0.0.1:9229/166e272e-7a30-4d09-97ce-f1c012b43c34 + * For help, see: https://nodejs.org/en/docs/inspector + * ws://127.0.0.1:9229/166e272e-7a30-4d09-97ce-f1c012b43c34 + * + * $ node --inspect=localhost:3000 -p 'inspector.url()' + * Debugger listening on ws://localhost:3000/51cf8d0e-3c36-4c59-8efd-54519839e56a + * For help, see: https://nodejs.org/en/docs/inspector + * ws://localhost:3000/51cf8d0e-3c36-4c59-8efd-54519839e56a + * + * $ node -p 'inspector.url()' + * undefined + * ``` + */ + function url(): string | undefined; + /** + * Blocks until a client (existing or connected later) has sent`Runtime.runIfWaitingForDebugger` command. + * + * An exception will be thrown if there is no active inspector. + * @since v12.7.0 + */ + function waitForDebugger(): void; +} +/** + * The inspector module provides an API for interacting with the V8 inspector. + */ +declare module 'node:inspector' { + import inspector = require('inspector'); + export = inspector; +} diff --git a/Url-Shortner/node_modules/@types/node/ts4.8/module.d.ts b/Url-Shortner/node_modules/@types/node/ts4.8/module.d.ts new file mode 100644 index 0000000..9ec61d9 --- /dev/null +++ b/Url-Shortner/node_modules/@types/node/ts4.8/module.d.ts @@ -0,0 +1,264 @@ +/** + * @since v0.3.7 + */ +declare module "module" { + import { URL } from "node:url"; + import { MessagePort } from "node:worker_threads"; + namespace Module { + /** + * The `module.syncBuiltinESMExports()` method updates all the live bindings for + * builtin `ES Modules` to match the properties of the `CommonJS` exports. It + * does not add or remove exported names from the `ES Modules`. + * + * ```js + * const fs = require('node:fs'); + * const assert = require('node:assert'); + * const { syncBuiltinESMExports } = require('node:module'); + * + * fs.readFile = newAPI; + * + * delete fs.readFileSync; + * + * function newAPI() { + * // ... + * } + * + * fs.newAPI = newAPI; + * + * syncBuiltinESMExports(); + * + * import('node:fs').then((esmFS) => { + * // It syncs the existing readFile property with the new value + * assert.strictEqual(esmFS.readFile, newAPI); + * // readFileSync has been deleted from the required fs + * assert.strictEqual('readFileSync' in fs, false); + * // syncBuiltinESMExports() does not remove readFileSync from esmFS + * assert.strictEqual('readFileSync' in esmFS, true); + * // syncBuiltinESMExports() does not add names + * assert.strictEqual(esmFS.newAPI, undefined); + * }); + * ``` + * @since v12.12.0 + */ + function syncBuiltinESMExports(): void; + /** + * `path` is the resolved path for the file for which a corresponding source map + * should be fetched. + * @since v13.7.0, v12.17.0 + * @return Returns `module.SourceMap` if a source map is found, `undefined` otherwise. + */ + function findSourceMap(path: string, error?: Error): SourceMap; + interface SourceMapPayload { + file: string; + version: number; + sources: string[]; + sourcesContent: string[]; + names: string[]; + mappings: string; + sourceRoot: string; + } + interface SourceMapping { + generatedLine: number; + generatedColumn: number; + originalSource: string; + originalLine: number; + originalColumn: number; + } + /** + * @since v13.7.0, v12.17.0 + */ + class SourceMap { + /** + * Getter for the payload used to construct the `SourceMap` instance. + */ + readonly payload: SourceMapPayload; + constructor(payload: SourceMapPayload); + /** + * Given a line offset and column offset in the generated source + * file, returns an object representing the SourceMap range in the + * original file if found, or an empty object if not. + * + * The object returned contains the following keys: + * + * The returned value represents the raw range as it appears in the + * SourceMap, based on zero-indexed offsets, _not_ 1-indexed line and + * column numbers as they appear in Error messages and CallSite + * objects. + * + * To get the corresponding 1-indexed line and column numbers from a + * lineNumber and columnNumber as they are reported by Error stacks + * and CallSite objects, use `sourceMap.findOrigin(lineNumber, columnNumber)` + * @param lineOffset The zero-indexed line number offset in the generated source + * @param columnOffset The zero-indexed column number offset in the generated source + */ + findEntry(lineOffset: number, columnOffset: number): SourceMapping; + } + interface ImportAssertions extends NodeJS.Dict { + type?: string | undefined; + } + type ModuleFormat = "builtin" | "commonjs" | "json" | "module" | "wasm"; + type ModuleSource = string | ArrayBuffer | NodeJS.TypedArray; + interface GlobalPreloadContext { + port: MessagePort; + } + /** + * @deprecated This hook will be removed in a future version. + * Use `initialize` instead. When a loader has an `initialize` export, `globalPreload` will be ignored. + * + * Sometimes it might be necessary to run some code inside of the same global scope that the application runs in. + * This hook allows the return of a string that is run as a sloppy-mode script on startup. + * + * @param context Information to assist the preload code + * @return Code to run before application startup + */ + type GlobalPreloadHook = (context: GlobalPreloadContext) => string; + /** + * The `initialize` hook provides a way to define a custom function that runs in the loader's thread + * when the loader is initialized. Initialization happens when the loader is registered via `register` + * or registered via the `--experimental-loader` command line option. + * + * This hook can send and receive data from a `register` invocation, including ports and other transferrable objects. + */ + type InitializeHook = (data: Data) => ReturnType; + interface ResolveHookContext { + /** + * Export conditions of the relevant `package.json` + */ + conditions: string[]; + /** + * An object whose key-value pairs represent the assertions for the module to import + */ + importAssertions: ImportAssertions; + /** + * The module importing this one, or undefined if this is the Node.js entry point + */ + parentURL: string | undefined; + } + interface ResolveFnOutput { + /** + * A hint to the load hook (it might be ignored) + */ + format?: ModuleFormat | null | undefined; + /** + * The import assertions to use when caching the module (optional; if excluded the input will be used) + */ + importAssertions?: ImportAssertions | undefined; + /** + * A signal that this hook intends to terminate the chain of `resolve` hooks. + * @default false + */ + shortCircuit?: boolean | undefined; + /** + * The absolute URL to which this input resolves + */ + url: string; + } + /** + * The `resolve` hook chain is responsible for resolving file URL for a given module specifier and parent URL, and optionally its format (such as `'module'`) as a hint to the `load` hook. + * If a format is specified, the load hook is ultimately responsible for providing the final `format` value (and it is free to ignore the hint provided by `resolve`); + * if `resolve` provides a format, a custom `load` hook is required even if only to pass the value to the Node.js default `load` hook. + * + * @param specifier The specified URL path of the module to be resolved + * @param context + * @param nextResolve The subsequent `resolve` hook in the chain, or the Node.js default `resolve` hook after the last user-supplied resolve hook + */ + type ResolveHook = ( + specifier: string, + context: ResolveHookContext, + nextResolve: ( + specifier: string, + context?: ResolveHookContext, + ) => ResolveFnOutput | Promise, + ) => ResolveFnOutput | Promise; + interface LoadHookContext { + /** + * Export conditions of the relevant `package.json` + */ + conditions: string[]; + /** + * The format optionally supplied by the `resolve` hook chain + */ + format: ModuleFormat; + /** + * An object whose key-value pairs represent the assertions for the module to import + */ + importAssertions: ImportAssertions; + } + interface LoadFnOutput { + format: ModuleFormat; + /** + * A signal that this hook intends to terminate the chain of `resolve` hooks. + * @default false + */ + shortCircuit?: boolean | undefined; + /** + * The source for Node.js to evaluate + */ + source?: ModuleSource; + } + /** + * The `load` hook provides a way to define a custom method of determining how a URL should be interpreted, retrieved, and parsed. + * It is also in charge of validating the import assertion. + * + * @param url The URL/path of the module to be loaded + * @param context Metadata about the module + * @param nextLoad The subsequent `load` hook in the chain, or the Node.js default `load` hook after the last user-supplied `load` hook + */ + type LoadHook = ( + url: string, + context: LoadHookContext, + nextLoad: (url: string, context?: LoadHookContext) => LoadFnOutput | Promise, + ) => LoadFnOutput | Promise; + } + interface RegisterOptions { + parentURL: string; + data?: Data | undefined; + transferList?: any[] | undefined; + } + interface Module extends NodeModule {} + class Module { + static runMain(): void; + static wrap(code: string): string; + static createRequire(path: string | URL): NodeRequire; + static builtinModules: string[]; + static isBuiltin(moduleName: string): boolean; + static Module: typeof Module; + static register( + specifier: string, + parentURL?: string, + options?: RegisterOptions, + ): ReturnType; + static register(specifier: string, options?: RegisterOptions): ReturnType; + constructor(id: string, parent?: Module); + } + global { + interface ImportMeta { + url: string; + /** + * Provides a module-relative resolution function scoped to each module, returning + * the URL string. + * + * @param specified The module specifier to resolve relative to the current module. + * @returns The absolute (`file:`) URL string for the resolved module. + */ + resolve(specified: string): string; + /** + * This feature is only available with the `--experimental-import-meta-resolve` + * command flag enabled. + * + * Provides a module-relative resolution function scoped to each module, returning + * the URL string. + * + * @param specified The module specifier to resolve relative to `parent`. + * @param parent The absolute parent module URL to resolve from. + * @returns The absolute (`file:`) URL string for the resolved module. + */ + resolve(specified: string, parent: string | URL): string; + } + } + export = Module; +} +declare module "node:module" { + import module = require("module"); + export = module; +} diff --git a/Url-Shortner/node_modules/@types/node/ts4.8/net.d.ts b/Url-Shortner/node_modules/@types/node/ts4.8/net.d.ts new file mode 100644 index 0000000..63cf4d7 --- /dev/null +++ b/Url-Shortner/node_modules/@types/node/ts4.8/net.d.ts @@ -0,0 +1,912 @@ +/** + * > Stability: 2 - Stable + * + * The `node:net` module provides an asynchronous network API for creating stream-based + * TCP or `IPC` servers ({@link createServer}) and clients + * ({@link createConnection}). + * + * It can be accessed using: + * + * ```js + * const net = require('node:net'); + * ``` + * @see [source](https://github.com/nodejs/node/blob/v20.2.0/lib/net.js) + */ +declare module "net" { + import * as stream from "node:stream"; + import { Abortable, EventEmitter } from "node:events"; + import * as dns from "node:dns"; + type LookupFunction = ( + hostname: string, + options: dns.LookupAllOptions, + callback: (err: NodeJS.ErrnoException | null, addresses: dns.LookupAddress[]) => void, + ) => void; + interface AddressInfo { + address: string; + family: string; + port: number; + } + interface SocketConstructorOpts { + fd?: number | undefined; + allowHalfOpen?: boolean | undefined; + readable?: boolean | undefined; + writable?: boolean | undefined; + signal?: AbortSignal; + } + interface OnReadOpts { + buffer: Uint8Array | (() => Uint8Array); + /** + * This function is called for every chunk of incoming data. + * Two arguments are passed to it: the number of bytes written to buffer and a reference to buffer. + * Return false from this function to implicitly pause() the socket. + */ + callback(bytesWritten: number, buf: Uint8Array): boolean; + } + interface ConnectOpts { + /** + * If specified, incoming data is stored in a single buffer and passed to the supplied callback when data arrives on the socket. + * Note: this will cause the streaming functionality to not provide any data, however events like 'error', 'end', and 'close' will + * still be emitted as normal and methods like pause() and resume() will also behave as expected. + */ + onread?: OnReadOpts | undefined; + } + interface TcpSocketConnectOpts extends ConnectOpts { + port: number; + host?: string | undefined; + localAddress?: string | undefined; + localPort?: number | undefined; + hints?: number | undefined; + family?: number | undefined; + lookup?: LookupFunction | undefined; + noDelay?: boolean | undefined; + keepAlive?: boolean | undefined; + keepAliveInitialDelay?: number | undefined; + /** + * @since v18.13.0 + */ + autoSelectFamily?: boolean | undefined; + /** + * @since v18.13.0 + */ + autoSelectFamilyAttemptTimeout?: number | undefined; + } + interface IpcSocketConnectOpts extends ConnectOpts { + path: string; + } + type SocketConnectOpts = TcpSocketConnectOpts | IpcSocketConnectOpts; + type SocketReadyState = "opening" | "open" | "readOnly" | "writeOnly" | "closed"; + /** + * This class is an abstraction of a TCP socket or a streaming `IPC` endpoint + * (uses named pipes on Windows, and Unix domain sockets otherwise). It is also + * an `EventEmitter`. + * + * A `net.Socket` can be created by the user and used directly to interact with + * a server. For example, it is returned by {@link createConnection}, + * so the user can use it to talk to the server. + * + * It can also be created by Node.js and passed to the user when a connection + * is received. For example, it is passed to the listeners of a `'connection'` event emitted on a {@link Server}, so the user can use + * it to interact with the client. + * @since v0.3.4 + */ + class Socket extends stream.Duplex { + constructor(options?: SocketConstructorOpts); + /** + * Sends data on the socket. The second parameter specifies the encoding in the + * case of a string. It defaults to UTF8 encoding. + * + * Returns `true` if the entire data was flushed successfully to the kernel + * buffer. Returns `false` if all or part of the data was queued in user memory.`'drain'` will be emitted when the buffer is again free. + * + * The optional `callback` parameter will be executed when the data is finally + * written out, which may not be immediately. + * + * See `Writable` stream `write()` method for more + * information. + * @since v0.1.90 + * @param [encoding='utf8'] Only used when data is `string`. + */ + write(buffer: Uint8Array | string, cb?: (err?: Error) => void): boolean; + write(str: Uint8Array | string, encoding?: BufferEncoding, cb?: (err?: Error) => void): boolean; + /** + * Initiate a connection on a given socket. + * + * Possible signatures: + * + * * `socket.connect(options[, connectListener])` + * * `socket.connect(path[, connectListener])` for `IPC` connections. + * * `socket.connect(port[, host][, connectListener])` for TCP connections. + * * Returns: `net.Socket` The socket itself. + * + * This function is asynchronous. When the connection is established, the `'connect'` event will be emitted. If there is a problem connecting, + * instead of a `'connect'` event, an `'error'` event will be emitted with + * the error passed to the `'error'` listener. + * The last parameter `connectListener`, if supplied, will be added as a listener + * for the `'connect'` event **once**. + * + * This function should only be used for reconnecting a socket after`'close'` has been emitted or otherwise it may lead to undefined + * behavior. + */ + connect(options: SocketConnectOpts, connectionListener?: () => void): this; + connect(port: number, host: string, connectionListener?: () => void): this; + connect(port: number, connectionListener?: () => void): this; + connect(path: string, connectionListener?: () => void): this; + /** + * Set the encoding for the socket as a `Readable Stream`. See `readable.setEncoding()` for more information. + * @since v0.1.90 + * @return The socket itself. + */ + setEncoding(encoding?: BufferEncoding): this; + /** + * Pauses the reading of data. That is, `'data'` events will not be emitted. + * Useful to throttle back an upload. + * @return The socket itself. + */ + pause(): this; + /** + * Close the TCP connection by sending an RST packet and destroy the stream. + * If this TCP socket is in connecting status, it will send an RST packet and destroy this TCP socket once it is connected. + * Otherwise, it will call `socket.destroy` with an `ERR_SOCKET_CLOSED` Error. + * If this is not a TCP socket (for example, a pipe), calling this method will immediately throw an `ERR_INVALID_HANDLE_TYPE` Error. + * @since v18.3.0, v16.17.0 + */ + resetAndDestroy(): this; + /** + * Resumes reading after a call to `socket.pause()`. + * @return The socket itself. + */ + resume(): this; + /** + * Sets the socket to timeout after `timeout` milliseconds of inactivity on + * the socket. By default `net.Socket` do not have a timeout. + * + * When an idle timeout is triggered the socket will receive a `'timeout'` event but the connection will not be severed. The user must manually call `socket.end()` or `socket.destroy()` to + * end the connection. + * + * ```js + * socket.setTimeout(3000); + * socket.on('timeout', () => { + * console.log('socket timeout'); + * socket.end(); + * }); + * ``` + * + * If `timeout` is 0, then the existing idle timeout is disabled. + * + * The optional `callback` parameter will be added as a one-time listener for the `'timeout'` event. + * @since v0.1.90 + * @return The socket itself. + */ + setTimeout(timeout: number, callback?: () => void): this; + /** + * Enable/disable the use of Nagle's algorithm. + * + * When a TCP connection is created, it will have Nagle's algorithm enabled. + * + * Nagle's algorithm delays data before it is sent via the network. It attempts + * to optimize throughput at the expense of latency. + * + * Passing `true` for `noDelay` or not passing an argument will disable Nagle's + * algorithm for the socket. Passing `false` for `noDelay` will enable Nagle's + * algorithm. + * @since v0.1.90 + * @param [noDelay=true] + * @return The socket itself. + */ + setNoDelay(noDelay?: boolean): this; + /** + * Enable/disable keep-alive functionality, and optionally set the initial + * delay before the first keepalive probe is sent on an idle socket. + * + * Set `initialDelay` (in milliseconds) to set the delay between the last + * data packet received and the first keepalive probe. Setting `0` for`initialDelay` will leave the value unchanged from the default + * (or previous) setting. + * + * Enabling the keep-alive functionality will set the following socket options: + * + * * `SO_KEEPALIVE=1` + * * `TCP_KEEPIDLE=initialDelay` + * * `TCP_KEEPCNT=10` + * * `TCP_KEEPINTVL=1` + * @since v0.1.92 + * @param [enable=false] + * @param [initialDelay=0] + * @return The socket itself. + */ + setKeepAlive(enable?: boolean, initialDelay?: number): this; + /** + * Returns the bound `address`, the address `family` name and `port` of the + * socket as reported by the operating system:`{ port: 12346, family: 'IPv4', address: '127.0.0.1' }` + * @since v0.1.90 + */ + address(): AddressInfo | {}; + /** + * Calling `unref()` on a socket will allow the program to exit if this is the only + * active socket in the event system. If the socket is already `unref`ed calling`unref()` again will have no effect. + * @since v0.9.1 + * @return The socket itself. + */ + unref(): this; + /** + * Opposite of `unref()`, calling `ref()` on a previously `unref`ed socket will _not_ let the program exit if it's the only socket left (the default behavior). + * If the socket is `ref`ed calling `ref` again will have no effect. + * @since v0.9.1 + * @return The socket itself. + */ + ref(): this; + /** + * This property shows the number of characters buffered for writing. The buffer + * may contain strings whose length after encoding is not yet known. So this number + * is only an approximation of the number of bytes in the buffer. + * + * `net.Socket` has the property that `socket.write()` always works. This is to + * help users get up and running quickly. The computer cannot always keep up + * with the amount of data that is written to a socket. The network connection + * simply might be too slow. Node.js will internally queue up the data written to a + * socket and send it out over the wire when it is possible. + * + * The consequence of this internal buffering is that memory may grow. + * Users who experience large or growing `bufferSize` should attempt to + * "throttle" the data flows in their program with `socket.pause()` and `socket.resume()`. + * @since v0.3.8 + * @deprecated Since v14.6.0 - Use `writableLength` instead. + */ + readonly bufferSize: number; + /** + * The amount of received bytes. + * @since v0.5.3 + */ + readonly bytesRead: number; + /** + * The amount of bytes sent. + * @since v0.5.3 + */ + readonly bytesWritten: number; + /** + * If `true`,`socket.connect(options[, connectListener])` was + * called and has not yet finished. It will stay `true` until the socket becomes + * connected, then it is set to `false` and the `'connect'` event is emitted. Note + * that the `socket.connect(options[, connectListener])` callback is a listener for the `'connect'` event. + * @since v6.1.0 + */ + readonly connecting: boolean; + /** + * This is `true` if the socket is not connected yet, either because `.connect()`has not yet been called or because it is still in the process of connecting + * (see `socket.connecting`). + * @since v11.2.0, v10.16.0 + */ + readonly pending: boolean; + /** + * See `writable.destroyed` for further details. + */ + readonly destroyed: boolean; + /** + * The string representation of the local IP address the remote client is + * connecting on. For example, in a server listening on `'0.0.0.0'`, if a client + * connects on `'192.168.1.1'`, the value of `socket.localAddress` would be`'192.168.1.1'`. + * @since v0.9.6 + */ + readonly localAddress?: string; + /** + * The numeric representation of the local port. For example, `80` or `21`. + * @since v0.9.6 + */ + readonly localPort?: number; + /** + * The string representation of the local IP family. `'IPv4'` or `'IPv6'`. + * @since v18.8.0, v16.18.0 + */ + readonly localFamily?: string; + /** + * This property represents the state of the connection as a string. + * + * * If the stream is connecting `socket.readyState` is `opening`. + * * If the stream is readable and writable, it is `open`. + * * If the stream is readable and not writable, it is `readOnly`. + * * If the stream is not readable and writable, it is `writeOnly`. + * @since v0.5.0 + */ + readonly readyState: SocketReadyState; + /** + * The string representation of the remote IP address. For example,`'74.125.127.100'` or `'2001:4860:a005::68'`. Value may be `undefined` if + * the socket is destroyed (for example, if the client disconnected). + * @since v0.5.10 + */ + readonly remoteAddress?: string | undefined; + /** + * The string representation of the remote IP family. `'IPv4'` or `'IPv6'`. Value may be `undefined` if + * the socket is destroyed (for example, if the client disconnected). + * @since v0.11.14 + */ + readonly remoteFamily?: string | undefined; + /** + * The numeric representation of the remote port. For example, `80` or `21`. Value may be `undefined` if + * the socket is destroyed (for example, if the client disconnected). + * @since v0.5.10 + */ + readonly remotePort?: number | undefined; + /** + * The socket timeout in milliseconds as set by `socket.setTimeout()`. + * It is `undefined` if a timeout has not been set. + * @since v10.7.0 + */ + readonly timeout?: number | undefined; + /** + * Half-closes the socket. i.e., it sends a FIN packet. It is possible the + * server will still send some data. + * + * See `writable.end()` for further details. + * @since v0.1.90 + * @param [encoding='utf8'] Only used when data is `string`. + * @param callback Optional callback for when the socket is finished. + * @return The socket itself. + */ + end(callback?: () => void): this; + end(buffer: Uint8Array | string, callback?: () => void): this; + end(str: Uint8Array | string, encoding?: BufferEncoding, callback?: () => void): this; + /** + * events.EventEmitter + * 1. close + * 2. connect + * 3. data + * 4. drain + * 5. end + * 6. error + * 7. lookup + * 8. ready + * 9. timeout + */ + addListener(event: string, listener: (...args: any[]) => void): this; + addListener(event: "close", listener: (hadError: boolean) => void): this; + addListener(event: "connect", listener: () => void): this; + addListener(event: "data", listener: (data: Buffer) => void): this; + addListener(event: "drain", listener: () => void): this; + addListener(event: "end", listener: () => void): this; + addListener(event: "error", listener: (err: Error) => void): this; + addListener( + event: "lookup", + listener: (err: Error, address: string, family: string | number, host: string) => void, + ): this; + addListener(event: "ready", listener: () => void): this; + addListener(event: "timeout", listener: () => void): this; + emit(event: string | symbol, ...args: any[]): boolean; + emit(event: "close", hadError: boolean): boolean; + emit(event: "connect"): boolean; + emit(event: "data", data: Buffer): boolean; + emit(event: "drain"): boolean; + emit(event: "end"): boolean; + emit(event: "error", err: Error): boolean; + emit(event: "lookup", err: Error, address: string, family: string | number, host: string): boolean; + emit(event: "ready"): boolean; + emit(event: "timeout"): boolean; + on(event: string, listener: (...args: any[]) => void): this; + on(event: "close", listener: (hadError: boolean) => void): this; + on(event: "connect", listener: () => void): this; + on(event: "data", listener: (data: Buffer) => void): this; + on(event: "drain", listener: () => void): this; + on(event: "end", listener: () => void): this; + on(event: "error", listener: (err: Error) => void): this; + on( + event: "lookup", + listener: (err: Error, address: string, family: string | number, host: string) => void, + ): this; + on(event: "ready", listener: () => void): this; + on(event: "timeout", listener: () => void): this; + once(event: string, listener: (...args: any[]) => void): this; + once(event: "close", listener: (hadError: boolean) => void): this; + once(event: "connect", listener: () => void): this; + once(event: "data", listener: (data: Buffer) => void): this; + once(event: "drain", listener: () => void): this; + once(event: "end", listener: () => void): this; + once(event: "error", listener: (err: Error) => void): this; + once( + event: "lookup", + listener: (err: Error, address: string, family: string | number, host: string) => void, + ): this; + once(event: "ready", listener: () => void): this; + once(event: "timeout", listener: () => void): this; + prependListener(event: string, listener: (...args: any[]) => void): this; + prependListener(event: "close", listener: (hadError: boolean) => void): this; + prependListener(event: "connect", listener: () => void): this; + prependListener(event: "data", listener: (data: Buffer) => void): this; + prependListener(event: "drain", listener: () => void): this; + prependListener(event: "end", listener: () => void): this; + prependListener(event: "error", listener: (err: Error) => void): this; + prependListener( + event: "lookup", + listener: (err: Error, address: string, family: string | number, host: string) => void, + ): this; + prependListener(event: "ready", listener: () => void): this; + prependListener(event: "timeout", listener: () => void): this; + prependOnceListener(event: string, listener: (...args: any[]) => void): this; + prependOnceListener(event: "close", listener: (hadError: boolean) => void): this; + prependOnceListener(event: "connect", listener: () => void): this; + prependOnceListener(event: "data", listener: (data: Buffer) => void): this; + prependOnceListener(event: "drain", listener: () => void): this; + prependOnceListener(event: "end", listener: () => void): this; + prependOnceListener(event: "error", listener: (err: Error) => void): this; + prependOnceListener( + event: "lookup", + listener: (err: Error, address: string, family: string | number, host: string) => void, + ): this; + prependOnceListener(event: "ready", listener: () => void): this; + prependOnceListener(event: "timeout", listener: () => void): this; + } + interface ListenOptions extends Abortable { + port?: number | undefined; + host?: string | undefined; + backlog?: number | undefined; + path?: string | undefined; + exclusive?: boolean | undefined; + readableAll?: boolean | undefined; + writableAll?: boolean | undefined; + /** + * @default false + */ + ipv6Only?: boolean | undefined; + } + interface ServerOpts { + /** + * Indicates whether half-opened TCP connections are allowed. + * @default false + */ + allowHalfOpen?: boolean | undefined; + /** + * Indicates whether the socket should be paused on incoming connections. + * @default false + */ + pauseOnConnect?: boolean | undefined; + /** + * If set to `true`, it disables the use of Nagle's algorithm immediately after a new incoming connection is received. + * @default false + * @since v16.5.0 + */ + noDelay?: boolean | undefined; + /** + * If set to `true`, it enables keep-alive functionality on the socket immediately after a new incoming connection is received, + * similarly on what is done in `socket.setKeepAlive([enable][, initialDelay])`. + * @default false + * @since v16.5.0 + */ + keepAlive?: boolean | undefined; + /** + * If set to a positive number, it sets the initial delay before the first keepalive probe is sent on an idle socket. + * @default 0 + * @since v16.5.0 + */ + keepAliveInitialDelay?: number | undefined; + } + interface DropArgument { + localAddress?: string; + localPort?: number; + localFamily?: string; + remoteAddress?: string; + remotePort?: number; + remoteFamily?: string; + } + /** + * This class is used to create a TCP or `IPC` server. + * @since v0.1.90 + */ + class Server extends EventEmitter { + constructor(connectionListener?: (socket: Socket) => void); + constructor(options?: ServerOpts, connectionListener?: (socket: Socket) => void); + /** + * Start a server listening for connections. A `net.Server` can be a TCP or + * an `IPC` server depending on what it listens to. + * + * Possible signatures: + * + * * `server.listen(handle[, backlog][, callback])` + * * `server.listen(options[, callback])` + * * `server.listen(path[, backlog][, callback])` for `IPC` servers + * * `server.listen([port[, host[, backlog]]][, callback])` for TCP servers + * + * This function is asynchronous. When the server starts listening, the `'listening'` event will be emitted. The last parameter `callback`will be added as a listener for the `'listening'` + * event. + * + * All `listen()` methods can take a `backlog` parameter to specify the maximum + * length of the queue of pending connections. The actual length will be determined + * by the OS through sysctl settings such as `tcp_max_syn_backlog` and `somaxconn`on Linux. The default value of this parameter is 511 (not 512). + * + * All {@link Socket} are set to `SO_REUSEADDR` (see [`socket(7)`](https://man7.org/linux/man-pages/man7/socket.7.html) for + * details). + * + * The `server.listen()` method can be called again if and only if there was an + * error during the first `server.listen()` call or `server.close()` has been + * called. Otherwise, an `ERR_SERVER_ALREADY_LISTEN` error will be thrown. + * + * One of the most common errors raised when listening is `EADDRINUSE`. + * This happens when another server is already listening on the requested`port`/`path`/`handle`. One way to handle this would be to retry + * after a certain amount of time: + * + * ```js + * server.on('error', (e) => { + * if (e.code === 'EADDRINUSE') { + * console.error('Address in use, retrying...'); + * setTimeout(() => { + * server.close(); + * server.listen(PORT, HOST); + * }, 1000); + * } + * }); + * ``` + */ + listen(port?: number, hostname?: string, backlog?: number, listeningListener?: () => void): this; + listen(port?: number, hostname?: string, listeningListener?: () => void): this; + listen(port?: number, backlog?: number, listeningListener?: () => void): this; + listen(port?: number, listeningListener?: () => void): this; + listen(path: string, backlog?: number, listeningListener?: () => void): this; + listen(path: string, listeningListener?: () => void): this; + listen(options: ListenOptions, listeningListener?: () => void): this; + listen(handle: any, backlog?: number, listeningListener?: () => void): this; + listen(handle: any, listeningListener?: () => void): this; + /** + * Stops the server from accepting new connections and keeps existing + * connections. This function is asynchronous, the server is finally closed + * when all connections are ended and the server emits a `'close'` event. + * The optional `callback` will be called once the `'close'` event occurs. Unlike + * that event, it will be called with an `Error` as its only argument if the server + * was not open when it was closed. + * @since v0.1.90 + * @param callback Called when the server is closed. + */ + close(callback?: (err?: Error) => void): this; + /** + * Returns the bound `address`, the address `family` name, and `port` of the server + * as reported by the operating system if listening on an IP socket + * (useful to find which port was assigned when getting an OS-assigned address):`{ port: 12346, family: 'IPv4', address: '127.0.0.1' }`. + * + * For a server listening on a pipe or Unix domain socket, the name is returned + * as a string. + * + * ```js + * const server = net.createServer((socket) => { + * socket.end('goodbye\n'); + * }).on('error', (err) => { + * // Handle errors here. + * throw err; + * }); + * + * // Grab an arbitrary unused port. + * server.listen(() => { + * console.log('opened server on', server.address()); + * }); + * ``` + * + * `server.address()` returns `null` before the `'listening'` event has been + * emitted or after calling `server.close()`. + * @since v0.1.90 + */ + address(): AddressInfo | string | null; + /** + * Asynchronously get the number of concurrent connections on the server. Works + * when sockets were sent to forks. + * + * Callback should take two arguments `err` and `count`. + * @since v0.9.7 + */ + getConnections(cb: (error: Error | null, count: number) => void): void; + /** + * Opposite of `unref()`, calling `ref()` on a previously `unref`ed server will _not_ let the program exit if it's the only server left (the default behavior). + * If the server is `ref`ed calling `ref()` again will have no effect. + * @since v0.9.1 + */ + ref(): this; + /** + * Calling `unref()` on a server will allow the program to exit if this is the only + * active server in the event system. If the server is already `unref`ed calling`unref()` again will have no effect. + * @since v0.9.1 + */ + unref(): this; + /** + * Set this property to reject connections when the server's connection count gets + * high. + * + * It is not recommended to use this option once a socket has been sent to a child + * with `child_process.fork()`. + * @since v0.2.0 + */ + maxConnections: number; + connections: number; + /** + * Indicates whether or not the server is listening for connections. + * @since v5.7.0 + */ + listening: boolean; + /** + * events.EventEmitter + * 1. close + * 2. connection + * 3. error + * 4. listening + * 5. drop + */ + addListener(event: string, listener: (...args: any[]) => void): this; + addListener(event: "close", listener: () => void): this; + addListener(event: "connection", listener: (socket: Socket) => void): this; + addListener(event: "error", listener: (err: Error) => void): this; + addListener(event: "listening", listener: () => void): this; + addListener(event: "drop", listener: (data?: DropArgument) => void): this; + emit(event: string | symbol, ...args: any[]): boolean; + emit(event: "close"): boolean; + emit(event: "connection", socket: Socket): boolean; + emit(event: "error", err: Error): boolean; + emit(event: "listening"): boolean; + emit(event: "drop", data?: DropArgument): boolean; + on(event: string, listener: (...args: any[]) => void): this; + on(event: "close", listener: () => void): this; + on(event: "connection", listener: (socket: Socket) => void): this; + on(event: "error", listener: (err: Error) => void): this; + on(event: "listening", listener: () => void): this; + on(event: "drop", listener: (data?: DropArgument) => void): this; + once(event: string, listener: (...args: any[]) => void): this; + once(event: "close", listener: () => void): this; + once(event: "connection", listener: (socket: Socket) => void): this; + once(event: "error", listener: (err: Error) => void): this; + once(event: "listening", listener: () => void): this; + once(event: "drop", listener: (data?: DropArgument) => void): this; + prependListener(event: string, listener: (...args: any[]) => void): this; + prependListener(event: "close", listener: () => void): this; + prependListener(event: "connection", listener: (socket: Socket) => void): this; + prependListener(event: "error", listener: (err: Error) => void): this; + prependListener(event: "listening", listener: () => void): this; + prependListener(event: "drop", listener: (data?: DropArgument) => void): this; + prependOnceListener(event: string, listener: (...args: any[]) => void): this; + prependOnceListener(event: "close", listener: () => void): this; + prependOnceListener(event: "connection", listener: (socket: Socket) => void): this; + prependOnceListener(event: "error", listener: (err: Error) => void): this; + prependOnceListener(event: "listening", listener: () => void): this; + prependOnceListener(event: "drop", listener: (data?: DropArgument) => void): this; + /** + * Calls {@link Server.close()} and returns a promise that fulfills when the server has closed. + * @since v20.5.0 + */ + [Symbol.asyncDispose](): Promise; + } + type IPVersion = "ipv4" | "ipv6"; + /** + * The `BlockList` object can be used with some network APIs to specify rules for + * disabling inbound or outbound access to specific IP addresses, IP ranges, or + * IP subnets. + * @since v15.0.0, v14.18.0 + */ + class BlockList { + /** + * Adds a rule to block the given IP address. + * @since v15.0.0, v14.18.0 + * @param address An IPv4 or IPv6 address. + * @param [type='ipv4'] Either `'ipv4'` or `'ipv6'`. + */ + addAddress(address: string, type?: IPVersion): void; + addAddress(address: SocketAddress): void; + /** + * Adds a rule to block a range of IP addresses from `start` (inclusive) to`end` (inclusive). + * @since v15.0.0, v14.18.0 + * @param start The starting IPv4 or IPv6 address in the range. + * @param end The ending IPv4 or IPv6 address in the range. + * @param [type='ipv4'] Either `'ipv4'` or `'ipv6'`. + */ + addRange(start: string, end: string, type?: IPVersion): void; + addRange(start: SocketAddress, end: SocketAddress): void; + /** + * Adds a rule to block a range of IP addresses specified as a subnet mask. + * @since v15.0.0, v14.18.0 + * @param net The network IPv4 or IPv6 address. + * @param prefix The number of CIDR prefix bits. For IPv4, this must be a value between `0` and `32`. For IPv6, this must be between `0` and `128`. + * @param [type='ipv4'] Either `'ipv4'` or `'ipv6'`. + */ + addSubnet(net: SocketAddress, prefix: number): void; + addSubnet(net: string, prefix: number, type?: IPVersion): void; + /** + * Returns `true` if the given IP address matches any of the rules added to the`BlockList`. + * + * ```js + * const blockList = new net.BlockList(); + * blockList.addAddress('123.123.123.123'); + * blockList.addRange('10.0.0.1', '10.0.0.10'); + * blockList.addSubnet('8592:757c:efae:4e45::', 64, 'ipv6'); + * + * console.log(blockList.check('123.123.123.123')); // Prints: true + * console.log(blockList.check('10.0.0.3')); // Prints: true + * console.log(blockList.check('222.111.111.222')); // Prints: false + * + * // IPv6 notation for IPv4 addresses works: + * console.log(blockList.check('::ffff:7b7b:7b7b', 'ipv6')); // Prints: true + * console.log(blockList.check('::ffff:123.123.123.123', 'ipv6')); // Prints: true + * ``` + * @since v15.0.0, v14.18.0 + * @param address The IP address to check + * @param [type='ipv4'] Either `'ipv4'` or `'ipv6'`. + */ + check(address: SocketAddress): boolean; + check(address: string, type?: IPVersion): boolean; + } + interface TcpNetConnectOpts extends TcpSocketConnectOpts, SocketConstructorOpts { + timeout?: number | undefined; + } + interface IpcNetConnectOpts extends IpcSocketConnectOpts, SocketConstructorOpts { + timeout?: number | undefined; + } + type NetConnectOpts = TcpNetConnectOpts | IpcNetConnectOpts; + /** + * Creates a new TCP or `IPC` server. + * + * If `allowHalfOpen` is set to `true`, when the other end of the socket + * signals the end of transmission, the server will only send back the end of + * transmission when `socket.end()` is explicitly called. For example, in the + * context of TCP, when a FIN packed is received, a FIN packed is sent + * back only when `socket.end()` is explicitly called. Until then the + * connection is half-closed (non-readable but still writable). See `'end'` event and [RFC 1122](https://tools.ietf.org/html/rfc1122) (section 4.2.2.13) for more information. + * + * If `pauseOnConnect` is set to `true`, then the socket associated with each + * incoming connection will be paused, and no data will be read from its handle. + * This allows connections to be passed between processes without any data being + * read by the original process. To begin reading data from a paused socket, call `socket.resume()`. + * + * The server can be a TCP server or an `IPC` server, depending on what it `listen()` to. + * + * Here is an example of a TCP echo server which listens for connections + * on port 8124: + * + * ```js + * const net = require('node:net'); + * const server = net.createServer((c) => { + * // 'connection' listener. + * console.log('client connected'); + * c.on('end', () => { + * console.log('client disconnected'); + * }); + * c.write('hello\r\n'); + * c.pipe(c); + * }); + * server.on('error', (err) => { + * throw err; + * }); + * server.listen(8124, () => { + * console.log('server bound'); + * }); + * ``` + * + * Test this by using `telnet`: + * + * ```bash + * telnet localhost 8124 + * ``` + * + * To listen on the socket `/tmp/echo.sock`: + * + * ```js + * server.listen('/tmp/echo.sock', () => { + * console.log('server bound'); + * }); + * ``` + * + * Use `nc` to connect to a Unix domain socket server: + * + * ```bash + * nc -U /tmp/echo.sock + * ``` + * @since v0.5.0 + * @param connectionListener Automatically set as a listener for the {@link 'connection'} event. + */ + function createServer(connectionListener?: (socket: Socket) => void): Server; + function createServer(options?: ServerOpts, connectionListener?: (socket: Socket) => void): Server; + /** + * Aliases to {@link createConnection}. + * + * Possible signatures: + * + * * {@link connect} + * * {@link connect} for `IPC` connections. + * * {@link connect} for TCP connections. + */ + function connect(options: NetConnectOpts, connectionListener?: () => void): Socket; + function connect(port: number, host?: string, connectionListener?: () => void): Socket; + function connect(path: string, connectionListener?: () => void): Socket; + /** + * A factory function, which creates a new {@link Socket}, + * immediately initiates connection with `socket.connect()`, + * then returns the `net.Socket` that starts the connection. + * + * When the connection is established, a `'connect'` event will be emitted + * on the returned socket. The last parameter `connectListener`, if supplied, + * will be added as a listener for the `'connect'` event **once**. + * + * Possible signatures: + * + * * {@link createConnection} + * * {@link createConnection} for `IPC` connections. + * * {@link createConnection} for TCP connections. + * + * The {@link connect} function is an alias to this function. + */ + function createConnection(options: NetConnectOpts, connectionListener?: () => void): Socket; + function createConnection(port: number, host?: string, connectionListener?: () => void): Socket; + function createConnection(path: string, connectionListener?: () => void): Socket; + /** + * Returns `6` if `input` is an IPv6 address. Returns `4` if `input` is an IPv4 + * address in [dot-decimal notation](https://en.wikipedia.org/wiki/Dot-decimal_notation) with no leading zeroes. Otherwise, returns`0`. + * + * ```js + * net.isIP('::1'); // returns 6 + * net.isIP('127.0.0.1'); // returns 4 + * net.isIP('127.000.000.001'); // returns 0 + * net.isIP('127.0.0.1/24'); // returns 0 + * net.isIP('fhqwhgads'); // returns 0 + * ``` + * @since v0.3.0 + */ + function isIP(input: string): number; + /** + * Returns `true` if `input` is an IPv4 address in [dot-decimal notation](https://en.wikipedia.org/wiki/Dot-decimal_notation) with no + * leading zeroes. Otherwise, returns `false`. + * + * ```js + * net.isIPv4('127.0.0.1'); // returns true + * net.isIPv4('127.000.000.001'); // returns false + * net.isIPv4('127.0.0.1/24'); // returns false + * net.isIPv4('fhqwhgads'); // returns false + * ``` + * @since v0.3.0 + */ + function isIPv4(input: string): boolean; + /** + * Returns `true` if `input` is an IPv6 address. Otherwise, returns `false`. + * + * ```js + * net.isIPv6('::1'); // returns true + * net.isIPv6('fhqwhgads'); // returns false + * ``` + * @since v0.3.0 + */ + function isIPv6(input: string): boolean; + interface SocketAddressInitOptions { + /** + * The network address as either an IPv4 or IPv6 string. + * @default 127.0.0.1 + */ + address?: string | undefined; + /** + * @default `'ipv4'` + */ + family?: IPVersion | undefined; + /** + * An IPv6 flow-label used only if `family` is `'ipv6'`. + * @default 0 + */ + flowlabel?: number | undefined; + /** + * An IP port. + * @default 0 + */ + port?: number | undefined; + } + /** + * @since v15.14.0, v14.18.0 + */ + class SocketAddress { + constructor(options: SocketAddressInitOptions); + /** + * Either \`'ipv4'\` or \`'ipv6'\`. + * @since v15.14.0, v14.18.0 + */ + readonly address: string; + /** + * Either \`'ipv4'\` or \`'ipv6'\`. + * @since v15.14.0, v14.18.0 + */ + readonly family: IPVersion; + /** + * @since v15.14.0, v14.18.0 + */ + readonly port: number; + /** + * @since v15.14.0, v14.18.0 + */ + readonly flowlabel: number; + } +} +declare module "node:net" { + export * from "net"; +} diff --git a/Url-Shortner/node_modules/@types/node/ts4.8/os.d.ts b/Url-Shortner/node_modules/@types/node/ts4.8/os.d.ts new file mode 100644 index 0000000..c281506 --- /dev/null +++ b/Url-Shortner/node_modules/@types/node/ts4.8/os.d.ts @@ -0,0 +1,477 @@ +/** + * The `node:os` module provides operating system-related utility methods and + * properties. It can be accessed using: + * + * ```js + * const os = require('node:os'); + * ``` + * @see [source](https://github.com/nodejs/node/blob/v20.2.0/lib/os.js) + */ +declare module "os" { + interface CpuInfo { + model: string; + speed: number; + times: { + user: number; + nice: number; + sys: number; + idle: number; + irq: number; + }; + } + interface NetworkInterfaceBase { + address: string; + netmask: string; + mac: string; + internal: boolean; + cidr: string | null; + } + interface NetworkInterfaceInfoIPv4 extends NetworkInterfaceBase { + family: "IPv4"; + scopeid?: undefined; + } + interface NetworkInterfaceInfoIPv6 extends NetworkInterfaceBase { + family: "IPv6"; + scopeid: number; + } + interface UserInfo { + username: T; + uid: number; + gid: number; + shell: T; + homedir: T; + } + type NetworkInterfaceInfo = NetworkInterfaceInfoIPv4 | NetworkInterfaceInfoIPv6; + /** + * Returns the host name of the operating system as a string. + * @since v0.3.3 + */ + function hostname(): string; + /** + * Returns an array containing the 1, 5, and 15 minute load averages. + * + * The load average is a measure of system activity calculated by the operating + * system and expressed as a fractional number. + * + * The load average is a Unix-specific concept. On Windows, the return value is + * always `[0, 0, 0]`. + * @since v0.3.3 + */ + function loadavg(): number[]; + /** + * Returns the system uptime in number of seconds. + * @since v0.3.3 + */ + function uptime(): number; + /** + * Returns the amount of free system memory in bytes as an integer. + * @since v0.3.3 + */ + function freemem(): number; + /** + * Returns the total amount of system memory in bytes as an integer. + * @since v0.3.3 + */ + function totalmem(): number; + /** + * Returns an array of objects containing information about each logical CPU core. + * The array will be empty if no CPU information is available, such as if the`/proc` file system is unavailable. + * + * The properties included on each object include: + * + * ```js + * [ + * { + * model: 'Intel(R) Core(TM) i7 CPU 860 @ 2.80GHz', + * speed: 2926, + * times: { + * user: 252020, + * nice: 0, + * sys: 30340, + * idle: 1070356870, + * irq: 0, + * }, + * }, + * { + * model: 'Intel(R) Core(TM) i7 CPU 860 @ 2.80GHz', + * speed: 2926, + * times: { + * user: 306960, + * nice: 0, + * sys: 26980, + * idle: 1071569080, + * irq: 0, + * }, + * }, + * { + * model: 'Intel(R) Core(TM) i7 CPU 860 @ 2.80GHz', + * speed: 2926, + * times: { + * user: 248450, + * nice: 0, + * sys: 21750, + * idle: 1070919370, + * irq: 0, + * }, + * }, + * { + * model: 'Intel(R) Core(TM) i7 CPU 860 @ 2.80GHz', + * speed: 2926, + * times: { + * user: 256880, + * nice: 0, + * sys: 19430, + * idle: 1070905480, + * irq: 20, + * }, + * }, + * ] + * ``` + * + * `nice` values are POSIX-only. On Windows, the `nice` values of all processors + * are always 0. + * + * `os.cpus().length` should not be used to calculate the amount of parallelism + * available to an application. Use {@link availableParallelism} for this purpose. + * @since v0.3.3 + */ + function cpus(): CpuInfo[]; + /** + * Returns an estimate of the default amount of parallelism a program should use. + * Always returns a value greater than zero. + * + * This function is a small wrapper about libuv's [`uv_available_parallelism()`](https://docs.libuv.org/en/v1.x/misc.html#c.uv_available_parallelism). + * @since v19.4.0, v18.14.0 + */ + function availableParallelism(): number; + /** + * Returns the operating system name as returned by [`uname(3)`](https://linux.die.net/man/3/uname). For example, it + * returns `'Linux'` on Linux, `'Darwin'` on macOS, and `'Windows_NT'` on Windows. + * + * See [https://en.wikipedia.org/wiki/Uname#Examples](https://en.wikipedia.org/wiki/Uname#Examples) for additional information + * about the output of running [`uname(3)`](https://linux.die.net/man/3/uname) on various operating systems. + * @since v0.3.3 + */ + function type(): string; + /** + * Returns the operating system as a string. + * + * On POSIX systems, the operating system release is determined by calling [`uname(3)`](https://linux.die.net/man/3/uname). On Windows, `GetVersionExW()` is used. See + * [https://en.wikipedia.org/wiki/Uname#Examples](https://en.wikipedia.org/wiki/Uname#Examples) for more information. + * @since v0.3.3 + */ + function release(): string; + /** + * Returns an object containing network interfaces that have been assigned a + * network address. + * + * Each key on the returned object identifies a network interface. The associated + * value is an array of objects that each describe an assigned network address. + * + * The properties available on the assigned network address object include: + * + * ```js + * { + * lo: [ + * { + * address: '127.0.0.1', + * netmask: '255.0.0.0', + * family: 'IPv4', + * mac: '00:00:00:00:00:00', + * internal: true, + * cidr: '127.0.0.1/8' + * }, + * { + * address: '::1', + * netmask: 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff', + * family: 'IPv6', + * mac: '00:00:00:00:00:00', + * scopeid: 0, + * internal: true, + * cidr: '::1/128' + * } + * ], + * eth0: [ + * { + * address: '192.168.1.108', + * netmask: '255.255.255.0', + * family: 'IPv4', + * mac: '01:02:03:0a:0b:0c', + * internal: false, + * cidr: '192.168.1.108/24' + * }, + * { + * address: 'fe80::a00:27ff:fe4e:66a1', + * netmask: 'ffff:ffff:ffff:ffff::', + * family: 'IPv6', + * mac: '01:02:03:0a:0b:0c', + * scopeid: 1, + * internal: false, + * cidr: 'fe80::a00:27ff:fe4e:66a1/64' + * } + * ] + * } + * ``` + * @since v0.6.0 + */ + function networkInterfaces(): NodeJS.Dict; + /** + * Returns the string path of the current user's home directory. + * + * On POSIX, it uses the `$HOME` environment variable if defined. Otherwise it + * uses the [effective UID](https://en.wikipedia.org/wiki/User_identifier#Effective_user_ID) to look up the user's home directory. + * + * On Windows, it uses the `USERPROFILE` environment variable if defined. + * Otherwise it uses the path to the profile directory of the current user. + * @since v2.3.0 + */ + function homedir(): string; + /** + * Returns information about the currently effective user. On POSIX platforms, + * this is typically a subset of the password file. The returned object includes + * the `username`, `uid`, `gid`, `shell`, and `homedir`. On Windows, the `uid` and`gid` fields are `-1`, and `shell` is `null`. + * + * The value of `homedir` returned by `os.userInfo()` is provided by the operating + * system. This differs from the result of `os.homedir()`, which queries + * environment variables for the home directory before falling back to the + * operating system response. + * + * Throws a `SystemError` if a user has no `username` or `homedir`. + * @since v6.0.0 + */ + function userInfo(options: { encoding: "buffer" }): UserInfo; + function userInfo(options?: { encoding: BufferEncoding }): UserInfo; + type SignalConstants = { + [key in NodeJS.Signals]: number; + }; + namespace constants { + const UV_UDP_REUSEADDR: number; + namespace signals {} + const signals: SignalConstants; + namespace errno { + const E2BIG: number; + const EACCES: number; + const EADDRINUSE: number; + const EADDRNOTAVAIL: number; + const EAFNOSUPPORT: number; + const EAGAIN: number; + const EALREADY: number; + const EBADF: number; + const EBADMSG: number; + const EBUSY: number; + const ECANCELED: number; + const ECHILD: number; + const ECONNABORTED: number; + const ECONNREFUSED: number; + const ECONNRESET: number; + const EDEADLK: number; + const EDESTADDRREQ: number; + const EDOM: number; + const EDQUOT: number; + const EEXIST: number; + const EFAULT: number; + const EFBIG: number; + const EHOSTUNREACH: number; + const EIDRM: number; + const EILSEQ: number; + const EINPROGRESS: number; + const EINTR: number; + const EINVAL: number; + const EIO: number; + const EISCONN: number; + const EISDIR: number; + const ELOOP: number; + const EMFILE: number; + const EMLINK: number; + const EMSGSIZE: number; + const EMULTIHOP: number; + const ENAMETOOLONG: number; + const ENETDOWN: number; + const ENETRESET: number; + const ENETUNREACH: number; + const ENFILE: number; + const ENOBUFS: number; + const ENODATA: number; + const ENODEV: number; + const ENOENT: number; + const ENOEXEC: number; + const ENOLCK: number; + const ENOLINK: number; + const ENOMEM: number; + const ENOMSG: number; + const ENOPROTOOPT: number; + const ENOSPC: number; + const ENOSR: number; + const ENOSTR: number; + const ENOSYS: number; + const ENOTCONN: number; + const ENOTDIR: number; + const ENOTEMPTY: number; + const ENOTSOCK: number; + const ENOTSUP: number; + const ENOTTY: number; + const ENXIO: number; + const EOPNOTSUPP: number; + const EOVERFLOW: number; + const EPERM: number; + const EPIPE: number; + const EPROTO: number; + const EPROTONOSUPPORT: number; + const EPROTOTYPE: number; + const ERANGE: number; + const EROFS: number; + const ESPIPE: number; + const ESRCH: number; + const ESTALE: number; + const ETIME: number; + const ETIMEDOUT: number; + const ETXTBSY: number; + const EWOULDBLOCK: number; + const EXDEV: number; + const WSAEINTR: number; + const WSAEBADF: number; + const WSAEACCES: number; + const WSAEFAULT: number; + const WSAEINVAL: number; + const WSAEMFILE: number; + const WSAEWOULDBLOCK: number; + const WSAEINPROGRESS: number; + const WSAEALREADY: number; + const WSAENOTSOCK: number; + const WSAEDESTADDRREQ: number; + const WSAEMSGSIZE: number; + const WSAEPROTOTYPE: number; + const WSAENOPROTOOPT: number; + const WSAEPROTONOSUPPORT: number; + const WSAESOCKTNOSUPPORT: number; + const WSAEOPNOTSUPP: number; + const WSAEPFNOSUPPORT: number; + const WSAEAFNOSUPPORT: number; + const WSAEADDRINUSE: number; + const WSAEADDRNOTAVAIL: number; + const WSAENETDOWN: number; + const WSAENETUNREACH: number; + const WSAENETRESET: number; + const WSAECONNABORTED: number; + const WSAECONNRESET: number; + const WSAENOBUFS: number; + const WSAEISCONN: number; + const WSAENOTCONN: number; + const WSAESHUTDOWN: number; + const WSAETOOMANYREFS: number; + const WSAETIMEDOUT: number; + const WSAECONNREFUSED: number; + const WSAELOOP: number; + const WSAENAMETOOLONG: number; + const WSAEHOSTDOWN: number; + const WSAEHOSTUNREACH: number; + const WSAENOTEMPTY: number; + const WSAEPROCLIM: number; + const WSAEUSERS: number; + const WSAEDQUOT: number; + const WSAESTALE: number; + const WSAEREMOTE: number; + const WSASYSNOTREADY: number; + const WSAVERNOTSUPPORTED: number; + const WSANOTINITIALISED: number; + const WSAEDISCON: number; + const WSAENOMORE: number; + const WSAECANCELLED: number; + const WSAEINVALIDPROCTABLE: number; + const WSAEINVALIDPROVIDER: number; + const WSAEPROVIDERFAILEDINIT: number; + const WSASYSCALLFAILURE: number; + const WSASERVICE_NOT_FOUND: number; + const WSATYPE_NOT_FOUND: number; + const WSA_E_NO_MORE: number; + const WSA_E_CANCELLED: number; + const WSAEREFUSED: number; + } + namespace priority { + const PRIORITY_LOW: number; + const PRIORITY_BELOW_NORMAL: number; + const PRIORITY_NORMAL: number; + const PRIORITY_ABOVE_NORMAL: number; + const PRIORITY_HIGH: number; + const PRIORITY_HIGHEST: number; + } + } + const devNull: string; + const EOL: string; + /** + * Returns the operating system CPU architecture for which the Node.js binary was + * compiled. Possible values are `'arm'`, `'arm64'`, `'ia32'`, `'mips'`,`'mipsel'`, `'ppc'`, `'ppc64'`, `'s390'`, `'s390x'`, and `'x64'`. + * + * The return value is equivalent to `process.arch`. + * @since v0.5.0 + */ + function arch(): string; + /** + * Returns a string identifying the kernel version. + * + * On POSIX systems, the operating system release is determined by calling [`uname(3)`](https://linux.die.net/man/3/uname). On Windows, `RtlGetVersion()` is used, and if it is not + * available, `GetVersionExW()` will be used. See [https://en.wikipedia.org/wiki/Uname#Examples](https://en.wikipedia.org/wiki/Uname#Examples) for more information. + * @since v13.11.0, v12.17.0 + */ + function version(): string; + /** + * Returns a string identifying the operating system platform for which + * the Node.js binary was compiled. The value is set at compile time. + * Possible values are `'aix'`, `'darwin'`, `'freebsd'`,`'linux'`,`'openbsd'`, `'sunos'`, and `'win32'`. + * + * The return value is equivalent to `process.platform`. + * + * The value `'android'` may also be returned if Node.js is built on the Android + * operating system. [Android support is experimental](https://github.com/nodejs/node/blob/HEAD/BUILDING.md#androidandroid-based-devices-eg-firefox-os). + * @since v0.5.0 + */ + function platform(): NodeJS.Platform; + /** + * Returns the machine type as a string, such as `arm`, `arm64`, `aarch64`,`mips`, `mips64`, `ppc64`, `ppc64le`, `s390`, `s390x`, `i386`, `i686`, `x86_64`. + * + * On POSIX systems, the machine type is determined by calling [`uname(3)`](https://linux.die.net/man/3/uname). On Windows, `RtlGetVersion()` is used, and if it is not + * available, `GetVersionExW()` will be used. See [https://en.wikipedia.org/wiki/Uname#Examples](https://en.wikipedia.org/wiki/Uname#Examples) for more information. + * @since v18.9.0, v16.18.0 + */ + function machine(): string; + /** + * Returns the operating system's default directory for temporary files as a + * string. + * @since v0.9.9 + */ + function tmpdir(): string; + /** + * Returns a string identifying the endianness of the CPU for which the Node.js + * binary was compiled. + * + * Possible values are `'BE'` for big endian and `'LE'` for little endian. + * @since v0.9.4 + */ + function endianness(): "BE" | "LE"; + /** + * Returns the scheduling priority for the process specified by `pid`. If `pid` is + * not provided or is `0`, the priority of the current process is returned. + * @since v10.10.0 + * @param [pid=0] The process ID to retrieve scheduling priority for. + */ + function getPriority(pid?: number): number; + /** + * Attempts to set the scheduling priority for the process specified by `pid`. If`pid` is not provided or is `0`, the process ID of the current process is used. + * + * The `priority` input must be an integer between `-20` (high priority) and `19`(low priority). Due to differences between Unix priority levels and Windows + * priority classes, `priority` is mapped to one of six priority constants in`os.constants.priority`. When retrieving a process priority level, this range + * mapping may cause the return value to be slightly different on Windows. To avoid + * confusion, set `priority` to one of the priority constants. + * + * On Windows, setting priority to `PRIORITY_HIGHEST` requires elevated user + * privileges. Otherwise the set priority will be silently reduced to`PRIORITY_HIGH`. + * @since v10.10.0 + * @param [pid=0] The process ID to set scheduling priority for. + * @param priority The scheduling priority to assign to the process. + */ + function setPriority(priority: number): void; + function setPriority(pid: number, priority: number): void; +} +declare module "node:os" { + export * from "os"; +} diff --git a/Url-Shortner/node_modules/@types/node/ts4.8/path.d.ts b/Url-Shortner/node_modules/@types/node/ts4.8/path.d.ts new file mode 100644 index 0000000..6f07681 --- /dev/null +++ b/Url-Shortner/node_modules/@types/node/ts4.8/path.d.ts @@ -0,0 +1,191 @@ +declare module "path/posix" { + import path = require("path"); + export = path; +} +declare module "path/win32" { + import path = require("path"); + export = path; +} +/** + * The `node:path` module provides utilities for working with file and directory + * paths. It can be accessed using: + * + * ```js + * const path = require('node:path'); + * ``` + * @see [source](https://github.com/nodejs/node/blob/v20.2.0/lib/path.js) + */ +declare module "path" { + namespace path { + /** + * A parsed path object generated by path.parse() or consumed by path.format(). + */ + interface ParsedPath { + /** + * The root of the path such as '/' or 'c:\' + */ + root: string; + /** + * The full directory path such as '/home/user/dir' or 'c:\path\dir' + */ + dir: string; + /** + * The file name including extension (if any) such as 'index.html' + */ + base: string; + /** + * The file extension (if any) such as '.html' + */ + ext: string; + /** + * The file name without extension (if any) such as 'index' + */ + name: string; + } + interface FormatInputPathObject { + /** + * The root of the path such as '/' or 'c:\' + */ + root?: string | undefined; + /** + * The full directory path such as '/home/user/dir' or 'c:\path\dir' + */ + dir?: string | undefined; + /** + * The file name including extension (if any) such as 'index.html' + */ + base?: string | undefined; + /** + * The file extension (if any) such as '.html' + */ + ext?: string | undefined; + /** + * The file name without extension (if any) such as 'index' + */ + name?: string | undefined; + } + interface PlatformPath { + /** + * Normalize a string path, reducing '..' and '.' parts. + * When multiple slashes are found, they're replaced by a single one; when the path contains a trailing slash, it is preserved. On Windows backslashes are used. + * + * @param path string path to normalize. + * @throws {TypeError} if `path` is not a string. + */ + normalize(path: string): string; + /** + * Join all arguments together and normalize the resulting path. + * + * @param paths paths to join. + * @throws {TypeError} if any of the path segments is not a string. + */ + join(...paths: string[]): string; + /** + * The right-most parameter is considered {to}. Other parameters are considered an array of {from}. + * + * Starting from leftmost {from} parameter, resolves {to} to an absolute path. + * + * If {to} isn't already absolute, {from} arguments are prepended in right to left order, + * until an absolute path is found. If after using all {from} paths still no absolute path is found, + * the current working directory is used as well. The resulting path is normalized, + * and trailing slashes are removed unless the path gets resolved to the root directory. + * + * @param paths A sequence of paths or path segments. + * @throws {TypeError} if any of the arguments is not a string. + */ + resolve(...paths: string[]): string; + /** + * Determines whether {path} is an absolute path. An absolute path will always resolve to the same location, regardless of the working directory. + * + * If the given {path} is a zero-length string, `false` will be returned. + * + * @param path path to test. + * @throws {TypeError} if `path` is not a string. + */ + isAbsolute(path: string): boolean; + /** + * Solve the relative path from {from} to {to} based on the current working directory. + * At times we have two absolute paths, and we need to derive the relative path from one to the other. This is actually the reverse transform of path.resolve. + * + * @throws {TypeError} if either `from` or `to` is not a string. + */ + relative(from: string, to: string): string; + /** + * Return the directory name of a path. Similar to the Unix dirname command. + * + * @param path the path to evaluate. + * @throws {TypeError} if `path` is not a string. + */ + dirname(path: string): string; + /** + * Return the last portion of a path. Similar to the Unix basename command. + * Often used to extract the file name from a fully qualified path. + * + * @param path the path to evaluate. + * @param suffix optionally, an extension to remove from the result. + * @throws {TypeError} if `path` is not a string or if `ext` is given and is not a string. + */ + basename(path: string, suffix?: string): string; + /** + * Return the extension of the path, from the last '.' to end of string in the last portion of the path. + * If there is no '.' in the last portion of the path or the first character of it is '.', then it returns an empty string. + * + * @param path the path to evaluate. + * @throws {TypeError} if `path` is not a string. + */ + extname(path: string): string; + /** + * The platform-specific file separator. '\\' or '/'. + */ + readonly sep: "\\" | "/"; + /** + * The platform-specific file delimiter. ';' or ':'. + */ + readonly delimiter: ";" | ":"; + /** + * Returns an object from a path string - the opposite of format(). + * + * @param path path to evaluate. + * @throws {TypeError} if `path` is not a string. + */ + parse(path: string): ParsedPath; + /** + * Returns a path string from an object - the opposite of parse(). + * + * @param pathObject path to evaluate. + */ + format(pathObject: FormatInputPathObject): string; + /** + * On Windows systems only, returns an equivalent namespace-prefixed path for the given path. + * If path is not a string, path will be returned without modifications. + * This method is meaningful only on Windows system. + * On POSIX systems, the method is non-operational and always returns path without modifications. + */ + toNamespacedPath(path: string): string; + /** + * Posix specific pathing. + * Same as parent object on posix. + */ + readonly posix: PlatformPath; + /** + * Windows specific pathing. + * Same as parent object on windows + */ + readonly win32: PlatformPath; + } + } + const path: path.PlatformPath; + export = path; +} +declare module "node:path" { + import path = require("path"); + export = path; +} +declare module "node:path/posix" { + import path = require("path/posix"); + export = path; +} +declare module "node:path/win32" { + import path = require("path/win32"); + export = path; +} diff --git a/Url-Shortner/node_modules/@types/node/ts4.8/perf_hooks.d.ts b/Url-Shortner/node_modules/@types/node/ts4.8/perf_hooks.d.ts new file mode 100644 index 0000000..0e6b843 --- /dev/null +++ b/Url-Shortner/node_modules/@types/node/ts4.8/perf_hooks.d.ts @@ -0,0 +1,639 @@ +/** + * This module provides an implementation of a subset of the W3C [Web Performance APIs](https://w3c.github.io/perf-timing-primer/) as well as additional APIs for + * Node.js-specific performance measurements. + * + * Node.js supports the following [Web Performance APIs](https://w3c.github.io/perf-timing-primer/): + * + * * [High Resolution Time](https://www.w3.org/TR/hr-time-2) + * * [Performance Timeline](https://w3c.github.io/performance-timeline/) + * * [User Timing](https://www.w3.org/TR/user-timing/) + * * [Resource Timing](https://www.w3.org/TR/resource-timing-2/) + * + * ```js + * const { PerformanceObserver, performance } = require('node:perf_hooks'); + * + * const obs = new PerformanceObserver((items) => { + * console.log(items.getEntries()[0].duration); + * performance.clearMarks(); + * }); + * obs.observe({ type: 'measure' }); + * performance.measure('Start to Now'); + * + * performance.mark('A'); + * doSomeLongRunningProcess(() => { + * performance.measure('A to Now', 'A'); + * + * performance.mark('B'); + * performance.measure('A to B', 'A', 'B'); + * }); + * ``` + * @see [source](https://github.com/nodejs/node/blob/v20.2.0/lib/perf_hooks.js) + */ +declare module "perf_hooks" { + import { AsyncResource } from "node:async_hooks"; + type EntryType = "node" | "mark" | "measure" | "gc" | "function" | "http2" | "http"; + interface NodeGCPerformanceDetail { + /** + * When `performanceEntry.entryType` is equal to 'gc', `the performance.kind` property identifies + * the type of garbage collection operation that occurred. + * See perf_hooks.constants for valid values. + */ + readonly kind?: number | undefined; + /** + * When `performanceEntry.entryType` is equal to 'gc', the `performance.flags` + * property contains additional information about garbage collection operation. + * See perf_hooks.constants for valid values. + */ + readonly flags?: number | undefined; + } + /** + * The constructor of this class is not exposed to users directly. + * @since v8.5.0 + */ + class PerformanceEntry { + protected constructor(); + /** + * The total number of milliseconds elapsed for this entry. This value will not + * be meaningful for all Performance Entry types. + * @since v8.5.0 + */ + readonly duration: number; + /** + * The name of the performance entry. + * @since v8.5.0 + */ + readonly name: string; + /** + * The high resolution millisecond timestamp marking the starting time of the + * Performance Entry. + * @since v8.5.0 + */ + readonly startTime: number; + /** + * The type of the performance entry. It may be one of: + * + * * `'node'` (Node.js only) + * * `'mark'` (available on the Web) + * * `'measure'` (available on the Web) + * * `'gc'` (Node.js only) + * * `'function'` (Node.js only) + * * `'http2'` (Node.js only) + * * `'http'` (Node.js only) + * @since v8.5.0 + */ + readonly entryType: EntryType; + /** + * Additional detail specific to the `entryType`. + * @since v16.0.0 + */ + readonly detail?: NodeGCPerformanceDetail | unknown | undefined; // TODO: Narrow this based on entry type. + toJSON(): any; + } + /** + * Exposes marks created via the `Performance.mark()` method. + * @since v18.2.0, v16.17.0 + */ + class PerformanceMark extends PerformanceEntry { + readonly duration: 0; + readonly entryType: "mark"; + } + /** + * Exposes measures created via the `Performance.measure()` method. + * + * The constructor of this class is not exposed to users directly. + * @since v18.2.0, v16.17.0 + */ + class PerformanceMeasure extends PerformanceEntry { + readonly entryType: "measure"; + } + /** + * _This property is an extension by Node.js. It is not available in Web browsers._ + * + * Provides timing details for Node.js itself. The constructor of this class + * is not exposed to users. + * @since v8.5.0 + */ + class PerformanceNodeTiming extends PerformanceEntry { + /** + * The high resolution millisecond timestamp at which the Node.js process + * completed bootstrapping. If bootstrapping has not yet finished, the property + * has the value of -1. + * @since v8.5.0 + */ + readonly bootstrapComplete: number; + /** + * The high resolution millisecond timestamp at which the Node.js environment was + * initialized. + * @since v8.5.0 + */ + readonly environment: number; + /** + * The high resolution millisecond timestamp of the amount of time the event loop + * has been idle within the event loop's event provider (e.g. `epoll_wait`). This + * does not take CPU usage into consideration. If the event loop has not yet + * started (e.g., in the first tick of the main script), the property has the + * value of 0. + * @since v14.10.0, v12.19.0 + */ + readonly idleTime: number; + /** + * The high resolution millisecond timestamp at which the Node.js event loop + * exited. If the event loop has not yet exited, the property has the value of -1\. + * It can only have a value of not -1 in a handler of the `'exit'` event. + * @since v8.5.0 + */ + readonly loopExit: number; + /** + * The high resolution millisecond timestamp at which the Node.js event loop + * started. If the event loop has not yet started (e.g., in the first tick of the + * main script), the property has the value of -1. + * @since v8.5.0 + */ + readonly loopStart: number; + /** + * The high resolution millisecond timestamp at which the V8 platform was + * initialized. + * @since v8.5.0 + */ + readonly v8Start: number; + } + interface EventLoopUtilization { + idle: number; + active: number; + utilization: number; + } + /** + * @param util1 The result of a previous call to eventLoopUtilization() + * @param util2 The result of a previous call to eventLoopUtilization() prior to util1 + */ + type EventLoopUtilityFunction = ( + util1?: EventLoopUtilization, + util2?: EventLoopUtilization, + ) => EventLoopUtilization; + interface MarkOptions { + /** + * Additional optional detail to include with the mark. + */ + detail?: unknown | undefined; + /** + * An optional timestamp to be used as the mark time. + * @default `performance.now()`. + */ + startTime?: number | undefined; + } + interface MeasureOptions { + /** + * Additional optional detail to include with the mark. + */ + detail?: unknown | undefined; + /** + * Duration between start and end times. + */ + duration?: number | undefined; + /** + * Timestamp to be used as the end time, or a string identifying a previously recorded mark. + */ + end?: number | string | undefined; + /** + * Timestamp to be used as the start time, or a string identifying a previously recorded mark. + */ + start?: number | string | undefined; + } + interface TimerifyOptions { + /** + * A histogram object created using + * `perf_hooks.createHistogram()` that will record runtime durations in + * nanoseconds. + */ + histogram?: RecordableHistogram | undefined; + } + interface Performance { + /** + * If name is not provided, removes all PerformanceMark objects from the Performance Timeline. + * If name is provided, removes only the named mark. + * @param name + */ + clearMarks(name?: string): void; + /** + * If name is not provided, removes all PerformanceMeasure objects from the Performance Timeline. + * If name is provided, removes only the named measure. + * @param name + * @since v16.7.0 + */ + clearMeasures(name?: string): void; + /** + * Returns a list of `PerformanceEntry` objects in chronological order with respect to `performanceEntry.startTime`. + * If you are only interested in performance entries of certain types or that have certain names, see + * `performance.getEntriesByType()` and `performance.getEntriesByName()`. + * @since v16.7.0 + */ + getEntries(): PerformanceEntry[]; + /** + * Returns a list of `PerformanceEntry` objects in chronological order with respect to `performanceEntry.startTime` + * whose `performanceEntry.name` is equal to `name`, and optionally, whose `performanceEntry.entryType` is equal to `type`. + * @param name + * @param type + * @since v16.7.0 + */ + getEntriesByName(name: string, type?: EntryType): PerformanceEntry[]; + /** + * Returns a list of `PerformanceEntry` objects in chronological order with respect to `performanceEntry.startTime` + * whose `performanceEntry.entryType` is equal to `type`. + * @param type + * @since v16.7.0 + */ + getEntriesByType(type: EntryType): PerformanceEntry[]; + /** + * Creates a new PerformanceMark entry in the Performance Timeline. + * A PerformanceMark is a subclass of PerformanceEntry whose performanceEntry.entryType is always 'mark', + * and whose performanceEntry.duration is always 0. + * Performance marks are used to mark specific significant moments in the Performance Timeline. + * @param name + * @return The PerformanceMark entry that was created + */ + mark(name?: string, options?: MarkOptions): PerformanceMark; + /** + * Creates a new PerformanceMeasure entry in the Performance Timeline. + * A PerformanceMeasure is a subclass of PerformanceEntry whose performanceEntry.entryType is always 'measure', + * and whose performanceEntry.duration measures the number of milliseconds elapsed since startMark and endMark. + * + * The startMark argument may identify any existing PerformanceMark in the the Performance Timeline, or may identify + * any of the timestamp properties provided by the PerformanceNodeTiming class. If the named startMark does not exist, + * then startMark is set to timeOrigin by default. + * + * The endMark argument must identify any existing PerformanceMark in the the Performance Timeline or any of the timestamp + * properties provided by the PerformanceNodeTiming class. If the named endMark does not exist, an error will be thrown. + * @param name + * @param startMark + * @param endMark + * @return The PerformanceMeasure entry that was created + */ + measure(name: string, startMark?: string, endMark?: string): PerformanceMeasure; + measure(name: string, options: MeasureOptions): PerformanceMeasure; + /** + * An instance of the PerformanceNodeTiming class that provides performance metrics for specific Node.js operational milestones. + */ + readonly nodeTiming: PerformanceNodeTiming; + /** + * @return the current high resolution millisecond timestamp + */ + now(): number; + /** + * The timeOrigin specifies the high resolution millisecond timestamp from which all performance metric durations are measured. + */ + readonly timeOrigin: number; + /** + * Wraps a function within a new function that measures the running time of the wrapped function. + * A PerformanceObserver must be subscribed to the 'function' event type in order for the timing details to be accessed. + * @param fn + */ + timerify any>(fn: T, options?: TimerifyOptions): T; + /** + * eventLoopUtilization is similar to CPU utilization except that it is calculated using high precision wall-clock time. + * It represents the percentage of time the event loop has spent outside the event loop's event provider (e.g. epoll_wait). + * No other CPU idle time is taken into consideration. + */ + eventLoopUtilization: EventLoopUtilityFunction; + } + interface PerformanceObserverEntryList { + /** + * Returns a list of `PerformanceEntry` objects in chronological order + * with respect to `performanceEntry.startTime`. + * + * ```js + * const { + * performance, + * PerformanceObserver, + * } = require('node:perf_hooks'); + * + * const obs = new PerformanceObserver((perfObserverList, observer) => { + * console.log(perfObserverList.getEntries()); + * + * * [ + * * PerformanceEntry { + * * name: 'test', + * * entryType: 'mark', + * * startTime: 81.465639, + * * duration: 0 + * * }, + * * PerformanceEntry { + * * name: 'meow', + * * entryType: 'mark', + * * startTime: 81.860064, + * * duration: 0 + * * } + * * ] + * + * performance.clearMarks(); + * performance.clearMeasures(); + * observer.disconnect(); + * }); + * obs.observe({ type: 'mark' }); + * + * performance.mark('test'); + * performance.mark('meow'); + * ``` + * @since v8.5.0 + */ + getEntries(): PerformanceEntry[]; + /** + * Returns a list of `PerformanceEntry` objects in chronological order + * with respect to `performanceEntry.startTime` whose `performanceEntry.name` is + * equal to `name`, and optionally, whose `performanceEntry.entryType` is equal to`type`. + * + * ```js + * const { + * performance, + * PerformanceObserver, + * } = require('node:perf_hooks'); + * + * const obs = new PerformanceObserver((perfObserverList, observer) => { + * console.log(perfObserverList.getEntriesByName('meow')); + * + * * [ + * * PerformanceEntry { + * * name: 'meow', + * * entryType: 'mark', + * * startTime: 98.545991, + * * duration: 0 + * * } + * * ] + * + * console.log(perfObserverList.getEntriesByName('nope')); // [] + * + * console.log(perfObserverList.getEntriesByName('test', 'mark')); + * + * * [ + * * PerformanceEntry { + * * name: 'test', + * * entryType: 'mark', + * * startTime: 63.518931, + * * duration: 0 + * * } + * * ] + * + * console.log(perfObserverList.getEntriesByName('test', 'measure')); // [] + * + * performance.clearMarks(); + * performance.clearMeasures(); + * observer.disconnect(); + * }); + * obs.observe({ entryTypes: ['mark', 'measure'] }); + * + * performance.mark('test'); + * performance.mark('meow'); + * ``` + * @since v8.5.0 + */ + getEntriesByName(name: string, type?: EntryType): PerformanceEntry[]; + /** + * Returns a list of `PerformanceEntry` objects in chronological order + * with respect to `performanceEntry.startTime` whose `performanceEntry.entryType`is equal to `type`. + * + * ```js + * const { + * performance, + * PerformanceObserver, + * } = require('node:perf_hooks'); + * + * const obs = new PerformanceObserver((perfObserverList, observer) => { + * console.log(perfObserverList.getEntriesByType('mark')); + * + * * [ + * * PerformanceEntry { + * * name: 'test', + * * entryType: 'mark', + * * startTime: 55.897834, + * * duration: 0 + * * }, + * * PerformanceEntry { + * * name: 'meow', + * * entryType: 'mark', + * * startTime: 56.350146, + * * duration: 0 + * * } + * * ] + * + * performance.clearMarks(); + * performance.clearMeasures(); + * observer.disconnect(); + * }); + * obs.observe({ type: 'mark' }); + * + * performance.mark('test'); + * performance.mark('meow'); + * ``` + * @since v8.5.0 + */ + getEntriesByType(type: EntryType): PerformanceEntry[]; + } + type PerformanceObserverCallback = (list: PerformanceObserverEntryList, observer: PerformanceObserver) => void; + /** + * @since v8.5.0 + */ + class PerformanceObserver extends AsyncResource { + constructor(callback: PerformanceObserverCallback); + /** + * Disconnects the `PerformanceObserver` instance from all notifications. + * @since v8.5.0 + */ + disconnect(): void; + /** + * Subscribes the `PerformanceObserver` instance to notifications of new `PerformanceEntry` instances identified either by `options.entryTypes`or `options.type`: + * + * ```js + * const { + * performance, + * PerformanceObserver, + * } = require('node:perf_hooks'); + * + * const obs = new PerformanceObserver((list, observer) => { + * // Called once asynchronously. `list` contains three items. + * }); + * obs.observe({ type: 'mark' }); + * + * for (let n = 0; n < 3; n++) + * performance.mark(`test${n}`); + * ``` + * @since v8.5.0 + */ + observe( + options: + | { + entryTypes: ReadonlyArray; + buffered?: boolean | undefined; + } + | { + type: EntryType; + buffered?: boolean | undefined; + }, + ): void; + } + namespace constants { + const NODE_PERFORMANCE_GC_MAJOR: number; + const NODE_PERFORMANCE_GC_MINOR: number; + const NODE_PERFORMANCE_GC_INCREMENTAL: number; + const NODE_PERFORMANCE_GC_WEAKCB: number; + const NODE_PERFORMANCE_GC_FLAGS_NO: number; + const NODE_PERFORMANCE_GC_FLAGS_CONSTRUCT_RETAINED: number; + const NODE_PERFORMANCE_GC_FLAGS_FORCED: number; + const NODE_PERFORMANCE_GC_FLAGS_SYNCHRONOUS_PHANTOM_PROCESSING: number; + const NODE_PERFORMANCE_GC_FLAGS_ALL_AVAILABLE_GARBAGE: number; + const NODE_PERFORMANCE_GC_FLAGS_ALL_EXTERNAL_MEMORY: number; + const NODE_PERFORMANCE_GC_FLAGS_SCHEDULE_IDLE: number; + } + const performance: Performance; + interface EventLoopMonitorOptions { + /** + * The sampling rate in milliseconds. + * Must be greater than zero. + * @default 10 + */ + resolution?: number | undefined; + } + interface Histogram { + /** + * Returns a `Map` object detailing the accumulated percentile distribution. + * @since v11.10.0 + */ + readonly percentiles: Map; + /** + * The number of times the event loop delay exceeded the maximum 1 hour event + * loop delay threshold. + * @since v11.10.0 + */ + readonly exceeds: number; + /** + * The minimum recorded event loop delay. + * @since v11.10.0 + */ + readonly min: number; + /** + * The maximum recorded event loop delay. + * @since v11.10.0 + */ + readonly max: number; + /** + * The mean of the recorded event loop delays. + * @since v11.10.0 + */ + readonly mean: number; + /** + * The standard deviation of the recorded event loop delays. + * @since v11.10.0 + */ + readonly stddev: number; + /** + * Resets the collected histogram data. + * @since v11.10.0 + */ + reset(): void; + /** + * Returns the value at the given percentile. + * @since v11.10.0 + * @param percentile A percentile value in the range (0, 100]. + */ + percentile(percentile: number): number; + } + interface IntervalHistogram extends Histogram { + /** + * Enables the update interval timer. Returns `true` if the timer was + * started, `false` if it was already started. + * @since v11.10.0 + */ + enable(): boolean; + /** + * Disables the update interval timer. Returns `true` if the timer was + * stopped, `false` if it was already stopped. + * @since v11.10.0 + */ + disable(): boolean; + } + interface RecordableHistogram extends Histogram { + /** + * @since v15.9.0, v14.18.0 + * @param val The amount to record in the histogram. + */ + record(val: number | bigint): void; + /** + * Calculates the amount of time (in nanoseconds) that has passed since the + * previous call to `recordDelta()` and records that amount in the histogram. + * + * ## Examples + * @since v15.9.0, v14.18.0 + */ + recordDelta(): void; + /** + * Adds the values from `other` to this histogram. + * @since v17.4.0, v16.14.0 + */ + add(other: RecordableHistogram): void; + } + /** + * _This property is an extension by Node.js. It is not available in Web browsers._ + * + * Creates an `IntervalHistogram` object that samples and reports the event loop + * delay over time. The delays will be reported in nanoseconds. + * + * Using a timer to detect approximate event loop delay works because the + * execution of timers is tied specifically to the lifecycle of the libuv + * event loop. That is, a delay in the loop will cause a delay in the execution + * of the timer, and those delays are specifically what this API is intended to + * detect. + * + * ```js + * const { monitorEventLoopDelay } = require('node:perf_hooks'); + * const h = monitorEventLoopDelay({ resolution: 20 }); + * h.enable(); + * // Do something. + * h.disable(); + * console.log(h.min); + * console.log(h.max); + * console.log(h.mean); + * console.log(h.stddev); + * console.log(h.percentiles); + * console.log(h.percentile(50)); + * console.log(h.percentile(99)); + * ``` + * @since v11.10.0 + */ + function monitorEventLoopDelay(options?: EventLoopMonitorOptions): IntervalHistogram; + interface CreateHistogramOptions { + /** + * The minimum recordable value. Must be an integer value greater than 0. + * @default 1 + */ + min?: number | bigint | undefined; + /** + * The maximum recordable value. Must be an integer value greater than min. + * @default Number.MAX_SAFE_INTEGER + */ + max?: number | bigint | undefined; + /** + * The number of accuracy digits. Must be a number between 1 and 5. + * @default 3 + */ + figures?: number | undefined; + } + /** + * Returns a `RecordableHistogram`. + * @since v15.9.0, v14.18.0 + */ + function createHistogram(options?: CreateHistogramOptions): RecordableHistogram; + import { performance as _performance } from "perf_hooks"; + global { + /** + * `performance` is a global reference for `require('perf_hooks').performance` + * https://nodejs.org/api/globals.html#performance + * @since v16.0.0 + */ + var performance: typeof globalThis extends { + onmessage: any; + performance: infer T; + } ? T + : typeof _performance; + } +} +declare module "node:perf_hooks" { + export * from "perf_hooks"; +} diff --git a/Url-Shortner/node_modules/@types/node/ts4.8/process.d.ts b/Url-Shortner/node_modules/@types/node/ts4.8/process.d.ts new file mode 100644 index 0000000..65f48d4 --- /dev/null +++ b/Url-Shortner/node_modules/@types/node/ts4.8/process.d.ts @@ -0,0 +1,1525 @@ +declare module "process" { + import * as tty from "node:tty"; + import { Worker } from "node:worker_threads"; + global { + var process: NodeJS.Process; + namespace NodeJS { + // this namespace merge is here because these are specifically used + // as the type for process.stdin, process.stdout, and process.stderr. + // they can't live in tty.d.ts because we need to disambiguate the imported name. + interface ReadStream extends tty.ReadStream {} + interface WriteStream extends tty.WriteStream {} + interface MemoryUsageFn { + /** + * The `process.memoryUsage()` method iterate over each page to gather informations about memory + * usage which can be slow depending on the program memory allocations. + */ + (): MemoryUsage; + /** + * method returns an integer representing the Resident Set Size (RSS) in bytes. + */ + rss(): number; + } + interface MemoryUsage { + rss: number; + heapTotal: number; + heapUsed: number; + external: number; + arrayBuffers: number; + } + interface CpuUsage { + user: number; + system: number; + } + interface ProcessRelease { + name: string; + sourceUrl?: string | undefined; + headersUrl?: string | undefined; + libUrl?: string | undefined; + lts?: string | undefined; + } + interface ProcessVersions extends Dict { + http_parser: string; + node: string; + v8: string; + ares: string; + uv: string; + zlib: string; + modules: string; + openssl: string; + } + type Platform = + | "aix" + | "android" + | "darwin" + | "freebsd" + | "haiku" + | "linux" + | "openbsd" + | "sunos" + | "win32" + | "cygwin" + | "netbsd"; + type Architecture = + | "arm" + | "arm64" + | "ia32" + | "mips" + | "mipsel" + | "ppc" + | "ppc64" + | "s390" + | "s390x" + | "x64"; + type Signals = + | "SIGABRT" + | "SIGALRM" + | "SIGBUS" + | "SIGCHLD" + | "SIGCONT" + | "SIGFPE" + | "SIGHUP" + | "SIGILL" + | "SIGINT" + | "SIGIO" + | "SIGIOT" + | "SIGKILL" + | "SIGPIPE" + | "SIGPOLL" + | "SIGPROF" + | "SIGPWR" + | "SIGQUIT" + | "SIGSEGV" + | "SIGSTKFLT" + | "SIGSTOP" + | "SIGSYS" + | "SIGTERM" + | "SIGTRAP" + | "SIGTSTP" + | "SIGTTIN" + | "SIGTTOU" + | "SIGUNUSED" + | "SIGURG" + | "SIGUSR1" + | "SIGUSR2" + | "SIGVTALRM" + | "SIGWINCH" + | "SIGXCPU" + | "SIGXFSZ" + | "SIGBREAK" + | "SIGLOST" + | "SIGINFO"; + type UncaughtExceptionOrigin = "uncaughtException" | "unhandledRejection"; + type MultipleResolveType = "resolve" | "reject"; + type BeforeExitListener = (code: number) => void; + type DisconnectListener = () => void; + type ExitListener = (code: number) => void; + type RejectionHandledListener = (promise: Promise) => void; + type UncaughtExceptionListener = (error: Error, origin: UncaughtExceptionOrigin) => void; + /** + * Most of the time the unhandledRejection will be an Error, but this should not be relied upon + * as *anything* can be thrown/rejected, it is therefore unsafe to assume that the value is an Error. + */ + type UnhandledRejectionListener = (reason: unknown, promise: Promise) => void; + type WarningListener = (warning: Error) => void; + type MessageListener = (message: unknown, sendHandle: unknown) => void; + type SignalsListener = (signal: Signals) => void; + type MultipleResolveListener = ( + type: MultipleResolveType, + promise: Promise, + value: unknown, + ) => void; + type WorkerListener = (worker: Worker) => void; + interface Socket extends ReadWriteStream { + isTTY?: true | undefined; + } + // Alias for compatibility + interface ProcessEnv extends Dict { + /** + * Can be used to change the default timezone at runtime + */ + TZ?: string; + } + interface HRTime { + (time?: [number, number]): [number, number]; + bigint(): bigint; + } + interface ProcessReport { + /** + * Directory where the report is written. + * working directory of the Node.js process. + * @default '' indicating that reports are written to the current + */ + directory: string; + /** + * Filename where the report is written. + * The default value is the empty string. + * @default '' the output filename will be comprised of a timestamp, + * PID, and sequence number. + */ + filename: string; + /** + * Returns a JSON-formatted diagnostic report for the running process. + * The report's JavaScript stack trace is taken from err, if present. + */ + getReport(err?: Error): string; + /** + * If true, a diagnostic report is generated on fatal errors, + * such as out of memory errors or failed C++ assertions. + * @default false + */ + reportOnFatalError: boolean; + /** + * If true, a diagnostic report is generated when the process + * receives the signal specified by process.report.signal. + * @default false + */ + reportOnSignal: boolean; + /** + * If true, a diagnostic report is generated on uncaught exception. + * @default false + */ + reportOnUncaughtException: boolean; + /** + * The signal used to trigger the creation of a diagnostic report. + * @default 'SIGUSR2' + */ + signal: Signals; + /** + * Writes a diagnostic report to a file. If filename is not provided, the default filename + * includes the date, time, PID, and a sequence number. + * The report's JavaScript stack trace is taken from err, if present. + * + * @param fileName Name of the file where the report is written. + * This should be a relative path, that will be appended to the directory specified in + * `process.report.directory`, or the current working directory of the Node.js process, + * if unspecified. + * @param error A custom error used for reporting the JavaScript stack. + * @return Filename of the generated report. + */ + writeReport(fileName?: string): string; + writeReport(error?: Error): string; + writeReport(fileName?: string, err?: Error): string; + } + interface ResourceUsage { + fsRead: number; + fsWrite: number; + involuntaryContextSwitches: number; + ipcReceived: number; + ipcSent: number; + majorPageFault: number; + maxRSS: number; + minorPageFault: number; + sharedMemorySize: number; + signalsCount: number; + swappedOut: number; + systemCPUTime: number; + unsharedDataSize: number; + unsharedStackSize: number; + userCPUTime: number; + voluntaryContextSwitches: number; + } + interface EmitWarningOptions { + /** + * When `warning` is a `string`, `type` is the name to use for the _type_ of warning being emitted. + * + * @default 'Warning' + */ + type?: string | undefined; + /** + * A unique identifier for the warning instance being emitted. + */ + code?: string | undefined; + /** + * When `warning` is a `string`, `ctor` is an optional function used to limit the generated stack trace. + * + * @default process.emitWarning + */ + ctor?: Function | undefined; + /** + * Additional text to include with the error. + */ + detail?: string | undefined; + } + interface ProcessConfig { + readonly target_defaults: { + readonly cflags: any[]; + readonly default_configuration: string; + readonly defines: string[]; + readonly include_dirs: string[]; + readonly libraries: string[]; + }; + readonly variables: { + readonly clang: number; + readonly host_arch: string; + readonly node_install_npm: boolean; + readonly node_install_waf: boolean; + readonly node_prefix: string; + readonly node_shared_openssl: boolean; + readonly node_shared_v8: boolean; + readonly node_shared_zlib: boolean; + readonly node_use_dtrace: boolean; + readonly node_use_etw: boolean; + readonly node_use_openssl: boolean; + readonly target_arch: string; + readonly v8_no_strict_aliasing: number; + readonly v8_use_snapshot: boolean; + readonly visibility: string; + }; + } + interface Process extends EventEmitter { + /** + * The `process.stdout` property returns a stream connected to`stdout` (fd `1`). It is a `net.Socket` (which is a `Duplex` stream) unless fd `1` refers to a file, in which case it is + * a `Writable` stream. + * + * For example, to copy `process.stdin` to `process.stdout`: + * + * ```js + * import { stdin, stdout } from 'node:process'; + * + * stdin.pipe(stdout); + * ``` + * + * `process.stdout` differs from other Node.js streams in important ways. See `note on process I/O` for more information. + */ + stdout: WriteStream & { + fd: 1; + }; + /** + * The `process.stderr` property returns a stream connected to`stderr` (fd `2`). It is a `net.Socket` (which is a `Duplex` stream) unless fd `2` refers to a file, in which case it is + * a `Writable` stream. + * + * `process.stderr` differs from other Node.js streams in important ways. See `note on process I/O` for more information. + */ + stderr: WriteStream & { + fd: 2; + }; + /** + * The `process.stdin` property returns a stream connected to`stdin` (fd `0`). It is a `net.Socket` (which is a `Duplex` stream) unless fd `0` refers to a file, in which case it is + * a `Readable` stream. + * + * For details of how to read from `stdin` see `readable.read()`. + * + * As a `Duplex` stream, `process.stdin` can also be used in "old" mode that + * is compatible with scripts written for Node.js prior to v0.10\. + * For more information see `Stream compatibility`. + * + * In "old" streams mode the `stdin` stream is paused by default, so one + * must call `process.stdin.resume()` to read from it. Note also that calling`process.stdin.resume()` itself would switch stream to "old" mode. + */ + stdin: ReadStream & { + fd: 0; + }; + openStdin(): Socket; + /** + * The `process.argv` property returns an array containing the command-line + * arguments passed when the Node.js process was launched. The first element will + * be {@link execPath}. See `process.argv0` if access to the original value + * of `argv[0]` is needed. The second element will be the path to the JavaScript + * file being executed. The remaining elements will be any additional command-line + * arguments. + * + * For example, assuming the following script for `process-args.js`: + * + * ```js + * import { argv } from 'node:process'; + * + * // print process.argv + * argv.forEach((val, index) => { + * console.log(`${index}: ${val}`); + * }); + * ``` + * + * Launching the Node.js process as: + * + * ```bash + * node process-args.js one two=three four + * ``` + * + * Would generate the output: + * + * ```text + * 0: /usr/local/bin/node + * 1: /Users/mjr/work/node/process-args.js + * 2: one + * 3: two=three + * 4: four + * ``` + * @since v0.1.27 + */ + argv: string[]; + /** + * The `process.argv0` property stores a read-only copy of the original value of`argv[0]` passed when Node.js starts. + * + * ```console + * $ bash -c 'exec -a customArgv0 ./node' + * > process.argv[0] + * '/Volumes/code/external/node/out/Release/node' + * > process.argv0 + * 'customArgv0' + * ``` + * @since v6.4.0 + */ + argv0: string; + /** + * The `process.execArgv` property returns the set of Node.js-specific command-line + * options passed when the Node.js process was launched. These options do not + * appear in the array returned by the {@link argv} property, and do not + * include the Node.js executable, the name of the script, or any options following + * the script name. These options are useful in order to spawn child processes with + * the same execution environment as the parent. + * + * ```bash + * node --harmony script.js --version + * ``` + * + * Results in `process.execArgv`: + * + * ```js + * ['--harmony'] + * ``` + * + * And `process.argv`: + * + * ```js + * ['/usr/local/bin/node', 'script.js', '--version'] + * ``` + * + * Refer to `Worker constructor` for the detailed behavior of worker + * threads with this property. + * @since v0.7.7 + */ + execArgv: string[]; + /** + * The `process.execPath` property returns the absolute pathname of the executable + * that started the Node.js process. Symbolic links, if any, are resolved. + * + * ```js + * '/usr/local/bin/node' + * ``` + * @since v0.1.100 + */ + execPath: string; + /** + * The `process.abort()` method causes the Node.js process to exit immediately and + * generate a core file. + * + * This feature is not available in `Worker` threads. + * @since v0.7.0 + */ + abort(): never; + /** + * The `process.chdir()` method changes the current working directory of the + * Node.js process or throws an exception if doing so fails (for instance, if + * the specified `directory` does not exist). + * + * ```js + * import { chdir, cwd } from 'node:process'; + * + * console.log(`Starting directory: ${cwd()}`); + * try { + * chdir('/tmp'); + * console.log(`New directory: ${cwd()}`); + * } catch (err) { + * console.error(`chdir: ${err}`); + * } + * ``` + * + * This feature is not available in `Worker` threads. + * @since v0.1.17 + */ + chdir(directory: string): void; + /** + * The `process.cwd()` method returns the current working directory of the Node.js + * process. + * + * ```js + * import { cwd } from 'node:process'; + * + * console.log(`Current directory: ${cwd()}`); + * ``` + * @since v0.1.8 + */ + cwd(): string; + /** + * The port used by the Node.js debugger when enabled. + * + * ```js + * import process from 'node:process'; + * + * process.debugPort = 5858; + * ``` + * @since v0.7.2 + */ + debugPort: number; + /** + * The `process.emitWarning()` method can be used to emit custom or application + * specific process warnings. These can be listened for by adding a handler to the `'warning'` event. + * + * ```js + * import { emitWarning } from 'node:process'; + * + * // Emit a warning with a code and additional detail. + * emitWarning('Something happened!', { + * code: 'MY_WARNING', + * detail: 'This is some additional information', + * }); + * // Emits: + * // (node:56338) [MY_WARNING] Warning: Something happened! + * // This is some additional information + * ``` + * + * In this example, an `Error` object is generated internally by`process.emitWarning()` and passed through to the `'warning'` handler. + * + * ```js + * import process from 'node:process'; + * + * process.on('warning', (warning) => { + * console.warn(warning.name); // 'Warning' + * console.warn(warning.message); // 'Something happened!' + * console.warn(warning.code); // 'MY_WARNING' + * console.warn(warning.stack); // Stack trace + * console.warn(warning.detail); // 'This is some additional information' + * }); + * ``` + * + * If `warning` is passed as an `Error` object, the `options` argument is ignored. + * @since v8.0.0 + * @param warning The warning to emit. + */ + emitWarning(warning: string | Error, ctor?: Function): void; + emitWarning(warning: string | Error, type?: string, ctor?: Function): void; + emitWarning(warning: string | Error, type?: string, code?: string, ctor?: Function): void; + emitWarning(warning: string | Error, options?: EmitWarningOptions): void; + /** + * The `process.env` property returns an object containing the user environment. + * See [`environ(7)`](http://man7.org/linux/man-pages/man7/environ.7.html). + * + * An example of this object looks like: + * + * ```js + * { + * TERM: 'xterm-256color', + * SHELL: '/usr/local/bin/bash', + * USER: 'maciej', + * PATH: '~/.bin/:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin', + * PWD: '/Users/maciej', + * EDITOR: 'vim', + * SHLVL: '1', + * HOME: '/Users/maciej', + * LOGNAME: 'maciej', + * _: '/usr/local/bin/node' + * } + * ``` + * + * It is possible to modify this object, but such modifications will not be + * reflected outside the Node.js process, or (unless explicitly requested) + * to other `Worker` threads. + * In other words, the following example would not work: + * + * ```bash + * node -e 'process.env.foo = "bar"' && echo $foo + * ``` + * + * While the following will: + * + * ```js + * import { env } from 'node:process'; + * + * env.foo = 'bar'; + * console.log(env.foo); + * ``` + * + * Assigning a property on `process.env` will implicitly convert the value + * to a string. **This behavior is deprecated.** Future versions of Node.js may + * throw an error when the value is not a string, number, or boolean. + * + * ```js + * import { env } from 'node:process'; + * + * env.test = null; + * console.log(env.test); + * // => 'null' + * env.test = undefined; + * console.log(env.test); + * // => 'undefined' + * ``` + * + * Use `delete` to delete a property from `process.env`. + * + * ```js + * import { env } from 'node:process'; + * + * env.TEST = 1; + * delete env.TEST; + * console.log(env.TEST); + * // => undefined + * ``` + * + * On Windows operating systems, environment variables are case-insensitive. + * + * ```js + * import { env } from 'node:process'; + * + * env.TEST = 1; + * console.log(env.test); + * // => 1 + * ``` + * + * Unless explicitly specified when creating a `Worker` instance, + * each `Worker` thread has its own copy of `process.env`, based on its + * parent thread's `process.env`, or whatever was specified as the `env` option + * to the `Worker` constructor. Changes to `process.env` will not be visible + * across `Worker` threads, and only the main thread can make changes that + * are visible to the operating system or to native add-ons. On Windows, a copy of`process.env` on a `Worker` instance operates in a case-sensitive manner + * unlike the main thread. + * @since v0.1.27 + */ + env: ProcessEnv; + /** + * The `process.exit()` method instructs Node.js to terminate the process + * synchronously with an exit status of `code`. If `code` is omitted, exit uses + * either the 'success' code `0` or the value of `process.exitCode` if it has been + * set. Node.js will not terminate until all the `'exit'` event listeners are + * called. + * + * To exit with a 'failure' code: + * + * ```js + * import { exit } from 'node:process'; + * + * exit(1); + * ``` + * + * The shell that executed Node.js should see the exit code as `1`. + * + * Calling `process.exit()` will force the process to exit as quickly as possible + * even if there are still asynchronous operations pending that have not yet + * completed fully, including I/O operations to `process.stdout` and`process.stderr`. + * + * In most situations, it is not actually necessary to call `process.exit()`explicitly. The Node.js process will exit on its own _if there is no additional_ + * _work pending_ in the event loop. The `process.exitCode` property can be set to + * tell the process which exit code to use when the process exits gracefully. + * + * For instance, the following example illustrates a _misuse_ of the`process.exit()` method that could lead to data printed to stdout being + * truncated and lost: + * + * ```js + * import { exit } from 'node:process'; + * + * // This is an example of what *not* to do: + * if (someConditionNotMet()) { + * printUsageToStdout(); + * exit(1); + * } + * ``` + * + * The reason this is problematic is because writes to `process.stdout` in Node.js + * are sometimes _asynchronous_ and may occur over multiple ticks of the Node.js + * event loop. Calling `process.exit()`, however, forces the process to exit _before_ those additional writes to `stdout` can be performed. + * + * Rather than calling `process.exit()` directly, the code _should_ set the`process.exitCode` and allow the process to exit naturally by avoiding + * scheduling any additional work for the event loop: + * + * ```js + * import process from 'node:process'; + * + * // How to properly set the exit code while letting + * // the process exit gracefully. + * if (someConditionNotMet()) { + * printUsageToStdout(); + * process.exitCode = 1; + * } + * ``` + * + * If it is necessary to terminate the Node.js process due to an error condition, + * throwing an _uncaught_ error and allowing the process to terminate accordingly + * is safer than calling `process.exit()`. + * + * In `Worker` threads, this function stops the current thread rather + * than the current process. + * @since v0.1.13 + * @param [code=0] The exit code. For string type, only integer strings (e.g.,'1') are allowed. + */ + exit(code?: number): never; + /** + * A number which will be the process exit code, when the process either + * exits gracefully, or is exited via {@link exit} without specifying + * a code. + * + * Specifying a code to {@link exit} will override any + * previous setting of `process.exitCode`. + * @since v0.11.8 + */ + exitCode?: number | undefined; + /** + * The `process.getgid()` method returns the numerical group identity of the + * process. (See [`getgid(2)`](http://man7.org/linux/man-pages/man2/getgid.2.html).) + * + * ```js + * import process from 'process'; + * + * if (process.getgid) { + * console.log(`Current gid: ${process.getgid()}`); + * } + * ``` + * + * This function is only available on POSIX platforms (i.e. not Windows or + * Android). + * @since v0.1.31 + */ + getgid?: () => number; + /** + * The `process.setgid()` method sets the group identity of the process. (See [`setgid(2)`](http://man7.org/linux/man-pages/man2/setgid.2.html).) The `id` can be passed as either a + * numeric ID or a group name + * string. If a group name is specified, this method blocks while resolving the + * associated numeric ID. + * + * ```js + * import process from 'process'; + * + * if (process.getgid && process.setgid) { + * console.log(`Current gid: ${process.getgid()}`); + * try { + * process.setgid(501); + * console.log(`New gid: ${process.getgid()}`); + * } catch (err) { + * console.log(`Failed to set gid: ${err}`); + * } + * } + * ``` + * + * This function is only available on POSIX platforms (i.e. not Windows or + * Android). + * This feature is not available in `Worker` threads. + * @since v0.1.31 + * @param id The group name or ID + */ + setgid?: (id: number | string) => void; + /** + * The `process.getuid()` method returns the numeric user identity of the process. + * (See [`getuid(2)`](http://man7.org/linux/man-pages/man2/getuid.2.html).) + * + * ```js + * import process from 'process'; + * + * if (process.getuid) { + * console.log(`Current uid: ${process.getuid()}`); + * } + * ``` + * + * This function is only available on POSIX platforms (i.e. not Windows or + * Android). + * @since v0.1.28 + */ + getuid?: () => number; + /** + * The `process.setuid(id)` method sets the user identity of the process. (See [`setuid(2)`](http://man7.org/linux/man-pages/man2/setuid.2.html).) The `id` can be passed as either a + * numeric ID or a username string. + * If a username is specified, the method blocks while resolving the associated + * numeric ID. + * + * ```js + * import process from 'process'; + * + * if (process.getuid && process.setuid) { + * console.log(`Current uid: ${process.getuid()}`); + * try { + * process.setuid(501); + * console.log(`New uid: ${process.getuid()}`); + * } catch (err) { + * console.log(`Failed to set uid: ${err}`); + * } + * } + * ``` + * + * This function is only available on POSIX platforms (i.e. not Windows or + * Android). + * This feature is not available in `Worker` threads. + * @since v0.1.28 + */ + setuid?: (id: number | string) => void; + /** + * The `process.geteuid()` method returns the numerical effective user identity of + * the process. (See [`geteuid(2)`](http://man7.org/linux/man-pages/man2/geteuid.2.html).) + * + * ```js + * import process from 'process'; + * + * if (process.geteuid) { + * console.log(`Current uid: ${process.geteuid()}`); + * } + * ``` + * + * This function is only available on POSIX platforms (i.e. not Windows or + * Android). + * @since v2.0.0 + */ + geteuid?: () => number; + /** + * The `process.seteuid()` method sets the effective user identity of the process. + * (See [`seteuid(2)`](http://man7.org/linux/man-pages/man2/seteuid.2.html).) The `id` can be passed as either a numeric ID or a username + * string. If a username is specified, the method blocks while resolving the + * associated numeric ID. + * + * ```js + * import process from 'process'; + * + * if (process.geteuid && process.seteuid) { + * console.log(`Current uid: ${process.geteuid()}`); + * try { + * process.seteuid(501); + * console.log(`New uid: ${process.geteuid()}`); + * } catch (err) { + * console.log(`Failed to set uid: ${err}`); + * } + * } + * ``` + * + * This function is only available on POSIX platforms (i.e. not Windows or + * Android). + * This feature is not available in `Worker` threads. + * @since v2.0.0 + * @param id A user name or ID + */ + seteuid?: (id: number | string) => void; + /** + * The `process.getegid()` method returns the numerical effective group identity + * of the Node.js process. (See [`getegid(2)`](http://man7.org/linux/man-pages/man2/getegid.2.html).) + * + * ```js + * import process from 'process'; + * + * if (process.getegid) { + * console.log(`Current gid: ${process.getegid()}`); + * } + * ``` + * + * This function is only available on POSIX platforms (i.e. not Windows or + * Android). + * @since v2.0.0 + */ + getegid?: () => number; + /** + * The `process.setegid()` method sets the effective group identity of the process. + * (See [`setegid(2)`](http://man7.org/linux/man-pages/man2/setegid.2.html).) The `id` can be passed as either a numeric ID or a group + * name string. If a group name is specified, this method blocks while resolving + * the associated a numeric ID. + * + * ```js + * import process from 'process'; + * + * if (process.getegid && process.setegid) { + * console.log(`Current gid: ${process.getegid()}`); + * try { + * process.setegid(501); + * console.log(`New gid: ${process.getegid()}`); + * } catch (err) { + * console.log(`Failed to set gid: ${err}`); + * } + * } + * ``` + * + * This function is only available on POSIX platforms (i.e. not Windows or + * Android). + * This feature is not available in `Worker` threads. + * @since v2.0.0 + * @param id A group name or ID + */ + setegid?: (id: number | string) => void; + /** + * The `process.getgroups()` method returns an array with the supplementary group + * IDs. POSIX leaves it unspecified if the effective group ID is included but + * Node.js ensures it always is. + * + * ```js + * import process from 'process'; + * + * if (process.getgroups) { + * console.log(process.getgroups()); // [ 16, 21, 297 ] + * } + * ``` + * + * This function is only available on POSIX platforms (i.e. not Windows or + * Android). + * @since v0.9.4 + */ + getgroups?: () => number[]; + /** + * The `process.setgroups()` method sets the supplementary group IDs for the + * Node.js process. This is a privileged operation that requires the Node.js + * process to have `root` or the `CAP_SETGID` capability. + * + * The `groups` array can contain numeric group IDs, group names, or both. + * + * ```js + * import process from 'process'; + * + * if (process.getgroups && process.setgroups) { + * try { + * process.setgroups([501]); + * console.log(process.getgroups()); // new groups + * } catch (err) { + * console.log(`Failed to set groups: ${err}`); + * } + * } + * ``` + * + * This function is only available on POSIX platforms (i.e. not Windows or + * Android). + * This feature is not available in `Worker` threads. + * @since v0.9.4 + */ + setgroups?: (groups: ReadonlyArray) => void; + /** + * The `process.setUncaughtExceptionCaptureCallback()` function sets a function + * that will be invoked when an uncaught exception occurs, which will receive the + * exception value itself as its first argument. + * + * If such a function is set, the `'uncaughtException'` event will + * not be emitted. If `--abort-on-uncaught-exception` was passed from the + * command line or set through `v8.setFlagsFromString()`, the process will + * not abort. Actions configured to take place on exceptions such as report + * generations will be affected too + * + * To unset the capture function,`process.setUncaughtExceptionCaptureCallback(null)` may be used. Calling this + * method with a non-`null` argument while another capture function is set will + * throw an error. + * + * Using this function is mutually exclusive with using the deprecated `domain` built-in module. + * @since v9.3.0 + */ + setUncaughtExceptionCaptureCallback(cb: ((err: Error) => void) | null): void; + /** + * Indicates whether a callback has been set using {@link setUncaughtExceptionCaptureCallback}. + * @since v9.3.0 + */ + hasUncaughtExceptionCaptureCallback(): boolean; + /** + * The `process.version` property contains the Node.js version string. + * + * ```js + * import { version } from 'node:process'; + * + * console.log(`Version: ${version}`); + * // Version: v14.8.0 + * ``` + * + * To get the version string without the prepended _v_, use`process.versions.node`. + * @since v0.1.3 + */ + readonly version: string; + /** + * The `process.versions` property returns an object listing the version strings of + * Node.js and its dependencies. `process.versions.modules` indicates the current + * ABI version, which is increased whenever a C++ API changes. Node.js will refuse + * to load modules that were compiled against a different module ABI version. + * + * ```js + * import { versions } from 'node:process'; + * + * console.log(versions); + * ``` + * + * Will generate an object similar to: + * + * ```console + * { node: '20.2.0', + * acorn: '8.8.2', + * ada: '2.4.0', + * ares: '1.19.0', + * base64: '0.5.0', + * brotli: '1.0.9', + * cjs_module_lexer: '1.2.2', + * cldr: '43.0', + * icu: '73.1', + * llhttp: '8.1.0', + * modules: '115', + * napi: '8', + * nghttp2: '1.52.0', + * nghttp3: '0.7.0', + * ngtcp2: '0.8.1', + * openssl: '3.0.8+quic', + * simdutf: '3.2.9', + * tz: '2023c', + * undici: '5.22.0', + * unicode: '15.0', + * uv: '1.44.2', + * uvwasi: '0.0.16', + * v8: '11.3.244.8-node.9', + * zlib: '1.2.13' } + * ``` + * @since v0.2.0 + */ + readonly versions: ProcessVersions; + /** + * The `process.config` property returns a frozen `Object` containing the + * JavaScript representation of the configure options used to compile the current + * Node.js executable. This is the same as the `config.gypi` file that was produced + * when running the `./configure` script. + * + * An example of the possible output looks like: + * + * ```js + * { + * target_defaults: + * { cflags: [], + * default_configuration: 'Release', + * defines: [], + * include_dirs: [], + * libraries: [] }, + * variables: + * { + * host_arch: 'x64', + * napi_build_version: 5, + * node_install_npm: 'true', + * node_prefix: '', + * node_shared_cares: 'false', + * node_shared_http_parser: 'false', + * node_shared_libuv: 'false', + * node_shared_zlib: 'false', + * node_use_openssl: 'true', + * node_shared_openssl: 'false', + * strict_aliasing: 'true', + * target_arch: 'x64', + * v8_use_snapshot: 1 + * } + * } + * ``` + * @since v0.7.7 + */ + readonly config: ProcessConfig; + /** + * The `process.kill()` method sends the `signal` to the process identified by`pid`. + * + * Signal names are strings such as `'SIGINT'` or `'SIGHUP'`. See `Signal Events` and [`kill(2)`](http://man7.org/linux/man-pages/man2/kill.2.html) for more information. + * + * This method will throw an error if the target `pid` does not exist. As a special + * case, a signal of `0` can be used to test for the existence of a process. + * Windows platforms will throw an error if the `pid` is used to kill a process + * group. + * + * Even though the name of this function is `process.kill()`, it is really just a + * signal sender, like the `kill` system call. The signal sent may do something + * other than kill the target process. + * + * ```js + * import process, { kill } from 'node:process'; + * + * process.on('SIGHUP', () => { + * console.log('Got SIGHUP signal.'); + * }); + * + * setTimeout(() => { + * console.log('Exiting.'); + * process.exit(0); + * }, 100); + * + * kill(process.pid, 'SIGHUP'); + * ``` + * + * When `SIGUSR1` is received by a Node.js process, Node.js will start the + * debugger. See `Signal Events`. + * @since v0.0.6 + * @param pid A process ID + * @param [signal='SIGTERM'] The signal to send, either as a string or number. + */ + kill(pid: number, signal?: string | number): true; + /** + * The `process.pid` property returns the PID of the process. + * + * ```js + * import { pid } from 'node:process'; + * + * console.log(`This process is pid ${pid}`); + * ``` + * @since v0.1.15 + */ + readonly pid: number; + /** + * The `process.ppid` property returns the PID of the parent of the + * current process. + * + * ```js + * import { ppid } from 'node:process'; + * + * console.log(`The parent process is pid ${ppid}`); + * ``` + * @since v9.2.0, v8.10.0, v6.13.0 + */ + readonly ppid: number; + /** + * The `process.title` property returns the current process title (i.e. returns + * the current value of `ps`). Assigning a new value to `process.title` modifies + * the current value of `ps`. + * + * When a new value is assigned, different platforms will impose different maximum + * length restrictions on the title. Usually such restrictions are quite limited. + * For instance, on Linux and macOS, `process.title` is limited to the size of the + * binary name plus the length of the command-line arguments because setting the`process.title` overwrites the `argv` memory of the process. Node.js v0.8 + * allowed for longer process title strings by also overwriting the `environ`memory but that was potentially insecure and confusing in some (rather obscure) + * cases. + * + * Assigning a value to `process.title` might not result in an accurate label + * within process manager applications such as macOS Activity Monitor or Windows + * Services Manager. + * @since v0.1.104 + */ + title: string; + /** + * The operating system CPU architecture for which the Node.js binary was compiled. + * Possible values are: `'arm'`, `'arm64'`, `'ia32'`, `'mips'`,`'mipsel'`, `'ppc'`,`'ppc64'`, `'s390'`, `'s390x'`, and `'x64'`. + * + * ```js + * import { arch } from 'node:process'; + * + * console.log(`This processor architecture is ${arch}`); + * ``` + * @since v0.5.0 + */ + readonly arch: Architecture; + /** + * The `process.platform` property returns a string identifying the operating + * system platform for which the Node.js binary was compiled. + * + * Currently possible values are: + * + * * `'aix'` + * * `'darwin'` + * * `'freebsd'` + * * `'linux'` + * * `'openbsd'` + * * `'sunos'` + * * `'win32'` + * + * ```js + * import { platform } from 'node:process'; + * + * console.log(`This platform is ${platform}`); + * ``` + * + * The value `'android'` may also be returned if the Node.js is built on the + * Android operating system. However, Android support in Node.js [is experimental](https://github.com/nodejs/node/blob/HEAD/BUILDING.md#androidandroid-based-devices-eg-firefox-os). + * @since v0.1.16 + */ + readonly platform: Platform; + /** + * The `process.mainModule` property provides an alternative way of retrieving `require.main`. The difference is that if the main module changes at + * runtime, `require.main` may still refer to the original main module in + * modules that were required before the change occurred. Generally, it's + * safe to assume that the two refer to the same module. + * + * As with `require.main`, `process.mainModule` will be `undefined` if there + * is no entry script. + * @since v0.1.17 + * @deprecated Since v14.0.0 - Use `main` instead. + */ + mainModule?: Module | undefined; + memoryUsage: MemoryUsageFn; + /** + * Gets the amount of memory available to the process (in bytes) based on + * limits imposed by the OS. If there is no such constraint, or the constraint + * is unknown, `undefined` is returned. + * + * See [`uv_get_constrained_memory`](https://docs.libuv.org/en/v1.x/misc.html#c.uv_get_constrained_memory) for more + * information. + * @since v19.6.0, v18.15.0 + * @experimental + */ + constrainedMemory(): number | undefined; + /** + * The `process.cpuUsage()` method returns the user and system CPU time usage of + * the current process, in an object with properties `user` and `system`, whose + * values are microsecond values (millionth of a second). These values measure time + * spent in user and system code respectively, and may end up being greater than + * actual elapsed time if multiple CPU cores are performing work for this process. + * + * The result of a previous call to `process.cpuUsage()` can be passed as the + * argument to the function, to get a diff reading. + * + * ```js + * import { cpuUsage } from 'node:process'; + * + * const startUsage = cpuUsage(); + * // { user: 38579, system: 6986 } + * + * // spin the CPU for 500 milliseconds + * const now = Date.now(); + * while (Date.now() - now < 500); + * + * console.log(cpuUsage(startUsage)); + * // { user: 514883, system: 11226 } + * ``` + * @since v6.1.0 + * @param previousValue A previous return value from calling `process.cpuUsage()` + */ + cpuUsage(previousValue?: CpuUsage): CpuUsage; + /** + * `process.nextTick()` adds `callback` to the "next tick queue". This queue is + * fully drained after the current operation on the JavaScript stack runs to + * completion and before the event loop is allowed to continue. It's possible to + * create an infinite loop if one were to recursively call `process.nextTick()`. + * See the [Event Loop](https://nodejs.org/en/docs/guides/event-loop-timers-and-nexttick/#process-nexttick) guide for more background. + * + * ```js + * import { nextTick } from 'node:process'; + * + * console.log('start'); + * nextTick(() => { + * console.log('nextTick callback'); + * }); + * console.log('scheduled'); + * // Output: + * // start + * // scheduled + * // nextTick callback + * ``` + * + * This is important when developing APIs in order to give users the opportunity + * to assign event handlers _after_ an object has been constructed but before any + * I/O has occurred: + * + * ```js + * import { nextTick } from 'node:process'; + * + * function MyThing(options) { + * this.setupOptions(options); + * + * nextTick(() => { + * this.startDoingStuff(); + * }); + * } + * + * const thing = new MyThing(); + * thing.getReadyForStuff(); + * + * // thing.startDoingStuff() gets called now, not before. + * ``` + * + * It is very important for APIs to be either 100% synchronous or 100% + * asynchronous. Consider this example: + * + * ```js + * // WARNING! DO NOT USE! BAD UNSAFE HAZARD! + * function maybeSync(arg, cb) { + * if (arg) { + * cb(); + * return; + * } + * + * fs.stat('file', cb); + * } + * ``` + * + * This API is hazardous because in the following case: + * + * ```js + * const maybeTrue = Math.random() > 0.5; + * + * maybeSync(maybeTrue, () => { + * foo(); + * }); + * + * bar(); + * ``` + * + * It is not clear whether `foo()` or `bar()` will be called first. + * + * The following approach is much better: + * + * ```js + * import { nextTick } from 'node:process'; + * + * function definitelyAsync(arg, cb) { + * if (arg) { + * nextTick(cb); + * return; + * } + * + * fs.stat('file', cb); + * } + * ``` + * @since v0.1.26 + * @param args Additional arguments to pass when invoking the `callback` + */ + nextTick(callback: Function, ...args: any[]): void; + /** + * The `process.release` property returns an `Object` containing metadata related + * to the current release, including URLs for the source tarball and headers-only + * tarball. + * + * `process.release` contains the following properties: + * + * ```js + * { + * name: 'node', + * lts: 'Hydrogen', + * sourceUrl: 'https://nodejs.org/download/release/v18.12.0/node-v18.12.0.tar.gz', + * headersUrl: 'https://nodejs.org/download/release/v18.12.0/node-v18.12.0-headers.tar.gz', + * libUrl: 'https://nodejs.org/download/release/v18.12.0/win-x64/node.lib' + * } + * ``` + * + * In custom builds from non-release versions of the source tree, only the`name` property may be present. The additional properties should not be + * relied upon to exist. + * @since v3.0.0 + */ + readonly release: ProcessRelease; + features: { + inspector: boolean; + debug: boolean; + uv: boolean; + ipv6: boolean; + tls_alpn: boolean; + tls_sni: boolean; + tls_ocsp: boolean; + tls: boolean; + }; + /** + * `process.umask()` returns the Node.js process's file mode creation mask. Child + * processes inherit the mask from the parent process. + * @since v0.1.19 + * @deprecated Calling `process.umask()` with no argument causes the process-wide umask to be written twice. This introduces a race condition between threads, and is a potential * + * security vulnerability. There is no safe, cross-platform alternative API. + */ + umask(): number; + /** + * Can only be set if not in worker thread. + */ + umask(mask: string | number): number; + /** + * The `process.uptime()` method returns the number of seconds the current Node.js + * process has been running. + * + * The return value includes fractions of a second. Use `Math.floor()` to get whole + * seconds. + * @since v0.5.0 + */ + uptime(): number; + hrtime: HRTime; + /** + * If Node.js is spawned with an IPC channel, the `process.send()` method can be + * used to send messages to the parent process. Messages will be received as a `'message'` event on the parent's `ChildProcess` object. + * + * If Node.js was not spawned with an IPC channel, `process.send` will be `undefined`. + * + * The message goes through serialization and parsing. The resulting message might + * not be the same as what is originally sent. + * @since v0.5.9 + * @param options used to parameterize the sending of certain types of handles.`options` supports the following properties: + */ + send?( + message: any, + sendHandle?: any, + options?: { + swallowErrors?: boolean | undefined; + }, + callback?: (error: Error | null) => void, + ): boolean; + /** + * If the Node.js process is spawned with an IPC channel (see the `Child Process` and `Cluster` documentation), the `process.disconnect()` method will close the + * IPC channel to the parent process, allowing the child process to exit gracefully + * once there are no other connections keeping it alive. + * + * The effect of calling `process.disconnect()` is the same as calling `ChildProcess.disconnect()` from the parent process. + * + * If the Node.js process was not spawned with an IPC channel,`process.disconnect()` will be `undefined`. + * @since v0.7.2 + */ + disconnect(): void; + /** + * If the Node.js process is spawned with an IPC channel (see the `Child Process` and `Cluster` documentation), the `process.connected` property will return`true` so long as the IPC + * channel is connected and will return `false` after`process.disconnect()` is called. + * + * Once `process.connected` is `false`, it is no longer possible to send messages + * over the IPC channel using `process.send()`. + * @since v0.7.2 + */ + connected: boolean; + /** + * The `process.allowedNodeEnvironmentFlags` property is a special, + * read-only `Set` of flags allowable within the `NODE_OPTIONS` environment variable. + * + * `process.allowedNodeEnvironmentFlags` extends `Set`, but overrides`Set.prototype.has` to recognize several different possible flag + * representations. `process.allowedNodeEnvironmentFlags.has()` will + * return `true` in the following cases: + * + * * Flags may omit leading single (`-`) or double (`--`) dashes; e.g.,`inspect-brk` for `--inspect-brk`, or `r` for `-r`. + * * Flags passed through to V8 (as listed in `--v8-options`) may replace + * one or more _non-leading_ dashes for an underscore, or vice-versa; + * e.g., `--perf_basic_prof`, `--perf-basic-prof`, `--perf_basic-prof`, + * etc. + * * Flags may contain one or more equals (`=`) characters; all + * characters after and including the first equals will be ignored; + * e.g., `--stack-trace-limit=100`. + * * Flags _must_ be allowable within `NODE_OPTIONS`. + * + * When iterating over `process.allowedNodeEnvironmentFlags`, flags will + * appear only _once_; each will begin with one or more dashes. Flags + * passed through to V8 will contain underscores instead of non-leading + * dashes: + * + * ```js + * import { allowedNodeEnvironmentFlags } from 'node:process'; + * + * allowedNodeEnvironmentFlags.forEach((flag) => { + * // -r + * // --inspect-brk + * // --abort_on_uncaught_exception + * // ... + * }); + * ``` + * + * The methods `add()`, `clear()`, and `delete()` of`process.allowedNodeEnvironmentFlags` do nothing, and will fail + * silently. + * + * If Node.js was compiled _without_ `NODE_OPTIONS` support (shown in {@link config}), `process.allowedNodeEnvironmentFlags` will + * contain what _would have_ been allowable. + * @since v10.10.0 + */ + allowedNodeEnvironmentFlags: ReadonlySet; + /** + * `process.report` is an object whose methods are used to generate diagnostic + * reports for the current process. Additional documentation is available in the `report documentation`. + * @since v11.8.0 + */ + report?: ProcessReport | undefined; + /** + * ```js + * import { resourceUsage } from 'node:process'; + * + * console.log(resourceUsage()); + * /* + * Will output: + * { + * userCPUTime: 82872, + * systemCPUTime: 4143, + * maxRSS: 33164, + * sharedMemorySize: 0, + * unsharedDataSize: 0, + * unsharedStackSize: 0, + * minorPageFault: 2469, + * majorPageFault: 0, + * swappedOut: 0, + * fsRead: 0, + * fsWrite: 8, + * ipcSent: 0, + * ipcReceived: 0, + * signalsCount: 0, + * voluntaryContextSwitches: 79, + * involuntaryContextSwitches: 1 + * } + * + * ``` + * @since v12.6.0 + * @return the resource usage for the current process. All of these values come from the `uv_getrusage` call which returns a [`uv_rusage_t` struct][uv_rusage_t]. + */ + resourceUsage(): ResourceUsage; + /** + * The `process.traceDeprecation` property indicates whether the`--trace-deprecation` flag is set on the current Node.js process. See the + * documentation for the `'warning' event` and the `emitWarning() method` for more information about this + * flag's behavior. + * @since v0.8.0 + */ + traceDeprecation: boolean; + /* EventEmitter */ + addListener(event: "beforeExit", listener: BeforeExitListener): this; + addListener(event: "disconnect", listener: DisconnectListener): this; + addListener(event: "exit", listener: ExitListener): this; + addListener(event: "rejectionHandled", listener: RejectionHandledListener): this; + addListener(event: "uncaughtException", listener: UncaughtExceptionListener): this; + addListener(event: "uncaughtExceptionMonitor", listener: UncaughtExceptionListener): this; + addListener(event: "unhandledRejection", listener: UnhandledRejectionListener): this; + addListener(event: "warning", listener: WarningListener): this; + addListener(event: "message", listener: MessageListener): this; + addListener(event: Signals, listener: SignalsListener): this; + addListener(event: "multipleResolves", listener: MultipleResolveListener): this; + addListener(event: "worker", listener: WorkerListener): this; + emit(event: "beforeExit", code: number): boolean; + emit(event: "disconnect"): boolean; + emit(event: "exit", code: number): boolean; + emit(event: "rejectionHandled", promise: Promise): boolean; + emit(event: "uncaughtException", error: Error): boolean; + emit(event: "uncaughtExceptionMonitor", error: Error): boolean; + emit(event: "unhandledRejection", reason: unknown, promise: Promise): boolean; + emit(event: "warning", warning: Error): boolean; + emit(event: "message", message: unknown, sendHandle: unknown): this; + emit(event: Signals, signal?: Signals): boolean; + emit( + event: "multipleResolves", + type: MultipleResolveType, + promise: Promise, + value: unknown, + ): this; + emit(event: "worker", listener: WorkerListener): this; + on(event: "beforeExit", listener: BeforeExitListener): this; + on(event: "disconnect", listener: DisconnectListener): this; + on(event: "exit", listener: ExitListener): this; + on(event: "rejectionHandled", listener: RejectionHandledListener): this; + on(event: "uncaughtException", listener: UncaughtExceptionListener): this; + on(event: "uncaughtExceptionMonitor", listener: UncaughtExceptionListener): this; + on(event: "unhandledRejection", listener: UnhandledRejectionListener): this; + on(event: "warning", listener: WarningListener): this; + on(event: "message", listener: MessageListener): this; + on(event: Signals, listener: SignalsListener): this; + on(event: "multipleResolves", listener: MultipleResolveListener): this; + on(event: "worker", listener: WorkerListener): this; + on(event: string | symbol, listener: (...args: any[]) => void): this; + once(event: "beforeExit", listener: BeforeExitListener): this; + once(event: "disconnect", listener: DisconnectListener): this; + once(event: "exit", listener: ExitListener): this; + once(event: "rejectionHandled", listener: RejectionHandledListener): this; + once(event: "uncaughtException", listener: UncaughtExceptionListener): this; + once(event: "uncaughtExceptionMonitor", listener: UncaughtExceptionListener): this; + once(event: "unhandledRejection", listener: UnhandledRejectionListener): this; + once(event: "warning", listener: WarningListener): this; + once(event: "message", listener: MessageListener): this; + once(event: Signals, listener: SignalsListener): this; + once(event: "multipleResolves", listener: MultipleResolveListener): this; + once(event: "worker", listener: WorkerListener): this; + once(event: string | symbol, listener: (...args: any[]) => void): this; + prependListener(event: "beforeExit", listener: BeforeExitListener): this; + prependListener(event: "disconnect", listener: DisconnectListener): this; + prependListener(event: "exit", listener: ExitListener): this; + prependListener(event: "rejectionHandled", listener: RejectionHandledListener): this; + prependListener(event: "uncaughtException", listener: UncaughtExceptionListener): this; + prependListener(event: "uncaughtExceptionMonitor", listener: UncaughtExceptionListener): this; + prependListener(event: "unhandledRejection", listener: UnhandledRejectionListener): this; + prependListener(event: "warning", listener: WarningListener): this; + prependListener(event: "message", listener: MessageListener): this; + prependListener(event: Signals, listener: SignalsListener): this; + prependListener(event: "multipleResolves", listener: MultipleResolveListener): this; + prependListener(event: "worker", listener: WorkerListener): this; + prependOnceListener(event: "beforeExit", listener: BeforeExitListener): this; + prependOnceListener(event: "disconnect", listener: DisconnectListener): this; + prependOnceListener(event: "exit", listener: ExitListener): this; + prependOnceListener(event: "rejectionHandled", listener: RejectionHandledListener): this; + prependOnceListener(event: "uncaughtException", listener: UncaughtExceptionListener): this; + prependOnceListener(event: "uncaughtExceptionMonitor", listener: UncaughtExceptionListener): this; + prependOnceListener(event: "unhandledRejection", listener: UnhandledRejectionListener): this; + prependOnceListener(event: "warning", listener: WarningListener): this; + prependOnceListener(event: "message", listener: MessageListener): this; + prependOnceListener(event: Signals, listener: SignalsListener): this; + prependOnceListener(event: "multipleResolves", listener: MultipleResolveListener): this; + prependOnceListener(event: "worker", listener: WorkerListener): this; + listeners(event: "beforeExit"): BeforeExitListener[]; + listeners(event: "disconnect"): DisconnectListener[]; + listeners(event: "exit"): ExitListener[]; + listeners(event: "rejectionHandled"): RejectionHandledListener[]; + listeners(event: "uncaughtException"): UncaughtExceptionListener[]; + listeners(event: "uncaughtExceptionMonitor"): UncaughtExceptionListener[]; + listeners(event: "unhandledRejection"): UnhandledRejectionListener[]; + listeners(event: "warning"): WarningListener[]; + listeners(event: "message"): MessageListener[]; + listeners(event: Signals): SignalsListener[]; + listeners(event: "multipleResolves"): MultipleResolveListener[]; + listeners(event: "worker"): WorkerListener[]; + } + } + } + export = process; +} +declare module "node:process" { + import process = require("process"); + export = process; +} diff --git a/Url-Shortner/node_modules/@types/node/ts4.8/punycode.d.ts b/Url-Shortner/node_modules/@types/node/ts4.8/punycode.d.ts new file mode 100644 index 0000000..64ddd3e --- /dev/null +++ b/Url-Shortner/node_modules/@types/node/ts4.8/punycode.d.ts @@ -0,0 +1,117 @@ +/** + * **The version of the punycode module bundled in Node.js is being deprecated.**In a future major version of Node.js this module will be removed. Users + * currently depending on the `punycode` module should switch to using the + * userland-provided [Punycode.js](https://github.com/bestiejs/punycode.js) module instead. For punycode-based URL + * encoding, see `url.domainToASCII` or, more generally, the `WHATWG URL API`. + * + * The `punycode` module is a bundled version of the [Punycode.js](https://github.com/bestiejs/punycode.js) module. It + * can be accessed using: + * + * ```js + * const punycode = require('punycode'); + * ``` + * + * [Punycode](https://tools.ietf.org/html/rfc3492) is a character encoding scheme defined by RFC 3492 that is + * primarily intended for use in Internationalized Domain Names. Because host + * names in URLs are limited to ASCII characters only, Domain Names that contain + * non-ASCII characters must be converted into ASCII using the Punycode scheme. + * For instance, the Japanese character that translates into the English word,`'example'` is `'例'`. The Internationalized Domain Name, `'例.com'` (equivalent + * to `'example.com'`) is represented by Punycode as the ASCII string`'xn--fsq.com'`. + * + * The `punycode` module provides a simple implementation of the Punycode standard. + * + * The `punycode` module is a third-party dependency used by Node.js and + * made available to developers as a convenience. Fixes or other modifications to + * the module must be directed to the [Punycode.js](https://github.com/bestiejs/punycode.js) project. + * @deprecated Since v7.0.0 - Deprecated + * @see [source](https://github.com/nodejs/node/blob/v20.2.0/lib/punycode.js) + */ +declare module "punycode" { + /** + * The `punycode.decode()` method converts a [Punycode](https://tools.ietf.org/html/rfc3492) string of ASCII-only + * characters to the equivalent string of Unicode codepoints. + * + * ```js + * punycode.decode('maana-pta'); // 'mañana' + * punycode.decode('--dqo34k'); // '☃-⌘' + * ``` + * @since v0.5.1 + */ + function decode(string: string): string; + /** + * The `punycode.encode()` method converts a string of Unicode codepoints to a [Punycode](https://tools.ietf.org/html/rfc3492) string of ASCII-only characters. + * + * ```js + * punycode.encode('mañana'); // 'maana-pta' + * punycode.encode('☃-⌘'); // '--dqo34k' + * ``` + * @since v0.5.1 + */ + function encode(string: string): string; + /** + * The `punycode.toUnicode()` method converts a string representing a domain name + * containing [Punycode](https://tools.ietf.org/html/rfc3492) encoded characters into Unicode. Only the [Punycode](https://tools.ietf.org/html/rfc3492) encoded parts of the domain name are be + * converted. + * + * ```js + * // decode domain names + * punycode.toUnicode('xn--maana-pta.com'); // 'mañana.com' + * punycode.toUnicode('xn----dqo34k.com'); // '☃-⌘.com' + * punycode.toUnicode('example.com'); // 'example.com' + * ``` + * @since v0.6.1 + */ + function toUnicode(domain: string): string; + /** + * The `punycode.toASCII()` method converts a Unicode string representing an + * Internationalized Domain Name to [Punycode](https://tools.ietf.org/html/rfc3492). Only the non-ASCII parts of the + * domain name will be converted. Calling `punycode.toASCII()` on a string that + * already only contains ASCII characters will have no effect. + * + * ```js + * // encode domain names + * punycode.toASCII('mañana.com'); // 'xn--maana-pta.com' + * punycode.toASCII('☃-⌘.com'); // 'xn----dqo34k.com' + * punycode.toASCII('example.com'); // 'example.com' + * ``` + * @since v0.6.1 + */ + function toASCII(domain: string): string; + /** + * @deprecated since v7.0.0 + * The version of the punycode module bundled in Node.js is being deprecated. + * In a future major version of Node.js this module will be removed. + * Users currently depending on the punycode module should switch to using + * the userland-provided Punycode.js module instead. + */ + const ucs2: ucs2; + interface ucs2 { + /** + * @deprecated since v7.0.0 + * The version of the punycode module bundled in Node.js is being deprecated. + * In a future major version of Node.js this module will be removed. + * Users currently depending on the punycode module should switch to using + * the userland-provided Punycode.js module instead. + */ + decode(string: string): number[]; + /** + * @deprecated since v7.0.0 + * The version of the punycode module bundled in Node.js is being deprecated. + * In a future major version of Node.js this module will be removed. + * Users currently depending on the punycode module should switch to using + * the userland-provided Punycode.js module instead. + */ + encode(codePoints: ReadonlyArray): string; + } + /** + * @deprecated since v7.0.0 + * The version of the punycode module bundled in Node.js is being deprecated. + * In a future major version of Node.js this module will be removed. + * Users currently depending on the punycode module should switch to using + * the userland-provided Punycode.js module instead. + */ + const version: string; +} +declare module "node:punycode" { + export * from "punycode"; +} diff --git a/Url-Shortner/node_modules/@types/node/ts4.8/querystring.d.ts b/Url-Shortner/node_modules/@types/node/ts4.8/querystring.d.ts new file mode 100644 index 0000000..388ebc3 --- /dev/null +++ b/Url-Shortner/node_modules/@types/node/ts4.8/querystring.d.ts @@ -0,0 +1,141 @@ +/** + * The `node:querystring` module provides utilities for parsing and formatting URL + * query strings. It can be accessed using: + * + * ```js + * const querystring = require('node:querystring'); + * ``` + * + * `querystring` is more performant than `URLSearchParams` but is not a + * standardized API. Use `URLSearchParams` when performance is not critical or + * when compatibility with browser code is desirable. + * @see [source](https://github.com/nodejs/node/blob/v20.2.0/lib/querystring.js) + */ +declare module "querystring" { + interface StringifyOptions { + encodeURIComponent?: ((str: string) => string) | undefined; + } + interface ParseOptions { + maxKeys?: number | undefined; + decodeURIComponent?: ((str: string) => string) | undefined; + } + interface ParsedUrlQuery extends NodeJS.Dict {} + interface ParsedUrlQueryInput extends + NodeJS.Dict< + | string + | number + | boolean + | ReadonlyArray + | ReadonlyArray + | ReadonlyArray + | null + > + {} + /** + * The `querystring.stringify()` method produces a URL query string from a + * given `obj` by iterating through the object's "own properties". + * + * It serializes the following types of values passed in `obj`:[string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type) | + * [number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type) | + * [bigint](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt) | + * [boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Boolean_type) | + * [string\[\]](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type) | + * [number\[\]](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type) | + * [bigint\[\]](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt) | + * [boolean\[\]](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Boolean_type) The numeric values must be finite. Any other input values will be coerced to + * empty strings. + * + * ```js + * querystring.stringify({ foo: 'bar', baz: ['qux', 'quux'], corge: '' }); + * // Returns 'foo=bar&baz=qux&baz=quux&corge=' + * + * querystring.stringify({ foo: 'bar', baz: 'qux' }, ';', ':'); + * // Returns 'foo:bar;baz:qux' + * ``` + * + * By default, characters requiring percent-encoding within the query string will + * be encoded as UTF-8\. If an alternative encoding is required, then an alternative`encodeURIComponent` option will need to be specified: + * + * ```js + * // Assuming gbkEncodeURIComponent function already exists, + * + * querystring.stringify({ w: '中文', foo: 'bar' }, null, null, + * { encodeURIComponent: gbkEncodeURIComponent }); + * ``` + * @since v0.1.25 + * @param obj The object to serialize into a URL query string + * @param [sep='&'] The substring used to delimit key and value pairs in the query string. + * @param [eq='='] . The substring used to delimit keys and values in the query string. + */ + function stringify(obj?: ParsedUrlQueryInput, sep?: string, eq?: string, options?: StringifyOptions): string; + /** + * The `querystring.parse()` method parses a URL query string (`str`) into a + * collection of key and value pairs. + * + * For example, the query string `'foo=bar&abc=xyz&abc=123'` is parsed into: + * + * ```js + * { + * foo: 'bar', + * abc: ['xyz', '123'] + * } + * ``` + * + * The object returned by the `querystring.parse()` method _does not_prototypically inherit from the JavaScript `Object`. This means that typical`Object` methods such as `obj.toString()`, + * `obj.hasOwnProperty()`, and others + * are not defined and _will not work_. + * + * By default, percent-encoded characters within the query string will be assumed + * to use UTF-8 encoding. If an alternative character encoding is used, then an + * alternative `decodeURIComponent` option will need to be specified: + * + * ```js + * // Assuming gbkDecodeURIComponent function already exists... + * + * querystring.parse('w=%D6%D0%CE%C4&foo=bar', null, null, + * { decodeURIComponent: gbkDecodeURIComponent }); + * ``` + * @since v0.1.25 + * @param str The URL query string to parse + * @param [sep='&'] The substring used to delimit key and value pairs in the query string. + * @param [eq='='] . The substring used to delimit keys and values in the query string. + */ + function parse(str: string, sep?: string, eq?: string, options?: ParseOptions): ParsedUrlQuery; + /** + * The querystring.encode() function is an alias for querystring.stringify(). + */ + const encode: typeof stringify; + /** + * The querystring.decode() function is an alias for querystring.parse(). + */ + const decode: typeof parse; + /** + * The `querystring.escape()` method performs URL percent-encoding on the given`str` in a manner that is optimized for the specific requirements of URL + * query strings. + * + * The `querystring.escape()` method is used by `querystring.stringify()` and is + * generally not expected to be used directly. It is exported primarily to allow + * application code to provide a replacement percent-encoding implementation if + * necessary by assigning `querystring.escape` to an alternative function. + * @since v0.1.25 + */ + function escape(str: string): string; + /** + * The `querystring.unescape()` method performs decoding of URL percent-encoded + * characters on the given `str`. + * + * The `querystring.unescape()` method is used by `querystring.parse()` and is + * generally not expected to be used directly. It is exported primarily to allow + * application code to provide a replacement decoding implementation if + * necessary by assigning `querystring.unescape` to an alternative function. + * + * By default, the `querystring.unescape()` method will attempt to use the + * JavaScript built-in `decodeURIComponent()` method to decode. If that fails, + * a safer equivalent that does not throw on malformed URLs will be used. + * @since v0.1.25 + */ + function unescape(str: string): string; +} +declare module "node:querystring" { + export * from "querystring"; +} diff --git a/Url-Shortner/node_modules/@types/node/ts4.8/readline.d.ts b/Url-Shortner/node_modules/@types/node/ts4.8/readline.d.ts new file mode 100644 index 0000000..b06d58b --- /dev/null +++ b/Url-Shortner/node_modules/@types/node/ts4.8/readline.d.ts @@ -0,0 +1,539 @@ +/** + * The `node:readline` module provides an interface for reading data from a `Readable` stream (such as `process.stdin`) one line at a time. + * + * To use the promise-based APIs: + * + * ```js + * import * as readline from 'node:readline/promises'; + * ``` + * + * To use the callback and sync APIs: + * + * ```js + * import * as readline from 'node:readline'; + * ``` + * + * The following simple example illustrates the basic use of the `node:readline`module. + * + * ```js + * import * as readline from 'node:readline/promises'; + * import { stdin as input, stdout as output } from 'node:process'; + * + * const rl = readline.createInterface({ input, output }); + * + * const answer = await rl.question('What do you think of Node.js? '); + * + * console.log(`Thank you for your valuable feedback: ${answer}`); + * + * rl.close(); + * ``` + * + * Once this code is invoked, the Node.js application will not terminate until the`readline.Interface` is closed because the interface waits for data to be + * received on the `input` stream. + * @see [source](https://github.com/nodejs/node/blob/v20.2.0/lib/readline.js) + */ +declare module "readline" { + import { Abortable, EventEmitter } from "node:events"; + import * as promises from "node:readline/promises"; + export { promises }; + export interface Key { + sequence?: string | undefined; + name?: string | undefined; + ctrl?: boolean | undefined; + meta?: boolean | undefined; + shift?: boolean | undefined; + } + /** + * Instances of the `readline.Interface` class are constructed using the`readline.createInterface()` method. Every instance is associated with a + * single `input` `Readable` stream and a single `output` `Writable` stream. + * The `output` stream is used to print prompts for user input that arrives on, + * and is read from, the `input` stream. + * @since v0.1.104 + */ + export class Interface extends EventEmitter { + readonly terminal: boolean; + /** + * The current input data being processed by node. + * + * This can be used when collecting input from a TTY stream to retrieve the + * current value that has been processed thus far, prior to the `line` event + * being emitted. Once the `line` event has been emitted, this property will + * be an empty string. + * + * Be aware that modifying the value during the instance runtime may have + * unintended consequences if `rl.cursor` is not also controlled. + * + * **If not using a TTY stream for input, use the `'line'` event.** + * + * One possible use case would be as follows: + * + * ```js + * const values = ['lorem ipsum', 'dolor sit amet']; + * const rl = readline.createInterface(process.stdin); + * const showResults = debounce(() => { + * console.log( + * '\n', + * values.filter((val) => val.startsWith(rl.line)).join(' '), + * ); + * }, 300); + * process.stdin.on('keypress', (c, k) => { + * showResults(); + * }); + * ``` + * @since v0.1.98 + */ + readonly line: string; + /** + * The cursor position relative to `rl.line`. + * + * This will track where the current cursor lands in the input string, when + * reading input from a TTY stream. The position of cursor determines the + * portion of the input string that will be modified as input is processed, + * as well as the column where the terminal caret will be rendered. + * @since v0.1.98 + */ + readonly cursor: number; + /** + * NOTE: According to the documentation: + * + * > Instances of the `readline.Interface` class are constructed using the + * > `readline.createInterface()` method. + * + * @see https://nodejs.org/dist/latest-v20.x/docs/api/readline.html#class-interfaceconstructor + */ + protected constructor( + input: NodeJS.ReadableStream, + output?: NodeJS.WritableStream, + completer?: Completer | AsyncCompleter, + terminal?: boolean, + ); + /** + * NOTE: According to the documentation: + * + * > Instances of the `readline.Interface` class are constructed using the + * > `readline.createInterface()` method. + * + * @see https://nodejs.org/dist/latest-v20.x/docs/api/readline.html#class-interfaceconstructor + */ + protected constructor(options: ReadLineOptions); + /** + * The `rl.getPrompt()` method returns the current prompt used by `rl.prompt()`. + * @since v15.3.0, v14.17.0 + * @return the current prompt string + */ + getPrompt(): string; + /** + * The `rl.setPrompt()` method sets the prompt that will be written to `output`whenever `rl.prompt()` is called. + * @since v0.1.98 + */ + setPrompt(prompt: string): void; + /** + * The `rl.prompt()` method writes the `Interface` instances configured`prompt` to a new line in `output` in order to provide a user with a new + * location at which to provide input. + * + * When called, `rl.prompt()` will resume the `input` stream if it has been + * paused. + * + * If the `Interface` was created with `output` set to `null` or`undefined` the prompt is not written. + * @since v0.1.98 + * @param preserveCursor If `true`, prevents the cursor placement from being reset to `0`. + */ + prompt(preserveCursor?: boolean): void; + /** + * The `rl.question()` method displays the `query` by writing it to the `output`, + * waits for user input to be provided on `input`, then invokes the `callback`function passing the provided input as the first argument. + * + * When called, `rl.question()` will resume the `input` stream if it has been + * paused. + * + * If the `Interface` was created with `output` set to `null` or`undefined` the `query` is not written. + * + * The `callback` function passed to `rl.question()` does not follow the typical + * pattern of accepting an `Error` object or `null` as the first argument. + * The `callback` is called with the provided answer as the only argument. + * + * An error will be thrown if calling `rl.question()` after `rl.close()`. + * + * Example usage: + * + * ```js + * rl.question('What is your favorite food? ', (answer) => { + * console.log(`Oh, so your favorite food is ${answer}`); + * }); + * ``` + * + * Using an `AbortController` to cancel a question. + * + * ```js + * const ac = new AbortController(); + * const signal = ac.signal; + * + * rl.question('What is your favorite food? ', { signal }, (answer) => { + * console.log(`Oh, so your favorite food is ${answer}`); + * }); + * + * signal.addEventListener('abort', () => { + * console.log('The food question timed out'); + * }, { once: true }); + * + * setTimeout(() => ac.abort(), 10000); + * ``` + * @since v0.3.3 + * @param query A statement or query to write to `output`, prepended to the prompt. + * @param callback A callback function that is invoked with the user's input in response to the `query`. + */ + question(query: string, callback: (answer: string) => void): void; + question(query: string, options: Abortable, callback: (answer: string) => void): void; + /** + * The `rl.pause()` method pauses the `input` stream, allowing it to be resumed + * later if necessary. + * + * Calling `rl.pause()` does not immediately pause other events (including`'line'`) from being emitted by the `Interface` instance. + * @since v0.3.4 + */ + pause(): this; + /** + * The `rl.resume()` method resumes the `input` stream if it has been paused. + * @since v0.3.4 + */ + resume(): this; + /** + * The `rl.close()` method closes the `Interface` instance and + * relinquishes control over the `input` and `output` streams. When called, + * the `'close'` event will be emitted. + * + * Calling `rl.close()` does not immediately stop other events (including `'line'`) + * from being emitted by the `Interface` instance. + * @since v0.1.98 + */ + close(): void; + /** + * The `rl.write()` method will write either `data` or a key sequence identified + * by `key` to the `output`. The `key` argument is supported only if `output` is + * a `TTY` text terminal. See `TTY keybindings` for a list of key + * combinations. + * + * If `key` is specified, `data` is ignored. + * + * When called, `rl.write()` will resume the `input` stream if it has been + * paused. + * + * If the `Interface` was created with `output` set to `null` or`undefined` the `data` and `key` are not written. + * + * ```js + * rl.write('Delete this!'); + * // Simulate Ctrl+U to delete the line written previously + * rl.write(null, { ctrl: true, name: 'u' }); + * ``` + * + * The `rl.write()` method will write the data to the `readline` `Interface`'s`input`_as if it were provided by the user_. + * @since v0.1.98 + */ + write(data: string | Buffer, key?: Key): void; + write(data: undefined | null | string | Buffer, key: Key): void; + /** + * Returns the real position of the cursor in relation to the input + * prompt + string. Long input (wrapping) strings, as well as multiple + * line prompts are included in the calculations. + * @since v13.5.0, v12.16.0 + */ + getCursorPos(): CursorPos; + /** + * events.EventEmitter + * 1. close + * 2. line + * 3. pause + * 4. resume + * 5. SIGCONT + * 6. SIGINT + * 7. SIGTSTP + * 8. history + */ + addListener(event: string, listener: (...args: any[]) => void): this; + addListener(event: "close", listener: () => void): this; + addListener(event: "line", listener: (input: string) => void): this; + addListener(event: "pause", listener: () => void): this; + addListener(event: "resume", listener: () => void): this; + addListener(event: "SIGCONT", listener: () => void): this; + addListener(event: "SIGINT", listener: () => void): this; + addListener(event: "SIGTSTP", listener: () => void): this; + addListener(event: "history", listener: (history: string[]) => void): this; + emit(event: string | symbol, ...args: any[]): boolean; + emit(event: "close"): boolean; + emit(event: "line", input: string): boolean; + emit(event: "pause"): boolean; + emit(event: "resume"): boolean; + emit(event: "SIGCONT"): boolean; + emit(event: "SIGINT"): boolean; + emit(event: "SIGTSTP"): boolean; + emit(event: "history", history: string[]): boolean; + on(event: string, listener: (...args: any[]) => void): this; + on(event: "close", listener: () => void): this; + on(event: "line", listener: (input: string) => void): this; + on(event: "pause", listener: () => void): this; + on(event: "resume", listener: () => void): this; + on(event: "SIGCONT", listener: () => void): this; + on(event: "SIGINT", listener: () => void): this; + on(event: "SIGTSTP", listener: () => void): this; + on(event: "history", listener: (history: string[]) => void): this; + once(event: string, listener: (...args: any[]) => void): this; + once(event: "close", listener: () => void): this; + once(event: "line", listener: (input: string) => void): this; + once(event: "pause", listener: () => void): this; + once(event: "resume", listener: () => void): this; + once(event: "SIGCONT", listener: () => void): this; + once(event: "SIGINT", listener: () => void): this; + once(event: "SIGTSTP", listener: () => void): this; + once(event: "history", listener: (history: string[]) => void): this; + prependListener(event: string, listener: (...args: any[]) => void): this; + prependListener(event: "close", listener: () => void): this; + prependListener(event: "line", listener: (input: string) => void): this; + prependListener(event: "pause", listener: () => void): this; + prependListener(event: "resume", listener: () => void): this; + prependListener(event: "SIGCONT", listener: () => void): this; + prependListener(event: "SIGINT", listener: () => void): this; + prependListener(event: "SIGTSTP", listener: () => void): this; + prependListener(event: "history", listener: (history: string[]) => void): this; + prependOnceListener(event: string, listener: (...args: any[]) => void): this; + prependOnceListener(event: "close", listener: () => void): this; + prependOnceListener(event: "line", listener: (input: string) => void): this; + prependOnceListener(event: "pause", listener: () => void): this; + prependOnceListener(event: "resume", listener: () => void): this; + prependOnceListener(event: "SIGCONT", listener: () => void): this; + prependOnceListener(event: "SIGINT", listener: () => void): this; + prependOnceListener(event: "SIGTSTP", listener: () => void): this; + prependOnceListener(event: "history", listener: (history: string[]) => void): this; + [Symbol.asyncIterator](): AsyncIterableIterator; + } + export type ReadLine = Interface; // type forwarded for backwards compatibility + export type Completer = (line: string) => CompleterResult; + export type AsyncCompleter = ( + line: string, + callback: (err?: null | Error, result?: CompleterResult) => void, + ) => void; + export type CompleterResult = [string[], string]; + export interface ReadLineOptions { + input: NodeJS.ReadableStream; + output?: NodeJS.WritableStream | undefined; + completer?: Completer | AsyncCompleter | undefined; + terminal?: boolean | undefined; + /** + * Initial list of history lines. This option makes sense + * only if `terminal` is set to `true` by the user or by an internal `output` + * check, otherwise the history caching mechanism is not initialized at all. + * @default [] + */ + history?: string[] | undefined; + historySize?: number | undefined; + prompt?: string | undefined; + crlfDelay?: number | undefined; + /** + * If `true`, when a new input line added + * to the history list duplicates an older one, this removes the older line + * from the list. + * @default false + */ + removeHistoryDuplicates?: boolean | undefined; + escapeCodeTimeout?: number | undefined; + tabSize?: number | undefined; + } + /** + * The `readline.createInterface()` method creates a new `readline.Interface`instance. + * + * ```js + * const readline = require('node:readline'); + * const rl = readline.createInterface({ + * input: process.stdin, + * output: process.stdout, + * }); + * ``` + * + * Once the `readline.Interface` instance is created, the most common case is to + * listen for the `'line'` event: + * + * ```js + * rl.on('line', (line) => { + * console.log(`Received: ${line}`); + * }); + * ``` + * + * If `terminal` is `true` for this instance then the `output` stream will get + * the best compatibility if it defines an `output.columns` property and emits + * a `'resize'` event on the `output` if or when the columns ever change + * (`process.stdout` does this automatically when it is a TTY). + * + * When creating a `readline.Interface` using `stdin` as input, the program + * will not terminate until it receives an [EOF character](https://en.wikipedia.org/wiki/End-of-file#EOF_character). To exit without + * waiting for user input, call `process.stdin.unref()`. + * @since v0.1.98 + */ + export function createInterface( + input: NodeJS.ReadableStream, + output?: NodeJS.WritableStream, + completer?: Completer | AsyncCompleter, + terminal?: boolean, + ): Interface; + export function createInterface(options: ReadLineOptions): Interface; + /** + * The `readline.emitKeypressEvents()` method causes the given `Readable` stream to begin emitting `'keypress'` events corresponding to received input. + * + * Optionally, `interface` specifies a `readline.Interface` instance for which + * autocompletion is disabled when copy-pasted input is detected. + * + * If the `stream` is a `TTY`, then it must be in raw mode. + * + * This is automatically called by any readline instance on its `input` if the`input` is a terminal. Closing the `readline` instance does not stop + * the `input` from emitting `'keypress'` events. + * + * ```js + * readline.emitKeypressEvents(process.stdin); + * if (process.stdin.isTTY) + * process.stdin.setRawMode(true); + * ``` + * + * ## Example: Tiny CLI + * + * The following example illustrates the use of `readline.Interface` class to + * implement a small command-line interface: + * + * ```js + * const readline = require('node:readline'); + * const rl = readline.createInterface({ + * input: process.stdin, + * output: process.stdout, + * prompt: 'OHAI> ', + * }); + * + * rl.prompt(); + * + * rl.on('line', (line) => { + * switch (line.trim()) { + * case 'hello': + * console.log('world!'); + * break; + * default: + * console.log(`Say what? I might have heard '${line.trim()}'`); + * break; + * } + * rl.prompt(); + * }).on('close', () => { + * console.log('Have a great day!'); + * process.exit(0); + * }); + * ``` + * + * ## Example: Read file stream line-by-Line + * + * A common use case for `readline` is to consume an input file one line at a + * time. The easiest way to do so is leveraging the `fs.ReadStream` API as + * well as a `for await...of` loop: + * + * ```js + * const fs = require('node:fs'); + * const readline = require('node:readline'); + * + * async function processLineByLine() { + * const fileStream = fs.createReadStream('input.txt'); + * + * const rl = readline.createInterface({ + * input: fileStream, + * crlfDelay: Infinity, + * }); + * // Note: we use the crlfDelay option to recognize all instances of CR LF + * // ('\r\n') in input.txt as a single line break. + * + * for await (const line of rl) { + * // Each line in input.txt will be successively available here as `line`. + * console.log(`Line from file: ${line}`); + * } + * } + * + * processLineByLine(); + * ``` + * + * Alternatively, one could use the `'line'` event: + * + * ```js + * const fs = require('node:fs'); + * const readline = require('node:readline'); + * + * const rl = readline.createInterface({ + * input: fs.createReadStream('sample.txt'), + * crlfDelay: Infinity, + * }); + * + * rl.on('line', (line) => { + * console.log(`Line from file: ${line}`); + * }); + * ``` + * + * Currently, `for await...of` loop can be a bit slower. If `async` / `await`flow and speed are both essential, a mixed approach can be applied: + * + * ```js + * const { once } = require('node:events'); + * const { createReadStream } = require('node:fs'); + * const { createInterface } = require('node:readline'); + * + * (async function processLineByLine() { + * try { + * const rl = createInterface({ + * input: createReadStream('big-file.txt'), + * crlfDelay: Infinity, + * }); + * + * rl.on('line', (line) => { + * // Process the line. + * }); + * + * await once(rl, 'close'); + * + * console.log('File processed.'); + * } catch (err) { + * console.error(err); + * } + * })(); + * ``` + * @since v0.7.7 + */ + export function emitKeypressEvents(stream: NodeJS.ReadableStream, readlineInterface?: Interface): void; + export type Direction = -1 | 0 | 1; + export interface CursorPos { + rows: number; + cols: number; + } + /** + * The `readline.clearLine()` method clears current line of given `TTY` stream + * in a specified direction identified by `dir`. + * @since v0.7.7 + * @param callback Invoked once the operation completes. + * @return `false` if `stream` wishes for the calling code to wait for the `'drain'` event to be emitted before continuing to write additional data; otherwise `true`. + */ + export function clearLine(stream: NodeJS.WritableStream, dir: Direction, callback?: () => void): boolean; + /** + * The `readline.clearScreenDown()` method clears the given `TTY` stream from + * the current position of the cursor down. + * @since v0.7.7 + * @param callback Invoked once the operation completes. + * @return `false` if `stream` wishes for the calling code to wait for the `'drain'` event to be emitted before continuing to write additional data; otherwise `true`. + */ + export function clearScreenDown(stream: NodeJS.WritableStream, callback?: () => void): boolean; + /** + * The `readline.cursorTo()` method moves cursor to the specified position in a + * given `TTY` `stream`. + * @since v0.7.7 + * @param callback Invoked once the operation completes. + * @return `false` if `stream` wishes for the calling code to wait for the `'drain'` event to be emitted before continuing to write additional data; otherwise `true`. + */ + export function cursorTo(stream: NodeJS.WritableStream, x: number, y?: number, callback?: () => void): boolean; + /** + * The `readline.moveCursor()` method moves the cursor _relative_ to its current + * position in a given `TTY` `stream`. + * @since v0.7.7 + * @param callback Invoked once the operation completes. + * @return `false` if `stream` wishes for the calling code to wait for the `'drain'` event to be emitted before continuing to write additional data; otherwise `true`. + */ + export function moveCursor(stream: NodeJS.WritableStream, dx: number, dy: number, callback?: () => void): boolean; +} +declare module "node:readline" { + export * from "readline"; +} diff --git a/Url-Shortner/node_modules/@types/node/ts4.8/readline/promises.d.ts b/Url-Shortner/node_modules/@types/node/ts4.8/readline/promises.d.ts new file mode 100644 index 0000000..73fb111 --- /dev/null +++ b/Url-Shortner/node_modules/@types/node/ts4.8/readline/promises.d.ts @@ -0,0 +1,150 @@ +/** + * @since v17.0.0 + * @experimental + */ +declare module "readline/promises" { + import { AsyncCompleter, Completer, Direction, Interface as _Interface, ReadLineOptions } from "node:readline"; + import { Abortable } from "node:events"; + /** + * Instances of the `readlinePromises.Interface` class are constructed using the`readlinePromises.createInterface()` method. Every instance is associated with a + * single `input` `Readable` stream and a single `output` `Writable` stream. + * The `output` stream is used to print prompts for user input that arrives on, + * and is read from, the `input` stream. + * @since v17.0.0 + */ + class Interface extends _Interface { + /** + * The `rl.question()` method displays the `query` by writing it to the `output`, + * waits for user input to be provided on `input`, then invokes the `callback`function passing the provided input as the first argument. + * + * When called, `rl.question()` will resume the `input` stream if it has been + * paused. + * + * If the `Interface` was created with `output` set to `null` or`undefined` the `query` is not written. + * + * If the question is called after `rl.close()`, it returns a rejected promise. + * + * Example usage: + * + * ```js + * const answer = await rl.question('What is your favorite food? '); + * console.log(`Oh, so your favorite food is ${answer}`); + * ``` + * + * Using an `AbortSignal` to cancel a question. + * + * ```js + * const signal = AbortSignal.timeout(10_000); + * + * signal.addEventListener('abort', () => { + * console.log('The food question timed out'); + * }, { once: true }); + * + * const answer = await rl.question('What is your favorite food? ', { signal }); + * console.log(`Oh, so your favorite food is ${answer}`); + * ``` + * @since v17.0.0 + * @param query A statement or query to write to `output`, prepended to the prompt. + * @return A promise that is fulfilled with the user's input in response to the `query`. + */ + question(query: string): Promise; + question(query: string, options: Abortable): Promise; + } + /** + * @since v17.0.0 + */ + class Readline { + /** + * @param stream A TTY stream. + */ + constructor( + stream: NodeJS.WritableStream, + options?: { + autoCommit?: boolean; + }, + ); + /** + * The `rl.clearLine()` method adds to the internal list of pending action an + * action that clears current line of the associated `stream` in a specified + * direction identified by `dir`. + * Call `rl.commit()` to see the effect of this method, unless `autoCommit: true`was passed to the constructor. + * @since v17.0.0 + * @return this + */ + clearLine(dir: Direction): this; + /** + * The `rl.clearScreenDown()` method adds to the internal list of pending action an + * action that clears the associated stream from the current position of the + * cursor down. + * Call `rl.commit()` to see the effect of this method, unless `autoCommit: true`was passed to the constructor. + * @since v17.0.0 + * @return this + */ + clearScreenDown(): this; + /** + * The `rl.commit()` method sends all the pending actions to the associated`stream` and clears the internal list of pending actions. + * @since v17.0.0 + */ + commit(): Promise; + /** + * The `rl.cursorTo()` method adds to the internal list of pending action an action + * that moves cursor to the specified position in the associated `stream`. + * Call `rl.commit()` to see the effect of this method, unless `autoCommit: true`was passed to the constructor. + * @since v17.0.0 + * @return this + */ + cursorTo(x: number, y?: number): this; + /** + * The `rl.moveCursor()` method adds to the internal list of pending action an + * action that moves the cursor _relative_ to its current position in the + * associated `stream`. + * Call `rl.commit()` to see the effect of this method, unless `autoCommit: true`was passed to the constructor. + * @since v17.0.0 + * @return this + */ + moveCursor(dx: number, dy: number): this; + /** + * The `rl.rollback` methods clears the internal list of pending actions without + * sending it to the associated `stream`. + * @since v17.0.0 + * @return this + */ + rollback(): this; + } + /** + * The `readlinePromises.createInterface()` method creates a new `readlinePromises.Interface`instance. + * + * ```js + * const readlinePromises = require('node:readline/promises'); + * const rl = readlinePromises.createInterface({ + * input: process.stdin, + * output: process.stdout, + * }); + * ``` + * + * Once the `readlinePromises.Interface` instance is created, the most common case + * is to listen for the `'line'` event: + * + * ```js + * rl.on('line', (line) => { + * console.log(`Received: ${line}`); + * }); + * ``` + * + * If `terminal` is `true` for this instance then the `output` stream will get + * the best compatibility if it defines an `output.columns` property and emits + * a `'resize'` event on the `output` if or when the columns ever change + * (`process.stdout` does this automatically when it is a TTY). + * @since v17.0.0 + */ + function createInterface( + input: NodeJS.ReadableStream, + output?: NodeJS.WritableStream, + completer?: Completer | AsyncCompleter, + terminal?: boolean, + ): Interface; + function createInterface(options: ReadLineOptions): Interface; +} +declare module "node:readline/promises" { + export * from "readline/promises"; +} diff --git a/Url-Shortner/node_modules/@types/node/ts4.8/repl.d.ts b/Url-Shortner/node_modules/@types/node/ts4.8/repl.d.ts new file mode 100644 index 0000000..6c5f81b --- /dev/null +++ b/Url-Shortner/node_modules/@types/node/ts4.8/repl.d.ts @@ -0,0 +1,430 @@ +/** + * The `node:repl` module provides a Read-Eval-Print-Loop (REPL) implementation + * that is available both as a standalone program or includible in other + * applications. It can be accessed using: + * + * ```js + * const repl = require('node:repl'); + * ``` + * @see [source](https://github.com/nodejs/node/blob/v20.2.0/lib/repl.js) + */ +declare module "repl" { + import { AsyncCompleter, Completer, Interface } from "node:readline"; + import { Context } from "node:vm"; + import { InspectOptions } from "node:util"; + interface ReplOptions { + /** + * The input prompt to display. + * @default "> " + */ + prompt?: string | undefined; + /** + * The `Readable` stream from which REPL input will be read. + * @default process.stdin + */ + input?: NodeJS.ReadableStream | undefined; + /** + * The `Writable` stream to which REPL output will be written. + * @default process.stdout + */ + output?: NodeJS.WritableStream | undefined; + /** + * If `true`, specifies that the output should be treated as a TTY terminal, and have + * ANSI/VT100 escape codes written to it. + * Default: checking the value of the `isTTY` property on the output stream upon + * instantiation. + */ + terminal?: boolean | undefined; + /** + * The function to be used when evaluating each given line of input. + * Default: an async wrapper for the JavaScript `eval()` function. An `eval` function can + * error with `repl.Recoverable` to indicate the input was incomplete and prompt for + * additional lines. + * + * @see https://nodejs.org/dist/latest-v20.x/docs/api/repl.html#repl_default_evaluation + * @see https://nodejs.org/dist/latest-v20.x/docs/api/repl.html#repl_custom_evaluation_functions + */ + eval?: REPLEval | undefined; + /** + * Defines if the repl prints output previews or not. + * @default `true` Always `false` in case `terminal` is falsy. + */ + preview?: boolean | undefined; + /** + * If `true`, specifies that the default `writer` function should include ANSI color + * styling to REPL output. If a custom `writer` function is provided then this has no + * effect. + * Default: the REPL instance's `terminal` value. + */ + useColors?: boolean | undefined; + /** + * If `true`, specifies that the default evaluation function will use the JavaScript + * `global` as the context as opposed to creating a new separate context for the REPL + * instance. The node CLI REPL sets this value to `true`. + * Default: `false`. + */ + useGlobal?: boolean | undefined; + /** + * If `true`, specifies that the default writer will not output the return value of a + * command if it evaluates to `undefined`. + * Default: `false`. + */ + ignoreUndefined?: boolean | undefined; + /** + * The function to invoke to format the output of each command before writing to `output`. + * Default: a wrapper for `util.inspect`. + * + * @see https://nodejs.org/dist/latest-v20.x/docs/api/repl.html#repl_customizing_repl_output + */ + writer?: REPLWriter | undefined; + /** + * An optional function used for custom Tab auto completion. + * + * @see https://nodejs.org/dist/latest-v20.x/docs/api/readline.html#readline_use_of_the_completer_function + */ + completer?: Completer | AsyncCompleter | undefined; + /** + * A flag that specifies whether the default evaluator executes all JavaScript commands in + * strict mode or default (sloppy) mode. + * Accepted values are: + * - `repl.REPL_MODE_SLOPPY` - evaluates expressions in sloppy mode. + * - `repl.REPL_MODE_STRICT` - evaluates expressions in strict mode. This is equivalent to + * prefacing every repl statement with `'use strict'`. + */ + replMode?: typeof REPL_MODE_SLOPPY | typeof REPL_MODE_STRICT | undefined; + /** + * Stop evaluating the current piece of code when `SIGINT` is received, i.e. `Ctrl+C` is + * pressed. This cannot be used together with a custom `eval` function. + * Default: `false`. + */ + breakEvalOnSigint?: boolean | undefined; + } + type REPLEval = ( + this: REPLServer, + evalCmd: string, + context: Context, + file: string, + cb: (err: Error | null, result: any) => void, + ) => void; + type REPLWriter = (this: REPLServer, obj: any) => string; + /** + * This is the default "writer" value, if none is passed in the REPL options, + * and it can be overridden by custom print functions. + */ + const writer: REPLWriter & { + options: InspectOptions; + }; + type REPLCommandAction = (this: REPLServer, text: string) => void; + interface REPLCommand { + /** + * Help text to be displayed when `.help` is entered. + */ + help?: string | undefined; + /** + * The function to execute, optionally accepting a single string argument. + */ + action: REPLCommandAction; + } + /** + * Instances of `repl.REPLServer` are created using the {@link start} method + * or directly using the JavaScript `new` keyword. + * + * ```js + * const repl = require('node:repl'); + * + * const options = { useColors: true }; + * + * const firstInstance = repl.start(options); + * const secondInstance = new repl.REPLServer(options); + * ``` + * @since v0.1.91 + */ + class REPLServer extends Interface { + /** + * The `vm.Context` provided to the `eval` function to be used for JavaScript + * evaluation. + */ + readonly context: Context; + /** + * @deprecated since v14.3.0 - Use `input` instead. + */ + readonly inputStream: NodeJS.ReadableStream; + /** + * @deprecated since v14.3.0 - Use `output` instead. + */ + readonly outputStream: NodeJS.WritableStream; + /** + * The `Readable` stream from which REPL input will be read. + */ + readonly input: NodeJS.ReadableStream; + /** + * The `Writable` stream to which REPL output will be written. + */ + readonly output: NodeJS.WritableStream; + /** + * The commands registered via `replServer.defineCommand()`. + */ + readonly commands: NodeJS.ReadOnlyDict; + /** + * A value indicating whether the REPL is currently in "editor mode". + * + * @see https://nodejs.org/dist/latest-v20.x/docs/api/repl.html#repl_commands_and_special_keys + */ + readonly editorMode: boolean; + /** + * A value indicating whether the `_` variable has been assigned. + * + * @see https://nodejs.org/dist/latest-v20.x/docs/api/repl.html#repl_assignment_of_the_underscore_variable + */ + readonly underscoreAssigned: boolean; + /** + * The last evaluation result from the REPL (assigned to the `_` variable inside of the REPL). + * + * @see https://nodejs.org/dist/latest-v20.x/docs/api/repl.html#repl_assignment_of_the_underscore_variable + */ + readonly last: any; + /** + * A value indicating whether the `_error` variable has been assigned. + * + * @since v9.8.0 + * @see https://nodejs.org/dist/latest-v20.x/docs/api/repl.html#repl_assignment_of_the_underscore_variable + */ + readonly underscoreErrAssigned: boolean; + /** + * The last error raised inside the REPL (assigned to the `_error` variable inside of the REPL). + * + * @since v9.8.0 + * @see https://nodejs.org/dist/latest-v20.x/docs/api/repl.html#repl_assignment_of_the_underscore_variable + */ + readonly lastError: any; + /** + * Specified in the REPL options, this is the function to be used when evaluating each + * given line of input. If not specified in the REPL options, this is an async wrapper + * for the JavaScript `eval()` function. + */ + readonly eval: REPLEval; + /** + * Specified in the REPL options, this is a value indicating whether the default + * `writer` function should include ANSI color styling to REPL output. + */ + readonly useColors: boolean; + /** + * Specified in the REPL options, this is a value indicating whether the default `eval` + * function will use the JavaScript `global` as the context as opposed to creating a new + * separate context for the REPL instance. + */ + readonly useGlobal: boolean; + /** + * Specified in the REPL options, this is a value indicating whether the default `writer` + * function should output the result of a command if it evaluates to `undefined`. + */ + readonly ignoreUndefined: boolean; + /** + * Specified in the REPL options, this is the function to invoke to format the output of + * each command before writing to `outputStream`. If not specified in the REPL options, + * this will be a wrapper for `util.inspect`. + */ + readonly writer: REPLWriter; + /** + * Specified in the REPL options, this is the function to use for custom Tab auto-completion. + */ + readonly completer: Completer | AsyncCompleter; + /** + * Specified in the REPL options, this is a flag that specifies whether the default `eval` + * function should execute all JavaScript commands in strict mode or default (sloppy) mode. + * Possible values are: + * - `repl.REPL_MODE_SLOPPY` - evaluates expressions in sloppy mode. + * - `repl.REPL_MODE_STRICT` - evaluates expressions in strict mode. This is equivalent to + * prefacing every repl statement with `'use strict'`. + */ + readonly replMode: typeof REPL_MODE_SLOPPY | typeof REPL_MODE_STRICT; + /** + * NOTE: According to the documentation: + * + * > Instances of `repl.REPLServer` are created using the `repl.start()` method and + * > _should not_ be created directly using the JavaScript `new` keyword. + * + * `REPLServer` cannot be subclassed due to implementation specifics in NodeJS. + * + * @see https://nodejs.org/dist/latest-v20.x/docs/api/repl.html#repl_class_replserver + */ + private constructor(); + /** + * The `replServer.defineCommand()` method is used to add new `.`\-prefixed commands + * to the REPL instance. Such commands are invoked by typing a `.` followed by the`keyword`. The `cmd` is either a `Function` or an `Object` with the following + * properties: + * + * The following example shows two new commands added to the REPL instance: + * + * ```js + * const repl = require('node:repl'); + * + * const replServer = repl.start({ prompt: '> ' }); + * replServer.defineCommand('sayhello', { + * help: 'Say hello', + * action(name) { + * this.clearBufferedCommand(); + * console.log(`Hello, ${name}!`); + * this.displayPrompt(); + * }, + * }); + * replServer.defineCommand('saybye', function saybye() { + * console.log('Goodbye!'); + * this.close(); + * }); + * ``` + * + * The new commands can then be used from within the REPL instance: + * + * ```console + * > .sayhello Node.js User + * Hello, Node.js User! + * > .saybye + * Goodbye! + * ``` + * @since v0.3.0 + * @param keyword The command keyword (_without_ a leading `.` character). + * @param cmd The function to invoke when the command is processed. + */ + defineCommand(keyword: string, cmd: REPLCommandAction | REPLCommand): void; + /** + * The `replServer.displayPrompt()` method readies the REPL instance for input + * from the user, printing the configured `prompt` to a new line in the `output`and resuming the `input` to accept new input. + * + * When multi-line input is being entered, an ellipsis is printed rather than the + * 'prompt'. + * + * When `preserveCursor` is `true`, the cursor placement will not be reset to `0`. + * + * The `replServer.displayPrompt` method is primarily intended to be called from + * within the action function for commands registered using the`replServer.defineCommand()` method. + * @since v0.1.91 + */ + displayPrompt(preserveCursor?: boolean): void; + /** + * The `replServer.clearBufferedCommand()` method clears any command that has been + * buffered but not yet executed. This method is primarily intended to be + * called from within the action function for commands registered using the`replServer.defineCommand()` method. + * @since v9.0.0 + */ + clearBufferedCommand(): void; + /** + * Initializes a history log file for the REPL instance. When executing the + * Node.js binary and using the command-line REPL, a history file is initialized + * by default. However, this is not the case when creating a REPL + * programmatically. Use this method to initialize a history log file when working + * with REPL instances programmatically. + * @since v11.10.0 + * @param historyPath the path to the history file + * @param callback called when history writes are ready or upon error + */ + setupHistory(path: string, callback: (err: Error | null, repl: this) => void): void; + /** + * events.EventEmitter + * 1. close - inherited from `readline.Interface` + * 2. line - inherited from `readline.Interface` + * 3. pause - inherited from `readline.Interface` + * 4. resume - inherited from `readline.Interface` + * 5. SIGCONT - inherited from `readline.Interface` + * 6. SIGINT - inherited from `readline.Interface` + * 7. SIGTSTP - inherited from `readline.Interface` + * 8. exit + * 9. reset + */ + addListener(event: string, listener: (...args: any[]) => void): this; + addListener(event: "close", listener: () => void): this; + addListener(event: "line", listener: (input: string) => void): this; + addListener(event: "pause", listener: () => void): this; + addListener(event: "resume", listener: () => void): this; + addListener(event: "SIGCONT", listener: () => void): this; + addListener(event: "SIGINT", listener: () => void): this; + addListener(event: "SIGTSTP", listener: () => void): this; + addListener(event: "exit", listener: () => void): this; + addListener(event: "reset", listener: (context: Context) => void): this; + emit(event: string | symbol, ...args: any[]): boolean; + emit(event: "close"): boolean; + emit(event: "line", input: string): boolean; + emit(event: "pause"): boolean; + emit(event: "resume"): boolean; + emit(event: "SIGCONT"): boolean; + emit(event: "SIGINT"): boolean; + emit(event: "SIGTSTP"): boolean; + emit(event: "exit"): boolean; + emit(event: "reset", context: Context): boolean; + on(event: string, listener: (...args: any[]) => void): this; + on(event: "close", listener: () => void): this; + on(event: "line", listener: (input: string) => void): this; + on(event: "pause", listener: () => void): this; + on(event: "resume", listener: () => void): this; + on(event: "SIGCONT", listener: () => void): this; + on(event: "SIGINT", listener: () => void): this; + on(event: "SIGTSTP", listener: () => void): this; + on(event: "exit", listener: () => void): this; + on(event: "reset", listener: (context: Context) => void): this; + once(event: string, listener: (...args: any[]) => void): this; + once(event: "close", listener: () => void): this; + once(event: "line", listener: (input: string) => void): this; + once(event: "pause", listener: () => void): this; + once(event: "resume", listener: () => void): this; + once(event: "SIGCONT", listener: () => void): this; + once(event: "SIGINT", listener: () => void): this; + once(event: "SIGTSTP", listener: () => void): this; + once(event: "exit", listener: () => void): this; + once(event: "reset", listener: (context: Context) => void): this; + prependListener(event: string, listener: (...args: any[]) => void): this; + prependListener(event: "close", listener: () => void): this; + prependListener(event: "line", listener: (input: string) => void): this; + prependListener(event: "pause", listener: () => void): this; + prependListener(event: "resume", listener: () => void): this; + prependListener(event: "SIGCONT", listener: () => void): this; + prependListener(event: "SIGINT", listener: () => void): this; + prependListener(event: "SIGTSTP", listener: () => void): this; + prependListener(event: "exit", listener: () => void): this; + prependListener(event: "reset", listener: (context: Context) => void): this; + prependOnceListener(event: string, listener: (...args: any[]) => void): this; + prependOnceListener(event: "close", listener: () => void): this; + prependOnceListener(event: "line", listener: (input: string) => void): this; + prependOnceListener(event: "pause", listener: () => void): this; + prependOnceListener(event: "resume", listener: () => void): this; + prependOnceListener(event: "SIGCONT", listener: () => void): this; + prependOnceListener(event: "SIGINT", listener: () => void): this; + prependOnceListener(event: "SIGTSTP", listener: () => void): this; + prependOnceListener(event: "exit", listener: () => void): this; + prependOnceListener(event: "reset", listener: (context: Context) => void): this; + } + /** + * A flag passed in the REPL options. Evaluates expressions in sloppy mode. + */ + const REPL_MODE_SLOPPY: unique symbol; + /** + * A flag passed in the REPL options. Evaluates expressions in strict mode. + * This is equivalent to prefacing every repl statement with `'use strict'`. + */ + const REPL_MODE_STRICT: unique symbol; + /** + * The `repl.start()` method creates and starts a {@link REPLServer} instance. + * + * If `options` is a string, then it specifies the input prompt: + * + * ```js + * const repl = require('node:repl'); + * + * // a Unix style prompt + * repl.start('$ '); + * ``` + * @since v0.1.91 + */ + function start(options?: string | ReplOptions): REPLServer; + /** + * Indicates a recoverable error that a `REPLServer` can use to support multi-line input. + * + * @see https://nodejs.org/dist/latest-v20.x/docs/api/repl.html#repl_recoverable_errors + */ + class Recoverable extends SyntaxError { + err: Error; + constructor(err: Error); + } +} +declare module "node:repl" { + export * from "repl"; +} diff --git a/Url-Shortner/node_modules/@types/node/ts4.8/stream.d.ts b/Url-Shortner/node_modules/@types/node/ts4.8/stream.d.ts new file mode 100644 index 0000000..147ce0a --- /dev/null +++ b/Url-Shortner/node_modules/@types/node/ts4.8/stream.d.ts @@ -0,0 +1,1537 @@ +/** + * A stream is an abstract interface for working with streaming data in Node.js. + * The `node:stream` module provides an API for implementing the stream interface. + * + * There are many stream objects provided by Node.js. For instance, a `request to an HTTP server` and `process.stdout` are both stream instances. + * + * Streams can be readable, writable, or both. All streams are instances of `EventEmitter`. + * + * To access the `node:stream` module: + * + * ```js + * const stream = require('node:stream'); + * ``` + * + * The `node:stream` module is useful for creating new types of stream instances. + * It is usually not necessary to use the `node:stream` module to consume streams. + * @see [source](https://github.com/nodejs/node/blob/v20.2.0/lib/stream.js) + */ +declare module "stream" { + import { Abortable, EventEmitter } from "node:events"; + import { Blob as NodeBlob } from "node:buffer"; + import * as streamPromises from "node:stream/promises"; + import * as streamConsumers from "node:stream/consumers"; + import * as streamWeb from "node:stream/web"; + + type ComposeFnParam = (source: any) => void; + + class internal extends EventEmitter { + pipe( + destination: T, + options?: { + end?: boolean | undefined; + }, + ): T; + compose( + stream: T | ComposeFnParam | Iterable | AsyncIterable, + options?: { signal: AbortSignal }, + ): T; + } + import Stream = internal.Stream; + import Readable = internal.Readable; + import ReadableOptions = internal.ReadableOptions; + class ReadableBase extends Stream implements NodeJS.ReadableStream { + /** + * A utility method for creating Readable Streams out of iterators. + */ + static from(iterable: Iterable | AsyncIterable, options?: ReadableOptions): Readable; + /** + * Returns whether the stream has been read from or cancelled. + * @since v16.8.0 + */ + static isDisturbed(stream: Readable | NodeJS.ReadableStream): boolean; + /** + * Returns whether the stream was destroyed or errored before emitting `'end'`. + * @since v16.8.0 + * @experimental + */ + readonly readableAborted: boolean; + /** + * Is `true` if it is safe to call `readable.read()`, which means + * the stream has not been destroyed or emitted `'error'` or `'end'`. + * @since v11.4.0 + */ + readable: boolean; + /** + * Returns whether `'data'` has been emitted. + * @since v16.7.0, v14.18.0 + * @experimental + */ + readonly readableDidRead: boolean; + /** + * Getter for the property `encoding` of a given `Readable` stream. The `encoding`property can be set using the `readable.setEncoding()` method. + * @since v12.7.0 + */ + readonly readableEncoding: BufferEncoding | null; + /** + * Becomes `true` when `'end'` event is emitted. + * @since v12.9.0 + */ + readonly readableEnded: boolean; + /** + * This property reflects the current state of a `Readable` stream as described + * in the `Three states` section. + * @since v9.4.0 + */ + readonly readableFlowing: boolean | null; + /** + * Returns the value of `highWaterMark` passed when creating this `Readable`. + * @since v9.3.0 + */ + readonly readableHighWaterMark: number; + /** + * This property contains the number of bytes (or objects) in the queue + * ready to be read. The value provides introspection data regarding + * the status of the `highWaterMark`. + * @since v9.4.0 + */ + readonly readableLength: number; + /** + * Getter for the property `objectMode` of a given `Readable` stream. + * @since v12.3.0 + */ + readonly readableObjectMode: boolean; + /** + * Is `true` after `readable.destroy()` has been called. + * @since v8.0.0 + */ + destroyed: boolean; + /** + * Is `true` after `'close'` has been emitted. + * @since v18.0.0 + */ + readonly closed: boolean; + /** + * Returns error if the stream has been destroyed with an error. + * @since v18.0.0 + */ + readonly errored: Error | null; + constructor(opts?: ReadableOptions); + _construct?(callback: (error?: Error | null) => void): void; + _read(size: number): void; + /** + * The `readable.read()` method reads data out of the internal buffer and + * returns it. If no data is available to be read, `null` is returned. By default, + * the data is returned as a `Buffer` object unless an encoding has been + * specified using the `readable.setEncoding()` method or the stream is operating + * in object mode. + * + * The optional `size` argument specifies a specific number of bytes to read. If`size` bytes are not available to be read, `null` will be returned _unless_the stream has ended, in which + * case all of the data remaining in the internal + * buffer will be returned. + * + * If the `size` argument is not specified, all of the data contained in the + * internal buffer will be returned. + * + * The `size` argument must be less than or equal to 1 GiB. + * + * The `readable.read()` method should only be called on `Readable` streams + * operating in paused mode. In flowing mode, `readable.read()` is called + * automatically until the internal buffer is fully drained. + * + * ```js + * const readable = getReadableStreamSomehow(); + * + * // 'readable' may be triggered multiple times as data is buffered in + * readable.on('readable', () => { + * let chunk; + * console.log('Stream is readable (new data received in buffer)'); + * // Use a loop to make sure we read all currently available data + * while (null !== (chunk = readable.read())) { + * console.log(`Read ${chunk.length} bytes of data...`); + * } + * }); + * + * // 'end' will be triggered once when there is no more data available + * readable.on('end', () => { + * console.log('Reached end of stream.'); + * }); + * ``` + * + * Each call to `readable.read()` returns a chunk of data, or `null`. The chunks + * are not concatenated. A `while` loop is necessary to consume all data + * currently in the buffer. When reading a large file `.read()` may return `null`, + * having consumed all buffered content so far, but there is still more data to + * come not yet buffered. In this case a new `'readable'` event will be emitted + * when there is more data in the buffer. Finally the `'end'` event will be + * emitted when there is no more data to come. + * + * Therefore to read a file's whole contents from a `readable`, it is necessary + * to collect chunks across multiple `'readable'` events: + * + * ```js + * const chunks = []; + * + * readable.on('readable', () => { + * let chunk; + * while (null !== (chunk = readable.read())) { + * chunks.push(chunk); + * } + * }); + * + * readable.on('end', () => { + * const content = chunks.join(''); + * }); + * ``` + * + * A `Readable` stream in object mode will always return a single item from + * a call to `readable.read(size)`, regardless of the value of the`size` argument. + * + * If the `readable.read()` method returns a chunk of data, a `'data'` event will + * also be emitted. + * + * Calling {@link read} after the `'end'` event has + * been emitted will return `null`. No runtime error will be raised. + * @since v0.9.4 + * @param size Optional argument to specify how much data to read. + */ + read(size?: number): any; + /** + * The `readable.setEncoding()` method sets the character encoding for + * data read from the `Readable` stream. + * + * By default, no encoding is assigned and stream data will be returned as`Buffer` objects. Setting an encoding causes the stream data + * to be returned as strings of the specified encoding rather than as `Buffer`objects. For instance, calling `readable.setEncoding('utf8')` will cause the + * output data to be interpreted as UTF-8 data, and passed as strings. Calling`readable.setEncoding('hex')` will cause the data to be encoded in hexadecimal + * string format. + * + * The `Readable` stream will properly handle multi-byte characters delivered + * through the stream that would otherwise become improperly decoded if simply + * pulled from the stream as `Buffer` objects. + * + * ```js + * const readable = getReadableStreamSomehow(); + * readable.setEncoding('utf8'); + * readable.on('data', (chunk) => { + * assert.equal(typeof chunk, 'string'); + * console.log('Got %d characters of string data:', chunk.length); + * }); + * ``` + * @since v0.9.4 + * @param encoding The encoding to use. + */ + setEncoding(encoding: BufferEncoding): this; + /** + * The `readable.pause()` method will cause a stream in flowing mode to stop + * emitting `'data'` events, switching out of flowing mode. Any data that + * becomes available will remain in the internal buffer. + * + * ```js + * const readable = getReadableStreamSomehow(); + * readable.on('data', (chunk) => { + * console.log(`Received ${chunk.length} bytes of data.`); + * readable.pause(); + * console.log('There will be no additional data for 1 second.'); + * setTimeout(() => { + * console.log('Now data will start flowing again.'); + * readable.resume(); + * }, 1000); + * }); + * ``` + * + * The `readable.pause()` method has no effect if there is a `'readable'`event listener. + * @since v0.9.4 + */ + pause(): this; + /** + * The `readable.resume()` method causes an explicitly paused `Readable` stream to + * resume emitting `'data'` events, switching the stream into flowing mode. + * + * The `readable.resume()` method can be used to fully consume the data from a + * stream without actually processing any of that data: + * + * ```js + * getReadableStreamSomehow() + * .resume() + * .on('end', () => { + * console.log('Reached the end, but did not read anything.'); + * }); + * ``` + * + * The `readable.resume()` method has no effect if there is a `'readable'`event listener. + * @since v0.9.4 + */ + resume(): this; + /** + * The `readable.isPaused()` method returns the current operating state of the`Readable`. This is used primarily by the mechanism that underlies the`readable.pipe()` method. In most + * typical cases, there will be no reason to + * use this method directly. + * + * ```js + * const readable = new stream.Readable(); + * + * readable.isPaused(); // === false + * readable.pause(); + * readable.isPaused(); // === true + * readable.resume(); + * readable.isPaused(); // === false + * ``` + * @since v0.11.14 + */ + isPaused(): boolean; + /** + * The `readable.unpipe()` method detaches a `Writable` stream previously attached + * using the {@link pipe} method. + * + * If the `destination` is not specified, then _all_ pipes are detached. + * + * If the `destination` is specified, but no pipe is set up for it, then + * the method does nothing. + * + * ```js + * const fs = require('node:fs'); + * const readable = getReadableStreamSomehow(); + * const writable = fs.createWriteStream('file.txt'); + * // All the data from readable goes into 'file.txt', + * // but only for the first second. + * readable.pipe(writable); + * setTimeout(() => { + * console.log('Stop writing to file.txt.'); + * readable.unpipe(writable); + * console.log('Manually close the file stream.'); + * writable.end(); + * }, 1000); + * ``` + * @since v0.9.4 + * @param destination Optional specific stream to unpipe + */ + unpipe(destination?: NodeJS.WritableStream): this; + /** + * Passing `chunk` as `null` signals the end of the stream (EOF) and behaves the + * same as `readable.push(null)`, after which no more data can be written. The EOF + * signal is put at the end of the buffer and any buffered data will still be + * flushed. + * + * The `readable.unshift()` method pushes a chunk of data back into the internal + * buffer. This is useful in certain situations where a stream is being consumed by + * code that needs to "un-consume" some amount of data that it has optimistically + * pulled out of the source, so that the data can be passed on to some other party. + * + * The `stream.unshift(chunk)` method cannot be called after the `'end'` event + * has been emitted or a runtime error will be thrown. + * + * Developers using `stream.unshift()` often should consider switching to + * use of a `Transform` stream instead. See the `API for stream implementers` section for more information. + * + * ```js + * // Pull off a header delimited by \n\n. + * // Use unshift() if we get too much. + * // Call the callback with (error, header, stream). + * const { StringDecoder } = require('node:string_decoder'); + * function parseHeader(stream, callback) { + * stream.on('error', callback); + * stream.on('readable', onReadable); + * const decoder = new StringDecoder('utf8'); + * let header = ''; + * function onReadable() { + * let chunk; + * while (null !== (chunk = stream.read())) { + * const str = decoder.write(chunk); + * if (str.includes('\n\n')) { + * // Found the header boundary. + * const split = str.split(/\n\n/); + * header += split.shift(); + * const remaining = split.join('\n\n'); + * const buf = Buffer.from(remaining, 'utf8'); + * stream.removeListener('error', callback); + * // Remove the 'readable' listener before unshifting. + * stream.removeListener('readable', onReadable); + * if (buf.length) + * stream.unshift(buf); + * // Now the body of the message can be read from the stream. + * callback(null, header, stream); + * return; + * } + * // Still reading the header. + * header += str; + * } + * } + * } + * ``` + * + * Unlike {@link push}, `stream.unshift(chunk)` will not + * end the reading process by resetting the internal reading state of the stream. + * This can cause unexpected results if `readable.unshift()` is called during a + * read (i.e. from within a {@link _read} implementation on a + * custom stream). Following the call to `readable.unshift()` with an immediate {@link push} will reset the reading state appropriately, + * however it is best to simply avoid calling `readable.unshift()` while in the + * process of performing a read. + * @since v0.9.11 + * @param chunk Chunk of data to unshift onto the read queue. For streams not operating in object mode, `chunk` must be a string, `Buffer`, `Uint8Array`, or `null`. For object mode + * streams, `chunk` may be any JavaScript value. + * @param encoding Encoding of string chunks. Must be a valid `Buffer` encoding, such as `'utf8'` or `'ascii'`. + */ + unshift(chunk: any, encoding?: BufferEncoding): void; + /** + * Prior to Node.js 0.10, streams did not implement the entire `node:stream`module API as it is currently defined. (See `Compatibility` for more + * information.) + * + * When using an older Node.js library that emits `'data'` events and has a {@link pause} method that is advisory only, the`readable.wrap()` method can be used to create a `Readable` + * stream that uses + * the old stream as its data source. + * + * It will rarely be necessary to use `readable.wrap()` but the method has been + * provided as a convenience for interacting with older Node.js applications and + * libraries. + * + * ```js + * const { OldReader } = require('./old-api-module.js'); + * const { Readable } = require('node:stream'); + * const oreader = new OldReader(); + * const myReader = new Readable().wrap(oreader); + * + * myReader.on('readable', () => { + * myReader.read(); // etc. + * }); + * ``` + * @since v0.9.4 + * @param stream An "old style" readable stream + */ + wrap(stream: NodeJS.ReadableStream): this; + push(chunk: any, encoding?: BufferEncoding): boolean; + _destroy(error: Error | null, callback: (error?: Error | null) => void): void; + /** + * Destroy the stream. Optionally emit an `'error'` event, and emit a `'close'`event (unless `emitClose` is set to `false`). After this call, the readable + * stream will release any internal resources and subsequent calls to `push()`will be ignored. + * + * Once `destroy()` has been called any further calls will be a no-op and no + * further errors except from `_destroy()` may be emitted as `'error'`. + * + * Implementors should not override this method, but instead implement `readable._destroy()`. + * @since v8.0.0 + * @param error Error which will be passed as payload in `'error'` event + */ + destroy(error?: Error): this; + /** + * Event emitter + * The defined events on documents including: + * 1. close + * 2. data + * 3. end + * 4. error + * 5. pause + * 6. readable + * 7. resume + */ + addListener(event: "close", listener: () => void): this; + addListener(event: "data", listener: (chunk: any) => void): this; + addListener(event: "end", listener: () => void): this; + addListener(event: "error", listener: (err: Error) => void): this; + addListener(event: "pause", listener: () => void): this; + addListener(event: "readable", listener: () => void): this; + addListener(event: "resume", listener: () => void): this; + addListener(event: string | symbol, listener: (...args: any[]) => void): this; + emit(event: "close"): boolean; + emit(event: "data", chunk: any): boolean; + emit(event: "end"): boolean; + emit(event: "error", err: Error): boolean; + emit(event: "pause"): boolean; + emit(event: "readable"): boolean; + emit(event: "resume"): boolean; + emit(event: string | symbol, ...args: any[]): boolean; + on(event: "close", listener: () => void): this; + on(event: "data", listener: (chunk: any) => void): this; + on(event: "end", listener: () => void): this; + on(event: "error", listener: (err: Error) => void): this; + on(event: "pause", listener: () => void): this; + on(event: "readable", listener: () => void): this; + on(event: "resume", listener: () => void): this; + on(event: string | symbol, listener: (...args: any[]) => void): this; + once(event: "close", listener: () => void): this; + once(event: "data", listener: (chunk: any) => void): this; + once(event: "end", listener: () => void): this; + once(event: "error", listener: (err: Error) => void): this; + once(event: "pause", listener: () => void): this; + once(event: "readable", listener: () => void): this; + once(event: "resume", listener: () => void): this; + once(event: string | symbol, listener: (...args: any[]) => void): this; + prependListener(event: "close", listener: () => void): this; + prependListener(event: "data", listener: (chunk: any) => void): this; + prependListener(event: "end", listener: () => void): this; + prependListener(event: "error", listener: (err: Error) => void): this; + prependListener(event: "pause", listener: () => void): this; + prependListener(event: "readable", listener: () => void): this; + prependListener(event: "resume", listener: () => void): this; + prependListener(event: string | symbol, listener: (...args: any[]) => void): this; + prependOnceListener(event: "close", listener: () => void): this; + prependOnceListener(event: "data", listener: (chunk: any) => void): this; + prependOnceListener(event: "end", listener: () => void): this; + prependOnceListener(event: "error", listener: (err: Error) => void): this; + prependOnceListener(event: "pause", listener: () => void): this; + prependOnceListener(event: "readable", listener: () => void): this; + prependOnceListener(event: "resume", listener: () => void): this; + prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this; + removeListener(event: "close", listener: () => void): this; + removeListener(event: "data", listener: (chunk: any) => void): this; + removeListener(event: "end", listener: () => void): this; + removeListener(event: "error", listener: (err: Error) => void): this; + removeListener(event: "pause", listener: () => void): this; + removeListener(event: "readable", listener: () => void): this; + removeListener(event: "resume", listener: () => void): this; + removeListener(event: string | symbol, listener: (...args: any[]) => void): this; + [Symbol.asyncIterator](): AsyncIterableIterator; + /** + * Calls `readable.destroy()` with an `AbortError` and returns a promise that fulfills when the stream is finished. + * @since v20.4.0 + */ + [Symbol.asyncDispose](): Promise; + } + import WritableOptions = internal.WritableOptions; + class WritableBase extends Stream implements NodeJS.WritableStream { + /** + * Is `true` if it is safe to call `writable.write()`, which means + * the stream has not been destroyed, errored, or ended. + * @since v11.4.0 + */ + readonly writable: boolean; + /** + * Is `true` after `writable.end()` has been called. This property + * does not indicate whether the data has been flushed, for this use `writable.writableFinished` instead. + * @since v12.9.0 + */ + readonly writableEnded: boolean; + /** + * Is set to `true` immediately before the `'finish'` event is emitted. + * @since v12.6.0 + */ + readonly writableFinished: boolean; + /** + * Return the value of `highWaterMark` passed when creating this `Writable`. + * @since v9.3.0 + */ + readonly writableHighWaterMark: number; + /** + * This property contains the number of bytes (or objects) in the queue + * ready to be written. The value provides introspection data regarding + * the status of the `highWaterMark`. + * @since v9.4.0 + */ + readonly writableLength: number; + /** + * Getter for the property `objectMode` of a given `Writable` stream. + * @since v12.3.0 + */ + readonly writableObjectMode: boolean; + /** + * Number of times `writable.uncork()` needs to be + * called in order to fully uncork the stream. + * @since v13.2.0, v12.16.0 + */ + readonly writableCorked: number; + /** + * Is `true` after `writable.destroy()` has been called. + * @since v8.0.0 + */ + destroyed: boolean; + /** + * Is `true` after `'close'` has been emitted. + * @since v18.0.0 + */ + readonly closed: boolean; + /** + * Returns error if the stream has been destroyed with an error. + * @since v18.0.0 + */ + readonly errored: Error | null; + /** + * Is `true` if the stream's buffer has been full and stream will emit `'drain'`. + * @since v15.2.0, v14.17.0 + */ + readonly writableNeedDrain: boolean; + constructor(opts?: WritableOptions); + _write(chunk: any, encoding: BufferEncoding, callback: (error?: Error | null) => void): void; + _writev?( + chunks: Array<{ + chunk: any; + encoding: BufferEncoding; + }>, + callback: (error?: Error | null) => void, + ): void; + _construct?(callback: (error?: Error | null) => void): void; + _destroy(error: Error | null, callback: (error?: Error | null) => void): void; + _final(callback: (error?: Error | null) => void): void; + /** + * The `writable.write()` method writes some data to the stream, and calls the + * supplied `callback` once the data has been fully handled. If an error + * occurs, the `callback` will be called with the error as its + * first argument. The `callback` is called asynchronously and before `'error'` is + * emitted. + * + * The return value is `true` if the internal buffer is less than the`highWaterMark` configured when the stream was created after admitting `chunk`. + * If `false` is returned, further attempts to write data to the stream should + * stop until the `'drain'` event is emitted. + * + * While a stream is not draining, calls to `write()` will buffer `chunk`, and + * return false. Once all currently buffered chunks are drained (accepted for + * delivery by the operating system), the `'drain'` event will be emitted. + * Once `write()` returns false, do not write more chunks + * until the `'drain'` event is emitted. While calling `write()` on a stream that + * is not draining is allowed, Node.js will buffer all written chunks until + * maximum memory usage occurs, at which point it will abort unconditionally. + * Even before it aborts, high memory usage will cause poor garbage collector + * performance and high RSS (which is not typically released back to the system, + * even after the memory is no longer required). Since TCP sockets may never + * drain if the remote peer does not read the data, writing a socket that is + * not draining may lead to a remotely exploitable vulnerability. + * + * Writing data while the stream is not draining is particularly + * problematic for a `Transform`, because the `Transform` streams are paused + * by default until they are piped or a `'data'` or `'readable'` event handler + * is added. + * + * If the data to be written can be generated or fetched on demand, it is + * recommended to encapsulate the logic into a `Readable` and use {@link pipe}. However, if calling `write()` is preferred, it is + * possible to respect backpressure and avoid memory issues using the `'drain'` event: + * + * ```js + * function write(data, cb) { + * if (!stream.write(data)) { + * stream.once('drain', cb); + * } else { + * process.nextTick(cb); + * } + * } + * + * // Wait for cb to be called before doing any other write. + * write('hello', () => { + * console.log('Write completed, do more writes now.'); + * }); + * ``` + * + * A `Writable` stream in object mode will always ignore the `encoding` argument. + * @since v0.9.4 + * @param chunk Optional data to write. For streams not operating in object mode, `chunk` must be a string, `Buffer` or `Uint8Array`. For object mode streams, `chunk` may be any + * JavaScript value other than `null`. + * @param [encoding='utf8'] The encoding, if `chunk` is a string. + * @param callback Callback for when this chunk of data is flushed. + * @return `false` if the stream wishes for the calling code to wait for the `'drain'` event to be emitted before continuing to write additional data; otherwise `true`. + */ + write(chunk: any, callback?: (error: Error | null | undefined) => void): boolean; + write(chunk: any, encoding: BufferEncoding, callback?: (error: Error | null | undefined) => void): boolean; + /** + * The `writable.setDefaultEncoding()` method sets the default `encoding` for a `Writable` stream. + * @since v0.11.15 + * @param encoding The new default encoding + */ + setDefaultEncoding(encoding: BufferEncoding): this; + /** + * Calling the `writable.end()` method signals that no more data will be written + * to the `Writable`. The optional `chunk` and `encoding` arguments allow one + * final additional chunk of data to be written immediately before closing the + * stream. + * + * Calling the {@link write} method after calling {@link end} will raise an error. + * + * ```js + * // Write 'hello, ' and then end with 'world!'. + * const fs = require('node:fs'); + * const file = fs.createWriteStream('example.txt'); + * file.write('hello, '); + * file.end('world!'); + * // Writing more now is not allowed! + * ``` + * @since v0.9.4 + * @param chunk Optional data to write. For streams not operating in object mode, `chunk` must be a string, `Buffer` or `Uint8Array`. For object mode streams, `chunk` may be any + * JavaScript value other than `null`. + * @param encoding The encoding if `chunk` is a string + * @param callback Callback for when the stream is finished. + */ + end(cb?: () => void): this; + end(chunk: any, cb?: () => void): this; + end(chunk: any, encoding: BufferEncoding, cb?: () => void): this; + /** + * The `writable.cork()` method forces all written data to be buffered in memory. + * The buffered data will be flushed when either the {@link uncork} or {@link end} methods are called. + * + * The primary intent of `writable.cork()` is to accommodate a situation in which + * several small chunks are written to the stream in rapid succession. Instead of + * immediately forwarding them to the underlying destination, `writable.cork()`buffers all the chunks until `writable.uncork()` is called, which will pass them + * all to `writable._writev()`, if present. This prevents a head-of-line blocking + * situation where data is being buffered while waiting for the first small chunk + * to be processed. However, use of `writable.cork()` without implementing`writable._writev()` may have an adverse effect on throughput. + * + * See also: `writable.uncork()`, `writable._writev()`. + * @since v0.11.2 + */ + cork(): void; + /** + * The `writable.uncork()` method flushes all data buffered since {@link cork} was called. + * + * When using `writable.cork()` and `writable.uncork()` to manage the buffering + * of writes to a stream, defer calls to `writable.uncork()` using`process.nextTick()`. Doing so allows batching of all`writable.write()` calls that occur within a given Node.js event + * loop phase. + * + * ```js + * stream.cork(); + * stream.write('some '); + * stream.write('data '); + * process.nextTick(() => stream.uncork()); + * ``` + * + * If the `writable.cork()` method is called multiple times on a stream, the + * same number of calls to `writable.uncork()` must be called to flush the buffered + * data. + * + * ```js + * stream.cork(); + * stream.write('some '); + * stream.cork(); + * stream.write('data '); + * process.nextTick(() => { + * stream.uncork(); + * // The data will not be flushed until uncork() is called a second time. + * stream.uncork(); + * }); + * ``` + * + * See also: `writable.cork()`. + * @since v0.11.2 + */ + uncork(): void; + /** + * Destroy the stream. Optionally emit an `'error'` event, and emit a `'close'`event (unless `emitClose` is set to `false`). After this call, the writable + * stream has ended and subsequent calls to `write()` or `end()` will result in + * an `ERR_STREAM_DESTROYED` error. + * This is a destructive and immediate way to destroy a stream. Previous calls to`write()` may not have drained, and may trigger an `ERR_STREAM_DESTROYED` error. + * Use `end()` instead of destroy if data should flush before close, or wait for + * the `'drain'` event before destroying the stream. + * + * Once `destroy()` has been called any further calls will be a no-op and no + * further errors except from `_destroy()` may be emitted as `'error'`. + * + * Implementors should not override this method, + * but instead implement `writable._destroy()`. + * @since v8.0.0 + * @param error Optional, an error to emit with `'error'` event. + */ + destroy(error?: Error): this; + /** + * Event emitter + * The defined events on documents including: + * 1. close + * 2. drain + * 3. error + * 4. finish + * 5. pipe + * 6. unpipe + */ + addListener(event: "close", listener: () => void): this; + addListener(event: "drain", listener: () => void): this; + addListener(event: "error", listener: (err: Error) => void): this; + addListener(event: "finish", listener: () => void): this; + addListener(event: "pipe", listener: (src: Readable) => void): this; + addListener(event: "unpipe", listener: (src: Readable) => void): this; + addListener(event: string | symbol, listener: (...args: any[]) => void): this; + emit(event: "close"): boolean; + emit(event: "drain"): boolean; + emit(event: "error", err: Error): boolean; + emit(event: "finish"): boolean; + emit(event: "pipe", src: Readable): boolean; + emit(event: "unpipe", src: Readable): boolean; + emit(event: string | symbol, ...args: any[]): boolean; + on(event: "close", listener: () => void): this; + on(event: "drain", listener: () => void): this; + on(event: "error", listener: (err: Error) => void): this; + on(event: "finish", listener: () => void): this; + on(event: "pipe", listener: (src: Readable) => void): this; + on(event: "unpipe", listener: (src: Readable) => void): this; + on(event: string | symbol, listener: (...args: any[]) => void): this; + once(event: "close", listener: () => void): this; + once(event: "drain", listener: () => void): this; + once(event: "error", listener: (err: Error) => void): this; + once(event: "finish", listener: () => void): this; + once(event: "pipe", listener: (src: Readable) => void): this; + once(event: "unpipe", listener: (src: Readable) => void): this; + once(event: string | symbol, listener: (...args: any[]) => void): this; + prependListener(event: "close", listener: () => void): this; + prependListener(event: "drain", listener: () => void): this; + prependListener(event: "error", listener: (err: Error) => void): this; + prependListener(event: "finish", listener: () => void): this; + prependListener(event: "pipe", listener: (src: Readable) => void): this; + prependListener(event: "unpipe", listener: (src: Readable) => void): this; + prependListener(event: string | symbol, listener: (...args: any[]) => void): this; + prependOnceListener(event: "close", listener: () => void): this; + prependOnceListener(event: "drain", listener: () => void): this; + prependOnceListener(event: "error", listener: (err: Error) => void): this; + prependOnceListener(event: "finish", listener: () => void): this; + prependOnceListener(event: "pipe", listener: (src: Readable) => void): this; + prependOnceListener(event: "unpipe", listener: (src: Readable) => void): this; + prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this; + removeListener(event: "close", listener: () => void): this; + removeListener(event: "drain", listener: () => void): this; + removeListener(event: "error", listener: (err: Error) => void): this; + removeListener(event: "finish", listener: () => void): this; + removeListener(event: "pipe", listener: (src: Readable) => void): this; + removeListener(event: "unpipe", listener: (src: Readable) => void): this; + removeListener(event: string | symbol, listener: (...args: any[]) => void): this; + } + namespace internal { + class Stream extends internal { + constructor(opts?: ReadableOptions); + } + interface StreamOptions extends Abortable { + emitClose?: boolean | undefined; + highWaterMark?: number | undefined; + objectMode?: boolean | undefined; + construct?(this: T, callback: (error?: Error | null) => void): void; + destroy?(this: T, error: Error | null, callback: (error: Error | null) => void): void; + autoDestroy?: boolean | undefined; + } + interface ReadableOptions extends StreamOptions { + encoding?: BufferEncoding | undefined; + read?(this: Readable, size: number): void; + } + /** + * @since v0.9.4 + */ + class Readable extends ReadableBase { + /** + * A utility method for creating a `Readable` from a web `ReadableStream`. + * @since v17.0.0 + * @experimental + */ + static fromWeb( + readableStream: streamWeb.ReadableStream, + options?: Pick, + ): Readable; + /** + * A utility method for creating a web `ReadableStream` from a `Readable`. + * @since v17.0.0 + * @experimental + */ + static toWeb(streamReadable: Readable): streamWeb.ReadableStream; + } + interface WritableOptions extends StreamOptions { + decodeStrings?: boolean | undefined; + defaultEncoding?: BufferEncoding | undefined; + write?( + this: Writable, + chunk: any, + encoding: BufferEncoding, + callback: (error?: Error | null) => void, + ): void; + writev?( + this: Writable, + chunks: Array<{ + chunk: any; + encoding: BufferEncoding; + }>, + callback: (error?: Error | null) => void, + ): void; + final?(this: Writable, callback: (error?: Error | null) => void): void; + } + /** + * @since v0.9.4 + */ + class Writable extends WritableBase { + /** + * A utility method for creating a `Writable` from a web `WritableStream`. + * @since v17.0.0 + * @experimental + */ + static fromWeb( + writableStream: streamWeb.WritableStream, + options?: Pick, + ): Writable; + /** + * A utility method for creating a web `WritableStream` from a `Writable`. + * @since v17.0.0 + * @experimental + */ + static toWeb(streamWritable: Writable): streamWeb.WritableStream; + } + interface DuplexOptions extends ReadableOptions, WritableOptions { + allowHalfOpen?: boolean | undefined; + readableObjectMode?: boolean | undefined; + writableObjectMode?: boolean | undefined; + readableHighWaterMark?: number | undefined; + writableHighWaterMark?: number | undefined; + writableCorked?: number | undefined; + construct?(this: Duplex, callback: (error?: Error | null) => void): void; + read?(this: Duplex, size: number): void; + write?(this: Duplex, chunk: any, encoding: BufferEncoding, callback: (error?: Error | null) => void): void; + writev?( + this: Duplex, + chunks: Array<{ + chunk: any; + encoding: BufferEncoding; + }>, + callback: (error?: Error | null) => void, + ): void; + final?(this: Duplex, callback: (error?: Error | null) => void): void; + destroy?(this: Duplex, error: Error | null, callback: (error: Error | null) => void): void; + } + /** + * Duplex streams are streams that implement both the `Readable` and `Writable` interfaces. + * + * Examples of `Duplex` streams include: + * + * * `TCP sockets` + * * `zlib streams` + * * `crypto streams` + * @since v0.9.4 + */ + class Duplex extends ReadableBase implements WritableBase { + readonly writable: boolean; + readonly writableEnded: boolean; + readonly writableFinished: boolean; + readonly writableHighWaterMark: number; + readonly writableLength: number; + readonly writableObjectMode: boolean; + readonly writableCorked: number; + readonly writableNeedDrain: boolean; + readonly closed: boolean; + readonly errored: Error | null; + /** + * If `false` then the stream will automatically end the writable side when the + * readable side ends. Set initially by the `allowHalfOpen` constructor option, + * which defaults to `true`. + * + * This can be changed manually to change the half-open behavior of an existing`Duplex` stream instance, but must be changed before the `'end'` event is + * emitted. + * @since v0.9.4 + */ + allowHalfOpen: boolean; + constructor(opts?: DuplexOptions); + /** + * A utility method for creating duplex streams. + * + * - `Stream` converts writable stream into writable `Duplex` and readable stream + * to `Duplex`. + * - `Blob` converts into readable `Duplex`. + * - `string` converts into readable `Duplex`. + * - `ArrayBuffer` converts into readable `Duplex`. + * - `AsyncIterable` converts into a readable `Duplex`. Cannot yield `null`. + * - `AsyncGeneratorFunction` converts into a readable/writable transform + * `Duplex`. Must take a source `AsyncIterable` as first parameter. Cannot yield + * `null`. + * - `AsyncFunction` converts into a writable `Duplex`. Must return + * either `null` or `undefined` + * - `Object ({ writable, readable })` converts `readable` and + * `writable` into `Stream` and then combines them into `Duplex` where the + * `Duplex` will write to the `writable` and read from the `readable`. + * - `Promise` converts into readable `Duplex`. Value `null` is ignored. + * + * @since v16.8.0 + */ + static from( + src: + | Stream + | NodeBlob + | ArrayBuffer + | string + | Iterable + | AsyncIterable + | AsyncGeneratorFunction + | Promise + | Object, + ): Duplex; + _write(chunk: any, encoding: BufferEncoding, callback: (error?: Error | null) => void): void; + _writev?( + chunks: Array<{ + chunk: any; + encoding: BufferEncoding; + }>, + callback: (error?: Error | null) => void, + ): void; + _destroy(error: Error | null, callback: (error: Error | null) => void): void; + _final(callback: (error?: Error | null) => void): void; + write(chunk: any, encoding?: BufferEncoding, cb?: (error: Error | null | undefined) => void): boolean; + write(chunk: any, cb?: (error: Error | null | undefined) => void): boolean; + setDefaultEncoding(encoding: BufferEncoding): this; + end(cb?: () => void): this; + end(chunk: any, cb?: () => void): this; + end(chunk: any, encoding?: BufferEncoding, cb?: () => void): this; + cork(): void; + uncork(): void; + /** + * A utility method for creating a web `ReadableStream` and `WritableStream` from a `Duplex`. + * @since v17.0.0 + * @experimental + */ + static toWeb(streamDuplex: Duplex): { + readable: streamWeb.ReadableStream; + writable: streamWeb.WritableStream; + }; + /** + * A utility method for creating a `Duplex` from a web `ReadableStream` and `WritableStream`. + * @since v17.0.0 + * @experimental + */ + static fromWeb( + duplexStream: { + readable: streamWeb.ReadableStream; + writable: streamWeb.WritableStream; + }, + options?: Pick< + DuplexOptions, + "allowHalfOpen" | "decodeStrings" | "encoding" | "highWaterMark" | "objectMode" | "signal" + >, + ): Duplex; + /** + * Event emitter + * The defined events on documents including: + * 1. close + * 2. data + * 3. drain + * 4. end + * 5. error + * 6. finish + * 7. pause + * 8. pipe + * 9. readable + * 10. resume + * 11. unpipe + */ + addListener(event: "close", listener: () => void): this; + addListener(event: "data", listener: (chunk: any) => void): this; + addListener(event: "drain", listener: () => void): this; + addListener(event: "end", listener: () => void): this; + addListener(event: "error", listener: (err: Error) => void): this; + addListener(event: "finish", listener: () => void): this; + addListener(event: "pause", listener: () => void): this; + addListener(event: "pipe", listener: (src: Readable) => void): this; + addListener(event: "readable", listener: () => void): this; + addListener(event: "resume", listener: () => void): this; + addListener(event: "unpipe", listener: (src: Readable) => void): this; + addListener(event: string | symbol, listener: (...args: any[]) => void): this; + emit(event: "close"): boolean; + emit(event: "data", chunk: any): boolean; + emit(event: "drain"): boolean; + emit(event: "end"): boolean; + emit(event: "error", err: Error): boolean; + emit(event: "finish"): boolean; + emit(event: "pause"): boolean; + emit(event: "pipe", src: Readable): boolean; + emit(event: "readable"): boolean; + emit(event: "resume"): boolean; + emit(event: "unpipe", src: Readable): boolean; + emit(event: string | symbol, ...args: any[]): boolean; + on(event: "close", listener: () => void): this; + on(event: "data", listener: (chunk: any) => void): this; + on(event: "drain", listener: () => void): this; + on(event: "end", listener: () => void): this; + on(event: "error", listener: (err: Error) => void): this; + on(event: "finish", listener: () => void): this; + on(event: "pause", listener: () => void): this; + on(event: "pipe", listener: (src: Readable) => void): this; + on(event: "readable", listener: () => void): this; + on(event: "resume", listener: () => void): this; + on(event: "unpipe", listener: (src: Readable) => void): this; + on(event: string | symbol, listener: (...args: any[]) => void): this; + once(event: "close", listener: () => void): this; + once(event: "data", listener: (chunk: any) => void): this; + once(event: "drain", listener: () => void): this; + once(event: "end", listener: () => void): this; + once(event: "error", listener: (err: Error) => void): this; + once(event: "finish", listener: () => void): this; + once(event: "pause", listener: () => void): this; + once(event: "pipe", listener: (src: Readable) => void): this; + once(event: "readable", listener: () => void): this; + once(event: "resume", listener: () => void): this; + once(event: "unpipe", listener: (src: Readable) => void): this; + once(event: string | symbol, listener: (...args: any[]) => void): this; + prependListener(event: "close", listener: () => void): this; + prependListener(event: "data", listener: (chunk: any) => void): this; + prependListener(event: "drain", listener: () => void): this; + prependListener(event: "end", listener: () => void): this; + prependListener(event: "error", listener: (err: Error) => void): this; + prependListener(event: "finish", listener: () => void): this; + prependListener(event: "pause", listener: () => void): this; + prependListener(event: "pipe", listener: (src: Readable) => void): this; + prependListener(event: "readable", listener: () => void): this; + prependListener(event: "resume", listener: () => void): this; + prependListener(event: "unpipe", listener: (src: Readable) => void): this; + prependListener(event: string | symbol, listener: (...args: any[]) => void): this; + prependOnceListener(event: "close", listener: () => void): this; + prependOnceListener(event: "data", listener: (chunk: any) => void): this; + prependOnceListener(event: "drain", listener: () => void): this; + prependOnceListener(event: "end", listener: () => void): this; + prependOnceListener(event: "error", listener: (err: Error) => void): this; + prependOnceListener(event: "finish", listener: () => void): this; + prependOnceListener(event: "pause", listener: () => void): this; + prependOnceListener(event: "pipe", listener: (src: Readable) => void): this; + prependOnceListener(event: "readable", listener: () => void): this; + prependOnceListener(event: "resume", listener: () => void): this; + prependOnceListener(event: "unpipe", listener: (src: Readable) => void): this; + prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this; + removeListener(event: "close", listener: () => void): this; + removeListener(event: "data", listener: (chunk: any) => void): this; + removeListener(event: "drain", listener: () => void): this; + removeListener(event: "end", listener: () => void): this; + removeListener(event: "error", listener: (err: Error) => void): this; + removeListener(event: "finish", listener: () => void): this; + removeListener(event: "pause", listener: () => void): this; + removeListener(event: "pipe", listener: (src: Readable) => void): this; + removeListener(event: "readable", listener: () => void): this; + removeListener(event: "resume", listener: () => void): this; + removeListener(event: "unpipe", listener: (src: Readable) => void): this; + removeListener(event: string | symbol, listener: (...args: any[]) => void): this; + } + type TransformCallback = (error?: Error | null, data?: any) => void; + interface TransformOptions extends DuplexOptions { + construct?(this: Transform, callback: (error?: Error | null) => void): void; + read?(this: Transform, size: number): void; + write?( + this: Transform, + chunk: any, + encoding: BufferEncoding, + callback: (error?: Error | null) => void, + ): void; + writev?( + this: Transform, + chunks: Array<{ + chunk: any; + encoding: BufferEncoding; + }>, + callback: (error?: Error | null) => void, + ): void; + final?(this: Transform, callback: (error?: Error | null) => void): void; + destroy?(this: Transform, error: Error | null, callback: (error: Error | null) => void): void; + transform?(this: Transform, chunk: any, encoding: BufferEncoding, callback: TransformCallback): void; + flush?(this: Transform, callback: TransformCallback): void; + } + /** + * Transform streams are `Duplex` streams where the output is in some way + * related to the input. Like all `Duplex` streams, `Transform` streams + * implement both the `Readable` and `Writable` interfaces. + * + * Examples of `Transform` streams include: + * + * * `zlib streams` + * * `crypto streams` + * @since v0.9.4 + */ + class Transform extends Duplex { + constructor(opts?: TransformOptions); + _transform(chunk: any, encoding: BufferEncoding, callback: TransformCallback): void; + _flush(callback: TransformCallback): void; + } + /** + * The `stream.PassThrough` class is a trivial implementation of a `Transform` stream that simply passes the input bytes across to the output. Its purpose is + * primarily for examples and testing, but there are some use cases where`stream.PassThrough` is useful as a building block for novel sorts of streams. + */ + class PassThrough extends Transform {} + /** + * A stream to attach a signal to. + * + * Attaches an AbortSignal to a readable or writeable stream. This lets code + * control stream destruction using an `AbortController`. + * + * Calling `abort` on the `AbortController` corresponding to the passed`AbortSignal` will behave the same way as calling `.destroy(new AbortError())`on the stream, and `controller.error(new + * AbortError())` for webstreams. + * + * ```js + * const fs = require('node:fs'); + * + * const controller = new AbortController(); + * const read = addAbortSignal( + * controller.signal, + * fs.createReadStream(('object.json')), + * ); + * // Later, abort the operation closing the stream + * controller.abort(); + * ``` + * + * Or using an `AbortSignal` with a readable stream as an async iterable: + * + * ```js + * const controller = new AbortController(); + * setTimeout(() => controller.abort(), 10_000); // set a timeout + * const stream = addAbortSignal( + * controller.signal, + * fs.createReadStream(('object.json')), + * ); + * (async () => { + * try { + * for await (const chunk of stream) { + * await process(chunk); + * } + * } catch (e) { + * if (e.name === 'AbortError') { + * // The operation was cancelled + * } else { + * throw e; + * } + * } + * })(); + * ``` + * + * Or using an `AbortSignal` with a ReadableStream: + * + * ```js + * const controller = new AbortController(); + * const rs = new ReadableStream({ + * start(controller) { + * controller.enqueue('hello'); + * controller.enqueue('world'); + * controller.close(); + * }, + * }); + * + * addAbortSignal(controller.signal, rs); + * + * finished(rs, (err) => { + * if (err) { + * if (err.name === 'AbortError') { + * // The operation was cancelled + * } + * } + * }); + * + * const reader = rs.getReader(); + * + * reader.read().then(({ value, done }) => { + * console.log(value); // hello + * console.log(done); // false + * controller.abort(); + * }); + * ``` + * @since v15.4.0 + * @param signal A signal representing possible cancellation + * @param stream a stream to attach a signal to + */ + function addAbortSignal(signal: AbortSignal, stream: T): T; + /** + * Returns the default highWaterMark used by streams. + * Defaults to `16384` (16 KiB), or `16` for `objectMode`. + * @since v19.9.0 + * @param objectMode + */ + function getDefaultHighWaterMark(objectMode: boolean): number; + /** + * Sets the default highWaterMark used by streams. + * @since v19.9.0 + * @param objectMode + * @param value highWaterMark value + */ + function setDefaultHighWaterMark(objectMode: boolean, value: number): void; + interface FinishedOptions extends Abortable { + error?: boolean | undefined; + readable?: boolean | undefined; + writable?: boolean | undefined; + } + /** + * A readable and/or writable stream/webstream. + * + * A function to get notified when a stream is no longer readable, writable + * or has experienced an error or a premature close event. + * + * ```js + * const { finished } = require('node:stream'); + * const fs = require('node:fs'); + * + * const rs = fs.createReadStream('archive.tar'); + * + * finished(rs, (err) => { + * if (err) { + * console.error('Stream failed.', err); + * } else { + * console.log('Stream is done reading.'); + * } + * }); + * + * rs.resume(); // Drain the stream. + * ``` + * + * Especially useful in error handling scenarios where a stream is destroyed + * prematurely (like an aborted HTTP request), and will not emit `'end'`or `'finish'`. + * + * The `finished` API provides `promise version`. + * + * `stream.finished()` leaves dangling event listeners (in particular`'error'`, `'end'`, `'finish'` and `'close'`) after `callback` has been + * invoked. The reason for this is so that unexpected `'error'` events (due to + * incorrect stream implementations) do not cause unexpected crashes. + * If this is unwanted behavior then the returned cleanup function needs to be + * invoked in the callback: + * + * ```js + * const cleanup = finished(rs, (err) => { + * cleanup(); + * // ... + * }); + * ``` + * @since v10.0.0 + * @param stream A readable and/or writable stream. + * @param callback A callback function that takes an optional error argument. + * @return A cleanup function which removes all registered listeners. + */ + function finished( + stream: NodeJS.ReadableStream | NodeJS.WritableStream | NodeJS.ReadWriteStream, + options: FinishedOptions, + callback: (err?: NodeJS.ErrnoException | null) => void, + ): () => void; + function finished( + stream: NodeJS.ReadableStream | NodeJS.WritableStream | NodeJS.ReadWriteStream, + callback: (err?: NodeJS.ErrnoException | null) => void, + ): () => void; + namespace finished { + function __promisify__( + stream: NodeJS.ReadableStream | NodeJS.WritableStream | NodeJS.ReadWriteStream, + options?: FinishedOptions, + ): Promise; + } + type PipelineSourceFunction = () => Iterable | AsyncIterable; + type PipelineSource = Iterable | AsyncIterable | NodeJS.ReadableStream | PipelineSourceFunction; + type PipelineTransform, U> = + | NodeJS.ReadWriteStream + | (( + source: S extends (...args: any[]) => Iterable | AsyncIterable ? AsyncIterable + : S, + ) => AsyncIterable); + type PipelineTransformSource = PipelineSource | PipelineTransform; + type PipelineDestinationIterableFunction = (source: AsyncIterable) => AsyncIterable; + type PipelineDestinationPromiseFunction = (source: AsyncIterable) => Promise

; + type PipelineDestination, P> = S extends + PipelineTransformSource ? + | NodeJS.WritableStream + | PipelineDestinationIterableFunction + | PipelineDestinationPromiseFunction + : never; + type PipelineCallback> = S extends + PipelineDestinationPromiseFunction ? (err: NodeJS.ErrnoException | null, value: P) => void + : (err: NodeJS.ErrnoException | null) => void; + type PipelinePromise> = S extends + PipelineDestinationPromiseFunction ? Promise

: Promise; + interface PipelineOptions { + signal?: AbortSignal | undefined; + end?: boolean | undefined; + } + /** + * A module method to pipe between streams and generators forwarding errors and + * properly cleaning up and provide a callback when the pipeline is complete. + * + * ```js + * const { pipeline } = require('node:stream'); + * const fs = require('node:fs'); + * const zlib = require('node:zlib'); + * + * // Use the pipeline API to easily pipe a series of streams + * // together and get notified when the pipeline is fully done. + * + * // A pipeline to gzip a potentially huge tar file efficiently: + * + * pipeline( + * fs.createReadStream('archive.tar'), + * zlib.createGzip(), + * fs.createWriteStream('archive.tar.gz'), + * (err) => { + * if (err) { + * console.error('Pipeline failed.', err); + * } else { + * console.log('Pipeline succeeded.'); + * } + * }, + * ); + * ``` + * + * The `pipeline` API provides a `promise version`. + * + * `stream.pipeline()` will call `stream.destroy(err)` on all streams except: + * + * * `Readable` streams which have emitted `'end'` or `'close'`. + * * `Writable` streams which have emitted `'finish'` or `'close'`. + * + * `stream.pipeline()` leaves dangling event listeners on the streams + * after the `callback` has been invoked. In the case of reuse of streams after + * failure, this can cause event listener leaks and swallowed errors. If the last + * stream is readable, dangling event listeners will be removed so that the last + * stream can be consumed later. + * + * `stream.pipeline()` closes all the streams when an error is raised. + * The `IncomingRequest` usage with `pipeline` could lead to an unexpected behavior + * once it would destroy the socket without sending the expected response. + * See the example below: + * + * ```js + * const fs = require('node:fs'); + * const http = require('node:http'); + * const { pipeline } = require('node:stream'); + * + * const server = http.createServer((req, res) => { + * const fileStream = fs.createReadStream('./fileNotExist.txt'); + * pipeline(fileStream, res, (err) => { + * if (err) { + * console.log(err); // No such file + * // this message can't be sent once `pipeline` already destroyed the socket + * return res.end('error!!!'); + * } + * }); + * }); + * ``` + * @since v10.0.0 + * @param callback Called when the pipeline is fully done. + */ + function pipeline, B extends PipelineDestination>( + source: A, + destination: B, + callback?: PipelineCallback, + ): B extends NodeJS.WritableStream ? B : NodeJS.WritableStream; + function pipeline< + A extends PipelineSource, + T1 extends PipelineTransform, + B extends PipelineDestination, + >( + source: A, + transform1: T1, + destination: B, + callback?: PipelineCallback, + ): B extends NodeJS.WritableStream ? B : NodeJS.WritableStream; + function pipeline< + A extends PipelineSource, + T1 extends PipelineTransform, + T2 extends PipelineTransform, + B extends PipelineDestination, + >( + source: A, + transform1: T1, + transform2: T2, + destination: B, + callback?: PipelineCallback, + ): B extends NodeJS.WritableStream ? B : NodeJS.WritableStream; + function pipeline< + A extends PipelineSource, + T1 extends PipelineTransform, + T2 extends PipelineTransform, + T3 extends PipelineTransform, + B extends PipelineDestination, + >( + source: A, + transform1: T1, + transform2: T2, + transform3: T3, + destination: B, + callback?: PipelineCallback, + ): B extends NodeJS.WritableStream ? B : NodeJS.WritableStream; + function pipeline< + A extends PipelineSource, + T1 extends PipelineTransform, + T2 extends PipelineTransform, + T3 extends PipelineTransform, + T4 extends PipelineTransform, + B extends PipelineDestination, + >( + source: A, + transform1: T1, + transform2: T2, + transform3: T3, + transform4: T4, + destination: B, + callback?: PipelineCallback, + ): B extends NodeJS.WritableStream ? B : NodeJS.WritableStream; + function pipeline( + streams: ReadonlyArray, + callback?: (err: NodeJS.ErrnoException | null) => void, + ): NodeJS.WritableStream; + function pipeline( + stream1: NodeJS.ReadableStream, + stream2: NodeJS.ReadWriteStream | NodeJS.WritableStream, + ...streams: Array< + NodeJS.ReadWriteStream | NodeJS.WritableStream | ((err: NodeJS.ErrnoException | null) => void) + > + ): NodeJS.WritableStream; + namespace pipeline { + function __promisify__, B extends PipelineDestination>( + source: A, + destination: B, + options?: PipelineOptions, + ): PipelinePromise; + function __promisify__< + A extends PipelineSource, + T1 extends PipelineTransform, + B extends PipelineDestination, + >( + source: A, + transform1: T1, + destination: B, + options?: PipelineOptions, + ): PipelinePromise; + function __promisify__< + A extends PipelineSource, + T1 extends PipelineTransform, + T2 extends PipelineTransform, + B extends PipelineDestination, + >( + source: A, + transform1: T1, + transform2: T2, + destination: B, + options?: PipelineOptions, + ): PipelinePromise; + function __promisify__< + A extends PipelineSource, + T1 extends PipelineTransform, + T2 extends PipelineTransform, + T3 extends PipelineTransform, + B extends PipelineDestination, + >( + source: A, + transform1: T1, + transform2: T2, + transform3: T3, + destination: B, + options?: PipelineOptions, + ): PipelinePromise; + function __promisify__< + A extends PipelineSource, + T1 extends PipelineTransform, + T2 extends PipelineTransform, + T3 extends PipelineTransform, + T4 extends PipelineTransform, + B extends PipelineDestination, + >( + source: A, + transform1: T1, + transform2: T2, + transform3: T3, + transform4: T4, + destination: B, + options?: PipelineOptions, + ): PipelinePromise; + function __promisify__( + streams: ReadonlyArray, + options?: PipelineOptions, + ): Promise; + function __promisify__( + stream1: NodeJS.ReadableStream, + stream2: NodeJS.ReadWriteStream | NodeJS.WritableStream, + ...streams: Array + ): Promise; + } + interface Pipe { + close(): void; + hasRef(): boolean; + ref(): void; + unref(): void; + } + /** + * Returns whether the stream has encountered an error. + * @since v17.3.0, v16.14.0 + * @experimental + */ + function isErrored(stream: Readable | Writable | NodeJS.ReadableStream | NodeJS.WritableStream): boolean; + /** + * Returns whether the stream is readable. + * @since v17.4.0, v16.14.0 + * @experimental + */ + function isReadable(stream: Readable | NodeJS.ReadableStream): boolean; + const promises: typeof streamPromises; + const consumers: typeof streamConsumers; + } + export = internal; +} +declare module "node:stream" { + import stream = require("stream"); + export = stream; +} diff --git a/Url-Shortner/node_modules/@types/node/ts4.8/stream/consumers.d.ts b/Url-Shortner/node_modules/@types/node/ts4.8/stream/consumers.d.ts new file mode 100644 index 0000000..de6e66b --- /dev/null +++ b/Url-Shortner/node_modules/@types/node/ts4.8/stream/consumers.d.ts @@ -0,0 +1,12 @@ +declare module "stream/consumers" { + import { Blob as NodeBlob } from "node:buffer"; + import { Readable } from "node:stream"; + function buffer(stream: NodeJS.ReadableStream | Readable | AsyncIterator): Promise; + function text(stream: NodeJS.ReadableStream | Readable | AsyncIterator): Promise; + function arrayBuffer(stream: NodeJS.ReadableStream | Readable | AsyncIterator): Promise; + function blob(stream: NodeJS.ReadableStream | Readable | AsyncIterator): Promise; + function json(stream: NodeJS.ReadableStream | Readable | AsyncIterator): Promise; +} +declare module "node:stream/consumers" { + export * from "stream/consumers"; +} diff --git a/Url-Shortner/node_modules/@types/node/ts4.8/stream/promises.d.ts b/Url-Shortner/node_modules/@types/node/ts4.8/stream/promises.d.ts new file mode 100644 index 0000000..6eac5b7 --- /dev/null +++ b/Url-Shortner/node_modules/@types/node/ts4.8/stream/promises.d.ts @@ -0,0 +1,83 @@ +declare module "stream/promises" { + import { + FinishedOptions, + PipelineDestination, + PipelineOptions, + PipelinePromise, + PipelineSource, + PipelineTransform, + } from "node:stream"; + function finished( + stream: NodeJS.ReadableStream | NodeJS.WritableStream | NodeJS.ReadWriteStream, + options?: FinishedOptions, + ): Promise; + function pipeline, B extends PipelineDestination>( + source: A, + destination: B, + options?: PipelineOptions, + ): PipelinePromise; + function pipeline< + A extends PipelineSource, + T1 extends PipelineTransform, + B extends PipelineDestination, + >( + source: A, + transform1: T1, + destination: B, + options?: PipelineOptions, + ): PipelinePromise; + function pipeline< + A extends PipelineSource, + T1 extends PipelineTransform, + T2 extends PipelineTransform, + B extends PipelineDestination, + >( + source: A, + transform1: T1, + transform2: T2, + destination: B, + options?: PipelineOptions, + ): PipelinePromise; + function pipeline< + A extends PipelineSource, + T1 extends PipelineTransform, + T2 extends PipelineTransform, + T3 extends PipelineTransform, + B extends PipelineDestination, + >( + source: A, + transform1: T1, + transform2: T2, + transform3: T3, + destination: B, + options?: PipelineOptions, + ): PipelinePromise; + function pipeline< + A extends PipelineSource, + T1 extends PipelineTransform, + T2 extends PipelineTransform, + T3 extends PipelineTransform, + T4 extends PipelineTransform, + B extends PipelineDestination, + >( + source: A, + transform1: T1, + transform2: T2, + transform3: T3, + transform4: T4, + destination: B, + options?: PipelineOptions, + ): PipelinePromise; + function pipeline( + streams: ReadonlyArray, + options?: PipelineOptions, + ): Promise; + function pipeline( + stream1: NodeJS.ReadableStream, + stream2: NodeJS.ReadWriteStream | NodeJS.WritableStream, + ...streams: Array + ): Promise; +} +declare module "node:stream/promises" { + export * from "stream/promises"; +} diff --git a/Url-Shortner/node_modules/@types/node/ts4.8/stream/web.d.ts b/Url-Shortner/node_modules/@types/node/ts4.8/stream/web.d.ts new file mode 100644 index 0000000..634936e --- /dev/null +++ b/Url-Shortner/node_modules/@types/node/ts4.8/stream/web.d.ts @@ -0,0 +1,336 @@ +declare module "stream/web" { + // stub module, pending copy&paste from .d.ts or manual impl + // copy from lib.dom.d.ts + interface ReadableWritablePair { + readable: ReadableStream; + /** + * Provides a convenient, chainable way of piping this readable stream + * through a transform stream (or any other { writable, readable } + * pair). It simply pipes the stream into the writable side of the + * supplied pair, and returns the readable side for further use. + * + * Piping a stream will lock it for the duration of the pipe, preventing + * any other consumer from acquiring a reader. + */ + writable: WritableStream; + } + interface StreamPipeOptions { + preventAbort?: boolean; + preventCancel?: boolean; + /** + * Pipes this readable stream to a given writable stream destination. + * The way in which the piping process behaves under various error + * conditions can be customized with a number of passed options. It + * returns a promise that fulfills when the piping process completes + * successfully, or rejects if any errors were encountered. + * + * Piping a stream will lock it for the duration of the pipe, preventing + * any other consumer from acquiring a reader. + * + * Errors and closures of the source and destination streams propagate + * as follows: + * + * An error in this source readable stream will abort destination, + * unless preventAbort is truthy. The returned promise will be rejected + * with the source's error, or with any error that occurs during + * aborting the destination. + * + * An error in destination will cancel this source readable stream, + * unless preventCancel is truthy. The returned promise will be rejected + * with the destination's error, or with any error that occurs during + * canceling the source. + * + * When this source readable stream closes, destination will be closed, + * unless preventClose is truthy. The returned promise will be fulfilled + * once this process completes, unless an error is encountered while + * closing the destination, in which case it will be rejected with that + * error. + * + * If destination starts out closed or closing, this source readable + * stream will be canceled, unless preventCancel is true. The returned + * promise will be rejected with an error indicating piping to a closed + * stream failed, or with any error that occurs during canceling the + * source. + * + * The signal option can be set to an AbortSignal to allow aborting an + * ongoing pipe operation via the corresponding AbortController. In this + * case, this source readable stream will be canceled, and destination + * aborted, unless the respective options preventCancel or preventAbort + * are set. + */ + preventClose?: boolean; + signal?: AbortSignal; + } + interface ReadableStreamGenericReader { + readonly closed: Promise; + cancel(reason?: any): Promise; + } + interface ReadableStreamDefaultReadValueResult { + done: false; + value: T; + } + interface ReadableStreamDefaultReadDoneResult { + done: true; + value?: undefined; + } + type ReadableStreamController = ReadableStreamDefaultController; + type ReadableStreamDefaultReadResult = + | ReadableStreamDefaultReadValueResult + | ReadableStreamDefaultReadDoneResult; + interface ReadableByteStreamControllerCallback { + (controller: ReadableByteStreamController): void | PromiseLike; + } + interface UnderlyingSinkAbortCallback { + (reason?: any): void | PromiseLike; + } + interface UnderlyingSinkCloseCallback { + (): void | PromiseLike; + } + interface UnderlyingSinkStartCallback { + (controller: WritableStreamDefaultController): any; + } + interface UnderlyingSinkWriteCallback { + (chunk: W, controller: WritableStreamDefaultController): void | PromiseLike; + } + interface UnderlyingSourceCancelCallback { + (reason?: any): void | PromiseLike; + } + interface UnderlyingSourcePullCallback { + (controller: ReadableStreamController): void | PromiseLike; + } + interface UnderlyingSourceStartCallback { + (controller: ReadableStreamController): any; + } + interface TransformerFlushCallback { + (controller: TransformStreamDefaultController): void | PromiseLike; + } + interface TransformerStartCallback { + (controller: TransformStreamDefaultController): any; + } + interface TransformerTransformCallback { + (chunk: I, controller: TransformStreamDefaultController): void | PromiseLike; + } + interface UnderlyingByteSource { + autoAllocateChunkSize?: number; + cancel?: ReadableStreamErrorCallback; + pull?: ReadableByteStreamControllerCallback; + start?: ReadableByteStreamControllerCallback; + type: "bytes"; + } + interface UnderlyingSource { + cancel?: UnderlyingSourceCancelCallback; + pull?: UnderlyingSourcePullCallback; + start?: UnderlyingSourceStartCallback; + type?: undefined; + } + interface UnderlyingSink { + abort?: UnderlyingSinkAbortCallback; + close?: UnderlyingSinkCloseCallback; + start?: UnderlyingSinkStartCallback; + type?: undefined; + write?: UnderlyingSinkWriteCallback; + } + interface ReadableStreamErrorCallback { + (reason: any): void | PromiseLike; + } + /** This Streams API interface represents a readable stream of byte data. */ + interface ReadableStream { + readonly locked: boolean; + cancel(reason?: any): Promise; + getReader(): ReadableStreamDefaultReader; + pipeThrough(transform: ReadableWritablePair, options?: StreamPipeOptions): ReadableStream; + pipeTo(destination: WritableStream, options?: StreamPipeOptions): Promise; + tee(): [ReadableStream, ReadableStream]; + values(options?: { preventCancel?: boolean }): AsyncIterableIterator; + [Symbol.asyncIterator](): AsyncIterableIterator; + } + const ReadableStream: { + prototype: ReadableStream; + new(underlyingSource: UnderlyingByteSource, strategy?: QueuingStrategy): ReadableStream; + new(underlyingSource?: UnderlyingSource, strategy?: QueuingStrategy): ReadableStream; + }; + interface ReadableStreamDefaultReader extends ReadableStreamGenericReader { + read(): Promise>; + releaseLock(): void; + } + const ReadableStreamDefaultReader: { + prototype: ReadableStreamDefaultReader; + new(stream: ReadableStream): ReadableStreamDefaultReader; + }; + const ReadableStreamBYOBReader: any; + const ReadableStreamBYOBRequest: any; + interface ReadableByteStreamController { + readonly byobRequest: undefined; + readonly desiredSize: number | null; + close(): void; + enqueue(chunk: ArrayBufferView): void; + error(error?: any): void; + } + const ReadableByteStreamController: { + prototype: ReadableByteStreamController; + new(): ReadableByteStreamController; + }; + interface ReadableStreamDefaultController { + readonly desiredSize: number | null; + close(): void; + enqueue(chunk?: R): void; + error(e?: any): void; + } + const ReadableStreamDefaultController: { + prototype: ReadableStreamDefaultController; + new(): ReadableStreamDefaultController; + }; + interface Transformer { + flush?: TransformerFlushCallback; + readableType?: undefined; + start?: TransformerStartCallback; + transform?: TransformerTransformCallback; + writableType?: undefined; + } + interface TransformStream { + readonly readable: ReadableStream; + readonly writable: WritableStream; + } + const TransformStream: { + prototype: TransformStream; + new( + transformer?: Transformer, + writableStrategy?: QueuingStrategy, + readableStrategy?: QueuingStrategy, + ): TransformStream; + }; + interface TransformStreamDefaultController { + readonly desiredSize: number | null; + enqueue(chunk?: O): void; + error(reason?: any): void; + terminate(): void; + } + const TransformStreamDefaultController: { + prototype: TransformStreamDefaultController; + new(): TransformStreamDefaultController; + }; + /** + * This Streams API interface provides a standard abstraction for writing + * streaming data to a destination, known as a sink. This object comes with + * built-in back pressure and queuing. + */ + interface WritableStream { + readonly locked: boolean; + abort(reason?: any): Promise; + close(): Promise; + getWriter(): WritableStreamDefaultWriter; + } + const WritableStream: { + prototype: WritableStream; + new(underlyingSink?: UnderlyingSink, strategy?: QueuingStrategy): WritableStream; + }; + /** + * This Streams API interface is the object returned by + * WritableStream.getWriter() and once created locks the < writer to the + * WritableStream ensuring that no other streams can write to the underlying + * sink. + */ + interface WritableStreamDefaultWriter { + readonly closed: Promise; + readonly desiredSize: number | null; + readonly ready: Promise; + abort(reason?: any): Promise; + close(): Promise; + releaseLock(): void; + write(chunk?: W): Promise; + } + const WritableStreamDefaultWriter: { + prototype: WritableStreamDefaultWriter; + new(stream: WritableStream): WritableStreamDefaultWriter; + }; + /** + * This Streams API interface represents a controller allowing control of a + * WritableStream's state. When constructing a WritableStream, the + * underlying sink is given a corresponding WritableStreamDefaultController + * instance to manipulate. + */ + interface WritableStreamDefaultController { + error(e?: any): void; + } + const WritableStreamDefaultController: { + prototype: WritableStreamDefaultController; + new(): WritableStreamDefaultController; + }; + interface QueuingStrategy { + highWaterMark?: number; + size?: QueuingStrategySize; + } + interface QueuingStrategySize { + (chunk?: T): number; + } + interface QueuingStrategyInit { + /** + * Creates a new ByteLengthQueuingStrategy with the provided high water + * mark. + * + * Note that the provided high water mark will not be validated ahead of + * time. Instead, if it is negative, NaN, or not a number, the resulting + * ByteLengthQueuingStrategy will cause the corresponding stream + * constructor to throw. + */ + highWaterMark: number; + } + /** + * This Streams API interface provides a built-in byte length queuing + * strategy that can be used when constructing streams. + */ + interface ByteLengthQueuingStrategy extends QueuingStrategy { + readonly highWaterMark: number; + readonly size: QueuingStrategySize; + } + const ByteLengthQueuingStrategy: { + prototype: ByteLengthQueuingStrategy; + new(init: QueuingStrategyInit): ByteLengthQueuingStrategy; + }; + /** + * This Streams API interface provides a built-in byte length queuing + * strategy that can be used when constructing streams. + */ + interface CountQueuingStrategy extends QueuingStrategy { + readonly highWaterMark: number; + readonly size: QueuingStrategySize; + } + const CountQueuingStrategy: { + prototype: CountQueuingStrategy; + new(init: QueuingStrategyInit): CountQueuingStrategy; + }; + interface TextEncoderStream { + /** Returns "utf-8". */ + readonly encoding: "utf-8"; + readonly readable: ReadableStream; + readonly writable: WritableStream; + readonly [Symbol.toStringTag]: string; + } + const TextEncoderStream: { + prototype: TextEncoderStream; + new(): TextEncoderStream; + }; + interface TextDecoderOptions { + fatal?: boolean; + ignoreBOM?: boolean; + } + type BufferSource = ArrayBufferView | ArrayBuffer; + interface TextDecoderStream { + /** Returns encoding's name, lower cased. */ + readonly encoding: string; + /** Returns `true` if error mode is "fatal", and `false` otherwise. */ + readonly fatal: boolean; + /** Returns `true` if ignore BOM flag is set, and `false` otherwise. */ + readonly ignoreBOM: boolean; + readonly readable: ReadableStream; + readonly writable: WritableStream; + readonly [Symbol.toStringTag]: string; + } + const TextDecoderStream: { + prototype: TextDecoderStream; + new(label?: string, options?: TextDecoderOptions): TextDecoderStream; + }; +} +declare module "node:stream/web" { + export * from "stream/web"; +} diff --git a/Url-Shortner/node_modules/@types/node/ts4.8/string_decoder.d.ts b/Url-Shortner/node_modules/@types/node/ts4.8/string_decoder.d.ts new file mode 100644 index 0000000..19fd107 --- /dev/null +++ b/Url-Shortner/node_modules/@types/node/ts4.8/string_decoder.d.ts @@ -0,0 +1,67 @@ +/** + * The `node:string_decoder` module provides an API for decoding `Buffer` objects + * into strings in a manner that preserves encoded multi-byte UTF-8 and UTF-16 + * characters. It can be accessed using: + * + * ```js + * const { StringDecoder } = require('node:string_decoder'); + * ``` + * + * The following example shows the basic use of the `StringDecoder` class. + * + * ```js + * const { StringDecoder } = require('node:string_decoder'); + * const decoder = new StringDecoder('utf8'); + * + * const cent = Buffer.from([0xC2, 0xA2]); + * console.log(decoder.write(cent)); + * + * const euro = Buffer.from([0xE2, 0x82, 0xAC]); + * console.log(decoder.write(euro)); + * ``` + * + * When a `Buffer` instance is written to the `StringDecoder` instance, an + * internal buffer is used to ensure that the decoded string does not contain + * any incomplete multibyte characters. These are held in the buffer until the + * next call to `stringDecoder.write()` or until `stringDecoder.end()` is called. + * + * In the following example, the three UTF-8 encoded bytes of the European Euro + * symbol (`€`) are written over three separate operations: + * + * ```js + * const { StringDecoder } = require('node:string_decoder'); + * const decoder = new StringDecoder('utf8'); + * + * decoder.write(Buffer.from([0xE2])); + * decoder.write(Buffer.from([0x82])); + * console.log(decoder.end(Buffer.from([0xAC]))); + * ``` + * @see [source](https://github.com/nodejs/node/blob/v20.2.0/lib/string_decoder.js) + */ +declare module "string_decoder" { + class StringDecoder { + constructor(encoding?: BufferEncoding); + /** + * Returns a decoded string, ensuring that any incomplete multibyte characters at + * the end of the `Buffer`, or `TypedArray`, or `DataView` are omitted from the + * returned string and stored in an internal buffer for the next call to`stringDecoder.write()` or `stringDecoder.end()`. + * @since v0.1.99 + * @param buffer A `Buffer`, or `TypedArray`, or `DataView` containing the bytes to decode. + */ + write(buffer: Buffer): string; + /** + * Returns any remaining input stored in the internal buffer as a string. Bytes + * representing incomplete UTF-8 and UTF-16 characters will be replaced with + * substitution characters appropriate for the character encoding. + * + * If the `buffer` argument is provided, one final call to `stringDecoder.write()`is performed before returning the remaining input. + * After `end()` is called, the `stringDecoder` object can be reused for new input. + * @since v0.9.3 + * @param buffer A `Buffer`, or `TypedArray`, or `DataView` containing the bytes to decode. + */ + end(buffer?: Buffer): string; + } +} +declare module "node:string_decoder" { + export * from "string_decoder"; +} diff --git a/Url-Shortner/node_modules/@types/node/ts4.8/test.d.ts b/Url-Shortner/node_modules/@types/node/ts4.8/test.d.ts new file mode 100644 index 0000000..6f33fd5 --- /dev/null +++ b/Url-Shortner/node_modules/@types/node/ts4.8/test.d.ts @@ -0,0 +1,1446 @@ +/** + * The `node:test` module facilitates the creation of JavaScript tests. + * To access it: + * + * ```js + * import test from 'node:test'; + * ``` + * + * This module is only available under the `node:` scheme. The following will not + * work: + * + * ```js + * import test from 'test'; + * ``` + * + * Tests created via the `test` module consist of a single function that is + * processed in one of three ways: + * + * 1. A synchronous function that is considered failing if it throws an exception, + * and is considered passing otherwise. + * 2. A function that returns a `Promise` that is considered failing if the`Promise` rejects, and is considered passing if the `Promise` resolves. + * 3. A function that receives a callback function. If the callback receives any + * truthy value as its first argument, the test is considered failing. If a + * falsy value is passed as the first argument to the callback, the test is + * considered passing. If the test function receives a callback function and + * also returns a `Promise`, the test will fail. + * + * The following example illustrates how tests are written using the`test` module. + * + * ```js + * test('synchronous passing test', (t) => { + * // This test passes because it does not throw an exception. + * assert.strictEqual(1, 1); + * }); + * + * test('synchronous failing test', (t) => { + * // This test fails because it throws an exception. + * assert.strictEqual(1, 2); + * }); + * + * test('asynchronous passing test', async (t) => { + * // This test passes because the Promise returned by the async + * // function is not rejected. + * assert.strictEqual(1, 1); + * }); + * + * test('asynchronous failing test', async (t) => { + * // This test fails because the Promise returned by the async + * // function is rejected. + * assert.strictEqual(1, 2); + * }); + * + * test('failing test using Promises', (t) => { + * // Promises can be used directly as well. + * return new Promise((resolve, reject) => { + * setImmediate(() => { + * reject(new Error('this will cause the test to fail')); + * }); + * }); + * }); + * + * test('callback passing test', (t, done) => { + * // done() is the callback function. When the setImmediate() runs, it invokes + * // done() with no arguments. + * setImmediate(done); + * }); + * + * test('callback failing test', (t, done) => { + * // When the setImmediate() runs, done() is invoked with an Error object and + * // the test fails. + * setImmediate(() => { + * done(new Error('callback failure')); + * }); + * }); + * ``` + * + * If any tests fail, the process exit code is set to `1`. + * @since v18.0.0, v16.17.0 + * @see [source](https://github.com/nodejs/node/blob/v20.2.0/lib/test.js) + */ +declare module "node:test" { + import { Readable } from "node:stream"; + import { AsyncResource } from "node:async_hooks"; + /** + * ```js + * import { tap } from 'node:test/reporters'; + * import process from 'node:process'; + * + * run({ files: [path.resolve('./tests/test.js')] }) + * .compose(tap) + * .pipe(process.stdout); + * ``` + * @since v18.9.0, v16.19.0 + * @param options Configuration options for running tests. The following properties are supported: + */ + function run(options?: RunOptions): TestsStream; + /** + * The `test()` function is the value imported from the `test` module. Each + * invocation of this function results in reporting the test to the `TestsStream`. + * + * The `TestContext` object passed to the `fn` argument can be used to perform + * actions related to the current test. Examples include skipping the test, adding + * additional diagnostic information, or creating subtests. + * + * `test()` returns a `Promise` that resolves once the test completes. + * if `test()` is called within a `describe()` block, it resolve immediately. + * The return value can usually be discarded for top level tests. + * However, the return value from subtests should be used to prevent the parent + * test from finishing first and cancelling the subtest + * as shown in the following example. + * + * ```js + * test('top level test', async (t) => { + * // The setTimeout() in the following subtest would cause it to outlive its + * // parent test if 'await' is removed on the next line. Once the parent test + * // completes, it will cancel any outstanding subtests. + * await t.test('longer running subtest', async (t) => { + * return new Promise((resolve, reject) => { + * setTimeout(resolve, 1000); + * }); + * }); + * }); + * ``` + * + * The `timeout` option can be used to fail the test if it takes longer than`timeout` milliseconds to complete. However, it is not a reliable mechanism for + * canceling tests because a running test might block the application thread and + * thus prevent the scheduled cancellation. + * @since v18.0.0, v16.17.0 + * @param [name='The name'] The name of the test, which is displayed when reporting test results. + * @param options Configuration options for the test. The following properties are supported: + * @param [fn='A no-op function'] The function under test. The first argument to this function is a {@link TestContext} object. If the test uses callbacks, the callback function is passed as the + * second argument. + * @return Resolved with `undefined` once the test completes, or immediately if the test runs within {@link describe}. + */ + function test(name?: string, fn?: TestFn): Promise; + function test(name?: string, options?: TestOptions, fn?: TestFn): Promise; + function test(options?: TestOptions, fn?: TestFn): Promise; + function test(fn?: TestFn): Promise; + namespace test { + export { after, afterEach, before, beforeEach, describe, it, mock, only, run, skip, test, todo }; + } + /** + * The `describe()` function imported from the `node:test` module. Each + * invocation of this function results in the creation of a Subtest. + * After invocation of top level `describe` functions, + * all top level tests and suites will execute. + * @param [name='The name'] The name of the suite, which is displayed when reporting test results. + * @param options Configuration options for the suite. supports the same options as `test([name][, options][, fn])`. + * @param [fn='A no-op function'] The function under suite declaring all subtests and subsuites. The first argument to this function is a {@link SuiteContext} object. + * @return Immediately fulfilled with `undefined`. + */ + function describe(name?: string, options?: TestOptions, fn?: SuiteFn): Promise; + function describe(name?: string, fn?: SuiteFn): Promise; + function describe(options?: TestOptions, fn?: SuiteFn): Promise; + function describe(fn?: SuiteFn): Promise; + namespace describe { + /** + * Shorthand for skipping a suite, same as `describe([name], { skip: true }[, fn])`. + */ + function skip(name?: string, options?: TestOptions, fn?: SuiteFn): Promise; + function skip(name?: string, fn?: SuiteFn): Promise; + function skip(options?: TestOptions, fn?: SuiteFn): Promise; + function skip(fn?: SuiteFn): Promise; + /** + * Shorthand for marking a suite as `TODO`, same as `describe([name], { todo: true }[, fn])`. + */ + function todo(name?: string, options?: TestOptions, fn?: SuiteFn): Promise; + function todo(name?: string, fn?: SuiteFn): Promise; + function todo(options?: TestOptions, fn?: SuiteFn): Promise; + function todo(fn?: SuiteFn): Promise; + /** + * Shorthand for marking a suite as `only`, same as `describe([name], { only: true }[, fn])`. + * @since v18.15.0 + */ + function only(name?: string, options?: TestOptions, fn?: SuiteFn): Promise; + function only(name?: string, fn?: SuiteFn): Promise; + function only(options?: TestOptions, fn?: SuiteFn): Promise; + function only(fn?: SuiteFn): Promise; + } + /** + * Shorthand for `test()`. + * + * The `it()` function is imported from the `node:test` module. + * @since v18.6.0, v16.17.0 + */ + function it(name?: string, options?: TestOptions, fn?: TestFn): Promise; + function it(name?: string, fn?: TestFn): Promise; + function it(options?: TestOptions, fn?: TestFn): Promise; + function it(fn?: TestFn): Promise; + namespace it { + /** + * Shorthand for skipping a test, same as `it([name], { skip: true }[, fn])`. + */ + function skip(name?: string, options?: TestOptions, fn?: TestFn): Promise; + function skip(name?: string, fn?: TestFn): Promise; + function skip(options?: TestOptions, fn?: TestFn): Promise; + function skip(fn?: TestFn): Promise; + /** + * Shorthand for marking a test as `TODO`, same as `it([name], { todo: true }[, fn])`. + */ + function todo(name?: string, options?: TestOptions, fn?: TestFn): Promise; + function todo(name?: string, fn?: TestFn): Promise; + function todo(options?: TestOptions, fn?: TestFn): Promise; + function todo(fn?: TestFn): Promise; + /** + * Shorthand for marking a test as `only`, same as `it([name], { only: true }[, fn])`. + * @since v18.15.0 + */ + function only(name?: string, options?: TestOptions, fn?: TestFn): Promise; + function only(name?: string, fn?: TestFn): Promise; + function only(options?: TestOptions, fn?: TestFn): Promise; + function only(fn?: TestFn): Promise; + } + /** + * Shorthand for skipping a test, same as `test([name], { skip: true }[, fn])`. + * @since v20.2.0 + */ + function skip(name?: string, options?: TestOptions, fn?: TestFn): Promise; + function skip(name?: string, fn?: TestFn): Promise; + function skip(options?: TestOptions, fn?: TestFn): Promise; + function skip(fn?: TestFn): Promise; + /** + * Shorthand for marking a test as `TODO`, same as `test([name], { todo: true }[, fn])`. + * @since v20.2.0 + */ + function todo(name?: string, options?: TestOptions, fn?: TestFn): Promise; + function todo(name?: string, fn?: TestFn): Promise; + function todo(options?: TestOptions, fn?: TestFn): Promise; + function todo(fn?: TestFn): Promise; + /** + * Shorthand for marking a test as `only`, same as `test([name], { only: true }[, fn])`. + * @since v20.2.0 + */ + function only(name?: string, options?: TestOptions, fn?: TestFn): Promise; + function only(name?: string, fn?: TestFn): Promise; + function only(options?: TestOptions, fn?: TestFn): Promise; + function only(fn?: TestFn): Promise; + /** + * The type of a function under test. The first argument to this function is a + * {@link TestContext} object. If the test uses callbacks, the callback function is passed as + * the second argument. + */ + type TestFn = (t: TestContext, done: (result?: any) => void) => void | Promise; + /** + * The type of a function under Suite. + */ + type SuiteFn = (s: SuiteContext) => void | Promise; + interface TestShard { + /** + * A positive integer between 1 and `` that specifies the index of the shard to run. + */ + index: number; + /** + * A positive integer that specifies the total number of shards to split the test files to. + */ + total: number; + } + interface RunOptions { + /** + * If a number is provided, then that many files would run in parallel. + * If truthy, it would run (number of cpu cores - 1) files in parallel. + * If falsy, it would only run one file at a time. + * If unspecified, subtests inherit this value from their parent. + * @default true + */ + concurrency?: number | boolean | undefined; + /** + * An array containing the list of files to run. + * If unspecified, the test runner execution model will be used. + */ + files?: readonly string[] | undefined; + /** + * Allows aborting an in-progress test execution. + * @default undefined + */ + signal?: AbortSignal | undefined; + /** + * A number of milliseconds the test will fail after. + * If unspecified, subtests inherit this value from their parent. + * @default Infinity + */ + timeout?: number | undefined; + /** + * Sets inspector port of test child process. + * If a nullish value is provided, each process gets its own port, + * incremented from the primary's `process.debugPort`. + */ + inspectPort?: number | (() => number) | undefined; + /** + * That can be used to only run tests whose name matches the provided pattern. + * Test name patterns are interpreted as JavaScript regular expressions. + * For each test that is executed, any corresponding test hooks, such as `beforeEach()`, are also run. + */ + testNamePatterns?: string | RegExp | string[] | RegExp[]; + /** + * A function that accepts the TestsStream instance and can be used to setup listeners before any tests are run. + */ + setup?: (root: unknown) => void | Promise; + /** + * Whether to run in watch mode or not. + * @default false + */ + watch?: boolean | undefined; + /** + * Running tests in a specific shard. + * @default undefined + */ + shard?: TestShard | undefined; + } + class Test extends AsyncResource { + concurrency: number; + nesting: number; + only: boolean; + reporter: TestsStream; + runOnlySubtests: boolean; + testNumber: number; + timeout: number | null; + } + /** + * A successful call to `run()` method will return a new `TestsStream` object, streaming a series of events representing the execution of the tests.`TestsStream` will emit events, in the + * order of the tests definition + * @since v18.9.0, v16.19.0 + */ + class TestsStream extends Readable implements NodeJS.ReadableStream { + addListener(event: "test:diagnostic", listener: (data: DiagnosticData) => void): this; + addListener(event: "test:fail", listener: (data: TestFail) => void): this; + addListener(event: "test:pass", listener: (data: TestPass) => void): this; + addListener(event: "test:plan", listener: (data: TestPlan) => void): this; + addListener(event: "test:start", listener: (data: TestStart) => void): this; + addListener(event: "test:stderr", listener: (data: TestStderr) => void): this; + addListener(event: "test:stdout", listener: (data: TestStdout) => void): this; + addListener(event: string, listener: (...args: any[]) => void): this; + emit(event: "test:diagnostic", data: DiagnosticData): boolean; + emit(event: "test:fail", data: TestFail): boolean; + emit(event: "test:pass", data: TestPass): boolean; + emit(event: "test:plan", data: TestPlan): boolean; + emit(event: "test:start", data: TestStart): boolean; + emit(event: "test:stderr", data: TestStderr): boolean; + emit(event: "test:stdout", data: TestStdout): boolean; + emit(event: string | symbol, ...args: any[]): boolean; + on(event: "test:diagnostic", listener: (data: DiagnosticData) => void): this; + on(event: "test:fail", listener: (data: TestFail) => void): this; + on(event: "test:pass", listener: (data: TestPass) => void): this; + on(event: "test:plan", listener: (data: TestPlan) => void): this; + on(event: "test:start", listener: (data: TestStart) => void): this; + on(event: "test:stderr", listener: (data: TestStderr) => void): this; + on(event: "test:stdout", listener: (data: TestStdout) => void): this; + on(event: string, listener: (...args: any[]) => void): this; + once(event: "test:diagnostic", listener: (data: DiagnosticData) => void): this; + once(event: "test:fail", listener: (data: TestFail) => void): this; + once(event: "test:pass", listener: (data: TestPass) => void): this; + once(event: "test:plan", listener: (data: TestPlan) => void): this; + once(event: "test:start", listener: (data: TestStart) => void): this; + once(event: "test:stderr", listener: (data: TestStderr) => void): this; + once(event: "test:stdout", listener: (data: TestStdout) => void): this; + once(event: string, listener: (...args: any[]) => void): this; + prependListener(event: "test:diagnostic", listener: (data: DiagnosticData) => void): this; + prependListener(event: "test:fail", listener: (data: TestFail) => void): this; + prependListener(event: "test:pass", listener: (data: TestPass) => void): this; + prependListener(event: "test:plan", listener: (data: TestPlan) => void): this; + prependListener(event: "test:start", listener: (data: TestStart) => void): this; + prependListener(event: "test:stderr", listener: (data: TestStderr) => void): this; + prependListener(event: "test:stdout", listener: (data: TestStdout) => void): this; + prependListener(event: string, listener: (...args: any[]) => void): this; + prependOnceListener(event: "test:diagnostic", listener: (data: DiagnosticData) => void): this; + prependOnceListener(event: "test:fail", listener: (data: TestFail) => void): this; + prependOnceListener(event: "test:pass", listener: (data: TestPass) => void): this; + prependOnceListener(event: "test:plan", listener: (data: TestPlan) => void): this; + prependOnceListener(event: "test:start", listener: (data: TestStart) => void): this; + prependOnceListener(event: "test:stderr", listener: (data: TestStderr) => void): this; + prependOnceListener(event: "test:stdout", listener: (data: TestStdout) => void): this; + prependOnceListener(event: string, listener: (...args: any[]) => void): this; + } + /** + * An instance of `TestContext` is passed to each test function in order to + * interact with the test runner. However, the `TestContext` constructor is not + * exposed as part of the API. + * @since v18.0.0, v16.17.0 + */ + class TestContext { + /** + * This function is used to create a hook running before subtest of the current test. + * @param fn The hook function. If the hook uses callbacks, the callback function is passed as + * the second argument. Default: A no-op function. + * @param options Configuration options for the hook. + * @since v20.1.0 + */ + before: typeof before; + /** + * This function is used to create a hook running before each subtest of the current test. + * @param fn The hook function. If the hook uses callbacks, the callback function is passed as + * the second argument. Default: A no-op function. + * @param options Configuration options for the hook. + * @since v18.8.0 + */ + beforeEach: typeof beforeEach; + /** + * This function is used to create a hook that runs after the current test finishes. + * @param fn The hook function. If the hook uses callbacks, the callback function is passed as + * the second argument. Default: A no-op function. + * @param options Configuration options for the hook. + * @since v18.13.0 + */ + after: typeof after; + /** + * This function is used to create a hook running after each subtest of the current test. + * @param fn The hook function. If the hook uses callbacks, the callback function is passed as + * the second argument. Default: A no-op function. + * @param options Configuration options for the hook. + * @since v18.8.0 + */ + afterEach: typeof afterEach; + /** + * This function is used to write diagnostics to the output. Any diagnostic + * information is included at the end of the test's results. This function does + * not return a value. + * + * ```js + * test('top level test', (t) => { + * t.diagnostic('A diagnostic message'); + * }); + * ``` + * @since v18.0.0, v16.17.0 + * @param message Message to be reported. + */ + diagnostic(message: string): void; + /** + * The name of the test. + * @since v18.8.0, v16.18.0 + */ + readonly name: string; + /** + * If `shouldRunOnlyTests` is truthy, the test context will only run tests that + * have the `only` option set. Otherwise, all tests are run. If Node.js was not + * started with the `--test-only` command-line option, this function is a + * no-op. + * + * ```js + * test('top level test', (t) => { + * // The test context can be set to run subtests with the 'only' option. + * t.runOnly(true); + * return Promise.all([ + * t.test('this subtest is now skipped'), + * t.test('this subtest is run', { only: true }), + * ]); + * }); + * ``` + * @since v18.0.0, v16.17.0 + * @param shouldRunOnlyTests Whether or not to run `only` tests. + */ + runOnly(shouldRunOnlyTests: boolean): void; + /** + * ```js + * test('top level test', async (t) => { + * await fetch('some/uri', { signal: t.signal }); + * }); + * ``` + * @since v18.7.0, v16.17.0 + */ + readonly signal: AbortSignal; + /** + * This function causes the test's output to indicate the test as skipped. If`message` is provided, it is included in the output. Calling `skip()` does + * not terminate execution of the test function. This function does not return a + * value. + * + * ```js + * test('top level test', (t) => { + * // Make sure to return here as well if the test contains additional logic. + * t.skip('this is skipped'); + * }); + * ``` + * @since v18.0.0, v16.17.0 + * @param message Optional skip message. + */ + skip(message?: string): void; + /** + * This function adds a `TODO` directive to the test's output. If `message` is + * provided, it is included in the output. Calling `todo()` does not terminate + * execution of the test function. This function does not return a value. + * + * ```js + * test('top level test', (t) => { + * // This test is marked as `TODO` + * t.todo('this is a todo'); + * }); + * ``` + * @since v18.0.0, v16.17.0 + * @param message Optional `TODO` message. + */ + todo(message?: string): void; + /** + * This function is used to create subtests under the current test. This function behaves in + * the same fashion as the top level {@link test} function. + * @since v18.0.0 + * @param name The name of the test, which is displayed when reporting test results. + * Default: The `name` property of fn, or `''` if `fn` does not have a name. + * @param options Configuration options for the test + * @param fn The function under test. This first argument to this function is a + * {@link TestContext} object. If the test uses callbacks, the callback function is + * passed as the second argument. Default: A no-op function. + * @returns A {@link Promise} resolved with `undefined` once the test completes. + */ + test: typeof test; + /** + * Each test provides its own MockTracker instance. + */ + readonly mock: MockTracker; + } + /** + * An instance of `SuiteContext` is passed to each suite function in order to + * interact with the test runner. However, the `SuiteContext` constructor is not + * exposed as part of the API. + * @since v18.7.0, v16.17.0 + */ + class SuiteContext { + /** + * The name of the suite. + * @since v18.8.0, v16.18.0 + */ + readonly name: string; + /** + * Can be used to abort test subtasks when the test has been aborted. + * @since v18.7.0, v16.17.0 + */ + readonly signal: AbortSignal; + } + interface TestOptions { + /** + * If a number is provided, then that many tests would run in parallel. + * If truthy, it would run (number of cpu cores - 1) tests in parallel. + * For subtests, it will be `Infinity` tests in parallel. + * If falsy, it would only run one test at a time. + * If unspecified, subtests inherit this value from their parent. + * @default false + */ + concurrency?: number | boolean | undefined; + /** + * If truthy, and the test context is configured to run `only` tests, then this test will be + * run. Otherwise, the test is skipped. + * @default false + */ + only?: boolean | undefined; + /** + * Allows aborting an in-progress test. + * @since v18.8.0 + */ + signal?: AbortSignal | undefined; + /** + * If truthy, the test is skipped. If a string is provided, that string is displayed in the + * test results as the reason for skipping the test. + * @default false + */ + skip?: boolean | string | undefined; + /** + * A number of milliseconds the test will fail after. If unspecified, subtests inherit this + * value from their parent. + * @default Infinity + * @since v18.7.0 + */ + timeout?: number | undefined; + /** + * If truthy, the test marked as `TODO`. If a string is provided, that string is displayed in + * the test results as the reason why the test is `TODO`. + * @default false + */ + todo?: boolean | string | undefined; + } + /** + * This function is used to create a hook running before running a suite. + * + * ```js + * describe('tests', async () => { + * before(() => console.log('about to run some test')); + * it('is a subtest', () => { + * assert.ok('some relevant assertion here'); + * }); + * }); + * ``` + * @since v18.8.0, v16.18.0 + * @param [fn='A no-op function'] The hook function. If the hook uses callbacks, the callback function is passed as the second argument. + * @param options Configuration options for the hook. The following properties are supported: + */ + function before(fn?: HookFn, options?: HookOptions): void; + /** + * This function is used to create a hook running after running a suite. + * + * ```js + * describe('tests', async () => { + * after(() => console.log('finished running tests')); + * it('is a subtest', () => { + * assert.ok('some relevant assertion here'); + * }); + * }); + * ``` + * @since v18.8.0, v16.18.0 + * @param [fn='A no-op function'] The hook function. If the hook uses callbacks, the callback function is passed as the second argument. + * @param options Configuration options for the hook. The following properties are supported: + */ + function after(fn?: HookFn, options?: HookOptions): void; + /** + * This function is used to create a hook running + * before each subtest of the current suite. + * + * ```js + * describe('tests', async () => { + * beforeEach(() => console.log('about to run a test')); + * it('is a subtest', () => { + * assert.ok('some relevant assertion here'); + * }); + * }); + * ``` + * @since v18.8.0, v16.18.0 + * @param [fn='A no-op function'] The hook function. If the hook uses callbacks, the callback function is passed as the second argument. + * @param options Configuration options for the hook. The following properties are supported: + */ + function beforeEach(fn?: HookFn, options?: HookOptions): void; + /** + * This function is used to create a hook running + * after each subtest of the current test. + * + * ```js + * describe('tests', async () => { + * afterEach(() => console.log('finished running a test')); + * it('is a subtest', () => { + * assert.ok('some relevant assertion here'); + * }); + * }); + * ``` + * @since v18.8.0, v16.18.0 + * @param [fn='A no-op function'] The hook function. If the hook uses callbacks, the callback function is passed as the second argument. + * @param options Configuration options for the hook. The following properties are supported: + */ + function afterEach(fn?: HookFn, options?: HookOptions): void; + /** + * The hook function. If the hook uses callbacks, the callback function is passed as the + * second argument. + */ + type HookFn = (s: SuiteContext, done: (result?: any) => void) => any; + /** + * Configuration options for hooks. + * @since v18.8.0 + */ + interface HookOptions { + /** + * Allows aborting an in-progress hook. + */ + signal?: AbortSignal | undefined; + /** + * A number of milliseconds the hook will fail after. If unspecified, subtests inherit this + * value from their parent. + * @default Infinity + */ + timeout?: number | undefined; + } + interface MockFunctionOptions { + /** + * The number of times that the mock will use the behavior of `implementation`. + * Once the mock function has been called `times` times, + * it will automatically restore the behavior of `original`. + * This value must be an integer greater than zero. + * @default Infinity + */ + times?: number | undefined; + } + interface MockMethodOptions extends MockFunctionOptions { + /** + * If `true`, `object[methodName]` is treated as a getter. + * This option cannot be used with the `setter` option. + */ + getter?: boolean | undefined; + /** + * If `true`, `object[methodName]` is treated as a setter. + * This option cannot be used with the `getter` option. + */ + setter?: boolean | undefined; + } + type Mock = F & { + mock: MockFunctionContext; + }; + type NoOpFunction = (...args: any[]) => undefined; + type FunctionPropertyNames = { + [K in keyof T]: T[K] extends Function ? K : never; + }[keyof T]; + /** + * The `MockTracker` class is used to manage mocking functionality. The test runner + * module provides a top level `mock` export which is a `MockTracker` instance. + * Each test also provides its own `MockTracker` instance via the test context's`mock` property. + * @since v19.1.0, v18.13.0 + */ + class MockTracker { + /** + * This function is used to create a mock function. + * + * The following example creates a mock function that increments a counter by one + * on each invocation. The `times` option is used to modify the mock behavior such + * that the first two invocations add two to the counter instead of one. + * + * ```js + * test('mocks a counting function', (t) => { + * let cnt = 0; + * + * function addOne() { + * cnt++; + * return cnt; + * } + * + * function addTwo() { + * cnt += 2; + * return cnt; + * } + * + * const fn = t.mock.fn(addOne, addTwo, { times: 2 }); + * + * assert.strictEqual(fn(), 2); + * assert.strictEqual(fn(), 4); + * assert.strictEqual(fn(), 5); + * assert.strictEqual(fn(), 6); + * }); + * ``` + * @since v19.1.0, v18.13.0 + * @param [original='A no-op function'] An optional function to create a mock on. + * @param implementation An optional function used as the mock implementation for `original`. This is useful for creating mocks that exhibit one behavior for a specified number of calls and + * then restore the behavior of `original`. + * @param options Optional configuration options for the mock function. The following properties are supported: + * @return The mocked function. The mocked function contains a special `mock` property, which is an instance of {@link MockFunctionContext}, and can be used for inspecting and changing the + * behavior of the mocked function. + */ + fn(original?: F, options?: MockFunctionOptions): Mock; + fn( + original?: F, + implementation?: Implementation, + options?: MockFunctionOptions, + ): Mock; + /** + * This function is used to create a mock on an existing object method. The + * following example demonstrates how a mock is created on an existing object + * method. + * + * ```js + * test('spies on an object method', (t) => { + * const number = { + * value: 5, + * subtract(a) { + * return this.value - a; + * }, + * }; + * + * t.mock.method(number, 'subtract'); + * assert.strictEqual(number.subtract.mock.calls.length, 0); + * assert.strictEqual(number.subtract(3), 2); + * assert.strictEqual(number.subtract.mock.calls.length, 1); + * + * const call = number.subtract.mock.calls[0]; + * + * assert.deepStrictEqual(call.arguments, [3]); + * assert.strictEqual(call.result, 2); + * assert.strictEqual(call.error, undefined); + * assert.strictEqual(call.target, undefined); + * assert.strictEqual(call.this, number); + * }); + * ``` + * @since v19.1.0, v18.13.0 + * @param object The object whose method is being mocked. + * @param methodName The identifier of the method on `object` to mock. If `object[methodName]` is not a function, an error is thrown. + * @param implementation An optional function used as the mock implementation for `object[methodName]`. + * @param options Optional configuration options for the mock method. The following properties are supported: + * @return The mocked method. The mocked method contains a special `mock` property, which is an instance of {@link MockFunctionContext}, and can be used for inspecting and changing the + * behavior of the mocked method. + */ + method< + MockedObject extends object, + MethodName extends FunctionPropertyNames, + >( + object: MockedObject, + methodName: MethodName, + options?: MockFunctionOptions, + ): MockedObject[MethodName] extends Function ? Mock + : never; + method< + MockedObject extends object, + MethodName extends FunctionPropertyNames, + Implementation extends Function, + >( + object: MockedObject, + methodName: MethodName, + implementation: Implementation, + options?: MockFunctionOptions, + ): MockedObject[MethodName] extends Function ? Mock + : never; + method( + object: MockedObject, + methodName: keyof MockedObject, + options: MockMethodOptions, + ): Mock; + method( + object: MockedObject, + methodName: keyof MockedObject, + implementation: Function, + options: MockMethodOptions, + ): Mock; + + /** + * This function is syntax sugar for `MockTracker.method` with `options.getter`set to `true`. + * @since v19.3.0, v18.13.0 + */ + getter< + MockedObject extends object, + MethodName extends keyof MockedObject, + >( + object: MockedObject, + methodName: MethodName, + options?: MockFunctionOptions, + ): Mock<() => MockedObject[MethodName]>; + getter< + MockedObject extends object, + MethodName extends keyof MockedObject, + Implementation extends Function, + >( + object: MockedObject, + methodName: MethodName, + implementation?: Implementation, + options?: MockFunctionOptions, + ): Mock<(() => MockedObject[MethodName]) | Implementation>; + /** + * This function is syntax sugar for `MockTracker.method` with `options.setter`set to `true`. + * @since v19.3.0, v18.13.0 + */ + setter< + MockedObject extends object, + MethodName extends keyof MockedObject, + >( + object: MockedObject, + methodName: MethodName, + options?: MockFunctionOptions, + ): Mock<(value: MockedObject[MethodName]) => void>; + setter< + MockedObject extends object, + MethodName extends keyof MockedObject, + Implementation extends Function, + >( + object: MockedObject, + methodName: MethodName, + implementation?: Implementation, + options?: MockFunctionOptions, + ): Mock<((value: MockedObject[MethodName]) => void) | Implementation>; + /** + * This function restores the default behavior of all mocks that were previously + * created by this `MockTracker` and disassociates the mocks from the`MockTracker` instance. Once disassociated, the mocks can still be used, but the`MockTracker` instance can no longer be + * used to reset their behavior or + * otherwise interact with them. + * + * After each test completes, this function is called on the test context's`MockTracker`. If the global `MockTracker` is used extensively, calling this + * function manually is recommended. + * @since v19.1.0, v18.13.0 + */ + reset(): void; + /** + * This function restores the default behavior of all mocks that were previously + * created by this `MockTracker`. Unlike `mock.reset()`, `mock.restoreAll()` does + * not disassociate the mocks from the `MockTracker` instance. + * @since v19.1.0, v18.13.0 + */ + restoreAll(): void; + timers: MockTimers; + } + const mock: MockTracker; + interface MockFunctionCall< + F extends Function, + ReturnType = F extends (...args: any) => infer T ? T + : F extends abstract new(...args: any) => infer T ? T + : unknown, + Args = F extends (...args: infer Y) => any ? Y + : F extends abstract new(...args: infer Y) => any ? Y + : unknown[], + > { + /** + * An array of the arguments passed to the mock function. + */ + arguments: Args; + /** + * If the mocked function threw then this property contains the thrown value. + */ + error: unknown | undefined; + /** + * The value returned by the mocked function. + * + * If the mocked function threw, it will be `undefined`. + */ + result: ReturnType | undefined; + /** + * An `Error` object whose stack can be used to determine the callsite of the mocked function invocation. + */ + stack: Error; + /** + * If the mocked function is a constructor, this field contains the class being constructed. + * Otherwise this will be `undefined`. + */ + target: F extends abstract new(...args: any) => any ? F : undefined; + /** + * The mocked function's `this` value. + */ + this: unknown; + } + /** + * The `MockFunctionContext` class is used to inspect or manipulate the behavior of + * mocks created via the `MockTracker` APIs. + * @since v19.1.0, v18.13.0 + */ + class MockFunctionContext { + /** + * A getter that returns a copy of the internal array used to track calls to the + * mock. Each entry in the array is an object with the following properties. + * @since v19.1.0, v18.13.0 + */ + readonly calls: Array>; + /** + * This function returns the number of times that this mock has been invoked. This + * function is more efficient than checking `ctx.calls.length` because `ctx.calls`is a getter that creates a copy of the internal call tracking array. + * @since v19.1.0, v18.13.0 + * @return The number of times that this mock has been invoked. + */ + callCount(): number; + /** + * This function is used to change the behavior of an existing mock. + * + * The following example creates a mock function using `t.mock.fn()`, calls the + * mock function, and then changes the mock implementation to a different function. + * + * ```js + * test('changes a mock behavior', (t) => { + * let cnt = 0; + * + * function addOne() { + * cnt++; + * return cnt; + * } + * + * function addTwo() { + * cnt += 2; + * return cnt; + * } + * + * const fn = t.mock.fn(addOne); + * + * assert.strictEqual(fn(), 1); + * fn.mock.mockImplementation(addTwo); + * assert.strictEqual(fn(), 3); + * assert.strictEqual(fn(), 5); + * }); + * ``` + * @since v19.1.0, v18.13.0 + * @param implementation The function to be used as the mock's new implementation. + */ + mockImplementation(implementation: Function): void; + /** + * This function is used to change the behavior of an existing mock for a single + * invocation. Once invocation `onCall` has occurred, the mock will revert to + * whatever behavior it would have used had `mockImplementationOnce()` not been + * called. + * + * The following example creates a mock function using `t.mock.fn()`, calls the + * mock function, changes the mock implementation to a different function for the + * next invocation, and then resumes its previous behavior. + * + * ```js + * test('changes a mock behavior once', (t) => { + * let cnt = 0; + * + * function addOne() { + * cnt++; + * return cnt; + * } + * + * function addTwo() { + * cnt += 2; + * return cnt; + * } + * + * const fn = t.mock.fn(addOne); + * + * assert.strictEqual(fn(), 1); + * fn.mock.mockImplementationOnce(addTwo); + * assert.strictEqual(fn(), 3); + * assert.strictEqual(fn(), 4); + * }); + * ``` + * @since v19.1.0, v18.13.0 + * @param implementation The function to be used as the mock's implementation for the invocation number specified by `onCall`. + * @param onCall The invocation number that will use `implementation`. If the specified invocation has already occurred then an exception is thrown. + */ + mockImplementationOnce(implementation: Function, onCall?: number): void; + /** + * Resets the call history of the mock function. + * @since v19.3.0, v18.13.0 + */ + resetCalls(): void; + /** + * Resets the implementation of the mock function to its original behavior. The + * mock can still be used after calling this function. + * @since v19.1.0, v18.13.0 + */ + restore(): void; + } + type Timer = "setInterval" | "clearInterval" | "setTimeout" | "clearTimeout"; + /** + * Mocking timers is a technique commonly used in software testing to simulate and + * control the behavior of timers, such as `setInterval` and `setTimeout`, + * without actually waiting for the specified time intervals. + * + * The `MockTracker` provides a top-level `timers` export + * which is a `MockTimers` instance. + * @since v20.4.0 + * @experimental + */ + class MockTimers { + /** + * Enables timer mocking for the specified timers. + * + * **Note:** When you enable mocking for a specific timer, its associated + * clear function will also be implicitly mocked. + * + * Example usage: + * + * ```js + * import { mock } from 'node:test'; + * mock.timers.enable(['setInterval']); + * ``` + * + * ```js + * const { mock } = require('node:test'); + * mock.timers.enable(['setInterval']); + * ``` + * + * The above example enables mocking for the `setInterval` timer and + * implicitly mocks the `clearInterval` function. Only the `setInterval`and `clearInterval` functions from `node:timers`,`node:timers/promises`, and`globalThis` will be mocked. + * + * Alternatively, if you call `mock.timers.enable()` without any parameters: + * + * All timers (`'setInterval'`, `'clearInterval'`, `'setTimeout'`, and `'clearTimeout'`) + * will be mocked. The `setInterval`, `clearInterval`, `setTimeout`, and `clearTimeout`functions from `node:timers`, `node:timers/promises`, + * and `globalThis` will be mocked. + * @since v20.4.0 + */ + enable(timers?: Timer[]): void; + /** + * This function restores the default behavior of all mocks that were previously + * created by this `MockTimers` instance and disassociates the mocks + * from the `MockTracker` instance. + * + * **Note:** After each test completes, this function is called on + * the test context's `MockTracker`. + * + * ```js + * import { mock } from 'node:test'; + * mock.timers.reset(); + * ``` + * + * ```js + * const { mock } = require('node:test'); + * mock.timers.reset(); + * ``` + * @since v20.4.0 + */ + reset(): void; + /** + * Advances time for all mocked timers. + * + * **Note:** This diverges from how `setTimeout` in Node.js behaves and accepts + * only positive numbers. In Node.js, `setTimeout` with negative numbers is + * only supported for web compatibility reasons. + * + * The following example mocks a `setTimeout` function and + * by using `.tick` advances in + * time triggering all pending timers. + * + * ```js + * import assert from 'node:assert'; + * import { test } from 'node:test'; + * + * test('mocks setTimeout to be executed synchronously without having to actually wait for it', (context) => { + * const fn = context.mock.fn(); + * + * context.mock.timers.enable(['setTimeout']); + * + * setTimeout(fn, 9999); + * + * assert.strictEqual(fn.mock.callCount(), 0); + * + * // Advance in time + * context.mock.timers.tick(9999); + * + * assert.strictEqual(fn.mock.callCount(), 1); + * }); + * ``` + * + * ```js + * const assert = require('node:assert'); + * const { test } = require('node:test'); + * + * test('mocks setTimeout to be executed synchronously without having to actually wait for it', (context) => { + * const fn = context.mock.fn(); + * context.mock.timers.enable(['setTimeout']); + * + * setTimeout(fn, 9999); + * assert.strictEqual(fn.mock.callCount(), 0); + * + * // Advance in time + * context.mock.timers.tick(9999); + * + * assert.strictEqual(fn.mock.callCount(), 1); + * }); + * ``` + * + * Alternativelly, the `.tick` function can be called many times + * + * ```js + * import assert from 'node:assert'; + * import { test } from 'node:test'; + * + * test('mocks setTimeout to be executed synchronously without having to actually wait for it', (context) => { + * const fn = context.mock.fn(); + * context.mock.timers.enable(['setTimeout']); + * const nineSecs = 9000; + * setTimeout(fn, nineSecs); + * + * const twoSeconds = 3000; + * context.mock.timers.tick(twoSeconds); + * context.mock.timers.tick(twoSeconds); + * context.mock.timers.tick(twoSeconds); + * + * assert.strictEqual(fn.mock.callCount(), 1); + * }); + * ``` + * + * ```js + * const assert = require('node:assert'); + * const { test } = require('node:test'); + * + * test('mocks setTimeout to be executed synchronously without having to actually wait for it', (context) => { + * const fn = context.mock.fn(); + * context.mock.timers.enable(['setTimeout']); + * const nineSecs = 9000; + * setTimeout(fn, nineSecs); + * + * const twoSeconds = 3000; + * context.mock.timers.tick(twoSeconds); + * context.mock.timers.tick(twoSeconds); + * context.mock.timers.tick(twoSeconds); + * + * assert.strictEqual(fn.mock.callCount(), 1); + * }); + * ``` + * @since v20.4.0 + */ + tick(milliseconds: number): void; + /** + * Triggers all pending mocked timers immediately. + * + * The example below triggers all pending timers immediately, + * causing them to execute without any delay. + * + * ```js + * import assert from 'node:assert'; + * import { test } from 'node:test'; + * + * test('runAll functions following the given order', (context) => { + * context.mock.timers.enable(['setTimeout']); + * const results = []; + * setTimeout(() => results.push(1), 9999); + * + * // Notice that if both timers have the same timeout, + * // the order of execution is guaranteed + * setTimeout(() => results.push(3), 8888); + * setTimeout(() => results.push(2), 8888); + * + * assert.deepStrictEqual(results, []); + * + * context.mock.timers.runAll(); + * + * assert.deepStrictEqual(results, [3, 2, 1]); + * }); + * ``` + * + * ```js + * const assert = require('node:assert'); + * const { test } = require('node:test'); + * + * test('runAll functions following the given order', (context) => { + * context.mock.timers.enable(['setTimeout']); + * const results = []; + * setTimeout(() => results.push(1), 9999); + * + * // Notice that if both timers have the same timeout, + * // the order of execution is guaranteed + * setTimeout(() => results.push(3), 8888); + * setTimeout(() => results.push(2), 8888); + * + * assert.deepStrictEqual(results, []); + * + * context.mock.timers.runAll(); + * + * assert.deepStrictEqual(results, [3, 2, 1]); + * }); + * ``` + * + * **Note:** The `runAll()` function is specifically designed for + * triggering timers in the context of timer mocking. + * It does not have any effect on real-time system + * clocks or actual timers outside of the mocking environment. + * @since v20.4.0 + */ + runAll(): void; + /** + * Calls {@link MockTimers.reset()}. + */ + [Symbol.dispose](): void; + } + export { after, afterEach, before, beforeEach, describe, it, mock, only, run, skip, test, test as default, todo, Mock }; +} + +interface DiagnosticData { + /** + * The diagnostic message. + */ + message: string; + /** + * The nesting level of the test. + */ + nesting: number; + /** + * The path of the test file, undefined if test is not ran through a file. + */ + file?: string; +} +interface TestFail { + /** + * Additional execution metadata. + */ + details: { + /** + * The duration of the test in milliseconds. + */ + duration_ms: number; + /** + * The error thrown by the test. + */ + error: Error; + /** + * The type of the test, used to denote whether this is a suite. + * @since 20.0.0, 19.9.0, 18.17.0 + */ + type?: "suite"; + }; + /** + * The test name. + */ + name: string; + /** + * The nesting level of the test. + */ + nesting: number; + /** + * The ordinal number of the test. + */ + testNumber: number; + /** + * Present if `context.todo` is called. + */ + todo?: string | boolean; + /** + * Present if `context.skip` is called. + */ + skip?: string | boolean; + /** + * The path of the test file, undefined if test is not ran through a file. + */ + file?: string; +} +interface TestPass { + /** + * Additional execution metadata. + */ + details: { + /** + * The duration of the test in milliseconds. + */ + duration_ms: number; + /** + * The type of the test, used to denote whether this is a suite. + * @since 20.0.0, 19.9.0, 18.17.0 + */ + type?: "suite"; + }; + /** + * The test name. + */ + name: string; + /** + * The nesting level of the test. + */ + nesting: number; + /** + * The ordinal number of the test. + */ + testNumber: number; + /** + * Present if `context.todo` is called. + */ + todo?: string | boolean; + /** + * Present if `context.skip` is called. + */ + skip?: string | boolean; + /** + * The path of the test file, undefined if test is not ran through a file. + */ + file?: string; +} +interface TestPlan { + /** + * The nesting level of the test. + */ + nesting: number; + /** + * The number of subtests that have ran. + */ + count: number; + /** + * The path of the test file, undefined if test is not ran through a file. + */ + file?: string; +} +interface TestStart { + /** + * The test name. + */ + name: string; + /** + * The nesting level of the test. + */ + nesting: number; + /** + * The path of the test file, undefined if test is not ran through a file. + */ + file?: string; +} +interface TestStderr { + /** + * The path of the test file, undefined if test is not ran through a file. + */ + file?: string; + /** + * The message written to `stderr` + */ + message: string; +} +interface TestStdout { + /** + * The path of the test file, undefined if test is not ran through a file. + */ + file?: string; + /** + * The message written to `stdout` + */ + message: string; +} +interface TestEnqueue { + /** + * The test name + */ + name: string; + /** + * The path of the test file, undefined if test is not ran through a file. + */ + file?: string; + /** + * The nesting level of the test. + */ + nesting: number; +} +interface TestDequeue { + /** + * The test name + */ + name: string; + /** + * The path of the test file, undefined if test is not ran through a file. + */ + file?: string; + /** + * The nesting level of the test. + */ + nesting: number; +} + +/** + * The `node:test/reporters` module exposes the builtin-reporters for `node:test`. + * To access it: + * + * ```js + * import test from 'node:test/reporters'; + * ``` + * + * This module is only available under the `node:` scheme. The following will not + * work: + * + * ```js + * import test from 'test/reporters'; + * ``` + * @since v19.9.0 + * @see [source](https://github.com/nodejs/node/blob/v20.2.0/lib/test/reporters.js) + */ +declare module "node:test/reporters" { + import { Transform } from "node:stream"; + + type TestEvent = + | { type: "test:diagnostic"; data: DiagnosticData } + | { type: "test:fail"; data: TestFail } + | { type: "test:pass"; data: TestPass } + | { type: "test:plan"; data: TestPlan } + | { type: "test:start"; data: TestStart } + | { type: "test:stderr"; data: TestStderr } + | { type: "test:stdout"; data: TestStdout } + | { type: "test:enqueue"; data: TestEnqueue } + | { type: "test:dequeue"; data: TestDequeue } + | { type: "test:watch:drained" }; + type TestEventGenerator = AsyncGenerator; + + /** + * The `dot` reporter outputs the test results in a compact format, + * where each passing test is represented by a `.`, + * and each failing test is represented by a `X`. + */ + function dot(source: TestEventGenerator): AsyncGenerator<"\n" | "." | "X", void>; + /** + * The `tap` reporter outputs the test results in the [TAP](https://testanything.org/) format. + */ + function tap(source: TestEventGenerator): AsyncGenerator; + /** + * The `spec` reporter outputs the test results in a human-readable format. + */ + class Spec extends Transform { + constructor(); + } + export { dot, Spec as spec, tap, TestEvent }; +} diff --git a/Url-Shortner/node_modules/@types/node/ts4.8/timers.d.ts b/Url-Shortner/node_modules/@types/node/ts4.8/timers.d.ts new file mode 100644 index 0000000..1434e7d --- /dev/null +++ b/Url-Shortner/node_modules/@types/node/ts4.8/timers.d.ts @@ -0,0 +1,240 @@ +/** + * The `timer` module exposes a global API for scheduling functions to + * be called at some future period of time. Because the timer functions are + * globals, there is no need to call `require('node:timers')` to use the API. + * + * The timer functions within Node.js implement a similar API as the timers API + * provided by Web Browsers but use a different internal implementation that is + * built around the Node.js [Event Loop](https://nodejs.org/en/docs/guides/event-loop-timers-and-nexttick/#setimmediate-vs-settimeout). + * @see [source](https://github.com/nodejs/node/blob/v20.2.0/lib/timers.js) + */ +declare module "timers" { + import { Abortable } from "node:events"; + import { + setImmediate as setImmediatePromise, + setInterval as setIntervalPromise, + setTimeout as setTimeoutPromise, + } from "node:timers/promises"; + interface TimerOptions extends Abortable { + /** + * Set to `false` to indicate that the scheduled `Timeout` + * should not require the Node.js event loop to remain active. + * @default true + */ + ref?: boolean | undefined; + } + let setTimeout: typeof global.setTimeout; + let clearTimeout: typeof global.clearTimeout; + let setInterval: typeof global.setInterval; + let clearInterval: typeof global.clearInterval; + let setImmediate: typeof global.setImmediate; + let clearImmediate: typeof global.clearImmediate; + global { + namespace NodeJS { + // compatibility with older typings + interface Timer extends RefCounted { + hasRef(): boolean; + refresh(): this; + [Symbol.toPrimitive](): number; + } + /** + * This object is created internally and is returned from `setImmediate()`. It + * can be passed to `clearImmediate()` in order to cancel the scheduled + * actions. + * + * By default, when an immediate is scheduled, the Node.js event loop will continue + * running as long as the immediate is active. The `Immediate` object returned by `setImmediate()` exports both `immediate.ref()` and `immediate.unref()`functions that can be used to + * control this default behavior. + */ + class Immediate implements RefCounted { + /** + * When called, requests that the Node.js event loop _not_ exit so long as the`Immediate` is active. Calling `immediate.ref()` multiple times will have no + * effect. + * + * By default, all `Immediate` objects are "ref'ed", making it normally unnecessary + * to call `immediate.ref()` unless `immediate.unref()` had been called previously. + * @since v9.7.0 + * @return a reference to `immediate` + */ + ref(): this; + /** + * When called, the active `Immediate` object will not require the Node.js event + * loop to remain active. If there is no other activity keeping the event loop + * running, the process may exit before the `Immediate` object's callback is + * invoked. Calling `immediate.unref()` multiple times will have no effect. + * @since v9.7.0 + * @return a reference to `immediate` + */ + unref(): this; + /** + * If true, the `Immediate` object will keep the Node.js event loop active. + * @since v11.0.0 + */ + hasRef(): boolean; + _onImmediate: Function; // to distinguish it from the Timeout class + /** + * Cancels the immediate. This is similar to calling `clearImmediate()`. + * @since v20.5.0 + */ + [Symbol.dispose](): void; + } + /** + * This object is created internally and is returned from `setTimeout()` and `setInterval()`. It can be passed to either `clearTimeout()` or `clearInterval()` in order to cancel the + * scheduled actions. + * + * By default, when a timer is scheduled using either `setTimeout()` or `setInterval()`, the Node.js event loop will continue running as long as the + * timer is active. Each of the `Timeout` objects returned by these functions + * export both `timeout.ref()` and `timeout.unref()` functions that can be used to + * control this default behavior. + */ + class Timeout implements Timer { + /** + * When called, requests that the Node.js event loop _not_ exit so long as the`Timeout` is active. Calling `timeout.ref()` multiple times will have no effect. + * + * By default, all `Timeout` objects are "ref'ed", making it normally unnecessary + * to call `timeout.ref()` unless `timeout.unref()` had been called previously. + * @since v0.9.1 + * @return a reference to `timeout` + */ + ref(): this; + /** + * When called, the active `Timeout` object will not require the Node.js event loop + * to remain active. If there is no other activity keeping the event loop running, + * the process may exit before the `Timeout` object's callback is invoked. Calling`timeout.unref()` multiple times will have no effect. + * @since v0.9.1 + * @return a reference to `timeout` + */ + unref(): this; + /** + * If true, the `Timeout` object will keep the Node.js event loop active. + * @since v11.0.0 + */ + hasRef(): boolean; + /** + * Sets the timer's start time to the current time, and reschedules the timer to + * call its callback at the previously specified duration adjusted to the current + * time. This is useful for refreshing a timer without allocating a new + * JavaScript object. + * + * Using this on a timer that has already called its callback will reactivate the + * timer. + * @since v10.2.0 + * @return a reference to `timeout` + */ + refresh(): this; + [Symbol.toPrimitive](): number; + /** + * Cancels the timeout. + * @since v20.5.0 + */ + [Symbol.dispose](): void; + } + } + /** + * Schedules execution of a one-time `callback` after `delay` milliseconds. + * + * The `callback` will likely not be invoked in precisely `delay` milliseconds. + * Node.js makes no guarantees about the exact timing of when callbacks will fire, + * nor of their ordering. The callback will be called as close as possible to the + * time specified. + * + * When `delay` is larger than `2147483647` or less than `1`, the `delay`will be set to `1`. Non-integer delays are truncated to an integer. + * + * If `callback` is not a function, a `TypeError` will be thrown. + * + * This method has a custom variant for promises that is available using `timersPromises.setTimeout()`. + * @since v0.0.1 + * @param callback The function to call when the timer elapses. + * @param [delay=1] The number of milliseconds to wait before calling the `callback`. + * @param args Optional arguments to pass when the `callback` is called. + * @return for use with {@link clearTimeout} + */ + function setTimeout( + callback: (...args: TArgs) => void, + ms?: number, + ...args: TArgs + ): NodeJS.Timeout; + // util.promisify no rest args compability + // tslint:disable-next-line void-return + function setTimeout(callback: (args: void) => void, ms?: number): NodeJS.Timeout; + namespace setTimeout { + const __promisify__: typeof setTimeoutPromise; + } + /** + * Cancels a `Timeout` object created by `setTimeout()`. + * @since v0.0.1 + * @param timeout A `Timeout` object as returned by {@link setTimeout} or the `primitive` of the `Timeout` object as a string or a number. + */ + function clearTimeout(timeoutId: NodeJS.Timeout | string | number | undefined): void; + /** + * Schedules repeated execution of `callback` every `delay` milliseconds. + * + * When `delay` is larger than `2147483647` or less than `1`, the `delay` will be + * set to `1`. Non-integer delays are truncated to an integer. + * + * If `callback` is not a function, a `TypeError` will be thrown. + * + * This method has a custom variant for promises that is available using `timersPromises.setInterval()`. + * @since v0.0.1 + * @param callback The function to call when the timer elapses. + * @param [delay=1] The number of milliseconds to wait before calling the `callback`. + * @param args Optional arguments to pass when the `callback` is called. + * @return for use with {@link clearInterval} + */ + function setInterval( + callback: (...args: TArgs) => void, + ms?: number, + ...args: TArgs + ): NodeJS.Timeout; + // util.promisify no rest args compability + // tslint:disable-next-line void-return + function setInterval(callback: (args: void) => void, ms?: number): NodeJS.Timeout; + namespace setInterval { + const __promisify__: typeof setIntervalPromise; + } + /** + * Cancels a `Timeout` object created by `setInterval()`. + * @since v0.0.1 + * @param timeout A `Timeout` object as returned by {@link setInterval} or the `primitive` of the `Timeout` object as a string or a number. + */ + function clearInterval(intervalId: NodeJS.Timeout | string | number | undefined): void; + /** + * Schedules the "immediate" execution of the `callback` after I/O events' + * callbacks. + * + * When multiple calls to `setImmediate()` are made, the `callback` functions are + * queued for execution in the order in which they are created. The entire callback + * queue is processed every event loop iteration. If an immediate timer is queued + * from inside an executing callback, that timer will not be triggered until the + * next event loop iteration. + * + * If `callback` is not a function, a `TypeError` will be thrown. + * + * This method has a custom variant for promises that is available using `timersPromises.setImmediate()`. + * @since v0.9.1 + * @param callback The function to call at the end of this turn of the Node.js `Event Loop` + * @param args Optional arguments to pass when the `callback` is called. + * @return for use with {@link clearImmediate} + */ + function setImmediate( + callback: (...args: TArgs) => void, + ...args: TArgs + ): NodeJS.Immediate; + // util.promisify no rest args compability + // tslint:disable-next-line void-return + function setImmediate(callback: (args: void) => void): NodeJS.Immediate; + namespace setImmediate { + const __promisify__: typeof setImmediatePromise; + } + /** + * Cancels an `Immediate` object created by `setImmediate()`. + * @since v0.9.1 + * @param immediate An `Immediate` object as returned by {@link setImmediate}. + */ + function clearImmediate(immediateId: NodeJS.Immediate | undefined): void; + function queueMicrotask(callback: () => void): void; + } +} +declare module "node:timers" { + export * from "timers"; +} diff --git a/Url-Shortner/node_modules/@types/node/ts4.8/timers/promises.d.ts b/Url-Shortner/node_modules/@types/node/ts4.8/timers/promises.d.ts new file mode 100644 index 0000000..5a54dc7 --- /dev/null +++ b/Url-Shortner/node_modules/@types/node/ts4.8/timers/promises.d.ts @@ -0,0 +1,93 @@ +/** + * The `timers/promises` API provides an alternative set of timer functions + * that return `Promise` objects. The API is accessible via`require('node:timers/promises')`. + * + * ```js + * import { + * setTimeout, + * setImmediate, + * setInterval, + * } from 'timers/promises'; + * ``` + * @since v15.0.0 + */ +declare module "timers/promises" { + import { TimerOptions } from "node:timers"; + /** + * ```js + * import { + * setTimeout, + * } from 'timers/promises'; + * + * const res = await setTimeout(100, 'result'); + * + * console.log(res); // Prints 'result' + * ``` + * @since v15.0.0 + * @param [delay=1] The number of milliseconds to wait before fulfilling the promise. + * @param value A value with which the promise is fulfilled. + */ + function setTimeout(delay?: number, value?: T, options?: TimerOptions): Promise; + /** + * ```js + * import { + * setImmediate, + * } from 'timers/promises'; + * + * const res = await setImmediate('result'); + * + * console.log(res); // Prints 'result' + * ``` + * @since v15.0.0 + * @param value A value with which the promise is fulfilled. + */ + function setImmediate(value?: T, options?: TimerOptions): Promise; + /** + * Returns an async iterator that generates values in an interval of `delay` ms. + * If `ref` is `true`, you need to call `next()` of async iterator explicitly + * or implicitly to keep the event loop alive. + * + * ```js + * import { + * setInterval, + * } from 'timers/promises'; + * + * const interval = 100; + * for await (const startTime of setInterval(interval, Date.now())) { + * const now = Date.now(); + * console.log(now); + * if ((now - startTime) > 1000) + * break; + * } + * console.log(Date.now()); + * ``` + * @since v15.9.0 + */ + function setInterval(delay?: number, value?: T, options?: TimerOptions): AsyncIterable; + interface Scheduler { + /** + * ```js + * import { scheduler } from 'node:timers/promises'; + * + * await scheduler.wait(1000); // Wait one second before continuing + * ``` + * An experimental API defined by the Scheduling APIs draft specification being developed as a standard Web Platform API. + * Calling timersPromises.scheduler.wait(delay, options) is roughly equivalent to calling timersPromises.setTimeout(delay, undefined, options) except that the ref option is not supported. + * @since v16.14.0 + * @experimental + * @param [delay=1] The number of milliseconds to wait before fulfilling the promise. + */ + wait: (delay?: number, options?: TimerOptions) => Promise; + /** + * An experimental API defined by the Scheduling APIs draft specification being developed as a standard Web Platform API. + * Calling timersPromises.scheduler.yield() is equivalent to calling timersPromises.setImmediate() with no arguments. + * @since v16.14.0 + * @experimental + */ + yield: () => Promise; + } + const scheduler: Scheduler; +} +declare module "node:timers/promises" { + export * from "timers/promises"; +} diff --git a/Url-Shortner/node_modules/@types/node/ts4.8/tls.d.ts b/Url-Shortner/node_modules/@types/node/ts4.8/tls.d.ts new file mode 100644 index 0000000..141af8e --- /dev/null +++ b/Url-Shortner/node_modules/@types/node/ts4.8/tls.d.ts @@ -0,0 +1,1210 @@ +/** + * The `node:tls` module provides an implementation of the Transport Layer Security + * (TLS) and Secure Socket Layer (SSL) protocols that is built on top of OpenSSL. + * The module can be accessed using: + * + * ```js + * const tls = require('node:tls'); + * ``` + * @see [source](https://github.com/nodejs/node/blob/v20.2.0/lib/tls.js) + */ +declare module "tls" { + import { X509Certificate } from "node:crypto"; + import * as net from "node:net"; + import * as stream from "stream"; + const CLIENT_RENEG_LIMIT: number; + const CLIENT_RENEG_WINDOW: number; + interface Certificate { + /** + * Country code. + */ + C: string; + /** + * Street. + */ + ST: string; + /** + * Locality. + */ + L: string; + /** + * Organization. + */ + O: string; + /** + * Organizational unit. + */ + OU: string; + /** + * Common name. + */ + CN: string; + } + interface PeerCertificate { + /** + * `true` if a Certificate Authority (CA), `false` otherwise. + * @since v18.13.0 + */ + ca: boolean; + /** + * The DER encoded X.509 certificate data. + */ + raw: Buffer; + /** + * The certificate subject. + */ + subject: Certificate; + /** + * The certificate issuer, described in the same terms as the `subject`. + */ + issuer: Certificate; + /** + * The date-time the certificate is valid from. + */ + valid_from: string; + /** + * The date-time the certificate is valid to. + */ + valid_to: string; + /** + * The certificate serial number, as a hex string. + */ + serialNumber: string; + /** + * The SHA-1 digest of the DER encoded certificate. + * It is returned as a `:` separated hexadecimal string. + */ + fingerprint: string; + /** + * The SHA-256 digest of the DER encoded certificate. + * It is returned as a `:` separated hexadecimal string. + */ + fingerprint256: string; + /** + * The SHA-512 digest of the DER encoded certificate. + * It is returned as a `:` separated hexadecimal string. + */ + fingerprint512: string; + /** + * The extended key usage, a set of OIDs. + */ + ext_key_usage?: string[]; + /** + * A string containing concatenated names for the subject, + * an alternative to the `subject` names. + */ + subjectaltname?: string; + /** + * An array describing the AuthorityInfoAccess, used with OCSP. + */ + infoAccess?: NodeJS.Dict; + /** + * For RSA keys: The RSA bit size. + * + * For EC keys: The key size in bits. + */ + bits?: number; + /** + * The RSA exponent, as a string in hexadecimal number notation. + */ + exponent?: string; + /** + * The RSA modulus, as a hexadecimal string. + */ + modulus?: string; + /** + * The public key. + */ + pubkey?: Buffer; + /** + * The ASN.1 name of the OID of the elliptic curve. + * Well-known curves are identified by an OID. + * While it is unusual, it is possible that the curve + * is identified by its mathematical properties, + * in which case it will not have an OID. + */ + asn1Curve?: string; + /** + * The NIST name for the elliptic curve,if it has one + * (not all well-known curves have been assigned names by NIST). + */ + nistCurve?: string; + } + interface DetailedPeerCertificate extends PeerCertificate { + /** + * The issuer certificate object. + * For self-signed certificates, this may be a circular reference. + */ + issuerCertificate: DetailedPeerCertificate; + } + interface CipherNameAndProtocol { + /** + * The cipher name. + */ + name: string; + /** + * SSL/TLS protocol version. + */ + version: string; + /** + * IETF name for the cipher suite. + */ + standardName: string; + } + interface EphemeralKeyInfo { + /** + * The supported types are 'DH' and 'ECDH'. + */ + type: string; + /** + * The name property is available only when type is 'ECDH'. + */ + name?: string | undefined; + /** + * The size of parameter of an ephemeral key exchange. + */ + size: number; + } + interface KeyObject { + /** + * Private keys in PEM format. + */ + pem: string | Buffer; + /** + * Optional passphrase. + */ + passphrase?: string | undefined; + } + interface PxfObject { + /** + * PFX or PKCS12 encoded private key and certificate chain. + */ + buf: string | Buffer; + /** + * Optional passphrase. + */ + passphrase?: string | undefined; + } + interface TLSSocketOptions extends SecureContextOptions, CommonConnectionOptions { + /** + * If true the TLS socket will be instantiated in server-mode. + * Defaults to false. + */ + isServer?: boolean | undefined; + /** + * An optional net.Server instance. + */ + server?: net.Server | undefined; + /** + * An optional Buffer instance containing a TLS session. + */ + session?: Buffer | undefined; + /** + * If true, specifies that the OCSP status request extension will be + * added to the client hello and an 'OCSPResponse' event will be + * emitted on the socket before establishing a secure communication + */ + requestOCSP?: boolean | undefined; + } + /** + * Performs transparent encryption of written data and all required TLS + * negotiation. + * + * Instances of `tls.TLSSocket` implement the duplex `Stream` interface. + * + * Methods that return TLS connection metadata (e.g.{@link TLSSocket.getPeerCertificate}) will only return data while the + * connection is open. + * @since v0.11.4 + */ + class TLSSocket extends net.Socket { + /** + * Construct a new tls.TLSSocket object from an existing TCP socket. + */ + constructor(socket: net.Socket, options?: TLSSocketOptions); + /** + * This property is `true` if the peer certificate was signed by one of the CAs + * specified when creating the `tls.TLSSocket` instance, otherwise `false`. + * @since v0.11.4 + */ + authorized: boolean; + /** + * Returns the reason why the peer's certificate was not been verified. This + * property is set only when `tlsSocket.authorized === false`. + * @since v0.11.4 + */ + authorizationError: Error; + /** + * Always returns `true`. This may be used to distinguish TLS sockets from regular`net.Socket` instances. + * @since v0.11.4 + */ + encrypted: true; + /** + * String containing the selected ALPN protocol. + * Before a handshake has completed, this value is always null. + * When a handshake is completed but not ALPN protocol was selected, tlsSocket.alpnProtocol equals false. + */ + alpnProtocol: string | false | null; + /** + * Returns an object representing the local certificate. The returned object has + * some properties corresponding to the fields of the certificate. + * + * See {@link TLSSocket.getPeerCertificate} for an example of the certificate + * structure. + * + * If there is no local certificate, an empty object will be returned. If the + * socket has been destroyed, `null` will be returned. + * @since v11.2.0 + */ + getCertificate(): PeerCertificate | object | null; + /** + * Returns an object containing information on the negotiated cipher suite. + * + * For example, a TLSv1.2 protocol with AES256-SHA cipher: + * + * ```json + * { + * "name": "AES256-SHA", + * "standardName": "TLS_RSA_WITH_AES_256_CBC_SHA", + * "version": "SSLv3" + * } + * ``` + * + * See [SSL\_CIPHER\_get\_name](https://www.openssl.org/docs/man1.1.1/man3/SSL_CIPHER_get_name.html) for more information. + * @since v0.11.4 + */ + getCipher(): CipherNameAndProtocol; + /** + * Returns an object representing the type, name, and size of parameter of + * an ephemeral key exchange in `perfect forward secrecy` on a client + * connection. It returns an empty object when the key exchange is not + * ephemeral. As this is only supported on a client socket; `null` is returned + * if called on a server socket. The supported types are `'DH'` and `'ECDH'`. The`name` property is available only when type is `'ECDH'`. + * + * For example: `{ type: 'ECDH', name: 'prime256v1', size: 256 }`. + * @since v5.0.0 + */ + getEphemeralKeyInfo(): EphemeralKeyInfo | object | null; + /** + * As the `Finished` messages are message digests of the complete handshake + * (with a total of 192 bits for TLS 1.0 and more for SSL 3.0), they can + * be used for external authentication procedures when the authentication + * provided by SSL/TLS is not desired or is not enough. + * + * Corresponds to the `SSL_get_finished` routine in OpenSSL and may be used + * to implement the `tls-unique` channel binding from [RFC 5929](https://tools.ietf.org/html/rfc5929). + * @since v9.9.0 + * @return The latest `Finished` message that has been sent to the socket as part of a SSL/TLS handshake, or `undefined` if no `Finished` message has been sent yet. + */ + getFinished(): Buffer | undefined; + /** + * Returns an object representing the peer's certificate. If the peer does not + * provide a certificate, an empty object will be returned. If the socket has been + * destroyed, `null` will be returned. + * + * If the full certificate chain was requested, each certificate will include an`issuerCertificate` property containing an object representing its issuer's + * certificate. + * @since v0.11.4 + * @param detailed Include the full certificate chain if `true`, otherwise include just the peer's certificate. + * @return A certificate object. + */ + getPeerCertificate(detailed: true): DetailedPeerCertificate; + getPeerCertificate(detailed?: false): PeerCertificate; + getPeerCertificate(detailed?: boolean): PeerCertificate | DetailedPeerCertificate; + /** + * As the `Finished` messages are message digests of the complete handshake + * (with a total of 192 bits for TLS 1.0 and more for SSL 3.0), they can + * be used for external authentication procedures when the authentication + * provided by SSL/TLS is not desired or is not enough. + * + * Corresponds to the `SSL_get_peer_finished` routine in OpenSSL and may be used + * to implement the `tls-unique` channel binding from [RFC 5929](https://tools.ietf.org/html/rfc5929). + * @since v9.9.0 + * @return The latest `Finished` message that is expected or has actually been received from the socket as part of a SSL/TLS handshake, or `undefined` if there is no `Finished` message so + * far. + */ + getPeerFinished(): Buffer | undefined; + /** + * Returns a string containing the negotiated SSL/TLS protocol version of the + * current connection. The value `'unknown'` will be returned for connected + * sockets that have not completed the handshaking process. The value `null` will + * be returned for server sockets or disconnected client sockets. + * + * Protocol versions are: + * + * * `'SSLv3'` + * * `'TLSv1'` + * * `'TLSv1.1'` + * * `'TLSv1.2'` + * * `'TLSv1.3'` + * + * See the OpenSSL [`SSL_get_version`](https://www.openssl.org/docs/man1.1.1/man3/SSL_get_version.html) documentation for more information. + * @since v5.7.0 + */ + getProtocol(): string | null; + /** + * Returns the TLS session data or `undefined` if no session was + * negotiated. On the client, the data can be provided to the `session` option of {@link connect} to resume the connection. On the server, it may be useful + * for debugging. + * + * See `Session Resumption` for more information. + * + * Note: `getSession()` works only for TLSv1.2 and below. For TLSv1.3, applications + * must use the `'session'` event (it also works for TLSv1.2 and below). + * @since v0.11.4 + */ + getSession(): Buffer | undefined; + /** + * See [SSL\_get\_shared\_sigalgs](https://www.openssl.org/docs/man1.1.1/man3/SSL_get_shared_sigalgs.html) for more information. + * @since v12.11.0 + * @return List of signature algorithms shared between the server and the client in the order of decreasing preference. + */ + getSharedSigalgs(): string[]; + /** + * For a client, returns the TLS session ticket if one is available, or`undefined`. For a server, always returns `undefined`. + * + * It may be useful for debugging. + * + * See `Session Resumption` for more information. + * @since v0.11.4 + */ + getTLSTicket(): Buffer | undefined; + /** + * See `Session Resumption` for more information. + * @since v0.5.6 + * @return `true` if the session was reused, `false` otherwise. + */ + isSessionReused(): boolean; + /** + * The `tlsSocket.renegotiate()` method initiates a TLS renegotiation process. + * Upon completion, the `callback` function will be passed a single argument + * that is either an `Error` (if the request failed) or `null`. + * + * This method can be used to request a peer's certificate after the secure + * connection has been established. + * + * When running as the server, the socket will be destroyed with an error after`handshakeTimeout` timeout. + * + * For TLSv1.3, renegotiation cannot be initiated, it is not supported by the + * protocol. + * @since v0.11.8 + * @param callback If `renegotiate()` returned `true`, callback is attached once to the `'secure'` event. If `renegotiate()` returned `false`, `callback` will be called in the next tick with + * an error, unless the `tlsSocket` has been destroyed, in which case `callback` will not be called at all. + * @return `true` if renegotiation was initiated, `false` otherwise. + */ + renegotiate( + options: { + rejectUnauthorized?: boolean | undefined; + requestCert?: boolean | undefined; + }, + callback: (err: Error | null) => void, + ): undefined | boolean; + /** + * The `tlsSocket.setMaxSendFragment()` method sets the maximum TLS fragment size. + * Returns `true` if setting the limit succeeded; `false` otherwise. + * + * Smaller fragment sizes decrease the buffering latency on the client: larger + * fragments are buffered by the TLS layer until the entire fragment is received + * and its integrity is verified; large fragments can span multiple roundtrips + * and their processing can be delayed due to packet loss or reordering. However, + * smaller fragments add extra TLS framing bytes and CPU overhead, which may + * decrease overall server throughput. + * @since v0.11.11 + * @param [size=16384] The maximum TLS fragment size. The maximum value is `16384`. + */ + setMaxSendFragment(size: number): boolean; + /** + * Disables TLS renegotiation for this `TLSSocket` instance. Once called, attempts + * to renegotiate will trigger an `'error'` event on the `TLSSocket`. + * @since v8.4.0 + */ + disableRenegotiation(): void; + /** + * When enabled, TLS packet trace information is written to `stderr`. This can be + * used to debug TLS connection problems. + * + * The format of the output is identical to the output of`openssl s_client -trace` or `openssl s_server -trace`. While it is produced by + * OpenSSL's `SSL_trace()` function, the format is undocumented, can change + * without notice, and should not be relied on. + * @since v12.2.0 + */ + enableTrace(): void; + /** + * Returns the peer certificate as an `X509Certificate` object. + * + * If there is no peer certificate, or the socket has been destroyed,`undefined` will be returned. + * @since v15.9.0 + */ + getPeerX509Certificate(): X509Certificate | undefined; + /** + * Returns the local certificate as an `X509Certificate` object. + * + * If there is no local certificate, or the socket has been destroyed,`undefined` will be returned. + * @since v15.9.0 + */ + getX509Certificate(): X509Certificate | undefined; + /** + * Keying material is used for validations to prevent different kind of attacks in + * network protocols, for example in the specifications of IEEE 802.1X. + * + * Example + * + * ```js + * const keyingMaterial = tlsSocket.exportKeyingMaterial( + * 128, + * 'client finished'); + * + * /* + * Example return value of keyingMaterial: + * + * + * ``` + * + * See the OpenSSL [`SSL_export_keying_material`](https://www.openssl.org/docs/man1.1.1/man3/SSL_export_keying_material.html) documentation for more + * information. + * @since v13.10.0, v12.17.0 + * @param length number of bytes to retrieve from keying material + * @param label an application specific label, typically this will be a value from the [IANA Exporter Label + * Registry](https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml#exporter-labels). + * @param context Optionally provide a context. + * @return requested bytes of the keying material + */ + exportKeyingMaterial(length: number, label: string, context: Buffer): Buffer; + addListener(event: string, listener: (...args: any[]) => void): this; + addListener(event: "OCSPResponse", listener: (response: Buffer) => void): this; + addListener(event: "secureConnect", listener: () => void): this; + addListener(event: "session", listener: (session: Buffer) => void): this; + addListener(event: "keylog", listener: (line: Buffer) => void): this; + emit(event: string | symbol, ...args: any[]): boolean; + emit(event: "OCSPResponse", response: Buffer): boolean; + emit(event: "secureConnect"): boolean; + emit(event: "session", session: Buffer): boolean; + emit(event: "keylog", line: Buffer): boolean; + on(event: string, listener: (...args: any[]) => void): this; + on(event: "OCSPResponse", listener: (response: Buffer) => void): this; + on(event: "secureConnect", listener: () => void): this; + on(event: "session", listener: (session: Buffer) => void): this; + on(event: "keylog", listener: (line: Buffer) => void): this; + once(event: string, listener: (...args: any[]) => void): this; + once(event: "OCSPResponse", listener: (response: Buffer) => void): this; + once(event: "secureConnect", listener: () => void): this; + once(event: "session", listener: (session: Buffer) => void): this; + once(event: "keylog", listener: (line: Buffer) => void): this; + prependListener(event: string, listener: (...args: any[]) => void): this; + prependListener(event: "OCSPResponse", listener: (response: Buffer) => void): this; + prependListener(event: "secureConnect", listener: () => void): this; + prependListener(event: "session", listener: (session: Buffer) => void): this; + prependListener(event: "keylog", listener: (line: Buffer) => void): this; + prependOnceListener(event: string, listener: (...args: any[]) => void): this; + prependOnceListener(event: "OCSPResponse", listener: (response: Buffer) => void): this; + prependOnceListener(event: "secureConnect", listener: () => void): this; + prependOnceListener(event: "session", listener: (session: Buffer) => void): this; + prependOnceListener(event: "keylog", listener: (line: Buffer) => void): this; + } + interface CommonConnectionOptions { + /** + * An optional TLS context object from tls.createSecureContext() + */ + secureContext?: SecureContext | undefined; + /** + * When enabled, TLS packet trace information is written to `stderr`. This can be + * used to debug TLS connection problems. + * @default false + */ + enableTrace?: boolean | undefined; + /** + * If true the server will request a certificate from clients that + * connect and attempt to verify that certificate. Defaults to + * false. + */ + requestCert?: boolean | undefined; + /** + * An array of strings or a Buffer naming possible ALPN protocols. + * (Protocols should be ordered by their priority.) + */ + ALPNProtocols?: string[] | Uint8Array[] | Uint8Array | undefined; + /** + * SNICallback(servername, cb) A function that will be + * called if the client supports SNI TLS extension. Two arguments + * will be passed when called: servername and cb. SNICallback should + * invoke cb(null, ctx), where ctx is a SecureContext instance. + * (tls.createSecureContext(...) can be used to get a proper + * SecureContext.) If SNICallback wasn't provided the default callback + * with high-level API will be used (see below). + */ + SNICallback?: ((servername: string, cb: (err: Error | null, ctx?: SecureContext) => void) => void) | undefined; + /** + * If true the server will reject any connection which is not + * authorized with the list of supplied CAs. This option only has an + * effect if requestCert is true. + * @default true + */ + rejectUnauthorized?: boolean | undefined; + } + interface TlsOptions extends SecureContextOptions, CommonConnectionOptions, net.ServerOpts { + /** + * Abort the connection if the SSL/TLS handshake does not finish in the + * specified number of milliseconds. A 'tlsClientError' is emitted on + * the tls.Server object whenever a handshake times out. Default: + * 120000 (120 seconds). + */ + handshakeTimeout?: number | undefined; + /** + * The number of seconds after which a TLS session created by the + * server will no longer be resumable. See Session Resumption for more + * information. Default: 300. + */ + sessionTimeout?: number | undefined; + /** + * 48-bytes of cryptographically strong pseudo-random data. + */ + ticketKeys?: Buffer | undefined; + /** + * @param socket + * @param identity identity parameter sent from the client. + * @return pre-shared key that must either be + * a buffer or `null` to stop the negotiation process. Returned PSK must be + * compatible with the selected cipher's digest. + * + * When negotiating TLS-PSK (pre-shared keys), this function is called + * with the identity provided by the client. + * If the return value is `null` the negotiation process will stop and an + * "unknown_psk_identity" alert message will be sent to the other party. + * If the server wishes to hide the fact that the PSK identity was not known, + * the callback must provide some random data as `psk` to make the connection + * fail with "decrypt_error" before negotiation is finished. + * PSK ciphers are disabled by default, and using TLS-PSK thus + * requires explicitly specifying a cipher suite with the `ciphers` option. + * More information can be found in the RFC 4279. + */ + pskCallback?(socket: TLSSocket, identity: string): DataView | NodeJS.TypedArray | null; + /** + * hint to send to a client to help + * with selecting the identity during TLS-PSK negotiation. Will be ignored + * in TLS 1.3. Upon failing to set pskIdentityHint `tlsClientError` will be + * emitted with `ERR_TLS_PSK_SET_IDENTIY_HINT_FAILED` code. + */ + pskIdentityHint?: string | undefined; + } + interface PSKCallbackNegotation { + psk: DataView | NodeJS.TypedArray; + identity: string; + } + interface ConnectionOptions extends SecureContextOptions, CommonConnectionOptions { + host?: string | undefined; + port?: number | undefined; + path?: string | undefined; // Creates unix socket connection to path. If this option is specified, `host` and `port` are ignored. + socket?: stream.Duplex | undefined; // Establish secure connection on a given socket rather than creating a new socket + checkServerIdentity?: typeof checkServerIdentity | undefined; + servername?: string | undefined; // SNI TLS Extension + session?: Buffer | undefined; + minDHSize?: number | undefined; + lookup?: net.LookupFunction | undefined; + timeout?: number | undefined; + /** + * When negotiating TLS-PSK (pre-shared keys), this function is called + * with optional identity `hint` provided by the server or `null` + * in case of TLS 1.3 where `hint` was removed. + * It will be necessary to provide a custom `tls.checkServerIdentity()` + * for the connection as the default one will try to check hostname/IP + * of the server against the certificate but that's not applicable for PSK + * because there won't be a certificate present. + * More information can be found in the RFC 4279. + * + * @param hint message sent from the server to help client + * decide which identity to use during negotiation. + * Always `null` if TLS 1.3 is used. + * @returns Return `null` to stop the negotiation process. `psk` must be + * compatible with the selected cipher's digest. + * `identity` must use UTF-8 encoding. + */ + pskCallback?(hint: string | null): PSKCallbackNegotation | null; + } + /** + * Accepts encrypted connections using TLS or SSL. + * @since v0.3.2 + */ + class Server extends net.Server { + constructor(secureConnectionListener?: (socket: TLSSocket) => void); + constructor(options: TlsOptions, secureConnectionListener?: (socket: TLSSocket) => void); + /** + * The `server.addContext()` method adds a secure context that will be used if + * the client request's SNI name matches the supplied `hostname` (or wildcard). + * + * When there are multiple matching contexts, the most recently added one is + * used. + * @since v0.5.3 + * @param hostname A SNI host name or wildcard (e.g. `'*'`) + * @param context An object containing any of the possible properties from the {@link createSecureContext} `options` arguments (e.g. `key`, `cert`, `ca`, etc), or a TLS context object created + * with {@link createSecureContext} itself. + */ + addContext(hostname: string, context: SecureContextOptions): void; + /** + * Returns the session ticket keys. + * + * See `Session Resumption` for more information. + * @since v3.0.0 + * @return A 48-byte buffer containing the session ticket keys. + */ + getTicketKeys(): Buffer; + /** + * The `server.setSecureContext()` method replaces the secure context of an + * existing server. Existing connections to the server are not interrupted. + * @since v11.0.0 + * @param options An object containing any of the possible properties from the {@link createSecureContext} `options` arguments (e.g. `key`, `cert`, `ca`, etc). + */ + setSecureContext(options: SecureContextOptions): void; + /** + * Sets the session ticket keys. + * + * Changes to the ticket keys are effective only for future server connections. + * Existing or currently pending server connections will use the previous keys. + * + * See `Session Resumption` for more information. + * @since v3.0.0 + * @param keys A 48-byte buffer containing the session ticket keys. + */ + setTicketKeys(keys: Buffer): void; + /** + * events.EventEmitter + * 1. tlsClientError + * 2. newSession + * 3. OCSPRequest + * 4. resumeSession + * 5. secureConnection + * 6. keylog + */ + addListener(event: string, listener: (...args: any[]) => void): this; + addListener(event: "tlsClientError", listener: (err: Error, tlsSocket: TLSSocket) => void): this; + addListener( + event: "newSession", + listener: (sessionId: Buffer, sessionData: Buffer, callback: () => void) => void, + ): this; + addListener( + event: "OCSPRequest", + listener: ( + certificate: Buffer, + issuer: Buffer, + callback: (err: Error | null, resp: Buffer) => void, + ) => void, + ): this; + addListener( + event: "resumeSession", + listener: (sessionId: Buffer, callback: (err: Error | null, sessionData: Buffer | null) => void) => void, + ): this; + addListener(event: "secureConnection", listener: (tlsSocket: TLSSocket) => void): this; + addListener(event: "keylog", listener: (line: Buffer, tlsSocket: TLSSocket) => void): this; + emit(event: string | symbol, ...args: any[]): boolean; + emit(event: "tlsClientError", err: Error, tlsSocket: TLSSocket): boolean; + emit(event: "newSession", sessionId: Buffer, sessionData: Buffer, callback: () => void): boolean; + emit( + event: "OCSPRequest", + certificate: Buffer, + issuer: Buffer, + callback: (err: Error | null, resp: Buffer) => void, + ): boolean; + emit( + event: "resumeSession", + sessionId: Buffer, + callback: (err: Error | null, sessionData: Buffer | null) => void, + ): boolean; + emit(event: "secureConnection", tlsSocket: TLSSocket): boolean; + emit(event: "keylog", line: Buffer, tlsSocket: TLSSocket): boolean; + on(event: string, listener: (...args: any[]) => void): this; + on(event: "tlsClientError", listener: (err: Error, tlsSocket: TLSSocket) => void): this; + on(event: "newSession", listener: (sessionId: Buffer, sessionData: Buffer, callback: () => void) => void): this; + on( + event: "OCSPRequest", + listener: ( + certificate: Buffer, + issuer: Buffer, + callback: (err: Error | null, resp: Buffer) => void, + ) => void, + ): this; + on( + event: "resumeSession", + listener: (sessionId: Buffer, callback: (err: Error | null, sessionData: Buffer | null) => void) => void, + ): this; + on(event: "secureConnection", listener: (tlsSocket: TLSSocket) => void): this; + on(event: "keylog", listener: (line: Buffer, tlsSocket: TLSSocket) => void): this; + once(event: string, listener: (...args: any[]) => void): this; + once(event: "tlsClientError", listener: (err: Error, tlsSocket: TLSSocket) => void): this; + once( + event: "newSession", + listener: (sessionId: Buffer, sessionData: Buffer, callback: () => void) => void, + ): this; + once( + event: "OCSPRequest", + listener: ( + certificate: Buffer, + issuer: Buffer, + callback: (err: Error | null, resp: Buffer) => void, + ) => void, + ): this; + once( + event: "resumeSession", + listener: (sessionId: Buffer, callback: (err: Error | null, sessionData: Buffer | null) => void) => void, + ): this; + once(event: "secureConnection", listener: (tlsSocket: TLSSocket) => void): this; + once(event: "keylog", listener: (line: Buffer, tlsSocket: TLSSocket) => void): this; + prependListener(event: string, listener: (...args: any[]) => void): this; + prependListener(event: "tlsClientError", listener: (err: Error, tlsSocket: TLSSocket) => void): this; + prependListener( + event: "newSession", + listener: (sessionId: Buffer, sessionData: Buffer, callback: () => void) => void, + ): this; + prependListener( + event: "OCSPRequest", + listener: ( + certificate: Buffer, + issuer: Buffer, + callback: (err: Error | null, resp: Buffer) => void, + ) => void, + ): this; + prependListener( + event: "resumeSession", + listener: (sessionId: Buffer, callback: (err: Error | null, sessionData: Buffer | null) => void) => void, + ): this; + prependListener(event: "secureConnection", listener: (tlsSocket: TLSSocket) => void): this; + prependListener(event: "keylog", listener: (line: Buffer, tlsSocket: TLSSocket) => void): this; + prependOnceListener(event: string, listener: (...args: any[]) => void): this; + prependOnceListener(event: "tlsClientError", listener: (err: Error, tlsSocket: TLSSocket) => void): this; + prependOnceListener( + event: "newSession", + listener: (sessionId: Buffer, sessionData: Buffer, callback: () => void) => void, + ): this; + prependOnceListener( + event: "OCSPRequest", + listener: ( + certificate: Buffer, + issuer: Buffer, + callback: (err: Error | null, resp: Buffer) => void, + ) => void, + ): this; + prependOnceListener( + event: "resumeSession", + listener: (sessionId: Buffer, callback: (err: Error | null, sessionData: Buffer | null) => void) => void, + ): this; + prependOnceListener(event: "secureConnection", listener: (tlsSocket: TLSSocket) => void): this; + prependOnceListener(event: "keylog", listener: (line: Buffer, tlsSocket: TLSSocket) => void): this; + } + /** + * @deprecated since v0.11.3 Use `tls.TLSSocket` instead. + */ + interface SecurePair { + encrypted: TLSSocket; + cleartext: TLSSocket; + } + type SecureVersion = "TLSv1.3" | "TLSv1.2" | "TLSv1.1" | "TLSv1"; + interface SecureContextOptions { + /** + * If set, this will be called when a client opens a connection using the ALPN extension. + * One argument will be passed to the callback: an object containing `servername` and `protocols` fields, + * respectively containing the server name from the SNI extension (if any) and an array of + * ALPN protocol name strings. The callback must return either one of the strings listed in `protocols`, + * which will be returned to the client as the selected ALPN protocol, or `undefined`, + * to reject the connection with a fatal alert. If a string is returned that does not match one of + * the client's ALPN protocols, an error will be thrown. + * This option cannot be used with the `ALPNProtocols` option, and setting both options will throw an error. + */ + ALPNCallback?: ((arg: { servername: string; protocols: string[] }) => string | undefined) | undefined; + /** + * Optionally override the trusted CA certificates. Default is to trust + * the well-known CAs curated by Mozilla. Mozilla's CAs are completely + * replaced when CAs are explicitly specified using this option. + */ + ca?: string | Buffer | Array | undefined; + /** + * Cert chains in PEM format. One cert chain should be provided per + * private key. Each cert chain should consist of the PEM formatted + * certificate for a provided private key, followed by the PEM + * formatted intermediate certificates (if any), in order, and not + * including the root CA (the root CA must be pre-known to the peer, + * see ca). When providing multiple cert chains, they do not have to + * be in the same order as their private keys in key. If the + * intermediate certificates are not provided, the peer will not be + * able to validate the certificate, and the handshake will fail. + */ + cert?: string | Buffer | Array | undefined; + /** + * Colon-separated list of supported signature algorithms. The list + * can contain digest algorithms (SHA256, MD5 etc.), public key + * algorithms (RSA-PSS, ECDSA etc.), combination of both (e.g + * 'RSA+SHA384') or TLS v1.3 scheme names (e.g. rsa_pss_pss_sha512). + */ + sigalgs?: string | undefined; + /** + * Cipher suite specification, replacing the default. For more + * information, see modifying the default cipher suite. Permitted + * ciphers can be obtained via tls.getCiphers(). Cipher names must be + * uppercased in order for OpenSSL to accept them. + */ + ciphers?: string | undefined; + /** + * Name of an OpenSSL engine which can provide the client certificate. + */ + clientCertEngine?: string | undefined; + /** + * PEM formatted CRLs (Certificate Revocation Lists). + */ + crl?: string | Buffer | Array | undefined; + /** + * `'auto'` or custom Diffie-Hellman parameters, required for non-ECDHE perfect forward secrecy. + * If omitted or invalid, the parameters are silently discarded and DHE ciphers will not be available. + * ECDHE-based perfect forward secrecy will still be available. + */ + dhparam?: string | Buffer | undefined; + /** + * A string describing a named curve or a colon separated list of curve + * NIDs or names, for example P-521:P-384:P-256, to use for ECDH key + * agreement. Set to auto to select the curve automatically. Use + * crypto.getCurves() to obtain a list of available curve names. On + * recent releases, openssl ecparam -list_curves will also display the + * name and description of each available elliptic curve. Default: + * tls.DEFAULT_ECDH_CURVE. + */ + ecdhCurve?: string | undefined; + /** + * Attempt to use the server's cipher suite preferences instead of the + * client's. When true, causes SSL_OP_CIPHER_SERVER_PREFERENCE to be + * set in secureOptions + */ + honorCipherOrder?: boolean | undefined; + /** + * Private keys in PEM format. PEM allows the option of private keys + * being encrypted. Encrypted keys will be decrypted with + * options.passphrase. Multiple keys using different algorithms can be + * provided either as an array of unencrypted key strings or buffers, + * or an array of objects in the form {pem: [, + * passphrase: ]}. The object form can only occur in an array. + * object.passphrase is optional. Encrypted keys will be decrypted with + * object.passphrase if provided, or options.passphrase if it is not. + */ + key?: string | Buffer | Array | undefined; + /** + * Name of an OpenSSL engine to get private key from. Should be used + * together with privateKeyIdentifier. + */ + privateKeyEngine?: string | undefined; + /** + * Identifier of a private key managed by an OpenSSL engine. Should be + * used together with privateKeyEngine. Should not be set together with + * key, because both options define a private key in different ways. + */ + privateKeyIdentifier?: string | undefined; + /** + * Optionally set the maximum TLS version to allow. One + * of `'TLSv1.3'`, `'TLSv1.2'`, `'TLSv1.1'`, or `'TLSv1'`. Cannot be specified along with the + * `secureProtocol` option, use one or the other. + * **Default:** `'TLSv1.3'`, unless changed using CLI options. Using + * `--tls-max-v1.2` sets the default to `'TLSv1.2'`. Using `--tls-max-v1.3` sets the default to + * `'TLSv1.3'`. If multiple of the options are provided, the highest maximum is used. + */ + maxVersion?: SecureVersion | undefined; + /** + * Optionally set the minimum TLS version to allow. One + * of `'TLSv1.3'`, `'TLSv1.2'`, `'TLSv1.1'`, or `'TLSv1'`. Cannot be specified along with the + * `secureProtocol` option, use one or the other. It is not recommended to use + * less than TLSv1.2, but it may be required for interoperability. + * **Default:** `'TLSv1.2'`, unless changed using CLI options. Using + * `--tls-v1.0` sets the default to `'TLSv1'`. Using `--tls-v1.1` sets the default to + * `'TLSv1.1'`. Using `--tls-min-v1.3` sets the default to + * 'TLSv1.3'. If multiple of the options are provided, the lowest minimum is used. + */ + minVersion?: SecureVersion | undefined; + /** + * Shared passphrase used for a single private key and/or a PFX. + */ + passphrase?: string | undefined; + /** + * PFX or PKCS12 encoded private key and certificate chain. pfx is an + * alternative to providing key and cert individually. PFX is usually + * encrypted, if it is, passphrase will be used to decrypt it. Multiple + * PFX can be provided either as an array of unencrypted PFX buffers, + * or an array of objects in the form {buf: [, + * passphrase: ]}. The object form can only occur in an array. + * object.passphrase is optional. Encrypted PFX will be decrypted with + * object.passphrase if provided, or options.passphrase if it is not. + */ + pfx?: string | Buffer | Array | undefined; + /** + * Optionally affect the OpenSSL protocol behavior, which is not + * usually necessary. This should be used carefully if at all! Value is + * a numeric bitmask of the SSL_OP_* options from OpenSSL Options + */ + secureOptions?: number | undefined; // Value is a numeric bitmask of the `SSL_OP_*` options + /** + * Legacy mechanism to select the TLS protocol version to use, it does + * not support independent control of the minimum and maximum version, + * and does not support limiting the protocol to TLSv1.3. Use + * minVersion and maxVersion instead. The possible values are listed as + * SSL_METHODS, use the function names as strings. For example, use + * 'TLSv1_1_method' to force TLS version 1.1, or 'TLS_method' to allow + * any TLS protocol version up to TLSv1.3. It is not recommended to use + * TLS versions less than 1.2, but it may be required for + * interoperability. Default: none, see minVersion. + */ + secureProtocol?: string | undefined; + /** + * Opaque identifier used by servers to ensure session state is not + * shared between applications. Unused by clients. + */ + sessionIdContext?: string | undefined; + /** + * 48-bytes of cryptographically strong pseudo-random data. + * See Session Resumption for more information. + */ + ticketKeys?: Buffer | undefined; + /** + * The number of seconds after which a TLS session created by the + * server will no longer be resumable. See Session Resumption for more + * information. Default: 300. + */ + sessionTimeout?: number | undefined; + } + interface SecureContext { + context: any; + } + /** + * Verifies the certificate `cert` is issued to `hostname`. + * + * Returns [Error](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error) object, populating it with `reason`, `host`, and `cert` on + * failure. On success, returns [undefined](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Undefined_type). + * + * This function is intended to be used in combination with the`checkServerIdentity` option that can be passed to {@link connect} and as + * such operates on a `certificate object`. For other purposes, consider using `x509.checkHost()` instead. + * + * This function can be overwritten by providing an alternative function as the`options.checkServerIdentity` option that is passed to `tls.connect()`. The + * overwriting function can call `tls.checkServerIdentity()` of course, to augment + * the checks done with additional verification. + * + * This function is only called if the certificate passed all other checks, such as + * being issued by trusted CA (`options.ca`). + * + * Earlier versions of Node.js incorrectly accepted certificates for a given`hostname` if a matching `uniformResourceIdentifier` subject alternative name + * was present (see [CVE-2021-44531](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-44531)). Applications that wish to accept`uniformResourceIdentifier` subject alternative names can use + * a custom`options.checkServerIdentity` function that implements the desired behavior. + * @since v0.8.4 + * @param hostname The host name or IP address to verify the certificate against. + * @param cert A `certificate object` representing the peer's certificate. + */ + function checkServerIdentity(hostname: string, cert: PeerCertificate): Error | undefined; + /** + * Creates a new {@link Server}. The `secureConnectionListener`, if provided, is + * automatically set as a listener for the `'secureConnection'` event. + * + * The `ticketKeys` options is automatically shared between `node:cluster` module + * workers. + * + * The following illustrates a simple echo server: + * + * ```js + * const tls = require('node:tls'); + * const fs = require('node:fs'); + * + * const options = { + * key: fs.readFileSync('server-key.pem'), + * cert: fs.readFileSync('server-cert.pem'), + * + * // This is necessary only if using client certificate authentication. + * requestCert: true, + * + * // This is necessary only if the client uses a self-signed certificate. + * ca: [ fs.readFileSync('client-cert.pem') ], + * }; + * + * const server = tls.createServer(options, (socket) => { + * console.log('server connected', + * socket.authorized ? 'authorized' : 'unauthorized'); + * socket.write('welcome!\n'); + * socket.setEncoding('utf8'); + * socket.pipe(socket); + * }); + * server.listen(8000, () => { + * console.log('server bound'); + * }); + * ``` + * + * The server can be tested by connecting to it using the example client from {@link connect}. + * @since v0.3.2 + */ + function createServer(secureConnectionListener?: (socket: TLSSocket) => void): Server; + function createServer(options: TlsOptions, secureConnectionListener?: (socket: TLSSocket) => void): Server; + /** + * The `callback` function, if specified, will be added as a listener for the `'secureConnect'` event. + * + * `tls.connect()` returns a {@link TLSSocket} object. + * + * Unlike the `https` API, `tls.connect()` does not enable the + * SNI (Server Name Indication) extension by default, which may cause some + * servers to return an incorrect certificate or reject the connection + * altogether. To enable SNI, set the `servername` option in addition + * to `host`. + * + * The following illustrates a client for the echo server example from {@link createServer}: + * + * ```js + * // Assumes an echo server that is listening on port 8000. + * const tls = require('node:tls'); + * const fs = require('node:fs'); + * + * const options = { + * // Necessary only if the server requires client certificate authentication. + * key: fs.readFileSync('client-key.pem'), + * cert: fs.readFileSync('client-cert.pem'), + * + * // Necessary only if the server uses a self-signed certificate. + * ca: [ fs.readFileSync('server-cert.pem') ], + * + * // Necessary only if the server's cert isn't for "localhost". + * checkServerIdentity: () => { return null; }, + * }; + * + * const socket = tls.connect(8000, options, () => { + * console.log('client connected', + * socket.authorized ? 'authorized' : 'unauthorized'); + * process.stdin.pipe(socket); + * process.stdin.resume(); + * }); + * socket.setEncoding('utf8'); + * socket.on('data', (data) => { + * console.log(data); + * }); + * socket.on('end', () => { + * console.log('server ends connection'); + * }); + * ``` + * @since v0.11.3 + */ + function connect(options: ConnectionOptions, secureConnectListener?: () => void): TLSSocket; + function connect( + port: number, + host?: string, + options?: ConnectionOptions, + secureConnectListener?: () => void, + ): TLSSocket; + function connect(port: number, options?: ConnectionOptions, secureConnectListener?: () => void): TLSSocket; + /** + * Creates a new secure pair object with two streams, one of which reads and writes + * the encrypted data and the other of which reads and writes the cleartext data. + * Generally, the encrypted stream is piped to/from an incoming encrypted data + * stream and the cleartext one is used as a replacement for the initial encrypted + * stream. + * + * `tls.createSecurePair()` returns a `tls.SecurePair` object with `cleartext` and`encrypted` stream properties. + * + * Using `cleartext` has the same API as {@link TLSSocket}. + * + * The `tls.createSecurePair()` method is now deprecated in favor of`tls.TLSSocket()`. For example, the code: + * + * ```js + * pair = tls.createSecurePair(// ... ); + * pair.encrypted.pipe(socket); + * socket.pipe(pair.encrypted); + * ``` + * + * can be replaced by: + * + * ```js + * secureSocket = tls.TLSSocket(socket, options); + * ``` + * + * where `secureSocket` has the same API as `pair.cleartext`. + * @since v0.3.2 + * @deprecated Since v0.11.3 - Use {@link TLSSocket} instead. + * @param context A secure context object as returned by `tls.createSecureContext()` + * @param isServer `true` to specify that this TLS connection should be opened as a server. + * @param requestCert `true` to specify whether a server should request a certificate from a connecting client. Only applies when `isServer` is `true`. + * @param rejectUnauthorized If not `false` a server automatically reject clients with invalid certificates. Only applies when `isServer` is `true`. + */ + function createSecurePair( + context?: SecureContext, + isServer?: boolean, + requestCert?: boolean, + rejectUnauthorized?: boolean, + ): SecurePair; + /** + * {@link createServer} sets the default value of the `honorCipherOrder` option + * to `true`, other APIs that create secure contexts leave it unset. + * + * {@link createServer} uses a 128 bit truncated SHA1 hash value generated + * from `process.argv` as the default value of the `sessionIdContext` option, other + * APIs that create secure contexts have no default value. + * + * The `tls.createSecureContext()` method creates a `SecureContext` object. It is + * usable as an argument to several `tls` APIs, such as `server.addContext()`, + * but has no public methods. The {@link Server} constructor and the {@link createServer} method do not support the `secureContext` option. + * + * A key is _required_ for ciphers that use certificates. Either `key` or`pfx` can be used to provide it. + * + * If the `ca` option is not given, then Node.js will default to using [Mozilla's publicly trusted list of + * CAs](https://hg.mozilla.org/mozilla-central/raw-file/tip/security/nss/lib/ckfw/builtins/certdata.txt). + * + * Custom DHE parameters are discouraged in favor of the new `dhparam: 'auto'`option. When set to `'auto'`, well-known DHE parameters of sufficient strength + * will be selected automatically. Otherwise, if necessary, `openssl dhparam` can + * be used to create custom parameters. The key length must be greater than or + * equal to 1024 bits or else an error will be thrown. Although 1024 bits is + * permissible, use 2048 bits or larger for stronger security. + * @since v0.11.13 + */ + function createSecureContext(options?: SecureContextOptions): SecureContext; + /** + * Returns an array with the names of the supported TLS ciphers. The names are + * lower-case for historical reasons, but must be uppercased to be used in + * the `ciphers` option of {@link createSecureContext}. + * + * Not all supported ciphers are enabled by default. See `Modifying the default TLS cipher suite`. + * + * Cipher names that start with `'tls_'` are for TLSv1.3, all the others are for + * TLSv1.2 and below. + * + * ```js + * console.log(tls.getCiphers()); // ['aes128-gcm-sha256', 'aes128-sha', ...] + * ``` + * @since v0.10.2 + */ + function getCiphers(): string[]; + /** + * The default curve name to use for ECDH key agreement in a tls server. + * The default value is 'auto'. See tls.createSecureContext() for further + * information. + */ + let DEFAULT_ECDH_CURVE: string; + /** + * The default value of the maxVersion option of + * tls.createSecureContext(). It can be assigned any of the supported TLS + * protocol versions, 'TLSv1.3', 'TLSv1.2', 'TLSv1.1', or 'TLSv1'. Default: + * 'TLSv1.3', unless changed using CLI options. Using --tls-max-v1.2 sets + * the default to 'TLSv1.2'. Using --tls-max-v1.3 sets the default to + * 'TLSv1.3'. If multiple of the options are provided, the highest maximum + * is used. + */ + let DEFAULT_MAX_VERSION: SecureVersion; + /** + * The default value of the minVersion option of tls.createSecureContext(). + * It can be assigned any of the supported TLS protocol versions, + * 'TLSv1.3', 'TLSv1.2', 'TLSv1.1', or 'TLSv1'. Default: 'TLSv1.2', unless + * changed using CLI options. Using --tls-min-v1.0 sets the default to + * 'TLSv1'. Using --tls-min-v1.1 sets the default to 'TLSv1.1'. Using + * --tls-min-v1.3 sets the default to 'TLSv1.3'. If multiple of the options + * are provided, the lowest minimum is used. + */ + let DEFAULT_MIN_VERSION: SecureVersion; + /** + * The default value of the ciphers option of tls.createSecureContext(). + * It can be assigned any of the supported OpenSSL ciphers. + * Defaults to the content of crypto.constants.defaultCoreCipherList, unless + * changed using CLI options using --tls-default-ciphers. + */ + let DEFAULT_CIPHERS: string; + /** + * An immutable array of strings representing the root certificates (in PEM + * format) used for verifying peer certificates. This is the default value + * of the ca option to tls.createSecureContext(). + */ + const rootCertificates: ReadonlyArray; +} +declare module "node:tls" { + export * from "tls"; +} diff --git a/Url-Shortner/node_modules/@types/node/ts4.8/trace_events.d.ts b/Url-Shortner/node_modules/@types/node/ts4.8/trace_events.d.ts new file mode 100644 index 0000000..3361359 --- /dev/null +++ b/Url-Shortner/node_modules/@types/node/ts4.8/trace_events.d.ts @@ -0,0 +1,182 @@ +/** + * The `node:trace_events` module provides a mechanism to centralize tracing + * information generated by V8, Node.js core, and userspace code. + * + * Tracing can be enabled with the `--trace-event-categories` command-line flag + * or by using the `node:trace_events` module. The `--trace-event-categories` flag + * accepts a list of comma-separated category names. + * + * The available categories are: + * + * * `node`: An empty placeholder. + * * `node.async_hooks`: Enables capture of detailed `async_hooks` trace data. + * The `async_hooks` events have a unique `asyncId` and a special `triggerId` `triggerAsyncId` property. + * * `node.bootstrap`: Enables capture of Node.js bootstrap milestones. + * * `node.console`: Enables capture of `console.time()` and `console.count()`output. + * * `node.threadpoolwork.sync`: Enables capture of trace data for threadpool + * synchronous operations, such as `blob`, `zlib`, `crypto` and `node_api`. + * * `node.threadpoolwork.async`: Enables capture of trace data for threadpool + * asynchronous operations, such as `blob`, `zlib`, `crypto` and `node_api`. + * * `node.dns.native`: Enables capture of trace data for DNS queries. + * * `node.net.native`: Enables capture of trace data for network. + * * `node.environment`: Enables capture of Node.js Environment milestones. + * * `node.fs.sync`: Enables capture of trace data for file system sync methods. + * * `node.fs_dir.sync`: Enables capture of trace data for file system sync + * directory methods. + * * `node.fs.async`: Enables capture of trace data for file system async methods. + * * `node.fs_dir.async`: Enables capture of trace data for file system async + * directory methods. + * * `node.perf`: Enables capture of `Performance API` measurements. + * * `node.perf.usertiming`: Enables capture of only Performance API User Timing + * measures and marks. + * * `node.perf.timerify`: Enables capture of only Performance API timerify + * measurements. + * * `node.promises.rejections`: Enables capture of trace data tracking the number + * of unhandled Promise rejections and handled-after-rejections. + * * `node.vm.script`: Enables capture of trace data for the `node:vm` module's`runInNewContext()`, `runInContext()`, and `runInThisContext()` methods. + * * `v8`: The `V8` events are GC, compiling, and execution related. + * * `node.http`: Enables capture of trace data for http request / response. + * + * By default the `node`, `node.async_hooks`, and `v8` categories are enabled. + * + * ```bash + * node --trace-event-categories v8,node,node.async_hooks server.js + * ``` + * + * Prior versions of Node.js required the use of the `--trace-events-enabled`flag to enable trace events. This requirement has been removed. However, the`--trace-events-enabled` flag _may_ still be + * used and will enable the`node`, `node.async_hooks`, and `v8` trace event categories by default. + * + * ```bash + * node --trace-events-enabled + * + * # is equivalent to + * + * node --trace-event-categories v8,node,node.async_hooks + * ``` + * + * Alternatively, trace events may be enabled using the `node:trace_events` module: + * + * ```js + * const trace_events = require('node:trace_events'); + * const tracing = trace_events.createTracing({ categories: ['node.perf'] }); + * tracing.enable(); // Enable trace event capture for the 'node.perf' category + * + * // do work + * + * tracing.disable(); // Disable trace event capture for the 'node.perf' category + * ``` + * + * Running Node.js with tracing enabled will produce log files that can be opened + * in the [`chrome://tracing`](https://www.chromium.org/developers/how-tos/trace-event-profiling-tool) tab of Chrome. + * + * The logging file is by default called `node_trace.${rotation}.log`, where`${rotation}` is an incrementing log-rotation id. The filepath pattern can + * be specified with `--trace-event-file-pattern` that accepts a template + * string that supports `${rotation}` and `${pid}`: + * + * ```bash + * node --trace-event-categories v8 --trace-event-file-pattern '${pid}-${rotation}.log' server.js + * ``` + * + * To guarantee that the log file is properly generated after signal events like`SIGINT`, `SIGTERM`, or `SIGBREAK`, make sure to have the appropriate handlers + * in your code, such as: + * + * ```js + * process.on('SIGINT', function onSigint() { + * console.info('Received SIGINT.'); + * process.exit(130); // Or applicable exit code depending on OS and signal + * }); + * ``` + * + * The tracing system uses the same time source + * as the one used by `process.hrtime()`. + * However the trace-event timestamps are expressed in microseconds, + * unlike `process.hrtime()` which returns nanoseconds. + * + * The features from this module are not available in `Worker` threads. + * @experimental + * @see [source](https://github.com/nodejs/node/blob/v20.2.0/lib/trace_events.js) + */ +declare module "trace_events" { + /** + * The `Tracing` object is used to enable or disable tracing for sets of + * categories. Instances are created using the + * `trace_events.createTracing()` method. + * + * When created, the `Tracing` object is disabled. Calling the + * `tracing.enable()` method adds the categories to the set of enabled trace + * event categories. Calling `tracing.disable()` will remove the categories + * from the set of enabled trace event categories. + */ + interface Tracing { + /** + * A comma-separated list of the trace event categories covered by this + * `Tracing` object. + */ + readonly categories: string; + /** + * Disables this `Tracing` object. + * + * Only trace event categories _not_ covered by other enabled `Tracing` + * objects and _not_ specified by the `--trace-event-categories` flag + * will be disabled. + */ + disable(): void; + /** + * Enables this `Tracing` object for the set of categories covered by + * the `Tracing` object. + */ + enable(): void; + /** + * `true` only if the `Tracing` object has been enabled. + */ + readonly enabled: boolean; + } + interface CreateTracingOptions { + /** + * An array of trace category names. Values included in the array are + * coerced to a string when possible. An error will be thrown if the + * value cannot be coerced. + */ + categories: string[]; + } + /** + * Creates and returns a `Tracing` object for the given set of `categories`. + * + * ```js + * const trace_events = require('node:trace_events'); + * const categories = ['node.perf', 'node.async_hooks']; + * const tracing = trace_events.createTracing({ categories }); + * tracing.enable(); + * // do stuff + * tracing.disable(); + * ``` + * @since v10.0.0 + * @return . + */ + function createTracing(options: CreateTracingOptions): Tracing; + /** + * Returns a comma-separated list of all currently-enabled trace event + * categories. The current set of enabled trace event categories is determined + * by the _union_ of all currently-enabled `Tracing` objects and any categories + * enabled using the `--trace-event-categories` flag. + * + * Given the file `test.js` below, the command`node --trace-event-categories node.perf test.js` will print`'node.async_hooks,node.perf'` to the console. + * + * ```js + * const trace_events = require('node:trace_events'); + * const t1 = trace_events.createTracing({ categories: ['node.async_hooks'] }); + * const t2 = trace_events.createTracing({ categories: ['node.perf'] }); + * const t3 = trace_events.createTracing({ categories: ['v8'] }); + * + * t1.enable(); + * t2.enable(); + * + * console.log(trace_events.getEnabledCategories()); + * ``` + * @since v10.0.0 + */ + function getEnabledCategories(): string | undefined; +} +declare module "node:trace_events" { + export * from "trace_events"; +} diff --git a/Url-Shortner/node_modules/@types/node/ts4.8/tty.d.ts b/Url-Shortner/node_modules/@types/node/ts4.8/tty.d.ts new file mode 100644 index 0000000..1c0dafd --- /dev/null +++ b/Url-Shortner/node_modules/@types/node/ts4.8/tty.d.ts @@ -0,0 +1,208 @@ +/** + * The `node:tty` module provides the `tty.ReadStream` and `tty.WriteStream`classes. In most cases, it will not be necessary or possible to use this module + * directly. However, it can be accessed using: + * + * ```js + * const tty = require('node:tty'); + * ``` + * + * When Node.js detects that it is being run with a text terminal ("TTY") + * attached, `process.stdin` will, by default, be initialized as an instance of`tty.ReadStream` and both `process.stdout` and `process.stderr` will, by + * default, be instances of `tty.WriteStream`. The preferred method of determining + * whether Node.js is being run within a TTY context is to check that the value of + * the `process.stdout.isTTY` property is `true`: + * + * ```console + * $ node -p -e "Boolean(process.stdout.isTTY)" + * true + * $ node -p -e "Boolean(process.stdout.isTTY)" | cat + * false + * ``` + * + * In most cases, there should be little to no reason for an application to + * manually create instances of the `tty.ReadStream` and `tty.WriteStream`classes. + * @see [source](https://github.com/nodejs/node/blob/v20.2.0/lib/tty.js) + */ +declare module "tty" { + import * as net from "node:net"; + /** + * The `tty.isatty()` method returns `true` if the given `fd` is associated with + * a TTY and `false` if it is not, including whenever `fd` is not a non-negative + * integer. + * @since v0.5.8 + * @param fd A numeric file descriptor + */ + function isatty(fd: number): boolean; + /** + * Represents the readable side of a TTY. In normal circumstances `process.stdin` will be the only `tty.ReadStream` instance in a Node.js + * process and there should be no reason to create additional instances. + * @since v0.5.8 + */ + class ReadStream extends net.Socket { + constructor(fd: number, options?: net.SocketConstructorOpts); + /** + * A `boolean` that is `true` if the TTY is currently configured to operate as a + * raw device. + * + * This flag is always `false` when a process starts, even if the terminal is + * operating in raw mode. Its value will change with subsequent calls to`setRawMode`. + * @since v0.7.7 + */ + isRaw: boolean; + /** + * Allows configuration of `tty.ReadStream` so that it operates as a raw device. + * + * When in raw mode, input is always available character-by-character, not + * including modifiers. Additionally, all special processing of characters by the + * terminal is disabled, including echoing input + * characters. Ctrl+C will no longer cause a `SIGINT` when + * in this mode. + * @since v0.7.7 + * @param mode If `true`, configures the `tty.ReadStream` to operate as a raw device. If `false`, configures the `tty.ReadStream` to operate in its default mode. The `readStream.isRaw` + * property will be set to the resulting mode. + * @return The read stream instance. + */ + setRawMode(mode: boolean): this; + /** + * A `boolean` that is always `true` for `tty.ReadStream` instances. + * @since v0.5.8 + */ + isTTY: boolean; + } + /** + * -1 - to the left from cursor + * 0 - the entire line + * 1 - to the right from cursor + */ + type Direction = -1 | 0 | 1; + /** + * Represents the writable side of a TTY. In normal circumstances,`process.stdout` and `process.stderr` will be the only`tty.WriteStream` instances created for a Node.js process and there + * should be no reason to create additional instances. + * @since v0.5.8 + */ + class WriteStream extends net.Socket { + constructor(fd: number); + addListener(event: string, listener: (...args: any[]) => void): this; + addListener(event: "resize", listener: () => void): this; + emit(event: string | symbol, ...args: any[]): boolean; + emit(event: "resize"): boolean; + on(event: string, listener: (...args: any[]) => void): this; + on(event: "resize", listener: () => void): this; + once(event: string, listener: (...args: any[]) => void): this; + once(event: "resize", listener: () => void): this; + prependListener(event: string, listener: (...args: any[]) => void): this; + prependListener(event: "resize", listener: () => void): this; + prependOnceListener(event: string, listener: (...args: any[]) => void): this; + prependOnceListener(event: "resize", listener: () => void): this; + /** + * `writeStream.clearLine()` clears the current line of this `WriteStream` in a + * direction identified by `dir`. + * @since v0.7.7 + * @param callback Invoked once the operation completes. + * @return `false` if the stream wishes for the calling code to wait for the `'drain'` event to be emitted before continuing to write additional data; otherwise `true`. + */ + clearLine(dir: Direction, callback?: () => void): boolean; + /** + * `writeStream.clearScreenDown()` clears this `WriteStream` from the current + * cursor down. + * @since v0.7.7 + * @param callback Invoked once the operation completes. + * @return `false` if the stream wishes for the calling code to wait for the `'drain'` event to be emitted before continuing to write additional data; otherwise `true`. + */ + clearScreenDown(callback?: () => void): boolean; + /** + * `writeStream.cursorTo()` moves this `WriteStream`'s cursor to the specified + * position. + * @since v0.7.7 + * @param callback Invoked once the operation completes. + * @return `false` if the stream wishes for the calling code to wait for the `'drain'` event to be emitted before continuing to write additional data; otherwise `true`. + */ + cursorTo(x: number, y?: number, callback?: () => void): boolean; + cursorTo(x: number, callback: () => void): boolean; + /** + * `writeStream.moveCursor()` moves this `WriteStream`'s cursor _relative_ to its + * current position. + * @since v0.7.7 + * @param callback Invoked once the operation completes. + * @return `false` if the stream wishes for the calling code to wait for the `'drain'` event to be emitted before continuing to write additional data; otherwise `true`. + */ + moveCursor(dx: number, dy: number, callback?: () => void): boolean; + /** + * Returns: + * + * * `1` for 2, + * * `4` for 16, + * * `8` for 256, + * * `24` for 16,777,216 colors supported. + * + * Use this to determine what colors the terminal supports. Due to the nature of + * colors in terminals it is possible to either have false positives or false + * negatives. It depends on process information and the environment variables that + * may lie about what terminal is used. + * It is possible to pass in an `env` object to simulate the usage of a specific + * terminal. This can be useful to check how specific environment settings behave. + * + * To enforce a specific color support, use one of the below environment settings. + * + * * 2 colors: `FORCE_COLOR = 0` (Disables colors) + * * 16 colors: `FORCE_COLOR = 1` + * * 256 colors: `FORCE_COLOR = 2` + * * 16,777,216 colors: `FORCE_COLOR = 3` + * + * Disabling color support is also possible by using the `NO_COLOR` and`NODE_DISABLE_COLORS` environment variables. + * @since v9.9.0 + * @param [env=process.env] An object containing the environment variables to check. This enables simulating the usage of a specific terminal. + */ + getColorDepth(env?: object): number; + /** + * Returns `true` if the `writeStream` supports at least as many colors as provided + * in `count`. Minimum support is 2 (black and white). + * + * This has the same false positives and negatives as described in `writeStream.getColorDepth()`. + * + * ```js + * process.stdout.hasColors(); + * // Returns true or false depending on if `stdout` supports at least 16 colors. + * process.stdout.hasColors(256); + * // Returns true or false depending on if `stdout` supports at least 256 colors. + * process.stdout.hasColors({ TMUX: '1' }); + * // Returns true. + * process.stdout.hasColors(2 ** 24, { TMUX: '1' }); + * // Returns false (the environment setting pretends to support 2 ** 8 colors). + * ``` + * @since v11.13.0, v10.16.0 + * @param [count=16] The number of colors that are requested (minimum 2). + * @param [env=process.env] An object containing the environment variables to check. This enables simulating the usage of a specific terminal. + */ + hasColors(count?: number): boolean; + hasColors(env?: object): boolean; + hasColors(count: number, env?: object): boolean; + /** + * `writeStream.getWindowSize()` returns the size of the TTY + * corresponding to this `WriteStream`. The array is of the type`[numColumns, numRows]` where `numColumns` and `numRows` represent the number + * of columns and rows in the corresponding TTY. + * @since v0.7.7 + */ + getWindowSize(): [number, number]; + /** + * A `number` specifying the number of columns the TTY currently has. This property + * is updated whenever the `'resize'` event is emitted. + * @since v0.7.7 + */ + columns: number; + /** + * A `number` specifying the number of rows the TTY currently has. This property + * is updated whenever the `'resize'` event is emitted. + * @since v0.7.7 + */ + rows: number; + /** + * A `boolean` that is always `true`. + * @since v0.5.8 + */ + isTTY: boolean; + } +} +declare module "node:tty" { + export * from "tty"; +} diff --git a/Url-Shortner/node_modules/@types/node/ts4.8/url.d.ts b/Url-Shortner/node_modules/@types/node/ts4.8/url.d.ts new file mode 100644 index 0000000..f465a2b --- /dev/null +++ b/Url-Shortner/node_modules/@types/node/ts4.8/url.d.ts @@ -0,0 +1,927 @@ +/** + * The `node:url` module provides utilities for URL resolution and parsing. It can + * be accessed using: + * + * ```js + * import url from 'node:url'; + * ``` + * @see [source](https://github.com/nodejs/node/blob/v20.2.0/lib/url.js) + */ +declare module "url" { + import { Blob as NodeBlob } from "node:buffer"; + import { ClientRequestArgs } from "node:http"; + import { ParsedUrlQuery, ParsedUrlQueryInput } from "node:querystring"; + // Input to `url.format` + interface UrlObject { + auth?: string | null | undefined; + hash?: string | null | undefined; + host?: string | null | undefined; + hostname?: string | null | undefined; + href?: string | null | undefined; + pathname?: string | null | undefined; + protocol?: string | null | undefined; + search?: string | null | undefined; + slashes?: boolean | null | undefined; + port?: string | number | null | undefined; + query?: string | null | ParsedUrlQueryInput | undefined; + } + // Output of `url.parse` + interface Url { + auth: string | null; + hash: string | null; + host: string | null; + hostname: string | null; + href: string; + path: string | null; + pathname: string | null; + protocol: string | null; + search: string | null; + slashes: boolean | null; + port: string | null; + query: string | null | ParsedUrlQuery; + } + interface UrlWithParsedQuery extends Url { + query: ParsedUrlQuery; + } + interface UrlWithStringQuery extends Url { + query: string | null; + } + /** + * The `url.parse()` method takes a URL string, parses it, and returns a URL + * object. + * + * A `TypeError` is thrown if `urlString` is not a string. + * + * A `URIError` is thrown if the `auth` property is present but cannot be decoded. + * + * `url.parse()` uses a lenient, non-standard algorithm for parsing URL + * strings. It is prone to security issues such as [host name spoofing](https://hackerone.com/reports/678487) and incorrect handling of usernames and passwords. Do not use with untrusted + * input. CVEs are not issued for `url.parse()` vulnerabilities. Use the `WHATWG URL` API instead. + * @since v0.1.25 + * @deprecated Use the WHATWG URL API instead. + * @param urlString The URL string to parse. + * @param [parseQueryString=false] If `true`, the `query` property will always be set to an object returned by the {@link querystring} module's `parse()` method. If `false`, the `query` property + * on the returned URL object will be an unparsed, undecoded string. + * @param [slashesDenoteHost=false] If `true`, the first token after the literal string `//` and preceding the next `/` will be interpreted as the `host`. For instance, given `//foo/bar`, the + * result would be `{host: 'foo', pathname: '/bar'}` rather than `{pathname: '//foo/bar'}`. + */ + function parse(urlString: string): UrlWithStringQuery; + function parse( + urlString: string, + parseQueryString: false | undefined, + slashesDenoteHost?: boolean, + ): UrlWithStringQuery; + function parse(urlString: string, parseQueryString: true, slashesDenoteHost?: boolean): UrlWithParsedQuery; + function parse(urlString: string, parseQueryString: boolean, slashesDenoteHost?: boolean): Url; + /** + * The `url.format()` method returns a formatted URL string derived from`urlObject`. + * + * ```js + * const url = require('node:url'); + * url.format({ + * protocol: 'https', + * hostname: 'example.com', + * pathname: '/some/path', + * query: { + * page: 1, + * format: 'json', + * }, + * }); + * + * // => 'https://example.com/some/path?page=1&format=json' + * ``` + * + * If `urlObject` is not an object or a string, `url.format()` will throw a `TypeError`. + * + * The formatting process operates as follows: + * + * * A new empty string `result` is created. + * * If `urlObject.protocol` is a string, it is appended as-is to `result`. + * * Otherwise, if `urlObject.protocol` is not `undefined` and is not a string, an `Error` is thrown. + * * For all string values of `urlObject.protocol` that _do not end_ with an ASCII + * colon (`:`) character, the literal string `:` will be appended to `result`. + * * If either of the following conditions is true, then the literal string `//`will be appended to `result`: + * * `urlObject.slashes` property is true; + * * `urlObject.protocol` begins with `http`, `https`, `ftp`, `gopher`, or`file`; + * * If the value of the `urlObject.auth` property is truthy, and either`urlObject.host` or `urlObject.hostname` are not `undefined`, the value of`urlObject.auth` will be coerced into a string + * and appended to `result`followed by the literal string `@`. + * * If the `urlObject.host` property is `undefined` then: + * * If the `urlObject.hostname` is a string, it is appended to `result`. + * * Otherwise, if `urlObject.hostname` is not `undefined` and is not a string, + * an `Error` is thrown. + * * If the `urlObject.port` property value is truthy, and `urlObject.hostname`is not `undefined`: + * * The literal string `:` is appended to `result`, and + * * The value of `urlObject.port` is coerced to a string and appended to`result`. + * * Otherwise, if the `urlObject.host` property value is truthy, the value of`urlObject.host` is coerced to a string and appended to `result`. + * * If the `urlObject.pathname` property is a string that is not an empty string: + * * If the `urlObject.pathname`_does not start_ with an ASCII forward slash + * (`/`), then the literal string `'/'` is appended to `result`. + * * The value of `urlObject.pathname` is appended to `result`. + * * Otherwise, if `urlObject.pathname` is not `undefined` and is not a string, an `Error` is thrown. + * * If the `urlObject.search` property is `undefined` and if the `urlObject.query`property is an `Object`, the literal string `?` is appended to `result`followed by the output of calling the + * `querystring` module's `stringify()`method passing the value of `urlObject.query`. + * * Otherwise, if `urlObject.search` is a string: + * * If the value of `urlObject.search`_does not start_ with the ASCII question + * mark (`?`) character, the literal string `?` is appended to `result`. + * * The value of `urlObject.search` is appended to `result`. + * * Otherwise, if `urlObject.search` is not `undefined` and is not a string, an `Error` is thrown. + * * If the `urlObject.hash` property is a string: + * * If the value of `urlObject.hash`_does not start_ with the ASCII hash (`#`) + * character, the literal string `#` is appended to `result`. + * * The value of `urlObject.hash` is appended to `result`. + * * Otherwise, if the `urlObject.hash` property is not `undefined` and is not a + * string, an `Error` is thrown. + * * `result` is returned. + * @since v0.1.25 + * @legacy Use the WHATWG URL API instead. + * @param urlObject A URL object (as returned by `url.parse()` or constructed otherwise). If a string, it is converted to an object by passing it to `url.parse()`. + */ + function format(urlObject: URL, options?: URLFormatOptions): string; + /** + * The `url.format()` method returns a formatted URL string derived from`urlObject`. + * + * ```js + * const url = require('url'); + * url.format({ + * protocol: 'https', + * hostname: 'example.com', + * pathname: '/some/path', + * query: { + * page: 1, + * format: 'json' + * } + * }); + * + * // => 'https://example.com/some/path?page=1&format=json' + * ``` + * + * If `urlObject` is not an object or a string, `url.format()` will throw a `TypeError`. + * + * The formatting process operates as follows: + * + * * A new empty string `result` is created. + * * If `urlObject.protocol` is a string, it is appended as-is to `result`. + * * Otherwise, if `urlObject.protocol` is not `undefined` and is not a string, an `Error` is thrown. + * * For all string values of `urlObject.protocol` that _do not end_ with an ASCII + * colon (`:`) character, the literal string `:` will be appended to `result`. + * * If either of the following conditions is true, then the literal string `//`will be appended to `result`: + * * `urlObject.slashes` property is true; + * * `urlObject.protocol` begins with `http`, `https`, `ftp`, `gopher`, or`file`; + * * If the value of the `urlObject.auth` property is truthy, and either`urlObject.host` or `urlObject.hostname` are not `undefined`, the value of`urlObject.auth` will be coerced into a string + * and appended to `result`followed by the literal string `@`. + * * If the `urlObject.host` property is `undefined` then: + * * If the `urlObject.hostname` is a string, it is appended to `result`. + * * Otherwise, if `urlObject.hostname` is not `undefined` and is not a string, + * an `Error` is thrown. + * * If the `urlObject.port` property value is truthy, and `urlObject.hostname`is not `undefined`: + * * The literal string `:` is appended to `result`, and + * * The value of `urlObject.port` is coerced to a string and appended to`result`. + * * Otherwise, if the `urlObject.host` property value is truthy, the value of`urlObject.host` is coerced to a string and appended to `result`. + * * If the `urlObject.pathname` property is a string that is not an empty string: + * * If the `urlObject.pathname`_does not start_ with an ASCII forward slash + * (`/`), then the literal string `'/'` is appended to `result`. + * * The value of `urlObject.pathname` is appended to `result`. + * * Otherwise, if `urlObject.pathname` is not `undefined` and is not a string, an `Error` is thrown. + * * If the `urlObject.search` property is `undefined` and if the `urlObject.query`property is an `Object`, the literal string `?` is appended to `result`followed by the output of calling the + * `querystring` module's `stringify()`method passing the value of `urlObject.query`. + * * Otherwise, if `urlObject.search` is a string: + * * If the value of `urlObject.search`_does not start_ with the ASCII question + * mark (`?`) character, the literal string `?` is appended to `result`. + * * The value of `urlObject.search` is appended to `result`. + * * Otherwise, if `urlObject.search` is not `undefined` and is not a string, an `Error` is thrown. + * * If the `urlObject.hash` property is a string: + * * If the value of `urlObject.hash`_does not start_ with the ASCII hash (`#`) + * character, the literal string `#` is appended to `result`. + * * The value of `urlObject.hash` is appended to `result`. + * * Otherwise, if the `urlObject.hash` property is not `undefined` and is not a + * string, an `Error` is thrown. + * * `result` is returned. + * @since v0.1.25 + * @legacy Use the WHATWG URL API instead. + * @param urlObject A URL object (as returned by `url.parse()` or constructed otherwise). If a string, it is converted to an object by passing it to `url.parse()`. + */ + function format(urlObject: UrlObject | string): string; + /** + * The `url.resolve()` method resolves a target URL relative to a base URL in a + * manner similar to that of a web browser resolving an anchor tag. + * + * ```js + * const url = require('node:url'); + * url.resolve('/one/two/three', 'four'); // '/one/two/four' + * url.resolve('http://example.com/', '/one'); // 'http://example.com/one' + * url.resolve('http://example.com/one', '/two'); // 'http://example.com/two' + * ``` + * + * To achieve the same result using the WHATWG URL API: + * + * ```js + * function resolve(from, to) { + * const resolvedUrl = new URL(to, new URL(from, 'resolve://')); + * if (resolvedUrl.protocol === 'resolve:') { + * // `from` is a relative URL. + * const { pathname, search, hash } = resolvedUrl; + * return pathname + search + hash; + * } + * return resolvedUrl.toString(); + * } + * + * resolve('/one/two/three', 'four'); // '/one/two/four' + * resolve('http://example.com/', '/one'); // 'http://example.com/one' + * resolve('http://example.com/one', '/two'); // 'http://example.com/two' + * ``` + * @since v0.1.25 + * @legacy Use the WHATWG URL API instead. + * @param from The base URL to use if `to` is a relative URL. + * @param to The target URL to resolve. + */ + function resolve(from: string, to: string): string; + /** + * Returns the [Punycode](https://tools.ietf.org/html/rfc5891#section-4.4) ASCII serialization of the `domain`. If `domain` is an + * invalid domain, the empty string is returned. + * + * It performs the inverse operation to {@link domainToUnicode}. + * + * ```js + * import url from 'node:url'; + * + * console.log(url.domainToASCII('español.com')); + * // Prints xn--espaol-zwa.com + * console.log(url.domainToASCII('中文.com')); + * // Prints xn--fiq228c.com + * console.log(url.domainToASCII('xn--iñvalid.com')); + * // Prints an empty string + * ``` + * @since v7.4.0, v6.13.0 + */ + function domainToASCII(domain: string): string; + /** + * Returns the Unicode serialization of the `domain`. If `domain` is an invalid + * domain, the empty string is returned. + * + * It performs the inverse operation to {@link domainToASCII}. + * + * ```js + * import url from 'node:url'; + * + * console.log(url.domainToUnicode('xn--espaol-zwa.com')); + * // Prints español.com + * console.log(url.domainToUnicode('xn--fiq228c.com')); + * // Prints 中文.com + * console.log(url.domainToUnicode('xn--iñvalid.com')); + * // Prints an empty string + * ``` + * @since v7.4.0, v6.13.0 + */ + function domainToUnicode(domain: string): string; + /** + * This function ensures the correct decodings of percent-encoded characters as + * well as ensuring a cross-platform valid absolute path string. + * + * ```js + * import { fileURLToPath } from 'node:url'; + * + * const __filename = fileURLToPath(import.meta.url); + * + * new URL('file:///C:/path/').pathname; // Incorrect: /C:/path/ + * fileURLToPath('file:///C:/path/'); // Correct: C:\path\ (Windows) + * + * new URL('file://nas/foo.txt').pathname; // Incorrect: /foo.txt + * fileURLToPath('file://nas/foo.txt'); // Correct: \\nas\foo.txt (Windows) + * + * new URL('file:///你好.txt').pathname; // Incorrect: /%E4%BD%A0%E5%A5%BD.txt + * fileURLToPath('file:///你好.txt'); // Correct: /你好.txt (POSIX) + * + * new URL('file:///hello world').pathname; // Incorrect: /hello%20world + * fileURLToPath('file:///hello world'); // Correct: /hello world (POSIX) + * ``` + * @since v10.12.0 + * @param url The file URL string or URL object to convert to a path. + * @return The fully-resolved platform-specific Node.js file path. + */ + function fileURLToPath(url: string | URL): string; + /** + * This function ensures that `path` is resolved absolutely, and that the URL + * control characters are correctly encoded when converting into a File URL. + * + * ```js + * import { pathToFileURL } from 'node:url'; + * + * new URL('/foo#1', 'file:'); // Incorrect: file:///foo#1 + * pathToFileURL('/foo#1'); // Correct: file:///foo%231 (POSIX) + * + * new URL('/some/path%.c', 'file:'); // Incorrect: file:///some/path%.c + * pathToFileURL('/some/path%.c'); // Correct: file:///some/path%25.c (POSIX) + * ``` + * @since v10.12.0 + * @param path The path to convert to a File URL. + * @return The file URL object. + */ + function pathToFileURL(path: string): URL; + /** + * This utility function converts a URL object into an ordinary options object as + * expected by the `http.request()` and `https.request()` APIs. + * + * ```js + * import { urlToHttpOptions } from 'node:url'; + * const myURL = new URL('https://a:b@測試?abc#foo'); + * + * console.log(urlToHttpOptions(myURL)); + * /* + * { + * protocol: 'https:', + * hostname: 'xn--g6w251d', + * hash: '#foo', + * search: '?abc', + * pathname: '/', + * path: '/?abc', + * href: 'https://a:b@xn--g6w251d/?abc#foo', + * auth: 'a:b' + * } + * + * ``` + * @since v15.7.0, v14.18.0 + * @param url The `WHATWG URL` object to convert to an options object. + * @return Options object + */ + function urlToHttpOptions(url: URL): ClientRequestArgs; + interface URLFormatOptions { + auth?: boolean | undefined; + fragment?: boolean | undefined; + search?: boolean | undefined; + unicode?: boolean | undefined; + } + /** + * Browser-compatible `URL` class, implemented by following the WHATWG URL + * Standard. [Examples of parsed URLs](https://url.spec.whatwg.org/#example-url-parsing) may be found in the Standard itself. + * The `URL` class is also available on the global object. + * + * In accordance with browser conventions, all properties of `URL` objects + * are implemented as getters and setters on the class prototype, rather than as + * data properties on the object itself. Thus, unlike `legacy urlObject` s, + * using the `delete` keyword on any properties of `URL` objects (e.g. `delete myURL.protocol`, `delete myURL.pathname`, etc) has no effect but will still + * return `true`. + * @since v7.0.0, v6.13.0 + */ + class URL { + /** + * Creates a `'blob:nodedata:...'` URL string that represents the given `Blob` object and can be used to retrieve the `Blob` later. + * + * ```js + * const { + * Blob, + * resolveObjectURL, + * } = require('node:buffer'); + * + * const blob = new Blob(['hello']); + * const id = URL.createObjectURL(blob); + * + * // later... + * + * const otherBlob = resolveObjectURL(id); + * console.log(otherBlob.size); + * ``` + * + * The data stored by the registered `Blob` will be retained in memory until`URL.revokeObjectURL()` is called to remove it. + * + * `Blob` objects are registered within the current thread. If using Worker + * Threads, `Blob` objects registered within one Worker will not be available + * to other workers or the main thread. + * @since v16.7.0 + * @experimental + */ + static createObjectURL(blob: NodeBlob): string; + /** + * Removes the stored `Blob` identified by the given ID. Attempting to revoke a + * ID that isn't registered will silently fail. + * @since v16.7.0 + * @experimental + * @param id A `'blob:nodedata:...` URL string returned by a prior call to `URL.createObjectURL()`. + */ + static revokeObjectURL(objectUrl: string): void; + /** + * Checks if an `input` relative to the `base` can be parsed to a `URL`. + * + * ```js + * const isValid = URL.canParse('/foo', 'https://example.org/'); // true + * + * const isNotValid = URL.canParse('/foo'); // false + * ``` + * @since v19.9.0 + * @param input The absolute or relative input URL to parse. If `input` is relative, then `base` is required. If `input` is absolute, the `base` is ignored. If `input` is not a string, it is + * `converted to a string` first. + * @param base The base URL to resolve against if the `input` is not absolute. If `base` is not a string, it is `converted to a string` first. + */ + static canParse(input: string, base?: string): boolean; + constructor(input: string, base?: string | URL); + /** + * Gets and sets the fragment portion of the URL. + * + * ```js + * const myURL = new URL('https://example.org/foo#bar'); + * console.log(myURL.hash); + * // Prints #bar + * + * myURL.hash = 'baz'; + * console.log(myURL.href); + * // Prints https://example.org/foo#baz + * ``` + * + * Invalid URL characters included in the value assigned to the `hash` property + * are `percent-encoded`. The selection of which characters to + * percent-encode may vary somewhat from what the {@link parse} and {@link format} methods would produce. + */ + hash: string; + /** + * Gets and sets the host portion of the URL. + * + * ```js + * const myURL = new URL('https://example.org:81/foo'); + * console.log(myURL.host); + * // Prints example.org:81 + * + * myURL.host = 'example.com:82'; + * console.log(myURL.href); + * // Prints https://example.com:82/foo + * ``` + * + * Invalid host values assigned to the `host` property are ignored. + */ + host: string; + /** + * Gets and sets the host name portion of the URL. The key difference between`url.host` and `url.hostname` is that `url.hostname` does _not_ include the + * port. + * + * ```js + * const myURL = new URL('https://example.org:81/foo'); + * console.log(myURL.hostname); + * // Prints example.org + * + * // Setting the hostname does not change the port + * myURL.hostname = 'example.com'; + * console.log(myURL.href); + * // Prints https://example.com:81/foo + * + * // Use myURL.host to change the hostname and port + * myURL.host = 'example.org:82'; + * console.log(myURL.href); + * // Prints https://example.org:82/foo + * ``` + * + * Invalid host name values assigned to the `hostname` property are ignored. + */ + hostname: string; + /** + * Gets and sets the serialized URL. + * + * ```js + * const myURL = new URL('https://example.org/foo'); + * console.log(myURL.href); + * // Prints https://example.org/foo + * + * myURL.href = 'https://example.com/bar'; + * console.log(myURL.href); + * // Prints https://example.com/bar + * ``` + * + * Getting the value of the `href` property is equivalent to calling {@link toString}. + * + * Setting the value of this property to a new value is equivalent to creating a + * new `URL` object using `new URL(value)`. Each of the `URL`object's properties will be modified. + * + * If the value assigned to the `href` property is not a valid URL, a `TypeError`will be thrown. + */ + href: string; + /** + * Gets the read-only serialization of the URL's origin. + * + * ```js + * const myURL = new URL('https://example.org/foo/bar?baz'); + * console.log(myURL.origin); + * // Prints https://example.org + * ``` + * + * ```js + * const idnURL = new URL('https://測試'); + * console.log(idnURL.origin); + * // Prints https://xn--g6w251d + * + * console.log(idnURL.hostname); + * // Prints xn--g6w251d + * ``` + */ + readonly origin: string; + /** + * Gets and sets the password portion of the URL. + * + * ```js + * const myURL = new URL('https://abc:xyz@example.com'); + * console.log(myURL.password); + * // Prints xyz + * + * myURL.password = '123'; + * console.log(myURL.href); + * // Prints https://abc:123@example.com/ + * ``` + * + * Invalid URL characters included in the value assigned to the `password` property + * are `percent-encoded`. The selection of which characters to + * percent-encode may vary somewhat from what the {@link parse} and {@link format} methods would produce. + */ + password: string; + /** + * Gets and sets the path portion of the URL. + * + * ```js + * const myURL = new URL('https://example.org/abc/xyz?123'); + * console.log(myURL.pathname); + * // Prints /abc/xyz + * + * myURL.pathname = '/abcdef'; + * console.log(myURL.href); + * // Prints https://example.org/abcdef?123 + * ``` + * + * Invalid URL characters included in the value assigned to the `pathname`property are `percent-encoded`. The selection of which characters + * to percent-encode may vary somewhat from what the {@link parse} and {@link format} methods would produce. + */ + pathname: string; + /** + * Gets and sets the port portion of the URL. + * + * The port value may be a number or a string containing a number in the range`0` to `65535` (inclusive). Setting the value to the default port of the`URL` objects given `protocol` will + * result in the `port` value becoming + * the empty string (`''`). + * + * The port value can be an empty string in which case the port depends on + * the protocol/scheme: + * + * + * + * Upon assigning a value to the port, the value will first be converted to a + * string using `.toString()`. + * + * If that string is invalid but it begins with a number, the leading number is + * assigned to `port`. + * If the number lies outside the range denoted above, it is ignored. + * + * ```js + * const myURL = new URL('https://example.org:8888'); + * console.log(myURL.port); + * // Prints 8888 + * + * // Default ports are automatically transformed to the empty string + * // (HTTPS protocol's default port is 443) + * myURL.port = '443'; + * console.log(myURL.port); + * // Prints the empty string + * console.log(myURL.href); + * // Prints https://example.org/ + * + * myURL.port = 1234; + * console.log(myURL.port); + * // Prints 1234 + * console.log(myURL.href); + * // Prints https://example.org:1234/ + * + * // Completely invalid port strings are ignored + * myURL.port = 'abcd'; + * console.log(myURL.port); + * // Prints 1234 + * + * // Leading numbers are treated as a port number + * myURL.port = '5678abcd'; + * console.log(myURL.port); + * // Prints 5678 + * + * // Non-integers are truncated + * myURL.port = 1234.5678; + * console.log(myURL.port); + * // Prints 1234 + * + * // Out-of-range numbers which are not represented in scientific notation + * // will be ignored. + * myURL.port = 1e10; // 10000000000, will be range-checked as described below + * console.log(myURL.port); + * // Prints 1234 + * ``` + * + * Numbers which contain a decimal point, + * such as floating-point numbers or numbers in scientific notation, + * are not an exception to this rule. + * Leading numbers up to the decimal point will be set as the URL's port, + * assuming they are valid: + * + * ```js + * myURL.port = 4.567e21; + * console.log(myURL.port); + * // Prints 4 (because it is the leading number in the string '4.567e21') + * ``` + */ + port: string; + /** + * Gets and sets the protocol portion of the URL. + * + * ```js + * const myURL = new URL('https://example.org'); + * console.log(myURL.protocol); + * // Prints https: + * + * myURL.protocol = 'ftp'; + * console.log(myURL.href); + * // Prints ftp://example.org/ + * ``` + * + * Invalid URL protocol values assigned to the `protocol` property are ignored. + */ + protocol: string; + /** + * Gets and sets the serialized query portion of the URL. + * + * ```js + * const myURL = new URL('https://example.org/abc?123'); + * console.log(myURL.search); + * // Prints ?123 + * + * myURL.search = 'abc=xyz'; + * console.log(myURL.href); + * // Prints https://example.org/abc?abc=xyz + * ``` + * + * Any invalid URL characters appearing in the value assigned the `search`property will be `percent-encoded`. The selection of which + * characters to percent-encode may vary somewhat from what the {@link parse} and {@link format} methods would produce. + */ + search: string; + /** + * Gets the `URLSearchParams` object representing the query parameters of the + * URL. This property is read-only but the `URLSearchParams` object it provides + * can be used to mutate the URL instance; to replace the entirety of query + * parameters of the URL, use the {@link search} setter. See `URLSearchParams` documentation for details. + * + * Use care when using `.searchParams` to modify the `URL` because, + * per the WHATWG specification, the `URLSearchParams` object uses + * different rules to determine which characters to percent-encode. For + * instance, the `URL` object will not percent encode the ASCII tilde (`~`) + * character, while `URLSearchParams` will always encode it: + * + * ```js + * const myURL = new URL('https://example.org/abc?foo=~bar'); + * + * console.log(myURL.search); // prints ?foo=~bar + * + * // Modify the URL via searchParams... + * myURL.searchParams.sort(); + * + * console.log(myURL.search); // prints ?foo=%7Ebar + * ``` + */ + readonly searchParams: URLSearchParams; + /** + * Gets and sets the username portion of the URL. + * + * ```js + * const myURL = new URL('https://abc:xyz@example.com'); + * console.log(myURL.username); + * // Prints abc + * + * myURL.username = '123'; + * console.log(myURL.href); + * // Prints https://123:xyz@example.com/ + * ``` + * + * Any invalid URL characters appearing in the value assigned the `username`property will be `percent-encoded`. The selection of which + * characters to percent-encode may vary somewhat from what the {@link parse} and {@link format} methods would produce. + */ + username: string; + /** + * The `toString()` method on the `URL` object returns the serialized URL. The + * value returned is equivalent to that of {@link href} and {@link toJSON}. + */ + toString(): string; + /** + * The `toJSON()` method on the `URL` object returns the serialized URL. The + * value returned is equivalent to that of {@link href} and {@link toString}. + * + * This method is automatically called when an `URL` object is serialized + * with [`JSON.stringify()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify). + * + * ```js + * const myURLs = [ + * new URL('https://www.example.com'), + * new URL('https://test.example.org'), + * ]; + * console.log(JSON.stringify(myURLs)); + * // Prints ["https://www.example.com/","https://test.example.org/"] + * ``` + */ + toJSON(): string; + } + /** + * The `URLSearchParams` API provides read and write access to the query of a`URL`. The `URLSearchParams` class can also be used standalone with one of the + * four following constructors. + * The `URLSearchParams` class is also available on the global object. + * + * The WHATWG `URLSearchParams` interface and the `querystring` module have + * similar purpose, but the purpose of the `querystring` module is more + * general, as it allows the customization of delimiter characters (`&` and `=`). + * On the other hand, this API is designed purely for URL query strings. + * + * ```js + * const myURL = new URL('https://example.org/?abc=123'); + * console.log(myURL.searchParams.get('abc')); + * // Prints 123 + * + * myURL.searchParams.append('abc', 'xyz'); + * console.log(myURL.href); + * // Prints https://example.org/?abc=123&abc=xyz + * + * myURL.searchParams.delete('abc'); + * myURL.searchParams.set('a', 'b'); + * console.log(myURL.href); + * // Prints https://example.org/?a=b + * + * const newSearchParams = new URLSearchParams(myURL.searchParams); + * // The above is equivalent to + * // const newSearchParams = new URLSearchParams(myURL.search); + * + * newSearchParams.append('a', 'c'); + * console.log(myURL.href); + * // Prints https://example.org/?a=b + * console.log(newSearchParams.toString()); + * // Prints a=b&a=c + * + * // newSearchParams.toString() is implicitly called + * myURL.search = newSearchParams; + * console.log(myURL.href); + * // Prints https://example.org/?a=b&a=c + * newSearchParams.delete('a'); + * console.log(myURL.href); + * // Prints https://example.org/?a=b&a=c + * ``` + * @since v7.5.0, v6.13.0 + */ + class URLSearchParams implements Iterable<[string, string]> { + constructor( + init?: + | URLSearchParams + | string + | Record> + | Iterable<[string, string]> + | ReadonlyArray<[string, string]>, + ); + /** + * Append a new name-value pair to the query string. + */ + append(name: string, value: string): void; + /** + * If `value` is provided, removes all name-value pairs + * where name is `name` and value is `value`.. + * + * If `value` is not provided, removes all name-value pairs whose name is `name`. + */ + delete(name: string, value?: string): void; + /** + * Returns an ES6 `Iterator` over each of the name-value pairs in the query. + * Each item of the iterator is a JavaScript `Array`. The first item of the `Array`is the `name`, the second item of the `Array` is the `value`. + * + * Alias for `urlSearchParams[@@iterator]()`. + */ + entries(): IterableIterator<[string, string]>; + /** + * Iterates over each name-value pair in the query and invokes the given function. + * + * ```js + * const myURL = new URL('https://example.org/?a=b&c=d'); + * myURL.searchParams.forEach((value, name, searchParams) => { + * console.log(name, value, myURL.searchParams === searchParams); + * }); + * // Prints: + * // a b true + * // c d true + * ``` + * @param fn Invoked for each name-value pair in the query + * @param thisArg To be used as `this` value for when `fn` is called + */ + forEach( + callback: (this: TThis, value: string, name: string, searchParams: URLSearchParams) => void, + thisArg?: TThis, + ): void; + /** + * Returns the value of the first name-value pair whose name is `name`. If there + * are no such pairs, `null` is returned. + * @return or `null` if there is no name-value pair with the given `name`. + */ + get(name: string): string | null; + /** + * Returns the values of all name-value pairs whose name is `name`. If there are + * no such pairs, an empty array is returned. + */ + getAll(name: string): string[]; + /** + * Checks if the `URLSearchParams` object contains key-value pair(s) based on`name` and an optional `value` argument. + * + * If `value` is provided, returns `true` when name-value pair with + * same `name` and `value` exists. + * + * If `value` is not provided, returns `true` if there is at least one name-value + * pair whose name is `name`. + */ + has(name: string, value?: string): boolean; + /** + * Returns an ES6 `Iterator` over the names of each name-value pair. + * + * ```js + * const params = new URLSearchParams('foo=bar&foo=baz'); + * for (const name of params.keys()) { + * console.log(name); + * } + * // Prints: + * // foo + * // foo + * ``` + */ + keys(): IterableIterator; + /** + * Sets the value in the `URLSearchParams` object associated with `name` to`value`. If there are any pre-existing name-value pairs whose names are `name`, + * set the first such pair's value to `value` and remove all others. If not, + * append the name-value pair to the query string. + * + * ```js + * const params = new URLSearchParams(); + * params.append('foo', 'bar'); + * params.append('foo', 'baz'); + * params.append('abc', 'def'); + * console.log(params.toString()); + * // Prints foo=bar&foo=baz&abc=def + * + * params.set('foo', 'def'); + * params.set('xyz', 'opq'); + * console.log(params.toString()); + * // Prints foo=def&abc=def&xyz=opq + * ``` + */ + set(name: string, value: string): void; + /** + * The total number of parameter entries. + * @since v19.8.0 + */ + readonly size: number; + /** + * Sort all existing name-value pairs in-place by their names. Sorting is done + * with a [stable sorting algorithm](https://en.wikipedia.org/wiki/Sorting_algorithm#Stability), so relative order between name-value pairs + * with the same name is preserved. + * + * This method can be used, in particular, to increase cache hits. + * + * ```js + * const params = new URLSearchParams('query[]=abc&type=search&query[]=123'); + * params.sort(); + * console.log(params.toString()); + * // Prints query%5B%5D=abc&query%5B%5D=123&type=search + * ``` + * @since v7.7.0, v6.13.0 + */ + sort(): void; + /** + * Returns the search parameters serialized as a string, with characters + * percent-encoded where necessary. + */ + toString(): string; + /** + * Returns an ES6 `Iterator` over the values of each name-value pair. + */ + values(): IterableIterator; + [Symbol.iterator](): IterableIterator<[string, string]>; + } + import { URL as _URL, URLSearchParams as _URLSearchParams } from "url"; + global { + interface URLSearchParams extends _URLSearchParams {} + interface URL extends _URL {} + interface Global { + URL: typeof _URL; + URLSearchParams: typeof _URLSearchParams; + } + /** + * `URL` class is a global reference for `require('url').URL` + * https://nodejs.org/api/url.html#the-whatwg-url-api + * @since v10.0.0 + */ + var URL: typeof globalThis extends { + onmessage: any; + URL: infer T; + } ? T + : typeof _URL; + /** + * `URLSearchParams` class is a global reference for `require('url').URLSearchParams` + * https://nodejs.org/api/url.html#class-urlsearchparams + * @since v10.0.0 + */ + var URLSearchParams: typeof globalThis extends { + onmessage: any; + URLSearchParams: infer T; + } ? T + : typeof _URLSearchParams; + } +} +declare module "node:url" { + export * from "url"; +} diff --git a/Url-Shortner/node_modules/@types/node/ts4.8/util.d.ts b/Url-Shortner/node_modules/@types/node/ts4.8/util.d.ts new file mode 100644 index 0000000..12d2402 --- /dev/null +++ b/Url-Shortner/node_modules/@types/node/ts4.8/util.d.ts @@ -0,0 +1,2178 @@ +/** + * The `node:util` module supports the needs of Node.js internal APIs. Many of the + * utilities are useful for application and module developers as well. To access + * it: + * + * ```js + * const util = require('node:util'); + * ``` + * @see [source](https://github.com/nodejs/node/blob/v20.2.0/lib/util.js) + */ +declare module "util" { + import * as types from "node:util/types"; + export interface InspectOptions { + /** + * If `true`, object's non-enumerable symbols and properties are included in the formatted result. + * `WeakMap` and `WeakSet` entries are also included as well as user defined prototype properties (excluding method properties). + * @default false + */ + showHidden?: boolean | undefined; + /** + * Specifies the number of times to recurse while formatting object. + * This is useful for inspecting large objects. + * To recurse up to the maximum call stack size pass `Infinity` or `null`. + * @default 2 + */ + depth?: number | null | undefined; + /** + * If `true`, the output is styled with ANSI color codes. Colors are customizable. + */ + colors?: boolean | undefined; + /** + * If `false`, `[util.inspect.custom](depth, opts, inspect)` functions are not invoked. + * @default true + */ + customInspect?: boolean | undefined; + /** + * If `true`, `Proxy` inspection includes the target and handler objects. + * @default false + */ + showProxy?: boolean | undefined; + /** + * Specifies the maximum number of `Array`, `TypedArray`, `WeakMap`, and `WeakSet` elements + * to include when formatting. Set to `null` or `Infinity` to show all elements. + * Set to `0` or negative to show no elements. + * @default 100 + */ + maxArrayLength?: number | null | undefined; + /** + * Specifies the maximum number of characters to + * include when formatting. Set to `null` or `Infinity` to show all elements. + * Set to `0` or negative to show no characters. + * @default 10000 + */ + maxStringLength?: number | null | undefined; + /** + * The length at which input values are split across multiple lines. + * Set to `Infinity` to format the input as a single line + * (in combination with `compact` set to `true` or any number >= `1`). + * @default 80 + */ + breakLength?: number | undefined; + /** + * Setting this to `false` causes each object key + * to be displayed on a new line. It will also add new lines to text that is + * longer than `breakLength`. If set to a number, the most `n` inner elements + * are united on a single line as long as all properties fit into + * `breakLength`. Short array elements are also grouped together. Note that no + * text will be reduced below 16 characters, no matter the `breakLength` size. + * For more information, see the example below. + * @default true + */ + compact?: boolean | number | undefined; + /** + * If set to `true` or a function, all properties of an object, and `Set` and `Map` + * entries are sorted in the resulting string. + * If set to `true` the default sort is used. + * If set to a function, it is used as a compare function. + */ + sorted?: boolean | ((a: string, b: string) => number) | undefined; + /** + * If set to `true`, getters are going to be + * inspected as well. If set to `'get'` only getters without setter are going + * to be inspected. If set to `'set'` only getters having a corresponding + * setter are going to be inspected. This might cause side effects depending on + * the getter function. + * @default false + */ + getters?: "get" | "set" | boolean | undefined; + /** + * If set to `true`, an underscore is used to separate every three digits in all bigints and numbers. + * @default false + */ + numericSeparator?: boolean | undefined; + } + export type Style = + | "special" + | "number" + | "bigint" + | "boolean" + | "undefined" + | "null" + | "string" + | "symbol" + | "date" + | "regexp" + | "module"; + export type CustomInspectFunction = (depth: number, options: InspectOptionsStylized) => any; // TODO: , inspect: inspect + export interface InspectOptionsStylized extends InspectOptions { + stylize(text: string, styleType: Style): string; + } + /** + * The `util.format()` method returns a formatted string using the first argument + * as a `printf`\-like format string which can contain zero or more format + * specifiers. Each specifier is replaced with the converted value from the + * corresponding argument. Supported specifiers are: + * + * If a specifier does not have a corresponding argument, it is not replaced: + * + * ```js + * util.format('%s:%s', 'foo'); + * // Returns: 'foo:%s' + * ``` + * + * Values that are not part of the format string are formatted using`util.inspect()` if their type is not `string`. + * + * If there are more arguments passed to the `util.format()` method than the + * number of specifiers, the extra arguments are concatenated to the returned + * string, separated by spaces: + * + * ```js + * util.format('%s:%s', 'foo', 'bar', 'baz'); + * // Returns: 'foo:bar baz' + * ``` + * + * If the first argument does not contain a valid format specifier, `util.format()`returns a string that is the concatenation of all arguments separated by spaces: + * + * ```js + * util.format(1, 2, 3); + * // Returns: '1 2 3' + * ``` + * + * If only one argument is passed to `util.format()`, it is returned as it is + * without any formatting: + * + * ```js + * util.format('%% %s'); + * // Returns: '%% %s' + * ``` + * + * `util.format()` is a synchronous method that is intended as a debugging tool. + * Some input values can have a significant performance overhead that can block the + * event loop. Use this function with care and never in a hot code path. + * @since v0.5.3 + * @param format A `printf`-like format string. + */ + export function format(format?: any, ...param: any[]): string; + /** + * This function is identical to {@link format}, except in that it takes + * an `inspectOptions` argument which specifies options that are passed along to {@link inspect}. + * + * ```js + * util.formatWithOptions({ colors: true }, 'See object %O', { foo: 42 }); + * // Returns 'See object { foo: 42 }', where `42` is colored as a number + * // when printed to a terminal. + * ``` + * @since v10.0.0 + */ + export function formatWithOptions(inspectOptions: InspectOptions, format?: any, ...param: any[]): string; + /** + * Returns the string name for a numeric error code that comes from a Node.js API. + * The mapping between error codes and error names is platform-dependent. + * See `Common System Errors` for the names of common errors. + * + * ```js + * fs.access('file/that/does/not/exist', (err) => { + * const name = util.getSystemErrorName(err.errno); + * console.error(name); // ENOENT + * }); + * ``` + * @since v9.7.0 + */ + export function getSystemErrorName(err: number): string; + /** + * Returns a Map of all system error codes available from the Node.js API. + * The mapping between error codes and error names is platform-dependent. + * See `Common System Errors` for the names of common errors. + * + * ```js + * fs.access('file/that/does/not/exist', (err) => { + * const errorMap = util.getSystemErrorMap(); + * const name = errorMap.get(err.errno); + * console.error(name); // ENOENT + * }); + * ``` + * @since v16.0.0, v14.17.0 + */ + export function getSystemErrorMap(): Map; + /** + * The `util.log()` method prints the given `string` to `stdout` with an included + * timestamp. + * + * ```js + * const util = require('node:util'); + * + * util.log('Timestamped message.'); + * ``` + * @since v0.3.0 + * @deprecated Since v6.0.0 - Use a third party module instead. + */ + export function log(string: string): void; + /** + * Returns the `string` after replacing any surrogate code points + * (or equivalently, any unpaired surrogate code units) with the + * Unicode "replacement character" U+FFFD. + * @since v16.8.0, v14.18.0 + */ + export function toUSVString(string: string): string; + /** + * Creates and returns an `AbortController` instance whose `AbortSignal` is marked + * as transferable and can be used with `structuredClone()` or `postMessage()`. + * @since v18.11.0 + * @experimental + * @returns A transferable AbortController + */ + export function transferableAbortController(): AbortController; + /** + * Marks the given `AbortSignal` as transferable so that it can be used with`structuredClone()` and `postMessage()`. + * + * ```js + * const signal = transferableAbortSignal(AbortSignal.timeout(100)); + * const channel = new MessageChannel(); + * channel.port2.postMessage(signal, [signal]); + * ``` + * @since v18.11.0 + * @experimental + * @param signal The AbortSignal + * @returns The same AbortSignal + */ + export function transferableAbortSignal(signal: AbortSignal): AbortSignal; + /** + * Listens to abort event on the provided `signal` and + * returns a promise that is fulfilled when the `signal` is + * aborted. If the passed `resource` is garbage collected before the `signal` is + * aborted, the returned promise shall remain pending indefinitely. + * + * ```js + * import { aborted } from 'node:util'; + * + * const dependent = obtainSomethingAbortable(); + * + * aborted(dependent.signal, dependent).then(() => { + * // Do something when dependent is aborted. + * }); + * + * dependent.on('event', () => { + * dependent.abort(); + * }); + * ``` + * @since v19.7.0 + * @experimental + * @param resource Any non-null entity, reference to which is held weakly. + */ + export function aborted(signal: AbortSignal, resource: any): Promise; + /** + * The `util.inspect()` method returns a string representation of `object` that is + * intended for debugging. The output of `util.inspect` may change at any time + * and should not be depended upon programmatically. Additional `options` may be + * passed that alter the result.`util.inspect()` will use the constructor's name and/or `@@toStringTag` to make + * an identifiable tag for an inspected value. + * + * ```js + * class Foo { + * get [Symbol.toStringTag]() { + * return 'bar'; + * } + * } + * + * class Bar {} + * + * const baz = Object.create(null, { [Symbol.toStringTag]: { value: 'foo' } }); + * + * util.inspect(new Foo()); // 'Foo [bar] {}' + * util.inspect(new Bar()); // 'Bar {}' + * util.inspect(baz); // '[foo] {}' + * ``` + * + * Circular references point to their anchor by using a reference index: + * + * ```js + * const { inspect } = require('node:util'); + * + * const obj = {}; + * obj.a = [obj]; + * obj.b = {}; + * obj.b.inner = obj.b; + * obj.b.obj = obj; + * + * console.log(inspect(obj)); + * // { + * // a: [ [Circular *1] ], + * // b: { inner: [Circular *2], obj: [Circular *1] } + * // } + * ``` + * + * The following example inspects all properties of the `util` object: + * + * ```js + * const util = require('node:util'); + * + * console.log(util.inspect(util, { showHidden: true, depth: null })); + * ``` + * + * The following example highlights the effect of the `compact` option: + * + * ```js + * const util = require('node:util'); + * + * const o = { + * a: [1, 2, [[ + * 'Lorem ipsum dolor sit amet,\nconsectetur adipiscing elit, sed do ' + + * 'eiusmod \ntempor incididunt ut labore et dolore magna aliqua.', + * 'test', + * 'foo']], 4], + * b: new Map([['za', 1], ['zb', 'test']]), + * }; + * console.log(util.inspect(o, { compact: true, depth: 5, breakLength: 80 })); + * + * // { a: + * // [ 1, + * // 2, + * // [ [ 'Lorem ipsum dolor sit amet,\nconsectetur [...]', // A long line + * // 'test', + * // 'foo' ] ], + * // 4 ], + * // b: Map(2) { 'za' => 1, 'zb' => 'test' } } + * + * // Setting `compact` to false or an integer creates more reader friendly output. + * console.log(util.inspect(o, { compact: false, depth: 5, breakLength: 80 })); + * + * // { + * // a: [ + * // 1, + * // 2, + * // [ + * // [ + * // 'Lorem ipsum dolor sit amet,\n' + + * // 'consectetur adipiscing elit, sed do eiusmod \n' + + * // 'tempor incididunt ut labore et dolore magna aliqua.', + * // 'test', + * // 'foo' + * // ] + * // ], + * // 4 + * // ], + * // b: Map(2) { + * // 'za' => 1, + * // 'zb' => 'test' + * // } + * // } + * + * // Setting `breakLength` to e.g. 150 will print the "Lorem ipsum" text in a + * // single line. + * ``` + * + * The `showHidden` option allows [`WeakMap`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakMap) and + * [`WeakSet`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakSet) entries to be + * inspected. If there are more entries than `maxArrayLength`, there is no + * guarantee which entries are displayed. That means retrieving the same [`WeakSet`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakSet) entries twice may + * result in different output. Furthermore, entries + * with no remaining strong references may be garbage collected at any time. + * + * ```js + * const { inspect } = require('node:util'); + * + * const obj = { a: 1 }; + * const obj2 = { b: 2 }; + * const weakSet = new WeakSet([obj, obj2]); + * + * console.log(inspect(weakSet, { showHidden: true })); + * // WeakSet { { a: 1 }, { b: 2 } } + * ``` + * + * The `sorted` option ensures that an object's property insertion order does not + * impact the result of `util.inspect()`. + * + * ```js + * const { inspect } = require('node:util'); + * const assert = require('node:assert'); + * + * const o1 = { + * b: [2, 3, 1], + * a: '`a` comes before `b`', + * c: new Set([2, 3, 1]), + * }; + * console.log(inspect(o1, { sorted: true })); + * // { a: '`a` comes before `b`', b: [ 2, 3, 1 ], c: Set(3) { 1, 2, 3 } } + * console.log(inspect(o1, { sorted: (a, b) => b.localeCompare(a) })); + * // { c: Set(3) { 3, 2, 1 }, b: [ 2, 3, 1 ], a: '`a` comes before `b`' } + * + * const o2 = { + * c: new Set([2, 1, 3]), + * a: '`a` comes before `b`', + * b: [2, 3, 1], + * }; + * assert.strict.equal( + * inspect(o1, { sorted: true }), + * inspect(o2, { sorted: true }), + * ); + * ``` + * + * The `numericSeparator` option adds an underscore every three digits to all + * numbers. + * + * ```js + * const { inspect } = require('node:util'); + * + * const thousand = 1_000; + * const million = 1_000_000; + * const bigNumber = 123_456_789n; + * const bigDecimal = 1_234.123_45; + * + * console.log(thousand, million, bigNumber, bigDecimal); + * // 1_000 1_000_000 123_456_789n 1_234.123_45 + * ``` + * + * `util.inspect()` is a synchronous method intended for debugging. Its maximum + * output length is approximately 128 MiB. Inputs that result in longer output will + * be truncated. + * @since v0.3.0 + * @param object Any JavaScript primitive or `Object`. + * @return The representation of `object`. + */ + export function inspect(object: any, showHidden?: boolean, depth?: number | null, color?: boolean): string; + export function inspect(object: any, options?: InspectOptions): string; + export namespace inspect { + let colors: NodeJS.Dict<[number, number]>; + let styles: { + [K in Style]: string; + }; + let defaultOptions: InspectOptions; + /** + * Allows changing inspect settings from the repl. + */ + let replDefaults: InspectOptions; + /** + * That can be used to declare custom inspect functions. + */ + const custom: unique symbol; + } + /** + * Alias for [`Array.isArray()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray). + * + * Returns `true` if the given `object` is an `Array`. Otherwise, returns `false`. + * + * ```js + * const util = require('node:util'); + * + * util.isArray([]); + * // Returns: true + * util.isArray(new Array()); + * // Returns: true + * util.isArray({}); + * // Returns: false + * ``` + * @since v0.6.0 + * @deprecated Since v4.0.0 - Use `isArray` instead. + */ + export function isArray(object: unknown): object is unknown[]; + /** + * Returns `true` if the given `object` is a `RegExp`. Otherwise, returns `false`. + * + * ```js + * const util = require('node:util'); + * + * util.isRegExp(/some regexp/); + * // Returns: true + * util.isRegExp(new RegExp('another regexp')); + * // Returns: true + * util.isRegExp({}); + * // Returns: false + * ``` + * @since v0.6.0 + * @deprecated Since v4.0.0 - Deprecated + */ + export function isRegExp(object: unknown): object is RegExp; + /** + * Returns `true` if the given `object` is a `Date`. Otherwise, returns `false`. + * + * ```js + * const util = require('node:util'); + * + * util.isDate(new Date()); + * // Returns: true + * util.isDate(Date()); + * // false (without 'new' returns a String) + * util.isDate({}); + * // Returns: false + * ``` + * @since v0.6.0 + * @deprecated Since v4.0.0 - Use {@link types.isDate} instead. + */ + export function isDate(object: unknown): object is Date; + /** + * Returns `true` if the given `object` is an `Error`. Otherwise, returns`false`. + * + * ```js + * const util = require('node:util'); + * + * util.isError(new Error()); + * // Returns: true + * util.isError(new TypeError()); + * // Returns: true + * util.isError({ name: 'Error', message: 'an error occurred' }); + * // Returns: false + * ``` + * + * This method relies on `Object.prototype.toString()` behavior. It is + * possible to obtain an incorrect result when the `object` argument manipulates`@@toStringTag`. + * + * ```js + * const util = require('node:util'); + * const obj = { name: 'Error', message: 'an error occurred' }; + * + * util.isError(obj); + * // Returns: false + * obj[Symbol.toStringTag] = 'Error'; + * util.isError(obj); + * // Returns: true + * ``` + * @since v0.6.0 + * @deprecated Since v4.0.0 - Use {@link types.isNativeError} instead. + */ + export function isError(object: unknown): object is Error; + /** + * Usage of `util.inherits()` is discouraged. Please use the ES6 `class` and`extends` keywords to get language level inheritance support. Also note + * that the two styles are [semantically incompatible](https://github.com/nodejs/node/issues/4179). + * + * Inherit the prototype methods from one [constructor](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/constructor) into another. The + * prototype of `constructor` will be set to a new object created from`superConstructor`. + * + * This mainly adds some input validation on top of`Object.setPrototypeOf(constructor.prototype, superConstructor.prototype)`. + * As an additional convenience, `superConstructor` will be accessible + * through the `constructor.super_` property. + * + * ```js + * const util = require('node:util'); + * const EventEmitter = require('node:events'); + * + * function MyStream() { + * EventEmitter.call(this); + * } + * + * util.inherits(MyStream, EventEmitter); + * + * MyStream.prototype.write = function(data) { + * this.emit('data', data); + * }; + * + * const stream = new MyStream(); + * + * console.log(stream instanceof EventEmitter); // true + * console.log(MyStream.super_ === EventEmitter); // true + * + * stream.on('data', (data) => { + * console.log(`Received data: "${data}"`); + * }); + * stream.write('It works!'); // Received data: "It works!" + * ``` + * + * ES6 example using `class` and `extends`: + * + * ```js + * const EventEmitter = require('node:events'); + * + * class MyStream extends EventEmitter { + * write(data) { + * this.emit('data', data); + * } + * } + * + * const stream = new MyStream(); + * + * stream.on('data', (data) => { + * console.log(`Received data: "${data}"`); + * }); + * stream.write('With ES6'); + * ``` + * @since v0.3.0 + * @legacy Use ES2015 class syntax and `extends` keyword instead. + */ + export function inherits(constructor: unknown, superConstructor: unknown): void; + export type DebugLoggerFunction = (msg: string, ...param: unknown[]) => void; + export interface DebugLogger extends DebugLoggerFunction { + enabled: boolean; + } + /** + * The `util.debuglog()` method is used to create a function that conditionally + * writes debug messages to `stderr` based on the existence of the `NODE_DEBUG`environment variable. If the `section` name appears within the value of that + * environment variable, then the returned function operates similar to `console.error()`. If not, then the returned function is a no-op. + * + * ```js + * const util = require('node:util'); + * const debuglog = util.debuglog('foo'); + * + * debuglog('hello from foo [%d]', 123); + * ``` + * + * If this program is run with `NODE_DEBUG=foo` in the environment, then + * it will output something like: + * + * ```console + * FOO 3245: hello from foo [123] + * ``` + * + * where `3245` is the process id. If it is not run with that + * environment variable set, then it will not print anything. + * + * The `section` supports wildcard also: + * + * ```js + * const util = require('node:util'); + * const debuglog = util.debuglog('foo-bar'); + * + * debuglog('hi there, it\'s foo-bar [%d]', 2333); + * ``` + * + * if it is run with `NODE_DEBUG=foo*` in the environment, then it will output + * something like: + * + * ```console + * FOO-BAR 3257: hi there, it's foo-bar [2333] + * ``` + * + * Multiple comma-separated `section` names may be specified in the `NODE_DEBUG`environment variable: `NODE_DEBUG=fs,net,tls`. + * + * The optional `callback` argument can be used to replace the logging function + * with a different function that doesn't have any initialization or + * unnecessary wrapping. + * + * ```js + * const util = require('node:util'); + * let debuglog = util.debuglog('internals', (debug) => { + * // Replace with a logging function that optimizes out + * // testing if the section is enabled + * debuglog = debug; + * }); + * ``` + * @since v0.11.3 + * @param section A string identifying the portion of the application for which the `debuglog` function is being created. + * @param callback A callback invoked the first time the logging function is called with a function argument that is a more optimized logging function. + * @return The logging function + */ + export function debuglog(section: string, callback?: (fn: DebugLoggerFunction) => void): DebugLogger; + export const debug: typeof debuglog; + /** + * Returns `true` if the given `object` is a `Boolean`. Otherwise, returns `false`. + * + * ```js + * const util = require('node:util'); + * + * util.isBoolean(1); + * // Returns: false + * util.isBoolean(0); + * // Returns: false + * util.isBoolean(false); + * // Returns: true + * ``` + * @since v0.11.5 + * @deprecated Since v4.0.0 - Use `typeof value === 'boolean'` instead. + */ + export function isBoolean(object: unknown): object is boolean; + /** + * Returns `true` if the given `object` is a `Buffer`. Otherwise, returns `false`. + * + * ```js + * const util = require('node:util'); + * + * util.isBuffer({ length: 0 }); + * // Returns: false + * util.isBuffer([]); + * // Returns: false + * util.isBuffer(Buffer.from('hello world')); + * // Returns: true + * ``` + * @since v0.11.5 + * @deprecated Since v4.0.0 - Use `isBuffer` instead. + */ + export function isBuffer(object: unknown): object is Buffer; + /** + * Returns `true` if the given `object` is a `Function`. Otherwise, returns`false`. + * + * ```js + * const util = require('node:util'); + * + * function Foo() {} + * const Bar = () => {}; + * + * util.isFunction({}); + * // Returns: false + * util.isFunction(Foo); + * // Returns: true + * util.isFunction(Bar); + * // Returns: true + * ``` + * @since v0.11.5 + * @deprecated Since v4.0.0 - Use `typeof value === 'function'` instead. + */ + export function isFunction(object: unknown): boolean; + /** + * Returns `true` if the given `object` is strictly `null`. Otherwise, returns`false`. + * + * ```js + * const util = require('node:util'); + * + * util.isNull(0); + * // Returns: false + * util.isNull(undefined); + * // Returns: false + * util.isNull(null); + * // Returns: true + * ``` + * @since v0.11.5 + * @deprecated Since v4.0.0 - Use `value === null` instead. + */ + export function isNull(object: unknown): object is null; + /** + * Returns `true` if the given `object` is `null` or `undefined`. Otherwise, + * returns `false`. + * + * ```js + * const util = require('node:util'); + * + * util.isNullOrUndefined(0); + * // Returns: false + * util.isNullOrUndefined(undefined); + * // Returns: true + * util.isNullOrUndefined(null); + * // Returns: true + * ``` + * @since v0.11.5 + * @deprecated Since v4.0.0 - Use `value === undefined || value === null` instead. + */ + export function isNullOrUndefined(object: unknown): object is null | undefined; + /** + * Returns `true` if the given `object` is a `Number`. Otherwise, returns `false`. + * + * ```js + * const util = require('node:util'); + * + * util.isNumber(false); + * // Returns: false + * util.isNumber(Infinity); + * // Returns: true + * util.isNumber(0); + * // Returns: true + * util.isNumber(NaN); + * // Returns: true + * ``` + * @since v0.11.5 + * @deprecated Since v4.0.0 - Use `typeof value === 'number'` instead. + */ + export function isNumber(object: unknown): object is number; + /** + * Returns `true` if the given `object` is strictly an `Object`**and** not a`Function` (even though functions are objects in JavaScript). + * Otherwise, returns `false`. + * + * ```js + * const util = require('node:util'); + * + * util.isObject(5); + * // Returns: false + * util.isObject(null); + * // Returns: false + * util.isObject({}); + * // Returns: true + * util.isObject(() => {}); + * // Returns: false + * ``` + * @since v0.11.5 + * @deprecated Since v4.0.0 - Use `value !== null && typeof value === 'object'` instead. + */ + export function isObject(object: unknown): boolean; + /** + * Returns `true` if the given `object` is a primitive type. Otherwise, returns`false`. + * + * ```js + * const util = require('node:util'); + * + * util.isPrimitive(5); + * // Returns: true + * util.isPrimitive('foo'); + * // Returns: true + * util.isPrimitive(false); + * // Returns: true + * util.isPrimitive(null); + * // Returns: true + * util.isPrimitive(undefined); + * // Returns: true + * util.isPrimitive({}); + * // Returns: false + * util.isPrimitive(() => {}); + * // Returns: false + * util.isPrimitive(/^$/); + * // Returns: false + * util.isPrimitive(new Date()); + * // Returns: false + * ``` + * @since v0.11.5 + * @deprecated Since v4.0.0 - Use `(typeof value !== 'object' && typeof value !== 'function') || value === null` instead. + */ + export function isPrimitive(object: unknown): boolean; + /** + * Returns `true` if the given `object` is a `string`. Otherwise, returns `false`. + * + * ```js + * const util = require('node:util'); + * + * util.isString(''); + * // Returns: true + * util.isString('foo'); + * // Returns: true + * util.isString(String('foo')); + * // Returns: true + * util.isString(5); + * // Returns: false + * ``` + * @since v0.11.5 + * @deprecated Since v4.0.0 - Use `typeof value === 'string'` instead. + */ + export function isString(object: unknown): object is string; + /** + * Returns `true` if the given `object` is a `Symbol`. Otherwise, returns `false`. + * + * ```js + * const util = require('node:util'); + * + * util.isSymbol(5); + * // Returns: false + * util.isSymbol('foo'); + * // Returns: false + * util.isSymbol(Symbol('foo')); + * // Returns: true + * ``` + * @since v0.11.5 + * @deprecated Since v4.0.0 - Use `typeof value === 'symbol'` instead. + */ + export function isSymbol(object: unknown): object is symbol; + /** + * Returns `true` if the given `object` is `undefined`. Otherwise, returns `false`. + * + * ```js + * const util = require('node:util'); + * + * const foo = undefined; + * util.isUndefined(5); + * // Returns: false + * util.isUndefined(foo); + * // Returns: true + * util.isUndefined(null); + * // Returns: false + * ``` + * @since v0.11.5 + * @deprecated Since v4.0.0 - Use `value === undefined` instead. + */ + export function isUndefined(object: unknown): object is undefined; + /** + * The `util.deprecate()` method wraps `fn` (which may be a function or class) in + * such a way that it is marked as deprecated. + * + * ```js + * const util = require('node:util'); + * + * exports.obsoleteFunction = util.deprecate(() => { + * // Do something here. + * }, 'obsoleteFunction() is deprecated. Use newShinyFunction() instead.'); + * ``` + * + * When called, `util.deprecate()` will return a function that will emit a`DeprecationWarning` using the `'warning'` event. The warning will + * be emitted and printed to `stderr` the first time the returned function is + * called. After the warning is emitted, the wrapped function is called without + * emitting a warning. + * + * If the same optional `code` is supplied in multiple calls to `util.deprecate()`, + * the warning will be emitted only once for that `code`. + * + * ```js + * const util = require('node:util'); + * + * const fn1 = util.deprecate(someFunction, someMessage, 'DEP0001'); + * const fn2 = util.deprecate(someOtherFunction, someOtherMessage, 'DEP0001'); + * fn1(); // Emits a deprecation warning with code DEP0001 + * fn2(); // Does not emit a deprecation warning because it has the same code + * ``` + * + * If either the `--no-deprecation` or `--no-warnings` command-line flags are + * used, or if the `process.noDeprecation` property is set to `true`_prior_ to + * the first deprecation warning, the `util.deprecate()` method does nothing. + * + * If the `--trace-deprecation` or `--trace-warnings` command-line flags are set, + * or the `process.traceDeprecation` property is set to `true`, a warning and a + * stack trace are printed to `stderr` the first time the deprecated function is + * called. + * + * If the `--throw-deprecation` command-line flag is set, or the`process.throwDeprecation` property is set to `true`, then an exception will be + * thrown when the deprecated function is called. + * + * The `--throw-deprecation` command-line flag and `process.throwDeprecation`property take precedence over `--trace-deprecation` and`process.traceDeprecation`. + * @since v0.8.0 + * @param fn The function that is being deprecated. + * @param msg A warning message to display when the deprecated function is invoked. + * @param code A deprecation code. See the `list of deprecated APIs` for a list of codes. + * @return The deprecated function wrapped to emit a warning. + */ + export function deprecate(fn: T, msg: string, code?: string): T; + /** + * Returns `true` if there is deep strict equality between `val1` and `val2`. + * Otherwise, returns `false`. + * + * See `assert.deepStrictEqual()` for more information about deep strict + * equality. + * @since v9.0.0 + */ + export function isDeepStrictEqual(val1: unknown, val2: unknown): boolean; + /** + * Returns `str` with any ANSI escape codes removed. + * + * ```js + * console.log(util.stripVTControlCharacters('\u001B[4mvalue\u001B[0m')); + * // Prints "value" + * ``` + * @since v16.11.0 + */ + export function stripVTControlCharacters(str: string): string; + /** + * Takes an `async` function (or a function that returns a `Promise`) and returns a + * function following the error-first callback style, i.e. taking + * an `(err, value) => ...` callback as the last argument. In the callback, the + * first argument will be the rejection reason (or `null` if the `Promise`resolved), and the second argument will be the resolved value. + * + * ```js + * const util = require('node:util'); + * + * async function fn() { + * return 'hello world'; + * } + * const callbackFunction = util.callbackify(fn); + * + * callbackFunction((err, ret) => { + * if (err) throw err; + * console.log(ret); + * }); + * ``` + * + * Will print: + * + * ```text + * hello world + * ``` + * + * The callback is executed asynchronously, and will have a limited stack trace. + * If the callback throws, the process will emit an `'uncaughtException'` event, and if not handled will exit. + * + * Since `null` has a special meaning as the first argument to a callback, if a + * wrapped function rejects a `Promise` with a falsy value as a reason, the value + * is wrapped in an `Error` with the original value stored in a field named`reason`. + * + * ```js + * function fn() { + * return Promise.reject(null); + * } + * const callbackFunction = util.callbackify(fn); + * + * callbackFunction((err, ret) => { + * // When the Promise was rejected with `null` it is wrapped with an Error and + * // the original value is stored in `reason`. + * err && Object.hasOwn(err, 'reason') && err.reason === null; // true + * }); + * ``` + * @since v8.2.0 + * @param fn An `async` function + * @return a callback style function + */ + export function callbackify(fn: () => Promise): (callback: (err: NodeJS.ErrnoException) => void) => void; + export function callbackify( + fn: () => Promise, + ): (callback: (err: NodeJS.ErrnoException, result: TResult) => void) => void; + export function callbackify( + fn: (arg1: T1) => Promise, + ): (arg1: T1, callback: (err: NodeJS.ErrnoException) => void) => void; + export function callbackify( + fn: (arg1: T1) => Promise, + ): (arg1: T1, callback: (err: NodeJS.ErrnoException, result: TResult) => void) => void; + export function callbackify( + fn: (arg1: T1, arg2: T2) => Promise, + ): (arg1: T1, arg2: T2, callback: (err: NodeJS.ErrnoException) => void) => void; + export function callbackify( + fn: (arg1: T1, arg2: T2) => Promise, + ): (arg1: T1, arg2: T2, callback: (err: NodeJS.ErrnoException | null, result: TResult) => void) => void; + export function callbackify( + fn: (arg1: T1, arg2: T2, arg3: T3) => Promise, + ): (arg1: T1, arg2: T2, arg3: T3, callback: (err: NodeJS.ErrnoException) => void) => void; + export function callbackify( + fn: (arg1: T1, arg2: T2, arg3: T3) => Promise, + ): (arg1: T1, arg2: T2, arg3: T3, callback: (err: NodeJS.ErrnoException | null, result: TResult) => void) => void; + export function callbackify( + fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => Promise, + ): (arg1: T1, arg2: T2, arg3: T3, arg4: T4, callback: (err: NodeJS.ErrnoException) => void) => void; + export function callbackify( + fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => Promise, + ): ( + arg1: T1, + arg2: T2, + arg3: T3, + arg4: T4, + callback: (err: NodeJS.ErrnoException | null, result: TResult) => void, + ) => void; + export function callbackify( + fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5) => Promise, + ): (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, callback: (err: NodeJS.ErrnoException) => void) => void; + export function callbackify( + fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5) => Promise, + ): ( + arg1: T1, + arg2: T2, + arg3: T3, + arg4: T4, + arg5: T5, + callback: (err: NodeJS.ErrnoException | null, result: TResult) => void, + ) => void; + export function callbackify( + fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6) => Promise, + ): ( + arg1: T1, + arg2: T2, + arg3: T3, + arg4: T4, + arg5: T5, + arg6: T6, + callback: (err: NodeJS.ErrnoException) => void, + ) => void; + export function callbackify( + fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6) => Promise, + ): ( + arg1: T1, + arg2: T2, + arg3: T3, + arg4: T4, + arg5: T5, + arg6: T6, + callback: (err: NodeJS.ErrnoException | null, result: TResult) => void, + ) => void; + export interface CustomPromisifyLegacy extends Function { + __promisify__: TCustom; + } + export interface CustomPromisifySymbol extends Function { + [promisify.custom]: TCustom; + } + export type CustomPromisify = + | CustomPromisifySymbol + | CustomPromisifyLegacy; + /** + * Takes a function following the common error-first callback style, i.e. taking + * an `(err, value) => ...` callback as the last argument, and returns a version + * that returns promises. + * + * ```js + * const util = require('node:util'); + * const fs = require('node:fs'); + * + * const stat = util.promisify(fs.stat); + * stat('.').then((stats) => { + * // Do something with `stats` + * }).catch((error) => { + * // Handle the error. + * }); + * ``` + * + * Or, equivalently using `async function`s: + * + * ```js + * const util = require('node:util'); + * const fs = require('node:fs'); + * + * const stat = util.promisify(fs.stat); + * + * async function callStat() { + * const stats = await stat('.'); + * console.log(`This directory is owned by ${stats.uid}`); + * } + * ``` + * + * If there is an `original[util.promisify.custom]` property present, `promisify`will return its value, see `Custom promisified functions`. + * + * `promisify()` assumes that `original` is a function taking a callback as its + * final argument in all cases. If `original` is not a function, `promisify()`will throw an error. If `original` is a function but its last argument is not + * an error-first callback, it will still be passed an error-first + * callback as its last argument. + * + * Using `promisify()` on class methods or other methods that use `this` may not + * work as expected unless handled specially: + * + * ```js + * const util = require('node:util'); + * + * class Foo { + * constructor() { + * this.a = 42; + * } + * + * bar(callback) { + * callback(null, this.a); + * } + * } + * + * const foo = new Foo(); + * + * const naiveBar = util.promisify(foo.bar); + * // TypeError: Cannot read property 'a' of undefined + * // naiveBar().then(a => console.log(a)); + * + * naiveBar.call(foo).then((a) => console.log(a)); // '42' + * + * const bindBar = naiveBar.bind(foo); + * bindBar().then((a) => console.log(a)); // '42' + * ``` + * @since v8.0.0 + */ + export function promisify(fn: CustomPromisify): TCustom; + export function promisify( + fn: (callback: (err: any, result: TResult) => void) => void, + ): () => Promise; + export function promisify(fn: (callback: (err?: any) => void) => void): () => Promise; + export function promisify( + fn: (arg1: T1, callback: (err: any, result: TResult) => void) => void, + ): (arg1: T1) => Promise; + export function promisify(fn: (arg1: T1, callback: (err?: any) => void) => void): (arg1: T1) => Promise; + export function promisify( + fn: (arg1: T1, arg2: T2, callback: (err: any, result: TResult) => void) => void, + ): (arg1: T1, arg2: T2) => Promise; + export function promisify( + fn: (arg1: T1, arg2: T2, callback: (err?: any) => void) => void, + ): (arg1: T1, arg2: T2) => Promise; + export function promisify( + fn: (arg1: T1, arg2: T2, arg3: T3, callback: (err: any, result: TResult) => void) => void, + ): (arg1: T1, arg2: T2, arg3: T3) => Promise; + export function promisify( + fn: (arg1: T1, arg2: T2, arg3: T3, callback: (err?: any) => void) => void, + ): (arg1: T1, arg2: T2, arg3: T3) => Promise; + export function promisify( + fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, callback: (err: any, result: TResult) => void) => void, + ): (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => Promise; + export function promisify( + fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, callback: (err?: any) => void) => void, + ): (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => Promise; + export function promisify( + fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, callback: (err: any, result: TResult) => void) => void, + ): (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5) => Promise; + export function promisify( + fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, callback: (err?: any) => void) => void, + ): (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5) => Promise; + export function promisify(fn: Function): Function; + export namespace promisify { + /** + * That can be used to declare custom promisified variants of functions. + */ + const custom: unique symbol; + } + /** + * An implementation of the [WHATWG Encoding Standard](https://encoding.spec.whatwg.org/) `TextDecoder` API. + * + * ```js + * const decoder = new TextDecoder(); + * const u8arr = new Uint8Array([72, 101, 108, 108, 111]); + * console.log(decoder.decode(u8arr)); // Hello + * ``` + * @since v8.3.0 + */ + export class TextDecoder { + /** + * The encoding supported by the `TextDecoder` instance. + */ + readonly encoding: string; + /** + * The value will be `true` if decoding errors result in a `TypeError` being + * thrown. + */ + readonly fatal: boolean; + /** + * The value will be `true` if the decoding result will include the byte order + * mark. + */ + readonly ignoreBOM: boolean; + constructor( + encoding?: string, + options?: { + fatal?: boolean | undefined; + ignoreBOM?: boolean | undefined; + }, + ); + /** + * Decodes the `input` and returns a string. If `options.stream` is `true`, any + * incomplete byte sequences occurring at the end of the `input` are buffered + * internally and emitted after the next call to `textDecoder.decode()`. + * + * If `textDecoder.fatal` is `true`, decoding errors that occur will result in a`TypeError` being thrown. + * @param input An `ArrayBuffer`, `DataView`, or `TypedArray` instance containing the encoded data. + */ + decode( + input?: NodeJS.ArrayBufferView | ArrayBuffer | null, + options?: { + stream?: boolean | undefined; + }, + ): string; + } + export interface EncodeIntoResult { + /** + * The read Unicode code units of input. + */ + read: number; + /** + * The written UTF-8 bytes of output. + */ + written: number; + } + export { types }; + + //// TextEncoder/Decoder + /** + * An implementation of the [WHATWG Encoding Standard](https://encoding.spec.whatwg.org/) `TextEncoder` API. All + * instances of `TextEncoder` only support UTF-8 encoding. + * + * ```js + * const encoder = new TextEncoder(); + * const uint8array = encoder.encode('this is some data'); + * ``` + * + * The `TextEncoder` class is also available on the global object. + * @since v8.3.0 + */ + export class TextEncoder { + /** + * The encoding supported by the `TextEncoder` instance. Always set to `'utf-8'`. + */ + readonly encoding: string; + /** + * UTF-8 encodes the `input` string and returns a `Uint8Array` containing the + * encoded bytes. + * @param [input='an empty string'] The text to encode. + */ + encode(input?: string): Uint8Array; + /** + * UTF-8 encodes the `src` string to the `dest` Uint8Array and returns an object + * containing the read Unicode code units and written UTF-8 bytes. + * + * ```js + * const encoder = new TextEncoder(); + * const src = 'this is some data'; + * const dest = new Uint8Array(10); + * const { read, written } = encoder.encodeInto(src, dest); + * ``` + * @param src The text to encode. + * @param dest The array to hold the encode result. + */ + encodeInto(src: string, dest: Uint8Array): EncodeIntoResult; + } + import { TextDecoder as _TextDecoder, TextEncoder as _TextEncoder } from "util"; + global { + /** + * `TextDecoder` class is a global reference for `require('util').TextDecoder` + * https://nodejs.org/api/globals.html#textdecoder + * @since v11.0.0 + */ + var TextDecoder: typeof globalThis extends { + onmessage: any; + TextDecoder: infer TextDecoder; + } ? TextDecoder + : typeof _TextDecoder; + /** + * `TextEncoder` class is a global reference for `require('util').TextEncoder` + * https://nodejs.org/api/globals.html#textencoder + * @since v11.0.0 + */ + var TextEncoder: typeof globalThis extends { + onmessage: any; + TextEncoder: infer TextEncoder; + } ? TextEncoder + : typeof _TextEncoder; + } + + //// parseArgs + /** + * Provides a higher level API for command-line argument parsing than interacting + * with `process.argv` directly. Takes a specification for the expected arguments + * and returns a structured object with the parsed options and positionals. + * + * ```js + * import { parseArgs } from 'node:util'; + * const args = ['-f', '--bar', 'b']; + * const options = { + * foo: { + * type: 'boolean', + * short: 'f', + * }, + * bar: { + * type: 'string', + * }, + * }; + * const { + * values, + * positionals, + * } = parseArgs({ args, options }); + * console.log(values, positionals); + * // Prints: [Object: null prototype] { foo: true, bar: 'b' } [] + * ``` + * @since v18.3.0, v16.17.0 + * @param config Used to provide arguments for parsing and to configure the parser. `config` supports the following properties: + * @return The parsed command line arguments: + */ + export function parseArgs(config?: T): ParsedResults; + interface ParseArgsOptionConfig { + /** + * Type of argument. + */ + type: "string" | "boolean"; + /** + * Whether this option can be provided multiple times. + * If `true`, all values will be collected in an array. + * If `false`, values for the option are last-wins. + * @default false. + */ + multiple?: boolean | undefined; + /** + * A single character alias for the option. + */ + short?: string | undefined; + /** + * The default option value when it is not set by args. + * It must be of the same type as the the `type` property. + * When `multiple` is `true`, it must be an array. + * @since v18.11.0 + */ + default?: string | boolean | string[] | boolean[] | undefined; + } + interface ParseArgsOptionsConfig { + [longOption: string]: ParseArgsOptionConfig; + } + export interface ParseArgsConfig { + /** + * Array of argument strings. + */ + args?: string[] | undefined; + /** + * Used to describe arguments known to the parser. + */ + options?: ParseArgsOptionsConfig | undefined; + /** + * Should an error be thrown when unknown arguments are encountered, + * or when arguments are passed that do not match the `type` configured in `options`. + * @default true + */ + strict?: boolean | undefined; + /** + * Whether this command accepts positional arguments. + */ + allowPositionals?: boolean | undefined; + /** + * Return the parsed tokens. This is useful for extending the built-in behavior, + * from adding additional checks through to reprocessing the tokens in different ways. + * @default false + */ + tokens?: boolean | undefined; + } + /* + IfDefaultsTrue and IfDefaultsFalse are helpers to handle default values for missing boolean properties. + TypeScript does not have exact types for objects: https://github.com/microsoft/TypeScript/issues/12936 + This means it is impossible to distinguish between "field X is definitely not present" and "field X may or may not be present". + But we expect users to generally provide their config inline or `as const`, which means TS will always know whether a given field is present. + So this helper treats "not definitely present" (i.e., not `extends boolean`) as being "definitely not present", i.e. it should have its default value. + This is technically incorrect but is a much nicer UX for the common case. + The IfDefaultsTrue version is for things which default to true; the IfDefaultsFalse version is for things which default to false. + */ + type IfDefaultsTrue = T extends true ? IfTrue + : T extends false ? IfFalse + : IfTrue; + + // we put the `extends false` condition first here because `undefined` compares like `any` when `strictNullChecks: false` + type IfDefaultsFalse = T extends false ? IfFalse + : T extends true ? IfTrue + : IfFalse; + + type ExtractOptionValue = IfDefaultsTrue< + T["strict"], + O["type"] extends "string" ? string : O["type"] extends "boolean" ? boolean : string | boolean, + string | boolean + >; + + type ParsedValues = + & IfDefaultsTrue + & (T["options"] extends ParseArgsOptionsConfig ? { + -readonly [LongOption in keyof T["options"]]: IfDefaultsFalse< + T["options"][LongOption]["multiple"], + undefined | Array>, + undefined | ExtractOptionValue + >; + } + : {}); + + type ParsedPositionals = IfDefaultsTrue< + T["strict"], + IfDefaultsFalse, + IfDefaultsTrue + >; + + type PreciseTokenForOptions< + K extends string, + O extends ParseArgsOptionConfig, + > = O["type"] extends "string" ? { + kind: "option"; + index: number; + name: K; + rawName: string; + value: string; + inlineValue: boolean; + } + : O["type"] extends "boolean" ? { + kind: "option"; + index: number; + name: K; + rawName: string; + value: undefined; + inlineValue: undefined; + } + : OptionToken & { name: K }; + + type TokenForOptions< + T extends ParseArgsConfig, + K extends keyof T["options"] = keyof T["options"], + > = K extends unknown + ? T["options"] extends ParseArgsOptionsConfig ? PreciseTokenForOptions + : OptionToken + : never; + + type ParsedOptionToken = IfDefaultsTrue, OptionToken>; + + type ParsedPositionalToken = IfDefaultsTrue< + T["strict"], + IfDefaultsFalse, + IfDefaultsTrue + >; + + type ParsedTokens = Array< + ParsedOptionToken | ParsedPositionalToken | { kind: "option-terminator"; index: number } + >; + + type PreciseParsedResults = IfDefaultsFalse< + T["tokens"], + { + values: ParsedValues; + positionals: ParsedPositionals; + tokens: ParsedTokens; + }, + { + values: ParsedValues; + positionals: ParsedPositionals; + } + >; + + type OptionToken = + | { kind: "option"; index: number; name: string; rawName: string; value: string; inlineValue: boolean } + | { + kind: "option"; + index: number; + name: string; + rawName: string; + value: undefined; + inlineValue: undefined; + }; + + type Token = + | OptionToken + | { kind: "positional"; index: number; value: string } + | { kind: "option-terminator"; index: number }; + + // If ParseArgsConfig extends T, then the user passed config constructed elsewhere. + // So we can't rely on the `"not definitely present" implies "definitely not present"` assumption mentioned above. + type ParsedResults = ParseArgsConfig extends T ? { + values: { + [longOption: string]: undefined | string | boolean | Array; + }; + positionals: string[]; + tokens?: Token[]; + } + : PreciseParsedResults; + + /** + * An implementation of [the MIMEType class](https://bmeck.github.io/node-proposal-mime-api/). + * + * In accordance with browser conventions, all properties of `MIMEType` objects + * are implemented as getters and setters on the class prototype, rather than as + * data properties on the object itself. + * + * A MIME string is a structured string containing multiple meaningful + * components. When parsed, a `MIMEType` object is returned containing + * properties for each of these components. + * @since v19.1.0, v18.13.0 + * @experimental + */ + export class MIMEType { + /** + * Creates a new MIMEType object by parsing the input. + * + * A `TypeError` will be thrown if the `input` is not a valid MIME. + * Note that an effort will be made to coerce the given values into strings. + * @param input The input MIME to parse. + */ + constructor(input: string | { toString: () => string }); + + /** + * Gets and sets the type portion of the MIME. + * + * ```js + * import { MIMEType } from 'node:util'; + * + * const myMIME = new MIMEType('text/javascript'); + * console.log(myMIME.type); + * // Prints: text + * myMIME.type = 'application'; + * console.log(myMIME.type); + * // Prints: application + * console.log(String(myMIME)); + * // Prints: application/javascript + * ``` + */ + type: string; + /** + * Gets and sets the subtype portion of the MIME. + * + * ```js + * import { MIMEType } from 'node:util'; + * + * const myMIME = new MIMEType('text/ecmascript'); + * console.log(myMIME.subtype); + * // Prints: ecmascript + * myMIME.subtype = 'javascript'; + * console.log(myMIME.subtype); + * // Prints: javascript + * console.log(String(myMIME)); + * // Prints: text/javascript + * ``` + */ + subtype: string; + /** + * Gets the essence of the MIME. This property is read only. + * Use `mime.type` or `mime.subtype` to alter the MIME. + * + * ```js + * import { MIMEType } from 'node:util'; + * + * const myMIME = new MIMEType('text/javascript;key=value'); + * console.log(myMIME.essence); + * // Prints: text/javascript + * myMIME.type = 'application'; + * console.log(myMIME.essence); + * // Prints: application/javascript + * console.log(String(myMIME)); + * // Prints: application/javascript;key=value + * ``` + */ + readonly essence: string; + /** + * Gets the `MIMEParams` object representing the + * parameters of the MIME. This property is read-only. See `MIMEParams` documentation for details. + */ + readonly params: MIMEParams; + /** + * The `toString()` method on the `MIMEType` object returns the serialized MIME. + * + * Because of the need for standard compliance, this method does not allow users + * to customize the serialization process of the MIME. + */ + toString(): string; + } + /** + * The `MIMEParams` API provides read and write access to the parameters of a`MIMEType`. + * @since v19.1.0, v18.13.0 + */ + export class MIMEParams { + /** + * Remove all name-value pairs whose name is `name`. + */ + delete(name: string): void; + /** + * Returns an iterator over each of the name-value pairs in the parameters. + * Each item of the iterator is a JavaScript `Array`. The first item of the array + * is the `name`, the second item of the array is the `value`. + */ + entries(): IterableIterator<[string, string]>; + /** + * Returns the value of the first name-value pair whose name is `name`. If there + * are no such pairs, `null` is returned. + * @return or `null` if there is no name-value pair with the given `name`. + */ + get(name: string): string | null; + /** + * Returns `true` if there is at least one name-value pair whose name is `name`. + */ + has(name: string): boolean; + /** + * Returns an iterator over the names of each name-value pair. + * + * ```js + * import { MIMEType } from 'node:util'; + * + * const { params } = new MIMEType('text/plain;foo=0;bar=1'); + * for (const name of params.keys()) { + * console.log(name); + * } + * // Prints: + * // foo + * // bar + * ``` + */ + keys(): IterableIterator; + /** + * Sets the value in the `MIMEParams` object associated with `name` to`value`. If there are any pre-existing name-value pairs whose names are `name`, + * set the first such pair's value to `value`. + * + * ```js + * import { MIMEType } from 'node:util'; + * + * const { params } = new MIMEType('text/plain;foo=0;bar=1'); + * params.set('foo', 'def'); + * params.set('baz', 'xyz'); + * console.log(params.toString()); + * // Prints: foo=def&bar=1&baz=xyz + * ``` + */ + set(name: string, value: string): void; + /** + * Returns an iterator over the values of each name-value pair. + */ + values(): IterableIterator; + /** + * Returns an iterator over each of the name-value pairs in the parameters. + */ + [Symbol.iterator]: typeof MIMEParams.prototype.entries; + } +} +declare module "util/types" { + export * from "util/types"; +} +declare module "util/types" { + import { KeyObject, webcrypto } from "node:crypto"; + /** + * Returns `true` if the value is a built-in [`ArrayBuffer`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer) or + * [`SharedArrayBuffer`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer) instance. + * + * See also `util.types.isArrayBuffer()` and `util.types.isSharedArrayBuffer()`. + * + * ```js + * util.types.isAnyArrayBuffer(new ArrayBuffer()); // Returns true + * util.types.isAnyArrayBuffer(new SharedArrayBuffer()); // Returns true + * ``` + * @since v10.0.0 + */ + function isAnyArrayBuffer(object: unknown): object is ArrayBufferLike; + /** + * Returns `true` if the value is an `arguments` object. + * + * ```js + * function foo() { + * util.types.isArgumentsObject(arguments); // Returns true + * } + * ``` + * @since v10.0.0 + */ + function isArgumentsObject(object: unknown): object is IArguments; + /** + * Returns `true` if the value is a built-in [`ArrayBuffer`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer) instance. + * This does _not_ include [`SharedArrayBuffer`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer) instances. Usually, it is + * desirable to test for both; See `util.types.isAnyArrayBuffer()` for that. + * + * ```js + * util.types.isArrayBuffer(new ArrayBuffer()); // Returns true + * util.types.isArrayBuffer(new SharedArrayBuffer()); // Returns false + * ``` + * @since v10.0.0 + */ + function isArrayBuffer(object: unknown): object is ArrayBuffer; + /** + * Returns `true` if the value is an instance of one of the [`ArrayBuffer`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer) views, such as typed + * array objects or [`DataView`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView). Equivalent to + * [`ArrayBuffer.isView()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer/isView). + * + * ```js + * util.types.isArrayBufferView(new Int8Array()); // true + * util.types.isArrayBufferView(Buffer.from('hello world')); // true + * util.types.isArrayBufferView(new DataView(new ArrayBuffer(16))); // true + * util.types.isArrayBufferView(new ArrayBuffer()); // false + * ``` + * @since v10.0.0 + */ + function isArrayBufferView(object: unknown): object is NodeJS.ArrayBufferView; + /** + * Returns `true` if the value is an [async function](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function). + * This only reports back what the JavaScript engine is seeing; + * in particular, the return value may not match the original source code if + * a transpilation tool was used. + * + * ```js + * util.types.isAsyncFunction(function foo() {}); // Returns false + * util.types.isAsyncFunction(async function foo() {}); // Returns true + * ``` + * @since v10.0.0 + */ + function isAsyncFunction(object: unknown): boolean; + /** + * Returns `true` if the value is a `BigInt64Array` instance. + * + * ```js + * util.types.isBigInt64Array(new BigInt64Array()); // Returns true + * util.types.isBigInt64Array(new BigUint64Array()); // Returns false + * ``` + * @since v10.0.0 + */ + function isBigInt64Array(value: unknown): value is BigInt64Array; + /** + * Returns `true` if the value is a `BigUint64Array` instance. + * + * ```js + * util.types.isBigUint64Array(new BigInt64Array()); // Returns false + * util.types.isBigUint64Array(new BigUint64Array()); // Returns true + * ``` + * @since v10.0.0 + */ + function isBigUint64Array(value: unknown): value is BigUint64Array; + /** + * Returns `true` if the value is a boolean object, e.g. created + * by `new Boolean()`. + * + * ```js + * util.types.isBooleanObject(false); // Returns false + * util.types.isBooleanObject(true); // Returns false + * util.types.isBooleanObject(new Boolean(false)); // Returns true + * util.types.isBooleanObject(new Boolean(true)); // Returns true + * util.types.isBooleanObject(Boolean(false)); // Returns false + * util.types.isBooleanObject(Boolean(true)); // Returns false + * ``` + * @since v10.0.0 + */ + function isBooleanObject(object: unknown): object is Boolean; + /** + * Returns `true` if the value is any boxed primitive object, e.g. created + * by `new Boolean()`, `new String()` or `Object(Symbol())`. + * + * For example: + * + * ```js + * util.types.isBoxedPrimitive(false); // Returns false + * util.types.isBoxedPrimitive(new Boolean(false)); // Returns true + * util.types.isBoxedPrimitive(Symbol('foo')); // Returns false + * util.types.isBoxedPrimitive(Object(Symbol('foo'))); // Returns true + * util.types.isBoxedPrimitive(Object(BigInt(5))); // Returns true + * ``` + * @since v10.11.0 + */ + function isBoxedPrimitive(object: unknown): object is String | Number | BigInt | Boolean | Symbol; + /** + * Returns `true` if the value is a built-in [`DataView`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView) instance. + * + * ```js + * const ab = new ArrayBuffer(20); + * util.types.isDataView(new DataView(ab)); // Returns true + * util.types.isDataView(new Float64Array()); // Returns false + * ``` + * + * See also [`ArrayBuffer.isView()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer/isView). + * @since v10.0.0 + */ + function isDataView(object: unknown): object is DataView; + /** + * Returns `true` if the value is a built-in [`Date`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) instance. + * + * ```js + * util.types.isDate(new Date()); // Returns true + * ``` + * @since v10.0.0 + */ + function isDate(object: unknown): object is Date; + /** + * Returns `true` if the value is a native `External` value. + * + * A native `External` value is a special type of object that contains a + * raw C++ pointer (`void*`) for access from native code, and has no other + * properties. Such objects are created either by Node.js internals or native + * addons. In JavaScript, they are [frozen](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/freeze) objects with a`null` prototype. + * + * ```c + * #include + * #include + * napi_value result; + * static napi_value MyNapi(napi_env env, napi_callback_info info) { + * int* raw = (int*) malloc(1024); + * napi_status status = napi_create_external(env, (void*) raw, NULL, NULL, &result); + * if (status != napi_ok) { + * napi_throw_error(env, NULL, "napi_create_external failed"); + * return NULL; + * } + * return result; + * } + * ... + * DECLARE_NAPI_PROPERTY("myNapi", MyNapi) + * ... + * ``` + * + * ```js + * const native = require('napi_addon.node'); + * const data = native.myNapi(); + * util.types.isExternal(data); // returns true + * util.types.isExternal(0); // returns false + * util.types.isExternal(new String('foo')); // returns false + * ``` + * + * For further information on `napi_create_external`, refer to `napi_create_external()`. + * @since v10.0.0 + */ + function isExternal(object: unknown): boolean; + /** + * Returns `true` if the value is a built-in [`Float32Array`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Float32Array) instance. + * + * ```js + * util.types.isFloat32Array(new ArrayBuffer()); // Returns false + * util.types.isFloat32Array(new Float32Array()); // Returns true + * util.types.isFloat32Array(new Float64Array()); // Returns false + * ``` + * @since v10.0.0 + */ + function isFloat32Array(object: unknown): object is Float32Array; + /** + * Returns `true` if the value is a built-in [`Float64Array`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Float64Array) instance. + * + * ```js + * util.types.isFloat64Array(new ArrayBuffer()); // Returns false + * util.types.isFloat64Array(new Uint8Array()); // Returns false + * util.types.isFloat64Array(new Float64Array()); // Returns true + * ``` + * @since v10.0.0 + */ + function isFloat64Array(object: unknown): object is Float64Array; + /** + * Returns `true` if the value is a generator function. + * This only reports back what the JavaScript engine is seeing; + * in particular, the return value may not match the original source code if + * a transpilation tool was used. + * + * ```js + * util.types.isGeneratorFunction(function foo() {}); // Returns false + * util.types.isGeneratorFunction(function* foo() {}); // Returns true + * ``` + * @since v10.0.0 + */ + function isGeneratorFunction(object: unknown): object is GeneratorFunction; + /** + * Returns `true` if the value is a generator object as returned from a + * built-in generator function. + * This only reports back what the JavaScript engine is seeing; + * in particular, the return value may not match the original source code if + * a transpilation tool was used. + * + * ```js + * function* foo() {} + * const generator = foo(); + * util.types.isGeneratorObject(generator); // Returns true + * ``` + * @since v10.0.0 + */ + function isGeneratorObject(object: unknown): object is Generator; + /** + * Returns `true` if the value is a built-in [`Int8Array`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Int8Array) instance. + * + * ```js + * util.types.isInt8Array(new ArrayBuffer()); // Returns false + * util.types.isInt8Array(new Int8Array()); // Returns true + * util.types.isInt8Array(new Float64Array()); // Returns false + * ``` + * @since v10.0.0 + */ + function isInt8Array(object: unknown): object is Int8Array; + /** + * Returns `true` if the value is a built-in [`Int16Array`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Int16Array) instance. + * + * ```js + * util.types.isInt16Array(new ArrayBuffer()); // Returns false + * util.types.isInt16Array(new Int16Array()); // Returns true + * util.types.isInt16Array(new Float64Array()); // Returns false + * ``` + * @since v10.0.0 + */ + function isInt16Array(object: unknown): object is Int16Array; + /** + * Returns `true` if the value is a built-in [`Int32Array`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Int32Array) instance. + * + * ```js + * util.types.isInt32Array(new ArrayBuffer()); // Returns false + * util.types.isInt32Array(new Int32Array()); // Returns true + * util.types.isInt32Array(new Float64Array()); // Returns false + * ``` + * @since v10.0.0 + */ + function isInt32Array(object: unknown): object is Int32Array; + /** + * Returns `true` if the value is a built-in [`Map`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map) instance. + * + * ```js + * util.types.isMap(new Map()); // Returns true + * ``` + * @since v10.0.0 + */ + function isMap( + object: T | {}, + ): object is T extends ReadonlyMap ? (unknown extends T ? never : ReadonlyMap) + : Map; + /** + * Returns `true` if the value is an iterator returned for a built-in [`Map`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map) instance. + * + * ```js + * const map = new Map(); + * util.types.isMapIterator(map.keys()); // Returns true + * util.types.isMapIterator(map.values()); // Returns true + * util.types.isMapIterator(map.entries()); // Returns true + * util.types.isMapIterator(map[Symbol.iterator]()); // Returns true + * ``` + * @since v10.0.0 + */ + function isMapIterator(object: unknown): boolean; + /** + * Returns `true` if the value is an instance of a [Module Namespace Object](https://tc39.github.io/ecma262/#sec-module-namespace-exotic-objects). + * + * ```js + * import * as ns from './a.js'; + * + * util.types.isModuleNamespaceObject(ns); // Returns true + * ``` + * @since v10.0.0 + */ + function isModuleNamespaceObject(value: unknown): boolean; + /** + * Returns `true` if the value was returned by the constructor of a [built-in `Error` type](https://tc39.es/ecma262/#sec-error-objects). + * + * ```js + * console.log(util.types.isNativeError(new Error())); // true + * console.log(util.types.isNativeError(new TypeError())); // true + * console.log(util.types.isNativeError(new RangeError())); // true + * ``` + * + * Subclasses of the native error types are also native errors: + * + * ```js + * class MyError extends Error {} + * console.log(util.types.isNativeError(new MyError())); // true + * ``` + * + * A value being `instanceof` a native error class is not equivalent to `isNativeError()`returning `true` for that value. `isNativeError()` returns `true` for errors + * which come from a different [realm](https://tc39.es/ecma262/#realm) while `instanceof Error` returns `false`for these errors: + * + * ```js + * const vm = require('node:vm'); + * const context = vm.createContext({}); + * const myError = vm.runInContext('new Error()', context); + * console.log(util.types.isNativeError(myError)); // true + * console.log(myError instanceof Error); // false + * ``` + * + * Conversely, `isNativeError()` returns `false` for all objects which were not + * returned by the constructor of a native error. That includes values + * which are `instanceof` native errors: + * + * ```js + * const myError = { __proto__: Error.prototype }; + * console.log(util.types.isNativeError(myError)); // false + * console.log(myError instanceof Error); // true + * ``` + * @since v10.0.0 + */ + function isNativeError(object: unknown): object is Error; + /** + * Returns `true` if the value is a number object, e.g. created + * by `new Number()`. + * + * ```js + * util.types.isNumberObject(0); // Returns false + * util.types.isNumberObject(new Number(0)); // Returns true + * ``` + * @since v10.0.0 + */ + function isNumberObject(object: unknown): object is Number; + /** + * Returns `true` if the value is a built-in [`Promise`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise). + * + * ```js + * util.types.isPromise(Promise.resolve(42)); // Returns true + * ``` + * @since v10.0.0 + */ + function isPromise(object: unknown): object is Promise; + /** + * Returns `true` if the value is a [`Proxy`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy) instance. + * + * ```js + * const target = {}; + * const proxy = new Proxy(target, {}); + * util.types.isProxy(target); // Returns false + * util.types.isProxy(proxy); // Returns true + * ``` + * @since v10.0.0 + */ + function isProxy(object: unknown): boolean; + /** + * Returns `true` if the value is a regular expression object. + * + * ```js + * util.types.isRegExp(/abc/); // Returns true + * util.types.isRegExp(new RegExp('abc')); // Returns true + * ``` + * @since v10.0.0 + */ + function isRegExp(object: unknown): object is RegExp; + /** + * Returns `true` if the value is a built-in [`Set`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set) instance. + * + * ```js + * util.types.isSet(new Set()); // Returns true + * ``` + * @since v10.0.0 + */ + function isSet( + object: T | {}, + ): object is T extends ReadonlySet ? (unknown extends T ? never : ReadonlySet) : Set; + /** + * Returns `true` if the value is an iterator returned for a built-in [`Set`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set) instance. + * + * ```js + * const set = new Set(); + * util.types.isSetIterator(set.keys()); // Returns true + * util.types.isSetIterator(set.values()); // Returns true + * util.types.isSetIterator(set.entries()); // Returns true + * util.types.isSetIterator(set[Symbol.iterator]()); // Returns true + * ``` + * @since v10.0.0 + */ + function isSetIterator(object: unknown): boolean; + /** + * Returns `true` if the value is a built-in [`SharedArrayBuffer`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer) instance. + * This does _not_ include [`ArrayBuffer`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer) instances. Usually, it is + * desirable to test for both; See `util.types.isAnyArrayBuffer()` for that. + * + * ```js + * util.types.isSharedArrayBuffer(new ArrayBuffer()); // Returns false + * util.types.isSharedArrayBuffer(new SharedArrayBuffer()); // Returns true + * ``` + * @since v10.0.0 + */ + function isSharedArrayBuffer(object: unknown): object is SharedArrayBuffer; + /** + * Returns `true` if the value is a string object, e.g. created + * by `new String()`. + * + * ```js + * util.types.isStringObject('foo'); // Returns false + * util.types.isStringObject(new String('foo')); // Returns true + * ``` + * @since v10.0.0 + */ + function isStringObject(object: unknown): object is String; + /** + * Returns `true` if the value is a symbol object, created + * by calling `Object()` on a `Symbol` primitive. + * + * ```js + * const symbol = Symbol('foo'); + * util.types.isSymbolObject(symbol); // Returns false + * util.types.isSymbolObject(Object(symbol)); // Returns true + * ``` + * @since v10.0.0 + */ + function isSymbolObject(object: unknown): object is Symbol; + /** + * Returns `true` if the value is a built-in [`TypedArray`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray) instance. + * + * ```js + * util.types.isTypedArray(new ArrayBuffer()); // Returns false + * util.types.isTypedArray(new Uint8Array()); // Returns true + * util.types.isTypedArray(new Float64Array()); // Returns true + * ``` + * + * See also [`ArrayBuffer.isView()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer/isView). + * @since v10.0.0 + */ + function isTypedArray(object: unknown): object is NodeJS.TypedArray; + /** + * Returns `true` if the value is a built-in [`Uint8Array`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array) instance. + * + * ```js + * util.types.isUint8Array(new ArrayBuffer()); // Returns false + * util.types.isUint8Array(new Uint8Array()); // Returns true + * util.types.isUint8Array(new Float64Array()); // Returns false + * ``` + * @since v10.0.0 + */ + function isUint8Array(object: unknown): object is Uint8Array; + /** + * Returns `true` if the value is a built-in [`Uint8ClampedArray`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8ClampedArray) instance. + * + * ```js + * util.types.isUint8ClampedArray(new ArrayBuffer()); // Returns false + * util.types.isUint8ClampedArray(new Uint8ClampedArray()); // Returns true + * util.types.isUint8ClampedArray(new Float64Array()); // Returns false + * ``` + * @since v10.0.0 + */ + function isUint8ClampedArray(object: unknown): object is Uint8ClampedArray; + /** + * Returns `true` if the value is a built-in [`Uint16Array`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint16Array) instance. + * + * ```js + * util.types.isUint16Array(new ArrayBuffer()); // Returns false + * util.types.isUint16Array(new Uint16Array()); // Returns true + * util.types.isUint16Array(new Float64Array()); // Returns false + * ``` + * @since v10.0.0 + */ + function isUint16Array(object: unknown): object is Uint16Array; + /** + * Returns `true` if the value is a built-in [`Uint32Array`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint32Array) instance. + * + * ```js + * util.types.isUint32Array(new ArrayBuffer()); // Returns false + * util.types.isUint32Array(new Uint32Array()); // Returns true + * util.types.isUint32Array(new Float64Array()); // Returns false + * ``` + * @since v10.0.0 + */ + function isUint32Array(object: unknown): object is Uint32Array; + /** + * Returns `true` if the value is a built-in [`WeakMap`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakMap) instance. + * + * ```js + * util.types.isWeakMap(new WeakMap()); // Returns true + * ``` + * @since v10.0.0 + */ + function isWeakMap(object: unknown): object is WeakMap; + /** + * Returns `true` if the value is a built-in [`WeakSet`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakSet) instance. + * + * ```js + * util.types.isWeakSet(new WeakSet()); // Returns true + * ``` + * @since v10.0.0 + */ + function isWeakSet(object: unknown): object is WeakSet; + /** + * Returns `true` if `value` is a `KeyObject`, `false` otherwise. + * @since v16.2.0 + */ + function isKeyObject(object: unknown): object is KeyObject; + /** + * Returns `true` if `value` is a `CryptoKey`, `false` otherwise. + * @since v16.2.0 + */ + function isCryptoKey(object: unknown): object is webcrypto.CryptoKey; +} +declare module "node:util" { + export * from "util"; +} +declare module "node:util/types" { + export * from "util/types"; +} diff --git a/Url-Shortner/node_modules/@types/node/ts4.8/v8.d.ts b/Url-Shortner/node_modules/@types/node/ts4.8/v8.d.ts new file mode 100644 index 0000000..6790e76 --- /dev/null +++ b/Url-Shortner/node_modules/@types/node/ts4.8/v8.d.ts @@ -0,0 +1,635 @@ +/** + * The `node:v8` module exposes APIs that are specific to the version of [V8](https://developers.google.com/v8/) built into the Node.js binary. It can be accessed using: + * + * ```js + * const v8 = require('node:v8'); + * ``` + * @see [source](https://github.com/nodejs/node/blob/v20.2.0/lib/v8.js) + */ +declare module "v8" { + import { Readable } from "node:stream"; + interface HeapSpaceInfo { + space_name: string; + space_size: number; + space_used_size: number; + space_available_size: number; + physical_space_size: number; + } + // ** Signifies if the --zap_code_space option is enabled or not. 1 == enabled, 0 == disabled. */ + type DoesZapCodeSpaceFlag = 0 | 1; + interface HeapInfo { + total_heap_size: number; + total_heap_size_executable: number; + total_physical_size: number; + total_available_size: number; + used_heap_size: number; + heap_size_limit: number; + malloced_memory: number; + peak_malloced_memory: number; + does_zap_garbage: DoesZapCodeSpaceFlag; + number_of_native_contexts: number; + number_of_detached_contexts: number; + total_global_handles_size: number; + used_global_handles_size: number; + external_memory: number; + } + interface HeapCodeStatistics { + code_and_metadata_size: number; + bytecode_and_metadata_size: number; + external_script_source_size: number; + } + /** + * Returns an integer representing a version tag derived from the V8 version, + * command-line flags, and detected CPU features. This is useful for determining + * whether a `vm.Script` `cachedData` buffer is compatible with this instance + * of V8. + * + * ```js + * console.log(v8.cachedDataVersionTag()); // 3947234607 + * // The value returned by v8.cachedDataVersionTag() is derived from the V8 + * // version, command-line flags, and detected CPU features. Test that the value + * // does indeed update when flags are toggled. + * v8.setFlagsFromString('--allow_natives_syntax'); + * console.log(v8.cachedDataVersionTag()); // 183726201 + * ``` + * @since v8.0.0 + */ + function cachedDataVersionTag(): number; + /** + * Returns an object with the following properties: + * + * `does_zap_garbage` is a 0/1 boolean, which signifies whether the`--zap_code_space` option is enabled or not. This makes V8 overwrite heap + * garbage with a bit pattern. The RSS footprint (resident set size) gets bigger + * because it continuously touches all heap pages and that makes them less likely + * to get swapped out by the operating system. + * + * `number_of_native_contexts` The value of native\_context is the number of the + * top-level contexts currently active. Increase of this number over time indicates + * a memory leak. + * + * `number_of_detached_contexts` The value of detached\_context is the number + * of contexts that were detached and not yet garbage collected. This number + * being non-zero indicates a potential memory leak. + * + * `total_global_handles_size` The value of total\_global\_handles\_size is the + * total memory size of V8 global handles. + * + * `used_global_handles_size` The value of used\_global\_handles\_size is the + * used memory size of V8 global handles. + * + * `external_memory` The value of external\_memory is the memory size of array + * buffers and external strings. + * + * ```js + * { + * total_heap_size: 7326976, + * total_heap_size_executable: 4194304, + * total_physical_size: 7326976, + * total_available_size: 1152656, + * used_heap_size: 3476208, + * heap_size_limit: 1535115264, + * malloced_memory: 16384, + * peak_malloced_memory: 1127496, + * does_zap_garbage: 0, + * number_of_native_contexts: 1, + * number_of_detached_contexts: 0, + * total_global_handles_size: 8192, + * used_global_handles_size: 3296, + * external_memory: 318824 + * } + * ``` + * @since v1.0.0 + */ + function getHeapStatistics(): HeapInfo; + /** + * Returns statistics about the V8 heap spaces, i.e. the segments which make up + * the V8 heap. Neither the ordering of heap spaces, nor the availability of a + * heap space can be guaranteed as the statistics are provided via the + * V8[`GetHeapSpaceStatistics`](https://v8docs.nodesource.com/node-13.2/d5/dda/classv8_1_1_isolate.html#ac673576f24fdc7a33378f8f57e1d13a4) function and may change from one V8 version to the + * next. + * + * The value returned is an array of objects containing the following properties: + * + * ```json + * [ + * { + * "space_name": "new_space", + * "space_size": 2063872, + * "space_used_size": 951112, + * "space_available_size": 80824, + * "physical_space_size": 2063872 + * }, + * { + * "space_name": "old_space", + * "space_size": 3090560, + * "space_used_size": 2493792, + * "space_available_size": 0, + * "physical_space_size": 3090560 + * }, + * { + * "space_name": "code_space", + * "space_size": 1260160, + * "space_used_size": 644256, + * "space_available_size": 960, + * "physical_space_size": 1260160 + * }, + * { + * "space_name": "map_space", + * "space_size": 1094160, + * "space_used_size": 201608, + * "space_available_size": 0, + * "physical_space_size": 1094160 + * }, + * { + * "space_name": "large_object_space", + * "space_size": 0, + * "space_used_size": 0, + * "space_available_size": 1490980608, + * "physical_space_size": 0 + * } + * ] + * ``` + * @since v6.0.0 + */ + function getHeapSpaceStatistics(): HeapSpaceInfo[]; + /** + * The `v8.setFlagsFromString()` method can be used to programmatically set + * V8 command-line flags. This method should be used with care. Changing settings + * after the VM has started may result in unpredictable behavior, including + * crashes and data loss; or it may simply do nothing. + * + * The V8 options available for a version of Node.js may be determined by running`node --v8-options`. + * + * Usage: + * + * ```js + * // Print GC events to stdout for one minute. + * const v8 = require('node:v8'); + * v8.setFlagsFromString('--trace_gc'); + * setTimeout(() => { v8.setFlagsFromString('--notrace_gc'); }, 60e3); + * ``` + * @since v1.0.0 + */ + function setFlagsFromString(flags: string): void; + /** + * Generates a snapshot of the current V8 heap and returns a Readable + * Stream that may be used to read the JSON serialized representation. + * This JSON stream format is intended to be used with tools such as + * Chrome DevTools. The JSON schema is undocumented and specific to the + * V8 engine. Therefore, the schema may change from one version of V8 to the next. + * + * Creating a heap snapshot requires memory about twice the size of the heap at + * the time the snapshot is created. This results in the risk of OOM killers + * terminating the process. + * + * Generating a snapshot is a synchronous operation which blocks the event loop + * for a duration depending on the heap size. + * + * ```js + * // Print heap snapshot to the console + * const v8 = require('node:v8'); + * const stream = v8.getHeapSnapshot(); + * stream.pipe(process.stdout); + * ``` + * @since v11.13.0 + * @return A Readable containing the V8 heap snapshot. + */ + function getHeapSnapshot(): Readable; + /** + * Generates a snapshot of the current V8 heap and writes it to a JSON + * file. This file is intended to be used with tools such as Chrome + * DevTools. The JSON schema is undocumented and specific to the V8 + * engine, and may change from one version of V8 to the next. + * + * A heap snapshot is specific to a single V8 isolate. When using `worker threads`, a heap snapshot generated from the main thread will + * not contain any information about the workers, and vice versa. + * + * Creating a heap snapshot requires memory about twice the size of the heap at + * the time the snapshot is created. This results in the risk of OOM killers + * terminating the process. + * + * Generating a snapshot is a synchronous operation which blocks the event loop + * for a duration depending on the heap size. + * + * ```js + * const { writeHeapSnapshot } = require('node:v8'); + * const { + * Worker, + * isMainThread, + * parentPort, + * } = require('node:worker_threads'); + * + * if (isMainThread) { + * const worker = new Worker(__filename); + * + * worker.once('message', (filename) => { + * console.log(`worker heapdump: ${filename}`); + * // Now get a heapdump for the main thread. + * console.log(`main thread heapdump: ${writeHeapSnapshot()}`); + * }); + * + * // Tell the worker to create a heapdump. + * worker.postMessage('heapdump'); + * } else { + * parentPort.once('message', (message) => { + * if (message === 'heapdump') { + * // Generate a heapdump for the worker + * // and return the filename to the parent. + * parentPort.postMessage(writeHeapSnapshot()); + * } + * }); + * } + * ``` + * @since v11.13.0 + * @param filename The file path where the V8 heap snapshot is to be saved. If not specified, a file name with the pattern `'Heap-${yyyymmdd}-${hhmmss}-${pid}-${thread_id}.heapsnapshot'` will be + * generated, where `{pid}` will be the PID of the Node.js process, `{thread_id}` will be `0` when `writeHeapSnapshot()` is called from the main Node.js thread or the id of a + * worker thread. + * @return The filename where the snapshot was saved. + */ + function writeHeapSnapshot(filename?: string): string; + /** + * Get statistics about code and its metadata in the heap, see + * V8[`GetHeapCodeAndMetadataStatistics`](https://v8docs.nodesource.com/node-13.2/d5/dda/classv8_1_1_isolate.html#a6079122af17612ef54ef3348ce170866) API. Returns an object with the + * following properties: + * + * ```js + * { + * code_and_metadata_size: 212208, + * bytecode_and_metadata_size: 161368, + * external_script_source_size: 1410794, + * cpu_profiler_metadata_size: 0, + * } + * ``` + * @since v12.8.0 + */ + function getHeapCodeStatistics(): HeapCodeStatistics; + /** + * @since v8.0.0 + */ + class Serializer { + /** + * Writes out a header, which includes the serialization format version. + */ + writeHeader(): void; + /** + * Serializes a JavaScript value and adds the serialized representation to the + * internal buffer. + * + * This throws an error if `value` cannot be serialized. + */ + writeValue(val: any): boolean; + /** + * Returns the stored internal buffer. This serializer should not be used once + * the buffer is released. Calling this method results in undefined behavior + * if a previous write has failed. + */ + releaseBuffer(): Buffer; + /** + * Marks an `ArrayBuffer` as having its contents transferred out of band. + * Pass the corresponding `ArrayBuffer` in the deserializing context to `deserializer.transferArrayBuffer()`. + * @param id A 32-bit unsigned integer. + * @param arrayBuffer An `ArrayBuffer` instance. + */ + transferArrayBuffer(id: number, arrayBuffer: ArrayBuffer): void; + /** + * Write a raw 32-bit unsigned integer. + * For use inside of a custom `serializer._writeHostObject()`. + */ + writeUint32(value: number): void; + /** + * Write a raw 64-bit unsigned integer, split into high and low 32-bit parts. + * For use inside of a custom `serializer._writeHostObject()`. + */ + writeUint64(hi: number, lo: number): void; + /** + * Write a JS `number` value. + * For use inside of a custom `serializer._writeHostObject()`. + */ + writeDouble(value: number): void; + /** + * Write raw bytes into the serializer's internal buffer. The deserializer + * will require a way to compute the length of the buffer. + * For use inside of a custom `serializer._writeHostObject()`. + */ + writeRawBytes(buffer: NodeJS.TypedArray): void; + } + /** + * A subclass of `Serializer` that serializes `TypedArray`(in particular `Buffer`) and `DataView` objects as host objects, and only + * stores the part of their underlying `ArrayBuffer`s that they are referring to. + * @since v8.0.0 + */ + class DefaultSerializer extends Serializer {} + /** + * @since v8.0.0 + */ + class Deserializer { + constructor(data: NodeJS.TypedArray); + /** + * Reads and validates a header (including the format version). + * May, for example, reject an invalid or unsupported wire format. In that case, + * an `Error` is thrown. + */ + readHeader(): boolean; + /** + * Deserializes a JavaScript value from the buffer and returns it. + */ + readValue(): any; + /** + * Marks an `ArrayBuffer` as having its contents transferred out of band. + * Pass the corresponding `ArrayBuffer` in the serializing context to `serializer.transferArrayBuffer()` (or return the `id` from `serializer._getSharedArrayBufferId()` in the case of + * `SharedArrayBuffer`s). + * @param id A 32-bit unsigned integer. + * @param arrayBuffer An `ArrayBuffer` instance. + */ + transferArrayBuffer(id: number, arrayBuffer: ArrayBuffer): void; + /** + * Reads the underlying wire format version. Likely mostly to be useful to + * legacy code reading old wire format versions. May not be called before`.readHeader()`. + */ + getWireFormatVersion(): number; + /** + * Read a raw 32-bit unsigned integer and return it. + * For use inside of a custom `deserializer._readHostObject()`. + */ + readUint32(): number; + /** + * Read a raw 64-bit unsigned integer and return it as an array `[hi, lo]`with two 32-bit unsigned integer entries. + * For use inside of a custom `deserializer._readHostObject()`. + */ + readUint64(): [number, number]; + /** + * Read a JS `number` value. + * For use inside of a custom `deserializer._readHostObject()`. + */ + readDouble(): number; + /** + * Read raw bytes from the deserializer's internal buffer. The `length` parameter + * must correspond to the length of the buffer that was passed to `serializer.writeRawBytes()`. + * For use inside of a custom `deserializer._readHostObject()`. + */ + readRawBytes(length: number): Buffer; + } + /** + * A subclass of `Deserializer` corresponding to the format written by `DefaultSerializer`. + * @since v8.0.0 + */ + class DefaultDeserializer extends Deserializer {} + /** + * Uses a `DefaultSerializer` to serialize `value` into a buffer. + * + * `ERR_BUFFER_TOO_LARGE` will be thrown when trying to + * serialize a huge object which requires buffer + * larger than `buffer.constants.MAX_LENGTH`. + * @since v8.0.0 + */ + function serialize(value: any): Buffer; + /** + * Uses a `DefaultDeserializer` with default options to read a JS value + * from a buffer. + * @since v8.0.0 + * @param buffer A buffer returned by {@link serialize}. + */ + function deserialize(buffer: NodeJS.TypedArray): any; + /** + * The `v8.takeCoverage()` method allows the user to write the coverage started by `NODE_V8_COVERAGE` to disk on demand. This method can be invoked multiple + * times during the lifetime of the process. Each time the execution counter will + * be reset and a new coverage report will be written to the directory specified + * by `NODE_V8_COVERAGE`. + * + * When the process is about to exit, one last coverage will still be written to + * disk unless {@link stopCoverage} is invoked before the process exits. + * @since v15.1.0, v14.18.0, v12.22.0 + */ + function takeCoverage(): void; + /** + * The `v8.stopCoverage()` method allows the user to stop the coverage collection + * started by `NODE_V8_COVERAGE`, so that V8 can release the execution count + * records and optimize code. This can be used in conjunction with {@link takeCoverage} if the user wants to collect the coverage on demand. + * @since v15.1.0, v14.18.0, v12.22.0 + */ + function stopCoverage(): void; + /** + * This API collects GC data in current thread. + * @since v19.6.0, v18.15.0 + */ + class GCProfiler { + /** + * Start collecting GC data. + * @since v19.6.0, v18.15.0 + */ + start(): void; + /** + * Stop collecting GC data and return an object.The content of object + * is as follows. + * + * ```json + * { + * "version": 1, + * "startTime": 1674059033862, + * "statistics": [ + * { + * "gcType": "Scavenge", + * "beforeGC": { + * "heapStatistics": { + * "totalHeapSize": 5005312, + * "totalHeapSizeExecutable": 524288, + * "totalPhysicalSize": 5226496, + * "totalAvailableSize": 4341325216, + * "totalGlobalHandlesSize": 8192, + * "usedGlobalHandlesSize": 2112, + * "usedHeapSize": 4883840, + * "heapSizeLimit": 4345298944, + * "mallocedMemory": 254128, + * "externalMemory": 225138, + * "peakMallocedMemory": 181760 + * }, + * "heapSpaceStatistics": [ + * { + * "spaceName": "read_only_space", + * "spaceSize": 0, + * "spaceUsedSize": 0, + * "spaceAvailableSize": 0, + * "physicalSpaceSize": 0 + * } + * ] + * }, + * "cost": 1574.14, + * "afterGC": { + * "heapStatistics": { + * "totalHeapSize": 6053888, + * "totalHeapSizeExecutable": 524288, + * "totalPhysicalSize": 5500928, + * "totalAvailableSize": 4341101384, + * "totalGlobalHandlesSize": 8192, + * "usedGlobalHandlesSize": 2112, + * "usedHeapSize": 4059096, + * "heapSizeLimit": 4345298944, + * "mallocedMemory": 254128, + * "externalMemory": 225138, + * "peakMallocedMemory": 181760 + * }, + * "heapSpaceStatistics": [ + * { + * "spaceName": "read_only_space", + * "spaceSize": 0, + * "spaceUsedSize": 0, + * "spaceAvailableSize": 0, + * "physicalSpaceSize": 0 + * } + * ] + * } + * } + * ], + * "endTime": 1674059036865 + * } + * ``` + * + * Here's an example. + * + * ```js + * const { GCProfiler } = require('v8'); + * const profiler = new GCProfiler(); + * profiler.start(); + * setTimeout(() => { + * console.log(profiler.stop()); + * }, 1000); + * ``` + * @since v19.6.0, v18.15.0 + */ + stop(): GCProfilerResult; + } + interface GCProfilerResult { + version: number; + startTime: number; + endTime: number; + statistics: Array<{ + gcType: string; + cost: number; + beforeGC: { + heapStatistics: HeapStatistics; + heapSpaceStatistics: HeapSpaceStatistics[]; + }; + afterGC: { + heapStatistics: HeapStatistics; + heapSpaceStatistics: HeapSpaceStatistics[]; + }; + }>; + } + interface HeapStatistics { + totalHeapSize: number; + totalHeapSizeExecutable: number; + totalPhysicalSize: number; + totalAvailableSize: number; + totalGlobalHandlesSize: number; + usedGlobalHandlesSize: number; + usedHeapSize: number; + heapSizeLimit: number; + mallocedMemory: number; + externalMemory: number; + peakMallocedMemory: number; + } + interface HeapSpaceStatistics { + spaceName: string; + spaceSize: number; + spaceUsedSize: number; + spaceAvailableSize: number; + physicalSpaceSize: number; + } + /** + * Called when a promise is constructed. This does not mean that corresponding before/after events will occur, only that the possibility exists. This will + * happen if a promise is created without ever getting a continuation. + * @since v17.1.0, v16.14.0 + * @param promise The promise being created. + * @param parent The promise continued from, if applicable. + */ + interface Init { + (promise: Promise, parent: Promise): void; + } + /** + * Called before a promise continuation executes. This can be in the form of `then()`, `catch()`, or `finally()` handlers or an await resuming. + * + * The before callback will be called 0 to N times. The before callback will typically be called 0 times if no continuation was ever made for the promise. + * The before callback may be called many times in the case where many continuations have been made from the same promise. + * @since v17.1.0, v16.14.0 + */ + interface Before { + (promise: Promise): void; + } + /** + * Called immediately after a promise continuation executes. This may be after a `then()`, `catch()`, or `finally()` handler or before an await after another await. + * @since v17.1.0, v16.14.0 + */ + interface After { + (promise: Promise): void; + } + /** + * Called when the promise receives a resolution or rejection value. This may occur synchronously in the case of {@link Promise.resolve()} or + * {@link Promise.reject()}. + * @since v17.1.0, v16.14.0 + */ + interface Settled { + (promise: Promise): void; + } + /** + * Key events in the lifetime of a promise have been categorized into four areas: creation of a promise, before/after a continuation handler is called or + * around an await, and when the promise resolves or rejects. + * + * Because promises are asynchronous resources whose lifecycle is tracked via the promise hooks mechanism, the `init()`, `before()`, `after()`, and + * `settled()` callbacks must not be async functions as they create more promises which would produce an infinite loop. + * @since v17.1.0, v16.14.0 + */ + interface HookCallbacks { + init?: Init; + before?: Before; + after?: After; + settled?: Settled; + } + interface PromiseHooks { + /** + * The `init` hook must be a plain function. Providing an async function will throw as it would produce an infinite microtask loop. + * @since v17.1.0, v16.14.0 + * @param init The {@link Init | `init` callback} to call when a promise is created. + * @return Call to stop the hook. + */ + onInit: (init: Init) => Function; + /** + * The `settled` hook must be a plain function. Providing an async function will throw as it would produce an infinite microtask loop. + * @since v17.1.0, v16.14.0 + * @param settled The {@link Settled | `settled` callback} to call when a promise is created. + * @return Call to stop the hook. + */ + onSettled: (settled: Settled) => Function; + /** + * The `before` hook must be a plain function. Providing an async function will throw as it would produce an infinite microtask loop. + * @since v17.1.0, v16.14.0 + * @param before The {@link Before | `before` callback} to call before a promise continuation executes. + * @return Call to stop the hook. + */ + onBefore: (before: Before) => Function; + /** + * The `after` hook must be a plain function. Providing an async function will throw as it would produce an infinite microtask loop. + * @since v17.1.0, v16.14.0 + * @param after The {@link After | `after` callback} to call after a promise continuation executes. + * @return Call to stop the hook. + */ + onAfter: (after: After) => Function; + /** + * Registers functions to be called for different lifetime events of each promise. + * The callbacks `init()`/`before()`/`after()`/`settled()` are called for the respective events during a promise's lifetime. + * All callbacks are optional. For example, if only promise creation needs to be tracked, then only the init callback needs to be passed. + * The hook callbacks must be plain functions. Providing async functions will throw as it would produce an infinite microtask loop. + * @since v17.1.0, v16.14.0 + * @param callbacks The {@link HookCallbacks | Hook Callbacks} to register + * @return Used for disabling hooks + */ + createHook: (callbacks: HookCallbacks) => Function; + } + /** + * The `promiseHooks` interface can be used to track promise lifecycle events. + * @since v17.1.0, v16.14.0 + */ + const promiseHooks: PromiseHooks; +} +declare module "node:v8" { + export * from "v8"; +} diff --git a/Url-Shortner/node_modules/@types/node/ts4.8/vm.d.ts b/Url-Shortner/node_modules/@types/node/ts4.8/vm.d.ts new file mode 100644 index 0000000..e44faac --- /dev/null +++ b/Url-Shortner/node_modules/@types/node/ts4.8/vm.d.ts @@ -0,0 +1,901 @@ +/** + * The `node:vm` module enables compiling and running code within V8 Virtual + * Machine contexts. + * + * **The `node:vm` module is not a security** + * **mechanism. Do not use it to run untrusted code.** + * + * JavaScript code can be compiled and run immediately or + * compiled, saved, and run later. + * + * A common use case is to run the code in a different V8 Context. This means + * invoked code has a different global object than the invoking code. + * + * One can provide the context by `contextifying` an + * object. The invoked code treats any property in the context like a + * global variable. Any changes to global variables caused by the invoked + * code are reflected in the context object. + * + * ```js + * const vm = require('node:vm'); + * + * const x = 1; + * + * const context = { x: 2 }; + * vm.createContext(context); // Contextify the object. + * + * const code = 'x += 40; var y = 17;'; + * // `x` and `y` are global variables in the context. + * // Initially, x has the value 2 because that is the value of context.x. + * vm.runInContext(code, context); + * + * console.log(context.x); // 42 + * console.log(context.y); // 17 + * + * console.log(x); // 1; y is not defined. + * ``` + * @see [source](https://github.com/nodejs/node/blob/v20.2.0/lib/vm.js) + */ +declare module "vm" { + import { ImportAssertions } from "node:module"; + interface Context extends NodeJS.Dict {} + interface BaseOptions { + /** + * Specifies the filename used in stack traces produced by this script. + * Default: `''`. + */ + filename?: string | undefined; + /** + * Specifies the line number offset that is displayed in stack traces produced by this script. + * Default: `0`. + */ + lineOffset?: number | undefined; + /** + * Specifies the column number offset that is displayed in stack traces produced by this script. + * @default 0 + */ + columnOffset?: number | undefined; + } + interface ScriptOptions extends BaseOptions { + /** + * V8's code cache data for the supplied source. + */ + cachedData?: Buffer | NodeJS.ArrayBufferView | undefined; + /** @deprecated in favor of `script.createCachedData()` */ + produceCachedData?: boolean | undefined; + /** + * Called during evaluation of this module when `import()` is called. + * If this option is not specified, calls to `import()` will reject with `ERR_VM_DYNAMIC_IMPORT_CALLBACK_MISSING`. + */ + importModuleDynamically?: + | ((specifier: string, script: Script, importAssertions: ImportAssertions) => Module) + | undefined; + } + interface RunningScriptOptions extends BaseOptions { + /** + * When `true`, if an `Error` occurs while compiling the `code`, the line of code causing the error is attached to the stack trace. + * Default: `true`. + */ + displayErrors?: boolean | undefined; + /** + * Specifies the number of milliseconds to execute code before terminating execution. + * If execution is terminated, an `Error` will be thrown. This value must be a strictly positive integer. + */ + timeout?: number | undefined; + /** + * If `true`, the execution will be terminated when `SIGINT` (Ctrl+C) is received. + * Existing handlers for the event that have been attached via `process.on('SIGINT')` will be disabled during script execution, but will continue to work after that. + * If execution is terminated, an `Error` will be thrown. + * Default: `false`. + */ + breakOnSigint?: boolean | undefined; + } + interface RunningScriptInNewContextOptions extends RunningScriptOptions { + /** + * Human-readable name of the newly created context. + */ + contextName?: CreateContextOptions["name"]; + /** + * Origin corresponding to the newly created context for display purposes. The origin should be formatted like a URL, + * but with only the scheme, host, and port (if necessary), like the value of the `url.origin` property of a `URL` object. + * Most notably, this string should omit the trailing slash, as that denotes a path. + */ + contextOrigin?: CreateContextOptions["origin"]; + contextCodeGeneration?: CreateContextOptions["codeGeneration"]; + /** + * If set to `afterEvaluate`, microtasks will be run immediately after the script has run. + */ + microtaskMode?: CreateContextOptions["microtaskMode"]; + } + interface RunningCodeOptions extends RunningScriptOptions { + cachedData?: ScriptOptions["cachedData"]; + importModuleDynamically?: ScriptOptions["importModuleDynamically"]; + } + interface RunningCodeInNewContextOptions extends RunningScriptInNewContextOptions { + cachedData?: ScriptOptions["cachedData"]; + importModuleDynamically?: ScriptOptions["importModuleDynamically"]; + } + interface CompileFunctionOptions extends BaseOptions { + /** + * Provides an optional data with V8's code cache data for the supplied source. + */ + cachedData?: Buffer | undefined; + /** + * Specifies whether to produce new cache data. + * Default: `false`, + */ + produceCachedData?: boolean | undefined; + /** + * The sandbox/context in which the said function should be compiled in. + */ + parsingContext?: Context | undefined; + /** + * An array containing a collection of context extensions (objects wrapping the current scope) to be applied while compiling + */ + contextExtensions?: Object[] | undefined; + } + interface CreateContextOptions { + /** + * Human-readable name of the newly created context. + * @default 'VM Context i' Where i is an ascending numerical index of the created context. + */ + name?: string | undefined; + /** + * Corresponds to the newly created context for display purposes. + * The origin should be formatted like a `URL`, but with only the scheme, host, and port (if necessary), + * like the value of the `url.origin` property of a URL object. + * Most notably, this string should omit the trailing slash, as that denotes a path. + * @default '' + */ + origin?: string | undefined; + codeGeneration?: + | { + /** + * If set to false any calls to eval or function constructors (Function, GeneratorFunction, etc) + * will throw an EvalError. + * @default true + */ + strings?: boolean | undefined; + /** + * If set to false any attempt to compile a WebAssembly module will throw a WebAssembly.CompileError. + * @default true + */ + wasm?: boolean | undefined; + } + | undefined; + /** + * If set to `afterEvaluate`, microtasks will be run immediately after the script has run. + */ + microtaskMode?: "afterEvaluate" | undefined; + } + type MeasureMemoryMode = "summary" | "detailed"; + interface MeasureMemoryOptions { + /** + * @default 'summary' + */ + mode?: MeasureMemoryMode | undefined; + /** + * @default 'default' + */ + execution?: "default" | "eager" | undefined; + } + interface MemoryMeasurement { + total: { + jsMemoryEstimate: number; + jsMemoryRange: [number, number]; + }; + } + /** + * Instances of the `vm.Script` class contain precompiled scripts that can be + * executed in specific contexts. + * @since v0.3.1 + */ + class Script { + constructor(code: string, options?: ScriptOptions | string); + /** + * Runs the compiled code contained by the `vm.Script` object within the given`contextifiedObject` and returns the result. Running code does not have access + * to local scope. + * + * The following example compiles code that increments a global variable, sets + * the value of another global variable, then execute the code multiple times. + * The globals are contained in the `context` object. + * + * ```js + * const vm = require('node:vm'); + * + * const context = { + * animal: 'cat', + * count: 2, + * }; + * + * const script = new vm.Script('count += 1; name = "kitty";'); + * + * vm.createContext(context); + * for (let i = 0; i < 10; ++i) { + * script.runInContext(context); + * } + * + * console.log(context); + * // Prints: { animal: 'cat', count: 12, name: 'kitty' } + * ``` + * + * Using the `timeout` or `breakOnSigint` options will result in new event loops + * and corresponding threads being started, which have a non-zero performance + * overhead. + * @since v0.3.1 + * @param contextifiedObject A `contextified` object as returned by the `vm.createContext()` method. + * @return the result of the very last statement executed in the script. + */ + runInContext(contextifiedObject: Context, options?: RunningScriptOptions): any; + /** + * First contextifies the given `contextObject`, runs the compiled code contained + * by the `vm.Script` object within the created context, and returns the result. + * Running code does not have access to local scope. + * + * The following example compiles code that sets a global variable, then executes + * the code multiple times in different contexts. The globals are set on and + * contained within each individual `context`. + * + * ```js + * const vm = require('node:vm'); + * + * const script = new vm.Script('globalVar = "set"'); + * + * const contexts = [{}, {}, {}]; + * contexts.forEach((context) => { + * script.runInNewContext(context); + * }); + * + * console.log(contexts); + * // Prints: [{ globalVar: 'set' }, { globalVar: 'set' }, { globalVar: 'set' }] + * ``` + * @since v0.3.1 + * @param contextObject An object that will be `contextified`. If `undefined`, a new object will be created. + * @return the result of the very last statement executed in the script. + */ + runInNewContext(contextObject?: Context, options?: RunningScriptInNewContextOptions): any; + /** + * Runs the compiled code contained by the `vm.Script` within the context of the + * current `global` object. Running code does not have access to local scope, but _does_ have access to the current `global` object. + * + * The following example compiles code that increments a `global` variable then + * executes that code multiple times: + * + * ```js + * const vm = require('node:vm'); + * + * global.globalVar = 0; + * + * const script = new vm.Script('globalVar += 1', { filename: 'myfile.vm' }); + * + * for (let i = 0; i < 1000; ++i) { + * script.runInThisContext(); + * } + * + * console.log(globalVar); + * + * // 1000 + * ``` + * @since v0.3.1 + * @return the result of the very last statement executed in the script. + */ + runInThisContext(options?: RunningScriptOptions): any; + /** + * Creates a code cache that can be used with the `Script` constructor's`cachedData` option. Returns a `Buffer`. This method may be called at any + * time and any number of times. + * + * The code cache of the `Script` doesn't contain any JavaScript observable + * states. The code cache is safe to be saved along side the script source and + * used to construct new `Script` instances multiple times. + * + * Functions in the `Script` source can be marked as lazily compiled and they are + * not compiled at construction of the `Script`. These functions are going to be + * compiled when they are invoked the first time. The code cache serializes the + * metadata that V8 currently knows about the `Script` that it can use to speed up + * future compilations. + * + * ```js + * const script = new vm.Script(` + * function add(a, b) { + * return a + b; + * } + * + * const x = add(1, 2); + * `); + * + * const cacheWithoutAdd = script.createCachedData(); + * // In `cacheWithoutAdd` the function `add()` is marked for full compilation + * // upon invocation. + * + * script.runInThisContext(); + * + * const cacheWithAdd = script.createCachedData(); + * // `cacheWithAdd` contains fully compiled function `add()`. + * ``` + * @since v10.6.0 + */ + createCachedData(): Buffer; + /** @deprecated in favor of `script.createCachedData()` */ + cachedDataProduced?: boolean | undefined; + /** + * When `cachedData` is supplied to create the `vm.Script`, this value will be set + * to either `true` or `false` depending on acceptance of the data by V8\. + * Otherwise the value is `undefined`. + * @since v5.7.0 + */ + cachedDataRejected?: boolean | undefined; + cachedData?: Buffer | undefined; + /** + * When the script is compiled from a source that contains a source map magic + * comment, this property will be set to the URL of the source map. + * + * ```js + * import vm from 'node:vm'; + * + * const script = new vm.Script(` + * function myFunc() {} + * //# sourceMappingURL=sourcemap.json + * `); + * + * console.log(script.sourceMapURL); + * // Prints: sourcemap.json + * ``` + * @since v19.1.0, v18.13.0 + */ + sourceMapURL?: string | undefined; + } + /** + * If given a `contextObject`, the `vm.createContext()` method will `prepare + * that object` so that it can be used in calls to {@link runInContext} or `script.runInContext()`. Inside such scripts, + * the `contextObject` will be the global object, retaining all of its existing + * properties but also having the built-in objects and functions any standard [global object](https://es5.github.io/#x15.1) has. Outside of scripts run by the vm module, global variables + * will remain unchanged. + * + * ```js + * const vm = require('node:vm'); + * + * global.globalVar = 3; + * + * const context = { globalVar: 1 }; + * vm.createContext(context); + * + * vm.runInContext('globalVar *= 2;', context); + * + * console.log(context); + * // Prints: { globalVar: 2 } + * + * console.log(global.globalVar); + * // Prints: 3 + * ``` + * + * If `contextObject` is omitted (or passed explicitly as `undefined`), a new, + * empty `contextified` object will be returned. + * + * The `vm.createContext()` method is primarily useful for creating a single + * context that can be used to run multiple scripts. For instance, if emulating a + * web browser, the method can be used to create a single context representing a + * window's global object, then run all ` +``` + +## Installation + +```sh +npm install bson +``` + +## Documentation + +### BSON + +[API documentation](https://mongodb.github.io/node-mongodb-native/Next/modules/BSON.html) + + + +### EJSON + +* [EJSON](#EJSON) + + * [.parse(text, [options])](#EJSON.parse) + + * [.stringify(value, [replacer], [space], [options])](#EJSON.stringify) + + * [.serialize(bson, [options])](#EJSON.serialize) + + * [.deserialize(ejson, [options])](#EJSON.deserialize) + + + + +#### *EJSON*.parse(text, [options]) + +| Param | Type | Default | Description | +| --- | --- | --- | --- | +| text | string | | | +| [options] | object | | Optional settings | +| [options.relaxed] | boolean | true | Attempt to return native JS types where possible, rather than BSON types (if true) | + +Parse an Extended JSON string, constructing the JavaScript value or object described by that +string. + +**Example** +```js +const { EJSON } = require('bson'); +const text = '{ "int32": { "$numberInt": "10" } }'; + +// prints { int32: { [String: '10'] _bsontype: 'Int32', value: '10' } } +console.log(EJSON.parse(text, { relaxed: false })); + +// prints { int32: 10 } +console.log(EJSON.parse(text)); +``` + + +#### *EJSON*.stringify(value, [replacer], [space], [options]) + +| Param | Type | Default | Description | +| --- | --- | --- | --- | +| value | object | | The value to convert to extended JSON | +| [replacer] | function \| array | | A function that alters the behavior of the stringification process, or an array of String and Number objects that serve as a whitelist for selecting/filtering the properties of the value object to be included in the JSON string. If this value is null or not provided, all properties of the object are included in the resulting JSON string | +| [space] | string \| number | | A String or Number object that's used to insert white space into the output JSON string for readability purposes. | +| [options] | object | | Optional settings | +| [options.relaxed] | boolean | true | Enabled Extended JSON's `relaxed` mode | +| [options.legacy] | boolean | true | Output in Extended JSON v1 | + +Converts a BSON document to an Extended JSON string, optionally replacing values if a replacer +function is specified or optionally including only the specified properties if a replacer array +is specified. + +**Example** +```js +const { EJSON } = require('bson'); +const Int32 = require('mongodb').Int32; +const doc = { int32: new Int32(10) }; + +// prints '{"int32":{"$numberInt":"10"}}' +console.log(EJSON.stringify(doc, { relaxed: false })); + +// prints '{"int32":10}' +console.log(EJSON.stringify(doc)); +``` + + +#### *EJSON*.serialize(bson, [options]) + +| Param | Type | Description | +| --- | --- | --- | +| bson | object | The object to serialize | +| [options] | object | Optional settings passed to the `stringify` function | + +Serializes an object to an Extended JSON string, and reparse it as a JavaScript object. + + + +#### *EJSON*.deserialize(ejson, [options]) + +| Param | Type | Description | +| --- | --- | --- | +| ejson | object | The Extended JSON object to deserialize | +| [options] | object | Optional settings passed to the parse method | + +Deserializes an Extended JSON object into a plain JavaScript object with native/BSON types + +## Error Handling + +It is our recommendation to use `BSONError.isBSONError()` checks on errors and to avoid relying on parsing `error.message` and `error.name` strings in your code. We guarantee `BSONError.isBSONError()` checks will pass according to semver guidelines, but errors may be sub-classed or their messages may change at any time, even patch releases, as we see fit to increase the helpfulness of the errors. + +Any new errors we add to the driver will directly extend an existing error class and no existing error will be moved to a different parent class outside of a major release. +This means `BSONError.isBSONError()` will always be able to accurately capture the errors that our BSON library throws. + +Hypothetical example: A collection in our Db has an issue with UTF-8 data: + +```ts +let documentCount = 0; +const cursor = collection.find({}, { utf8Validation: true }); +try { + for await (const doc of cursor) documentCount += 1; +} catch (error) { + if (BSONError.isBSONError(error)) { + console.log(`Found the troublemaker UTF-8!: ${documentCount} ${error.message}`); + return documentCount; + } + throw error; +} +``` + +## React Native + +BSON vendors the required polyfills for `TextEncoder`, `TextDecoder`, `atob`, `btoa` imported from React Native and therefore doesn't expect users to polyfill these. One additional polyfill, `crypto.getRandomValues` is recommended and can be installed with the following command: + +```sh +npm install --save react-native-get-random-values +``` + +The following snippet should be placed at the top of the entrypoint (by default this is the root `index.js` file) for React Native projects using the BSON library. These lines must be placed for any code that imports `BSON`. + +```typescript +// Required Polyfills For ReactNative +import 'react-native-get-random-values'; +``` + +Finally, import the `BSON` library like so: + +```typescript +import { BSON, EJSON } from 'bson'; +``` + +This will cause React Native to import the `node_modules/bson/lib/bson.rn.cjs` bundle (see the `"react-native"` setting we have in the `"exports"` section of our [package.json](./package.json).) + +### Technical Note about React Native module import + +The `"exports"` definition in our `package.json` will result in BSON's CommonJS bundle being imported in a React Native project instead of the ES module bundle. Importing the CommonJS bundle is necessary because BSON's ES module bundle of BSON uses top-level await, which is not supported syntax in [React Native's runtime hermes](https://hermesengine.dev/). + +## FAQ + +#### Why does `undefined` get converted to `null`? + +The `undefined` BSON type has been [deprecated for many years](http://bsonspec.org/spec.html), so this library has dropped support for it. Use the `ignoreUndefined` option (for example, from the [driver](http://mongodb.github.io/node-mongodb-native/2.2/api/MongoClient.html#connect) ) to instead remove `undefined` keys. + +#### How do I add custom serialization logic? + +This library looks for `toBSON()` functions on every path, and calls the `toBSON()` function to get the value to serialize. + +```javascript +const BSON = require('bson'); + +class CustomSerialize { + toBSON() { + return 42; + } +} + +const obj = { answer: new CustomSerialize() }; +// "{ answer: 42 }" +console.log(BSON.deserialize(BSON.serialize(obj))); +``` diff --git a/Url-Shortner/node_modules/bson/bson.d.ts b/Url-Shortner/node_modules/bson/bson.d.ts new file mode 100644 index 0000000..519655f --- /dev/null +++ b/Url-Shortner/node_modules/bson/bson.d.ts @@ -0,0 +1,1302 @@ +/** + * A class representation of the BSON Binary type. + * @public + * @category BSONType + */ +export declare class Binary extends BSONValue { + get _bsontype(): 'Binary'; + /* Excluded from this release type: BSON_BINARY_SUBTYPE_DEFAULT */ + /** Initial buffer default size */ + static readonly BUFFER_SIZE = 256; + /** Default BSON type */ + static readonly SUBTYPE_DEFAULT = 0; + /** Function BSON type */ + static readonly SUBTYPE_FUNCTION = 1; + /** Byte Array BSON type */ + static readonly SUBTYPE_BYTE_ARRAY = 2; + /** Deprecated UUID BSON type @deprecated Please use SUBTYPE_UUID */ + static readonly SUBTYPE_UUID_OLD = 3; + /** UUID BSON type */ + static readonly SUBTYPE_UUID = 4; + /** MD5 BSON type */ + static readonly SUBTYPE_MD5 = 5; + /** Encrypted BSON type */ + static readonly SUBTYPE_ENCRYPTED = 6; + /** Column BSON type */ + static readonly SUBTYPE_COLUMN = 7; + /** User BSON type */ + static readonly SUBTYPE_USER_DEFINED = 128; + buffer: Uint8Array; + sub_type: number; + position: number; + /** + * Create a new Binary instance. + * + * This constructor can accept a string as its first argument. In this case, + * this string will be encoded using ISO-8859-1, **not** using UTF-8. + * This is almost certainly not what you want. Use `new Binary(Buffer.from(string))` + * instead to convert the string to a Buffer using UTF-8 first. + * + * @param buffer - a buffer object containing the binary data. + * @param subType - the option binary type. + */ + constructor(buffer?: string | BinarySequence, subType?: number); + /** + * Updates this binary with byte_value. + * + * @param byteValue - a single byte we wish to write. + */ + put(byteValue: string | number | Uint8Array | number[]): void; + /** + * Writes a buffer or string to the binary. + * + * @param sequence - a string or buffer to be written to the Binary BSON object. + * @param offset - specify the binary of where to write the content. + */ + write(sequence: string | BinarySequence, offset: number): void; + /** + * Reads **length** bytes starting at **position**. + * + * @param position - read from the given position in the Binary. + * @param length - the number of bytes to read. + */ + read(position: number, length: number): BinarySequence; + /** + * Returns the value of this binary as a string. + * @param asRaw - Will skip converting to a string + * @remarks + * This is handy when calling this function conditionally for some key value pairs and not others + */ + value(asRaw?: boolean): string | BinarySequence; + /** the length of the binary sequence */ + length(): number; + toJSON(): string; + toString(encoding?: 'hex' | 'base64' | 'utf8' | 'utf-8'): string; + /* Excluded from this release type: toExtendedJSON */ + toUUID(): UUID; + /** Creates an Binary instance from a hex digit string */ + static createFromHexString(hex: string, subType?: number): Binary; + /** Creates an Binary instance from a base64 string */ + static createFromBase64(base64: string, subType?: number): Binary; + /* Excluded from this release type: fromExtendedJSON */ + inspect(): string; +} + +/** @public */ +export declare interface BinaryExtended { + $binary: { + subType: string; + base64: string; + }; +} + +/** @public */ +export declare interface BinaryExtendedLegacy { + $type: string; + $binary: string; +} + +/** @public */ +export declare type BinarySequence = Uint8Array | number[]; + +declare namespace BSON { + export { + setInternalBufferSize, + serialize, + serializeWithBufferAndIndex, + deserialize, + calculateObjectSize, + deserializeStream, + UUIDExtended, + BinaryExtended, + BinaryExtendedLegacy, + BinarySequence, + CodeExtended, + DBRefLike, + Decimal128Extended, + DoubleExtended, + EJSONOptions, + Int32Extended, + LongExtended, + MaxKeyExtended, + MinKeyExtended, + ObjectIdExtended, + ObjectIdLike, + BSONRegExpExtended, + BSONRegExpExtendedLegacy, + BSONSymbolExtended, + LongWithoutOverrides, + TimestampExtended, + TimestampOverrides, + LongWithoutOverridesClass, + SerializeOptions, + DeserializeOptions, + Code, + BSONSymbol, + DBRef, + Binary, + ObjectId, + UUID, + Long, + Timestamp, + Double, + Int32, + MinKey, + MaxKey, + BSONRegExp, + Decimal128, + BSONValue, + BSONError, + BSONVersionError, + BSONRuntimeError, + BSONType, + EJSON, + Document, + CalculateObjectSizeOptions + } +} +export { BSON } + +/** + * @public + * @category Error + * + * `BSONError` objects are thrown when BSON ecounters an error. + * + * This is the parent class for all the other errors thrown by this library. + */ +export declare class BSONError extends Error { + /* Excluded from this release type: bsonError */ + get name(): string; + constructor(message: string); + /** + * @public + * + * All errors thrown from the BSON library inherit from `BSONError`. + * This method can assist with determining if an error originates from the BSON library + * even if it does not pass an `instanceof` check against this class' constructor. + * + * @param value - any javascript value that needs type checking + */ + static isBSONError(value: unknown): value is BSONError; +} + +/** + * A class representation of the BSON RegExp type. + * @public + * @category BSONType + */ +export declare class BSONRegExp extends BSONValue { + get _bsontype(): 'BSONRegExp'; + pattern: string; + options: string; + /** + * @param pattern - The regular expression pattern to match + * @param options - The regular expression options + */ + constructor(pattern: string, options?: string); + static parseOptions(options?: string): string; + /* Excluded from this release type: toExtendedJSON */ + /* Excluded from this release type: fromExtendedJSON */ + inspect(): string; +} + +/** @public */ +export declare interface BSONRegExpExtended { + $regularExpression: { + pattern: string; + options: string; + }; +} + +/** @public */ +export declare interface BSONRegExpExtendedLegacy { + $regex: string | BSONRegExp; + $options: string; +} + +/** + * @public + * @category Error + * + * An error generated when BSON functions encounter an unexpected input + * or reaches an unexpected/invalid internal state + * + */ +export declare class BSONRuntimeError extends BSONError { + get name(): 'BSONRuntimeError'; + constructor(message: string); +} + +/** + * A class representation of the BSON Symbol type. + * @public + * @category BSONType + */ +export declare class BSONSymbol extends BSONValue { + get _bsontype(): 'BSONSymbol'; + value: string; + /** + * @param value - the string representing the symbol. + */ + constructor(value: string); + /** Access the wrapped string value. */ + valueOf(): string; + toString(): string; + inspect(): string; + toJSON(): string; + /* Excluded from this release type: toExtendedJSON */ + /* Excluded from this release type: fromExtendedJSON */ +} + +/** @public */ +export declare interface BSONSymbolExtended { + $symbol: string; +} + +/** @public */ +export declare const BSONType: Readonly<{ + readonly double: 1; + readonly string: 2; + readonly object: 3; + readonly array: 4; + readonly binData: 5; + readonly undefined: 6; + readonly objectId: 7; + readonly bool: 8; + readonly date: 9; + readonly null: 10; + readonly regex: 11; + readonly dbPointer: 12; + readonly javascript: 13; + readonly symbol: 14; + readonly javascriptWithScope: 15; + readonly int: 16; + readonly timestamp: 17; + readonly long: 18; + readonly decimal: 19; + readonly minKey: -1; + readonly maxKey: 127; +}>; + +/** @public */ +export declare type BSONType = (typeof BSONType)[keyof typeof BSONType]; + +/** @public */ +export declare abstract class BSONValue { + /** @public */ + abstract get _bsontype(): string; + /** @public */ + abstract inspect(): string; + /* Excluded from this release type: toExtendedJSON */ +} + +/** + * @public + * @category Error + */ +export declare class BSONVersionError extends BSONError { + get name(): 'BSONVersionError'; + constructor(); +} + +/** + * Calculate the bson size for a passed in Javascript object. + * + * @param object - the Javascript object to calculate the BSON byte size for + * @returns size of BSON object in bytes + * @public + */ +export declare function calculateObjectSize(object: Document, options?: CalculateObjectSizeOptions): number; + +/** @public */ +export declare type CalculateObjectSizeOptions = Pick; + +/** + * A class representation of the BSON Code type. + * @public + * @category BSONType + */ +export declare class Code extends BSONValue { + get _bsontype(): 'Code'; + code: string; + scope: Document | null; + /** + * @param code - a string or function. + * @param scope - an optional scope for the function. + */ + constructor(code: string | Function, scope?: Document | null); + toJSON(): { + code: string; + scope?: Document; + }; + /* Excluded from this release type: toExtendedJSON */ + /* Excluded from this release type: fromExtendedJSON */ + inspect(): string; +} + +/** @public */ +export declare interface CodeExtended { + $code: string; + $scope?: Document; +} + +/** + * A class representation of the BSON DBRef type. + * @public + * @category BSONType + */ +export declare class DBRef extends BSONValue { + get _bsontype(): 'DBRef'; + collection: string; + oid: ObjectId; + db?: string; + fields: Document; + /** + * @param collection - the collection name. + * @param oid - the reference ObjectId. + * @param db - optional db name, if omitted the reference is local to the current db. + */ + constructor(collection: string, oid: ObjectId, db?: string, fields?: Document); + /* Excluded from this release type: namespace */ + /* Excluded from this release type: namespace */ + toJSON(): DBRefLike & Document; + /* Excluded from this release type: toExtendedJSON */ + /* Excluded from this release type: fromExtendedJSON */ + inspect(): string; +} + +/** @public */ +export declare interface DBRefLike { + $ref: string; + $id: ObjectId; + $db?: string; +} + +/** + * A class representation of the BSON Decimal128 type. + * @public + * @category BSONType + */ +export declare class Decimal128 extends BSONValue { + get _bsontype(): 'Decimal128'; + readonly bytes: Uint8Array; + /** + * @param bytes - a buffer containing the raw Decimal128 bytes in little endian order, + * or a string representation as returned by .toString() + */ + constructor(bytes: Uint8Array | string); + /** + * Create a Decimal128 instance from a string representation + * + * @param representation - a numeric string representation. + */ + static fromString(representation: string): Decimal128; + /** + * Create a Decimal128 instance from a string representation, allowing for rounding to 34 + * significant digits + * + * @example Example of a number that will be rounded + * ```ts + * > let d = Decimal128.fromString('37.499999999999999196428571428571375') + * Uncaught: + * BSONError: "37.499999999999999196428571428571375" is not a valid Decimal128 string - inexact rounding + * at invalidErr (/home/wajames/js-bson/lib/bson.cjs:1402:11) + * at Decimal128.fromStringInternal (/home/wajames/js-bson/lib/bson.cjs:1633:25) + * at Decimal128.fromString (/home/wajames/js-bson/lib/bson.cjs:1424:27) + * + * > d = Decimal128.fromStringWithRounding('37.499999999999999196428571428571375') + * new Decimal128("37.49999999999999919642857142857138") + * ``` + * @param representation - a numeric string representation. + */ + static fromStringWithRounding(representation: string): Decimal128; + private static _fromString; + /** Create a string representation of the raw Decimal128 value */ + toString(): string; + toJSON(): Decimal128Extended; + /* Excluded from this release type: toExtendedJSON */ + /* Excluded from this release type: fromExtendedJSON */ + inspect(): string; +} + +/** @public */ +export declare interface Decimal128Extended { + $numberDecimal: string; +} + +/** + * Deserialize data as BSON. + * + * @param buffer - the buffer containing the serialized set of BSON documents. + * @returns returns the deserialized Javascript Object. + * @public + */ +export declare function deserialize(buffer: Uint8Array, options?: DeserializeOptions): Document; + +/** @public */ +export declare interface DeserializeOptions { + /** + * when deserializing a Long return as a BigInt. + * @defaultValue `false` + */ + useBigInt64?: boolean; + /** + * when deserializing a Long will fit it into a Number if it's smaller than 53 bits. + * @defaultValue `true` + */ + promoteLongs?: boolean; + /** + * when deserializing a Binary will return it as a node.js Buffer instance. + * @defaultValue `false` + */ + promoteBuffers?: boolean; + /** + * when deserializing will promote BSON values to their Node.js closest equivalent types. + * @defaultValue `true` + */ + promoteValues?: boolean; + /** + * allow to specify if there what fields we wish to return as unserialized raw buffer. + * @defaultValue `null` + */ + fieldsAsRaw?: Document; + /** + * return BSON regular expressions as BSONRegExp instances. + * @defaultValue `false` + */ + bsonRegExp?: boolean; + /** + * allows the buffer to be larger than the parsed BSON object. + * @defaultValue `false` + */ + allowObjectSmallerThanBufferSize?: boolean; + /** + * Offset into buffer to begin reading document from + * @defaultValue `0` + */ + index?: number; + raw?: boolean; + /** Allows for opt-out utf-8 validation for all keys or + * specified keys. Must be all true or all false. + * + * @example + * ```js + * // disables validation on all keys + * validation: { utf8: false } + * + * // enables validation only on specified keys a, b, and c + * validation: { utf8: { a: true, b: true, c: true } } + * + * // disables validation only on specified keys a, b + * validation: { utf8: { a: false, b: false } } + * ``` + */ + validation?: { + utf8: boolean | Record | Record; + }; +} + +/** + * Deserialize stream data as BSON documents. + * + * @param data - the buffer containing the serialized set of BSON documents. + * @param startIndex - the start index in the data Buffer where the deserialization is to start. + * @param numberOfDocuments - number of documents to deserialize. + * @param documents - an array where to store the deserialized documents. + * @param docStartIndex - the index in the documents array from where to start inserting documents. + * @param options - additional options used for the deserialization. + * @returns next index in the buffer after deserialization **x** numbers of documents. + * @public + */ +export declare function deserializeStream(data: Uint8Array | ArrayBuffer, startIndex: number, numberOfDocuments: number, documents: Document[], docStartIndex: number, options: DeserializeOptions): number; + +/** @public */ +export declare interface Document { + [key: string]: any; +} + +/** + * A class representation of the BSON Double type. + * @public + * @category BSONType + */ +export declare class Double extends BSONValue { + get _bsontype(): 'Double'; + value: number; + /** + * Create a Double type + * + * @param value - the number we want to represent as a double. + */ + constructor(value: number); + /** + * Access the number value. + * + * @returns returns the wrapped double number. + */ + valueOf(): number; + toJSON(): number; + toString(radix?: number): string; + /* Excluded from this release type: toExtendedJSON */ + /* Excluded from this release type: fromExtendedJSON */ + inspect(): string; +} + +/** @public */ +export declare interface DoubleExtended { + $numberDouble: string; +} + +/** @public */ +export declare const EJSON: { + parse: typeof parse; + stringify: typeof stringify; + serialize: typeof EJSONserialize; + deserialize: typeof EJSONdeserialize; +}; + +/** + * Deserializes an Extended JSON object into a plain JavaScript object with native/BSON types + * + * @param ejson - The Extended JSON object to deserialize + * @param options - Optional settings passed to the parse method + */ +declare function EJSONdeserialize(ejson: Document, options?: EJSONOptions): any; + +/** @public */ +export declare type EJSONOptions = { + /** + * Output using the Extended JSON v1 spec + * @defaultValue `false` + */ + legacy?: boolean; + /** + * Enable Extended JSON's `relaxed` mode, which attempts to return native JS types where possible, rather than BSON types + * @defaultValue `false` */ + relaxed?: boolean; + /** + * Enable native bigint support + * @defaultValue `false` + */ + useBigInt64?: boolean; +}; + +/** + * Serializes an object to an Extended JSON string, and reparse it as a JavaScript object. + * + * @param value - The object to serialize + * @param options - Optional settings passed to the `stringify` function + */ +declare function EJSONserialize(value: any, options?: EJSONOptions): Document; + +/** + * A class representation of a BSON Int32 type. + * @public + * @category BSONType + */ +export declare class Int32 extends BSONValue { + get _bsontype(): 'Int32'; + value: number; + /** + * Create an Int32 type + * + * @param value - the number we want to represent as an int32. + */ + constructor(value: number | string); + /** + * Access the number value. + * + * @returns returns the wrapped int32 number. + */ + valueOf(): number; + toString(radix?: number): string; + toJSON(): number; + /* Excluded from this release type: toExtendedJSON */ + /* Excluded from this release type: fromExtendedJSON */ + inspect(): string; +} + +/** @public */ +export declare interface Int32Extended { + $numberInt: string; +} + +declare const kId: unique symbol; + +/** + * A class representing a 64-bit integer + * @public + * @category BSONType + * @remarks + * 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 found as static properties on this class. + */ +export declare class Long extends BSONValue { + get _bsontype(): 'Long'; + /** An indicator used to reliably determine if an object is a Long or not. */ + get __isLong__(): boolean; + /** + * 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; + /** + * 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. + * + * Acceptable signatures are: + * - Long(low, high, unsigned?) + * - Long(bigint, unsigned?) + * - Long(string, unsigned?) + * + * @param low - The low (signed) 32 bits of the long + * @param high - The high (signed) 32 bits of the long + * @param unsigned - Whether unsigned or not, defaults to signed + */ + constructor(low?: number | bigint | string, high?: number | boolean, unsigned?: boolean); + static TWO_PWR_24: Long; + /** Maximum unsigned value. */ + static MAX_UNSIGNED_VALUE: Long; + /** Signed zero */ + static ZERO: Long; + /** Unsigned zero. */ + static UZERO: Long; + /** Signed one. */ + static ONE: Long; + /** Unsigned one. */ + static UONE: Long; + /** Signed negative one. */ + static NEG_ONE: Long; + /** Maximum signed value. */ + static MAX_VALUE: Long; + /** Minimum signed value. */ + static MIN_VALUE: 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. + * @param lowBits - The low 32 bits + * @param highBits - The high 32 bits + * @param unsigned - Whether unsigned or not, defaults to signed + * @returns The corresponding Long value + */ + static fromBits(lowBits: number, highBits: number, unsigned?: boolean): Long; + /** + * Returns a Long representing the given 32 bit integer value. + * @param value - The 32 bit integer in question + * @param unsigned - Whether unsigned or not, defaults to signed + * @returns The corresponding Long 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. + * @param value - The number in question + * @param unsigned - Whether unsigned or not, defaults to signed + * @returns The corresponding Long value + */ + static fromNumber(value: number, unsigned?: boolean): Long; + /** + * Returns a Long representing the given value, provided that it is a finite number. Otherwise, zero is returned. + * @param value - The number in question + * @param unsigned - Whether unsigned or not, defaults to signed + * @returns The corresponding Long value + */ + static fromBigInt(value: bigint, unsigned?: boolean): Long; + /** + * Returns a Long representation of the given string, written using the specified radix. + * @param str - The textual representation of the Long + * @param unsigned - Whether unsigned or not, defaults to signed + * @param radix - The radix in which the text is written (2-36), defaults to 10 + * @returns The corresponding Long value + */ + static fromString(str: string, unsigned?: boolean, radix?: number): Long; + /** + * Creates a Long from its byte representation. + * @param bytes - Byte representation + * @param unsigned - Whether unsigned or not, defaults to signed + * @param le - Whether little or big endian, defaults to big endian + * @returns The corresponding Long value + */ + static fromBytes(bytes: number[], unsigned?: boolean, le?: boolean): Long; + /** + * Creates a Long from its little endian byte representation. + * @param bytes - Little endian byte representation + * @param unsigned - Whether unsigned or not, defaults to signed + * @returns The corresponding Long value + */ + static fromBytesLE(bytes: number[], unsigned?: boolean): Long; + /** + * Creates a Long from its big endian byte representation. + * @param bytes - Big endian byte representation + * @param unsigned - Whether unsigned or not, defaults to signed + * @returns The corresponding Long value + */ + static fromBytesBE(bytes: number[], unsigned?: boolean): Long; + /** + * Tests if the specified object is a Long. + */ + static isLong(value: unknown): value is Long; + /** + * Converts the specified value to a Long. + * @param unsigned - Whether unsigned or not, defaults to signed + */ + static fromValue(val: number | string | { + low: number; + high: number; + unsigned?: boolean; + }, unsigned?: boolean): Long; + /** Returns the sum of this and the specified Long. */ + add(addend: string | number | Long | Timestamp): Long; + /** + * Returns the sum of this and the specified Long. + * @returns Sum + */ + and(other: string | number | Long | Timestamp): Long; + /** + * 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 + */ + compare(other: string | number | Long | Timestamp): 0 | 1 | -1; + /** This is an alias of {@link Long.compare} */ + comp(other: string | number | Long | Timestamp): 0 | 1 | -1; + /** + * Returns this Long divided by the specified. The result is signed if this Long is signed or unsigned if this Long is unsigned. + * @returns Quotient + */ + divide(divisor: string | number | Long | Timestamp): Long; + /**This is an alias of {@link Long.divide} */ + div(divisor: string | number | Long | Timestamp): Long; + /** + * Tests if this Long's value equals the specified's. + * @param other - Other value + */ + equals(other: string | number | Long | Timestamp): boolean; + /** This is an alias of {@link Long.equals} */ + eq(other: string | number | Long | Timestamp): 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: string | number | Long | Timestamp): boolean; + /** This is an alias of {@link Long.greaterThan} */ + gt(other: string | number | Long | Timestamp): boolean; + /** Tests if this Long's value is greater than or equal the specified's. */ + greaterThanOrEqual(other: string | number | Long | Timestamp): boolean; + /** This is an alias of {@link Long.greaterThanOrEqual} */ + gte(other: string | number | Long | Timestamp): boolean; + /** This is an alias of {@link Long.greaterThanOrEqual} */ + ge(other: string | number | Long | Timestamp): 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. */ + isPositive(): boolean; + /** Tests if this Long's value equals zero. */ + isZero(): boolean; + /** Tests if this Long's value is less than the specified's. */ + lessThan(other: string | number | Long | Timestamp): boolean; + /** This is an alias of {@link Long#lessThan}. */ + lt(other: string | number | Long | Timestamp): boolean; + /** Tests if this Long's value is less than or equal the specified's. */ + lessThanOrEqual(other: string | number | Long | Timestamp): boolean; + /** This is an alias of {@link Long.lessThanOrEqual} */ + lte(other: string | number | Long | Timestamp): boolean; + /** Returns this Long modulo the specified. */ + modulo(divisor: string | number | Long | Timestamp): Long; + /** This is an alias of {@link Long.modulo} */ + mod(divisor: string | number | Long | Timestamp): Long; + /** This is an alias of {@link Long.modulo} */ + rem(divisor: string | number | Long | Timestamp): Long; + /** + * Returns the product of this and the specified Long. + * @param multiplier - Multiplier + * @returns Product + */ + multiply(multiplier: string | number | Long | Timestamp): Long; + /** This is an alias of {@link Long.multiply} */ + mul(multiplier: string | number | Long | Timestamp): Long; + /** Returns the Negation of this Long's value. */ + negate(): Long; + /** This is an alias of {@link Long.negate} */ + neg(): Long; + /** Returns the bitwise NOT of this Long. */ + not(): Long; + /** Tests if this Long's value differs from the specified's. */ + notEquals(other: string | number | Long | Timestamp): boolean; + /** This is an alias of {@link Long.notEquals} */ + neq(other: string | number | Long | Timestamp): boolean; + /** This is an alias of {@link Long.notEquals} */ + ne(other: string | number | Long | Timestamp): boolean; + /** + * Returns the bitwise OR of this Long and the specified. + */ + or(other: number | string | Long): Long; + /** + * Returns this Long with bits shifted to the left by the given amount. + * @param numBits - Number of bits + * @returns Shifted Long + */ + shiftLeft(numBits: number | Long): Long; + /** This is an alias of {@link Long.shiftLeft} */ + shl(numBits: number | Long): Long; + /** + * Returns this Long with bits arithmetically shifted to the right by the given amount. + * @param numBits - Number of bits + * @returns Shifted Long + */ + shiftRight(numBits: number | Long): Long; + /** This is an alias of {@link Long.shiftRight} */ + shr(numBits: number | Long): Long; + /** + * Returns this Long with bits logically shifted to the right by the given amount. + * @param numBits - Number of bits + * @returns Shifted Long + */ + shiftRightUnsigned(numBits: Long | number): Long; + /** This is an alias of {@link Long.shiftRightUnsigned} */ + shr_u(numBits: number | Long): Long; + /** This is an alias of {@link Long.shiftRightUnsigned} */ + shru(numBits: number | Long): Long; + /** + * Returns the difference of this and the specified Long. + * @param subtrahend - Subtrahend + * @returns Difference + */ + subtract(subtrahend: string | number | Long | Timestamp): Long; + /** This is an alias of {@link Long.subtract} */ + sub(subtrahend: string | number | Long | Timestamp): Long; + /** 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 the Long to a BigInt (arbitrary precision). */ + toBigInt(): bigint; + /** + * Converts this Long to its byte representation. + * @param le - Whether little or big endian, defaults to big endian + * @returns Byte representation + */ + toBytes(le?: boolean): number[]; + /** + * Converts this Long to its little endian byte representation. + * @returns Little endian byte representation + */ + toBytesLE(): number[]; + /** + * Converts this Long to its big endian byte representation. + * @returns Big endian byte representation + */ + toBytesBE(): number[]; + /** + * Converts this Long to signed. + */ + toSigned(): Long; + /** + * Converts the Long to a string written in the specified radix. + * @param radix - Radix (2-36), defaults to 10 + * @throws RangeError If `radix` is out of range + */ + toString(radix?: number): string; + /** Converts this Long to unsigned. */ + toUnsigned(): Long; + /** Returns the bitwise XOR of this Long and the given one. */ + xor(other: Long | number | string): Long; + /** This is an alias of {@link Long.isZero} */ + eqz(): boolean; + /** This is an alias of {@link Long.lessThanOrEqual} */ + le(other: string | number | Long | Timestamp): boolean; + toExtendedJSON(options?: EJSONOptions): number | LongExtended; + static fromExtendedJSON(doc: { + $numberLong: string; + }, options?: EJSONOptions): number | Long | bigint; + inspect(): string; +} + +/** @public */ +export declare interface LongExtended { + $numberLong: string; +} + +/** @public */ +export declare type LongWithoutOverrides = new (low: unknown, high?: number | boolean, unsigned?: boolean) => { + [P in Exclude]: Long[P]; +}; + +/** @public */ +export declare const LongWithoutOverridesClass: LongWithoutOverrides; + +/** + * A class representation of the BSON MaxKey type. + * @public + * @category BSONType + */ +export declare class MaxKey extends BSONValue { + get _bsontype(): 'MaxKey'; + /* Excluded from this release type: toExtendedJSON */ + /* Excluded from this release type: fromExtendedJSON */ + inspect(): string; +} + +/** @public */ +export declare interface MaxKeyExtended { + $maxKey: 1; +} + +/** + * A class representation of the BSON MinKey type. + * @public + * @category BSONType + */ +export declare class MinKey extends BSONValue { + get _bsontype(): 'MinKey'; + /* Excluded from this release type: toExtendedJSON */ + /* Excluded from this release type: fromExtendedJSON */ + inspect(): string; +} + +/** @public */ +export declare interface MinKeyExtended { + $minKey: 1; +} + +/** + * A class representation of the BSON ObjectId type. + * @public + * @category BSONType + */ +export declare class ObjectId extends BSONValue { + get _bsontype(): 'ObjectId'; + /* Excluded from this release type: index */ + static cacheHexString: boolean; + /* Excluded from this release type: [kId] */ + /* Excluded from this release type: __id */ + /** + * Create an ObjectId type + * + * @param inputId - Can be a 24 character hex string, 12 byte binary Buffer, or a number. + */ + constructor(inputId?: string | number | ObjectId | ObjectIdLike | Uint8Array); + /** + * The ObjectId bytes + * @readonly + */ + get id(): Uint8Array; + set id(value: Uint8Array); + /** Returns the ObjectId id as a 24 character hex string representation */ + toHexString(): string; + /* Excluded from this release type: getInc */ + /** + * Generate a 12 byte id buffer used in ObjectId's + * + * @param time - pass in a second based timestamp. + */ + static generate(time?: number): Uint8Array; + /** + * Converts the id into a 24 character hex string for printing, unless encoding is provided. + * @param encoding - hex or base64 + */ + toString(encoding?: 'hex' | 'base64'): string; + /** Converts to its JSON the 24 character hex string representation. */ + toJSON(): string; + /** + * Compares the equality of this ObjectId with `otherID`. + * + * @param otherId - ObjectId instance to compare against. + */ + equals(otherId: string | ObjectId | ObjectIdLike): boolean; + /** Returns the generation date (accurate up to the second) that this ID was generated. */ + getTimestamp(): Date; + /* Excluded from this release type: createPk */ + /** + * Creates an ObjectId from a second based number, with the rest of the ObjectId zeroed out. Used for comparisons or sorting the ObjectId. + * + * @param time - an integer number representing a number of seconds. + */ + static createFromTime(time: number): ObjectId; + /** + * Creates an ObjectId from a hex string representation of an ObjectId. + * + * @param hexString - create a ObjectId from a passed in 24 character hexstring. + */ + static createFromHexString(hexString: string): ObjectId; + /** Creates an ObjectId instance from a base64 string */ + static createFromBase64(base64: string): ObjectId; + /** + * Checks if a value is a valid bson ObjectId + * + * @param id - ObjectId instance to validate. + */ + static isValid(id: string | number | ObjectId | ObjectIdLike | Uint8Array): boolean; + /* Excluded from this release type: toExtendedJSON */ + /* Excluded from this release type: fromExtendedJSON */ + inspect(): string; +} + +/** @public */ +export declare interface ObjectIdExtended { + $oid: string; +} + +/** @public */ +export declare interface ObjectIdLike { + id: string | Uint8Array; + __id?: string; + toHexString(): string; +} + +/** + * Parse an Extended JSON string, constructing the JavaScript value or object described by that + * string. + * + * @example + * ```js + * const { EJSON } = require('bson'); + * const text = '{ "int32": { "$numberInt": "10" } }'; + * + * // prints { int32: { [String: '10'] _bsontype: 'Int32', value: '10' } } + * console.log(EJSON.parse(text, { relaxed: false })); + * + * // prints { int32: 10 } + * console.log(EJSON.parse(text)); + * ``` + */ +declare function parse(text: string, options?: EJSONOptions): any; + +/** + * Serialize a Javascript object. + * + * @param object - the Javascript object to serialize. + * @returns Buffer object containing the serialized object. + * @public + */ +export declare function serialize(object: Document, options?: SerializeOptions): Uint8Array; + +/** @public */ +export declare interface SerializeOptions { + /** + * the serializer will check if keys are valid. + * @defaultValue `false` + */ + checkKeys?: boolean; + /** + * serialize the javascript functions + * @defaultValue `false` + */ + serializeFunctions?: boolean; + /** + * serialize will not emit undefined fields + * note that the driver sets this to `false` + * @defaultValue `true` + */ + ignoreUndefined?: boolean; + /* Excluded from this release type: minInternalBufferSize */ + /** + * the index in the buffer where we wish to start serializing into + * @defaultValue `0` + */ + index?: number; +} + +/** + * Serialize a Javascript object using a predefined Buffer and index into the buffer, + * useful when pre-allocating the space for serialization. + * + * @param object - the Javascript object to serialize. + * @param finalBuffer - the Buffer you pre-allocated to store the serialized BSON object. + * @returns the index pointing to the last written byte in the buffer. + * @public + */ +export declare function serializeWithBufferAndIndex(object: Document, finalBuffer: Uint8Array, options?: SerializeOptions): number; + +/** + * Sets the size of the internal serialization buffer. + * + * @param size - The desired size for the internal serialization buffer in bytes + * @public + */ +export declare function setInternalBufferSize(size: number): void; + +/** + * Converts a BSON document to an Extended JSON string, optionally replacing values if a replacer + * function is specified or optionally including only the specified properties if a replacer array + * is specified. + * + * @param value - The value to convert to extended JSON + * @param replacer - A function that alters the behavior of the stringification process, or an array of String and Number objects that serve as a whitelist for selecting/filtering the properties of the value object to be included in the JSON string. If this value is null or not provided, all properties of the object are included in the resulting JSON string + * @param space - A String or Number object that's used to insert white space into the output JSON string for readability purposes. + * @param options - Optional settings + * + * @example + * ```js + * const { EJSON } = require('bson'); + * const Int32 = require('mongodb').Int32; + * const doc = { int32: new Int32(10) }; + * + * // prints '{"int32":{"$numberInt":"10"}}' + * console.log(EJSON.stringify(doc, { relaxed: false })); + * + * // prints '{"int32":10}' + * console.log(EJSON.stringify(doc)); + * ``` + */ +declare function stringify(value: any, replacer?: (number | string)[] | ((this: any, key: string, value: any) => any) | EJSONOptions, space?: string | number, options?: EJSONOptions): string; + +/** + * @public + * @category BSONType + */ +export declare class Timestamp extends LongWithoutOverridesClass { + get _bsontype(): 'Timestamp'; + static readonly MAX_VALUE: Long; + /** + * @param int - A 64-bit bigint representing the Timestamp. + */ + constructor(int: bigint); + /** + * @param long - A 64-bit Long representing the Timestamp. + */ + constructor(long: Long); + /** + * @param value - A pair of two values indicating timestamp and increment. + */ + constructor(value: { + t: number; + i: number; + }); + toJSON(): { + $timestamp: string; + }; + /** Returns a Timestamp represented by the given (32-bit) integer value. */ + static fromInt(value: number): Timestamp; + /** Returns a Timestamp representing the given number value, provided that it is a finite number. Otherwise, zero is returned. */ + static fromNumber(value: number): Timestamp; + /** + * Returns a Timestamp for the given high and low bits. Each is assumed to use 32 bits. + * + * @param lowBits - the low 32-bits. + * @param highBits - the high 32-bits. + */ + static fromBits(lowBits: number, highBits: number): Timestamp; + /** + * Returns a Timestamp from the given string, optionally using the given radix. + * + * @param str - the textual representation of the Timestamp. + * @param optRadix - the radix in which the text is written. + */ + static fromString(str: string, optRadix: number): Timestamp; + /* Excluded from this release type: toExtendedJSON */ + /* Excluded from this release type: fromExtendedJSON */ + inspect(): string; +} + +/** @public */ +export declare interface TimestampExtended { + $timestamp: { + t: number; + i: number; + }; +} + +/** @public */ +export declare type TimestampOverrides = '_bsontype' | 'toExtendedJSON' | 'fromExtendedJSON' | 'inspect'; + +/** + * A class representation of the BSON UUID type. + * @public + */ +export declare class UUID extends Binary { + /** @deprecated Hex string is no longer cached, this control will be removed in a future major release */ + static cacheHexString: boolean; + /** + * Create a UUID type + * + * When the argument to the constructor is omitted a random v4 UUID will be generated. + * + * @param input - Can be a 32 or 36 character hex string (dashes excluded/included) or a 16 byte binary Buffer. + */ + constructor(input?: string | Uint8Array | UUID); + /** + * The UUID bytes + * @readonly + */ + get id(): Uint8Array; + set id(value: Uint8Array); + /** + * Returns the UUID id as a 32 or 36 character hex string representation, excluding/including dashes (defaults to 36 character dash separated) + * @param includeDashes - should the string exclude dash-separators. + */ + toHexString(includeDashes?: boolean): string; + /** + * Converts the id into a 36 character (dashes included) hex string, unless a encoding is specified. + */ + toString(encoding?: 'hex' | 'base64'): string; + /** + * Converts the id into its JSON string representation. + * A 36 character (dashes included) hex string in the format: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx + */ + toJSON(): string; + /** + * Compares the equality of this UUID with `otherID`. + * + * @param otherId - UUID instance to compare against. + */ + equals(otherId: string | Uint8Array | UUID): boolean; + /** + * Creates a Binary instance from the current UUID. + */ + toBinary(): Binary; + /** + * Generates a populated buffer containing a v4 uuid + */ + static generate(): Uint8Array; + /** + * Checks if a value is a valid bson UUID + * @param input - UUID, string or Buffer to validate. + */ + static isValid(input: string | Uint8Array | UUID | Binary): boolean; + /** + * Creates an UUID from a hex string representation of an UUID. + * @param hexString - 32 or 36 character hex string (dashes excluded/included). + */ + static createFromHexString(hexString: string): UUID; + /** Creates an UUID from a base64 string representation of an UUID. */ + static createFromBase64(base64: string): UUID; + /* Excluded from this release type: bytesFromString */ + /* Excluded from this release type: isValidUUIDString */ + inspect(): string; +} + +/** @public */ +export declare type UUIDExtended = { + $uuid: string; +}; + +export { } diff --git a/Url-Shortner/node_modules/bson/etc/prepare.js b/Url-Shortner/node_modules/bson/etc/prepare.js new file mode 100644 index 0000000..91e6f3a --- /dev/null +++ b/Url-Shortner/node_modules/bson/etc/prepare.js @@ -0,0 +1,19 @@ +#! /usr/bin/env node +var cp = require('child_process'); +var fs = require('fs'); + +var nodeMajorVersion = +process.version.match(/^v(\d+)\.\d+/)[1]; + +if (fs.existsSync('src') && nodeMajorVersion >= 10) { + cp.spawnSync('npm', ['run', 'build'], { stdio: 'inherit', shell: true }); +} else { + if (!fs.existsSync('lib')) { + console.warn('BSON: No compiled javascript present, the library is not installed correctly.'); + if (nodeMajorVersion < 10) { + console.warn( + 'This library can only be compiled in nodejs version 10 or later, currently running: ' + + nodeMajorVersion + ); + } + } +} diff --git a/Url-Shortner/node_modules/bson/lib/bson.bundle.js b/Url-Shortner/node_modules/bson/lib/bson.bundle.js new file mode 100644 index 0000000..acbac2f --- /dev/null +++ b/Url-Shortner/node_modules/bson/lib/bson.bundle.js @@ -0,0 +1,4149 @@ +var BSON = (function (exports) { +'use strict'; + +function isAnyArrayBuffer(value) { + return ['[object ArrayBuffer]', '[object SharedArrayBuffer]'].includes(Object.prototype.toString.call(value)); +} +function isUint8Array(value) { + return Object.prototype.toString.call(value) === '[object Uint8Array]'; +} +function isRegExp(d) { + return Object.prototype.toString.call(d) === '[object RegExp]'; +} +function isMap(d) { + return Object.prototype.toString.call(d) === '[object Map]'; +} +function isDate(d) { + return Object.prototype.toString.call(d) === '[object Date]'; +} + +const BSON_MAJOR_VERSION = 5; +const BSON_INT32_MAX = 0x7fffffff; +const BSON_INT32_MIN = -0x80000000; +const BSON_INT64_MAX = Math.pow(2, 63) - 1; +const BSON_INT64_MIN = -Math.pow(2, 63); +const JS_INT_MAX = Math.pow(2, 53); +const JS_INT_MIN = -Math.pow(2, 53); +const BSON_DATA_NUMBER = 1; +const BSON_DATA_STRING = 2; +const BSON_DATA_OBJECT = 3; +const BSON_DATA_ARRAY = 4; +const BSON_DATA_BINARY = 5; +const BSON_DATA_UNDEFINED = 6; +const BSON_DATA_OID = 7; +const BSON_DATA_BOOLEAN = 8; +const BSON_DATA_DATE = 9; +const BSON_DATA_NULL = 10; +const BSON_DATA_REGEXP = 11; +const BSON_DATA_DBPOINTER = 12; +const BSON_DATA_CODE = 13; +const BSON_DATA_SYMBOL = 14; +const BSON_DATA_CODE_W_SCOPE = 15; +const BSON_DATA_INT = 16; +const BSON_DATA_TIMESTAMP = 17; +const BSON_DATA_LONG = 18; +const BSON_DATA_DECIMAL128 = 19; +const BSON_DATA_MIN_KEY = 0xff; +const BSON_DATA_MAX_KEY = 0x7f; +const BSON_BINARY_SUBTYPE_DEFAULT = 0; +const BSON_BINARY_SUBTYPE_UUID_NEW = 4; +const BSONType = Object.freeze({ + double: 1, + string: 2, + object: 3, + array: 4, + binData: 5, + undefined: 6, + objectId: 7, + bool: 8, + date: 9, + null: 10, + regex: 11, + dbPointer: 12, + javascript: 13, + symbol: 14, + javascriptWithScope: 15, + int: 16, + timestamp: 17, + long: 18, + decimal: 19, + minKey: -1, + maxKey: 127 +}); + +class BSONError extends Error { + get bsonError() { + return true; + } + get name() { + return 'BSONError'; + } + constructor(message) { + super(message); + } + static isBSONError(value) { + return (value != null && + typeof value === 'object' && + 'bsonError' in value && + value.bsonError === true && + 'name' in value && + 'message' in value && + 'stack' in value); + } +} +class BSONVersionError extends BSONError { + get name() { + return 'BSONVersionError'; + } + constructor() { + super(`Unsupported BSON version, bson types must be from bson ${BSON_MAJOR_VERSION}.0 or later`); + } +} +class BSONRuntimeError extends BSONError { + get name() { + return 'BSONRuntimeError'; + } + constructor(message) { + super(message); + } +} + +function nodejsMathRandomBytes(byteLength) { + return nodeJsByteUtils.fromNumberArray(Array.from({ length: byteLength }, () => Math.floor(Math.random() * 256))); +} +const nodejsRandomBytes = (() => { + try { + return require('crypto').randomBytes; + } + catch { + return nodejsMathRandomBytes; + } +})(); +const nodeJsByteUtils = { + toLocalBufferType(potentialBuffer) { + if (Buffer.isBuffer(potentialBuffer)) { + return potentialBuffer; + } + if (ArrayBuffer.isView(potentialBuffer)) { + return Buffer.from(potentialBuffer.buffer, potentialBuffer.byteOffset, potentialBuffer.byteLength); + } + const stringTag = potentialBuffer?.[Symbol.toStringTag] ?? Object.prototype.toString.call(potentialBuffer); + if (stringTag === 'ArrayBuffer' || + stringTag === 'SharedArrayBuffer' || + stringTag === '[object ArrayBuffer]' || + stringTag === '[object SharedArrayBuffer]') { + return Buffer.from(potentialBuffer); + } + throw new BSONError(`Cannot create Buffer from ${String(potentialBuffer)}`); + }, + allocate(size) { + return Buffer.alloc(size); + }, + equals(a, b) { + return nodeJsByteUtils.toLocalBufferType(a).equals(b); + }, + fromNumberArray(array) { + return Buffer.from(array); + }, + fromBase64(base64) { + return Buffer.from(base64, 'base64'); + }, + toBase64(buffer) { + return nodeJsByteUtils.toLocalBufferType(buffer).toString('base64'); + }, + fromISO88591(codePoints) { + return Buffer.from(codePoints, 'binary'); + }, + toISO88591(buffer) { + return nodeJsByteUtils.toLocalBufferType(buffer).toString('binary'); + }, + fromHex(hex) { + return Buffer.from(hex, 'hex'); + }, + toHex(buffer) { + return nodeJsByteUtils.toLocalBufferType(buffer).toString('hex'); + }, + fromUTF8(text) { + return Buffer.from(text, 'utf8'); + }, + toUTF8(buffer, start, end) { + return nodeJsByteUtils.toLocalBufferType(buffer).toString('utf8', start, end); + }, + utf8ByteLength(input) { + return Buffer.byteLength(input, 'utf8'); + }, + encodeUTF8Into(buffer, source, byteOffset) { + return nodeJsByteUtils.toLocalBufferType(buffer).write(source, byteOffset, undefined, 'utf8'); + }, + randomBytes: nodejsRandomBytes +}; + +function isReactNative() { + const { navigator } = globalThis; + return typeof navigator === 'object' && navigator.product === 'ReactNative'; +} +function webMathRandomBytes(byteLength) { + if (byteLength < 0) { + throw new RangeError(`The argument 'byteLength' is invalid. Received ${byteLength}`); + } + return webByteUtils.fromNumberArray(Array.from({ length: byteLength }, () => Math.floor(Math.random() * 256))); +} +const webRandomBytes = (() => { + const { crypto } = globalThis; + if (crypto != null && typeof crypto.getRandomValues === 'function') { + return (byteLength) => { + return crypto.getRandomValues(webByteUtils.allocate(byteLength)); + }; + } + else { + if (isReactNative()) { + const { console } = globalThis; + console?.warn?.('BSON: For React Native please polyfill crypto.getRandomValues, e.g. using: https://www.npmjs.com/package/react-native-get-random-values.'); + } + return webMathRandomBytes; + } +})(); +const HEX_DIGIT = /(\d|[a-f])/i; +const webByteUtils = { + toLocalBufferType(potentialUint8array) { + const stringTag = potentialUint8array?.[Symbol.toStringTag] ?? + Object.prototype.toString.call(potentialUint8array); + if (stringTag === 'Uint8Array') { + return potentialUint8array; + } + if (ArrayBuffer.isView(potentialUint8array)) { + return new Uint8Array(potentialUint8array.buffer.slice(potentialUint8array.byteOffset, potentialUint8array.byteOffset + potentialUint8array.byteLength)); + } + if (stringTag === 'ArrayBuffer' || + stringTag === 'SharedArrayBuffer' || + stringTag === '[object ArrayBuffer]' || + stringTag === '[object SharedArrayBuffer]') { + return new Uint8Array(potentialUint8array); + } + throw new BSONError(`Cannot make a Uint8Array from ${String(potentialUint8array)}`); + }, + allocate(size) { + if (typeof size !== 'number') { + throw new TypeError(`The "size" argument must be of type number. Received ${String(size)}`); + } + return new Uint8Array(size); + }, + equals(a, b) { + if (a.byteLength !== b.byteLength) { + return false; + } + for (let i = 0; i < a.byteLength; i++) { + if (a[i] !== b[i]) { + return false; + } + } + return true; + }, + fromNumberArray(array) { + return Uint8Array.from(array); + }, + fromBase64(base64) { + return Uint8Array.from(atob(base64), c => c.charCodeAt(0)); + }, + toBase64(uint8array) { + return btoa(webByteUtils.toISO88591(uint8array)); + }, + fromISO88591(codePoints) { + return Uint8Array.from(codePoints, c => c.charCodeAt(0) & 0xff); + }, + toISO88591(uint8array) { + return Array.from(Uint16Array.from(uint8array), b => String.fromCharCode(b)).join(''); + }, + fromHex(hex) { + const evenLengthHex = hex.length % 2 === 0 ? hex : hex.slice(0, hex.length - 1); + const buffer = []; + for (let i = 0; i < evenLengthHex.length; i += 2) { + const firstDigit = evenLengthHex[i]; + const secondDigit = evenLengthHex[i + 1]; + if (!HEX_DIGIT.test(firstDigit)) { + break; + } + if (!HEX_DIGIT.test(secondDigit)) { + break; + } + const hexDigit = Number.parseInt(`${firstDigit}${secondDigit}`, 16); + buffer.push(hexDigit); + } + return Uint8Array.from(buffer); + }, + toHex(uint8array) { + return Array.from(uint8array, byte => byte.toString(16).padStart(2, '0')).join(''); + }, + fromUTF8(text) { + return new TextEncoder().encode(text); + }, + toUTF8(uint8array, start, end) { + return new TextDecoder('utf8', { fatal: false }).decode(uint8array.slice(start, end)); + }, + utf8ByteLength(input) { + return webByteUtils.fromUTF8(input).byteLength; + }, + encodeUTF8Into(buffer, source, byteOffset) { + const bytes = webByteUtils.fromUTF8(source); + buffer.set(bytes, byteOffset); + return bytes.byteLength; + }, + randomBytes: webRandomBytes +}; + +const hasGlobalBuffer = typeof Buffer === 'function' && Buffer.prototype?._isBuffer !== true; +const ByteUtils = hasGlobalBuffer ? nodeJsByteUtils : webByteUtils; +class BSONDataView extends DataView { + static fromUint8Array(input) { + return new DataView(input.buffer, input.byteOffset, input.byteLength); + } +} + +class BSONValue { + get [Symbol.for('@@mdb.bson.version')]() { + return BSON_MAJOR_VERSION; + } +} + +class Binary extends BSONValue { + get _bsontype() { + return 'Binary'; + } + constructor(buffer, subType) { + super(); + if (!(buffer == null) && + !(typeof buffer === 'string') && + !ArrayBuffer.isView(buffer) && + !(buffer instanceof ArrayBuffer) && + !Array.isArray(buffer)) { + throw new BSONError('Binary can only be constructed from string, Buffer, TypedArray, or Array'); + } + this.sub_type = subType ?? Binary.BSON_BINARY_SUBTYPE_DEFAULT; + if (buffer == null) { + this.buffer = ByteUtils.allocate(Binary.BUFFER_SIZE); + this.position = 0; + } + else { + if (typeof buffer === 'string') { + this.buffer = ByteUtils.fromISO88591(buffer); + } + else if (Array.isArray(buffer)) { + this.buffer = ByteUtils.fromNumberArray(buffer); + } + else { + this.buffer = ByteUtils.toLocalBufferType(buffer); + } + this.position = this.buffer.byteLength; + } + } + put(byteValue) { + if (typeof byteValue === 'string' && byteValue.length !== 1) { + throw new BSONError('only accepts single character String'); + } + else if (typeof byteValue !== 'number' && byteValue.length !== 1) + throw new BSONError('only accepts single character Uint8Array or Array'); + let decodedByte; + if (typeof byteValue === 'string') { + decodedByte = byteValue.charCodeAt(0); + } + else if (typeof byteValue === 'number') { + decodedByte = byteValue; + } + else { + decodedByte = byteValue[0]; + } + if (decodedByte < 0 || decodedByte > 255) { + throw new BSONError('only accepts number in a valid unsigned byte range 0-255'); + } + if (this.buffer.byteLength > this.position) { + this.buffer[this.position++] = decodedByte; + } + else { + const newSpace = ByteUtils.allocate(Binary.BUFFER_SIZE + this.buffer.length); + newSpace.set(this.buffer, 0); + this.buffer = newSpace; + this.buffer[this.position++] = decodedByte; + } + } + write(sequence, offset) { + offset = typeof offset === 'number' ? offset : this.position; + if (this.buffer.byteLength < offset + sequence.length) { + const newSpace = ByteUtils.allocate(this.buffer.byteLength + sequence.length); + newSpace.set(this.buffer, 0); + this.buffer = newSpace; + } + if (ArrayBuffer.isView(sequence)) { + this.buffer.set(ByteUtils.toLocalBufferType(sequence), offset); + this.position = + offset + sequence.byteLength > this.position ? offset + sequence.length : this.position; + } + else if (typeof sequence === 'string') { + const bytes = ByteUtils.fromISO88591(sequence); + this.buffer.set(bytes, offset); + this.position = + offset + sequence.length > this.position ? offset + sequence.length : this.position; + } + } + read(position, length) { + length = length && length > 0 ? length : this.position; + return this.buffer.slice(position, position + length); + } + value(asRaw) { + asRaw = !!asRaw; + if (asRaw && this.buffer.length === this.position) { + return this.buffer; + } + if (asRaw) { + return this.buffer.slice(0, this.position); + } + return ByteUtils.toISO88591(this.buffer.subarray(0, this.position)); + } + length() { + return this.position; + } + toJSON() { + return ByteUtils.toBase64(this.buffer); + } + toString(encoding) { + if (encoding === 'hex') + return ByteUtils.toHex(this.buffer); + if (encoding === 'base64') + return ByteUtils.toBase64(this.buffer); + if (encoding === 'utf8' || encoding === 'utf-8') + return ByteUtils.toUTF8(this.buffer, 0, this.buffer.byteLength); + return ByteUtils.toUTF8(this.buffer, 0, this.buffer.byteLength); + } + toExtendedJSON(options) { + options = options || {}; + const base64String = ByteUtils.toBase64(this.buffer); + const subType = Number(this.sub_type).toString(16); + if (options.legacy) { + return { + $binary: base64String, + $type: subType.length === 1 ? '0' + subType : subType + }; + } + return { + $binary: { + base64: base64String, + subType: subType.length === 1 ? '0' + subType : subType + } + }; + } + toUUID() { + if (this.sub_type === Binary.SUBTYPE_UUID) { + return new UUID(this.buffer.slice(0, this.position)); + } + throw new BSONError(`Binary sub_type "${this.sub_type}" is not supported for converting to UUID. Only "${Binary.SUBTYPE_UUID}" is currently supported.`); + } + static createFromHexString(hex, subType) { + return new Binary(ByteUtils.fromHex(hex), subType); + } + static createFromBase64(base64, subType) { + return new Binary(ByteUtils.fromBase64(base64), subType); + } + static fromExtendedJSON(doc, options) { + options = options || {}; + let data; + let type; + if ('$binary' in doc) { + if (options.legacy && typeof doc.$binary === 'string' && '$type' in doc) { + type = doc.$type ? parseInt(doc.$type, 16) : 0; + data = ByteUtils.fromBase64(doc.$binary); + } + else { + if (typeof doc.$binary !== 'string') { + type = doc.$binary.subType ? parseInt(doc.$binary.subType, 16) : 0; + data = ByteUtils.fromBase64(doc.$binary.base64); + } + } + } + else if ('$uuid' in doc) { + type = 4; + data = UUID.bytesFromString(doc.$uuid); + } + if (!data) { + throw new BSONError(`Unexpected Binary Extended JSON format ${JSON.stringify(doc)}`); + } + return type === BSON_BINARY_SUBTYPE_UUID_NEW ? new UUID(data) : new Binary(data, type); + } + [Symbol.for('nodejs.util.inspect.custom')]() { + return this.inspect(); + } + inspect() { + const base64 = ByteUtils.toBase64(this.buffer.subarray(0, this.position)); + return `Binary.createFromBase64("${base64}", ${this.sub_type})`; + } +} +Binary.BSON_BINARY_SUBTYPE_DEFAULT = 0; +Binary.BUFFER_SIZE = 256; +Binary.SUBTYPE_DEFAULT = 0; +Binary.SUBTYPE_FUNCTION = 1; +Binary.SUBTYPE_BYTE_ARRAY = 2; +Binary.SUBTYPE_UUID_OLD = 3; +Binary.SUBTYPE_UUID = 4; +Binary.SUBTYPE_MD5 = 5; +Binary.SUBTYPE_ENCRYPTED = 6; +Binary.SUBTYPE_COLUMN = 7; +Binary.SUBTYPE_USER_DEFINED = 128; +const UUID_BYTE_LENGTH = 16; +const UUID_WITHOUT_DASHES = /^[0-9A-F]{32}$/i; +const UUID_WITH_DASHES = /^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i; +class UUID extends Binary { + constructor(input) { + let bytes; + if (input == null) { + bytes = UUID.generate(); + } + else if (input instanceof UUID) { + bytes = ByteUtils.toLocalBufferType(new Uint8Array(input.buffer)); + } + else if (ArrayBuffer.isView(input) && input.byteLength === UUID_BYTE_LENGTH) { + bytes = ByteUtils.toLocalBufferType(input); + } + else if (typeof input === 'string') { + bytes = UUID.bytesFromString(input); + } + else { + throw new BSONError('Argument passed in UUID constructor must be a UUID, a 16 byte Buffer or a 32/36 character hex string (dashes excluded/included, format: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx).'); + } + super(bytes, BSON_BINARY_SUBTYPE_UUID_NEW); + } + get id() { + return this.buffer; + } + set id(value) { + this.buffer = value; + } + toHexString(includeDashes = true) { + if (includeDashes) { + return [ + ByteUtils.toHex(this.buffer.subarray(0, 4)), + ByteUtils.toHex(this.buffer.subarray(4, 6)), + ByteUtils.toHex(this.buffer.subarray(6, 8)), + ByteUtils.toHex(this.buffer.subarray(8, 10)), + ByteUtils.toHex(this.buffer.subarray(10, 16)) + ].join('-'); + } + return ByteUtils.toHex(this.buffer); + } + toString(encoding) { + if (encoding === 'hex') + return ByteUtils.toHex(this.id); + if (encoding === 'base64') + return ByteUtils.toBase64(this.id); + return this.toHexString(); + } + toJSON() { + return this.toHexString(); + } + equals(otherId) { + if (!otherId) { + return false; + } + if (otherId instanceof UUID) { + return ByteUtils.equals(otherId.id, this.id); + } + try { + return ByteUtils.equals(new UUID(otherId).id, this.id); + } + catch { + return false; + } + } + toBinary() { + return new Binary(this.id, Binary.SUBTYPE_UUID); + } + static generate() { + const bytes = ByteUtils.randomBytes(UUID_BYTE_LENGTH); + bytes[6] = (bytes[6] & 0x0f) | 0x40; + bytes[8] = (bytes[8] & 0x3f) | 0x80; + return bytes; + } + static isValid(input) { + if (!input) { + return false; + } + if (typeof input === 'string') { + return UUID.isValidUUIDString(input); + } + if (isUint8Array(input)) { + return input.byteLength === UUID_BYTE_LENGTH; + } + return (input._bsontype === 'Binary' && + input.sub_type === this.SUBTYPE_UUID && + input.buffer.byteLength === 16); + } + static createFromHexString(hexString) { + const buffer = UUID.bytesFromString(hexString); + return new UUID(buffer); + } + static createFromBase64(base64) { + return new UUID(ByteUtils.fromBase64(base64)); + } + static bytesFromString(representation) { + if (!UUID.isValidUUIDString(representation)) { + throw new BSONError('UUID string representation must be 32 hex digits or canonical hyphenated representation'); + } + return ByteUtils.fromHex(representation.replace(/-/g, '')); + } + static isValidUUIDString(representation) { + return UUID_WITHOUT_DASHES.test(representation) || UUID_WITH_DASHES.test(representation); + } + [Symbol.for('nodejs.util.inspect.custom')]() { + return this.inspect(); + } + inspect() { + return `new UUID("${this.toHexString()}")`; + } +} +UUID.cacheHexString = false; + +class Code extends BSONValue { + get _bsontype() { + return 'Code'; + } + constructor(code, scope) { + super(); + this.code = code.toString(); + this.scope = scope ?? null; + } + toJSON() { + if (this.scope != null) { + return { code: this.code, scope: this.scope }; + } + return { code: this.code }; + } + toExtendedJSON() { + if (this.scope) { + return { $code: this.code, $scope: this.scope }; + } + return { $code: this.code }; + } + static fromExtendedJSON(doc) { + return new Code(doc.$code, doc.$scope); + } + [Symbol.for('nodejs.util.inspect.custom')]() { + return this.inspect(); + } + inspect() { + const codeJson = this.toJSON(); + return `new Code("${String(codeJson.code)}"${codeJson.scope != null ? `, ${JSON.stringify(codeJson.scope)}` : ''})`; + } +} + +function isDBRefLike(value) { + return (value != null && + typeof value === 'object' && + '$id' in value && + value.$id != null && + '$ref' in value && + typeof value.$ref === 'string' && + (!('$db' in value) || ('$db' in value && typeof value.$db === 'string'))); +} +class DBRef extends BSONValue { + get _bsontype() { + return 'DBRef'; + } + constructor(collection, oid, db, fields) { + super(); + const parts = collection.split('.'); + if (parts.length === 2) { + db = parts.shift(); + collection = parts.shift(); + } + this.collection = collection; + this.oid = oid; + this.db = db; + this.fields = fields || {}; + } + get namespace() { + return this.collection; + } + set namespace(value) { + this.collection = value; + } + toJSON() { + const o = Object.assign({ + $ref: this.collection, + $id: this.oid + }, this.fields); + if (this.db != null) + o.$db = this.db; + return o; + } + toExtendedJSON(options) { + options = options || {}; + let o = { + $ref: this.collection, + $id: this.oid + }; + if (options.legacy) { + return o; + } + if (this.db) + o.$db = this.db; + o = Object.assign(o, this.fields); + return o; + } + static fromExtendedJSON(doc) { + const copy = Object.assign({}, doc); + delete copy.$ref; + delete copy.$id; + delete copy.$db; + return new DBRef(doc.$ref, doc.$id, doc.$db, copy); + } + [Symbol.for('nodejs.util.inspect.custom')]() { + return this.inspect(); + } + inspect() { + const oid = this.oid === undefined || this.oid.toString === undefined ? this.oid : this.oid.toString(); + return `new DBRef("${this.namespace}", new ObjectId("${String(oid)}")${this.db ? `, "${this.db}"` : ''})`; + } +} + +let wasm = undefined; +try { + wasm = new WebAssembly.Instance(new WebAssembly.Module(new Uint8Array([0, 97, 115, 109, 1, 0, 0, 0, 1, 13, 2, 96, 0, 1, 127, 96, 4, 127, 127, 127, 127, 1, 127, 3, 7, 6, 0, 1, 1, 1, 1, 1, 6, 6, 1, 127, 1, 65, 0, 11, 7, 50, 6, 3, 109, 117, 108, 0, 1, 5, 100, 105, 118, 95, 115, 0, 2, 5, 100, 105, 118, 95, 117, 0, 3, 5, 114, 101, 109, 95, 115, 0, 4, 5, 114, 101, 109, 95, 117, 0, 5, 8, 103, 101, 116, 95, 104, 105, 103, 104, 0, 0, 10, 191, 1, 6, 4, 0, 35, 0, 11, 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, 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, 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, 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, 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 { +} +const TWO_PWR_16_DBL = 1 << 16; +const TWO_PWR_24_DBL = 1 << 24; +const TWO_PWR_32_DBL = TWO_PWR_16_DBL * TWO_PWR_16_DBL; +const TWO_PWR_64_DBL = TWO_PWR_32_DBL * TWO_PWR_32_DBL; +const TWO_PWR_63_DBL = TWO_PWR_64_DBL / 2; +const INT_CACHE = {}; +const UINT_CACHE = {}; +const MAX_INT64_STRING_LENGTH = 20; +const DECIMAL_REG_EX = /^(\+?0|(\+|-)?[1-9][0-9]*)$/; +class Long extends BSONValue { + get _bsontype() { + return 'Long'; + } + get __isLong__() { + return true; + } + constructor(low = 0, high, unsigned) { + super(); + if (typeof low === 'bigint') { + Object.assign(this, Long.fromBigInt(low, !!high)); + } + else if (typeof low === 'string') { + Object.assign(this, Long.fromString(low, !!high)); + } + else { + this.low = low | 0; + this.high = high | 0; + this.unsigned = !!unsigned; + } + } + static fromBits(lowBits, highBits, unsigned) { + return new Long(lowBits, highBits, unsigned); + } + static fromInt(value, unsigned) { + let obj, cachedObj, cache; + if (unsigned) { + value >>>= 0; + if ((cache = 0 <= value && value < 256)) { + cachedObj = UINT_CACHE[value]; + if (cachedObj) + return cachedObj; + } + obj = Long.fromBits(value, (value | 0) < 0 ? -1 : 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 = Long.fromBits(value, value < 0 ? -1 : 0, false); + if (cache) + INT_CACHE[value] = obj; + return obj; + } + } + static fromNumber(value, unsigned) { + if (isNaN(value)) + return unsigned ? Long.UZERO : Long.ZERO; + if (unsigned) { + if (value < 0) + return Long.UZERO; + if (value >= TWO_PWR_64_DBL) + return Long.MAX_UNSIGNED_VALUE; + } + else { + if (value <= -TWO_PWR_63_DBL) + return Long.MIN_VALUE; + if (value + 1 >= TWO_PWR_63_DBL) + return Long.MAX_VALUE; + } + if (value < 0) + return Long.fromNumber(-value, unsigned).neg(); + return Long.fromBits(value % TWO_PWR_32_DBL | 0, (value / TWO_PWR_32_DBL) | 0, unsigned); + } + static fromBigInt(value, unsigned) { + return Long.fromString(value.toString(), unsigned); + } + static fromString(str, unsigned, radix) { + if (str.length === 0) + throw new BSONError('empty string'); + if (str === 'NaN' || str === 'Infinity' || str === '+Infinity' || str === '-Infinity') + return Long.ZERO; + if (typeof unsigned === 'number') { + (radix = unsigned), (unsigned = false); + } + else { + unsigned = !!unsigned; + } + radix = radix || 10; + if (radix < 2 || 36 < radix) + throw new BSONError('radix'); + let p; + if ((p = str.indexOf('-')) > 0) + throw new BSONError('interior hyphen'); + else if (p === 0) { + return Long.fromString(str.substring(1), unsigned, radix).neg(); + } + const radixToPower = Long.fromNumber(Math.pow(radix, 8)); + let result = Long.ZERO; + for (let i = 0; i < str.length; i += 8) { + const size = Math.min(8, str.length - i), value = parseInt(str.substring(i, i + size), radix); + if (size < 8) { + const power = Long.fromNumber(Math.pow(radix, size)); + result = result.mul(power).add(Long.fromNumber(value)); + } + else { + result = result.mul(radixToPower); + result = result.add(Long.fromNumber(value)); + } + } + result.unsigned = unsigned; + return result; + } + static fromBytes(bytes, unsigned, le) { + return le ? Long.fromBytesLE(bytes, unsigned) : Long.fromBytesBE(bytes, unsigned); + } + static 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); + } + static 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); + } + static isLong(value) { + return (value != null && + typeof value === 'object' && + '__isLong__' in value && + value.__isLong__ === true); + } + static fromValue(val, unsigned) { + if (typeof val === 'number') + return Long.fromNumber(val, unsigned); + if (typeof val === 'string') + return Long.fromString(val, unsigned); + return Long.fromBits(val.low, val.high, typeof unsigned === 'boolean' ? unsigned : val.unsigned); + } + add(addend) { + if (!Long.isLong(addend)) + addend = Long.fromValue(addend); + const a48 = this.high >>> 16; + const a32 = this.high & 0xffff; + const a16 = this.low >>> 16; + const a00 = this.low & 0xffff; + const b48 = addend.high >>> 16; + const b32 = addend.high & 0xffff; + const b16 = addend.low >>> 16; + const b00 = addend.low & 0xffff; + let 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 Long.fromBits((c16 << 16) | c00, (c48 << 16) | c32, this.unsigned); + } + and(other) { + if (!Long.isLong(other)) + other = Long.fromValue(other); + return Long.fromBits(this.low & other.low, this.high & other.high, this.unsigned); + } + compare(other) { + if (!Long.isLong(other)) + other = Long.fromValue(other); + if (this.eq(other)) + return 0; + const thisNeg = this.isNegative(), otherNeg = other.isNegative(); + if (thisNeg && !otherNeg) + return -1; + if (!thisNeg && otherNeg) + return 1; + if (!this.unsigned) + return this.sub(other).isNegative() ? -1 : 1; + return other.high >>> 0 > this.high >>> 0 || + (other.high === this.high && other.low >>> 0 > this.low >>> 0) + ? -1 + : 1; + } + comp(other) { + return this.compare(other); + } + divide(divisor) { + if (!Long.isLong(divisor)) + divisor = Long.fromValue(divisor); + if (divisor.isZero()) + throw new BSONError('division by zero'); + if (wasm) { + if (!this.unsigned && + this.high === -0x80000000 && + divisor.low === -1 && + divisor.high === -1) { + return this; + } + const low = (this.unsigned ? wasm.div_u : wasm.div_s)(this.low, this.high, divisor.low, divisor.high); + return Long.fromBits(low, wasm.get_high(), this.unsigned); + } + if (this.isZero()) + return this.unsigned ? Long.UZERO : Long.ZERO; + let approx, rem, res; + if (!this.unsigned) { + if (this.eq(Long.MIN_VALUE)) { + if (divisor.eq(Long.ONE) || divisor.eq(Long.NEG_ONE)) + return Long.MIN_VALUE; + else if (divisor.eq(Long.MIN_VALUE)) + return Long.ONE; + else { + const halfThis = this.shr(1); + approx = halfThis.div(divisor).shl(1); + if (approx.eq(Long.ZERO)) { + return divisor.isNegative() ? Long.ONE : Long.NEG_ONE; + } + else { + rem = this.sub(divisor.mul(approx)); + res = approx.add(rem.div(divisor)); + return res; + } + } + } + else if (divisor.eq(Long.MIN_VALUE)) + return this.unsigned ? Long.UZERO : Long.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 = Long.ZERO; + } + else { + if (!divisor.unsigned) + divisor = divisor.toUnsigned(); + if (divisor.gt(this)) + return Long.UZERO; + if (divisor.gt(this.shru(1))) + return Long.UONE; + res = Long.UZERO; + } + rem = this; + while (rem.gte(divisor)) { + approx = Math.max(1, Math.floor(rem.toNumber() / divisor.toNumber())); + const log2 = Math.ceil(Math.log(approx) / Math.LN2); + const delta = log2 <= 48 ? 1 : Math.pow(2, log2 - 48); + let approxRes = Long.fromNumber(approx); + let approxRem = approxRes.mul(divisor); + while (approxRem.isNegative() || approxRem.gt(rem)) { + approx -= delta; + approxRes = Long.fromNumber(approx, this.unsigned); + approxRem = approxRes.mul(divisor); + } + if (approxRes.isZero()) + approxRes = Long.ONE; + res = res.add(approxRes); + rem = rem.sub(approxRem); + } + return res; + } + div(divisor) { + return this.divide(divisor); + } + equals(other) { + if (!Long.isLong(other)) + other = Long.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; + } + eq(other) { + return this.equals(other); + } + getHighBits() { + return this.high; + } + getHighBitsUnsigned() { + return this.high >>> 0; + } + getLowBits() { + return this.low; + } + getLowBitsUnsigned() { + return this.low >>> 0; + } + getNumBitsAbs() { + if (this.isNegative()) { + return this.eq(Long.MIN_VALUE) ? 64 : this.neg().getNumBitsAbs(); + } + const val = this.high !== 0 ? this.high : this.low; + let bit; + for (bit = 31; bit > 0; bit--) + if ((val & (1 << bit)) !== 0) + break; + return this.high !== 0 ? bit + 33 : bit + 1; + } + greaterThan(other) { + return this.comp(other) > 0; + } + gt(other) { + return this.greaterThan(other); + } + greaterThanOrEqual(other) { + return this.comp(other) >= 0; + } + gte(other) { + return this.greaterThanOrEqual(other); + } + ge(other) { + return this.greaterThanOrEqual(other); + } + isEven() { + return (this.low & 1) === 0; + } + isNegative() { + return !this.unsigned && this.high < 0; + } + isOdd() { + return (this.low & 1) === 1; + } + isPositive() { + return this.unsigned || this.high >= 0; + } + isZero() { + return this.high === 0 && this.low === 0; + } + lessThan(other) { + return this.comp(other) < 0; + } + lt(other) { + return this.lessThan(other); + } + lessThanOrEqual(other) { + return this.comp(other) <= 0; + } + lte(other) { + return this.lessThanOrEqual(other); + } + modulo(divisor) { + if (!Long.isLong(divisor)) + divisor = Long.fromValue(divisor); + if (wasm) { + const low = (this.unsigned ? wasm.rem_u : wasm.rem_s)(this.low, this.high, divisor.low, divisor.high); + return Long.fromBits(low, wasm.get_high(), this.unsigned); + } + return this.sub(this.div(divisor).mul(divisor)); + } + mod(divisor) { + return this.modulo(divisor); + } + rem(divisor) { + return this.modulo(divisor); + } + multiply(multiplier) { + if (this.isZero()) + return Long.ZERO; + if (!Long.isLong(multiplier)) + multiplier = Long.fromValue(multiplier); + if (wasm) { + const low = wasm.mul(this.low, this.high, multiplier.low, multiplier.high); + return Long.fromBits(low, wasm.get_high(), this.unsigned); + } + if (multiplier.isZero()) + return Long.ZERO; + if (this.eq(Long.MIN_VALUE)) + return multiplier.isOdd() ? Long.MIN_VALUE : Long.ZERO; + if (multiplier.eq(Long.MIN_VALUE)) + return this.isOdd() ? Long.MIN_VALUE : Long.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 (this.lt(Long.TWO_PWR_24) && multiplier.lt(Long.TWO_PWR_24)) + return Long.fromNumber(this.toNumber() * multiplier.toNumber(), this.unsigned); + const a48 = this.high >>> 16; + const a32 = this.high & 0xffff; + const a16 = this.low >>> 16; + const a00 = this.low & 0xffff; + const b48 = multiplier.high >>> 16; + const b32 = multiplier.high & 0xffff; + const b16 = multiplier.low >>> 16; + const b00 = multiplier.low & 0xffff; + let 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 Long.fromBits((c16 << 16) | c00, (c48 << 16) | c32, this.unsigned); + } + mul(multiplier) { + return this.multiply(multiplier); + } + negate() { + if (!this.unsigned && this.eq(Long.MIN_VALUE)) + return Long.MIN_VALUE; + return this.not().add(Long.ONE); + } + neg() { + return this.negate(); + } + not() { + return Long.fromBits(~this.low, ~this.high, this.unsigned); + } + notEquals(other) { + return !this.equals(other); + } + neq(other) { + return this.notEquals(other); + } + ne(other) { + return this.notEquals(other); + } + or(other) { + if (!Long.isLong(other)) + other = Long.fromValue(other); + return Long.fromBits(this.low | other.low, this.high | other.high, this.unsigned); + } + shiftLeft(numBits) { + if (Long.isLong(numBits)) + numBits = numBits.toInt(); + if ((numBits &= 63) === 0) + return this; + else if (numBits < 32) + return Long.fromBits(this.low << numBits, (this.high << numBits) | (this.low >>> (32 - numBits)), this.unsigned); + else + return Long.fromBits(0, this.low << (numBits - 32), this.unsigned); + } + shl(numBits) { + return this.shiftLeft(numBits); + } + shiftRight(numBits) { + if (Long.isLong(numBits)) + numBits = numBits.toInt(); + if ((numBits &= 63) === 0) + return this; + else if (numBits < 32) + return Long.fromBits((this.low >>> numBits) | (this.high << (32 - numBits)), this.high >> numBits, this.unsigned); + else + return Long.fromBits(this.high >> (numBits - 32), this.high >= 0 ? 0 : -1, this.unsigned); + } + shr(numBits) { + return this.shiftRight(numBits); + } + shiftRightUnsigned(numBits) { + if (Long.isLong(numBits)) + numBits = numBits.toInt(); + numBits &= 63; + if (numBits === 0) + return this; + else { + const high = this.high; + if (numBits < 32) { + const low = this.low; + return Long.fromBits((low >>> numBits) | (high << (32 - numBits)), high >>> numBits, this.unsigned); + } + else if (numBits === 32) + return Long.fromBits(high, 0, this.unsigned); + else + return Long.fromBits(high >>> (numBits - 32), 0, this.unsigned); + } + } + shr_u(numBits) { + return this.shiftRightUnsigned(numBits); + } + shru(numBits) { + return this.shiftRightUnsigned(numBits); + } + subtract(subtrahend) { + if (!Long.isLong(subtrahend)) + subtrahend = Long.fromValue(subtrahend); + return this.add(subtrahend.neg()); + } + sub(subtrahend) { + return this.subtract(subtrahend); + } + toInt() { + return this.unsigned ? this.low >>> 0 : this.low; + } + 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); + } + toBigInt() { + return BigInt(this.toString()); + } + toBytes(le) { + return le ? this.toBytesLE() : this.toBytesBE(); + } + toBytesLE() { + const 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 + ]; + } + toBytesBE() { + const 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 + ]; + } + toSigned() { + if (!this.unsigned) + return this; + return Long.fromBits(this.low, this.high, false); + } + toString(radix) { + radix = radix || 10; + if (radix < 2 || 36 < radix) + throw new BSONError('radix'); + if (this.isZero()) + return '0'; + if (this.isNegative()) { + if (this.eq(Long.MIN_VALUE)) { + const radixLong = Long.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); + } + const radixToPower = Long.fromNumber(Math.pow(radix, 6), this.unsigned); + let rem = this; + let result = ''; + while (true) { + const remDiv = rem.div(radixToPower); + const intval = rem.sub(remDiv.mul(radixToPower)).toInt() >>> 0; + let digits = intval.toString(radix); + rem = remDiv; + if (rem.isZero()) { + return digits + result; + } + else { + while (digits.length < 6) + digits = '0' + digits; + result = '' + digits + result; + } + } + } + toUnsigned() { + if (this.unsigned) + return this; + return Long.fromBits(this.low, this.high, true); + } + xor(other) { + if (!Long.isLong(other)) + other = Long.fromValue(other); + return Long.fromBits(this.low ^ other.low, this.high ^ other.high, this.unsigned); + } + eqz() { + return this.isZero(); + } + le(other) { + return this.lessThanOrEqual(other); + } + toExtendedJSON(options) { + if (options && options.relaxed) + return this.toNumber(); + return { $numberLong: this.toString() }; + } + static fromExtendedJSON(doc, options) { + const { useBigInt64 = false, relaxed = true } = { ...options }; + if (doc.$numberLong.length > MAX_INT64_STRING_LENGTH) { + throw new BSONError('$numberLong string is too long'); + } + if (!DECIMAL_REG_EX.test(doc.$numberLong)) { + throw new BSONError(`$numberLong string "${doc.$numberLong}" is in an invalid format`); + } + if (useBigInt64) { + const bigIntResult = BigInt(doc.$numberLong); + return BigInt.asIntN(64, bigIntResult); + } + const longResult = Long.fromString(doc.$numberLong); + if (relaxed) { + return longResult.toNumber(); + } + return longResult; + } + [Symbol.for('nodejs.util.inspect.custom')]() { + return this.inspect(); + } + inspect() { + return `new Long("${this.toString()}"${this.unsigned ? ', true' : ''})`; + } +} +Long.TWO_PWR_24 = Long.fromInt(TWO_PWR_24_DBL); +Long.MAX_UNSIGNED_VALUE = Long.fromBits(0xffffffff | 0, 0xffffffff | 0, true); +Long.ZERO = Long.fromInt(0); +Long.UZERO = Long.fromInt(0, true); +Long.ONE = Long.fromInt(1); +Long.UONE = Long.fromInt(1, true); +Long.NEG_ONE = Long.fromInt(-1); +Long.MAX_VALUE = Long.fromBits(0xffffffff | 0, 0x7fffffff | 0, false); +Long.MIN_VALUE = Long.fromBits(0, 0x80000000 | 0, false); + +const PARSE_STRING_REGEXP = /^(\+|-)?(\d+|(\d*\.\d*))?(E|e)?([-+])?(\d+)?$/; +const PARSE_INF_REGEXP = /^(\+|-)?(Infinity|inf)$/i; +const PARSE_NAN_REGEXP = /^(\+|-)?NaN$/i; +const EXPONENT_MAX = 6111; +const EXPONENT_MIN = -6176; +const EXPONENT_BIAS = 6176; +const MAX_DIGITS = 34; +const NAN_BUFFER = ByteUtils.fromNumberArray([ + 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +].reverse()); +const INF_NEGATIVE_BUFFER = ByteUtils.fromNumberArray([ + 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +].reverse()); +const INF_POSITIVE_BUFFER = ByteUtils.fromNumberArray([ + 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +].reverse()); +const EXPONENT_REGEX = /^([-+])?(\d+)?$/; +const COMBINATION_MASK = 0x1f; +const EXPONENT_MASK = 0x3fff; +const COMBINATION_INFINITY = 30; +const COMBINATION_NAN = 31; +function isDigit(value) { + return !isNaN(parseInt(value, 10)); +} +function divideu128(value) { + const DIVISOR = Long.fromNumber(1000 * 1000 * 1000); + let _rem = Long.fromNumber(0); + if (!value.parts[0] && !value.parts[1] && !value.parts[2] && !value.parts[3]) { + return { quotient: value, rem: _rem }; + } + for (let i = 0; i <= 3; i++) { + _rem = _rem.shiftLeft(32); + _rem = _rem.add(new Long(value.parts[i], 0)); + value.parts[i] = _rem.div(DIVISOR).low; + _rem = _rem.modulo(DIVISOR); + } + return { quotient: value, rem: _rem }; +} +function multiply64x2(left, right) { + if (!left && !right) { + return { high: Long.fromNumber(0), low: Long.fromNumber(0) }; + } + const leftHigh = left.shiftRightUnsigned(32); + const leftLow = new Long(left.getLowBits(), 0); + const rightHigh = right.shiftRightUnsigned(32); + const rightLow = new Long(right.getLowBits(), 0); + let productHigh = leftHigh.multiply(rightHigh); + let productMid = leftHigh.multiply(rightLow); + const productMid2 = leftLow.multiply(rightHigh); + let productLow = leftLow.multiply(rightLow); + productHigh = productHigh.add(productMid.shiftRightUnsigned(32)); + productMid = new Long(productMid.getLowBits(), 0) + .add(productMid2) + .add(productLow.shiftRightUnsigned(32)); + productHigh = productHigh.add(productMid.shiftRightUnsigned(32)); + productLow = productMid.shiftLeft(32).add(new Long(productLow.getLowBits(), 0)); + return { high: productHigh, low: productLow }; +} +function lessThan(left, right) { + const uhleft = left.high >>> 0; + const uhright = right.high >>> 0; + if (uhleft < uhright) { + return true; + } + else if (uhleft === uhright) { + const ulleft = left.low >>> 0; + const ulright = right.low >>> 0; + if (ulleft < ulright) + return true; + } + return false; +} +function invalidErr(string, message) { + throw new BSONError(`"${string}" is not a valid Decimal128 string - ${message}`); +} +class Decimal128 extends BSONValue { + get _bsontype() { + return 'Decimal128'; + } + constructor(bytes) { + super(); + if (typeof bytes === 'string') { + this.bytes = Decimal128.fromString(bytes).bytes; + } + else if (isUint8Array(bytes)) { + if (bytes.byteLength !== 16) { + throw new BSONError('Decimal128 must take a Buffer of 16 bytes'); + } + this.bytes = bytes; + } + else { + throw new BSONError('Decimal128 must take a Buffer or string'); + } + } + static fromString(representation) { + return Decimal128._fromString(representation, { allowRounding: false }); + } + static fromStringWithRounding(representation) { + return Decimal128._fromString(representation, { allowRounding: true }); + } + static _fromString(representation, options) { + let isNegative = false; + let sawSign = false; + let sawRadix = false; + let foundNonZero = false; + let significantDigits = 0; + let nDigitsRead = 0; + let nDigits = 0; + let radixPosition = 0; + let firstNonZero = 0; + const digits = [0]; + let nDigitsStored = 0; + let digitsInsert = 0; + let lastDigit = 0; + let exponent = 0; + let significandHigh = new Long(0, 0); + let significandLow = new Long(0, 0); + let biasedExponent = 0; + let index = 0; + if (representation.length >= 7000) { + throw new BSONError('' + representation + ' not a valid Decimal128 string'); + } + const stringMatch = representation.match(PARSE_STRING_REGEXP); + const infMatch = representation.match(PARSE_INF_REGEXP); + const nanMatch = representation.match(PARSE_NAN_REGEXP); + if ((!stringMatch && !infMatch && !nanMatch) || representation.length === 0) { + throw new BSONError('' + representation + ' not a valid Decimal128 string'); + } + if (stringMatch) { + const unsignedNumber = stringMatch[2]; + const e = stringMatch[4]; + const expSign = stringMatch[5]; + const expNumber = stringMatch[6]; + if (e && expNumber === undefined) + invalidErr(representation, 'missing exponent power'); + if (e && unsignedNumber === undefined) + invalidErr(representation, 'missing exponent base'); + if (e === undefined && (expSign || expNumber)) { + invalidErr(representation, 'missing e before exponent'); + } + } + if (representation[index] === '+' || representation[index] === '-') { + sawSign = true; + isNegative = representation[index++] === '-'; + } + if (!isDigit(representation[index]) && representation[index] !== '.') { + if (representation[index] === 'i' || representation[index] === 'I') { + return new Decimal128(isNegative ? INF_NEGATIVE_BUFFER : INF_POSITIVE_BUFFER); + } + else if (representation[index] === 'N') { + return new Decimal128(NAN_BUFFER); + } + } + while (isDigit(representation[index]) || representation[index] === '.') { + if (representation[index] === '.') { + if (sawRadix) + invalidErr(representation, 'contains multiple periods'); + sawRadix = true; + index = index + 1; + continue; + } + if (nDigitsStored < MAX_DIGITS) { + if (representation[index] !== '0' || foundNonZero) { + if (!foundNonZero) { + firstNonZero = nDigitsRead; + } + foundNonZero = true; + digits[digitsInsert++] = parseInt(representation[index], 10); + nDigitsStored = nDigitsStored + 1; + } + } + if (foundNonZero) + nDigits = nDigits + 1; + if (sawRadix) + radixPosition = radixPosition + 1; + nDigitsRead = nDigitsRead + 1; + index = index + 1; + } + if (sawRadix && !nDigitsRead) + throw new BSONError('' + representation + ' not a valid Decimal128 string'); + if (representation[index] === 'e' || representation[index] === 'E') { + const match = representation.substr(++index).match(EXPONENT_REGEX); + if (!match || !match[2]) + return new Decimal128(NAN_BUFFER); + exponent = parseInt(match[0], 10); + index = index + match[0].length; + } + if (representation[index]) + return new Decimal128(NAN_BUFFER); + if (!nDigitsStored) { + digits[0] = 0; + nDigits = 1; + nDigitsStored = 1; + significantDigits = 0; + } + else { + lastDigit = nDigitsStored - 1; + significantDigits = nDigits; + if (significantDigits !== 1) { + while (representation[firstNonZero + significantDigits - 1 + Number(sawSign) + Number(sawRadix)] === '0') { + significantDigits = significantDigits - 1; + } + } + } + if (exponent <= radixPosition && radixPosition > exponent + (1 << 14)) { + exponent = EXPONENT_MIN; + } + else { + exponent = exponent - radixPosition; + } + while (exponent > EXPONENT_MAX) { + lastDigit = lastDigit + 1; + if (lastDigit >= MAX_DIGITS) { + if (significantDigits === 0) { + exponent = EXPONENT_MAX; + break; + } + invalidErr(representation, 'overflow'); + } + exponent = exponent - 1; + } + if (options.allowRounding) { + while (exponent < EXPONENT_MIN || nDigitsStored < nDigits) { + if (lastDigit === 0 && significantDigits < nDigitsStored) { + exponent = EXPONENT_MIN; + significantDigits = 0; + break; + } + if (nDigitsStored < nDigits) { + nDigits = nDigits - 1; + } + else { + lastDigit = lastDigit - 1; + } + if (exponent < EXPONENT_MAX) { + exponent = exponent + 1; + } + else { + const digitsString = digits.join(''); + if (digitsString.match(/^0+$/)) { + exponent = EXPONENT_MAX; + break; + } + invalidErr(representation, 'overflow'); + } + } + if (lastDigit + 1 < significantDigits) { + let endOfString = nDigitsRead; + if (sawRadix) { + firstNonZero = firstNonZero + 1; + endOfString = endOfString + 1; + } + if (sawSign) { + firstNonZero = firstNonZero + 1; + endOfString = endOfString + 1; + } + const roundDigit = parseInt(representation[firstNonZero + lastDigit + 1], 10); + let roundBit = 0; + if (roundDigit >= 5) { + roundBit = 1; + if (roundDigit === 5) { + roundBit = digits[lastDigit] % 2 === 1 ? 1 : 0; + for (let i = firstNonZero + lastDigit + 2; i < endOfString; i++) { + if (parseInt(representation[i], 10)) { + roundBit = 1; + break; + } + } + } + } + if (roundBit) { + let dIdx = lastDigit; + for (; dIdx >= 0; dIdx--) { + if (++digits[dIdx] > 9) { + digits[dIdx] = 0; + if (dIdx === 0) { + if (exponent < EXPONENT_MAX) { + exponent = exponent + 1; + digits[dIdx] = 1; + } + else { + return new Decimal128(isNegative ? INF_NEGATIVE_BUFFER : INF_POSITIVE_BUFFER); + } + } + } + else { + break; + } + } + } + } + } + else { + while (exponent < EXPONENT_MIN || nDigitsStored < nDigits) { + if (lastDigit === 0) { + if (significantDigits === 0) { + exponent = EXPONENT_MIN; + break; + } + invalidErr(representation, 'exponent underflow'); + } + if (nDigitsStored < nDigits) { + if (representation[nDigits - 1 + Number(sawSign) + Number(sawRadix)] !== '0' && + significantDigits !== 0) { + invalidErr(representation, 'inexact rounding'); + } + nDigits = nDigits - 1; + } + else { + if (digits[lastDigit] !== 0) { + invalidErr(representation, 'inexact rounding'); + } + lastDigit = lastDigit - 1; + } + if (exponent < EXPONENT_MAX) { + exponent = exponent + 1; + } + else { + invalidErr(representation, 'overflow'); + } + } + if (lastDigit + 1 < significantDigits) { + if (sawRadix) { + firstNonZero = firstNonZero + 1; + } + if (sawSign) { + firstNonZero = firstNonZero + 1; + } + const roundDigit = parseInt(representation[firstNonZero + lastDigit + 1], 10); + if (roundDigit !== 0) { + invalidErr(representation, 'inexact rounding'); + } + } + } + significandHigh = Long.fromNumber(0); + significandLow = Long.fromNumber(0); + if (significantDigits === 0) { + significandHigh = Long.fromNumber(0); + significandLow = Long.fromNumber(0); + } + else if (lastDigit < 17) { + let dIdx = 0; + significandLow = Long.fromNumber(digits[dIdx++]); + significandHigh = new Long(0, 0); + for (; dIdx <= lastDigit; dIdx++) { + significandLow = significandLow.multiply(Long.fromNumber(10)); + significandLow = significandLow.add(Long.fromNumber(digits[dIdx])); + } + } + else { + let dIdx = 0; + significandHigh = Long.fromNumber(digits[dIdx++]); + for (; dIdx <= lastDigit - 17; dIdx++) { + significandHigh = significandHigh.multiply(Long.fromNumber(10)); + significandHigh = significandHigh.add(Long.fromNumber(digits[dIdx])); + } + significandLow = Long.fromNumber(digits[dIdx++]); + for (; dIdx <= lastDigit; dIdx++) { + significandLow = significandLow.multiply(Long.fromNumber(10)); + significandLow = significandLow.add(Long.fromNumber(digits[dIdx])); + } + } + const significand = multiply64x2(significandHigh, Long.fromString('100000000000000000')); + significand.low = significand.low.add(significandLow); + if (lessThan(significand.low, significandLow)) { + significand.high = significand.high.add(Long.fromNumber(1)); + } + biasedExponent = exponent + EXPONENT_BIAS; + const dec = { low: Long.fromNumber(0), high: Long.fromNumber(0) }; + if (significand.high.shiftRightUnsigned(49).and(Long.fromNumber(1)).equals(Long.fromNumber(1))) { + dec.high = dec.high.or(Long.fromNumber(0x3).shiftLeft(61)); + dec.high = dec.high.or(Long.fromNumber(biasedExponent).and(Long.fromNumber(0x3fff).shiftLeft(47))); + dec.high = dec.high.or(significand.high.and(Long.fromNumber(0x7fffffffffff))); + } + else { + dec.high = dec.high.or(Long.fromNumber(biasedExponent & 0x3fff).shiftLeft(49)); + dec.high = dec.high.or(significand.high.and(Long.fromNumber(0x1ffffffffffff))); + } + dec.low = significand.low; + if (isNegative) { + dec.high = dec.high.or(Long.fromString('9223372036854775808')); + } + const buffer = ByteUtils.allocate(16); + index = 0; + buffer[index++] = dec.low.low & 0xff; + buffer[index++] = (dec.low.low >> 8) & 0xff; + buffer[index++] = (dec.low.low >> 16) & 0xff; + buffer[index++] = (dec.low.low >> 24) & 0xff; + buffer[index++] = dec.low.high & 0xff; + buffer[index++] = (dec.low.high >> 8) & 0xff; + buffer[index++] = (dec.low.high >> 16) & 0xff; + buffer[index++] = (dec.low.high >> 24) & 0xff; + buffer[index++] = dec.high.low & 0xff; + buffer[index++] = (dec.high.low >> 8) & 0xff; + buffer[index++] = (dec.high.low >> 16) & 0xff; + buffer[index++] = (dec.high.low >> 24) & 0xff; + buffer[index++] = dec.high.high & 0xff; + buffer[index++] = (dec.high.high >> 8) & 0xff; + buffer[index++] = (dec.high.high >> 16) & 0xff; + buffer[index++] = (dec.high.high >> 24) & 0xff; + return new Decimal128(buffer); + } + toString() { + let biased_exponent; + let significand_digits = 0; + const significand = new Array(36); + for (let i = 0; i < significand.length; i++) + significand[i] = 0; + let index = 0; + let is_zero = false; + let significand_msb; + let significand128 = { parts: [0, 0, 0, 0] }; + let j, k; + const string = []; + index = 0; + const buffer = this.bytes; + const low = buffer[index++] | (buffer[index++] << 8) | (buffer[index++] << 16) | (buffer[index++] << 24); + const midl = buffer[index++] | (buffer[index++] << 8) | (buffer[index++] << 16) | (buffer[index++] << 24); + const midh = buffer[index++] | (buffer[index++] << 8) | (buffer[index++] << 16) | (buffer[index++] << 24); + const high = buffer[index++] | (buffer[index++] << 8) | (buffer[index++] << 16) | (buffer[index++] << 24); + index = 0; + const dec = { + low: new Long(low, midl), + high: new Long(midh, high) + }; + if (dec.high.lessThan(Long.ZERO)) { + string.push('-'); + } + const combination = (high >> 26) & COMBINATION_MASK; + if (combination >> 3 === 3) { + if (combination === COMBINATION_INFINITY) { + return string.join('') + 'Infinity'; + } + else if (combination === COMBINATION_NAN) { + return 'NaN'; + } + else { + biased_exponent = (high >> 15) & EXPONENT_MASK; + significand_msb = 0x08 + ((high >> 14) & 0x01); + } + } + else { + significand_msb = (high >> 14) & 0x07; + biased_exponent = (high >> 17) & EXPONENT_MASK; + } + const exponent = biased_exponent - EXPONENT_BIAS; + significand128.parts[0] = (high & 0x3fff) + ((significand_msb & 0xf) << 14); + significand128.parts[1] = midh; + significand128.parts[2] = midl; + significand128.parts[3] = low; + if (significand128.parts[0] === 0 && + significand128.parts[1] === 0 && + significand128.parts[2] === 0 && + significand128.parts[3] === 0) { + is_zero = true; + } + else { + for (k = 3; k >= 0; k--) { + let least_digits = 0; + const result = divideu128(significand128); + significand128 = result.quotient; + least_digits = result.rem.low; + if (!least_digits) + continue; + for (j = 8; j >= 0; j--) { + significand[k * 9 + j] = least_digits % 10; + least_digits = Math.floor(least_digits / 10); + } + } + } + if (is_zero) { + significand_digits = 1; + significand[index] = 0; + } + else { + significand_digits = 36; + while (!significand[index]) { + significand_digits = significand_digits - 1; + index = index + 1; + } + } + const scientific_exponent = significand_digits - 1 + exponent; + if (scientific_exponent >= 34 || scientific_exponent <= -7 || exponent > 0) { + if (significand_digits > 34) { + string.push(`${0}`); + if (exponent > 0) + string.push(`E+${exponent}`); + else if (exponent < 0) + string.push(`E${exponent}`); + return string.join(''); + } + string.push(`${significand[index++]}`); + significand_digits = significand_digits - 1; + if (significand_digits) { + string.push('.'); + } + for (let i = 0; i < significand_digits; i++) { + string.push(`${significand[index++]}`); + } + string.push('E'); + if (scientific_exponent > 0) { + string.push(`+${scientific_exponent}`); + } + else { + string.push(`${scientific_exponent}`); + } + } + else { + if (exponent >= 0) { + for (let i = 0; i < significand_digits; i++) { + string.push(`${significand[index++]}`); + } + } + else { + let radix_position = significand_digits + exponent; + if (radix_position > 0) { + for (let i = 0; i < radix_position; i++) { + string.push(`${significand[index++]}`); + } + } + else { + string.push('0'); + } + string.push('.'); + while (radix_position++ < 0) { + string.push('0'); + } + for (let i = 0; i < significand_digits - Math.max(radix_position - 1, 0); i++) { + string.push(`${significand[index++]}`); + } + } + } + return string.join(''); + } + toJSON() { + return { $numberDecimal: this.toString() }; + } + toExtendedJSON() { + return { $numberDecimal: this.toString() }; + } + static fromExtendedJSON(doc) { + return Decimal128.fromString(doc.$numberDecimal); + } + [Symbol.for('nodejs.util.inspect.custom')]() { + return this.inspect(); + } + inspect() { + return `new Decimal128("${this.toString()}")`; + } +} + +class Double extends BSONValue { + get _bsontype() { + return 'Double'; + } + constructor(value) { + super(); + if (value instanceof Number) { + value = value.valueOf(); + } + this.value = +value; + } + valueOf() { + return this.value; + } + toJSON() { + return this.value; + } + toString(radix) { + return this.value.toString(radix); + } + toExtendedJSON(options) { + if (options && (options.legacy || (options.relaxed && isFinite(this.value)))) { + return this.value; + } + if (Object.is(Math.sign(this.value), -0)) { + return { $numberDouble: '-0.0' }; + } + return { + $numberDouble: Number.isInteger(this.value) ? this.value.toFixed(1) : this.value.toString() + }; + } + static fromExtendedJSON(doc, options) { + const doubleValue = parseFloat(doc.$numberDouble); + return options && options.relaxed ? doubleValue : new Double(doubleValue); + } + [Symbol.for('nodejs.util.inspect.custom')]() { + return this.inspect(); + } + inspect() { + const eJSON = this.toExtendedJSON(); + return `new Double(${eJSON.$numberDouble})`; + } +} + +class Int32 extends BSONValue { + get _bsontype() { + return 'Int32'; + } + constructor(value) { + super(); + if (value instanceof Number) { + value = value.valueOf(); + } + this.value = +value | 0; + } + valueOf() { + return this.value; + } + toString(radix) { + return this.value.toString(radix); + } + toJSON() { + return this.value; + } + toExtendedJSON(options) { + if (options && (options.relaxed || options.legacy)) + return this.value; + return { $numberInt: this.value.toString() }; + } + static fromExtendedJSON(doc, options) { + return options && options.relaxed ? parseInt(doc.$numberInt, 10) : new Int32(doc.$numberInt); + } + [Symbol.for('nodejs.util.inspect.custom')]() { + return this.inspect(); + } + inspect() { + return `new Int32(${this.valueOf()})`; + } +} + +class MaxKey extends BSONValue { + get _bsontype() { + return 'MaxKey'; + } + toExtendedJSON() { + return { $maxKey: 1 }; + } + static fromExtendedJSON() { + return new MaxKey(); + } + [Symbol.for('nodejs.util.inspect.custom')]() { + return this.inspect(); + } + inspect() { + return 'new MaxKey()'; + } +} + +class MinKey extends BSONValue { + get _bsontype() { + return 'MinKey'; + } + toExtendedJSON() { + return { $minKey: 1 }; + } + static fromExtendedJSON() { + return new MinKey(); + } + [Symbol.for('nodejs.util.inspect.custom')]() { + return this.inspect(); + } + inspect() { + return 'new MinKey()'; + } +} + +const checkForHexRegExp = new RegExp('^[0-9a-fA-F]{24}$'); +let PROCESS_UNIQUE = null; +const kId = Symbol('id'); +class ObjectId extends BSONValue { + get _bsontype() { + return 'ObjectId'; + } + constructor(inputId) { + super(); + let workingId; + if (typeof inputId === 'object' && inputId && 'id' in inputId) { + if (typeof inputId.id !== 'string' && !ArrayBuffer.isView(inputId.id)) { + throw new BSONError('Argument passed in must have an id that is of type string or Buffer'); + } + if ('toHexString' in inputId && typeof inputId.toHexString === 'function') { + workingId = ByteUtils.fromHex(inputId.toHexString()); + } + else { + workingId = inputId.id; + } + } + else { + workingId = inputId; + } + if (workingId == null || typeof workingId === 'number') { + this[kId] = ObjectId.generate(typeof workingId === 'number' ? workingId : undefined); + } + else if (ArrayBuffer.isView(workingId) && workingId.byteLength === 12) { + this[kId] = ByteUtils.toLocalBufferType(workingId); + } + else if (typeof workingId === 'string') { + if (workingId.length === 12) { + const bytes = ByteUtils.fromUTF8(workingId); + if (bytes.byteLength === 12) { + this[kId] = bytes; + } + else { + throw new BSONError('Argument passed in must be a string of 12 bytes'); + } + } + else if (workingId.length === 24 && checkForHexRegExp.test(workingId)) { + this[kId] = ByteUtils.fromHex(workingId); + } + else { + throw new BSONError('Argument passed in must be a string of 12 bytes or a string of 24 hex characters or an integer'); + } + } + else { + throw new BSONError('Argument passed in does not match the accepted types'); + } + if (ObjectId.cacheHexString) { + this.__id = ByteUtils.toHex(this.id); + } + } + get id() { + return this[kId]; + } + set id(value) { + this[kId] = value; + if (ObjectId.cacheHexString) { + this.__id = ByteUtils.toHex(value); + } + } + toHexString() { + if (ObjectId.cacheHexString && this.__id) { + return this.__id; + } + const hexString = ByteUtils.toHex(this.id); + if (ObjectId.cacheHexString && !this.__id) { + this.__id = hexString; + } + return hexString; + } + static getInc() { + return (ObjectId.index = (ObjectId.index + 1) % 0xffffff); + } + static generate(time) { + if ('number' !== typeof time) { + time = Math.floor(Date.now() / 1000); + } + const inc = ObjectId.getInc(); + const buffer = ByteUtils.allocate(12); + BSONDataView.fromUint8Array(buffer).setUint32(0, time, false); + if (PROCESS_UNIQUE === null) { + PROCESS_UNIQUE = ByteUtils.randomBytes(5); + } + buffer[4] = PROCESS_UNIQUE[0]; + buffer[5] = PROCESS_UNIQUE[1]; + buffer[6] = PROCESS_UNIQUE[2]; + buffer[7] = PROCESS_UNIQUE[3]; + buffer[8] = PROCESS_UNIQUE[4]; + buffer[11] = inc & 0xff; + buffer[10] = (inc >> 8) & 0xff; + buffer[9] = (inc >> 16) & 0xff; + return buffer; + } + toString(encoding) { + if (encoding === 'base64') + return ByteUtils.toBase64(this.id); + if (encoding === 'hex') + return this.toHexString(); + return this.toHexString(); + } + toJSON() { + return this.toHexString(); + } + equals(otherId) { + if (otherId === undefined || otherId === null) { + return false; + } + if (otherId instanceof ObjectId) { + return this[kId][11] === otherId[kId][11] && ByteUtils.equals(this[kId], otherId[kId]); + } + if (typeof otherId === 'string' && + ObjectId.isValid(otherId) && + otherId.length === 12 && + isUint8Array(this.id)) { + return ByteUtils.equals(this.id, ByteUtils.fromISO88591(otherId)); + } + if (typeof otherId === 'string' && ObjectId.isValid(otherId) && otherId.length === 24) { + return otherId.toLowerCase() === this.toHexString(); + } + if (typeof otherId === 'string' && ObjectId.isValid(otherId) && otherId.length === 12) { + return ByteUtils.equals(ByteUtils.fromUTF8(otherId), this.id); + } + if (typeof otherId === 'object' && + 'toHexString' in otherId && + typeof otherId.toHexString === 'function') { + const otherIdString = otherId.toHexString(); + const thisIdString = this.toHexString().toLowerCase(); + return typeof otherIdString === 'string' && otherIdString.toLowerCase() === thisIdString; + } + return false; + } + getTimestamp() { + const timestamp = new Date(); + const time = BSONDataView.fromUint8Array(this.id).getUint32(0, false); + timestamp.setTime(Math.floor(time) * 1000); + return timestamp; + } + static createPk() { + return new ObjectId(); + } + static createFromTime(time) { + const buffer = ByteUtils.fromNumberArray([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + BSONDataView.fromUint8Array(buffer).setUint32(0, time, false); + return new ObjectId(buffer); + } + static createFromHexString(hexString) { + if (hexString?.length !== 24) { + throw new BSONError('hex string must be 24 characters'); + } + return new ObjectId(ByteUtils.fromHex(hexString)); + } + static createFromBase64(base64) { + if (base64?.length !== 16) { + throw new BSONError('base64 string must be 16 characters'); + } + return new ObjectId(ByteUtils.fromBase64(base64)); + } + static isValid(id) { + if (id == null) + return false; + try { + new ObjectId(id); + return true; + } + catch { + return false; + } + } + toExtendedJSON() { + if (this.toHexString) + return { $oid: this.toHexString() }; + return { $oid: this.toString('hex') }; + } + static fromExtendedJSON(doc) { + return new ObjectId(doc.$oid); + } + [Symbol.for('nodejs.util.inspect.custom')]() { + return this.inspect(); + } + inspect() { + return `new ObjectId("${this.toHexString()}")`; + } +} +ObjectId.index = Math.floor(Math.random() * 0xffffff); + +function internalCalculateObjectSize(object, serializeFunctions, ignoreUndefined) { + let totalLength = 4 + 1; + if (Array.isArray(object)) { + for (let i = 0; i < object.length; i++) { + totalLength += calculateElement(i.toString(), object[i], serializeFunctions, true, ignoreUndefined); + } + } + else { + if (typeof object?.toBSON === 'function') { + object = object.toBSON(); + } + for (const key of Object.keys(object)) { + totalLength += calculateElement(key, object[key], serializeFunctions, false, ignoreUndefined); + } + } + return totalLength; +} +function calculateElement(name, value, serializeFunctions = false, isArray = false, ignoreUndefined = false) { + if (typeof value?.toBSON === 'function') { + value = value.toBSON(); + } + switch (typeof value) { + case 'string': + return 1 + ByteUtils.utf8ByteLength(name) + 1 + 4 + ByteUtils.utf8ByteLength(value) + 1; + case 'number': + if (Math.floor(value) === value && + value >= JS_INT_MIN && + value <= JS_INT_MAX) { + if (value >= BSON_INT32_MIN && value <= BSON_INT32_MAX) { + return (name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + (4 + 1); + } + else { + return (name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + (8 + 1); + } + } + else { + return (name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + (8 + 1); + } + case 'undefined': + if (isArray || !ignoreUndefined) + return (name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + 1; + return 0; + case 'boolean': + return (name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + (1 + 1); + case 'object': + if (value != null && + typeof value._bsontype === 'string' && + value[Symbol.for('@@mdb.bson.version')] !== BSON_MAJOR_VERSION) { + throw new BSONVersionError(); + } + else if (value == null || value._bsontype === 'MinKey' || value._bsontype === 'MaxKey') { + return (name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + 1; + } + else if (value._bsontype === 'ObjectId') { + return (name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + (12 + 1); + } + else if (value instanceof Date || isDate(value)) { + return (name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + (8 + 1); + } + else if (ArrayBuffer.isView(value) || + value instanceof ArrayBuffer || + isAnyArrayBuffer(value)) { + return ((name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + (1 + 4 + 1) + value.byteLength); + } + else if (value._bsontype === 'Long' || + value._bsontype === 'Double' || + value._bsontype === 'Timestamp') { + return (name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + (8 + 1); + } + else if (value._bsontype === 'Decimal128') { + return (name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + (16 + 1); + } + else if (value._bsontype === 'Code') { + if (value.scope != null && Object.keys(value.scope).length > 0) { + return ((name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + + 1 + + 4 + + 4 + + ByteUtils.utf8ByteLength(value.code.toString()) + + 1 + + internalCalculateObjectSize(value.scope, serializeFunctions, ignoreUndefined)); + } + else { + return ((name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + + 1 + + 4 + + ByteUtils.utf8ByteLength(value.code.toString()) + + 1); + } + } + else if (value._bsontype === 'Binary') { + const binary = value; + if (binary.sub_type === Binary.SUBTYPE_BYTE_ARRAY) { + return ((name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + + (binary.position + 1 + 4 + 1 + 4)); + } + else { + return ((name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + (binary.position + 1 + 4 + 1)); + } + } + else if (value._bsontype === 'Symbol') { + return ((name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + + ByteUtils.utf8ByteLength(value.value) + + 4 + + 1 + + 1); + } + else if (value._bsontype === 'DBRef') { + const ordered_values = Object.assign({ + $ref: value.collection, + $id: value.oid + }, value.fields); + if (value.db != null) { + ordered_values['$db'] = value.db; + } + return ((name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + + 1 + + internalCalculateObjectSize(ordered_values, serializeFunctions, ignoreUndefined)); + } + else if (value instanceof RegExp || isRegExp(value)) { + return ((name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + + 1 + + ByteUtils.utf8ByteLength(value.source) + + 1 + + (value.global ? 1 : 0) + + (value.ignoreCase ? 1 : 0) + + (value.multiline ? 1 : 0) + + 1); + } + else if (value._bsontype === 'BSONRegExp') { + return ((name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + + 1 + + ByteUtils.utf8ByteLength(value.pattern) + + 1 + + ByteUtils.utf8ByteLength(value.options) + + 1); + } + else { + return ((name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + + internalCalculateObjectSize(value, serializeFunctions, ignoreUndefined) + + 1); + } + case 'function': + if (serializeFunctions) { + return ((name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + + 1 + + 4 + + ByteUtils.utf8ByteLength(value.toString()) + + 1); + } + } + return 0; +} + +function alphabetize(str) { + return str.split('').sort().join(''); +} +class BSONRegExp extends BSONValue { + get _bsontype() { + return 'BSONRegExp'; + } + constructor(pattern, options) { + super(); + this.pattern = pattern; + this.options = alphabetize(options ?? ''); + if (this.pattern.indexOf('\x00') !== -1) { + throw new BSONError(`BSON Regex patterns cannot contain null bytes, found: ${JSON.stringify(this.pattern)}`); + } + if (this.options.indexOf('\x00') !== -1) { + throw new BSONError(`BSON Regex options cannot contain null bytes, found: ${JSON.stringify(this.options)}`); + } + for (let i = 0; i < this.options.length; i++) { + if (!(this.options[i] === 'i' || + this.options[i] === 'm' || + this.options[i] === 'x' || + this.options[i] === 'l' || + this.options[i] === 's' || + this.options[i] === 'u')) { + throw new BSONError(`The regular expression option [${this.options[i]}] is not supported`); + } + } + } + static parseOptions(options) { + return options ? options.split('').sort().join('') : ''; + } + toExtendedJSON(options) { + options = options || {}; + if (options.legacy) { + return { $regex: this.pattern, $options: this.options }; + } + return { $regularExpression: { pattern: this.pattern, options: this.options } }; + } + static fromExtendedJSON(doc) { + if ('$regex' in doc) { + if (typeof doc.$regex !== 'string') { + if (doc.$regex._bsontype === 'BSONRegExp') { + return doc; + } + } + else { + return new BSONRegExp(doc.$regex, BSONRegExp.parseOptions(doc.$options)); + } + } + if ('$regularExpression' in doc) { + return new BSONRegExp(doc.$regularExpression.pattern, BSONRegExp.parseOptions(doc.$regularExpression.options)); + } + throw new BSONError(`Unexpected BSONRegExp EJSON object form: ${JSON.stringify(doc)}`); + } + [Symbol.for('nodejs.util.inspect.custom')]() { + return this.inspect(); + } + inspect() { + return `new BSONRegExp(${JSON.stringify(this.pattern)}, ${JSON.stringify(this.options)})`; + } +} + +class BSONSymbol extends BSONValue { + get _bsontype() { + return 'BSONSymbol'; + } + constructor(value) { + super(); + this.value = value; + } + valueOf() { + return this.value; + } + toString() { + return this.value; + } + inspect() { + return `new BSONSymbol("${this.value}")`; + } + toJSON() { + return this.value; + } + toExtendedJSON() { + return { $symbol: this.value }; + } + static fromExtendedJSON(doc) { + return new BSONSymbol(doc.$symbol); + } + [Symbol.for('nodejs.util.inspect.custom')]() { + return this.inspect(); + } +} + +const LongWithoutOverridesClass = Long; +class Timestamp extends LongWithoutOverridesClass { + get _bsontype() { + return 'Timestamp'; + } + constructor(low) { + if (low == null) { + super(0, 0, true); + } + else if (typeof low === 'bigint') { + super(low, true); + } + else if (Long.isLong(low)) { + super(low.low, low.high, true); + } + else if (typeof low === 'object' && 't' in low && 'i' in low) { + if (typeof low.t !== 'number' && (typeof low.t !== 'object' || low.t._bsontype !== 'Int32')) { + throw new BSONError('Timestamp constructed from { t, i } must provide t as a number'); + } + if (typeof low.i !== 'number' && (typeof low.i !== 'object' || low.i._bsontype !== 'Int32')) { + throw new BSONError('Timestamp constructed from { t, i } must provide i as a number'); + } + const t = Number(low.t); + const i = Number(low.i); + if (t < 0 || Number.isNaN(t)) { + throw new BSONError('Timestamp constructed from { t, i } must provide a positive t'); + } + if (i < 0 || Number.isNaN(i)) { + throw new BSONError('Timestamp constructed from { t, i } must provide a positive i'); + } + if (t > 4294967295) { + throw new BSONError('Timestamp constructed from { t, i } must provide t equal or less than uint32 max'); + } + if (i > 4294967295) { + throw new BSONError('Timestamp constructed from { t, i } must provide i equal or less than uint32 max'); + } + super(i, t, true); + } + else { + throw new BSONError('A Timestamp can only be constructed with: bigint, Long, or { t: number; i: number }'); + } + } + toJSON() { + return { + $timestamp: this.toString() + }; + } + static fromInt(value) { + return new Timestamp(Long.fromInt(value, true)); + } + static fromNumber(value) { + return new Timestamp(Long.fromNumber(value, true)); + } + static fromBits(lowBits, highBits) { + return new Timestamp({ i: lowBits, t: highBits }); + } + static fromString(str, optRadix) { + return new Timestamp(Long.fromString(str, true, optRadix)); + } + toExtendedJSON() { + return { $timestamp: { t: this.high >>> 0, i: this.low >>> 0 } }; + } + static fromExtendedJSON(doc) { + const i = Long.isLong(doc.$timestamp.i) + ? doc.$timestamp.i.getLowBitsUnsigned() + : doc.$timestamp.i; + const t = Long.isLong(doc.$timestamp.t) + ? doc.$timestamp.t.getLowBitsUnsigned() + : doc.$timestamp.t; + return new Timestamp({ t, i }); + } + [Symbol.for('nodejs.util.inspect.custom')]() { + return this.inspect(); + } + inspect() { + return `new Timestamp({ t: ${this.getHighBits()}, i: ${this.getLowBits()} })`; + } +} +Timestamp.MAX_VALUE = Long.MAX_UNSIGNED_VALUE; + +const FIRST_BIT = 0x80; +const FIRST_TWO_BITS = 0xc0; +const FIRST_THREE_BITS = 0xe0; +const FIRST_FOUR_BITS = 0xf0; +const FIRST_FIVE_BITS = 0xf8; +const TWO_BIT_CHAR = 0xc0; +const THREE_BIT_CHAR = 0xe0; +const FOUR_BIT_CHAR = 0xf0; +const CONTINUING_CHAR = 0x80; +function validateUtf8(bytes, start, end) { + let continuation = 0; + for (let i = start; i < end; i += 1) { + const byte = bytes[i]; + if (continuation) { + if ((byte & FIRST_TWO_BITS) !== CONTINUING_CHAR) { + return false; + } + continuation -= 1; + } + else if (byte & FIRST_BIT) { + if ((byte & FIRST_THREE_BITS) === TWO_BIT_CHAR) { + continuation = 1; + } + else if ((byte & FIRST_FOUR_BITS) === THREE_BIT_CHAR) { + continuation = 2; + } + else if ((byte & FIRST_FIVE_BITS) === FOUR_BIT_CHAR) { + continuation = 3; + } + else { + return false; + } + } + } + return !continuation; +} + +const JS_INT_MAX_LONG = Long.fromNumber(JS_INT_MAX); +const JS_INT_MIN_LONG = Long.fromNumber(JS_INT_MIN); +function internalDeserialize(buffer, options, isArray) { + options = options == null ? {} : options; + const index = options && options.index ? options.index : 0; + const size = buffer[index] | + (buffer[index + 1] << 8) | + (buffer[index + 2] << 16) | + (buffer[index + 3] << 24); + if (size < 5) { + throw new BSONError(`bson size must be >= 5, is ${size}`); + } + if (options.allowObjectSmallerThanBufferSize && buffer.length < size) { + throw new BSONError(`buffer length ${buffer.length} must be >= bson size ${size}`); + } + if (!options.allowObjectSmallerThanBufferSize && buffer.length !== size) { + throw new BSONError(`buffer length ${buffer.length} must === bson size ${size}`); + } + if (size + index > buffer.byteLength) { + throw new BSONError(`(bson size ${size} + options.index ${index} must be <= buffer length ${buffer.byteLength})`); + } + if (buffer[index + size - 1] !== 0) { + throw new BSONError("One object, sized correctly, with a spot for an EOO, but the EOO isn't 0x00"); + } + return deserializeObject(buffer, index, options, isArray); +} +const allowedDBRefKeys = /^\$ref$|^\$id$|^\$db$/; +function deserializeObject(buffer, index, options, isArray = false) { + const fieldsAsRaw = options['fieldsAsRaw'] == null ? null : options['fieldsAsRaw']; + const raw = options['raw'] == null ? false : options['raw']; + const bsonRegExp = typeof options['bsonRegExp'] === 'boolean' ? options['bsonRegExp'] : false; + const promoteBuffers = options.promoteBuffers ?? false; + const promoteLongs = options.promoteLongs ?? true; + const promoteValues = options.promoteValues ?? true; + const useBigInt64 = options.useBigInt64 ?? false; + if (useBigInt64 && !promoteValues) { + throw new BSONError('Must either request bigint or Long for int64 deserialization'); + } + if (useBigInt64 && !promoteLongs) { + throw new BSONError('Must either request bigint or Long for int64 deserialization'); + } + const validation = options.validation == null ? { utf8: true } : options.validation; + let globalUTFValidation = true; + let validationSetting; + const utf8KeysSet = new Set(); + const utf8ValidatedKeys = validation.utf8; + if (typeof utf8ValidatedKeys === 'boolean') { + validationSetting = utf8ValidatedKeys; + } + else { + globalUTFValidation = false; + const utf8ValidationValues = Object.keys(utf8ValidatedKeys).map(function (key) { + return utf8ValidatedKeys[key]; + }); + if (utf8ValidationValues.length === 0) { + throw new BSONError('UTF-8 validation setting cannot be empty'); + } + if (typeof utf8ValidationValues[0] !== 'boolean') { + throw new BSONError('Invalid UTF-8 validation option, must specify boolean values'); + } + validationSetting = utf8ValidationValues[0]; + if (!utf8ValidationValues.every(item => item === validationSetting)) { + throw new BSONError('Invalid UTF-8 validation option - keys must be all true or all false'); + } + } + if (!globalUTFValidation) { + for (const key of Object.keys(utf8ValidatedKeys)) { + utf8KeysSet.add(key); + } + } + const startIndex = index; + if (buffer.length < 5) + throw new BSONError('corrupt bson message < 5 bytes long'); + const size = buffer[index++] | (buffer[index++] << 8) | (buffer[index++] << 16) | (buffer[index++] << 24); + if (size < 5 || size > buffer.length) + throw new BSONError('corrupt bson message'); + const object = isArray ? [] : {}; + let arrayIndex = 0; + const done = false; + let isPossibleDBRef = isArray ? false : null; + const dataview = new DataView(buffer.buffer, buffer.byteOffset, buffer.byteLength); + while (!done) { + const elementType = buffer[index++]; + if (elementType === 0) + break; + let i = index; + while (buffer[i] !== 0x00 && i < buffer.length) { + i++; + } + if (i >= buffer.byteLength) + throw new BSONError('Bad BSON Document: illegal CString'); + const name = isArray ? arrayIndex++ : ByteUtils.toUTF8(buffer, index, i); + let shouldValidateKey = true; + if (globalUTFValidation || utf8KeysSet.has(name)) { + shouldValidateKey = validationSetting; + } + else { + shouldValidateKey = !validationSetting; + } + if (isPossibleDBRef !== false && name[0] === '$') { + isPossibleDBRef = allowedDBRefKeys.test(name); + } + let value; + index = i + 1; + if (elementType === BSON_DATA_STRING) { + const stringSize = buffer[index++] | + (buffer[index++] << 8) | + (buffer[index++] << 16) | + (buffer[index++] << 24); + if (stringSize <= 0 || + stringSize > buffer.length - index || + buffer[index + stringSize - 1] !== 0) { + throw new BSONError('bad string length in bson'); + } + value = getValidatedString(buffer, index, index + stringSize - 1, shouldValidateKey); + index = index + stringSize; + } + else if (elementType === BSON_DATA_OID) { + const oid = ByteUtils.allocate(12); + oid.set(buffer.subarray(index, index + 12)); + value = new ObjectId(oid); + index = index + 12; + } + else if (elementType === BSON_DATA_INT && promoteValues === false) { + value = new Int32(buffer[index++] | (buffer[index++] << 8) | (buffer[index++] << 16) | (buffer[index++] << 24)); + } + else if (elementType === BSON_DATA_INT) { + value = + buffer[index++] | + (buffer[index++] << 8) | + (buffer[index++] << 16) | + (buffer[index++] << 24); + } + else if (elementType === BSON_DATA_NUMBER && promoteValues === false) { + value = new Double(dataview.getFloat64(index, true)); + index = index + 8; + } + else if (elementType === BSON_DATA_NUMBER) { + value = dataview.getFloat64(index, true); + index = index + 8; + } + else if (elementType === BSON_DATA_DATE) { + const lowBits = buffer[index++] | + (buffer[index++] << 8) | + (buffer[index++] << 16) | + (buffer[index++] << 24); + const highBits = buffer[index++] | + (buffer[index++] << 8) | + (buffer[index++] << 16) | + (buffer[index++] << 24); + value = new Date(new Long(lowBits, highBits).toNumber()); + } + else if (elementType === BSON_DATA_BOOLEAN) { + if (buffer[index] !== 0 && buffer[index] !== 1) + throw new BSONError('illegal boolean type value'); + value = buffer[index++] === 1; + } + else if (elementType === BSON_DATA_OBJECT) { + const _index = index; + const objectSize = buffer[index] | + (buffer[index + 1] << 8) | + (buffer[index + 2] << 16) | + (buffer[index + 3] << 24); + if (objectSize <= 0 || objectSize > buffer.length - index) + throw new BSONError('bad embedded document length in bson'); + if (raw) { + value = buffer.slice(index, index + objectSize); + } + else { + let objectOptions = options; + if (!globalUTFValidation) { + objectOptions = { ...options, validation: { utf8: shouldValidateKey } }; + } + value = deserializeObject(buffer, _index, objectOptions, false); + } + index = index + objectSize; + } + else if (elementType === BSON_DATA_ARRAY) { + const _index = index; + const objectSize = buffer[index] | + (buffer[index + 1] << 8) | + (buffer[index + 2] << 16) | + (buffer[index + 3] << 24); + let arrayOptions = options; + const stopIndex = index + objectSize; + if (fieldsAsRaw && fieldsAsRaw[name]) { + arrayOptions = { ...options, raw: true }; + } + if (!globalUTFValidation) { + arrayOptions = { ...arrayOptions, validation: { utf8: shouldValidateKey } }; + } + value = deserializeObject(buffer, _index, arrayOptions, true); + index = index + objectSize; + if (buffer[index - 1] !== 0) + throw new BSONError('invalid array terminator byte'); + if (index !== stopIndex) + throw new BSONError('corrupted array bson'); + } + else if (elementType === BSON_DATA_UNDEFINED) { + value = undefined; + } + else if (elementType === BSON_DATA_NULL) { + value = null; + } + else if (elementType === BSON_DATA_LONG) { + const dataview = BSONDataView.fromUint8Array(buffer.subarray(index, index + 8)); + const lowBits = buffer[index++] | + (buffer[index++] << 8) | + (buffer[index++] << 16) | + (buffer[index++] << 24); + const highBits = buffer[index++] | + (buffer[index++] << 8) | + (buffer[index++] << 16) | + (buffer[index++] << 24); + const long = new Long(lowBits, highBits); + if (useBigInt64) { + value = dataview.getBigInt64(0, true); + } + else if (promoteLongs && promoteValues === true) { + value = + long.lessThanOrEqual(JS_INT_MAX_LONG) && long.greaterThanOrEqual(JS_INT_MIN_LONG) + ? long.toNumber() + : long; + } + else { + value = long; + } + } + else if (elementType === BSON_DATA_DECIMAL128) { + const bytes = ByteUtils.allocate(16); + bytes.set(buffer.subarray(index, index + 16), 0); + index = index + 16; + value = new Decimal128(bytes); + } + else if (elementType === BSON_DATA_BINARY) { + let binarySize = buffer[index++] | + (buffer[index++] << 8) | + (buffer[index++] << 16) | + (buffer[index++] << 24); + const totalBinarySize = binarySize; + const subType = buffer[index++]; + if (binarySize < 0) + throw new BSONError('Negative binary type element size found'); + if (binarySize > buffer.byteLength) + throw new BSONError('Binary type size larger than document size'); + if (buffer['slice'] != null) { + if (subType === Binary.SUBTYPE_BYTE_ARRAY) { + binarySize = + buffer[index++] | + (buffer[index++] << 8) | + (buffer[index++] << 16) | + (buffer[index++] << 24); + if (binarySize < 0) + throw new BSONError('Negative binary type element size found for subtype 0x02'); + if (binarySize > totalBinarySize - 4) + throw new BSONError('Binary type with subtype 0x02 contains too long binary size'); + if (binarySize < totalBinarySize - 4) + throw new BSONError('Binary type with subtype 0x02 contains too short binary size'); + } + if (promoteBuffers && promoteValues) { + value = ByteUtils.toLocalBufferType(buffer.slice(index, index + binarySize)); + } + else { + value = new Binary(buffer.slice(index, index + binarySize), subType); + if (subType === BSON_BINARY_SUBTYPE_UUID_NEW && UUID.isValid(value)) { + value = value.toUUID(); + } + } + } + else { + const _buffer = ByteUtils.allocate(binarySize); + if (subType === Binary.SUBTYPE_BYTE_ARRAY) { + binarySize = + buffer[index++] | + (buffer[index++] << 8) | + (buffer[index++] << 16) | + (buffer[index++] << 24); + if (binarySize < 0) + throw new BSONError('Negative binary type element size found for subtype 0x02'); + if (binarySize > totalBinarySize - 4) + throw new BSONError('Binary type with subtype 0x02 contains too long binary size'); + if (binarySize < totalBinarySize - 4) + throw new BSONError('Binary type with subtype 0x02 contains too short binary size'); + } + for (i = 0; i < binarySize; i++) { + _buffer[i] = buffer[index + i]; + } + if (promoteBuffers && promoteValues) { + value = _buffer; + } + else { + value = new Binary(buffer.slice(index, index + binarySize), subType); + if (subType === BSON_BINARY_SUBTYPE_UUID_NEW && UUID.isValid(value)) { + value = value.toUUID(); + } + } + } + index = index + binarySize; + } + else if (elementType === BSON_DATA_REGEXP && bsonRegExp === false) { + i = index; + while (buffer[i] !== 0x00 && i < buffer.length) { + i++; + } + if (i >= buffer.length) + throw new BSONError('Bad BSON Document: illegal CString'); + const source = ByteUtils.toUTF8(buffer, index, i); + index = i + 1; + i = index; + while (buffer[i] !== 0x00 && i < buffer.length) { + i++; + } + if (i >= buffer.length) + throw new BSONError('Bad BSON Document: illegal CString'); + const regExpOptions = ByteUtils.toUTF8(buffer, index, i); + index = i + 1; + const optionsArray = new Array(regExpOptions.length); + for (i = 0; i < regExpOptions.length; i++) { + switch (regExpOptions[i]) { + case 'm': + optionsArray[i] = 'm'; + break; + case 's': + optionsArray[i] = 'g'; + break; + case 'i': + optionsArray[i] = 'i'; + break; + } + } + value = new RegExp(source, optionsArray.join('')); + } + else if (elementType === BSON_DATA_REGEXP && bsonRegExp === true) { + i = index; + while (buffer[i] !== 0x00 && i < buffer.length) { + i++; + } + if (i >= buffer.length) + throw new BSONError('Bad BSON Document: illegal CString'); + const source = ByteUtils.toUTF8(buffer, index, i); + index = i + 1; + i = index; + while (buffer[i] !== 0x00 && i < buffer.length) { + i++; + } + if (i >= buffer.length) + throw new BSONError('Bad BSON Document: illegal CString'); + const regExpOptions = ByteUtils.toUTF8(buffer, index, i); + index = i + 1; + value = new BSONRegExp(source, regExpOptions); + } + else if (elementType === BSON_DATA_SYMBOL) { + const stringSize = buffer[index++] | + (buffer[index++] << 8) | + (buffer[index++] << 16) | + (buffer[index++] << 24); + if (stringSize <= 0 || + stringSize > buffer.length - index || + buffer[index + stringSize - 1] !== 0) { + throw new BSONError('bad string length in bson'); + } + const symbol = getValidatedString(buffer, index, index + stringSize - 1, shouldValidateKey); + value = promoteValues ? symbol : new BSONSymbol(symbol); + index = index + stringSize; + } + else if (elementType === BSON_DATA_TIMESTAMP) { + const i = buffer[index++] + + buffer[index++] * (1 << 8) + + buffer[index++] * (1 << 16) + + buffer[index++] * (1 << 24); + const t = buffer[index++] + + buffer[index++] * (1 << 8) + + buffer[index++] * (1 << 16) + + buffer[index++] * (1 << 24); + value = new Timestamp({ i, t }); + } + else if (elementType === BSON_DATA_MIN_KEY) { + value = new MinKey(); + } + else if (elementType === BSON_DATA_MAX_KEY) { + value = new MaxKey(); + } + else if (elementType === BSON_DATA_CODE) { + const stringSize = buffer[index++] | + (buffer[index++] << 8) | + (buffer[index++] << 16) | + (buffer[index++] << 24); + if (stringSize <= 0 || + stringSize > buffer.length - index || + buffer[index + stringSize - 1] !== 0) { + throw new BSONError('bad string length in bson'); + } + const functionString = getValidatedString(buffer, index, index + stringSize - 1, shouldValidateKey); + value = new Code(functionString); + index = index + stringSize; + } + else if (elementType === BSON_DATA_CODE_W_SCOPE) { + const totalSize = buffer[index++] | + (buffer[index++] << 8) | + (buffer[index++] << 16) | + (buffer[index++] << 24); + if (totalSize < 4 + 4 + 4 + 1) { + throw new BSONError('code_w_scope total size shorter minimum expected length'); + } + const stringSize = buffer[index++] | + (buffer[index++] << 8) | + (buffer[index++] << 16) | + (buffer[index++] << 24); + if (stringSize <= 0 || + stringSize > buffer.length - index || + buffer[index + stringSize - 1] !== 0) { + throw new BSONError('bad string length in bson'); + } + const functionString = getValidatedString(buffer, index, index + stringSize - 1, shouldValidateKey); + index = index + stringSize; + const _index = index; + const objectSize = buffer[index] | + (buffer[index + 1] << 8) | + (buffer[index + 2] << 16) | + (buffer[index + 3] << 24); + const scopeObject = deserializeObject(buffer, _index, options, false); + index = index + objectSize; + if (totalSize < 4 + 4 + objectSize + stringSize) { + throw new BSONError('code_w_scope total size is too short, truncating scope'); + } + if (totalSize > 4 + 4 + objectSize + stringSize) { + throw new BSONError('code_w_scope total size is too long, clips outer document'); + } + value = new Code(functionString, scopeObject); + } + else if (elementType === BSON_DATA_DBPOINTER) { + const stringSize = buffer[index++] | + (buffer[index++] << 8) | + (buffer[index++] << 16) | + (buffer[index++] << 24); + if (stringSize <= 0 || + stringSize > buffer.length - index || + buffer[index + stringSize - 1] !== 0) + throw new BSONError('bad string length in bson'); + if (validation != null && validation.utf8) { + if (!validateUtf8(buffer, index, index + stringSize - 1)) { + throw new BSONError('Invalid UTF-8 string in BSON document'); + } + } + const namespace = ByteUtils.toUTF8(buffer, index, index + stringSize - 1); + index = index + stringSize; + const oidBuffer = ByteUtils.allocate(12); + oidBuffer.set(buffer.subarray(index, index + 12), 0); + const oid = new ObjectId(oidBuffer); + index = index + 12; + value = new DBRef(namespace, oid); + } + else { + throw new BSONError(`Detected unknown BSON type ${elementType.toString(16)} for fieldname "${name}"`); + } + if (name === '__proto__') { + Object.defineProperty(object, name, { + value, + writable: true, + enumerable: true, + configurable: true + }); + } + else { + object[name] = value; + } + } + if (size !== index - startIndex) { + if (isArray) + throw new BSONError('corrupt array bson'); + throw new BSONError('corrupt object bson'); + } + if (!isPossibleDBRef) + return object; + if (isDBRefLike(object)) { + const copy = Object.assign({}, object); + delete copy.$ref; + delete copy.$id; + delete copy.$db; + return new DBRef(object.$ref, object.$id, object.$db, copy); + } + return object; +} +function getValidatedString(buffer, start, end, shouldValidateUtf8) { + const value = ByteUtils.toUTF8(buffer, start, end); + if (shouldValidateUtf8) { + for (let i = 0; i < value.length; i++) { + if (value.charCodeAt(i) === 0xfffd) { + if (!validateUtf8(buffer, start, end)) { + throw new BSONError('Invalid UTF-8 string in BSON document'); + } + break; + } + } + } + return value; +} + +const regexp = /\x00/; +const ignoreKeys = new Set(['$db', '$ref', '$id', '$clusterTime']); +function serializeString(buffer, key, value, index) { + buffer[index++] = BSON_DATA_STRING; + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + index = index + numberOfWrittenBytes + 1; + buffer[index - 1] = 0; + const size = ByteUtils.encodeUTF8Into(buffer, value, index + 4); + buffer[index + 3] = ((size + 1) >> 24) & 0xff; + buffer[index + 2] = ((size + 1) >> 16) & 0xff; + buffer[index + 1] = ((size + 1) >> 8) & 0xff; + buffer[index] = (size + 1) & 0xff; + index = index + 4 + size; + buffer[index++] = 0; + return index; +} +const NUMBER_SPACE = new DataView(new ArrayBuffer(8), 0, 8); +const FOUR_BYTE_VIEW_ON_NUMBER = new Uint8Array(NUMBER_SPACE.buffer, 0, 4); +const EIGHT_BYTE_VIEW_ON_NUMBER = new Uint8Array(NUMBER_SPACE.buffer, 0, 8); +function serializeNumber(buffer, key, value, index) { + const isNegativeZero = Object.is(value, -0); + const type = !isNegativeZero && + Number.isSafeInteger(value) && + value <= BSON_INT32_MAX && + value >= BSON_INT32_MIN + ? BSON_DATA_INT + : BSON_DATA_NUMBER; + if (type === BSON_DATA_INT) { + NUMBER_SPACE.setInt32(0, value, true); + } + else { + NUMBER_SPACE.setFloat64(0, value, true); + } + const bytes = type === BSON_DATA_INT ? FOUR_BYTE_VIEW_ON_NUMBER : EIGHT_BYTE_VIEW_ON_NUMBER; + buffer[index++] = type; + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + index = index + numberOfWrittenBytes; + buffer[index++] = 0x00; + buffer.set(bytes, index); + index += bytes.byteLength; + return index; +} +function serializeBigInt(buffer, key, value, index) { + buffer[index++] = BSON_DATA_LONG; + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + index += numberOfWrittenBytes; + buffer[index++] = 0; + NUMBER_SPACE.setBigInt64(0, value, true); + buffer.set(EIGHT_BYTE_VIEW_ON_NUMBER, index); + index += EIGHT_BYTE_VIEW_ON_NUMBER.byteLength; + return index; +} +function serializeNull(buffer, key, _, index) { + buffer[index++] = BSON_DATA_NULL; + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + return index; +} +function serializeBoolean(buffer, key, value, index) { + buffer[index++] = BSON_DATA_BOOLEAN; + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + buffer[index++] = value ? 1 : 0; + return index; +} +function serializeDate(buffer, key, value, index) { + buffer[index++] = BSON_DATA_DATE; + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + const dateInMilis = Long.fromNumber(value.getTime()); + const lowBits = dateInMilis.getLowBits(); + const highBits = dateInMilis.getHighBits(); + buffer[index++] = lowBits & 0xff; + buffer[index++] = (lowBits >> 8) & 0xff; + buffer[index++] = (lowBits >> 16) & 0xff; + buffer[index++] = (lowBits >> 24) & 0xff; + buffer[index++] = highBits & 0xff; + buffer[index++] = (highBits >> 8) & 0xff; + buffer[index++] = (highBits >> 16) & 0xff; + buffer[index++] = (highBits >> 24) & 0xff; + return index; +} +function serializeRegExp(buffer, key, value, index) { + buffer[index++] = BSON_DATA_REGEXP; + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + if (value.source && value.source.match(regexp) != null) { + throw new BSONError('value ' + value.source + ' must not contain null bytes'); + } + index = index + ByteUtils.encodeUTF8Into(buffer, value.source, index); + buffer[index++] = 0x00; + if (value.ignoreCase) + buffer[index++] = 0x69; + if (value.global) + buffer[index++] = 0x73; + if (value.multiline) + buffer[index++] = 0x6d; + buffer[index++] = 0x00; + return index; +} +function serializeBSONRegExp(buffer, key, value, index) { + buffer[index++] = BSON_DATA_REGEXP; + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + if (value.pattern.match(regexp) != null) { + throw new BSONError('pattern ' + value.pattern + ' must not contain null bytes'); + } + index = index + ByteUtils.encodeUTF8Into(buffer, value.pattern, index); + buffer[index++] = 0x00; + const sortedOptions = value.options.split('').sort().join(''); + index = index + ByteUtils.encodeUTF8Into(buffer, sortedOptions, index); + buffer[index++] = 0x00; + return index; +} +function serializeMinMax(buffer, key, value, index) { + if (value === null) { + buffer[index++] = BSON_DATA_NULL; + } + else if (value._bsontype === 'MinKey') { + buffer[index++] = BSON_DATA_MIN_KEY; + } + else { + buffer[index++] = BSON_DATA_MAX_KEY; + } + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + return index; +} +function serializeObjectId(buffer, key, value, index) { + buffer[index++] = BSON_DATA_OID; + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + if (isUint8Array(value.id)) { + buffer.set(value.id.subarray(0, 12), index); + } + else { + throw new BSONError('object [' + JSON.stringify(value) + '] is not a valid ObjectId'); + } + return index + 12; +} +function serializeBuffer(buffer, key, value, index) { + buffer[index++] = BSON_DATA_BINARY; + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + const size = value.length; + buffer[index++] = size & 0xff; + buffer[index++] = (size >> 8) & 0xff; + buffer[index++] = (size >> 16) & 0xff; + buffer[index++] = (size >> 24) & 0xff; + buffer[index++] = BSON_BINARY_SUBTYPE_DEFAULT; + buffer.set(value, index); + index = index + size; + return index; +} +function serializeObject(buffer, key, value, index, checkKeys, depth, serializeFunctions, ignoreUndefined, path) { + if (path.has(value)) { + throw new BSONError('Cannot convert circular structure to BSON'); + } + path.add(value); + buffer[index++] = Array.isArray(value) ? BSON_DATA_ARRAY : BSON_DATA_OBJECT; + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + const endIndex = serializeInto(buffer, value, checkKeys, index, depth + 1, serializeFunctions, ignoreUndefined, path); + path.delete(value); + return endIndex; +} +function serializeDecimal128(buffer, key, value, index) { + buffer[index++] = BSON_DATA_DECIMAL128; + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + buffer.set(value.bytes.subarray(0, 16), index); + return index + 16; +} +function serializeLong(buffer, key, value, index) { + buffer[index++] = + value._bsontype === 'Long' ? BSON_DATA_LONG : BSON_DATA_TIMESTAMP; + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + const lowBits = value.getLowBits(); + const highBits = value.getHighBits(); + buffer[index++] = lowBits & 0xff; + buffer[index++] = (lowBits >> 8) & 0xff; + buffer[index++] = (lowBits >> 16) & 0xff; + buffer[index++] = (lowBits >> 24) & 0xff; + buffer[index++] = highBits & 0xff; + buffer[index++] = (highBits >> 8) & 0xff; + buffer[index++] = (highBits >> 16) & 0xff; + buffer[index++] = (highBits >> 24) & 0xff; + return index; +} +function serializeInt32(buffer, key, value, index) { + value = value.valueOf(); + buffer[index++] = BSON_DATA_INT; + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + buffer[index++] = value & 0xff; + buffer[index++] = (value >> 8) & 0xff; + buffer[index++] = (value >> 16) & 0xff; + buffer[index++] = (value >> 24) & 0xff; + return index; +} +function serializeDouble(buffer, key, value, index) { + buffer[index++] = BSON_DATA_NUMBER; + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + NUMBER_SPACE.setFloat64(0, value.value, true); + buffer.set(EIGHT_BYTE_VIEW_ON_NUMBER, index); + index = index + 8; + return index; +} +function serializeFunction(buffer, key, value, index) { + buffer[index++] = BSON_DATA_CODE; + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + const functionString = value.toString(); + const size = ByteUtils.encodeUTF8Into(buffer, functionString, index + 4) + 1; + buffer[index] = size & 0xff; + buffer[index + 1] = (size >> 8) & 0xff; + buffer[index + 2] = (size >> 16) & 0xff; + buffer[index + 3] = (size >> 24) & 0xff; + index = index + 4 + size - 1; + buffer[index++] = 0; + return index; +} +function serializeCode(buffer, key, value, index, checkKeys = false, depth = 0, serializeFunctions = false, ignoreUndefined = true, path) { + if (value.scope && typeof value.scope === 'object') { + buffer[index++] = BSON_DATA_CODE_W_SCOPE; + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + let startIndex = index; + const functionString = value.code; + index = index + 4; + const codeSize = ByteUtils.encodeUTF8Into(buffer, functionString, index + 4) + 1; + buffer[index] = codeSize & 0xff; + buffer[index + 1] = (codeSize >> 8) & 0xff; + buffer[index + 2] = (codeSize >> 16) & 0xff; + buffer[index + 3] = (codeSize >> 24) & 0xff; + buffer[index + 4 + codeSize - 1] = 0; + index = index + codeSize + 4; + const endIndex = serializeInto(buffer, value.scope, checkKeys, index, depth + 1, serializeFunctions, ignoreUndefined, path); + index = endIndex - 1; + const totalSize = endIndex - startIndex; + buffer[startIndex++] = totalSize & 0xff; + buffer[startIndex++] = (totalSize >> 8) & 0xff; + buffer[startIndex++] = (totalSize >> 16) & 0xff; + buffer[startIndex++] = (totalSize >> 24) & 0xff; + buffer[index++] = 0; + } + else { + buffer[index++] = BSON_DATA_CODE; + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + const functionString = value.code.toString(); + const size = ByteUtils.encodeUTF8Into(buffer, functionString, index + 4) + 1; + buffer[index] = size & 0xff; + buffer[index + 1] = (size >> 8) & 0xff; + buffer[index + 2] = (size >> 16) & 0xff; + buffer[index + 3] = (size >> 24) & 0xff; + index = index + 4 + size - 1; + buffer[index++] = 0; + } + return index; +} +function serializeBinary(buffer, key, value, index) { + buffer[index++] = BSON_DATA_BINARY; + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + const data = value.buffer; + let size = value.position; + if (value.sub_type === Binary.SUBTYPE_BYTE_ARRAY) + size = size + 4; + buffer[index++] = size & 0xff; + buffer[index++] = (size >> 8) & 0xff; + buffer[index++] = (size >> 16) & 0xff; + buffer[index++] = (size >> 24) & 0xff; + buffer[index++] = value.sub_type; + if (value.sub_type === Binary.SUBTYPE_BYTE_ARRAY) { + size = size - 4; + buffer[index++] = size & 0xff; + buffer[index++] = (size >> 8) & 0xff; + buffer[index++] = (size >> 16) & 0xff; + buffer[index++] = (size >> 24) & 0xff; + } + buffer.set(data, index); + index = index + value.position; + return index; +} +function serializeSymbol(buffer, key, value, index) { + buffer[index++] = BSON_DATA_SYMBOL; + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + const size = ByteUtils.encodeUTF8Into(buffer, value.value, index + 4) + 1; + buffer[index] = size & 0xff; + buffer[index + 1] = (size >> 8) & 0xff; + buffer[index + 2] = (size >> 16) & 0xff; + buffer[index + 3] = (size >> 24) & 0xff; + index = index + 4 + size - 1; + buffer[index++] = 0x00; + return index; +} +function serializeDBRef(buffer, key, value, index, depth, serializeFunctions, path) { + buffer[index++] = BSON_DATA_OBJECT; + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + let startIndex = index; + let output = { + $ref: value.collection || value.namespace, + $id: value.oid + }; + if (value.db != null) { + output.$db = value.db; + } + output = Object.assign(output, value.fields); + const endIndex = serializeInto(buffer, output, false, index, depth + 1, serializeFunctions, true, path); + const size = endIndex - startIndex; + buffer[startIndex++] = size & 0xff; + buffer[startIndex++] = (size >> 8) & 0xff; + buffer[startIndex++] = (size >> 16) & 0xff; + buffer[startIndex++] = (size >> 24) & 0xff; + return endIndex; +} +function serializeInto(buffer, object, checkKeys, startingIndex, depth, serializeFunctions, ignoreUndefined, path) { + if (path == null) { + if (object == null) { + buffer[0] = 0x05; + buffer[1] = 0x00; + buffer[2] = 0x00; + buffer[3] = 0x00; + buffer[4] = 0x00; + return 5; + } + if (Array.isArray(object)) { + throw new BSONError('serialize does not support an array as the root input'); + } + if (typeof object !== 'object') { + throw new BSONError('serialize does not support non-object as the root input'); + } + else if ('_bsontype' in object && typeof object._bsontype === 'string') { + throw new BSONError(`BSON types cannot be serialized as a document`); + } + else if (isDate(object) || + isRegExp(object) || + isUint8Array(object) || + isAnyArrayBuffer(object)) { + throw new BSONError(`date, regexp, typedarray, and arraybuffer cannot be BSON documents`); + } + path = new Set(); + } + path.add(object); + let index = startingIndex + 4; + if (Array.isArray(object)) { + for (let i = 0; i < object.length; i++) { + const key = `${i}`; + let value = object[i]; + if (typeof value?.toBSON === 'function') { + value = value.toBSON(); + } + if (typeof value === 'string') { + index = serializeString(buffer, key, value, index); + } + else if (typeof value === 'number') { + index = serializeNumber(buffer, key, value, index); + } + else if (typeof value === 'bigint') { + index = serializeBigInt(buffer, key, value, index); + } + else if (typeof value === 'boolean') { + index = serializeBoolean(buffer, key, value, index); + } + else if (value instanceof Date || isDate(value)) { + index = serializeDate(buffer, key, value, index); + } + else if (value === undefined) { + index = serializeNull(buffer, key, value, index); + } + else if (value === null) { + index = serializeNull(buffer, key, value, index); + } + else if (isUint8Array(value)) { + index = serializeBuffer(buffer, key, value, index); + } + else if (value instanceof RegExp || isRegExp(value)) { + index = serializeRegExp(buffer, key, value, index); + } + else if (typeof value === 'object' && value._bsontype == null) { + index = serializeObject(buffer, key, value, index, checkKeys, depth, serializeFunctions, ignoreUndefined, path); + } + else if (typeof value === 'object' && + value[Symbol.for('@@mdb.bson.version')] !== BSON_MAJOR_VERSION) { + throw new BSONVersionError(); + } + else if (value._bsontype === 'ObjectId') { + index = serializeObjectId(buffer, key, value, index); + } + else if (value._bsontype === 'Decimal128') { + index = serializeDecimal128(buffer, key, value, index); + } + else if (value._bsontype === 'Long' || value._bsontype === 'Timestamp') { + index = serializeLong(buffer, key, value, index); + } + else if (value._bsontype === 'Double') { + index = serializeDouble(buffer, key, value, index); + } + else if (typeof value === 'function' && serializeFunctions) { + index = serializeFunction(buffer, key, value, index); + } + else if (value._bsontype === 'Code') { + index = serializeCode(buffer, key, value, index, checkKeys, depth, serializeFunctions, ignoreUndefined, path); + } + else if (value._bsontype === 'Binary') { + index = serializeBinary(buffer, key, value, index); + } + else if (value._bsontype === 'BSONSymbol') { + index = serializeSymbol(buffer, key, value, index); + } + else if (value._bsontype === 'DBRef') { + index = serializeDBRef(buffer, key, value, index, depth, serializeFunctions, path); + } + else if (value._bsontype === 'BSONRegExp') { + index = serializeBSONRegExp(buffer, key, value, index); + } + else if (value._bsontype === 'Int32') { + index = serializeInt32(buffer, key, value, index); + } + else if (value._bsontype === 'MinKey' || value._bsontype === 'MaxKey') { + index = serializeMinMax(buffer, key, value, index); + } + else if (typeof value._bsontype !== 'undefined') { + throw new BSONError(`Unrecognized or invalid _bsontype: ${String(value._bsontype)}`); + } + } + } + else if (object instanceof Map || isMap(object)) { + const iterator = object.entries(); + let done = false; + while (!done) { + const entry = iterator.next(); + done = !!entry.done; + if (done) + continue; + const key = entry.value[0]; + let value = entry.value[1]; + if (typeof value?.toBSON === 'function') { + value = value.toBSON(); + } + const type = typeof value; + if (typeof key === 'string' && !ignoreKeys.has(key)) { + if (key.match(regexp) != null) { + throw new BSONError('key ' + key + ' must not contain null bytes'); + } + if (checkKeys) { + if ('$' === key[0]) { + throw new BSONError('key ' + key + " must not start with '$'"); + } + else if (~key.indexOf('.')) { + throw new BSONError('key ' + key + " must not contain '.'"); + } + } + } + if (type === 'string') { + index = serializeString(buffer, key, value, index); + } + else if (type === 'number') { + index = serializeNumber(buffer, key, value, index); + } + else if (type === 'bigint') { + index = serializeBigInt(buffer, key, value, index); + } + else if (type === 'boolean') { + index = serializeBoolean(buffer, key, value, index); + } + else if (value instanceof Date || isDate(value)) { + index = serializeDate(buffer, key, value, index); + } + else if (value === null || (value === undefined && ignoreUndefined === false)) { + index = serializeNull(buffer, key, value, index); + } + else if (isUint8Array(value)) { + index = serializeBuffer(buffer, key, value, index); + } + else if (value instanceof RegExp || isRegExp(value)) { + index = serializeRegExp(buffer, key, value, index); + } + else if (type === 'object' && value._bsontype == null) { + index = serializeObject(buffer, key, value, index, checkKeys, depth, serializeFunctions, ignoreUndefined, path); + } + else if (typeof value === 'object' && + value[Symbol.for('@@mdb.bson.version')] !== BSON_MAJOR_VERSION) { + throw new BSONVersionError(); + } + else if (value._bsontype === 'ObjectId') { + index = serializeObjectId(buffer, key, value, index); + } + else if (type === 'object' && value._bsontype === 'Decimal128') { + index = serializeDecimal128(buffer, key, value, index); + } + else if (value._bsontype === 'Long' || value._bsontype === 'Timestamp') { + index = serializeLong(buffer, key, value, index); + } + else if (value._bsontype === 'Double') { + index = serializeDouble(buffer, key, value, index); + } + else if (value._bsontype === 'Code') { + index = serializeCode(buffer, key, value, index, checkKeys, depth, serializeFunctions, ignoreUndefined, path); + } + else if (typeof value === 'function' && serializeFunctions) { + index = serializeFunction(buffer, key, value, index); + } + else if (value._bsontype === 'Binary') { + index = serializeBinary(buffer, key, value, index); + } + else if (value._bsontype === 'BSONSymbol') { + index = serializeSymbol(buffer, key, value, index); + } + else if (value._bsontype === 'DBRef') { + index = serializeDBRef(buffer, key, value, index, depth, serializeFunctions, path); + } + else if (value._bsontype === 'BSONRegExp') { + index = serializeBSONRegExp(buffer, key, value, index); + } + else if (value._bsontype === 'Int32') { + index = serializeInt32(buffer, key, value, index); + } + else if (value._bsontype === 'MinKey' || value._bsontype === 'MaxKey') { + index = serializeMinMax(buffer, key, value, index); + } + else if (typeof value._bsontype !== 'undefined') { + throw new BSONError(`Unrecognized or invalid _bsontype: ${String(value._bsontype)}`); + } + } + } + else { + if (typeof object?.toBSON === 'function') { + object = object.toBSON(); + if (object != null && typeof object !== 'object') { + throw new BSONError('toBSON function did not return an object'); + } + } + for (const key of Object.keys(object)) { + let value = object[key]; + if (typeof value?.toBSON === 'function') { + value = value.toBSON(); + } + const type = typeof value; + if (typeof key === 'string' && !ignoreKeys.has(key)) { + if (key.match(regexp) != null) { + throw new BSONError('key ' + key + ' must not contain null bytes'); + } + if (checkKeys) { + if ('$' === key[0]) { + throw new BSONError('key ' + key + " must not start with '$'"); + } + else if (~key.indexOf('.')) { + throw new BSONError('key ' + key + " must not contain '.'"); + } + } + } + if (type === 'string') { + index = serializeString(buffer, key, value, index); + } + else if (type === 'number') { + index = serializeNumber(buffer, key, value, index); + } + else if (type === 'bigint') { + index = serializeBigInt(buffer, key, value, index); + } + else if (type === 'boolean') { + index = serializeBoolean(buffer, key, value, index); + } + else if (value instanceof Date || isDate(value)) { + index = serializeDate(buffer, key, value, index); + } + else if (value === undefined) { + if (ignoreUndefined === false) + index = serializeNull(buffer, key, value, index); + } + else if (value === null) { + index = serializeNull(buffer, key, value, index); + } + else if (isUint8Array(value)) { + index = serializeBuffer(buffer, key, value, index); + } + else if (value instanceof RegExp || isRegExp(value)) { + index = serializeRegExp(buffer, key, value, index); + } + else if (type === 'object' && value._bsontype == null) { + index = serializeObject(buffer, key, value, index, checkKeys, depth, serializeFunctions, ignoreUndefined, path); + } + else if (typeof value === 'object' && + value[Symbol.for('@@mdb.bson.version')] !== BSON_MAJOR_VERSION) { + throw new BSONVersionError(); + } + else if (value._bsontype === 'ObjectId') { + index = serializeObjectId(buffer, key, value, index); + } + else if (type === 'object' && value._bsontype === 'Decimal128') { + index = serializeDecimal128(buffer, key, value, index); + } + else if (value._bsontype === 'Long' || value._bsontype === 'Timestamp') { + index = serializeLong(buffer, key, value, index); + } + else if (value._bsontype === 'Double') { + index = serializeDouble(buffer, key, value, index); + } + else if (value._bsontype === 'Code') { + index = serializeCode(buffer, key, value, index, checkKeys, depth, serializeFunctions, ignoreUndefined, path); + } + else if (typeof value === 'function' && serializeFunctions) { + index = serializeFunction(buffer, key, value, index); + } + else if (value._bsontype === 'Binary') { + index = serializeBinary(buffer, key, value, index); + } + else if (value._bsontype === 'BSONSymbol') { + index = serializeSymbol(buffer, key, value, index); + } + else if (value._bsontype === 'DBRef') { + index = serializeDBRef(buffer, key, value, index, depth, serializeFunctions, path); + } + else if (value._bsontype === 'BSONRegExp') { + index = serializeBSONRegExp(buffer, key, value, index); + } + else if (value._bsontype === 'Int32') { + index = serializeInt32(buffer, key, value, index); + } + else if (value._bsontype === 'MinKey' || value._bsontype === 'MaxKey') { + index = serializeMinMax(buffer, key, value, index); + } + else if (typeof value._bsontype !== 'undefined') { + throw new BSONError(`Unrecognized or invalid _bsontype: ${String(value._bsontype)}`); + } + } + } + path.delete(object); + buffer[index++] = 0x00; + const size = index - startingIndex; + buffer[startingIndex++] = size & 0xff; + buffer[startingIndex++] = (size >> 8) & 0xff; + buffer[startingIndex++] = (size >> 16) & 0xff; + buffer[startingIndex++] = (size >> 24) & 0xff; + return index; +} + +function isBSONType(value) { + return (value != null && + typeof value === 'object' && + '_bsontype' in value && + typeof value._bsontype === 'string'); +} +const keysToCodecs = { + $oid: ObjectId, + $binary: Binary, + $uuid: Binary, + $symbol: BSONSymbol, + $numberInt: Int32, + $numberDecimal: Decimal128, + $numberDouble: Double, + $numberLong: Long, + $minKey: MinKey, + $maxKey: MaxKey, + $regex: BSONRegExp, + $regularExpression: BSONRegExp, + $timestamp: Timestamp +}; +function deserializeValue(value, options = {}) { + if (typeof value === 'number') { + const in32BitRange = value <= BSON_INT32_MAX && value >= BSON_INT32_MIN; + const in64BitRange = value <= BSON_INT64_MAX && value >= BSON_INT64_MIN; + if (options.relaxed || options.legacy) { + return value; + } + if (Number.isInteger(value) && !Object.is(value, -0)) { + if (in32BitRange) { + return new Int32(value); + } + if (in64BitRange) { + if (options.useBigInt64) { + return BigInt(value); + } + return Long.fromNumber(value); + } + } + return new Double(value); + } + if (value == null || typeof value !== 'object') + return value; + if (value.$undefined) + return null; + const keys = Object.keys(value).filter(k => k.startsWith('$') && value[k] != null); + for (let i = 0; i < keys.length; i++) { + const c = keysToCodecs[keys[i]]; + if (c) + return c.fromExtendedJSON(value, options); + } + if (value.$date != null) { + const d = value.$date; + const date = new Date(); + if (options.legacy) { + if (typeof d === 'number') + date.setTime(d); + else if (typeof d === 'string') + date.setTime(Date.parse(d)); + else if (typeof d === 'bigint') + date.setTime(Number(d)); + else + throw new BSONRuntimeError(`Unrecognized type for EJSON date: ${typeof d}`); + } + else { + if (typeof d === 'string') + date.setTime(Date.parse(d)); + else if (Long.isLong(d)) + date.setTime(d.toNumber()); + else if (typeof d === 'number' && options.relaxed) + date.setTime(d); + else if (typeof d === 'bigint') + date.setTime(Number(d)); + else + throw new BSONRuntimeError(`Unrecognized type for EJSON date: ${typeof d}`); + } + return date; + } + if (value.$code != null) { + const copy = Object.assign({}, value); + if (value.$scope) { + copy.$scope = deserializeValue(value.$scope); + } + return Code.fromExtendedJSON(value); + } + if (isDBRefLike(value) || value.$dbPointer) { + const v = value.$ref ? value : value.$dbPointer; + if (v instanceof DBRef) + return v; + const dollarKeys = Object.keys(v).filter(k => k.startsWith('$')); + let valid = true; + dollarKeys.forEach(k => { + if (['$ref', '$id', '$db'].indexOf(k) === -1) + valid = false; + }); + if (valid) + return DBRef.fromExtendedJSON(v); + } + return value; +} +function serializeArray(array, options) { + return array.map((v, index) => { + options.seenObjects.push({ propertyName: `index ${index}`, obj: null }); + try { + return serializeValue(v, options); + } + finally { + options.seenObjects.pop(); + } + }); +} +function getISOString(date) { + const isoStr = date.toISOString(); + return date.getUTCMilliseconds() !== 0 ? isoStr : isoStr.slice(0, -5) + 'Z'; +} +function serializeValue(value, options) { + if (value instanceof Map || isMap(value)) { + const obj = Object.create(null); + for (const [k, v] of value) { + if (typeof k !== 'string') { + throw new BSONError('Can only serialize maps with string keys'); + } + obj[k] = v; + } + return serializeValue(obj, options); + } + if ((typeof value === 'object' || typeof value === 'function') && value !== null) { + const index = options.seenObjects.findIndex(entry => entry.obj === value); + if (index !== -1) { + const props = options.seenObjects.map(entry => entry.propertyName); + const leadingPart = props + .slice(0, index) + .map(prop => `${prop} -> `) + .join(''); + const alreadySeen = props[index]; + const circularPart = ' -> ' + + props + .slice(index + 1, props.length - 1) + .map(prop => `${prop} -> `) + .join(''); + const current = props[props.length - 1]; + const leadingSpace = ' '.repeat(leadingPart.length + alreadySeen.length / 2); + const dashes = '-'.repeat(circularPart.length + (alreadySeen.length + current.length) / 2 - 1); + throw new BSONError('Converting circular structure to EJSON:\n' + + ` ${leadingPart}${alreadySeen}${circularPart}${current}\n` + + ` ${leadingSpace}\\${dashes}/`); + } + options.seenObjects[options.seenObjects.length - 1].obj = value; + } + if (Array.isArray(value)) + return serializeArray(value, options); + if (value === undefined) + return null; + if (value instanceof Date || isDate(value)) { + const dateNum = value.getTime(), inRange = dateNum > -1 && dateNum < 253402318800000; + if (options.legacy) { + return options.relaxed && inRange + ? { $date: value.getTime() } + : { $date: getISOString(value) }; + } + return options.relaxed && inRange + ? { $date: getISOString(value) } + : { $date: { $numberLong: value.getTime().toString() } }; + } + if (typeof value === 'number' && (!options.relaxed || !isFinite(value))) { + if (Number.isInteger(value) && !Object.is(value, -0)) { + if (value >= BSON_INT32_MIN && value <= BSON_INT32_MAX) { + return { $numberInt: value.toString() }; + } + if (value >= BSON_INT64_MIN && value <= BSON_INT64_MAX) { + return { $numberLong: value.toString() }; + } + } + return { $numberDouble: Object.is(value, -0) ? '-0.0' : value.toString() }; + } + if (typeof value === 'bigint') { + if (!options.relaxed) { + return { $numberLong: BigInt.asIntN(64, value).toString() }; + } + return Number(BigInt.asIntN(64, value)); + } + if (value instanceof RegExp || isRegExp(value)) { + let flags = value.flags; + if (flags === undefined) { + const match = value.toString().match(/[gimuy]*$/); + if (match) { + flags = match[0]; + } + } + const rx = new BSONRegExp(value.source, flags); + return rx.toExtendedJSON(options); + } + if (value != null && typeof value === 'object') + return serializeDocument(value, options); + return value; +} +const BSON_TYPE_MAPPINGS = { + Binary: (o) => new Binary(o.value(), o.sub_type), + Code: (o) => new Code(o.code, o.scope), + DBRef: (o) => new DBRef(o.collection || o.namespace, o.oid, o.db, o.fields), + Decimal128: (o) => new Decimal128(o.bytes), + Double: (o) => new Double(o.value), + Int32: (o) => new Int32(o.value), + Long: (o) => Long.fromBits(o.low != null ? o.low : o.low_, o.low != null ? o.high : o.high_, o.low != null ? o.unsigned : o.unsigned_), + MaxKey: () => new MaxKey(), + MinKey: () => new MinKey(), + ObjectId: (o) => new ObjectId(o), + BSONRegExp: (o) => new BSONRegExp(o.pattern, o.options), + BSONSymbol: (o) => new BSONSymbol(o.value), + Timestamp: (o) => Timestamp.fromBits(o.low, o.high) +}; +function serializeDocument(doc, options) { + if (doc == null || typeof doc !== 'object') + throw new BSONError('not an object instance'); + const bsontype = doc._bsontype; + if (typeof bsontype === 'undefined') { + const _doc = {}; + for (const name of Object.keys(doc)) { + options.seenObjects.push({ propertyName: name, obj: null }); + try { + const value = serializeValue(doc[name], options); + if (name === '__proto__') { + Object.defineProperty(_doc, name, { + value, + writable: true, + enumerable: true, + configurable: true + }); + } + else { + _doc[name] = value; + } + } + finally { + options.seenObjects.pop(); + } + } + return _doc; + } + else if (doc != null && + typeof doc === 'object' && + typeof doc._bsontype === 'string' && + doc[Symbol.for('@@mdb.bson.version')] !== BSON_MAJOR_VERSION) { + throw new BSONVersionError(); + } + else if (isBSONType(doc)) { + let outDoc = doc; + if (typeof outDoc.toExtendedJSON !== 'function') { + const mapper = BSON_TYPE_MAPPINGS[doc._bsontype]; + if (!mapper) { + throw new BSONError('Unrecognized or invalid _bsontype: ' + doc._bsontype); + } + outDoc = mapper(outDoc); + } + if (bsontype === 'Code' && outDoc.scope) { + outDoc = new Code(outDoc.code, serializeValue(outDoc.scope, options)); + } + else if (bsontype === 'DBRef' && outDoc.oid) { + outDoc = new DBRef(serializeValue(outDoc.collection, options), serializeValue(outDoc.oid, options), serializeValue(outDoc.db, options), serializeValue(outDoc.fields, options)); + } + return outDoc.toExtendedJSON(options); + } + else { + throw new BSONError('_bsontype must be a string, but was: ' + typeof bsontype); + } +} +function parse(text, options) { + const ejsonOptions = { + useBigInt64: options?.useBigInt64 ?? false, + relaxed: options?.relaxed ?? true, + legacy: options?.legacy ?? false + }; + return JSON.parse(text, (key, value) => { + if (key.indexOf('\x00') !== -1) { + throw new BSONError(`BSON Document field names cannot contain null bytes, found: ${JSON.stringify(key)}`); + } + return deserializeValue(value, ejsonOptions); + }); +} +function stringify(value, replacer, space, options) { + if (space != null && typeof space === 'object') { + options = space; + space = 0; + } + if (replacer != null && typeof replacer === 'object' && !Array.isArray(replacer)) { + options = replacer; + replacer = undefined; + space = 0; + } + const serializeOptions = Object.assign({ relaxed: true, legacy: false }, options, { + seenObjects: [{ propertyName: '(root)', obj: null }] + }); + const doc = serializeValue(value, serializeOptions); + return JSON.stringify(doc, replacer, space); +} +function EJSONserialize(value, options) { + options = options || {}; + return JSON.parse(stringify(value, options)); +} +function EJSONdeserialize(ejson, options) { + options = options || {}; + return parse(JSON.stringify(ejson), options); +} +const EJSON = Object.create(null); +EJSON.parse = parse; +EJSON.stringify = stringify; +EJSON.serialize = EJSONserialize; +EJSON.deserialize = EJSONdeserialize; +Object.freeze(EJSON); + +const MAXSIZE = 1024 * 1024 * 17; +let buffer = ByteUtils.allocate(MAXSIZE); +function setInternalBufferSize(size) { + if (buffer.length < size) { + buffer = ByteUtils.allocate(size); + } +} +function serialize(object, options = {}) { + const checkKeys = typeof options.checkKeys === 'boolean' ? options.checkKeys : false; + const serializeFunctions = typeof options.serializeFunctions === 'boolean' ? options.serializeFunctions : false; + const ignoreUndefined = typeof options.ignoreUndefined === 'boolean' ? options.ignoreUndefined : true; + const minInternalBufferSize = typeof options.minInternalBufferSize === 'number' ? options.minInternalBufferSize : MAXSIZE; + if (buffer.length < minInternalBufferSize) { + buffer = ByteUtils.allocate(minInternalBufferSize); + } + const serializationIndex = serializeInto(buffer, object, checkKeys, 0, 0, serializeFunctions, ignoreUndefined, null); + const finishedBuffer = ByteUtils.allocate(serializationIndex); + finishedBuffer.set(buffer.subarray(0, serializationIndex), 0); + return finishedBuffer; +} +function serializeWithBufferAndIndex(object, finalBuffer, options = {}) { + const checkKeys = typeof options.checkKeys === 'boolean' ? options.checkKeys : false; + const serializeFunctions = typeof options.serializeFunctions === 'boolean' ? options.serializeFunctions : false; + const ignoreUndefined = typeof options.ignoreUndefined === 'boolean' ? options.ignoreUndefined : true; + const startIndex = typeof options.index === 'number' ? options.index : 0; + const serializationIndex = serializeInto(buffer, object, checkKeys, 0, 0, serializeFunctions, ignoreUndefined, null); + finalBuffer.set(buffer.subarray(0, serializationIndex), startIndex); + return startIndex + serializationIndex - 1; +} +function deserialize(buffer, options = {}) { + return internalDeserialize(ByteUtils.toLocalBufferType(buffer), options); +} +function calculateObjectSize(object, options = {}) { + options = options || {}; + const serializeFunctions = typeof options.serializeFunctions === 'boolean' ? options.serializeFunctions : false; + const ignoreUndefined = typeof options.ignoreUndefined === 'boolean' ? options.ignoreUndefined : true; + return internalCalculateObjectSize(object, serializeFunctions, ignoreUndefined); +} +function deserializeStream(data, startIndex, numberOfDocuments, documents, docStartIndex, options) { + const internalOptions = Object.assign({ allowObjectSmallerThanBufferSize: true, index: 0 }, options); + const bufferData = ByteUtils.toLocalBufferType(data); + let index = startIndex; + for (let i = 0; i < numberOfDocuments; i++) { + const size = bufferData[index] | + (bufferData[index + 1] << 8) | + (bufferData[index + 2] << 16) | + (bufferData[index + 3] << 24); + internalOptions.index = index; + documents[docStartIndex + i] = internalDeserialize(bufferData, internalOptions); + index = index + size; + } + return index; +} + +var bson = /*#__PURE__*/Object.freeze({ +__proto__: null, +BSONError: BSONError, +BSONRegExp: BSONRegExp, +BSONRuntimeError: BSONRuntimeError, +BSONSymbol: BSONSymbol, +BSONType: BSONType, +BSONValue: BSONValue, +BSONVersionError: BSONVersionError, +Binary: Binary, +Code: Code, +DBRef: DBRef, +Decimal128: Decimal128, +Double: Double, +EJSON: EJSON, +Int32: Int32, +Long: Long, +MaxKey: MaxKey, +MinKey: MinKey, +ObjectId: ObjectId, +Timestamp: Timestamp, +UUID: UUID, +calculateObjectSize: calculateObjectSize, +deserialize: deserialize, +deserializeStream: deserializeStream, +serialize: serialize, +serializeWithBufferAndIndex: serializeWithBufferAndIndex, +setInternalBufferSize: setInternalBufferSize +}); + +exports.BSON = bson; +exports.BSONError = BSONError; +exports.BSONRegExp = BSONRegExp; +exports.BSONRuntimeError = BSONRuntimeError; +exports.BSONSymbol = BSONSymbol; +exports.BSONType = BSONType; +exports.BSONValue = BSONValue; +exports.BSONVersionError = BSONVersionError; +exports.Binary = Binary; +exports.Code = Code; +exports.DBRef = DBRef; +exports.Decimal128 = Decimal128; +exports.Double = Double; +exports.EJSON = EJSON; +exports.Int32 = Int32; +exports.Long = Long; +exports.MaxKey = MaxKey; +exports.MinKey = MinKey; +exports.ObjectId = ObjectId; +exports.Timestamp = Timestamp; +exports.UUID = UUID; +exports.calculateObjectSize = calculateObjectSize; +exports.deserialize = deserialize; +exports.deserializeStream = deserializeStream; +exports.serialize = serialize; +exports.serializeWithBufferAndIndex = serializeWithBufferAndIndex; +exports.setInternalBufferSize = setInternalBufferSize; + +return exports; + +})({}); +//# sourceMappingURL=bson.bundle.js.map diff --git a/Url-Shortner/node_modules/bson/lib/bson.bundle.js.map b/Url-Shortner/node_modules/bson/lib/bson.bundle.js.map new file mode 100644 index 0000000..d1552c5 --- /dev/null +++ b/Url-Shortner/node_modules/bson/lib/bson.bundle.js.map @@ -0,0 +1 @@ +{"version":3,"file":"bson.bundle.js","sources":["../src/parser/utils.ts","../src/constants.ts","../src/error.ts","../src/utils/node_byte_utils.ts","../src/utils/web_byte_utils.ts","../src/utils/byte_utils.ts","../src/bson_value.ts","../src/binary.ts","../src/code.ts","../src/db_ref.ts","../src/long.ts","../src/decimal128.ts","../src/double.ts","../src/int_32.ts","../src/max_key.ts","../src/min_key.ts","../src/objectid.ts","../src/parser/calculate_size.ts","../src/regexp.ts","../src/symbol.ts","../src/timestamp.ts","../src/validate_utf8.ts","../src/parser/deserializer.ts","../src/parser/serializer.ts","../src/extended_json.ts","../src/bson.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"names":["constants.JS_INT_MIN","constants.JS_INT_MAX","constants.BSON_INT32_MIN","constants.BSON_INT32_MAX","constants.BSON_MAJOR_VERSION","constants.BSON_DATA_STRING","constants.BSON_DATA_OID","constants.BSON_DATA_INT","constants.BSON_DATA_NUMBER","constants.BSON_DATA_DATE","constants.BSON_DATA_BOOLEAN","constants.BSON_DATA_OBJECT","constants.BSON_DATA_ARRAY","constants.BSON_DATA_UNDEFINED","constants.BSON_DATA_NULL","constants.BSON_DATA_LONG","constants.BSON_DATA_DECIMAL128","constants.BSON_DATA_BINARY","constants.BSON_BINARY_SUBTYPE_UUID_NEW","constants.BSON_DATA_REGEXP","constants.BSON_DATA_SYMBOL","constants.BSON_DATA_TIMESTAMP","constants.BSON_DATA_MIN_KEY","constants.BSON_DATA_MAX_KEY","constants.BSON_DATA_CODE","constants.BSON_DATA_CODE_W_SCOPE","constants.BSON_DATA_DBPOINTER","constants.BSON_BINARY_SUBTYPE_DEFAULT"],"mappings":"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AC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EA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"} \ No newline at end of file diff --git a/Url-Shortner/node_modules/bson/lib/bson.cjs b/Url-Shortner/node_modules/bson/lib/bson.cjs new file mode 100644 index 0000000..634d7a7 --- /dev/null +++ b/Url-Shortner/node_modules/bson/lib/bson.cjs @@ -0,0 +1,4144 @@ +'use strict'; + +function isAnyArrayBuffer(value) { + return ['[object ArrayBuffer]', '[object SharedArrayBuffer]'].includes(Object.prototype.toString.call(value)); +} +function isUint8Array(value) { + return Object.prototype.toString.call(value) === '[object Uint8Array]'; +} +function isRegExp(d) { + return Object.prototype.toString.call(d) === '[object RegExp]'; +} +function isMap(d) { + return Object.prototype.toString.call(d) === '[object Map]'; +} +function isDate(d) { + return Object.prototype.toString.call(d) === '[object Date]'; +} + +const BSON_MAJOR_VERSION = 5; +const BSON_INT32_MAX = 0x7fffffff; +const BSON_INT32_MIN = -0x80000000; +const BSON_INT64_MAX = Math.pow(2, 63) - 1; +const BSON_INT64_MIN = -Math.pow(2, 63); +const JS_INT_MAX = Math.pow(2, 53); +const JS_INT_MIN = -Math.pow(2, 53); +const BSON_DATA_NUMBER = 1; +const BSON_DATA_STRING = 2; +const BSON_DATA_OBJECT = 3; +const BSON_DATA_ARRAY = 4; +const BSON_DATA_BINARY = 5; +const BSON_DATA_UNDEFINED = 6; +const BSON_DATA_OID = 7; +const BSON_DATA_BOOLEAN = 8; +const BSON_DATA_DATE = 9; +const BSON_DATA_NULL = 10; +const BSON_DATA_REGEXP = 11; +const BSON_DATA_DBPOINTER = 12; +const BSON_DATA_CODE = 13; +const BSON_DATA_SYMBOL = 14; +const BSON_DATA_CODE_W_SCOPE = 15; +const BSON_DATA_INT = 16; +const BSON_DATA_TIMESTAMP = 17; +const BSON_DATA_LONG = 18; +const BSON_DATA_DECIMAL128 = 19; +const BSON_DATA_MIN_KEY = 0xff; +const BSON_DATA_MAX_KEY = 0x7f; +const BSON_BINARY_SUBTYPE_DEFAULT = 0; +const BSON_BINARY_SUBTYPE_UUID_NEW = 4; +const BSONType = Object.freeze({ + double: 1, + string: 2, + object: 3, + array: 4, + binData: 5, + undefined: 6, + objectId: 7, + bool: 8, + date: 9, + null: 10, + regex: 11, + dbPointer: 12, + javascript: 13, + symbol: 14, + javascriptWithScope: 15, + int: 16, + timestamp: 17, + long: 18, + decimal: 19, + minKey: -1, + maxKey: 127 +}); + +class BSONError extends Error { + get bsonError() { + return true; + } + get name() { + return 'BSONError'; + } + constructor(message) { + super(message); + } + static isBSONError(value) { + return (value != null && + typeof value === 'object' && + 'bsonError' in value && + value.bsonError === true && + 'name' in value && + 'message' in value && + 'stack' in value); + } +} +class BSONVersionError extends BSONError { + get name() { + return 'BSONVersionError'; + } + constructor() { + super(`Unsupported BSON version, bson types must be from bson ${BSON_MAJOR_VERSION}.0 or later`); + } +} +class BSONRuntimeError extends BSONError { + get name() { + return 'BSONRuntimeError'; + } + constructor(message) { + super(message); + } +} + +function nodejsMathRandomBytes(byteLength) { + return nodeJsByteUtils.fromNumberArray(Array.from({ length: byteLength }, () => Math.floor(Math.random() * 256))); +} +const nodejsRandomBytes = (() => { + try { + return require('crypto').randomBytes; + } + catch { + return nodejsMathRandomBytes; + } +})(); +const nodeJsByteUtils = { + toLocalBufferType(potentialBuffer) { + if (Buffer.isBuffer(potentialBuffer)) { + return potentialBuffer; + } + if (ArrayBuffer.isView(potentialBuffer)) { + return Buffer.from(potentialBuffer.buffer, potentialBuffer.byteOffset, potentialBuffer.byteLength); + } + const stringTag = potentialBuffer?.[Symbol.toStringTag] ?? Object.prototype.toString.call(potentialBuffer); + if (stringTag === 'ArrayBuffer' || + stringTag === 'SharedArrayBuffer' || + stringTag === '[object ArrayBuffer]' || + stringTag === '[object SharedArrayBuffer]') { + return Buffer.from(potentialBuffer); + } + throw new BSONError(`Cannot create Buffer from ${String(potentialBuffer)}`); + }, + allocate(size) { + return Buffer.alloc(size); + }, + equals(a, b) { + return nodeJsByteUtils.toLocalBufferType(a).equals(b); + }, + fromNumberArray(array) { + return Buffer.from(array); + }, + fromBase64(base64) { + return Buffer.from(base64, 'base64'); + }, + toBase64(buffer) { + return nodeJsByteUtils.toLocalBufferType(buffer).toString('base64'); + }, + fromISO88591(codePoints) { + return Buffer.from(codePoints, 'binary'); + }, + toISO88591(buffer) { + return nodeJsByteUtils.toLocalBufferType(buffer).toString('binary'); + }, + fromHex(hex) { + return Buffer.from(hex, 'hex'); + }, + toHex(buffer) { + return nodeJsByteUtils.toLocalBufferType(buffer).toString('hex'); + }, + fromUTF8(text) { + return Buffer.from(text, 'utf8'); + }, + toUTF8(buffer, start, end) { + return nodeJsByteUtils.toLocalBufferType(buffer).toString('utf8', start, end); + }, + utf8ByteLength(input) { + return Buffer.byteLength(input, 'utf8'); + }, + encodeUTF8Into(buffer, source, byteOffset) { + return nodeJsByteUtils.toLocalBufferType(buffer).write(source, byteOffset, undefined, 'utf8'); + }, + randomBytes: nodejsRandomBytes +}; + +function isReactNative() { + const { navigator } = globalThis; + return typeof navigator === 'object' && navigator.product === 'ReactNative'; +} +function webMathRandomBytes(byteLength) { + if (byteLength < 0) { + throw new RangeError(`The argument 'byteLength' is invalid. Received ${byteLength}`); + } + return webByteUtils.fromNumberArray(Array.from({ length: byteLength }, () => Math.floor(Math.random() * 256))); +} +const webRandomBytes = (() => { + const { crypto } = globalThis; + if (crypto != null && typeof crypto.getRandomValues === 'function') { + return (byteLength) => { + return crypto.getRandomValues(webByteUtils.allocate(byteLength)); + }; + } + else { + if (isReactNative()) { + const { console } = globalThis; + console?.warn?.('BSON: For React Native please polyfill crypto.getRandomValues, e.g. using: https://www.npmjs.com/package/react-native-get-random-values.'); + } + return webMathRandomBytes; + } +})(); +const HEX_DIGIT = /(\d|[a-f])/i; +const webByteUtils = { + toLocalBufferType(potentialUint8array) { + const stringTag = potentialUint8array?.[Symbol.toStringTag] ?? + Object.prototype.toString.call(potentialUint8array); + if (stringTag === 'Uint8Array') { + return potentialUint8array; + } + if (ArrayBuffer.isView(potentialUint8array)) { + return new Uint8Array(potentialUint8array.buffer.slice(potentialUint8array.byteOffset, potentialUint8array.byteOffset + potentialUint8array.byteLength)); + } + if (stringTag === 'ArrayBuffer' || + stringTag === 'SharedArrayBuffer' || + stringTag === '[object ArrayBuffer]' || + stringTag === '[object SharedArrayBuffer]') { + return new Uint8Array(potentialUint8array); + } + throw new BSONError(`Cannot make a Uint8Array from ${String(potentialUint8array)}`); + }, + allocate(size) { + if (typeof size !== 'number') { + throw new TypeError(`The "size" argument must be of type number. Received ${String(size)}`); + } + return new Uint8Array(size); + }, + equals(a, b) { + if (a.byteLength !== b.byteLength) { + return false; + } + for (let i = 0; i < a.byteLength; i++) { + if (a[i] !== b[i]) { + return false; + } + } + return true; + }, + fromNumberArray(array) { + return Uint8Array.from(array); + }, + fromBase64(base64) { + return Uint8Array.from(atob(base64), c => c.charCodeAt(0)); + }, + toBase64(uint8array) { + return btoa(webByteUtils.toISO88591(uint8array)); + }, + fromISO88591(codePoints) { + return Uint8Array.from(codePoints, c => c.charCodeAt(0) & 0xff); + }, + toISO88591(uint8array) { + return Array.from(Uint16Array.from(uint8array), b => String.fromCharCode(b)).join(''); + }, + fromHex(hex) { + const evenLengthHex = hex.length % 2 === 0 ? hex : hex.slice(0, hex.length - 1); + const buffer = []; + for (let i = 0; i < evenLengthHex.length; i += 2) { + const firstDigit = evenLengthHex[i]; + const secondDigit = evenLengthHex[i + 1]; + if (!HEX_DIGIT.test(firstDigit)) { + break; + } + if (!HEX_DIGIT.test(secondDigit)) { + break; + } + const hexDigit = Number.parseInt(`${firstDigit}${secondDigit}`, 16); + buffer.push(hexDigit); + } + return Uint8Array.from(buffer); + }, + toHex(uint8array) { + return Array.from(uint8array, byte => byte.toString(16).padStart(2, '0')).join(''); + }, + fromUTF8(text) { + return new TextEncoder().encode(text); + }, + toUTF8(uint8array, start, end) { + return new TextDecoder('utf8', { fatal: false }).decode(uint8array.slice(start, end)); + }, + utf8ByteLength(input) { + return webByteUtils.fromUTF8(input).byteLength; + }, + encodeUTF8Into(buffer, source, byteOffset) { + const bytes = webByteUtils.fromUTF8(source); + buffer.set(bytes, byteOffset); + return bytes.byteLength; + }, + randomBytes: webRandomBytes +}; + +const hasGlobalBuffer = typeof Buffer === 'function' && Buffer.prototype?._isBuffer !== true; +const ByteUtils = hasGlobalBuffer ? nodeJsByteUtils : webByteUtils; +class BSONDataView extends DataView { + static fromUint8Array(input) { + return new DataView(input.buffer, input.byteOffset, input.byteLength); + } +} + +class BSONValue { + get [Symbol.for('@@mdb.bson.version')]() { + return BSON_MAJOR_VERSION; + } +} + +class Binary extends BSONValue { + get _bsontype() { + return 'Binary'; + } + constructor(buffer, subType) { + super(); + if (!(buffer == null) && + !(typeof buffer === 'string') && + !ArrayBuffer.isView(buffer) && + !(buffer instanceof ArrayBuffer) && + !Array.isArray(buffer)) { + throw new BSONError('Binary can only be constructed from string, Buffer, TypedArray, or Array'); + } + this.sub_type = subType ?? Binary.BSON_BINARY_SUBTYPE_DEFAULT; + if (buffer == null) { + this.buffer = ByteUtils.allocate(Binary.BUFFER_SIZE); + this.position = 0; + } + else { + if (typeof buffer === 'string') { + this.buffer = ByteUtils.fromISO88591(buffer); + } + else if (Array.isArray(buffer)) { + this.buffer = ByteUtils.fromNumberArray(buffer); + } + else { + this.buffer = ByteUtils.toLocalBufferType(buffer); + } + this.position = this.buffer.byteLength; + } + } + put(byteValue) { + if (typeof byteValue === 'string' && byteValue.length !== 1) { + throw new BSONError('only accepts single character String'); + } + else if (typeof byteValue !== 'number' && byteValue.length !== 1) + throw new BSONError('only accepts single character Uint8Array or Array'); + let decodedByte; + if (typeof byteValue === 'string') { + decodedByte = byteValue.charCodeAt(0); + } + else if (typeof byteValue === 'number') { + decodedByte = byteValue; + } + else { + decodedByte = byteValue[0]; + } + if (decodedByte < 0 || decodedByte > 255) { + throw new BSONError('only accepts number in a valid unsigned byte range 0-255'); + } + if (this.buffer.byteLength > this.position) { + this.buffer[this.position++] = decodedByte; + } + else { + const newSpace = ByteUtils.allocate(Binary.BUFFER_SIZE + this.buffer.length); + newSpace.set(this.buffer, 0); + this.buffer = newSpace; + this.buffer[this.position++] = decodedByte; + } + } + write(sequence, offset) { + offset = typeof offset === 'number' ? offset : this.position; + if (this.buffer.byteLength < offset + sequence.length) { + const newSpace = ByteUtils.allocate(this.buffer.byteLength + sequence.length); + newSpace.set(this.buffer, 0); + this.buffer = newSpace; + } + if (ArrayBuffer.isView(sequence)) { + this.buffer.set(ByteUtils.toLocalBufferType(sequence), offset); + this.position = + offset + sequence.byteLength > this.position ? offset + sequence.length : this.position; + } + else if (typeof sequence === 'string') { + const bytes = ByteUtils.fromISO88591(sequence); + this.buffer.set(bytes, offset); + this.position = + offset + sequence.length > this.position ? offset + sequence.length : this.position; + } + } + read(position, length) { + length = length && length > 0 ? length : this.position; + return this.buffer.slice(position, position + length); + } + value(asRaw) { + asRaw = !!asRaw; + if (asRaw && this.buffer.length === this.position) { + return this.buffer; + } + if (asRaw) { + return this.buffer.slice(0, this.position); + } + return ByteUtils.toISO88591(this.buffer.subarray(0, this.position)); + } + length() { + return this.position; + } + toJSON() { + return ByteUtils.toBase64(this.buffer); + } + toString(encoding) { + if (encoding === 'hex') + return ByteUtils.toHex(this.buffer); + if (encoding === 'base64') + return ByteUtils.toBase64(this.buffer); + if (encoding === 'utf8' || encoding === 'utf-8') + return ByteUtils.toUTF8(this.buffer, 0, this.buffer.byteLength); + return ByteUtils.toUTF8(this.buffer, 0, this.buffer.byteLength); + } + toExtendedJSON(options) { + options = options || {}; + const base64String = ByteUtils.toBase64(this.buffer); + const subType = Number(this.sub_type).toString(16); + if (options.legacy) { + return { + $binary: base64String, + $type: subType.length === 1 ? '0' + subType : subType + }; + } + return { + $binary: { + base64: base64String, + subType: subType.length === 1 ? '0' + subType : subType + } + }; + } + toUUID() { + if (this.sub_type === Binary.SUBTYPE_UUID) { + return new UUID(this.buffer.slice(0, this.position)); + } + throw new BSONError(`Binary sub_type "${this.sub_type}" is not supported for converting to UUID. Only "${Binary.SUBTYPE_UUID}" is currently supported.`); + } + static createFromHexString(hex, subType) { + return new Binary(ByteUtils.fromHex(hex), subType); + } + static createFromBase64(base64, subType) { + return new Binary(ByteUtils.fromBase64(base64), subType); + } + static fromExtendedJSON(doc, options) { + options = options || {}; + let data; + let type; + if ('$binary' in doc) { + if (options.legacy && typeof doc.$binary === 'string' && '$type' in doc) { + type = doc.$type ? parseInt(doc.$type, 16) : 0; + data = ByteUtils.fromBase64(doc.$binary); + } + else { + if (typeof doc.$binary !== 'string') { + type = doc.$binary.subType ? parseInt(doc.$binary.subType, 16) : 0; + data = ByteUtils.fromBase64(doc.$binary.base64); + } + } + } + else if ('$uuid' in doc) { + type = 4; + data = UUID.bytesFromString(doc.$uuid); + } + if (!data) { + throw new BSONError(`Unexpected Binary Extended JSON format ${JSON.stringify(doc)}`); + } + return type === BSON_BINARY_SUBTYPE_UUID_NEW ? new UUID(data) : new Binary(data, type); + } + [Symbol.for('nodejs.util.inspect.custom')]() { + return this.inspect(); + } + inspect() { + const base64 = ByteUtils.toBase64(this.buffer.subarray(0, this.position)); + return `Binary.createFromBase64("${base64}", ${this.sub_type})`; + } +} +Binary.BSON_BINARY_SUBTYPE_DEFAULT = 0; +Binary.BUFFER_SIZE = 256; +Binary.SUBTYPE_DEFAULT = 0; +Binary.SUBTYPE_FUNCTION = 1; +Binary.SUBTYPE_BYTE_ARRAY = 2; +Binary.SUBTYPE_UUID_OLD = 3; +Binary.SUBTYPE_UUID = 4; +Binary.SUBTYPE_MD5 = 5; +Binary.SUBTYPE_ENCRYPTED = 6; +Binary.SUBTYPE_COLUMN = 7; +Binary.SUBTYPE_USER_DEFINED = 128; +const UUID_BYTE_LENGTH = 16; +const UUID_WITHOUT_DASHES = /^[0-9A-F]{32}$/i; +const UUID_WITH_DASHES = /^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i; +class UUID extends Binary { + constructor(input) { + let bytes; + if (input == null) { + bytes = UUID.generate(); + } + else if (input instanceof UUID) { + bytes = ByteUtils.toLocalBufferType(new Uint8Array(input.buffer)); + } + else if (ArrayBuffer.isView(input) && input.byteLength === UUID_BYTE_LENGTH) { + bytes = ByteUtils.toLocalBufferType(input); + } + else if (typeof input === 'string') { + bytes = UUID.bytesFromString(input); + } + else { + throw new BSONError('Argument passed in UUID constructor must be a UUID, a 16 byte Buffer or a 32/36 character hex string (dashes excluded/included, format: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx).'); + } + super(bytes, BSON_BINARY_SUBTYPE_UUID_NEW); + } + get id() { + return this.buffer; + } + set id(value) { + this.buffer = value; + } + toHexString(includeDashes = true) { + if (includeDashes) { + return [ + ByteUtils.toHex(this.buffer.subarray(0, 4)), + ByteUtils.toHex(this.buffer.subarray(4, 6)), + ByteUtils.toHex(this.buffer.subarray(6, 8)), + ByteUtils.toHex(this.buffer.subarray(8, 10)), + ByteUtils.toHex(this.buffer.subarray(10, 16)) + ].join('-'); + } + return ByteUtils.toHex(this.buffer); + } + toString(encoding) { + if (encoding === 'hex') + return ByteUtils.toHex(this.id); + if (encoding === 'base64') + return ByteUtils.toBase64(this.id); + return this.toHexString(); + } + toJSON() { + return this.toHexString(); + } + equals(otherId) { + if (!otherId) { + return false; + } + if (otherId instanceof UUID) { + return ByteUtils.equals(otherId.id, this.id); + } + try { + return ByteUtils.equals(new UUID(otherId).id, this.id); + } + catch { + return false; + } + } + toBinary() { + return new Binary(this.id, Binary.SUBTYPE_UUID); + } + static generate() { + const bytes = ByteUtils.randomBytes(UUID_BYTE_LENGTH); + bytes[6] = (bytes[6] & 0x0f) | 0x40; + bytes[8] = (bytes[8] & 0x3f) | 0x80; + return bytes; + } + static isValid(input) { + if (!input) { + return false; + } + if (typeof input === 'string') { + return UUID.isValidUUIDString(input); + } + if (isUint8Array(input)) { + return input.byteLength === UUID_BYTE_LENGTH; + } + return (input._bsontype === 'Binary' && + input.sub_type === this.SUBTYPE_UUID && + input.buffer.byteLength === 16); + } + static createFromHexString(hexString) { + const buffer = UUID.bytesFromString(hexString); + return new UUID(buffer); + } + static createFromBase64(base64) { + return new UUID(ByteUtils.fromBase64(base64)); + } + static bytesFromString(representation) { + if (!UUID.isValidUUIDString(representation)) { + throw new BSONError('UUID string representation must be 32 hex digits or canonical hyphenated representation'); + } + return ByteUtils.fromHex(representation.replace(/-/g, '')); + } + static isValidUUIDString(representation) { + return UUID_WITHOUT_DASHES.test(representation) || UUID_WITH_DASHES.test(representation); + } + [Symbol.for('nodejs.util.inspect.custom')]() { + return this.inspect(); + } + inspect() { + return `new UUID("${this.toHexString()}")`; + } +} +UUID.cacheHexString = false; + +class Code extends BSONValue { + get _bsontype() { + return 'Code'; + } + constructor(code, scope) { + super(); + this.code = code.toString(); + this.scope = scope ?? null; + } + toJSON() { + if (this.scope != null) { + return { code: this.code, scope: this.scope }; + } + return { code: this.code }; + } + toExtendedJSON() { + if (this.scope) { + return { $code: this.code, $scope: this.scope }; + } + return { $code: this.code }; + } + static fromExtendedJSON(doc) { + return new Code(doc.$code, doc.$scope); + } + [Symbol.for('nodejs.util.inspect.custom')]() { + return this.inspect(); + } + inspect() { + const codeJson = this.toJSON(); + return `new Code("${String(codeJson.code)}"${codeJson.scope != null ? `, ${JSON.stringify(codeJson.scope)}` : ''})`; + } +} + +function isDBRefLike(value) { + return (value != null && + typeof value === 'object' && + '$id' in value && + value.$id != null && + '$ref' in value && + typeof value.$ref === 'string' && + (!('$db' in value) || ('$db' in value && typeof value.$db === 'string'))); +} +class DBRef extends BSONValue { + get _bsontype() { + return 'DBRef'; + } + constructor(collection, oid, db, fields) { + super(); + const parts = collection.split('.'); + if (parts.length === 2) { + db = parts.shift(); + collection = parts.shift(); + } + this.collection = collection; + this.oid = oid; + this.db = db; + this.fields = fields || {}; + } + get namespace() { + return this.collection; + } + set namespace(value) { + this.collection = value; + } + toJSON() { + const o = Object.assign({ + $ref: this.collection, + $id: this.oid + }, this.fields); + if (this.db != null) + o.$db = this.db; + return o; + } + toExtendedJSON(options) { + options = options || {}; + let o = { + $ref: this.collection, + $id: this.oid + }; + if (options.legacy) { + return o; + } + if (this.db) + o.$db = this.db; + o = Object.assign(o, this.fields); + return o; + } + static fromExtendedJSON(doc) { + const copy = Object.assign({}, doc); + delete copy.$ref; + delete copy.$id; + delete copy.$db; + return new DBRef(doc.$ref, doc.$id, doc.$db, copy); + } + [Symbol.for('nodejs.util.inspect.custom')]() { + return this.inspect(); + } + inspect() { + const oid = this.oid === undefined || this.oid.toString === undefined ? this.oid : this.oid.toString(); + return `new DBRef("${this.namespace}", new ObjectId("${String(oid)}")${this.db ? `, "${this.db}"` : ''})`; + } +} + +let wasm = undefined; +try { + wasm = new WebAssembly.Instance(new WebAssembly.Module(new Uint8Array([0, 97, 115, 109, 1, 0, 0, 0, 1, 13, 2, 96, 0, 1, 127, 96, 4, 127, 127, 127, 127, 1, 127, 3, 7, 6, 0, 1, 1, 1, 1, 1, 6, 6, 1, 127, 1, 65, 0, 11, 7, 50, 6, 3, 109, 117, 108, 0, 1, 5, 100, 105, 118, 95, 115, 0, 2, 5, 100, 105, 118, 95, 117, 0, 3, 5, 114, 101, 109, 95, 115, 0, 4, 5, 114, 101, 109, 95, 117, 0, 5, 8, 103, 101, 116, 95, 104, 105, 103, 104, 0, 0, 10, 191, 1, 6, 4, 0, 35, 0, 11, 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, 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, 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, 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, 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 { +} +const TWO_PWR_16_DBL = 1 << 16; +const TWO_PWR_24_DBL = 1 << 24; +const TWO_PWR_32_DBL = TWO_PWR_16_DBL * TWO_PWR_16_DBL; +const TWO_PWR_64_DBL = TWO_PWR_32_DBL * TWO_PWR_32_DBL; +const TWO_PWR_63_DBL = TWO_PWR_64_DBL / 2; +const INT_CACHE = {}; +const UINT_CACHE = {}; +const MAX_INT64_STRING_LENGTH = 20; +const DECIMAL_REG_EX = /^(\+?0|(\+|-)?[1-9][0-9]*)$/; +class Long extends BSONValue { + get _bsontype() { + return 'Long'; + } + get __isLong__() { + return true; + } + constructor(low = 0, high, unsigned) { + super(); + if (typeof low === 'bigint') { + Object.assign(this, Long.fromBigInt(low, !!high)); + } + else if (typeof low === 'string') { + Object.assign(this, Long.fromString(low, !!high)); + } + else { + this.low = low | 0; + this.high = high | 0; + this.unsigned = !!unsigned; + } + } + static fromBits(lowBits, highBits, unsigned) { + return new Long(lowBits, highBits, unsigned); + } + static fromInt(value, unsigned) { + let obj, cachedObj, cache; + if (unsigned) { + value >>>= 0; + if ((cache = 0 <= value && value < 256)) { + cachedObj = UINT_CACHE[value]; + if (cachedObj) + return cachedObj; + } + obj = Long.fromBits(value, (value | 0) < 0 ? -1 : 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 = Long.fromBits(value, value < 0 ? -1 : 0, false); + if (cache) + INT_CACHE[value] = obj; + return obj; + } + } + static fromNumber(value, unsigned) { + if (isNaN(value)) + return unsigned ? Long.UZERO : Long.ZERO; + if (unsigned) { + if (value < 0) + return Long.UZERO; + if (value >= TWO_PWR_64_DBL) + return Long.MAX_UNSIGNED_VALUE; + } + else { + if (value <= -TWO_PWR_63_DBL) + return Long.MIN_VALUE; + if (value + 1 >= TWO_PWR_63_DBL) + return Long.MAX_VALUE; + } + if (value < 0) + return Long.fromNumber(-value, unsigned).neg(); + return Long.fromBits(value % TWO_PWR_32_DBL | 0, (value / TWO_PWR_32_DBL) | 0, unsigned); + } + static fromBigInt(value, unsigned) { + return Long.fromString(value.toString(), unsigned); + } + static fromString(str, unsigned, radix) { + if (str.length === 0) + throw new BSONError('empty string'); + if (str === 'NaN' || str === 'Infinity' || str === '+Infinity' || str === '-Infinity') + return Long.ZERO; + if (typeof unsigned === 'number') { + (radix = unsigned), (unsigned = false); + } + else { + unsigned = !!unsigned; + } + radix = radix || 10; + if (radix < 2 || 36 < radix) + throw new BSONError('radix'); + let p; + if ((p = str.indexOf('-')) > 0) + throw new BSONError('interior hyphen'); + else if (p === 0) { + return Long.fromString(str.substring(1), unsigned, radix).neg(); + } + const radixToPower = Long.fromNumber(Math.pow(radix, 8)); + let result = Long.ZERO; + for (let i = 0; i < str.length; i += 8) { + const size = Math.min(8, str.length - i), value = parseInt(str.substring(i, i + size), radix); + if (size < 8) { + const power = Long.fromNumber(Math.pow(radix, size)); + result = result.mul(power).add(Long.fromNumber(value)); + } + else { + result = result.mul(radixToPower); + result = result.add(Long.fromNumber(value)); + } + } + result.unsigned = unsigned; + return result; + } + static fromBytes(bytes, unsigned, le) { + return le ? Long.fromBytesLE(bytes, unsigned) : Long.fromBytesBE(bytes, unsigned); + } + static 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); + } + static 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); + } + static isLong(value) { + return (value != null && + typeof value === 'object' && + '__isLong__' in value && + value.__isLong__ === true); + } + static fromValue(val, unsigned) { + if (typeof val === 'number') + return Long.fromNumber(val, unsigned); + if (typeof val === 'string') + return Long.fromString(val, unsigned); + return Long.fromBits(val.low, val.high, typeof unsigned === 'boolean' ? unsigned : val.unsigned); + } + add(addend) { + if (!Long.isLong(addend)) + addend = Long.fromValue(addend); + const a48 = this.high >>> 16; + const a32 = this.high & 0xffff; + const a16 = this.low >>> 16; + const a00 = this.low & 0xffff; + const b48 = addend.high >>> 16; + const b32 = addend.high & 0xffff; + const b16 = addend.low >>> 16; + const b00 = addend.low & 0xffff; + let 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 Long.fromBits((c16 << 16) | c00, (c48 << 16) | c32, this.unsigned); + } + and(other) { + if (!Long.isLong(other)) + other = Long.fromValue(other); + return Long.fromBits(this.low & other.low, this.high & other.high, this.unsigned); + } + compare(other) { + if (!Long.isLong(other)) + other = Long.fromValue(other); + if (this.eq(other)) + return 0; + const thisNeg = this.isNegative(), otherNeg = other.isNegative(); + if (thisNeg && !otherNeg) + return -1; + if (!thisNeg && otherNeg) + return 1; + if (!this.unsigned) + return this.sub(other).isNegative() ? -1 : 1; + return other.high >>> 0 > this.high >>> 0 || + (other.high === this.high && other.low >>> 0 > this.low >>> 0) + ? -1 + : 1; + } + comp(other) { + return this.compare(other); + } + divide(divisor) { + if (!Long.isLong(divisor)) + divisor = Long.fromValue(divisor); + if (divisor.isZero()) + throw new BSONError('division by zero'); + if (wasm) { + if (!this.unsigned && + this.high === -0x80000000 && + divisor.low === -1 && + divisor.high === -1) { + return this; + } + const low = (this.unsigned ? wasm.div_u : wasm.div_s)(this.low, this.high, divisor.low, divisor.high); + return Long.fromBits(low, wasm.get_high(), this.unsigned); + } + if (this.isZero()) + return this.unsigned ? Long.UZERO : Long.ZERO; + let approx, rem, res; + if (!this.unsigned) { + if (this.eq(Long.MIN_VALUE)) { + if (divisor.eq(Long.ONE) || divisor.eq(Long.NEG_ONE)) + return Long.MIN_VALUE; + else if (divisor.eq(Long.MIN_VALUE)) + return Long.ONE; + else { + const halfThis = this.shr(1); + approx = halfThis.div(divisor).shl(1); + if (approx.eq(Long.ZERO)) { + return divisor.isNegative() ? Long.ONE : Long.NEG_ONE; + } + else { + rem = this.sub(divisor.mul(approx)); + res = approx.add(rem.div(divisor)); + return res; + } + } + } + else if (divisor.eq(Long.MIN_VALUE)) + return this.unsigned ? Long.UZERO : Long.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 = Long.ZERO; + } + else { + if (!divisor.unsigned) + divisor = divisor.toUnsigned(); + if (divisor.gt(this)) + return Long.UZERO; + if (divisor.gt(this.shru(1))) + return Long.UONE; + res = Long.UZERO; + } + rem = this; + while (rem.gte(divisor)) { + approx = Math.max(1, Math.floor(rem.toNumber() / divisor.toNumber())); + const log2 = Math.ceil(Math.log(approx) / Math.LN2); + const delta = log2 <= 48 ? 1 : Math.pow(2, log2 - 48); + let approxRes = Long.fromNumber(approx); + let approxRem = approxRes.mul(divisor); + while (approxRem.isNegative() || approxRem.gt(rem)) { + approx -= delta; + approxRes = Long.fromNumber(approx, this.unsigned); + approxRem = approxRes.mul(divisor); + } + if (approxRes.isZero()) + approxRes = Long.ONE; + res = res.add(approxRes); + rem = rem.sub(approxRem); + } + return res; + } + div(divisor) { + return this.divide(divisor); + } + equals(other) { + if (!Long.isLong(other)) + other = Long.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; + } + eq(other) { + return this.equals(other); + } + getHighBits() { + return this.high; + } + getHighBitsUnsigned() { + return this.high >>> 0; + } + getLowBits() { + return this.low; + } + getLowBitsUnsigned() { + return this.low >>> 0; + } + getNumBitsAbs() { + if (this.isNegative()) { + return this.eq(Long.MIN_VALUE) ? 64 : this.neg().getNumBitsAbs(); + } + const val = this.high !== 0 ? this.high : this.low; + let bit; + for (bit = 31; bit > 0; bit--) + if ((val & (1 << bit)) !== 0) + break; + return this.high !== 0 ? bit + 33 : bit + 1; + } + greaterThan(other) { + return this.comp(other) > 0; + } + gt(other) { + return this.greaterThan(other); + } + greaterThanOrEqual(other) { + return this.comp(other) >= 0; + } + gte(other) { + return this.greaterThanOrEqual(other); + } + ge(other) { + return this.greaterThanOrEqual(other); + } + isEven() { + return (this.low & 1) === 0; + } + isNegative() { + return !this.unsigned && this.high < 0; + } + isOdd() { + return (this.low & 1) === 1; + } + isPositive() { + return this.unsigned || this.high >= 0; + } + isZero() { + return this.high === 0 && this.low === 0; + } + lessThan(other) { + return this.comp(other) < 0; + } + lt(other) { + return this.lessThan(other); + } + lessThanOrEqual(other) { + return this.comp(other) <= 0; + } + lte(other) { + return this.lessThanOrEqual(other); + } + modulo(divisor) { + if (!Long.isLong(divisor)) + divisor = Long.fromValue(divisor); + if (wasm) { + const low = (this.unsigned ? wasm.rem_u : wasm.rem_s)(this.low, this.high, divisor.low, divisor.high); + return Long.fromBits(low, wasm.get_high(), this.unsigned); + } + return this.sub(this.div(divisor).mul(divisor)); + } + mod(divisor) { + return this.modulo(divisor); + } + rem(divisor) { + return this.modulo(divisor); + } + multiply(multiplier) { + if (this.isZero()) + return Long.ZERO; + if (!Long.isLong(multiplier)) + multiplier = Long.fromValue(multiplier); + if (wasm) { + const low = wasm.mul(this.low, this.high, multiplier.low, multiplier.high); + return Long.fromBits(low, wasm.get_high(), this.unsigned); + } + if (multiplier.isZero()) + return Long.ZERO; + if (this.eq(Long.MIN_VALUE)) + return multiplier.isOdd() ? Long.MIN_VALUE : Long.ZERO; + if (multiplier.eq(Long.MIN_VALUE)) + return this.isOdd() ? Long.MIN_VALUE : Long.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 (this.lt(Long.TWO_PWR_24) && multiplier.lt(Long.TWO_PWR_24)) + return Long.fromNumber(this.toNumber() * multiplier.toNumber(), this.unsigned); + const a48 = this.high >>> 16; + const a32 = this.high & 0xffff; + const a16 = this.low >>> 16; + const a00 = this.low & 0xffff; + const b48 = multiplier.high >>> 16; + const b32 = multiplier.high & 0xffff; + const b16 = multiplier.low >>> 16; + const b00 = multiplier.low & 0xffff; + let 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 Long.fromBits((c16 << 16) | c00, (c48 << 16) | c32, this.unsigned); + } + mul(multiplier) { + return this.multiply(multiplier); + } + negate() { + if (!this.unsigned && this.eq(Long.MIN_VALUE)) + return Long.MIN_VALUE; + return this.not().add(Long.ONE); + } + neg() { + return this.negate(); + } + not() { + return Long.fromBits(~this.low, ~this.high, this.unsigned); + } + notEquals(other) { + return !this.equals(other); + } + neq(other) { + return this.notEquals(other); + } + ne(other) { + return this.notEquals(other); + } + or(other) { + if (!Long.isLong(other)) + other = Long.fromValue(other); + return Long.fromBits(this.low | other.low, this.high | other.high, this.unsigned); + } + shiftLeft(numBits) { + if (Long.isLong(numBits)) + numBits = numBits.toInt(); + if ((numBits &= 63) === 0) + return this; + else if (numBits < 32) + return Long.fromBits(this.low << numBits, (this.high << numBits) | (this.low >>> (32 - numBits)), this.unsigned); + else + return Long.fromBits(0, this.low << (numBits - 32), this.unsigned); + } + shl(numBits) { + return this.shiftLeft(numBits); + } + shiftRight(numBits) { + if (Long.isLong(numBits)) + numBits = numBits.toInt(); + if ((numBits &= 63) === 0) + return this; + else if (numBits < 32) + return Long.fromBits((this.low >>> numBits) | (this.high << (32 - numBits)), this.high >> numBits, this.unsigned); + else + return Long.fromBits(this.high >> (numBits - 32), this.high >= 0 ? 0 : -1, this.unsigned); + } + shr(numBits) { + return this.shiftRight(numBits); + } + shiftRightUnsigned(numBits) { + if (Long.isLong(numBits)) + numBits = numBits.toInt(); + numBits &= 63; + if (numBits === 0) + return this; + else { + const high = this.high; + if (numBits < 32) { + const low = this.low; + return Long.fromBits((low >>> numBits) | (high << (32 - numBits)), high >>> numBits, this.unsigned); + } + else if (numBits === 32) + return Long.fromBits(high, 0, this.unsigned); + else + return Long.fromBits(high >>> (numBits - 32), 0, this.unsigned); + } + } + shr_u(numBits) { + return this.shiftRightUnsigned(numBits); + } + shru(numBits) { + return this.shiftRightUnsigned(numBits); + } + subtract(subtrahend) { + if (!Long.isLong(subtrahend)) + subtrahend = Long.fromValue(subtrahend); + return this.add(subtrahend.neg()); + } + sub(subtrahend) { + return this.subtract(subtrahend); + } + toInt() { + return this.unsigned ? this.low >>> 0 : this.low; + } + 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); + } + toBigInt() { + return BigInt(this.toString()); + } + toBytes(le) { + return le ? this.toBytesLE() : this.toBytesBE(); + } + toBytesLE() { + const 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 + ]; + } + toBytesBE() { + const 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 + ]; + } + toSigned() { + if (!this.unsigned) + return this; + return Long.fromBits(this.low, this.high, false); + } + toString(radix) { + radix = radix || 10; + if (radix < 2 || 36 < radix) + throw new BSONError('radix'); + if (this.isZero()) + return '0'; + if (this.isNegative()) { + if (this.eq(Long.MIN_VALUE)) { + const radixLong = Long.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); + } + const radixToPower = Long.fromNumber(Math.pow(radix, 6), this.unsigned); + let rem = this; + let result = ''; + while (true) { + const remDiv = rem.div(radixToPower); + const intval = rem.sub(remDiv.mul(radixToPower)).toInt() >>> 0; + let digits = intval.toString(radix); + rem = remDiv; + if (rem.isZero()) { + return digits + result; + } + else { + while (digits.length < 6) + digits = '0' + digits; + result = '' + digits + result; + } + } + } + toUnsigned() { + if (this.unsigned) + return this; + return Long.fromBits(this.low, this.high, true); + } + xor(other) { + if (!Long.isLong(other)) + other = Long.fromValue(other); + return Long.fromBits(this.low ^ other.low, this.high ^ other.high, this.unsigned); + } + eqz() { + return this.isZero(); + } + le(other) { + return this.lessThanOrEqual(other); + } + toExtendedJSON(options) { + if (options && options.relaxed) + return this.toNumber(); + return { $numberLong: this.toString() }; + } + static fromExtendedJSON(doc, options) { + const { useBigInt64 = false, relaxed = true } = { ...options }; + if (doc.$numberLong.length > MAX_INT64_STRING_LENGTH) { + throw new BSONError('$numberLong string is too long'); + } + if (!DECIMAL_REG_EX.test(doc.$numberLong)) { + throw new BSONError(`$numberLong string "${doc.$numberLong}" is in an invalid format`); + } + if (useBigInt64) { + const bigIntResult = BigInt(doc.$numberLong); + return BigInt.asIntN(64, bigIntResult); + } + const longResult = Long.fromString(doc.$numberLong); + if (relaxed) { + return longResult.toNumber(); + } + return longResult; + } + [Symbol.for('nodejs.util.inspect.custom')]() { + return this.inspect(); + } + inspect() { + return `new Long("${this.toString()}"${this.unsigned ? ', true' : ''})`; + } +} +Long.TWO_PWR_24 = Long.fromInt(TWO_PWR_24_DBL); +Long.MAX_UNSIGNED_VALUE = Long.fromBits(0xffffffff | 0, 0xffffffff | 0, true); +Long.ZERO = Long.fromInt(0); +Long.UZERO = Long.fromInt(0, true); +Long.ONE = Long.fromInt(1); +Long.UONE = Long.fromInt(1, true); +Long.NEG_ONE = Long.fromInt(-1); +Long.MAX_VALUE = Long.fromBits(0xffffffff | 0, 0x7fffffff | 0, false); +Long.MIN_VALUE = Long.fromBits(0, 0x80000000 | 0, false); + +const PARSE_STRING_REGEXP = /^(\+|-)?(\d+|(\d*\.\d*))?(E|e)?([-+])?(\d+)?$/; +const PARSE_INF_REGEXP = /^(\+|-)?(Infinity|inf)$/i; +const PARSE_NAN_REGEXP = /^(\+|-)?NaN$/i; +const EXPONENT_MAX = 6111; +const EXPONENT_MIN = -6176; +const EXPONENT_BIAS = 6176; +const MAX_DIGITS = 34; +const NAN_BUFFER = ByteUtils.fromNumberArray([ + 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +].reverse()); +const INF_NEGATIVE_BUFFER = ByteUtils.fromNumberArray([ + 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +].reverse()); +const INF_POSITIVE_BUFFER = ByteUtils.fromNumberArray([ + 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +].reverse()); +const EXPONENT_REGEX = /^([-+])?(\d+)?$/; +const COMBINATION_MASK = 0x1f; +const EXPONENT_MASK = 0x3fff; +const COMBINATION_INFINITY = 30; +const COMBINATION_NAN = 31; +function isDigit(value) { + return !isNaN(parseInt(value, 10)); +} +function divideu128(value) { + const DIVISOR = Long.fromNumber(1000 * 1000 * 1000); + let _rem = Long.fromNumber(0); + if (!value.parts[0] && !value.parts[1] && !value.parts[2] && !value.parts[3]) { + return { quotient: value, rem: _rem }; + } + for (let i = 0; i <= 3; i++) { + _rem = _rem.shiftLeft(32); + _rem = _rem.add(new Long(value.parts[i], 0)); + value.parts[i] = _rem.div(DIVISOR).low; + _rem = _rem.modulo(DIVISOR); + } + return { quotient: value, rem: _rem }; +} +function multiply64x2(left, right) { + if (!left && !right) { + return { high: Long.fromNumber(0), low: Long.fromNumber(0) }; + } + const leftHigh = left.shiftRightUnsigned(32); + const leftLow = new Long(left.getLowBits(), 0); + const rightHigh = right.shiftRightUnsigned(32); + const rightLow = new Long(right.getLowBits(), 0); + let productHigh = leftHigh.multiply(rightHigh); + let productMid = leftHigh.multiply(rightLow); + const productMid2 = leftLow.multiply(rightHigh); + let productLow = leftLow.multiply(rightLow); + productHigh = productHigh.add(productMid.shiftRightUnsigned(32)); + productMid = new Long(productMid.getLowBits(), 0) + .add(productMid2) + .add(productLow.shiftRightUnsigned(32)); + productHigh = productHigh.add(productMid.shiftRightUnsigned(32)); + productLow = productMid.shiftLeft(32).add(new Long(productLow.getLowBits(), 0)); + return { high: productHigh, low: productLow }; +} +function lessThan(left, right) { + const uhleft = left.high >>> 0; + const uhright = right.high >>> 0; + if (uhleft < uhright) { + return true; + } + else if (uhleft === uhright) { + const ulleft = left.low >>> 0; + const ulright = right.low >>> 0; + if (ulleft < ulright) + return true; + } + return false; +} +function invalidErr(string, message) { + throw new BSONError(`"${string}" is not a valid Decimal128 string - ${message}`); +} +class Decimal128 extends BSONValue { + get _bsontype() { + return 'Decimal128'; + } + constructor(bytes) { + super(); + if (typeof bytes === 'string') { + this.bytes = Decimal128.fromString(bytes).bytes; + } + else if (isUint8Array(bytes)) { + if (bytes.byteLength !== 16) { + throw new BSONError('Decimal128 must take a Buffer of 16 bytes'); + } + this.bytes = bytes; + } + else { + throw new BSONError('Decimal128 must take a Buffer or string'); + } + } + static fromString(representation) { + return Decimal128._fromString(representation, { allowRounding: false }); + } + static fromStringWithRounding(representation) { + return Decimal128._fromString(representation, { allowRounding: true }); + } + static _fromString(representation, options) { + let isNegative = false; + let sawSign = false; + let sawRadix = false; + let foundNonZero = false; + let significantDigits = 0; + let nDigitsRead = 0; + let nDigits = 0; + let radixPosition = 0; + let firstNonZero = 0; + const digits = [0]; + let nDigitsStored = 0; + let digitsInsert = 0; + let lastDigit = 0; + let exponent = 0; + let significandHigh = new Long(0, 0); + let significandLow = new Long(0, 0); + let biasedExponent = 0; + let index = 0; + if (representation.length >= 7000) { + throw new BSONError('' + representation + ' not a valid Decimal128 string'); + } + const stringMatch = representation.match(PARSE_STRING_REGEXP); + const infMatch = representation.match(PARSE_INF_REGEXP); + const nanMatch = representation.match(PARSE_NAN_REGEXP); + if ((!stringMatch && !infMatch && !nanMatch) || representation.length === 0) { + throw new BSONError('' + representation + ' not a valid Decimal128 string'); + } + if (stringMatch) { + const unsignedNumber = stringMatch[2]; + const e = stringMatch[4]; + const expSign = stringMatch[5]; + const expNumber = stringMatch[6]; + if (e && expNumber === undefined) + invalidErr(representation, 'missing exponent power'); + if (e && unsignedNumber === undefined) + invalidErr(representation, 'missing exponent base'); + if (e === undefined && (expSign || expNumber)) { + invalidErr(representation, 'missing e before exponent'); + } + } + if (representation[index] === '+' || representation[index] === '-') { + sawSign = true; + isNegative = representation[index++] === '-'; + } + if (!isDigit(representation[index]) && representation[index] !== '.') { + if (representation[index] === 'i' || representation[index] === 'I') { + return new Decimal128(isNegative ? INF_NEGATIVE_BUFFER : INF_POSITIVE_BUFFER); + } + else if (representation[index] === 'N') { + return new Decimal128(NAN_BUFFER); + } + } + while (isDigit(representation[index]) || representation[index] === '.') { + if (representation[index] === '.') { + if (sawRadix) + invalidErr(representation, 'contains multiple periods'); + sawRadix = true; + index = index + 1; + continue; + } + if (nDigitsStored < MAX_DIGITS) { + if (representation[index] !== '0' || foundNonZero) { + if (!foundNonZero) { + firstNonZero = nDigitsRead; + } + foundNonZero = true; + digits[digitsInsert++] = parseInt(representation[index], 10); + nDigitsStored = nDigitsStored + 1; + } + } + if (foundNonZero) + nDigits = nDigits + 1; + if (sawRadix) + radixPosition = radixPosition + 1; + nDigitsRead = nDigitsRead + 1; + index = index + 1; + } + if (sawRadix && !nDigitsRead) + throw new BSONError('' + representation + ' not a valid Decimal128 string'); + if (representation[index] === 'e' || representation[index] === 'E') { + const match = representation.substr(++index).match(EXPONENT_REGEX); + if (!match || !match[2]) + return new Decimal128(NAN_BUFFER); + exponent = parseInt(match[0], 10); + index = index + match[0].length; + } + if (representation[index]) + return new Decimal128(NAN_BUFFER); + if (!nDigitsStored) { + digits[0] = 0; + nDigits = 1; + nDigitsStored = 1; + significantDigits = 0; + } + else { + lastDigit = nDigitsStored - 1; + significantDigits = nDigits; + if (significantDigits !== 1) { + while (representation[firstNonZero + significantDigits - 1 + Number(sawSign) + Number(sawRadix)] === '0') { + significantDigits = significantDigits - 1; + } + } + } + if (exponent <= radixPosition && radixPosition > exponent + (1 << 14)) { + exponent = EXPONENT_MIN; + } + else { + exponent = exponent - radixPosition; + } + while (exponent > EXPONENT_MAX) { + lastDigit = lastDigit + 1; + if (lastDigit >= MAX_DIGITS) { + if (significantDigits === 0) { + exponent = EXPONENT_MAX; + break; + } + invalidErr(representation, 'overflow'); + } + exponent = exponent - 1; + } + if (options.allowRounding) { + while (exponent < EXPONENT_MIN || nDigitsStored < nDigits) { + if (lastDigit === 0 && significantDigits < nDigitsStored) { + exponent = EXPONENT_MIN; + significantDigits = 0; + break; + } + if (nDigitsStored < nDigits) { + nDigits = nDigits - 1; + } + else { + lastDigit = lastDigit - 1; + } + if (exponent < EXPONENT_MAX) { + exponent = exponent + 1; + } + else { + const digitsString = digits.join(''); + if (digitsString.match(/^0+$/)) { + exponent = EXPONENT_MAX; + break; + } + invalidErr(representation, 'overflow'); + } + } + if (lastDigit + 1 < significantDigits) { + let endOfString = nDigitsRead; + if (sawRadix) { + firstNonZero = firstNonZero + 1; + endOfString = endOfString + 1; + } + if (sawSign) { + firstNonZero = firstNonZero + 1; + endOfString = endOfString + 1; + } + const roundDigit = parseInt(representation[firstNonZero + lastDigit + 1], 10); + let roundBit = 0; + if (roundDigit >= 5) { + roundBit = 1; + if (roundDigit === 5) { + roundBit = digits[lastDigit] % 2 === 1 ? 1 : 0; + for (let i = firstNonZero + lastDigit + 2; i < endOfString; i++) { + if (parseInt(representation[i], 10)) { + roundBit = 1; + break; + } + } + } + } + if (roundBit) { + let dIdx = lastDigit; + for (; dIdx >= 0; dIdx--) { + if (++digits[dIdx] > 9) { + digits[dIdx] = 0; + if (dIdx === 0) { + if (exponent < EXPONENT_MAX) { + exponent = exponent + 1; + digits[dIdx] = 1; + } + else { + return new Decimal128(isNegative ? INF_NEGATIVE_BUFFER : INF_POSITIVE_BUFFER); + } + } + } + else { + break; + } + } + } + } + } + else { + while (exponent < EXPONENT_MIN || nDigitsStored < nDigits) { + if (lastDigit === 0) { + if (significantDigits === 0) { + exponent = EXPONENT_MIN; + break; + } + invalidErr(representation, 'exponent underflow'); + } + if (nDigitsStored < nDigits) { + if (representation[nDigits - 1 + Number(sawSign) + Number(sawRadix)] !== '0' && + significantDigits !== 0) { + invalidErr(representation, 'inexact rounding'); + } + nDigits = nDigits - 1; + } + else { + if (digits[lastDigit] !== 0) { + invalidErr(representation, 'inexact rounding'); + } + lastDigit = lastDigit - 1; + } + if (exponent < EXPONENT_MAX) { + exponent = exponent + 1; + } + else { + invalidErr(representation, 'overflow'); + } + } + if (lastDigit + 1 < significantDigits) { + if (sawRadix) { + firstNonZero = firstNonZero + 1; + } + if (sawSign) { + firstNonZero = firstNonZero + 1; + } + const roundDigit = parseInt(representation[firstNonZero + lastDigit + 1], 10); + if (roundDigit !== 0) { + invalidErr(representation, 'inexact rounding'); + } + } + } + significandHigh = Long.fromNumber(0); + significandLow = Long.fromNumber(0); + if (significantDigits === 0) { + significandHigh = Long.fromNumber(0); + significandLow = Long.fromNumber(0); + } + else if (lastDigit < 17) { + let dIdx = 0; + significandLow = Long.fromNumber(digits[dIdx++]); + significandHigh = new Long(0, 0); + for (; dIdx <= lastDigit; dIdx++) { + significandLow = significandLow.multiply(Long.fromNumber(10)); + significandLow = significandLow.add(Long.fromNumber(digits[dIdx])); + } + } + else { + let dIdx = 0; + significandHigh = Long.fromNumber(digits[dIdx++]); + for (; dIdx <= lastDigit - 17; dIdx++) { + significandHigh = significandHigh.multiply(Long.fromNumber(10)); + significandHigh = significandHigh.add(Long.fromNumber(digits[dIdx])); + } + significandLow = Long.fromNumber(digits[dIdx++]); + for (; dIdx <= lastDigit; dIdx++) { + significandLow = significandLow.multiply(Long.fromNumber(10)); + significandLow = significandLow.add(Long.fromNumber(digits[dIdx])); + } + } + const significand = multiply64x2(significandHigh, Long.fromString('100000000000000000')); + significand.low = significand.low.add(significandLow); + if (lessThan(significand.low, significandLow)) { + significand.high = significand.high.add(Long.fromNumber(1)); + } + biasedExponent = exponent + EXPONENT_BIAS; + const dec = { low: Long.fromNumber(0), high: Long.fromNumber(0) }; + if (significand.high.shiftRightUnsigned(49).and(Long.fromNumber(1)).equals(Long.fromNumber(1))) { + dec.high = dec.high.or(Long.fromNumber(0x3).shiftLeft(61)); + dec.high = dec.high.or(Long.fromNumber(biasedExponent).and(Long.fromNumber(0x3fff).shiftLeft(47))); + dec.high = dec.high.or(significand.high.and(Long.fromNumber(0x7fffffffffff))); + } + else { + dec.high = dec.high.or(Long.fromNumber(biasedExponent & 0x3fff).shiftLeft(49)); + dec.high = dec.high.or(significand.high.and(Long.fromNumber(0x1ffffffffffff))); + } + dec.low = significand.low; + if (isNegative) { + dec.high = dec.high.or(Long.fromString('9223372036854775808')); + } + const buffer = ByteUtils.allocate(16); + index = 0; + buffer[index++] = dec.low.low & 0xff; + buffer[index++] = (dec.low.low >> 8) & 0xff; + buffer[index++] = (dec.low.low >> 16) & 0xff; + buffer[index++] = (dec.low.low >> 24) & 0xff; + buffer[index++] = dec.low.high & 0xff; + buffer[index++] = (dec.low.high >> 8) & 0xff; + buffer[index++] = (dec.low.high >> 16) & 0xff; + buffer[index++] = (dec.low.high >> 24) & 0xff; + buffer[index++] = dec.high.low & 0xff; + buffer[index++] = (dec.high.low >> 8) & 0xff; + buffer[index++] = (dec.high.low >> 16) & 0xff; + buffer[index++] = (dec.high.low >> 24) & 0xff; + buffer[index++] = dec.high.high & 0xff; + buffer[index++] = (dec.high.high >> 8) & 0xff; + buffer[index++] = (dec.high.high >> 16) & 0xff; + buffer[index++] = (dec.high.high >> 24) & 0xff; + return new Decimal128(buffer); + } + toString() { + let biased_exponent; + let significand_digits = 0; + const significand = new Array(36); + for (let i = 0; i < significand.length; i++) + significand[i] = 0; + let index = 0; + let is_zero = false; + let significand_msb; + let significand128 = { parts: [0, 0, 0, 0] }; + let j, k; + const string = []; + index = 0; + const buffer = this.bytes; + const low = buffer[index++] | (buffer[index++] << 8) | (buffer[index++] << 16) | (buffer[index++] << 24); + const midl = buffer[index++] | (buffer[index++] << 8) | (buffer[index++] << 16) | (buffer[index++] << 24); + const midh = buffer[index++] | (buffer[index++] << 8) | (buffer[index++] << 16) | (buffer[index++] << 24); + const high = buffer[index++] | (buffer[index++] << 8) | (buffer[index++] << 16) | (buffer[index++] << 24); + index = 0; + const dec = { + low: new Long(low, midl), + high: new Long(midh, high) + }; + if (dec.high.lessThan(Long.ZERO)) { + string.push('-'); + } + const combination = (high >> 26) & COMBINATION_MASK; + if (combination >> 3 === 3) { + if (combination === COMBINATION_INFINITY) { + return string.join('') + 'Infinity'; + } + else if (combination === COMBINATION_NAN) { + return 'NaN'; + } + else { + biased_exponent = (high >> 15) & EXPONENT_MASK; + significand_msb = 0x08 + ((high >> 14) & 0x01); + } + } + else { + significand_msb = (high >> 14) & 0x07; + biased_exponent = (high >> 17) & EXPONENT_MASK; + } + const exponent = biased_exponent - EXPONENT_BIAS; + significand128.parts[0] = (high & 0x3fff) + ((significand_msb & 0xf) << 14); + significand128.parts[1] = midh; + significand128.parts[2] = midl; + significand128.parts[3] = low; + if (significand128.parts[0] === 0 && + significand128.parts[1] === 0 && + significand128.parts[2] === 0 && + significand128.parts[3] === 0) { + is_zero = true; + } + else { + for (k = 3; k >= 0; k--) { + let least_digits = 0; + const result = divideu128(significand128); + significand128 = result.quotient; + least_digits = result.rem.low; + if (!least_digits) + continue; + for (j = 8; j >= 0; j--) { + significand[k * 9 + j] = least_digits % 10; + least_digits = Math.floor(least_digits / 10); + } + } + } + if (is_zero) { + significand_digits = 1; + significand[index] = 0; + } + else { + significand_digits = 36; + while (!significand[index]) { + significand_digits = significand_digits - 1; + index = index + 1; + } + } + const scientific_exponent = significand_digits - 1 + exponent; + if (scientific_exponent >= 34 || scientific_exponent <= -7 || exponent > 0) { + if (significand_digits > 34) { + string.push(`${0}`); + if (exponent > 0) + string.push(`E+${exponent}`); + else if (exponent < 0) + string.push(`E${exponent}`); + return string.join(''); + } + string.push(`${significand[index++]}`); + significand_digits = significand_digits - 1; + if (significand_digits) { + string.push('.'); + } + for (let i = 0; i < significand_digits; i++) { + string.push(`${significand[index++]}`); + } + string.push('E'); + if (scientific_exponent > 0) { + string.push(`+${scientific_exponent}`); + } + else { + string.push(`${scientific_exponent}`); + } + } + else { + if (exponent >= 0) { + for (let i = 0; i < significand_digits; i++) { + string.push(`${significand[index++]}`); + } + } + else { + let radix_position = significand_digits + exponent; + if (radix_position > 0) { + for (let i = 0; i < radix_position; i++) { + string.push(`${significand[index++]}`); + } + } + else { + string.push('0'); + } + string.push('.'); + while (radix_position++ < 0) { + string.push('0'); + } + for (let i = 0; i < significand_digits - Math.max(radix_position - 1, 0); i++) { + string.push(`${significand[index++]}`); + } + } + } + return string.join(''); + } + toJSON() { + return { $numberDecimal: this.toString() }; + } + toExtendedJSON() { + return { $numberDecimal: this.toString() }; + } + static fromExtendedJSON(doc) { + return Decimal128.fromString(doc.$numberDecimal); + } + [Symbol.for('nodejs.util.inspect.custom')]() { + return this.inspect(); + } + inspect() { + return `new Decimal128("${this.toString()}")`; + } +} + +class Double extends BSONValue { + get _bsontype() { + return 'Double'; + } + constructor(value) { + super(); + if (value instanceof Number) { + value = value.valueOf(); + } + this.value = +value; + } + valueOf() { + return this.value; + } + toJSON() { + return this.value; + } + toString(radix) { + return this.value.toString(radix); + } + toExtendedJSON(options) { + if (options && (options.legacy || (options.relaxed && isFinite(this.value)))) { + return this.value; + } + if (Object.is(Math.sign(this.value), -0)) { + return { $numberDouble: '-0.0' }; + } + return { + $numberDouble: Number.isInteger(this.value) ? this.value.toFixed(1) : this.value.toString() + }; + } + static fromExtendedJSON(doc, options) { + const doubleValue = parseFloat(doc.$numberDouble); + return options && options.relaxed ? doubleValue : new Double(doubleValue); + } + [Symbol.for('nodejs.util.inspect.custom')]() { + return this.inspect(); + } + inspect() { + const eJSON = this.toExtendedJSON(); + return `new Double(${eJSON.$numberDouble})`; + } +} + +class Int32 extends BSONValue { + get _bsontype() { + return 'Int32'; + } + constructor(value) { + super(); + if (value instanceof Number) { + value = value.valueOf(); + } + this.value = +value | 0; + } + valueOf() { + return this.value; + } + toString(radix) { + return this.value.toString(radix); + } + toJSON() { + return this.value; + } + toExtendedJSON(options) { + if (options && (options.relaxed || options.legacy)) + return this.value; + return { $numberInt: this.value.toString() }; + } + static fromExtendedJSON(doc, options) { + return options && options.relaxed ? parseInt(doc.$numberInt, 10) : new Int32(doc.$numberInt); + } + [Symbol.for('nodejs.util.inspect.custom')]() { + return this.inspect(); + } + inspect() { + return `new Int32(${this.valueOf()})`; + } +} + +class MaxKey extends BSONValue { + get _bsontype() { + return 'MaxKey'; + } + toExtendedJSON() { + return { $maxKey: 1 }; + } + static fromExtendedJSON() { + return new MaxKey(); + } + [Symbol.for('nodejs.util.inspect.custom')]() { + return this.inspect(); + } + inspect() { + return 'new MaxKey()'; + } +} + +class MinKey extends BSONValue { + get _bsontype() { + return 'MinKey'; + } + toExtendedJSON() { + return { $minKey: 1 }; + } + static fromExtendedJSON() { + return new MinKey(); + } + [Symbol.for('nodejs.util.inspect.custom')]() { + return this.inspect(); + } + inspect() { + return 'new MinKey()'; + } +} + +const checkForHexRegExp = new RegExp('^[0-9a-fA-F]{24}$'); +let PROCESS_UNIQUE = null; +const kId = Symbol('id'); +class ObjectId extends BSONValue { + get _bsontype() { + return 'ObjectId'; + } + constructor(inputId) { + super(); + let workingId; + if (typeof inputId === 'object' && inputId && 'id' in inputId) { + if (typeof inputId.id !== 'string' && !ArrayBuffer.isView(inputId.id)) { + throw new BSONError('Argument passed in must have an id that is of type string or Buffer'); + } + if ('toHexString' in inputId && typeof inputId.toHexString === 'function') { + workingId = ByteUtils.fromHex(inputId.toHexString()); + } + else { + workingId = inputId.id; + } + } + else { + workingId = inputId; + } + if (workingId == null || typeof workingId === 'number') { + this[kId] = ObjectId.generate(typeof workingId === 'number' ? workingId : undefined); + } + else if (ArrayBuffer.isView(workingId) && workingId.byteLength === 12) { + this[kId] = ByteUtils.toLocalBufferType(workingId); + } + else if (typeof workingId === 'string') { + if (workingId.length === 12) { + const bytes = ByteUtils.fromUTF8(workingId); + if (bytes.byteLength === 12) { + this[kId] = bytes; + } + else { + throw new BSONError('Argument passed in must be a string of 12 bytes'); + } + } + else if (workingId.length === 24 && checkForHexRegExp.test(workingId)) { + this[kId] = ByteUtils.fromHex(workingId); + } + else { + throw new BSONError('Argument passed in must be a string of 12 bytes or a string of 24 hex characters or an integer'); + } + } + else { + throw new BSONError('Argument passed in does not match the accepted types'); + } + if (ObjectId.cacheHexString) { + this.__id = ByteUtils.toHex(this.id); + } + } + get id() { + return this[kId]; + } + set id(value) { + this[kId] = value; + if (ObjectId.cacheHexString) { + this.__id = ByteUtils.toHex(value); + } + } + toHexString() { + if (ObjectId.cacheHexString && this.__id) { + return this.__id; + } + const hexString = ByteUtils.toHex(this.id); + if (ObjectId.cacheHexString && !this.__id) { + this.__id = hexString; + } + return hexString; + } + static getInc() { + return (ObjectId.index = (ObjectId.index + 1) % 0xffffff); + } + static generate(time) { + if ('number' !== typeof time) { + time = Math.floor(Date.now() / 1000); + } + const inc = ObjectId.getInc(); + const buffer = ByteUtils.allocate(12); + BSONDataView.fromUint8Array(buffer).setUint32(0, time, false); + if (PROCESS_UNIQUE === null) { + PROCESS_UNIQUE = ByteUtils.randomBytes(5); + } + buffer[4] = PROCESS_UNIQUE[0]; + buffer[5] = PROCESS_UNIQUE[1]; + buffer[6] = PROCESS_UNIQUE[2]; + buffer[7] = PROCESS_UNIQUE[3]; + buffer[8] = PROCESS_UNIQUE[4]; + buffer[11] = inc & 0xff; + buffer[10] = (inc >> 8) & 0xff; + buffer[9] = (inc >> 16) & 0xff; + return buffer; + } + toString(encoding) { + if (encoding === 'base64') + return ByteUtils.toBase64(this.id); + if (encoding === 'hex') + return this.toHexString(); + return this.toHexString(); + } + toJSON() { + return this.toHexString(); + } + equals(otherId) { + if (otherId === undefined || otherId === null) { + return false; + } + if (otherId instanceof ObjectId) { + return this[kId][11] === otherId[kId][11] && ByteUtils.equals(this[kId], otherId[kId]); + } + if (typeof otherId === 'string' && + ObjectId.isValid(otherId) && + otherId.length === 12 && + isUint8Array(this.id)) { + return ByteUtils.equals(this.id, ByteUtils.fromISO88591(otherId)); + } + if (typeof otherId === 'string' && ObjectId.isValid(otherId) && otherId.length === 24) { + return otherId.toLowerCase() === this.toHexString(); + } + if (typeof otherId === 'string' && ObjectId.isValid(otherId) && otherId.length === 12) { + return ByteUtils.equals(ByteUtils.fromUTF8(otherId), this.id); + } + if (typeof otherId === 'object' && + 'toHexString' in otherId && + typeof otherId.toHexString === 'function') { + const otherIdString = otherId.toHexString(); + const thisIdString = this.toHexString().toLowerCase(); + return typeof otherIdString === 'string' && otherIdString.toLowerCase() === thisIdString; + } + return false; + } + getTimestamp() { + const timestamp = new Date(); + const time = BSONDataView.fromUint8Array(this.id).getUint32(0, false); + timestamp.setTime(Math.floor(time) * 1000); + return timestamp; + } + static createPk() { + return new ObjectId(); + } + static createFromTime(time) { + const buffer = ByteUtils.fromNumberArray([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + BSONDataView.fromUint8Array(buffer).setUint32(0, time, false); + return new ObjectId(buffer); + } + static createFromHexString(hexString) { + if (hexString?.length !== 24) { + throw new BSONError('hex string must be 24 characters'); + } + return new ObjectId(ByteUtils.fromHex(hexString)); + } + static createFromBase64(base64) { + if (base64?.length !== 16) { + throw new BSONError('base64 string must be 16 characters'); + } + return new ObjectId(ByteUtils.fromBase64(base64)); + } + static isValid(id) { + if (id == null) + return false; + try { + new ObjectId(id); + return true; + } + catch { + return false; + } + } + toExtendedJSON() { + if (this.toHexString) + return { $oid: this.toHexString() }; + return { $oid: this.toString('hex') }; + } + static fromExtendedJSON(doc) { + return new ObjectId(doc.$oid); + } + [Symbol.for('nodejs.util.inspect.custom')]() { + return this.inspect(); + } + inspect() { + return `new ObjectId("${this.toHexString()}")`; + } +} +ObjectId.index = Math.floor(Math.random() * 0xffffff); + +function internalCalculateObjectSize(object, serializeFunctions, ignoreUndefined) { + let totalLength = 4 + 1; + if (Array.isArray(object)) { + for (let i = 0; i < object.length; i++) { + totalLength += calculateElement(i.toString(), object[i], serializeFunctions, true, ignoreUndefined); + } + } + else { + if (typeof object?.toBSON === 'function') { + object = object.toBSON(); + } + for (const key of Object.keys(object)) { + totalLength += calculateElement(key, object[key], serializeFunctions, false, ignoreUndefined); + } + } + return totalLength; +} +function calculateElement(name, value, serializeFunctions = false, isArray = false, ignoreUndefined = false) { + if (typeof value?.toBSON === 'function') { + value = value.toBSON(); + } + switch (typeof value) { + case 'string': + return 1 + ByteUtils.utf8ByteLength(name) + 1 + 4 + ByteUtils.utf8ByteLength(value) + 1; + case 'number': + if (Math.floor(value) === value && + value >= JS_INT_MIN && + value <= JS_INT_MAX) { + if (value >= BSON_INT32_MIN && value <= BSON_INT32_MAX) { + return (name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + (4 + 1); + } + else { + return (name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + (8 + 1); + } + } + else { + return (name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + (8 + 1); + } + case 'undefined': + if (isArray || !ignoreUndefined) + return (name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + 1; + return 0; + case 'boolean': + return (name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + (1 + 1); + case 'object': + if (value != null && + typeof value._bsontype === 'string' && + value[Symbol.for('@@mdb.bson.version')] !== BSON_MAJOR_VERSION) { + throw new BSONVersionError(); + } + else if (value == null || value._bsontype === 'MinKey' || value._bsontype === 'MaxKey') { + return (name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + 1; + } + else if (value._bsontype === 'ObjectId') { + return (name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + (12 + 1); + } + else if (value instanceof Date || isDate(value)) { + return (name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + (8 + 1); + } + else if (ArrayBuffer.isView(value) || + value instanceof ArrayBuffer || + isAnyArrayBuffer(value)) { + return ((name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + (1 + 4 + 1) + value.byteLength); + } + else if (value._bsontype === 'Long' || + value._bsontype === 'Double' || + value._bsontype === 'Timestamp') { + return (name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + (8 + 1); + } + else if (value._bsontype === 'Decimal128') { + return (name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + (16 + 1); + } + else if (value._bsontype === 'Code') { + if (value.scope != null && Object.keys(value.scope).length > 0) { + return ((name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + + 1 + + 4 + + 4 + + ByteUtils.utf8ByteLength(value.code.toString()) + + 1 + + internalCalculateObjectSize(value.scope, serializeFunctions, ignoreUndefined)); + } + else { + return ((name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + + 1 + + 4 + + ByteUtils.utf8ByteLength(value.code.toString()) + + 1); + } + } + else if (value._bsontype === 'Binary') { + const binary = value; + if (binary.sub_type === Binary.SUBTYPE_BYTE_ARRAY) { + return ((name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + + (binary.position + 1 + 4 + 1 + 4)); + } + else { + return ((name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + (binary.position + 1 + 4 + 1)); + } + } + else if (value._bsontype === 'Symbol') { + return ((name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + + ByteUtils.utf8ByteLength(value.value) + + 4 + + 1 + + 1); + } + else if (value._bsontype === 'DBRef') { + const ordered_values = Object.assign({ + $ref: value.collection, + $id: value.oid + }, value.fields); + if (value.db != null) { + ordered_values['$db'] = value.db; + } + return ((name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + + 1 + + internalCalculateObjectSize(ordered_values, serializeFunctions, ignoreUndefined)); + } + else if (value instanceof RegExp || isRegExp(value)) { + return ((name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + + 1 + + ByteUtils.utf8ByteLength(value.source) + + 1 + + (value.global ? 1 : 0) + + (value.ignoreCase ? 1 : 0) + + (value.multiline ? 1 : 0) + + 1); + } + else if (value._bsontype === 'BSONRegExp') { + return ((name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + + 1 + + ByteUtils.utf8ByteLength(value.pattern) + + 1 + + ByteUtils.utf8ByteLength(value.options) + + 1); + } + else { + return ((name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + + internalCalculateObjectSize(value, serializeFunctions, ignoreUndefined) + + 1); + } + case 'function': + if (serializeFunctions) { + return ((name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + + 1 + + 4 + + ByteUtils.utf8ByteLength(value.toString()) + + 1); + } + } + return 0; +} + +function alphabetize(str) { + return str.split('').sort().join(''); +} +class BSONRegExp extends BSONValue { + get _bsontype() { + return 'BSONRegExp'; + } + constructor(pattern, options) { + super(); + this.pattern = pattern; + this.options = alphabetize(options ?? ''); + if (this.pattern.indexOf('\x00') !== -1) { + throw new BSONError(`BSON Regex patterns cannot contain null bytes, found: ${JSON.stringify(this.pattern)}`); + } + if (this.options.indexOf('\x00') !== -1) { + throw new BSONError(`BSON Regex options cannot contain null bytes, found: ${JSON.stringify(this.options)}`); + } + for (let i = 0; i < this.options.length; i++) { + if (!(this.options[i] === 'i' || + this.options[i] === 'm' || + this.options[i] === 'x' || + this.options[i] === 'l' || + this.options[i] === 's' || + this.options[i] === 'u')) { + throw new BSONError(`The regular expression option [${this.options[i]}] is not supported`); + } + } + } + static parseOptions(options) { + return options ? options.split('').sort().join('') : ''; + } + toExtendedJSON(options) { + options = options || {}; + if (options.legacy) { + return { $regex: this.pattern, $options: this.options }; + } + return { $regularExpression: { pattern: this.pattern, options: this.options } }; + } + static fromExtendedJSON(doc) { + if ('$regex' in doc) { + if (typeof doc.$regex !== 'string') { + if (doc.$regex._bsontype === 'BSONRegExp') { + return doc; + } + } + else { + return new BSONRegExp(doc.$regex, BSONRegExp.parseOptions(doc.$options)); + } + } + if ('$regularExpression' in doc) { + return new BSONRegExp(doc.$regularExpression.pattern, BSONRegExp.parseOptions(doc.$regularExpression.options)); + } + throw new BSONError(`Unexpected BSONRegExp EJSON object form: ${JSON.stringify(doc)}`); + } + [Symbol.for('nodejs.util.inspect.custom')]() { + return this.inspect(); + } + inspect() { + return `new BSONRegExp(${JSON.stringify(this.pattern)}, ${JSON.stringify(this.options)})`; + } +} + +class BSONSymbol extends BSONValue { + get _bsontype() { + return 'BSONSymbol'; + } + constructor(value) { + super(); + this.value = value; + } + valueOf() { + return this.value; + } + toString() { + return this.value; + } + inspect() { + return `new BSONSymbol("${this.value}")`; + } + toJSON() { + return this.value; + } + toExtendedJSON() { + return { $symbol: this.value }; + } + static fromExtendedJSON(doc) { + return new BSONSymbol(doc.$symbol); + } + [Symbol.for('nodejs.util.inspect.custom')]() { + return this.inspect(); + } +} + +const LongWithoutOverridesClass = Long; +class Timestamp extends LongWithoutOverridesClass { + get _bsontype() { + return 'Timestamp'; + } + constructor(low) { + if (low == null) { + super(0, 0, true); + } + else if (typeof low === 'bigint') { + super(low, true); + } + else if (Long.isLong(low)) { + super(low.low, low.high, true); + } + else if (typeof low === 'object' && 't' in low && 'i' in low) { + if (typeof low.t !== 'number' && (typeof low.t !== 'object' || low.t._bsontype !== 'Int32')) { + throw new BSONError('Timestamp constructed from { t, i } must provide t as a number'); + } + if (typeof low.i !== 'number' && (typeof low.i !== 'object' || low.i._bsontype !== 'Int32')) { + throw new BSONError('Timestamp constructed from { t, i } must provide i as a number'); + } + const t = Number(low.t); + const i = Number(low.i); + if (t < 0 || Number.isNaN(t)) { + throw new BSONError('Timestamp constructed from { t, i } must provide a positive t'); + } + if (i < 0 || Number.isNaN(i)) { + throw new BSONError('Timestamp constructed from { t, i } must provide a positive i'); + } + if (t > 4294967295) { + throw new BSONError('Timestamp constructed from { t, i } must provide t equal or less than uint32 max'); + } + if (i > 4294967295) { + throw new BSONError('Timestamp constructed from { t, i } must provide i equal or less than uint32 max'); + } + super(i, t, true); + } + else { + throw new BSONError('A Timestamp can only be constructed with: bigint, Long, or { t: number; i: number }'); + } + } + toJSON() { + return { + $timestamp: this.toString() + }; + } + static fromInt(value) { + return new Timestamp(Long.fromInt(value, true)); + } + static fromNumber(value) { + return new Timestamp(Long.fromNumber(value, true)); + } + static fromBits(lowBits, highBits) { + return new Timestamp({ i: lowBits, t: highBits }); + } + static fromString(str, optRadix) { + return new Timestamp(Long.fromString(str, true, optRadix)); + } + toExtendedJSON() { + return { $timestamp: { t: this.high >>> 0, i: this.low >>> 0 } }; + } + static fromExtendedJSON(doc) { + const i = Long.isLong(doc.$timestamp.i) + ? doc.$timestamp.i.getLowBitsUnsigned() + : doc.$timestamp.i; + const t = Long.isLong(doc.$timestamp.t) + ? doc.$timestamp.t.getLowBitsUnsigned() + : doc.$timestamp.t; + return new Timestamp({ t, i }); + } + [Symbol.for('nodejs.util.inspect.custom')]() { + return this.inspect(); + } + inspect() { + return `new Timestamp({ t: ${this.getHighBits()}, i: ${this.getLowBits()} })`; + } +} +Timestamp.MAX_VALUE = Long.MAX_UNSIGNED_VALUE; + +const FIRST_BIT = 0x80; +const FIRST_TWO_BITS = 0xc0; +const FIRST_THREE_BITS = 0xe0; +const FIRST_FOUR_BITS = 0xf0; +const FIRST_FIVE_BITS = 0xf8; +const TWO_BIT_CHAR = 0xc0; +const THREE_BIT_CHAR = 0xe0; +const FOUR_BIT_CHAR = 0xf0; +const CONTINUING_CHAR = 0x80; +function validateUtf8(bytes, start, end) { + let continuation = 0; + for (let i = start; i < end; i += 1) { + const byte = bytes[i]; + if (continuation) { + if ((byte & FIRST_TWO_BITS) !== CONTINUING_CHAR) { + return false; + } + continuation -= 1; + } + else if (byte & FIRST_BIT) { + if ((byte & FIRST_THREE_BITS) === TWO_BIT_CHAR) { + continuation = 1; + } + else if ((byte & FIRST_FOUR_BITS) === THREE_BIT_CHAR) { + continuation = 2; + } + else if ((byte & FIRST_FIVE_BITS) === FOUR_BIT_CHAR) { + continuation = 3; + } + else { + return false; + } + } + } + return !continuation; +} + +const JS_INT_MAX_LONG = Long.fromNumber(JS_INT_MAX); +const JS_INT_MIN_LONG = Long.fromNumber(JS_INT_MIN); +function internalDeserialize(buffer, options, isArray) { + options = options == null ? {} : options; + const index = options && options.index ? options.index : 0; + const size = buffer[index] | + (buffer[index + 1] << 8) | + (buffer[index + 2] << 16) | + (buffer[index + 3] << 24); + if (size < 5) { + throw new BSONError(`bson size must be >= 5, is ${size}`); + } + if (options.allowObjectSmallerThanBufferSize && buffer.length < size) { + throw new BSONError(`buffer length ${buffer.length} must be >= bson size ${size}`); + } + if (!options.allowObjectSmallerThanBufferSize && buffer.length !== size) { + throw new BSONError(`buffer length ${buffer.length} must === bson size ${size}`); + } + if (size + index > buffer.byteLength) { + throw new BSONError(`(bson size ${size} + options.index ${index} must be <= buffer length ${buffer.byteLength})`); + } + if (buffer[index + size - 1] !== 0) { + throw new BSONError("One object, sized correctly, with a spot for an EOO, but the EOO isn't 0x00"); + } + return deserializeObject(buffer, index, options, isArray); +} +const allowedDBRefKeys = /^\$ref$|^\$id$|^\$db$/; +function deserializeObject(buffer, index, options, isArray = false) { + const fieldsAsRaw = options['fieldsAsRaw'] == null ? null : options['fieldsAsRaw']; + const raw = options['raw'] == null ? false : options['raw']; + const bsonRegExp = typeof options['bsonRegExp'] === 'boolean' ? options['bsonRegExp'] : false; + const promoteBuffers = options.promoteBuffers ?? false; + const promoteLongs = options.promoteLongs ?? true; + const promoteValues = options.promoteValues ?? true; + const useBigInt64 = options.useBigInt64 ?? false; + if (useBigInt64 && !promoteValues) { + throw new BSONError('Must either request bigint or Long for int64 deserialization'); + } + if (useBigInt64 && !promoteLongs) { + throw new BSONError('Must either request bigint or Long for int64 deserialization'); + } + const validation = options.validation == null ? { utf8: true } : options.validation; + let globalUTFValidation = true; + let validationSetting; + const utf8KeysSet = new Set(); + const utf8ValidatedKeys = validation.utf8; + if (typeof utf8ValidatedKeys === 'boolean') { + validationSetting = utf8ValidatedKeys; + } + else { + globalUTFValidation = false; + const utf8ValidationValues = Object.keys(utf8ValidatedKeys).map(function (key) { + return utf8ValidatedKeys[key]; + }); + if (utf8ValidationValues.length === 0) { + throw new BSONError('UTF-8 validation setting cannot be empty'); + } + if (typeof utf8ValidationValues[0] !== 'boolean') { + throw new BSONError('Invalid UTF-8 validation option, must specify boolean values'); + } + validationSetting = utf8ValidationValues[0]; + if (!utf8ValidationValues.every(item => item === validationSetting)) { + throw new BSONError('Invalid UTF-8 validation option - keys must be all true or all false'); + } + } + if (!globalUTFValidation) { + for (const key of Object.keys(utf8ValidatedKeys)) { + utf8KeysSet.add(key); + } + } + const startIndex = index; + if (buffer.length < 5) + throw new BSONError('corrupt bson message < 5 bytes long'); + const size = buffer[index++] | (buffer[index++] << 8) | (buffer[index++] << 16) | (buffer[index++] << 24); + if (size < 5 || size > buffer.length) + throw new BSONError('corrupt bson message'); + const object = isArray ? [] : {}; + let arrayIndex = 0; + const done = false; + let isPossibleDBRef = isArray ? false : null; + const dataview = new DataView(buffer.buffer, buffer.byteOffset, buffer.byteLength); + while (!done) { + const elementType = buffer[index++]; + if (elementType === 0) + break; + let i = index; + while (buffer[i] !== 0x00 && i < buffer.length) { + i++; + } + if (i >= buffer.byteLength) + throw new BSONError('Bad BSON Document: illegal CString'); + const name = isArray ? arrayIndex++ : ByteUtils.toUTF8(buffer, index, i); + let shouldValidateKey = true; + if (globalUTFValidation || utf8KeysSet.has(name)) { + shouldValidateKey = validationSetting; + } + else { + shouldValidateKey = !validationSetting; + } + if (isPossibleDBRef !== false && name[0] === '$') { + isPossibleDBRef = allowedDBRefKeys.test(name); + } + let value; + index = i + 1; + if (elementType === BSON_DATA_STRING) { + const stringSize = buffer[index++] | + (buffer[index++] << 8) | + (buffer[index++] << 16) | + (buffer[index++] << 24); + if (stringSize <= 0 || + stringSize > buffer.length - index || + buffer[index + stringSize - 1] !== 0) { + throw new BSONError('bad string length in bson'); + } + value = getValidatedString(buffer, index, index + stringSize - 1, shouldValidateKey); + index = index + stringSize; + } + else if (elementType === BSON_DATA_OID) { + const oid = ByteUtils.allocate(12); + oid.set(buffer.subarray(index, index + 12)); + value = new ObjectId(oid); + index = index + 12; + } + else if (elementType === BSON_DATA_INT && promoteValues === false) { + value = new Int32(buffer[index++] | (buffer[index++] << 8) | (buffer[index++] << 16) | (buffer[index++] << 24)); + } + else if (elementType === BSON_DATA_INT) { + value = + buffer[index++] | + (buffer[index++] << 8) | + (buffer[index++] << 16) | + (buffer[index++] << 24); + } + else if (elementType === BSON_DATA_NUMBER && promoteValues === false) { + value = new Double(dataview.getFloat64(index, true)); + index = index + 8; + } + else if (elementType === BSON_DATA_NUMBER) { + value = dataview.getFloat64(index, true); + index = index + 8; + } + else if (elementType === BSON_DATA_DATE) { + const lowBits = buffer[index++] | + (buffer[index++] << 8) | + (buffer[index++] << 16) | + (buffer[index++] << 24); + const highBits = buffer[index++] | + (buffer[index++] << 8) | + (buffer[index++] << 16) | + (buffer[index++] << 24); + value = new Date(new Long(lowBits, highBits).toNumber()); + } + else if (elementType === BSON_DATA_BOOLEAN) { + if (buffer[index] !== 0 && buffer[index] !== 1) + throw new BSONError('illegal boolean type value'); + value = buffer[index++] === 1; + } + else if (elementType === BSON_DATA_OBJECT) { + const _index = index; + const objectSize = buffer[index] | + (buffer[index + 1] << 8) | + (buffer[index + 2] << 16) | + (buffer[index + 3] << 24); + if (objectSize <= 0 || objectSize > buffer.length - index) + throw new BSONError('bad embedded document length in bson'); + if (raw) { + value = buffer.slice(index, index + objectSize); + } + else { + let objectOptions = options; + if (!globalUTFValidation) { + objectOptions = { ...options, validation: { utf8: shouldValidateKey } }; + } + value = deserializeObject(buffer, _index, objectOptions, false); + } + index = index + objectSize; + } + else if (elementType === BSON_DATA_ARRAY) { + const _index = index; + const objectSize = buffer[index] | + (buffer[index + 1] << 8) | + (buffer[index + 2] << 16) | + (buffer[index + 3] << 24); + let arrayOptions = options; + const stopIndex = index + objectSize; + if (fieldsAsRaw && fieldsAsRaw[name]) { + arrayOptions = { ...options, raw: true }; + } + if (!globalUTFValidation) { + arrayOptions = { ...arrayOptions, validation: { utf8: shouldValidateKey } }; + } + value = deserializeObject(buffer, _index, arrayOptions, true); + index = index + objectSize; + if (buffer[index - 1] !== 0) + throw new BSONError('invalid array terminator byte'); + if (index !== stopIndex) + throw new BSONError('corrupted array bson'); + } + else if (elementType === BSON_DATA_UNDEFINED) { + value = undefined; + } + else if (elementType === BSON_DATA_NULL) { + value = null; + } + else if (elementType === BSON_DATA_LONG) { + const dataview = BSONDataView.fromUint8Array(buffer.subarray(index, index + 8)); + const lowBits = buffer[index++] | + (buffer[index++] << 8) | + (buffer[index++] << 16) | + (buffer[index++] << 24); + const highBits = buffer[index++] | + (buffer[index++] << 8) | + (buffer[index++] << 16) | + (buffer[index++] << 24); + const long = new Long(lowBits, highBits); + if (useBigInt64) { + value = dataview.getBigInt64(0, true); + } + else if (promoteLongs && promoteValues === true) { + value = + long.lessThanOrEqual(JS_INT_MAX_LONG) && long.greaterThanOrEqual(JS_INT_MIN_LONG) + ? long.toNumber() + : long; + } + else { + value = long; + } + } + else if (elementType === BSON_DATA_DECIMAL128) { + const bytes = ByteUtils.allocate(16); + bytes.set(buffer.subarray(index, index + 16), 0); + index = index + 16; + value = new Decimal128(bytes); + } + else if (elementType === BSON_DATA_BINARY) { + let binarySize = buffer[index++] | + (buffer[index++] << 8) | + (buffer[index++] << 16) | + (buffer[index++] << 24); + const totalBinarySize = binarySize; + const subType = buffer[index++]; + if (binarySize < 0) + throw new BSONError('Negative binary type element size found'); + if (binarySize > buffer.byteLength) + throw new BSONError('Binary type size larger than document size'); + if (buffer['slice'] != null) { + if (subType === Binary.SUBTYPE_BYTE_ARRAY) { + binarySize = + buffer[index++] | + (buffer[index++] << 8) | + (buffer[index++] << 16) | + (buffer[index++] << 24); + if (binarySize < 0) + throw new BSONError('Negative binary type element size found for subtype 0x02'); + if (binarySize > totalBinarySize - 4) + throw new BSONError('Binary type with subtype 0x02 contains too long binary size'); + if (binarySize < totalBinarySize - 4) + throw new BSONError('Binary type with subtype 0x02 contains too short binary size'); + } + if (promoteBuffers && promoteValues) { + value = ByteUtils.toLocalBufferType(buffer.slice(index, index + binarySize)); + } + else { + value = new Binary(buffer.slice(index, index + binarySize), subType); + if (subType === BSON_BINARY_SUBTYPE_UUID_NEW && UUID.isValid(value)) { + value = value.toUUID(); + } + } + } + else { + const _buffer = ByteUtils.allocate(binarySize); + if (subType === Binary.SUBTYPE_BYTE_ARRAY) { + binarySize = + buffer[index++] | + (buffer[index++] << 8) | + (buffer[index++] << 16) | + (buffer[index++] << 24); + if (binarySize < 0) + throw new BSONError('Negative binary type element size found for subtype 0x02'); + if (binarySize > totalBinarySize - 4) + throw new BSONError('Binary type with subtype 0x02 contains too long binary size'); + if (binarySize < totalBinarySize - 4) + throw new BSONError('Binary type with subtype 0x02 contains too short binary size'); + } + for (i = 0; i < binarySize; i++) { + _buffer[i] = buffer[index + i]; + } + if (promoteBuffers && promoteValues) { + value = _buffer; + } + else { + value = new Binary(buffer.slice(index, index + binarySize), subType); + if (subType === BSON_BINARY_SUBTYPE_UUID_NEW && UUID.isValid(value)) { + value = value.toUUID(); + } + } + } + index = index + binarySize; + } + else if (elementType === BSON_DATA_REGEXP && bsonRegExp === false) { + i = index; + while (buffer[i] !== 0x00 && i < buffer.length) { + i++; + } + if (i >= buffer.length) + throw new BSONError('Bad BSON Document: illegal CString'); + const source = ByteUtils.toUTF8(buffer, index, i); + index = i + 1; + i = index; + while (buffer[i] !== 0x00 && i < buffer.length) { + i++; + } + if (i >= buffer.length) + throw new BSONError('Bad BSON Document: illegal CString'); + const regExpOptions = ByteUtils.toUTF8(buffer, index, i); + index = i + 1; + const optionsArray = new Array(regExpOptions.length); + for (i = 0; i < regExpOptions.length; i++) { + switch (regExpOptions[i]) { + case 'm': + optionsArray[i] = 'm'; + break; + case 's': + optionsArray[i] = 'g'; + break; + case 'i': + optionsArray[i] = 'i'; + break; + } + } + value = new RegExp(source, optionsArray.join('')); + } + else if (elementType === BSON_DATA_REGEXP && bsonRegExp === true) { + i = index; + while (buffer[i] !== 0x00 && i < buffer.length) { + i++; + } + if (i >= buffer.length) + throw new BSONError('Bad BSON Document: illegal CString'); + const source = ByteUtils.toUTF8(buffer, index, i); + index = i + 1; + i = index; + while (buffer[i] !== 0x00 && i < buffer.length) { + i++; + } + if (i >= buffer.length) + throw new BSONError('Bad BSON Document: illegal CString'); + const regExpOptions = ByteUtils.toUTF8(buffer, index, i); + index = i + 1; + value = new BSONRegExp(source, regExpOptions); + } + else if (elementType === BSON_DATA_SYMBOL) { + const stringSize = buffer[index++] | + (buffer[index++] << 8) | + (buffer[index++] << 16) | + (buffer[index++] << 24); + if (stringSize <= 0 || + stringSize > buffer.length - index || + buffer[index + stringSize - 1] !== 0) { + throw new BSONError('bad string length in bson'); + } + const symbol = getValidatedString(buffer, index, index + stringSize - 1, shouldValidateKey); + value = promoteValues ? symbol : new BSONSymbol(symbol); + index = index + stringSize; + } + else if (elementType === BSON_DATA_TIMESTAMP) { + const i = buffer[index++] + + buffer[index++] * (1 << 8) + + buffer[index++] * (1 << 16) + + buffer[index++] * (1 << 24); + const t = buffer[index++] + + buffer[index++] * (1 << 8) + + buffer[index++] * (1 << 16) + + buffer[index++] * (1 << 24); + value = new Timestamp({ i, t }); + } + else if (elementType === BSON_DATA_MIN_KEY) { + value = new MinKey(); + } + else if (elementType === BSON_DATA_MAX_KEY) { + value = new MaxKey(); + } + else if (elementType === BSON_DATA_CODE) { + const stringSize = buffer[index++] | + (buffer[index++] << 8) | + (buffer[index++] << 16) | + (buffer[index++] << 24); + if (stringSize <= 0 || + stringSize > buffer.length - index || + buffer[index + stringSize - 1] !== 0) { + throw new BSONError('bad string length in bson'); + } + const functionString = getValidatedString(buffer, index, index + stringSize - 1, shouldValidateKey); + value = new Code(functionString); + index = index + stringSize; + } + else if (elementType === BSON_DATA_CODE_W_SCOPE) { + const totalSize = buffer[index++] | + (buffer[index++] << 8) | + (buffer[index++] << 16) | + (buffer[index++] << 24); + if (totalSize < 4 + 4 + 4 + 1) { + throw new BSONError('code_w_scope total size shorter minimum expected length'); + } + const stringSize = buffer[index++] | + (buffer[index++] << 8) | + (buffer[index++] << 16) | + (buffer[index++] << 24); + if (stringSize <= 0 || + stringSize > buffer.length - index || + buffer[index + stringSize - 1] !== 0) { + throw new BSONError('bad string length in bson'); + } + const functionString = getValidatedString(buffer, index, index + stringSize - 1, shouldValidateKey); + index = index + stringSize; + const _index = index; + const objectSize = buffer[index] | + (buffer[index + 1] << 8) | + (buffer[index + 2] << 16) | + (buffer[index + 3] << 24); + const scopeObject = deserializeObject(buffer, _index, options, false); + index = index + objectSize; + if (totalSize < 4 + 4 + objectSize + stringSize) { + throw new BSONError('code_w_scope total size is too short, truncating scope'); + } + if (totalSize > 4 + 4 + objectSize + stringSize) { + throw new BSONError('code_w_scope total size is too long, clips outer document'); + } + value = new Code(functionString, scopeObject); + } + else if (elementType === BSON_DATA_DBPOINTER) { + const stringSize = buffer[index++] | + (buffer[index++] << 8) | + (buffer[index++] << 16) | + (buffer[index++] << 24); + if (stringSize <= 0 || + stringSize > buffer.length - index || + buffer[index + stringSize - 1] !== 0) + throw new BSONError('bad string length in bson'); + if (validation != null && validation.utf8) { + if (!validateUtf8(buffer, index, index + stringSize - 1)) { + throw new BSONError('Invalid UTF-8 string in BSON document'); + } + } + const namespace = ByteUtils.toUTF8(buffer, index, index + stringSize - 1); + index = index + stringSize; + const oidBuffer = ByteUtils.allocate(12); + oidBuffer.set(buffer.subarray(index, index + 12), 0); + const oid = new ObjectId(oidBuffer); + index = index + 12; + value = new DBRef(namespace, oid); + } + else { + throw new BSONError(`Detected unknown BSON type ${elementType.toString(16)} for fieldname "${name}"`); + } + if (name === '__proto__') { + Object.defineProperty(object, name, { + value, + writable: true, + enumerable: true, + configurable: true + }); + } + else { + object[name] = value; + } + } + if (size !== index - startIndex) { + if (isArray) + throw new BSONError('corrupt array bson'); + throw new BSONError('corrupt object bson'); + } + if (!isPossibleDBRef) + return object; + if (isDBRefLike(object)) { + const copy = Object.assign({}, object); + delete copy.$ref; + delete copy.$id; + delete copy.$db; + return new DBRef(object.$ref, object.$id, object.$db, copy); + } + return object; +} +function getValidatedString(buffer, start, end, shouldValidateUtf8) { + const value = ByteUtils.toUTF8(buffer, start, end); + if (shouldValidateUtf8) { + for (let i = 0; i < value.length; i++) { + if (value.charCodeAt(i) === 0xfffd) { + if (!validateUtf8(buffer, start, end)) { + throw new BSONError('Invalid UTF-8 string in BSON document'); + } + break; + } + } + } + return value; +} + +const regexp = /\x00/; +const ignoreKeys = new Set(['$db', '$ref', '$id', '$clusterTime']); +function serializeString(buffer, key, value, index) { + buffer[index++] = BSON_DATA_STRING; + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + index = index + numberOfWrittenBytes + 1; + buffer[index - 1] = 0; + const size = ByteUtils.encodeUTF8Into(buffer, value, index + 4); + buffer[index + 3] = ((size + 1) >> 24) & 0xff; + buffer[index + 2] = ((size + 1) >> 16) & 0xff; + buffer[index + 1] = ((size + 1) >> 8) & 0xff; + buffer[index] = (size + 1) & 0xff; + index = index + 4 + size; + buffer[index++] = 0; + return index; +} +const NUMBER_SPACE = new DataView(new ArrayBuffer(8), 0, 8); +const FOUR_BYTE_VIEW_ON_NUMBER = new Uint8Array(NUMBER_SPACE.buffer, 0, 4); +const EIGHT_BYTE_VIEW_ON_NUMBER = new Uint8Array(NUMBER_SPACE.buffer, 0, 8); +function serializeNumber(buffer, key, value, index) { + const isNegativeZero = Object.is(value, -0); + const type = !isNegativeZero && + Number.isSafeInteger(value) && + value <= BSON_INT32_MAX && + value >= BSON_INT32_MIN + ? BSON_DATA_INT + : BSON_DATA_NUMBER; + if (type === BSON_DATA_INT) { + NUMBER_SPACE.setInt32(0, value, true); + } + else { + NUMBER_SPACE.setFloat64(0, value, true); + } + const bytes = type === BSON_DATA_INT ? FOUR_BYTE_VIEW_ON_NUMBER : EIGHT_BYTE_VIEW_ON_NUMBER; + buffer[index++] = type; + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + index = index + numberOfWrittenBytes; + buffer[index++] = 0x00; + buffer.set(bytes, index); + index += bytes.byteLength; + return index; +} +function serializeBigInt(buffer, key, value, index) { + buffer[index++] = BSON_DATA_LONG; + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + index += numberOfWrittenBytes; + buffer[index++] = 0; + NUMBER_SPACE.setBigInt64(0, value, true); + buffer.set(EIGHT_BYTE_VIEW_ON_NUMBER, index); + index += EIGHT_BYTE_VIEW_ON_NUMBER.byteLength; + return index; +} +function serializeNull(buffer, key, _, index) { + buffer[index++] = BSON_DATA_NULL; + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + return index; +} +function serializeBoolean(buffer, key, value, index) { + buffer[index++] = BSON_DATA_BOOLEAN; + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + buffer[index++] = value ? 1 : 0; + return index; +} +function serializeDate(buffer, key, value, index) { + buffer[index++] = BSON_DATA_DATE; + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + const dateInMilis = Long.fromNumber(value.getTime()); + const lowBits = dateInMilis.getLowBits(); + const highBits = dateInMilis.getHighBits(); + buffer[index++] = lowBits & 0xff; + buffer[index++] = (lowBits >> 8) & 0xff; + buffer[index++] = (lowBits >> 16) & 0xff; + buffer[index++] = (lowBits >> 24) & 0xff; + buffer[index++] = highBits & 0xff; + buffer[index++] = (highBits >> 8) & 0xff; + buffer[index++] = (highBits >> 16) & 0xff; + buffer[index++] = (highBits >> 24) & 0xff; + return index; +} +function serializeRegExp(buffer, key, value, index) { + buffer[index++] = BSON_DATA_REGEXP; + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + if (value.source && value.source.match(regexp) != null) { + throw new BSONError('value ' + value.source + ' must not contain null bytes'); + } + index = index + ByteUtils.encodeUTF8Into(buffer, value.source, index); + buffer[index++] = 0x00; + if (value.ignoreCase) + buffer[index++] = 0x69; + if (value.global) + buffer[index++] = 0x73; + if (value.multiline) + buffer[index++] = 0x6d; + buffer[index++] = 0x00; + return index; +} +function serializeBSONRegExp(buffer, key, value, index) { + buffer[index++] = BSON_DATA_REGEXP; + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + if (value.pattern.match(regexp) != null) { + throw new BSONError('pattern ' + value.pattern + ' must not contain null bytes'); + } + index = index + ByteUtils.encodeUTF8Into(buffer, value.pattern, index); + buffer[index++] = 0x00; + const sortedOptions = value.options.split('').sort().join(''); + index = index + ByteUtils.encodeUTF8Into(buffer, sortedOptions, index); + buffer[index++] = 0x00; + return index; +} +function serializeMinMax(buffer, key, value, index) { + if (value === null) { + buffer[index++] = BSON_DATA_NULL; + } + else if (value._bsontype === 'MinKey') { + buffer[index++] = BSON_DATA_MIN_KEY; + } + else { + buffer[index++] = BSON_DATA_MAX_KEY; + } + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + return index; +} +function serializeObjectId(buffer, key, value, index) { + buffer[index++] = BSON_DATA_OID; + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + if (isUint8Array(value.id)) { + buffer.set(value.id.subarray(0, 12), index); + } + else { + throw new BSONError('object [' + JSON.stringify(value) + '] is not a valid ObjectId'); + } + return index + 12; +} +function serializeBuffer(buffer, key, value, index) { + buffer[index++] = BSON_DATA_BINARY; + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + const size = value.length; + buffer[index++] = size & 0xff; + buffer[index++] = (size >> 8) & 0xff; + buffer[index++] = (size >> 16) & 0xff; + buffer[index++] = (size >> 24) & 0xff; + buffer[index++] = BSON_BINARY_SUBTYPE_DEFAULT; + buffer.set(value, index); + index = index + size; + return index; +} +function serializeObject(buffer, key, value, index, checkKeys, depth, serializeFunctions, ignoreUndefined, path) { + if (path.has(value)) { + throw new BSONError('Cannot convert circular structure to BSON'); + } + path.add(value); + buffer[index++] = Array.isArray(value) ? BSON_DATA_ARRAY : BSON_DATA_OBJECT; + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + const endIndex = serializeInto(buffer, value, checkKeys, index, depth + 1, serializeFunctions, ignoreUndefined, path); + path.delete(value); + return endIndex; +} +function serializeDecimal128(buffer, key, value, index) { + buffer[index++] = BSON_DATA_DECIMAL128; + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + buffer.set(value.bytes.subarray(0, 16), index); + return index + 16; +} +function serializeLong(buffer, key, value, index) { + buffer[index++] = + value._bsontype === 'Long' ? BSON_DATA_LONG : BSON_DATA_TIMESTAMP; + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + const lowBits = value.getLowBits(); + const highBits = value.getHighBits(); + buffer[index++] = lowBits & 0xff; + buffer[index++] = (lowBits >> 8) & 0xff; + buffer[index++] = (lowBits >> 16) & 0xff; + buffer[index++] = (lowBits >> 24) & 0xff; + buffer[index++] = highBits & 0xff; + buffer[index++] = (highBits >> 8) & 0xff; + buffer[index++] = (highBits >> 16) & 0xff; + buffer[index++] = (highBits >> 24) & 0xff; + return index; +} +function serializeInt32(buffer, key, value, index) { + value = value.valueOf(); + buffer[index++] = BSON_DATA_INT; + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + buffer[index++] = value & 0xff; + buffer[index++] = (value >> 8) & 0xff; + buffer[index++] = (value >> 16) & 0xff; + buffer[index++] = (value >> 24) & 0xff; + return index; +} +function serializeDouble(buffer, key, value, index) { + buffer[index++] = BSON_DATA_NUMBER; + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + NUMBER_SPACE.setFloat64(0, value.value, true); + buffer.set(EIGHT_BYTE_VIEW_ON_NUMBER, index); + index = index + 8; + return index; +} +function serializeFunction(buffer, key, value, index) { + buffer[index++] = BSON_DATA_CODE; + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + const functionString = value.toString(); + const size = ByteUtils.encodeUTF8Into(buffer, functionString, index + 4) + 1; + buffer[index] = size & 0xff; + buffer[index + 1] = (size >> 8) & 0xff; + buffer[index + 2] = (size >> 16) & 0xff; + buffer[index + 3] = (size >> 24) & 0xff; + index = index + 4 + size - 1; + buffer[index++] = 0; + return index; +} +function serializeCode(buffer, key, value, index, checkKeys = false, depth = 0, serializeFunctions = false, ignoreUndefined = true, path) { + if (value.scope && typeof value.scope === 'object') { + buffer[index++] = BSON_DATA_CODE_W_SCOPE; + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + let startIndex = index; + const functionString = value.code; + index = index + 4; + const codeSize = ByteUtils.encodeUTF8Into(buffer, functionString, index + 4) + 1; + buffer[index] = codeSize & 0xff; + buffer[index + 1] = (codeSize >> 8) & 0xff; + buffer[index + 2] = (codeSize >> 16) & 0xff; + buffer[index + 3] = (codeSize >> 24) & 0xff; + buffer[index + 4 + codeSize - 1] = 0; + index = index + codeSize + 4; + const endIndex = serializeInto(buffer, value.scope, checkKeys, index, depth + 1, serializeFunctions, ignoreUndefined, path); + index = endIndex - 1; + const totalSize = endIndex - startIndex; + buffer[startIndex++] = totalSize & 0xff; + buffer[startIndex++] = (totalSize >> 8) & 0xff; + buffer[startIndex++] = (totalSize >> 16) & 0xff; + buffer[startIndex++] = (totalSize >> 24) & 0xff; + buffer[index++] = 0; + } + else { + buffer[index++] = BSON_DATA_CODE; + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + const functionString = value.code.toString(); + const size = ByteUtils.encodeUTF8Into(buffer, functionString, index + 4) + 1; + buffer[index] = size & 0xff; + buffer[index + 1] = (size >> 8) & 0xff; + buffer[index + 2] = (size >> 16) & 0xff; + buffer[index + 3] = (size >> 24) & 0xff; + index = index + 4 + size - 1; + buffer[index++] = 0; + } + return index; +} +function serializeBinary(buffer, key, value, index) { + buffer[index++] = BSON_DATA_BINARY; + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + const data = value.buffer; + let size = value.position; + if (value.sub_type === Binary.SUBTYPE_BYTE_ARRAY) + size = size + 4; + buffer[index++] = size & 0xff; + buffer[index++] = (size >> 8) & 0xff; + buffer[index++] = (size >> 16) & 0xff; + buffer[index++] = (size >> 24) & 0xff; + buffer[index++] = value.sub_type; + if (value.sub_type === Binary.SUBTYPE_BYTE_ARRAY) { + size = size - 4; + buffer[index++] = size & 0xff; + buffer[index++] = (size >> 8) & 0xff; + buffer[index++] = (size >> 16) & 0xff; + buffer[index++] = (size >> 24) & 0xff; + } + buffer.set(data, index); + index = index + value.position; + return index; +} +function serializeSymbol(buffer, key, value, index) { + buffer[index++] = BSON_DATA_SYMBOL; + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + const size = ByteUtils.encodeUTF8Into(buffer, value.value, index + 4) + 1; + buffer[index] = size & 0xff; + buffer[index + 1] = (size >> 8) & 0xff; + buffer[index + 2] = (size >> 16) & 0xff; + buffer[index + 3] = (size >> 24) & 0xff; + index = index + 4 + size - 1; + buffer[index++] = 0x00; + return index; +} +function serializeDBRef(buffer, key, value, index, depth, serializeFunctions, path) { + buffer[index++] = BSON_DATA_OBJECT; + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + let startIndex = index; + let output = { + $ref: value.collection || value.namespace, + $id: value.oid + }; + if (value.db != null) { + output.$db = value.db; + } + output = Object.assign(output, value.fields); + const endIndex = serializeInto(buffer, output, false, index, depth + 1, serializeFunctions, true, path); + const size = endIndex - startIndex; + buffer[startIndex++] = size & 0xff; + buffer[startIndex++] = (size >> 8) & 0xff; + buffer[startIndex++] = (size >> 16) & 0xff; + buffer[startIndex++] = (size >> 24) & 0xff; + return endIndex; +} +function serializeInto(buffer, object, checkKeys, startingIndex, depth, serializeFunctions, ignoreUndefined, path) { + if (path == null) { + if (object == null) { + buffer[0] = 0x05; + buffer[1] = 0x00; + buffer[2] = 0x00; + buffer[3] = 0x00; + buffer[4] = 0x00; + return 5; + } + if (Array.isArray(object)) { + throw new BSONError('serialize does not support an array as the root input'); + } + if (typeof object !== 'object') { + throw new BSONError('serialize does not support non-object as the root input'); + } + else if ('_bsontype' in object && typeof object._bsontype === 'string') { + throw new BSONError(`BSON types cannot be serialized as a document`); + } + else if (isDate(object) || + isRegExp(object) || + isUint8Array(object) || + isAnyArrayBuffer(object)) { + throw new BSONError(`date, regexp, typedarray, and arraybuffer cannot be BSON documents`); + } + path = new Set(); + } + path.add(object); + let index = startingIndex + 4; + if (Array.isArray(object)) { + for (let i = 0; i < object.length; i++) { + const key = `${i}`; + let value = object[i]; + if (typeof value?.toBSON === 'function') { + value = value.toBSON(); + } + if (typeof value === 'string') { + index = serializeString(buffer, key, value, index); + } + else if (typeof value === 'number') { + index = serializeNumber(buffer, key, value, index); + } + else if (typeof value === 'bigint') { + index = serializeBigInt(buffer, key, value, index); + } + else if (typeof value === 'boolean') { + index = serializeBoolean(buffer, key, value, index); + } + else if (value instanceof Date || isDate(value)) { + index = serializeDate(buffer, key, value, index); + } + else if (value === undefined) { + index = serializeNull(buffer, key, value, index); + } + else if (value === null) { + index = serializeNull(buffer, key, value, index); + } + else if (isUint8Array(value)) { + index = serializeBuffer(buffer, key, value, index); + } + else if (value instanceof RegExp || isRegExp(value)) { + index = serializeRegExp(buffer, key, value, index); + } + else if (typeof value === 'object' && value._bsontype == null) { + index = serializeObject(buffer, key, value, index, checkKeys, depth, serializeFunctions, ignoreUndefined, path); + } + else if (typeof value === 'object' && + value[Symbol.for('@@mdb.bson.version')] !== BSON_MAJOR_VERSION) { + throw new BSONVersionError(); + } + else if (value._bsontype === 'ObjectId') { + index = serializeObjectId(buffer, key, value, index); + } + else if (value._bsontype === 'Decimal128') { + index = serializeDecimal128(buffer, key, value, index); + } + else if (value._bsontype === 'Long' || value._bsontype === 'Timestamp') { + index = serializeLong(buffer, key, value, index); + } + else if (value._bsontype === 'Double') { + index = serializeDouble(buffer, key, value, index); + } + else if (typeof value === 'function' && serializeFunctions) { + index = serializeFunction(buffer, key, value, index); + } + else if (value._bsontype === 'Code') { + index = serializeCode(buffer, key, value, index, checkKeys, depth, serializeFunctions, ignoreUndefined, path); + } + else if (value._bsontype === 'Binary') { + index = serializeBinary(buffer, key, value, index); + } + else if (value._bsontype === 'BSONSymbol') { + index = serializeSymbol(buffer, key, value, index); + } + else if (value._bsontype === 'DBRef') { + index = serializeDBRef(buffer, key, value, index, depth, serializeFunctions, path); + } + else if (value._bsontype === 'BSONRegExp') { + index = serializeBSONRegExp(buffer, key, value, index); + } + else if (value._bsontype === 'Int32') { + index = serializeInt32(buffer, key, value, index); + } + else if (value._bsontype === 'MinKey' || value._bsontype === 'MaxKey') { + index = serializeMinMax(buffer, key, value, index); + } + else if (typeof value._bsontype !== 'undefined') { + throw new BSONError(`Unrecognized or invalid _bsontype: ${String(value._bsontype)}`); + } + } + } + else if (object instanceof Map || isMap(object)) { + const iterator = object.entries(); + let done = false; + while (!done) { + const entry = iterator.next(); + done = !!entry.done; + if (done) + continue; + const key = entry.value[0]; + let value = entry.value[1]; + if (typeof value?.toBSON === 'function') { + value = value.toBSON(); + } + const type = typeof value; + if (typeof key === 'string' && !ignoreKeys.has(key)) { + if (key.match(regexp) != null) { + throw new BSONError('key ' + key + ' must not contain null bytes'); + } + if (checkKeys) { + if ('$' === key[0]) { + throw new BSONError('key ' + key + " must not start with '$'"); + } + else if (~key.indexOf('.')) { + throw new BSONError('key ' + key + " must not contain '.'"); + } + } + } + if (type === 'string') { + index = serializeString(buffer, key, value, index); + } + else if (type === 'number') { + index = serializeNumber(buffer, key, value, index); + } + else if (type === 'bigint') { + index = serializeBigInt(buffer, key, value, index); + } + else if (type === 'boolean') { + index = serializeBoolean(buffer, key, value, index); + } + else if (value instanceof Date || isDate(value)) { + index = serializeDate(buffer, key, value, index); + } + else if (value === null || (value === undefined && ignoreUndefined === false)) { + index = serializeNull(buffer, key, value, index); + } + else if (isUint8Array(value)) { + index = serializeBuffer(buffer, key, value, index); + } + else if (value instanceof RegExp || isRegExp(value)) { + index = serializeRegExp(buffer, key, value, index); + } + else if (type === 'object' && value._bsontype == null) { + index = serializeObject(buffer, key, value, index, checkKeys, depth, serializeFunctions, ignoreUndefined, path); + } + else if (typeof value === 'object' && + value[Symbol.for('@@mdb.bson.version')] !== BSON_MAJOR_VERSION) { + throw new BSONVersionError(); + } + else if (value._bsontype === 'ObjectId') { + index = serializeObjectId(buffer, key, value, index); + } + else if (type === 'object' && value._bsontype === 'Decimal128') { + index = serializeDecimal128(buffer, key, value, index); + } + else if (value._bsontype === 'Long' || value._bsontype === 'Timestamp') { + index = serializeLong(buffer, key, value, index); + } + else if (value._bsontype === 'Double') { + index = serializeDouble(buffer, key, value, index); + } + else if (value._bsontype === 'Code') { + index = serializeCode(buffer, key, value, index, checkKeys, depth, serializeFunctions, ignoreUndefined, path); + } + else if (typeof value === 'function' && serializeFunctions) { + index = serializeFunction(buffer, key, value, index); + } + else if (value._bsontype === 'Binary') { + index = serializeBinary(buffer, key, value, index); + } + else if (value._bsontype === 'BSONSymbol') { + index = serializeSymbol(buffer, key, value, index); + } + else if (value._bsontype === 'DBRef') { + index = serializeDBRef(buffer, key, value, index, depth, serializeFunctions, path); + } + else if (value._bsontype === 'BSONRegExp') { + index = serializeBSONRegExp(buffer, key, value, index); + } + else if (value._bsontype === 'Int32') { + index = serializeInt32(buffer, key, value, index); + } + else if (value._bsontype === 'MinKey' || value._bsontype === 'MaxKey') { + index = serializeMinMax(buffer, key, value, index); + } + else if (typeof value._bsontype !== 'undefined') { + throw new BSONError(`Unrecognized or invalid _bsontype: ${String(value._bsontype)}`); + } + } + } + else { + if (typeof object?.toBSON === 'function') { + object = object.toBSON(); + if (object != null && typeof object !== 'object') { + throw new BSONError('toBSON function did not return an object'); + } + } + for (const key of Object.keys(object)) { + let value = object[key]; + if (typeof value?.toBSON === 'function') { + value = value.toBSON(); + } + const type = typeof value; + if (typeof key === 'string' && !ignoreKeys.has(key)) { + if (key.match(regexp) != null) { + throw new BSONError('key ' + key + ' must not contain null bytes'); + } + if (checkKeys) { + if ('$' === key[0]) { + throw new BSONError('key ' + key + " must not start with '$'"); + } + else if (~key.indexOf('.')) { + throw new BSONError('key ' + key + " must not contain '.'"); + } + } + } + if (type === 'string') { + index = serializeString(buffer, key, value, index); + } + else if (type === 'number') { + index = serializeNumber(buffer, key, value, index); + } + else if (type === 'bigint') { + index = serializeBigInt(buffer, key, value, index); + } + else if (type === 'boolean') { + index = serializeBoolean(buffer, key, value, index); + } + else if (value instanceof Date || isDate(value)) { + index = serializeDate(buffer, key, value, index); + } + else if (value === undefined) { + if (ignoreUndefined === false) + index = serializeNull(buffer, key, value, index); + } + else if (value === null) { + index = serializeNull(buffer, key, value, index); + } + else if (isUint8Array(value)) { + index = serializeBuffer(buffer, key, value, index); + } + else if (value instanceof RegExp || isRegExp(value)) { + index = serializeRegExp(buffer, key, value, index); + } + else if (type === 'object' && value._bsontype == null) { + index = serializeObject(buffer, key, value, index, checkKeys, depth, serializeFunctions, ignoreUndefined, path); + } + else if (typeof value === 'object' && + value[Symbol.for('@@mdb.bson.version')] !== BSON_MAJOR_VERSION) { + throw new BSONVersionError(); + } + else if (value._bsontype === 'ObjectId') { + index = serializeObjectId(buffer, key, value, index); + } + else if (type === 'object' && value._bsontype === 'Decimal128') { + index = serializeDecimal128(buffer, key, value, index); + } + else if (value._bsontype === 'Long' || value._bsontype === 'Timestamp') { + index = serializeLong(buffer, key, value, index); + } + else if (value._bsontype === 'Double') { + index = serializeDouble(buffer, key, value, index); + } + else if (value._bsontype === 'Code') { + index = serializeCode(buffer, key, value, index, checkKeys, depth, serializeFunctions, ignoreUndefined, path); + } + else if (typeof value === 'function' && serializeFunctions) { + index = serializeFunction(buffer, key, value, index); + } + else if (value._bsontype === 'Binary') { + index = serializeBinary(buffer, key, value, index); + } + else if (value._bsontype === 'BSONSymbol') { + index = serializeSymbol(buffer, key, value, index); + } + else if (value._bsontype === 'DBRef') { + index = serializeDBRef(buffer, key, value, index, depth, serializeFunctions, path); + } + else if (value._bsontype === 'BSONRegExp') { + index = serializeBSONRegExp(buffer, key, value, index); + } + else if (value._bsontype === 'Int32') { + index = serializeInt32(buffer, key, value, index); + } + else if (value._bsontype === 'MinKey' || value._bsontype === 'MaxKey') { + index = serializeMinMax(buffer, key, value, index); + } + else if (typeof value._bsontype !== 'undefined') { + throw new BSONError(`Unrecognized or invalid _bsontype: ${String(value._bsontype)}`); + } + } + } + path.delete(object); + buffer[index++] = 0x00; + const size = index - startingIndex; + buffer[startingIndex++] = size & 0xff; + buffer[startingIndex++] = (size >> 8) & 0xff; + buffer[startingIndex++] = (size >> 16) & 0xff; + buffer[startingIndex++] = (size >> 24) & 0xff; + return index; +} + +function isBSONType(value) { + return (value != null && + typeof value === 'object' && + '_bsontype' in value && + typeof value._bsontype === 'string'); +} +const keysToCodecs = { + $oid: ObjectId, + $binary: Binary, + $uuid: Binary, + $symbol: BSONSymbol, + $numberInt: Int32, + $numberDecimal: Decimal128, + $numberDouble: Double, + $numberLong: Long, + $minKey: MinKey, + $maxKey: MaxKey, + $regex: BSONRegExp, + $regularExpression: BSONRegExp, + $timestamp: Timestamp +}; +function deserializeValue(value, options = {}) { + if (typeof value === 'number') { + const in32BitRange = value <= BSON_INT32_MAX && value >= BSON_INT32_MIN; + const in64BitRange = value <= BSON_INT64_MAX && value >= BSON_INT64_MIN; + if (options.relaxed || options.legacy) { + return value; + } + if (Number.isInteger(value) && !Object.is(value, -0)) { + if (in32BitRange) { + return new Int32(value); + } + if (in64BitRange) { + if (options.useBigInt64) { + return BigInt(value); + } + return Long.fromNumber(value); + } + } + return new Double(value); + } + if (value == null || typeof value !== 'object') + return value; + if (value.$undefined) + return null; + const keys = Object.keys(value).filter(k => k.startsWith('$') && value[k] != null); + for (let i = 0; i < keys.length; i++) { + const c = keysToCodecs[keys[i]]; + if (c) + return c.fromExtendedJSON(value, options); + } + if (value.$date != null) { + const d = value.$date; + const date = new Date(); + if (options.legacy) { + if (typeof d === 'number') + date.setTime(d); + else if (typeof d === 'string') + date.setTime(Date.parse(d)); + else if (typeof d === 'bigint') + date.setTime(Number(d)); + else + throw new BSONRuntimeError(`Unrecognized type for EJSON date: ${typeof d}`); + } + else { + if (typeof d === 'string') + date.setTime(Date.parse(d)); + else if (Long.isLong(d)) + date.setTime(d.toNumber()); + else if (typeof d === 'number' && options.relaxed) + date.setTime(d); + else if (typeof d === 'bigint') + date.setTime(Number(d)); + else + throw new BSONRuntimeError(`Unrecognized type for EJSON date: ${typeof d}`); + } + return date; + } + if (value.$code != null) { + const copy = Object.assign({}, value); + if (value.$scope) { + copy.$scope = deserializeValue(value.$scope); + } + return Code.fromExtendedJSON(value); + } + if (isDBRefLike(value) || value.$dbPointer) { + const v = value.$ref ? value : value.$dbPointer; + if (v instanceof DBRef) + return v; + const dollarKeys = Object.keys(v).filter(k => k.startsWith('$')); + let valid = true; + dollarKeys.forEach(k => { + if (['$ref', '$id', '$db'].indexOf(k) === -1) + valid = false; + }); + if (valid) + return DBRef.fromExtendedJSON(v); + } + return value; +} +function serializeArray(array, options) { + return array.map((v, index) => { + options.seenObjects.push({ propertyName: `index ${index}`, obj: null }); + try { + return serializeValue(v, options); + } + finally { + options.seenObjects.pop(); + } + }); +} +function getISOString(date) { + const isoStr = date.toISOString(); + return date.getUTCMilliseconds() !== 0 ? isoStr : isoStr.slice(0, -5) + 'Z'; +} +function serializeValue(value, options) { + if (value instanceof Map || isMap(value)) { + const obj = Object.create(null); + for (const [k, v] of value) { + if (typeof k !== 'string') { + throw new BSONError('Can only serialize maps with string keys'); + } + obj[k] = v; + } + return serializeValue(obj, options); + } + if ((typeof value === 'object' || typeof value === 'function') && value !== null) { + const index = options.seenObjects.findIndex(entry => entry.obj === value); + if (index !== -1) { + const props = options.seenObjects.map(entry => entry.propertyName); + const leadingPart = props + .slice(0, index) + .map(prop => `${prop} -> `) + .join(''); + const alreadySeen = props[index]; + const circularPart = ' -> ' + + props + .slice(index + 1, props.length - 1) + .map(prop => `${prop} -> `) + .join(''); + const current = props[props.length - 1]; + const leadingSpace = ' '.repeat(leadingPart.length + alreadySeen.length / 2); + const dashes = '-'.repeat(circularPart.length + (alreadySeen.length + current.length) / 2 - 1); + throw new BSONError('Converting circular structure to EJSON:\n' + + ` ${leadingPart}${alreadySeen}${circularPart}${current}\n` + + ` ${leadingSpace}\\${dashes}/`); + } + options.seenObjects[options.seenObjects.length - 1].obj = value; + } + if (Array.isArray(value)) + return serializeArray(value, options); + if (value === undefined) + return null; + if (value instanceof Date || isDate(value)) { + const dateNum = value.getTime(), inRange = dateNum > -1 && dateNum < 253402318800000; + if (options.legacy) { + return options.relaxed && inRange + ? { $date: value.getTime() } + : { $date: getISOString(value) }; + } + return options.relaxed && inRange + ? { $date: getISOString(value) } + : { $date: { $numberLong: value.getTime().toString() } }; + } + if (typeof value === 'number' && (!options.relaxed || !isFinite(value))) { + if (Number.isInteger(value) && !Object.is(value, -0)) { + if (value >= BSON_INT32_MIN && value <= BSON_INT32_MAX) { + return { $numberInt: value.toString() }; + } + if (value >= BSON_INT64_MIN && value <= BSON_INT64_MAX) { + return { $numberLong: value.toString() }; + } + } + return { $numberDouble: Object.is(value, -0) ? '-0.0' : value.toString() }; + } + if (typeof value === 'bigint') { + if (!options.relaxed) { + return { $numberLong: BigInt.asIntN(64, value).toString() }; + } + return Number(BigInt.asIntN(64, value)); + } + if (value instanceof RegExp || isRegExp(value)) { + let flags = value.flags; + if (flags === undefined) { + const match = value.toString().match(/[gimuy]*$/); + if (match) { + flags = match[0]; + } + } + const rx = new BSONRegExp(value.source, flags); + return rx.toExtendedJSON(options); + } + if (value != null && typeof value === 'object') + return serializeDocument(value, options); + return value; +} +const BSON_TYPE_MAPPINGS = { + Binary: (o) => new Binary(o.value(), o.sub_type), + Code: (o) => new Code(o.code, o.scope), + DBRef: (o) => new DBRef(o.collection || o.namespace, o.oid, o.db, o.fields), + Decimal128: (o) => new Decimal128(o.bytes), + Double: (o) => new Double(o.value), + Int32: (o) => new Int32(o.value), + Long: (o) => Long.fromBits(o.low != null ? o.low : o.low_, o.low != null ? o.high : o.high_, o.low != null ? o.unsigned : o.unsigned_), + MaxKey: () => new MaxKey(), + MinKey: () => new MinKey(), + ObjectId: (o) => new ObjectId(o), + BSONRegExp: (o) => new BSONRegExp(o.pattern, o.options), + BSONSymbol: (o) => new BSONSymbol(o.value), + Timestamp: (o) => Timestamp.fromBits(o.low, o.high) +}; +function serializeDocument(doc, options) { + if (doc == null || typeof doc !== 'object') + throw new BSONError('not an object instance'); + const bsontype = doc._bsontype; + if (typeof bsontype === 'undefined') { + const _doc = {}; + for (const name of Object.keys(doc)) { + options.seenObjects.push({ propertyName: name, obj: null }); + try { + const value = serializeValue(doc[name], options); + if (name === '__proto__') { + Object.defineProperty(_doc, name, { + value, + writable: true, + enumerable: true, + configurable: true + }); + } + else { + _doc[name] = value; + } + } + finally { + options.seenObjects.pop(); + } + } + return _doc; + } + else if (doc != null && + typeof doc === 'object' && + typeof doc._bsontype === 'string' && + doc[Symbol.for('@@mdb.bson.version')] !== BSON_MAJOR_VERSION) { + throw new BSONVersionError(); + } + else if (isBSONType(doc)) { + let outDoc = doc; + if (typeof outDoc.toExtendedJSON !== 'function') { + const mapper = BSON_TYPE_MAPPINGS[doc._bsontype]; + if (!mapper) { + throw new BSONError('Unrecognized or invalid _bsontype: ' + doc._bsontype); + } + outDoc = mapper(outDoc); + } + if (bsontype === 'Code' && outDoc.scope) { + outDoc = new Code(outDoc.code, serializeValue(outDoc.scope, options)); + } + else if (bsontype === 'DBRef' && outDoc.oid) { + outDoc = new DBRef(serializeValue(outDoc.collection, options), serializeValue(outDoc.oid, options), serializeValue(outDoc.db, options), serializeValue(outDoc.fields, options)); + } + return outDoc.toExtendedJSON(options); + } + else { + throw new BSONError('_bsontype must be a string, but was: ' + typeof bsontype); + } +} +function parse(text, options) { + const ejsonOptions = { + useBigInt64: options?.useBigInt64 ?? false, + relaxed: options?.relaxed ?? true, + legacy: options?.legacy ?? false + }; + return JSON.parse(text, (key, value) => { + if (key.indexOf('\x00') !== -1) { + throw new BSONError(`BSON Document field names cannot contain null bytes, found: ${JSON.stringify(key)}`); + } + return deserializeValue(value, ejsonOptions); + }); +} +function stringify(value, replacer, space, options) { + if (space != null && typeof space === 'object') { + options = space; + space = 0; + } + if (replacer != null && typeof replacer === 'object' && !Array.isArray(replacer)) { + options = replacer; + replacer = undefined; + space = 0; + } + const serializeOptions = Object.assign({ relaxed: true, legacy: false }, options, { + seenObjects: [{ propertyName: '(root)', obj: null }] + }); + const doc = serializeValue(value, serializeOptions); + return JSON.stringify(doc, replacer, space); +} +function EJSONserialize(value, options) { + options = options || {}; + return JSON.parse(stringify(value, options)); +} +function EJSONdeserialize(ejson, options) { + options = options || {}; + return parse(JSON.stringify(ejson), options); +} +const EJSON = Object.create(null); +EJSON.parse = parse; +EJSON.stringify = stringify; +EJSON.serialize = EJSONserialize; +EJSON.deserialize = EJSONdeserialize; +Object.freeze(EJSON); + +const MAXSIZE = 1024 * 1024 * 17; +let buffer = ByteUtils.allocate(MAXSIZE); +function setInternalBufferSize(size) { + if (buffer.length < size) { + buffer = ByteUtils.allocate(size); + } +} +function serialize(object, options = {}) { + const checkKeys = typeof options.checkKeys === 'boolean' ? options.checkKeys : false; + const serializeFunctions = typeof options.serializeFunctions === 'boolean' ? options.serializeFunctions : false; + const ignoreUndefined = typeof options.ignoreUndefined === 'boolean' ? options.ignoreUndefined : true; + const minInternalBufferSize = typeof options.minInternalBufferSize === 'number' ? options.minInternalBufferSize : MAXSIZE; + if (buffer.length < minInternalBufferSize) { + buffer = ByteUtils.allocate(minInternalBufferSize); + } + const serializationIndex = serializeInto(buffer, object, checkKeys, 0, 0, serializeFunctions, ignoreUndefined, null); + const finishedBuffer = ByteUtils.allocate(serializationIndex); + finishedBuffer.set(buffer.subarray(0, serializationIndex), 0); + return finishedBuffer; +} +function serializeWithBufferAndIndex(object, finalBuffer, options = {}) { + const checkKeys = typeof options.checkKeys === 'boolean' ? options.checkKeys : false; + const serializeFunctions = typeof options.serializeFunctions === 'boolean' ? options.serializeFunctions : false; + const ignoreUndefined = typeof options.ignoreUndefined === 'boolean' ? options.ignoreUndefined : true; + const startIndex = typeof options.index === 'number' ? options.index : 0; + const serializationIndex = serializeInto(buffer, object, checkKeys, 0, 0, serializeFunctions, ignoreUndefined, null); + finalBuffer.set(buffer.subarray(0, serializationIndex), startIndex); + return startIndex + serializationIndex - 1; +} +function deserialize(buffer, options = {}) { + return internalDeserialize(ByteUtils.toLocalBufferType(buffer), options); +} +function calculateObjectSize(object, options = {}) { + options = options || {}; + const serializeFunctions = typeof options.serializeFunctions === 'boolean' ? options.serializeFunctions : false; + const ignoreUndefined = typeof options.ignoreUndefined === 'boolean' ? options.ignoreUndefined : true; + return internalCalculateObjectSize(object, serializeFunctions, ignoreUndefined); +} +function deserializeStream(data, startIndex, numberOfDocuments, documents, docStartIndex, options) { + const internalOptions = Object.assign({ allowObjectSmallerThanBufferSize: true, index: 0 }, options); + const bufferData = ByteUtils.toLocalBufferType(data); + let index = startIndex; + for (let i = 0; i < numberOfDocuments; i++) { + const size = bufferData[index] | + (bufferData[index + 1] << 8) | + (bufferData[index + 2] << 16) | + (bufferData[index + 3] << 24); + internalOptions.index = index; + documents[docStartIndex + i] = internalDeserialize(bufferData, internalOptions); + index = index + size; + } + return index; +} + +var bson = /*#__PURE__*/Object.freeze({ + __proto__: null, + BSONError: BSONError, + BSONRegExp: BSONRegExp, + BSONRuntimeError: BSONRuntimeError, + BSONSymbol: BSONSymbol, + BSONType: BSONType, + BSONValue: BSONValue, + BSONVersionError: BSONVersionError, + Binary: Binary, + Code: Code, + DBRef: DBRef, + Decimal128: Decimal128, + Double: Double, + EJSON: EJSON, + Int32: Int32, + Long: Long, + MaxKey: MaxKey, + MinKey: MinKey, + ObjectId: ObjectId, + Timestamp: Timestamp, + UUID: UUID, + calculateObjectSize: calculateObjectSize, + deserialize: deserialize, + deserializeStream: deserializeStream, + serialize: serialize, + serializeWithBufferAndIndex: serializeWithBufferAndIndex, + setInternalBufferSize: setInternalBufferSize +}); + +exports.BSON = bson; +exports.BSONError = BSONError; +exports.BSONRegExp = BSONRegExp; +exports.BSONRuntimeError = BSONRuntimeError; +exports.BSONSymbol = BSONSymbol; +exports.BSONType = BSONType; +exports.BSONValue = BSONValue; +exports.BSONVersionError = BSONVersionError; +exports.Binary = Binary; +exports.Code = Code; +exports.DBRef = DBRef; +exports.Decimal128 = Decimal128; +exports.Double = Double; +exports.EJSON = EJSON; +exports.Int32 = Int32; +exports.Long = Long; +exports.MaxKey = MaxKey; +exports.MinKey = MinKey; +exports.ObjectId = ObjectId; +exports.Timestamp = Timestamp; +exports.UUID = UUID; +exports.calculateObjectSize = calculateObjectSize; +exports.deserialize = deserialize; +exports.deserializeStream = deserializeStream; +exports.serialize = serialize; +exports.serializeWithBufferAndIndex = serializeWithBufferAndIndex; +exports.setInternalBufferSize = setInternalBufferSize; +//# sourceMappingURL=bson.cjs.map diff --git a/Url-Shortner/node_modules/bson/lib/bson.cjs.map b/Url-Shortner/node_modules/bson/lib/bson.cjs.map new file mode 100644 index 0000000..c3cb792 --- /dev/null +++ b/Url-Shortner/node_modules/bson/lib/bson.cjs.map @@ -0,0 +1 @@ +{"version":3,"file":"bson.cjs","sources":["../src/parser/utils.ts","../src/constants.ts","../src/error.ts","../src/utils/node_byte_utils.ts","../src/utils/web_byte_utils.ts","../src/utils/byte_utils.ts","../src/bson_value.ts","../src/binary.ts","../src/code.ts","../src/db_ref.ts","../src/long.ts","../src/decimal128.ts","../src/double.ts","../src/int_32.ts","../src/max_key.ts","../src/min_key.ts","../src/objectid.ts","../src/parser/calculate_size.ts","../src/regexp.ts","../src/symbol.ts","../src/timestamp.ts","../src/validate_utf8.ts","../src/parser/deserializer.ts","../src/parser/serializer.ts","../src/extended_json.ts","../src/bson.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"names":["constants.JS_INT_MIN","constants.JS_INT_MAX","constants.BSON_INT32_MIN","constants.BSON_INT32_MAX","constants.BSON_MAJOR_VERSION","constants.BSON_DATA_STRING","constants.BSON_DATA_OID","constants.BSON_DATA_INT","constants.BSON_DATA_NUMBER","constants.BSON_DATA_DATE","constants.BSON_DATA_BOOLEAN","constants.BSON_DATA_OBJECT","constants.BSON_DATA_ARRAY","constants.BSON_DATA_UNDEFINED","constants.BSON_DATA_NULL","constants.BSON_DATA_LONG","constants.BSON_DATA_DECIMAL128","constants.BSON_DATA_BINARY","constants.BSON_BINARY_SUBTYPE_UUID_NEW","constants.BSON_DATA_REGEXP","constants.BSON_DATA_SYMBOL","constants.BSON_DATA_TIMESTAMP","constants.BSON_DATA_MIN_KEY","constants.BSON_DATA_MAX_KEY","constants.BSON_DATA_CODE","constants.BSON_DATA_CODE_W_SCOPE","constants.BSON_DATA_DBPOINTER","constants.BSON_BINARY_SUBTYPE_DEFAULT"],"mappings":"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C,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAA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"} \ No newline at end of file diff --git a/Url-Shortner/node_modules/bson/lib/bson.mjs b/Url-Shortner/node_modules/bson/lib/bson.mjs new file mode 100644 index 0000000..f4d4a32 --- /dev/null +++ b/Url-Shortner/node_modules/bson/lib/bson.mjs @@ -0,0 +1,4116 @@ +function isAnyArrayBuffer(value) { + return ['[object ArrayBuffer]', '[object SharedArrayBuffer]'].includes(Object.prototype.toString.call(value)); +} +function isUint8Array(value) { + return Object.prototype.toString.call(value) === '[object Uint8Array]'; +} +function isRegExp(d) { + return Object.prototype.toString.call(d) === '[object RegExp]'; +} +function isMap(d) { + return Object.prototype.toString.call(d) === '[object Map]'; +} +function isDate(d) { + return Object.prototype.toString.call(d) === '[object Date]'; +} + +const BSON_MAJOR_VERSION = 5; +const BSON_INT32_MAX = 0x7fffffff; +const BSON_INT32_MIN = -0x80000000; +const BSON_INT64_MAX = Math.pow(2, 63) - 1; +const BSON_INT64_MIN = -Math.pow(2, 63); +const JS_INT_MAX = Math.pow(2, 53); +const JS_INT_MIN = -Math.pow(2, 53); +const BSON_DATA_NUMBER = 1; +const BSON_DATA_STRING = 2; +const BSON_DATA_OBJECT = 3; +const BSON_DATA_ARRAY = 4; +const BSON_DATA_BINARY = 5; +const BSON_DATA_UNDEFINED = 6; +const BSON_DATA_OID = 7; +const BSON_DATA_BOOLEAN = 8; +const BSON_DATA_DATE = 9; +const BSON_DATA_NULL = 10; +const BSON_DATA_REGEXP = 11; +const BSON_DATA_DBPOINTER = 12; +const BSON_DATA_CODE = 13; +const BSON_DATA_SYMBOL = 14; +const BSON_DATA_CODE_W_SCOPE = 15; +const BSON_DATA_INT = 16; +const BSON_DATA_TIMESTAMP = 17; +const BSON_DATA_LONG = 18; +const BSON_DATA_DECIMAL128 = 19; +const BSON_DATA_MIN_KEY = 0xff; +const BSON_DATA_MAX_KEY = 0x7f; +const BSON_BINARY_SUBTYPE_DEFAULT = 0; +const BSON_BINARY_SUBTYPE_UUID_NEW = 4; +const BSONType = Object.freeze({ + double: 1, + string: 2, + object: 3, + array: 4, + binData: 5, + undefined: 6, + objectId: 7, + bool: 8, + date: 9, + null: 10, + regex: 11, + dbPointer: 12, + javascript: 13, + symbol: 14, + javascriptWithScope: 15, + int: 16, + timestamp: 17, + long: 18, + decimal: 19, + minKey: -1, + maxKey: 127 +}); + +class BSONError extends Error { + get bsonError() { + return true; + } + get name() { + return 'BSONError'; + } + constructor(message) { + super(message); + } + static isBSONError(value) { + return (value != null && + typeof value === 'object' && + 'bsonError' in value && + value.bsonError === true && + 'name' in value && + 'message' in value && + 'stack' in value); + } +} +class BSONVersionError extends BSONError { + get name() { + return 'BSONVersionError'; + } + constructor() { + super(`Unsupported BSON version, bson types must be from bson ${BSON_MAJOR_VERSION}.0 or later`); + } +} +class BSONRuntimeError extends BSONError { + get name() { + return 'BSONRuntimeError'; + } + constructor(message) { + super(message); + } +} + +function nodejsMathRandomBytes(byteLength) { + return nodeJsByteUtils.fromNumberArray(Array.from({ length: byteLength }, () => Math.floor(Math.random() * 256))); +} +const nodejsRandomBytes = await (async () => { + try { + return (await import('crypto')).randomBytes; + } + catch { + return nodejsMathRandomBytes; + } +})(); +const nodeJsByteUtils = { + toLocalBufferType(potentialBuffer) { + if (Buffer.isBuffer(potentialBuffer)) { + return potentialBuffer; + } + if (ArrayBuffer.isView(potentialBuffer)) { + return Buffer.from(potentialBuffer.buffer, potentialBuffer.byteOffset, potentialBuffer.byteLength); + } + const stringTag = potentialBuffer?.[Symbol.toStringTag] ?? Object.prototype.toString.call(potentialBuffer); + if (stringTag === 'ArrayBuffer' || + stringTag === 'SharedArrayBuffer' || + stringTag === '[object ArrayBuffer]' || + stringTag === '[object SharedArrayBuffer]') { + return Buffer.from(potentialBuffer); + } + throw new BSONError(`Cannot create Buffer from ${String(potentialBuffer)}`); + }, + allocate(size) { + return Buffer.alloc(size); + }, + equals(a, b) { + return nodeJsByteUtils.toLocalBufferType(a).equals(b); + }, + fromNumberArray(array) { + return Buffer.from(array); + }, + fromBase64(base64) { + return Buffer.from(base64, 'base64'); + }, + toBase64(buffer) { + return nodeJsByteUtils.toLocalBufferType(buffer).toString('base64'); + }, + fromISO88591(codePoints) { + return Buffer.from(codePoints, 'binary'); + }, + toISO88591(buffer) { + return nodeJsByteUtils.toLocalBufferType(buffer).toString('binary'); + }, + fromHex(hex) { + return Buffer.from(hex, 'hex'); + }, + toHex(buffer) { + return nodeJsByteUtils.toLocalBufferType(buffer).toString('hex'); + }, + fromUTF8(text) { + return Buffer.from(text, 'utf8'); + }, + toUTF8(buffer, start, end) { + return nodeJsByteUtils.toLocalBufferType(buffer).toString('utf8', start, end); + }, + utf8ByteLength(input) { + return Buffer.byteLength(input, 'utf8'); + }, + encodeUTF8Into(buffer, source, byteOffset) { + return nodeJsByteUtils.toLocalBufferType(buffer).write(source, byteOffset, undefined, 'utf8'); + }, + randomBytes: nodejsRandomBytes +}; + +function isReactNative() { + const { navigator } = globalThis; + return typeof navigator === 'object' && navigator.product === 'ReactNative'; +} +function webMathRandomBytes(byteLength) { + if (byteLength < 0) { + throw new RangeError(`The argument 'byteLength' is invalid. Received ${byteLength}`); + } + return webByteUtils.fromNumberArray(Array.from({ length: byteLength }, () => Math.floor(Math.random() * 256))); +} +const webRandomBytes = (() => { + const { crypto } = globalThis; + if (crypto != null && typeof crypto.getRandomValues === 'function') { + return (byteLength) => { + return crypto.getRandomValues(webByteUtils.allocate(byteLength)); + }; + } + else { + if (isReactNative()) { + const { console } = globalThis; + console?.warn?.('BSON: For React Native please polyfill crypto.getRandomValues, e.g. using: https://www.npmjs.com/package/react-native-get-random-values.'); + } + return webMathRandomBytes; + } +})(); +const HEX_DIGIT = /(\d|[a-f])/i; +const webByteUtils = { + toLocalBufferType(potentialUint8array) { + const stringTag = potentialUint8array?.[Symbol.toStringTag] ?? + Object.prototype.toString.call(potentialUint8array); + if (stringTag === 'Uint8Array') { + return potentialUint8array; + } + if (ArrayBuffer.isView(potentialUint8array)) { + return new Uint8Array(potentialUint8array.buffer.slice(potentialUint8array.byteOffset, potentialUint8array.byteOffset + potentialUint8array.byteLength)); + } + if (stringTag === 'ArrayBuffer' || + stringTag === 'SharedArrayBuffer' || + stringTag === '[object ArrayBuffer]' || + stringTag === '[object SharedArrayBuffer]') { + return new Uint8Array(potentialUint8array); + } + throw new BSONError(`Cannot make a Uint8Array from ${String(potentialUint8array)}`); + }, + allocate(size) { + if (typeof size !== 'number') { + throw new TypeError(`The "size" argument must be of type number. Received ${String(size)}`); + } + return new Uint8Array(size); + }, + equals(a, b) { + if (a.byteLength !== b.byteLength) { + return false; + } + for (let i = 0; i < a.byteLength; i++) { + if (a[i] !== b[i]) { + return false; + } + } + return true; + }, + fromNumberArray(array) { + return Uint8Array.from(array); + }, + fromBase64(base64) { + return Uint8Array.from(atob(base64), c => c.charCodeAt(0)); + }, + toBase64(uint8array) { + return btoa(webByteUtils.toISO88591(uint8array)); + }, + fromISO88591(codePoints) { + return Uint8Array.from(codePoints, c => c.charCodeAt(0) & 0xff); + }, + toISO88591(uint8array) { + return Array.from(Uint16Array.from(uint8array), b => String.fromCharCode(b)).join(''); + }, + fromHex(hex) { + const evenLengthHex = hex.length % 2 === 0 ? hex : hex.slice(0, hex.length - 1); + const buffer = []; + for (let i = 0; i < evenLengthHex.length; i += 2) { + const firstDigit = evenLengthHex[i]; + const secondDigit = evenLengthHex[i + 1]; + if (!HEX_DIGIT.test(firstDigit)) { + break; + } + if (!HEX_DIGIT.test(secondDigit)) { + break; + } + const hexDigit = Number.parseInt(`${firstDigit}${secondDigit}`, 16); + buffer.push(hexDigit); + } + return Uint8Array.from(buffer); + }, + toHex(uint8array) { + return Array.from(uint8array, byte => byte.toString(16).padStart(2, '0')).join(''); + }, + fromUTF8(text) { + return new TextEncoder().encode(text); + }, + toUTF8(uint8array, start, end) { + return new TextDecoder('utf8', { fatal: false }).decode(uint8array.slice(start, end)); + }, + utf8ByteLength(input) { + return webByteUtils.fromUTF8(input).byteLength; + }, + encodeUTF8Into(buffer, source, byteOffset) { + const bytes = webByteUtils.fromUTF8(source); + buffer.set(bytes, byteOffset); + return bytes.byteLength; + }, + randomBytes: webRandomBytes +}; + +const hasGlobalBuffer = typeof Buffer === 'function' && Buffer.prototype?._isBuffer !== true; +const ByteUtils = hasGlobalBuffer ? nodeJsByteUtils : webByteUtils; +class BSONDataView extends DataView { + static fromUint8Array(input) { + return new DataView(input.buffer, input.byteOffset, input.byteLength); + } +} + +class BSONValue { + get [Symbol.for('@@mdb.bson.version')]() { + return BSON_MAJOR_VERSION; + } +} + +class Binary extends BSONValue { + get _bsontype() { + return 'Binary'; + } + constructor(buffer, subType) { + super(); + if (!(buffer == null) && + !(typeof buffer === 'string') && + !ArrayBuffer.isView(buffer) && + !(buffer instanceof ArrayBuffer) && + !Array.isArray(buffer)) { + throw new BSONError('Binary can only be constructed from string, Buffer, TypedArray, or Array'); + } + this.sub_type = subType ?? Binary.BSON_BINARY_SUBTYPE_DEFAULT; + if (buffer == null) { + this.buffer = ByteUtils.allocate(Binary.BUFFER_SIZE); + this.position = 0; + } + else { + if (typeof buffer === 'string') { + this.buffer = ByteUtils.fromISO88591(buffer); + } + else if (Array.isArray(buffer)) { + this.buffer = ByteUtils.fromNumberArray(buffer); + } + else { + this.buffer = ByteUtils.toLocalBufferType(buffer); + } + this.position = this.buffer.byteLength; + } + } + put(byteValue) { + if (typeof byteValue === 'string' && byteValue.length !== 1) { + throw new BSONError('only accepts single character String'); + } + else if (typeof byteValue !== 'number' && byteValue.length !== 1) + throw new BSONError('only accepts single character Uint8Array or Array'); + let decodedByte; + if (typeof byteValue === 'string') { + decodedByte = byteValue.charCodeAt(0); + } + else if (typeof byteValue === 'number') { + decodedByte = byteValue; + } + else { + decodedByte = byteValue[0]; + } + if (decodedByte < 0 || decodedByte > 255) { + throw new BSONError('only accepts number in a valid unsigned byte range 0-255'); + } + if (this.buffer.byteLength > this.position) { + this.buffer[this.position++] = decodedByte; + } + else { + const newSpace = ByteUtils.allocate(Binary.BUFFER_SIZE + this.buffer.length); + newSpace.set(this.buffer, 0); + this.buffer = newSpace; + this.buffer[this.position++] = decodedByte; + } + } + write(sequence, offset) { + offset = typeof offset === 'number' ? offset : this.position; + if (this.buffer.byteLength < offset + sequence.length) { + const newSpace = ByteUtils.allocate(this.buffer.byteLength + sequence.length); + newSpace.set(this.buffer, 0); + this.buffer = newSpace; + } + if (ArrayBuffer.isView(sequence)) { + this.buffer.set(ByteUtils.toLocalBufferType(sequence), offset); + this.position = + offset + sequence.byteLength > this.position ? offset + sequence.length : this.position; + } + else if (typeof sequence === 'string') { + const bytes = ByteUtils.fromISO88591(sequence); + this.buffer.set(bytes, offset); + this.position = + offset + sequence.length > this.position ? offset + sequence.length : this.position; + } + } + read(position, length) { + length = length && length > 0 ? length : this.position; + return this.buffer.slice(position, position + length); + } + value(asRaw) { + asRaw = !!asRaw; + if (asRaw && this.buffer.length === this.position) { + return this.buffer; + } + if (asRaw) { + return this.buffer.slice(0, this.position); + } + return ByteUtils.toISO88591(this.buffer.subarray(0, this.position)); + } + length() { + return this.position; + } + toJSON() { + return ByteUtils.toBase64(this.buffer); + } + toString(encoding) { + if (encoding === 'hex') + return ByteUtils.toHex(this.buffer); + if (encoding === 'base64') + return ByteUtils.toBase64(this.buffer); + if (encoding === 'utf8' || encoding === 'utf-8') + return ByteUtils.toUTF8(this.buffer, 0, this.buffer.byteLength); + return ByteUtils.toUTF8(this.buffer, 0, this.buffer.byteLength); + } + toExtendedJSON(options) { + options = options || {}; + const base64String = ByteUtils.toBase64(this.buffer); + const subType = Number(this.sub_type).toString(16); + if (options.legacy) { + return { + $binary: base64String, + $type: subType.length === 1 ? '0' + subType : subType + }; + } + return { + $binary: { + base64: base64String, + subType: subType.length === 1 ? '0' + subType : subType + } + }; + } + toUUID() { + if (this.sub_type === Binary.SUBTYPE_UUID) { + return new UUID(this.buffer.slice(0, this.position)); + } + throw new BSONError(`Binary sub_type "${this.sub_type}" is not supported for converting to UUID. Only "${Binary.SUBTYPE_UUID}" is currently supported.`); + } + static createFromHexString(hex, subType) { + return new Binary(ByteUtils.fromHex(hex), subType); + } + static createFromBase64(base64, subType) { + return new Binary(ByteUtils.fromBase64(base64), subType); + } + static fromExtendedJSON(doc, options) { + options = options || {}; + let data; + let type; + if ('$binary' in doc) { + if (options.legacy && typeof doc.$binary === 'string' && '$type' in doc) { + type = doc.$type ? parseInt(doc.$type, 16) : 0; + data = ByteUtils.fromBase64(doc.$binary); + } + else { + if (typeof doc.$binary !== 'string') { + type = doc.$binary.subType ? parseInt(doc.$binary.subType, 16) : 0; + data = ByteUtils.fromBase64(doc.$binary.base64); + } + } + } + else if ('$uuid' in doc) { + type = 4; + data = UUID.bytesFromString(doc.$uuid); + } + if (!data) { + throw new BSONError(`Unexpected Binary Extended JSON format ${JSON.stringify(doc)}`); + } + return type === BSON_BINARY_SUBTYPE_UUID_NEW ? new UUID(data) : new Binary(data, type); + } + [Symbol.for('nodejs.util.inspect.custom')]() { + return this.inspect(); + } + inspect() { + const base64 = ByteUtils.toBase64(this.buffer.subarray(0, this.position)); + return `Binary.createFromBase64("${base64}", ${this.sub_type})`; + } +} +Binary.BSON_BINARY_SUBTYPE_DEFAULT = 0; +Binary.BUFFER_SIZE = 256; +Binary.SUBTYPE_DEFAULT = 0; +Binary.SUBTYPE_FUNCTION = 1; +Binary.SUBTYPE_BYTE_ARRAY = 2; +Binary.SUBTYPE_UUID_OLD = 3; +Binary.SUBTYPE_UUID = 4; +Binary.SUBTYPE_MD5 = 5; +Binary.SUBTYPE_ENCRYPTED = 6; +Binary.SUBTYPE_COLUMN = 7; +Binary.SUBTYPE_USER_DEFINED = 128; +const UUID_BYTE_LENGTH = 16; +const UUID_WITHOUT_DASHES = /^[0-9A-F]{32}$/i; +const UUID_WITH_DASHES = /^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i; +class UUID extends Binary { + constructor(input) { + let bytes; + if (input == null) { + bytes = UUID.generate(); + } + else if (input instanceof UUID) { + bytes = ByteUtils.toLocalBufferType(new Uint8Array(input.buffer)); + } + else if (ArrayBuffer.isView(input) && input.byteLength === UUID_BYTE_LENGTH) { + bytes = ByteUtils.toLocalBufferType(input); + } + else if (typeof input === 'string') { + bytes = UUID.bytesFromString(input); + } + else { + throw new BSONError('Argument passed in UUID constructor must be a UUID, a 16 byte Buffer or a 32/36 character hex string (dashes excluded/included, format: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx).'); + } + super(bytes, BSON_BINARY_SUBTYPE_UUID_NEW); + } + get id() { + return this.buffer; + } + set id(value) { + this.buffer = value; + } + toHexString(includeDashes = true) { + if (includeDashes) { + return [ + ByteUtils.toHex(this.buffer.subarray(0, 4)), + ByteUtils.toHex(this.buffer.subarray(4, 6)), + ByteUtils.toHex(this.buffer.subarray(6, 8)), + ByteUtils.toHex(this.buffer.subarray(8, 10)), + ByteUtils.toHex(this.buffer.subarray(10, 16)) + ].join('-'); + } + return ByteUtils.toHex(this.buffer); + } + toString(encoding) { + if (encoding === 'hex') + return ByteUtils.toHex(this.id); + if (encoding === 'base64') + return ByteUtils.toBase64(this.id); + return this.toHexString(); + } + toJSON() { + return this.toHexString(); + } + equals(otherId) { + if (!otherId) { + return false; + } + if (otherId instanceof UUID) { + return ByteUtils.equals(otherId.id, this.id); + } + try { + return ByteUtils.equals(new UUID(otherId).id, this.id); + } + catch { + return false; + } + } + toBinary() { + return new Binary(this.id, Binary.SUBTYPE_UUID); + } + static generate() { + const bytes = ByteUtils.randomBytes(UUID_BYTE_LENGTH); + bytes[6] = (bytes[6] & 0x0f) | 0x40; + bytes[8] = (bytes[8] & 0x3f) | 0x80; + return bytes; + } + static isValid(input) { + if (!input) { + return false; + } + if (typeof input === 'string') { + return UUID.isValidUUIDString(input); + } + if (isUint8Array(input)) { + return input.byteLength === UUID_BYTE_LENGTH; + } + return (input._bsontype === 'Binary' && + input.sub_type === this.SUBTYPE_UUID && + input.buffer.byteLength === 16); + } + static createFromHexString(hexString) { + const buffer = UUID.bytesFromString(hexString); + return new UUID(buffer); + } + static createFromBase64(base64) { + return new UUID(ByteUtils.fromBase64(base64)); + } + static bytesFromString(representation) { + if (!UUID.isValidUUIDString(representation)) { + throw new BSONError('UUID string representation must be 32 hex digits or canonical hyphenated representation'); + } + return ByteUtils.fromHex(representation.replace(/-/g, '')); + } + static isValidUUIDString(representation) { + return UUID_WITHOUT_DASHES.test(representation) || UUID_WITH_DASHES.test(representation); + } + [Symbol.for('nodejs.util.inspect.custom')]() { + return this.inspect(); + } + inspect() { + return `new UUID("${this.toHexString()}")`; + } +} +UUID.cacheHexString = false; + +class Code extends BSONValue { + get _bsontype() { + return 'Code'; + } + constructor(code, scope) { + super(); + this.code = code.toString(); + this.scope = scope ?? null; + } + toJSON() { + if (this.scope != null) { + return { code: this.code, scope: this.scope }; + } + return { code: this.code }; + } + toExtendedJSON() { + if (this.scope) { + return { $code: this.code, $scope: this.scope }; + } + return { $code: this.code }; + } + static fromExtendedJSON(doc) { + return new Code(doc.$code, doc.$scope); + } + [Symbol.for('nodejs.util.inspect.custom')]() { + return this.inspect(); + } + inspect() { + const codeJson = this.toJSON(); + return `new Code("${String(codeJson.code)}"${codeJson.scope != null ? `, ${JSON.stringify(codeJson.scope)}` : ''})`; + } +} + +function isDBRefLike(value) { + return (value != null && + typeof value === 'object' && + '$id' in value && + value.$id != null && + '$ref' in value && + typeof value.$ref === 'string' && + (!('$db' in value) || ('$db' in value && typeof value.$db === 'string'))); +} +class DBRef extends BSONValue { + get _bsontype() { + return 'DBRef'; + } + constructor(collection, oid, db, fields) { + super(); + const parts = collection.split('.'); + if (parts.length === 2) { + db = parts.shift(); + collection = parts.shift(); + } + this.collection = collection; + this.oid = oid; + this.db = db; + this.fields = fields || {}; + } + get namespace() { + return this.collection; + } + set namespace(value) { + this.collection = value; + } + toJSON() { + const o = Object.assign({ + $ref: this.collection, + $id: this.oid + }, this.fields); + if (this.db != null) + o.$db = this.db; + return o; + } + toExtendedJSON(options) { + options = options || {}; + let o = { + $ref: this.collection, + $id: this.oid + }; + if (options.legacy) { + return o; + } + if (this.db) + o.$db = this.db; + o = Object.assign(o, this.fields); + return o; + } + static fromExtendedJSON(doc) { + const copy = Object.assign({}, doc); + delete copy.$ref; + delete copy.$id; + delete copy.$db; + return new DBRef(doc.$ref, doc.$id, doc.$db, copy); + } + [Symbol.for('nodejs.util.inspect.custom')]() { + return this.inspect(); + } + inspect() { + const oid = this.oid === undefined || this.oid.toString === undefined ? this.oid : this.oid.toString(); + return `new DBRef("${this.namespace}", new ObjectId("${String(oid)}")${this.db ? `, "${this.db}"` : ''})`; + } +} + +let wasm = undefined; +try { + wasm = new WebAssembly.Instance(new WebAssembly.Module(new Uint8Array([0, 97, 115, 109, 1, 0, 0, 0, 1, 13, 2, 96, 0, 1, 127, 96, 4, 127, 127, 127, 127, 1, 127, 3, 7, 6, 0, 1, 1, 1, 1, 1, 6, 6, 1, 127, 1, 65, 0, 11, 7, 50, 6, 3, 109, 117, 108, 0, 1, 5, 100, 105, 118, 95, 115, 0, 2, 5, 100, 105, 118, 95, 117, 0, 3, 5, 114, 101, 109, 95, 115, 0, 4, 5, 114, 101, 109, 95, 117, 0, 5, 8, 103, 101, 116, 95, 104, 105, 103, 104, 0, 0, 10, 191, 1, 6, 4, 0, 35, 0, 11, 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, 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, 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, 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, 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 { +} +const TWO_PWR_16_DBL = 1 << 16; +const TWO_PWR_24_DBL = 1 << 24; +const TWO_PWR_32_DBL = TWO_PWR_16_DBL * TWO_PWR_16_DBL; +const TWO_PWR_64_DBL = TWO_PWR_32_DBL * TWO_PWR_32_DBL; +const TWO_PWR_63_DBL = TWO_PWR_64_DBL / 2; +const INT_CACHE = {}; +const UINT_CACHE = {}; +const MAX_INT64_STRING_LENGTH = 20; +const DECIMAL_REG_EX = /^(\+?0|(\+|-)?[1-9][0-9]*)$/; +class Long extends BSONValue { + get _bsontype() { + return 'Long'; + } + get __isLong__() { + return true; + } + constructor(low = 0, high, unsigned) { + super(); + if (typeof low === 'bigint') { + Object.assign(this, Long.fromBigInt(low, !!high)); + } + else if (typeof low === 'string') { + Object.assign(this, Long.fromString(low, !!high)); + } + else { + this.low = low | 0; + this.high = high | 0; + this.unsigned = !!unsigned; + } + } + static fromBits(lowBits, highBits, unsigned) { + return new Long(lowBits, highBits, unsigned); + } + static fromInt(value, unsigned) { + let obj, cachedObj, cache; + if (unsigned) { + value >>>= 0; + if ((cache = 0 <= value && value < 256)) { + cachedObj = UINT_CACHE[value]; + if (cachedObj) + return cachedObj; + } + obj = Long.fromBits(value, (value | 0) < 0 ? -1 : 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 = Long.fromBits(value, value < 0 ? -1 : 0, false); + if (cache) + INT_CACHE[value] = obj; + return obj; + } + } + static fromNumber(value, unsigned) { + if (isNaN(value)) + return unsigned ? Long.UZERO : Long.ZERO; + if (unsigned) { + if (value < 0) + return Long.UZERO; + if (value >= TWO_PWR_64_DBL) + return Long.MAX_UNSIGNED_VALUE; + } + else { + if (value <= -TWO_PWR_63_DBL) + return Long.MIN_VALUE; + if (value + 1 >= TWO_PWR_63_DBL) + return Long.MAX_VALUE; + } + if (value < 0) + return Long.fromNumber(-value, unsigned).neg(); + return Long.fromBits(value % TWO_PWR_32_DBL | 0, (value / TWO_PWR_32_DBL) | 0, unsigned); + } + static fromBigInt(value, unsigned) { + return Long.fromString(value.toString(), unsigned); + } + static fromString(str, unsigned, radix) { + if (str.length === 0) + throw new BSONError('empty string'); + if (str === 'NaN' || str === 'Infinity' || str === '+Infinity' || str === '-Infinity') + return Long.ZERO; + if (typeof unsigned === 'number') { + (radix = unsigned), (unsigned = false); + } + else { + unsigned = !!unsigned; + } + radix = radix || 10; + if (radix < 2 || 36 < radix) + throw new BSONError('radix'); + let p; + if ((p = str.indexOf('-')) > 0) + throw new BSONError('interior hyphen'); + else if (p === 0) { + return Long.fromString(str.substring(1), unsigned, radix).neg(); + } + const radixToPower = Long.fromNumber(Math.pow(radix, 8)); + let result = Long.ZERO; + for (let i = 0; i < str.length; i += 8) { + const size = Math.min(8, str.length - i), value = parseInt(str.substring(i, i + size), radix); + if (size < 8) { + const power = Long.fromNumber(Math.pow(radix, size)); + result = result.mul(power).add(Long.fromNumber(value)); + } + else { + result = result.mul(radixToPower); + result = result.add(Long.fromNumber(value)); + } + } + result.unsigned = unsigned; + return result; + } + static fromBytes(bytes, unsigned, le) { + return le ? Long.fromBytesLE(bytes, unsigned) : Long.fromBytesBE(bytes, unsigned); + } + static 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); + } + static 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); + } + static isLong(value) { + return (value != null && + typeof value === 'object' && + '__isLong__' in value && + value.__isLong__ === true); + } + static fromValue(val, unsigned) { + if (typeof val === 'number') + return Long.fromNumber(val, unsigned); + if (typeof val === 'string') + return Long.fromString(val, unsigned); + return Long.fromBits(val.low, val.high, typeof unsigned === 'boolean' ? unsigned : val.unsigned); + } + add(addend) { + if (!Long.isLong(addend)) + addend = Long.fromValue(addend); + const a48 = this.high >>> 16; + const a32 = this.high & 0xffff; + const a16 = this.low >>> 16; + const a00 = this.low & 0xffff; + const b48 = addend.high >>> 16; + const b32 = addend.high & 0xffff; + const b16 = addend.low >>> 16; + const b00 = addend.low & 0xffff; + let 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 Long.fromBits((c16 << 16) | c00, (c48 << 16) | c32, this.unsigned); + } + and(other) { + if (!Long.isLong(other)) + other = Long.fromValue(other); + return Long.fromBits(this.low & other.low, this.high & other.high, this.unsigned); + } + compare(other) { + if (!Long.isLong(other)) + other = Long.fromValue(other); + if (this.eq(other)) + return 0; + const thisNeg = this.isNegative(), otherNeg = other.isNegative(); + if (thisNeg && !otherNeg) + return -1; + if (!thisNeg && otherNeg) + return 1; + if (!this.unsigned) + return this.sub(other).isNegative() ? -1 : 1; + return other.high >>> 0 > this.high >>> 0 || + (other.high === this.high && other.low >>> 0 > this.low >>> 0) + ? -1 + : 1; + } + comp(other) { + return this.compare(other); + } + divide(divisor) { + if (!Long.isLong(divisor)) + divisor = Long.fromValue(divisor); + if (divisor.isZero()) + throw new BSONError('division by zero'); + if (wasm) { + if (!this.unsigned && + this.high === -0x80000000 && + divisor.low === -1 && + divisor.high === -1) { + return this; + } + const low = (this.unsigned ? wasm.div_u : wasm.div_s)(this.low, this.high, divisor.low, divisor.high); + return Long.fromBits(low, wasm.get_high(), this.unsigned); + } + if (this.isZero()) + return this.unsigned ? Long.UZERO : Long.ZERO; + let approx, rem, res; + if (!this.unsigned) { + if (this.eq(Long.MIN_VALUE)) { + if (divisor.eq(Long.ONE) || divisor.eq(Long.NEG_ONE)) + return Long.MIN_VALUE; + else if (divisor.eq(Long.MIN_VALUE)) + return Long.ONE; + else { + const halfThis = this.shr(1); + approx = halfThis.div(divisor).shl(1); + if (approx.eq(Long.ZERO)) { + return divisor.isNegative() ? Long.ONE : Long.NEG_ONE; + } + else { + rem = this.sub(divisor.mul(approx)); + res = approx.add(rem.div(divisor)); + return res; + } + } + } + else if (divisor.eq(Long.MIN_VALUE)) + return this.unsigned ? Long.UZERO : Long.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 = Long.ZERO; + } + else { + if (!divisor.unsigned) + divisor = divisor.toUnsigned(); + if (divisor.gt(this)) + return Long.UZERO; + if (divisor.gt(this.shru(1))) + return Long.UONE; + res = Long.UZERO; + } + rem = this; + while (rem.gte(divisor)) { + approx = Math.max(1, Math.floor(rem.toNumber() / divisor.toNumber())); + const log2 = Math.ceil(Math.log(approx) / Math.LN2); + const delta = log2 <= 48 ? 1 : Math.pow(2, log2 - 48); + let approxRes = Long.fromNumber(approx); + let approxRem = approxRes.mul(divisor); + while (approxRem.isNegative() || approxRem.gt(rem)) { + approx -= delta; + approxRes = Long.fromNumber(approx, this.unsigned); + approxRem = approxRes.mul(divisor); + } + if (approxRes.isZero()) + approxRes = Long.ONE; + res = res.add(approxRes); + rem = rem.sub(approxRem); + } + return res; + } + div(divisor) { + return this.divide(divisor); + } + equals(other) { + if (!Long.isLong(other)) + other = Long.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; + } + eq(other) { + return this.equals(other); + } + getHighBits() { + return this.high; + } + getHighBitsUnsigned() { + return this.high >>> 0; + } + getLowBits() { + return this.low; + } + getLowBitsUnsigned() { + return this.low >>> 0; + } + getNumBitsAbs() { + if (this.isNegative()) { + return this.eq(Long.MIN_VALUE) ? 64 : this.neg().getNumBitsAbs(); + } + const val = this.high !== 0 ? this.high : this.low; + let bit; + for (bit = 31; bit > 0; bit--) + if ((val & (1 << bit)) !== 0) + break; + return this.high !== 0 ? bit + 33 : bit + 1; + } + greaterThan(other) { + return this.comp(other) > 0; + } + gt(other) { + return this.greaterThan(other); + } + greaterThanOrEqual(other) { + return this.comp(other) >= 0; + } + gte(other) { + return this.greaterThanOrEqual(other); + } + ge(other) { + return this.greaterThanOrEqual(other); + } + isEven() { + return (this.low & 1) === 0; + } + isNegative() { + return !this.unsigned && this.high < 0; + } + isOdd() { + return (this.low & 1) === 1; + } + isPositive() { + return this.unsigned || this.high >= 0; + } + isZero() { + return this.high === 0 && this.low === 0; + } + lessThan(other) { + return this.comp(other) < 0; + } + lt(other) { + return this.lessThan(other); + } + lessThanOrEqual(other) { + return this.comp(other) <= 0; + } + lte(other) { + return this.lessThanOrEqual(other); + } + modulo(divisor) { + if (!Long.isLong(divisor)) + divisor = Long.fromValue(divisor); + if (wasm) { + const low = (this.unsigned ? wasm.rem_u : wasm.rem_s)(this.low, this.high, divisor.low, divisor.high); + return Long.fromBits(low, wasm.get_high(), this.unsigned); + } + return this.sub(this.div(divisor).mul(divisor)); + } + mod(divisor) { + return this.modulo(divisor); + } + rem(divisor) { + return this.modulo(divisor); + } + multiply(multiplier) { + if (this.isZero()) + return Long.ZERO; + if (!Long.isLong(multiplier)) + multiplier = Long.fromValue(multiplier); + if (wasm) { + const low = wasm.mul(this.low, this.high, multiplier.low, multiplier.high); + return Long.fromBits(low, wasm.get_high(), this.unsigned); + } + if (multiplier.isZero()) + return Long.ZERO; + if (this.eq(Long.MIN_VALUE)) + return multiplier.isOdd() ? Long.MIN_VALUE : Long.ZERO; + if (multiplier.eq(Long.MIN_VALUE)) + return this.isOdd() ? Long.MIN_VALUE : Long.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 (this.lt(Long.TWO_PWR_24) && multiplier.lt(Long.TWO_PWR_24)) + return Long.fromNumber(this.toNumber() * multiplier.toNumber(), this.unsigned); + const a48 = this.high >>> 16; + const a32 = this.high & 0xffff; + const a16 = this.low >>> 16; + const a00 = this.low & 0xffff; + const b48 = multiplier.high >>> 16; + const b32 = multiplier.high & 0xffff; + const b16 = multiplier.low >>> 16; + const b00 = multiplier.low & 0xffff; + let 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 Long.fromBits((c16 << 16) | c00, (c48 << 16) | c32, this.unsigned); + } + mul(multiplier) { + return this.multiply(multiplier); + } + negate() { + if (!this.unsigned && this.eq(Long.MIN_VALUE)) + return Long.MIN_VALUE; + return this.not().add(Long.ONE); + } + neg() { + return this.negate(); + } + not() { + return Long.fromBits(~this.low, ~this.high, this.unsigned); + } + notEquals(other) { + return !this.equals(other); + } + neq(other) { + return this.notEquals(other); + } + ne(other) { + return this.notEquals(other); + } + or(other) { + if (!Long.isLong(other)) + other = Long.fromValue(other); + return Long.fromBits(this.low | other.low, this.high | other.high, this.unsigned); + } + shiftLeft(numBits) { + if (Long.isLong(numBits)) + numBits = numBits.toInt(); + if ((numBits &= 63) === 0) + return this; + else if (numBits < 32) + return Long.fromBits(this.low << numBits, (this.high << numBits) | (this.low >>> (32 - numBits)), this.unsigned); + else + return Long.fromBits(0, this.low << (numBits - 32), this.unsigned); + } + shl(numBits) { + return this.shiftLeft(numBits); + } + shiftRight(numBits) { + if (Long.isLong(numBits)) + numBits = numBits.toInt(); + if ((numBits &= 63) === 0) + return this; + else if (numBits < 32) + return Long.fromBits((this.low >>> numBits) | (this.high << (32 - numBits)), this.high >> numBits, this.unsigned); + else + return Long.fromBits(this.high >> (numBits - 32), this.high >= 0 ? 0 : -1, this.unsigned); + } + shr(numBits) { + return this.shiftRight(numBits); + } + shiftRightUnsigned(numBits) { + if (Long.isLong(numBits)) + numBits = numBits.toInt(); + numBits &= 63; + if (numBits === 0) + return this; + else { + const high = this.high; + if (numBits < 32) { + const low = this.low; + return Long.fromBits((low >>> numBits) | (high << (32 - numBits)), high >>> numBits, this.unsigned); + } + else if (numBits === 32) + return Long.fromBits(high, 0, this.unsigned); + else + return Long.fromBits(high >>> (numBits - 32), 0, this.unsigned); + } + } + shr_u(numBits) { + return this.shiftRightUnsigned(numBits); + } + shru(numBits) { + return this.shiftRightUnsigned(numBits); + } + subtract(subtrahend) { + if (!Long.isLong(subtrahend)) + subtrahend = Long.fromValue(subtrahend); + return this.add(subtrahend.neg()); + } + sub(subtrahend) { + return this.subtract(subtrahend); + } + toInt() { + return this.unsigned ? this.low >>> 0 : this.low; + } + 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); + } + toBigInt() { + return BigInt(this.toString()); + } + toBytes(le) { + return le ? this.toBytesLE() : this.toBytesBE(); + } + toBytesLE() { + const 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 + ]; + } + toBytesBE() { + const 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 + ]; + } + toSigned() { + if (!this.unsigned) + return this; + return Long.fromBits(this.low, this.high, false); + } + toString(radix) { + radix = radix || 10; + if (radix < 2 || 36 < radix) + throw new BSONError('radix'); + if (this.isZero()) + return '0'; + if (this.isNegative()) { + if (this.eq(Long.MIN_VALUE)) { + const radixLong = Long.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); + } + const radixToPower = Long.fromNumber(Math.pow(radix, 6), this.unsigned); + let rem = this; + let result = ''; + while (true) { + const remDiv = rem.div(radixToPower); + const intval = rem.sub(remDiv.mul(radixToPower)).toInt() >>> 0; + let digits = intval.toString(radix); + rem = remDiv; + if (rem.isZero()) { + return digits + result; + } + else { + while (digits.length < 6) + digits = '0' + digits; + result = '' + digits + result; + } + } + } + toUnsigned() { + if (this.unsigned) + return this; + return Long.fromBits(this.low, this.high, true); + } + xor(other) { + if (!Long.isLong(other)) + other = Long.fromValue(other); + return Long.fromBits(this.low ^ other.low, this.high ^ other.high, this.unsigned); + } + eqz() { + return this.isZero(); + } + le(other) { + return this.lessThanOrEqual(other); + } + toExtendedJSON(options) { + if (options && options.relaxed) + return this.toNumber(); + return { $numberLong: this.toString() }; + } + static fromExtendedJSON(doc, options) { + const { useBigInt64 = false, relaxed = true } = { ...options }; + if (doc.$numberLong.length > MAX_INT64_STRING_LENGTH) { + throw new BSONError('$numberLong string is too long'); + } + if (!DECIMAL_REG_EX.test(doc.$numberLong)) { + throw new BSONError(`$numberLong string "${doc.$numberLong}" is in an invalid format`); + } + if (useBigInt64) { + const bigIntResult = BigInt(doc.$numberLong); + return BigInt.asIntN(64, bigIntResult); + } + const longResult = Long.fromString(doc.$numberLong); + if (relaxed) { + return longResult.toNumber(); + } + return longResult; + } + [Symbol.for('nodejs.util.inspect.custom')]() { + return this.inspect(); + } + inspect() { + return `new Long("${this.toString()}"${this.unsigned ? ', true' : ''})`; + } +} +Long.TWO_PWR_24 = Long.fromInt(TWO_PWR_24_DBL); +Long.MAX_UNSIGNED_VALUE = Long.fromBits(0xffffffff | 0, 0xffffffff | 0, true); +Long.ZERO = Long.fromInt(0); +Long.UZERO = Long.fromInt(0, true); +Long.ONE = Long.fromInt(1); +Long.UONE = Long.fromInt(1, true); +Long.NEG_ONE = Long.fromInt(-1); +Long.MAX_VALUE = Long.fromBits(0xffffffff | 0, 0x7fffffff | 0, false); +Long.MIN_VALUE = Long.fromBits(0, 0x80000000 | 0, false); + +const PARSE_STRING_REGEXP = /^(\+|-)?(\d+|(\d*\.\d*))?(E|e)?([-+])?(\d+)?$/; +const PARSE_INF_REGEXP = /^(\+|-)?(Infinity|inf)$/i; +const PARSE_NAN_REGEXP = /^(\+|-)?NaN$/i; +const EXPONENT_MAX = 6111; +const EXPONENT_MIN = -6176; +const EXPONENT_BIAS = 6176; +const MAX_DIGITS = 34; +const NAN_BUFFER = ByteUtils.fromNumberArray([ + 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +].reverse()); +const INF_NEGATIVE_BUFFER = ByteUtils.fromNumberArray([ + 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +].reverse()); +const INF_POSITIVE_BUFFER = ByteUtils.fromNumberArray([ + 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +].reverse()); +const EXPONENT_REGEX = /^([-+])?(\d+)?$/; +const COMBINATION_MASK = 0x1f; +const EXPONENT_MASK = 0x3fff; +const COMBINATION_INFINITY = 30; +const COMBINATION_NAN = 31; +function isDigit(value) { + return !isNaN(parseInt(value, 10)); +} +function divideu128(value) { + const DIVISOR = Long.fromNumber(1000 * 1000 * 1000); + let _rem = Long.fromNumber(0); + if (!value.parts[0] && !value.parts[1] && !value.parts[2] && !value.parts[3]) { + return { quotient: value, rem: _rem }; + } + for (let i = 0; i <= 3; i++) { + _rem = _rem.shiftLeft(32); + _rem = _rem.add(new Long(value.parts[i], 0)); + value.parts[i] = _rem.div(DIVISOR).low; + _rem = _rem.modulo(DIVISOR); + } + return { quotient: value, rem: _rem }; +} +function multiply64x2(left, right) { + if (!left && !right) { + return { high: Long.fromNumber(0), low: Long.fromNumber(0) }; + } + const leftHigh = left.shiftRightUnsigned(32); + const leftLow = new Long(left.getLowBits(), 0); + const rightHigh = right.shiftRightUnsigned(32); + const rightLow = new Long(right.getLowBits(), 0); + let productHigh = leftHigh.multiply(rightHigh); + let productMid = leftHigh.multiply(rightLow); + const productMid2 = leftLow.multiply(rightHigh); + let productLow = leftLow.multiply(rightLow); + productHigh = productHigh.add(productMid.shiftRightUnsigned(32)); + productMid = new Long(productMid.getLowBits(), 0) + .add(productMid2) + .add(productLow.shiftRightUnsigned(32)); + productHigh = productHigh.add(productMid.shiftRightUnsigned(32)); + productLow = productMid.shiftLeft(32).add(new Long(productLow.getLowBits(), 0)); + return { high: productHigh, low: productLow }; +} +function lessThan(left, right) { + const uhleft = left.high >>> 0; + const uhright = right.high >>> 0; + if (uhleft < uhright) { + return true; + } + else if (uhleft === uhright) { + const ulleft = left.low >>> 0; + const ulright = right.low >>> 0; + if (ulleft < ulright) + return true; + } + return false; +} +function invalidErr(string, message) { + throw new BSONError(`"${string}" is not a valid Decimal128 string - ${message}`); +} +class Decimal128 extends BSONValue { + get _bsontype() { + return 'Decimal128'; + } + constructor(bytes) { + super(); + if (typeof bytes === 'string') { + this.bytes = Decimal128.fromString(bytes).bytes; + } + else if (isUint8Array(bytes)) { + if (bytes.byteLength !== 16) { + throw new BSONError('Decimal128 must take a Buffer of 16 bytes'); + } + this.bytes = bytes; + } + else { + throw new BSONError('Decimal128 must take a Buffer or string'); + } + } + static fromString(representation) { + return Decimal128._fromString(representation, { allowRounding: false }); + } + static fromStringWithRounding(representation) { + return Decimal128._fromString(representation, { allowRounding: true }); + } + static _fromString(representation, options) { + let isNegative = false; + let sawSign = false; + let sawRadix = false; + let foundNonZero = false; + let significantDigits = 0; + let nDigitsRead = 0; + let nDigits = 0; + let radixPosition = 0; + let firstNonZero = 0; + const digits = [0]; + let nDigitsStored = 0; + let digitsInsert = 0; + let lastDigit = 0; + let exponent = 0; + let significandHigh = new Long(0, 0); + let significandLow = new Long(0, 0); + let biasedExponent = 0; + let index = 0; + if (representation.length >= 7000) { + throw new BSONError('' + representation + ' not a valid Decimal128 string'); + } + const stringMatch = representation.match(PARSE_STRING_REGEXP); + const infMatch = representation.match(PARSE_INF_REGEXP); + const nanMatch = representation.match(PARSE_NAN_REGEXP); + if ((!stringMatch && !infMatch && !nanMatch) || representation.length === 0) { + throw new BSONError('' + representation + ' not a valid Decimal128 string'); + } + if (stringMatch) { + const unsignedNumber = stringMatch[2]; + const e = stringMatch[4]; + const expSign = stringMatch[5]; + const expNumber = stringMatch[6]; + if (e && expNumber === undefined) + invalidErr(representation, 'missing exponent power'); + if (e && unsignedNumber === undefined) + invalidErr(representation, 'missing exponent base'); + if (e === undefined && (expSign || expNumber)) { + invalidErr(representation, 'missing e before exponent'); + } + } + if (representation[index] === '+' || representation[index] === '-') { + sawSign = true; + isNegative = representation[index++] === '-'; + } + if (!isDigit(representation[index]) && representation[index] !== '.') { + if (representation[index] === 'i' || representation[index] === 'I') { + return new Decimal128(isNegative ? INF_NEGATIVE_BUFFER : INF_POSITIVE_BUFFER); + } + else if (representation[index] === 'N') { + return new Decimal128(NAN_BUFFER); + } + } + while (isDigit(representation[index]) || representation[index] === '.') { + if (representation[index] === '.') { + if (sawRadix) + invalidErr(representation, 'contains multiple periods'); + sawRadix = true; + index = index + 1; + continue; + } + if (nDigitsStored < MAX_DIGITS) { + if (representation[index] !== '0' || foundNonZero) { + if (!foundNonZero) { + firstNonZero = nDigitsRead; + } + foundNonZero = true; + digits[digitsInsert++] = parseInt(representation[index], 10); + nDigitsStored = nDigitsStored + 1; + } + } + if (foundNonZero) + nDigits = nDigits + 1; + if (sawRadix) + radixPosition = radixPosition + 1; + nDigitsRead = nDigitsRead + 1; + index = index + 1; + } + if (sawRadix && !nDigitsRead) + throw new BSONError('' + representation + ' not a valid Decimal128 string'); + if (representation[index] === 'e' || representation[index] === 'E') { + const match = representation.substr(++index).match(EXPONENT_REGEX); + if (!match || !match[2]) + return new Decimal128(NAN_BUFFER); + exponent = parseInt(match[0], 10); + index = index + match[0].length; + } + if (representation[index]) + return new Decimal128(NAN_BUFFER); + if (!nDigitsStored) { + digits[0] = 0; + nDigits = 1; + nDigitsStored = 1; + significantDigits = 0; + } + else { + lastDigit = nDigitsStored - 1; + significantDigits = nDigits; + if (significantDigits !== 1) { + while (representation[firstNonZero + significantDigits - 1 + Number(sawSign) + Number(sawRadix)] === '0') { + significantDigits = significantDigits - 1; + } + } + } + if (exponent <= radixPosition && radixPosition > exponent + (1 << 14)) { + exponent = EXPONENT_MIN; + } + else { + exponent = exponent - radixPosition; + } + while (exponent > EXPONENT_MAX) { + lastDigit = lastDigit + 1; + if (lastDigit >= MAX_DIGITS) { + if (significantDigits === 0) { + exponent = EXPONENT_MAX; + break; + } + invalidErr(representation, 'overflow'); + } + exponent = exponent - 1; + } + if (options.allowRounding) { + while (exponent < EXPONENT_MIN || nDigitsStored < nDigits) { + if (lastDigit === 0 && significantDigits < nDigitsStored) { + exponent = EXPONENT_MIN; + significantDigits = 0; + break; + } + if (nDigitsStored < nDigits) { + nDigits = nDigits - 1; + } + else { + lastDigit = lastDigit - 1; + } + if (exponent < EXPONENT_MAX) { + exponent = exponent + 1; + } + else { + const digitsString = digits.join(''); + if (digitsString.match(/^0+$/)) { + exponent = EXPONENT_MAX; + break; + } + invalidErr(representation, 'overflow'); + } + } + if (lastDigit + 1 < significantDigits) { + let endOfString = nDigitsRead; + if (sawRadix) { + firstNonZero = firstNonZero + 1; + endOfString = endOfString + 1; + } + if (sawSign) { + firstNonZero = firstNonZero + 1; + endOfString = endOfString + 1; + } + const roundDigit = parseInt(representation[firstNonZero + lastDigit + 1], 10); + let roundBit = 0; + if (roundDigit >= 5) { + roundBit = 1; + if (roundDigit === 5) { + roundBit = digits[lastDigit] % 2 === 1 ? 1 : 0; + for (let i = firstNonZero + lastDigit + 2; i < endOfString; i++) { + if (parseInt(representation[i], 10)) { + roundBit = 1; + break; + } + } + } + } + if (roundBit) { + let dIdx = lastDigit; + for (; dIdx >= 0; dIdx--) { + if (++digits[dIdx] > 9) { + digits[dIdx] = 0; + if (dIdx === 0) { + if (exponent < EXPONENT_MAX) { + exponent = exponent + 1; + digits[dIdx] = 1; + } + else { + return new Decimal128(isNegative ? INF_NEGATIVE_BUFFER : INF_POSITIVE_BUFFER); + } + } + } + else { + break; + } + } + } + } + } + else { + while (exponent < EXPONENT_MIN || nDigitsStored < nDigits) { + if (lastDigit === 0) { + if (significantDigits === 0) { + exponent = EXPONENT_MIN; + break; + } + invalidErr(representation, 'exponent underflow'); + } + if (nDigitsStored < nDigits) { + if (representation[nDigits - 1 + Number(sawSign) + Number(sawRadix)] !== '0' && + significantDigits !== 0) { + invalidErr(representation, 'inexact rounding'); + } + nDigits = nDigits - 1; + } + else { + if (digits[lastDigit] !== 0) { + invalidErr(representation, 'inexact rounding'); + } + lastDigit = lastDigit - 1; + } + if (exponent < EXPONENT_MAX) { + exponent = exponent + 1; + } + else { + invalidErr(representation, 'overflow'); + } + } + if (lastDigit + 1 < significantDigits) { + if (sawRadix) { + firstNonZero = firstNonZero + 1; + } + if (sawSign) { + firstNonZero = firstNonZero + 1; + } + const roundDigit = parseInt(representation[firstNonZero + lastDigit + 1], 10); + if (roundDigit !== 0) { + invalidErr(representation, 'inexact rounding'); + } + } + } + significandHigh = Long.fromNumber(0); + significandLow = Long.fromNumber(0); + if (significantDigits === 0) { + significandHigh = Long.fromNumber(0); + significandLow = Long.fromNumber(0); + } + else if (lastDigit < 17) { + let dIdx = 0; + significandLow = Long.fromNumber(digits[dIdx++]); + significandHigh = new Long(0, 0); + for (; dIdx <= lastDigit; dIdx++) { + significandLow = significandLow.multiply(Long.fromNumber(10)); + significandLow = significandLow.add(Long.fromNumber(digits[dIdx])); + } + } + else { + let dIdx = 0; + significandHigh = Long.fromNumber(digits[dIdx++]); + for (; dIdx <= lastDigit - 17; dIdx++) { + significandHigh = significandHigh.multiply(Long.fromNumber(10)); + significandHigh = significandHigh.add(Long.fromNumber(digits[dIdx])); + } + significandLow = Long.fromNumber(digits[dIdx++]); + for (; dIdx <= lastDigit; dIdx++) { + significandLow = significandLow.multiply(Long.fromNumber(10)); + significandLow = significandLow.add(Long.fromNumber(digits[dIdx])); + } + } + const significand = multiply64x2(significandHigh, Long.fromString('100000000000000000')); + significand.low = significand.low.add(significandLow); + if (lessThan(significand.low, significandLow)) { + significand.high = significand.high.add(Long.fromNumber(1)); + } + biasedExponent = exponent + EXPONENT_BIAS; + const dec = { low: Long.fromNumber(0), high: Long.fromNumber(0) }; + if (significand.high.shiftRightUnsigned(49).and(Long.fromNumber(1)).equals(Long.fromNumber(1))) { + dec.high = dec.high.or(Long.fromNumber(0x3).shiftLeft(61)); + dec.high = dec.high.or(Long.fromNumber(biasedExponent).and(Long.fromNumber(0x3fff).shiftLeft(47))); + dec.high = dec.high.or(significand.high.and(Long.fromNumber(0x7fffffffffff))); + } + else { + dec.high = dec.high.or(Long.fromNumber(biasedExponent & 0x3fff).shiftLeft(49)); + dec.high = dec.high.or(significand.high.and(Long.fromNumber(0x1ffffffffffff))); + } + dec.low = significand.low; + if (isNegative) { + dec.high = dec.high.or(Long.fromString('9223372036854775808')); + } + const buffer = ByteUtils.allocate(16); + index = 0; + buffer[index++] = dec.low.low & 0xff; + buffer[index++] = (dec.low.low >> 8) & 0xff; + buffer[index++] = (dec.low.low >> 16) & 0xff; + buffer[index++] = (dec.low.low >> 24) & 0xff; + buffer[index++] = dec.low.high & 0xff; + buffer[index++] = (dec.low.high >> 8) & 0xff; + buffer[index++] = (dec.low.high >> 16) & 0xff; + buffer[index++] = (dec.low.high >> 24) & 0xff; + buffer[index++] = dec.high.low & 0xff; + buffer[index++] = (dec.high.low >> 8) & 0xff; + buffer[index++] = (dec.high.low >> 16) & 0xff; + buffer[index++] = (dec.high.low >> 24) & 0xff; + buffer[index++] = dec.high.high & 0xff; + buffer[index++] = (dec.high.high >> 8) & 0xff; + buffer[index++] = (dec.high.high >> 16) & 0xff; + buffer[index++] = (dec.high.high >> 24) & 0xff; + return new Decimal128(buffer); + } + toString() { + let biased_exponent; + let significand_digits = 0; + const significand = new Array(36); + for (let i = 0; i < significand.length; i++) + significand[i] = 0; + let index = 0; + let is_zero = false; + let significand_msb; + let significand128 = { parts: [0, 0, 0, 0] }; + let j, k; + const string = []; + index = 0; + const buffer = this.bytes; + const low = buffer[index++] | (buffer[index++] << 8) | (buffer[index++] << 16) | (buffer[index++] << 24); + const midl = buffer[index++] | (buffer[index++] << 8) | (buffer[index++] << 16) | (buffer[index++] << 24); + const midh = buffer[index++] | (buffer[index++] << 8) | (buffer[index++] << 16) | (buffer[index++] << 24); + const high = buffer[index++] | (buffer[index++] << 8) | (buffer[index++] << 16) | (buffer[index++] << 24); + index = 0; + const dec = { + low: new Long(low, midl), + high: new Long(midh, high) + }; + if (dec.high.lessThan(Long.ZERO)) { + string.push('-'); + } + const combination = (high >> 26) & COMBINATION_MASK; + if (combination >> 3 === 3) { + if (combination === COMBINATION_INFINITY) { + return string.join('') + 'Infinity'; + } + else if (combination === COMBINATION_NAN) { + return 'NaN'; + } + else { + biased_exponent = (high >> 15) & EXPONENT_MASK; + significand_msb = 0x08 + ((high >> 14) & 0x01); + } + } + else { + significand_msb = (high >> 14) & 0x07; + biased_exponent = (high >> 17) & EXPONENT_MASK; + } + const exponent = biased_exponent - EXPONENT_BIAS; + significand128.parts[0] = (high & 0x3fff) + ((significand_msb & 0xf) << 14); + significand128.parts[1] = midh; + significand128.parts[2] = midl; + significand128.parts[3] = low; + if (significand128.parts[0] === 0 && + significand128.parts[1] === 0 && + significand128.parts[2] === 0 && + significand128.parts[3] === 0) { + is_zero = true; + } + else { + for (k = 3; k >= 0; k--) { + let least_digits = 0; + const result = divideu128(significand128); + significand128 = result.quotient; + least_digits = result.rem.low; + if (!least_digits) + continue; + for (j = 8; j >= 0; j--) { + significand[k * 9 + j] = least_digits % 10; + least_digits = Math.floor(least_digits / 10); + } + } + } + if (is_zero) { + significand_digits = 1; + significand[index] = 0; + } + else { + significand_digits = 36; + while (!significand[index]) { + significand_digits = significand_digits - 1; + index = index + 1; + } + } + const scientific_exponent = significand_digits - 1 + exponent; + if (scientific_exponent >= 34 || scientific_exponent <= -7 || exponent > 0) { + if (significand_digits > 34) { + string.push(`${0}`); + if (exponent > 0) + string.push(`E+${exponent}`); + else if (exponent < 0) + string.push(`E${exponent}`); + return string.join(''); + } + string.push(`${significand[index++]}`); + significand_digits = significand_digits - 1; + if (significand_digits) { + string.push('.'); + } + for (let i = 0; i < significand_digits; i++) { + string.push(`${significand[index++]}`); + } + string.push('E'); + if (scientific_exponent > 0) { + string.push(`+${scientific_exponent}`); + } + else { + string.push(`${scientific_exponent}`); + } + } + else { + if (exponent >= 0) { + for (let i = 0; i < significand_digits; i++) { + string.push(`${significand[index++]}`); + } + } + else { + let radix_position = significand_digits + exponent; + if (radix_position > 0) { + for (let i = 0; i < radix_position; i++) { + string.push(`${significand[index++]}`); + } + } + else { + string.push('0'); + } + string.push('.'); + while (radix_position++ < 0) { + string.push('0'); + } + for (let i = 0; i < significand_digits - Math.max(radix_position - 1, 0); i++) { + string.push(`${significand[index++]}`); + } + } + } + return string.join(''); + } + toJSON() { + return { $numberDecimal: this.toString() }; + } + toExtendedJSON() { + return { $numberDecimal: this.toString() }; + } + static fromExtendedJSON(doc) { + return Decimal128.fromString(doc.$numberDecimal); + } + [Symbol.for('nodejs.util.inspect.custom')]() { + return this.inspect(); + } + inspect() { + return `new Decimal128("${this.toString()}")`; + } +} + +class Double extends BSONValue { + get _bsontype() { + return 'Double'; + } + constructor(value) { + super(); + if (value instanceof Number) { + value = value.valueOf(); + } + this.value = +value; + } + valueOf() { + return this.value; + } + toJSON() { + return this.value; + } + toString(radix) { + return this.value.toString(radix); + } + toExtendedJSON(options) { + if (options && (options.legacy || (options.relaxed && isFinite(this.value)))) { + return this.value; + } + if (Object.is(Math.sign(this.value), -0)) { + return { $numberDouble: '-0.0' }; + } + return { + $numberDouble: Number.isInteger(this.value) ? this.value.toFixed(1) : this.value.toString() + }; + } + static fromExtendedJSON(doc, options) { + const doubleValue = parseFloat(doc.$numberDouble); + return options && options.relaxed ? doubleValue : new Double(doubleValue); + } + [Symbol.for('nodejs.util.inspect.custom')]() { + return this.inspect(); + } + inspect() { + const eJSON = this.toExtendedJSON(); + return `new Double(${eJSON.$numberDouble})`; + } +} + +class Int32 extends BSONValue { + get _bsontype() { + return 'Int32'; + } + constructor(value) { + super(); + if (value instanceof Number) { + value = value.valueOf(); + } + this.value = +value | 0; + } + valueOf() { + return this.value; + } + toString(radix) { + return this.value.toString(radix); + } + toJSON() { + return this.value; + } + toExtendedJSON(options) { + if (options && (options.relaxed || options.legacy)) + return this.value; + return { $numberInt: this.value.toString() }; + } + static fromExtendedJSON(doc, options) { + return options && options.relaxed ? parseInt(doc.$numberInt, 10) : new Int32(doc.$numberInt); + } + [Symbol.for('nodejs.util.inspect.custom')]() { + return this.inspect(); + } + inspect() { + return `new Int32(${this.valueOf()})`; + } +} + +class MaxKey extends BSONValue { + get _bsontype() { + return 'MaxKey'; + } + toExtendedJSON() { + return { $maxKey: 1 }; + } + static fromExtendedJSON() { + return new MaxKey(); + } + [Symbol.for('nodejs.util.inspect.custom')]() { + return this.inspect(); + } + inspect() { + return 'new MaxKey()'; + } +} + +class MinKey extends BSONValue { + get _bsontype() { + return 'MinKey'; + } + toExtendedJSON() { + return { $minKey: 1 }; + } + static fromExtendedJSON() { + return new MinKey(); + } + [Symbol.for('nodejs.util.inspect.custom')]() { + return this.inspect(); + } + inspect() { + return 'new MinKey()'; + } +} + +const checkForHexRegExp = new RegExp('^[0-9a-fA-F]{24}$'); +let PROCESS_UNIQUE = null; +const kId = Symbol('id'); +class ObjectId extends BSONValue { + get _bsontype() { + return 'ObjectId'; + } + constructor(inputId) { + super(); + let workingId; + if (typeof inputId === 'object' && inputId && 'id' in inputId) { + if (typeof inputId.id !== 'string' && !ArrayBuffer.isView(inputId.id)) { + throw new BSONError('Argument passed in must have an id that is of type string or Buffer'); + } + if ('toHexString' in inputId && typeof inputId.toHexString === 'function') { + workingId = ByteUtils.fromHex(inputId.toHexString()); + } + else { + workingId = inputId.id; + } + } + else { + workingId = inputId; + } + if (workingId == null || typeof workingId === 'number') { + this[kId] = ObjectId.generate(typeof workingId === 'number' ? workingId : undefined); + } + else if (ArrayBuffer.isView(workingId) && workingId.byteLength === 12) { + this[kId] = ByteUtils.toLocalBufferType(workingId); + } + else if (typeof workingId === 'string') { + if (workingId.length === 12) { + const bytes = ByteUtils.fromUTF8(workingId); + if (bytes.byteLength === 12) { + this[kId] = bytes; + } + else { + throw new BSONError('Argument passed in must be a string of 12 bytes'); + } + } + else if (workingId.length === 24 && checkForHexRegExp.test(workingId)) { + this[kId] = ByteUtils.fromHex(workingId); + } + else { + throw new BSONError('Argument passed in must be a string of 12 bytes or a string of 24 hex characters or an integer'); + } + } + else { + throw new BSONError('Argument passed in does not match the accepted types'); + } + if (ObjectId.cacheHexString) { + this.__id = ByteUtils.toHex(this.id); + } + } + get id() { + return this[kId]; + } + set id(value) { + this[kId] = value; + if (ObjectId.cacheHexString) { + this.__id = ByteUtils.toHex(value); + } + } + toHexString() { + if (ObjectId.cacheHexString && this.__id) { + return this.__id; + } + const hexString = ByteUtils.toHex(this.id); + if (ObjectId.cacheHexString && !this.__id) { + this.__id = hexString; + } + return hexString; + } + static getInc() { + return (ObjectId.index = (ObjectId.index + 1) % 0xffffff); + } + static generate(time) { + if ('number' !== typeof time) { + time = Math.floor(Date.now() / 1000); + } + const inc = ObjectId.getInc(); + const buffer = ByteUtils.allocate(12); + BSONDataView.fromUint8Array(buffer).setUint32(0, time, false); + if (PROCESS_UNIQUE === null) { + PROCESS_UNIQUE = ByteUtils.randomBytes(5); + } + buffer[4] = PROCESS_UNIQUE[0]; + buffer[5] = PROCESS_UNIQUE[1]; + buffer[6] = PROCESS_UNIQUE[2]; + buffer[7] = PROCESS_UNIQUE[3]; + buffer[8] = PROCESS_UNIQUE[4]; + buffer[11] = inc & 0xff; + buffer[10] = (inc >> 8) & 0xff; + buffer[9] = (inc >> 16) & 0xff; + return buffer; + } + toString(encoding) { + if (encoding === 'base64') + return ByteUtils.toBase64(this.id); + if (encoding === 'hex') + return this.toHexString(); + return this.toHexString(); + } + toJSON() { + return this.toHexString(); + } + equals(otherId) { + if (otherId === undefined || otherId === null) { + return false; + } + if (otherId instanceof ObjectId) { + return this[kId][11] === otherId[kId][11] && ByteUtils.equals(this[kId], otherId[kId]); + } + if (typeof otherId === 'string' && + ObjectId.isValid(otherId) && + otherId.length === 12 && + isUint8Array(this.id)) { + return ByteUtils.equals(this.id, ByteUtils.fromISO88591(otherId)); + } + if (typeof otherId === 'string' && ObjectId.isValid(otherId) && otherId.length === 24) { + return otherId.toLowerCase() === this.toHexString(); + } + if (typeof otherId === 'string' && ObjectId.isValid(otherId) && otherId.length === 12) { + return ByteUtils.equals(ByteUtils.fromUTF8(otherId), this.id); + } + if (typeof otherId === 'object' && + 'toHexString' in otherId && + typeof otherId.toHexString === 'function') { + const otherIdString = otherId.toHexString(); + const thisIdString = this.toHexString().toLowerCase(); + return typeof otherIdString === 'string' && otherIdString.toLowerCase() === thisIdString; + } + return false; + } + getTimestamp() { + const timestamp = new Date(); + const time = BSONDataView.fromUint8Array(this.id).getUint32(0, false); + timestamp.setTime(Math.floor(time) * 1000); + return timestamp; + } + static createPk() { + return new ObjectId(); + } + static createFromTime(time) { + const buffer = ByteUtils.fromNumberArray([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + BSONDataView.fromUint8Array(buffer).setUint32(0, time, false); + return new ObjectId(buffer); + } + static createFromHexString(hexString) { + if (hexString?.length !== 24) { + throw new BSONError('hex string must be 24 characters'); + } + return new ObjectId(ByteUtils.fromHex(hexString)); + } + static createFromBase64(base64) { + if (base64?.length !== 16) { + throw new BSONError('base64 string must be 16 characters'); + } + return new ObjectId(ByteUtils.fromBase64(base64)); + } + static isValid(id) { + if (id == null) + return false; + try { + new ObjectId(id); + return true; + } + catch { + return false; + } + } + toExtendedJSON() { + if (this.toHexString) + return { $oid: this.toHexString() }; + return { $oid: this.toString('hex') }; + } + static fromExtendedJSON(doc) { + return new ObjectId(doc.$oid); + } + [Symbol.for('nodejs.util.inspect.custom')]() { + return this.inspect(); + } + inspect() { + return `new ObjectId("${this.toHexString()}")`; + } +} +ObjectId.index = Math.floor(Math.random() * 0xffffff); + +function internalCalculateObjectSize(object, serializeFunctions, ignoreUndefined) { + let totalLength = 4 + 1; + if (Array.isArray(object)) { + for (let i = 0; i < object.length; i++) { + totalLength += calculateElement(i.toString(), object[i], serializeFunctions, true, ignoreUndefined); + } + } + else { + if (typeof object?.toBSON === 'function') { + object = object.toBSON(); + } + for (const key of Object.keys(object)) { + totalLength += calculateElement(key, object[key], serializeFunctions, false, ignoreUndefined); + } + } + return totalLength; +} +function calculateElement(name, value, serializeFunctions = false, isArray = false, ignoreUndefined = false) { + if (typeof value?.toBSON === 'function') { + value = value.toBSON(); + } + switch (typeof value) { + case 'string': + return 1 + ByteUtils.utf8ByteLength(name) + 1 + 4 + ByteUtils.utf8ByteLength(value) + 1; + case 'number': + if (Math.floor(value) === value && + value >= JS_INT_MIN && + value <= JS_INT_MAX) { + if (value >= BSON_INT32_MIN && value <= BSON_INT32_MAX) { + return (name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + (4 + 1); + } + else { + return (name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + (8 + 1); + } + } + else { + return (name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + (8 + 1); + } + case 'undefined': + if (isArray || !ignoreUndefined) + return (name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + 1; + return 0; + case 'boolean': + return (name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + (1 + 1); + case 'object': + if (value != null && + typeof value._bsontype === 'string' && + value[Symbol.for('@@mdb.bson.version')] !== BSON_MAJOR_VERSION) { + throw new BSONVersionError(); + } + else if (value == null || value._bsontype === 'MinKey' || value._bsontype === 'MaxKey') { + return (name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + 1; + } + else if (value._bsontype === 'ObjectId') { + return (name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + (12 + 1); + } + else if (value instanceof Date || isDate(value)) { + return (name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + (8 + 1); + } + else if (ArrayBuffer.isView(value) || + value instanceof ArrayBuffer || + isAnyArrayBuffer(value)) { + return ((name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + (1 + 4 + 1) + value.byteLength); + } + else if (value._bsontype === 'Long' || + value._bsontype === 'Double' || + value._bsontype === 'Timestamp') { + return (name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + (8 + 1); + } + else if (value._bsontype === 'Decimal128') { + return (name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + (16 + 1); + } + else if (value._bsontype === 'Code') { + if (value.scope != null && Object.keys(value.scope).length > 0) { + return ((name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + + 1 + + 4 + + 4 + + ByteUtils.utf8ByteLength(value.code.toString()) + + 1 + + internalCalculateObjectSize(value.scope, serializeFunctions, ignoreUndefined)); + } + else { + return ((name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + + 1 + + 4 + + ByteUtils.utf8ByteLength(value.code.toString()) + + 1); + } + } + else if (value._bsontype === 'Binary') { + const binary = value; + if (binary.sub_type === Binary.SUBTYPE_BYTE_ARRAY) { + return ((name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + + (binary.position + 1 + 4 + 1 + 4)); + } + else { + return ((name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + (binary.position + 1 + 4 + 1)); + } + } + else if (value._bsontype === 'Symbol') { + return ((name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + + ByteUtils.utf8ByteLength(value.value) + + 4 + + 1 + + 1); + } + else if (value._bsontype === 'DBRef') { + const ordered_values = Object.assign({ + $ref: value.collection, + $id: value.oid + }, value.fields); + if (value.db != null) { + ordered_values['$db'] = value.db; + } + return ((name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + + 1 + + internalCalculateObjectSize(ordered_values, serializeFunctions, ignoreUndefined)); + } + else if (value instanceof RegExp || isRegExp(value)) { + return ((name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + + 1 + + ByteUtils.utf8ByteLength(value.source) + + 1 + + (value.global ? 1 : 0) + + (value.ignoreCase ? 1 : 0) + + (value.multiline ? 1 : 0) + + 1); + } + else if (value._bsontype === 'BSONRegExp') { + return ((name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + + 1 + + ByteUtils.utf8ByteLength(value.pattern) + + 1 + + ByteUtils.utf8ByteLength(value.options) + + 1); + } + else { + return ((name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + + internalCalculateObjectSize(value, serializeFunctions, ignoreUndefined) + + 1); + } + case 'function': + if (serializeFunctions) { + return ((name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + + 1 + + 4 + + ByteUtils.utf8ByteLength(value.toString()) + + 1); + } + } + return 0; +} + +function alphabetize(str) { + return str.split('').sort().join(''); +} +class BSONRegExp extends BSONValue { + get _bsontype() { + return 'BSONRegExp'; + } + constructor(pattern, options) { + super(); + this.pattern = pattern; + this.options = alphabetize(options ?? ''); + if (this.pattern.indexOf('\x00') !== -1) { + throw new BSONError(`BSON Regex patterns cannot contain null bytes, found: ${JSON.stringify(this.pattern)}`); + } + if (this.options.indexOf('\x00') !== -1) { + throw new BSONError(`BSON Regex options cannot contain null bytes, found: ${JSON.stringify(this.options)}`); + } + for (let i = 0; i < this.options.length; i++) { + if (!(this.options[i] === 'i' || + this.options[i] === 'm' || + this.options[i] === 'x' || + this.options[i] === 'l' || + this.options[i] === 's' || + this.options[i] === 'u')) { + throw new BSONError(`The regular expression option [${this.options[i]}] is not supported`); + } + } + } + static parseOptions(options) { + return options ? options.split('').sort().join('') : ''; + } + toExtendedJSON(options) { + options = options || {}; + if (options.legacy) { + return { $regex: this.pattern, $options: this.options }; + } + return { $regularExpression: { pattern: this.pattern, options: this.options } }; + } + static fromExtendedJSON(doc) { + if ('$regex' in doc) { + if (typeof doc.$regex !== 'string') { + if (doc.$regex._bsontype === 'BSONRegExp') { + return doc; + } + } + else { + return new BSONRegExp(doc.$regex, BSONRegExp.parseOptions(doc.$options)); + } + } + if ('$regularExpression' in doc) { + return new BSONRegExp(doc.$regularExpression.pattern, BSONRegExp.parseOptions(doc.$regularExpression.options)); + } + throw new BSONError(`Unexpected BSONRegExp EJSON object form: ${JSON.stringify(doc)}`); + } + [Symbol.for('nodejs.util.inspect.custom')]() { + return this.inspect(); + } + inspect() { + return `new BSONRegExp(${JSON.stringify(this.pattern)}, ${JSON.stringify(this.options)})`; + } +} + +class BSONSymbol extends BSONValue { + get _bsontype() { + return 'BSONSymbol'; + } + constructor(value) { + super(); + this.value = value; + } + valueOf() { + return this.value; + } + toString() { + return this.value; + } + inspect() { + return `new BSONSymbol("${this.value}")`; + } + toJSON() { + return this.value; + } + toExtendedJSON() { + return { $symbol: this.value }; + } + static fromExtendedJSON(doc) { + return new BSONSymbol(doc.$symbol); + } + [Symbol.for('nodejs.util.inspect.custom')]() { + return this.inspect(); + } +} + +const LongWithoutOverridesClass = Long; +class Timestamp extends LongWithoutOverridesClass { + get _bsontype() { + return 'Timestamp'; + } + constructor(low) { + if (low == null) { + super(0, 0, true); + } + else if (typeof low === 'bigint') { + super(low, true); + } + else if (Long.isLong(low)) { + super(low.low, low.high, true); + } + else if (typeof low === 'object' && 't' in low && 'i' in low) { + if (typeof low.t !== 'number' && (typeof low.t !== 'object' || low.t._bsontype !== 'Int32')) { + throw new BSONError('Timestamp constructed from { t, i } must provide t as a number'); + } + if (typeof low.i !== 'number' && (typeof low.i !== 'object' || low.i._bsontype !== 'Int32')) { + throw new BSONError('Timestamp constructed from { t, i } must provide i as a number'); + } + const t = Number(low.t); + const i = Number(low.i); + if (t < 0 || Number.isNaN(t)) { + throw new BSONError('Timestamp constructed from { t, i } must provide a positive t'); + } + if (i < 0 || Number.isNaN(i)) { + throw new BSONError('Timestamp constructed from { t, i } must provide a positive i'); + } + if (t > 4294967295) { + throw new BSONError('Timestamp constructed from { t, i } must provide t equal or less than uint32 max'); + } + if (i > 4294967295) { + throw new BSONError('Timestamp constructed from { t, i } must provide i equal or less than uint32 max'); + } + super(i, t, true); + } + else { + throw new BSONError('A Timestamp can only be constructed with: bigint, Long, or { t: number; i: number }'); + } + } + toJSON() { + return { + $timestamp: this.toString() + }; + } + static fromInt(value) { + return new Timestamp(Long.fromInt(value, true)); + } + static fromNumber(value) { + return new Timestamp(Long.fromNumber(value, true)); + } + static fromBits(lowBits, highBits) { + return new Timestamp({ i: lowBits, t: highBits }); + } + static fromString(str, optRadix) { + return new Timestamp(Long.fromString(str, true, optRadix)); + } + toExtendedJSON() { + return { $timestamp: { t: this.high >>> 0, i: this.low >>> 0 } }; + } + static fromExtendedJSON(doc) { + const i = Long.isLong(doc.$timestamp.i) + ? doc.$timestamp.i.getLowBitsUnsigned() + : doc.$timestamp.i; + const t = Long.isLong(doc.$timestamp.t) + ? doc.$timestamp.t.getLowBitsUnsigned() + : doc.$timestamp.t; + return new Timestamp({ t, i }); + } + [Symbol.for('nodejs.util.inspect.custom')]() { + return this.inspect(); + } + inspect() { + return `new Timestamp({ t: ${this.getHighBits()}, i: ${this.getLowBits()} })`; + } +} +Timestamp.MAX_VALUE = Long.MAX_UNSIGNED_VALUE; + +const FIRST_BIT = 0x80; +const FIRST_TWO_BITS = 0xc0; +const FIRST_THREE_BITS = 0xe0; +const FIRST_FOUR_BITS = 0xf0; +const FIRST_FIVE_BITS = 0xf8; +const TWO_BIT_CHAR = 0xc0; +const THREE_BIT_CHAR = 0xe0; +const FOUR_BIT_CHAR = 0xf0; +const CONTINUING_CHAR = 0x80; +function validateUtf8(bytes, start, end) { + let continuation = 0; + for (let i = start; i < end; i += 1) { + const byte = bytes[i]; + if (continuation) { + if ((byte & FIRST_TWO_BITS) !== CONTINUING_CHAR) { + return false; + } + continuation -= 1; + } + else if (byte & FIRST_BIT) { + if ((byte & FIRST_THREE_BITS) === TWO_BIT_CHAR) { + continuation = 1; + } + else if ((byte & FIRST_FOUR_BITS) === THREE_BIT_CHAR) { + continuation = 2; + } + else if ((byte & FIRST_FIVE_BITS) === FOUR_BIT_CHAR) { + continuation = 3; + } + else { + return false; + } + } + } + return !continuation; +} + +const JS_INT_MAX_LONG = Long.fromNumber(JS_INT_MAX); +const JS_INT_MIN_LONG = Long.fromNumber(JS_INT_MIN); +function internalDeserialize(buffer, options, isArray) { + options = options == null ? {} : options; + const index = options && options.index ? options.index : 0; + const size = buffer[index] | + (buffer[index + 1] << 8) | + (buffer[index + 2] << 16) | + (buffer[index + 3] << 24); + if (size < 5) { + throw new BSONError(`bson size must be >= 5, is ${size}`); + } + if (options.allowObjectSmallerThanBufferSize && buffer.length < size) { + throw new BSONError(`buffer length ${buffer.length} must be >= bson size ${size}`); + } + if (!options.allowObjectSmallerThanBufferSize && buffer.length !== size) { + throw new BSONError(`buffer length ${buffer.length} must === bson size ${size}`); + } + if (size + index > buffer.byteLength) { + throw new BSONError(`(bson size ${size} + options.index ${index} must be <= buffer length ${buffer.byteLength})`); + } + if (buffer[index + size - 1] !== 0) { + throw new BSONError("One object, sized correctly, with a spot for an EOO, but the EOO isn't 0x00"); + } + return deserializeObject(buffer, index, options, isArray); +} +const allowedDBRefKeys = /^\$ref$|^\$id$|^\$db$/; +function deserializeObject(buffer, index, options, isArray = false) { + const fieldsAsRaw = options['fieldsAsRaw'] == null ? null : options['fieldsAsRaw']; + const raw = options['raw'] == null ? false : options['raw']; + const bsonRegExp = typeof options['bsonRegExp'] === 'boolean' ? options['bsonRegExp'] : false; + const promoteBuffers = options.promoteBuffers ?? false; + const promoteLongs = options.promoteLongs ?? true; + const promoteValues = options.promoteValues ?? true; + const useBigInt64 = options.useBigInt64 ?? false; + if (useBigInt64 && !promoteValues) { + throw new BSONError('Must either request bigint or Long for int64 deserialization'); + } + if (useBigInt64 && !promoteLongs) { + throw new BSONError('Must either request bigint or Long for int64 deserialization'); + } + const validation = options.validation == null ? { utf8: true } : options.validation; + let globalUTFValidation = true; + let validationSetting; + const utf8KeysSet = new Set(); + const utf8ValidatedKeys = validation.utf8; + if (typeof utf8ValidatedKeys === 'boolean') { + validationSetting = utf8ValidatedKeys; + } + else { + globalUTFValidation = false; + const utf8ValidationValues = Object.keys(utf8ValidatedKeys).map(function (key) { + return utf8ValidatedKeys[key]; + }); + if (utf8ValidationValues.length === 0) { + throw new BSONError('UTF-8 validation setting cannot be empty'); + } + if (typeof utf8ValidationValues[0] !== 'boolean') { + throw new BSONError('Invalid UTF-8 validation option, must specify boolean values'); + } + validationSetting = utf8ValidationValues[0]; + if (!utf8ValidationValues.every(item => item === validationSetting)) { + throw new BSONError('Invalid UTF-8 validation option - keys must be all true or all false'); + } + } + if (!globalUTFValidation) { + for (const key of Object.keys(utf8ValidatedKeys)) { + utf8KeysSet.add(key); + } + } + const startIndex = index; + if (buffer.length < 5) + throw new BSONError('corrupt bson message < 5 bytes long'); + const size = buffer[index++] | (buffer[index++] << 8) | (buffer[index++] << 16) | (buffer[index++] << 24); + if (size < 5 || size > buffer.length) + throw new BSONError('corrupt bson message'); + const object = isArray ? [] : {}; + let arrayIndex = 0; + const done = false; + let isPossibleDBRef = isArray ? false : null; + const dataview = new DataView(buffer.buffer, buffer.byteOffset, buffer.byteLength); + while (!done) { + const elementType = buffer[index++]; + if (elementType === 0) + break; + let i = index; + while (buffer[i] !== 0x00 && i < buffer.length) { + i++; + } + if (i >= buffer.byteLength) + throw new BSONError('Bad BSON Document: illegal CString'); + const name = isArray ? arrayIndex++ : ByteUtils.toUTF8(buffer, index, i); + let shouldValidateKey = true; + if (globalUTFValidation || utf8KeysSet.has(name)) { + shouldValidateKey = validationSetting; + } + else { + shouldValidateKey = !validationSetting; + } + if (isPossibleDBRef !== false && name[0] === '$') { + isPossibleDBRef = allowedDBRefKeys.test(name); + } + let value; + index = i + 1; + if (elementType === BSON_DATA_STRING) { + const stringSize = buffer[index++] | + (buffer[index++] << 8) | + (buffer[index++] << 16) | + (buffer[index++] << 24); + if (stringSize <= 0 || + stringSize > buffer.length - index || + buffer[index + stringSize - 1] !== 0) { + throw new BSONError('bad string length in bson'); + } + value = getValidatedString(buffer, index, index + stringSize - 1, shouldValidateKey); + index = index + stringSize; + } + else if (elementType === BSON_DATA_OID) { + const oid = ByteUtils.allocate(12); + oid.set(buffer.subarray(index, index + 12)); + value = new ObjectId(oid); + index = index + 12; + } + else if (elementType === BSON_DATA_INT && promoteValues === false) { + value = new Int32(buffer[index++] | (buffer[index++] << 8) | (buffer[index++] << 16) | (buffer[index++] << 24)); + } + else if (elementType === BSON_DATA_INT) { + value = + buffer[index++] | + (buffer[index++] << 8) | + (buffer[index++] << 16) | + (buffer[index++] << 24); + } + else if (elementType === BSON_DATA_NUMBER && promoteValues === false) { + value = new Double(dataview.getFloat64(index, true)); + index = index + 8; + } + else if (elementType === BSON_DATA_NUMBER) { + value = dataview.getFloat64(index, true); + index = index + 8; + } + else if (elementType === BSON_DATA_DATE) { + const lowBits = buffer[index++] | + (buffer[index++] << 8) | + (buffer[index++] << 16) | + (buffer[index++] << 24); + const highBits = buffer[index++] | + (buffer[index++] << 8) | + (buffer[index++] << 16) | + (buffer[index++] << 24); + value = new Date(new Long(lowBits, highBits).toNumber()); + } + else if (elementType === BSON_DATA_BOOLEAN) { + if (buffer[index] !== 0 && buffer[index] !== 1) + throw new BSONError('illegal boolean type value'); + value = buffer[index++] === 1; + } + else if (elementType === BSON_DATA_OBJECT) { + const _index = index; + const objectSize = buffer[index] | + (buffer[index + 1] << 8) | + (buffer[index + 2] << 16) | + (buffer[index + 3] << 24); + if (objectSize <= 0 || objectSize > buffer.length - index) + throw new BSONError('bad embedded document length in bson'); + if (raw) { + value = buffer.slice(index, index + objectSize); + } + else { + let objectOptions = options; + if (!globalUTFValidation) { + objectOptions = { ...options, validation: { utf8: shouldValidateKey } }; + } + value = deserializeObject(buffer, _index, objectOptions, false); + } + index = index + objectSize; + } + else if (elementType === BSON_DATA_ARRAY) { + const _index = index; + const objectSize = buffer[index] | + (buffer[index + 1] << 8) | + (buffer[index + 2] << 16) | + (buffer[index + 3] << 24); + let arrayOptions = options; + const stopIndex = index + objectSize; + if (fieldsAsRaw && fieldsAsRaw[name]) { + arrayOptions = { ...options, raw: true }; + } + if (!globalUTFValidation) { + arrayOptions = { ...arrayOptions, validation: { utf8: shouldValidateKey } }; + } + value = deserializeObject(buffer, _index, arrayOptions, true); + index = index + objectSize; + if (buffer[index - 1] !== 0) + throw new BSONError('invalid array terminator byte'); + if (index !== stopIndex) + throw new BSONError('corrupted array bson'); + } + else if (elementType === BSON_DATA_UNDEFINED) { + value = undefined; + } + else if (elementType === BSON_DATA_NULL) { + value = null; + } + else if (elementType === BSON_DATA_LONG) { + const dataview = BSONDataView.fromUint8Array(buffer.subarray(index, index + 8)); + const lowBits = buffer[index++] | + (buffer[index++] << 8) | + (buffer[index++] << 16) | + (buffer[index++] << 24); + const highBits = buffer[index++] | + (buffer[index++] << 8) | + (buffer[index++] << 16) | + (buffer[index++] << 24); + const long = new Long(lowBits, highBits); + if (useBigInt64) { + value = dataview.getBigInt64(0, true); + } + else if (promoteLongs && promoteValues === true) { + value = + long.lessThanOrEqual(JS_INT_MAX_LONG) && long.greaterThanOrEqual(JS_INT_MIN_LONG) + ? long.toNumber() + : long; + } + else { + value = long; + } + } + else if (elementType === BSON_DATA_DECIMAL128) { + const bytes = ByteUtils.allocate(16); + bytes.set(buffer.subarray(index, index + 16), 0); + index = index + 16; + value = new Decimal128(bytes); + } + else if (elementType === BSON_DATA_BINARY) { + let binarySize = buffer[index++] | + (buffer[index++] << 8) | + (buffer[index++] << 16) | + (buffer[index++] << 24); + const totalBinarySize = binarySize; + const subType = buffer[index++]; + if (binarySize < 0) + throw new BSONError('Negative binary type element size found'); + if (binarySize > buffer.byteLength) + throw new BSONError('Binary type size larger than document size'); + if (buffer['slice'] != null) { + if (subType === Binary.SUBTYPE_BYTE_ARRAY) { + binarySize = + buffer[index++] | + (buffer[index++] << 8) | + (buffer[index++] << 16) | + (buffer[index++] << 24); + if (binarySize < 0) + throw new BSONError('Negative binary type element size found for subtype 0x02'); + if (binarySize > totalBinarySize - 4) + throw new BSONError('Binary type with subtype 0x02 contains too long binary size'); + if (binarySize < totalBinarySize - 4) + throw new BSONError('Binary type with subtype 0x02 contains too short binary size'); + } + if (promoteBuffers && promoteValues) { + value = ByteUtils.toLocalBufferType(buffer.slice(index, index + binarySize)); + } + else { + value = new Binary(buffer.slice(index, index + binarySize), subType); + if (subType === BSON_BINARY_SUBTYPE_UUID_NEW && UUID.isValid(value)) { + value = value.toUUID(); + } + } + } + else { + const _buffer = ByteUtils.allocate(binarySize); + if (subType === Binary.SUBTYPE_BYTE_ARRAY) { + binarySize = + buffer[index++] | + (buffer[index++] << 8) | + (buffer[index++] << 16) | + (buffer[index++] << 24); + if (binarySize < 0) + throw new BSONError('Negative binary type element size found for subtype 0x02'); + if (binarySize > totalBinarySize - 4) + throw new BSONError('Binary type with subtype 0x02 contains too long binary size'); + if (binarySize < totalBinarySize - 4) + throw new BSONError('Binary type with subtype 0x02 contains too short binary size'); + } + for (i = 0; i < binarySize; i++) { + _buffer[i] = buffer[index + i]; + } + if (promoteBuffers && promoteValues) { + value = _buffer; + } + else { + value = new Binary(buffer.slice(index, index + binarySize), subType); + if (subType === BSON_BINARY_SUBTYPE_UUID_NEW && UUID.isValid(value)) { + value = value.toUUID(); + } + } + } + index = index + binarySize; + } + else if (elementType === BSON_DATA_REGEXP && bsonRegExp === false) { + i = index; + while (buffer[i] !== 0x00 && i < buffer.length) { + i++; + } + if (i >= buffer.length) + throw new BSONError('Bad BSON Document: illegal CString'); + const source = ByteUtils.toUTF8(buffer, index, i); + index = i + 1; + i = index; + while (buffer[i] !== 0x00 && i < buffer.length) { + i++; + } + if (i >= buffer.length) + throw new BSONError('Bad BSON Document: illegal CString'); + const regExpOptions = ByteUtils.toUTF8(buffer, index, i); + index = i + 1; + const optionsArray = new Array(regExpOptions.length); + for (i = 0; i < regExpOptions.length; i++) { + switch (regExpOptions[i]) { + case 'm': + optionsArray[i] = 'm'; + break; + case 's': + optionsArray[i] = 'g'; + break; + case 'i': + optionsArray[i] = 'i'; + break; + } + } + value = new RegExp(source, optionsArray.join('')); + } + else if (elementType === BSON_DATA_REGEXP && bsonRegExp === true) { + i = index; + while (buffer[i] !== 0x00 && i < buffer.length) { + i++; + } + if (i >= buffer.length) + throw new BSONError('Bad BSON Document: illegal CString'); + const source = ByteUtils.toUTF8(buffer, index, i); + index = i + 1; + i = index; + while (buffer[i] !== 0x00 && i < buffer.length) { + i++; + } + if (i >= buffer.length) + throw new BSONError('Bad BSON Document: illegal CString'); + const regExpOptions = ByteUtils.toUTF8(buffer, index, i); + index = i + 1; + value = new BSONRegExp(source, regExpOptions); + } + else if (elementType === BSON_DATA_SYMBOL) { + const stringSize = buffer[index++] | + (buffer[index++] << 8) | + (buffer[index++] << 16) | + (buffer[index++] << 24); + if (stringSize <= 0 || + stringSize > buffer.length - index || + buffer[index + stringSize - 1] !== 0) { + throw new BSONError('bad string length in bson'); + } + const symbol = getValidatedString(buffer, index, index + stringSize - 1, shouldValidateKey); + value = promoteValues ? symbol : new BSONSymbol(symbol); + index = index + stringSize; + } + else if (elementType === BSON_DATA_TIMESTAMP) { + const i = buffer[index++] + + buffer[index++] * (1 << 8) + + buffer[index++] * (1 << 16) + + buffer[index++] * (1 << 24); + const t = buffer[index++] + + buffer[index++] * (1 << 8) + + buffer[index++] * (1 << 16) + + buffer[index++] * (1 << 24); + value = new Timestamp({ i, t }); + } + else if (elementType === BSON_DATA_MIN_KEY) { + value = new MinKey(); + } + else if (elementType === BSON_DATA_MAX_KEY) { + value = new MaxKey(); + } + else if (elementType === BSON_DATA_CODE) { + const stringSize = buffer[index++] | + (buffer[index++] << 8) | + (buffer[index++] << 16) | + (buffer[index++] << 24); + if (stringSize <= 0 || + stringSize > buffer.length - index || + buffer[index + stringSize - 1] !== 0) { + throw new BSONError('bad string length in bson'); + } + const functionString = getValidatedString(buffer, index, index + stringSize - 1, shouldValidateKey); + value = new Code(functionString); + index = index + stringSize; + } + else if (elementType === BSON_DATA_CODE_W_SCOPE) { + const totalSize = buffer[index++] | + (buffer[index++] << 8) | + (buffer[index++] << 16) | + (buffer[index++] << 24); + if (totalSize < 4 + 4 + 4 + 1) { + throw new BSONError('code_w_scope total size shorter minimum expected length'); + } + const stringSize = buffer[index++] | + (buffer[index++] << 8) | + (buffer[index++] << 16) | + (buffer[index++] << 24); + if (stringSize <= 0 || + stringSize > buffer.length - index || + buffer[index + stringSize - 1] !== 0) { + throw new BSONError('bad string length in bson'); + } + const functionString = getValidatedString(buffer, index, index + stringSize - 1, shouldValidateKey); + index = index + stringSize; + const _index = index; + const objectSize = buffer[index] | + (buffer[index + 1] << 8) | + (buffer[index + 2] << 16) | + (buffer[index + 3] << 24); + const scopeObject = deserializeObject(buffer, _index, options, false); + index = index + objectSize; + if (totalSize < 4 + 4 + objectSize + stringSize) { + throw new BSONError('code_w_scope total size is too short, truncating scope'); + } + if (totalSize > 4 + 4 + objectSize + stringSize) { + throw new BSONError('code_w_scope total size is too long, clips outer document'); + } + value = new Code(functionString, scopeObject); + } + else if (elementType === BSON_DATA_DBPOINTER) { + const stringSize = buffer[index++] | + (buffer[index++] << 8) | + (buffer[index++] << 16) | + (buffer[index++] << 24); + if (stringSize <= 0 || + stringSize > buffer.length - index || + buffer[index + stringSize - 1] !== 0) + throw new BSONError('bad string length in bson'); + if (validation != null && validation.utf8) { + if (!validateUtf8(buffer, index, index + stringSize - 1)) { + throw new BSONError('Invalid UTF-8 string in BSON document'); + } + } + const namespace = ByteUtils.toUTF8(buffer, index, index + stringSize - 1); + index = index + stringSize; + const oidBuffer = ByteUtils.allocate(12); + oidBuffer.set(buffer.subarray(index, index + 12), 0); + const oid = new ObjectId(oidBuffer); + index = index + 12; + value = new DBRef(namespace, oid); + } + else { + throw new BSONError(`Detected unknown BSON type ${elementType.toString(16)} for fieldname "${name}"`); + } + if (name === '__proto__') { + Object.defineProperty(object, name, { + value, + writable: true, + enumerable: true, + configurable: true + }); + } + else { + object[name] = value; + } + } + if (size !== index - startIndex) { + if (isArray) + throw new BSONError('corrupt array bson'); + throw new BSONError('corrupt object bson'); + } + if (!isPossibleDBRef) + return object; + if (isDBRefLike(object)) { + const copy = Object.assign({}, object); + delete copy.$ref; + delete copy.$id; + delete copy.$db; + return new DBRef(object.$ref, object.$id, object.$db, copy); + } + return object; +} +function getValidatedString(buffer, start, end, shouldValidateUtf8) { + const value = ByteUtils.toUTF8(buffer, start, end); + if (shouldValidateUtf8) { + for (let i = 0; i < value.length; i++) { + if (value.charCodeAt(i) === 0xfffd) { + if (!validateUtf8(buffer, start, end)) { + throw new BSONError('Invalid UTF-8 string in BSON document'); + } + break; + } + } + } + return value; +} + +const regexp = /\x00/; +const ignoreKeys = new Set(['$db', '$ref', '$id', '$clusterTime']); +function serializeString(buffer, key, value, index) { + buffer[index++] = BSON_DATA_STRING; + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + index = index + numberOfWrittenBytes + 1; + buffer[index - 1] = 0; + const size = ByteUtils.encodeUTF8Into(buffer, value, index + 4); + buffer[index + 3] = ((size + 1) >> 24) & 0xff; + buffer[index + 2] = ((size + 1) >> 16) & 0xff; + buffer[index + 1] = ((size + 1) >> 8) & 0xff; + buffer[index] = (size + 1) & 0xff; + index = index + 4 + size; + buffer[index++] = 0; + return index; +} +const NUMBER_SPACE = new DataView(new ArrayBuffer(8), 0, 8); +const FOUR_BYTE_VIEW_ON_NUMBER = new Uint8Array(NUMBER_SPACE.buffer, 0, 4); +const EIGHT_BYTE_VIEW_ON_NUMBER = new Uint8Array(NUMBER_SPACE.buffer, 0, 8); +function serializeNumber(buffer, key, value, index) { + const isNegativeZero = Object.is(value, -0); + const type = !isNegativeZero && + Number.isSafeInteger(value) && + value <= BSON_INT32_MAX && + value >= BSON_INT32_MIN + ? BSON_DATA_INT + : BSON_DATA_NUMBER; + if (type === BSON_DATA_INT) { + NUMBER_SPACE.setInt32(0, value, true); + } + else { + NUMBER_SPACE.setFloat64(0, value, true); + } + const bytes = type === BSON_DATA_INT ? FOUR_BYTE_VIEW_ON_NUMBER : EIGHT_BYTE_VIEW_ON_NUMBER; + buffer[index++] = type; + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + index = index + numberOfWrittenBytes; + buffer[index++] = 0x00; + buffer.set(bytes, index); + index += bytes.byteLength; + return index; +} +function serializeBigInt(buffer, key, value, index) { + buffer[index++] = BSON_DATA_LONG; + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + index += numberOfWrittenBytes; + buffer[index++] = 0; + NUMBER_SPACE.setBigInt64(0, value, true); + buffer.set(EIGHT_BYTE_VIEW_ON_NUMBER, index); + index += EIGHT_BYTE_VIEW_ON_NUMBER.byteLength; + return index; +} +function serializeNull(buffer, key, _, index) { + buffer[index++] = BSON_DATA_NULL; + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + return index; +} +function serializeBoolean(buffer, key, value, index) { + buffer[index++] = BSON_DATA_BOOLEAN; + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + buffer[index++] = value ? 1 : 0; + return index; +} +function serializeDate(buffer, key, value, index) { + buffer[index++] = BSON_DATA_DATE; + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + const dateInMilis = Long.fromNumber(value.getTime()); + const lowBits = dateInMilis.getLowBits(); + const highBits = dateInMilis.getHighBits(); + buffer[index++] = lowBits & 0xff; + buffer[index++] = (lowBits >> 8) & 0xff; + buffer[index++] = (lowBits >> 16) & 0xff; + buffer[index++] = (lowBits >> 24) & 0xff; + buffer[index++] = highBits & 0xff; + buffer[index++] = (highBits >> 8) & 0xff; + buffer[index++] = (highBits >> 16) & 0xff; + buffer[index++] = (highBits >> 24) & 0xff; + return index; +} +function serializeRegExp(buffer, key, value, index) { + buffer[index++] = BSON_DATA_REGEXP; + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + if (value.source && value.source.match(regexp) != null) { + throw new BSONError('value ' + value.source + ' must not contain null bytes'); + } + index = index + ByteUtils.encodeUTF8Into(buffer, value.source, index); + buffer[index++] = 0x00; + if (value.ignoreCase) + buffer[index++] = 0x69; + if (value.global) + buffer[index++] = 0x73; + if (value.multiline) + buffer[index++] = 0x6d; + buffer[index++] = 0x00; + return index; +} +function serializeBSONRegExp(buffer, key, value, index) { + buffer[index++] = BSON_DATA_REGEXP; + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + if (value.pattern.match(regexp) != null) { + throw new BSONError('pattern ' + value.pattern + ' must not contain null bytes'); + } + index = index + ByteUtils.encodeUTF8Into(buffer, value.pattern, index); + buffer[index++] = 0x00; + const sortedOptions = value.options.split('').sort().join(''); + index = index + ByteUtils.encodeUTF8Into(buffer, sortedOptions, index); + buffer[index++] = 0x00; + return index; +} +function serializeMinMax(buffer, key, value, index) { + if (value === null) { + buffer[index++] = BSON_DATA_NULL; + } + else if (value._bsontype === 'MinKey') { + buffer[index++] = BSON_DATA_MIN_KEY; + } + else { + buffer[index++] = BSON_DATA_MAX_KEY; + } + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + return index; +} +function serializeObjectId(buffer, key, value, index) { + buffer[index++] = BSON_DATA_OID; + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + if (isUint8Array(value.id)) { + buffer.set(value.id.subarray(0, 12), index); + } + else { + throw new BSONError('object [' + JSON.stringify(value) + '] is not a valid ObjectId'); + } + return index + 12; +} +function serializeBuffer(buffer, key, value, index) { + buffer[index++] = BSON_DATA_BINARY; + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + const size = value.length; + buffer[index++] = size & 0xff; + buffer[index++] = (size >> 8) & 0xff; + buffer[index++] = (size >> 16) & 0xff; + buffer[index++] = (size >> 24) & 0xff; + buffer[index++] = BSON_BINARY_SUBTYPE_DEFAULT; + buffer.set(value, index); + index = index + size; + return index; +} +function serializeObject(buffer, key, value, index, checkKeys, depth, serializeFunctions, ignoreUndefined, path) { + if (path.has(value)) { + throw new BSONError('Cannot convert circular structure to BSON'); + } + path.add(value); + buffer[index++] = Array.isArray(value) ? BSON_DATA_ARRAY : BSON_DATA_OBJECT; + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + const endIndex = serializeInto(buffer, value, checkKeys, index, depth + 1, serializeFunctions, ignoreUndefined, path); + path.delete(value); + return endIndex; +} +function serializeDecimal128(buffer, key, value, index) { + buffer[index++] = BSON_DATA_DECIMAL128; + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + buffer.set(value.bytes.subarray(0, 16), index); + return index + 16; +} +function serializeLong(buffer, key, value, index) { + buffer[index++] = + value._bsontype === 'Long' ? BSON_DATA_LONG : BSON_DATA_TIMESTAMP; + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + const lowBits = value.getLowBits(); + const highBits = value.getHighBits(); + buffer[index++] = lowBits & 0xff; + buffer[index++] = (lowBits >> 8) & 0xff; + buffer[index++] = (lowBits >> 16) & 0xff; + buffer[index++] = (lowBits >> 24) & 0xff; + buffer[index++] = highBits & 0xff; + buffer[index++] = (highBits >> 8) & 0xff; + buffer[index++] = (highBits >> 16) & 0xff; + buffer[index++] = (highBits >> 24) & 0xff; + return index; +} +function serializeInt32(buffer, key, value, index) { + value = value.valueOf(); + buffer[index++] = BSON_DATA_INT; + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + buffer[index++] = value & 0xff; + buffer[index++] = (value >> 8) & 0xff; + buffer[index++] = (value >> 16) & 0xff; + buffer[index++] = (value >> 24) & 0xff; + return index; +} +function serializeDouble(buffer, key, value, index) { + buffer[index++] = BSON_DATA_NUMBER; + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + NUMBER_SPACE.setFloat64(0, value.value, true); + buffer.set(EIGHT_BYTE_VIEW_ON_NUMBER, index); + index = index + 8; + return index; +} +function serializeFunction(buffer, key, value, index) { + buffer[index++] = BSON_DATA_CODE; + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + const functionString = value.toString(); + const size = ByteUtils.encodeUTF8Into(buffer, functionString, index + 4) + 1; + buffer[index] = size & 0xff; + buffer[index + 1] = (size >> 8) & 0xff; + buffer[index + 2] = (size >> 16) & 0xff; + buffer[index + 3] = (size >> 24) & 0xff; + index = index + 4 + size - 1; + buffer[index++] = 0; + return index; +} +function serializeCode(buffer, key, value, index, checkKeys = false, depth = 0, serializeFunctions = false, ignoreUndefined = true, path) { + if (value.scope && typeof value.scope === 'object') { + buffer[index++] = BSON_DATA_CODE_W_SCOPE; + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + let startIndex = index; + const functionString = value.code; + index = index + 4; + const codeSize = ByteUtils.encodeUTF8Into(buffer, functionString, index + 4) + 1; + buffer[index] = codeSize & 0xff; + buffer[index + 1] = (codeSize >> 8) & 0xff; + buffer[index + 2] = (codeSize >> 16) & 0xff; + buffer[index + 3] = (codeSize >> 24) & 0xff; + buffer[index + 4 + codeSize - 1] = 0; + index = index + codeSize + 4; + const endIndex = serializeInto(buffer, value.scope, checkKeys, index, depth + 1, serializeFunctions, ignoreUndefined, path); + index = endIndex - 1; + const totalSize = endIndex - startIndex; + buffer[startIndex++] = totalSize & 0xff; + buffer[startIndex++] = (totalSize >> 8) & 0xff; + buffer[startIndex++] = (totalSize >> 16) & 0xff; + buffer[startIndex++] = (totalSize >> 24) & 0xff; + buffer[index++] = 0; + } + else { + buffer[index++] = BSON_DATA_CODE; + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + const functionString = value.code.toString(); + const size = ByteUtils.encodeUTF8Into(buffer, functionString, index + 4) + 1; + buffer[index] = size & 0xff; + buffer[index + 1] = (size >> 8) & 0xff; + buffer[index + 2] = (size >> 16) & 0xff; + buffer[index + 3] = (size >> 24) & 0xff; + index = index + 4 + size - 1; + buffer[index++] = 0; + } + return index; +} +function serializeBinary(buffer, key, value, index) { + buffer[index++] = BSON_DATA_BINARY; + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + const data = value.buffer; + let size = value.position; + if (value.sub_type === Binary.SUBTYPE_BYTE_ARRAY) + size = size + 4; + buffer[index++] = size & 0xff; + buffer[index++] = (size >> 8) & 0xff; + buffer[index++] = (size >> 16) & 0xff; + buffer[index++] = (size >> 24) & 0xff; + buffer[index++] = value.sub_type; + if (value.sub_type === Binary.SUBTYPE_BYTE_ARRAY) { + size = size - 4; + buffer[index++] = size & 0xff; + buffer[index++] = (size >> 8) & 0xff; + buffer[index++] = (size >> 16) & 0xff; + buffer[index++] = (size >> 24) & 0xff; + } + buffer.set(data, index); + index = index + value.position; + return index; +} +function serializeSymbol(buffer, key, value, index) { + buffer[index++] = BSON_DATA_SYMBOL; + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + const size = ByteUtils.encodeUTF8Into(buffer, value.value, index + 4) + 1; + buffer[index] = size & 0xff; + buffer[index + 1] = (size >> 8) & 0xff; + buffer[index + 2] = (size >> 16) & 0xff; + buffer[index + 3] = (size >> 24) & 0xff; + index = index + 4 + size - 1; + buffer[index++] = 0x00; + return index; +} +function serializeDBRef(buffer, key, value, index, depth, serializeFunctions, path) { + buffer[index++] = BSON_DATA_OBJECT; + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + let startIndex = index; + let output = { + $ref: value.collection || value.namespace, + $id: value.oid + }; + if (value.db != null) { + output.$db = value.db; + } + output = Object.assign(output, value.fields); + const endIndex = serializeInto(buffer, output, false, index, depth + 1, serializeFunctions, true, path); + const size = endIndex - startIndex; + buffer[startIndex++] = size & 0xff; + buffer[startIndex++] = (size >> 8) & 0xff; + buffer[startIndex++] = (size >> 16) & 0xff; + buffer[startIndex++] = (size >> 24) & 0xff; + return endIndex; +} +function serializeInto(buffer, object, checkKeys, startingIndex, depth, serializeFunctions, ignoreUndefined, path) { + if (path == null) { + if (object == null) { + buffer[0] = 0x05; + buffer[1] = 0x00; + buffer[2] = 0x00; + buffer[3] = 0x00; + buffer[4] = 0x00; + return 5; + } + if (Array.isArray(object)) { + throw new BSONError('serialize does not support an array as the root input'); + } + if (typeof object !== 'object') { + throw new BSONError('serialize does not support non-object as the root input'); + } + else if ('_bsontype' in object && typeof object._bsontype === 'string') { + throw new BSONError(`BSON types cannot be serialized as a document`); + } + else if (isDate(object) || + isRegExp(object) || + isUint8Array(object) || + isAnyArrayBuffer(object)) { + throw new BSONError(`date, regexp, typedarray, and arraybuffer cannot be BSON documents`); + } + path = new Set(); + } + path.add(object); + let index = startingIndex + 4; + if (Array.isArray(object)) { + for (let i = 0; i < object.length; i++) { + const key = `${i}`; + let value = object[i]; + if (typeof value?.toBSON === 'function') { + value = value.toBSON(); + } + if (typeof value === 'string') { + index = serializeString(buffer, key, value, index); + } + else if (typeof value === 'number') { + index = serializeNumber(buffer, key, value, index); + } + else if (typeof value === 'bigint') { + index = serializeBigInt(buffer, key, value, index); + } + else if (typeof value === 'boolean') { + index = serializeBoolean(buffer, key, value, index); + } + else if (value instanceof Date || isDate(value)) { + index = serializeDate(buffer, key, value, index); + } + else if (value === undefined) { + index = serializeNull(buffer, key, value, index); + } + else if (value === null) { + index = serializeNull(buffer, key, value, index); + } + else if (isUint8Array(value)) { + index = serializeBuffer(buffer, key, value, index); + } + else if (value instanceof RegExp || isRegExp(value)) { + index = serializeRegExp(buffer, key, value, index); + } + else if (typeof value === 'object' && value._bsontype == null) { + index = serializeObject(buffer, key, value, index, checkKeys, depth, serializeFunctions, ignoreUndefined, path); + } + else if (typeof value === 'object' && + value[Symbol.for('@@mdb.bson.version')] !== BSON_MAJOR_VERSION) { + throw new BSONVersionError(); + } + else if (value._bsontype === 'ObjectId') { + index = serializeObjectId(buffer, key, value, index); + } + else if (value._bsontype === 'Decimal128') { + index = serializeDecimal128(buffer, key, value, index); + } + else if (value._bsontype === 'Long' || value._bsontype === 'Timestamp') { + index = serializeLong(buffer, key, value, index); + } + else if (value._bsontype === 'Double') { + index = serializeDouble(buffer, key, value, index); + } + else if (typeof value === 'function' && serializeFunctions) { + index = serializeFunction(buffer, key, value, index); + } + else if (value._bsontype === 'Code') { + index = serializeCode(buffer, key, value, index, checkKeys, depth, serializeFunctions, ignoreUndefined, path); + } + else if (value._bsontype === 'Binary') { + index = serializeBinary(buffer, key, value, index); + } + else if (value._bsontype === 'BSONSymbol') { + index = serializeSymbol(buffer, key, value, index); + } + else if (value._bsontype === 'DBRef') { + index = serializeDBRef(buffer, key, value, index, depth, serializeFunctions, path); + } + else if (value._bsontype === 'BSONRegExp') { + index = serializeBSONRegExp(buffer, key, value, index); + } + else if (value._bsontype === 'Int32') { + index = serializeInt32(buffer, key, value, index); + } + else if (value._bsontype === 'MinKey' || value._bsontype === 'MaxKey') { + index = serializeMinMax(buffer, key, value, index); + } + else if (typeof value._bsontype !== 'undefined') { + throw new BSONError(`Unrecognized or invalid _bsontype: ${String(value._bsontype)}`); + } + } + } + else if (object instanceof Map || isMap(object)) { + const iterator = object.entries(); + let done = false; + while (!done) { + const entry = iterator.next(); + done = !!entry.done; + if (done) + continue; + const key = entry.value[0]; + let value = entry.value[1]; + if (typeof value?.toBSON === 'function') { + value = value.toBSON(); + } + const type = typeof value; + if (typeof key === 'string' && !ignoreKeys.has(key)) { + if (key.match(regexp) != null) { + throw new BSONError('key ' + key + ' must not contain null bytes'); + } + if (checkKeys) { + if ('$' === key[0]) { + throw new BSONError('key ' + key + " must not start with '$'"); + } + else if (~key.indexOf('.')) { + throw new BSONError('key ' + key + " must not contain '.'"); + } + } + } + if (type === 'string') { + index = serializeString(buffer, key, value, index); + } + else if (type === 'number') { + index = serializeNumber(buffer, key, value, index); + } + else if (type === 'bigint') { + index = serializeBigInt(buffer, key, value, index); + } + else if (type === 'boolean') { + index = serializeBoolean(buffer, key, value, index); + } + else if (value instanceof Date || isDate(value)) { + index = serializeDate(buffer, key, value, index); + } + else if (value === null || (value === undefined && ignoreUndefined === false)) { + index = serializeNull(buffer, key, value, index); + } + else if (isUint8Array(value)) { + index = serializeBuffer(buffer, key, value, index); + } + else if (value instanceof RegExp || isRegExp(value)) { + index = serializeRegExp(buffer, key, value, index); + } + else if (type === 'object' && value._bsontype == null) { + index = serializeObject(buffer, key, value, index, checkKeys, depth, serializeFunctions, ignoreUndefined, path); + } + else if (typeof value === 'object' && + value[Symbol.for('@@mdb.bson.version')] !== BSON_MAJOR_VERSION) { + throw new BSONVersionError(); + } + else if (value._bsontype === 'ObjectId') { + index = serializeObjectId(buffer, key, value, index); + } + else if (type === 'object' && value._bsontype === 'Decimal128') { + index = serializeDecimal128(buffer, key, value, index); + } + else if (value._bsontype === 'Long' || value._bsontype === 'Timestamp') { + index = serializeLong(buffer, key, value, index); + } + else if (value._bsontype === 'Double') { + index = serializeDouble(buffer, key, value, index); + } + else if (value._bsontype === 'Code') { + index = serializeCode(buffer, key, value, index, checkKeys, depth, serializeFunctions, ignoreUndefined, path); + } + else if (typeof value === 'function' && serializeFunctions) { + index = serializeFunction(buffer, key, value, index); + } + else if (value._bsontype === 'Binary') { + index = serializeBinary(buffer, key, value, index); + } + else if (value._bsontype === 'BSONSymbol') { + index = serializeSymbol(buffer, key, value, index); + } + else if (value._bsontype === 'DBRef') { + index = serializeDBRef(buffer, key, value, index, depth, serializeFunctions, path); + } + else if (value._bsontype === 'BSONRegExp') { + index = serializeBSONRegExp(buffer, key, value, index); + } + else if (value._bsontype === 'Int32') { + index = serializeInt32(buffer, key, value, index); + } + else if (value._bsontype === 'MinKey' || value._bsontype === 'MaxKey') { + index = serializeMinMax(buffer, key, value, index); + } + else if (typeof value._bsontype !== 'undefined') { + throw new BSONError(`Unrecognized or invalid _bsontype: ${String(value._bsontype)}`); + } + } + } + else { + if (typeof object?.toBSON === 'function') { + object = object.toBSON(); + if (object != null && typeof object !== 'object') { + throw new BSONError('toBSON function did not return an object'); + } + } + for (const key of Object.keys(object)) { + let value = object[key]; + if (typeof value?.toBSON === 'function') { + value = value.toBSON(); + } + const type = typeof value; + if (typeof key === 'string' && !ignoreKeys.has(key)) { + if (key.match(regexp) != null) { + throw new BSONError('key ' + key + ' must not contain null bytes'); + } + if (checkKeys) { + if ('$' === key[0]) { + throw new BSONError('key ' + key + " must not start with '$'"); + } + else if (~key.indexOf('.')) { + throw new BSONError('key ' + key + " must not contain '.'"); + } + } + } + if (type === 'string') { + index = serializeString(buffer, key, value, index); + } + else if (type === 'number') { + index = serializeNumber(buffer, key, value, index); + } + else if (type === 'bigint') { + index = serializeBigInt(buffer, key, value, index); + } + else if (type === 'boolean') { + index = serializeBoolean(buffer, key, value, index); + } + else if (value instanceof Date || isDate(value)) { + index = serializeDate(buffer, key, value, index); + } + else if (value === undefined) { + if (ignoreUndefined === false) + index = serializeNull(buffer, key, value, index); + } + else if (value === null) { + index = serializeNull(buffer, key, value, index); + } + else if (isUint8Array(value)) { + index = serializeBuffer(buffer, key, value, index); + } + else if (value instanceof RegExp || isRegExp(value)) { + index = serializeRegExp(buffer, key, value, index); + } + else if (type === 'object' && value._bsontype == null) { + index = serializeObject(buffer, key, value, index, checkKeys, depth, serializeFunctions, ignoreUndefined, path); + } + else if (typeof value === 'object' && + value[Symbol.for('@@mdb.bson.version')] !== BSON_MAJOR_VERSION) { + throw new BSONVersionError(); + } + else if (value._bsontype === 'ObjectId') { + index = serializeObjectId(buffer, key, value, index); + } + else if (type === 'object' && value._bsontype === 'Decimal128') { + index = serializeDecimal128(buffer, key, value, index); + } + else if (value._bsontype === 'Long' || value._bsontype === 'Timestamp') { + index = serializeLong(buffer, key, value, index); + } + else if (value._bsontype === 'Double') { + index = serializeDouble(buffer, key, value, index); + } + else if (value._bsontype === 'Code') { + index = serializeCode(buffer, key, value, index, checkKeys, depth, serializeFunctions, ignoreUndefined, path); + } + else if (typeof value === 'function' && serializeFunctions) { + index = serializeFunction(buffer, key, value, index); + } + else if (value._bsontype === 'Binary') { + index = serializeBinary(buffer, key, value, index); + } + else if (value._bsontype === 'BSONSymbol') { + index = serializeSymbol(buffer, key, value, index); + } + else if (value._bsontype === 'DBRef') { + index = serializeDBRef(buffer, key, value, index, depth, serializeFunctions, path); + } + else if (value._bsontype === 'BSONRegExp') { + index = serializeBSONRegExp(buffer, key, value, index); + } + else if (value._bsontype === 'Int32') { + index = serializeInt32(buffer, key, value, index); + } + else if (value._bsontype === 'MinKey' || value._bsontype === 'MaxKey') { + index = serializeMinMax(buffer, key, value, index); + } + else if (typeof value._bsontype !== 'undefined') { + throw new BSONError(`Unrecognized or invalid _bsontype: ${String(value._bsontype)}`); + } + } + } + path.delete(object); + buffer[index++] = 0x00; + const size = index - startingIndex; + buffer[startingIndex++] = size & 0xff; + buffer[startingIndex++] = (size >> 8) & 0xff; + buffer[startingIndex++] = (size >> 16) & 0xff; + buffer[startingIndex++] = (size >> 24) & 0xff; + return index; +} + +function isBSONType(value) { + return (value != null && + typeof value === 'object' && + '_bsontype' in value && + typeof value._bsontype === 'string'); +} +const keysToCodecs = { + $oid: ObjectId, + $binary: Binary, + $uuid: Binary, + $symbol: BSONSymbol, + $numberInt: Int32, + $numberDecimal: Decimal128, + $numberDouble: Double, + $numberLong: Long, + $minKey: MinKey, + $maxKey: MaxKey, + $regex: BSONRegExp, + $regularExpression: BSONRegExp, + $timestamp: Timestamp +}; +function deserializeValue(value, options = {}) { + if (typeof value === 'number') { + const in32BitRange = value <= BSON_INT32_MAX && value >= BSON_INT32_MIN; + const in64BitRange = value <= BSON_INT64_MAX && value >= BSON_INT64_MIN; + if (options.relaxed || options.legacy) { + return value; + } + if (Number.isInteger(value) && !Object.is(value, -0)) { + if (in32BitRange) { + return new Int32(value); + } + if (in64BitRange) { + if (options.useBigInt64) { + return BigInt(value); + } + return Long.fromNumber(value); + } + } + return new Double(value); + } + if (value == null || typeof value !== 'object') + return value; + if (value.$undefined) + return null; + const keys = Object.keys(value).filter(k => k.startsWith('$') && value[k] != null); + for (let i = 0; i < keys.length; i++) { + const c = keysToCodecs[keys[i]]; + if (c) + return c.fromExtendedJSON(value, options); + } + if (value.$date != null) { + const d = value.$date; + const date = new Date(); + if (options.legacy) { + if (typeof d === 'number') + date.setTime(d); + else if (typeof d === 'string') + date.setTime(Date.parse(d)); + else if (typeof d === 'bigint') + date.setTime(Number(d)); + else + throw new BSONRuntimeError(`Unrecognized type for EJSON date: ${typeof d}`); + } + else { + if (typeof d === 'string') + date.setTime(Date.parse(d)); + else if (Long.isLong(d)) + date.setTime(d.toNumber()); + else if (typeof d === 'number' && options.relaxed) + date.setTime(d); + else if (typeof d === 'bigint') + date.setTime(Number(d)); + else + throw new BSONRuntimeError(`Unrecognized type for EJSON date: ${typeof d}`); + } + return date; + } + if (value.$code != null) { + const copy = Object.assign({}, value); + if (value.$scope) { + copy.$scope = deserializeValue(value.$scope); + } + return Code.fromExtendedJSON(value); + } + if (isDBRefLike(value) || value.$dbPointer) { + const v = value.$ref ? value : value.$dbPointer; + if (v instanceof DBRef) + return v; + const dollarKeys = Object.keys(v).filter(k => k.startsWith('$')); + let valid = true; + dollarKeys.forEach(k => { + if (['$ref', '$id', '$db'].indexOf(k) === -1) + valid = false; + }); + if (valid) + return DBRef.fromExtendedJSON(v); + } + return value; +} +function serializeArray(array, options) { + return array.map((v, index) => { + options.seenObjects.push({ propertyName: `index ${index}`, obj: null }); + try { + return serializeValue(v, options); + } + finally { + options.seenObjects.pop(); + } + }); +} +function getISOString(date) { + const isoStr = date.toISOString(); + return date.getUTCMilliseconds() !== 0 ? isoStr : isoStr.slice(0, -5) + 'Z'; +} +function serializeValue(value, options) { + if (value instanceof Map || isMap(value)) { + const obj = Object.create(null); + for (const [k, v] of value) { + if (typeof k !== 'string') { + throw new BSONError('Can only serialize maps with string keys'); + } + obj[k] = v; + } + return serializeValue(obj, options); + } + if ((typeof value === 'object' || typeof value === 'function') && value !== null) { + const index = options.seenObjects.findIndex(entry => entry.obj === value); + if (index !== -1) { + const props = options.seenObjects.map(entry => entry.propertyName); + const leadingPart = props + .slice(0, index) + .map(prop => `${prop} -> `) + .join(''); + const alreadySeen = props[index]; + const circularPart = ' -> ' + + props + .slice(index + 1, props.length - 1) + .map(prop => `${prop} -> `) + .join(''); + const current = props[props.length - 1]; + const leadingSpace = ' '.repeat(leadingPart.length + alreadySeen.length / 2); + const dashes = '-'.repeat(circularPart.length + (alreadySeen.length + current.length) / 2 - 1); + throw new BSONError('Converting circular structure to EJSON:\n' + + ` ${leadingPart}${alreadySeen}${circularPart}${current}\n` + + ` ${leadingSpace}\\${dashes}/`); + } + options.seenObjects[options.seenObjects.length - 1].obj = value; + } + if (Array.isArray(value)) + return serializeArray(value, options); + if (value === undefined) + return null; + if (value instanceof Date || isDate(value)) { + const dateNum = value.getTime(), inRange = dateNum > -1 && dateNum < 253402318800000; + if (options.legacy) { + return options.relaxed && inRange + ? { $date: value.getTime() } + : { $date: getISOString(value) }; + } + return options.relaxed && inRange + ? { $date: getISOString(value) } + : { $date: { $numberLong: value.getTime().toString() } }; + } + if (typeof value === 'number' && (!options.relaxed || !isFinite(value))) { + if (Number.isInteger(value) && !Object.is(value, -0)) { + if (value >= BSON_INT32_MIN && value <= BSON_INT32_MAX) { + return { $numberInt: value.toString() }; + } + if (value >= BSON_INT64_MIN && value <= BSON_INT64_MAX) { + return { $numberLong: value.toString() }; + } + } + return { $numberDouble: Object.is(value, -0) ? '-0.0' : value.toString() }; + } + if (typeof value === 'bigint') { + if (!options.relaxed) { + return { $numberLong: BigInt.asIntN(64, value).toString() }; + } + return Number(BigInt.asIntN(64, value)); + } + if (value instanceof RegExp || isRegExp(value)) { + let flags = value.flags; + if (flags === undefined) { + const match = value.toString().match(/[gimuy]*$/); + if (match) { + flags = match[0]; + } + } + const rx = new BSONRegExp(value.source, flags); + return rx.toExtendedJSON(options); + } + if (value != null && typeof value === 'object') + return serializeDocument(value, options); + return value; +} +const BSON_TYPE_MAPPINGS = { + Binary: (o) => new Binary(o.value(), o.sub_type), + Code: (o) => new Code(o.code, o.scope), + DBRef: (o) => new DBRef(o.collection || o.namespace, o.oid, o.db, o.fields), + Decimal128: (o) => new Decimal128(o.bytes), + Double: (o) => new Double(o.value), + Int32: (o) => new Int32(o.value), + Long: (o) => Long.fromBits(o.low != null ? o.low : o.low_, o.low != null ? o.high : o.high_, o.low != null ? o.unsigned : o.unsigned_), + MaxKey: () => new MaxKey(), + MinKey: () => new MinKey(), + ObjectId: (o) => new ObjectId(o), + BSONRegExp: (o) => new BSONRegExp(o.pattern, o.options), + BSONSymbol: (o) => new BSONSymbol(o.value), + Timestamp: (o) => Timestamp.fromBits(o.low, o.high) +}; +function serializeDocument(doc, options) { + if (doc == null || typeof doc !== 'object') + throw new BSONError('not an object instance'); + const bsontype = doc._bsontype; + if (typeof bsontype === 'undefined') { + const _doc = {}; + for (const name of Object.keys(doc)) { + options.seenObjects.push({ propertyName: name, obj: null }); + try { + const value = serializeValue(doc[name], options); + if (name === '__proto__') { + Object.defineProperty(_doc, name, { + value, + writable: true, + enumerable: true, + configurable: true + }); + } + else { + _doc[name] = value; + } + } + finally { + options.seenObjects.pop(); + } + } + return _doc; + } + else if (doc != null && + typeof doc === 'object' && + typeof doc._bsontype === 'string' && + doc[Symbol.for('@@mdb.bson.version')] !== BSON_MAJOR_VERSION) { + throw new BSONVersionError(); + } + else if (isBSONType(doc)) { + let outDoc = doc; + if (typeof outDoc.toExtendedJSON !== 'function') { + const mapper = BSON_TYPE_MAPPINGS[doc._bsontype]; + if (!mapper) { + throw new BSONError('Unrecognized or invalid _bsontype: ' + doc._bsontype); + } + outDoc = mapper(outDoc); + } + if (bsontype === 'Code' && outDoc.scope) { + outDoc = new Code(outDoc.code, serializeValue(outDoc.scope, options)); + } + else if (bsontype === 'DBRef' && outDoc.oid) { + outDoc = new DBRef(serializeValue(outDoc.collection, options), serializeValue(outDoc.oid, options), serializeValue(outDoc.db, options), serializeValue(outDoc.fields, options)); + } + return outDoc.toExtendedJSON(options); + } + else { + throw new BSONError('_bsontype must be a string, but was: ' + typeof bsontype); + } +} +function parse(text, options) { + const ejsonOptions = { + useBigInt64: options?.useBigInt64 ?? false, + relaxed: options?.relaxed ?? true, + legacy: options?.legacy ?? false + }; + return JSON.parse(text, (key, value) => { + if (key.indexOf('\x00') !== -1) { + throw new BSONError(`BSON Document field names cannot contain null bytes, found: ${JSON.stringify(key)}`); + } + return deserializeValue(value, ejsonOptions); + }); +} +function stringify(value, replacer, space, options) { + if (space != null && typeof space === 'object') { + options = space; + space = 0; + } + if (replacer != null && typeof replacer === 'object' && !Array.isArray(replacer)) { + options = replacer; + replacer = undefined; + space = 0; + } + const serializeOptions = Object.assign({ relaxed: true, legacy: false }, options, { + seenObjects: [{ propertyName: '(root)', obj: null }] + }); + const doc = serializeValue(value, serializeOptions); + return JSON.stringify(doc, replacer, space); +} +function EJSONserialize(value, options) { + options = options || {}; + return JSON.parse(stringify(value, options)); +} +function EJSONdeserialize(ejson, options) { + options = options || {}; + return parse(JSON.stringify(ejson), options); +} +const EJSON = Object.create(null); +EJSON.parse = parse; +EJSON.stringify = stringify; +EJSON.serialize = EJSONserialize; +EJSON.deserialize = EJSONdeserialize; +Object.freeze(EJSON); + +const MAXSIZE = 1024 * 1024 * 17; +let buffer = ByteUtils.allocate(MAXSIZE); +function setInternalBufferSize(size) { + if (buffer.length < size) { + buffer = ByteUtils.allocate(size); + } +} +function serialize(object, options = {}) { + const checkKeys = typeof options.checkKeys === 'boolean' ? options.checkKeys : false; + const serializeFunctions = typeof options.serializeFunctions === 'boolean' ? options.serializeFunctions : false; + const ignoreUndefined = typeof options.ignoreUndefined === 'boolean' ? options.ignoreUndefined : true; + const minInternalBufferSize = typeof options.minInternalBufferSize === 'number' ? options.minInternalBufferSize : MAXSIZE; + if (buffer.length < minInternalBufferSize) { + buffer = ByteUtils.allocate(minInternalBufferSize); + } + const serializationIndex = serializeInto(buffer, object, checkKeys, 0, 0, serializeFunctions, ignoreUndefined, null); + const finishedBuffer = ByteUtils.allocate(serializationIndex); + finishedBuffer.set(buffer.subarray(0, serializationIndex), 0); + return finishedBuffer; +} +function serializeWithBufferAndIndex(object, finalBuffer, options = {}) { + const checkKeys = typeof options.checkKeys === 'boolean' ? options.checkKeys : false; + const serializeFunctions = typeof options.serializeFunctions === 'boolean' ? options.serializeFunctions : false; + const ignoreUndefined = typeof options.ignoreUndefined === 'boolean' ? options.ignoreUndefined : true; + const startIndex = typeof options.index === 'number' ? options.index : 0; + const serializationIndex = serializeInto(buffer, object, checkKeys, 0, 0, serializeFunctions, ignoreUndefined, null); + finalBuffer.set(buffer.subarray(0, serializationIndex), startIndex); + return startIndex + serializationIndex - 1; +} +function deserialize(buffer, options = {}) { + return internalDeserialize(ByteUtils.toLocalBufferType(buffer), options); +} +function calculateObjectSize(object, options = {}) { + options = options || {}; + const serializeFunctions = typeof options.serializeFunctions === 'boolean' ? options.serializeFunctions : false; + const ignoreUndefined = typeof options.ignoreUndefined === 'boolean' ? options.ignoreUndefined : true; + return internalCalculateObjectSize(object, serializeFunctions, ignoreUndefined); +} +function deserializeStream(data, startIndex, numberOfDocuments, documents, docStartIndex, options) { + const internalOptions = Object.assign({ allowObjectSmallerThanBufferSize: true, index: 0 }, options); + const bufferData = ByteUtils.toLocalBufferType(data); + let index = startIndex; + for (let i = 0; i < numberOfDocuments; i++) { + const size = bufferData[index] | + (bufferData[index + 1] << 8) | + (bufferData[index + 2] << 16) | + (bufferData[index + 3] << 24); + internalOptions.index = index; + documents[docStartIndex + i] = internalDeserialize(bufferData, internalOptions); + index = index + size; + } + return index; +} + +var bson = /*#__PURE__*/Object.freeze({ + __proto__: null, + BSONError: BSONError, + BSONRegExp: BSONRegExp, + BSONRuntimeError: BSONRuntimeError, + BSONSymbol: BSONSymbol, + BSONType: BSONType, + BSONValue: BSONValue, + BSONVersionError: BSONVersionError, + Binary: Binary, + Code: Code, + DBRef: DBRef, + Decimal128: Decimal128, + Double: Double, + EJSON: EJSON, + Int32: Int32, + Long: Long, + MaxKey: MaxKey, + MinKey: MinKey, + ObjectId: ObjectId, + Timestamp: Timestamp, + UUID: UUID, + calculateObjectSize: calculateObjectSize, + deserialize: deserialize, + deserializeStream: deserializeStream, + serialize: serialize, + serializeWithBufferAndIndex: serializeWithBufferAndIndex, + setInternalBufferSize: setInternalBufferSize +}); + +export { bson as BSON, BSONError, BSONRegExp, BSONRuntimeError, BSONSymbol, BSONType, BSONValue, BSONVersionError, Binary, Code, DBRef, Decimal128, Double, EJSON, Int32, Long, MaxKey, MinKey, ObjectId, Timestamp, UUID, calculateObjectSize, deserialize, deserializeStream, serialize, serializeWithBufferAndIndex, setInternalBufferSize }; +//# sourceMappingURL=bson.mjs.map diff --git a/Url-Shortner/node_modules/bson/lib/bson.mjs.map b/Url-Shortner/node_modules/bson/lib/bson.mjs.map new file mode 100644 index 0000000..b50da01 --- /dev/null +++ b/Url-Shortner/node_modules/bson/lib/bson.mjs.map @@ -0,0 +1 @@ +{"version":3,"file":"bson.mjs","sources":["../src/parser/utils.ts","../src/constants.ts","../src/error.ts","../src/utils/node_byte_utils.ts","../src/utils/web_byte_utils.ts","../src/utils/byte_utils.ts","../src/bson_value.ts","../src/binary.ts","../src/code.ts","../src/db_ref.ts","../src/long.ts","../src/decimal128.ts","../src/double.ts","../src/int_32.ts","../src/max_key.ts","../src/min_key.ts","../src/objectid.ts","../src/parser/calculate_size.ts","../src/regexp.ts","../src/symbol.ts","../src/timestamp.ts","../src/validate_utf8.ts","../src/parser/deserializer.ts","../src/parser/serializer.ts","../src/extended_json.ts","../src/bson.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"names":["constants.JS_INT_MIN","constants.JS_INT_MAX","constants.BSON_INT32_MIN","constants.BSON_INT32_MAX","constants.BSON_MAJOR_VERSION","constants.BSON_DATA_STRING","constants.BSON_DATA_OID","constants.BSON_DATA_INT","constants.BSON_DATA_NUMBER","constants.BSON_DATA_DATE","constants.BSON_DATA_BOOLEAN","constants.BSON_DATA_OBJECT","constants.BSON_DATA_ARRAY","constants.BSON_DATA_UNDEFINED","constants.BSON_DATA_NULL","constants.BSON_DATA_LONG","constants.BSON_DATA_DECIMAL128","constants.BSON_DATA_BINARY","constants.BSON_BINARY_SUBTYPE_UUID_NEW","constants.BSON_DATA_REGEXP","constants.BSON_DATA_SYMBOL","constants.BSON_DATA_TIMESTAMP","constants.BSON_DATA_MIN_KEY","constants.BSON_DATA_MAX_KEY","constants.BSON_DATA_CODE","constants.BSON_DATA_CODE_W_SCOPE","constants.BSON_DATA_DBPOINTER","constants.BSON_BINARY_SUBTYPE_DEFAULT"],"mappings":"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AAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,E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"} \ No newline at end of file diff --git a/Url-Shortner/node_modules/bson/lib/bson.rn.cjs b/Url-Shortner/node_modules/bson/lib/bson.rn.cjs new file mode 100644 index 0000000..7eae520 --- /dev/null +++ b/Url-Shortner/node_modules/bson/lib/bson.rn.cjs @@ -0,0 +1,4159 @@ +'use strict'; + +function isAnyArrayBuffer(value) { + return ['[object ArrayBuffer]', '[object SharedArrayBuffer]'].includes(Object.prototype.toString.call(value)); +} +function isUint8Array(value) { + return Object.prototype.toString.call(value) === '[object Uint8Array]'; +} +function isBigInt64Array(value) { + return Object.prototype.toString.call(value) === '[object BigInt64Array]'; +} +function isBigUInt64Array(value) { + return Object.prototype.toString.call(value) === '[object BigUint64Array]'; +} +function isRegExp(d) { + return Object.prototype.toString.call(d) === '[object RegExp]'; +} +function isMap(d) { + return Object.prototype.toString.call(d) === '[object Map]'; +} +function isDate(d) { + return Object.prototype.toString.call(d) === '[object Date]'; +} + +const BSON_MAJOR_VERSION = 5; +const BSON_INT32_MAX = 0x7fffffff; +const BSON_INT32_MIN = -0x80000000; +const BSON_INT64_MAX = Math.pow(2, 63) - 1; +const BSON_INT64_MIN = -Math.pow(2, 63); +const JS_INT_MAX = Math.pow(2, 53); +const JS_INT_MIN = -Math.pow(2, 53); +const BSON_DATA_NUMBER = 1; +const BSON_DATA_STRING = 2; +const BSON_DATA_OBJECT = 3; +const BSON_DATA_ARRAY = 4; +const BSON_DATA_BINARY = 5; +const BSON_DATA_UNDEFINED = 6; +const BSON_DATA_OID = 7; +const BSON_DATA_BOOLEAN = 8; +const BSON_DATA_DATE = 9; +const BSON_DATA_NULL = 10; +const BSON_DATA_REGEXP = 11; +const BSON_DATA_DBPOINTER = 12; +const BSON_DATA_CODE = 13; +const BSON_DATA_SYMBOL = 14; +const BSON_DATA_CODE_W_SCOPE = 15; +const BSON_DATA_INT = 16; +const BSON_DATA_TIMESTAMP = 17; +const BSON_DATA_LONG = 18; +const BSON_DATA_DECIMAL128 = 19; +const BSON_DATA_MIN_KEY = 0xff; +const BSON_DATA_MAX_KEY = 0x7f; +const BSON_BINARY_SUBTYPE_DEFAULT = 0; +const BSON_BINARY_SUBTYPE_FUNCTION = 1; +const BSON_BINARY_SUBTYPE_BYTE_ARRAY = 2; +const BSON_BINARY_SUBTYPE_UUID = 3; +const BSON_BINARY_SUBTYPE_UUID_NEW = 4; +const BSON_BINARY_SUBTYPE_MD5 = 5; +const BSON_BINARY_SUBTYPE_ENCRYPTED = 6; +const BSON_BINARY_SUBTYPE_COLUMN = 7; +const BSON_BINARY_SUBTYPE_USER_DEFINED = 128; +const BSONType = Object.freeze({ + double: 1, + string: 2, + object: 3, + array: 4, + binData: 5, + undefined: 6, + objectId: 7, + bool: 8, + date: 9, + null: 10, + regex: 11, + dbPointer: 12, + javascript: 13, + symbol: 14, + javascriptWithScope: 15, + int: 16, + timestamp: 17, + long: 18, + decimal: 19, + minKey: -1, + maxKey: 127 +}); + +class BSONError extends Error { + get bsonError() { + return true; + } + get name() { + return 'BSONError'; + } + constructor(message) { + super(message); + } + static isBSONError(value) { + return (value != null && + typeof value === 'object' && + 'bsonError' in value && + value.bsonError === true && + 'name' in value && + 'message' in value && + 'stack' in value); + } +} +class BSONVersionError extends BSONError { + get name() { + return 'BSONVersionError'; + } + constructor() { + super(`Unsupported BSON version, bson types must be from bson ${BSON_MAJOR_VERSION}.0 or later`); + } +} +class BSONRuntimeError extends BSONError { + get name() { + return 'BSONRuntimeError'; + } + constructor(message) { + super(message); + } +} + +function nodejsMathRandomBytes(byteLength) { + return nodeJsByteUtils.fromNumberArray(Array.from({ length: byteLength }, () => Math.floor(Math.random() * 256))); +} +const nodejsRandomBytes = (() => { + try { + return require('crypto').randomBytes; + } + catch { + return nodejsMathRandomBytes; + } +})(); +const nodeJsByteUtils = { + toLocalBufferType(potentialBuffer) { + if (Buffer.isBuffer(potentialBuffer)) { + return potentialBuffer; + } + if (ArrayBuffer.isView(potentialBuffer)) { + return Buffer.from(potentialBuffer.buffer, potentialBuffer.byteOffset, potentialBuffer.byteLength); + } + const stringTag = potentialBuffer?.[Symbol.toStringTag] ?? Object.prototype.toString.call(potentialBuffer); + if (stringTag === 'ArrayBuffer' || + stringTag === 'SharedArrayBuffer' || + stringTag === '[object ArrayBuffer]' || + stringTag === '[object SharedArrayBuffer]') { + return Buffer.from(potentialBuffer); + } + throw new BSONError(`Cannot create Buffer from ${String(potentialBuffer)}`); + }, + allocate(size) { + return Buffer.alloc(size); + }, + equals(a, b) { + return nodeJsByteUtils.toLocalBufferType(a).equals(b); + }, + fromNumberArray(array) { + return Buffer.from(array); + }, + fromBase64(base64) { + return Buffer.from(base64, 'base64'); + }, + toBase64(buffer) { + return nodeJsByteUtils.toLocalBufferType(buffer).toString('base64'); + }, + fromISO88591(codePoints) { + return Buffer.from(codePoints, 'binary'); + }, + toISO88591(buffer) { + return nodeJsByteUtils.toLocalBufferType(buffer).toString('binary'); + }, + fromHex(hex) { + return Buffer.from(hex, 'hex'); + }, + toHex(buffer) { + return nodeJsByteUtils.toLocalBufferType(buffer).toString('hex'); + }, + fromUTF8(text) { + return Buffer.from(text, 'utf8'); + }, + toUTF8(buffer, start, end) { + return nodeJsByteUtils.toLocalBufferType(buffer).toString('utf8', start, end); + }, + utf8ByteLength(input) { + return Buffer.byteLength(input, 'utf8'); + }, + encodeUTF8Into(buffer, source, byteOffset) { + return nodeJsByteUtils.toLocalBufferType(buffer).write(source, byteOffset, undefined, 'utf8'); + }, + randomBytes: nodejsRandomBytes +}; + +const { TextEncoder, TextDecoder } = require('../vendor/text-encoding'); +const { encode: btoa, decode: atob } = require('../vendor/base64'); +function isReactNative() { + const { navigator } = globalThis; + return typeof navigator === 'object' && navigator.product === 'ReactNative'; +} +function webMathRandomBytes(byteLength) { + if (byteLength < 0) { + throw new RangeError(`The argument 'byteLength' is invalid. Received ${byteLength}`); + } + return webByteUtils.fromNumberArray(Array.from({ length: byteLength }, () => Math.floor(Math.random() * 256))); +} +const webRandomBytes = (() => { + const { crypto } = globalThis; + if (crypto != null && typeof crypto.getRandomValues === 'function') { + return (byteLength) => { + return crypto.getRandomValues(webByteUtils.allocate(byteLength)); + }; + } + else { + if (isReactNative()) { + const { console } = globalThis; + console?.warn?.('BSON: For React Native please polyfill crypto.getRandomValues, e.g. using: https://www.npmjs.com/package/react-native-get-random-values.'); + } + return webMathRandomBytes; + } +})(); +const HEX_DIGIT = /(\d|[a-f])/i; +const webByteUtils = { + toLocalBufferType(potentialUint8array) { + const stringTag = potentialUint8array?.[Symbol.toStringTag] ?? + Object.prototype.toString.call(potentialUint8array); + if (stringTag === 'Uint8Array') { + return potentialUint8array; + } + if (ArrayBuffer.isView(potentialUint8array)) { + return new Uint8Array(potentialUint8array.buffer.slice(potentialUint8array.byteOffset, potentialUint8array.byteOffset + potentialUint8array.byteLength)); + } + if (stringTag === 'ArrayBuffer' || + stringTag === 'SharedArrayBuffer' || + stringTag === '[object ArrayBuffer]' || + stringTag === '[object SharedArrayBuffer]') { + return new Uint8Array(potentialUint8array); + } + throw new BSONError(`Cannot make a Uint8Array from ${String(potentialUint8array)}`); + }, + allocate(size) { + if (typeof size !== 'number') { + throw new TypeError(`The "size" argument must be of type number. Received ${String(size)}`); + } + return new Uint8Array(size); + }, + equals(a, b) { + if (a.byteLength !== b.byteLength) { + return false; + } + for (let i = 0; i < a.byteLength; i++) { + if (a[i] !== b[i]) { + return false; + } + } + return true; + }, + fromNumberArray(array) { + return Uint8Array.from(array); + }, + fromBase64(base64) { + return Uint8Array.from(atob(base64), c => c.charCodeAt(0)); + }, + toBase64(uint8array) { + return btoa(webByteUtils.toISO88591(uint8array)); + }, + fromISO88591(codePoints) { + return Uint8Array.from(codePoints, c => c.charCodeAt(0) & 0xff); + }, + toISO88591(uint8array) { + return Array.from(Uint16Array.from(uint8array), b => String.fromCharCode(b)).join(''); + }, + fromHex(hex) { + const evenLengthHex = hex.length % 2 === 0 ? hex : hex.slice(0, hex.length - 1); + const buffer = []; + for (let i = 0; i < evenLengthHex.length; i += 2) { + const firstDigit = evenLengthHex[i]; + const secondDigit = evenLengthHex[i + 1]; + if (!HEX_DIGIT.test(firstDigit)) { + break; + } + if (!HEX_DIGIT.test(secondDigit)) { + break; + } + const hexDigit = Number.parseInt(`${firstDigit}${secondDigit}`, 16); + buffer.push(hexDigit); + } + return Uint8Array.from(buffer); + }, + toHex(uint8array) { + return Array.from(uint8array, byte => byte.toString(16).padStart(2, '0')).join(''); + }, + fromUTF8(text) { + return new TextEncoder().encode(text); + }, + toUTF8(uint8array, start, end) { + return new TextDecoder('utf8', { fatal: false }).decode(uint8array.slice(start, end)); + }, + utf8ByteLength(input) { + return webByteUtils.fromUTF8(input).byteLength; + }, + encodeUTF8Into(buffer, source, byteOffset) { + const bytes = webByteUtils.fromUTF8(source); + buffer.set(bytes, byteOffset); + return bytes.byteLength; + }, + randomBytes: webRandomBytes +}; + +const hasGlobalBuffer = typeof Buffer === 'function' && Buffer.prototype?._isBuffer !== true; +const ByteUtils = hasGlobalBuffer ? nodeJsByteUtils : webByteUtils; +class BSONDataView extends DataView { + static fromUint8Array(input) { + return new DataView(input.buffer, input.byteOffset, input.byteLength); + } +} + +class BSONValue { + get [Symbol.for('@@mdb.bson.version')]() { + return BSON_MAJOR_VERSION; + } +} + +class Binary extends BSONValue { + get _bsontype() { + return 'Binary'; + } + constructor(buffer, subType) { + super(); + if (!(buffer == null) && + !(typeof buffer === 'string') && + !ArrayBuffer.isView(buffer) && + !(buffer instanceof ArrayBuffer) && + !Array.isArray(buffer)) { + throw new BSONError('Binary can only be constructed from string, Buffer, TypedArray, or Array'); + } + this.sub_type = subType ?? Binary.BSON_BINARY_SUBTYPE_DEFAULT; + if (buffer == null) { + this.buffer = ByteUtils.allocate(Binary.BUFFER_SIZE); + this.position = 0; + } + else { + if (typeof buffer === 'string') { + this.buffer = ByteUtils.fromISO88591(buffer); + } + else if (Array.isArray(buffer)) { + this.buffer = ByteUtils.fromNumberArray(buffer); + } + else { + this.buffer = ByteUtils.toLocalBufferType(buffer); + } + this.position = this.buffer.byteLength; + } + } + put(byteValue) { + if (typeof byteValue === 'string' && byteValue.length !== 1) { + throw new BSONError('only accepts single character String'); + } + else if (typeof byteValue !== 'number' && byteValue.length !== 1) + throw new BSONError('only accepts single character Uint8Array or Array'); + let decodedByte; + if (typeof byteValue === 'string') { + decodedByte = byteValue.charCodeAt(0); + } + else if (typeof byteValue === 'number') { + decodedByte = byteValue; + } + else { + decodedByte = byteValue[0]; + } + if (decodedByte < 0 || decodedByte > 255) { + throw new BSONError('only accepts number in a valid unsigned byte range 0-255'); + } + if (this.buffer.byteLength > this.position) { + this.buffer[this.position++] = decodedByte; + } + else { + const newSpace = ByteUtils.allocate(Binary.BUFFER_SIZE + this.buffer.length); + newSpace.set(this.buffer, 0); + this.buffer = newSpace; + this.buffer[this.position++] = decodedByte; + } + } + write(sequence, offset) { + offset = typeof offset === 'number' ? offset : this.position; + if (this.buffer.byteLength < offset + sequence.length) { + const newSpace = ByteUtils.allocate(this.buffer.byteLength + sequence.length); + newSpace.set(this.buffer, 0); + this.buffer = newSpace; + } + if (ArrayBuffer.isView(sequence)) { + this.buffer.set(ByteUtils.toLocalBufferType(sequence), offset); + this.position = + offset + sequence.byteLength > this.position ? offset + sequence.length : this.position; + } + else if (typeof sequence === 'string') { + const bytes = ByteUtils.fromISO88591(sequence); + this.buffer.set(bytes, offset); + this.position = + offset + sequence.length > this.position ? offset + sequence.length : this.position; + } + } + read(position, length) { + length = length && length > 0 ? length : this.position; + return this.buffer.slice(position, position + length); + } + value(asRaw) { + asRaw = !!asRaw; + if (asRaw && this.buffer.length === this.position) { + return this.buffer; + } + if (asRaw) { + return this.buffer.slice(0, this.position); + } + return ByteUtils.toISO88591(this.buffer.subarray(0, this.position)); + } + length() { + return this.position; + } + toJSON() { + return ByteUtils.toBase64(this.buffer); + } + toString(encoding) { + if (encoding === 'hex') + return ByteUtils.toHex(this.buffer); + if (encoding === 'base64') + return ByteUtils.toBase64(this.buffer); + if (encoding === 'utf8' || encoding === 'utf-8') + return ByteUtils.toUTF8(this.buffer, 0, this.buffer.byteLength); + return ByteUtils.toUTF8(this.buffer, 0, this.buffer.byteLength); + } + toExtendedJSON(options) { + options = options || {}; + const base64String = ByteUtils.toBase64(this.buffer); + const subType = Number(this.sub_type).toString(16); + if (options.legacy) { + return { + $binary: base64String, + $type: subType.length === 1 ? '0' + subType : subType + }; + } + return { + $binary: { + base64: base64String, + subType: subType.length === 1 ? '0' + subType : subType + } + }; + } + toUUID() { + if (this.sub_type === Binary.SUBTYPE_UUID) { + return new UUID(this.buffer.slice(0, this.position)); + } + throw new BSONError(`Binary sub_type "${this.sub_type}" is not supported for converting to UUID. Only "${Binary.SUBTYPE_UUID}" is currently supported.`); + } + static createFromHexString(hex, subType) { + return new Binary(ByteUtils.fromHex(hex), subType); + } + static createFromBase64(base64, subType) { + return new Binary(ByteUtils.fromBase64(base64), subType); + } + static fromExtendedJSON(doc, options) { + options = options || {}; + let data; + let type; + if ('$binary' in doc) { + if (options.legacy && typeof doc.$binary === 'string' && '$type' in doc) { + type = doc.$type ? parseInt(doc.$type, 16) : 0; + data = ByteUtils.fromBase64(doc.$binary); + } + else { + if (typeof doc.$binary !== 'string') { + type = doc.$binary.subType ? parseInt(doc.$binary.subType, 16) : 0; + data = ByteUtils.fromBase64(doc.$binary.base64); + } + } + } + else if ('$uuid' in doc) { + type = 4; + data = UUID.bytesFromString(doc.$uuid); + } + if (!data) { + throw new BSONError(`Unexpected Binary Extended JSON format ${JSON.stringify(doc)}`); + } + return type === BSON_BINARY_SUBTYPE_UUID_NEW ? new UUID(data) : new Binary(data, type); + } + [Symbol.for('nodejs.util.inspect.custom')]() { + return this.inspect(); + } + inspect() { + const base64 = ByteUtils.toBase64(this.buffer.subarray(0, this.position)); + return `Binary.createFromBase64("${base64}", ${this.sub_type})`; + } +} +Binary.BSON_BINARY_SUBTYPE_DEFAULT = 0; +Binary.BUFFER_SIZE = 256; +Binary.SUBTYPE_DEFAULT = 0; +Binary.SUBTYPE_FUNCTION = 1; +Binary.SUBTYPE_BYTE_ARRAY = 2; +Binary.SUBTYPE_UUID_OLD = 3; +Binary.SUBTYPE_UUID = 4; +Binary.SUBTYPE_MD5 = 5; +Binary.SUBTYPE_ENCRYPTED = 6; +Binary.SUBTYPE_COLUMN = 7; +Binary.SUBTYPE_USER_DEFINED = 128; +const UUID_BYTE_LENGTH = 16; +const UUID_WITHOUT_DASHES = /^[0-9A-F]{32}$/i; +const UUID_WITH_DASHES = /^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i; +class UUID extends Binary { + constructor(input) { + let bytes; + if (input == null) { + bytes = UUID.generate(); + } + else if (input instanceof UUID) { + bytes = ByteUtils.toLocalBufferType(new Uint8Array(input.buffer)); + } + else if (ArrayBuffer.isView(input) && input.byteLength === UUID_BYTE_LENGTH) { + bytes = ByteUtils.toLocalBufferType(input); + } + else if (typeof input === 'string') { + bytes = UUID.bytesFromString(input); + } + else { + throw new BSONError('Argument passed in UUID constructor must be a UUID, a 16 byte Buffer or a 32/36 character hex string (dashes excluded/included, format: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx).'); + } + super(bytes, BSON_BINARY_SUBTYPE_UUID_NEW); + } + get id() { + return this.buffer; + } + set id(value) { + this.buffer = value; + } + toHexString(includeDashes = true) { + if (includeDashes) { + return [ + ByteUtils.toHex(this.buffer.subarray(0, 4)), + ByteUtils.toHex(this.buffer.subarray(4, 6)), + ByteUtils.toHex(this.buffer.subarray(6, 8)), + ByteUtils.toHex(this.buffer.subarray(8, 10)), + ByteUtils.toHex(this.buffer.subarray(10, 16)) + ].join('-'); + } + return ByteUtils.toHex(this.buffer); + } + toString(encoding) { + if (encoding === 'hex') + return ByteUtils.toHex(this.id); + if (encoding === 'base64') + return ByteUtils.toBase64(this.id); + return this.toHexString(); + } + toJSON() { + return this.toHexString(); + } + equals(otherId) { + if (!otherId) { + return false; + } + if (otherId instanceof UUID) { + return ByteUtils.equals(otherId.id, this.id); + } + try { + return ByteUtils.equals(new UUID(otherId).id, this.id); + } + catch { + return false; + } + } + toBinary() { + return new Binary(this.id, Binary.SUBTYPE_UUID); + } + static generate() { + const bytes = ByteUtils.randomBytes(UUID_BYTE_LENGTH); + bytes[6] = (bytes[6] & 0x0f) | 0x40; + bytes[8] = (bytes[8] & 0x3f) | 0x80; + return bytes; + } + static isValid(input) { + if (!input) { + return false; + } + if (typeof input === 'string') { + return UUID.isValidUUIDString(input); + } + if (isUint8Array(input)) { + return input.byteLength === UUID_BYTE_LENGTH; + } + return (input._bsontype === 'Binary' && + input.sub_type === this.SUBTYPE_UUID && + input.buffer.byteLength === 16); + } + static createFromHexString(hexString) { + const buffer = UUID.bytesFromString(hexString); + return new UUID(buffer); + } + static createFromBase64(base64) { + return new UUID(ByteUtils.fromBase64(base64)); + } + static bytesFromString(representation) { + if (!UUID.isValidUUIDString(representation)) { + throw new BSONError('UUID string representation must be 32 hex digits or canonical hyphenated representation'); + } + return ByteUtils.fromHex(representation.replace(/-/g, '')); + } + static isValidUUIDString(representation) { + return UUID_WITHOUT_DASHES.test(representation) || UUID_WITH_DASHES.test(representation); + } + [Symbol.for('nodejs.util.inspect.custom')]() { + return this.inspect(); + } + inspect() { + return `new UUID("${this.toHexString()}")`; + } +} +UUID.cacheHexString = false; + +class Code extends BSONValue { + get _bsontype() { + return 'Code'; + } + constructor(code, scope) { + super(); + this.code = code.toString(); + this.scope = scope ?? null; + } + toJSON() { + if (this.scope != null) { + return { code: this.code, scope: this.scope }; + } + return { code: this.code }; + } + toExtendedJSON() { + if (this.scope) { + return { $code: this.code, $scope: this.scope }; + } + return { $code: this.code }; + } + static fromExtendedJSON(doc) { + return new Code(doc.$code, doc.$scope); + } + [Symbol.for('nodejs.util.inspect.custom')]() { + return this.inspect(); + } + inspect() { + const codeJson = this.toJSON(); + return `new Code("${String(codeJson.code)}"${codeJson.scope != null ? `, ${JSON.stringify(codeJson.scope)}` : ''})`; + } +} + +function isDBRefLike(value) { + return (value != null && + typeof value === 'object' && + '$id' in value && + value.$id != null && + '$ref' in value && + typeof value.$ref === 'string' && + (!('$db' in value) || ('$db' in value && typeof value.$db === 'string'))); +} +class DBRef extends BSONValue { + get _bsontype() { + return 'DBRef'; + } + constructor(collection, oid, db, fields) { + super(); + const parts = collection.split('.'); + if (parts.length === 2) { + db = parts.shift(); + collection = parts.shift(); + } + this.collection = collection; + this.oid = oid; + this.db = db; + this.fields = fields || {}; + } + get namespace() { + return this.collection; + } + set namespace(value) { + this.collection = value; + } + toJSON() { + const o = Object.assign({ + $ref: this.collection, + $id: this.oid + }, this.fields); + if (this.db != null) + o.$db = this.db; + return o; + } + toExtendedJSON(options) { + options = options || {}; + let o = { + $ref: this.collection, + $id: this.oid + }; + if (options.legacy) { + return o; + } + if (this.db) + o.$db = this.db; + o = Object.assign(o, this.fields); + return o; + } + static fromExtendedJSON(doc) { + const copy = Object.assign({}, doc); + delete copy.$ref; + delete copy.$id; + delete copy.$db; + return new DBRef(doc.$ref, doc.$id, doc.$db, copy); + } + [Symbol.for('nodejs.util.inspect.custom')]() { + return this.inspect(); + } + inspect() { + const oid = this.oid === undefined || this.oid.toString === undefined ? this.oid : this.oid.toString(); + return `new DBRef("${this.namespace}", new ObjectId("${String(oid)}")${this.db ? `, "${this.db}"` : ''})`; + } +} + +let wasm = undefined; +try { + wasm = new WebAssembly.Instance(new WebAssembly.Module(new Uint8Array([0, 97, 115, 109, 1, 0, 0, 0, 1, 13, 2, 96, 0, 1, 127, 96, 4, 127, 127, 127, 127, 1, 127, 3, 7, 6, 0, 1, 1, 1, 1, 1, 6, 6, 1, 127, 1, 65, 0, 11, 7, 50, 6, 3, 109, 117, 108, 0, 1, 5, 100, 105, 118, 95, 115, 0, 2, 5, 100, 105, 118, 95, 117, 0, 3, 5, 114, 101, 109, 95, 115, 0, 4, 5, 114, 101, 109, 95, 117, 0, 5, 8, 103, 101, 116, 95, 104, 105, 103, 104, 0, 0, 10, 191, 1, 6, 4, 0, 35, 0, 11, 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, 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, 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, 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, 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 { +} +const TWO_PWR_16_DBL = 1 << 16; +const TWO_PWR_24_DBL = 1 << 24; +const TWO_PWR_32_DBL = TWO_PWR_16_DBL * TWO_PWR_16_DBL; +const TWO_PWR_64_DBL = TWO_PWR_32_DBL * TWO_PWR_32_DBL; +const TWO_PWR_63_DBL = TWO_PWR_64_DBL / 2; +const INT_CACHE = {}; +const UINT_CACHE = {}; +const MAX_INT64_STRING_LENGTH = 20; +const DECIMAL_REG_EX = /^(\+?0|(\+|-)?[1-9][0-9]*)$/; +class Long extends BSONValue { + get _bsontype() { + return 'Long'; + } + get __isLong__() { + return true; + } + constructor(low = 0, high, unsigned) { + super(); + if (typeof low === 'bigint') { + Object.assign(this, Long.fromBigInt(low, !!high)); + } + else if (typeof low === 'string') { + Object.assign(this, Long.fromString(low, !!high)); + } + else { + this.low = low | 0; + this.high = high | 0; + this.unsigned = !!unsigned; + } + } + static fromBits(lowBits, highBits, unsigned) { + return new Long(lowBits, highBits, unsigned); + } + static fromInt(value, unsigned) { + let obj, cachedObj, cache; + if (unsigned) { + value >>>= 0; + if ((cache = 0 <= value && value < 256)) { + cachedObj = UINT_CACHE[value]; + if (cachedObj) + return cachedObj; + } + obj = Long.fromBits(value, (value | 0) < 0 ? -1 : 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 = Long.fromBits(value, value < 0 ? -1 : 0, false); + if (cache) + INT_CACHE[value] = obj; + return obj; + } + } + static fromNumber(value, unsigned) { + if (isNaN(value)) + return unsigned ? Long.UZERO : Long.ZERO; + if (unsigned) { + if (value < 0) + return Long.UZERO; + if (value >= TWO_PWR_64_DBL) + return Long.MAX_UNSIGNED_VALUE; + } + else { + if (value <= -TWO_PWR_63_DBL) + return Long.MIN_VALUE; + if (value + 1 >= TWO_PWR_63_DBL) + return Long.MAX_VALUE; + } + if (value < 0) + return Long.fromNumber(-value, unsigned).neg(); + return Long.fromBits(value % TWO_PWR_32_DBL | 0, (value / TWO_PWR_32_DBL) | 0, unsigned); + } + static fromBigInt(value, unsigned) { + return Long.fromString(value.toString(), unsigned); + } + static fromString(str, unsigned, radix) { + if (str.length === 0) + throw new BSONError('empty string'); + if (str === 'NaN' || str === 'Infinity' || str === '+Infinity' || str === '-Infinity') + return Long.ZERO; + if (typeof unsigned === 'number') { + (radix = unsigned), (unsigned = false); + } + else { + unsigned = !!unsigned; + } + radix = radix || 10; + if (radix < 2 || 36 < radix) + throw new BSONError('radix'); + let p; + if ((p = str.indexOf('-')) > 0) + throw new BSONError('interior hyphen'); + else if (p === 0) { + return Long.fromString(str.substring(1), unsigned, radix).neg(); + } + const radixToPower = Long.fromNumber(Math.pow(radix, 8)); + let result = Long.ZERO; + for (let i = 0; i < str.length; i += 8) { + const size = Math.min(8, str.length - i), value = parseInt(str.substring(i, i + size), radix); + if (size < 8) { + const power = Long.fromNumber(Math.pow(radix, size)); + result = result.mul(power).add(Long.fromNumber(value)); + } + else { + result = result.mul(radixToPower); + result = result.add(Long.fromNumber(value)); + } + } + result.unsigned = unsigned; + return result; + } + static fromBytes(bytes, unsigned, le) { + return le ? Long.fromBytesLE(bytes, unsigned) : Long.fromBytesBE(bytes, unsigned); + } + static 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); + } + static 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); + } + static isLong(value) { + return (value != null && + typeof value === 'object' && + '__isLong__' in value && + value.__isLong__ === true); + } + static fromValue(val, unsigned) { + if (typeof val === 'number') + return Long.fromNumber(val, unsigned); + if (typeof val === 'string') + return Long.fromString(val, unsigned); + return Long.fromBits(val.low, val.high, typeof unsigned === 'boolean' ? unsigned : val.unsigned); + } + add(addend) { + if (!Long.isLong(addend)) + addend = Long.fromValue(addend); + const a48 = this.high >>> 16; + const a32 = this.high & 0xffff; + const a16 = this.low >>> 16; + const a00 = this.low & 0xffff; + const b48 = addend.high >>> 16; + const b32 = addend.high & 0xffff; + const b16 = addend.low >>> 16; + const b00 = addend.low & 0xffff; + let 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 Long.fromBits((c16 << 16) | c00, (c48 << 16) | c32, this.unsigned); + } + and(other) { + if (!Long.isLong(other)) + other = Long.fromValue(other); + return Long.fromBits(this.low & other.low, this.high & other.high, this.unsigned); + } + compare(other) { + if (!Long.isLong(other)) + other = Long.fromValue(other); + if (this.eq(other)) + return 0; + const thisNeg = this.isNegative(), otherNeg = other.isNegative(); + if (thisNeg && !otherNeg) + return -1; + if (!thisNeg && otherNeg) + return 1; + if (!this.unsigned) + return this.sub(other).isNegative() ? -1 : 1; + return other.high >>> 0 > this.high >>> 0 || + (other.high === this.high && other.low >>> 0 > this.low >>> 0) + ? -1 + : 1; + } + comp(other) { + return this.compare(other); + } + divide(divisor) { + if (!Long.isLong(divisor)) + divisor = Long.fromValue(divisor); + if (divisor.isZero()) + throw new BSONError('division by zero'); + if (wasm) { + if (!this.unsigned && + this.high === -0x80000000 && + divisor.low === -1 && + divisor.high === -1) { + return this; + } + const low = (this.unsigned ? wasm.div_u : wasm.div_s)(this.low, this.high, divisor.low, divisor.high); + return Long.fromBits(low, wasm.get_high(), this.unsigned); + } + if (this.isZero()) + return this.unsigned ? Long.UZERO : Long.ZERO; + let approx, rem, res; + if (!this.unsigned) { + if (this.eq(Long.MIN_VALUE)) { + if (divisor.eq(Long.ONE) || divisor.eq(Long.NEG_ONE)) + return Long.MIN_VALUE; + else if (divisor.eq(Long.MIN_VALUE)) + return Long.ONE; + else { + const halfThis = this.shr(1); + approx = halfThis.div(divisor).shl(1); + if (approx.eq(Long.ZERO)) { + return divisor.isNegative() ? Long.ONE : Long.NEG_ONE; + } + else { + rem = this.sub(divisor.mul(approx)); + res = approx.add(rem.div(divisor)); + return res; + } + } + } + else if (divisor.eq(Long.MIN_VALUE)) + return this.unsigned ? Long.UZERO : Long.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 = Long.ZERO; + } + else { + if (!divisor.unsigned) + divisor = divisor.toUnsigned(); + if (divisor.gt(this)) + return Long.UZERO; + if (divisor.gt(this.shru(1))) + return Long.UONE; + res = Long.UZERO; + } + rem = this; + while (rem.gte(divisor)) { + approx = Math.max(1, Math.floor(rem.toNumber() / divisor.toNumber())); + const log2 = Math.ceil(Math.log(approx) / Math.LN2); + const delta = log2 <= 48 ? 1 : Math.pow(2, log2 - 48); + let approxRes = Long.fromNumber(approx); + let approxRem = approxRes.mul(divisor); + while (approxRem.isNegative() || approxRem.gt(rem)) { + approx -= delta; + approxRes = Long.fromNumber(approx, this.unsigned); + approxRem = approxRes.mul(divisor); + } + if (approxRes.isZero()) + approxRes = Long.ONE; + res = res.add(approxRes); + rem = rem.sub(approxRem); + } + return res; + } + div(divisor) { + return this.divide(divisor); + } + equals(other) { + if (!Long.isLong(other)) + other = Long.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; + } + eq(other) { + return this.equals(other); + } + getHighBits() { + return this.high; + } + getHighBitsUnsigned() { + return this.high >>> 0; + } + getLowBits() { + return this.low; + } + getLowBitsUnsigned() { + return this.low >>> 0; + } + getNumBitsAbs() { + if (this.isNegative()) { + return this.eq(Long.MIN_VALUE) ? 64 : this.neg().getNumBitsAbs(); + } + const val = this.high !== 0 ? this.high : this.low; + let bit; + for (bit = 31; bit > 0; bit--) + if ((val & (1 << bit)) !== 0) + break; + return this.high !== 0 ? bit + 33 : bit + 1; + } + greaterThan(other) { + return this.comp(other) > 0; + } + gt(other) { + return this.greaterThan(other); + } + greaterThanOrEqual(other) { + return this.comp(other) >= 0; + } + gte(other) { + return this.greaterThanOrEqual(other); + } + ge(other) { + return this.greaterThanOrEqual(other); + } + isEven() { + return (this.low & 1) === 0; + } + isNegative() { + return !this.unsigned && this.high < 0; + } + isOdd() { + return (this.low & 1) === 1; + } + isPositive() { + return this.unsigned || this.high >= 0; + } + isZero() { + return this.high === 0 && this.low === 0; + } + lessThan(other) { + return this.comp(other) < 0; + } + lt(other) { + return this.lessThan(other); + } + lessThanOrEqual(other) { + return this.comp(other) <= 0; + } + lte(other) { + return this.lessThanOrEqual(other); + } + modulo(divisor) { + if (!Long.isLong(divisor)) + divisor = Long.fromValue(divisor); + if (wasm) { + const low = (this.unsigned ? wasm.rem_u : wasm.rem_s)(this.low, this.high, divisor.low, divisor.high); + return Long.fromBits(low, wasm.get_high(), this.unsigned); + } + return this.sub(this.div(divisor).mul(divisor)); + } + mod(divisor) { + return this.modulo(divisor); + } + rem(divisor) { + return this.modulo(divisor); + } + multiply(multiplier) { + if (this.isZero()) + return Long.ZERO; + if (!Long.isLong(multiplier)) + multiplier = Long.fromValue(multiplier); + if (wasm) { + const low = wasm.mul(this.low, this.high, multiplier.low, multiplier.high); + return Long.fromBits(low, wasm.get_high(), this.unsigned); + } + if (multiplier.isZero()) + return Long.ZERO; + if (this.eq(Long.MIN_VALUE)) + return multiplier.isOdd() ? Long.MIN_VALUE : Long.ZERO; + if (multiplier.eq(Long.MIN_VALUE)) + return this.isOdd() ? Long.MIN_VALUE : Long.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 (this.lt(Long.TWO_PWR_24) && multiplier.lt(Long.TWO_PWR_24)) + return Long.fromNumber(this.toNumber() * multiplier.toNumber(), this.unsigned); + const a48 = this.high >>> 16; + const a32 = this.high & 0xffff; + const a16 = this.low >>> 16; + const a00 = this.low & 0xffff; + const b48 = multiplier.high >>> 16; + const b32 = multiplier.high & 0xffff; + const b16 = multiplier.low >>> 16; + const b00 = multiplier.low & 0xffff; + let 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 Long.fromBits((c16 << 16) | c00, (c48 << 16) | c32, this.unsigned); + } + mul(multiplier) { + return this.multiply(multiplier); + } + negate() { + if (!this.unsigned && this.eq(Long.MIN_VALUE)) + return Long.MIN_VALUE; + return this.not().add(Long.ONE); + } + neg() { + return this.negate(); + } + not() { + return Long.fromBits(~this.low, ~this.high, this.unsigned); + } + notEquals(other) { + return !this.equals(other); + } + neq(other) { + return this.notEquals(other); + } + ne(other) { + return this.notEquals(other); + } + or(other) { + if (!Long.isLong(other)) + other = Long.fromValue(other); + return Long.fromBits(this.low | other.low, this.high | other.high, this.unsigned); + } + shiftLeft(numBits) { + if (Long.isLong(numBits)) + numBits = numBits.toInt(); + if ((numBits &= 63) === 0) + return this; + else if (numBits < 32) + return Long.fromBits(this.low << numBits, (this.high << numBits) | (this.low >>> (32 - numBits)), this.unsigned); + else + return Long.fromBits(0, this.low << (numBits - 32), this.unsigned); + } + shl(numBits) { + return this.shiftLeft(numBits); + } + shiftRight(numBits) { + if (Long.isLong(numBits)) + numBits = numBits.toInt(); + if ((numBits &= 63) === 0) + return this; + else if (numBits < 32) + return Long.fromBits((this.low >>> numBits) | (this.high << (32 - numBits)), this.high >> numBits, this.unsigned); + else + return Long.fromBits(this.high >> (numBits - 32), this.high >= 0 ? 0 : -1, this.unsigned); + } + shr(numBits) { + return this.shiftRight(numBits); + } + shiftRightUnsigned(numBits) { + if (Long.isLong(numBits)) + numBits = numBits.toInt(); + numBits &= 63; + if (numBits === 0) + return this; + else { + const high = this.high; + if (numBits < 32) { + const low = this.low; + return Long.fromBits((low >>> numBits) | (high << (32 - numBits)), high >>> numBits, this.unsigned); + } + else if (numBits === 32) + return Long.fromBits(high, 0, this.unsigned); + else + return Long.fromBits(high >>> (numBits - 32), 0, this.unsigned); + } + } + shr_u(numBits) { + return this.shiftRightUnsigned(numBits); + } + shru(numBits) { + return this.shiftRightUnsigned(numBits); + } + subtract(subtrahend) { + if (!Long.isLong(subtrahend)) + subtrahend = Long.fromValue(subtrahend); + return this.add(subtrahend.neg()); + } + sub(subtrahend) { + return this.subtract(subtrahend); + } + toInt() { + return this.unsigned ? this.low >>> 0 : this.low; + } + 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); + } + toBigInt() { + return BigInt(this.toString()); + } + toBytes(le) { + return le ? this.toBytesLE() : this.toBytesBE(); + } + toBytesLE() { + const 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 + ]; + } + toBytesBE() { + const 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 + ]; + } + toSigned() { + if (!this.unsigned) + return this; + return Long.fromBits(this.low, this.high, false); + } + toString(radix) { + radix = radix || 10; + if (radix < 2 || 36 < radix) + throw new BSONError('radix'); + if (this.isZero()) + return '0'; + if (this.isNegative()) { + if (this.eq(Long.MIN_VALUE)) { + const radixLong = Long.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); + } + const radixToPower = Long.fromNumber(Math.pow(radix, 6), this.unsigned); + let rem = this; + let result = ''; + while (true) { + const remDiv = rem.div(radixToPower); + const intval = rem.sub(remDiv.mul(radixToPower)).toInt() >>> 0; + let digits = intval.toString(radix); + rem = remDiv; + if (rem.isZero()) { + return digits + result; + } + else { + while (digits.length < 6) + digits = '0' + digits; + result = '' + digits + result; + } + } + } + toUnsigned() { + if (this.unsigned) + return this; + return Long.fromBits(this.low, this.high, true); + } + xor(other) { + if (!Long.isLong(other)) + other = Long.fromValue(other); + return Long.fromBits(this.low ^ other.low, this.high ^ other.high, this.unsigned); + } + eqz() { + return this.isZero(); + } + le(other) { + return this.lessThanOrEqual(other); + } + toExtendedJSON(options) { + if (options && options.relaxed) + return this.toNumber(); + return { $numberLong: this.toString() }; + } + static fromExtendedJSON(doc, options) { + const { useBigInt64 = false, relaxed = true } = { ...options }; + if (doc.$numberLong.length > MAX_INT64_STRING_LENGTH) { + throw new BSONError('$numberLong string is too long'); + } + if (!DECIMAL_REG_EX.test(doc.$numberLong)) { + throw new BSONError(`$numberLong string "${doc.$numberLong}" is in an invalid format`); + } + if (useBigInt64) { + const bigIntResult = BigInt(doc.$numberLong); + return BigInt.asIntN(64, bigIntResult); + } + const longResult = Long.fromString(doc.$numberLong); + if (relaxed) { + return longResult.toNumber(); + } + return longResult; + } + [Symbol.for('nodejs.util.inspect.custom')]() { + return this.inspect(); + } + inspect() { + return `new Long("${this.toString()}"${this.unsigned ? ', true' : ''})`; + } +} +Long.TWO_PWR_24 = Long.fromInt(TWO_PWR_24_DBL); +Long.MAX_UNSIGNED_VALUE = Long.fromBits(0xffffffff | 0, 0xffffffff | 0, true); +Long.ZERO = Long.fromInt(0); +Long.UZERO = Long.fromInt(0, true); +Long.ONE = Long.fromInt(1); +Long.UONE = Long.fromInt(1, true); +Long.NEG_ONE = Long.fromInt(-1); +Long.MAX_VALUE = Long.fromBits(0xffffffff | 0, 0x7fffffff | 0, false); +Long.MIN_VALUE = Long.fromBits(0, 0x80000000 | 0, false); + +const PARSE_STRING_REGEXP = /^(\+|-)?(\d+|(\d*\.\d*))?(E|e)?([-+])?(\d+)?$/; +const PARSE_INF_REGEXP = /^(\+|-)?(Infinity|inf)$/i; +const PARSE_NAN_REGEXP = /^(\+|-)?NaN$/i; +const EXPONENT_MAX = 6111; +const EXPONENT_MIN = -6176; +const EXPONENT_BIAS = 6176; +const MAX_DIGITS = 34; +const NAN_BUFFER = ByteUtils.fromNumberArray([ + 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +].reverse()); +const INF_NEGATIVE_BUFFER = ByteUtils.fromNumberArray([ + 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +].reverse()); +const INF_POSITIVE_BUFFER = ByteUtils.fromNumberArray([ + 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +].reverse()); +const EXPONENT_REGEX = /^([-+])?(\d+)?$/; +const COMBINATION_MASK = 0x1f; +const EXPONENT_MASK = 0x3fff; +const COMBINATION_INFINITY = 30; +const COMBINATION_NAN = 31; +function isDigit(value) { + return !isNaN(parseInt(value, 10)); +} +function divideu128(value) { + const DIVISOR = Long.fromNumber(1000 * 1000 * 1000); + let _rem = Long.fromNumber(0); + if (!value.parts[0] && !value.parts[1] && !value.parts[2] && !value.parts[3]) { + return { quotient: value, rem: _rem }; + } + for (let i = 0; i <= 3; i++) { + _rem = _rem.shiftLeft(32); + _rem = _rem.add(new Long(value.parts[i], 0)); + value.parts[i] = _rem.div(DIVISOR).low; + _rem = _rem.modulo(DIVISOR); + } + return { quotient: value, rem: _rem }; +} +function multiply64x2(left, right) { + if (!left && !right) { + return { high: Long.fromNumber(0), low: Long.fromNumber(0) }; + } + const leftHigh = left.shiftRightUnsigned(32); + const leftLow = new Long(left.getLowBits(), 0); + const rightHigh = right.shiftRightUnsigned(32); + const rightLow = new Long(right.getLowBits(), 0); + let productHigh = leftHigh.multiply(rightHigh); + let productMid = leftHigh.multiply(rightLow); + const productMid2 = leftLow.multiply(rightHigh); + let productLow = leftLow.multiply(rightLow); + productHigh = productHigh.add(productMid.shiftRightUnsigned(32)); + productMid = new Long(productMid.getLowBits(), 0) + .add(productMid2) + .add(productLow.shiftRightUnsigned(32)); + productHigh = productHigh.add(productMid.shiftRightUnsigned(32)); + productLow = productMid.shiftLeft(32).add(new Long(productLow.getLowBits(), 0)); + return { high: productHigh, low: productLow }; +} +function lessThan(left, right) { + const uhleft = left.high >>> 0; + const uhright = right.high >>> 0; + if (uhleft < uhright) { + return true; + } + else if (uhleft === uhright) { + const ulleft = left.low >>> 0; + const ulright = right.low >>> 0; + if (ulleft < ulright) + return true; + } + return false; +} +function invalidErr(string, message) { + throw new BSONError(`"${string}" is not a valid Decimal128 string - ${message}`); +} +class Decimal128 extends BSONValue { + get _bsontype() { + return 'Decimal128'; + } + constructor(bytes) { + super(); + if (typeof bytes === 'string') { + this.bytes = Decimal128.fromString(bytes).bytes; + } + else if (isUint8Array(bytes)) { + if (bytes.byteLength !== 16) { + throw new BSONError('Decimal128 must take a Buffer of 16 bytes'); + } + this.bytes = bytes; + } + else { + throw new BSONError('Decimal128 must take a Buffer or string'); + } + } + static fromString(representation) { + return Decimal128._fromString(representation, { allowRounding: false }); + } + static fromStringWithRounding(representation) { + return Decimal128._fromString(representation, { allowRounding: true }); + } + static _fromString(representation, options) { + let isNegative = false; + let sawSign = false; + let sawRadix = false; + let foundNonZero = false; + let significantDigits = 0; + let nDigitsRead = 0; + let nDigits = 0; + let radixPosition = 0; + let firstNonZero = 0; + const digits = [0]; + let nDigitsStored = 0; + let digitsInsert = 0; + let lastDigit = 0; + let exponent = 0; + let significandHigh = new Long(0, 0); + let significandLow = new Long(0, 0); + let biasedExponent = 0; + let index = 0; + if (representation.length >= 7000) { + throw new BSONError('' + representation + ' not a valid Decimal128 string'); + } + const stringMatch = representation.match(PARSE_STRING_REGEXP); + const infMatch = representation.match(PARSE_INF_REGEXP); + const nanMatch = representation.match(PARSE_NAN_REGEXP); + if ((!stringMatch && !infMatch && !nanMatch) || representation.length === 0) { + throw new BSONError('' + representation + ' not a valid Decimal128 string'); + } + if (stringMatch) { + const unsignedNumber = stringMatch[2]; + const e = stringMatch[4]; + const expSign = stringMatch[5]; + const expNumber = stringMatch[6]; + if (e && expNumber === undefined) + invalidErr(representation, 'missing exponent power'); + if (e && unsignedNumber === undefined) + invalidErr(representation, 'missing exponent base'); + if (e === undefined && (expSign || expNumber)) { + invalidErr(representation, 'missing e before exponent'); + } + } + if (representation[index] === '+' || representation[index] === '-') { + sawSign = true; + isNegative = representation[index++] === '-'; + } + if (!isDigit(representation[index]) && representation[index] !== '.') { + if (representation[index] === 'i' || representation[index] === 'I') { + return new Decimal128(isNegative ? INF_NEGATIVE_BUFFER : INF_POSITIVE_BUFFER); + } + else if (representation[index] === 'N') { + return new Decimal128(NAN_BUFFER); + } + } + while (isDigit(representation[index]) || representation[index] === '.') { + if (representation[index] === '.') { + if (sawRadix) + invalidErr(representation, 'contains multiple periods'); + sawRadix = true; + index = index + 1; + continue; + } + if (nDigitsStored < MAX_DIGITS) { + if (representation[index] !== '0' || foundNonZero) { + if (!foundNonZero) { + firstNonZero = nDigitsRead; + } + foundNonZero = true; + digits[digitsInsert++] = parseInt(representation[index], 10); + nDigitsStored = nDigitsStored + 1; + } + } + if (foundNonZero) + nDigits = nDigits + 1; + if (sawRadix) + radixPosition = radixPosition + 1; + nDigitsRead = nDigitsRead + 1; + index = index + 1; + } + if (sawRadix && !nDigitsRead) + throw new BSONError('' + representation + ' not a valid Decimal128 string'); + if (representation[index] === 'e' || representation[index] === 'E') { + const match = representation.substr(++index).match(EXPONENT_REGEX); + if (!match || !match[2]) + return new Decimal128(NAN_BUFFER); + exponent = parseInt(match[0], 10); + index = index + match[0].length; + } + if (representation[index]) + return new Decimal128(NAN_BUFFER); + if (!nDigitsStored) { + digits[0] = 0; + nDigits = 1; + nDigitsStored = 1; + significantDigits = 0; + } + else { + lastDigit = nDigitsStored - 1; + significantDigits = nDigits; + if (significantDigits !== 1) { + while (representation[firstNonZero + significantDigits - 1 + Number(sawSign) + Number(sawRadix)] === '0') { + significantDigits = significantDigits - 1; + } + } + } + if (exponent <= radixPosition && radixPosition > exponent + (1 << 14)) { + exponent = EXPONENT_MIN; + } + else { + exponent = exponent - radixPosition; + } + while (exponent > EXPONENT_MAX) { + lastDigit = lastDigit + 1; + if (lastDigit >= MAX_DIGITS) { + if (significantDigits === 0) { + exponent = EXPONENT_MAX; + break; + } + invalidErr(representation, 'overflow'); + } + exponent = exponent - 1; + } + if (options.allowRounding) { + while (exponent < EXPONENT_MIN || nDigitsStored < nDigits) { + if (lastDigit === 0 && significantDigits < nDigitsStored) { + exponent = EXPONENT_MIN; + significantDigits = 0; + break; + } + if (nDigitsStored < nDigits) { + nDigits = nDigits - 1; + } + else { + lastDigit = lastDigit - 1; + } + if (exponent < EXPONENT_MAX) { + exponent = exponent + 1; + } + else { + const digitsString = digits.join(''); + if (digitsString.match(/^0+$/)) { + exponent = EXPONENT_MAX; + break; + } + invalidErr(representation, 'overflow'); + } + } + if (lastDigit + 1 < significantDigits) { + let endOfString = nDigitsRead; + if (sawRadix) { + firstNonZero = firstNonZero + 1; + endOfString = endOfString + 1; + } + if (sawSign) { + firstNonZero = firstNonZero + 1; + endOfString = endOfString + 1; + } + const roundDigit = parseInt(representation[firstNonZero + lastDigit + 1], 10); + let roundBit = 0; + if (roundDigit >= 5) { + roundBit = 1; + if (roundDigit === 5) { + roundBit = digits[lastDigit] % 2 === 1 ? 1 : 0; + for (let i = firstNonZero + lastDigit + 2; i < endOfString; i++) { + if (parseInt(representation[i], 10)) { + roundBit = 1; + break; + } + } + } + } + if (roundBit) { + let dIdx = lastDigit; + for (; dIdx >= 0; dIdx--) { + if (++digits[dIdx] > 9) { + digits[dIdx] = 0; + if (dIdx === 0) { + if (exponent < EXPONENT_MAX) { + exponent = exponent + 1; + digits[dIdx] = 1; + } + else { + return new Decimal128(isNegative ? INF_NEGATIVE_BUFFER : INF_POSITIVE_BUFFER); + } + } + } + else { + break; + } + } + } + } + } + else { + while (exponent < EXPONENT_MIN || nDigitsStored < nDigits) { + if (lastDigit === 0) { + if (significantDigits === 0) { + exponent = EXPONENT_MIN; + break; + } + invalidErr(representation, 'exponent underflow'); + } + if (nDigitsStored < nDigits) { + if (representation[nDigits - 1 + Number(sawSign) + Number(sawRadix)] !== '0' && + significantDigits !== 0) { + invalidErr(representation, 'inexact rounding'); + } + nDigits = nDigits - 1; + } + else { + if (digits[lastDigit] !== 0) { + invalidErr(representation, 'inexact rounding'); + } + lastDigit = lastDigit - 1; + } + if (exponent < EXPONENT_MAX) { + exponent = exponent + 1; + } + else { + invalidErr(representation, 'overflow'); + } + } + if (lastDigit + 1 < significantDigits) { + if (sawRadix) { + firstNonZero = firstNonZero + 1; + } + if (sawSign) { + firstNonZero = firstNonZero + 1; + } + const roundDigit = parseInt(representation[firstNonZero + lastDigit + 1], 10); + if (roundDigit !== 0) { + invalidErr(representation, 'inexact rounding'); + } + } + } + significandHigh = Long.fromNumber(0); + significandLow = Long.fromNumber(0); + if (significantDigits === 0) { + significandHigh = Long.fromNumber(0); + significandLow = Long.fromNumber(0); + } + else if (lastDigit < 17) { + let dIdx = 0; + significandLow = Long.fromNumber(digits[dIdx++]); + significandHigh = new Long(0, 0); + for (; dIdx <= lastDigit; dIdx++) { + significandLow = significandLow.multiply(Long.fromNumber(10)); + significandLow = significandLow.add(Long.fromNumber(digits[dIdx])); + } + } + else { + let dIdx = 0; + significandHigh = Long.fromNumber(digits[dIdx++]); + for (; dIdx <= lastDigit - 17; dIdx++) { + significandHigh = significandHigh.multiply(Long.fromNumber(10)); + significandHigh = significandHigh.add(Long.fromNumber(digits[dIdx])); + } + significandLow = Long.fromNumber(digits[dIdx++]); + for (; dIdx <= lastDigit; dIdx++) { + significandLow = significandLow.multiply(Long.fromNumber(10)); + significandLow = significandLow.add(Long.fromNumber(digits[dIdx])); + } + } + const significand = multiply64x2(significandHigh, Long.fromString('100000000000000000')); + significand.low = significand.low.add(significandLow); + if (lessThan(significand.low, significandLow)) { + significand.high = significand.high.add(Long.fromNumber(1)); + } + biasedExponent = exponent + EXPONENT_BIAS; + const dec = { low: Long.fromNumber(0), high: Long.fromNumber(0) }; + if (significand.high.shiftRightUnsigned(49).and(Long.fromNumber(1)).equals(Long.fromNumber(1))) { + dec.high = dec.high.or(Long.fromNumber(0x3).shiftLeft(61)); + dec.high = dec.high.or(Long.fromNumber(biasedExponent).and(Long.fromNumber(0x3fff).shiftLeft(47))); + dec.high = dec.high.or(significand.high.and(Long.fromNumber(0x7fffffffffff))); + } + else { + dec.high = dec.high.or(Long.fromNumber(biasedExponent & 0x3fff).shiftLeft(49)); + dec.high = dec.high.or(significand.high.and(Long.fromNumber(0x1ffffffffffff))); + } + dec.low = significand.low; + if (isNegative) { + dec.high = dec.high.or(Long.fromString('9223372036854775808')); + } + const buffer = ByteUtils.allocate(16); + index = 0; + buffer[index++] = dec.low.low & 0xff; + buffer[index++] = (dec.low.low >> 8) & 0xff; + buffer[index++] = (dec.low.low >> 16) & 0xff; + buffer[index++] = (dec.low.low >> 24) & 0xff; + buffer[index++] = dec.low.high & 0xff; + buffer[index++] = (dec.low.high >> 8) & 0xff; + buffer[index++] = (dec.low.high >> 16) & 0xff; + buffer[index++] = (dec.low.high >> 24) & 0xff; + buffer[index++] = dec.high.low & 0xff; + buffer[index++] = (dec.high.low >> 8) & 0xff; + buffer[index++] = (dec.high.low >> 16) & 0xff; + buffer[index++] = (dec.high.low >> 24) & 0xff; + buffer[index++] = dec.high.high & 0xff; + buffer[index++] = (dec.high.high >> 8) & 0xff; + buffer[index++] = (dec.high.high >> 16) & 0xff; + buffer[index++] = (dec.high.high >> 24) & 0xff; + return new Decimal128(buffer); + } + toString() { + let biased_exponent; + let significand_digits = 0; + const significand = new Array(36); + for (let i = 0; i < significand.length; i++) + significand[i] = 0; + let index = 0; + let is_zero = false; + let significand_msb; + let significand128 = { parts: [0, 0, 0, 0] }; + let j, k; + const string = []; + index = 0; + const buffer = this.bytes; + const low = buffer[index++] | (buffer[index++] << 8) | (buffer[index++] << 16) | (buffer[index++] << 24); + const midl = buffer[index++] | (buffer[index++] << 8) | (buffer[index++] << 16) | (buffer[index++] << 24); + const midh = buffer[index++] | (buffer[index++] << 8) | (buffer[index++] << 16) | (buffer[index++] << 24); + const high = buffer[index++] | (buffer[index++] << 8) | (buffer[index++] << 16) | (buffer[index++] << 24); + index = 0; + const dec = { + low: new Long(low, midl), + high: new Long(midh, high) + }; + if (dec.high.lessThan(Long.ZERO)) { + string.push('-'); + } + const combination = (high >> 26) & COMBINATION_MASK; + if (combination >> 3 === 3) { + if (combination === COMBINATION_INFINITY) { + return string.join('') + 'Infinity'; + } + else if (combination === COMBINATION_NAN) { + return 'NaN'; + } + else { + biased_exponent = (high >> 15) & EXPONENT_MASK; + significand_msb = 0x08 + ((high >> 14) & 0x01); + } + } + else { + significand_msb = (high >> 14) & 0x07; + biased_exponent = (high >> 17) & EXPONENT_MASK; + } + const exponent = biased_exponent - EXPONENT_BIAS; + significand128.parts[0] = (high & 0x3fff) + ((significand_msb & 0xf) << 14); + significand128.parts[1] = midh; + significand128.parts[2] = midl; + significand128.parts[3] = low; + if (significand128.parts[0] === 0 && + significand128.parts[1] === 0 && + significand128.parts[2] === 0 && + significand128.parts[3] === 0) { + is_zero = true; + } + else { + for (k = 3; k >= 0; k--) { + let least_digits = 0; + const result = divideu128(significand128); + significand128 = result.quotient; + least_digits = result.rem.low; + if (!least_digits) + continue; + for (j = 8; j >= 0; j--) { + significand[k * 9 + j] = least_digits % 10; + least_digits = Math.floor(least_digits / 10); + } + } + } + if (is_zero) { + significand_digits = 1; + significand[index] = 0; + } + else { + significand_digits = 36; + while (!significand[index]) { + significand_digits = significand_digits - 1; + index = index + 1; + } + } + const scientific_exponent = significand_digits - 1 + exponent; + if (scientific_exponent >= 34 || scientific_exponent <= -7 || exponent > 0) { + if (significand_digits > 34) { + string.push(`${0}`); + if (exponent > 0) + string.push(`E+${exponent}`); + else if (exponent < 0) + string.push(`E${exponent}`); + return string.join(''); + } + string.push(`${significand[index++]}`); + significand_digits = significand_digits - 1; + if (significand_digits) { + string.push('.'); + } + for (let i = 0; i < significand_digits; i++) { + string.push(`${significand[index++]}`); + } + string.push('E'); + if (scientific_exponent > 0) { + string.push(`+${scientific_exponent}`); + } + else { + string.push(`${scientific_exponent}`); + } + } + else { + if (exponent >= 0) { + for (let i = 0; i < significand_digits; i++) { + string.push(`${significand[index++]}`); + } + } + else { + let radix_position = significand_digits + exponent; + if (radix_position > 0) { + for (let i = 0; i < radix_position; i++) { + string.push(`${significand[index++]}`); + } + } + else { + string.push('0'); + } + string.push('.'); + while (radix_position++ < 0) { + string.push('0'); + } + for (let i = 0; i < significand_digits - Math.max(radix_position - 1, 0); i++) { + string.push(`${significand[index++]}`); + } + } + } + return string.join(''); + } + toJSON() { + return { $numberDecimal: this.toString() }; + } + toExtendedJSON() { + return { $numberDecimal: this.toString() }; + } + static fromExtendedJSON(doc) { + return Decimal128.fromString(doc.$numberDecimal); + } + [Symbol.for('nodejs.util.inspect.custom')]() { + return this.inspect(); + } + inspect() { + return `new Decimal128("${this.toString()}")`; + } +} + +class Double extends BSONValue { + get _bsontype() { + return 'Double'; + } + constructor(value) { + super(); + if (value instanceof Number) { + value = value.valueOf(); + } + this.value = +value; + } + valueOf() { + return this.value; + } + toJSON() { + return this.value; + } + toString(radix) { + return this.value.toString(radix); + } + toExtendedJSON(options) { + if (options && (options.legacy || (options.relaxed && isFinite(this.value)))) { + return this.value; + } + if (Object.is(Math.sign(this.value), -0)) { + return { $numberDouble: '-0.0' }; + } + return { + $numberDouble: Number.isInteger(this.value) ? this.value.toFixed(1) : this.value.toString() + }; + } + static fromExtendedJSON(doc, options) { + const doubleValue = parseFloat(doc.$numberDouble); + return options && options.relaxed ? doubleValue : new Double(doubleValue); + } + [Symbol.for('nodejs.util.inspect.custom')]() { + return this.inspect(); + } + inspect() { + const eJSON = this.toExtendedJSON(); + return `new Double(${eJSON.$numberDouble})`; + } +} + +class Int32 extends BSONValue { + get _bsontype() { + return 'Int32'; + } + constructor(value) { + super(); + if (value instanceof Number) { + value = value.valueOf(); + } + this.value = +value | 0; + } + valueOf() { + return this.value; + } + toString(radix) { + return this.value.toString(radix); + } + toJSON() { + return this.value; + } + toExtendedJSON(options) { + if (options && (options.relaxed || options.legacy)) + return this.value; + return { $numberInt: this.value.toString() }; + } + static fromExtendedJSON(doc, options) { + return options && options.relaxed ? parseInt(doc.$numberInt, 10) : new Int32(doc.$numberInt); + } + [Symbol.for('nodejs.util.inspect.custom')]() { + return this.inspect(); + } + inspect() { + return `new Int32(${this.valueOf()})`; + } +} + +class MaxKey extends BSONValue { + get _bsontype() { + return 'MaxKey'; + } + toExtendedJSON() { + return { $maxKey: 1 }; + } + static fromExtendedJSON() { + return new MaxKey(); + } + [Symbol.for('nodejs.util.inspect.custom')]() { + return this.inspect(); + } + inspect() { + return 'new MaxKey()'; + } +} + +class MinKey extends BSONValue { + get _bsontype() { + return 'MinKey'; + } + toExtendedJSON() { + return { $minKey: 1 }; + } + static fromExtendedJSON() { + return new MinKey(); + } + [Symbol.for('nodejs.util.inspect.custom')]() { + return this.inspect(); + } + inspect() { + return 'new MinKey()'; + } +} + +const checkForHexRegExp = new RegExp('^[0-9a-fA-F]{24}$'); +let PROCESS_UNIQUE = null; +const kId = Symbol('id'); +class ObjectId extends BSONValue { + get _bsontype() { + return 'ObjectId'; + } + constructor(inputId) { + super(); + let workingId; + if (typeof inputId === 'object' && inputId && 'id' in inputId) { + if (typeof inputId.id !== 'string' && !ArrayBuffer.isView(inputId.id)) { + throw new BSONError('Argument passed in must have an id that is of type string or Buffer'); + } + if ('toHexString' in inputId && typeof inputId.toHexString === 'function') { + workingId = ByteUtils.fromHex(inputId.toHexString()); + } + else { + workingId = inputId.id; + } + } + else { + workingId = inputId; + } + if (workingId == null || typeof workingId === 'number') { + this[kId] = ObjectId.generate(typeof workingId === 'number' ? workingId : undefined); + } + else if (ArrayBuffer.isView(workingId) && workingId.byteLength === 12) { + this[kId] = ByteUtils.toLocalBufferType(workingId); + } + else if (typeof workingId === 'string') { + if (workingId.length === 12) { + const bytes = ByteUtils.fromUTF8(workingId); + if (bytes.byteLength === 12) { + this[kId] = bytes; + } + else { + throw new BSONError('Argument passed in must be a string of 12 bytes'); + } + } + else if (workingId.length === 24 && checkForHexRegExp.test(workingId)) { + this[kId] = ByteUtils.fromHex(workingId); + } + else { + throw new BSONError('Argument passed in must be a string of 12 bytes or a string of 24 hex characters or an integer'); + } + } + else { + throw new BSONError('Argument passed in does not match the accepted types'); + } + if (ObjectId.cacheHexString) { + this.__id = ByteUtils.toHex(this.id); + } + } + get id() { + return this[kId]; + } + set id(value) { + this[kId] = value; + if (ObjectId.cacheHexString) { + this.__id = ByteUtils.toHex(value); + } + } + toHexString() { + if (ObjectId.cacheHexString && this.__id) { + return this.__id; + } + const hexString = ByteUtils.toHex(this.id); + if (ObjectId.cacheHexString && !this.__id) { + this.__id = hexString; + } + return hexString; + } + static getInc() { + return (ObjectId.index = (ObjectId.index + 1) % 0xffffff); + } + static generate(time) { + if ('number' !== typeof time) { + time = Math.floor(Date.now() / 1000); + } + const inc = ObjectId.getInc(); + const buffer = ByteUtils.allocate(12); + BSONDataView.fromUint8Array(buffer).setUint32(0, time, false); + if (PROCESS_UNIQUE === null) { + PROCESS_UNIQUE = ByteUtils.randomBytes(5); + } + buffer[4] = PROCESS_UNIQUE[0]; + buffer[5] = PROCESS_UNIQUE[1]; + buffer[6] = PROCESS_UNIQUE[2]; + buffer[7] = PROCESS_UNIQUE[3]; + buffer[8] = PROCESS_UNIQUE[4]; + buffer[11] = inc & 0xff; + buffer[10] = (inc >> 8) & 0xff; + buffer[9] = (inc >> 16) & 0xff; + return buffer; + } + toString(encoding) { + if (encoding === 'base64') + return ByteUtils.toBase64(this.id); + if (encoding === 'hex') + return this.toHexString(); + return this.toHexString(); + } + toJSON() { + return this.toHexString(); + } + equals(otherId) { + if (otherId === undefined || otherId === null) { + return false; + } + if (otherId instanceof ObjectId) { + return this[kId][11] === otherId[kId][11] && ByteUtils.equals(this[kId], otherId[kId]); + } + if (typeof otherId === 'string' && + ObjectId.isValid(otherId) && + otherId.length === 12 && + isUint8Array(this.id)) { + return ByteUtils.equals(this.id, ByteUtils.fromISO88591(otherId)); + } + if (typeof otherId === 'string' && ObjectId.isValid(otherId) && otherId.length === 24) { + return otherId.toLowerCase() === this.toHexString(); + } + if (typeof otherId === 'string' && ObjectId.isValid(otherId) && otherId.length === 12) { + return ByteUtils.equals(ByteUtils.fromUTF8(otherId), this.id); + } + if (typeof otherId === 'object' && + 'toHexString' in otherId && + typeof otherId.toHexString === 'function') { + const otherIdString = otherId.toHexString(); + const thisIdString = this.toHexString().toLowerCase(); + return typeof otherIdString === 'string' && otherIdString.toLowerCase() === thisIdString; + } + return false; + } + getTimestamp() { + const timestamp = new Date(); + const time = BSONDataView.fromUint8Array(this.id).getUint32(0, false); + timestamp.setTime(Math.floor(time) * 1000); + return timestamp; + } + static createPk() { + return new ObjectId(); + } + static createFromTime(time) { + const buffer = ByteUtils.fromNumberArray([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + BSONDataView.fromUint8Array(buffer).setUint32(0, time, false); + return new ObjectId(buffer); + } + static createFromHexString(hexString) { + if (hexString?.length !== 24) { + throw new BSONError('hex string must be 24 characters'); + } + return new ObjectId(ByteUtils.fromHex(hexString)); + } + static createFromBase64(base64) { + if (base64?.length !== 16) { + throw new BSONError('base64 string must be 16 characters'); + } + return new ObjectId(ByteUtils.fromBase64(base64)); + } + static isValid(id) { + if (id == null) + return false; + try { + new ObjectId(id); + return true; + } + catch { + return false; + } + } + toExtendedJSON() { + if (this.toHexString) + return { $oid: this.toHexString() }; + return { $oid: this.toString('hex') }; + } + static fromExtendedJSON(doc) { + return new ObjectId(doc.$oid); + } + [Symbol.for('nodejs.util.inspect.custom')]() { + return this.inspect(); + } + inspect() { + return `new ObjectId("${this.toHexString()}")`; + } +} +ObjectId.index = Math.floor(Math.random() * 0xffffff); + +function internalCalculateObjectSize(object, serializeFunctions, ignoreUndefined) { + let totalLength = 4 + 1; + if (Array.isArray(object)) { + for (let i = 0; i < object.length; i++) { + totalLength += calculateElement(i.toString(), object[i], serializeFunctions, true, ignoreUndefined); + } + } + else { + if (typeof object?.toBSON === 'function') { + object = object.toBSON(); + } + for (const key of Object.keys(object)) { + totalLength += calculateElement(key, object[key], serializeFunctions, false, ignoreUndefined); + } + } + return totalLength; +} +function calculateElement(name, value, serializeFunctions = false, isArray = false, ignoreUndefined = false) { + if (typeof value?.toBSON === 'function') { + value = value.toBSON(); + } + switch (typeof value) { + case 'string': + return 1 + ByteUtils.utf8ByteLength(name) + 1 + 4 + ByteUtils.utf8ByteLength(value) + 1; + case 'number': + if (Math.floor(value) === value && + value >= JS_INT_MIN && + value <= JS_INT_MAX) { + if (value >= BSON_INT32_MIN && value <= BSON_INT32_MAX) { + return (name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + (4 + 1); + } + else { + return (name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + (8 + 1); + } + } + else { + return (name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + (8 + 1); + } + case 'undefined': + if (isArray || !ignoreUndefined) + return (name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + 1; + return 0; + case 'boolean': + return (name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + (1 + 1); + case 'object': + if (value != null && + typeof value._bsontype === 'string' && + value[Symbol.for('@@mdb.bson.version')] !== BSON_MAJOR_VERSION) { + throw new BSONVersionError(); + } + else if (value == null || value._bsontype === 'MinKey' || value._bsontype === 'MaxKey') { + return (name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + 1; + } + else if (value._bsontype === 'ObjectId') { + return (name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + (12 + 1); + } + else if (value instanceof Date || isDate(value)) { + return (name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + (8 + 1); + } + else if (ArrayBuffer.isView(value) || + value instanceof ArrayBuffer || + isAnyArrayBuffer(value)) { + return ((name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + (1 + 4 + 1) + value.byteLength); + } + else if (value._bsontype === 'Long' || + value._bsontype === 'Double' || + value._bsontype === 'Timestamp') { + return (name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + (8 + 1); + } + else if (value._bsontype === 'Decimal128') { + return (name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + (16 + 1); + } + else if (value._bsontype === 'Code') { + if (value.scope != null && Object.keys(value.scope).length > 0) { + return ((name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + + 1 + + 4 + + 4 + + ByteUtils.utf8ByteLength(value.code.toString()) + + 1 + + internalCalculateObjectSize(value.scope, serializeFunctions, ignoreUndefined)); + } + else { + return ((name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + + 1 + + 4 + + ByteUtils.utf8ByteLength(value.code.toString()) + + 1); + } + } + else if (value._bsontype === 'Binary') { + const binary = value; + if (binary.sub_type === Binary.SUBTYPE_BYTE_ARRAY) { + return ((name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + + (binary.position + 1 + 4 + 1 + 4)); + } + else { + return ((name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + (binary.position + 1 + 4 + 1)); + } + } + else if (value._bsontype === 'Symbol') { + return ((name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + + ByteUtils.utf8ByteLength(value.value) + + 4 + + 1 + + 1); + } + else if (value._bsontype === 'DBRef') { + const ordered_values = Object.assign({ + $ref: value.collection, + $id: value.oid + }, value.fields); + if (value.db != null) { + ordered_values['$db'] = value.db; + } + return ((name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + + 1 + + internalCalculateObjectSize(ordered_values, serializeFunctions, ignoreUndefined)); + } + else if (value instanceof RegExp || isRegExp(value)) { + return ((name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + + 1 + + ByteUtils.utf8ByteLength(value.source) + + 1 + + (value.global ? 1 : 0) + + (value.ignoreCase ? 1 : 0) + + (value.multiline ? 1 : 0) + + 1); + } + else if (value._bsontype === 'BSONRegExp') { + return ((name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + + 1 + + ByteUtils.utf8ByteLength(value.pattern) + + 1 + + ByteUtils.utf8ByteLength(value.options) + + 1); + } + else { + return ((name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + + internalCalculateObjectSize(value, serializeFunctions, ignoreUndefined) + + 1); + } + case 'function': + if (serializeFunctions) { + return ((name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + + 1 + + 4 + + ByteUtils.utf8ByteLength(value.toString()) + + 1); + } + } + return 0; +} + +function alphabetize(str) { + return str.split('').sort().join(''); +} +class BSONRegExp extends BSONValue { + get _bsontype() { + return 'BSONRegExp'; + } + constructor(pattern, options) { + super(); + this.pattern = pattern; + this.options = alphabetize(options ?? ''); + if (this.pattern.indexOf('\x00') !== -1) { + throw new BSONError(`BSON Regex patterns cannot contain null bytes, found: ${JSON.stringify(this.pattern)}`); + } + if (this.options.indexOf('\x00') !== -1) { + throw new BSONError(`BSON Regex options cannot contain null bytes, found: ${JSON.stringify(this.options)}`); + } + for (let i = 0; i < this.options.length; i++) { + if (!(this.options[i] === 'i' || + this.options[i] === 'm' || + this.options[i] === 'x' || + this.options[i] === 'l' || + this.options[i] === 's' || + this.options[i] === 'u')) { + throw new BSONError(`The regular expression option [${this.options[i]}] is not supported`); + } + } + } + static parseOptions(options) { + return options ? options.split('').sort().join('') : ''; + } + toExtendedJSON(options) { + options = options || {}; + if (options.legacy) { + return { $regex: this.pattern, $options: this.options }; + } + return { $regularExpression: { pattern: this.pattern, options: this.options } }; + } + static fromExtendedJSON(doc) { + if ('$regex' in doc) { + if (typeof doc.$regex !== 'string') { + if (doc.$regex._bsontype === 'BSONRegExp') { + return doc; + } + } + else { + return new BSONRegExp(doc.$regex, BSONRegExp.parseOptions(doc.$options)); + } + } + if ('$regularExpression' in doc) { + return new BSONRegExp(doc.$regularExpression.pattern, BSONRegExp.parseOptions(doc.$regularExpression.options)); + } + throw new BSONError(`Unexpected BSONRegExp EJSON object form: ${JSON.stringify(doc)}`); + } + [Symbol.for('nodejs.util.inspect.custom')]() { + return this.inspect(); + } + inspect() { + return `new BSONRegExp(${JSON.stringify(this.pattern)}, ${JSON.stringify(this.options)})`; + } +} + +class BSONSymbol extends BSONValue { + get _bsontype() { + return 'BSONSymbol'; + } + constructor(value) { + super(); + this.value = value; + } + valueOf() { + return this.value; + } + toString() { + return this.value; + } + inspect() { + return `new BSONSymbol("${this.value}")`; + } + toJSON() { + return this.value; + } + toExtendedJSON() { + return { $symbol: this.value }; + } + static fromExtendedJSON(doc) { + return new BSONSymbol(doc.$symbol); + } + [Symbol.for('nodejs.util.inspect.custom')]() { + return this.inspect(); + } +} + +const LongWithoutOverridesClass = Long; +class Timestamp extends LongWithoutOverridesClass { + get _bsontype() { + return 'Timestamp'; + } + constructor(low) { + if (low == null) { + super(0, 0, true); + } + else if (typeof low === 'bigint') { + super(low, true); + } + else if (Long.isLong(low)) { + super(low.low, low.high, true); + } + else if (typeof low === 'object' && 't' in low && 'i' in low) { + if (typeof low.t !== 'number' && (typeof low.t !== 'object' || low.t._bsontype !== 'Int32')) { + throw new BSONError('Timestamp constructed from { t, i } must provide t as a number'); + } + if (typeof low.i !== 'number' && (typeof low.i !== 'object' || low.i._bsontype !== 'Int32')) { + throw new BSONError('Timestamp constructed from { t, i } must provide i as a number'); + } + const t = Number(low.t); + const i = Number(low.i); + if (t < 0 || Number.isNaN(t)) { + throw new BSONError('Timestamp constructed from { t, i } must provide a positive t'); + } + if (i < 0 || Number.isNaN(i)) { + throw new BSONError('Timestamp constructed from { t, i } must provide a positive i'); + } + if (t > 4294967295) { + throw new BSONError('Timestamp constructed from { t, i } must provide t equal or less than uint32 max'); + } + if (i > 4294967295) { + throw new BSONError('Timestamp constructed from { t, i } must provide i equal or less than uint32 max'); + } + super(i, t, true); + } + else { + throw new BSONError('A Timestamp can only be constructed with: bigint, Long, or { t: number; i: number }'); + } + } + toJSON() { + return { + $timestamp: this.toString() + }; + } + static fromInt(value) { + return new Timestamp(Long.fromInt(value, true)); + } + static fromNumber(value) { + return new Timestamp(Long.fromNumber(value, true)); + } + static fromBits(lowBits, highBits) { + return new Timestamp({ i: lowBits, t: highBits }); + } + static fromString(str, optRadix) { + return new Timestamp(Long.fromString(str, true, optRadix)); + } + toExtendedJSON() { + return { $timestamp: { t: this.high >>> 0, i: this.low >>> 0 } }; + } + static fromExtendedJSON(doc) { + const i = Long.isLong(doc.$timestamp.i) + ? doc.$timestamp.i.getLowBitsUnsigned() + : doc.$timestamp.i; + const t = Long.isLong(doc.$timestamp.t) + ? doc.$timestamp.t.getLowBitsUnsigned() + : doc.$timestamp.t; + return new Timestamp({ t, i }); + } + [Symbol.for('nodejs.util.inspect.custom')]() { + return this.inspect(); + } + inspect() { + return `new Timestamp({ t: ${this.getHighBits()}, i: ${this.getLowBits()} })`; + } +} +Timestamp.MAX_VALUE = Long.MAX_UNSIGNED_VALUE; + +const FIRST_BIT = 0x80; +const FIRST_TWO_BITS = 0xc0; +const FIRST_THREE_BITS = 0xe0; +const FIRST_FOUR_BITS = 0xf0; +const FIRST_FIVE_BITS = 0xf8; +const TWO_BIT_CHAR = 0xc0; +const THREE_BIT_CHAR = 0xe0; +const FOUR_BIT_CHAR = 0xf0; +const CONTINUING_CHAR = 0x80; +function validateUtf8(bytes, start, end) { + let continuation = 0; + for (let i = start; i < end; i += 1) { + const byte = bytes[i]; + if (continuation) { + if ((byte & FIRST_TWO_BITS) !== CONTINUING_CHAR) { + return false; + } + continuation -= 1; + } + else if (byte & FIRST_BIT) { + if ((byte & FIRST_THREE_BITS) === TWO_BIT_CHAR) { + continuation = 1; + } + else if ((byte & FIRST_FOUR_BITS) === THREE_BIT_CHAR) { + continuation = 2; + } + else if ((byte & FIRST_FIVE_BITS) === FOUR_BIT_CHAR) { + continuation = 3; + } + else { + return false; + } + } + } + return !continuation; +} + +const JS_INT_MAX_LONG = Long.fromNumber(JS_INT_MAX); +const JS_INT_MIN_LONG = Long.fromNumber(JS_INT_MIN); +function internalDeserialize(buffer, options, isArray) { + options = options == null ? {} : options; + const index = options && options.index ? options.index : 0; + const size = buffer[index] | + (buffer[index + 1] << 8) | + (buffer[index + 2] << 16) | + (buffer[index + 3] << 24); + if (size < 5) { + throw new BSONError(`bson size must be >= 5, is ${size}`); + } + if (options.allowObjectSmallerThanBufferSize && buffer.length < size) { + throw new BSONError(`buffer length ${buffer.length} must be >= bson size ${size}`); + } + if (!options.allowObjectSmallerThanBufferSize && buffer.length !== size) { + throw new BSONError(`buffer length ${buffer.length} must === bson size ${size}`); + } + if (size + index > buffer.byteLength) { + throw new BSONError(`(bson size ${size} + options.index ${index} must be <= buffer length ${buffer.byteLength})`); + } + if (buffer[index + size - 1] !== 0) { + throw new BSONError("One object, sized correctly, with a spot for an EOO, but the EOO isn't 0x00"); + } + return deserializeObject(buffer, index, options, isArray); +} +const allowedDBRefKeys = /^\$ref$|^\$id$|^\$db$/; +function deserializeObject(buffer, index, options, isArray = false) { + const fieldsAsRaw = options['fieldsAsRaw'] == null ? null : options['fieldsAsRaw']; + const raw = options['raw'] == null ? false : options['raw']; + const bsonRegExp = typeof options['bsonRegExp'] === 'boolean' ? options['bsonRegExp'] : false; + const promoteBuffers = options.promoteBuffers ?? false; + const promoteLongs = options.promoteLongs ?? true; + const promoteValues = options.promoteValues ?? true; + const useBigInt64 = options.useBigInt64 ?? false; + if (useBigInt64 && !promoteValues) { + throw new BSONError('Must either request bigint or Long for int64 deserialization'); + } + if (useBigInt64 && !promoteLongs) { + throw new BSONError('Must either request bigint or Long for int64 deserialization'); + } + const validation = options.validation == null ? { utf8: true } : options.validation; + let globalUTFValidation = true; + let validationSetting; + const utf8KeysSet = new Set(); + const utf8ValidatedKeys = validation.utf8; + if (typeof utf8ValidatedKeys === 'boolean') { + validationSetting = utf8ValidatedKeys; + } + else { + globalUTFValidation = false; + const utf8ValidationValues = Object.keys(utf8ValidatedKeys).map(function (key) { + return utf8ValidatedKeys[key]; + }); + if (utf8ValidationValues.length === 0) { + throw new BSONError('UTF-8 validation setting cannot be empty'); + } + if (typeof utf8ValidationValues[0] !== 'boolean') { + throw new BSONError('Invalid UTF-8 validation option, must specify boolean values'); + } + validationSetting = utf8ValidationValues[0]; + if (!utf8ValidationValues.every(item => item === validationSetting)) { + throw new BSONError('Invalid UTF-8 validation option - keys must be all true or all false'); + } + } + if (!globalUTFValidation) { + for (const key of Object.keys(utf8ValidatedKeys)) { + utf8KeysSet.add(key); + } + } + const startIndex = index; + if (buffer.length < 5) + throw new BSONError('corrupt bson message < 5 bytes long'); + const size = buffer[index++] | (buffer[index++] << 8) | (buffer[index++] << 16) | (buffer[index++] << 24); + if (size < 5 || size > buffer.length) + throw new BSONError('corrupt bson message'); + const object = isArray ? [] : {}; + let arrayIndex = 0; + const done = false; + let isPossibleDBRef = isArray ? false : null; + const dataview = new DataView(buffer.buffer, buffer.byteOffset, buffer.byteLength); + while (!done) { + const elementType = buffer[index++]; + if (elementType === 0) + break; + let i = index; + while (buffer[i] !== 0x00 && i < buffer.length) { + i++; + } + if (i >= buffer.byteLength) + throw new BSONError('Bad BSON Document: illegal CString'); + const name = isArray ? arrayIndex++ : ByteUtils.toUTF8(buffer, index, i); + let shouldValidateKey = true; + if (globalUTFValidation || utf8KeysSet.has(name)) { + shouldValidateKey = validationSetting; + } + else { + shouldValidateKey = !validationSetting; + } + if (isPossibleDBRef !== false && name[0] === '$') { + isPossibleDBRef = allowedDBRefKeys.test(name); + } + let value; + index = i + 1; + if (elementType === BSON_DATA_STRING) { + const stringSize = buffer[index++] | + (buffer[index++] << 8) | + (buffer[index++] << 16) | + (buffer[index++] << 24); + if (stringSize <= 0 || + stringSize > buffer.length - index || + buffer[index + stringSize - 1] !== 0) { + throw new BSONError('bad string length in bson'); + } + value = getValidatedString(buffer, index, index + stringSize - 1, shouldValidateKey); + index = index + stringSize; + } + else if (elementType === BSON_DATA_OID) { + const oid = ByteUtils.allocate(12); + oid.set(buffer.subarray(index, index + 12)); + value = new ObjectId(oid); + index = index + 12; + } + else if (elementType === BSON_DATA_INT && promoteValues === false) { + value = new Int32(buffer[index++] | (buffer[index++] << 8) | (buffer[index++] << 16) | (buffer[index++] << 24)); + } + else if (elementType === BSON_DATA_INT) { + value = + buffer[index++] | + (buffer[index++] << 8) | + (buffer[index++] << 16) | + (buffer[index++] << 24); + } + else if (elementType === BSON_DATA_NUMBER && promoteValues === false) { + value = new Double(dataview.getFloat64(index, true)); + index = index + 8; + } + else if (elementType === BSON_DATA_NUMBER) { + value = dataview.getFloat64(index, true); + index = index + 8; + } + else if (elementType === BSON_DATA_DATE) { + const lowBits = buffer[index++] | + (buffer[index++] << 8) | + (buffer[index++] << 16) | + (buffer[index++] << 24); + const highBits = buffer[index++] | + (buffer[index++] << 8) | + (buffer[index++] << 16) | + (buffer[index++] << 24); + value = new Date(new Long(lowBits, highBits).toNumber()); + } + else if (elementType === BSON_DATA_BOOLEAN) { + if (buffer[index] !== 0 && buffer[index] !== 1) + throw new BSONError('illegal boolean type value'); + value = buffer[index++] === 1; + } + else if (elementType === BSON_DATA_OBJECT) { + const _index = index; + const objectSize = buffer[index] | + (buffer[index + 1] << 8) | + (buffer[index + 2] << 16) | + (buffer[index + 3] << 24); + if (objectSize <= 0 || objectSize > buffer.length - index) + throw new BSONError('bad embedded document length in bson'); + if (raw) { + value = buffer.slice(index, index + objectSize); + } + else { + let objectOptions = options; + if (!globalUTFValidation) { + objectOptions = { ...options, validation: { utf8: shouldValidateKey } }; + } + value = deserializeObject(buffer, _index, objectOptions, false); + } + index = index + objectSize; + } + else if (elementType === BSON_DATA_ARRAY) { + const _index = index; + const objectSize = buffer[index] | + (buffer[index + 1] << 8) | + (buffer[index + 2] << 16) | + (buffer[index + 3] << 24); + let arrayOptions = options; + const stopIndex = index + objectSize; + if (fieldsAsRaw && fieldsAsRaw[name]) { + arrayOptions = { ...options, raw: true }; + } + if (!globalUTFValidation) { + arrayOptions = { ...arrayOptions, validation: { utf8: shouldValidateKey } }; + } + value = deserializeObject(buffer, _index, arrayOptions, true); + index = index + objectSize; + if (buffer[index - 1] !== 0) + throw new BSONError('invalid array terminator byte'); + if (index !== stopIndex) + throw new BSONError('corrupted array bson'); + } + else if (elementType === BSON_DATA_UNDEFINED) { + value = undefined; + } + else if (elementType === BSON_DATA_NULL) { + value = null; + } + else if (elementType === BSON_DATA_LONG) { + const dataview = BSONDataView.fromUint8Array(buffer.subarray(index, index + 8)); + const lowBits = buffer[index++] | + (buffer[index++] << 8) | + (buffer[index++] << 16) | + (buffer[index++] << 24); + const highBits = buffer[index++] | + (buffer[index++] << 8) | + (buffer[index++] << 16) | + (buffer[index++] << 24); + const long = new Long(lowBits, highBits); + if (useBigInt64) { + value = dataview.getBigInt64(0, true); + } + else if (promoteLongs && promoteValues === true) { + value = + long.lessThanOrEqual(JS_INT_MAX_LONG) && long.greaterThanOrEqual(JS_INT_MIN_LONG) + ? long.toNumber() + : long; + } + else { + value = long; + } + } + else if (elementType === BSON_DATA_DECIMAL128) { + const bytes = ByteUtils.allocate(16); + bytes.set(buffer.subarray(index, index + 16), 0); + index = index + 16; + value = new Decimal128(bytes); + } + else if (elementType === BSON_DATA_BINARY) { + let binarySize = buffer[index++] | + (buffer[index++] << 8) | + (buffer[index++] << 16) | + (buffer[index++] << 24); + const totalBinarySize = binarySize; + const subType = buffer[index++]; + if (binarySize < 0) + throw new BSONError('Negative binary type element size found'); + if (binarySize > buffer.byteLength) + throw new BSONError('Binary type size larger than document size'); + if (buffer['slice'] != null) { + if (subType === Binary.SUBTYPE_BYTE_ARRAY) { + binarySize = + buffer[index++] | + (buffer[index++] << 8) | + (buffer[index++] << 16) | + (buffer[index++] << 24); + if (binarySize < 0) + throw new BSONError('Negative binary type element size found for subtype 0x02'); + if (binarySize > totalBinarySize - 4) + throw new BSONError('Binary type with subtype 0x02 contains too long binary size'); + if (binarySize < totalBinarySize - 4) + throw new BSONError('Binary type with subtype 0x02 contains too short binary size'); + } + if (promoteBuffers && promoteValues) { + value = ByteUtils.toLocalBufferType(buffer.slice(index, index + binarySize)); + } + else { + value = new Binary(buffer.slice(index, index + binarySize), subType); + if (subType === BSON_BINARY_SUBTYPE_UUID_NEW && UUID.isValid(value)) { + value = value.toUUID(); + } + } + } + else { + const _buffer = ByteUtils.allocate(binarySize); + if (subType === Binary.SUBTYPE_BYTE_ARRAY) { + binarySize = + buffer[index++] | + (buffer[index++] << 8) | + (buffer[index++] << 16) | + (buffer[index++] << 24); + if (binarySize < 0) + throw new BSONError('Negative binary type element size found for subtype 0x02'); + if (binarySize > totalBinarySize - 4) + throw new BSONError('Binary type with subtype 0x02 contains too long binary size'); + if (binarySize < totalBinarySize - 4) + throw new BSONError('Binary type with subtype 0x02 contains too short binary size'); + } + for (i = 0; i < binarySize; i++) { + _buffer[i] = buffer[index + i]; + } + if (promoteBuffers && promoteValues) { + value = _buffer; + } + else { + value = new Binary(buffer.slice(index, index + binarySize), subType); + if (subType === BSON_BINARY_SUBTYPE_UUID_NEW && UUID.isValid(value)) { + value = value.toUUID(); + } + } + } + index = index + binarySize; + } + else if (elementType === BSON_DATA_REGEXP && bsonRegExp === false) { + i = index; + while (buffer[i] !== 0x00 && i < buffer.length) { + i++; + } + if (i >= buffer.length) + throw new BSONError('Bad BSON Document: illegal CString'); + const source = ByteUtils.toUTF8(buffer, index, i); + index = i + 1; + i = index; + while (buffer[i] !== 0x00 && i < buffer.length) { + i++; + } + if (i >= buffer.length) + throw new BSONError('Bad BSON Document: illegal CString'); + const regExpOptions = ByteUtils.toUTF8(buffer, index, i); + index = i + 1; + const optionsArray = new Array(regExpOptions.length); + for (i = 0; i < regExpOptions.length; i++) { + switch (regExpOptions[i]) { + case 'm': + optionsArray[i] = 'm'; + break; + case 's': + optionsArray[i] = 'g'; + break; + case 'i': + optionsArray[i] = 'i'; + break; + } + } + value = new RegExp(source, optionsArray.join('')); + } + else if (elementType === BSON_DATA_REGEXP && bsonRegExp === true) { + i = index; + while (buffer[i] !== 0x00 && i < buffer.length) { + i++; + } + if (i >= buffer.length) + throw new BSONError('Bad BSON Document: illegal CString'); + const source = ByteUtils.toUTF8(buffer, index, i); + index = i + 1; + i = index; + while (buffer[i] !== 0x00 && i < buffer.length) { + i++; + } + if (i >= buffer.length) + throw new BSONError('Bad BSON Document: illegal CString'); + const regExpOptions = ByteUtils.toUTF8(buffer, index, i); + index = i + 1; + value = new BSONRegExp(source, regExpOptions); + } + else if (elementType === BSON_DATA_SYMBOL) { + const stringSize = buffer[index++] | + (buffer[index++] << 8) | + (buffer[index++] << 16) | + (buffer[index++] << 24); + if (stringSize <= 0 || + stringSize > buffer.length - index || + buffer[index + stringSize - 1] !== 0) { + throw new BSONError('bad string length in bson'); + } + const symbol = getValidatedString(buffer, index, index + stringSize - 1, shouldValidateKey); + value = promoteValues ? symbol : new BSONSymbol(symbol); + index = index + stringSize; + } + else if (elementType === BSON_DATA_TIMESTAMP) { + const i = buffer[index++] + + buffer[index++] * (1 << 8) + + buffer[index++] * (1 << 16) + + buffer[index++] * (1 << 24); + const t = buffer[index++] + + buffer[index++] * (1 << 8) + + buffer[index++] * (1 << 16) + + buffer[index++] * (1 << 24); + value = new Timestamp({ i, t }); + } + else if (elementType === BSON_DATA_MIN_KEY) { + value = new MinKey(); + } + else if (elementType === BSON_DATA_MAX_KEY) { + value = new MaxKey(); + } + else if (elementType === BSON_DATA_CODE) { + const stringSize = buffer[index++] | + (buffer[index++] << 8) | + (buffer[index++] << 16) | + (buffer[index++] << 24); + if (stringSize <= 0 || + stringSize > buffer.length - index || + buffer[index + stringSize - 1] !== 0) { + throw new BSONError('bad string length in bson'); + } + const functionString = getValidatedString(buffer, index, index + stringSize - 1, shouldValidateKey); + value = new Code(functionString); + index = index + stringSize; + } + else if (elementType === BSON_DATA_CODE_W_SCOPE) { + const totalSize = buffer[index++] | + (buffer[index++] << 8) | + (buffer[index++] << 16) | + (buffer[index++] << 24); + if (totalSize < 4 + 4 + 4 + 1) { + throw new BSONError('code_w_scope total size shorter minimum expected length'); + } + const stringSize = buffer[index++] | + (buffer[index++] << 8) | + (buffer[index++] << 16) | + (buffer[index++] << 24); + if (stringSize <= 0 || + stringSize > buffer.length - index || + buffer[index + stringSize - 1] !== 0) { + throw new BSONError('bad string length in bson'); + } + const functionString = getValidatedString(buffer, index, index + stringSize - 1, shouldValidateKey); + index = index + stringSize; + const _index = index; + const objectSize = buffer[index] | + (buffer[index + 1] << 8) | + (buffer[index + 2] << 16) | + (buffer[index + 3] << 24); + const scopeObject = deserializeObject(buffer, _index, options, false); + index = index + objectSize; + if (totalSize < 4 + 4 + objectSize + stringSize) { + throw new BSONError('code_w_scope total size is too short, truncating scope'); + } + if (totalSize > 4 + 4 + objectSize + stringSize) { + throw new BSONError('code_w_scope total size is too long, clips outer document'); + } + value = new Code(functionString, scopeObject); + } + else if (elementType === BSON_DATA_DBPOINTER) { + const stringSize = buffer[index++] | + (buffer[index++] << 8) | + (buffer[index++] << 16) | + (buffer[index++] << 24); + if (stringSize <= 0 || + stringSize > buffer.length - index || + buffer[index + stringSize - 1] !== 0) + throw new BSONError('bad string length in bson'); + if (validation != null && validation.utf8) { + if (!validateUtf8(buffer, index, index + stringSize - 1)) { + throw new BSONError('Invalid UTF-8 string in BSON document'); + } + } + const namespace = ByteUtils.toUTF8(buffer, index, index + stringSize - 1); + index = index + stringSize; + const oidBuffer = ByteUtils.allocate(12); + oidBuffer.set(buffer.subarray(index, index + 12), 0); + const oid = new ObjectId(oidBuffer); + index = index + 12; + value = new DBRef(namespace, oid); + } + else { + throw new BSONError(`Detected unknown BSON type ${elementType.toString(16)} for fieldname "${name}"`); + } + if (name === '__proto__') { + Object.defineProperty(object, name, { + value, + writable: true, + enumerable: true, + configurable: true + }); + } + else { + object[name] = value; + } + } + if (size !== index - startIndex) { + if (isArray) + throw new BSONError('corrupt array bson'); + throw new BSONError('corrupt object bson'); + } + if (!isPossibleDBRef) + return object; + if (isDBRefLike(object)) { + const copy = Object.assign({}, object); + delete copy.$ref; + delete copy.$id; + delete copy.$db; + return new DBRef(object.$ref, object.$id, object.$db, copy); + } + return object; +} +function getValidatedString(buffer, start, end, shouldValidateUtf8) { + const value = ByteUtils.toUTF8(buffer, start, end); + if (shouldValidateUtf8) { + for (let i = 0; i < value.length; i++) { + if (value.charCodeAt(i) === 0xfffd) { + if (!validateUtf8(buffer, start, end)) { + throw new BSONError('Invalid UTF-8 string in BSON document'); + } + break; + } + } + } + return value; +} + +const regexp = /\x00/; +const ignoreKeys = new Set(['$db', '$ref', '$id', '$clusterTime']); +function serializeString(buffer, key, value, index) { + buffer[index++] = BSON_DATA_STRING; + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + index = index + numberOfWrittenBytes + 1; + buffer[index - 1] = 0; + const size = ByteUtils.encodeUTF8Into(buffer, value, index + 4); + buffer[index + 3] = ((size + 1) >> 24) & 0xff; + buffer[index + 2] = ((size + 1) >> 16) & 0xff; + buffer[index + 1] = ((size + 1) >> 8) & 0xff; + buffer[index] = (size + 1) & 0xff; + index = index + 4 + size; + buffer[index++] = 0; + return index; +} +const NUMBER_SPACE = new DataView(new ArrayBuffer(8), 0, 8); +const FOUR_BYTE_VIEW_ON_NUMBER = new Uint8Array(NUMBER_SPACE.buffer, 0, 4); +const EIGHT_BYTE_VIEW_ON_NUMBER = new Uint8Array(NUMBER_SPACE.buffer, 0, 8); +function serializeNumber(buffer, key, value, index) { + const isNegativeZero = Object.is(value, -0); + const type = !isNegativeZero && + Number.isSafeInteger(value) && + value <= BSON_INT32_MAX && + value >= BSON_INT32_MIN + ? BSON_DATA_INT + : BSON_DATA_NUMBER; + if (type === BSON_DATA_INT) { + NUMBER_SPACE.setInt32(0, value, true); + } + else { + NUMBER_SPACE.setFloat64(0, value, true); + } + const bytes = type === BSON_DATA_INT ? FOUR_BYTE_VIEW_ON_NUMBER : EIGHT_BYTE_VIEW_ON_NUMBER; + buffer[index++] = type; + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + index = index + numberOfWrittenBytes; + buffer[index++] = 0x00; + buffer.set(bytes, index); + index += bytes.byteLength; + return index; +} +function serializeBigInt(buffer, key, value, index) { + buffer[index++] = BSON_DATA_LONG; + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + index += numberOfWrittenBytes; + buffer[index++] = 0; + NUMBER_SPACE.setBigInt64(0, value, true); + buffer.set(EIGHT_BYTE_VIEW_ON_NUMBER, index); + index += EIGHT_BYTE_VIEW_ON_NUMBER.byteLength; + return index; +} +function serializeNull(buffer, key, _, index) { + buffer[index++] = BSON_DATA_NULL; + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + return index; +} +function serializeBoolean(buffer, key, value, index) { + buffer[index++] = BSON_DATA_BOOLEAN; + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + buffer[index++] = value ? 1 : 0; + return index; +} +function serializeDate(buffer, key, value, index) { + buffer[index++] = BSON_DATA_DATE; + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + const dateInMilis = Long.fromNumber(value.getTime()); + const lowBits = dateInMilis.getLowBits(); + const highBits = dateInMilis.getHighBits(); + buffer[index++] = lowBits & 0xff; + buffer[index++] = (lowBits >> 8) & 0xff; + buffer[index++] = (lowBits >> 16) & 0xff; + buffer[index++] = (lowBits >> 24) & 0xff; + buffer[index++] = highBits & 0xff; + buffer[index++] = (highBits >> 8) & 0xff; + buffer[index++] = (highBits >> 16) & 0xff; + buffer[index++] = (highBits >> 24) & 0xff; + return index; +} +function serializeRegExp(buffer, key, value, index) { + buffer[index++] = BSON_DATA_REGEXP; + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + if (value.source && value.source.match(regexp) != null) { + throw new BSONError('value ' + value.source + ' must not contain null bytes'); + } + index = index + ByteUtils.encodeUTF8Into(buffer, value.source, index); + buffer[index++] = 0x00; + if (value.ignoreCase) + buffer[index++] = 0x69; + if (value.global) + buffer[index++] = 0x73; + if (value.multiline) + buffer[index++] = 0x6d; + buffer[index++] = 0x00; + return index; +} +function serializeBSONRegExp(buffer, key, value, index) { + buffer[index++] = BSON_DATA_REGEXP; + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + if (value.pattern.match(regexp) != null) { + throw new BSONError('pattern ' + value.pattern + ' must not contain null bytes'); + } + index = index + ByteUtils.encodeUTF8Into(buffer, value.pattern, index); + buffer[index++] = 0x00; + const sortedOptions = value.options.split('').sort().join(''); + index = index + ByteUtils.encodeUTF8Into(buffer, sortedOptions, index); + buffer[index++] = 0x00; + return index; +} +function serializeMinMax(buffer, key, value, index) { + if (value === null) { + buffer[index++] = BSON_DATA_NULL; + } + else if (value._bsontype === 'MinKey') { + buffer[index++] = BSON_DATA_MIN_KEY; + } + else { + buffer[index++] = BSON_DATA_MAX_KEY; + } + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + return index; +} +function serializeObjectId(buffer, key, value, index) { + buffer[index++] = BSON_DATA_OID; + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + if (isUint8Array(value.id)) { + buffer.set(value.id.subarray(0, 12), index); + } + else { + throw new BSONError('object [' + JSON.stringify(value) + '] is not a valid ObjectId'); + } + return index + 12; +} +function serializeBuffer(buffer, key, value, index) { + buffer[index++] = BSON_DATA_BINARY; + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + const size = value.length; + buffer[index++] = size & 0xff; + buffer[index++] = (size >> 8) & 0xff; + buffer[index++] = (size >> 16) & 0xff; + buffer[index++] = (size >> 24) & 0xff; + buffer[index++] = BSON_BINARY_SUBTYPE_DEFAULT; + buffer.set(value, index); + index = index + size; + return index; +} +function serializeObject(buffer, key, value, index, checkKeys, depth, serializeFunctions, ignoreUndefined, path) { + if (path.has(value)) { + throw new BSONError('Cannot convert circular structure to BSON'); + } + path.add(value); + buffer[index++] = Array.isArray(value) ? BSON_DATA_ARRAY : BSON_DATA_OBJECT; + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + const endIndex = serializeInto(buffer, value, checkKeys, index, depth + 1, serializeFunctions, ignoreUndefined, path); + path.delete(value); + return endIndex; +} +function serializeDecimal128(buffer, key, value, index) { + buffer[index++] = BSON_DATA_DECIMAL128; + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + buffer.set(value.bytes.subarray(0, 16), index); + return index + 16; +} +function serializeLong(buffer, key, value, index) { + buffer[index++] = + value._bsontype === 'Long' ? BSON_DATA_LONG : BSON_DATA_TIMESTAMP; + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + const lowBits = value.getLowBits(); + const highBits = value.getHighBits(); + buffer[index++] = lowBits & 0xff; + buffer[index++] = (lowBits >> 8) & 0xff; + buffer[index++] = (lowBits >> 16) & 0xff; + buffer[index++] = (lowBits >> 24) & 0xff; + buffer[index++] = highBits & 0xff; + buffer[index++] = (highBits >> 8) & 0xff; + buffer[index++] = (highBits >> 16) & 0xff; + buffer[index++] = (highBits >> 24) & 0xff; + return index; +} +function serializeInt32(buffer, key, value, index) { + value = value.valueOf(); + buffer[index++] = BSON_DATA_INT; + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + buffer[index++] = value & 0xff; + buffer[index++] = (value >> 8) & 0xff; + buffer[index++] = (value >> 16) & 0xff; + buffer[index++] = (value >> 24) & 0xff; + return index; +} +function serializeDouble(buffer, key, value, index) { + buffer[index++] = BSON_DATA_NUMBER; + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + NUMBER_SPACE.setFloat64(0, value.value, true); + buffer.set(EIGHT_BYTE_VIEW_ON_NUMBER, index); + index = index + 8; + return index; +} +function serializeFunction(buffer, key, value, index) { + buffer[index++] = BSON_DATA_CODE; + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + const functionString = value.toString(); + const size = ByteUtils.encodeUTF8Into(buffer, functionString, index + 4) + 1; + buffer[index] = size & 0xff; + buffer[index + 1] = (size >> 8) & 0xff; + buffer[index + 2] = (size >> 16) & 0xff; + buffer[index + 3] = (size >> 24) & 0xff; + index = index + 4 + size - 1; + buffer[index++] = 0; + return index; +} +function serializeCode(buffer, key, value, index, checkKeys = false, depth = 0, serializeFunctions = false, ignoreUndefined = true, path) { + if (value.scope && typeof value.scope === 'object') { + buffer[index++] = BSON_DATA_CODE_W_SCOPE; + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + let startIndex = index; + const functionString = value.code; + index = index + 4; + const codeSize = ByteUtils.encodeUTF8Into(buffer, functionString, index + 4) + 1; + buffer[index] = codeSize & 0xff; + buffer[index + 1] = (codeSize >> 8) & 0xff; + buffer[index + 2] = (codeSize >> 16) & 0xff; + buffer[index + 3] = (codeSize >> 24) & 0xff; + buffer[index + 4 + codeSize - 1] = 0; + index = index + codeSize + 4; + const endIndex = serializeInto(buffer, value.scope, checkKeys, index, depth + 1, serializeFunctions, ignoreUndefined, path); + index = endIndex - 1; + const totalSize = endIndex - startIndex; + buffer[startIndex++] = totalSize & 0xff; + buffer[startIndex++] = (totalSize >> 8) & 0xff; + buffer[startIndex++] = (totalSize >> 16) & 0xff; + buffer[startIndex++] = (totalSize >> 24) & 0xff; + buffer[index++] = 0; + } + else { + buffer[index++] = BSON_DATA_CODE; + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + const functionString = value.code.toString(); + const size = ByteUtils.encodeUTF8Into(buffer, functionString, index + 4) + 1; + buffer[index] = size & 0xff; + buffer[index + 1] = (size >> 8) & 0xff; + buffer[index + 2] = (size >> 16) & 0xff; + buffer[index + 3] = (size >> 24) & 0xff; + index = index + 4 + size - 1; + buffer[index++] = 0; + } + return index; +} +function serializeBinary(buffer, key, value, index) { + buffer[index++] = BSON_DATA_BINARY; + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + const data = value.buffer; + let size = value.position; + if (value.sub_type === Binary.SUBTYPE_BYTE_ARRAY) + size = size + 4; + buffer[index++] = size & 0xff; + buffer[index++] = (size >> 8) & 0xff; + buffer[index++] = (size >> 16) & 0xff; + buffer[index++] = (size >> 24) & 0xff; + buffer[index++] = value.sub_type; + if (value.sub_type === Binary.SUBTYPE_BYTE_ARRAY) { + size = size - 4; + buffer[index++] = size & 0xff; + buffer[index++] = (size >> 8) & 0xff; + buffer[index++] = (size >> 16) & 0xff; + buffer[index++] = (size >> 24) & 0xff; + } + buffer.set(data, index); + index = index + value.position; + return index; +} +function serializeSymbol(buffer, key, value, index) { + buffer[index++] = BSON_DATA_SYMBOL; + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + const size = ByteUtils.encodeUTF8Into(buffer, value.value, index + 4) + 1; + buffer[index] = size & 0xff; + buffer[index + 1] = (size >> 8) & 0xff; + buffer[index + 2] = (size >> 16) & 0xff; + buffer[index + 3] = (size >> 24) & 0xff; + index = index + 4 + size - 1; + buffer[index++] = 0x00; + return index; +} +function serializeDBRef(buffer, key, value, index, depth, serializeFunctions, path) { + buffer[index++] = BSON_DATA_OBJECT; + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + let startIndex = index; + let output = { + $ref: value.collection || value.namespace, + $id: value.oid + }; + if (value.db != null) { + output.$db = value.db; + } + output = Object.assign(output, value.fields); + const endIndex = serializeInto(buffer, output, false, index, depth + 1, serializeFunctions, true, path); + const size = endIndex - startIndex; + buffer[startIndex++] = size & 0xff; + buffer[startIndex++] = (size >> 8) & 0xff; + buffer[startIndex++] = (size >> 16) & 0xff; + buffer[startIndex++] = (size >> 24) & 0xff; + return endIndex; +} +function serializeInto(buffer, object, checkKeys, startingIndex, depth, serializeFunctions, ignoreUndefined, path) { + if (path == null) { + if (object == null) { + buffer[0] = 0x05; + buffer[1] = 0x00; + buffer[2] = 0x00; + buffer[3] = 0x00; + buffer[4] = 0x00; + return 5; + } + if (Array.isArray(object)) { + throw new BSONError('serialize does not support an array as the root input'); + } + if (typeof object !== 'object') { + throw new BSONError('serialize does not support non-object as the root input'); + } + else if ('_bsontype' in object && typeof object._bsontype === 'string') { + throw new BSONError(`BSON types cannot be serialized as a document`); + } + else if (isDate(object) || + isRegExp(object) || + isUint8Array(object) || + isAnyArrayBuffer(object)) { + throw new BSONError(`date, regexp, typedarray, and arraybuffer cannot be BSON documents`); + } + path = new Set(); + } + path.add(object); + let index = startingIndex + 4; + if (Array.isArray(object)) { + for (let i = 0; i < object.length; i++) { + const key = `${i}`; + let value = object[i]; + if (typeof value?.toBSON === 'function') { + value = value.toBSON(); + } + if (typeof value === 'string') { + index = serializeString(buffer, key, value, index); + } + else if (typeof value === 'number') { + index = serializeNumber(buffer, key, value, index); + } + else if (typeof value === 'bigint') { + index = serializeBigInt(buffer, key, value, index); + } + else if (typeof value === 'boolean') { + index = serializeBoolean(buffer, key, value, index); + } + else if (value instanceof Date || isDate(value)) { + index = serializeDate(buffer, key, value, index); + } + else if (value === undefined) { + index = serializeNull(buffer, key, value, index); + } + else if (value === null) { + index = serializeNull(buffer, key, value, index); + } + else if (isUint8Array(value)) { + index = serializeBuffer(buffer, key, value, index); + } + else if (value instanceof RegExp || isRegExp(value)) { + index = serializeRegExp(buffer, key, value, index); + } + else if (typeof value === 'object' && value._bsontype == null) { + index = serializeObject(buffer, key, value, index, checkKeys, depth, serializeFunctions, ignoreUndefined, path); + } + else if (typeof value === 'object' && + value[Symbol.for('@@mdb.bson.version')] !== BSON_MAJOR_VERSION) { + throw new BSONVersionError(); + } + else if (value._bsontype === 'ObjectId') { + index = serializeObjectId(buffer, key, value, index); + } + else if (value._bsontype === 'Decimal128') { + index = serializeDecimal128(buffer, key, value, index); + } + else if (value._bsontype === 'Long' || value._bsontype === 'Timestamp') { + index = serializeLong(buffer, key, value, index); + } + else if (value._bsontype === 'Double') { + index = serializeDouble(buffer, key, value, index); + } + else if (typeof value === 'function' && serializeFunctions) { + index = serializeFunction(buffer, key, value, index); + } + else if (value._bsontype === 'Code') { + index = serializeCode(buffer, key, value, index, checkKeys, depth, serializeFunctions, ignoreUndefined, path); + } + else if (value._bsontype === 'Binary') { + index = serializeBinary(buffer, key, value, index); + } + else if (value._bsontype === 'BSONSymbol') { + index = serializeSymbol(buffer, key, value, index); + } + else if (value._bsontype === 'DBRef') { + index = serializeDBRef(buffer, key, value, index, depth, serializeFunctions, path); + } + else if (value._bsontype === 'BSONRegExp') { + index = serializeBSONRegExp(buffer, key, value, index); + } + else if (value._bsontype === 'Int32') { + index = serializeInt32(buffer, key, value, index); + } + else if (value._bsontype === 'MinKey' || value._bsontype === 'MaxKey') { + index = serializeMinMax(buffer, key, value, index); + } + else if (typeof value._bsontype !== 'undefined') { + throw new BSONError(`Unrecognized or invalid _bsontype: ${String(value._bsontype)}`); + } + } + } + else if (object instanceof Map || isMap(object)) { + const iterator = object.entries(); + let done = false; + while (!done) { + const entry = iterator.next(); + done = !!entry.done; + if (done) + continue; + const key = entry.value[0]; + let value = entry.value[1]; + if (typeof value?.toBSON === 'function') { + value = value.toBSON(); + } + const type = typeof value; + if (typeof key === 'string' && !ignoreKeys.has(key)) { + if (key.match(regexp) != null) { + throw new BSONError('key ' + key + ' must not contain null bytes'); + } + if (checkKeys) { + if ('$' === key[0]) { + throw new BSONError('key ' + key + " must not start with '$'"); + } + else if (~key.indexOf('.')) { + throw new BSONError('key ' + key + " must not contain '.'"); + } + } + } + if (type === 'string') { + index = serializeString(buffer, key, value, index); + } + else if (type === 'number') { + index = serializeNumber(buffer, key, value, index); + } + else if (type === 'bigint') { + index = serializeBigInt(buffer, key, value, index); + } + else if (type === 'boolean') { + index = serializeBoolean(buffer, key, value, index); + } + else if (value instanceof Date || isDate(value)) { + index = serializeDate(buffer, key, value, index); + } + else if (value === null || (value === undefined && ignoreUndefined === false)) { + index = serializeNull(buffer, key, value, index); + } + else if (isUint8Array(value)) { + index = serializeBuffer(buffer, key, value, index); + } + else if (value instanceof RegExp || isRegExp(value)) { + index = serializeRegExp(buffer, key, value, index); + } + else if (type === 'object' && value._bsontype == null) { + index = serializeObject(buffer, key, value, index, checkKeys, depth, serializeFunctions, ignoreUndefined, path); + } + else if (typeof value === 'object' && + value[Symbol.for('@@mdb.bson.version')] !== BSON_MAJOR_VERSION) { + throw new BSONVersionError(); + } + else if (value._bsontype === 'ObjectId') { + index = serializeObjectId(buffer, key, value, index); + } + else if (type === 'object' && value._bsontype === 'Decimal128') { + index = serializeDecimal128(buffer, key, value, index); + } + else if (value._bsontype === 'Long' || value._bsontype === 'Timestamp') { + index = serializeLong(buffer, key, value, index); + } + else if (value._bsontype === 'Double') { + index = serializeDouble(buffer, key, value, index); + } + else if (value._bsontype === 'Code') { + index = serializeCode(buffer, key, value, index, checkKeys, depth, serializeFunctions, ignoreUndefined, path); + } + else if (typeof value === 'function' && serializeFunctions) { + index = serializeFunction(buffer, key, value, index); + } + else if (value._bsontype === 'Binary') { + index = serializeBinary(buffer, key, value, index); + } + else if (value._bsontype === 'BSONSymbol') { + index = serializeSymbol(buffer, key, value, index); + } + else if (value._bsontype === 'DBRef') { + index = serializeDBRef(buffer, key, value, index, depth, serializeFunctions, path); + } + else if (value._bsontype === 'BSONRegExp') { + index = serializeBSONRegExp(buffer, key, value, index); + } + else if (value._bsontype === 'Int32') { + index = serializeInt32(buffer, key, value, index); + } + else if (value._bsontype === 'MinKey' || value._bsontype === 'MaxKey') { + index = serializeMinMax(buffer, key, value, index); + } + else if (typeof value._bsontype !== 'undefined') { + throw new BSONError(`Unrecognized or invalid _bsontype: ${String(value._bsontype)}`); + } + } + } + else { + if (typeof object?.toBSON === 'function') { + object = object.toBSON(); + if (object != null && typeof object !== 'object') { + throw new BSONError('toBSON function did not return an object'); + } + } + for (const key of Object.keys(object)) { + let value = object[key]; + if (typeof value?.toBSON === 'function') { + value = value.toBSON(); + } + const type = typeof value; + if (typeof key === 'string' && !ignoreKeys.has(key)) { + if (key.match(regexp) != null) { + throw new BSONError('key ' + key + ' must not contain null bytes'); + } + if (checkKeys) { + if ('$' === key[0]) { + throw new BSONError('key ' + key + " must not start with '$'"); + } + else if (~key.indexOf('.')) { + throw new BSONError('key ' + key + " must not contain '.'"); + } + } + } + if (type === 'string') { + index = serializeString(buffer, key, value, index); + } + else if (type === 'number') { + index = serializeNumber(buffer, key, value, index); + } + else if (type === 'bigint') { + index = serializeBigInt(buffer, key, value, index); + } + else if (type === 'boolean') { + index = serializeBoolean(buffer, key, value, index); + } + else if (value instanceof Date || isDate(value)) { + index = serializeDate(buffer, key, value, index); + } + else if (value === undefined) { + if (ignoreUndefined === false) + index = serializeNull(buffer, key, value, index); + } + else if (value === null) { + index = serializeNull(buffer, key, value, index); + } + else if (isUint8Array(value)) { + index = serializeBuffer(buffer, key, value, index); + } + else if (value instanceof RegExp || isRegExp(value)) { + index = serializeRegExp(buffer, key, value, index); + } + else if (type === 'object' && value._bsontype == null) { + index = serializeObject(buffer, key, value, index, checkKeys, depth, serializeFunctions, ignoreUndefined, path); + } + else if (typeof value === 'object' && + value[Symbol.for('@@mdb.bson.version')] !== BSON_MAJOR_VERSION) { + throw new BSONVersionError(); + } + else if (value._bsontype === 'ObjectId') { + index = serializeObjectId(buffer, key, value, index); + } + else if (type === 'object' && value._bsontype === 'Decimal128') { + index = serializeDecimal128(buffer, key, value, index); + } + else if (value._bsontype === 'Long' || value._bsontype === 'Timestamp') { + index = serializeLong(buffer, key, value, index); + } + else if (value._bsontype === 'Double') { + index = serializeDouble(buffer, key, value, index); + } + else if (value._bsontype === 'Code') { + index = serializeCode(buffer, key, value, index, checkKeys, depth, serializeFunctions, ignoreUndefined, path); + } + else if (typeof value === 'function' && serializeFunctions) { + index = serializeFunction(buffer, key, value, index); + } + else if (value._bsontype === 'Binary') { + index = serializeBinary(buffer, key, value, index); + } + else if (value._bsontype === 'BSONSymbol') { + index = serializeSymbol(buffer, key, value, index); + } + else if (value._bsontype === 'DBRef') { + index = serializeDBRef(buffer, key, value, index, depth, serializeFunctions, path); + } + else if (value._bsontype === 'BSONRegExp') { + index = serializeBSONRegExp(buffer, key, value, index); + } + else if (value._bsontype === 'Int32') { + index = serializeInt32(buffer, key, value, index); + } + else if (value._bsontype === 'MinKey' || value._bsontype === 'MaxKey') { + index = serializeMinMax(buffer, key, value, index); + } + else if (typeof value._bsontype !== 'undefined') { + throw new BSONError(`Unrecognized or invalid _bsontype: ${String(value._bsontype)}`); + } + } + } + path.delete(object); + buffer[index++] = 0x00; + const size = index - startingIndex; + buffer[startingIndex++] = size & 0xff; + buffer[startingIndex++] = (size >> 8) & 0xff; + buffer[startingIndex++] = (size >> 16) & 0xff; + buffer[startingIndex++] = (size >> 24) & 0xff; + return index; +} + +function isBSONType(value) { + return (value != null && + typeof value === 'object' && + '_bsontype' in value && + typeof value._bsontype === 'string'); +} +const keysToCodecs = { + $oid: ObjectId, + $binary: Binary, + $uuid: Binary, + $symbol: BSONSymbol, + $numberInt: Int32, + $numberDecimal: Decimal128, + $numberDouble: Double, + $numberLong: Long, + $minKey: MinKey, + $maxKey: MaxKey, + $regex: BSONRegExp, + $regularExpression: BSONRegExp, + $timestamp: Timestamp +}; +function deserializeValue(value, options = {}) { + if (typeof value === 'number') { + const in32BitRange = value <= BSON_INT32_MAX && value >= BSON_INT32_MIN; + const in64BitRange = value <= BSON_INT64_MAX && value >= BSON_INT64_MIN; + if (options.relaxed || options.legacy) { + return value; + } + if (Number.isInteger(value) && !Object.is(value, -0)) { + if (in32BitRange) { + return new Int32(value); + } + if (in64BitRange) { + if (options.useBigInt64) { + return BigInt(value); + } + return Long.fromNumber(value); + } + } + return new Double(value); + } + if (value == null || typeof value !== 'object') + return value; + if (value.$undefined) + return null; + const keys = Object.keys(value).filter(k => k.startsWith('$') && value[k] != null); + for (let i = 0; i < keys.length; i++) { + const c = keysToCodecs[keys[i]]; + if (c) + return c.fromExtendedJSON(value, options); + } + if (value.$date != null) { + const d = value.$date; + const date = new Date(); + if (options.legacy) { + if (typeof d === 'number') + date.setTime(d); + else if (typeof d === 'string') + date.setTime(Date.parse(d)); + else if (typeof d === 'bigint') + date.setTime(Number(d)); + else + throw new BSONRuntimeError(`Unrecognized type for EJSON date: ${typeof d}`); + } + else { + if (typeof d === 'string') + date.setTime(Date.parse(d)); + else if (Long.isLong(d)) + date.setTime(d.toNumber()); + else if (typeof d === 'number' && options.relaxed) + date.setTime(d); + else if (typeof d === 'bigint') + date.setTime(Number(d)); + else + throw new BSONRuntimeError(`Unrecognized type for EJSON date: ${typeof d}`); + } + return date; + } + if (value.$code != null) { + const copy = Object.assign({}, value); + if (value.$scope) { + copy.$scope = deserializeValue(value.$scope); + } + return Code.fromExtendedJSON(value); + } + if (isDBRefLike(value) || value.$dbPointer) { + const v = value.$ref ? value : value.$dbPointer; + if (v instanceof DBRef) + return v; + const dollarKeys = Object.keys(v).filter(k => k.startsWith('$')); + let valid = true; + dollarKeys.forEach(k => { + if (['$ref', '$id', '$db'].indexOf(k) === -1) + valid = false; + }); + if (valid) + return DBRef.fromExtendedJSON(v); + } + return value; +} +function serializeArray(array, options) { + return array.map((v, index) => { + options.seenObjects.push({ propertyName: `index ${index}`, obj: null }); + try { + return serializeValue(v, options); + } + finally { + options.seenObjects.pop(); + } + }); +} +function getISOString(date) { + const isoStr = date.toISOString(); + return date.getUTCMilliseconds() !== 0 ? isoStr : isoStr.slice(0, -5) + 'Z'; +} +function serializeValue(value, options) { + if (value instanceof Map || isMap(value)) { + const obj = Object.create(null); + for (const [k, v] of value) { + if (typeof k !== 'string') { + throw new BSONError('Can only serialize maps with string keys'); + } + obj[k] = v; + } + return serializeValue(obj, options); + } + if ((typeof value === 'object' || typeof value === 'function') && value !== null) { + const index = options.seenObjects.findIndex(entry => entry.obj === value); + if (index !== -1) { + const props = options.seenObjects.map(entry => entry.propertyName); + const leadingPart = props + .slice(0, index) + .map(prop => `${prop} -> `) + .join(''); + const alreadySeen = props[index]; + const circularPart = ' -> ' + + props + .slice(index + 1, props.length - 1) + .map(prop => `${prop} -> `) + .join(''); + const current = props[props.length - 1]; + const leadingSpace = ' '.repeat(leadingPart.length + alreadySeen.length / 2); + const dashes = '-'.repeat(circularPart.length + (alreadySeen.length + current.length) / 2 - 1); + throw new BSONError('Converting circular structure to EJSON:\n' + + ` ${leadingPart}${alreadySeen}${circularPart}${current}\n` + + ` ${leadingSpace}\\${dashes}/`); + } + options.seenObjects[options.seenObjects.length - 1].obj = value; + } + if (Array.isArray(value)) + return serializeArray(value, options); + if (value === undefined) + return null; + if (value instanceof Date || isDate(value)) { + const dateNum = value.getTime(), inRange = dateNum > -1 && dateNum < 253402318800000; + if (options.legacy) { + return options.relaxed && inRange + ? { $date: value.getTime() } + : { $date: getISOString(value) }; + } + return options.relaxed && inRange + ? { $date: getISOString(value) } + : { $date: { $numberLong: value.getTime().toString() } }; + } + if (typeof value === 'number' && (!options.relaxed || !isFinite(value))) { + if (Number.isInteger(value) && !Object.is(value, -0)) { + if (value >= BSON_INT32_MIN && value <= BSON_INT32_MAX) { + return { $numberInt: value.toString() }; + } + if (value >= BSON_INT64_MIN && value <= BSON_INT64_MAX) { + return { $numberLong: value.toString() }; + } + } + return { $numberDouble: Object.is(value, -0) ? '-0.0' : value.toString() }; + } + if (typeof value === 'bigint') { + if (!options.relaxed) { + return { $numberLong: BigInt.asIntN(64, value).toString() }; + } + return Number(BigInt.asIntN(64, value)); + } + if (value instanceof RegExp || isRegExp(value)) { + let flags = value.flags; + if (flags === undefined) { + const match = value.toString().match(/[gimuy]*$/); + if (match) { + flags = match[0]; + } + } + const rx = new BSONRegExp(value.source, flags); + return rx.toExtendedJSON(options); + } + if (value != null && typeof value === 'object') + return serializeDocument(value, options); + return value; +} +const BSON_TYPE_MAPPINGS = { + Binary: (o) => new Binary(o.value(), o.sub_type), + Code: (o) => new Code(o.code, o.scope), + DBRef: (o) => new DBRef(o.collection || o.namespace, o.oid, o.db, o.fields), + Decimal128: (o) => new Decimal128(o.bytes), + Double: (o) => new Double(o.value), + Int32: (o) => new Int32(o.value), + Long: (o) => Long.fromBits(o.low != null ? o.low : o.low_, o.low != null ? o.high : o.high_, o.low != null ? o.unsigned : o.unsigned_), + MaxKey: () => new MaxKey(), + MinKey: () => new MinKey(), + ObjectId: (o) => new ObjectId(o), + BSONRegExp: (o) => new BSONRegExp(o.pattern, o.options), + BSONSymbol: (o) => new BSONSymbol(o.value), + Timestamp: (o) => Timestamp.fromBits(o.low, o.high) +}; +function serializeDocument(doc, options) { + if (doc == null || typeof doc !== 'object') + throw new BSONError('not an object instance'); + const bsontype = doc._bsontype; + if (typeof bsontype === 'undefined') { + const _doc = {}; + for (const name of Object.keys(doc)) { + options.seenObjects.push({ propertyName: name, obj: null }); + try { + const value = serializeValue(doc[name], options); + if (name === '__proto__') { + Object.defineProperty(_doc, name, { + value, + writable: true, + enumerable: true, + configurable: true + }); + } + else { + _doc[name] = value; + } + } + finally { + options.seenObjects.pop(); + } + } + return _doc; + } + else if (doc != null && + typeof doc === 'object' && + typeof doc._bsontype === 'string' && + doc[Symbol.for('@@mdb.bson.version')] !== BSON_MAJOR_VERSION) { + throw new BSONVersionError(); + } + else if (isBSONType(doc)) { + let outDoc = doc; + if (typeof outDoc.toExtendedJSON !== 'function') { + const mapper = BSON_TYPE_MAPPINGS[doc._bsontype]; + if (!mapper) { + throw new BSONError('Unrecognized or invalid _bsontype: ' + doc._bsontype); + } + outDoc = mapper(outDoc); + } + if (bsontype === 'Code' && outDoc.scope) { + outDoc = new Code(outDoc.code, serializeValue(outDoc.scope, options)); + } + else if (bsontype === 'DBRef' && outDoc.oid) { + outDoc = new DBRef(serializeValue(outDoc.collection, options), serializeValue(outDoc.oid, options), serializeValue(outDoc.db, options), serializeValue(outDoc.fields, options)); + } + return outDoc.toExtendedJSON(options); + } + else { + throw new BSONError('_bsontype must be a string, but was: ' + typeof bsontype); + } +} +function parse(text, options) { + const ejsonOptions = { + useBigInt64: options?.useBigInt64 ?? false, + relaxed: options?.relaxed ?? true, + legacy: options?.legacy ?? false + }; + return JSON.parse(text, (key, value) => { + if (key.indexOf('\x00') !== -1) { + throw new BSONError(`BSON Document field names cannot contain null bytes, found: ${JSON.stringify(key)}`); + } + return deserializeValue(value, ejsonOptions); + }); +} +function stringify(value, replacer, space, options) { + if (space != null && typeof space === 'object') { + options = space; + space = 0; + } + if (replacer != null && typeof replacer === 'object' && !Array.isArray(replacer)) { + options = replacer; + replacer = undefined; + space = 0; + } + const serializeOptions = Object.assign({ relaxed: true, legacy: false }, options, { + seenObjects: [{ propertyName: '(root)', obj: null }] + }); + const doc = serializeValue(value, serializeOptions); + return JSON.stringify(doc, replacer, space); +} +function EJSONserialize(value, options) { + options = options || {}; + return JSON.parse(stringify(value, options)); +} +function EJSONdeserialize(ejson, options) { + options = options || {}; + return parse(JSON.stringify(ejson), options); +} +const EJSON = Object.create(null); +EJSON.parse = parse; +EJSON.stringify = stringify; +EJSON.serialize = EJSONserialize; +EJSON.deserialize = EJSONdeserialize; +Object.freeze(EJSON); + +const MAXSIZE = 1024 * 1024 * 17; +let buffer = ByteUtils.allocate(MAXSIZE); +function setInternalBufferSize(size) { + if (buffer.length < size) { + buffer = ByteUtils.allocate(size); + } +} +function serialize(object, options = {}) { + const checkKeys = typeof options.checkKeys === 'boolean' ? options.checkKeys : false; + const serializeFunctions = typeof options.serializeFunctions === 'boolean' ? options.serializeFunctions : false; + const ignoreUndefined = typeof options.ignoreUndefined === 'boolean' ? options.ignoreUndefined : true; + const minInternalBufferSize = typeof options.minInternalBufferSize === 'number' ? options.minInternalBufferSize : MAXSIZE; + if (buffer.length < minInternalBufferSize) { + buffer = ByteUtils.allocate(minInternalBufferSize); + } + const serializationIndex = serializeInto(buffer, object, checkKeys, 0, 0, serializeFunctions, ignoreUndefined, null); + const finishedBuffer = ByteUtils.allocate(serializationIndex); + finishedBuffer.set(buffer.subarray(0, serializationIndex), 0); + return finishedBuffer; +} +function serializeWithBufferAndIndex(object, finalBuffer, options = {}) { + const checkKeys = typeof options.checkKeys === 'boolean' ? options.checkKeys : false; + const serializeFunctions = typeof options.serializeFunctions === 'boolean' ? options.serializeFunctions : false; + const ignoreUndefined = typeof options.ignoreUndefined === 'boolean' ? options.ignoreUndefined : true; + const startIndex = typeof options.index === 'number' ? options.index : 0; + const serializationIndex = serializeInto(buffer, object, checkKeys, 0, 0, serializeFunctions, ignoreUndefined, null); + finalBuffer.set(buffer.subarray(0, serializationIndex), startIndex); + return startIndex + serializationIndex - 1; +} +function deserialize(buffer, options = {}) { + return internalDeserialize(ByteUtils.toLocalBufferType(buffer), options); +} +function calculateObjectSize(object, options = {}) { + options = options || {}; + const serializeFunctions = typeof options.serializeFunctions === 'boolean' ? options.serializeFunctions : false; + const ignoreUndefined = typeof options.ignoreUndefined === 'boolean' ? options.ignoreUndefined : true; + return internalCalculateObjectSize(object, serializeFunctions, ignoreUndefined); +} +function deserializeStream(data, startIndex, numberOfDocuments, documents, docStartIndex, options) { + const internalOptions = Object.assign({ allowObjectSmallerThanBufferSize: true, index: 0 }, options); + const bufferData = ByteUtils.toLocalBufferType(data); + let index = startIndex; + for (let i = 0; i < numberOfDocuments; i++) { + const size = bufferData[index] | + (bufferData[index + 1] << 8) | + (bufferData[index + 2] << 16) | + (bufferData[index + 3] << 24); + internalOptions.index = index; + documents[docStartIndex + i] = internalDeserialize(bufferData, internalOptions); + index = index + size; + } + return index; +} + +var bson = /*#__PURE__*/Object.freeze({ + __proto__: null, + BSONError: BSONError, + BSONRegExp: BSONRegExp, + BSONRuntimeError: BSONRuntimeError, + BSONSymbol: BSONSymbol, + BSONType: BSONType, + BSONValue: BSONValue, + BSONVersionError: BSONVersionError, + Binary: Binary, + Code: Code, + DBRef: DBRef, + Decimal128: Decimal128, + Double: Double, + EJSON: EJSON, + Int32: Int32, + Long: Long, + MaxKey: MaxKey, + MinKey: MinKey, + ObjectId: ObjectId, + Timestamp: Timestamp, + UUID: UUID, + calculateObjectSize: calculateObjectSize, + deserialize: deserialize, + deserializeStream: deserializeStream, + serialize: serialize, + serializeWithBufferAndIndex: serializeWithBufferAndIndex, + setInternalBufferSize: setInternalBufferSize +}); + +exports.BSON = bson; +exports.BSONError = BSONError; +exports.BSONRegExp = BSONRegExp; +exports.BSONRuntimeError = BSONRuntimeError; +exports.BSONSymbol = BSONSymbol; +exports.BSONType = BSONType; +exports.BSONValue = BSONValue; +exports.BSONVersionError = BSONVersionError; +exports.Binary = Binary; +exports.Code = Code; +exports.DBRef = DBRef; +exports.Decimal128 = Decimal128; +exports.Double = Double; +exports.EJSON = EJSON; +exports.Int32 = Int32; +exports.Long = Long; +exports.MaxKey = MaxKey; +exports.MinKey = MinKey; +exports.ObjectId = ObjectId; +exports.Timestamp = Timestamp; +exports.UUID = UUID; +exports.calculateObjectSize = calculateObjectSize; +exports.deserialize = deserialize; +exports.deserializeStream = deserializeStream; +exports.serialize = serialize; +exports.serializeWithBufferAndIndex = serializeWithBufferAndIndex; +exports.setInternalBufferSize = setInternalBufferSize; +//# sourceMappingURL=bson.rn.cjs.map diff --git a/Url-Shortner/node_modules/bson/lib/bson.rn.cjs.map b/Url-Shortner/node_modules/bson/lib/bson.rn.cjs.map new file mode 100644 index 0000000..2da10e2 --- /dev/null +++ b/Url-Shortner/node_modules/bson/lib/bson.rn.cjs.map @@ -0,0 +1 @@ +{"version":3,"file":"bson.rn.cjs","sources":["../src/parser/utils.ts","../src/constants.ts","../src/error.ts","../src/utils/node_byte_utils.ts","../src/utils/web_byte_utils.ts","../src/utils/byte_utils.ts","../src/bson_value.ts","../src/binary.ts","../src/code.ts","../src/db_ref.ts","../src/long.ts","../src/decimal128.ts","../src/double.ts","../src/int_32.ts","../src/max_key.ts","../src/min_key.ts","../src/objectid.ts","../src/parser/calculate_size.ts","../src/regexp.ts","../src/symbol.ts","../src/timestamp.ts","../src/validate_utf8.ts","../src/parser/deserializer.ts","../src/parser/serializer.ts","../src/extended_json.ts","../src/bson.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"names":["constants.JS_INT_MIN","constants.JS_INT_MAX","constants.BSON_INT32_MIN","constants.BSON_INT32_MAX","constants.BSON_MAJOR_VERSION","constants.BSON_DATA_STRING","constants.BSON_DATA_OID","constants.BSON_DATA_INT","constants.BSON_DATA_NUMBER","constants.BSON_DATA_DATE","constants.BSON_DATA_BOOLEAN","constants.BSON_DATA_OBJECT","constants.BSON_DATA_ARRAY","constants.BSON_DATA_UNDEFINED","constants.BSON_DATA_NULL","constants.BSON_DATA_LONG","constants.BSON_DATA_DECIMAL128","constants.BSON_DATA_BINARY","constants.BSON_BINARY_SUBTYPE_UUID_NEW","constants.BSON_DATA_REGEXP","constants.BSON_DATA_SYMBOL","constants.BSON_DATA_TIMESTAMP","constants.BSON_DATA_MIN_KEY","constants.BSON_DATA_MAX_KEY","constants.BSON_DATA_CODE","constants.BSON_DATA_CODE_W_SCOPE","constants.BSON_DATA_DBPOINTER","constants.BSON_BINARY_SUBTYPE_DEFAULT"],"mappings":"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GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAC/oC,EACD,EAAE,CACH,CAAC,OAAqC,CAAC;AACzC,C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"} \ No newline at end of file diff --git a/Url-Shortner/node_modules/bson/package.json b/Url-Shortner/node_modules/bson/package.json new file mode 100644 index 0000000..a086fd9 --- /dev/null +++ b/Url-Shortner/node_modules/bson/package.json @@ -0,0 +1,116 @@ +{ + "name": "bson", + "description": "A bson parser for node.js and the browser", + "keywords": [ + "mongodb", + "bson", + "parser" + ], + "files": [ + "lib", + "src", + "bson.d.ts", + "etc/prepare.js", + "vendor" + ], + "types": "bson.d.ts", + "version": "5.5.0", + "author": { + "name": "The MongoDB NodeJS Team", + "email": "dbx-node@mongodb.com" + }, + "license": "Apache-2.0", + "contributors": [], + "repository": "mongodb/js-bson", + "bugs": { + "url": "https://jira.mongodb.org/projects/NODE/issues/" + }, + "devDependencies": { + "@istanbuljs/nyc-config-typescript": "^1.0.2", + "@microsoft/api-extractor": "^7.35.1", + "@octokit/core": "^4.2.4", + "@rollup/plugin-node-resolve": "^15.0.2", + "@rollup/plugin-typescript": "^11.1.0", + "@types/chai": "^4.3.5", + "@types/mocha": "^10.0.1", + "@types/node": "^18.16.3", + "@types/sinon": "^10.0.14", + "@types/sinon-chai": "^3.2.9", + "@typescript-eslint/eslint-plugin": "^5.59.2", + "@typescript-eslint/parser": "^5.59.2", + "benchmark": "^2.1.4", + "chai": "^4.3.7", + "chalk": "^5.2.0", + "eslint": "^8.39.0", + "eslint-config-prettier": "^8.8.0", + "eslint-plugin-no-bigint-usage": "file:./etc/eslint/no-bigint-usage", + "eslint-plugin-prettier": "^4.2.1", + "eslint-plugin-tsdoc": "^0.2.17", + "magic-string": "^0.30.0", + "mocha": "10.2.0", + "node-fetch": "^3.3.1", + "nyc": "^15.1.0", + "prettier": "^2.8.8", + "rollup": "^3.21.4", + "sinon": "^15.0.4", + "sinon-chai": "^3.7.0", + "source-map-support": "^0.5.21", + "standard-version": "^9.5.0", + "ts-node": "^10.9.1", + "tsd": "^0.28.1", + "typescript": "^5.0.4", + "typescript-cached-transpile": "0.0.6", + "uuid": "^9.0.0", + "v8-profiler-next": "^1.9.0" + }, + "tsd": { + "directory": "test/types", + "compilerOptions": { + "strict": true, + "target": "esnext", + "module": "commonjs", + "moduleResolution": "node" + } + }, + "config": { + "native": false + }, + "main": "./lib/bson.cjs", + "module": "./lib/bson.mjs", + "exports": { + "import": { + "types": "./bson.d.ts", + "default": "./lib/bson.mjs" + }, + "require": { + "types": "./bson.d.ts", + "default": "./lib/bson.cjs" + }, + "react-native": "./lib/bson.rn.cjs", + "browser": "./lib/bson.mjs" + }, + "compass:exports": { + "import": "./lib/bson.cjs", + "require": "./lib/bson.cjs" + }, + "engines": { + "node": ">=14.20.1" + }, + "scripts": { + "pretest": "npm run build", + "test": "npm run check:node && npm run check:web && npm run check:web-no-bigint", + "check:node": "WEB=false mocha test/node", + "check:tsd": "npm run build:dts && tsd", + "check:web": "WEB=true mocha test/node", + "check:web-no-bigint": "WEB=true NO_BIGINT=true mocha test/node", + "build:ts": "node ./node_modules/typescript/bin/tsc", + "build:dts": "npm run build:ts && api-extractor run --typescript-compiler-folder node_modules/typescript --local && node etc/clean_definition_files.cjs", + "build:bundle": "rollup -c rollup.config.mjs", + "build": "npm run build:dts && npm run build:bundle", + "check:lint": "eslint -v && eslint --ext '.js,.ts' --max-warnings=0 src test && npm run build:dts && npm run check:tsd", + "format": "eslint --ext '.js,.ts' src test --fix", + "check:coverage": "nyc --check-coverage npm run check:node", + "prepare": "node etc/prepare.js", + "release": "standard-version -i HISTORY.md" + } +} diff --git a/Url-Shortner/node_modules/bson/src/binary.ts b/Url-Shortner/node_modules/bson/src/binary.ts new file mode 100644 index 0000000..1324fd4 --- /dev/null +++ b/Url-Shortner/node_modules/bson/src/binary.ts @@ -0,0 +1,510 @@ +import { isUint8Array } from './parser/utils'; +import type { EJSONOptions } from './extended_json'; +import { BSONError } from './error'; +import { BSON_BINARY_SUBTYPE_UUID_NEW } from './constants'; +import { ByteUtils } from './utils/byte_utils'; +import { BSONValue } from './bson_value'; + +/** @public */ +export type BinarySequence = Uint8Array | number[]; + +/** @public */ +export interface BinaryExtendedLegacy { + $type: string; + $binary: string; +} + +/** @public */ +export interface BinaryExtended { + $binary: { + subType: string; + base64: string; + }; +} + +/** + * A class representation of the BSON Binary type. + * @public + * @category BSONType + */ +export class Binary extends BSONValue { + get _bsontype(): 'Binary' { + return 'Binary'; + } + + /** + * Binary default subtype + * @internal + */ + private static readonly BSON_BINARY_SUBTYPE_DEFAULT = 0; + + /** Initial buffer default size */ + static readonly BUFFER_SIZE = 256; + /** Default BSON type */ + static readonly SUBTYPE_DEFAULT = 0; + /** Function BSON type */ + static readonly SUBTYPE_FUNCTION = 1; + /** Byte Array BSON type */ + static readonly SUBTYPE_BYTE_ARRAY = 2; + /** Deprecated UUID BSON type @deprecated Please use SUBTYPE_UUID */ + static readonly SUBTYPE_UUID_OLD = 3; + /** UUID BSON type */ + static readonly SUBTYPE_UUID = 4; + /** MD5 BSON type */ + static readonly SUBTYPE_MD5 = 5; + /** Encrypted BSON type */ + static readonly SUBTYPE_ENCRYPTED = 6; + /** Column BSON type */ + static readonly SUBTYPE_COLUMN = 7; + /** User BSON type */ + static readonly SUBTYPE_USER_DEFINED = 128; + + buffer!: Uint8Array; + sub_type!: number; + position!: number; + + /** + * Create a new Binary instance. + * + * This constructor can accept a string as its first argument. In this case, + * this string will be encoded using ISO-8859-1, **not** using UTF-8. + * This is almost certainly not what you want. Use `new Binary(Buffer.from(string))` + * instead to convert the string to a Buffer using UTF-8 first. + * + * @param buffer - a buffer object containing the binary data. + * @param subType - the option binary type. + */ + constructor(buffer?: string | BinarySequence, subType?: number) { + super(); + if ( + !(buffer == null) && + !(typeof buffer === 'string') && + !ArrayBuffer.isView(buffer) && + !(buffer instanceof ArrayBuffer) && + !Array.isArray(buffer) + ) { + throw new BSONError( + 'Binary can only be constructed from string, Buffer, TypedArray, or Array' + ); + } + + this.sub_type = subType ?? Binary.BSON_BINARY_SUBTYPE_DEFAULT; + + if (buffer == null) { + // create an empty binary buffer + this.buffer = ByteUtils.allocate(Binary.BUFFER_SIZE); + this.position = 0; + } else { + if (typeof buffer === 'string') { + // string + this.buffer = ByteUtils.fromISO88591(buffer); + } else if (Array.isArray(buffer)) { + // number[] + this.buffer = ByteUtils.fromNumberArray(buffer); + } else { + // Buffer | TypedArray | ArrayBuffer + this.buffer = ByteUtils.toLocalBufferType(buffer); + } + + this.position = this.buffer.byteLength; + } + } + + /** + * Updates this binary with byte_value. + * + * @param byteValue - a single byte we wish to write. + */ + put(byteValue: string | number | Uint8Array | number[]): void { + // If it's a string and a has more than one character throw an error + if (typeof byteValue === 'string' && byteValue.length !== 1) { + throw new BSONError('only accepts single character String'); + } else if (typeof byteValue !== 'number' && byteValue.length !== 1) + throw new BSONError('only accepts single character Uint8Array or Array'); + + // Decode the byte value once + let decodedByte: number; + if (typeof byteValue === 'string') { + decodedByte = byteValue.charCodeAt(0); + } else if (typeof byteValue === 'number') { + decodedByte = byteValue; + } else { + decodedByte = byteValue[0]; + } + + if (decodedByte < 0 || decodedByte > 255) { + throw new BSONError('only accepts number in a valid unsigned byte range 0-255'); + } + + if (this.buffer.byteLength > this.position) { + this.buffer[this.position++] = decodedByte; + } else { + const newSpace = ByteUtils.allocate(Binary.BUFFER_SIZE + this.buffer.length); + newSpace.set(this.buffer, 0); + this.buffer = newSpace; + this.buffer[this.position++] = decodedByte; + } + } + + /** + * Writes a buffer or string to the binary. + * + * @param sequence - a string or buffer to be written to the Binary BSON object. + * @param offset - specify the binary of where to write the content. + */ + write(sequence: string | BinarySequence, offset: number): void { + offset = typeof offset === 'number' ? offset : this.position; + + // If the buffer is to small let's extend the buffer + if (this.buffer.byteLength < offset + sequence.length) { + const newSpace = ByteUtils.allocate(this.buffer.byteLength + sequence.length); + newSpace.set(this.buffer, 0); + + // Assign the new buffer + this.buffer = newSpace; + } + + if (ArrayBuffer.isView(sequence)) { + this.buffer.set(ByteUtils.toLocalBufferType(sequence), offset); + this.position = + offset + sequence.byteLength > this.position ? offset + sequence.length : this.position; + } else if (typeof sequence === 'string') { + const bytes = ByteUtils.fromISO88591(sequence); + this.buffer.set(bytes, offset); + this.position = + offset + sequence.length > this.position ? offset + sequence.length : this.position; + } + } + + /** + * Reads **length** bytes starting at **position**. + * + * @param position - read from the given position in the Binary. + * @param length - the number of bytes to read. + */ + read(position: number, length: number): BinarySequence { + length = length && length > 0 ? length : this.position; + + // Let's return the data based on the type we have + return this.buffer.slice(position, position + length); + } + + /** + * Returns the value of this binary as a string. + * @param asRaw - Will skip converting to a string + * @remarks + * This is handy when calling this function conditionally for some key value pairs and not others + */ + value(asRaw?: boolean): string | BinarySequence { + asRaw = !!asRaw; + + // Optimize to serialize for the situation where the data == size of buffer + if (asRaw && this.buffer.length === this.position) { + return this.buffer; + } + + // If it's a node.js buffer object + if (asRaw) { + return this.buffer.slice(0, this.position); + } + // TODO(NODE-4361): remove binary string support, value(true) should be the default / only option here. + return ByteUtils.toISO88591(this.buffer.subarray(0, this.position)); + } + + /** the length of the binary sequence */ + length(): number { + return this.position; + } + + toJSON(): string { + return ByteUtils.toBase64(this.buffer); + } + + toString(encoding?: 'hex' | 'base64' | 'utf8' | 'utf-8'): string { + if (encoding === 'hex') return ByteUtils.toHex(this.buffer); + if (encoding === 'base64') return ByteUtils.toBase64(this.buffer); + if (encoding === 'utf8' || encoding === 'utf-8') + return ByteUtils.toUTF8(this.buffer, 0, this.buffer.byteLength); + return ByteUtils.toUTF8(this.buffer, 0, this.buffer.byteLength); + } + + /** @internal */ + toExtendedJSON(options?: EJSONOptions): BinaryExtendedLegacy | BinaryExtended { + options = options || {}; + const base64String = ByteUtils.toBase64(this.buffer); + + const subType = Number(this.sub_type).toString(16); + if (options.legacy) { + return { + $binary: base64String, + $type: subType.length === 1 ? '0' + subType : subType + }; + } + return { + $binary: { + base64: base64String, + subType: subType.length === 1 ? '0' + subType : subType + } + }; + } + + toUUID(): UUID { + if (this.sub_type === Binary.SUBTYPE_UUID) { + return new UUID(this.buffer.slice(0, this.position)); + } + + throw new BSONError( + `Binary sub_type "${this.sub_type}" is not supported for converting to UUID. Only "${Binary.SUBTYPE_UUID}" is currently supported.` + ); + } + + /** Creates an Binary instance from a hex digit string */ + static createFromHexString(hex: string, subType?: number): Binary { + return new Binary(ByteUtils.fromHex(hex), subType); + } + + /** Creates an Binary instance from a base64 string */ + static createFromBase64(base64: string, subType?: number): Binary { + return new Binary(ByteUtils.fromBase64(base64), subType); + } + + /** @internal */ + static fromExtendedJSON( + doc: BinaryExtendedLegacy | BinaryExtended | UUIDExtended, + options?: EJSONOptions + ): Binary { + options = options || {}; + let data: Uint8Array | undefined; + let type; + if ('$binary' in doc) { + if (options.legacy && typeof doc.$binary === 'string' && '$type' in doc) { + type = doc.$type ? parseInt(doc.$type, 16) : 0; + data = ByteUtils.fromBase64(doc.$binary); + } else { + if (typeof doc.$binary !== 'string') { + type = doc.$binary.subType ? parseInt(doc.$binary.subType, 16) : 0; + data = ByteUtils.fromBase64(doc.$binary.base64); + } + } + } else if ('$uuid' in doc) { + type = 4; + data = UUID.bytesFromString(doc.$uuid); + } + if (!data) { + throw new BSONError(`Unexpected Binary Extended JSON format ${JSON.stringify(doc)}`); + } + return type === BSON_BINARY_SUBTYPE_UUID_NEW ? new UUID(data) : new Binary(data, type); + } + + /** @internal */ + [Symbol.for('nodejs.util.inspect.custom')](): string { + return this.inspect(); + } + + inspect(): string { + const base64 = ByteUtils.toBase64(this.buffer.subarray(0, this.position)); + return `Binary.createFromBase64("${base64}", ${this.sub_type})`; + } +} + +/** @public */ +export type UUIDExtended = { + $uuid: string; +}; + +const UUID_BYTE_LENGTH = 16; +const UUID_WITHOUT_DASHES = /^[0-9A-F]{32}$/i; +const UUID_WITH_DASHES = /^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i; + +/** + * A class representation of the BSON UUID type. + * @public + */ +export class UUID extends Binary { + /** @deprecated Hex string is no longer cached, this control will be removed in a future major release */ + static cacheHexString = false; + /** + * Create a UUID type + * + * When the argument to the constructor is omitted a random v4 UUID will be generated. + * + * @param input - Can be a 32 or 36 character hex string (dashes excluded/included) or a 16 byte binary Buffer. + */ + constructor(input?: string | Uint8Array | UUID) { + let bytes: Uint8Array; + if (input == null) { + bytes = UUID.generate(); + } else if (input instanceof UUID) { + bytes = ByteUtils.toLocalBufferType(new Uint8Array(input.buffer)); + } else if (ArrayBuffer.isView(input) && input.byteLength === UUID_BYTE_LENGTH) { + bytes = ByteUtils.toLocalBufferType(input); + } else if (typeof input === 'string') { + bytes = UUID.bytesFromString(input); + } else { + throw new BSONError( + 'Argument passed in UUID constructor must be a UUID, a 16 byte Buffer or a 32/36 character hex string (dashes excluded/included, format: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx).' + ); + } + super(bytes, BSON_BINARY_SUBTYPE_UUID_NEW); + } + + /** + * The UUID bytes + * @readonly + */ + get id(): Uint8Array { + return this.buffer; + } + + set id(value: Uint8Array) { + this.buffer = value; + } + + /** + * Returns the UUID id as a 32 or 36 character hex string representation, excluding/including dashes (defaults to 36 character dash separated) + * @param includeDashes - should the string exclude dash-separators. + */ + toHexString(includeDashes = true): string { + if (includeDashes) { + return [ + ByteUtils.toHex(this.buffer.subarray(0, 4)), + ByteUtils.toHex(this.buffer.subarray(4, 6)), + ByteUtils.toHex(this.buffer.subarray(6, 8)), + ByteUtils.toHex(this.buffer.subarray(8, 10)), + ByteUtils.toHex(this.buffer.subarray(10, 16)) + ].join('-'); + } + return ByteUtils.toHex(this.buffer); + } + + /** + * Converts the id into a 36 character (dashes included) hex string, unless a encoding is specified. + */ + toString(encoding?: 'hex' | 'base64'): string { + if (encoding === 'hex') return ByteUtils.toHex(this.id); + if (encoding === 'base64') return ByteUtils.toBase64(this.id); + return this.toHexString(); + } + + /** + * Converts the id into its JSON string representation. + * A 36 character (dashes included) hex string in the format: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx + */ + toJSON(): string { + return this.toHexString(); + } + + /** + * Compares the equality of this UUID with `otherID`. + * + * @param otherId - UUID instance to compare against. + */ + equals(otherId: string | Uint8Array | UUID): boolean { + if (!otherId) { + return false; + } + + if (otherId instanceof UUID) { + return ByteUtils.equals(otherId.id, this.id); + } + + try { + return ByteUtils.equals(new UUID(otherId).id, this.id); + } catch { + return false; + } + } + + /** + * Creates a Binary instance from the current UUID. + */ + toBinary(): Binary { + return new Binary(this.id, Binary.SUBTYPE_UUID); + } + + /** + * Generates a populated buffer containing a v4 uuid + */ + static generate(): Uint8Array { + const bytes = ByteUtils.randomBytes(UUID_BYTE_LENGTH); + + // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` + // Kindly borrowed from https://github.com/uuidjs/uuid/blob/master/src/v4.js + bytes[6] = (bytes[6] & 0x0f) | 0x40; + bytes[8] = (bytes[8] & 0x3f) | 0x80; + + return bytes; + } + + /** + * Checks if a value is a valid bson UUID + * @param input - UUID, string or Buffer to validate. + */ + static isValid(input: string | Uint8Array | UUID | Binary): boolean { + if (!input) { + return false; + } + + if (typeof input === 'string') { + return UUID.isValidUUIDString(input); + } + + if (isUint8Array(input)) { + return input.byteLength === UUID_BYTE_LENGTH; + } + + return ( + input._bsontype === 'Binary' && + input.sub_type === this.SUBTYPE_UUID && + input.buffer.byteLength === 16 + ); + } + + /** + * Creates an UUID from a hex string representation of an UUID. + * @param hexString - 32 or 36 character hex string (dashes excluded/included). + */ + static override createFromHexString(hexString: string): UUID { + const buffer = UUID.bytesFromString(hexString); + return new UUID(buffer); + } + + /** Creates an UUID from a base64 string representation of an UUID. */ + static override createFromBase64(base64: string): UUID { + return new UUID(ByteUtils.fromBase64(base64)); + } + + /** @internal */ + static bytesFromString(representation: string) { + if (!UUID.isValidUUIDString(representation)) { + throw new BSONError( + 'UUID string representation must be 32 hex digits or canonical hyphenated representation' + ); + } + return ByteUtils.fromHex(representation.replace(/-/g, '')); + } + + /** + * @internal + * + * Validates a string to be a hex digit sequence with or without dashes. + * The canonical hyphenated representation of a uuid is hex in 8-4-4-4-12 groups. + */ + static isValidUUIDString(representation: string) { + return UUID_WITHOUT_DASHES.test(representation) || UUID_WITH_DASHES.test(representation); + } + + /** + * Converts to a string representation of this Id. + * + * @returns return the 36 character hex string representation. + * @internal + */ + [Symbol.for('nodejs.util.inspect.custom')](): string { + return this.inspect(); + } + + inspect(): string { + return `new UUID("${this.toHexString()}")`; + } +} diff --git a/Url-Shortner/node_modules/bson/src/bson.ts b/Url-Shortner/node_modules/bson/src/bson.ts new file mode 100644 index 0000000..d86bf1c --- /dev/null +++ b/Url-Shortner/node_modules/bson/src/bson.ts @@ -0,0 +1,250 @@ +import { Binary, UUID } from './binary'; +import { Code } from './code'; +import { DBRef } from './db_ref'; +import { Decimal128 } from './decimal128'; +import { Double } from './double'; +import { Int32 } from './int_32'; +import { Long } from './long'; +import { MaxKey } from './max_key'; +import { MinKey } from './min_key'; +import { ObjectId } from './objectid'; +import { internalCalculateObjectSize } from './parser/calculate_size'; +// Parts of the parser +import { internalDeserialize, type DeserializeOptions } from './parser/deserializer'; +import { serializeInto, type SerializeOptions } from './parser/serializer'; +import { BSONRegExp } from './regexp'; +import { BSONSymbol } from './symbol'; +import { Timestamp } from './timestamp'; +import { ByteUtils } from './utils/byte_utils'; +export type { UUIDExtended, BinaryExtended, BinaryExtendedLegacy, BinarySequence } from './binary'; +export type { CodeExtended } from './code'; +export type { DBRefLike } from './db_ref'; +export type { Decimal128Extended } from './decimal128'; +export type { DoubleExtended } from './double'; +export type { EJSONOptions } from './extended_json'; +export type { Int32Extended } from './int_32'; +export type { LongExtended } from './long'; +export type { MaxKeyExtended } from './max_key'; +export type { MinKeyExtended } from './min_key'; +export type { ObjectIdExtended, ObjectIdLike } from './objectid'; +export type { BSONRegExpExtended, BSONRegExpExtendedLegacy } from './regexp'; +export type { BSONSymbolExtended } from './symbol'; +export type { LongWithoutOverrides, TimestampExtended, TimestampOverrides } from './timestamp'; +export type { LongWithoutOverridesClass } from './timestamp'; +export type { SerializeOptions, DeserializeOptions }; + +export { + Code, + BSONSymbol, + DBRef, + Binary, + ObjectId, + UUID, + Long, + Timestamp, + Double, + Int32, + MinKey, + MaxKey, + BSONRegExp, + Decimal128 +}; +export { BSONValue } from './bson_value'; +export { BSONError, BSONVersionError, BSONRuntimeError } from './error'; +export { BSONType } from './constants'; +export { EJSON } from './extended_json'; + +/** @public */ +export interface Document { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + [key: string]: any; +} + +/** @internal */ +// Default Max Size +const MAXSIZE = 1024 * 1024 * 17; + +// Current Internal Temporary Serialization Buffer +let buffer = ByteUtils.allocate(MAXSIZE); + +/** + * Sets the size of the internal serialization buffer. + * + * @param size - The desired size for the internal serialization buffer in bytes + * @public + */ +export function setInternalBufferSize(size: number): void { + // Resize the internal serialization buffer if needed + if (buffer.length < size) { + buffer = ByteUtils.allocate(size); + } +} + +/** + * Serialize a Javascript object. + * + * @param object - the Javascript object to serialize. + * @returns Buffer object containing the serialized object. + * @public + */ +export function serialize(object: Document, options: SerializeOptions = {}): Uint8Array { + // Unpack the options + const checkKeys = typeof options.checkKeys === 'boolean' ? options.checkKeys : false; + const serializeFunctions = + typeof options.serializeFunctions === 'boolean' ? options.serializeFunctions : false; + const ignoreUndefined = + typeof options.ignoreUndefined === 'boolean' ? options.ignoreUndefined : true; + const minInternalBufferSize = + typeof options.minInternalBufferSize === 'number' ? options.minInternalBufferSize : MAXSIZE; + + // Resize the internal serialization buffer if needed + if (buffer.length < minInternalBufferSize) { + buffer = ByteUtils.allocate(minInternalBufferSize); + } + + // Attempt to serialize + const serializationIndex = serializeInto( + buffer, + object, + checkKeys, + 0, + 0, + serializeFunctions, + ignoreUndefined, + null + ); + + // Create the final buffer + const finishedBuffer = ByteUtils.allocate(serializationIndex); + + // Copy into the finished buffer + finishedBuffer.set(buffer.subarray(0, serializationIndex), 0); + + // Return the buffer + return finishedBuffer; +} + +/** + * Serialize a Javascript object using a predefined Buffer and index into the buffer, + * useful when pre-allocating the space for serialization. + * + * @param object - the Javascript object to serialize. + * @param finalBuffer - the Buffer you pre-allocated to store the serialized BSON object. + * @returns the index pointing to the last written byte in the buffer. + * @public + */ +export function serializeWithBufferAndIndex( + object: Document, + finalBuffer: Uint8Array, + options: SerializeOptions = {} +): number { + // Unpack the options + const checkKeys = typeof options.checkKeys === 'boolean' ? options.checkKeys : false; + const serializeFunctions = + typeof options.serializeFunctions === 'boolean' ? options.serializeFunctions : false; + const ignoreUndefined = + typeof options.ignoreUndefined === 'boolean' ? options.ignoreUndefined : true; + const startIndex = typeof options.index === 'number' ? options.index : 0; + + // Attempt to serialize + const serializationIndex = serializeInto( + buffer, + object, + checkKeys, + 0, + 0, + serializeFunctions, + ignoreUndefined, + null + ); + + finalBuffer.set(buffer.subarray(0, serializationIndex), startIndex); + + // Return the index + return startIndex + serializationIndex - 1; +} + +/** + * Deserialize data as BSON. + * + * @param buffer - the buffer containing the serialized set of BSON documents. + * @returns returns the deserialized Javascript Object. + * @public + */ +export function deserialize(buffer: Uint8Array, options: DeserializeOptions = {}): Document { + return internalDeserialize(ByteUtils.toLocalBufferType(buffer), options); +} + +/** @public */ +export type CalculateObjectSizeOptions = Pick< + SerializeOptions, + 'serializeFunctions' | 'ignoreUndefined' +>; + +/** + * Calculate the bson size for a passed in Javascript object. + * + * @param object - the Javascript object to calculate the BSON byte size for + * @returns size of BSON object in bytes + * @public + */ +export function calculateObjectSize( + object: Document, + options: CalculateObjectSizeOptions = {} +): number { + options = options || {}; + + const serializeFunctions = + typeof options.serializeFunctions === 'boolean' ? options.serializeFunctions : false; + const ignoreUndefined = + typeof options.ignoreUndefined === 'boolean' ? options.ignoreUndefined : true; + + return internalCalculateObjectSize(object, serializeFunctions, ignoreUndefined); +} + +/** + * Deserialize stream data as BSON documents. + * + * @param data - the buffer containing the serialized set of BSON documents. + * @param startIndex - the start index in the data Buffer where the deserialization is to start. + * @param numberOfDocuments - number of documents to deserialize. + * @param documents - an array where to store the deserialized documents. + * @param docStartIndex - the index in the documents array from where to start inserting documents. + * @param options - additional options used for the deserialization. + * @returns next index in the buffer after deserialization **x** numbers of documents. + * @public + */ +export function deserializeStream( + data: Uint8Array | ArrayBuffer, + startIndex: number, + numberOfDocuments: number, + documents: Document[], + docStartIndex: number, + options: DeserializeOptions +): number { + const internalOptions = Object.assign( + { allowObjectSmallerThanBufferSize: true, index: 0 }, + options + ); + const bufferData = ByteUtils.toLocalBufferType(data); + + let index = startIndex; + // Loop over all documents + for (let i = 0; i < numberOfDocuments; i++) { + // Find size of the document + const size = + bufferData[index] | + (bufferData[index + 1] << 8) | + (bufferData[index + 2] << 16) | + (bufferData[index + 3] << 24); + // Update options with index + internalOptions.index = index; + // Parse the document at this point + documents[docStartIndex + i] = internalDeserialize(bufferData, internalOptions); + // Adjust index by the document size + index = index + size; + } + + // Return object containing end index of parsing and list of documents + return index; +} diff --git a/Url-Shortner/node_modules/bson/src/bson_value.ts b/Url-Shortner/node_modules/bson/src/bson_value.ts new file mode 100644 index 0000000..b36266e --- /dev/null +++ b/Url-Shortner/node_modules/bson/src/bson_value.ts @@ -0,0 +1,18 @@ +import { BSON_MAJOR_VERSION } from './constants'; + +/** @public */ +export abstract class BSONValue { + /** @public */ + public abstract get _bsontype(): string; + + /** @internal */ + get [Symbol.for('@@mdb.bson.version')](): typeof BSON_MAJOR_VERSION { + return BSON_MAJOR_VERSION; + } + + /** @public */ + public abstract inspect(): string; + + /** @internal */ + abstract toExtendedJSON(): unknown; +} diff --git a/Url-Shortner/node_modules/bson/src/code.ts b/Url-Shortner/node_modules/bson/src/code.ts new file mode 100644 index 0000000..48889f5 --- /dev/null +++ b/Url-Shortner/node_modules/bson/src/code.ts @@ -0,0 +1,69 @@ +import type { Document } from './bson'; +import { BSONValue } from './bson_value'; + +/** @public */ +export interface CodeExtended { + $code: string; + $scope?: Document; +} + +/** + * A class representation of the BSON Code type. + * @public + * @category BSONType + */ +export class Code extends BSONValue { + get _bsontype(): 'Code' { + return 'Code'; + } + + code: string; + + // a code instance having a null scope is what determines whether + // it is BSONType 0x0D (just code) / 0x0F (code with scope) + scope: Document | null; + + /** + * @param code - a string or function. + * @param scope - an optional scope for the function. + */ + constructor(code: string | Function, scope?: Document | null) { + super(); + this.code = code.toString(); + this.scope = scope ?? null; + } + + toJSON(): { code: string; scope?: Document } { + if (this.scope != null) { + return { code: this.code, scope: this.scope }; + } + + return { code: this.code }; + } + + /** @internal */ + toExtendedJSON(): CodeExtended { + if (this.scope) { + return { $code: this.code, $scope: this.scope }; + } + + return { $code: this.code }; + } + + /** @internal */ + static fromExtendedJSON(doc: CodeExtended): Code { + return new Code(doc.$code, doc.$scope); + } + + /** @internal */ + [Symbol.for('nodejs.util.inspect.custom')](): string { + return this.inspect(); + } + + inspect(): string { + const codeJson = this.toJSON(); + return `new Code("${String(codeJson.code)}"${ + codeJson.scope != null ? `, ${JSON.stringify(codeJson.scope)}` : '' + })`; + } +} diff --git a/Url-Shortner/node_modules/bson/src/constants.ts b/Url-Shortner/node_modules/bson/src/constants.ts new file mode 100644 index 0000000..a56b803 --- /dev/null +++ b/Url-Shortner/node_modules/bson/src/constants.ts @@ -0,0 +1,141 @@ +/** @internal */ +export const BSON_MAJOR_VERSION = 5 as const; + +/** @internal */ +export const BSON_INT32_MAX = 0x7fffffff; +/** @internal */ +export const BSON_INT32_MIN = -0x80000000; +/** @internal */ +export const BSON_INT64_MAX = Math.pow(2, 63) - 1; +/** @internal */ +export const BSON_INT64_MIN = -Math.pow(2, 63); + +/** + * Any integer up to 2^53 can be precisely represented by a double. + * @internal + */ +export const JS_INT_MAX = Math.pow(2, 53); + +/** + * Any integer down to -2^53 can be precisely represented by a double. + * @internal + */ +export const JS_INT_MIN = -Math.pow(2, 53); + +/** Number BSON Type @internal */ +export const BSON_DATA_NUMBER = 1; + +/** String BSON Type @internal */ +export const BSON_DATA_STRING = 2; + +/** Object BSON Type @internal */ +export const BSON_DATA_OBJECT = 3; + +/** Array BSON Type @internal */ +export const BSON_DATA_ARRAY = 4; + +/** Binary BSON Type @internal */ +export const BSON_DATA_BINARY = 5; + +/** Binary BSON Type @internal */ +export const BSON_DATA_UNDEFINED = 6; + +/** ObjectId BSON Type @internal */ +export const BSON_DATA_OID = 7; + +/** Boolean BSON Type @internal */ +export const BSON_DATA_BOOLEAN = 8; + +/** Date BSON Type @internal */ +export const BSON_DATA_DATE = 9; + +/** null BSON Type @internal */ +export const BSON_DATA_NULL = 10; + +/** RegExp BSON Type @internal */ +export const BSON_DATA_REGEXP = 11; + +/** Code BSON Type @internal */ +export const BSON_DATA_DBPOINTER = 12; + +/** Code BSON Type @internal */ +export const BSON_DATA_CODE = 13; + +/** Symbol BSON Type @internal */ +export const BSON_DATA_SYMBOL = 14; + +/** Code with Scope BSON Type @internal */ +export const BSON_DATA_CODE_W_SCOPE = 15; + +/** 32 bit Integer BSON Type @internal */ +export const BSON_DATA_INT = 16; + +/** Timestamp BSON Type @internal */ +export const BSON_DATA_TIMESTAMP = 17; + +/** Long BSON Type @internal */ +export const BSON_DATA_LONG = 18; + +/** Decimal128 BSON Type @internal */ +export const BSON_DATA_DECIMAL128 = 19; + +/** MinKey BSON Type @internal */ +export const BSON_DATA_MIN_KEY = 0xff; + +/** MaxKey BSON Type @internal */ +export const BSON_DATA_MAX_KEY = 0x7f; + +/** Binary Default Type @internal */ +export const BSON_BINARY_SUBTYPE_DEFAULT = 0; + +/** Binary Function Type @internal */ +export const BSON_BINARY_SUBTYPE_FUNCTION = 1; + +/** Binary Byte Array Type @internal */ +export const BSON_BINARY_SUBTYPE_BYTE_ARRAY = 2; + +/** Binary Deprecated UUID Type @deprecated Please use BSON_BINARY_SUBTYPE_UUID_NEW @internal */ +export const BSON_BINARY_SUBTYPE_UUID = 3; + +/** Binary UUID Type @internal */ +export const BSON_BINARY_SUBTYPE_UUID_NEW = 4; + +/** Binary MD5 Type @internal */ +export const BSON_BINARY_SUBTYPE_MD5 = 5; + +/** Encrypted BSON type @internal */ +export const BSON_BINARY_SUBTYPE_ENCRYPTED = 6; + +/** Column BSON type @internal */ +export const BSON_BINARY_SUBTYPE_COLUMN = 7; + +/** Binary User Defined Type @internal */ +export const BSON_BINARY_SUBTYPE_USER_DEFINED = 128; + +/** @public */ +export const BSONType = Object.freeze({ + double: 1, + string: 2, + object: 3, + array: 4, + binData: 5, + undefined: 6, + objectId: 7, + bool: 8, + date: 9, + null: 10, + regex: 11, + dbPointer: 12, + javascript: 13, + symbol: 14, + javascriptWithScope: 15, + int: 16, + timestamp: 17, + long: 18, + decimal: 19, + minKey: -1, + maxKey: 127 +} as const); + +/** @public */ +export type BSONType = (typeof BSONType)[keyof typeof BSONType]; diff --git a/Url-Shortner/node_modules/bson/src/db_ref.ts b/Url-Shortner/node_modules/bson/src/db_ref.ts new file mode 100644 index 0000000..ebdcb61 --- /dev/null +++ b/Url-Shortner/node_modules/bson/src/db_ref.ts @@ -0,0 +1,127 @@ +import type { Document } from './bson'; +import { BSONValue } from './bson_value'; +import type { EJSONOptions } from './extended_json'; +import type { ObjectId } from './objectid'; + +/** @public */ +export interface DBRefLike { + $ref: string; + $id: ObjectId; + $db?: string; +} + +/** @internal */ +export function isDBRefLike(value: unknown): value is DBRefLike { + return ( + value != null && + typeof value === 'object' && + '$id' in value && + value.$id != null && + '$ref' in value && + typeof value.$ref === 'string' && + // If '$db' is defined it MUST be a string, otherwise it should be absent + (!('$db' in value) || ('$db' in value && typeof value.$db === 'string')) + ); +} + +/** + * A class representation of the BSON DBRef type. + * @public + * @category BSONType + */ +export class DBRef extends BSONValue { + get _bsontype(): 'DBRef' { + return 'DBRef'; + } + + collection!: string; + oid!: ObjectId; + db?: string; + fields!: Document; + + /** + * @param collection - the collection name. + * @param oid - the reference ObjectId. + * @param db - optional db name, if omitted the reference is local to the current db. + */ + constructor(collection: string, oid: ObjectId, db?: string, fields?: Document) { + super(); + // check if namespace has been provided + const parts = collection.split('.'); + if (parts.length === 2) { + db = parts.shift(); + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + collection = parts.shift()!; + } + + this.collection = collection; + this.oid = oid; + this.db = db; + this.fields = fields || {}; + } + + // Property provided for compatibility with the 1.x parser + // the 1.x parser used a "namespace" property, while 4.x uses "collection" + + /** @internal */ + get namespace(): string { + return this.collection; + } + + set namespace(value: string) { + this.collection = value; + } + + toJSON(): DBRefLike & Document { + const o = Object.assign( + { + $ref: this.collection, + $id: this.oid + }, + this.fields + ); + + if (this.db != null) o.$db = this.db; + return o; + } + + /** @internal */ + toExtendedJSON(options?: EJSONOptions): DBRefLike { + options = options || {}; + let o: DBRefLike = { + $ref: this.collection, + $id: this.oid + }; + + if (options.legacy) { + return o; + } + + if (this.db) o.$db = this.db; + o = Object.assign(o, this.fields); + return o; + } + + /** @internal */ + static fromExtendedJSON(doc: DBRefLike): DBRef { + const copy = Object.assign({}, doc) as Partial; + delete copy.$ref; + delete copy.$id; + delete copy.$db; + return new DBRef(doc.$ref, doc.$id, doc.$db, copy); + } + + /** @internal */ + [Symbol.for('nodejs.util.inspect.custom')](): string { + return this.inspect(); + } + + inspect(): string { + // NOTE: if OID is an ObjectId class it will just print the oid string. + const oid = + this.oid === undefined || this.oid.toString === undefined ? this.oid : this.oid.toString(); + return `new DBRef("${this.namespace}", new ObjectId("${String(oid)}")${ + this.db ? `, "${this.db}"` : '' + })`; + } +} diff --git a/Url-Shortner/node_modules/bson/src/decimal128.ts b/Url-Shortner/node_modules/bson/src/decimal128.ts new file mode 100644 index 0000000..b00c9d7 --- /dev/null +++ b/Url-Shortner/node_modules/bson/src/decimal128.ts @@ -0,0 +1,858 @@ +import { BSONValue } from './bson_value'; +import { BSONError } from './error'; +import { Long } from './long'; +import { isUint8Array } from './parser/utils'; +import { ByteUtils } from './utils/byte_utils'; + +const PARSE_STRING_REGEXP = /^(\+|-)?(\d+|(\d*\.\d*))?(E|e)?([-+])?(\d+)?$/; +const PARSE_INF_REGEXP = /^(\+|-)?(Infinity|inf)$/i; +const PARSE_NAN_REGEXP = /^(\+|-)?NaN$/i; + +const EXPONENT_MAX = 6111; +const EXPONENT_MIN = -6176; +const EXPONENT_BIAS = 6176; +const MAX_DIGITS = 34; + +// Nan value bits as 32 bit values (due to lack of longs) +const NAN_BUFFER = ByteUtils.fromNumberArray( + [ + 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + ].reverse() +); +// Infinity value bits 32 bit values (due to lack of longs) +const INF_NEGATIVE_BUFFER = ByteUtils.fromNumberArray( + [ + 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + ].reverse() +); +const INF_POSITIVE_BUFFER = ByteUtils.fromNumberArray( + [ + 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + ].reverse() +); + +const EXPONENT_REGEX = /^([-+])?(\d+)?$/; + +// Extract least significant 5 bits +const COMBINATION_MASK = 0x1f; +// Extract least significant 14 bits +const EXPONENT_MASK = 0x3fff; +// Value of combination field for Inf +const COMBINATION_INFINITY = 30; +// Value of combination field for NaN +const COMBINATION_NAN = 31; + +// Detect if the value is a digit +function isDigit(value: string): boolean { + return !isNaN(parseInt(value, 10)); +} + +// Divide two uint128 values +function divideu128(value: { parts: [number, number, number, number] }) { + const DIVISOR = Long.fromNumber(1000 * 1000 * 1000); + let _rem = Long.fromNumber(0); + + if (!value.parts[0] && !value.parts[1] && !value.parts[2] && !value.parts[3]) { + return { quotient: value, rem: _rem }; + } + + for (let i = 0; i <= 3; i++) { + // Adjust remainder to match value of next dividend + _rem = _rem.shiftLeft(32); + // Add the divided to _rem + _rem = _rem.add(new Long(value.parts[i], 0)); + value.parts[i] = _rem.div(DIVISOR).low; + _rem = _rem.modulo(DIVISOR); + } + + return { quotient: value, rem: _rem }; +} + +// Multiply two Long values and return the 128 bit value +function multiply64x2(left: Long, right: Long): { high: Long; low: Long } { + if (!left && !right) { + return { high: Long.fromNumber(0), low: Long.fromNumber(0) }; + } + + const leftHigh = left.shiftRightUnsigned(32); + const leftLow = new Long(left.getLowBits(), 0); + const rightHigh = right.shiftRightUnsigned(32); + const rightLow = new Long(right.getLowBits(), 0); + + let productHigh = leftHigh.multiply(rightHigh); + let productMid = leftHigh.multiply(rightLow); + const productMid2 = leftLow.multiply(rightHigh); + let productLow = leftLow.multiply(rightLow); + + productHigh = productHigh.add(productMid.shiftRightUnsigned(32)); + productMid = new Long(productMid.getLowBits(), 0) + .add(productMid2) + .add(productLow.shiftRightUnsigned(32)); + + productHigh = productHigh.add(productMid.shiftRightUnsigned(32)); + productLow = productMid.shiftLeft(32).add(new Long(productLow.getLowBits(), 0)); + + // Return the 128 bit result + return { high: productHigh, low: productLow }; +} + +function lessThan(left: Long, right: Long): boolean { + // Make values unsigned + const uhleft = left.high >>> 0; + const uhright = right.high >>> 0; + + // Compare high bits first + if (uhleft < uhright) { + return true; + } else if (uhleft === uhright) { + const ulleft = left.low >>> 0; + const ulright = right.low >>> 0; + if (ulleft < ulright) return true; + } + + return false; +} + +function invalidErr(string: string, message: string) { + throw new BSONError(`"${string}" is not a valid Decimal128 string - ${message}`); +} + +/** @public */ +export interface Decimal128Extended { + $numberDecimal: string; +} + +/** + * A class representation of the BSON Decimal128 type. + * @public + * @category BSONType + */ +export class Decimal128 extends BSONValue { + get _bsontype(): 'Decimal128' { + return 'Decimal128'; + } + + readonly bytes!: Uint8Array; + + /** + * @param bytes - a buffer containing the raw Decimal128 bytes in little endian order, + * or a string representation as returned by .toString() + */ + constructor(bytes: Uint8Array | string) { + super(); + if (typeof bytes === 'string') { + this.bytes = Decimal128.fromString(bytes).bytes; + } else if (isUint8Array(bytes)) { + if (bytes.byteLength !== 16) { + throw new BSONError('Decimal128 must take a Buffer of 16 bytes'); + } + this.bytes = bytes; + } else { + throw new BSONError('Decimal128 must take a Buffer or string'); + } + } + + /** + * Create a Decimal128 instance from a string representation + * + * @param representation - a numeric string representation. + */ + static fromString(representation: string): Decimal128 { + return Decimal128._fromString(representation, { allowRounding: false }); + } + + /** + * Create a Decimal128 instance from a string representation, allowing for rounding to 34 + * significant digits + * + * @example Example of a number that will be rounded + * ```ts + * > let d = Decimal128.fromString('37.499999999999999196428571428571375') + * Uncaught: + * BSONError: "37.499999999999999196428571428571375" is not a valid Decimal128 string - inexact rounding + * at invalidErr (/home/wajames/js-bson/lib/bson.cjs:1402:11) + * at Decimal128.fromStringInternal (/home/wajames/js-bson/lib/bson.cjs:1633:25) + * at Decimal128.fromString (/home/wajames/js-bson/lib/bson.cjs:1424:27) + * + * > d = Decimal128.fromStringWithRounding('37.499999999999999196428571428571375') + * new Decimal128("37.49999999999999919642857142857138") + * ``` + * @param representation - a numeric string representation. + */ + static fromStringWithRounding(representation: string): Decimal128 { + return Decimal128._fromString(representation, { allowRounding: true }); + } + + private static _fromString(representation: string, options: { allowRounding: boolean }) { + // Parse state tracking + let isNegative = false; + let sawSign = false; + let sawRadix = false; + let foundNonZero = false; + + // Total number of significant digits (no leading or trailing zero) + let significantDigits = 0; + // Total number of significand digits read + let nDigitsRead = 0; + // Total number of digits (no leading zeros) + let nDigits = 0; + // The number of the digits after radix + let radixPosition = 0; + // The index of the first non-zero in *str* + let firstNonZero = 0; + + // Digits Array + const digits = [0]; + // The number of digits in digits + let nDigitsStored = 0; + // Insertion pointer for digits + let digitsInsert = 0; + // The index of the last digit + let lastDigit = 0; + + // Exponent + let exponent = 0; + // The high 17 digits of the significand + let significandHigh = new Long(0, 0); + // The low 17 digits of the significand + let significandLow = new Long(0, 0); + // The biased exponent + let biasedExponent = 0; + + // Read index + let index = 0; + + // Naively prevent against REDOS attacks. + // TODO: implementing a custom parsing for this, or refactoring the regex would yield + // further gains. + if (representation.length >= 7000) { + throw new BSONError('' + representation + ' not a valid Decimal128 string'); + } + + // Results + const stringMatch = representation.match(PARSE_STRING_REGEXP); + const infMatch = representation.match(PARSE_INF_REGEXP); + const nanMatch = representation.match(PARSE_NAN_REGEXP); + + // Validate the string + if ((!stringMatch && !infMatch && !nanMatch) || representation.length === 0) { + throw new BSONError('' + representation + ' not a valid Decimal128 string'); + } + + if (stringMatch) { + // full_match = stringMatch[0] + // sign = stringMatch[1] + + const unsignedNumber = stringMatch[2]; + // stringMatch[3] is undefined if a whole number (ex "1", 12") + // but defined if a number w/ decimal in it (ex "1.0, 12.2") + + const e = stringMatch[4]; + const expSign = stringMatch[5]; + const expNumber = stringMatch[6]; + + // they provided e, but didn't give an exponent number. for ex "1e" + if (e && expNumber === undefined) invalidErr(representation, 'missing exponent power'); + + // they provided e, but didn't give a number before it. for ex "e1" + if (e && unsignedNumber === undefined) invalidErr(representation, 'missing exponent base'); + + if (e === undefined && (expSign || expNumber)) { + invalidErr(representation, 'missing e before exponent'); + } + } + + // Get the negative or positive sign + if (representation[index] === '+' || representation[index] === '-') { + sawSign = true; + isNegative = representation[index++] === '-'; + } + + // Check if user passed Infinity or NaN + if (!isDigit(representation[index]) && representation[index] !== '.') { + if (representation[index] === 'i' || representation[index] === 'I') { + return new Decimal128(isNegative ? INF_NEGATIVE_BUFFER : INF_POSITIVE_BUFFER); + } else if (representation[index] === 'N') { + return new Decimal128(NAN_BUFFER); + } + } + + // Read all the digits + while (isDigit(representation[index]) || representation[index] === '.') { + if (representation[index] === '.') { + if (sawRadix) invalidErr(representation, 'contains multiple periods'); + + sawRadix = true; + index = index + 1; + continue; + } + + if (nDigitsStored < MAX_DIGITS) { + if (representation[index] !== '0' || foundNonZero) { + if (!foundNonZero) { + firstNonZero = nDigitsRead; + } + + foundNonZero = true; + + // Only store 34 digits + digits[digitsInsert++] = parseInt(representation[index], 10); + nDigitsStored = nDigitsStored + 1; + } + } + + if (foundNonZero) nDigits = nDigits + 1; + if (sawRadix) radixPosition = radixPosition + 1; + + nDigitsRead = nDigitsRead + 1; + index = index + 1; + } + + if (sawRadix && !nDigitsRead) + throw new BSONError('' + representation + ' not a valid Decimal128 string'); + + // Read exponent if exists + if (representation[index] === 'e' || representation[index] === 'E') { + // Read exponent digits + const match = representation.substr(++index).match(EXPONENT_REGEX); + + // No digits read + if (!match || !match[2]) return new Decimal128(NAN_BUFFER); + + // Get exponent + exponent = parseInt(match[0], 10); + + // Adjust the index + index = index + match[0].length; + } + + // Return not a number + if (representation[index]) return new Decimal128(NAN_BUFFER); + + // Done reading input + // Find first non-zero digit in digits + if (!nDigitsStored) { + digits[0] = 0; + nDigits = 1; + nDigitsStored = 1; + significantDigits = 0; + } else { + lastDigit = nDigitsStored - 1; + significantDigits = nDigits; + if (significantDigits !== 1) { + while ( + representation[ + firstNonZero + significantDigits - 1 + Number(sawSign) + Number(sawRadix) + ] === '0' + ) { + significantDigits = significantDigits - 1; + } + } + } + + // Normalization of exponent + // Correct exponent based on radix position, and shift significand as needed + // to represent user input + + // Overflow prevention + if (exponent <= radixPosition && radixPosition > exponent + (1 << 14)) { + exponent = EXPONENT_MIN; + } else { + exponent = exponent - radixPosition; + } + + // Attempt to normalize the exponent + while (exponent > EXPONENT_MAX) { + // Shift exponent to significand and decrease + lastDigit = lastDigit + 1; + if (lastDigit >= MAX_DIGITS) { + // Check if we have a zero then just hard clamp, otherwise fail + if (significantDigits === 0) { + exponent = EXPONENT_MAX; + break; + } + + invalidErr(representation, 'overflow'); + } + exponent = exponent - 1; + } + + if (options.allowRounding) { + while (exponent < EXPONENT_MIN || nDigitsStored < nDigits) { + // Shift last digit. can only do this if < significant digits than # stored. + if (lastDigit === 0 && significantDigits < nDigitsStored) { + exponent = EXPONENT_MIN; + significantDigits = 0; + break; + } + + if (nDigitsStored < nDigits) { + // adjust to match digits not stored + nDigits = nDigits - 1; + } else { + // adjust to round + lastDigit = lastDigit - 1; + } + + if (exponent < EXPONENT_MAX) { + exponent = exponent + 1; + } else { + // Check if we have a zero then just hard clamp, otherwise fail + const digitsString = digits.join(''); + if (digitsString.match(/^0+$/)) { + exponent = EXPONENT_MAX; + break; + } + invalidErr(representation, 'overflow'); + } + } + + // Round + // We've normalized the exponent, but might still need to round. + if (lastDigit + 1 < significantDigits) { + let endOfString = nDigitsRead; + + // If we have seen a radix point, 'string' is 1 longer than we have + // documented with ndigits_read, so inc the position of the first nonzero + // digit and the position that digits are read to. + if (sawRadix) { + firstNonZero = firstNonZero + 1; + endOfString = endOfString + 1; + } + // if negative, we need to increment again to account for - sign at start. + if (sawSign) { + firstNonZero = firstNonZero + 1; + endOfString = endOfString + 1; + } + + const roundDigit = parseInt(representation[firstNonZero + lastDigit + 1], 10); + let roundBit = 0; + + if (roundDigit >= 5) { + roundBit = 1; + if (roundDigit === 5) { + roundBit = digits[lastDigit] % 2 === 1 ? 1 : 0; + for (let i = firstNonZero + lastDigit + 2; i < endOfString; i++) { + if (parseInt(representation[i], 10)) { + roundBit = 1; + break; + } + } + } + } + + if (roundBit) { + let dIdx = lastDigit; + + for (; dIdx >= 0; dIdx--) { + if (++digits[dIdx] > 9) { + digits[dIdx] = 0; + + // overflowed most significant digit + if (dIdx === 0) { + if (exponent < EXPONENT_MAX) { + exponent = exponent + 1; + digits[dIdx] = 1; + } else { + return new Decimal128(isNegative ? INF_NEGATIVE_BUFFER : INF_POSITIVE_BUFFER); + } + } + } else { + break; + } + } + } + } + } else { + while (exponent < EXPONENT_MIN || nDigitsStored < nDigits) { + // Shift last digit. can only do this if < significant digits than # stored. + if (lastDigit === 0) { + if (significantDigits === 0) { + exponent = EXPONENT_MIN; + break; + } + + invalidErr(representation, 'exponent underflow'); + } + + if (nDigitsStored < nDigits) { + if ( + representation[nDigits - 1 + Number(sawSign) + Number(sawRadix)] !== '0' && + significantDigits !== 0 + ) { + invalidErr(representation, 'inexact rounding'); + } + // adjust to match digits not stored + nDigits = nDigits - 1; + } else { + if (digits[lastDigit] !== 0) { + invalidErr(representation, 'inexact rounding'); + } + // adjust to round + lastDigit = lastDigit - 1; + } + + if (exponent < EXPONENT_MAX) { + exponent = exponent + 1; + } else { + invalidErr(representation, 'overflow'); + } + } + + // Round + // We've normalized the exponent, but might still need to round. + if (lastDigit + 1 < significantDigits) { + // If we have seen a radix point, 'string' is 1 longer than we have + // documented with ndigits_read, so inc the position of the first nonzero + // digit and the position that digits are read to. + if (sawRadix) { + firstNonZero = firstNonZero + 1; + } + // if saw sign, we need to increment again to account for - or + sign at start. + if (sawSign) { + firstNonZero = firstNonZero + 1; + } + + const roundDigit = parseInt(representation[firstNonZero + lastDigit + 1], 10); + + if (roundDigit !== 0) { + invalidErr(representation, 'inexact rounding'); + } + } + } + + // Encode significand + // The high 17 digits of the significand + significandHigh = Long.fromNumber(0); + // The low 17 digits of the significand + significandLow = Long.fromNumber(0); + + // read a zero + if (significantDigits === 0) { + significandHigh = Long.fromNumber(0); + significandLow = Long.fromNumber(0); + } else if (lastDigit < 17) { + let dIdx = 0; + significandLow = Long.fromNumber(digits[dIdx++]); + significandHigh = new Long(0, 0); + + for (; dIdx <= lastDigit; dIdx++) { + significandLow = significandLow.multiply(Long.fromNumber(10)); + significandLow = significandLow.add(Long.fromNumber(digits[dIdx])); + } + } else { + let dIdx = 0; + significandHigh = Long.fromNumber(digits[dIdx++]); + + for (; dIdx <= lastDigit - 17; dIdx++) { + significandHigh = significandHigh.multiply(Long.fromNumber(10)); + significandHigh = significandHigh.add(Long.fromNumber(digits[dIdx])); + } + + significandLow = Long.fromNumber(digits[dIdx++]); + + for (; dIdx <= lastDigit; dIdx++) { + significandLow = significandLow.multiply(Long.fromNumber(10)); + significandLow = significandLow.add(Long.fromNumber(digits[dIdx])); + } + } + + const significand = multiply64x2(significandHigh, Long.fromString('100000000000000000')); + significand.low = significand.low.add(significandLow); + + if (lessThan(significand.low, significandLow)) { + significand.high = significand.high.add(Long.fromNumber(1)); + } + + // Biased exponent + biasedExponent = exponent + EXPONENT_BIAS; + const dec = { low: Long.fromNumber(0), high: Long.fromNumber(0) }; + + // Encode combination, exponent, and significand. + if ( + significand.high.shiftRightUnsigned(49).and(Long.fromNumber(1)).equals(Long.fromNumber(1)) + ) { + // Encode '11' into bits 1 to 3 + dec.high = dec.high.or(Long.fromNumber(0x3).shiftLeft(61)); + dec.high = dec.high.or( + Long.fromNumber(biasedExponent).and(Long.fromNumber(0x3fff).shiftLeft(47)) + ); + dec.high = dec.high.or(significand.high.and(Long.fromNumber(0x7fffffffffff))); + } else { + dec.high = dec.high.or(Long.fromNumber(biasedExponent & 0x3fff).shiftLeft(49)); + dec.high = dec.high.or(significand.high.and(Long.fromNumber(0x1ffffffffffff))); + } + + dec.low = significand.low; + + // Encode sign + if (isNegative) { + dec.high = dec.high.or(Long.fromString('9223372036854775808')); + } + + // Encode into a buffer + const buffer = ByteUtils.allocate(16); + index = 0; + + // Encode the low 64 bits of the decimal + // Encode low bits + buffer[index++] = dec.low.low & 0xff; + buffer[index++] = (dec.low.low >> 8) & 0xff; + buffer[index++] = (dec.low.low >> 16) & 0xff; + buffer[index++] = (dec.low.low >> 24) & 0xff; + // Encode high bits + buffer[index++] = dec.low.high & 0xff; + buffer[index++] = (dec.low.high >> 8) & 0xff; + buffer[index++] = (dec.low.high >> 16) & 0xff; + buffer[index++] = (dec.low.high >> 24) & 0xff; + + // Encode the high 64 bits of the decimal + // Encode low bits + buffer[index++] = dec.high.low & 0xff; + buffer[index++] = (dec.high.low >> 8) & 0xff; + buffer[index++] = (dec.high.low >> 16) & 0xff; + buffer[index++] = (dec.high.low >> 24) & 0xff; + // Encode high bits + buffer[index++] = dec.high.high & 0xff; + buffer[index++] = (dec.high.high >> 8) & 0xff; + buffer[index++] = (dec.high.high >> 16) & 0xff; + buffer[index++] = (dec.high.high >> 24) & 0xff; + + // Return the new Decimal128 + return new Decimal128(buffer); + } + /** Create a string representation of the raw Decimal128 value */ + toString(): string { + // Note: bits in this routine are referred to starting at 0, + // from the sign bit, towards the coefficient. + + // decoded biased exponent (14 bits) + let biased_exponent; + // the number of significand digits + let significand_digits = 0; + // the base-10 digits in the significand + const significand = new Array(36); + for (let i = 0; i < significand.length; i++) significand[i] = 0; + // read pointer into significand + let index = 0; + + // true if the number is zero + let is_zero = false; + + // the most significant significand bits (50-46) + let significand_msb; + // temporary storage for significand decoding + let significand128: { parts: [number, number, number, number] } = { parts: [0, 0, 0, 0] }; + // indexing variables + let j, k; + + // Output string + const string: string[] = []; + + // Unpack index + index = 0; + + // Buffer reference + const buffer = this.bytes; + + // Unpack the low 64bits into a long + // bits 96 - 127 + const low = + buffer[index++] | (buffer[index++] << 8) | (buffer[index++] << 16) | (buffer[index++] << 24); + // bits 64 - 95 + const midl = + buffer[index++] | (buffer[index++] << 8) | (buffer[index++] << 16) | (buffer[index++] << 24); + + // Unpack the high 64bits into a long + // bits 32 - 63 + const midh = + buffer[index++] | (buffer[index++] << 8) | (buffer[index++] << 16) | (buffer[index++] << 24); + // bits 0 - 31 + const high = + buffer[index++] | (buffer[index++] << 8) | (buffer[index++] << 16) | (buffer[index++] << 24); + + // Unpack index + index = 0; + + // Create the state of the decimal + const dec = { + low: new Long(low, midl), + high: new Long(midh, high) + }; + + if (dec.high.lessThan(Long.ZERO)) { + string.push('-'); + } + + // Decode combination field and exponent + // bits 1 - 5 + const combination = (high >> 26) & COMBINATION_MASK; + + if (combination >> 3 === 3) { + // Check for 'special' values + if (combination === COMBINATION_INFINITY) { + return string.join('') + 'Infinity'; + } else if (combination === COMBINATION_NAN) { + return 'NaN'; + } else { + biased_exponent = (high >> 15) & EXPONENT_MASK; + significand_msb = 0x08 + ((high >> 14) & 0x01); + } + } else { + significand_msb = (high >> 14) & 0x07; + biased_exponent = (high >> 17) & EXPONENT_MASK; + } + + // unbiased exponent + const exponent = biased_exponent - EXPONENT_BIAS; + + // Create string of significand digits + + // Convert the 114-bit binary number represented by + // (significand_high, significand_low) to at most 34 decimal + // digits through modulo and division. + significand128.parts[0] = (high & 0x3fff) + ((significand_msb & 0xf) << 14); + significand128.parts[1] = midh; + significand128.parts[2] = midl; + significand128.parts[3] = low; + + if ( + significand128.parts[0] === 0 && + significand128.parts[1] === 0 && + significand128.parts[2] === 0 && + significand128.parts[3] === 0 + ) { + is_zero = true; + } else { + for (k = 3; k >= 0; k--) { + let least_digits = 0; + // Perform the divide + const result = divideu128(significand128); + significand128 = result.quotient; + least_digits = result.rem.low; + + // We now have the 9 least significant digits (in base 2). + // Convert and output to string. + if (!least_digits) continue; + + for (j = 8; j >= 0; j--) { + // significand[k * 9 + j] = Math.round(least_digits % 10); + significand[k * 9 + j] = least_digits % 10; + // least_digits = Math.round(least_digits / 10); + least_digits = Math.floor(least_digits / 10); + } + } + } + + // Output format options: + // Scientific - [-]d.dddE(+/-)dd or [-]dE(+/-)dd + // Regular - ddd.ddd + + if (is_zero) { + significand_digits = 1; + significand[index] = 0; + } else { + significand_digits = 36; + while (!significand[index]) { + significand_digits = significand_digits - 1; + index = index + 1; + } + } + + // the exponent if scientific notation is used + const scientific_exponent = significand_digits - 1 + exponent; + + // The scientific exponent checks are dictated by the string conversion + // specification and are somewhat arbitrary cutoffs. + // + // We must check exponent > 0, because if this is the case, the number + // has trailing zeros. However, we *cannot* output these trailing zeros, + // because doing so would change the precision of the value, and would + // change stored data if the string converted number is round tripped. + if (scientific_exponent >= 34 || scientific_exponent <= -7 || exponent > 0) { + // Scientific format + + // if there are too many significant digits, we should just be treating numbers + // as + or - 0 and using the non-scientific exponent (this is for the "invalid + // representation should be treated as 0/-0" spec cases in decimal128-1.json) + if (significand_digits > 34) { + string.push(`${0}`); + if (exponent > 0) string.push(`E+${exponent}`); + else if (exponent < 0) string.push(`E${exponent}`); + return string.join(''); + } + + string.push(`${significand[index++]}`); + significand_digits = significand_digits - 1; + + if (significand_digits) { + string.push('.'); + } + + for (let i = 0; i < significand_digits; i++) { + string.push(`${significand[index++]}`); + } + + // Exponent + string.push('E'); + if (scientific_exponent > 0) { + string.push(`+${scientific_exponent}`); + } else { + string.push(`${scientific_exponent}`); + } + } else { + // Regular format with no decimal place + if (exponent >= 0) { + for (let i = 0; i < significand_digits; i++) { + string.push(`${significand[index++]}`); + } + } else { + let radix_position = significand_digits + exponent; + + // non-zero digits before radix + if (radix_position > 0) { + for (let i = 0; i < radix_position; i++) { + string.push(`${significand[index++]}`); + } + } else { + string.push('0'); + } + + string.push('.'); + // add leading zeros after radix + while (radix_position++ < 0) { + string.push('0'); + } + + for (let i = 0; i < significand_digits - Math.max(radix_position - 1, 0); i++) { + string.push(`${significand[index++]}`); + } + } + } + + return string.join(''); + } + + toJSON(): Decimal128Extended { + return { $numberDecimal: this.toString() }; + } + + /** @internal */ + toExtendedJSON(): Decimal128Extended { + return { $numberDecimal: this.toString() }; + } + + /** @internal */ + static fromExtendedJSON(doc: Decimal128Extended): Decimal128 { + return Decimal128.fromString(doc.$numberDecimal); + } + + /** @internal */ + [Symbol.for('nodejs.util.inspect.custom')](): string { + return this.inspect(); + } + + inspect(): string { + return `new Decimal128("${this.toString()}")`; + } +} diff --git a/Url-Shortner/node_modules/bson/src/double.ts b/Url-Shortner/node_modules/bson/src/double.ts new file mode 100644 index 0000000..4581536 --- /dev/null +++ b/Url-Shortner/node_modules/bson/src/double.ts @@ -0,0 +1,83 @@ +import { BSONValue } from './bson_value'; +import type { EJSONOptions } from './extended_json'; + +/** @public */ +export interface DoubleExtended { + $numberDouble: string; +} + +/** + * A class representation of the BSON Double type. + * @public + * @category BSONType + */ +export class Double extends BSONValue { + get _bsontype(): 'Double' { + return 'Double'; + } + + value!: number; + /** + * Create a Double type + * + * @param value - the number we want to represent as a double. + */ + constructor(value: number) { + super(); + if ((value as unknown) instanceof Number) { + value = value.valueOf(); + } + + this.value = +value; + } + + /** + * Access the number value. + * + * @returns returns the wrapped double number. + */ + valueOf(): number { + return this.value; + } + + toJSON(): number { + return this.value; + } + + toString(radix?: number): string { + return this.value.toString(radix); + } + + /** @internal */ + toExtendedJSON(options?: EJSONOptions): number | DoubleExtended { + if (options && (options.legacy || (options.relaxed && isFinite(this.value)))) { + return this.value; + } + + if (Object.is(Math.sign(this.value), -0)) { + // NOTE: JavaScript has +0 and -0, apparently to model limit calculations. If a user + // explicitly provided `-0` then we need to ensure the sign makes it into the output + return { $numberDouble: '-0.0' }; + } + + return { + $numberDouble: Number.isInteger(this.value) ? this.value.toFixed(1) : this.value.toString() + }; + } + + /** @internal */ + static fromExtendedJSON(doc: DoubleExtended, options?: EJSONOptions): number | Double { + const doubleValue = parseFloat(doc.$numberDouble); + return options && options.relaxed ? doubleValue : new Double(doubleValue); + } + + /** @internal */ + [Symbol.for('nodejs.util.inspect.custom')](): string { + return this.inspect(); + } + + inspect(): string { + const eJSON = this.toExtendedJSON() as DoubleExtended; + return `new Double(${eJSON.$numberDouble})`; + } +} diff --git a/Url-Shortner/node_modules/bson/src/error.ts b/Url-Shortner/node_modules/bson/src/error.ts new file mode 100644 index 0000000..f98f0fb --- /dev/null +++ b/Url-Shortner/node_modules/bson/src/error.ts @@ -0,0 +1,85 @@ +import { BSON_MAJOR_VERSION } from './constants'; + +/** + * @public + * @category Error + * + * `BSONError` objects are thrown when BSON ecounters an error. + * + * This is the parent class for all the other errors thrown by this library. + */ +export class BSONError extends Error { + /** + * @internal + * The underlying algorithm for isBSONError may change to improve how strict it is + * about determining if an input is a BSONError. But it must remain backwards compatible + * with previous minors & patches of the current major version. + */ + protected get bsonError(): true { + return true; + } + + override get name(): string { + return 'BSONError'; + } + + constructor(message: string) { + super(message); + } + + /** + * @public + * + * All errors thrown from the BSON library inherit from `BSONError`. + * This method can assist with determining if an error originates from the BSON library + * even if it does not pass an `instanceof` check against this class' constructor. + * + * @param value - any javascript value that needs type checking + */ + public static isBSONError(value: unknown): value is BSONError { + return ( + value != null && + typeof value === 'object' && + 'bsonError' in value && + value.bsonError === true && + // Do not access the following properties, just check existence + 'name' in value && + 'message' in value && + 'stack' in value + ); + } +} + +/** + * @public + * @category Error + */ +export class BSONVersionError extends BSONError { + get name(): 'BSONVersionError' { + return 'BSONVersionError'; + } + + constructor() { + super( + `Unsupported BSON version, bson types must be from bson ${BSON_MAJOR_VERSION}.0 or later` + ); + } +} + +/** + * @public + * @category Error + * + * An error generated when BSON functions encounter an unexpected input + * or reaches an unexpected/invalid internal state + * + */ +export class BSONRuntimeError extends BSONError { + get name(): 'BSONRuntimeError' { + return 'BSONRuntimeError'; + } + + constructor(message: string) { + super(message); + } +} diff --git a/Url-Shortner/node_modules/bson/src/extended_json.ts b/Url-Shortner/node_modules/bson/src/extended_json.ts new file mode 100644 index 0000000..eb08b3c --- /dev/null +++ b/Url-Shortner/node_modules/bson/src/extended_json.ts @@ -0,0 +1,515 @@ +import { Binary } from './binary'; +import type { Document } from './bson'; +import { Code } from './code'; +import { + BSON_INT32_MAX, + BSON_INT32_MIN, + BSON_INT64_MAX, + BSON_INT64_MIN, + BSON_MAJOR_VERSION +} from './constants'; +import { DBRef, isDBRefLike } from './db_ref'; +import { Decimal128 } from './decimal128'; +import { Double } from './double'; +import { BSONError, BSONRuntimeError, BSONVersionError } from './error'; +import { Int32 } from './int_32'; +import { Long } from './long'; +import { MaxKey } from './max_key'; +import { MinKey } from './min_key'; +import { ObjectId } from './objectid'; +import { isDate, isRegExp, isMap } from './parser/utils'; +import { BSONRegExp } from './regexp'; +import { BSONSymbol } from './symbol'; +import { Timestamp } from './timestamp'; + +/** @public */ +export type EJSONOptions = { + /** + * Output using the Extended JSON v1 spec + * @defaultValue `false` + */ + legacy?: boolean; + /** + * Enable Extended JSON's `relaxed` mode, which attempts to return native JS types where possible, rather than BSON types + * @defaultValue `false` */ + relaxed?: boolean; + /** + * Enable native bigint support + * @defaultValue `false` + */ + useBigInt64?: boolean; +}; + +/** @internal */ +type BSONType = + | Binary + | Code + | DBRef + | Decimal128 + | Double + | Int32 + | Long + | MaxKey + | MinKey + | ObjectId + | BSONRegExp + | BSONSymbol + | Timestamp; + +function isBSONType(value: unknown): value is BSONType { + return ( + value != null && + typeof value === 'object' && + '_bsontype' in value && + typeof value._bsontype === 'string' + ); +} + +// all the types where we don't need to do any special processing and can just pass the EJSON +//straight to type.fromExtendedJSON +const keysToCodecs = { + $oid: ObjectId, + $binary: Binary, + $uuid: Binary, + $symbol: BSONSymbol, + $numberInt: Int32, + $numberDecimal: Decimal128, + $numberDouble: Double, + $numberLong: Long, + $minKey: MinKey, + $maxKey: MaxKey, + $regex: BSONRegExp, + $regularExpression: BSONRegExp, + $timestamp: Timestamp +} as const; + +// eslint-disable-next-line @typescript-eslint/no-explicit-any +function deserializeValue(value: any, options: EJSONOptions = {}) { + if (typeof value === 'number') { + // TODO(NODE-4377): EJSON js number handling diverges from BSON + const in32BitRange = value <= BSON_INT32_MAX && value >= BSON_INT32_MIN; + const in64BitRange = value <= BSON_INT64_MAX && value >= BSON_INT64_MIN; + + if (options.relaxed || options.legacy) { + return value; + } + + if (Number.isInteger(value) && !Object.is(value, -0)) { + // interpret as being of the smallest BSON integer type that can represent the number exactly + if (in32BitRange) { + return new Int32(value); + } + if (in64BitRange) { + if (options.useBigInt64) { + // eslint-disable-next-line no-restricted-globals -- This is allowed here as useBigInt64=true + return BigInt(value); + } + return Long.fromNumber(value); + } + } + + // If the number is a non-integer or out of integer range, should interpret as BSON Double. + return new Double(value); + } + + // from here on out we're looking for bson types, so bail if its not an object + if (value == null || typeof value !== 'object') return value; + + // upgrade deprecated undefined to null + if (value.$undefined) return null; + + const keys = Object.keys(value).filter( + k => k.startsWith('$') && value[k] != null + ) as (keyof typeof keysToCodecs)[]; + for (let i = 0; i < keys.length; i++) { + const c = keysToCodecs[keys[i]]; + if (c) return c.fromExtendedJSON(value, options); + } + + if (value.$date != null) { + const d = value.$date; + const date = new Date(); + + if (options.legacy) { + if (typeof d === 'number') date.setTime(d); + else if (typeof d === 'string') date.setTime(Date.parse(d)); + else if (typeof d === 'bigint') date.setTime(Number(d)); + else throw new BSONRuntimeError(`Unrecognized type for EJSON date: ${typeof d}`); + } else { + if (typeof d === 'string') date.setTime(Date.parse(d)); + else if (Long.isLong(d)) date.setTime(d.toNumber()); + else if (typeof d === 'number' && options.relaxed) date.setTime(d); + else if (typeof d === 'bigint') date.setTime(Number(d)); + else throw new BSONRuntimeError(`Unrecognized type for EJSON date: ${typeof d}`); + } + return date; + } + + if (value.$code != null) { + const copy = Object.assign({}, value); + if (value.$scope) { + copy.$scope = deserializeValue(value.$scope); + } + + return Code.fromExtendedJSON(value); + } + + if (isDBRefLike(value) || value.$dbPointer) { + const v = value.$ref ? value : value.$dbPointer; + + // we run into this in a "degenerate EJSON" case (with $id and $ref order flipped) + // because of the order JSON.parse goes through the document + if (v instanceof DBRef) return v; + + const dollarKeys = Object.keys(v).filter(k => k.startsWith('$')); + let valid = true; + dollarKeys.forEach(k => { + if (['$ref', '$id', '$db'].indexOf(k) === -1) valid = false; + }); + + // only make DBRef if $ keys are all valid + if (valid) return DBRef.fromExtendedJSON(v); + } + + return value; +} + +type EJSONSerializeOptions = EJSONOptions & { + seenObjects: { obj: unknown; propertyName: string }[]; +}; + +// eslint-disable-next-line @typescript-eslint/no-explicit-any +function serializeArray(array: any[], options: EJSONSerializeOptions): any[] { + return array.map((v: unknown, index: number) => { + options.seenObjects.push({ propertyName: `index ${index}`, obj: null }); + try { + return serializeValue(v, options); + } finally { + options.seenObjects.pop(); + } + }); +} + +function getISOString(date: Date) { + const isoStr = date.toISOString(); + // we should only show milliseconds in timestamp if they're non-zero + return date.getUTCMilliseconds() !== 0 ? isoStr : isoStr.slice(0, -5) + 'Z'; +} + +// eslint-disable-next-line @typescript-eslint/no-explicit-any +function serializeValue(value: any, options: EJSONSerializeOptions): any { + if (value instanceof Map || isMap(value)) { + const obj: Record = Object.create(null); + for (const [k, v] of value) { + if (typeof k !== 'string') { + throw new BSONError('Can only serialize maps with string keys'); + } + obj[k] = v; + } + + return serializeValue(obj, options); + } + + if ((typeof value === 'object' || typeof value === 'function') && value !== null) { + const index = options.seenObjects.findIndex(entry => entry.obj === value); + if (index !== -1) { + const props = options.seenObjects.map(entry => entry.propertyName); + const leadingPart = props + .slice(0, index) + .map(prop => `${prop} -> `) + .join(''); + const alreadySeen = props[index]; + const circularPart = + ' -> ' + + props + .slice(index + 1, props.length - 1) + .map(prop => `${prop} -> `) + .join(''); + const current = props[props.length - 1]; + const leadingSpace = ' '.repeat(leadingPart.length + alreadySeen.length / 2); + const dashes = '-'.repeat( + circularPart.length + (alreadySeen.length + current.length) / 2 - 1 + ); + + throw new BSONError( + 'Converting circular structure to EJSON:\n' + + ` ${leadingPart}${alreadySeen}${circularPart}${current}\n` + + ` ${leadingSpace}\\${dashes}/` + ); + } + options.seenObjects[options.seenObjects.length - 1].obj = value; + } + + if (Array.isArray(value)) return serializeArray(value, options); + + if (value === undefined) return null; + + if (value instanceof Date || isDate(value)) { + const dateNum = value.getTime(), + // is it in year range 1970-9999? + inRange = dateNum > -1 && dateNum < 253402318800000; + + if (options.legacy) { + return options.relaxed && inRange + ? { $date: value.getTime() } + : { $date: getISOString(value) }; + } + return options.relaxed && inRange + ? { $date: getISOString(value) } + : { $date: { $numberLong: value.getTime().toString() } }; + } + + if (typeof value === 'number' && (!options.relaxed || !isFinite(value))) { + if (Number.isInteger(value) && !Object.is(value, -0)) { + // interpret as being of the smallest BSON integer type that can represent the number exactly + if (value >= BSON_INT32_MIN && value <= BSON_INT32_MAX) { + return { $numberInt: value.toString() }; + } + if (value >= BSON_INT64_MIN && value <= BSON_INT64_MAX) { + // TODO(NODE-4377): EJSON js number handling diverges from BSON + return { $numberLong: value.toString() }; + } + } + return { $numberDouble: Object.is(value, -0) ? '-0.0' : value.toString() }; + } + + if (typeof value === 'bigint') { + /* eslint-disable no-restricted-globals -- This is allowed as we are accepting a bigint as input */ + if (!options.relaxed) { + return { $numberLong: BigInt.asIntN(64, value).toString() }; + } + return Number(BigInt.asIntN(64, value)); + /* eslint-enable */ + } + + if (value instanceof RegExp || isRegExp(value)) { + let flags = value.flags; + if (flags === undefined) { + const match = value.toString().match(/[gimuy]*$/); + if (match) { + flags = match[0]; + } + } + + const rx = new BSONRegExp(value.source, flags); + return rx.toExtendedJSON(options); + } + + if (value != null && typeof value === 'object') return serializeDocument(value, options); + return value; +} + +const BSON_TYPE_MAPPINGS = { + Binary: (o: Binary) => new Binary(o.value(), o.sub_type), + Code: (o: Code) => new Code(o.code, o.scope), + DBRef: (o: DBRef) => new DBRef(o.collection || o.namespace, o.oid, o.db, o.fields), // "namespace" for 1.x library backwards compat + Decimal128: (o: Decimal128) => new Decimal128(o.bytes), + Double: (o: Double) => new Double(o.value), + Int32: (o: Int32) => new Int32(o.value), + Long: ( + o: Long & { + low_: number; + high_: number; + unsigned_: boolean | undefined; + } + ) => + Long.fromBits( + // underscore variants for 1.x backwards compatibility + o.low != null ? o.low : o.low_, + o.low != null ? o.high : o.high_, + o.low != null ? o.unsigned : o.unsigned_ + ), + MaxKey: () => new MaxKey(), + MinKey: () => new MinKey(), + ObjectId: (o: ObjectId) => new ObjectId(o), + BSONRegExp: (o: BSONRegExp) => new BSONRegExp(o.pattern, o.options), + BSONSymbol: (o: BSONSymbol) => new BSONSymbol(o.value), + Timestamp: (o: Timestamp) => Timestamp.fromBits(o.low, o.high) +} as const; + +// eslint-disable-next-line @typescript-eslint/no-explicit-any +function serializeDocument(doc: any, options: EJSONSerializeOptions) { + if (doc == null || typeof doc !== 'object') throw new BSONError('not an object instance'); + + const bsontype: BSONType['_bsontype'] = doc._bsontype; + if (typeof bsontype === 'undefined') { + // It's a regular object. Recursively serialize its property values. + const _doc: Document = {}; + for (const name of Object.keys(doc)) { + options.seenObjects.push({ propertyName: name, obj: null }); + try { + const value = serializeValue(doc[name], options); + if (name === '__proto__') { + Object.defineProperty(_doc, name, { + value, + writable: true, + enumerable: true, + configurable: true + }); + } else { + _doc[name] = value; + } + } finally { + options.seenObjects.pop(); + } + } + return _doc; + } else if ( + doc != null && + typeof doc === 'object' && + typeof doc._bsontype === 'string' && + doc[Symbol.for('@@mdb.bson.version')] !== BSON_MAJOR_VERSION + ) { + throw new BSONVersionError(); + } else if (isBSONType(doc)) { + // the "document" is really just a BSON type object + // eslint-disable-next-line @typescript-eslint/no-explicit-any + let outDoc: any = doc; + if (typeof outDoc.toExtendedJSON !== 'function') { + // There's no EJSON serialization function on the object. It's probably an + // object created by a previous version of this library (or another library) + // that's duck-typing objects to look like they were generated by this library). + // Copy the object into this library's version of that type. + const mapper = BSON_TYPE_MAPPINGS[doc._bsontype]; + if (!mapper) { + throw new BSONError('Unrecognized or invalid _bsontype: ' + doc._bsontype); + } + outDoc = mapper(outDoc); + } + + // Two BSON types may have nested objects that may need to be serialized too + if (bsontype === 'Code' && outDoc.scope) { + outDoc = new Code(outDoc.code, serializeValue(outDoc.scope, options)); + } else if (bsontype === 'DBRef' && outDoc.oid) { + outDoc = new DBRef( + serializeValue(outDoc.collection, options), + serializeValue(outDoc.oid, options), + serializeValue(outDoc.db, options), + serializeValue(outDoc.fields, options) + ); + } + + return outDoc.toExtendedJSON(options); + } else { + throw new BSONError('_bsontype must be a string, but was: ' + typeof bsontype); + } +} + +/** + * Parse an Extended JSON string, constructing the JavaScript value or object described by that + * string. + * + * @example + * ```js + * const { EJSON } = require('bson'); + * const text = '{ "int32": { "$numberInt": "10" } }'; + * + * // prints { int32: { [String: '10'] _bsontype: 'Int32', value: '10' } } + * console.log(EJSON.parse(text, { relaxed: false })); + * + * // prints { int32: 10 } + * console.log(EJSON.parse(text)); + * ``` + */ +// eslint-disable-next-line @typescript-eslint/no-explicit-any +function parse(text: string, options?: EJSONOptions): any { + const ejsonOptions = { + useBigInt64: options?.useBigInt64 ?? false, + relaxed: options?.relaxed ?? true, + legacy: options?.legacy ?? false + }; + return JSON.parse(text, (key, value) => { + if (key.indexOf('\x00') !== -1) { + throw new BSONError( + `BSON Document field names cannot contain null bytes, found: ${JSON.stringify(key)}` + ); + } + return deserializeValue(value, ejsonOptions); + }); +} + +/** + * Converts a BSON document to an Extended JSON string, optionally replacing values if a replacer + * function is specified or optionally including only the specified properties if a replacer array + * is specified. + * + * @param value - The value to convert to extended JSON + * @param replacer - A function that alters the behavior of the stringification process, or an array of String and Number objects that serve as a whitelist for selecting/filtering the properties of the value object to be included in the JSON string. If this value is null or not provided, all properties of the object are included in the resulting JSON string + * @param space - A String or Number object that's used to insert white space into the output JSON string for readability purposes. + * @param options - Optional settings + * + * @example + * ```js + * const { EJSON } = require('bson'); + * const Int32 = require('mongodb').Int32; + * const doc = { int32: new Int32(10) }; + * + * // prints '{"int32":{"$numberInt":"10"}}' + * console.log(EJSON.stringify(doc, { relaxed: false })); + * + * // prints '{"int32":10}' + * console.log(EJSON.stringify(doc)); + * ``` + */ +function stringify( + // eslint-disable-next-line @typescript-eslint/no-explicit-any + value: any, + // eslint-disable-next-line @typescript-eslint/no-explicit-any + replacer?: (number | string)[] | ((this: any, key: string, value: any) => any) | EJSONOptions, + space?: string | number, + options?: EJSONOptions +): string { + if (space != null && typeof space === 'object') { + options = space; + space = 0; + } + if (replacer != null && typeof replacer === 'object' && !Array.isArray(replacer)) { + options = replacer; + replacer = undefined; + space = 0; + } + const serializeOptions = Object.assign({ relaxed: true, legacy: false }, options, { + seenObjects: [{ propertyName: '(root)', obj: null }] + }); + + const doc = serializeValue(value, serializeOptions); + return JSON.stringify(doc, replacer as Parameters[1], space); +} + +/** + * Serializes an object to an Extended JSON string, and reparse it as a JavaScript object. + * + * @param value - The object to serialize + * @param options - Optional settings passed to the `stringify` function + */ +// eslint-disable-next-line @typescript-eslint/no-explicit-any +function EJSONserialize(value: any, options?: EJSONOptions): Document { + options = options || {}; + return JSON.parse(stringify(value, options)); +} + +/** + * Deserializes an Extended JSON object into a plain JavaScript object with native/BSON types + * + * @param ejson - The Extended JSON object to deserialize + * @param options - Optional settings passed to the parse method + */ +// eslint-disable-next-line @typescript-eslint/no-explicit-any +function EJSONdeserialize(ejson: Document, options?: EJSONOptions): any { + options = options || {}; + return parse(JSON.stringify(ejson), options); +} + +/** @public */ +const EJSON: { + parse: typeof parse; + stringify: typeof stringify; + serialize: typeof EJSONserialize; + deserialize: typeof EJSONdeserialize; +} = Object.create(null); +EJSON.parse = parse; +EJSON.stringify = stringify; +EJSON.serialize = EJSONserialize; +EJSON.deserialize = EJSONdeserialize; +Object.freeze(EJSON); +export { EJSON }; diff --git a/Url-Shortner/node_modules/bson/src/index.ts b/Url-Shortner/node_modules/bson/src/index.ts new file mode 100644 index 0000000..5ef4157 --- /dev/null +++ b/Url-Shortner/node_modules/bson/src/index.ts @@ -0,0 +1,19 @@ +import * as BSON from './bson'; + +// Export all named properties from BSON to support +// import { ObjectId, serialize } from 'bson'; +// const { ObjectId, serialize } = require('bson'); +export * from './bson'; + +// Export BSON as a namespace to support: +// import { BSON } from 'bson'; +// const { BSON } = require('bson'); +export { BSON }; + +// BSON does **NOT** have a default export + +// The following will crash in es module environments +// import BSON from 'bson'; + +// The following will work as expected, BSON as a namespace of all the APIs (BSON.ObjectId, BSON.serialize) +// const BSON = require('bson'); diff --git a/Url-Shortner/node_modules/bson/src/int_32.ts b/Url-Shortner/node_modules/bson/src/int_32.ts new file mode 100644 index 0000000..c74f3c8 --- /dev/null +++ b/Url-Shortner/node_modules/bson/src/int_32.ts @@ -0,0 +1,70 @@ +import { BSONValue } from './bson_value'; +import type { EJSONOptions } from './extended_json'; + +/** @public */ +export interface Int32Extended { + $numberInt: string; +} + +/** + * A class representation of a BSON Int32 type. + * @public + * @category BSONType + */ +export class Int32 extends BSONValue { + get _bsontype(): 'Int32' { + return 'Int32'; + } + + value!: number; + /** + * Create an Int32 type + * + * @param value - the number we want to represent as an int32. + */ + constructor(value: number | string) { + super(); + if ((value as unknown) instanceof Number) { + value = value.valueOf(); + } + + this.value = +value | 0; + } + + /** + * Access the number value. + * + * @returns returns the wrapped int32 number. + */ + valueOf(): number { + return this.value; + } + + toString(radix?: number): string { + return this.value.toString(radix); + } + + toJSON(): number { + return this.value; + } + + /** @internal */ + toExtendedJSON(options?: EJSONOptions): number | Int32Extended { + if (options && (options.relaxed || options.legacy)) return this.value; + return { $numberInt: this.value.toString() }; + } + + /** @internal */ + static fromExtendedJSON(doc: Int32Extended, options?: EJSONOptions): number | Int32 { + return options && options.relaxed ? parseInt(doc.$numberInt, 10) : new Int32(doc.$numberInt); + } + + /** @internal */ + [Symbol.for('nodejs.util.inspect.custom')](): string { + return this.inspect(); + } + + inspect(): string { + return `new Int32(${this.valueOf()})`; + } +} diff --git a/Url-Shortner/node_modules/bson/src/long.ts b/Url-Shortner/node_modules/bson/src/long.ts new file mode 100644 index 0000000..752c18f --- /dev/null +++ b/Url-Shortner/node_modules/bson/src/long.ts @@ -0,0 +1,1067 @@ +import { BSONValue } from './bson_value'; +import { BSONError } from './error'; +import type { EJSONOptions } from './extended_json'; +import type { Timestamp } from './timestamp'; + +interface LongWASMHelpers { + /** Gets the high bits of the last operation performed */ + get_high(this: void): number; + div_u( + this: void, + lowBits: number, + highBits: number, + lowBitsDivisor: number, + highBitsDivisor: number + ): number; + div_s( + this: void, + lowBits: number, + highBits: number, + lowBitsDivisor: number, + highBitsDivisor: number + ): number; + rem_u( + this: void, + lowBits: number, + highBits: number, + lowBitsDivisor: number, + highBitsDivisor: number + ): number; + rem_s( + this: void, + lowBits: number, + highBits: number, + lowBitsDivisor: number, + highBitsDivisor: number + ): number; + mul( + this: void, + lowBits: number, + highBits: number, + lowBitsMultiplier: number, + highBitsMultiplier: number + ): number; +} + +/** + * wasm optimizations, to do native i64 multiplication and divide + */ +let wasm: LongWASMHelpers | undefined = undefined; + +/* We do not want to have to include DOM types just for this check */ +// eslint-disable-next-line @typescript-eslint/no-explicit-any +declare const WebAssembly: any; + +try { + wasm = new WebAssembly.Instance( + new WebAssembly.Module( + // prettier-ignore + new Uint8Array([0, 97, 115, 109, 1, 0, 0, 0, 1, 13, 2, 96, 0, 1, 127, 96, 4, 127, 127, 127, 127, 1, 127, 3, 7, 6, 0, 1, 1, 1, 1, 1, 6, 6, 1, 127, 1, 65, 0, 11, 7, 50, 6, 3, 109, 117, 108, 0, 1, 5, 100, 105, 118, 95, 115, 0, 2, 5, 100, 105, 118, 95, 117, 0, 3, 5, 114, 101, 109, 95, 115, 0, 4, 5, 114, 101, 109, 95, 117, 0, 5, 8, 103, 101, 116, 95, 104, 105, 103, 104, 0, 0, 10, 191, 1, 6, 4, 0, 35, 0, 11, 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, 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, 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, 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, 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 as unknown as LongWASMHelpers; +} catch { + // no wasm support +} + +const TWO_PWR_16_DBL = 1 << 16; +const TWO_PWR_24_DBL = 1 << 24; +const TWO_PWR_32_DBL = TWO_PWR_16_DBL * TWO_PWR_16_DBL; +const TWO_PWR_64_DBL = TWO_PWR_32_DBL * TWO_PWR_32_DBL; +const TWO_PWR_63_DBL = TWO_PWR_64_DBL / 2; + +/** A cache of the Long representations of small integer values. */ +const INT_CACHE: { [key: number]: Long } = {}; + +/** A cache of the Long representations of small unsigned integer values. */ +const UINT_CACHE: { [key: number]: Long } = {}; + +const MAX_INT64_STRING_LENGTH = 20; + +const DECIMAL_REG_EX = /^(\+?0|(\+|-)?[1-9][0-9]*)$/; + +/** @public */ +export interface LongExtended { + $numberLong: string; +} + +/** + * A class representing a 64-bit integer + * @public + * @category BSONType + * @remarks + * 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 found as static properties on this class. + */ +export class Long extends BSONValue { + get _bsontype(): 'Long' { + return 'Long'; + } + + /** An indicator used to reliably determine if an object is a Long or not. */ + get __isLong__(): boolean { + return true; + } + + /** + * 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; + + /** + * 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. + * + * Acceptable signatures are: + * - Long(low, high, unsigned?) + * - Long(bigint, unsigned?) + * - Long(string, unsigned?) + * + * @param low - The low (signed) 32 bits of the long + * @param high - The high (signed) 32 bits of the long + * @param unsigned - Whether unsigned or not, defaults to signed + */ + constructor(low: number | bigint | string = 0, high?: number | boolean, unsigned?: boolean) { + super(); + if (typeof low === 'bigint') { + Object.assign(this, Long.fromBigInt(low, !!high)); + } else if (typeof low === 'string') { + Object.assign(this, Long.fromString(low, !!high)); + } else { + this.low = low | 0; + this.high = (high as number) | 0; + this.unsigned = !!unsigned; + } + } + + static TWO_PWR_24 = Long.fromInt(TWO_PWR_24_DBL); + + /** Maximum unsigned value. */ + static MAX_UNSIGNED_VALUE = Long.fromBits(0xffffffff | 0, 0xffffffff | 0, true); + /** Signed zero */ + static ZERO = Long.fromInt(0); + /** Unsigned zero. */ + static UZERO = Long.fromInt(0, true); + /** Signed one. */ + static ONE = Long.fromInt(1); + /** Unsigned one. */ + static UONE = Long.fromInt(1, true); + /** Signed negative one. */ + static NEG_ONE = Long.fromInt(-1); + /** Maximum signed value. */ + static MAX_VALUE = Long.fromBits(0xffffffff | 0, 0x7fffffff | 0, false); + /** Minimum signed value. */ + static MIN_VALUE = Long.fromBits(0, 0x80000000 | 0, false); + + /** + * 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. + * @param lowBits - The low 32 bits + * @param highBits - The high 32 bits + * @param unsigned - Whether unsigned or not, defaults to signed + * @returns The corresponding Long value + */ + static fromBits(lowBits: number, highBits: number, unsigned?: boolean): Long { + return new Long(lowBits, highBits, unsigned); + } + + /** + * Returns a Long representing the given 32 bit integer value. + * @param value - The 32 bit integer in question + * @param unsigned - Whether unsigned or not, defaults to signed + * @returns The corresponding Long value + */ + static fromInt(value: number, unsigned?: boolean): Long { + let obj, cachedObj, cache; + if (unsigned) { + value >>>= 0; + if ((cache = 0 <= value && value < 256)) { + cachedObj = UINT_CACHE[value]; + if (cachedObj) return cachedObj; + } + obj = Long.fromBits(value, (value | 0) < 0 ? -1 : 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 = Long.fromBits(value, value < 0 ? -1 : 0, false); + if (cache) INT_CACHE[value] = obj; + return obj; + } + } + + /** + * Returns a Long representing the given value, provided that it is a finite number. Otherwise, zero is returned. + * @param value - The number in question + * @param unsigned - Whether unsigned or not, defaults to signed + * @returns The corresponding Long value + */ + static fromNumber(value: number, unsigned?: boolean): Long { + if (isNaN(value)) return unsigned ? Long.UZERO : Long.ZERO; + if (unsigned) { + if (value < 0) return Long.UZERO; + if (value >= TWO_PWR_64_DBL) return Long.MAX_UNSIGNED_VALUE; + } else { + if (value <= -TWO_PWR_63_DBL) return Long.MIN_VALUE; + if (value + 1 >= TWO_PWR_63_DBL) return Long.MAX_VALUE; + } + if (value < 0) return Long.fromNumber(-value, unsigned).neg(); + return Long.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. + * @param value - The number in question + * @param unsigned - Whether unsigned or not, defaults to signed + * @returns The corresponding Long value + */ + static fromBigInt(value: bigint, unsigned?: boolean): Long { + return Long.fromString(value.toString(), unsigned); + } + + /** + * Returns a Long representation of the given string, written using the specified radix. + * @param str - The textual representation of the Long + * @param unsigned - Whether unsigned or not, defaults to signed + * @param radix - The radix in which the text is written (2-36), defaults to 10 + * @returns The corresponding Long value + */ + static fromString(str: string, unsigned?: boolean, radix?: number): Long { + if (str.length === 0) throw new BSONError('empty string'); + if (str === 'NaN' || str === 'Infinity' || str === '+Infinity' || str === '-Infinity') + return Long.ZERO; + if (typeof unsigned === 'number') { + // For goog.math.long compatibility + (radix = unsigned), (unsigned = false); + } else { + unsigned = !!unsigned; + } + radix = radix || 10; + if (radix < 2 || 36 < radix) throw new BSONError('radix'); + + let p; + if ((p = str.indexOf('-')) > 0) throw new BSONError('interior hyphen'); + else if (p === 0) { + return Long.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. + const radixToPower = Long.fromNumber(Math.pow(radix, 8)); + + let result = Long.ZERO; + for (let i = 0; i < str.length; i += 8) { + const size = Math.min(8, str.length - i), + value = parseInt(str.substring(i, i + size), radix); + if (size < 8) { + const power = Long.fromNumber(Math.pow(radix, size)); + result = result.mul(power).add(Long.fromNumber(value)); + } else { + result = result.mul(radixToPower); + result = result.add(Long.fromNumber(value)); + } + } + result.unsigned = unsigned; + return result; + } + + /** + * Creates a Long from its byte representation. + * @param bytes - Byte representation + * @param unsigned - Whether unsigned or not, defaults to signed + * @param le - Whether little or big endian, defaults to big endian + * @returns The corresponding Long value + */ + static fromBytes(bytes: number[], unsigned?: boolean, le?: boolean): Long { + return le ? Long.fromBytesLE(bytes, unsigned) : Long.fromBytesBE(bytes, unsigned); + } + + /** + * Creates a Long from its little endian byte representation. + * @param bytes - Little endian byte representation + * @param unsigned - Whether unsigned or not, defaults to signed + * @returns The corresponding Long value + */ + static fromBytesLE(bytes: number[], unsigned?: boolean): Long { + 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 bytes - Big endian byte representation + * @param unsigned - Whether unsigned or not, defaults to signed + * @returns The corresponding Long value + */ + static fromBytesBE(bytes: number[], unsigned?: boolean): Long { + 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 + ); + } + + /** + * Tests if the specified object is a Long. + */ + static isLong(value: unknown): value is Long { + return ( + value != null && + typeof value === 'object' && + '__isLong__' in value && + value.__isLong__ === true + ); + } + + /** + * Converts the specified value to a Long. + * @param unsigned - Whether unsigned or not, defaults to signed + */ + static fromValue( + val: number | string | { low: number; high: number; unsigned?: boolean }, + unsigned?: boolean + ): Long { + if (typeof val === 'number') return Long.fromNumber(val, unsigned); + if (typeof val === 'string') return Long.fromString(val, unsigned); + // Throws for non-objects, converts non-instanceof Long: + return Long.fromBits( + val.low, + val.high, + typeof unsigned === 'boolean' ? unsigned : val.unsigned + ); + } + + /** Returns the sum of this and the specified Long. */ + add(addend: string | number | Long | Timestamp): Long { + if (!Long.isLong(addend)) addend = Long.fromValue(addend); + + // Divide each number into 4 chunks of 16 bits, and then sum the chunks. + + const a48 = this.high >>> 16; + const a32 = this.high & 0xffff; + const a16 = this.low >>> 16; + const a00 = this.low & 0xffff; + + const b48 = addend.high >>> 16; + const b32 = addend.high & 0xffff; + const b16 = addend.low >>> 16; + const b00 = addend.low & 0xffff; + + let 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 Long.fromBits((c16 << 16) | c00, (c48 << 16) | c32, this.unsigned); + } + + /** + * Returns the sum of this and the specified Long. + * @returns Sum + */ + and(other: string | number | Long | Timestamp): Long { + if (!Long.isLong(other)) other = Long.fromValue(other); + return Long.fromBits(this.low & other.low, this.high & other.high, this.unsigned); + } + + /** + * 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 + */ + compare(other: string | number | Long | Timestamp): 0 | 1 | -1 { + if (!Long.isLong(other)) other = Long.fromValue(other); + if (this.eq(other)) return 0; + const 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; + } + + /** This is an alias of {@link Long.compare} */ + comp(other: string | number | Long | Timestamp): 0 | 1 | -1 { + return this.compare(other); + } + + /** + * Returns this Long divided by the specified. The result is signed if this Long is signed or unsigned if this Long is unsigned. + * @returns Quotient + */ + divide(divisor: string | number | Long | Timestamp): Long { + if (!Long.isLong(divisor)) divisor = Long.fromValue(divisor); + if (divisor.isZero()) throw new BSONError('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; + } + const low = (this.unsigned ? wasm.div_u : wasm.div_s)( + this.low, + this.high, + divisor.low, + divisor.high + ); + return Long.fromBits(low, wasm.get_high(), this.unsigned); + } + + if (this.isZero()) return this.unsigned ? Long.UZERO : Long.ZERO; + let 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(Long.MIN_VALUE)) { + if (divisor.eq(Long.ONE) || divisor.eq(Long.NEG_ONE)) return Long.MIN_VALUE; + // recall that -MIN_VALUE == MIN_VALUE + else if (divisor.eq(Long.MIN_VALUE)) return Long.ONE; + else { + // At this point, we have |other| >= 2, so |this/other| < |MIN_VALUE|. + const halfThis = this.shr(1); + approx = halfThis.div(divisor).shl(1); + if (approx.eq(Long.ZERO)) { + return divisor.isNegative() ? Long.ONE : Long.NEG_ONE; + } else { + rem = this.sub(divisor.mul(approx)); + res = approx.add(rem.div(divisor)); + return res; + } + } + } else if (divisor.eq(Long.MIN_VALUE)) return this.unsigned ? Long.UZERO : Long.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 = Long.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 Long.UZERO; + if (divisor.gt(this.shru(1))) + // 15 >>> 1 = 7 ; with divisor = 8 ; true + return Long.UONE; + res = Long.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. + // eslint-disable-next-line @typescript-eslint/no-this-alias + 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. + const log2 = Math.ceil(Math.log(approx) / Math.LN2); + const delta = log2 <= 48 ? 1 : Math.pow(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. + let approxRes = Long.fromNumber(approx); + let approxRem = approxRes.mul(divisor); + while (approxRem.isNegative() || approxRem.gt(rem)) { + approx -= delta; + approxRes = Long.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 = Long.ONE; + + res = res.add(approxRes); + rem = rem.sub(approxRem); + } + return res; + } + + /**This is an alias of {@link Long.divide} */ + div(divisor: string | number | Long | Timestamp): Long { + return this.divide(divisor); + } + + /** + * Tests if this Long's value equals the specified's. + * @param other - Other value + */ + equals(other: string | number | Long | Timestamp): boolean { + if (!Long.isLong(other)) other = Long.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; + } + + /** This is an alias of {@link Long.equals} */ + eq(other: string | number | Long | Timestamp): boolean { + return this.equals(other); + } + + /** Gets the high 32 bits as a signed integer. */ + getHighBits(): number { + return this.high; + } + + /** Gets the high 32 bits as an unsigned integer. */ + getHighBitsUnsigned(): number { + return this.high >>> 0; + } + + /** Gets the low 32 bits as a signed integer. */ + getLowBits(): number { + return this.low; + } + + /** Gets the low 32 bits as an unsigned integer. */ + getLowBitsUnsigned(): number { + return this.low >>> 0; + } + + /** Gets the number of bits needed to represent the absolute value of this Long. */ + getNumBitsAbs(): number { + if (this.isNegative()) { + // Unsigned Longs are never negative + return this.eq(Long.MIN_VALUE) ? 64 : this.neg().getNumBitsAbs(); + } + const val = this.high !== 0 ? this.high : this.low; + let bit: number; + for (bit = 31; bit > 0; bit--) if ((val & (1 << bit)) !== 0) break; + return this.high !== 0 ? bit + 33 : bit + 1; + } + + /** Tests if this Long's value is greater than the specified's. */ + greaterThan(other: string | number | Long | Timestamp): boolean { + return this.comp(other) > 0; + } + + /** This is an alias of {@link Long.greaterThan} */ + gt(other: string | number | Long | Timestamp): boolean { + return this.greaterThan(other); + } + + /** Tests if this Long's value is greater than or equal the specified's. */ + greaterThanOrEqual(other: string | number | Long | Timestamp): boolean { + return this.comp(other) >= 0; + } + + /** This is an alias of {@link Long.greaterThanOrEqual} */ + gte(other: string | number | Long | Timestamp): boolean { + return this.greaterThanOrEqual(other); + } + /** This is an alias of {@link Long.greaterThanOrEqual} */ + ge(other: string | number | Long | Timestamp): boolean { + return this.greaterThanOrEqual(other); + } + + /** Tests if this Long's value is even. */ + isEven(): boolean { + return (this.low & 1) === 0; + } + + /** Tests if this Long's value is negative. */ + isNegative(): boolean { + return !this.unsigned && this.high < 0; + } + + /** Tests if this Long's value is odd. */ + isOdd(): boolean { + return (this.low & 1) === 1; + } + + /** Tests if this Long's value is positive. */ + isPositive(): boolean { + return this.unsigned || this.high >= 0; + } + + /** Tests if this Long's value equals zero. */ + isZero(): boolean { + return this.high === 0 && this.low === 0; + } + + /** Tests if this Long's value is less than the specified's. */ + lessThan(other: string | number | Long | Timestamp): boolean { + return this.comp(other) < 0; + } + + /** This is an alias of {@link Long#lessThan}. */ + lt(other: string | number | Long | Timestamp): boolean { + return this.lessThan(other); + } + + /** Tests if this Long's value is less than or equal the specified's. */ + lessThanOrEqual(other: string | number | Long | Timestamp): boolean { + return this.comp(other) <= 0; + } + + /** This is an alias of {@link Long.lessThanOrEqual} */ + lte(other: string | number | Long | Timestamp): boolean { + return this.lessThanOrEqual(other); + } + + /** Returns this Long modulo the specified. */ + modulo(divisor: string | number | Long | Timestamp): Long { + if (!Long.isLong(divisor)) divisor = Long.fromValue(divisor); + + // use wasm support if present + if (wasm) { + const low = (this.unsigned ? wasm.rem_u : wasm.rem_s)( + this.low, + this.high, + divisor.low, + divisor.high + ); + return Long.fromBits(low, wasm.get_high(), this.unsigned); + } + + return this.sub(this.div(divisor).mul(divisor)); + } + + /** This is an alias of {@link Long.modulo} */ + mod(divisor: string | number | Long | Timestamp): Long { + return this.modulo(divisor); + } + /** This is an alias of {@link Long.modulo} */ + rem(divisor: string | number | Long | Timestamp): Long { + return this.modulo(divisor); + } + + /** + * Returns the product of this and the specified Long. + * @param multiplier - Multiplier + * @returns Product + */ + multiply(multiplier: string | number | Long | Timestamp): Long { + if (this.isZero()) return Long.ZERO; + if (!Long.isLong(multiplier)) multiplier = Long.fromValue(multiplier); + + // use wasm support if present + if (wasm) { + const low = wasm.mul(this.low, this.high, multiplier.low, multiplier.high); + return Long.fromBits(low, wasm.get_high(), this.unsigned); + } + + if (multiplier.isZero()) return Long.ZERO; + if (this.eq(Long.MIN_VALUE)) return multiplier.isOdd() ? Long.MIN_VALUE : Long.ZERO; + if (multiplier.eq(Long.MIN_VALUE)) return this.isOdd() ? Long.MIN_VALUE : Long.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(Long.TWO_PWR_24) && multiplier.lt(Long.TWO_PWR_24)) + return Long.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. + + const a48 = this.high >>> 16; + const a32 = this.high & 0xffff; + const a16 = this.low >>> 16; + const a00 = this.low & 0xffff; + + const b48 = multiplier.high >>> 16; + const b32 = multiplier.high & 0xffff; + const b16 = multiplier.low >>> 16; + const b00 = multiplier.low & 0xffff; + + let 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 Long.fromBits((c16 << 16) | c00, (c48 << 16) | c32, this.unsigned); + } + + /** This is an alias of {@link Long.multiply} */ + mul(multiplier: string | number | Long | Timestamp): Long { + return this.multiply(multiplier); + } + + /** Returns the Negation of this Long's value. */ + negate(): Long { + if (!this.unsigned && this.eq(Long.MIN_VALUE)) return Long.MIN_VALUE; + return this.not().add(Long.ONE); + } + + /** This is an alias of {@link Long.negate} */ + neg(): Long { + return this.negate(); + } + + /** Returns the bitwise NOT of this Long. */ + not(): Long { + return Long.fromBits(~this.low, ~this.high, this.unsigned); + } + + /** Tests if this Long's value differs from the specified's. */ + notEquals(other: string | number | Long | Timestamp): boolean { + return !this.equals(other); + } + + /** This is an alias of {@link Long.notEquals} */ + neq(other: string | number | Long | Timestamp): boolean { + return this.notEquals(other); + } + /** This is an alias of {@link Long.notEquals} */ + ne(other: string | number | Long | Timestamp): boolean { + return this.notEquals(other); + } + + /** + * Returns the bitwise OR of this Long and the specified. + */ + or(other: number | string | Long): Long { + if (!Long.isLong(other)) other = Long.fromValue(other); + return Long.fromBits(this.low | other.low, this.high | other.high, this.unsigned); + } + + /** + * Returns this Long with bits shifted to the left by the given amount. + * @param numBits - Number of bits + * @returns Shifted Long + */ + shiftLeft(numBits: number | Long): Long { + if (Long.isLong(numBits)) numBits = numBits.toInt(); + if ((numBits &= 63) === 0) return this; + else if (numBits < 32) + return Long.fromBits( + this.low << numBits, + (this.high << numBits) | (this.low >>> (32 - numBits)), + this.unsigned + ); + else return Long.fromBits(0, this.low << (numBits - 32), this.unsigned); + } + + /** This is an alias of {@link Long.shiftLeft} */ + shl(numBits: number | Long): Long { + return this.shiftLeft(numBits); + } + + /** + * Returns this Long with bits arithmetically shifted to the right by the given amount. + * @param numBits - Number of bits + * @returns Shifted Long + */ + shiftRight(numBits: number | Long): Long { + if (Long.isLong(numBits)) numBits = numBits.toInt(); + if ((numBits &= 63) === 0) return this; + else if (numBits < 32) + return Long.fromBits( + (this.low >>> numBits) | (this.high << (32 - numBits)), + this.high >> numBits, + this.unsigned + ); + else return Long.fromBits(this.high >> (numBits - 32), this.high >= 0 ? 0 : -1, this.unsigned); + } + + /** This is an alias of {@link Long.shiftRight} */ + shr(numBits: number | Long): Long { + return this.shiftRight(numBits); + } + + /** + * Returns this Long with bits logically shifted to the right by the given amount. + * @param numBits - Number of bits + * @returns Shifted Long + */ + shiftRightUnsigned(numBits: Long | number): Long { + if (Long.isLong(numBits)) numBits = numBits.toInt(); + numBits &= 63; + if (numBits === 0) return this; + else { + const high = this.high; + if (numBits < 32) { + const low = this.low; + return Long.fromBits( + (low >>> numBits) | (high << (32 - numBits)), + high >>> numBits, + this.unsigned + ); + } else if (numBits === 32) return Long.fromBits(high, 0, this.unsigned); + else return Long.fromBits(high >>> (numBits - 32), 0, this.unsigned); + } + } + + /** This is an alias of {@link Long.shiftRightUnsigned} */ + shr_u(numBits: number | Long): Long { + return this.shiftRightUnsigned(numBits); + } + /** This is an alias of {@link Long.shiftRightUnsigned} */ + shru(numBits: number | Long): Long { + return this.shiftRightUnsigned(numBits); + } + + /** + * Returns the difference of this and the specified Long. + * @param subtrahend - Subtrahend + * @returns Difference + */ + subtract(subtrahend: string | number | Long | Timestamp): Long { + if (!Long.isLong(subtrahend)) subtrahend = Long.fromValue(subtrahend); + return this.add(subtrahend.neg()); + } + + /** This is an alias of {@link Long.subtract} */ + sub(subtrahend: string | number | Long | Timestamp): Long { + return this.subtract(subtrahend); + } + + /** Converts the Long to a 32 bit integer, assuming it is a 32 bit integer. */ + toInt(): number { + 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). */ + toNumber(): number { + 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 BigInt (arbitrary precision). */ + toBigInt(): bigint { + // eslint-disable-next-line no-restricted-globals -- This is allowed here as it is explicitly requesting a bigint + return BigInt(this.toString()); + } + + /** + * Converts this Long to its byte representation. + * @param le - Whether little or big endian, defaults to big endian + * @returns Byte representation + */ + toBytes(le?: boolean): number[] { + return le ? this.toBytesLE() : this.toBytesBE(); + } + + /** + * Converts this Long to its little endian byte representation. + * @returns Little endian byte representation + */ + toBytesLE(): number[] { + const 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. + * @returns Big endian byte representation + */ + toBytesBE(): number[] { + const 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 + ]; + } + + /** + * Converts this Long to signed. + */ + toSigned(): Long { + if (!this.unsigned) return this; + return Long.fromBits(this.low, this.high, false); + } + + /** + * Converts the Long to a string written in the specified radix. + * @param radix - Radix (2-36), defaults to 10 + * @throws RangeError If `radix` is out of range + */ + toString(radix?: number): string { + radix = radix || 10; + if (radix < 2 || 36 < radix) throw new BSONError('radix'); + if (this.isZero()) return '0'; + if (this.isNegative()) { + // Unsigned Longs are never negative + if (this.eq(Long.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. + const radixLong = Long.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. + const radixToPower = Long.fromNumber(Math.pow(radix, 6), this.unsigned); + // eslint-disable-next-line @typescript-eslint/no-this-alias + let rem: Long = this; + let result = ''; + // eslint-disable-next-line no-constant-condition + while (true) { + const remDiv = rem.div(radixToPower); + const intval = rem.sub(remDiv.mul(radixToPower)).toInt() >>> 0; + let digits = intval.toString(radix); + rem = remDiv; + if (rem.isZero()) { + return digits + result; + } else { + while (digits.length < 6) digits = '0' + digits; + result = '' + digits + result; + } + } + } + + /** Converts this Long to unsigned. */ + toUnsigned(): Long { + if (this.unsigned) return this; + return Long.fromBits(this.low, this.high, true); + } + + /** Returns the bitwise XOR of this Long and the given one. */ + xor(other: Long | number | string): Long { + if (!Long.isLong(other)) other = Long.fromValue(other); + return Long.fromBits(this.low ^ other.low, this.high ^ other.high, this.unsigned); + } + + /** This is an alias of {@link Long.isZero} */ + eqz(): boolean { + return this.isZero(); + } + + /** This is an alias of {@link Long.lessThanOrEqual} */ + le(other: string | number | Long | Timestamp): boolean { + return this.lessThanOrEqual(other); + } + + /* + **************************************************************** + * BSON SPECIFIC ADDITIONS * + **************************************************************** + */ + toExtendedJSON(options?: EJSONOptions): number | LongExtended { + if (options && options.relaxed) return this.toNumber(); + return { $numberLong: this.toString() }; + } + static fromExtendedJSON( + doc: { $numberLong: string }, + options?: EJSONOptions + ): number | Long | bigint { + const { useBigInt64 = false, relaxed = true } = { ...options }; + + if (doc.$numberLong.length > MAX_INT64_STRING_LENGTH) { + throw new BSONError('$numberLong string is too long'); + } + + if (!DECIMAL_REG_EX.test(doc.$numberLong)) { + throw new BSONError(`$numberLong string "${doc.$numberLong}" is in an invalid format`); + } + + if (useBigInt64) { + /* eslint-disable no-restricted-globals -- Can use BigInt here as useBigInt64=true */ + const bigIntResult = BigInt(doc.$numberLong); + return BigInt.asIntN(64, bigIntResult); + /* eslint-enable */ + } + + const longResult = Long.fromString(doc.$numberLong); + if (relaxed) { + return longResult.toNumber(); + } + return longResult; + } + + /** @internal */ + [Symbol.for('nodejs.util.inspect.custom')](): string { + return this.inspect(); + } + + inspect(): string { + return `new Long("${this.toString()}"${this.unsigned ? ', true' : ''})`; + } +} diff --git a/Url-Shortner/node_modules/bson/src/max_key.ts b/Url-Shortner/node_modules/bson/src/max_key.ts new file mode 100644 index 0000000..2894f58 --- /dev/null +++ b/Url-Shortner/node_modules/bson/src/max_key.ts @@ -0,0 +1,36 @@ +import { BSONValue } from './bson_value'; + +/** @public */ +export interface MaxKeyExtended { + $maxKey: 1; +} + +/** + * A class representation of the BSON MaxKey type. + * @public + * @category BSONType + */ +export class MaxKey extends BSONValue { + get _bsontype(): 'MaxKey' { + return 'MaxKey'; + } + + /** @internal */ + toExtendedJSON(): MaxKeyExtended { + return { $maxKey: 1 }; + } + + /** @internal */ + static fromExtendedJSON(): MaxKey { + return new MaxKey(); + } + + /** @internal */ + [Symbol.for('nodejs.util.inspect.custom')](): string { + return this.inspect(); + } + + inspect(): string { + return 'new MaxKey()'; + } +} diff --git a/Url-Shortner/node_modules/bson/src/min_key.ts b/Url-Shortner/node_modules/bson/src/min_key.ts new file mode 100644 index 0000000..f72cf26 --- /dev/null +++ b/Url-Shortner/node_modules/bson/src/min_key.ts @@ -0,0 +1,36 @@ +import { BSONValue } from './bson_value'; + +/** @public */ +export interface MinKeyExtended { + $minKey: 1; +} + +/** + * A class representation of the BSON MinKey type. + * @public + * @category BSONType + */ +export class MinKey extends BSONValue { + get _bsontype(): 'MinKey' { + return 'MinKey'; + } + + /** @internal */ + toExtendedJSON(): MinKeyExtended { + return { $minKey: 1 }; + } + + /** @internal */ + static fromExtendedJSON(): MinKey { + return new MinKey(); + } + + /** @internal */ + [Symbol.for('nodejs.util.inspect.custom')](): string { + return this.inspect(); + } + + inspect(): string { + return 'new MinKey()'; + } +} diff --git a/Url-Shortner/node_modules/bson/src/objectid.ts b/Url-Shortner/node_modules/bson/src/objectid.ts new file mode 100644 index 0000000..7e71989 --- /dev/null +++ b/Url-Shortner/node_modules/bson/src/objectid.ts @@ -0,0 +1,323 @@ +import { BSONValue } from './bson_value'; +import { BSONError } from './error'; +import { isUint8Array } from './parser/utils'; +import { BSONDataView, ByteUtils } from './utils/byte_utils'; + +// Regular expression that checks for hex value +const checkForHexRegExp = new RegExp('^[0-9a-fA-F]{24}$'); + +// Unique sequence for the current process (initialized on first use) +let PROCESS_UNIQUE: Uint8Array | null = null; + +/** @public */ +export interface ObjectIdLike { + id: string | Uint8Array; + __id?: string; + toHexString(): string; +} + +/** @public */ +export interface ObjectIdExtended { + $oid: string; +} + +const kId = Symbol('id'); + +/** + * A class representation of the BSON ObjectId type. + * @public + * @category BSONType + */ +export class ObjectId extends BSONValue { + get _bsontype(): 'ObjectId' { + return 'ObjectId'; + } + + /** @internal */ + private static index = Math.floor(Math.random() * 0xffffff); + + static cacheHexString: boolean; + + /** ObjectId Bytes @internal */ + private [kId]!: Uint8Array; + /** ObjectId hexString cache @internal */ + private __id?: string; + + /** + * Create an ObjectId type + * + * @param inputId - Can be a 24 character hex string, 12 byte binary Buffer, or a number. + */ + constructor(inputId?: string | number | ObjectId | ObjectIdLike | Uint8Array) { + super(); + // workingId is set based on type of input and whether valid id exists for the input + let workingId; + if (typeof inputId === 'object' && inputId && 'id' in inputId) { + if (typeof inputId.id !== 'string' && !ArrayBuffer.isView(inputId.id)) { + throw new BSONError('Argument passed in must have an id that is of type string or Buffer'); + } + if ('toHexString' in inputId && typeof inputId.toHexString === 'function') { + workingId = ByteUtils.fromHex(inputId.toHexString()); + } else { + workingId = inputId.id; + } + } else { + workingId = inputId; + } + + // the following cases use workingId to construct an ObjectId + if (workingId == null || typeof workingId === 'number') { + // The most common use case (blank id, new objectId instance) + // Generate a new id + this[kId] = ObjectId.generate(typeof workingId === 'number' ? workingId : undefined); + } else if (ArrayBuffer.isView(workingId) && workingId.byteLength === 12) { + // If intstanceof matches we can escape calling ensure buffer in Node.js environments + this[kId] = ByteUtils.toLocalBufferType(workingId); + } else if (typeof workingId === 'string') { + if (workingId.length === 12) { + // TODO(NODE-4361): Remove string of length 12 support + const bytes = ByteUtils.fromUTF8(workingId); + if (bytes.byteLength === 12) { + this[kId] = bytes; + } else { + throw new BSONError('Argument passed in must be a string of 12 bytes'); + } + } else if (workingId.length === 24 && checkForHexRegExp.test(workingId)) { + this[kId] = ByteUtils.fromHex(workingId); + } else { + throw new BSONError( + 'Argument passed in must be a string of 12 bytes or a string of 24 hex characters or an integer' + ); + } + } else { + throw new BSONError('Argument passed in does not match the accepted types'); + } + // If we are caching the hex string + if (ObjectId.cacheHexString) { + this.__id = ByteUtils.toHex(this.id); + } + } + + /** + * The ObjectId bytes + * @readonly + */ + get id(): Uint8Array { + return this[kId]; + } + + set id(value: Uint8Array) { + this[kId] = value; + if (ObjectId.cacheHexString) { + this.__id = ByteUtils.toHex(value); + } + } + + /** Returns the ObjectId id as a 24 character hex string representation */ + toHexString(): string { + if (ObjectId.cacheHexString && this.__id) { + return this.__id; + } + + const hexString = ByteUtils.toHex(this.id); + + if (ObjectId.cacheHexString && !this.__id) { + this.__id = hexString; + } + + return hexString; + } + + /** + * Update the ObjectId index + * @internal + */ + private static getInc(): number { + return (ObjectId.index = (ObjectId.index + 1) % 0xffffff); + } + + /** + * Generate a 12 byte id buffer used in ObjectId's + * + * @param time - pass in a second based timestamp. + */ + static generate(time?: number): Uint8Array { + if ('number' !== typeof time) { + time = Math.floor(Date.now() / 1000); + } + + const inc = ObjectId.getInc(); + const buffer = ByteUtils.allocate(12); + + // 4-byte timestamp + BSONDataView.fromUint8Array(buffer).setUint32(0, time, false); + + // set PROCESS_UNIQUE if yet not initialized + if (PROCESS_UNIQUE === null) { + PROCESS_UNIQUE = ByteUtils.randomBytes(5); + } + + // 5-byte process unique + buffer[4] = PROCESS_UNIQUE[0]; + buffer[5] = PROCESS_UNIQUE[1]; + buffer[6] = PROCESS_UNIQUE[2]; + buffer[7] = PROCESS_UNIQUE[3]; + buffer[8] = PROCESS_UNIQUE[4]; + + // 3-byte counter + buffer[11] = inc & 0xff; + buffer[10] = (inc >> 8) & 0xff; + buffer[9] = (inc >> 16) & 0xff; + + return buffer; + } + + /** + * Converts the id into a 24 character hex string for printing, unless encoding is provided. + * @param encoding - hex or base64 + */ + toString(encoding?: 'hex' | 'base64'): string { + // Is the id a buffer then use the buffer toString method to return the format + if (encoding === 'base64') return ByteUtils.toBase64(this.id); + if (encoding === 'hex') return this.toHexString(); + return this.toHexString(); + } + + /** Converts to its JSON the 24 character hex string representation. */ + toJSON(): string { + return this.toHexString(); + } + + /** + * Compares the equality of this ObjectId with `otherID`. + * + * @param otherId - ObjectId instance to compare against. + */ + equals(otherId: string | ObjectId | ObjectIdLike): boolean { + if (otherId === undefined || otherId === null) { + return false; + } + + if (otherId instanceof ObjectId) { + return this[kId][11] === otherId[kId][11] && ByteUtils.equals(this[kId], otherId[kId]); + } + + if ( + typeof otherId === 'string' && + ObjectId.isValid(otherId) && + otherId.length === 12 && + isUint8Array(this.id) + ) { + return ByteUtils.equals(this.id, ByteUtils.fromISO88591(otherId)); + } + + if (typeof otherId === 'string' && ObjectId.isValid(otherId) && otherId.length === 24) { + return otherId.toLowerCase() === this.toHexString(); + } + + if (typeof otherId === 'string' && ObjectId.isValid(otherId) && otherId.length === 12) { + return ByteUtils.equals(ByteUtils.fromUTF8(otherId), this.id); + } + + if ( + typeof otherId === 'object' && + 'toHexString' in otherId && + typeof otherId.toHexString === 'function' + ) { + const otherIdString = otherId.toHexString(); + const thisIdString = this.toHexString().toLowerCase(); + return typeof otherIdString === 'string' && otherIdString.toLowerCase() === thisIdString; + } + + return false; + } + + /** Returns the generation date (accurate up to the second) that this ID was generated. */ + getTimestamp(): Date { + const timestamp = new Date(); + const time = BSONDataView.fromUint8Array(this.id).getUint32(0, false); + timestamp.setTime(Math.floor(time) * 1000); + return timestamp; + } + + /** @internal */ + static createPk(): ObjectId { + return new ObjectId(); + } + + /** + * Creates an ObjectId from a second based number, with the rest of the ObjectId zeroed out. Used for comparisons or sorting the ObjectId. + * + * @param time - an integer number representing a number of seconds. + */ + static createFromTime(time: number): ObjectId { + const buffer = ByteUtils.fromNumberArray([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + // Encode time into first 4 bytes + BSONDataView.fromUint8Array(buffer).setUint32(0, time, false); + // Return the new objectId + return new ObjectId(buffer); + } + + /** + * Creates an ObjectId from a hex string representation of an ObjectId. + * + * @param hexString - create a ObjectId from a passed in 24 character hexstring. + */ + static createFromHexString(hexString: string): ObjectId { + if (hexString?.length !== 24) { + throw new BSONError('hex string must be 24 characters'); + } + + return new ObjectId(ByteUtils.fromHex(hexString)); + } + + /** Creates an ObjectId instance from a base64 string */ + static createFromBase64(base64: string): ObjectId { + if (base64?.length !== 16) { + throw new BSONError('base64 string must be 16 characters'); + } + + return new ObjectId(ByteUtils.fromBase64(base64)); + } + + /** + * Checks if a value is a valid bson ObjectId + * + * @param id - ObjectId instance to validate. + */ + static isValid(id: string | number | ObjectId | ObjectIdLike | Uint8Array): boolean { + if (id == null) return false; + + try { + new ObjectId(id); + return true; + } catch { + return false; + } + } + + /** @internal */ + toExtendedJSON(): ObjectIdExtended { + if (this.toHexString) return { $oid: this.toHexString() }; + return { $oid: this.toString('hex') }; + } + + /** @internal */ + static fromExtendedJSON(doc: ObjectIdExtended): ObjectId { + return new ObjectId(doc.$oid); + } + + /** + * Converts to a string representation of this Id. + * + * @returns return the 24 character hex string representation. + * @internal + */ + [Symbol.for('nodejs.util.inspect.custom')](): string { + return this.inspect(); + } + + inspect(): string { + return `new ObjectId("${this.toHexString()}")`; + } +} diff --git a/Url-Shortner/node_modules/bson/src/parser/calculate_size.ts b/Url-Shortner/node_modules/bson/src/parser/calculate_size.ts new file mode 100644 index 0000000..fd1e4a0 --- /dev/null +++ b/Url-Shortner/node_modules/bson/src/parser/calculate_size.ts @@ -0,0 +1,211 @@ +import { Binary } from '../binary'; +import type { Document } from '../bson'; +import { BSONVersionError } from '../error'; +import * as constants from '../constants'; +import { ByteUtils } from '../utils/byte_utils'; +import { isAnyArrayBuffer, isDate, isRegExp } from './utils'; + +export function internalCalculateObjectSize( + object: Document, + serializeFunctions?: boolean, + ignoreUndefined?: boolean +): number { + let totalLength = 4 + 1; + + if (Array.isArray(object)) { + for (let i = 0; i < object.length; i++) { + totalLength += calculateElement( + i.toString(), + object[i], + serializeFunctions, + true, + ignoreUndefined + ); + } + } else { + // If we have toBSON defined, override the current object + + if (typeof object?.toBSON === 'function') { + object = object.toBSON(); + } + + // Calculate size + for (const key of Object.keys(object)) { + totalLength += calculateElement(key, object[key], serializeFunctions, false, ignoreUndefined); + } + } + + return totalLength; +} + +/** @internal */ +function calculateElement( + name: string, + // eslint-disable-next-line @typescript-eslint/no-explicit-any + value: any, + serializeFunctions = false, + isArray = false, + ignoreUndefined = false +) { + // If we have toBSON defined, override the current object + if (typeof value?.toBSON === 'function') { + value = value.toBSON(); + } + + switch (typeof value) { + case 'string': + return 1 + ByteUtils.utf8ByteLength(name) + 1 + 4 + ByteUtils.utf8ByteLength(value) + 1; + case 'number': + if ( + Math.floor(value) === value && + value >= constants.JS_INT_MIN && + value <= constants.JS_INT_MAX + ) { + if (value >= constants.BSON_INT32_MIN && value <= constants.BSON_INT32_MAX) { + // 32 bit + return (name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + (4 + 1); + } else { + return (name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + (8 + 1); + } + } else { + // 64 bit + return (name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + (8 + 1); + } + case 'undefined': + if (isArray || !ignoreUndefined) + return (name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + 1; + return 0; + case 'boolean': + return (name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + (1 + 1); + case 'object': + if ( + value != null && + typeof value._bsontype === 'string' && + value[Symbol.for('@@mdb.bson.version')] !== constants.BSON_MAJOR_VERSION + ) { + throw new BSONVersionError(); + } else if (value == null || value._bsontype === 'MinKey' || value._bsontype === 'MaxKey') { + return (name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + 1; + } else if (value._bsontype === 'ObjectId') { + return (name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + (12 + 1); + } else if (value instanceof Date || isDate(value)) { + return (name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + (8 + 1); + } else if ( + ArrayBuffer.isView(value) || + value instanceof ArrayBuffer || + isAnyArrayBuffer(value) + ) { + return ( + (name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + (1 + 4 + 1) + value.byteLength + ); + } else if ( + value._bsontype === 'Long' || + value._bsontype === 'Double' || + value._bsontype === 'Timestamp' + ) { + return (name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + (8 + 1); + } else if (value._bsontype === 'Decimal128') { + return (name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + (16 + 1); + } else if (value._bsontype === 'Code') { + // Calculate size depending on the availability of a scope + if (value.scope != null && Object.keys(value.scope).length > 0) { + return ( + (name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + + 1 + + 4 + + 4 + + ByteUtils.utf8ByteLength(value.code.toString()) + + 1 + + internalCalculateObjectSize(value.scope, serializeFunctions, ignoreUndefined) + ); + } else { + return ( + (name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + + 1 + + 4 + + ByteUtils.utf8ByteLength(value.code.toString()) + + 1 + ); + } + } else if (value._bsontype === 'Binary') { + const binary: Binary = value; + // Check what kind of subtype we have + if (binary.sub_type === Binary.SUBTYPE_BYTE_ARRAY) { + return ( + (name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + + (binary.position + 1 + 4 + 1 + 4) + ); + } else { + return ( + (name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + (binary.position + 1 + 4 + 1) + ); + } + } else if (value._bsontype === 'Symbol') { + return ( + (name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + + ByteUtils.utf8ByteLength(value.value) + + 4 + + 1 + + 1 + ); + } else if (value._bsontype === 'DBRef') { + // Set up correct object for serialization + const ordered_values = Object.assign( + { + $ref: value.collection, + $id: value.oid + }, + value.fields + ); + + // Add db reference if it exists + if (value.db != null) { + ordered_values['$db'] = value.db; + } + + return ( + (name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + + 1 + + internalCalculateObjectSize(ordered_values, serializeFunctions, ignoreUndefined) + ); + } else if (value instanceof RegExp || isRegExp(value)) { + return ( + (name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + + 1 + + ByteUtils.utf8ByteLength(value.source) + + 1 + + (value.global ? 1 : 0) + + (value.ignoreCase ? 1 : 0) + + (value.multiline ? 1 : 0) + + 1 + ); + } else if (value._bsontype === 'BSONRegExp') { + return ( + (name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + + 1 + + ByteUtils.utf8ByteLength(value.pattern) + + 1 + + ByteUtils.utf8ByteLength(value.options) + + 1 + ); + } else { + return ( + (name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + + internalCalculateObjectSize(value, serializeFunctions, ignoreUndefined) + + 1 + ); + } + case 'function': + if (serializeFunctions) { + return ( + (name != null ? ByteUtils.utf8ByteLength(name) + 1 : 0) + + 1 + + 4 + + ByteUtils.utf8ByteLength(value.toString()) + + 1 + ); + } + } + + return 0; +} diff --git a/Url-Shortner/node_modules/bson/src/parser/deserializer.ts b/Url-Shortner/node_modules/bson/src/parser/deserializer.ts new file mode 100644 index 0000000..abb6104 --- /dev/null +++ b/Url-Shortner/node_modules/bson/src/parser/deserializer.ts @@ -0,0 +1,751 @@ +import { Binary, UUID } from '../binary'; +import type { Document } from '../bson'; +import { Code } from '../code'; +import * as constants from '../constants'; +import { DBRef, type DBRefLike, isDBRefLike } from '../db_ref'; +import { Decimal128 } from '../decimal128'; +import { Double } from '../double'; +import { BSONError } from '../error'; +import { Int32 } from '../int_32'; +import { Long } from '../long'; +import { MaxKey } from '../max_key'; +import { MinKey } from '../min_key'; +import { ObjectId } from '../objectid'; +import { BSONRegExp } from '../regexp'; +import { BSONSymbol } from '../symbol'; +import { Timestamp } from '../timestamp'; +import { BSONDataView, ByteUtils } from '../utils/byte_utils'; +import { validateUtf8 } from '../validate_utf8'; + +/** @public */ +export interface DeserializeOptions { + /** + * when deserializing a Long return as a BigInt. + * @defaultValue `false` + */ + useBigInt64?: boolean; + /** + * when deserializing a Long will fit it into a Number if it's smaller than 53 bits. + * @defaultValue `true` + */ + promoteLongs?: boolean; + /** + * when deserializing a Binary will return it as a node.js Buffer instance. + * @defaultValue `false` + */ + promoteBuffers?: boolean; + /** + * when deserializing will promote BSON values to their Node.js closest equivalent types. + * @defaultValue `true` + */ + promoteValues?: boolean; + /** + * allow to specify if there what fields we wish to return as unserialized raw buffer. + * @defaultValue `null` + */ + fieldsAsRaw?: Document; + /** + * return BSON regular expressions as BSONRegExp instances. + * @defaultValue `false` + */ + bsonRegExp?: boolean; + /** + * allows the buffer to be larger than the parsed BSON object. + * @defaultValue `false` + */ + allowObjectSmallerThanBufferSize?: boolean; + /** + * Offset into buffer to begin reading document from + * @defaultValue `0` + */ + index?: number; + + raw?: boolean; + /** Allows for opt-out utf-8 validation for all keys or + * specified keys. Must be all true or all false. + * + * @example + * ```js + * // disables validation on all keys + * validation: { utf8: false } + * + * // enables validation only on specified keys a, b, and c + * validation: { utf8: { a: true, b: true, c: true } } + * + * // disables validation only on specified keys a, b + * validation: { utf8: { a: false, b: false } } + * ``` + */ + validation?: { utf8: boolean | Record | Record }; +} + +// Internal long versions +const JS_INT_MAX_LONG = Long.fromNumber(constants.JS_INT_MAX); +const JS_INT_MIN_LONG = Long.fromNumber(constants.JS_INT_MIN); + +export function internalDeserialize( + buffer: Uint8Array, + options: DeserializeOptions, + isArray?: boolean +): Document { + options = options == null ? {} : options; + const index = options && options.index ? options.index : 0; + // Read the document size + const size = + buffer[index] | + (buffer[index + 1] << 8) | + (buffer[index + 2] << 16) | + (buffer[index + 3] << 24); + + if (size < 5) { + throw new BSONError(`bson size must be >= 5, is ${size}`); + } + + if (options.allowObjectSmallerThanBufferSize && buffer.length < size) { + throw new BSONError(`buffer length ${buffer.length} must be >= bson size ${size}`); + } + + if (!options.allowObjectSmallerThanBufferSize && buffer.length !== size) { + throw new BSONError(`buffer length ${buffer.length} must === bson size ${size}`); + } + + if (size + index > buffer.byteLength) { + throw new BSONError( + `(bson size ${size} + options.index ${index} must be <= buffer length ${buffer.byteLength})` + ); + } + + // Illegal end value + if (buffer[index + size - 1] !== 0) { + throw new BSONError( + "One object, sized correctly, with a spot for an EOO, but the EOO isn't 0x00" + ); + } + + // Start deserialization + return deserializeObject(buffer, index, options, isArray); +} + +const allowedDBRefKeys = /^\$ref$|^\$id$|^\$db$/; + +function deserializeObject( + buffer: Uint8Array, + index: number, + options: DeserializeOptions, + isArray = false +) { + const fieldsAsRaw = options['fieldsAsRaw'] == null ? null : options['fieldsAsRaw']; + + // Return raw bson buffer instead of parsing it + const raw = options['raw'] == null ? false : options['raw']; + + // Return BSONRegExp objects instead of native regular expressions + const bsonRegExp = typeof options['bsonRegExp'] === 'boolean' ? options['bsonRegExp'] : false; + + // Controls the promotion of values vs wrapper classes + const promoteBuffers = options.promoteBuffers ?? false; + const promoteLongs = options.promoteLongs ?? true; + const promoteValues = options.promoteValues ?? true; + const useBigInt64 = options.useBigInt64 ?? false; + + if (useBigInt64 && !promoteValues) { + throw new BSONError('Must either request bigint or Long for int64 deserialization'); + } + + if (useBigInt64 && !promoteLongs) { + throw new BSONError('Must either request bigint or Long for int64 deserialization'); + } + + // Ensures default validation option if none given + const validation = options.validation == null ? { utf8: true } : options.validation; + + // Shows if global utf-8 validation is enabled or disabled + let globalUTFValidation = true; + // Reflects utf-8 validation setting regardless of global or specific key validation + let validationSetting: boolean; + // Set of keys either to enable or disable validation on + const utf8KeysSet = new Set(); + + // Check for boolean uniformity and empty validation option + const utf8ValidatedKeys = validation.utf8; + if (typeof utf8ValidatedKeys === 'boolean') { + validationSetting = utf8ValidatedKeys; + } else { + globalUTFValidation = false; + const utf8ValidationValues = Object.keys(utf8ValidatedKeys).map(function (key) { + return utf8ValidatedKeys[key]; + }); + if (utf8ValidationValues.length === 0) { + throw new BSONError('UTF-8 validation setting cannot be empty'); + } + if (typeof utf8ValidationValues[0] !== 'boolean') { + throw new BSONError('Invalid UTF-8 validation option, must specify boolean values'); + } + validationSetting = utf8ValidationValues[0]; + // Ensures boolean uniformity in utf-8 validation (all true or all false) + if (!utf8ValidationValues.every(item => item === validationSetting)) { + throw new BSONError('Invalid UTF-8 validation option - keys must be all true or all false'); + } + } + + // Add keys to set that will either be validated or not based on validationSetting + if (!globalUTFValidation) { + for (const key of Object.keys(utf8ValidatedKeys)) { + utf8KeysSet.add(key); + } + } + + // Set the start index + const startIndex = index; + + // Validate that we have at least 4 bytes of buffer + if (buffer.length < 5) throw new BSONError('corrupt bson message < 5 bytes long'); + + // Read the document size + const size = + buffer[index++] | (buffer[index++] << 8) | (buffer[index++] << 16) | (buffer[index++] << 24); + + // Ensure buffer is valid size + if (size < 5 || size > buffer.length) throw new BSONError('corrupt bson message'); + + // Create holding object + const object: Document = isArray ? [] : {}; + // Used for arrays to skip having to perform utf8 decoding + let arrayIndex = 0; + const done = false; + + let isPossibleDBRef = isArray ? false : null; + + // While we have more left data left keep parsing + const dataview = new DataView(buffer.buffer, buffer.byteOffset, buffer.byteLength); + while (!done) { + // Read the type + const elementType = buffer[index++]; + + // If we get a zero it's the last byte, exit + if (elementType === 0) break; + + // Get the start search index + let i = index; + // Locate the end of the c string + while (buffer[i] !== 0x00 && i < buffer.length) { + i++; + } + + // If are at the end of the buffer there is a problem with the document + if (i >= buffer.byteLength) throw new BSONError('Bad BSON Document: illegal CString'); + + // Represents the key + const name = isArray ? arrayIndex++ : ByteUtils.toUTF8(buffer, index, i); + + // shouldValidateKey is true if the key should be validated, false otherwise + let shouldValidateKey = true; + if (globalUTFValidation || utf8KeysSet.has(name)) { + shouldValidateKey = validationSetting; + } else { + shouldValidateKey = !validationSetting; + } + + if (isPossibleDBRef !== false && (name as string)[0] === '$') { + isPossibleDBRef = allowedDBRefKeys.test(name as string); + } + let value; + + index = i + 1; + + if (elementType === constants.BSON_DATA_STRING) { + const stringSize = + buffer[index++] | + (buffer[index++] << 8) | + (buffer[index++] << 16) | + (buffer[index++] << 24); + if ( + stringSize <= 0 || + stringSize > buffer.length - index || + buffer[index + stringSize - 1] !== 0 + ) { + throw new BSONError('bad string length in bson'); + } + value = getValidatedString(buffer, index, index + stringSize - 1, shouldValidateKey); + index = index + stringSize; + } else if (elementType === constants.BSON_DATA_OID) { + const oid = ByteUtils.allocate(12); + oid.set(buffer.subarray(index, index + 12)); + value = new ObjectId(oid); + index = index + 12; + } else if (elementType === constants.BSON_DATA_INT && promoteValues === false) { + value = new Int32( + buffer[index++] | (buffer[index++] << 8) | (buffer[index++] << 16) | (buffer[index++] << 24) + ); + } else if (elementType === constants.BSON_DATA_INT) { + value = + buffer[index++] | + (buffer[index++] << 8) | + (buffer[index++] << 16) | + (buffer[index++] << 24); + } else if (elementType === constants.BSON_DATA_NUMBER && promoteValues === false) { + value = new Double(dataview.getFloat64(index, true)); + index = index + 8; + } else if (elementType === constants.BSON_DATA_NUMBER) { + value = dataview.getFloat64(index, true); + index = index + 8; + } else if (elementType === constants.BSON_DATA_DATE) { + const lowBits = + buffer[index++] | + (buffer[index++] << 8) | + (buffer[index++] << 16) | + (buffer[index++] << 24); + const highBits = + buffer[index++] | + (buffer[index++] << 8) | + (buffer[index++] << 16) | + (buffer[index++] << 24); + value = new Date(new Long(lowBits, highBits).toNumber()); + } else if (elementType === constants.BSON_DATA_BOOLEAN) { + if (buffer[index] !== 0 && buffer[index] !== 1) + throw new BSONError('illegal boolean type value'); + value = buffer[index++] === 1; + } else if (elementType === constants.BSON_DATA_OBJECT) { + const _index = index; + const objectSize = + buffer[index] | + (buffer[index + 1] << 8) | + (buffer[index + 2] << 16) | + (buffer[index + 3] << 24); + if (objectSize <= 0 || objectSize > buffer.length - index) + throw new BSONError('bad embedded document length in bson'); + + // We have a raw value + if (raw) { + value = buffer.slice(index, index + objectSize); + } else { + let objectOptions = options; + if (!globalUTFValidation) { + objectOptions = { ...options, validation: { utf8: shouldValidateKey } }; + } + value = deserializeObject(buffer, _index, objectOptions, false); + } + + index = index + objectSize; + } else if (elementType === constants.BSON_DATA_ARRAY) { + const _index = index; + const objectSize = + buffer[index] | + (buffer[index + 1] << 8) | + (buffer[index + 2] << 16) | + (buffer[index + 3] << 24); + let arrayOptions: DeserializeOptions = options; + + // Stop index + const stopIndex = index + objectSize; + + // All elements of array to be returned as raw bson + if (fieldsAsRaw && fieldsAsRaw[name]) { + arrayOptions = { ...options, raw: true }; + } + + if (!globalUTFValidation) { + arrayOptions = { ...arrayOptions, validation: { utf8: shouldValidateKey } }; + } + value = deserializeObject(buffer, _index, arrayOptions, true); + index = index + objectSize; + + if (buffer[index - 1] !== 0) throw new BSONError('invalid array terminator byte'); + if (index !== stopIndex) throw new BSONError('corrupted array bson'); + } else if (elementType === constants.BSON_DATA_UNDEFINED) { + value = undefined; + } else if (elementType === constants.BSON_DATA_NULL) { + value = null; + } else if (elementType === constants.BSON_DATA_LONG) { + // Unpack the low and high bits + const dataview = BSONDataView.fromUint8Array(buffer.subarray(index, index + 8)); + + const lowBits = + buffer[index++] | + (buffer[index++] << 8) | + (buffer[index++] << 16) | + (buffer[index++] << 24); + const highBits = + buffer[index++] | + (buffer[index++] << 8) | + (buffer[index++] << 16) | + (buffer[index++] << 24); + const long = new Long(lowBits, highBits); + if (useBigInt64) { + value = dataview.getBigInt64(0, true); + } else if (promoteLongs && promoteValues === true) { + // Promote the long if possible + value = + long.lessThanOrEqual(JS_INT_MAX_LONG) && long.greaterThanOrEqual(JS_INT_MIN_LONG) + ? long.toNumber() + : long; + } else { + value = long; + } + } else if (elementType === constants.BSON_DATA_DECIMAL128) { + // Buffer to contain the decimal bytes + const bytes = ByteUtils.allocate(16); + // Copy the next 16 bytes into the bytes buffer + bytes.set(buffer.subarray(index, index + 16), 0); + // Update index + index = index + 16; + // Assign the new Decimal128 value + value = new Decimal128(bytes); + } else if (elementType === constants.BSON_DATA_BINARY) { + let binarySize = + buffer[index++] | + (buffer[index++] << 8) | + (buffer[index++] << 16) | + (buffer[index++] << 24); + const totalBinarySize = binarySize; + const subType = buffer[index++]; + + // Did we have a negative binary size, throw + if (binarySize < 0) throw new BSONError('Negative binary type element size found'); + + // Is the length longer than the document + if (binarySize > buffer.byteLength) + throw new BSONError('Binary type size larger than document size'); + + // Decode as raw Buffer object if options specifies it + if (buffer['slice'] != null) { + // If we have subtype 2 skip the 4 bytes for the size + if (subType === Binary.SUBTYPE_BYTE_ARRAY) { + binarySize = + buffer[index++] | + (buffer[index++] << 8) | + (buffer[index++] << 16) | + (buffer[index++] << 24); + if (binarySize < 0) + throw new BSONError('Negative binary type element size found for subtype 0x02'); + if (binarySize > totalBinarySize - 4) + throw new BSONError('Binary type with subtype 0x02 contains too long binary size'); + if (binarySize < totalBinarySize - 4) + throw new BSONError('Binary type with subtype 0x02 contains too short binary size'); + } + + if (promoteBuffers && promoteValues) { + value = ByteUtils.toLocalBufferType(buffer.slice(index, index + binarySize)); + } else { + value = new Binary(buffer.slice(index, index + binarySize), subType); + if (subType === constants.BSON_BINARY_SUBTYPE_UUID_NEW && UUID.isValid(value)) { + value = value.toUUID(); + } + } + } else { + const _buffer = ByteUtils.allocate(binarySize); + // If we have subtype 2 skip the 4 bytes for the size + if (subType === Binary.SUBTYPE_BYTE_ARRAY) { + binarySize = + buffer[index++] | + (buffer[index++] << 8) | + (buffer[index++] << 16) | + (buffer[index++] << 24); + if (binarySize < 0) + throw new BSONError('Negative binary type element size found for subtype 0x02'); + if (binarySize > totalBinarySize - 4) + throw new BSONError('Binary type with subtype 0x02 contains too long binary size'); + if (binarySize < totalBinarySize - 4) + throw new BSONError('Binary type with subtype 0x02 contains too short binary size'); + } + + // Copy the data + for (i = 0; i < binarySize; i++) { + _buffer[i] = buffer[index + i]; + } + + if (promoteBuffers && promoteValues) { + value = _buffer; + } else { + value = new Binary(buffer.slice(index, index + binarySize), subType); + if (subType === constants.BSON_BINARY_SUBTYPE_UUID_NEW && UUID.isValid(value)) { + value = value.toUUID(); + } + } + } + + // Update the index + index = index + binarySize; + } else if (elementType === constants.BSON_DATA_REGEXP && bsonRegExp === false) { + // Get the start search index + i = index; + // Locate the end of the c string + while (buffer[i] !== 0x00 && i < buffer.length) { + i++; + } + // If are at the end of the buffer there is a problem with the document + if (i >= buffer.length) throw new BSONError('Bad BSON Document: illegal CString'); + // Return the C string + const source = ByteUtils.toUTF8(buffer, index, i); + // Create the regexp + index = i + 1; + + // Get the start search index + i = index; + // Locate the end of the c string + while (buffer[i] !== 0x00 && i < buffer.length) { + i++; + } + // If are at the end of the buffer there is a problem with the document + if (i >= buffer.length) throw new BSONError('Bad BSON Document: illegal CString'); + // Return the C string + const regExpOptions = ByteUtils.toUTF8(buffer, index, i); + index = i + 1; + + // For each option add the corresponding one for javascript + const optionsArray = new Array(regExpOptions.length); + + // Parse options + for (i = 0; i < regExpOptions.length; i++) { + switch (regExpOptions[i]) { + case 'm': + optionsArray[i] = 'm'; + break; + case 's': + optionsArray[i] = 'g'; + break; + case 'i': + optionsArray[i] = 'i'; + break; + } + } + + value = new RegExp(source, optionsArray.join('')); + } else if (elementType === constants.BSON_DATA_REGEXP && bsonRegExp === true) { + // Get the start search index + i = index; + // Locate the end of the c string + while (buffer[i] !== 0x00 && i < buffer.length) { + i++; + } + // If are at the end of the buffer there is a problem with the document + if (i >= buffer.length) throw new BSONError('Bad BSON Document: illegal CString'); + // Return the C string + const source = ByteUtils.toUTF8(buffer, index, i); + index = i + 1; + + // Get the start search index + i = index; + // Locate the end of the c string + while (buffer[i] !== 0x00 && i < buffer.length) { + i++; + } + // If are at the end of the buffer there is a problem with the document + if (i >= buffer.length) throw new BSONError('Bad BSON Document: illegal CString'); + // Return the C string + const regExpOptions = ByteUtils.toUTF8(buffer, index, i); + index = i + 1; + + // Set the object + value = new BSONRegExp(source, regExpOptions); + } else if (elementType === constants.BSON_DATA_SYMBOL) { + const stringSize = + buffer[index++] | + (buffer[index++] << 8) | + (buffer[index++] << 16) | + (buffer[index++] << 24); + if ( + stringSize <= 0 || + stringSize > buffer.length - index || + buffer[index + stringSize - 1] !== 0 + ) { + throw new BSONError('bad string length in bson'); + } + const symbol = getValidatedString(buffer, index, index + stringSize - 1, shouldValidateKey); + value = promoteValues ? symbol : new BSONSymbol(symbol); + index = index + stringSize; + } else if (elementType === constants.BSON_DATA_TIMESTAMP) { + // We intentionally **do not** use bit shifting here + // Bit shifting in javascript coerces numbers to **signed** int32s + // We need to keep i, and t unsigned + const i = + buffer[index++] + + buffer[index++] * (1 << 8) + + buffer[index++] * (1 << 16) + + buffer[index++] * (1 << 24); + const t = + buffer[index++] + + buffer[index++] * (1 << 8) + + buffer[index++] * (1 << 16) + + buffer[index++] * (1 << 24); + + value = new Timestamp({ i, t }); + } else if (elementType === constants.BSON_DATA_MIN_KEY) { + value = new MinKey(); + } else if (elementType === constants.BSON_DATA_MAX_KEY) { + value = new MaxKey(); + } else if (elementType === constants.BSON_DATA_CODE) { + const stringSize = + buffer[index++] | + (buffer[index++] << 8) | + (buffer[index++] << 16) | + (buffer[index++] << 24); + if ( + stringSize <= 0 || + stringSize > buffer.length - index || + buffer[index + stringSize - 1] !== 0 + ) { + throw new BSONError('bad string length in bson'); + } + const functionString = getValidatedString( + buffer, + index, + index + stringSize - 1, + shouldValidateKey + ); + + value = new Code(functionString); + + // Update parse index position + index = index + stringSize; + } else if (elementType === constants.BSON_DATA_CODE_W_SCOPE) { + const totalSize = + buffer[index++] | + (buffer[index++] << 8) | + (buffer[index++] << 16) | + (buffer[index++] << 24); + + // Element cannot be shorter than totalSize + stringSize + documentSize + terminator + if (totalSize < 4 + 4 + 4 + 1) { + throw new BSONError('code_w_scope total size shorter minimum expected length'); + } + + // Get the code string size + const stringSize = + buffer[index++] | + (buffer[index++] << 8) | + (buffer[index++] << 16) | + (buffer[index++] << 24); + // Check if we have a valid string + if ( + stringSize <= 0 || + stringSize > buffer.length - index || + buffer[index + stringSize - 1] !== 0 + ) { + throw new BSONError('bad string length in bson'); + } + + // Javascript function + const functionString = getValidatedString( + buffer, + index, + index + stringSize - 1, + shouldValidateKey + ); + // Update parse index position + index = index + stringSize; + // Parse the element + const _index = index; + // Decode the size of the object document + const objectSize = + buffer[index] | + (buffer[index + 1] << 8) | + (buffer[index + 2] << 16) | + (buffer[index + 3] << 24); + // Decode the scope object + const scopeObject = deserializeObject(buffer, _index, options, false); + // Adjust the index + index = index + objectSize; + + // Check if field length is too short + if (totalSize < 4 + 4 + objectSize + stringSize) { + throw new BSONError('code_w_scope total size is too short, truncating scope'); + } + + // Check if totalSize field is too long + if (totalSize > 4 + 4 + objectSize + stringSize) { + throw new BSONError('code_w_scope total size is too long, clips outer document'); + } + + value = new Code(functionString, scopeObject); + } else if (elementType === constants.BSON_DATA_DBPOINTER) { + // Get the code string size + const stringSize = + buffer[index++] | + (buffer[index++] << 8) | + (buffer[index++] << 16) | + (buffer[index++] << 24); + // Check if we have a valid string + if ( + stringSize <= 0 || + stringSize > buffer.length - index || + buffer[index + stringSize - 1] !== 0 + ) + throw new BSONError('bad string length in bson'); + // Namespace + if (validation != null && validation.utf8) { + if (!validateUtf8(buffer, index, index + stringSize - 1)) { + throw new BSONError('Invalid UTF-8 string in BSON document'); + } + } + const namespace = ByteUtils.toUTF8(buffer, index, index + stringSize - 1); + // Update parse index position + index = index + stringSize; + + // Read the oid + const oidBuffer = ByteUtils.allocate(12); + oidBuffer.set(buffer.subarray(index, index + 12), 0); + const oid = new ObjectId(oidBuffer); + + // Update the index + index = index + 12; + + // Upgrade to DBRef type + value = new DBRef(namespace, oid); + } else { + throw new BSONError( + `Detected unknown BSON type ${elementType.toString(16)} for fieldname "${name}"` + ); + } + if (name === '__proto__') { + Object.defineProperty(object, name, { + value, + writable: true, + enumerable: true, + configurable: true + }); + } else { + object[name] = value; + } + } + + // Check if the deserialization was against a valid array/object + if (size !== index - startIndex) { + if (isArray) throw new BSONError('corrupt array bson'); + throw new BSONError('corrupt object bson'); + } + + // if we did not find "$ref", "$id", "$db", or found an extraneous $key, don't make a DBRef + if (!isPossibleDBRef) return object; + + if (isDBRefLike(object)) { + const copy = Object.assign({}, object) as Partial; + delete copy.$ref; + delete copy.$id; + delete copy.$db; + return new DBRef(object.$ref, object.$id, object.$db, copy); + } + + return object; +} + +function getValidatedString( + buffer: Uint8Array, + start: number, + end: number, + shouldValidateUtf8: boolean +) { + const value = ByteUtils.toUTF8(buffer, start, end); + // if utf8 validation is on, do the check + if (shouldValidateUtf8) { + for (let i = 0; i < value.length; i++) { + if (value.charCodeAt(i) === 0xfffd) { + if (!validateUtf8(buffer, start, end)) { + throw new BSONError('Invalid UTF-8 string in BSON document'); + } + break; + } + } + } + return value; +} diff --git a/Url-Shortner/node_modules/bson/src/parser/serializer.ts b/Url-Shortner/node_modules/bson/src/parser/serializer.ts new file mode 100644 index 0000000..6f75cb0 --- /dev/null +++ b/Url-Shortner/node_modules/bson/src/parser/serializer.ts @@ -0,0 +1,1001 @@ +import { Binary } from '../binary'; +import type { BSONSymbol, DBRef, Document, MaxKey } from '../bson'; +import type { Code } from '../code'; +import * as constants from '../constants'; +import type { DBRefLike } from '../db_ref'; +import type { Decimal128 } from '../decimal128'; +import type { Double } from '../double'; +import { BSONError, BSONVersionError } from '../error'; +import type { Int32 } from '../int_32'; +import { Long } from '../long'; +import type { MinKey } from '../min_key'; +import type { ObjectId } from '../objectid'; +import type { BSONRegExp } from '../regexp'; +import { ByteUtils } from '../utils/byte_utils'; +import { isAnyArrayBuffer, isDate, isMap, isRegExp, isUint8Array } from './utils'; + +/** @public */ +export interface SerializeOptions { + /** + * the serializer will check if keys are valid. + * @defaultValue `false` + */ + checkKeys?: boolean; + /** + * serialize the javascript functions + * @defaultValue `false` + */ + serializeFunctions?: boolean; + /** + * serialize will not emit undefined fields + * note that the driver sets this to `false` + * @defaultValue `true` + */ + ignoreUndefined?: boolean; + /** @internal Resize internal buffer */ + minInternalBufferSize?: number; + /** + * the index in the buffer where we wish to start serializing into + * @defaultValue `0` + */ + index?: number; +} + +const regexp = /\x00/; // eslint-disable-line no-control-regex +const ignoreKeys = new Set(['$db', '$ref', '$id', '$clusterTime']); + +/* + * isArray indicates if we are writing to a BSON array (type 0x04) + * which forces the "key" which really an array index as a string to be written as ascii + * This will catch any errors in index as a string generation + */ + +function serializeString(buffer: Uint8Array, key: string, value: string, index: number) { + // Encode String type + buffer[index++] = constants.BSON_DATA_STRING; + // Number of written bytes + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + // Encode the name + index = index + numberOfWrittenBytes + 1; + buffer[index - 1] = 0; + // Write the string + const size = ByteUtils.encodeUTF8Into(buffer, value, index + 4); + // Write the size of the string to buffer + buffer[index + 3] = ((size + 1) >> 24) & 0xff; + buffer[index + 2] = ((size + 1) >> 16) & 0xff; + buffer[index + 1] = ((size + 1) >> 8) & 0xff; + buffer[index] = (size + 1) & 0xff; + // Update index + index = index + 4 + size; + // Write zero + buffer[index++] = 0; + return index; +} + +const NUMBER_SPACE = new DataView(new ArrayBuffer(8), 0, 8); +const FOUR_BYTE_VIEW_ON_NUMBER = new Uint8Array(NUMBER_SPACE.buffer, 0, 4); +const EIGHT_BYTE_VIEW_ON_NUMBER = new Uint8Array(NUMBER_SPACE.buffer, 0, 8); + +function serializeNumber(buffer: Uint8Array, key: string, value: number, index: number) { + const isNegativeZero = Object.is(value, -0); + + const type = + !isNegativeZero && + Number.isSafeInteger(value) && + value <= constants.BSON_INT32_MAX && + value >= constants.BSON_INT32_MIN + ? constants.BSON_DATA_INT + : constants.BSON_DATA_NUMBER; + + if (type === constants.BSON_DATA_INT) { + NUMBER_SPACE.setInt32(0, value, true); + } else { + NUMBER_SPACE.setFloat64(0, value, true); + } + + const bytes = + type === constants.BSON_DATA_INT ? FOUR_BYTE_VIEW_ON_NUMBER : EIGHT_BYTE_VIEW_ON_NUMBER; + + buffer[index++] = type; + + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + index = index + numberOfWrittenBytes; + buffer[index++] = 0x00; + + buffer.set(bytes, index); + index += bytes.byteLength; + + return index; +} + +function serializeBigInt(buffer: Uint8Array, key: string, value: bigint, index: number) { + buffer[index++] = constants.BSON_DATA_LONG; + // Number of written bytes + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + // Encode the name + index += numberOfWrittenBytes; + buffer[index++] = 0; + NUMBER_SPACE.setBigInt64(0, value, true); + // Write BigInt value + buffer.set(EIGHT_BYTE_VIEW_ON_NUMBER, index); + index += EIGHT_BYTE_VIEW_ON_NUMBER.byteLength; + return index; +} + +function serializeNull(buffer: Uint8Array, key: string, _: unknown, index: number) { + // Set long type + buffer[index++] = constants.BSON_DATA_NULL; + + // Number of written bytes + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + + // Encode the name + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + return index; +} + +function serializeBoolean(buffer: Uint8Array, key: string, value: boolean, index: number) { + // Write the type + buffer[index++] = constants.BSON_DATA_BOOLEAN; + // Number of written bytes + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + // Encode the name + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + // Encode the boolean value + buffer[index++] = value ? 1 : 0; + return index; +} + +function serializeDate(buffer: Uint8Array, key: string, value: Date, index: number) { + // Write the type + buffer[index++] = constants.BSON_DATA_DATE; + // Number of written bytes + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + // Encode the name + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + + // Write the date + const dateInMilis = Long.fromNumber(value.getTime()); + const lowBits = dateInMilis.getLowBits(); + const highBits = dateInMilis.getHighBits(); + // Encode low bits + buffer[index++] = lowBits & 0xff; + buffer[index++] = (lowBits >> 8) & 0xff; + buffer[index++] = (lowBits >> 16) & 0xff; + buffer[index++] = (lowBits >> 24) & 0xff; + // Encode high bits + buffer[index++] = highBits & 0xff; + buffer[index++] = (highBits >> 8) & 0xff; + buffer[index++] = (highBits >> 16) & 0xff; + buffer[index++] = (highBits >> 24) & 0xff; + return index; +} + +function serializeRegExp(buffer: Uint8Array, key: string, value: RegExp, index: number) { + // Write the type + buffer[index++] = constants.BSON_DATA_REGEXP; + // Number of written bytes + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + + // Encode the name + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + if (value.source && value.source.match(regexp) != null) { + throw new BSONError('value ' + value.source + ' must not contain null bytes'); + } + // Adjust the index + index = index + ByteUtils.encodeUTF8Into(buffer, value.source, index); + // Write zero + buffer[index++] = 0x00; + // Write the parameters + if (value.ignoreCase) buffer[index++] = 0x69; // i + if (value.global) buffer[index++] = 0x73; // s + if (value.multiline) buffer[index++] = 0x6d; // m + + // Add ending zero + buffer[index++] = 0x00; + return index; +} + +function serializeBSONRegExp(buffer: Uint8Array, key: string, value: BSONRegExp, index: number) { + // Write the type + buffer[index++] = constants.BSON_DATA_REGEXP; + // Number of written bytes + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + // Encode the name + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + + // Check the pattern for 0 bytes + if (value.pattern.match(regexp) != null) { + // The BSON spec doesn't allow keys with null bytes because keys are + // null-terminated. + throw new BSONError('pattern ' + value.pattern + ' must not contain null bytes'); + } + + // Adjust the index + index = index + ByteUtils.encodeUTF8Into(buffer, value.pattern, index); + // Write zero + buffer[index++] = 0x00; + // Write the options + const sortedOptions = value.options.split('').sort().join(''); + index = index + ByteUtils.encodeUTF8Into(buffer, sortedOptions, index); + // Add ending zero + buffer[index++] = 0x00; + return index; +} + +function serializeMinMax(buffer: Uint8Array, key: string, value: MinKey | MaxKey, index: number) { + // Write the type of either min or max key + if (value === null) { + buffer[index++] = constants.BSON_DATA_NULL; + } else if (value._bsontype === 'MinKey') { + buffer[index++] = constants.BSON_DATA_MIN_KEY; + } else { + buffer[index++] = constants.BSON_DATA_MAX_KEY; + } + + // Number of written bytes + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + // Encode the name + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + return index; +} + +function serializeObjectId(buffer: Uint8Array, key: string, value: ObjectId, index: number) { + // Write the type + buffer[index++] = constants.BSON_DATA_OID; + // Number of written bytes + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + + // Encode the name + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + + // Write the objectId into the shared buffer + if (isUint8Array(value.id)) { + buffer.set(value.id.subarray(0, 12), index); + } else { + throw new BSONError('object [' + JSON.stringify(value) + '] is not a valid ObjectId'); + } + + // Adjust index + return index + 12; +} + +function serializeBuffer(buffer: Uint8Array, key: string, value: Uint8Array, index: number) { + // Write the type + buffer[index++] = constants.BSON_DATA_BINARY; + // Number of written bytes + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + // Encode the name + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + // Get size of the buffer (current write point) + const size = value.length; + // Write the size of the string to buffer + buffer[index++] = size & 0xff; + buffer[index++] = (size >> 8) & 0xff; + buffer[index++] = (size >> 16) & 0xff; + buffer[index++] = (size >> 24) & 0xff; + // Write the default subtype + buffer[index++] = constants.BSON_BINARY_SUBTYPE_DEFAULT; + // Copy the content form the binary field to the buffer + buffer.set(value, index); + // Adjust the index + index = index + size; + return index; +} + +function serializeObject( + buffer: Uint8Array, + key: string, + value: Document, + index: number, + checkKeys: boolean, + depth: number, + serializeFunctions: boolean, + ignoreUndefined: boolean, + path: Set +) { + if (path.has(value)) { + throw new BSONError('Cannot convert circular structure to BSON'); + } + + path.add(value); + + // Write the type + buffer[index++] = Array.isArray(value) ? constants.BSON_DATA_ARRAY : constants.BSON_DATA_OBJECT; + // Number of written bytes + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + // Encode the name + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + const endIndex = serializeInto( + buffer, + value, + checkKeys, + index, + depth + 1, + serializeFunctions, + ignoreUndefined, + path + ); + + path.delete(value); + + return endIndex; +} + +function serializeDecimal128(buffer: Uint8Array, key: string, value: Decimal128, index: number) { + buffer[index++] = constants.BSON_DATA_DECIMAL128; + // Number of written bytes + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + // Encode the name + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + // Write the data from the value + buffer.set(value.bytes.subarray(0, 16), index); + return index + 16; +} + +function serializeLong(buffer: Uint8Array, key: string, value: Long, index: number) { + // Write the type + buffer[index++] = + value._bsontype === 'Long' ? constants.BSON_DATA_LONG : constants.BSON_DATA_TIMESTAMP; + // Number of written bytes + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + // Encode the name + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + // Write the date + const lowBits = value.getLowBits(); + const highBits = value.getHighBits(); + // Encode low bits + buffer[index++] = lowBits & 0xff; + buffer[index++] = (lowBits >> 8) & 0xff; + buffer[index++] = (lowBits >> 16) & 0xff; + buffer[index++] = (lowBits >> 24) & 0xff; + // Encode high bits + buffer[index++] = highBits & 0xff; + buffer[index++] = (highBits >> 8) & 0xff; + buffer[index++] = (highBits >> 16) & 0xff; + buffer[index++] = (highBits >> 24) & 0xff; + return index; +} + +function serializeInt32(buffer: Uint8Array, key: string, value: Int32 | number, index: number) { + value = value.valueOf(); + // Set int type 32 bits or less + buffer[index++] = constants.BSON_DATA_INT; + // Number of written bytes + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + // Encode the name + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + // Write the int value + buffer[index++] = value & 0xff; + buffer[index++] = (value >> 8) & 0xff; + buffer[index++] = (value >> 16) & 0xff; + buffer[index++] = (value >> 24) & 0xff; + return index; +} + +function serializeDouble(buffer: Uint8Array, key: string, value: Double, index: number) { + // Encode as double + buffer[index++] = constants.BSON_DATA_NUMBER; + + // Number of written bytes + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + + // Encode the name + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + + // Write float + NUMBER_SPACE.setFloat64(0, value.value, true); + buffer.set(EIGHT_BYTE_VIEW_ON_NUMBER, index); + + // Adjust index + index = index + 8; + return index; +} + +function serializeFunction(buffer: Uint8Array, key: string, value: Function, index: number) { + buffer[index++] = constants.BSON_DATA_CODE; + // Number of written bytes + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + // Encode the name + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + // Function string + const functionString = value.toString(); + + // Write the string + const size = ByteUtils.encodeUTF8Into(buffer, functionString, index + 4) + 1; + // Write the size of the string to buffer + buffer[index] = size & 0xff; + buffer[index + 1] = (size >> 8) & 0xff; + buffer[index + 2] = (size >> 16) & 0xff; + buffer[index + 3] = (size >> 24) & 0xff; + // Update index + index = index + 4 + size - 1; + // Write zero + buffer[index++] = 0; + return index; +} + +function serializeCode( + buffer: Uint8Array, + key: string, + value: Code, + index: number, + checkKeys = false, + depth = 0, + serializeFunctions = false, + ignoreUndefined = true, + path: Set +) { + if (value.scope && typeof value.scope === 'object') { + // Write the type + buffer[index++] = constants.BSON_DATA_CODE_W_SCOPE; + // Number of written bytes + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + // Encode the name + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + + // Starting index + let startIndex = index; + + // Serialize the function + // Get the function string + const functionString = value.code; + // Index adjustment + index = index + 4; + // Write string into buffer + const codeSize = ByteUtils.encodeUTF8Into(buffer, functionString, index + 4) + 1; + // Write the size of the string to buffer + buffer[index] = codeSize & 0xff; + buffer[index + 1] = (codeSize >> 8) & 0xff; + buffer[index + 2] = (codeSize >> 16) & 0xff; + buffer[index + 3] = (codeSize >> 24) & 0xff; + // Write end 0 + buffer[index + 4 + codeSize - 1] = 0; + // Write the + index = index + codeSize + 4; + + // Serialize the scope value + const endIndex = serializeInto( + buffer, + value.scope, + checkKeys, + index, + depth + 1, + serializeFunctions, + ignoreUndefined, + path + ); + index = endIndex - 1; + + // Writ the total + const totalSize = endIndex - startIndex; + + // Write the total size of the object + buffer[startIndex++] = totalSize & 0xff; + buffer[startIndex++] = (totalSize >> 8) & 0xff; + buffer[startIndex++] = (totalSize >> 16) & 0xff; + buffer[startIndex++] = (totalSize >> 24) & 0xff; + // Write trailing zero + buffer[index++] = 0; + } else { + buffer[index++] = constants.BSON_DATA_CODE; + // Number of written bytes + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + // Encode the name + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + // Function string + const functionString = value.code.toString(); + // Write the string + const size = ByteUtils.encodeUTF8Into(buffer, functionString, index + 4) + 1; + // Write the size of the string to buffer + buffer[index] = size & 0xff; + buffer[index + 1] = (size >> 8) & 0xff; + buffer[index + 2] = (size >> 16) & 0xff; + buffer[index + 3] = (size >> 24) & 0xff; + // Update index + index = index + 4 + size - 1; + // Write zero + buffer[index++] = 0; + } + + return index; +} + +function serializeBinary(buffer: Uint8Array, key: string, value: Binary, index: number) { + // Write the type + buffer[index++] = constants.BSON_DATA_BINARY; + // Number of written bytes + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + // Encode the name + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + // Extract the buffer + const data = value.buffer; + // Calculate size + let size = value.position; + // Add the deprecated 02 type 4 bytes of size to total + if (value.sub_type === Binary.SUBTYPE_BYTE_ARRAY) size = size + 4; + // Write the size of the string to buffer + buffer[index++] = size & 0xff; + buffer[index++] = (size >> 8) & 0xff; + buffer[index++] = (size >> 16) & 0xff; + buffer[index++] = (size >> 24) & 0xff; + // Write the subtype to the buffer + buffer[index++] = value.sub_type; + + // If we have binary type 2 the 4 first bytes are the size + if (value.sub_type === Binary.SUBTYPE_BYTE_ARRAY) { + size = size - 4; + buffer[index++] = size & 0xff; + buffer[index++] = (size >> 8) & 0xff; + buffer[index++] = (size >> 16) & 0xff; + buffer[index++] = (size >> 24) & 0xff; + } + + // Write the data to the object + buffer.set(data, index); + // Adjust the index + index = index + value.position; + return index; +} + +function serializeSymbol(buffer: Uint8Array, key: string, value: BSONSymbol, index: number) { + // Write the type + buffer[index++] = constants.BSON_DATA_SYMBOL; + // Number of written bytes + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + // Encode the name + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + // Write the string + const size = ByteUtils.encodeUTF8Into(buffer, value.value, index + 4) + 1; + // Write the size of the string to buffer + buffer[index] = size & 0xff; + buffer[index + 1] = (size >> 8) & 0xff; + buffer[index + 2] = (size >> 16) & 0xff; + buffer[index + 3] = (size >> 24) & 0xff; + // Update index + index = index + 4 + size - 1; + // Write zero + buffer[index++] = 0x00; + return index; +} + +function serializeDBRef( + buffer: Uint8Array, + key: string, + value: DBRef, + index: number, + depth: number, + serializeFunctions: boolean, + path: Set +) { + // Write the type + buffer[index++] = constants.BSON_DATA_OBJECT; + // Number of written bytes + const numberOfWrittenBytes = ByteUtils.encodeUTF8Into(buffer, key, index); + + // Encode the name + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + + let startIndex = index; + let output: DBRefLike = { + $ref: value.collection || value.namespace, // "namespace" was what library 1.x called "collection" + $id: value.oid + }; + + if (value.db != null) { + output.$db = value.db; + } + + output = Object.assign(output, value.fields); + const endIndex = serializeInto( + buffer, + output, + false, + index, + depth + 1, + serializeFunctions, + true, + path + ); + + // Calculate object size + const size = endIndex - startIndex; + // Write the size + buffer[startIndex++] = size & 0xff; + buffer[startIndex++] = (size >> 8) & 0xff; + buffer[startIndex++] = (size >> 16) & 0xff; + buffer[startIndex++] = (size >> 24) & 0xff; + // Set index + return endIndex; +} + +export function serializeInto( + buffer: Uint8Array, + object: Document, + checkKeys: boolean, + startingIndex: number, + depth: number, + serializeFunctions: boolean, + ignoreUndefined: boolean, + path: Set | null +): number { + if (path == null) { + // We are at the root input + if (object == null) { + // ONLY the root should turn into an empty document + // BSON Empty document has a size of 5 (LE) + buffer[0] = 0x05; + buffer[1] = 0x00; + buffer[2] = 0x00; + buffer[3] = 0x00; + // All documents end with null terminator + buffer[4] = 0x00; + return 5; + } + + if (Array.isArray(object)) { + throw new BSONError('serialize does not support an array as the root input'); + } + if (typeof object !== 'object') { + throw new BSONError('serialize does not support non-object as the root input'); + } else if ('_bsontype' in object && typeof object._bsontype === 'string') { + throw new BSONError(`BSON types cannot be serialized as a document`); + } else if ( + isDate(object) || + isRegExp(object) || + isUint8Array(object) || + isAnyArrayBuffer(object) + ) { + throw new BSONError(`date, regexp, typedarray, and arraybuffer cannot be BSON documents`); + } + + path = new Set(); + } + + // Push the object to the path + path.add(object); + + // Start place to serialize into + let index = startingIndex + 4; + + // Special case isArray + if (Array.isArray(object)) { + // Get object keys + for (let i = 0; i < object.length; i++) { + const key = `${i}`; + let value = object[i]; + + // Is there an override value + if (typeof value?.toBSON === 'function') { + value = value.toBSON(); + } + + if (typeof value === 'string') { + index = serializeString(buffer, key, value, index); + } else if (typeof value === 'number') { + index = serializeNumber(buffer, key, value, index); + } else if (typeof value === 'bigint') { + index = serializeBigInt(buffer, key, value, index); + } else if (typeof value === 'boolean') { + index = serializeBoolean(buffer, key, value, index); + } else if (value instanceof Date || isDate(value)) { + index = serializeDate(buffer, key, value, index); + } else if (value === undefined) { + index = serializeNull(buffer, key, value, index); + } else if (value === null) { + index = serializeNull(buffer, key, value, index); + } else if (isUint8Array(value)) { + index = serializeBuffer(buffer, key, value, index); + } else if (value instanceof RegExp || isRegExp(value)) { + index = serializeRegExp(buffer, key, value, index); + } else if (typeof value === 'object' && value._bsontype == null) { + index = serializeObject( + buffer, + key, + value, + index, + checkKeys, + depth, + serializeFunctions, + ignoreUndefined, + path + ); + } else if ( + typeof value === 'object' && + value[Symbol.for('@@mdb.bson.version')] !== constants.BSON_MAJOR_VERSION + ) { + throw new BSONVersionError(); + } else if (value._bsontype === 'ObjectId') { + index = serializeObjectId(buffer, key, value, index); + } else if (value._bsontype === 'Decimal128') { + index = serializeDecimal128(buffer, key, value, index); + } else if (value._bsontype === 'Long' || value._bsontype === 'Timestamp') { + index = serializeLong(buffer, key, value, index); + } else if (value._bsontype === 'Double') { + index = serializeDouble(buffer, key, value, index); + } else if (typeof value === 'function' && serializeFunctions) { + index = serializeFunction(buffer, key, value, index); + } else if (value._bsontype === 'Code') { + index = serializeCode( + buffer, + key, + value, + index, + checkKeys, + depth, + serializeFunctions, + ignoreUndefined, + path + ); + } else if (value._bsontype === 'Binary') { + index = serializeBinary(buffer, key, value, index); + } else if (value._bsontype === 'BSONSymbol') { + index = serializeSymbol(buffer, key, value, index); + } else if (value._bsontype === 'DBRef') { + index = serializeDBRef(buffer, key, value, index, depth, serializeFunctions, path); + } else if (value._bsontype === 'BSONRegExp') { + index = serializeBSONRegExp(buffer, key, value, index); + } else if (value._bsontype === 'Int32') { + index = serializeInt32(buffer, key, value, index); + } else if (value._bsontype === 'MinKey' || value._bsontype === 'MaxKey') { + index = serializeMinMax(buffer, key, value, index); + } else if (typeof value._bsontype !== 'undefined') { + throw new BSONError(`Unrecognized or invalid _bsontype: ${String(value._bsontype)}`); + } + } + } else if (object instanceof Map || isMap(object)) { + const iterator = object.entries(); + let done = false; + + while (!done) { + // Unpack the next entry + const entry = iterator.next(); + done = !!entry.done; + // Are we done, then skip and terminate + if (done) continue; + + // Get the entry values + const key = entry.value[0]; + let value = entry.value[1]; + + if (typeof value?.toBSON === 'function') { + value = value.toBSON(); + } + + // Check the type of the value + const type = typeof value; + + // Check the key and throw error if it's illegal + if (typeof key === 'string' && !ignoreKeys.has(key)) { + if (key.match(regexp) != null) { + // The BSON spec doesn't allow keys with null bytes because keys are + // null-terminated. + throw new BSONError('key ' + key + ' must not contain null bytes'); + } + + if (checkKeys) { + if ('$' === key[0]) { + throw new BSONError('key ' + key + " must not start with '$'"); + } else if (~key.indexOf('.')) { + throw new BSONError('key ' + key + " must not contain '.'"); + } + } + } + + if (type === 'string') { + index = serializeString(buffer, key, value, index); + } else if (type === 'number') { + index = serializeNumber(buffer, key, value, index); + } else if (type === 'bigint') { + index = serializeBigInt(buffer, key, value, index); + } else if (type === 'boolean') { + index = serializeBoolean(buffer, key, value, index); + } else if (value instanceof Date || isDate(value)) { + index = serializeDate(buffer, key, value, index); + } else if (value === null || (value === undefined && ignoreUndefined === false)) { + index = serializeNull(buffer, key, value, index); + } else if (isUint8Array(value)) { + index = serializeBuffer(buffer, key, value, index); + } else if (value instanceof RegExp || isRegExp(value)) { + index = serializeRegExp(buffer, key, value, index); + } else if (type === 'object' && value._bsontype == null) { + index = serializeObject( + buffer, + key, + value, + index, + checkKeys, + depth, + serializeFunctions, + ignoreUndefined, + path + ); + } else if ( + typeof value === 'object' && + value[Symbol.for('@@mdb.bson.version')] !== constants.BSON_MAJOR_VERSION + ) { + throw new BSONVersionError(); + } else if (value._bsontype === 'ObjectId') { + index = serializeObjectId(buffer, key, value, index); + } else if (type === 'object' && value._bsontype === 'Decimal128') { + index = serializeDecimal128(buffer, key, value, index); + } else if (value._bsontype === 'Long' || value._bsontype === 'Timestamp') { + index = serializeLong(buffer, key, value, index); + } else if (value._bsontype === 'Double') { + index = serializeDouble(buffer, key, value, index); + } else if (value._bsontype === 'Code') { + index = serializeCode( + buffer, + key, + value, + index, + checkKeys, + depth, + serializeFunctions, + ignoreUndefined, + path + ); + } else if (typeof value === 'function' && serializeFunctions) { + index = serializeFunction(buffer, key, value, index); + } else if (value._bsontype === 'Binary') { + index = serializeBinary(buffer, key, value, index); + } else if (value._bsontype === 'BSONSymbol') { + index = serializeSymbol(buffer, key, value, index); + } else if (value._bsontype === 'DBRef') { + index = serializeDBRef(buffer, key, value, index, depth, serializeFunctions, path); + } else if (value._bsontype === 'BSONRegExp') { + index = serializeBSONRegExp(buffer, key, value, index); + } else if (value._bsontype === 'Int32') { + index = serializeInt32(buffer, key, value, index); + } else if (value._bsontype === 'MinKey' || value._bsontype === 'MaxKey') { + index = serializeMinMax(buffer, key, value, index); + } else if (typeof value._bsontype !== 'undefined') { + throw new BSONError(`Unrecognized or invalid _bsontype: ${String(value._bsontype)}`); + } + } + } else { + if (typeof object?.toBSON === 'function') { + // Provided a custom serialization method + object = object.toBSON(); + if (object != null && typeof object !== 'object') { + throw new BSONError('toBSON function did not return an object'); + } + } + + // Iterate over all the keys + for (const key of Object.keys(object)) { + let value = object[key]; + // Is there an override value + if (typeof value?.toBSON === 'function') { + value = value.toBSON(); + } + + // Check the type of the value + const type = typeof value; + + // Check the key and throw error if it's illegal + if (typeof key === 'string' && !ignoreKeys.has(key)) { + if (key.match(regexp) != null) { + // The BSON spec doesn't allow keys with null bytes because keys are + // null-terminated. + throw new BSONError('key ' + key + ' must not contain null bytes'); + } + + if (checkKeys) { + if ('$' === key[0]) { + throw new BSONError('key ' + key + " must not start with '$'"); + } else if (~key.indexOf('.')) { + throw new BSONError('key ' + key + " must not contain '.'"); + } + } + } + + if (type === 'string') { + index = serializeString(buffer, key, value, index); + } else if (type === 'number') { + index = serializeNumber(buffer, key, value, index); + } else if (type === 'bigint') { + index = serializeBigInt(buffer, key, value, index); + } else if (type === 'boolean') { + index = serializeBoolean(buffer, key, value, index); + } else if (value instanceof Date || isDate(value)) { + index = serializeDate(buffer, key, value, index); + } else if (value === undefined) { + if (ignoreUndefined === false) index = serializeNull(buffer, key, value, index); + } else if (value === null) { + index = serializeNull(buffer, key, value, index); + } else if (isUint8Array(value)) { + index = serializeBuffer(buffer, key, value, index); + } else if (value instanceof RegExp || isRegExp(value)) { + index = serializeRegExp(buffer, key, value, index); + } else if (type === 'object' && value._bsontype == null) { + index = serializeObject( + buffer, + key, + value, + index, + checkKeys, + depth, + serializeFunctions, + ignoreUndefined, + path + ); + } else if ( + typeof value === 'object' && + value[Symbol.for('@@mdb.bson.version')] !== constants.BSON_MAJOR_VERSION + ) { + throw new BSONVersionError(); + } else if (value._bsontype === 'ObjectId') { + index = serializeObjectId(buffer, key, value, index); + } else if (type === 'object' && value._bsontype === 'Decimal128') { + index = serializeDecimal128(buffer, key, value, index); + } else if (value._bsontype === 'Long' || value._bsontype === 'Timestamp') { + index = serializeLong(buffer, key, value, index); + } else if (value._bsontype === 'Double') { + index = serializeDouble(buffer, key, value, index); + } else if (value._bsontype === 'Code') { + index = serializeCode( + buffer, + key, + value, + index, + checkKeys, + depth, + serializeFunctions, + ignoreUndefined, + path + ); + } else if (typeof value === 'function' && serializeFunctions) { + index = serializeFunction(buffer, key, value, index); + } else if (value._bsontype === 'Binary') { + index = serializeBinary(buffer, key, value, index); + } else if (value._bsontype === 'BSONSymbol') { + index = serializeSymbol(buffer, key, value, index); + } else if (value._bsontype === 'DBRef') { + index = serializeDBRef(buffer, key, value, index, depth, serializeFunctions, path); + } else if (value._bsontype === 'BSONRegExp') { + index = serializeBSONRegExp(buffer, key, value, index); + } else if (value._bsontype === 'Int32') { + index = serializeInt32(buffer, key, value, index); + } else if (value._bsontype === 'MinKey' || value._bsontype === 'MaxKey') { + index = serializeMinMax(buffer, key, value, index); + } else if (typeof value._bsontype !== 'undefined') { + throw new BSONError(`Unrecognized or invalid _bsontype: ${String(value._bsontype)}`); + } + } + } + + // Remove the path + path.delete(object); + + // Final padding byte for object + buffer[index++] = 0x00; + + // Final size + const size = index - startingIndex; + // Write the size of the object + buffer[startingIndex++] = size & 0xff; + buffer[startingIndex++] = (size >> 8) & 0xff; + buffer[startingIndex++] = (size >> 16) & 0xff; + buffer[startingIndex++] = (size >> 24) & 0xff; + return index; +} diff --git a/Url-Shortner/node_modules/bson/src/parser/utils.ts b/Url-Shortner/node_modules/bson/src/parser/utils.ts new file mode 100644 index 0000000..1ed1170 --- /dev/null +++ b/Url-Shortner/node_modules/bson/src/parser/utils.ts @@ -0,0 +1,29 @@ +export function isAnyArrayBuffer(value: unknown): value is ArrayBuffer { + return ['[object ArrayBuffer]', '[object SharedArrayBuffer]'].includes( + Object.prototype.toString.call(value) + ); +} + +export function isUint8Array(value: unknown): value is Uint8Array { + return Object.prototype.toString.call(value) === '[object Uint8Array]'; +} + +export function isBigInt64Array(value: unknown): value is BigInt64Array { + return Object.prototype.toString.call(value) === '[object BigInt64Array]'; +} + +export function isBigUInt64Array(value: unknown): value is BigUint64Array { + return Object.prototype.toString.call(value) === '[object BigUint64Array]'; +} + +export function isRegExp(d: unknown): d is RegExp { + return Object.prototype.toString.call(d) === '[object RegExp]'; +} + +export function isMap(d: unknown): d is Map { + return Object.prototype.toString.call(d) === '[object Map]'; +} + +export function isDate(d: unknown): d is Date { + return Object.prototype.toString.call(d) === '[object Date]'; +} diff --git a/Url-Shortner/node_modules/bson/src/regexp.ts b/Url-Shortner/node_modules/bson/src/regexp.ts new file mode 100644 index 0000000..0e7b279 --- /dev/null +++ b/Url-Shortner/node_modules/bson/src/regexp.ts @@ -0,0 +1,114 @@ +import { BSONValue } from './bson_value'; +import { BSONError } from './error'; +import type { EJSONOptions } from './extended_json'; + +function alphabetize(str: string): string { + return str.split('').sort().join(''); +} + +/** @public */ +export interface BSONRegExpExtendedLegacy { + $regex: string | BSONRegExp; + $options: string; +} + +/** @public */ +export interface BSONRegExpExtended { + $regularExpression: { + pattern: string; + options: string; + }; +} + +/** + * A class representation of the BSON RegExp type. + * @public + * @category BSONType + */ +export class BSONRegExp extends BSONValue { + get _bsontype(): 'BSONRegExp' { + return 'BSONRegExp'; + } + + pattern!: string; + options!: string; + /** + * @param pattern - The regular expression pattern to match + * @param options - The regular expression options + */ + constructor(pattern: string, options?: string) { + super(); + this.pattern = pattern; + this.options = alphabetize(options ?? ''); + + if (this.pattern.indexOf('\x00') !== -1) { + throw new BSONError( + `BSON Regex patterns cannot contain null bytes, found: ${JSON.stringify(this.pattern)}` + ); + } + if (this.options.indexOf('\x00') !== -1) { + throw new BSONError( + `BSON Regex options cannot contain null bytes, found: ${JSON.stringify(this.options)}` + ); + } + + // Validate options + for (let i = 0; i < this.options.length; i++) { + if ( + !( + this.options[i] === 'i' || + this.options[i] === 'm' || + this.options[i] === 'x' || + this.options[i] === 'l' || + this.options[i] === 's' || + this.options[i] === 'u' + ) + ) { + throw new BSONError(`The regular expression option [${this.options[i]}] is not supported`); + } + } + } + + static parseOptions(options?: string): string { + return options ? options.split('').sort().join('') : ''; + } + + /** @internal */ + toExtendedJSON(options?: EJSONOptions): BSONRegExpExtendedLegacy | BSONRegExpExtended { + options = options || {}; + if (options.legacy) { + return { $regex: this.pattern, $options: this.options }; + } + return { $regularExpression: { pattern: this.pattern, options: this.options } }; + } + + /** @internal */ + static fromExtendedJSON(doc: BSONRegExpExtendedLegacy | BSONRegExpExtended): BSONRegExp { + if ('$regex' in doc) { + if (typeof doc.$regex !== 'string') { + // This is for $regex query operators that have extended json values. + if (doc.$regex._bsontype === 'BSONRegExp') { + return doc as unknown as BSONRegExp; + } + } else { + return new BSONRegExp(doc.$regex, BSONRegExp.parseOptions(doc.$options)); + } + } + if ('$regularExpression' in doc) { + return new BSONRegExp( + doc.$regularExpression.pattern, + BSONRegExp.parseOptions(doc.$regularExpression.options) + ); + } + throw new BSONError(`Unexpected BSONRegExp EJSON object form: ${JSON.stringify(doc)}`); + } + + /** @internal */ + [Symbol.for('nodejs.util.inspect.custom')](): string { + return this.inspect(); + } + + inspect(): string { + return `new BSONRegExp(${JSON.stringify(this.pattern)}, ${JSON.stringify(this.options)})`; + } +} diff --git a/Url-Shortner/node_modules/bson/src/symbol.ts b/Url-Shortner/node_modules/bson/src/symbol.ts new file mode 100644 index 0000000..081a52a --- /dev/null +++ b/Url-Shortner/node_modules/bson/src/symbol.ts @@ -0,0 +1,58 @@ +import { BSONValue } from './bson_value'; + +/** @public */ +export interface BSONSymbolExtended { + $symbol: string; +} + +/** + * A class representation of the BSON Symbol type. + * @public + * @category BSONType + */ +export class BSONSymbol extends BSONValue { + get _bsontype(): 'BSONSymbol' { + return 'BSONSymbol'; + } + + value!: string; + /** + * @param value - the string representing the symbol. + */ + constructor(value: string) { + super(); + this.value = value; + } + + /** Access the wrapped string value. */ + valueOf(): string { + return this.value; + } + + toString(): string { + return this.value; + } + + inspect(): string { + return `new BSONSymbol("${this.value}")`; + } + + toJSON(): string { + return this.value; + } + + /** @internal */ + toExtendedJSON(): BSONSymbolExtended { + return { $symbol: this.value }; + } + + /** @internal */ + static fromExtendedJSON(doc: BSONSymbolExtended): BSONSymbol { + return new BSONSymbol(doc.$symbol); + } + + /** @internal */ + [Symbol.for('nodejs.util.inspect.custom')](): string { + return this.inspect(); + } +} diff --git a/Url-Shortner/node_modules/bson/src/timestamp.ts b/Url-Shortner/node_modules/bson/src/timestamp.ts new file mode 100644 index 0000000..52d85a2 --- /dev/null +++ b/Url-Shortner/node_modules/bson/src/timestamp.ts @@ -0,0 +1,152 @@ +import { BSONError } from './error'; +import type { Int32 } from './int_32'; +import { Long } from './long'; + +/** @public */ +export type TimestampOverrides = '_bsontype' | 'toExtendedJSON' | 'fromExtendedJSON' | 'inspect'; +/** @public */ +export type LongWithoutOverrides = new ( + low: unknown, + high?: number | boolean, + unsigned?: boolean +) => { + [P in Exclude]: Long[P]; +}; +/** @public */ +export const LongWithoutOverridesClass: LongWithoutOverrides = + Long as unknown as LongWithoutOverrides; + +/** @public */ +export interface TimestampExtended { + $timestamp: { + t: number; + i: number; + }; +} + +/** + * @public + * @category BSONType + */ +export class Timestamp extends LongWithoutOverridesClass { + get _bsontype(): 'Timestamp' { + return 'Timestamp'; + } + + static readonly MAX_VALUE = Long.MAX_UNSIGNED_VALUE; + + /** + * @param int - A 64-bit bigint representing the Timestamp. + */ + constructor(int: bigint); + /** + * @param long - A 64-bit Long representing the Timestamp. + */ + constructor(long: Long); + /** + * @param value - A pair of two values indicating timestamp and increment. + */ + constructor(value: { t: number; i: number }); + constructor(low?: bigint | Long | { t: number | Int32; i: number | Int32 }) { + if (low == null) { + super(0, 0, true); + } else if (typeof low === 'bigint') { + super(low, true); + } else if (Long.isLong(low)) { + super(low.low, low.high, true); + } else if (typeof low === 'object' && 't' in low && 'i' in low) { + if (typeof low.t !== 'number' && (typeof low.t !== 'object' || low.t._bsontype !== 'Int32')) { + throw new BSONError('Timestamp constructed from { t, i } must provide t as a number'); + } + if (typeof low.i !== 'number' && (typeof low.i !== 'object' || low.i._bsontype !== 'Int32')) { + throw new BSONError('Timestamp constructed from { t, i } must provide i as a number'); + } + const t = Number(low.t); + const i = Number(low.i); + if (t < 0 || Number.isNaN(t)) { + throw new BSONError('Timestamp constructed from { t, i } must provide a positive t'); + } + if (i < 0 || Number.isNaN(i)) { + throw new BSONError('Timestamp constructed from { t, i } must provide a positive i'); + } + if (t > 0xffff_ffff) { + throw new BSONError( + 'Timestamp constructed from { t, i } must provide t equal or less than uint32 max' + ); + } + if (i > 0xffff_ffff) { + throw new BSONError( + 'Timestamp constructed from { t, i } must provide i equal or less than uint32 max' + ); + } + + super(i, t, true); + } else { + throw new BSONError( + 'A Timestamp can only be constructed with: bigint, Long, or { t: number; i: number }' + ); + } + } + + toJSON(): { $timestamp: string } { + return { + $timestamp: this.toString() + }; + } + + /** Returns a Timestamp represented by the given (32-bit) integer value. */ + static fromInt(value: number): Timestamp { + return new Timestamp(Long.fromInt(value, true)); + } + + /** Returns a Timestamp representing the given number value, provided that it is a finite number. Otherwise, zero is returned. */ + static fromNumber(value: number): Timestamp { + return new Timestamp(Long.fromNumber(value, true)); + } + + /** + * Returns a Timestamp for the given high and low bits. Each is assumed to use 32 bits. + * + * @param lowBits - the low 32-bits. + * @param highBits - the high 32-bits. + */ + static fromBits(lowBits: number, highBits: number): Timestamp { + return new Timestamp({ i: lowBits, t: highBits }); + } + + /** + * Returns a Timestamp from the given string, optionally using the given radix. + * + * @param str - the textual representation of the Timestamp. + * @param optRadix - the radix in which the text is written. + */ + static fromString(str: string, optRadix: number): Timestamp { + return new Timestamp(Long.fromString(str, true, optRadix)); + } + + /** @internal */ + toExtendedJSON(): TimestampExtended { + return { $timestamp: { t: this.high >>> 0, i: this.low >>> 0 } }; + } + + /** @internal */ + static fromExtendedJSON(doc: TimestampExtended): Timestamp { + // The Long check is necessary because extended JSON has different behavior given the size of the input number + const i = Long.isLong(doc.$timestamp.i) + ? doc.$timestamp.i.getLowBitsUnsigned() // Need to fetch the least significant 32 bits + : doc.$timestamp.i; + const t = Long.isLong(doc.$timestamp.t) + ? doc.$timestamp.t.getLowBitsUnsigned() // Need to fetch the least significant 32 bits + : doc.$timestamp.t; + return new Timestamp({ t, i }); + } + + /** @internal */ + [Symbol.for('nodejs.util.inspect.custom')](): string { + return this.inspect(); + } + + inspect(): string { + return `new Timestamp({ t: ${this.getHighBits()}, i: ${this.getLowBits()} })`; + } +} diff --git a/Url-Shortner/node_modules/bson/src/utils/byte_utils.ts b/Url-Shortner/node_modules/bson/src/utils/byte_utils.ts new file mode 100644 index 0000000..41ec2c6 --- /dev/null +++ b/Url-Shortner/node_modules/bson/src/utils/byte_utils.ts @@ -0,0 +1,61 @@ +import { nodeJsByteUtils } from './node_byte_utils'; +import { webByteUtils } from './web_byte_utils'; + +/** @internal */ +export type ByteUtils = { + /** Transforms the input to an instance of Buffer if running on node, otherwise Uint8Array */ + toLocalBufferType(buffer: Uint8Array | ArrayBufferView | ArrayBuffer): Uint8Array; + /** Create empty space of size */ + allocate: (size: number) => Uint8Array; + /** Check if two Uint8Arrays are deep equal */ + equals: (a: Uint8Array, b: Uint8Array) => boolean; + /** Check if two Uint8Arrays are deep equal */ + fromNumberArray: (array: number[]) => Uint8Array; + /** Create a Uint8Array from a base64 string */ + fromBase64: (base64: string) => Uint8Array; + /** Create a base64 string from bytes */ + toBase64: (buffer: Uint8Array) => string; + /** **Legacy** binary strings are an outdated method of data transfer. Do not add public API support for interpreting this format */ + fromISO88591: (codePoints: string) => Uint8Array; + /** **Legacy** binary strings are an outdated method of data transfer. Do not add public API support for interpreting this format */ + toISO88591: (buffer: Uint8Array) => string; + /** Create a Uint8Array from a hex string */ + fromHex: (hex: string) => Uint8Array; + /** Create a hex string from bytes */ + toHex: (buffer: Uint8Array) => string; + /** Create a Uint8Array containing utf8 code units from a string */ + fromUTF8: (text: string) => Uint8Array; + /** Create a string from utf8 code units */ + toUTF8: (buffer: Uint8Array, start: number, end: number) => string; + /** Get the utf8 code unit count from a string if it were to be transformed to utf8 */ + utf8ByteLength: (input: string) => number; + /** Encode UTF8 bytes generated from `source` string into `destination` at byteOffset. Returns the number of bytes encoded. */ + encodeUTF8Into(destination: Uint8Array, source: string, byteOffset: number): number; + /** Generate a Uint8Array filled with random bytes with byteLength */ + randomBytes(byteLength: number): Uint8Array; +}; + +declare const Buffer: { new (): unknown; prototype?: { _isBuffer?: boolean } } | undefined; + +/** + * Check that a global Buffer exists that is a function and + * does not have a '_isBuffer' property defined on the prototype + * (this is to prevent using the npm buffer) + */ +const hasGlobalBuffer = typeof Buffer === 'function' && Buffer.prototype?._isBuffer !== true; + +/** + * This is the only ByteUtils that should be used across the rest of the BSON library. + * + * The type annotation is important here, it asserts that each of the platform specific + * utils implementations are compatible with the common one. + * + * @internal + */ +export const ByteUtils: ByteUtils = hasGlobalBuffer ? nodeJsByteUtils : webByteUtils; + +export class BSONDataView extends DataView { + static fromUint8Array(input: Uint8Array) { + return new DataView(input.buffer, input.byteOffset, input.byteLength); + } +} diff --git a/Url-Shortner/node_modules/bson/src/utils/node_byte_utils.ts b/Url-Shortner/node_modules/bson/src/utils/node_byte_utils.ts new file mode 100644 index 0000000..214b1e3 --- /dev/null +++ b/Url-Shortner/node_modules/bson/src/utils/node_byte_utils.ts @@ -0,0 +1,141 @@ +import { BSONError } from '../error'; + +type NodeJsEncoding = 'base64' | 'hex' | 'utf8' | 'binary'; +type NodeJsBuffer = ArrayBufferView & + Uint8Array & { + write(string: string, offset: number, length: undefined, encoding: 'utf8'): number; + copy(target: Uint8Array, targetStart: number, sourceStart: number, sourceEnd: number): number; + toString: (this: Uint8Array, encoding: NodeJsEncoding, start?: number, end?: number) => string; + equals: (this: Uint8Array, other: Uint8Array) => boolean; + }; +type NodeJsBufferConstructor = Omit & { + alloc: (size: number) => NodeJsBuffer; + from(array: number[]): NodeJsBuffer; + from(array: Uint8Array): NodeJsBuffer; + from(array: ArrayBuffer): NodeJsBuffer; + from(array: ArrayBuffer, byteOffset: number, byteLength: number): NodeJsBuffer; + from(base64: string, encoding: NodeJsEncoding): NodeJsBuffer; + byteLength(input: string, encoding: 'utf8'): number; + isBuffer(value: unknown): value is NodeJsBuffer; +}; + +// This can be nullish, but we gate the nodejs functions on being exported whether or not this exists +// Node.js global +declare const Buffer: NodeJsBufferConstructor; +declare const require: (mod: 'crypto') => { randomBytes: (byteLength: number) => Uint8Array }; + +/** @internal */ +export function nodejsMathRandomBytes(byteLength: number) { + return nodeJsByteUtils.fromNumberArray( + Array.from({ length: byteLength }, () => Math.floor(Math.random() * 256)) + ); +} + +/** + * @internal + * WARNING: REQUIRE WILL BE REWRITTEN + * + * This code is carefully used by require_rewriter.mjs any modifications must be reflected in the plugin. + * + * @remarks + * "crypto" is the only dependency BSON needs. This presents a problem for creating a bundle of the BSON library + * in an es module format that can be used both on the browser and in Node.js. In Node.js when BSON is imported as + * an es module, there will be no global require function defined, making the code below fallback to the much less desireable math.random bytes. + * In order to make our es module bundle work as expected on Node.js we need to change this `require()` to a dynamic import, and the dynamic + * import must be top-level awaited since es modules are async. So we rely on a custom rollup plugin to seek out the following lines of code + * and replace `require` with `await import` and the IIFE line (`nodejsRandomBytes = (() => { ... })()`) with `nodejsRandomBytes = await (async () => { ... })()` + * when generating an es module bundle. + */ +const nodejsRandomBytes: (byteLength: number) => Uint8Array = (() => { + try { + return require('crypto').randomBytes; + } catch { + return nodejsMathRandomBytes; + } +})(); + +/** @internal */ +export const nodeJsByteUtils = { + toLocalBufferType(potentialBuffer: Uint8Array | NodeJsBuffer | ArrayBuffer): NodeJsBuffer { + if (Buffer.isBuffer(potentialBuffer)) { + return potentialBuffer; + } + + if (ArrayBuffer.isView(potentialBuffer)) { + return Buffer.from( + potentialBuffer.buffer, + potentialBuffer.byteOffset, + potentialBuffer.byteLength + ); + } + + const stringTag = + potentialBuffer?.[Symbol.toStringTag] ?? Object.prototype.toString.call(potentialBuffer); + if ( + stringTag === 'ArrayBuffer' || + stringTag === 'SharedArrayBuffer' || + stringTag === '[object ArrayBuffer]' || + stringTag === '[object SharedArrayBuffer]' + ) { + return Buffer.from(potentialBuffer); + } + + throw new BSONError(`Cannot create Buffer from ${String(potentialBuffer)}`); + }, + + allocate(size: number): NodeJsBuffer { + return Buffer.alloc(size); + }, + + equals(a: Uint8Array, b: Uint8Array): boolean { + return nodeJsByteUtils.toLocalBufferType(a).equals(b); + }, + + fromNumberArray(array: number[]): NodeJsBuffer { + return Buffer.from(array); + }, + + fromBase64(base64: string): NodeJsBuffer { + return Buffer.from(base64, 'base64'); + }, + + toBase64(buffer: Uint8Array): string { + return nodeJsByteUtils.toLocalBufferType(buffer).toString('base64'); + }, + + /** **Legacy** binary strings are an outdated method of data transfer. Do not add public API support for interpreting this format */ + fromISO88591(codePoints: string): NodeJsBuffer { + return Buffer.from(codePoints, 'binary'); + }, + + /** **Legacy** binary strings are an outdated method of data transfer. Do not add public API support for interpreting this format */ + toISO88591(buffer: Uint8Array): string { + return nodeJsByteUtils.toLocalBufferType(buffer).toString('binary'); + }, + + fromHex(hex: string): NodeJsBuffer { + return Buffer.from(hex, 'hex'); + }, + + toHex(buffer: Uint8Array): string { + return nodeJsByteUtils.toLocalBufferType(buffer).toString('hex'); + }, + + fromUTF8(text: string): NodeJsBuffer { + return Buffer.from(text, 'utf8'); + }, + + toUTF8(buffer: Uint8Array, start: number, end: number): string { + return nodeJsByteUtils.toLocalBufferType(buffer).toString('utf8', start, end); + }, + + utf8ByteLength(input: string): number { + return Buffer.byteLength(input, 'utf8'); + }, + + encodeUTF8Into(buffer: Uint8Array, source: string, byteOffset: number): number { + return nodeJsByteUtils.toLocalBufferType(buffer).write(source, byteOffset, undefined, 'utf8'); + }, + + randomBytes: nodejsRandomBytes +}; diff --git a/Url-Shortner/node_modules/bson/src/utils/web_byte_utils.ts b/Url-Shortner/node_modules/bson/src/utils/web_byte_utils.ts new file mode 100644 index 0000000..cf93e43 --- /dev/null +++ b/Url-Shortner/node_modules/bson/src/utils/web_byte_utils.ts @@ -0,0 +1,190 @@ +import { BSONError } from '../error'; + +type TextDecoder = { + readonly encoding: string; + readonly fatal: boolean; + readonly ignoreBOM: boolean; + decode(input?: Uint8Array): string; +}; +type TextDecoderConstructor = { + new (label: 'utf8', options: { fatal: boolean; ignoreBOM?: boolean }): TextDecoder; +}; + +type TextEncoder = { + readonly encoding: string; + encode(input?: string): Uint8Array; +}; +type TextEncoderConstructor = { + new (): TextEncoder; +}; + +// Web global +declare const TextDecoder: TextDecoderConstructor; +declare const TextEncoder: TextEncoderConstructor; +declare const atob: (base64: string) => string; +declare const btoa: (binary: string) => string; + +type ArrayBufferViewWithTag = ArrayBufferView & { + [Symbol.toStringTag]?: string; +}; + +function isReactNative() { + const { navigator } = globalThis as { navigator?: { product?: string } }; + return typeof navigator === 'object' && navigator.product === 'ReactNative'; +} + +/** @internal */ +export function webMathRandomBytes(byteLength: number) { + if (byteLength < 0) { + throw new RangeError(`The argument 'byteLength' is invalid. Received ${byteLength}`); + } + return webByteUtils.fromNumberArray( + Array.from({ length: byteLength }, () => Math.floor(Math.random() * 256)) + ); +} + +/** @internal */ +const webRandomBytes: (byteLength: number) => Uint8Array = (() => { + const { crypto } = globalThis as { + crypto?: { getRandomValues?: (space: Uint8Array) => Uint8Array }; + }; + if (crypto != null && typeof crypto.getRandomValues === 'function') { + return (byteLength: number) => { + // @ts-expect-error: crypto.getRandomValues cannot actually be null here + // You cannot separate getRandomValues from crypto (need to have this === crypto) + return crypto.getRandomValues(webByteUtils.allocate(byteLength)); + }; + } else { + if (isReactNative()) { + const { console } = globalThis as { console?: { warn?: (message: string) => void } }; + console?.warn?.( + 'BSON: For React Native please polyfill crypto.getRandomValues, e.g. using: https://www.npmjs.com/package/react-native-get-random-values.' + ); + } + return webMathRandomBytes; + } +})(); + +const HEX_DIGIT = /(\d|[a-f])/i; + +/** @internal */ +export const webByteUtils = { + toLocalBufferType( + potentialUint8array: Uint8Array | ArrayBufferViewWithTag | ArrayBuffer + ): Uint8Array { + const stringTag = + potentialUint8array?.[Symbol.toStringTag] ?? + Object.prototype.toString.call(potentialUint8array); + + if (stringTag === 'Uint8Array') { + return potentialUint8array as Uint8Array; + } + + if (ArrayBuffer.isView(potentialUint8array)) { + return new Uint8Array( + potentialUint8array.buffer.slice( + potentialUint8array.byteOffset, + potentialUint8array.byteOffset + potentialUint8array.byteLength + ) + ); + } + + if ( + stringTag === 'ArrayBuffer' || + stringTag === 'SharedArrayBuffer' || + stringTag === '[object ArrayBuffer]' || + stringTag === '[object SharedArrayBuffer]' + ) { + return new Uint8Array(potentialUint8array); + } + + throw new BSONError(`Cannot make a Uint8Array from ${String(potentialUint8array)}`); + }, + + allocate(size: number): Uint8Array { + if (typeof size !== 'number') { + throw new TypeError(`The "size" argument must be of type number. Received ${String(size)}`); + } + return new Uint8Array(size); + }, + + equals(a: Uint8Array, b: Uint8Array): boolean { + if (a.byteLength !== b.byteLength) { + return false; + } + for (let i = 0; i < a.byteLength; i++) { + if (a[i] !== b[i]) { + return false; + } + } + return true; + }, + + fromNumberArray(array: number[]): Uint8Array { + return Uint8Array.from(array); + }, + + fromBase64(base64: string): Uint8Array { + return Uint8Array.from(atob(base64), c => c.charCodeAt(0)); + }, + + toBase64(uint8array: Uint8Array): string { + return btoa(webByteUtils.toISO88591(uint8array)); + }, + + /** **Legacy** binary strings are an outdated method of data transfer. Do not add public API support for interpreting this format */ + fromISO88591(codePoints: string): Uint8Array { + return Uint8Array.from(codePoints, c => c.charCodeAt(0) & 0xff); + }, + + /** **Legacy** binary strings are an outdated method of data transfer. Do not add public API support for interpreting this format */ + toISO88591(uint8array: Uint8Array): string { + return Array.from(Uint16Array.from(uint8array), b => String.fromCharCode(b)).join(''); + }, + + fromHex(hex: string): Uint8Array { + const evenLengthHex = hex.length % 2 === 0 ? hex : hex.slice(0, hex.length - 1); + const buffer = []; + + for (let i = 0; i < evenLengthHex.length; i += 2) { + const firstDigit = evenLengthHex[i]; + const secondDigit = evenLengthHex[i + 1]; + + if (!HEX_DIGIT.test(firstDigit)) { + break; + } + if (!HEX_DIGIT.test(secondDigit)) { + break; + } + + const hexDigit = Number.parseInt(`${firstDigit}${secondDigit}`, 16); + buffer.push(hexDigit); + } + + return Uint8Array.from(buffer); + }, + + toHex(uint8array: Uint8Array): string { + return Array.from(uint8array, byte => byte.toString(16).padStart(2, '0')).join(''); + }, + + fromUTF8(text: string): Uint8Array { + return new TextEncoder().encode(text); + }, + + toUTF8(uint8array: Uint8Array, start: number, end: number): string { + return new TextDecoder('utf8', { fatal: false }).decode(uint8array.slice(start, end)); + }, + + utf8ByteLength(input: string): number { + return webByteUtils.fromUTF8(input).byteLength; + }, + + encodeUTF8Into(buffer: Uint8Array, source: string, byteOffset: number): number { + const bytes = webByteUtils.fromUTF8(source); + buffer.set(bytes, byteOffset); + return bytes.byteLength; + }, + + randomBytes: webRandomBytes +}; diff --git a/Url-Shortner/node_modules/bson/src/validate_utf8.ts b/Url-Shortner/node_modules/bson/src/validate_utf8.ts new file mode 100644 index 0000000..e1da934 --- /dev/null +++ b/Url-Shortner/node_modules/bson/src/validate_utf8.ts @@ -0,0 +1,47 @@ +const FIRST_BIT = 0x80; +const FIRST_TWO_BITS = 0xc0; +const FIRST_THREE_BITS = 0xe0; +const FIRST_FOUR_BITS = 0xf0; +const FIRST_FIVE_BITS = 0xf8; + +const TWO_BIT_CHAR = 0xc0; +const THREE_BIT_CHAR = 0xe0; +const FOUR_BIT_CHAR = 0xf0; +const CONTINUING_CHAR = 0x80; + +/** + * Determines if the passed in bytes are valid utf8 + * @param bytes - An array of 8-bit bytes. Must be indexable and have length property + * @param start - The index to start validating + * @param end - The index to end validating + */ +export function validateUtf8( + bytes: { [index: number]: number }, + start: number, + end: number +): boolean { + let continuation = 0; + + for (let i = start; i < end; i += 1) { + const byte = bytes[i]; + + if (continuation) { + if ((byte & FIRST_TWO_BITS) !== CONTINUING_CHAR) { + return false; + } + continuation -= 1; + } else if (byte & FIRST_BIT) { + if ((byte & FIRST_THREE_BITS) === TWO_BIT_CHAR) { + continuation = 1; + } else if ((byte & FIRST_FOUR_BITS) === THREE_BIT_CHAR) { + continuation = 2; + } else if ((byte & FIRST_FIVE_BITS) === FOUR_BIT_CHAR) { + continuation = 3; + } else { + return false; + } + } + } + + return !continuation; +} diff --git a/Url-Shortner/node_modules/bson/vendor/base64/LICENSE-MIT.txt b/Url-Shortner/node_modules/bson/vendor/base64/LICENSE-MIT.txt new file mode 100644 index 0000000..a41e0a7 --- /dev/null +++ b/Url-Shortner/node_modules/bson/vendor/base64/LICENSE-MIT.txt @@ -0,0 +1,20 @@ +Copyright Mathias Bynens + +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/Url-Shortner/node_modules/bson/vendor/base64/README.md b/Url-Shortner/node_modules/bson/vendor/base64/README.md new file mode 100644 index 0000000..ab0ef25 --- /dev/null +++ b/Url-Shortner/node_modules/bson/vendor/base64/README.md @@ -0,0 +1,112 @@ +# base64 [![Build status](https://travis-ci.org/mathiasbynens/base64.svg?branch=master)](https://travis-ci.org/mathiasbynens/base64) [![Code coverage status](http://img.shields.io/coveralls/mathiasbynens/base64/master.svg)](https://coveralls.io/r/mathiasbynens/base64) + +_base64_ is a robust base64 encoder/decoder that is fully compatible with [`atob()` and `btoa()`](https://html.spec.whatwg.org/multipage/webappapis.html#atob), written in JavaScript. The base64-encoding and -decoding algorithms it uses are fully [RFC 4648](https://tools.ietf.org/html/rfc4648#section-4) compliant. + +## Installation + +Via [npm](https://www.npmjs.com/): + +```bash +npm install base-64 +``` + +In a browser: + +```html + +``` + +In [Narwhal](http://narwhaljs.org/), [Node.js](https://nodejs.org/), and [RingoJS](http://ringojs.org/): + +```js +var base64 = require('base-64'); +``` + +In [Rhino](http://www.mozilla.org/rhino/): + +```js +load('base64.js'); +``` + +Using an AMD loader like [RequireJS](http://requirejs.org/): + +```js +require( + { + 'paths': { + 'base64': 'path/to/base64' + } + }, + ['base64'], + function(base64) { + console.log(base64); + } +); +``` + +## API + +### `base64.version` + +A string representing the semantic version number. + +### `base64.encode(input)` + +This function takes a byte string (the `input` parameter) and encodes it according to base64. The input data must be in the form of a string containing only characters in the range from U+0000 to U+00FF, each representing a binary byte with values `0x00` to `0xFF`. The `base64.encode()` function is designed to be fully compatible with [`btoa()` as described in the HTML Standard](https://html.spec.whatwg.org/multipage/webappapis.html#dom-windowbase64-btoa). + +```js +var encodedData = base64.encode(input); +``` + +To base64-encode any Unicode string, [encode it as UTF-8 first](https://github.com/mathiasbynens/utf8.js#utf8encodestring): + +```js +var base64 = require('base-64'); +var utf8 = require('utf8'); + +var text = 'foo © bar 𝌆 baz'; +var bytes = utf8.encode(text); +var encoded = base64.encode(bytes); +console.log(encoded); +// → 'Zm9vIMKpIGJhciDwnYyGIGJheg==' +``` + +### `base64.decode(input)` + +This function takes a base64-encoded string (the `input` parameter) and decodes it. The return value is in the form of a string containing only characters in the range from U+0000 to U+00FF, each representing a binary byte with values `0x00` to `0xFF`. The `base64.decode()` function is designed to be fully compatible with [`atob()` as described in the HTML Standard](https://html.spec.whatwg.org/multipage/webappapis.html#dom-windowbase64-atob). + +```js +var decodedData = base64.decode(encodedData); +``` + +To base64-decode UTF-8-encoded data back into a Unicode string, [UTF-8-decode it](https://github.com/mathiasbynens/utf8.js#utf8decodebytestring) after base64-decoding it: + +```js +var encoded = 'Zm9vIMKpIGJhciDwnYyGIGJheg=='; +var bytes = base64.decode(encoded); +var text = utf8.decode(bytes); +console.log(text); +// → 'foo © bar 𝌆 baz' +``` + +## Support + +_base64_ is designed to work in at least Node.js v0.10.0, Narwhal 0.3.2, RingoJS 0.8-0.9, PhantomJS 1.9.0, Rhino 1.7RC4, as well as old and modern versions of Chrome, Firefox, Safari, Opera, and Internet Explorer. + +## Unit tests & code coverage + +After cloning this repository, run `npm install` to install the dependencies needed for development and testing. You may want to install Istanbul _globally_ using `npm install istanbul -g`. + +Once that’s done, you can run the unit tests in Node using `npm test` or `node tests/tests.js`. To run the tests in Rhino, Ringo, Narwhal, and web browsers as well, use `grunt test`. + +To generate the code coverage report, use `grunt cover`. + +## Author + +| [![twitter/mathias](https://gravatar.com/avatar/24e08a9ea84deb17ae121074d0f17125?s=70)](https://twitter.com/mathias "Follow @mathias on Twitter") | +|---| +| [Mathias Bynens](https://mathiasbynens.be/) | + +## License + +_base64_ is available under the [MIT](https://mths.be/mit) license. diff --git a/Url-Shortner/node_modules/bson/vendor/base64/base64.js b/Url-Shortner/node_modules/bson/vendor/base64/base64.js new file mode 100644 index 0000000..611b446 --- /dev/null +++ b/Url-Shortner/node_modules/bson/vendor/base64/base64.js @@ -0,0 +1,157 @@ +/*! https://mths.be/base64 v1.0.0 by @mathias | MIT license */ +;(function(root) { + + // Detect free variables `exports`. + var freeExports = typeof exports == 'object' && exports; + + // Detect free variable `module`. + var freeModule = typeof module == 'object' && module && + module.exports == freeExports && module; + + /*--------------------------------------------------------------------------*/ + + var InvalidCharacterError = function(message) { + this.message = message; + }; + InvalidCharacterError.prototype = new Error; + InvalidCharacterError.prototype.name = 'InvalidCharacterError'; + + var error = function(message) { + // Note: the error messages used throughout this file match those used by + // the native `atob`/`btoa` implementation in Chromium. + throw new InvalidCharacterError(message); + }; + + var TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; + // http://whatwg.org/html/common-microsyntaxes.html#space-character + var REGEX_SPACE_CHARACTERS = /[\t\n\f\r ]/g; + + // `decode` is designed to be fully compatible with `atob` as described in the + // HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob + // The optimized base64-decoding algorithm used is based on @atk’s excellent + // implementation. https://gist.github.com/atk/1020396 + var decode = function(input) { + input = String(input) + .replace(REGEX_SPACE_CHARACTERS, ''); + var length = input.length; + if (length % 4 == 0) { + input = input.replace(/==?$/, ''); + length = input.length; + } + if ( + length % 4 == 1 || + // http://whatwg.org/C#alphanumeric-ascii-characters + /[^+a-zA-Z0-9/]/.test(input) + ) { + error( + 'Invalid character: the string to be decoded is not correctly encoded.' + ); + } + var bitCounter = 0; + var bitStorage; + var buffer; + var output = ''; + var position = -1; + while (++position < length) { + buffer = TABLE.indexOf(input.charAt(position)); + bitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer; + // Unless this is the first of a group of 4 characters… + if (bitCounter++ % 4) { + // …convert the first 8 bits to a single ASCII character. + output += String.fromCharCode( + 0xFF & bitStorage >> (-2 * bitCounter & 6) + ); + } + } + return output; + }; + + // `encode` is designed to be fully compatible with `btoa` as described in the + // HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa + var encode = function(input) { + input = String(input); + if (/[^\0-\xFF]/.test(input)) { + // Note: no need to special-case astral symbols here, as surrogates are + // matched, and the input is supposed to only contain ASCII anyway. + error( + 'The string to be encoded contains characters outside of the ' + + 'Latin1 range.' + ); + } + var padding = input.length % 3; + var output = ''; + var position = -1; + var a; + var b; + var c; + var buffer; + // Make sure any padding is handled outside of the loop. + var length = input.length - padding; + + while (++position < length) { + // Read three bytes, i.e. 24 bits. + a = input.charCodeAt(position) << 16; + b = input.charCodeAt(++position) << 8; + c = input.charCodeAt(++position); + buffer = a + b + c; + // Turn the 24 bits into four chunks of 6 bits each, and append the + // matching character for each of them to the output. + output += ( + TABLE.charAt(buffer >> 18 & 0x3F) + + TABLE.charAt(buffer >> 12 & 0x3F) + + TABLE.charAt(buffer >> 6 & 0x3F) + + TABLE.charAt(buffer & 0x3F) + ); + } + + if (padding == 2) { + a = input.charCodeAt(position) << 8; + b = input.charCodeAt(++position); + buffer = a + b; + output += ( + TABLE.charAt(buffer >> 10) + + TABLE.charAt((buffer >> 4) & 0x3F) + + TABLE.charAt((buffer << 2) & 0x3F) + + '=' + ); + } else if (padding == 1) { + buffer = input.charCodeAt(position); + output += ( + TABLE.charAt(buffer >> 2) + + TABLE.charAt((buffer << 4) & 0x3F) + + '==' + ); + } + + return output; + }; + + var base64 = { + 'encode': encode, + 'decode': decode, + 'version': '1.0.0' + }; + + // Some AMD build optimizers, like r.js, check for specific condition patterns + // like the following: + if ( + typeof define == 'function' && + typeof define.amd == 'object' && + define.amd + ) { + define(function() { + return base64; + }); + } else if (freeExports && !freeExports.nodeType) { + if (freeModule) { // in Node.js or RingoJS v0.8.0+ + freeModule.exports = base64; + } else { // in Narwhal or RingoJS v0.7.0- + for (var key in base64) { + base64.hasOwnProperty(key) && (freeExports[key] = base64[key]); + } + } + } else { // in Rhino or a web browser + root.base64 = base64; + } + +}(this)); diff --git a/Url-Shortner/node_modules/bson/vendor/base64/package.json b/Url-Shortner/node_modules/bson/vendor/base64/package.json new file mode 100644 index 0000000..479b0a1 --- /dev/null +++ b/Url-Shortner/node_modules/bson/vendor/base64/package.json @@ -0,0 +1,43 @@ +{ + "name": "base-64", + "version": "1.0.0", + "description": "A robust base64 encoder/decoder that is fully compatible with `atob()` and `btoa()`, written in JavaScript.", + "homepage": "https://mths.be/base64", + "main": "base64.js", + "keywords": [ + "codec", + "decoder", + "encoder", + "base64", + "atob", + "btoa" + ], + "license": "MIT", + "author": { + "name": "Mathias Bynens", + "url": "https://mathiasbynens.be/" + }, + "repository": { + "type": "git", + "url": "https://github.com/mathiasbynens/base64.git" + }, + "bugs": "https://github.com/mathiasbynens/base64/issues", + "files": [ + "LICENSE-MIT.txt", + "base64.js" + ], + "scripts": { + "test": "mocha tests/tests.js", + "build": "grunt build" + }, + "devDependencies": { + "coveralls": "^2.11.4", + "grunt": "^0.4.5", + "grunt-cli": "^1.3.2", + "grunt-shell": "^1.1.2", + "grunt-template": "^0.2.3", + "istanbul": "^0.4.0", + "mocha": "^6.2.0", + "regenerate": "^1.2.1" + } +} diff --git a/Url-Shortner/node_modules/bson/vendor/text-encoding/LICENSE.md b/Url-Shortner/node_modules/bson/vendor/text-encoding/LICENSE.md new file mode 100644 index 0000000..5ab1046 --- /dev/null +++ b/Url-Shortner/node_modules/bson/vendor/text-encoding/LICENSE.md @@ -0,0 +1,237 @@ +The encoding indexes, algorithms, and many comments in the code +derive from the Encoding Standard https://encoding.spec.whatwg.org/ + +Otherwise, the code of this repository is released under the Unlicense +license and is also dual-licensed under an Apache 2.0 license. Both +are included below. + +# Unlicense + +This is free and unencumbered software released into the public domain. + +Anyone is free to copy, modify, publish, use, compile, sell, or +distribute this software, either in source code form or as a compiled +binary, for any purpose, commercial or non-commercial, and by any +means. + +In jurisdictions that recognize copyright laws, the author or authors +of this software dedicate any and all copyright interest in the +software to the public domain. We make this dedication for the benefit +of the public at large and to the detriment of our heirs and +successors. We intend this dedication to be an overt act of +relinquishment in perpetuity of all present and future rights to this +software under copyright law. + +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 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. + +For more information, please refer to + +# Apache 2.0 License + + 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/Url-Shortner/node_modules/bson/vendor/text-encoding/README.md b/Url-Shortner/node_modules/bson/vendor/text-encoding/README.md new file mode 100644 index 0000000..b9af0e3 --- /dev/null +++ b/Url-Shortner/node_modules/bson/vendor/text-encoding/README.md @@ -0,0 +1,111 @@ +text-encoding +============== + +This is a polyfill for the [Encoding Living +Standard](https://encoding.spec.whatwg.org/) API for the Web, allowing +encoding and decoding of textual data to and from Typed Array buffers +for binary data in JavaScript. + +By default it adheres to the spec and does not support *encoding* to +legacy encodings, only *decoding*. It is also implemented to match the +specification's algorithms, rather than for performance. The intended +use is within Web pages, so it has no dependency on server frameworks +or particular module schemes. + +Basic examples and tests are included. + +### Install ### + +There are a few ways you can get and use the `text-encoding` library. + +### HTML Page Usage ### + +Clone the repo and include the files directly: + +```html + + + +``` + +This is the only use case the developer cares about. If you want those +fancy module and/or package manager things that are popular these days +you should probably use a different library. + +#### Package Managers #### + +The package is published to **npm** and **bower** as `text-encoding`. +Use through these is not really supported, since they aren't used by +the developer of the library. Using `require()` in interesting ways +probably breaks. Patches welcome, as long as they don't break the +basic use of the files via ` +``` + +To support the legacy encodings (which may be stateful), the +TextEncoder `encode()` method accepts an optional dictionary and +`stream` option, e.g. `encoder.encode(string, {stream: true});` This +is not needed for standard encoding since the input is always in +complete code points. diff --git a/Url-Shortner/node_modules/bson/vendor/text-encoding/index.js b/Url-Shortner/node_modules/bson/vendor/text-encoding/index.js new file mode 100644 index 0000000..cc57d65 --- /dev/null +++ b/Url-Shortner/node_modules/bson/vendor/text-encoding/index.js @@ -0,0 +1,9 @@ +// This is free and unencumbered software released into the public domain. +// See LICENSE.md for more information. + +var encoding = require("./lib/encoding.js"); + +module.exports = { + TextEncoder: encoding.TextEncoder, + TextDecoder: encoding.TextDecoder, +}; diff --git a/Url-Shortner/node_modules/bson/vendor/text-encoding/lib/encoding-indexes.js b/Url-Shortner/node_modules/bson/vendor/text-encoding/lib/encoding-indexes.js new file mode 100644 index 0000000..4f170c3 --- /dev/null +++ b/Url-Shortner/node_modules/bson/vendor/text-encoding/lib/encoding-indexes.js @@ -0,0 +1,47 @@ +(function(global) { + 'use strict'; + + if (typeof module !== "undefined" && module.exports) { + module.exports = global; + } + + global["encoding-indexes"] = +{ + "big5":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,17392,19506,17923,17830,17784,160359,19831,17843,162993,19682,163013,15253,18230,18244,19527,19520,148159,144919,160594,159371,159954,19543,172881,18255,17882,19589,162924,19719,19108,18081,158499,29221,154196,137827,146950,147297,26189,22267,null,32149,22813,166841,15860,38708,162799,23515,138590,23204,13861,171696,23249,23479,23804,26478,34195,170309,29793,29853,14453,138579,145054,155681,16108,153822,15093,31484,40855,147809,166157,143850,133770,143966,17162,33924,40854,37935,18736,34323,22678,38730,37400,31184,31282,26208,27177,34973,29772,31685,26498,31276,21071,36934,13542,29636,155065,29894,40903,22451,18735,21580,16689,145038,22552,31346,162661,35727,18094,159368,16769,155033,31662,140476,40904,140481,140489,140492,40905,34052,144827,16564,40906,17633,175615,25281,28782,40907,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,12736,12737,12738,12739,12740,131340,12741,131281,131277,12742,12743,131275,139240,12744,131274,12745,12746,12747,12748,131342,12749,12750,256,193,461,192,274,201,282,200,332,211,465,210,null,7870,null,7872,202,257,225,462,224,593,275,233,283,232,299,237,464,236,333,243,466,242,363,250,468,249,470,472,474,476,252,null,7871,null,7873,234,609,9178,9179,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,172969,135493,null,25866,null,null,20029,28381,40270,37343,null,null,161589,25745,20250,20264,20392,20822,20852,20892,20964,21153,21160,21307,21326,21457,21464,22242,22768,22788,22791,22834,22836,23398,23454,23455,23706,24198,24635,25993,26622,26628,26725,27982,28860,30005,32420,32428,32442,32455,32463,32479,32518,32567,33402,33487,33647,35270,35774,35810,36710,36711,36718,29713,31996,32205,26950,31433,21031,null,null,null,null,37260,30904,37214,32956,null,36107,33014,133607,null,null,32927,40647,19661,40393,40460,19518,171510,159758,40458,172339,13761,null,28314,33342,29977,null,18705,39532,39567,40857,31111,164972,138698,132560,142054,20004,20097,20096,20103,20159,20203,20279,13388,20413,15944,20483,20616,13437,13459,13477,20870,22789,20955,20988,20997,20105,21113,21136,21287,13767,21417,13649,21424,13651,21442,21539,13677,13682,13953,21651,21667,21684,21689,21712,21743,21784,21795,21800,13720,21823,13733,13759,21975,13765,163204,21797,null,134210,134421,151851,21904,142534,14828,131905,36422,150968,169189,16467,164030,30586,142392,14900,18389,164189,158194,151018,25821,134524,135092,134357,135412,25741,36478,134806,134155,135012,142505,164438,148691,null,134470,170573,164073,18420,151207,142530,39602,14951,169460,16365,13574,152263,169940,161992,142660,40302,38933,null,17369,155813,25780,21731,142668,142282,135287,14843,135279,157402,157462,162208,25834,151634,134211,36456,139681,166732,132913,null,18443,131497,16378,22643,142733,null,148936,132348,155799,134988,134550,21881,16571,17338,null,19124,141926,135325,33194,39157,134556,25465,14846,141173,36288,22177,25724,15939,null,173569,134665,142031,142537,null,135368,145858,14738,14854,164507,13688,155209,139463,22098,134961,142514,169760,13500,27709,151099,null,null,161140,142987,139784,173659,167117,134778,134196,157724,32659,135375,141315,141625,13819,152035,134796,135053,134826,16275,134960,134471,135503,134732,null,134827,134057,134472,135360,135485,16377,140950,25650,135085,144372,161337,142286,134526,134527,142417,142421,14872,134808,135367,134958,173618,158544,167122,167321,167114,38314,21708,33476,21945,null,171715,39974,39606,161630,142830,28992,33133,33004,23580,157042,33076,14231,21343,164029,37302,134906,134671,134775,134907,13789,151019,13833,134358,22191,141237,135369,134672,134776,135288,135496,164359,136277,134777,151120,142756,23124,135197,135198,135413,135414,22428,134673,161428,164557,135093,134779,151934,14083,135094,135552,152280,172733,149978,137274,147831,164476,22681,21096,13850,153405,31666,23400,18432,19244,40743,18919,39967,39821,154484,143677,22011,13810,22153,20008,22786,138177,194680,38737,131206,20059,20155,13630,23587,24401,24516,14586,25164,25909,27514,27701,27706,28780,29227,20012,29357,149737,32594,31035,31993,32595,156266,13505,null,156491,32770,32896,157202,158033,21341,34916,35265,161970,35744,36125,38021,38264,38271,38376,167439,38886,39029,39118,39134,39267,170000,40060,40479,40644,27503,63751,20023,131207,38429,25143,38050,null,20539,28158,171123,40870,15817,34959,147790,28791,23797,19232,152013,13657,154928,24866,166450,36775,37366,29073,26393,29626,144001,172295,15499,137600,19216,30948,29698,20910,165647,16393,27235,172730,16931,34319,133743,31274,170311,166634,38741,28749,21284,139390,37876,30425,166371,40871,30685,20131,20464,20668,20015,20247,40872,21556,32139,22674,22736,138678,24210,24217,24514,141074,25995,144377,26905,27203,146531,27903,null,29184,148741,29580,16091,150035,23317,29881,35715,154788,153237,31379,31724,31939,32364,33528,34199,40873,34960,40874,36537,40875,36815,34143,39392,37409,40876,167353,136255,16497,17058,23066,null,null,null,39016,26475,17014,22333,null,34262,149883,33471,160013,19585,159092,23931,158485,159678,40877,40878,23446,40879,26343,32347,28247,31178,15752,17603,143958,141206,17306,17718,null,23765,146202,35577,23672,15634,144721,23928,40882,29015,17752,147692,138787,19575,14712,13386,131492,158785,35532,20404,131641,22975,33132,38998,170234,24379,134047,null,139713,166253,16642,18107,168057,16135,40883,172469,16632,14294,18167,158790,16764,165554,160767,17773,14548,152730,17761,17691,19849,19579,19830,17898,16328,150287,13921,17630,17597,16877,23870,23880,23894,15868,14351,23972,23993,14368,14392,24130,24253,24357,24451,14600,14612,14655,14669,24791,24893,23781,14729,25015,25017,25039,14776,25132,25232,25317,25368,14840,22193,14851,25570,25595,25607,25690,14923,25792,23829,22049,40863,14999,25990,15037,26111,26195,15090,26258,15138,26390,15170,26532,26624,15192,26698,26756,15218,15217,15227,26889,26947,29276,26980,27039,27013,15292,27094,15325,27237,27252,27249,27266,15340,27289,15346,27307,27317,27348,27382,27521,27585,27626,27765,27818,15563,27906,27910,27942,28033,15599,28068,28081,28181,28184,28201,28294,166336,28347,28386,28378,40831,28392,28393,28452,28468,15686,147265,28545,28606,15722,15733,29111,23705,15754,28716,15761,28752,28756,28783,28799,28809,131877,17345,13809,134872,147159,22462,159443,28990,153568,13902,27042,166889,23412,31305,153825,169177,31333,31357,154028,31419,31408,31426,31427,29137,156813,16842,31450,31453,31466,16879,21682,154625,31499,31573,31529,152334,154878,31650,31599,33692,154548,158847,31696,33825,31634,31672,154912,15789,154725,33938,31738,31750,31797,154817,31812,31875,149634,31910,26237,148856,31945,31943,31974,31860,31987,31989,31950,32359,17693,159300,32093,159446,29837,32137,32171,28981,32179,32210,147543,155689,32228,15635,32245,137209,32229,164717,32285,155937,155994,32366,32402,17195,37996,32295,32576,32577,32583,31030,156368,39393,32663,156497,32675,136801,131176,17756,145254,17667,164666,32762,156809,32773,32776,32797,32808,32815,172167,158915,32827,32828,32865,141076,18825,157222,146915,157416,26405,32935,166472,33031,33050,22704,141046,27775,156824,151480,25831,136330,33304,137310,27219,150117,150165,17530,33321,133901,158290,146814,20473,136445,34018,33634,158474,149927,144688,137075,146936,33450,26907,194964,16859,34123,33488,33562,134678,137140,14017,143741,144730,33403,33506,33560,147083,159139,158469,158615,144846,15807,33565,21996,33669,17675,159141,33708,33729,33747,13438,159444,27223,34138,13462,159298,143087,33880,154596,33905,15827,17636,27303,33866,146613,31064,33960,158614,159351,159299,34014,33807,33681,17568,33939,34020,154769,16960,154816,17731,34100,23282,159385,17703,34163,17686,26559,34326,165413,165435,34241,159880,34306,136578,159949,194994,17770,34344,13896,137378,21495,160666,34430,34673,172280,34798,142375,34737,34778,34831,22113,34412,26710,17935,34885,34886,161248,146873,161252,34910,34972,18011,34996,34997,25537,35013,30583,161551,35207,35210,35238,35241,35239,35260,166437,35303,162084,162493,35484,30611,37374,35472,162393,31465,162618,147343,18195,162616,29052,35596,35615,152624,152933,35647,35660,35661,35497,150138,35728,35739,35503,136927,17941,34895,35995,163156,163215,195028,14117,163155,36054,163224,163261,36114,36099,137488,36059,28764,36113,150729,16080,36215,36265,163842,135188,149898,15228,164284,160012,31463,36525,36534,36547,37588,36633,36653,164709,164882,36773,37635,172703,133712,36787,18730,166366,165181,146875,24312,143970,36857,172052,165564,165121,140069,14720,159447,36919,165180,162494,36961,165228,165387,37032,165651,37060,165606,37038,37117,37223,15088,37289,37316,31916,166195,138889,37390,27807,37441,37474,153017,37561,166598,146587,166668,153051,134449,37676,37739,166625,166891,28815,23235,166626,166629,18789,37444,166892,166969,166911,37747,37979,36540,38277,38310,37926,38304,28662,17081,140922,165592,135804,146990,18911,27676,38523,38550,16748,38563,159445,25050,38582,30965,166624,38589,21452,18849,158904,131700,156688,168111,168165,150225,137493,144138,38705,34370,38710,18959,17725,17797,150249,28789,23361,38683,38748,168405,38743,23370,168427,38751,37925,20688,143543,143548,38793,38815,38833,38846,38848,38866,38880,152684,38894,29724,169011,38911,38901,168989,162170,19153,38964,38963,38987,39014,15118,160117,15697,132656,147804,153350,39114,39095,39112,39111,19199,159015,136915,21936,39137,39142,39148,37752,39225,150057,19314,170071,170245,39413,39436,39483,39440,39512,153381,14020,168113,170965,39648,39650,170757,39668,19470,39700,39725,165376,20532,39732,158120,14531,143485,39760,39744,171326,23109,137315,39822,148043,39938,39935,39948,171624,40404,171959,172434,172459,172257,172323,172511,40318,40323,172340,40462,26760,40388,139611,172435,172576,137531,172595,40249,172217,172724,40592,40597,40606,40610,19764,40618,40623,148324,40641,15200,14821,15645,20274,14270,166955,40706,40712,19350,37924,159138,40727,40726,40761,22175,22154,40773,39352,168075,38898,33919,40802,40809,31452,40846,29206,19390,149877,149947,29047,150008,148296,150097,29598,166874,137466,31135,166270,167478,37737,37875,166468,37612,37761,37835,166252,148665,29207,16107,30578,31299,28880,148595,148472,29054,137199,28835,137406,144793,16071,137349,152623,137208,14114,136955,137273,14049,137076,137425,155467,14115,136896,22363,150053,136190,135848,136134,136374,34051,145062,34051,33877,149908,160101,146993,152924,147195,159826,17652,145134,170397,159526,26617,14131,15381,15847,22636,137506,26640,16471,145215,147681,147595,147727,158753,21707,22174,157361,22162,135135,134056,134669,37830,166675,37788,20216,20779,14361,148534,20156,132197,131967,20299,20362,153169,23144,131499,132043,14745,131850,132116,13365,20265,131776,167603,131701,35546,131596,20120,20685,20749,20386,20227,150030,147082,20290,20526,20588,20609,20428,20453,20568,20732,20825,20827,20829,20830,28278,144789,147001,147135,28018,137348,147081,20904,20931,132576,17629,132259,132242,132241,36218,166556,132878,21081,21156,133235,21217,37742,18042,29068,148364,134176,149932,135396,27089,134685,29817,16094,29849,29716,29782,29592,19342,150204,147597,21456,13700,29199,147657,21940,131909,21709,134086,22301,37469,38644,37734,22493,22413,22399,13886,22731,23193,166470,136954,137071,136976,23084,22968,37519,23166,23247,23058,153926,137715,137313,148117,14069,27909,29763,23073,155267,23169,166871,132115,37856,29836,135939,28933,18802,37896,166395,37821,14240,23582,23710,24158,24136,137622,137596,146158,24269,23375,137475,137476,14081,137376,14045,136958,14035,33066,166471,138682,144498,166312,24332,24334,137511,137131,23147,137019,23364,34324,161277,34912,24702,141408,140843,24539,16056,140719,140734,168072,159603,25024,131134,131142,140827,24985,24984,24693,142491,142599,149204,168269,25713,149093,142186,14889,142114,144464,170218,142968,25399,173147,25782,25393,25553,149987,142695,25252,142497,25659,25963,26994,15348,143502,144045,149897,144043,21773,144096,137433,169023,26318,144009,143795,15072,16784,152964,166690,152975,136956,152923,152613,30958,143619,137258,143924,13412,143887,143746,148169,26254,159012,26219,19347,26160,161904,138731,26211,144082,144097,26142,153714,14545,145466,145340,15257,145314,144382,29904,15254,26511,149034,26806,26654,15300,27326,14435,145365,148615,27187,27218,27337,27397,137490,25873,26776,27212,15319,27258,27479,147392,146586,37792,37618,166890,166603,37513,163870,166364,37991,28069,28427,149996,28007,147327,15759,28164,147516,23101,28170,22599,27940,30786,28987,148250,148086,28913,29264,29319,29332,149391,149285,20857,150180,132587,29818,147192,144991,150090,149783,155617,16134,16049,150239,166947,147253,24743,16115,29900,29756,37767,29751,17567,159210,17745,30083,16227,150745,150790,16216,30037,30323,173510,15129,29800,166604,149931,149902,15099,15821,150094,16127,149957,149747,37370,22322,37698,166627,137316,20703,152097,152039,30584,143922,30478,30479,30587,149143,145281,14942,149744,29752,29851,16063,150202,150215,16584,150166,156078,37639,152961,30750,30861,30856,30930,29648,31065,161601,153315,16654,31131,33942,31141,27181,147194,31290,31220,16750,136934,16690,37429,31217,134476,149900,131737,146874,137070,13719,21867,13680,13994,131540,134157,31458,23129,141045,154287,154268,23053,131675,30960,23082,154566,31486,16889,31837,31853,16913,154547,155324,155302,31949,150009,137136,31886,31868,31918,27314,32220,32263,32211,32590,156257,155996,162632,32151,155266,17002,158581,133398,26582,131150,144847,22468,156690,156664,149858,32733,31527,133164,154345,154947,31500,155150,39398,34373,39523,27164,144447,14818,150007,157101,39455,157088,33920,160039,158929,17642,33079,17410,32966,33033,33090,157620,39107,158274,33378,33381,158289,33875,159143,34320,160283,23174,16767,137280,23339,137377,23268,137432,34464,195004,146831,34861,160802,23042,34926,20293,34951,35007,35046,35173,35149,153219,35156,161669,161668,166901,166873,166812,166393,16045,33955,18165,18127,14322,35389,35356,169032,24397,37419,148100,26068,28969,28868,137285,40301,35999,36073,163292,22938,30659,23024,17262,14036,36394,36519,150537,36656,36682,17140,27736,28603,140065,18587,28537,28299,137178,39913,14005,149807,37051,37015,21873,18694,37307,37892,166475,16482,166652,37927,166941,166971,34021,35371,38297,38311,38295,38294,167220,29765,16066,149759,150082,148458,16103,143909,38543,167655,167526,167525,16076,149997,150136,147438,29714,29803,16124,38721,168112,26695,18973,168083,153567,38749,37736,166281,166950,166703,156606,37562,23313,35689,18748,29689,147995,38811,38769,39224,134950,24001,166853,150194,38943,169178,37622,169431,37349,17600,166736,150119,166756,39132,166469,16128,37418,18725,33812,39227,39245,162566,15869,39323,19311,39338,39516,166757,153800,27279,39457,23294,39471,170225,19344,170312,39356,19389,19351,37757,22642,135938,22562,149944,136424,30788,141087,146872,26821,15741,37976,14631,24912,141185,141675,24839,40015,40019,40059,39989,39952,39807,39887,171565,39839,172533,172286,40225,19630,147716,40472,19632,40204,172468,172269,172275,170287,40357,33981,159250,159711,158594,34300,17715,159140,159364,159216,33824,34286,159232,145367,155748,31202,144796,144960,18733,149982,15714,37851,37566,37704,131775,30905,37495,37965,20452,13376,36964,152925,30781,30804,30902,30795,137047,143817,149825,13978,20338,28634,28633,28702,28702,21524,147893,22459,22771,22410,40214,22487,28980,13487,147884,29163,158784,151447,23336,137141,166473,24844,23246,23051,17084,148616,14124,19323,166396,37819,37816,137430,134941,33906,158912,136211,148218,142374,148417,22932,146871,157505,32168,155995,155812,149945,149899,166394,37605,29666,16105,29876,166755,137375,16097,150195,27352,29683,29691,16086,150078,150164,137177,150118,132007,136228,149989,29768,149782,28837,149878,37508,29670,37727,132350,37681,166606,166422,37766,166887,153045,18741,166530,29035,149827,134399,22180,132634,134123,134328,21762,31172,137210,32254,136898,150096,137298,17710,37889,14090,166592,149933,22960,137407,137347,160900,23201,14050,146779,14000,37471,23161,166529,137314,37748,15565,133812,19094,14730,20724,15721,15692,136092,29045,17147,164376,28175,168164,17643,27991,163407,28775,27823,15574,147437,146989,28162,28428,15727,132085,30033,14012,13512,18048,16090,18545,22980,37486,18750,36673,166940,158656,22546,22472,14038,136274,28926,148322,150129,143331,135856,140221,26809,26983,136088,144613,162804,145119,166531,145366,144378,150687,27162,145069,158903,33854,17631,17614,159014,159057,158850,159710,28439,160009,33597,137018,33773,158848,159827,137179,22921,23170,137139,23137,23153,137477,147964,14125,23023,137020,14023,29070,37776,26266,148133,23150,23083,148115,27179,147193,161590,148571,148170,28957,148057,166369,20400,159016,23746,148686,163405,148413,27148,148054,135940,28838,28979,148457,15781,27871,194597,150095,32357,23019,23855,15859,24412,150109,137183,32164,33830,21637,146170,144128,131604,22398,133333,132633,16357,139166,172726,28675,168283,23920,29583,31955,166489,168992,20424,32743,29389,29456,162548,29496,29497,153334,29505,29512,16041,162584,36972,29173,149746,29665,33270,16074,30476,16081,27810,22269,29721,29726,29727,16098,16112,16116,16122,29907,16142,16211,30018,30061,30066,30093,16252,30152,30172,16320,30285,16343,30324,16348,30330,151388,29064,22051,35200,22633,16413,30531,16441,26465,16453,13787,30616,16490,16495,23646,30654,30667,22770,30744,28857,30748,16552,30777,30791,30801,30822,33864,152885,31027,26627,31026,16643,16649,31121,31129,36795,31238,36796,16743,31377,16818,31420,33401,16836,31439,31451,16847,20001,31586,31596,31611,31762,31771,16992,17018,31867,31900,17036,31928,17044,31981,36755,28864,134351,32207,32212,32208,32253,32686,32692,29343,17303,32800,32805,31545,32814,32817,32852,15820,22452,28832,32951,33001,17389,33036,29482,33038,33042,30048,33044,17409,15161,33110,33113,33114,17427,22586,33148,33156,17445,33171,17453,33189,22511,33217,33252,33364,17551,33446,33398,33482,33496,33535,17584,33623,38505,27018,33797,28917,33892,24803,33928,17668,33982,34017,34040,34064,34104,34130,17723,34159,34160,34272,17783,34418,34450,34482,34543,38469,34699,17926,17943,34990,35071,35108,35143,35217,162151,35369,35384,35476,35508,35921,36052,36082,36124,18328,22623,36291,18413,20206,36410,21976,22356,36465,22005,36528,18487,36558,36578,36580,36589,36594,36791,36801,36810,36812,36915,39364,18605,39136,37395,18718,37416,37464,37483,37553,37550,37567,37603,37611,37619,37620,37629,37699,37764,37805,18757,18769,40639,37911,21249,37917,37933,37950,18794,37972,38009,38189,38306,18855,38388,38451,18917,26528,18980,38720,18997,38834,38850,22100,19172,24808,39097,19225,39153,22596,39182,39193,20916,39196,39223,39234,39261,39266,19312,39365,19357,39484,39695,31363,39785,39809,39901,39921,39924,19565,39968,14191,138178,40265,39994,40702,22096,40339,40381,40384,40444,38134,36790,40571,40620,40625,40637,40646,38108,40674,40689,40696,31432,40772,131220,131767,132000,26906,38083,22956,132311,22592,38081,14265,132565,132629,132726,136890,22359,29043,133826,133837,134079,21610,194619,134091,21662,134139,134203,134227,134245,134268,24807,134285,22138,134325,134365,134381,134511,134578,134600,26965,39983,34725,134660,134670,134871,135056,134957,134771,23584,135100,24075,135260,135247,135286,26398,135291,135304,135318,13895,135359,135379,135471,135483,21348,33965,135907,136053,135990,35713,136567,136729,137155,137159,20088,28859,137261,137578,137773,137797,138282,138352,138412,138952,25283,138965,139029,29080,26709,139333,27113,14024,139900,140247,140282,141098,141425,141647,33533,141671,141715,142037,35237,142056,36768,142094,38840,142143,38983,39613,142412,null,142472,142519,154600,142600,142610,142775,142741,142914,143220,143308,143411,143462,144159,144350,24497,26184,26303,162425,144743,144883,29185,149946,30679,144922,145174,32391,131910,22709,26382,26904,146087,161367,155618,146961,147129,161278,139418,18640,19128,147737,166554,148206,148237,147515,148276,148374,150085,132554,20946,132625,22943,138920,15294,146687,148484,148694,22408,149108,14747,149295,165352,170441,14178,139715,35678,166734,39382,149522,149755,150037,29193,150208,134264,22885,151205,151430,132985,36570,151596,21135,22335,29041,152217,152601,147274,150183,21948,152646,152686,158546,37332,13427,152895,161330,152926,18200,152930,152934,153543,149823,153693,20582,13563,144332,24798,153859,18300,166216,154286,154505,154630,138640,22433,29009,28598,155906,162834,36950,156082,151450,35682,156674,156746,23899,158711,36662,156804,137500,35562,150006,156808,147439,156946,19392,157119,157365,141083,37989,153569,24981,23079,194765,20411,22201,148769,157436,20074,149812,38486,28047,158909,13848,35191,157593,157806,156689,157790,29151,157895,31554,168128,133649,157990,37124,158009,31301,40432,158202,39462,158253,13919,156777,131105,31107,158260,158555,23852,144665,33743,158621,18128,158884,30011,34917,159150,22710,14108,140685,159819,160205,15444,160384,160389,37505,139642,160395,37680,160486,149968,27705,38047,160848,134904,34855,35061,141606,164979,137137,28344,150058,137248,14756,14009,23568,31203,17727,26294,171181,170148,35139,161740,161880,22230,16607,136714,14753,145199,164072,136133,29101,33638,162269,168360,23143,19639,159919,166315,162301,162314,162571,163174,147834,31555,31102,163849,28597,172767,27139,164632,21410,159239,37823,26678,38749,164207,163875,158133,136173,143919,163912,23941,166960,163971,22293,38947,166217,23979,149896,26046,27093,21458,150181,147329,15377,26422,163984,164084,164142,139169,164175,164233,164271,164378,164614,164655,164746,13770,164968,165546,18682,25574,166230,30728,37461,166328,17394,166375,17375,166376,166726,166868,23032,166921,36619,167877,168172,31569,168208,168252,15863,168286,150218,36816,29327,22155,169191,169449,169392,169400,169778,170193,170313,170346,170435,170536,170766,171354,171419,32415,171768,171811,19620,38215,172691,29090,172799,19857,36882,173515,19868,134300,36798,21953,36794,140464,36793,150163,17673,32383,28502,27313,20202,13540,166700,161949,14138,36480,137205,163876,166764,166809,162366,157359,15851,161365,146615,153141,153942,20122,155265,156248,22207,134765,36366,23405,147080,150686,25566,25296,137206,137339,25904,22061,154698,21530,152337,15814,171416,19581,22050,22046,32585,155352,22901,146752,34672,19996,135146,134473,145082,33047,40286,36120,30267,40005,30286,30649,37701,21554,33096,33527,22053,33074,33816,32957,21994,31074,22083,21526,134813,13774,22021,22001,26353,164578,13869,30004,22000,21946,21655,21874,134209,134294,24272,151880,134774,142434,134818,40619,32090,21982,135285,25245,38765,21652,36045,29174,37238,25596,25529,25598,21865,142147,40050,143027,20890,13535,134567,20903,21581,21790,21779,30310,36397,157834,30129,32950,34820,34694,35015,33206,33820,135361,17644,29444,149254,23440,33547,157843,22139,141044,163119,147875,163187,159440,160438,37232,135641,37384,146684,173737,134828,134905,29286,138402,18254,151490,163833,135147,16634,40029,25887,142752,18675,149472,171388,135148,134666,24674,161187,135149,null,155720,135559,29091,32398,40272,19994,19972,13687,23309,27826,21351,13996,14812,21373,13989,149016,22682,150382,33325,21579,22442,154261,133497,null,14930,140389,29556,171692,19721,39917,146686,171824,19547,151465,169374,171998,33884,146870,160434,157619,145184,25390,32037,147191,146988,14890,36872,21196,15988,13946,17897,132238,30272,23280,134838,30842,163630,22695,16575,22140,39819,23924,30292,173108,40581,19681,30201,14331,24857,143578,148466,null,22109,135849,22439,149859,171526,21044,159918,13741,27722,40316,31830,39737,22494,137068,23635,25811,169168,156469,160100,34477,134440,159010,150242,134513,null,20990,139023,23950,38659,138705,40577,36940,31519,39682,23761,31651,25192,25397,39679,31695,39722,31870,39726,31810,31878,39957,31740,39689,40727,39963,149822,40794,21875,23491,20477,40600,20466,21088,15878,21201,22375,20566,22967,24082,38856,40363,36700,21609,38836,39232,38842,21292,24880,26924,21466,39946,40194,19515,38465,27008,20646,30022,137069,39386,21107,null,37209,38529,37212,null,37201,167575,25471,159011,27338,22033,37262,30074,25221,132092,29519,31856,154657,146685,null,149785,30422,39837,20010,134356,33726,34882,null,23626,27072,20717,22394,21023,24053,20174,27697,131570,20281,21660,21722,21146,36226,13822,24332,13811,null,27474,37244,40869,39831,38958,39092,39610,40616,40580,29050,31508,null,27642,34840,32632,null,22048,173642,36471,40787,null,36308,36431,40476,36353,25218,164733,36392,36469,31443,150135,31294,30936,27882,35431,30215,166490,40742,27854,34774,30147,172722,30803,194624,36108,29410,29553,35629,29442,29937,36075,150203,34351,24506,34976,17591,null,137275,159237,null,35454,140571,null,24829,30311,39639,40260,37742,39823,34805,null,34831,36087,29484,38689,39856,13782,29362,19463,31825,39242,155993,24921,19460,40598,24957,null,22367,24943,25254,25145,25294,14940,25058,21418,144373,25444,26626,13778,23895,166850,36826,167481,null,20697,138566,30982,21298,38456,134971,16485,null,30718,null,31938,155418,31962,31277,32870,32867,32077,29957,29938,35220,33306,26380,32866,160902,32859,29936,33027,30500,35209,157644,30035,159441,34729,34766,33224,34700,35401,36013,35651,30507,29944,34010,13877,27058,36262,null,35241,29800,28089,34753,147473,29927,15835,29046,24740,24988,15569,29026,24695,null,32625,166701,29264,24809,19326,21024,15384,146631,155351,161366,152881,137540,135934,170243,159196,159917,23745,156077,166415,145015,131310,157766,151310,17762,23327,156492,40784,40614,156267,12288,65292,12289,12290,65294,8231,65307,65306,65311,65281,65072,8230,8229,65104,65105,65106,183,65108,65109,65110,65111,65372,8211,65073,8212,65075,9588,65076,65103,65288,65289,65077,65078,65371,65373,65079,65080,12308,12309,65081,65082,12304,12305,65083,65084,12298,12299,65085,65086,12296,12297,65087,65088,12300,12301,65089,65090,12302,12303,65091,65092,65113,65114,65115,65116,65117,65118,8216,8217,8220,8221,12317,12318,8245,8242,65283,65286,65290,8251,167,12291,9675,9679,9651,9650,9678,9734,9733,9671,9670,9633,9632,9661,9660,12963,8453,175,65507,65343,717,65097,65098,65101,65102,65099,65100,65119,65120,65121,65291,65293,215,247,177,8730,65308,65310,65309,8806,8807,8800,8734,8786,8801,65122,65123,65124,65125,65126,65374,8745,8746,8869,8736,8735,8895,13266,13265,8747,8750,8757,8756,9792,9794,8853,8857,8593,8595,8592,8594,8598,8599,8601,8600,8741,8739,65295,65340,8725,65128,65284,65509,12306,65504,65505,65285,65312,8451,8457,65129,65130,65131,13269,13212,13213,13214,13262,13217,13198,13199,13252,176,20825,20827,20830,20829,20833,20835,21991,29929,31950,9601,9602,9603,9604,9605,9606,9607,9608,9615,9614,9613,9612,9611,9610,9609,9532,9524,9516,9508,9500,9620,9472,9474,9621,9484,9488,9492,9496,9581,9582,9584,9583,9552,9566,9578,9569,9698,9699,9701,9700,9585,9586,9587,65296,65297,65298,65299,65300,65301,65302,65303,65304,65305,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,12321,12322,12323,12324,12325,12326,12327,12328,12329,21313,21316,21317,65313,65314,65315,65316,65317,65318,65319,65320,65321,65322,65323,65324,65325,65326,65327,65328,65329,65330,65331,65332,65333,65334,65335,65336,65337,65338,65345,65346,65347,65348,65349,65350,65351,65352,65353,65354,65355,65356,65357,65358,65359,65360,65361,65362,65363,65364,65365,65366,65367,65368,65369,65370,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,963,964,965,966,967,968,969,12549,12550,12551,12552,12553,12554,12555,12556,12557,12558,12559,12560,12561,12562,12563,12564,12565,12566,12567,12568,12569,12570,12571,12572,12573,12574,12575,12576,12577,12578,12579,12580,12581,12582,12583,12584,12585,729,713,714,711,715,9216,9217,9218,9219,9220,9221,9222,9223,9224,9225,9226,9227,9228,9229,9230,9231,9232,9233,9234,9235,9236,9237,9238,9239,9240,9241,9242,9243,9244,9245,9246,9247,9249,8364,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,19968,20057,19969,19971,20035,20061,20102,20108,20154,20799,20837,20843,20960,20992,20993,21147,21269,21313,21340,21448,19977,19979,19976,19978,20011,20024,20961,20037,20040,20063,20062,20110,20129,20800,20995,21242,21315,21449,21475,22303,22763,22805,22823,22899,23376,23377,23379,23544,23567,23586,23608,23665,24029,24037,24049,24050,24051,24062,24178,24318,24331,24339,25165,19985,19984,19981,20013,20016,20025,20043,23609,20104,20113,20117,20114,20116,20130,20161,20160,20163,20166,20167,20173,20170,20171,20164,20803,20801,20839,20845,20846,20844,20887,20982,20998,20999,21000,21243,21246,21247,21270,21305,21320,21319,21317,21342,21380,21451,21450,21453,22764,22825,22827,22826,22829,23380,23569,23588,23610,23663,24052,24187,24319,24340,24341,24515,25096,25142,25163,25166,25903,25991,26007,26020,26041,26085,26352,26376,26408,27424,27490,27513,27595,27604,27611,27663,27700,28779,29226,29238,29243,29255,29273,29275,29356,29579,19993,19990,19989,19988,19992,20027,20045,20047,20046,20197,20184,20180,20181,20182,20183,20195,20196,20185,20190,20805,20804,20873,20874,20908,20985,20986,20984,21002,21152,21151,21253,21254,21271,21277,20191,21322,21321,21345,21344,21359,21358,21435,21487,21476,21491,21484,21486,21481,21480,21500,21496,21493,21483,21478,21482,21490,21489,21488,21477,21485,21499,22235,22234,22806,22830,22833,22900,22902,23381,23427,23612,24040,24039,24038,24066,24067,24179,24188,24321,24344,24343,24517,25098,25171,25172,25170,25169,26021,26086,26414,26412,26410,26411,26413,27491,27597,27665,27664,27704,27713,27712,27710,29359,29572,29577,29916,29926,29976,29983,29992,29993,30000,30001,30002,30003,30091,30333,30382,30399,30446,30683,30690,30707,31034,31166,31348,31435,19998,19999,20050,20051,20073,20121,20132,20134,20133,20223,20233,20249,20234,20245,20237,20240,20241,20239,20210,20214,20219,20208,20211,20221,20225,20235,20809,20807,20806,20808,20840,20849,20877,20912,21015,21009,21010,21006,21014,21155,21256,21281,21280,21360,21361,21513,21519,21516,21514,21520,21505,21515,21508,21521,21517,21512,21507,21518,21510,21522,22240,22238,22237,22323,22320,22312,22317,22316,22319,22313,22809,22810,22839,22840,22916,22904,22915,22909,22905,22914,22913,23383,23384,23431,23432,23429,23433,23546,23574,23673,24030,24070,24182,24180,24335,24347,24537,24534,25102,25100,25101,25104,25187,25179,25176,25910,26089,26088,26092,26093,26354,26355,26377,26429,26420,26417,26421,27425,27492,27515,27670,27741,27735,27737,27743,27744,27728,27733,27745,27739,27725,27726,28784,29279,29277,30334,31481,31859,31992,32566,32650,32701,32769,32771,32780,32786,32819,32895,32905,32907,32908,33251,33258,33267,33276,33292,33307,33311,33390,33394,33406,34411,34880,34892,34915,35199,38433,20018,20136,20301,20303,20295,20311,20318,20276,20315,20309,20272,20304,20305,20285,20282,20280,20291,20308,20284,20294,20323,20316,20320,20271,20302,20278,20313,20317,20296,20314,20812,20811,20813,20853,20918,20919,21029,21028,21033,21034,21032,21163,21161,21162,21164,21283,21363,21365,21533,21549,21534,21566,21542,21582,21543,21574,21571,21555,21576,21570,21531,21545,21578,21561,21563,21560,21550,21557,21558,21536,21564,21568,21553,21547,21535,21548,22250,22256,22244,22251,22346,22353,22336,22349,22343,22350,22334,22352,22351,22331,22767,22846,22941,22930,22952,22942,22947,22937,22934,22925,22948,22931,22922,22949,23389,23388,23386,23387,23436,23435,23439,23596,23616,23617,23615,23614,23696,23697,23700,23692,24043,24076,24207,24199,24202,24311,24324,24351,24420,24418,24439,24441,24536,24524,24535,24525,24561,24555,24568,24554,25106,25105,25220,25239,25238,25216,25206,25225,25197,25226,25212,25214,25209,25203,25234,25199,25240,25198,25237,25235,25233,25222,25913,25915,25912,26097,26356,26463,26446,26447,26448,26449,26460,26454,26462,26441,26438,26464,26451,26455,27493,27599,27714,27742,27801,27777,27784,27785,27781,27803,27754,27770,27792,27760,27788,27752,27798,27794,27773,27779,27762,27774,27764,27782,27766,27789,27796,27800,27778,28790,28796,28797,28792,29282,29281,29280,29380,29378,29590,29996,29995,30007,30008,30338,30447,30691,31169,31168,31167,31350,31995,32597,32918,32915,32925,32920,32923,32922,32946,33391,33426,33419,33421,35211,35282,35328,35895,35910,35925,35997,36196,36208,36275,36523,36554,36763,36784,36802,36806,36805,36804,24033,37009,37026,37034,37030,37027,37193,37318,37324,38450,38446,38449,38442,38444,20006,20054,20083,20107,20123,20126,20139,20140,20335,20381,20365,20339,20351,20332,20379,20363,20358,20355,20336,20341,20360,20329,20347,20374,20350,20367,20369,20346,20820,20818,20821,20841,20855,20854,20856,20925,20989,21051,21048,21047,21050,21040,21038,21046,21057,21182,21179,21330,21332,21331,21329,21350,21367,21368,21369,21462,21460,21463,21619,21621,21654,21624,21653,21632,21627,21623,21636,21650,21638,21628,21648,21617,21622,21644,21658,21602,21608,21643,21629,21646,22266,22403,22391,22378,22377,22369,22374,22372,22396,22812,22857,22855,22856,22852,22868,22974,22971,22996,22969,22958,22993,22982,22992,22989,22987,22995,22986,22959,22963,22994,22981,23391,23396,23395,23447,23450,23448,23452,23449,23451,23578,23624,23621,23622,23735,23713,23736,23721,23723,23729,23731,24088,24090,24086,24085,24091,24081,24184,24218,24215,24220,24213,24214,24310,24358,24359,24361,24448,24449,24447,24444,24541,24544,24573,24565,24575,24591,24596,24623,24629,24598,24618,24597,24609,24615,24617,24619,24603,25110,25109,25151,25150,25152,25215,25289,25292,25284,25279,25282,25273,25298,25307,25259,25299,25300,25291,25288,25256,25277,25276,25296,25305,25287,25293,25269,25306,25265,25304,25302,25303,25286,25260,25294,25918,26023,26044,26106,26132,26131,26124,26118,26114,26126,26112,26127,26133,26122,26119,26381,26379,26477,26507,26517,26481,26524,26483,26487,26503,26525,26519,26479,26480,26495,26505,26494,26512,26485,26522,26515,26492,26474,26482,27427,27494,27495,27519,27667,27675,27875,27880,27891,27825,27852,27877,27827,27837,27838,27836,27874,27819,27861,27859,27832,27844,27833,27841,27822,27863,27845,27889,27839,27835,27873,27867,27850,27820,27887,27868,27862,27872,28821,28814,28818,28810,28825,29228,29229,29240,29256,29287,29289,29376,29390,29401,29399,29392,29609,29608,29599,29611,29605,30013,30109,30105,30106,30340,30402,30450,30452,30693,30717,31038,31040,31041,31177,31176,31354,31353,31482,31998,32596,32652,32651,32773,32954,32933,32930,32945,32929,32939,32937,32948,32938,32943,33253,33278,33293,33459,33437,33433,33453,33469,33439,33465,33457,33452,33445,33455,33464,33443,33456,33470,33463,34382,34417,21021,34920,36555,36814,36820,36817,37045,37048,37041,37046,37319,37329,38263,38272,38428,38464,38463,38459,38468,38466,38585,38632,38738,38750,20127,20141,20142,20449,20405,20399,20415,20448,20433,20431,20445,20419,20406,20440,20447,20426,20439,20398,20432,20420,20418,20442,20430,20446,20407,20823,20882,20881,20896,21070,21059,21066,21069,21068,21067,21063,21191,21193,21187,21185,21261,21335,21371,21402,21467,21676,21696,21672,21710,21705,21688,21670,21683,21703,21698,21693,21674,21697,21700,21704,21679,21675,21681,21691,21673,21671,21695,22271,22402,22411,22432,22435,22434,22478,22446,22419,22869,22865,22863,22862,22864,23004,23000,23039,23011,23016,23043,23013,23018,23002,23014,23041,23035,23401,23459,23462,23460,23458,23461,23553,23630,23631,23629,23627,23769,23762,24055,24093,24101,24095,24189,24224,24230,24314,24328,24365,24421,24456,24453,24458,24459,24455,24460,24457,24594,24605,24608,24613,24590,24616,24653,24688,24680,24674,24646,24643,24684,24683,24682,24676,25153,25308,25366,25353,25340,25325,25345,25326,25341,25351,25329,25335,25327,25324,25342,25332,25361,25346,25919,25925,26027,26045,26082,26149,26157,26144,26151,26159,26143,26152,26161,26148,26359,26623,26579,26609,26580,26576,26604,26550,26543,26613,26601,26607,26564,26577,26548,26586,26597,26552,26575,26590,26611,26544,26585,26594,26589,26578,27498,27523,27526,27573,27602,27607,27679,27849,27915,27954,27946,27969,27941,27916,27953,27934,27927,27963,27965,27966,27958,27931,27893,27961,27943,27960,27945,27950,27957,27918,27947,28843,28858,28851,28844,28847,28845,28856,28846,28836,29232,29298,29295,29300,29417,29408,29409,29623,29642,29627,29618,29645,29632,29619,29978,29997,30031,30028,30030,30027,30123,30116,30117,30114,30115,30328,30342,30343,30344,30408,30406,30403,30405,30465,30457,30456,30473,30475,30462,30460,30471,30684,30722,30740,30732,30733,31046,31049,31048,31047,31161,31162,31185,31186,31179,31359,31361,31487,31485,31869,32002,32005,32000,32009,32007,32004,32006,32568,32654,32703,32772,32784,32781,32785,32822,32982,32997,32986,32963,32964,32972,32993,32987,32974,32990,32996,32989,33268,33314,33511,33539,33541,33507,33499,33510,33540,33509,33538,33545,33490,33495,33521,33537,33500,33492,33489,33502,33491,33503,33519,33542,34384,34425,34427,34426,34893,34923,35201,35284,35336,35330,35331,35998,36000,36212,36211,36276,36557,36556,36848,36838,36834,36842,36837,36845,36843,36836,36840,37066,37070,37057,37059,37195,37194,37325,38274,38480,38475,38476,38477,38754,38761,38859,38893,38899,38913,39080,39131,39135,39318,39321,20056,20147,20492,20493,20515,20463,20518,20517,20472,20521,20502,20486,20540,20511,20506,20498,20497,20474,20480,20500,20520,20465,20513,20491,20505,20504,20467,20462,20525,20522,20478,20523,20489,20860,20900,20901,20898,20941,20940,20934,20939,21078,21084,21076,21083,21085,21290,21375,21407,21405,21471,21736,21776,21761,21815,21756,21733,21746,21766,21754,21780,21737,21741,21729,21769,21742,21738,21734,21799,21767,21757,21775,22275,22276,22466,22484,22475,22467,22537,22799,22871,22872,22874,23057,23064,23068,23071,23067,23059,23020,23072,23075,23081,23077,23052,23049,23403,23640,23472,23475,23478,23476,23470,23477,23481,23480,23556,23633,23637,23632,23789,23805,23803,23786,23784,23792,23798,23809,23796,24046,24109,24107,24235,24237,24231,24369,24466,24465,24464,24665,24675,24677,24656,24661,24685,24681,24687,24708,24735,24730,24717,24724,24716,24709,24726,25159,25331,25352,25343,25422,25406,25391,25429,25410,25414,25423,25417,25402,25424,25405,25386,25387,25384,25421,25420,25928,25929,26009,26049,26053,26178,26185,26191,26179,26194,26188,26181,26177,26360,26388,26389,26391,26657,26680,26696,26694,26707,26681,26690,26708,26665,26803,26647,26700,26705,26685,26612,26704,26688,26684,26691,26666,26693,26643,26648,26689,27530,27529,27575,27683,27687,27688,27686,27684,27888,28010,28053,28040,28039,28006,28024,28023,27993,28051,28012,28041,28014,27994,28020,28009,28044,28042,28025,28037,28005,28052,28874,28888,28900,28889,28872,28879,29241,29305,29436,29433,29437,29432,29431,29574,29677,29705,29678,29664,29674,29662,30036,30045,30044,30042,30041,30142,30149,30151,30130,30131,30141,30140,30137,30146,30136,30347,30384,30410,30413,30414,30505,30495,30496,30504,30697,30768,30759,30776,30749,30772,30775,30757,30765,30752,30751,30770,31061,31056,31072,31071,31062,31070,31069,31063,31066,31204,31203,31207,31199,31206,31209,31192,31364,31368,31449,31494,31505,31881,32033,32023,32011,32010,32032,32034,32020,32016,32021,32026,32028,32013,32025,32027,32570,32607,32660,32709,32705,32774,32792,32789,32793,32791,32829,32831,33009,33026,33008,33029,33005,33012,33030,33016,33011,33032,33021,33034,33020,33007,33261,33260,33280,33296,33322,33323,33320,33324,33467,33579,33618,33620,33610,33592,33616,33609,33589,33588,33615,33586,33593,33590,33559,33600,33585,33576,33603,34388,34442,34474,34451,34468,34473,34444,34467,34460,34928,34935,34945,34946,34941,34937,35352,35344,35342,35340,35349,35338,35351,35347,35350,35343,35345,35912,35962,35961,36001,36002,36215,36524,36562,36564,36559,36785,36865,36870,36855,36864,36858,36852,36867,36861,36869,36856,37013,37089,37085,37090,37202,37197,37196,37336,37341,37335,37340,37337,38275,38498,38499,38497,38491,38493,38500,38488,38494,38587,39138,39340,39592,39640,39717,39730,39740,20094,20602,20605,20572,20551,20547,20556,20570,20553,20581,20598,20558,20565,20597,20596,20599,20559,20495,20591,20589,20828,20885,20976,21098,21103,21202,21209,21208,21205,21264,21263,21273,21311,21312,21310,21443,26364,21830,21866,21862,21828,21854,21857,21827,21834,21809,21846,21839,21845,21807,21860,21816,21806,21852,21804,21859,21811,21825,21847,22280,22283,22281,22495,22533,22538,22534,22496,22500,22522,22530,22581,22519,22521,22816,22882,23094,23105,23113,23142,23146,23104,23100,23138,23130,23110,23114,23408,23495,23493,23492,23490,23487,23494,23561,23560,23559,23648,23644,23645,23815,23814,23822,23835,23830,23842,23825,23849,23828,23833,23844,23847,23831,24034,24120,24118,24115,24119,24247,24248,24246,24245,24254,24373,24375,24407,24428,24425,24427,24471,24473,24478,24472,24481,24480,24476,24703,24739,24713,24736,24744,24779,24756,24806,24765,24773,24763,24757,24796,24764,24792,24789,24774,24799,24760,24794,24775,25114,25115,25160,25504,25511,25458,25494,25506,25509,25463,25447,25496,25514,25457,25513,25481,25475,25499,25451,25512,25476,25480,25497,25505,25516,25490,25487,25472,25467,25449,25448,25466,25949,25942,25937,25945,25943,21855,25935,25944,25941,25940,26012,26011,26028,26063,26059,26060,26062,26205,26202,26212,26216,26214,26206,26361,21207,26395,26753,26799,26786,26771,26805,26751,26742,26801,26791,26775,26800,26755,26820,26797,26758,26757,26772,26781,26792,26783,26785,26754,27442,27578,27627,27628,27691,28046,28092,28147,28121,28082,28129,28108,28132,28155,28154,28165,28103,28107,28079,28113,28078,28126,28153,28088,28151,28149,28101,28114,28186,28085,28122,28139,28120,28138,28145,28142,28136,28102,28100,28074,28140,28095,28134,28921,28937,28938,28925,28911,29245,29309,29313,29468,29467,29462,29459,29465,29575,29701,29706,29699,29702,29694,29709,29920,29942,29943,29980,29986,30053,30054,30050,30064,30095,30164,30165,30133,30154,30157,30350,30420,30418,30427,30519,30526,30524,30518,30520,30522,30827,30787,30798,31077,31080,31085,31227,31378,31381,31520,31528,31515,31532,31526,31513,31518,31534,31890,31895,31893,32070,32067,32113,32046,32057,32060,32064,32048,32051,32068,32047,32066,32050,32049,32573,32670,32666,32716,32718,32722,32796,32842,32838,33071,33046,33059,33067,33065,33072,33060,33282,33333,33335,33334,33337,33678,33694,33688,33656,33698,33686,33725,33707,33682,33674,33683,33673,33696,33655,33659,33660,33670,33703,34389,24426,34503,34496,34486,34500,34485,34502,34507,34481,34479,34505,34899,34974,34952,34987,34962,34966,34957,34955,35219,35215,35370,35357,35363,35365,35377,35373,35359,35355,35362,35913,35930,36009,36012,36011,36008,36010,36007,36199,36198,36286,36282,36571,36575,36889,36877,36890,36887,36899,36895,36893,36880,36885,36894,36896,36879,36898,36886,36891,36884,37096,37101,37117,37207,37326,37365,37350,37347,37351,37357,37353,38281,38506,38517,38515,38520,38512,38516,38518,38519,38508,38592,38634,38633,31456,31455,38914,38915,39770,40165,40565,40575,40613,40635,20642,20621,20613,20633,20625,20608,20630,20632,20634,26368,20977,21106,21108,21109,21097,21214,21213,21211,21338,21413,21883,21888,21927,21884,21898,21917,21912,21890,21916,21930,21908,21895,21899,21891,21939,21934,21919,21822,21938,21914,21947,21932,21937,21886,21897,21931,21913,22285,22575,22570,22580,22564,22576,22577,22561,22557,22560,22777,22778,22880,23159,23194,23167,23186,23195,23207,23411,23409,23506,23500,23507,23504,23562,23563,23601,23884,23888,23860,23879,24061,24133,24125,24128,24131,24190,24266,24257,24258,24260,24380,24429,24489,24490,24488,24785,24801,24754,24758,24800,24860,24867,24826,24853,24816,24827,24820,24936,24817,24846,24822,24841,24832,24850,25119,25161,25507,25484,25551,25536,25577,25545,25542,25549,25554,25571,25552,25569,25558,25581,25582,25462,25588,25578,25563,25682,25562,25593,25950,25958,25954,25955,26001,26000,26031,26222,26224,26228,26230,26223,26257,26234,26238,26231,26366,26367,26399,26397,26874,26837,26848,26840,26839,26885,26847,26869,26862,26855,26873,26834,26866,26851,26827,26829,26893,26898,26894,26825,26842,26990,26875,27454,27450,27453,27544,27542,27580,27631,27694,27695,27692,28207,28216,28244,28193,28210,28263,28234,28192,28197,28195,28187,28251,28248,28196,28246,28270,28205,28198,28271,28212,28237,28218,28204,28227,28189,28222,28363,28297,28185,28238,28259,28228,28274,28265,28255,28953,28954,28966,28976,28961,28982,29038,28956,29260,29316,29312,29494,29477,29492,29481,29754,29738,29747,29730,29733,29749,29750,29748,29743,29723,29734,29736,29989,29990,30059,30058,30178,30171,30179,30169,30168,30174,30176,30331,30332,30358,30355,30388,30428,30543,30701,30813,30828,30831,31245,31240,31243,31237,31232,31384,31383,31382,31461,31459,31561,31574,31558,31568,31570,31572,31565,31563,31567,31569,31903,31909,32094,32080,32104,32085,32043,32110,32114,32097,32102,32098,32112,32115,21892,32724,32725,32779,32850,32901,33109,33108,33099,33105,33102,33081,33094,33086,33100,33107,33140,33298,33308,33769,33795,33784,33805,33760,33733,33803,33729,33775,33777,33780,33879,33802,33776,33804,33740,33789,33778,33738,33848,33806,33796,33756,33799,33748,33759,34395,34527,34521,34541,34516,34523,34532,34512,34526,34903,35009,35010,34993,35203,35222,35387,35424,35413,35422,35388,35393,35412,35419,35408,35398,35380,35386,35382,35414,35937,35970,36015,36028,36019,36029,36033,36027,36032,36020,36023,36022,36031,36024,36234,36229,36225,36302,36317,36299,36314,36305,36300,36315,36294,36603,36600,36604,36764,36910,36917,36913,36920,36914,36918,37122,37109,37129,37118,37219,37221,37327,37396,37397,37411,37385,37406,37389,37392,37383,37393,38292,38287,38283,38289,38291,38290,38286,38538,38542,38539,38525,38533,38534,38541,38514,38532,38593,38597,38596,38598,38599,38639,38642,38860,38917,38918,38920,39143,39146,39151,39145,39154,39149,39342,39341,40643,40653,40657,20098,20653,20661,20658,20659,20677,20670,20652,20663,20667,20655,20679,21119,21111,21117,21215,21222,21220,21218,21219,21295,21983,21992,21971,21990,21966,21980,21959,21969,21987,21988,21999,21978,21985,21957,21958,21989,21961,22290,22291,22622,22609,22616,22615,22618,22612,22635,22604,22637,22602,22626,22610,22603,22887,23233,23241,23244,23230,23229,23228,23219,23234,23218,23913,23919,24140,24185,24265,24264,24338,24409,24492,24494,24858,24847,24904,24863,24819,24859,24825,24833,24840,24910,24908,24900,24909,24894,24884,24871,24845,24838,24887,25121,25122,25619,25662,25630,25642,25645,25661,25644,25615,25628,25620,25613,25654,25622,25623,25606,25964,26015,26032,26263,26249,26247,26248,26262,26244,26264,26253,26371,27028,26989,26970,26999,26976,26964,26997,26928,27010,26954,26984,26987,26974,26963,27001,27014,26973,26979,26971,27463,27506,27584,27583,27603,27645,28322,28335,28371,28342,28354,28304,28317,28359,28357,28325,28312,28348,28346,28331,28369,28310,28316,28356,28372,28330,28327,28340,29006,29017,29033,29028,29001,29031,29020,29036,29030,29004,29029,29022,28998,29032,29014,29242,29266,29495,29509,29503,29502,29807,29786,29781,29791,29790,29761,29759,29785,29787,29788,30070,30072,30208,30192,30209,30194,30193,30202,30207,30196,30195,30430,30431,30555,30571,30566,30558,30563,30585,30570,30572,30556,30565,30568,30562,30702,30862,30896,30871,30872,30860,30857,30844,30865,30867,30847,31098,31103,31105,33836,31165,31260,31258,31264,31252,31263,31262,31391,31392,31607,31680,31584,31598,31591,31921,31923,31925,32147,32121,32145,32129,32143,32091,32622,32617,32618,32626,32681,32680,32676,32854,32856,32902,32900,33137,33136,33144,33125,33134,33139,33131,33145,33146,33126,33285,33351,33922,33911,33853,33841,33909,33894,33899,33865,33900,33883,33852,33845,33889,33891,33897,33901,33862,34398,34396,34399,34553,34579,34568,34567,34560,34558,34555,34562,34563,34566,34570,34905,35039,35028,35033,35036,35032,35037,35041,35018,35029,35026,35228,35299,35435,35442,35443,35430,35433,35440,35463,35452,35427,35488,35441,35461,35437,35426,35438,35436,35449,35451,35390,35432,35938,35978,35977,36042,36039,36040,36036,36018,36035,36034,36037,36321,36319,36328,36335,36339,36346,36330,36324,36326,36530,36611,36617,36606,36618,36767,36786,36939,36938,36947,36930,36948,36924,36949,36944,36935,36943,36942,36941,36945,36926,36929,37138,37143,37228,37226,37225,37321,37431,37463,37432,37437,37440,37438,37467,37451,37476,37457,37428,37449,37453,37445,37433,37439,37466,38296,38552,38548,38549,38605,38603,38601,38602,38647,38651,38649,38646,38742,38772,38774,38928,38929,38931,38922,38930,38924,39164,39156,39165,39166,39347,39345,39348,39649,40169,40578,40718,40723,40736,20711,20718,20709,20694,20717,20698,20693,20687,20689,20721,20686,20713,20834,20979,21123,21122,21297,21421,22014,22016,22043,22039,22013,22036,22022,22025,22029,22030,22007,22038,22047,22024,22032,22006,22296,22294,22645,22654,22659,22675,22666,22649,22661,22653,22781,22821,22818,22820,22890,22889,23265,23270,23273,23255,23254,23256,23267,23413,23518,23527,23521,23525,23526,23528,23522,23524,23519,23565,23650,23940,23943,24155,24163,24149,24151,24148,24275,24278,24330,24390,24432,24505,24903,24895,24907,24951,24930,24931,24927,24922,24920,24949,25130,25735,25688,25684,25764,25720,25695,25722,25681,25703,25652,25709,25723,25970,26017,26071,26070,26274,26280,26269,27036,27048,27029,27073,27054,27091,27083,27035,27063,27067,27051,27060,27088,27085,27053,27084,27046,27075,27043,27465,27468,27699,28467,28436,28414,28435,28404,28457,28478,28448,28460,28431,28418,28450,28415,28399,28422,28465,28472,28466,28451,28437,28459,28463,28552,28458,28396,28417,28402,28364,28407,29076,29081,29053,29066,29060,29074,29246,29330,29334,29508,29520,29796,29795,29802,29808,29805,29956,30097,30247,30221,30219,30217,30227,30433,30435,30596,30589,30591,30561,30913,30879,30887,30899,30889,30883,31118,31119,31117,31278,31281,31402,31401,31469,31471,31649,31637,31627,31605,31639,31645,31636,31631,31672,31623,31620,31929,31933,31934,32187,32176,32156,32189,32190,32160,32202,32180,32178,32177,32186,32162,32191,32181,32184,32173,32210,32199,32172,32624,32736,32737,32735,32862,32858,32903,33104,33152,33167,33160,33162,33151,33154,33255,33274,33287,33300,33310,33355,33993,33983,33990,33988,33945,33950,33970,33948,33995,33976,33984,34003,33936,33980,34001,33994,34623,34588,34619,34594,34597,34612,34584,34645,34615,34601,35059,35074,35060,35065,35064,35069,35048,35098,35055,35494,35468,35486,35491,35469,35489,35475,35492,35498,35493,35496,35480,35473,35482,35495,35946,35981,35980,36051,36049,36050,36203,36249,36245,36348,36628,36626,36629,36627,36771,36960,36952,36956,36963,36953,36958,36962,36957,36955,37145,37144,37150,37237,37240,37239,37236,37496,37504,37509,37528,37526,37499,37523,37532,37544,37500,37521,38305,38312,38313,38307,38309,38308,38553,38556,38555,38604,38610,38656,38780,38789,38902,38935,38936,39087,39089,39171,39173,39180,39177,39361,39599,39600,39654,39745,39746,40180,40182,40179,40636,40763,40778,20740,20736,20731,20725,20729,20738,20744,20745,20741,20956,21127,21128,21129,21133,21130,21232,21426,22062,22075,22073,22066,22079,22068,22057,22099,22094,22103,22132,22070,22063,22064,22656,22687,22686,22707,22684,22702,22697,22694,22893,23305,23291,23307,23285,23308,23304,23534,23532,23529,23531,23652,23653,23965,23956,24162,24159,24161,24290,24282,24287,24285,24291,24288,24392,24433,24503,24501,24950,24935,24942,24925,24917,24962,24956,24944,24939,24958,24999,24976,25003,24974,25004,24986,24996,24980,25006,25134,25705,25711,25721,25758,25778,25736,25744,25776,25765,25747,25749,25769,25746,25774,25773,25771,25754,25772,25753,25762,25779,25973,25975,25976,26286,26283,26292,26289,27171,27167,27112,27137,27166,27161,27133,27169,27155,27146,27123,27138,27141,27117,27153,27472,27470,27556,27589,27590,28479,28540,28548,28497,28518,28500,28550,28525,28507,28536,28526,28558,28538,28528,28516,28567,28504,28373,28527,28512,28511,29087,29100,29105,29096,29270,29339,29518,29527,29801,29835,29827,29822,29824,30079,30240,30249,30239,30244,30246,30241,30242,30362,30394,30436,30606,30599,30604,30609,30603,30923,30917,30906,30922,30910,30933,30908,30928,31295,31292,31296,31293,31287,31291,31407,31406,31661,31665,31684,31668,31686,31687,31681,31648,31692,31946,32224,32244,32239,32251,32216,32236,32221,32232,32227,32218,32222,32233,32158,32217,32242,32249,32629,32631,32687,32745,32806,33179,33180,33181,33184,33178,33176,34071,34109,34074,34030,34092,34093,34067,34065,34083,34081,34068,34028,34085,34047,34054,34690,34676,34678,34656,34662,34680,34664,34649,34647,34636,34643,34907,34909,35088,35079,35090,35091,35093,35082,35516,35538,35527,35524,35477,35531,35576,35506,35529,35522,35519,35504,35542,35533,35510,35513,35547,35916,35918,35948,36064,36062,36070,36068,36076,36077,36066,36067,36060,36074,36065,36205,36255,36259,36395,36368,36381,36386,36367,36393,36383,36385,36382,36538,36637,36635,36639,36649,36646,36650,36636,36638,36645,36969,36974,36968,36973,36983,37168,37165,37159,37169,37255,37257,37259,37251,37573,37563,37559,37610,37548,37604,37569,37555,37564,37586,37575,37616,37554,38317,38321,38660,38662,38663,38665,38752,38797,38795,38799,38945,38955,38940,39091,39178,39187,39186,39192,39389,39376,39391,39387,39377,39381,39378,39385,39607,39662,39663,39719,39749,39748,39799,39791,40198,40201,40195,40617,40638,40654,22696,40786,20754,20760,20756,20752,20757,20864,20906,20957,21137,21139,21235,22105,22123,22137,22121,22116,22136,22122,22120,22117,22129,22127,22124,22114,22134,22721,22718,22727,22725,22894,23325,23348,23416,23536,23566,24394,25010,24977,25001,24970,25037,25014,25022,25034,25032,25136,25797,25793,25803,25787,25788,25818,25796,25799,25794,25805,25791,25810,25812,25790,25972,26310,26313,26297,26308,26311,26296,27197,27192,27194,27225,27243,27224,27193,27204,27234,27233,27211,27207,27189,27231,27208,27481,27511,27653,28610,28593,28577,28611,28580,28609,28583,28595,28608,28601,28598,28582,28576,28596,29118,29129,29136,29138,29128,29141,29113,29134,29145,29148,29123,29124,29544,29852,29859,29848,29855,29854,29922,29964,29965,30260,30264,30266,30439,30437,30624,30622,30623,30629,30952,30938,30956,30951,31142,31309,31310,31302,31308,31307,31418,31705,31761,31689,31716,31707,31713,31721,31718,31957,31958,32266,32273,32264,32283,32291,32286,32285,32265,32272,32633,32690,32752,32753,32750,32808,33203,33193,33192,33275,33288,33368,33369,34122,34137,34120,34152,34153,34115,34121,34157,34154,34142,34691,34719,34718,34722,34701,34913,35114,35122,35109,35115,35105,35242,35238,35558,35578,35563,35569,35584,35548,35559,35566,35582,35585,35586,35575,35565,35571,35574,35580,35947,35949,35987,36084,36420,36401,36404,36418,36409,36405,36667,36655,36664,36659,36776,36774,36981,36980,36984,36978,36988,36986,37172,37266,37664,37686,37624,37683,37679,37666,37628,37675,37636,37658,37648,37670,37665,37653,37678,37657,38331,38567,38568,38570,38613,38670,38673,38678,38669,38675,38671,38747,38748,38758,38808,38960,38968,38971,38967,38957,38969,38948,39184,39208,39198,39195,39201,39194,39405,39394,39409,39608,39612,39675,39661,39720,39825,40213,40227,40230,40232,40210,40219,40664,40660,40845,40860,20778,20767,20769,20786,21237,22158,22144,22160,22149,22151,22159,22741,22739,22737,22734,23344,23338,23332,23418,23607,23656,23996,23994,23997,23992,24171,24396,24509,25033,25026,25031,25062,25035,25138,25140,25806,25802,25816,25824,25840,25830,25836,25841,25826,25837,25986,25987,26329,26326,27264,27284,27268,27298,27292,27355,27299,27262,27287,27280,27296,27484,27566,27610,27656,28632,28657,28639,28640,28635,28644,28651,28655,28544,28652,28641,28649,28629,28654,28656,29159,29151,29166,29158,29157,29165,29164,29172,29152,29237,29254,29552,29554,29865,29872,29862,29864,30278,30274,30284,30442,30643,30634,30640,30636,30631,30637,30703,30967,30970,30964,30959,30977,31143,31146,31319,31423,31751,31757,31742,31735,31756,31712,31968,31964,31966,31970,31967,31961,31965,32302,32318,32326,32311,32306,32323,32299,32317,32305,32325,32321,32308,32313,32328,32309,32319,32303,32580,32755,32764,32881,32882,32880,32879,32883,33222,33219,33210,33218,33216,33215,33213,33225,33214,33256,33289,33393,34218,34180,34174,34204,34193,34196,34223,34203,34183,34216,34186,34407,34752,34769,34739,34770,34758,34731,34747,34746,34760,34763,35131,35126,35140,35128,35133,35244,35598,35607,35609,35611,35594,35616,35613,35588,35600,35905,35903,35955,36090,36093,36092,36088,36091,36264,36425,36427,36424,36426,36676,36670,36674,36677,36671,36991,36989,36996,36993,36994,36992,37177,37283,37278,37276,37709,37762,37672,37749,37706,37733,37707,37656,37758,37740,37723,37744,37722,37716,38346,38347,38348,38344,38342,38577,38584,38614,38684,38686,38816,38867,38982,39094,39221,39425,39423,39854,39851,39850,39853,40251,40255,40587,40655,40670,40668,40669,40667,40766,40779,21474,22165,22190,22745,22744,23352,24413,25059,25139,25844,25842,25854,25862,25850,25851,25847,26039,26332,26406,27315,27308,27331,27323,27320,27330,27310,27311,27487,27512,27567,28681,28683,28670,28678,28666,28689,28687,29179,29180,29182,29176,29559,29557,29863,29887,29973,30294,30296,30290,30653,30655,30651,30652,30990,31150,31329,31330,31328,31428,31429,31787,31783,31786,31774,31779,31777,31975,32340,32341,32350,32346,32353,32338,32345,32584,32761,32763,32887,32886,33229,33231,33290,34255,34217,34253,34256,34249,34224,34234,34233,34214,34799,34796,34802,34784,35206,35250,35316,35624,35641,35628,35627,35920,36101,36441,36451,36454,36452,36447,36437,36544,36681,36685,36999,36995,37000,37291,37292,37328,37780,37770,37782,37794,37811,37806,37804,37808,37784,37786,37783,38356,38358,38352,38357,38626,38620,38617,38619,38622,38692,38819,38822,38829,38905,38989,38991,38988,38990,38995,39098,39230,39231,39229,39214,39333,39438,39617,39683,39686,39759,39758,39757,39882,39881,39933,39880,39872,40273,40285,40288,40672,40725,40748,20787,22181,22750,22751,22754,23541,40848,24300,25074,25079,25078,25077,25856,25871,26336,26333,27365,27357,27354,27347,28699,28703,28712,28698,28701,28693,28696,29190,29197,29272,29346,29560,29562,29885,29898,29923,30087,30086,30303,30305,30663,31001,31153,31339,31337,31806,31807,31800,31805,31799,31808,32363,32365,32377,32361,32362,32645,32371,32694,32697,32696,33240,34281,34269,34282,34261,34276,34277,34295,34811,34821,34829,34809,34814,35168,35167,35158,35166,35649,35676,35672,35657,35674,35662,35663,35654,35673,36104,36106,36476,36466,36487,36470,36460,36474,36468,36692,36686,36781,37002,37003,37297,37294,37857,37841,37855,37827,37832,37852,37853,37846,37858,37837,37848,37860,37847,37864,38364,38580,38627,38698,38695,38753,38876,38907,39006,39000,39003,39100,39237,39241,39446,39449,39693,39912,39911,39894,39899,40329,40289,40306,40298,40300,40594,40599,40595,40628,21240,22184,22199,22198,22196,22204,22756,23360,23363,23421,23542,24009,25080,25082,25880,25876,25881,26342,26407,27372,28734,28720,28722,29200,29563,29903,30306,30309,31014,31018,31020,31019,31431,31478,31820,31811,31821,31983,31984,36782,32381,32380,32386,32588,32768,33242,33382,34299,34297,34321,34298,34310,34315,34311,34314,34836,34837,35172,35258,35320,35696,35692,35686,35695,35679,35691,36111,36109,36489,36481,36485,36482,37300,37323,37912,37891,37885,38369,38704,39108,39250,39249,39336,39467,39472,39479,39477,39955,39949,40569,40629,40680,40751,40799,40803,40801,20791,20792,22209,22208,22210,22804,23660,24013,25084,25086,25885,25884,26005,26345,27387,27396,27386,27570,28748,29211,29351,29910,29908,30313,30675,31824,32399,32396,32700,34327,34349,34330,34851,34850,34849,34847,35178,35180,35261,35700,35703,35709,36115,36490,36493,36491,36703,36783,37306,37934,37939,37941,37946,37944,37938,37931,38370,38712,38713,38706,38911,39015,39013,39255,39493,39491,39488,39486,39631,39764,39761,39981,39973,40367,40372,40386,40376,40605,40687,40729,40796,40806,40807,20796,20795,22216,22218,22217,23423,24020,24018,24398,25087,25892,27402,27489,28753,28760,29568,29924,30090,30318,30316,31155,31840,31839,32894,32893,33247,35186,35183,35324,35712,36118,36119,36497,36499,36705,37192,37956,37969,37970,38717,38718,38851,38849,39019,39253,39509,39501,39634,39706,40009,39985,39998,39995,40403,40407,40756,40812,40810,40852,22220,24022,25088,25891,25899,25898,26348,27408,29914,31434,31844,31843,31845,32403,32406,32404,33250,34360,34367,34865,35722,37008,37007,37987,37984,37988,38760,39023,39260,39514,39515,39511,39635,39636,39633,40020,40023,40022,40421,40607,40692,22225,22761,25900,28766,30321,30322,30679,32592,32648,34870,34873,34914,35731,35730,35734,33399,36123,37312,37994,38722,38728,38724,38854,39024,39519,39714,39768,40031,40441,40442,40572,40573,40711,40823,40818,24307,27414,28771,31852,31854,34875,35264,36513,37313,38002,38000,39025,39262,39638,39715,40652,28772,30682,35738,38007,38857,39522,39525,32412,35740,36522,37317,38013,38014,38012,40055,40056,40695,35924,38015,40474,29224,39530,39729,40475,40478,31858,9312,9313,9314,9315,9316,9317,9318,9319,9320,9321,9332,9333,9334,9335,9336,9337,9338,9339,9340,9341,8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,20022,20031,20101,20128,20866,20886,20907,21241,21304,21353,21430,22794,23424,24027,12083,24191,24308,24400,24417,25908,26080,30098,30326,36789,38582,168,710,12541,12542,12445,12446,12291,20189,12293,12294,12295,12540,65339,65341,10045,12353,12354,12355,12356,12357,12358,12359,12360,12361,12362,12363,12364,12365,12366,12367,12368,12369,12370,12371,12372,12373,12374,12375,12376,12377,12378,12379,12380,12381,12382,12383,12384,12385,12386,12387,12388,12389,12390,12391,12392,12393,12394,12395,12396,12397,12398,12399,12400,12401,12402,12403,12404,12405,12406,12407,12408,12409,12410,12411,12412,12413,12414,12415,12416,12417,12418,12419,12420,12421,12422,12423,12424,12425,12426,12427,12428,12429,12430,12431,12432,12433,12434,12435,12449,12450,12451,12452,12453,12454,12455,12456,12457,12458,12459,12460,12461,12462,12463,12464,12465,12466,12467,12468,12469,12470,12471,12472,12473,12474,12475,12476,12477,12478,12479,12480,12481,12482,12483,12484,12485,12486,12487,12488,12489,12490,12491,12492,12493,12494,12495,12496,12497,12498,12499,12500,12501,12502,12503,12504,12505,12506,12507,12508,12509,12510,12511,12512,12513,12514,12515,12516,12517,12518,12519,12520,12521,12522,12523,12524,12525,12526,12527,12528,12529,12530,12531,12532,12533,12534,1040,1041,1042,1043,1044,1045,1025,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1105,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,8679,8632,8633,12751,131276,20058,131210,20994,17553,40880,20872,40881,161287,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,65506,65508,65287,65282,12849,8470,8481,12443,12444,11904,11908,11910,11911,11912,11914,11916,11917,11925,11932,11933,11941,11943,11946,11948,11950,11958,11964,11966,11974,11978,11980,11981,11983,11990,11991,11998,12003,null,null,null,643,592,603,596,629,339,248,331,650,618,20034,20060,20981,21274,21378,19975,19980,20039,20109,22231,64012,23662,24435,19983,20871,19982,20014,20115,20162,20169,20168,20888,21244,21356,21433,22304,22787,22828,23568,24063,26081,27571,27596,27668,29247,20017,20028,20200,20188,20201,20193,20189,20186,21004,21276,21324,22306,22307,22807,22831,23425,23428,23570,23611,23668,23667,24068,24192,24194,24521,25097,25168,27669,27702,27715,27711,27707,29358,29360,29578,31160,32906,38430,20238,20248,20268,20213,20244,20209,20224,20215,20232,20253,20226,20229,20258,20243,20228,20212,20242,20913,21011,21001,21008,21158,21282,21279,21325,21386,21511,22241,22239,22318,22314,22324,22844,22912,22908,22917,22907,22910,22903,22911,23382,23573,23589,23676,23674,23675,23678,24031,24181,24196,24322,24346,24436,24533,24532,24527,25180,25182,25188,25185,25190,25186,25177,25184,25178,25189,26095,26094,26430,26425,26424,26427,26426,26431,26428,26419,27672,27718,27730,27740,27727,27722,27732,27723,27724,28785,29278,29364,29365,29582,29994,30335,31349,32593,33400,33404,33408,33405,33407,34381,35198,37017,37015,37016,37019,37012,38434,38436,38432,38435,20310,20283,20322,20297,20307,20324,20286,20327,20306,20319,20289,20312,20269,20275,20287,20321,20879,20921,21020,21022,21025,21165,21166,21257,21347,21362,21390,21391,21552,21559,21546,21588,21573,21529,21532,21541,21528,21565,21583,21569,21544,21540,21575,22254,22247,22245,22337,22341,22348,22345,22347,22354,22790,22848,22950,22936,22944,22935,22926,22946,22928,22927,22951,22945,23438,23442,23592,23594,23693,23695,23688,23691,23689,23698,23690,23686,23699,23701,24032,24074,24078,24203,24201,24204,24200,24205,24325,24349,24440,24438,24530,24529,24528,24557,24552,24558,24563,24545,24548,24547,24570,24559,24567,24571,24576,24564,25146,25219,25228,25230,25231,25236,25223,25201,25211,25210,25200,25217,25224,25207,25213,25202,25204,25911,26096,26100,26099,26098,26101,26437,26439,26457,26453,26444,26440,26461,26445,26458,26443,27600,27673,27674,27768,27751,27755,27780,27787,27791,27761,27759,27753,27802,27757,27783,27797,27804,27750,27763,27749,27771,27790,28788,28794,29283,29375,29373,29379,29382,29377,29370,29381,29589,29591,29587,29588,29586,30010,30009,30100,30101,30337,31037,32820,32917,32921,32912,32914,32924,33424,33423,33413,33422,33425,33427,33418,33411,33412,35960,36809,36799,37023,37025,37029,37022,37031,37024,38448,38440,38447,38445,20019,20376,20348,20357,20349,20352,20359,20342,20340,20361,20356,20343,20300,20375,20330,20378,20345,20353,20344,20368,20380,20372,20382,20370,20354,20373,20331,20334,20894,20924,20926,21045,21042,21043,21062,21041,21180,21258,21259,21308,21394,21396,21639,21631,21633,21649,21634,21640,21611,21626,21630,21605,21612,21620,21606,21645,21615,21601,21600,21656,21603,21607,21604,22263,22265,22383,22386,22381,22379,22385,22384,22390,22400,22389,22395,22387,22388,22370,22376,22397,22796,22853,22965,22970,22991,22990,22962,22988,22977,22966,22972,22979,22998,22961,22973,22976,22984,22964,22983,23394,23397,23443,23445,23620,23623,23726,23716,23712,23733,23727,23720,23724,23711,23715,23725,23714,23722,23719,23709,23717,23734,23728,23718,24087,24084,24089,24360,24354,24355,24356,24404,24450,24446,24445,24542,24549,24621,24614,24601,24626,24587,24628,24586,24599,24627,24602,24606,24620,24610,24589,24592,24622,24595,24593,24588,24585,24604,25108,25149,25261,25268,25297,25278,25258,25270,25290,25262,25267,25263,25275,25257,25264,25272,25917,26024,26043,26121,26108,26116,26130,26120,26107,26115,26123,26125,26117,26109,26129,26128,26358,26378,26501,26476,26510,26514,26486,26491,26520,26502,26500,26484,26509,26508,26490,26527,26513,26521,26499,26493,26497,26488,26489,26516,27429,27520,27518,27614,27677,27795,27884,27883,27886,27865,27830,27860,27821,27879,27831,27856,27842,27834,27843,27846,27885,27890,27858,27869,27828,27786,27805,27776,27870,27840,27952,27853,27847,27824,27897,27855,27881,27857,28820,28824,28805,28819,28806,28804,28817,28822,28802,28826,28803,29290,29398,29387,29400,29385,29404,29394,29396,29402,29388,29393,29604,29601,29613,29606,29602,29600,29612,29597,29917,29928,30015,30016,30014,30092,30104,30383,30451,30449,30448,30453,30712,30716,30713,30715,30714,30711,31042,31039,31173,31352,31355,31483,31861,31997,32821,32911,32942,32931,32952,32949,32941,33312,33440,33472,33451,33434,33432,33435,33461,33447,33454,33468,33438,33466,33460,33448,33441,33449,33474,33444,33475,33462,33442,34416,34415,34413,34414,35926,36818,36811,36819,36813,36822,36821,36823,37042,37044,37039,37043,37040,38457,38461,38460,38458,38467,20429,20421,20435,20402,20425,20427,20417,20436,20444,20441,20411,20403,20443,20423,20438,20410,20416,20409,20460,21060,21065,21184,21186,21309,21372,21399,21398,21401,21400,21690,21665,21677,21669,21711,21699,33549,21687,21678,21718,21686,21701,21702,21664,21616,21692,21666,21694,21618,21726,21680,22453,22430,22431,22436,22412,22423,22429,22427,22420,22424,22415,22425,22437,22426,22421,22772,22797,22867,23009,23006,23022,23040,23025,23005,23034,23037,23036,23030,23012,23026,23031,23003,23017,23027,23029,23008,23038,23028,23021,23464,23628,23760,23768,23756,23767,23755,23771,23774,23770,23753,23751,23754,23766,23763,23764,23759,23752,23750,23758,23775,23800,24057,24097,24098,24099,24096,24100,24240,24228,24226,24219,24227,24229,24327,24366,24406,24454,24631,24633,24660,24690,24670,24645,24659,24647,24649,24667,24652,24640,24642,24671,24612,24644,24664,24678,24686,25154,25155,25295,25357,25355,25333,25358,25347,25323,25337,25359,25356,25336,25334,25344,25363,25364,25338,25365,25339,25328,25921,25923,26026,26047,26166,26145,26162,26165,26140,26150,26146,26163,26155,26170,26141,26164,26169,26158,26383,26384,26561,26610,26568,26554,26588,26555,26616,26584,26560,26551,26565,26603,26596,26591,26549,26573,26547,26615,26614,26606,26595,26562,26553,26574,26599,26608,26546,26620,26566,26605,26572,26542,26598,26587,26618,26569,26570,26563,26602,26571,27432,27522,27524,27574,27606,27608,27616,27680,27681,27944,27956,27949,27935,27964,27967,27922,27914,27866,27955,27908,27929,27962,27930,27921,27904,27933,27970,27905,27928,27959,27907,27919,27968,27911,27936,27948,27912,27938,27913,27920,28855,28831,28862,28849,28848,28833,28852,28853,28841,29249,29257,29258,29292,29296,29299,29294,29386,29412,29416,29419,29407,29418,29414,29411,29573,29644,29634,29640,29637,29625,29622,29621,29620,29675,29631,29639,29630,29635,29638,29624,29643,29932,29934,29998,30023,30024,30119,30122,30329,30404,30472,30467,30468,30469,30474,30455,30459,30458,30695,30696,30726,30737,30738,30725,30736,30735,30734,30729,30723,30739,31050,31052,31051,31045,31044,31189,31181,31183,31190,31182,31360,31358,31441,31488,31489,31866,31864,31865,31871,31872,31873,32003,32008,32001,32600,32657,32653,32702,32775,32782,32783,32788,32823,32984,32967,32992,32977,32968,32962,32976,32965,32995,32985,32988,32970,32981,32969,32975,32983,32998,32973,33279,33313,33428,33497,33534,33529,33543,33512,33536,33493,33594,33515,33494,33524,33516,33505,33522,33525,33548,33531,33526,33520,33514,33508,33504,33530,33523,33517,34423,34420,34428,34419,34881,34894,34919,34922,34921,35283,35332,35335,36210,36835,36833,36846,36832,37105,37053,37055,37077,37061,37054,37063,37067,37064,37332,37331,38484,38479,38481,38483,38474,38478,20510,20485,20487,20499,20514,20528,20507,20469,20468,20531,20535,20524,20470,20471,20503,20508,20512,20519,20533,20527,20529,20494,20826,20884,20883,20938,20932,20933,20936,20942,21089,21082,21074,21086,21087,21077,21090,21197,21262,21406,21798,21730,21783,21778,21735,21747,21732,21786,21759,21764,21768,21739,21777,21765,21745,21770,21755,21751,21752,21728,21774,21763,21771,22273,22274,22476,22578,22485,22482,22458,22470,22461,22460,22456,22454,22463,22471,22480,22457,22465,22798,22858,23065,23062,23085,23086,23061,23055,23063,23050,23070,23091,23404,23463,23469,23468,23555,23638,23636,23788,23807,23790,23793,23799,23808,23801,24105,24104,24232,24238,24234,24236,24371,24368,24423,24669,24666,24679,24641,24738,24712,24704,24722,24705,24733,24707,24725,24731,24727,24711,24732,24718,25113,25158,25330,25360,25430,25388,25412,25413,25398,25411,25572,25401,25419,25418,25404,25385,25409,25396,25432,25428,25433,25389,25415,25395,25434,25425,25400,25431,25408,25416,25930,25926,26054,26051,26052,26050,26186,26207,26183,26193,26386,26387,26655,26650,26697,26674,26675,26683,26699,26703,26646,26673,26652,26677,26667,26669,26671,26702,26692,26676,26653,26642,26644,26662,26664,26670,26701,26682,26661,26656,27436,27439,27437,27441,27444,27501,32898,27528,27622,27620,27624,27619,27618,27623,27685,28026,28003,28004,28022,27917,28001,28050,27992,28002,28013,28015,28049,28045,28143,28031,28038,27998,28007,28000,28055,28016,28028,27999,28034,28056,27951,28008,28043,28030,28032,28036,27926,28035,28027,28029,28021,28048,28892,28883,28881,28893,28875,32569,28898,28887,28882,28894,28896,28884,28877,28869,28870,28871,28890,28878,28897,29250,29304,29303,29302,29440,29434,29428,29438,29430,29427,29435,29441,29651,29657,29669,29654,29628,29671,29667,29673,29660,29650,29659,29652,29661,29658,29655,29656,29672,29918,29919,29940,29941,29985,30043,30047,30128,30145,30139,30148,30144,30143,30134,30138,30346,30409,30493,30491,30480,30483,30482,30499,30481,30485,30489,30490,30498,30503,30755,30764,30754,30773,30767,30760,30766,30763,30753,30761,30771,30762,30769,31060,31067,31055,31068,31059,31058,31057,31211,31212,31200,31214,31213,31210,31196,31198,31197,31366,31369,31365,31371,31372,31370,31367,31448,31504,31492,31507,31493,31503,31496,31498,31502,31497,31506,31876,31889,31882,31884,31880,31885,31877,32030,32029,32017,32014,32024,32022,32019,32031,32018,32015,32012,32604,32609,32606,32608,32605,32603,32662,32658,32707,32706,32704,32790,32830,32825,33018,33010,33017,33013,33025,33019,33024,33281,33327,33317,33587,33581,33604,33561,33617,33573,33622,33599,33601,33574,33564,33570,33602,33614,33563,33578,33544,33596,33613,33558,33572,33568,33591,33583,33577,33607,33605,33612,33619,33566,33580,33611,33575,33608,34387,34386,34466,34472,34454,34445,34449,34462,34439,34455,34438,34443,34458,34437,34469,34457,34465,34471,34453,34456,34446,34461,34448,34452,34883,34884,34925,34933,34934,34930,34944,34929,34943,34927,34947,34942,34932,34940,35346,35911,35927,35963,36004,36003,36214,36216,36277,36279,36278,36561,36563,36862,36853,36866,36863,36859,36868,36860,36854,37078,37088,37081,37082,37091,37087,37093,37080,37083,37079,37084,37092,37200,37198,37199,37333,37346,37338,38492,38495,38588,39139,39647,39727,20095,20592,20586,20577,20574,20576,20563,20555,20573,20594,20552,20557,20545,20571,20554,20578,20501,20549,20575,20585,20587,20579,20580,20550,20544,20590,20595,20567,20561,20944,21099,21101,21100,21102,21206,21203,21293,21404,21877,21878,21820,21837,21840,21812,21802,21841,21858,21814,21813,21808,21842,21829,21772,21810,21861,21838,21817,21832,21805,21819,21824,21835,22282,22279,22523,22548,22498,22518,22492,22516,22528,22509,22525,22536,22520,22539,22515,22479,22535,22510,22499,22514,22501,22508,22497,22542,22524,22544,22503,22529,22540,22513,22505,22512,22541,22532,22876,23136,23128,23125,23143,23134,23096,23093,23149,23120,23135,23141,23148,23123,23140,23127,23107,23133,23122,23108,23131,23112,23182,23102,23117,23097,23116,23152,23145,23111,23121,23126,23106,23132,23410,23406,23489,23488,23641,23838,23819,23837,23834,23840,23820,23848,23821,23846,23845,23823,23856,23826,23843,23839,23854,24126,24116,24241,24244,24249,24242,24243,24374,24376,24475,24470,24479,24714,24720,24710,24766,24752,24762,24787,24788,24783,24804,24793,24797,24776,24753,24795,24759,24778,24767,24771,24781,24768,25394,25445,25482,25474,25469,25533,25502,25517,25501,25495,25515,25486,25455,25479,25488,25454,25519,25461,25500,25453,25518,25468,25508,25403,25503,25464,25477,25473,25489,25485,25456,25939,26061,26213,26209,26203,26201,26204,26210,26392,26745,26759,26768,26780,26733,26734,26798,26795,26966,26735,26787,26796,26793,26741,26740,26802,26767,26743,26770,26748,26731,26738,26794,26752,26737,26750,26779,26774,26763,26784,26761,26788,26744,26747,26769,26764,26762,26749,27446,27443,27447,27448,27537,27535,27533,27534,27532,27690,28096,28075,28084,28083,28276,28076,28137,28130,28087,28150,28116,28160,28104,28128,28127,28118,28094,28133,28124,28125,28123,28148,28106,28093,28141,28144,28090,28117,28098,28111,28105,28112,28146,28115,28157,28119,28109,28131,28091,28922,28941,28919,28951,28916,28940,28912,28932,28915,28944,28924,28927,28934,28947,28928,28920,28918,28939,28930,28942,29310,29307,29308,29311,29469,29463,29447,29457,29464,29450,29448,29439,29455,29470,29576,29686,29688,29685,29700,29697,29693,29703,29696,29690,29692,29695,29708,29707,29684,29704,30052,30051,30158,30162,30159,30155,30156,30161,30160,30351,30345,30419,30521,30511,30509,30513,30514,30516,30515,30525,30501,30523,30517,30792,30802,30793,30797,30794,30796,30758,30789,30800,31076,31079,31081,31082,31075,31083,31073,31163,31226,31224,31222,31223,31375,31380,31376,31541,31559,31540,31525,31536,31522,31524,31539,31512,31530,31517,31537,31531,31533,31535,31538,31544,31514,31523,31892,31896,31894,31907,32053,32061,32056,32054,32058,32069,32044,32041,32065,32071,32062,32063,32074,32059,32040,32611,32661,32668,32669,32667,32714,32715,32717,32720,32721,32711,32719,32713,32799,32798,32795,32839,32835,32840,33048,33061,33049,33051,33069,33055,33068,33054,33057,33045,33063,33053,33058,33297,33336,33331,33338,33332,33330,33396,33680,33699,33704,33677,33658,33651,33700,33652,33679,33665,33685,33689,33653,33684,33705,33661,33667,33676,33693,33691,33706,33675,33662,33701,33711,33672,33687,33712,33663,33702,33671,33710,33654,33690,34393,34390,34495,34487,34498,34497,34501,34490,34480,34504,34489,34483,34488,34508,34484,34491,34492,34499,34493,34494,34898,34953,34965,34984,34978,34986,34970,34961,34977,34975,34968,34983,34969,34971,34967,34980,34988,34956,34963,34958,35202,35286,35289,35285,35376,35367,35372,35358,35897,35899,35932,35933,35965,36005,36221,36219,36217,36284,36290,36281,36287,36289,36568,36574,36573,36572,36567,36576,36577,36900,36875,36881,36892,36876,36897,37103,37098,37104,37108,37106,37107,37076,37099,37100,37097,37206,37208,37210,37203,37205,37356,37364,37361,37363,37368,37348,37369,37354,37355,37367,37352,37358,38266,38278,38280,38524,38509,38507,38513,38511,38591,38762,38916,39141,39319,20635,20629,20628,20638,20619,20643,20611,20620,20622,20637,20584,20636,20626,20610,20615,20831,20948,21266,21265,21412,21415,21905,21928,21925,21933,21879,22085,21922,21907,21896,21903,21941,21889,21923,21906,21924,21885,21900,21926,21887,21909,21921,21902,22284,22569,22583,22553,22558,22567,22563,22568,22517,22600,22565,22556,22555,22579,22591,22582,22574,22585,22584,22573,22572,22587,22881,23215,23188,23199,23162,23202,23198,23160,23206,23164,23205,23212,23189,23214,23095,23172,23178,23191,23171,23179,23209,23163,23165,23180,23196,23183,23187,23197,23530,23501,23499,23508,23505,23498,23502,23564,23600,23863,23875,23915,23873,23883,23871,23861,23889,23886,23893,23859,23866,23890,23869,23857,23897,23874,23865,23881,23864,23868,23858,23862,23872,23877,24132,24129,24408,24486,24485,24491,24777,24761,24780,24802,24782,24772,24852,24818,24842,24854,24837,24821,24851,24824,24828,24830,24769,24835,24856,24861,24848,24831,24836,24843,25162,25492,25521,25520,25550,25573,25576,25583,25539,25757,25587,25546,25568,25590,25557,25586,25589,25697,25567,25534,25565,25564,25540,25560,25555,25538,25543,25548,25547,25544,25584,25559,25561,25906,25959,25962,25956,25948,25960,25957,25996,26013,26014,26030,26064,26066,26236,26220,26235,26240,26225,26233,26218,26226,26369,26892,26835,26884,26844,26922,26860,26858,26865,26895,26838,26871,26859,26852,26870,26899,26896,26867,26849,26887,26828,26888,26992,26804,26897,26863,26822,26900,26872,26832,26877,26876,26856,26891,26890,26903,26830,26824,26845,26846,26854,26868,26833,26886,26836,26857,26901,26917,26823,27449,27451,27455,27452,27540,27543,27545,27541,27581,27632,27634,27635,27696,28156,28230,28231,28191,28233,28296,28220,28221,28229,28258,28203,28223,28225,28253,28275,28188,28211,28235,28224,28241,28219,28163,28206,28254,28264,28252,28257,28209,28200,28256,28273,28267,28217,28194,28208,28243,28261,28199,28280,28260,28279,28245,28281,28242,28262,28213,28214,28250,28960,28958,28975,28923,28974,28977,28963,28965,28962,28978,28959,28968,28986,28955,29259,29274,29320,29321,29318,29317,29323,29458,29451,29488,29474,29489,29491,29479,29490,29485,29478,29475,29493,29452,29742,29740,29744,29739,29718,29722,29729,29741,29745,29732,29731,29725,29737,29728,29746,29947,29999,30063,30060,30183,30170,30177,30182,30173,30175,30180,30167,30357,30354,30426,30534,30535,30532,30541,30533,30538,30542,30539,30540,30686,30700,30816,30820,30821,30812,30829,30833,30826,30830,30832,30825,30824,30814,30818,31092,31091,31090,31088,31234,31242,31235,31244,31236,31385,31462,31460,31562,31547,31556,31560,31564,31566,31552,31576,31557,31906,31902,31912,31905,32088,32111,32099,32083,32086,32103,32106,32079,32109,32092,32107,32082,32084,32105,32081,32095,32078,32574,32575,32613,32614,32674,32672,32673,32727,32849,32847,32848,33022,32980,33091,33098,33106,33103,33095,33085,33101,33082,33254,33262,33271,33272,33273,33284,33340,33341,33343,33397,33595,33743,33785,33827,33728,33768,33810,33767,33764,33788,33782,33808,33734,33736,33771,33763,33727,33793,33757,33765,33752,33791,33761,33739,33742,33750,33781,33737,33801,33807,33758,33809,33798,33730,33779,33749,33786,33735,33745,33770,33811,33731,33772,33774,33732,33787,33751,33762,33819,33755,33790,34520,34530,34534,34515,34531,34522,34538,34525,34539,34524,34540,34537,34519,34536,34513,34888,34902,34901,35002,35031,35001,35000,35008,35006,34998,35004,34999,35005,34994,35073,35017,35221,35224,35223,35293,35290,35291,35406,35405,35385,35417,35392,35415,35416,35396,35397,35410,35400,35409,35402,35404,35407,35935,35969,35968,36026,36030,36016,36025,36021,36228,36224,36233,36312,36307,36301,36295,36310,36316,36303,36309,36313,36296,36311,36293,36591,36599,36602,36601,36582,36590,36581,36597,36583,36584,36598,36587,36593,36588,36596,36585,36909,36916,36911,37126,37164,37124,37119,37116,37128,37113,37115,37121,37120,37127,37125,37123,37217,37220,37215,37218,37216,37377,37386,37413,37379,37402,37414,37391,37388,37376,37394,37375,37373,37382,37380,37415,37378,37404,37412,37401,37399,37381,37398,38267,38285,38284,38288,38535,38526,38536,38537,38531,38528,38594,38600,38595,38641,38640,38764,38768,38766,38919,39081,39147,40166,40697,20099,20100,20150,20669,20671,20678,20654,20676,20682,20660,20680,20674,20656,20673,20666,20657,20683,20681,20662,20664,20951,21114,21112,21115,21116,21955,21979,21964,21968,21963,21962,21981,21952,21972,21956,21993,21951,21970,21901,21967,21973,21986,21974,21960,22002,21965,21977,21954,22292,22611,22632,22628,22607,22605,22601,22639,22613,22606,22621,22617,22629,22619,22589,22627,22641,22780,23239,23236,23243,23226,23224,23217,23221,23216,23231,23240,23227,23238,23223,23232,23242,23220,23222,23245,23225,23184,23510,23512,23513,23583,23603,23921,23907,23882,23909,23922,23916,23902,23912,23911,23906,24048,24143,24142,24138,24141,24139,24261,24268,24262,24267,24263,24384,24495,24493,24823,24905,24906,24875,24901,24886,24882,24878,24902,24879,24911,24873,24896,25120,37224,25123,25125,25124,25541,25585,25579,25616,25618,25609,25632,25636,25651,25667,25631,25621,25624,25657,25655,25634,25635,25612,25638,25648,25640,25665,25653,25647,25610,25626,25664,25637,25639,25611,25575,25627,25646,25633,25614,25967,26002,26067,26246,26252,26261,26256,26251,26250,26265,26260,26232,26400,26982,26975,26936,26958,26978,26993,26943,26949,26986,26937,26946,26967,26969,27002,26952,26953,26933,26988,26931,26941,26981,26864,27000,26932,26985,26944,26991,26948,26998,26968,26945,26996,26956,26939,26955,26935,26972,26959,26961,26930,26962,26927,27003,26940,27462,27461,27459,27458,27464,27457,27547,64013,27643,27644,27641,27639,27640,28315,28374,28360,28303,28352,28319,28307,28308,28320,28337,28345,28358,28370,28349,28353,28318,28361,28343,28336,28365,28326,28367,28338,28350,28355,28380,28376,28313,28306,28302,28301,28324,28321,28351,28339,28368,28362,28311,28334,28323,28999,29012,29010,29027,29024,28993,29021,29026,29042,29048,29034,29025,28994,29016,28995,29003,29040,29023,29008,29011,28996,29005,29018,29263,29325,29324,29329,29328,29326,29500,29506,29499,29498,29504,29514,29513,29764,29770,29771,29778,29777,29783,29760,29775,29776,29774,29762,29766,29773,29780,29921,29951,29950,29949,29981,30073,30071,27011,30191,30223,30211,30199,30206,30204,30201,30200,30224,30203,30198,30189,30197,30205,30361,30389,30429,30549,30559,30560,30546,30550,30554,30569,30567,30548,30553,30573,30688,30855,30874,30868,30863,30852,30869,30853,30854,30881,30851,30841,30873,30848,30870,30843,31100,31106,31101,31097,31249,31256,31257,31250,31255,31253,31266,31251,31259,31248,31395,31394,31390,31467,31590,31588,31597,31604,31593,31602,31589,31603,31601,31600,31585,31608,31606,31587,31922,31924,31919,32136,32134,32128,32141,32127,32133,32122,32142,32123,32131,32124,32140,32148,32132,32125,32146,32621,32619,32615,32616,32620,32678,32677,32679,32731,32732,32801,33124,33120,33143,33116,33129,33115,33122,33138,26401,33118,33142,33127,33135,33092,33121,33309,33353,33348,33344,33346,33349,34033,33855,33878,33910,33913,33935,33933,33893,33873,33856,33926,33895,33840,33869,33917,33882,33881,33908,33907,33885,34055,33886,33847,33850,33844,33914,33859,33912,33842,33861,33833,33753,33867,33839,33858,33837,33887,33904,33849,33870,33868,33874,33903,33989,33934,33851,33863,33846,33843,33896,33918,33860,33835,33888,33876,33902,33872,34571,34564,34551,34572,34554,34518,34549,34637,34552,34574,34569,34561,34550,34573,34565,35030,35019,35021,35022,35038,35035,35034,35020,35024,35205,35227,35295,35301,35300,35297,35296,35298,35292,35302,35446,35462,35455,35425,35391,35447,35458,35460,35445,35459,35457,35444,35450,35900,35915,35914,35941,35940,35942,35974,35972,35973,36044,36200,36201,36241,36236,36238,36239,36237,36243,36244,36240,36242,36336,36320,36332,36337,36334,36304,36329,36323,36322,36327,36338,36331,36340,36614,36607,36609,36608,36613,36615,36616,36610,36619,36946,36927,36932,36937,36925,37136,37133,37135,37137,37142,37140,37131,37134,37230,37231,37448,37458,37424,37434,37478,37427,37477,37470,37507,37422,37450,37446,37485,37484,37455,37472,37479,37487,37430,37473,37488,37425,37460,37475,37456,37490,37454,37459,37452,37462,37426,38303,38300,38302,38299,38546,38547,38545,38551,38606,38650,38653,38648,38645,38771,38775,38776,38770,38927,38925,38926,39084,39158,39161,39343,39346,39344,39349,39597,39595,39771,40170,40173,40167,40576,40701,20710,20692,20695,20712,20723,20699,20714,20701,20708,20691,20716,20720,20719,20707,20704,20952,21120,21121,21225,21227,21296,21420,22055,22037,22028,22034,22012,22031,22044,22017,22035,22018,22010,22045,22020,22015,22009,22665,22652,22672,22680,22662,22657,22655,22644,22667,22650,22663,22673,22670,22646,22658,22664,22651,22676,22671,22782,22891,23260,23278,23269,23253,23274,23258,23277,23275,23283,23266,23264,23259,23276,23262,23261,23257,23272,23263,23415,23520,23523,23651,23938,23936,23933,23942,23930,23937,23927,23946,23945,23944,23934,23932,23949,23929,23935,24152,24153,24147,24280,24273,24279,24270,24284,24277,24281,24274,24276,24388,24387,24431,24502,24876,24872,24897,24926,24945,24947,24914,24915,24946,24940,24960,24948,24916,24954,24923,24933,24891,24938,24929,24918,25129,25127,25131,25643,25677,25691,25693,25716,25718,25714,25715,25725,25717,25702,25766,25678,25730,25694,25692,25675,25683,25696,25680,25727,25663,25708,25707,25689,25701,25719,25971,26016,26273,26272,26271,26373,26372,26402,27057,27062,27081,27040,27086,27030,27056,27052,27068,27025,27033,27022,27047,27021,27049,27070,27055,27071,27076,27069,27044,27092,27065,27082,27034,27087,27059,27027,27050,27041,27038,27097,27031,27024,27074,27061,27045,27078,27466,27469,27467,27550,27551,27552,27587,27588,27646,28366,28405,28401,28419,28453,28408,28471,28411,28462,28425,28494,28441,28442,28455,28440,28475,28434,28397,28426,28470,28531,28409,28398,28461,28480,28464,28476,28469,28395,28423,28430,28483,28421,28413,28406,28473,28444,28412,28474,28447,28429,28446,28424,28449,29063,29072,29065,29056,29061,29058,29071,29051,29062,29057,29079,29252,29267,29335,29333,29331,29507,29517,29521,29516,29794,29811,29809,29813,29810,29799,29806,29952,29954,29955,30077,30096,30230,30216,30220,30229,30225,30218,30228,30392,30593,30588,30597,30594,30574,30592,30575,30590,30595,30898,30890,30900,30893,30888,30846,30891,30878,30885,30880,30892,30882,30884,31128,31114,31115,31126,31125,31124,31123,31127,31112,31122,31120,31275,31306,31280,31279,31272,31270,31400,31403,31404,31470,31624,31644,31626,31633,31632,31638,31629,31628,31643,31630,31621,31640,21124,31641,31652,31618,31931,31935,31932,31930,32167,32183,32194,32163,32170,32193,32192,32197,32157,32206,32196,32198,32203,32204,32175,32185,32150,32188,32159,32166,32174,32169,32161,32201,32627,32738,32739,32741,32734,32804,32861,32860,33161,33158,33155,33159,33165,33164,33163,33301,33943,33956,33953,33951,33978,33998,33986,33964,33966,33963,33977,33972,33985,33997,33962,33946,33969,34000,33949,33959,33979,33954,33940,33991,33996,33947,33961,33967,33960,34006,33944,33974,33999,33952,34007,34004,34002,34011,33968,33937,34401,34611,34595,34600,34667,34624,34606,34590,34593,34585,34587,34627,34604,34625,34622,34630,34592,34610,34602,34605,34620,34578,34618,34609,34613,34626,34598,34599,34616,34596,34586,34608,34577,35063,35047,35057,35058,35066,35070,35054,35068,35062,35067,35056,35052,35051,35229,35233,35231,35230,35305,35307,35304,35499,35481,35467,35474,35471,35478,35901,35944,35945,36053,36047,36055,36246,36361,36354,36351,36365,36349,36362,36355,36359,36358,36357,36350,36352,36356,36624,36625,36622,36621,37155,37148,37152,37154,37151,37149,37146,37156,37153,37147,37242,37234,37241,37235,37541,37540,37494,37531,37498,37536,37524,37546,37517,37542,37530,37547,37497,37527,37503,37539,37614,37518,37506,37525,37538,37501,37512,37537,37514,37510,37516,37529,37543,37502,37511,37545,37533,37515,37421,38558,38561,38655,38744,38781,38778,38782,38787,38784,38786,38779,38788,38785,38783,38862,38861,38934,39085,39086,39170,39168,39175,39325,39324,39363,39353,39355,39354,39362,39357,39367,39601,39651,39655,39742,39743,39776,39777,39775,40177,40178,40181,40615,20735,20739,20784,20728,20742,20743,20726,20734,20747,20748,20733,20746,21131,21132,21233,21231,22088,22082,22092,22069,22081,22090,22089,22086,22104,22106,22080,22067,22077,22060,22078,22072,22058,22074,22298,22699,22685,22705,22688,22691,22703,22700,22693,22689,22783,23295,23284,23293,23287,23286,23299,23288,23298,23289,23297,23303,23301,23311,23655,23961,23959,23967,23954,23970,23955,23957,23968,23964,23969,23962,23966,24169,24157,24160,24156,32243,24283,24286,24289,24393,24498,24971,24963,24953,25009,25008,24994,24969,24987,24979,25007,25005,24991,24978,25002,24993,24973,24934,25011,25133,25710,25712,25750,25760,25733,25751,25756,25743,25739,25738,25740,25763,25759,25704,25777,25752,25974,25978,25977,25979,26034,26035,26293,26288,26281,26290,26295,26282,26287,27136,27142,27159,27109,27128,27157,27121,27108,27168,27135,27116,27106,27163,27165,27134,27175,27122,27118,27156,27127,27111,27200,27144,27110,27131,27149,27132,27115,27145,27140,27160,27173,27151,27126,27174,27143,27124,27158,27473,27557,27555,27554,27558,27649,27648,27647,27650,28481,28454,28542,28551,28614,28562,28557,28553,28556,28514,28495,28549,28506,28566,28534,28524,28546,28501,28530,28498,28496,28503,28564,28563,28509,28416,28513,28523,28541,28519,28560,28499,28555,28521,28543,28565,28515,28535,28522,28539,29106,29103,29083,29104,29088,29082,29097,29109,29085,29093,29086,29092,29089,29098,29084,29095,29107,29336,29338,29528,29522,29534,29535,29536,29533,29531,29537,29530,29529,29538,29831,29833,29834,29830,29825,29821,29829,29832,29820,29817,29960,29959,30078,30245,30238,30233,30237,30236,30243,30234,30248,30235,30364,30365,30366,30363,30605,30607,30601,30600,30925,30907,30927,30924,30929,30926,30932,30920,30915,30916,30921,31130,31137,31136,31132,31138,31131,27510,31289,31410,31412,31411,31671,31691,31678,31660,31694,31663,31673,31690,31669,31941,31944,31948,31947,32247,32219,32234,32231,32215,32225,32259,32250,32230,32246,32241,32240,32238,32223,32630,32684,32688,32685,32749,32747,32746,32748,32742,32744,32868,32871,33187,33183,33182,33173,33186,33177,33175,33302,33359,33363,33362,33360,33358,33361,34084,34107,34063,34048,34089,34062,34057,34061,34079,34058,34087,34076,34043,34091,34042,34056,34060,34036,34090,34034,34069,34039,34027,34035,34044,34066,34026,34025,34070,34046,34088,34077,34094,34050,34045,34078,34038,34097,34086,34023,34024,34032,34031,34041,34072,34080,34096,34059,34073,34095,34402,34646,34659,34660,34679,34785,34675,34648,34644,34651,34642,34657,34650,34641,34654,34669,34666,34640,34638,34655,34653,34671,34668,34682,34670,34652,34661,34639,34683,34677,34658,34663,34665,34906,35077,35084,35092,35083,35095,35096,35097,35078,35094,35089,35086,35081,35234,35236,35235,35309,35312,35308,35535,35526,35512,35539,35537,35540,35541,35515,35543,35518,35520,35525,35544,35523,35514,35517,35545,35902,35917,35983,36069,36063,36057,36072,36058,36061,36071,36256,36252,36257,36251,36384,36387,36389,36388,36398,36373,36379,36374,36369,36377,36390,36391,36372,36370,36376,36371,36380,36375,36378,36652,36644,36632,36634,36640,36643,36630,36631,36979,36976,36975,36967,36971,37167,37163,37161,37162,37170,37158,37166,37253,37254,37258,37249,37250,37252,37248,37584,37571,37572,37568,37593,37558,37583,37617,37599,37592,37609,37591,37597,37580,37615,37570,37608,37578,37576,37582,37606,37581,37589,37577,37600,37598,37607,37585,37587,37557,37601,37574,37556,38268,38316,38315,38318,38320,38564,38562,38611,38661,38664,38658,38746,38794,38798,38792,38864,38863,38942,38941,38950,38953,38952,38944,38939,38951,39090,39176,39162,39185,39188,39190,39191,39189,39388,39373,39375,39379,39380,39374,39369,39382,39384,39371,39383,39372,39603,39660,39659,39667,39666,39665,39750,39747,39783,39796,39793,39782,39798,39797,39792,39784,39780,39788,40188,40186,40189,40191,40183,40199,40192,40185,40187,40200,40197,40196,40579,40659,40719,40720,20764,20755,20759,20762,20753,20958,21300,21473,22128,22112,22126,22131,22118,22115,22125,22130,22110,22135,22300,22299,22728,22717,22729,22719,22714,22722,22716,22726,23319,23321,23323,23329,23316,23315,23312,23318,23336,23322,23328,23326,23535,23980,23985,23977,23975,23989,23984,23982,23978,23976,23986,23981,23983,23988,24167,24168,24166,24175,24297,24295,24294,24296,24293,24395,24508,24989,25000,24982,25029,25012,25030,25025,25036,25018,25023,25016,24972,25815,25814,25808,25807,25801,25789,25737,25795,25819,25843,25817,25907,25983,25980,26018,26312,26302,26304,26314,26315,26319,26301,26299,26298,26316,26403,27188,27238,27209,27239,27186,27240,27198,27229,27245,27254,27227,27217,27176,27226,27195,27199,27201,27242,27236,27216,27215,27220,27247,27241,27232,27196,27230,27222,27221,27213,27214,27206,27477,27476,27478,27559,27562,27563,27592,27591,27652,27651,27654,28589,28619,28579,28615,28604,28622,28616,28510,28612,28605,28574,28618,28584,28676,28581,28590,28602,28588,28586,28623,28607,28600,28578,28617,28587,28621,28591,28594,28592,29125,29122,29119,29112,29142,29120,29121,29131,29140,29130,29127,29135,29117,29144,29116,29126,29146,29147,29341,29342,29545,29542,29543,29548,29541,29547,29546,29823,29850,29856,29844,29842,29845,29857,29963,30080,30255,30253,30257,30269,30259,30268,30261,30258,30256,30395,30438,30618,30621,30625,30620,30619,30626,30627,30613,30617,30615,30941,30953,30949,30954,30942,30947,30939,30945,30946,30957,30943,30944,31140,31300,31304,31303,31414,31416,31413,31409,31415,31710,31715,31719,31709,31701,31717,31706,31720,31737,31700,31722,31714,31708,31723,31704,31711,31954,31956,31959,31952,31953,32274,32289,32279,32268,32287,32288,32275,32270,32284,32277,32282,32290,32267,32271,32278,32269,32276,32293,32292,32579,32635,32636,32634,32689,32751,32810,32809,32876,33201,33190,33198,33209,33205,33195,33200,33196,33204,33202,33207,33191,33266,33365,33366,33367,34134,34117,34155,34125,34131,34145,34136,34112,34118,34148,34113,34146,34116,34129,34119,34147,34110,34139,34161,34126,34158,34165,34133,34151,34144,34188,34150,34141,34132,34149,34156,34403,34405,34404,34715,34703,34711,34707,34706,34696,34689,34710,34712,34681,34695,34723,34693,34704,34705,34717,34692,34708,34716,34714,34697,35102,35110,35120,35117,35118,35111,35121,35106,35113,35107,35119,35116,35103,35313,35552,35554,35570,35572,35573,35549,35604,35556,35551,35568,35528,35550,35553,35560,35583,35567,35579,35985,35986,35984,36085,36078,36081,36080,36083,36204,36206,36261,36263,36403,36414,36408,36416,36421,36406,36412,36413,36417,36400,36415,36541,36662,36654,36661,36658,36665,36663,36660,36982,36985,36987,36998,37114,37171,37173,37174,37267,37264,37265,37261,37263,37671,37662,37640,37663,37638,37647,37754,37688,37692,37659,37667,37650,37633,37702,37677,37646,37645,37579,37661,37626,37669,37651,37625,37623,37684,37634,37668,37631,37673,37689,37685,37674,37652,37644,37643,37630,37641,37632,37627,37654,38332,38349,38334,38329,38330,38326,38335,38325,38333,38569,38612,38667,38674,38672,38809,38807,38804,38896,38904,38965,38959,38962,39204,39199,39207,39209,39326,39406,39404,39397,39396,39408,39395,39402,39401,39399,39609,39615,39604,39611,39670,39674,39673,39671,39731,39808,39813,39815,39804,39806,39803,39810,39827,39826,39824,39802,39829,39805,39816,40229,40215,40224,40222,40212,40233,40221,40216,40226,40208,40217,40223,40584,40582,40583,40622,40621,40661,40662,40698,40722,40765,20774,20773,20770,20772,20768,20777,21236,22163,22156,22157,22150,22148,22147,22142,22146,22143,22145,22742,22740,22735,22738,23341,23333,23346,23331,23340,23335,23334,23343,23342,23419,23537,23538,23991,24172,24170,24510,24507,25027,25013,25020,25063,25056,25061,25060,25064,25054,25839,25833,25827,25835,25828,25832,25985,25984,26038,26074,26322,27277,27286,27265,27301,27273,27295,27291,27297,27294,27271,27283,27278,27285,27267,27304,27300,27281,27263,27302,27290,27269,27276,27282,27483,27565,27657,28620,28585,28660,28628,28643,28636,28653,28647,28646,28638,28658,28637,28642,28648,29153,29169,29160,29170,29156,29168,29154,29555,29550,29551,29847,29874,29867,29840,29866,29869,29873,29861,29871,29968,29969,29970,29967,30084,30275,30280,30281,30279,30372,30441,30645,30635,30642,30647,30646,30644,30641,30632,30704,30963,30973,30978,30971,30972,30962,30981,30969,30974,30980,31147,31144,31324,31323,31318,31320,31316,31322,31422,31424,31425,31749,31759,31730,31744,31743,31739,31758,31732,31755,31731,31746,31753,31747,31745,31736,31741,31750,31728,31729,31760,31754,31976,32301,32316,32322,32307,38984,32312,32298,32329,32320,32327,32297,32332,32304,32315,32310,32324,32314,32581,32639,32638,32637,32756,32754,32812,33211,33220,33228,33226,33221,33223,33212,33257,33371,33370,33372,34179,34176,34191,34215,34197,34208,34187,34211,34171,34212,34202,34206,34167,34172,34185,34209,34170,34168,34135,34190,34198,34182,34189,34201,34205,34177,34210,34178,34184,34181,34169,34166,34200,34192,34207,34408,34750,34730,34733,34757,34736,34732,34745,34741,34748,34734,34761,34755,34754,34764,34743,34735,34756,34762,34740,34742,34751,34744,34749,34782,34738,35125,35123,35132,35134,35137,35154,35127,35138,35245,35247,35246,35314,35315,35614,35608,35606,35601,35589,35595,35618,35599,35602,35605,35591,35597,35592,35590,35612,35603,35610,35919,35952,35954,35953,35951,35989,35988,36089,36207,36430,36429,36435,36432,36428,36423,36675,36672,36997,36990,37176,37274,37282,37275,37273,37279,37281,37277,37280,37793,37763,37807,37732,37718,37703,37756,37720,37724,37750,37705,37712,37713,37728,37741,37775,37708,37738,37753,37719,37717,37714,37711,37745,37751,37755,37729,37726,37731,37735,37760,37710,37721,38343,38336,38345,38339,38341,38327,38574,38576,38572,38688,38687,38680,38685,38681,38810,38817,38812,38814,38813,38869,38868,38897,38977,38980,38986,38985,38981,38979,39205,39211,39212,39210,39219,39218,39215,39213,39217,39216,39320,39331,39329,39426,39418,39412,39415,39417,39416,39414,39419,39421,39422,39420,39427,39614,39678,39677,39681,39676,39752,39834,39848,39838,39835,39846,39841,39845,39844,39814,39842,39840,39855,40243,40257,40295,40246,40238,40239,40241,40248,40240,40261,40258,40259,40254,40247,40256,40253,32757,40237,40586,40585,40589,40624,40648,40666,40699,40703,40740,40739,40738,40788,40864,20785,20781,20782,22168,22172,22167,22170,22173,22169,22896,23356,23657,23658,24000,24173,24174,25048,25055,25069,25070,25073,25066,25072,25067,25046,25065,25855,25860,25853,25848,25857,25859,25852,26004,26075,26330,26331,26328,27333,27321,27325,27361,27334,27322,27318,27319,27335,27316,27309,27486,27593,27659,28679,28684,28685,28673,28677,28692,28686,28671,28672,28667,28710,28668,28663,28682,29185,29183,29177,29187,29181,29558,29880,29888,29877,29889,29886,29878,29883,29890,29972,29971,30300,30308,30297,30288,30291,30295,30298,30374,30397,30444,30658,30650,30975,30988,30995,30996,30985,30992,30994,30993,31149,31148,31327,31772,31785,31769,31776,31775,31789,31773,31782,31784,31778,31781,31792,32348,32336,32342,32355,32344,32354,32351,32337,32352,32343,32339,32693,32691,32759,32760,32885,33233,33234,33232,33375,33374,34228,34246,34240,34243,34242,34227,34229,34237,34247,34244,34239,34251,34254,34248,34245,34225,34230,34258,34340,34232,34231,34238,34409,34791,34790,34786,34779,34795,34794,34789,34783,34803,34788,34772,34780,34771,34797,34776,34787,34724,34775,34777,34817,34804,34792,34781,35155,35147,35151,35148,35142,35152,35153,35145,35626,35623,35619,35635,35632,35637,35655,35631,35644,35646,35633,35621,35639,35622,35638,35630,35620,35643,35645,35642,35906,35957,35993,35992,35991,36094,36100,36098,36096,36444,36450,36448,36439,36438,36446,36453,36455,36443,36442,36449,36445,36457,36436,36678,36679,36680,36683,37160,37178,37179,37182,37288,37285,37287,37295,37290,37813,37772,37778,37815,37787,37789,37769,37799,37774,37802,37790,37798,37781,37768,37785,37791,37773,37809,37777,37810,37796,37800,37812,37795,37797,38354,38355,38353,38579,38615,38618,24002,38623,38616,38621,38691,38690,38693,38828,38830,38824,38827,38820,38826,38818,38821,38871,38873,38870,38872,38906,38992,38993,38994,39096,39233,39228,39226,39439,39435,39433,39437,39428,39441,39434,39429,39431,39430,39616,39644,39688,39684,39685,39721,39733,39754,39756,39755,39879,39878,39875,39871,39873,39861,39864,39891,39862,39876,39865,39869,40284,40275,40271,40266,40283,40267,40281,40278,40268,40279,40274,40276,40287,40280,40282,40590,40588,40671,40705,40704,40726,40741,40747,40746,40745,40744,40780,40789,20788,20789,21142,21239,21428,22187,22189,22182,22183,22186,22188,22746,22749,22747,22802,23357,23358,23359,24003,24176,24511,25083,25863,25872,25869,25865,25868,25870,25988,26078,26077,26334,27367,27360,27340,27345,27353,27339,27359,27356,27344,27371,27343,27341,27358,27488,27568,27660,28697,28711,28704,28694,28715,28705,28706,28707,28713,28695,28708,28700,28714,29196,29194,29191,29186,29189,29349,29350,29348,29347,29345,29899,29893,29879,29891,29974,30304,30665,30666,30660,30705,31005,31003,31009,31004,30999,31006,31152,31335,31336,31795,31804,31801,31788,31803,31980,31978,32374,32373,32376,32368,32375,32367,32378,32370,32372,32360,32587,32586,32643,32646,32695,32765,32766,32888,33239,33237,33380,33377,33379,34283,34289,34285,34265,34273,34280,34266,34263,34284,34290,34296,34264,34271,34275,34268,34257,34288,34278,34287,34270,34274,34816,34810,34819,34806,34807,34825,34828,34827,34822,34812,34824,34815,34826,34818,35170,35162,35163,35159,35169,35164,35160,35165,35161,35208,35255,35254,35318,35664,35656,35658,35648,35667,35670,35668,35659,35669,35665,35650,35666,35671,35907,35959,35958,35994,36102,36103,36105,36268,36266,36269,36267,36461,36472,36467,36458,36463,36475,36546,36690,36689,36687,36688,36691,36788,37184,37183,37296,37293,37854,37831,37839,37826,37850,37840,37881,37868,37836,37849,37801,37862,37834,37844,37870,37859,37845,37828,37838,37824,37842,37863,38269,38362,38363,38625,38697,38699,38700,38696,38694,38835,38839,38838,38877,38878,38879,39004,39001,39005,38999,39103,39101,39099,39102,39240,39239,39235,39334,39335,39450,39445,39461,39453,39460,39451,39458,39456,39463,39459,39454,39452,39444,39618,39691,39690,39694,39692,39735,39914,39915,39904,39902,39908,39910,39906,39920,39892,39895,39916,39900,39897,39909,39893,39905,39898,40311,40321,40330,40324,40328,40305,40320,40312,40326,40331,40332,40317,40299,40308,40309,40304,40297,40325,40307,40315,40322,40303,40313,40319,40327,40296,40596,40593,40640,40700,40749,40768,40769,40781,40790,40791,40792,21303,22194,22197,22195,22755,23365,24006,24007,24302,24303,24512,24513,25081,25879,25878,25877,25875,26079,26344,26339,26340,27379,27376,27370,27368,27385,27377,27374,27375,28732,28725,28719,28727,28724,28721,28738,28728,28735,28730,28729,28736,28731,28723,28737,29203,29204,29352,29565,29564,29882,30379,30378,30398,30445,30668,30670,30671,30669,30706,31013,31011,31015,31016,31012,31017,31154,31342,31340,31341,31479,31817,31816,31818,31815,31813,31982,32379,32382,32385,32384,32698,32767,32889,33243,33241,33291,33384,33385,34338,34303,34305,34302,34331,34304,34294,34308,34313,34309,34316,34301,34841,34832,34833,34839,34835,34838,35171,35174,35257,35319,35680,35690,35677,35688,35683,35685,35687,35693,36270,36486,36488,36484,36697,36694,36695,36693,36696,36698,37005,37187,37185,37303,37301,37298,37299,37899,37907,37883,37920,37903,37908,37886,37909,37904,37928,37913,37901,37877,37888,37879,37895,37902,37910,37906,37882,37897,37880,37898,37887,37884,37900,37878,37905,37894,38366,38368,38367,38702,38703,38841,38843,38909,38910,39008,39010,39011,39007,39105,39106,39248,39246,39257,39244,39243,39251,39474,39476,39473,39468,39466,39478,39465,39470,39480,39469,39623,39626,39622,39696,39698,39697,39947,39944,39927,39941,39954,39928,40000,39943,39950,39942,39959,39956,39945,40351,40345,40356,40349,40338,40344,40336,40347,40352,40340,40348,40362,40343,40353,40346,40354,40360,40350,40355,40383,40361,40342,40358,40359,40601,40603,40602,40677,40676,40679,40678,40752,40750,40795,40800,40798,40797,40793,40849,20794,20793,21144,21143,22211,22205,22206,23368,23367,24011,24015,24305,25085,25883,27394,27388,27395,27384,27392,28739,28740,28746,28744,28745,28741,28742,29213,29210,29209,29566,29975,30314,30672,31021,31025,31023,31828,31827,31986,32394,32391,32392,32395,32390,32397,32589,32699,32816,33245,34328,34346,34342,34335,34339,34332,34329,34343,34350,34337,34336,34345,34334,34341,34857,34845,34843,34848,34852,34844,34859,34890,35181,35177,35182,35179,35322,35705,35704,35653,35706,35707,36112,36116,36271,36494,36492,36702,36699,36701,37190,37188,37189,37305,37951,37947,37942,37929,37949,37948,37936,37945,37930,37943,37932,37952,37937,38373,38372,38371,38709,38714,38847,38881,39012,39113,39110,39104,39256,39254,39481,39485,39494,39492,39490,39489,39482,39487,39629,39701,39703,39704,39702,39738,39762,39979,39965,39964,39980,39971,39976,39977,39972,39969,40375,40374,40380,40385,40391,40394,40399,40382,40389,40387,40379,40373,40398,40377,40378,40364,40392,40369,40365,40396,40371,40397,40370,40570,40604,40683,40686,40685,40731,40728,40730,40753,40782,40805,40804,40850,20153,22214,22213,22219,22897,23371,23372,24021,24017,24306,25889,25888,25894,25890,27403,27400,27401,27661,28757,28758,28759,28754,29214,29215,29353,29567,29912,29909,29913,29911,30317,30381,31029,31156,31344,31345,31831,31836,31833,31835,31834,31988,31985,32401,32591,32647,33246,33387,34356,34357,34355,34348,34354,34358,34860,34856,34854,34858,34853,35185,35263,35262,35323,35710,35716,35714,35718,35717,35711,36117,36501,36500,36506,36498,36496,36502,36503,36704,36706,37191,37964,37968,37962,37963,37967,37959,37957,37960,37961,37958,38719,38883,39018,39017,39115,39252,39259,39502,39507,39508,39500,39503,39496,39498,39497,39506,39504,39632,39705,39723,39739,39766,39765,40006,40008,39999,40004,39993,39987,40001,39996,39991,39988,39986,39997,39990,40411,40402,40414,40410,40395,40400,40412,40401,40415,40425,40409,40408,40406,40437,40405,40413,40630,40688,40757,40755,40754,40770,40811,40853,40866,20797,21145,22760,22759,22898,23373,24024,34863,24399,25089,25091,25092,25897,25893,26006,26347,27409,27410,27407,27594,28763,28762,29218,29570,29569,29571,30320,30676,31847,31846,32405,33388,34362,34368,34361,34364,34353,34363,34366,34864,34866,34862,34867,35190,35188,35187,35326,35724,35726,35723,35720,35909,36121,36504,36708,36707,37308,37986,37973,37981,37975,37982,38852,38853,38912,39510,39513,39710,39711,39712,40018,40024,40016,40010,40013,40011,40021,40025,40012,40014,40443,40439,40431,40419,40427,40440,40420,40438,40417,40430,40422,40434,40432,40418,40428,40436,40435,40424,40429,40642,40656,40690,40691,40710,40732,40760,40759,40758,40771,40783,40817,40816,40814,40815,22227,22221,23374,23661,25901,26349,26350,27411,28767,28769,28765,28768,29219,29915,29925,30677,31032,31159,31158,31850,32407,32649,33389,34371,34872,34871,34869,34891,35732,35733,36510,36511,36512,36509,37310,37309,37314,37995,37992,37993,38629,38726,38723,38727,38855,38885,39518,39637,39769,40035,40039,40038,40034,40030,40032,40450,40446,40455,40451,40454,40453,40448,40449,40457,40447,40445,40452,40608,40734,40774,40820,40821,40822,22228,25902,26040,27416,27417,27415,27418,28770,29222,29354,30680,30681,31033,31849,31851,31990,32410,32408,32411,32409,33248,33249,34374,34375,34376,35193,35194,35196,35195,35327,35736,35737,36517,36516,36515,37998,37997,37999,38001,38003,38729,39026,39263,40040,40046,40045,40459,40461,40464,40463,40466,40465,40609,40693,40713,40775,40824,40827,40826,40825,22302,28774,31855,34876,36274,36518,37315,38004,38008,38006,38005,39520,40052,40051,40049,40053,40468,40467,40694,40714,40868,28776,28773,31991,34410,34878,34877,34879,35742,35996,36521,36553,38731,39027,39028,39116,39265,39339,39524,39526,39527,39716,40469,40471,40776,25095,27422,29223,34380,36520,38018,38016,38017,39529,39528,39726,40473,29225,34379,35743,38019,40057,40631,30325,39531,40058,40477,28777,28778,40612,40830,40777,40856,30849,37561,35023,22715,24658,31911,23290,9556,9574,9559,9568,9580,9571,9562,9577,9565,9554,9572,9557,9566,9578,9569,9560,9575,9563,9555,9573,9558,9567,9579,9570,9561,9576,9564,9553,9552,9581,9582,9584,9583,65517,132423,37595,132575,147397,34124,17077,29679,20917,13897,149826,166372,37700,137691,33518,146632,30780,26436,25311,149811,166314,131744,158643,135941,20395,140525,20488,159017,162436,144896,150193,140563,20521,131966,24484,131968,131911,28379,132127,20605,20737,13434,20750,39020,14147,33814,149924,132231,20832,144308,20842,134143,139516,131813,140592,132494,143923,137603,23426,34685,132531,146585,20914,20920,40244,20937,20943,20945,15580,20947,150182,20915,20962,21314,20973,33741,26942,145197,24443,21003,21030,21052,21173,21079,21140,21177,21189,31765,34114,21216,34317,158483,21253,166622,21833,28377,147328,133460,147436,21299,21316,134114,27851,136998,26651,29653,24650,16042,14540,136936,29149,17570,21357,21364,165547,21374,21375,136598,136723,30694,21395,166555,21408,21419,21422,29607,153458,16217,29596,21441,21445,27721,20041,22526,21465,15019,134031,21472,147435,142755,21494,134263,21523,28793,21803,26199,27995,21613,158547,134516,21853,21647,21668,18342,136973,134877,15796,134477,166332,140952,21831,19693,21551,29719,21894,21929,22021,137431,147514,17746,148533,26291,135348,22071,26317,144010,26276,26285,22093,22095,30961,22257,38791,21502,22272,22255,22253,166758,13859,135759,22342,147877,27758,28811,22338,14001,158846,22502,136214,22531,136276,148323,22566,150517,22620,22698,13665,22752,22748,135740,22779,23551,22339,172368,148088,37843,13729,22815,26790,14019,28249,136766,23076,21843,136850,34053,22985,134478,158849,159018,137180,23001,137211,137138,159142,28017,137256,136917,23033,159301,23211,23139,14054,149929,23159,14088,23190,29797,23251,159649,140628,15749,137489,14130,136888,24195,21200,23414,25992,23420,162318,16388,18525,131588,23509,24928,137780,154060,132517,23539,23453,19728,23557,138052,23571,29646,23572,138405,158504,23625,18653,23685,23785,23791,23947,138745,138807,23824,23832,23878,138916,23738,24023,33532,14381,149761,139337,139635,33415,14390,15298,24110,27274,24181,24186,148668,134355,21414,20151,24272,21416,137073,24073,24308,164994,24313,24315,14496,24316,26686,37915,24333,131521,194708,15070,18606,135994,24378,157832,140240,24408,140401,24419,38845,159342,24434,37696,166454,24487,23990,15711,152144,139114,159992,140904,37334,131742,166441,24625,26245,137335,14691,15815,13881,22416,141236,31089,15936,24734,24740,24755,149890,149903,162387,29860,20705,23200,24932,33828,24898,194726,159442,24961,20980,132694,24967,23466,147383,141407,25043,166813,170333,25040,14642,141696,141505,24611,24924,25886,25483,131352,25285,137072,25301,142861,25452,149983,14871,25656,25592,136078,137212,25744,28554,142902,38932,147596,153373,25825,25829,38011,14950,25658,14935,25933,28438,150056,150051,25989,25965,25951,143486,26037,149824,19255,26065,16600,137257,26080,26083,24543,144384,26136,143863,143864,26180,143780,143781,26187,134773,26215,152038,26227,26228,138813,143921,165364,143816,152339,30661,141559,39332,26370,148380,150049,15147,27130,145346,26462,26471,26466,147917,168173,26583,17641,26658,28240,37436,26625,144358,159136,26717,144495,27105,27147,166623,26995,26819,144845,26881,26880,15666,14849,144956,15232,26540,26977,166474,17148,26934,27032,15265,132041,33635,20624,27129,144985,139562,27205,145155,27293,15347,26545,27336,168348,15373,27421,133411,24798,27445,27508,141261,28341,146139,132021,137560,14144,21537,146266,27617,147196,27612,27703,140427,149745,158545,27738,33318,27769,146876,17605,146877,147876,149772,149760,146633,14053,15595,134450,39811,143865,140433,32655,26679,159013,159137,159211,28054,27996,28284,28420,149887,147589,159346,34099,159604,20935,27804,28189,33838,166689,28207,146991,29779,147330,31180,28239,23185,143435,28664,14093,28573,146992,28410,136343,147517,17749,37872,28484,28508,15694,28532,168304,15675,28575,147780,28627,147601,147797,147513,147440,147380,147775,20959,147798,147799,147776,156125,28747,28798,28839,28801,28876,28885,28886,28895,16644,15848,29108,29078,148087,28971,28997,23176,29002,29038,23708,148325,29007,37730,148161,28972,148570,150055,150050,29114,166888,28861,29198,37954,29205,22801,37955,29220,37697,153093,29230,29248,149876,26813,29269,29271,15957,143428,26637,28477,29314,29482,29483,149539,165931,18669,165892,29480,29486,29647,29610,134202,158254,29641,29769,147938,136935,150052,26147,14021,149943,149901,150011,29687,29717,26883,150054,29753,132547,16087,29788,141485,29792,167602,29767,29668,29814,33721,29804,14128,29812,37873,27180,29826,18771,150156,147807,150137,166799,23366,166915,137374,29896,137608,29966,29929,29982,167641,137803,23511,167596,37765,30029,30026,30055,30062,151426,16132,150803,30094,29789,30110,30132,30210,30252,30289,30287,30319,30326,156661,30352,33263,14328,157969,157966,30369,30373,30391,30412,159647,33890,151709,151933,138780,30494,30502,30528,25775,152096,30552,144044,30639,166244,166248,136897,30708,30729,136054,150034,26826,30895,30919,30931,38565,31022,153056,30935,31028,30897,161292,36792,34948,166699,155779,140828,31110,35072,26882,31104,153687,31133,162617,31036,31145,28202,160038,16040,31174,168205,31188], + "euc-kr":[44034,44035,44037,44038,44043,44044,44045,44046,44047,44056,44062,44063,44065,44066,44067,44069,44070,44071,44072,44073,44074,44075,44078,44082,44083,44084,null,null,null,null,null,null,44085,44086,44087,44090,44091,44093,44094,44095,44097,44098,44099,44100,44101,44102,44103,44104,44105,44106,44108,44110,44111,44112,44113,44114,44115,44117,null,null,null,null,null,null,44118,44119,44121,44122,44123,44125,44126,44127,44128,44129,44130,44131,44132,44133,44134,44135,44136,44137,44138,44139,44140,44141,44142,44143,44146,44147,44149,44150,44153,44155,44156,44157,44158,44159,44162,44167,44168,44173,44174,44175,44177,44178,44179,44181,44182,44183,44184,44185,44186,44187,44190,44194,44195,44196,44197,44198,44199,44203,44205,44206,44209,44210,44211,44212,44213,44214,44215,44218,44222,44223,44224,44226,44227,44229,44230,44231,44233,44234,44235,44237,44238,44239,44240,44241,44242,44243,44244,44246,44248,44249,44250,44251,44252,44253,44254,44255,44258,44259,44261,44262,44265,44267,44269,44270,44274,44276,44279,44280,44281,44282,44283,44286,44287,44289,44290,44291,44293,44295,44296,44297,44298,44299,44302,44304,44306,44307,44308,44309,44310,44311,44313,44314,44315,44317,44318,44319,44321,44322,44323,44324,44325,44326,44327,44328,44330,44331,44334,44335,44336,44337,44338,44339,null,null,null,null,null,null,44342,44343,44345,44346,44347,44349,44350,44351,44352,44353,44354,44355,44358,44360,44362,44363,44364,44365,44366,44367,44369,44370,44371,44373,44374,44375,null,null,null,null,null,null,44377,44378,44379,44380,44381,44382,44383,44384,44386,44388,44389,44390,44391,44392,44393,44394,44395,44398,44399,44401,44402,44407,44408,44409,44410,44414,44416,44419,44420,44421,44422,44423,44426,44427,44429,44430,44431,44433,44434,44435,44436,44437,44438,44439,44440,44441,44442,44443,44446,44447,44448,44449,44450,44451,44453,44454,44455,44456,44457,44458,44459,44460,44461,44462,44463,44464,44465,44466,44467,44468,44469,44470,44472,44473,44474,44475,44476,44477,44478,44479,44482,44483,44485,44486,44487,44489,44490,44491,44492,44493,44494,44495,44498,44500,44501,44502,44503,44504,44505,44506,44507,44509,44510,44511,44513,44514,44515,44517,44518,44519,44520,44521,44522,44523,44524,44525,44526,44527,44528,44529,44530,44531,44532,44533,44534,44535,44538,44539,44541,44542,44546,44547,44548,44549,44550,44551,44554,44556,44558,44559,44560,44561,44562,44563,44565,44566,44567,44568,44569,44570,44571,44572,null,null,null,null,null,null,44573,44574,44575,44576,44577,44578,44579,44580,44581,44582,44583,44584,44585,44586,44587,44588,44589,44590,44591,44594,44595,44597,44598,44601,44603,44604,null,null,null,null,null,null,44605,44606,44607,44610,44612,44615,44616,44617,44619,44623,44625,44626,44627,44629,44631,44632,44633,44634,44635,44638,44642,44643,44644,44646,44647,44650,44651,44653,44654,44655,44657,44658,44659,44660,44661,44662,44663,44666,44670,44671,44672,44673,44674,44675,44678,44679,44680,44681,44682,44683,44685,44686,44687,44688,44689,44690,44691,44692,44693,44694,44695,44696,44697,44698,44699,44700,44701,44702,44703,44704,44705,44706,44707,44708,44709,44710,44711,44712,44713,44714,44715,44716,44717,44718,44719,44720,44721,44722,44723,44724,44725,44726,44727,44728,44729,44730,44731,44735,44737,44738,44739,44741,44742,44743,44744,44745,44746,44747,44750,44754,44755,44756,44757,44758,44759,44762,44763,44765,44766,44767,44768,44769,44770,44771,44772,44773,44774,44775,44777,44778,44780,44782,44783,44784,44785,44786,44787,44789,44790,44791,44793,44794,44795,44797,44798,44799,44800,44801,44802,44803,44804,44805,null,null,null,null,null,null,44806,44809,44810,44811,44812,44814,44815,44817,44818,44819,44820,44821,44822,44823,44824,44825,44826,44827,44828,44829,44830,44831,44832,44833,44834,44835,null,null,null,null,null,null,44836,44837,44838,44839,44840,44841,44842,44843,44846,44847,44849,44851,44853,44854,44855,44856,44857,44858,44859,44862,44864,44868,44869,44870,44871,44874,44875,44876,44877,44878,44879,44881,44882,44883,44884,44885,44886,44887,44888,44889,44890,44891,44894,44895,44896,44897,44898,44899,44902,44903,44904,44905,44906,44907,44908,44909,44910,44911,44912,44913,44914,44915,44916,44917,44918,44919,44920,44922,44923,44924,44925,44926,44927,44929,44930,44931,44933,44934,44935,44937,44938,44939,44940,44941,44942,44943,44946,44947,44948,44950,44951,44952,44953,44954,44955,44957,44958,44959,44960,44961,44962,44963,44964,44965,44966,44967,44968,44969,44970,44971,44972,44973,44974,44975,44976,44977,44978,44979,44980,44981,44982,44983,44986,44987,44989,44990,44991,44993,44994,44995,44996,44997,44998,45002,45004,45007,45008,45009,45010,45011,45013,45014,45015,45016,45017,45018,45019,45021,45022,45023,45024,45025,null,null,null,null,null,null,45026,45027,45028,45029,45030,45031,45034,45035,45036,45037,45038,45039,45042,45043,45045,45046,45047,45049,45050,45051,45052,45053,45054,45055,45058,45059,null,null,null,null,null,null,45061,45062,45063,45064,45065,45066,45067,45069,45070,45071,45073,45074,45075,45077,45078,45079,45080,45081,45082,45083,45086,45087,45088,45089,45090,45091,45092,45093,45094,45095,45097,45098,45099,45100,45101,45102,45103,45104,45105,45106,45107,45108,45109,45110,45111,45112,45113,45114,45115,45116,45117,45118,45119,45120,45121,45122,45123,45126,45127,45129,45131,45133,45135,45136,45137,45138,45142,45144,45146,45147,45148,45150,45151,45152,45153,45154,45155,45156,45157,45158,45159,45160,45161,45162,45163,45164,45165,45166,45167,45168,45169,45170,45171,45172,45173,45174,45175,45176,45177,45178,45179,45182,45183,45185,45186,45187,45189,45190,45191,45192,45193,45194,45195,45198,45200,45202,45203,45204,45205,45206,45207,45211,45213,45214,45219,45220,45221,45222,45223,45226,45232,45234,45238,45239,45241,45242,45243,45245,45246,45247,45248,45249,45250,45251,45254,45258,45259,45260,45261,45262,45263,45266,null,null,null,null,null,null,45267,45269,45270,45271,45273,45274,45275,45276,45277,45278,45279,45281,45282,45283,45284,45286,45287,45288,45289,45290,45291,45292,45293,45294,45295,45296,null,null,null,null,null,null,45297,45298,45299,45300,45301,45302,45303,45304,45305,45306,45307,45308,45309,45310,45311,45312,45313,45314,45315,45316,45317,45318,45319,45322,45325,45326,45327,45329,45332,45333,45334,45335,45338,45342,45343,45344,45345,45346,45350,45351,45353,45354,45355,45357,45358,45359,45360,45361,45362,45363,45366,45370,45371,45372,45373,45374,45375,45378,45379,45381,45382,45383,45385,45386,45387,45388,45389,45390,45391,45394,45395,45398,45399,45401,45402,45403,45405,45406,45407,45409,45410,45411,45412,45413,45414,45415,45416,45417,45418,45419,45420,45421,45422,45423,45424,45425,45426,45427,45428,45429,45430,45431,45434,45435,45437,45438,45439,45441,45443,45444,45445,45446,45447,45450,45452,45454,45455,45456,45457,45461,45462,45463,45465,45466,45467,45469,45470,45471,45472,45473,45474,45475,45476,45477,45478,45479,45481,45482,45483,45484,45485,45486,45487,45488,45489,45490,45491,45492,45493,45494,45495,45496,null,null,null,null,null,null,45497,45498,45499,45500,45501,45502,45503,45504,45505,45506,45507,45508,45509,45510,45511,45512,45513,45514,45515,45517,45518,45519,45521,45522,45523,45525,null,null,null,null,null,null,45526,45527,45528,45529,45530,45531,45534,45536,45537,45538,45539,45540,45541,45542,45543,45546,45547,45549,45550,45551,45553,45554,45555,45556,45557,45558,45559,45560,45562,45564,45566,45567,45568,45569,45570,45571,45574,45575,45577,45578,45581,45582,45583,45584,45585,45586,45587,45590,45592,45594,45595,45596,45597,45598,45599,45601,45602,45603,45604,45605,45606,45607,45608,45609,45610,45611,45612,45613,45614,45615,45616,45617,45618,45619,45621,45622,45623,45624,45625,45626,45627,45629,45630,45631,45632,45633,45634,45635,45636,45637,45638,45639,45640,45641,45642,45643,45644,45645,45646,45647,45648,45649,45650,45651,45652,45653,45654,45655,45657,45658,45659,45661,45662,45663,45665,45666,45667,45668,45669,45670,45671,45674,45675,45676,45677,45678,45679,45680,45681,45682,45683,45686,45687,45688,45689,45690,45691,45693,45694,45695,45696,45697,45698,45699,45702,45703,45704,45706,45707,45708,45709,45710,null,null,null,null,null,null,45711,45714,45715,45717,45718,45719,45723,45724,45725,45726,45727,45730,45732,45735,45736,45737,45739,45741,45742,45743,45745,45746,45747,45749,45750,45751,null,null,null,null,null,null,45752,45753,45754,45755,45756,45757,45758,45759,45760,45761,45762,45763,45764,45765,45766,45767,45770,45771,45773,45774,45775,45777,45779,45780,45781,45782,45783,45786,45788,45790,45791,45792,45793,45795,45799,45801,45802,45808,45809,45810,45814,45820,45821,45822,45826,45827,45829,45830,45831,45833,45834,45835,45836,45837,45838,45839,45842,45846,45847,45848,45849,45850,45851,45853,45854,45855,45856,45857,45858,45859,45860,45861,45862,45863,45864,45865,45866,45867,45868,45869,45870,45871,45872,45873,45874,45875,45876,45877,45878,45879,45880,45881,45882,45883,45884,45885,45886,45887,45888,45889,45890,45891,45892,45893,45894,45895,45896,45897,45898,45899,45900,45901,45902,45903,45904,45905,45906,45907,45911,45913,45914,45917,45920,45921,45922,45923,45926,45928,45930,45932,45933,45935,45938,45939,45941,45942,45943,45945,45946,45947,45948,45949,45950,45951,45954,45958,45959,45960,45961,45962,45963,45965,null,null,null,null,null,null,45966,45967,45969,45970,45971,45973,45974,45975,45976,45977,45978,45979,45980,45981,45982,45983,45986,45987,45988,45989,45990,45991,45993,45994,45995,45997,null,null,null,null,null,null,45998,45999,46000,46001,46002,46003,46004,46005,46006,46007,46008,46009,46010,46011,46012,46013,46014,46015,46016,46017,46018,46019,46022,46023,46025,46026,46029,46031,46033,46034,46035,46038,46040,46042,46044,46046,46047,46049,46050,46051,46053,46054,46055,46057,46058,46059,46060,46061,46062,46063,46064,46065,46066,46067,46068,46069,46070,46071,46072,46073,46074,46075,46077,46078,46079,46080,46081,46082,46083,46084,46085,46086,46087,46088,46089,46090,46091,46092,46093,46094,46095,46097,46098,46099,46100,46101,46102,46103,46105,46106,46107,46109,46110,46111,46113,46114,46115,46116,46117,46118,46119,46122,46124,46125,46126,46127,46128,46129,46130,46131,46133,46134,46135,46136,46137,46138,46139,46140,46141,46142,46143,46144,46145,46146,46147,46148,46149,46150,46151,46152,46153,46154,46155,46156,46157,46158,46159,46162,46163,46165,46166,46167,46169,46170,46171,46172,46173,46174,46175,46178,46180,46182,null,null,null,null,null,null,46183,46184,46185,46186,46187,46189,46190,46191,46192,46193,46194,46195,46196,46197,46198,46199,46200,46201,46202,46203,46204,46205,46206,46207,46209,46210,null,null,null,null,null,null,46211,46212,46213,46214,46215,46217,46218,46219,46220,46221,46222,46223,46224,46225,46226,46227,46228,46229,46230,46231,46232,46233,46234,46235,46236,46238,46239,46240,46241,46242,46243,46245,46246,46247,46249,46250,46251,46253,46254,46255,46256,46257,46258,46259,46260,46262,46264,46266,46267,46268,46269,46270,46271,46273,46274,46275,46277,46278,46279,46281,46282,46283,46284,46285,46286,46287,46289,46290,46291,46292,46294,46295,46296,46297,46298,46299,46302,46303,46305,46306,46309,46311,46312,46313,46314,46315,46318,46320,46322,46323,46324,46325,46326,46327,46329,46330,46331,46332,46333,46334,46335,46336,46337,46338,46339,46340,46341,46342,46343,46344,46345,46346,46347,46348,46349,46350,46351,46352,46353,46354,46355,46358,46359,46361,46362,46365,46366,46367,46368,46369,46370,46371,46374,46379,46380,46381,46382,46383,46386,46387,46389,46390,46391,46393,46394,46395,46396,46397,46398,46399,46402,46406,null,null,null,null,null,null,46407,46408,46409,46410,46414,46415,46417,46418,46419,46421,46422,46423,46424,46425,46426,46427,46430,46434,46435,46436,46437,46438,46439,46440,46441,46442,null,null,null,null,null,null,46443,46444,46445,46446,46447,46448,46449,46450,46451,46452,46453,46454,46455,46456,46457,46458,46459,46460,46461,46462,46463,46464,46465,46466,46467,46468,46469,46470,46471,46472,46473,46474,46475,46476,46477,46478,46479,46480,46481,46482,46483,46484,46485,46486,46487,46488,46489,46490,46491,46492,46493,46494,46495,46498,46499,46501,46502,46503,46505,46508,46509,46510,46511,46514,46518,46519,46520,46521,46522,46526,46527,46529,46530,46531,46533,46534,46535,46536,46537,46538,46539,46542,46546,46547,46548,46549,46550,46551,46553,46554,46555,46556,46557,46558,46559,46560,46561,46562,46563,46564,46565,46566,46567,46568,46569,46570,46571,46573,46574,46575,46576,46577,46578,46579,46580,46581,46582,46583,46584,46585,46586,46587,46588,46589,46590,46591,46592,46593,46594,46595,46596,46597,46598,46599,46600,46601,46602,46603,46604,46605,46606,46607,46610,46611,46613,46614,46615,46617,46618,46619,46620,46621,null,null,null,null,null,null,46622,46623,46624,46625,46626,46627,46628,46630,46631,46632,46633,46634,46635,46637,46638,46639,46640,46641,46642,46643,46645,46646,46647,46648,46649,46650,null,null,null,null,null,null,46651,46652,46653,46654,46655,46656,46657,46658,46659,46660,46661,46662,46663,46665,46666,46667,46668,46669,46670,46671,46672,46673,46674,46675,46676,46677,46678,46679,46680,46681,46682,46683,46684,46685,46686,46687,46688,46689,46690,46691,46693,46694,46695,46697,46698,46699,46700,46701,46702,46703,46704,46705,46706,46707,46708,46709,46710,46711,46712,46713,46714,46715,46716,46717,46718,46719,46720,46721,46722,46723,46724,46725,46726,46727,46728,46729,46730,46731,46732,46733,46734,46735,46736,46737,46738,46739,46740,46741,46742,46743,46744,46745,46746,46747,46750,46751,46753,46754,46755,46757,46758,46759,46760,46761,46762,46765,46766,46767,46768,46770,46771,46772,46773,46774,46775,46776,46777,46778,46779,46780,46781,46782,46783,46784,46785,46786,46787,46788,46789,46790,46791,46792,46793,46794,46795,46796,46797,46798,46799,46800,46801,46802,46803,46805,46806,46807,46808,46809,46810,46811,46812,46813,null,null,null,null,null,null,46814,46815,46816,46817,46818,46819,46820,46821,46822,46823,46824,46825,46826,46827,46828,46829,46830,46831,46833,46834,46835,46837,46838,46839,46841,46842,null,null,null,null,null,null,46843,46844,46845,46846,46847,46850,46851,46852,46854,46855,46856,46857,46858,46859,46860,46861,46862,46863,46864,46865,46866,46867,46868,46869,46870,46871,46872,46873,46874,46875,46876,46877,46878,46879,46880,46881,46882,46883,46884,46885,46886,46887,46890,46891,46893,46894,46897,46898,46899,46900,46901,46902,46903,46906,46908,46909,46910,46911,46912,46913,46914,46915,46917,46918,46919,46921,46922,46923,46925,46926,46927,46928,46929,46930,46931,46934,46935,46936,46937,46938,46939,46940,46941,46942,46943,46945,46946,46947,46949,46950,46951,46953,46954,46955,46956,46957,46958,46959,46962,46964,46966,46967,46968,46969,46970,46971,46974,46975,46977,46978,46979,46981,46982,46983,46984,46985,46986,46987,46990,46995,46996,46997,47002,47003,47005,47006,47007,47009,47010,47011,47012,47013,47014,47015,47018,47022,47023,47024,47025,47026,47027,47030,47031,47033,47034,47035,47036,47037,47038,47039,47040,47041,null,null,null,null,null,null,47042,47043,47044,47045,47046,47048,47050,47051,47052,47053,47054,47055,47056,47057,47058,47059,47060,47061,47062,47063,47064,47065,47066,47067,47068,47069,null,null,null,null,null,null,47070,47071,47072,47073,47074,47075,47076,47077,47078,47079,47080,47081,47082,47083,47086,47087,47089,47090,47091,47093,47094,47095,47096,47097,47098,47099,47102,47106,47107,47108,47109,47110,47114,47115,47117,47118,47119,47121,47122,47123,47124,47125,47126,47127,47130,47132,47134,47135,47136,47137,47138,47139,47142,47143,47145,47146,47147,47149,47150,47151,47152,47153,47154,47155,47158,47162,47163,47164,47165,47166,47167,47169,47170,47171,47173,47174,47175,47176,47177,47178,47179,47180,47181,47182,47183,47184,47186,47188,47189,47190,47191,47192,47193,47194,47195,47198,47199,47201,47202,47203,47205,47206,47207,47208,47209,47210,47211,47214,47216,47218,47219,47220,47221,47222,47223,47225,47226,47227,47229,47230,47231,47232,47233,47234,47235,47236,47237,47238,47239,47240,47241,47242,47243,47244,47246,47247,47248,47249,47250,47251,47252,47253,47254,47255,47256,47257,47258,47259,47260,47261,47262,47263,null,null,null,null,null,null,47264,47265,47266,47267,47268,47269,47270,47271,47273,47274,47275,47276,47277,47278,47279,47281,47282,47283,47285,47286,47287,47289,47290,47291,47292,47293,null,null,null,null,null,null,47294,47295,47298,47300,47302,47303,47304,47305,47306,47307,47309,47310,47311,47313,47314,47315,47317,47318,47319,47320,47321,47322,47323,47324,47326,47328,47330,47331,47332,47333,47334,47335,47338,47339,47341,47342,47343,47345,47346,47347,47348,47349,47350,47351,47354,47356,47358,47359,47360,47361,47362,47363,47365,47366,47367,47368,47369,47370,47371,47372,47373,47374,47375,47376,47377,47378,47379,47380,47381,47382,47383,47385,47386,47387,47388,47389,47390,47391,47393,47394,47395,47396,47397,47398,47399,47400,47401,47402,47403,47404,47405,47406,47407,47408,47409,47410,47411,47412,47413,47414,47415,47416,47417,47418,47419,47422,47423,47425,47426,47427,47429,47430,47431,47432,47433,47434,47435,47437,47438,47440,47442,47443,47444,47445,47446,47447,47450,47451,47453,47454,47455,47457,47458,47459,47460,47461,47462,47463,47466,47468,47470,47471,47472,47473,47474,47475,47478,47479,47481,47482,47483,47485,null,null,null,null,null,null,47486,47487,47488,47489,47490,47491,47494,47496,47499,47500,47503,47504,47505,47506,47507,47508,47509,47510,47511,47512,47513,47514,47515,47516,47517,47518,null,null,null,null,null,null,47519,47520,47521,47522,47523,47524,47525,47526,47527,47528,47529,47530,47531,47534,47535,47537,47538,47539,47541,47542,47543,47544,47545,47546,47547,47550,47552,47554,47555,47556,47557,47558,47559,47562,47563,47565,47571,47572,47573,47574,47575,47578,47580,47583,47584,47586,47590,47591,47593,47594,47595,47597,47598,47599,47600,47601,47602,47603,47606,47611,47612,47613,47614,47615,47618,47619,47620,47621,47622,47623,47625,47626,47627,47628,47629,47630,47631,47632,47633,47634,47635,47636,47638,47639,47640,47641,47642,47643,47644,47645,47646,47647,47648,47649,47650,47651,47652,47653,47654,47655,47656,47657,47658,47659,47660,47661,47662,47663,47664,47665,47666,47667,47668,47669,47670,47671,47674,47675,47677,47678,47679,47681,47683,47684,47685,47686,47687,47690,47692,47695,47696,47697,47698,47702,47703,47705,47706,47707,47709,47710,47711,47712,47713,47714,47715,47718,47722,47723,47724,47725,47726,47727,null,null,null,null,null,null,47730,47731,47733,47734,47735,47737,47738,47739,47740,47741,47742,47743,47744,47745,47746,47750,47752,47753,47754,47755,47757,47758,47759,47760,47761,47762,null,null,null,null,null,null,47763,47764,47765,47766,47767,47768,47769,47770,47771,47772,47773,47774,47775,47776,47777,47778,47779,47780,47781,47782,47783,47786,47789,47790,47791,47793,47795,47796,47797,47798,47799,47802,47804,47806,47807,47808,47809,47810,47811,47813,47814,47815,47817,47818,47819,47820,47821,47822,47823,47824,47825,47826,47827,47828,47829,47830,47831,47834,47835,47836,47837,47838,47839,47840,47841,47842,47843,47844,47845,47846,47847,47848,47849,47850,47851,47852,47853,47854,47855,47856,47857,47858,47859,47860,47861,47862,47863,47864,47865,47866,47867,47869,47870,47871,47873,47874,47875,47877,47878,47879,47880,47881,47882,47883,47884,47886,47888,47890,47891,47892,47893,47894,47895,47897,47898,47899,47901,47902,47903,47905,47906,47907,47908,47909,47910,47911,47912,47914,47916,47917,47918,47919,47920,47921,47922,47923,47927,47929,47930,47935,47936,47937,47938,47939,47942,47944,47946,47947,47948,47950,47953,47954,null,null,null,null,null,null,47955,47957,47958,47959,47961,47962,47963,47964,47965,47966,47967,47968,47970,47972,47973,47974,47975,47976,47977,47978,47979,47981,47982,47983,47984,47985,null,null,null,null,null,null,47986,47987,47988,47989,47990,47991,47992,47993,47994,47995,47996,47997,47998,47999,48000,48001,48002,48003,48004,48005,48006,48007,48009,48010,48011,48013,48014,48015,48017,48018,48019,48020,48021,48022,48023,48024,48025,48026,48027,48028,48029,48030,48031,48032,48033,48034,48035,48037,48038,48039,48041,48042,48043,48045,48046,48047,48048,48049,48050,48051,48053,48054,48056,48057,48058,48059,48060,48061,48062,48063,48065,48066,48067,48069,48070,48071,48073,48074,48075,48076,48077,48078,48079,48081,48082,48084,48085,48086,48087,48088,48089,48090,48091,48092,48093,48094,48095,48096,48097,48098,48099,48100,48101,48102,48103,48104,48105,48106,48107,48108,48109,48110,48111,48112,48113,48114,48115,48116,48117,48118,48119,48122,48123,48125,48126,48129,48131,48132,48133,48134,48135,48138,48142,48144,48146,48147,48153,48154,48160,48161,48162,48163,48166,48168,48170,48171,48172,48174,48175,48178,48179,48181,null,null,null,null,null,null,48182,48183,48185,48186,48187,48188,48189,48190,48191,48194,48198,48199,48200,48202,48203,48206,48207,48209,48210,48211,48212,48213,48214,48215,48216,48217,null,null,null,null,null,null,48218,48219,48220,48222,48223,48224,48225,48226,48227,48228,48229,48230,48231,48232,48233,48234,48235,48236,48237,48238,48239,48240,48241,48242,48243,48244,48245,48246,48247,48248,48249,48250,48251,48252,48253,48254,48255,48256,48257,48258,48259,48262,48263,48265,48266,48269,48271,48272,48273,48274,48275,48278,48280,48283,48284,48285,48286,48287,48290,48291,48293,48294,48297,48298,48299,48300,48301,48302,48303,48306,48310,48311,48312,48313,48314,48315,48318,48319,48321,48322,48323,48325,48326,48327,48328,48329,48330,48331,48332,48334,48338,48339,48340,48342,48343,48345,48346,48347,48349,48350,48351,48352,48353,48354,48355,48356,48357,48358,48359,48360,48361,48362,48363,48364,48365,48366,48367,48368,48369,48370,48371,48375,48377,48378,48379,48381,48382,48383,48384,48385,48386,48387,48390,48392,48394,48395,48396,48397,48398,48399,48401,48402,48403,48405,48406,48407,48408,48409,48410,48411,48412,48413,null,null,null,null,null,null,48414,48415,48416,48417,48418,48419,48421,48422,48423,48424,48425,48426,48427,48429,48430,48431,48432,48433,48434,48435,48436,48437,48438,48439,48440,48441,null,null,null,null,null,null,48442,48443,48444,48445,48446,48447,48449,48450,48451,48452,48453,48454,48455,48458,48459,48461,48462,48463,48465,48466,48467,48468,48469,48470,48471,48474,48475,48476,48477,48478,48479,48480,48481,48482,48483,48485,48486,48487,48489,48490,48491,48492,48493,48494,48495,48496,48497,48498,48499,48500,48501,48502,48503,48504,48505,48506,48507,48508,48509,48510,48511,48514,48515,48517,48518,48523,48524,48525,48526,48527,48530,48532,48534,48535,48536,48539,48541,48542,48543,48544,48545,48546,48547,48549,48550,48551,48552,48553,48554,48555,48556,48557,48558,48559,48561,48562,48563,48564,48565,48566,48567,48569,48570,48571,48572,48573,48574,48575,48576,48577,48578,48579,48580,48581,48582,48583,48584,48585,48586,48587,48588,48589,48590,48591,48592,48593,48594,48595,48598,48599,48601,48602,48603,48605,48606,48607,48608,48609,48610,48611,48612,48613,48614,48615,48616,48618,48619,48620,48621,48622,48623,48625,null,null,null,null,null,null,48626,48627,48629,48630,48631,48633,48634,48635,48636,48637,48638,48639,48641,48642,48644,48646,48647,48648,48649,48650,48651,48654,48655,48657,48658,48659,null,null,null,null,null,null,48661,48662,48663,48664,48665,48666,48667,48670,48672,48673,48674,48675,48676,48677,48678,48679,48680,48681,48682,48683,48684,48685,48686,48687,48688,48689,48690,48691,48692,48693,48694,48695,48696,48697,48698,48699,48700,48701,48702,48703,48704,48705,48706,48707,48710,48711,48713,48714,48715,48717,48719,48720,48721,48722,48723,48726,48728,48732,48733,48734,48735,48738,48739,48741,48742,48743,48745,48747,48748,48749,48750,48751,48754,48758,48759,48760,48761,48762,48766,48767,48769,48770,48771,48773,48774,48775,48776,48777,48778,48779,48782,48786,48787,48788,48789,48790,48791,48794,48795,48796,48797,48798,48799,48800,48801,48802,48803,48804,48805,48806,48807,48809,48810,48811,48812,48813,48814,48815,48816,48817,48818,48819,48820,48821,48822,48823,48824,48825,48826,48827,48828,48829,48830,48831,48832,48833,48834,48835,48836,48837,48838,48839,48840,48841,48842,48843,48844,48845,48846,48847,48850,48851,null,null,null,null,null,null,48853,48854,48857,48858,48859,48860,48861,48862,48863,48865,48866,48870,48871,48872,48873,48874,48875,48877,48878,48879,48880,48881,48882,48883,48884,48885,null,null,null,null,null,null,48886,48887,48888,48889,48890,48891,48892,48893,48894,48895,48896,48898,48899,48900,48901,48902,48903,48906,48907,48908,48909,48910,48911,48912,48913,48914,48915,48916,48917,48918,48919,48922,48926,48927,48928,48929,48930,48931,48932,48933,48934,48935,48936,48937,48938,48939,48940,48941,48942,48943,48944,48945,48946,48947,48948,48949,48950,48951,48952,48953,48954,48955,48956,48957,48958,48959,48962,48963,48965,48966,48967,48969,48970,48971,48972,48973,48974,48975,48978,48979,48980,48982,48983,48984,48985,48986,48987,48988,48989,48990,48991,48992,48993,48994,48995,48996,48997,48998,48999,49000,49001,49002,49003,49004,49005,49006,49007,49008,49009,49010,49011,49012,49013,49014,49015,49016,49017,49018,49019,49020,49021,49022,49023,49024,49025,49026,49027,49028,49029,49030,49031,49032,49033,49034,49035,49036,49037,49038,49039,49040,49041,49042,49043,49045,49046,49047,49048,49049,49050,49051,49052,49053,null,null,null,null,null,null,49054,49055,49056,49057,49058,49059,49060,49061,49062,49063,49064,49065,49066,49067,49068,49069,49070,49071,49073,49074,49075,49076,49077,49078,49079,49080,null,null,null,null,null,null,49081,49082,49083,49084,49085,49086,49087,49088,49089,49090,49091,49092,49094,49095,49096,49097,49098,49099,49102,49103,49105,49106,49107,49109,49110,49111,49112,49113,49114,49115,49117,49118,49120,49122,49123,49124,49125,49126,49127,49128,49129,49130,49131,49132,49133,49134,49135,49136,49137,49138,49139,49140,49141,49142,49143,49144,49145,49146,49147,49148,49149,49150,49151,49152,49153,49154,49155,49156,49157,49158,49159,49160,49161,49162,49163,49164,49165,49166,49167,49168,49169,49170,49171,49172,49173,49174,49175,49176,49177,49178,49179,49180,49181,49182,49183,49184,49185,49186,49187,49188,49189,49190,49191,49192,49193,49194,49195,49196,49197,49198,49199,49200,49201,49202,49203,49204,49205,49206,49207,49208,49209,49210,49211,49213,49214,49215,49216,49217,49218,49219,49220,49221,49222,49223,49224,49225,49226,49227,49228,49229,49230,49231,49232,49234,49235,49236,49237,49238,49239,49241,49242,49243,null,null,null,null,null,null,49245,49246,49247,49249,49250,49251,49252,49253,49254,49255,49258,49259,49260,49261,49262,49263,49264,49265,49266,49267,49268,49269,49270,49271,49272,49273,null,null,null,null,null,null,49274,49275,49276,49277,49278,49279,49280,49281,49282,49283,49284,49285,49286,49287,49288,49289,49290,49291,49292,49293,49294,49295,49298,49299,49301,49302,49303,49305,49306,49307,49308,49309,49310,49311,49314,49316,49318,49319,49320,49321,49322,49323,49326,49329,49330,49335,49336,49337,49338,49339,49342,49346,49347,49348,49350,49351,49354,49355,49357,49358,49359,49361,49362,49363,49364,49365,49366,49367,49370,49374,49375,49376,49377,49378,49379,49382,49383,49385,49386,49387,49389,49390,49391,49392,49393,49394,49395,49398,49400,49402,49403,49404,49405,49406,49407,49409,49410,49411,49413,49414,49415,49417,49418,49419,49420,49421,49422,49423,49425,49426,49427,49428,49430,49431,49432,49433,49434,49435,49441,49442,49445,49448,49449,49450,49451,49454,49458,49459,49460,49461,49463,49466,49467,49469,49470,49471,49473,49474,49475,49476,49477,49478,49479,49482,49486,49487,49488,49489,49490,49491,49494,49495,null,null,null,null,null,null,49497,49498,49499,49501,49502,49503,49504,49505,49506,49507,49510,49514,49515,49516,49517,49518,49519,49521,49522,49523,49525,49526,49527,49529,49530,49531,null,null,null,null,null,null,49532,49533,49534,49535,49536,49537,49538,49539,49540,49542,49543,49544,49545,49546,49547,49551,49553,49554,49555,49557,49559,49560,49561,49562,49563,49566,49568,49570,49571,49572,49574,49575,49578,49579,49581,49582,49583,49585,49586,49587,49588,49589,49590,49591,49592,49593,49594,49595,49596,49598,49599,49600,49601,49602,49603,49605,49606,49607,49609,49610,49611,49613,49614,49615,49616,49617,49618,49619,49621,49622,49625,49626,49627,49628,49629,49630,49631,49633,49634,49635,49637,49638,49639,49641,49642,49643,49644,49645,49646,49647,49650,49652,49653,49654,49655,49656,49657,49658,49659,49662,49663,49665,49666,49667,49669,49670,49671,49672,49673,49674,49675,49678,49680,49682,49683,49684,49685,49686,49687,49690,49691,49693,49694,49697,49698,49699,49700,49701,49702,49703,49706,49708,49710,49712,49715,49717,49718,49719,49720,49721,49722,49723,49724,49725,49726,49727,49728,49729,49730,49731,49732,49733,null,null,null,null,null,null,49734,49735,49737,49738,49739,49740,49741,49742,49743,49746,49747,49749,49750,49751,49753,49754,49755,49756,49757,49758,49759,49761,49762,49763,49764,49766,null,null,null,null,null,null,49767,49768,49769,49770,49771,49774,49775,49777,49778,49779,49781,49782,49783,49784,49785,49786,49787,49790,49792,49794,49795,49796,49797,49798,49799,49802,49803,49804,49805,49806,49807,49809,49810,49811,49812,49813,49814,49815,49817,49818,49820,49822,49823,49824,49825,49826,49827,49830,49831,49833,49834,49835,49838,49839,49840,49841,49842,49843,49846,49848,49850,49851,49852,49853,49854,49855,49856,49857,49858,49859,49860,49861,49862,49863,49864,49865,49866,49867,49868,49869,49870,49871,49872,49873,49874,49875,49876,49877,49878,49879,49880,49881,49882,49883,49886,49887,49889,49890,49893,49894,49895,49896,49897,49898,49902,49904,49906,49907,49908,49909,49911,49914,49917,49918,49919,49921,49922,49923,49924,49925,49926,49927,49930,49931,49934,49935,49936,49937,49938,49942,49943,49945,49946,49947,49949,49950,49951,49952,49953,49954,49955,49958,49959,49962,49963,49964,49965,49966,49967,49968,49969,49970,null,null,null,null,null,null,49971,49972,49973,49974,49975,49976,49977,49978,49979,49980,49981,49982,49983,49984,49985,49986,49987,49988,49990,49991,49992,49993,49994,49995,49996,49997,null,null,null,null,null,null,49998,49999,50000,50001,50002,50003,50004,50005,50006,50007,50008,50009,50010,50011,50012,50013,50014,50015,50016,50017,50018,50019,50020,50021,50022,50023,50026,50027,50029,50030,50031,50033,50035,50036,50037,50038,50039,50042,50043,50046,50047,50048,50049,50050,50051,50053,50054,50055,50057,50058,50059,50061,50062,50063,50064,50065,50066,50067,50068,50069,50070,50071,50072,50073,50074,50075,50076,50077,50078,50079,50080,50081,50082,50083,50084,50085,50086,50087,50088,50089,50090,50091,50092,50093,50094,50095,50096,50097,50098,50099,50100,50101,50102,50103,50104,50105,50106,50107,50108,50109,50110,50111,50113,50114,50115,50116,50117,50118,50119,50120,50121,50122,50123,50124,50125,50126,50127,50128,50129,50130,50131,50132,50133,50134,50135,50138,50139,50141,50142,50145,50147,50148,50149,50150,50151,50154,50155,50156,50158,50159,50160,50161,50162,50163,50166,50167,50169,50170,50171,50172,50173,50174,null,null,null,null,null,null,50175,50176,50177,50178,50179,50180,50181,50182,50183,50185,50186,50187,50188,50189,50190,50191,50193,50194,50195,50196,50197,50198,50199,50200,50201,50202,null,null,null,null,null,null,50203,50204,50205,50206,50207,50208,50209,50210,50211,50213,50214,50215,50216,50217,50218,50219,50221,50222,50223,50225,50226,50227,50229,50230,50231,50232,50233,50234,50235,50238,50239,50240,50241,50242,50243,50244,50245,50246,50247,50249,50250,50251,50252,50253,50254,50255,50256,50257,50258,50259,50260,50261,50262,50263,50264,50265,50266,50267,50268,50269,50270,50271,50272,50273,50274,50275,50278,50279,50281,50282,50283,50285,50286,50287,50288,50289,50290,50291,50294,50295,50296,50298,50299,50300,50301,50302,50303,50305,50306,50307,50308,50309,50310,50311,50312,50313,50314,50315,50316,50317,50318,50319,50320,50321,50322,50323,50325,50326,50327,50328,50329,50330,50331,50333,50334,50335,50336,50337,50338,50339,50340,50341,50342,50343,50344,50345,50346,50347,50348,50349,50350,50351,50352,50353,50354,50355,50356,50357,50358,50359,50361,50362,50363,50365,50366,50367,50368,50369,50370,50371,50372,50373,null,null,null,null,null,null,50374,50375,50376,50377,50378,50379,50380,50381,50382,50383,50384,50385,50386,50387,50388,50389,50390,50391,50392,50393,50394,50395,50396,50397,50398,50399,null,null,null,null,null,null,50400,50401,50402,50403,50404,50405,50406,50407,50408,50410,50411,50412,50413,50414,50415,50418,50419,50421,50422,50423,50425,50427,50428,50429,50430,50434,50435,50436,50437,50438,50439,50440,50441,50442,50443,50445,50446,50447,50449,50450,50451,50453,50454,50455,50456,50457,50458,50459,50461,50462,50463,50464,50465,50466,50467,50468,50469,50470,50471,50474,50475,50477,50478,50479,50481,50482,50483,50484,50485,50486,50487,50490,50492,50494,50495,50496,50497,50498,50499,50502,50503,50507,50511,50512,50513,50514,50518,50522,50523,50524,50527,50530,50531,50533,50534,50535,50537,50538,50539,50540,50541,50542,50543,50546,50550,50551,50552,50553,50554,50555,50558,50559,50561,50562,50563,50565,50566,50568,50569,50570,50571,50574,50576,50578,50579,50580,50582,50585,50586,50587,50589,50590,50591,50593,50594,50595,50596,50597,50598,50599,50600,50602,50603,50604,50605,50606,50607,50608,50609,50610,50611,50614,null,null,null,null,null,null,50615,50618,50623,50624,50625,50626,50627,50635,50637,50639,50642,50643,50645,50646,50647,50649,50650,50651,50652,50653,50654,50655,50658,50660,50662,50663,null,null,null,null,null,null,50664,50665,50666,50667,50671,50673,50674,50675,50677,50680,50681,50682,50683,50690,50691,50692,50697,50698,50699,50701,50702,50703,50705,50706,50707,50708,50709,50710,50711,50714,50717,50718,50719,50720,50721,50722,50723,50726,50727,50729,50730,50731,50735,50737,50738,50742,50744,50746,50748,50749,50750,50751,50754,50755,50757,50758,50759,50761,50762,50763,50764,50765,50766,50767,50770,50774,50775,50776,50777,50778,50779,50782,50783,50785,50786,50787,50788,50789,50790,50791,50792,50793,50794,50795,50797,50798,50800,50802,50803,50804,50805,50806,50807,50810,50811,50813,50814,50815,50817,50818,50819,50820,50821,50822,50823,50826,50828,50830,50831,50832,50833,50834,50835,50838,50839,50841,50842,50843,50845,50846,50847,50848,50849,50850,50851,50854,50856,50858,50859,50860,50861,50862,50863,50866,50867,50869,50870,50871,50875,50876,50877,50878,50879,50882,50884,50886,50887,50888,50889,50890,50891,50894,null,null,null,null,null,null,50895,50897,50898,50899,50901,50902,50903,50904,50905,50906,50907,50910,50911,50914,50915,50916,50917,50918,50919,50922,50923,50925,50926,50927,50929,50930,null,null,null,null,null,null,50931,50932,50933,50934,50935,50938,50939,50940,50942,50943,50944,50945,50946,50947,50950,50951,50953,50954,50955,50957,50958,50959,50960,50961,50962,50963,50966,50968,50970,50971,50972,50973,50974,50975,50978,50979,50981,50982,50983,50985,50986,50987,50988,50989,50990,50991,50994,50996,50998,51000,51001,51002,51003,51006,51007,51009,51010,51011,51013,51014,51015,51016,51017,51019,51022,51024,51033,51034,51035,51037,51038,51039,51041,51042,51043,51044,51045,51046,51047,51049,51050,51052,51053,51054,51055,51056,51057,51058,51059,51062,51063,51065,51066,51067,51071,51072,51073,51074,51078,51083,51084,51085,51087,51090,51091,51093,51097,51099,51100,51101,51102,51103,51106,51111,51112,51113,51114,51115,51118,51119,51121,51122,51123,51125,51126,51127,51128,51129,51130,51131,51134,51138,51139,51140,51141,51142,51143,51146,51147,51149,51151,51153,51154,51155,51156,51157,51158,51159,51161,51162,51163,51164,null,null,null,null,null,null,51166,51167,51168,51169,51170,51171,51173,51174,51175,51177,51178,51179,51181,51182,51183,51184,51185,51186,51187,51188,51189,51190,51191,51192,51193,51194,null,null,null,null,null,null,51195,51196,51197,51198,51199,51202,51203,51205,51206,51207,51209,51211,51212,51213,51214,51215,51218,51220,51223,51224,51225,51226,51227,51230,51231,51233,51234,51235,51237,51238,51239,51240,51241,51242,51243,51246,51248,51250,51251,51252,51253,51254,51255,51257,51258,51259,51261,51262,51263,51265,51266,51267,51268,51269,51270,51271,51274,51275,51278,51279,51280,51281,51282,51283,51285,51286,51287,51288,51289,51290,51291,51292,51293,51294,51295,51296,51297,51298,51299,51300,51301,51302,51303,51304,51305,51306,51307,51308,51309,51310,51311,51314,51315,51317,51318,51319,51321,51323,51324,51325,51326,51327,51330,51332,51336,51337,51338,51342,51343,51344,51345,51346,51347,51349,51350,51351,51352,51353,51354,51355,51356,51358,51360,51362,51363,51364,51365,51366,51367,51369,51370,51371,51372,51373,51374,51375,51376,51377,51378,51379,51380,51381,51382,51383,51384,51385,51386,51387,51390,51391,51392,51393,null,null,null,null,null,null,51394,51395,51397,51398,51399,51401,51402,51403,51405,51406,51407,51408,51409,51410,51411,51414,51416,51418,51419,51420,51421,51422,51423,51426,51427,51429,null,null,null,null,null,null,51430,51431,51432,51433,51434,51435,51436,51437,51438,51439,51440,51441,51442,51443,51444,51446,51447,51448,51449,51450,51451,51454,51455,51457,51458,51459,51463,51464,51465,51466,51467,51470,12288,12289,12290,183,8229,8230,168,12291,173,8213,8741,65340,8764,8216,8217,8220,8221,12308,12309,12296,12297,12298,12299,12300,12301,12302,12303,12304,12305,177,215,247,8800,8804,8805,8734,8756,176,8242,8243,8451,8491,65504,65505,65509,9794,9792,8736,8869,8978,8706,8711,8801,8786,167,8251,9734,9733,9675,9679,9678,9671,9670,9633,9632,9651,9650,9661,9660,8594,8592,8593,8595,8596,12307,8810,8811,8730,8765,8733,8757,8747,8748,8712,8715,8838,8839,8834,8835,8746,8745,8743,8744,65506,51472,51474,51475,51476,51477,51478,51479,51481,51482,51483,51484,51485,51486,51487,51488,51489,51490,51491,51492,51493,51494,51495,51496,51497,51498,51499,null,null,null,null,null,null,51501,51502,51503,51504,51505,51506,51507,51509,51510,51511,51512,51513,51514,51515,51516,51517,51518,51519,51520,51521,51522,51523,51524,51525,51526,51527,null,null,null,null,null,null,51528,51529,51530,51531,51532,51533,51534,51535,51538,51539,51541,51542,51543,51545,51546,51547,51548,51549,51550,51551,51554,51556,51557,51558,51559,51560,51561,51562,51563,51565,51566,51567,8658,8660,8704,8707,180,65374,711,728,733,730,729,184,731,161,191,720,8750,8721,8719,164,8457,8240,9665,9664,9655,9654,9828,9824,9825,9829,9831,9827,8857,9672,9635,9680,9681,9618,9636,9637,9640,9639,9638,9641,9832,9743,9742,9756,9758,182,8224,8225,8597,8599,8601,8598,8600,9837,9833,9834,9836,12927,12828,8470,13255,8482,13250,13272,8481,8364,174,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,51569,51570,51571,51573,51574,51575,51576,51577,51578,51579,51581,51582,51583,51584,51585,51586,51587,51588,51589,51590,51591,51594,51595,51597,51598,51599,null,null,null,null,null,null,51601,51602,51603,51604,51605,51606,51607,51610,51612,51614,51615,51616,51617,51618,51619,51620,51621,51622,51623,51624,51625,51626,51627,51628,51629,51630,null,null,null,null,null,null,51631,51632,51633,51634,51635,51636,51637,51638,51639,51640,51641,51642,51643,51644,51645,51646,51647,51650,51651,51653,51654,51657,51659,51660,51661,51662,51663,51666,51668,51671,51672,51675,65281,65282,65283,65284,65285,65286,65287,65288,65289,65290,65291,65292,65293,65294,65295,65296,65297,65298,65299,65300,65301,65302,65303,65304,65305,65306,65307,65308,65309,65310,65311,65312,65313,65314,65315,65316,65317,65318,65319,65320,65321,65322,65323,65324,65325,65326,65327,65328,65329,65330,65331,65332,65333,65334,65335,65336,65337,65338,65339,65510,65341,65342,65343,65344,65345,65346,65347,65348,65349,65350,65351,65352,65353,65354,65355,65356,65357,65358,65359,65360,65361,65362,65363,65364,65365,65366,65367,65368,65369,65370,65371,65372,65373,65507,51678,51679,51681,51683,51685,51686,51688,51689,51690,51691,51694,51698,51699,51700,51701,51702,51703,51706,51707,51709,51710,51711,51713,51714,51715,51716,null,null,null,null,null,null,51717,51718,51719,51722,51726,51727,51728,51729,51730,51731,51733,51734,51735,51737,51738,51739,51740,51741,51742,51743,51744,51745,51746,51747,51748,51749,null,null,null,null,null,null,51750,51751,51752,51754,51755,51756,51757,51758,51759,51760,51761,51762,51763,51764,51765,51766,51767,51768,51769,51770,51771,51772,51773,51774,51775,51776,51777,51778,51779,51780,51781,51782,12593,12594,12595,12596,12597,12598,12599,12600,12601,12602,12603,12604,12605,12606,12607,12608,12609,12610,12611,12612,12613,12614,12615,12616,12617,12618,12619,12620,12621,12622,12623,12624,12625,12626,12627,12628,12629,12630,12631,12632,12633,12634,12635,12636,12637,12638,12639,12640,12641,12642,12643,12644,12645,12646,12647,12648,12649,12650,12651,12652,12653,12654,12655,12656,12657,12658,12659,12660,12661,12662,12663,12664,12665,12666,12667,12668,12669,12670,12671,12672,12673,12674,12675,12676,12677,12678,12679,12680,12681,12682,12683,12684,12685,12686,51783,51784,51785,51786,51787,51790,51791,51793,51794,51795,51797,51798,51799,51800,51801,51802,51803,51806,51810,51811,51812,51813,51814,51815,51817,51818,null,null,null,null,null,null,51819,51820,51821,51822,51823,51824,51825,51826,51827,51828,51829,51830,51831,51832,51833,51834,51835,51836,51838,51839,51840,51841,51842,51843,51845,51846,null,null,null,null,null,null,51847,51848,51849,51850,51851,51852,51853,51854,51855,51856,51857,51858,51859,51860,51861,51862,51863,51865,51866,51867,51868,51869,51870,51871,51872,51873,51874,51875,51876,51877,51878,51879,8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,null,null,null,null,null,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,null,null,null,null,null,null,null,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,null,null,null,null,null,null,null,null,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,963,964,965,966,967,968,969,null,null,null,null,null,null,51880,51881,51882,51883,51884,51885,51886,51887,51888,51889,51890,51891,51892,51893,51894,51895,51896,51897,51898,51899,51902,51903,51905,51906,51907,51909,null,null,null,null,null,null,51910,51911,51912,51913,51914,51915,51918,51920,51922,51924,51925,51926,51927,51930,51931,51932,51933,51934,51935,51937,51938,51939,51940,51941,51942,51943,null,null,null,null,null,null,51944,51945,51946,51947,51949,51950,51951,51952,51953,51954,51955,51957,51958,51959,51960,51961,51962,51963,51964,51965,51966,51967,51968,51969,51970,51971,51972,51973,51974,51975,51977,51978,9472,9474,9484,9488,9496,9492,9500,9516,9508,9524,9532,9473,9475,9487,9491,9499,9495,9507,9523,9515,9531,9547,9504,9519,9512,9527,9535,9501,9520,9509,9528,9538,9490,9489,9498,9497,9494,9493,9486,9485,9502,9503,9505,9506,9510,9511,9513,9514,9517,9518,9521,9522,9525,9526,9529,9530,9533,9534,9536,9537,9539,9540,9541,9542,9543,9544,9545,9546,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,51979,51980,51981,51982,51983,51985,51986,51987,51989,51990,51991,51993,51994,51995,51996,51997,51998,51999,52002,52003,52004,52005,52006,52007,52008,52009,null,null,null,null,null,null,52010,52011,52012,52013,52014,52015,52016,52017,52018,52019,52020,52021,52022,52023,52024,52025,52026,52027,52028,52029,52030,52031,52032,52034,52035,52036,null,null,null,null,null,null,52037,52038,52039,52042,52043,52045,52046,52047,52049,52050,52051,52052,52053,52054,52055,52058,52059,52060,52062,52063,52064,52065,52066,52067,52069,52070,52071,52072,52073,52074,52075,52076,13205,13206,13207,8467,13208,13252,13219,13220,13221,13222,13209,13210,13211,13212,13213,13214,13215,13216,13217,13218,13258,13197,13198,13199,13263,13192,13193,13256,13223,13224,13232,13233,13234,13235,13236,13237,13238,13239,13240,13241,13184,13185,13186,13187,13188,13242,13243,13244,13245,13246,13247,13200,13201,13202,13203,13204,8486,13248,13249,13194,13195,13196,13270,13253,13229,13230,13231,13275,13225,13226,13227,13228,13277,13264,13267,13251,13257,13276,13254,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,52077,52078,52079,52080,52081,52082,52083,52084,52085,52086,52087,52090,52091,52092,52093,52094,52095,52096,52097,52098,52099,52100,52101,52102,52103,52104,null,null,null,null,null,null,52105,52106,52107,52108,52109,52110,52111,52112,52113,52114,52115,52116,52117,52118,52119,52120,52121,52122,52123,52125,52126,52127,52128,52129,52130,52131,null,null,null,null,null,null,52132,52133,52134,52135,52136,52137,52138,52139,52140,52141,52142,52143,52144,52145,52146,52147,52148,52149,52150,52151,52153,52154,52155,52156,52157,52158,52159,52160,52161,52162,52163,52164,198,208,170,294,null,306,null,319,321,216,338,186,222,358,330,null,12896,12897,12898,12899,12900,12901,12902,12903,12904,12905,12906,12907,12908,12909,12910,12911,12912,12913,12914,12915,12916,12917,12918,12919,12920,12921,12922,12923,9424,9425,9426,9427,9428,9429,9430,9431,9432,9433,9434,9435,9436,9437,9438,9439,9440,9441,9442,9443,9444,9445,9446,9447,9448,9449,9312,9313,9314,9315,9316,9317,9318,9319,9320,9321,9322,9323,9324,9325,9326,189,8531,8532,188,190,8539,8540,8541,8542,52165,52166,52167,52168,52169,52170,52171,52172,52173,52174,52175,52176,52177,52178,52179,52181,52182,52183,52184,52185,52186,52187,52188,52189,52190,52191,null,null,null,null,null,null,52192,52193,52194,52195,52197,52198,52200,52202,52203,52204,52205,52206,52207,52208,52209,52210,52211,52212,52213,52214,52215,52216,52217,52218,52219,52220,null,null,null,null,null,null,52221,52222,52223,52224,52225,52226,52227,52228,52229,52230,52231,52232,52233,52234,52235,52238,52239,52241,52242,52243,52245,52246,52247,52248,52249,52250,52251,52254,52255,52256,52259,52260,230,273,240,295,305,307,312,320,322,248,339,223,254,359,331,329,12800,12801,12802,12803,12804,12805,12806,12807,12808,12809,12810,12811,12812,12813,12814,12815,12816,12817,12818,12819,12820,12821,12822,12823,12824,12825,12826,12827,9372,9373,9374,9375,9376,9377,9378,9379,9380,9381,9382,9383,9384,9385,9386,9387,9388,9389,9390,9391,9392,9393,9394,9395,9396,9397,9332,9333,9334,9335,9336,9337,9338,9339,9340,9341,9342,9343,9344,9345,9346,185,178,179,8308,8319,8321,8322,8323,8324,52261,52262,52266,52267,52269,52271,52273,52274,52275,52276,52277,52278,52279,52282,52287,52288,52289,52290,52291,52294,52295,52297,52298,52299,52301,52302,null,null,null,null,null,null,52303,52304,52305,52306,52307,52310,52314,52315,52316,52317,52318,52319,52321,52322,52323,52325,52327,52329,52330,52331,52332,52333,52334,52335,52337,52338,null,null,null,null,null,null,52339,52340,52342,52343,52344,52345,52346,52347,52348,52349,52350,52351,52352,52353,52354,52355,52356,52357,52358,52359,52360,52361,52362,52363,52364,52365,52366,52367,52368,52369,52370,52371,12353,12354,12355,12356,12357,12358,12359,12360,12361,12362,12363,12364,12365,12366,12367,12368,12369,12370,12371,12372,12373,12374,12375,12376,12377,12378,12379,12380,12381,12382,12383,12384,12385,12386,12387,12388,12389,12390,12391,12392,12393,12394,12395,12396,12397,12398,12399,12400,12401,12402,12403,12404,12405,12406,12407,12408,12409,12410,12411,12412,12413,12414,12415,12416,12417,12418,12419,12420,12421,12422,12423,12424,12425,12426,12427,12428,12429,12430,12431,12432,12433,12434,12435,null,null,null,null,null,null,null,null,null,null,null,52372,52373,52374,52375,52378,52379,52381,52382,52383,52385,52386,52387,52388,52389,52390,52391,52394,52398,52399,52400,52401,52402,52403,52406,52407,52409,null,null,null,null,null,null,52410,52411,52413,52414,52415,52416,52417,52418,52419,52422,52424,52426,52427,52428,52429,52430,52431,52433,52434,52435,52437,52438,52439,52440,52441,52442,null,null,null,null,null,null,52443,52444,52445,52446,52447,52448,52449,52450,52451,52453,52454,52455,52456,52457,52458,52459,52461,52462,52463,52465,52466,52467,52468,52469,52470,52471,52472,52473,52474,52475,52476,52477,12449,12450,12451,12452,12453,12454,12455,12456,12457,12458,12459,12460,12461,12462,12463,12464,12465,12466,12467,12468,12469,12470,12471,12472,12473,12474,12475,12476,12477,12478,12479,12480,12481,12482,12483,12484,12485,12486,12487,12488,12489,12490,12491,12492,12493,12494,12495,12496,12497,12498,12499,12500,12501,12502,12503,12504,12505,12506,12507,12508,12509,12510,12511,12512,12513,12514,12515,12516,12517,12518,12519,12520,12521,12522,12523,12524,12525,12526,12527,12528,12529,12530,12531,12532,12533,12534,null,null,null,null,null,null,null,null,52478,52479,52480,52482,52483,52484,52485,52486,52487,52490,52491,52493,52494,52495,52497,52498,52499,52500,52501,52502,52503,52506,52508,52510,52511,52512,null,null,null,null,null,null,52513,52514,52515,52517,52518,52519,52521,52522,52523,52525,52526,52527,52528,52529,52530,52531,52532,52533,52534,52535,52536,52538,52539,52540,52541,52542,null,null,null,null,null,null,52543,52544,52545,52546,52547,52548,52549,52550,52551,52552,52553,52554,52555,52556,52557,52558,52559,52560,52561,52562,52563,52564,52565,52566,52567,52568,52569,52570,52571,52573,52574,52575,1040,1041,1042,1043,1044,1045,1025,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,1072,1073,1074,1075,1076,1077,1105,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,null,null,null,null,null,null,null,null,null,null,null,null,null,52577,52578,52579,52581,52582,52583,52584,52585,52586,52587,52590,52592,52594,52595,52596,52597,52598,52599,52601,52602,52603,52604,52605,52606,52607,52608,null,null,null,null,null,null,52609,52610,52611,52612,52613,52614,52615,52617,52618,52619,52620,52621,52622,52623,52624,52625,52626,52627,52630,52631,52633,52634,52635,52637,52638,52639,null,null,null,null,null,null,52640,52641,52642,52643,52646,52648,52650,52651,52652,52653,52654,52655,52657,52658,52659,52660,52661,52662,52663,52664,52665,52666,52667,52668,52669,52670,52671,52672,52673,52674,52675,52677,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,52678,52679,52680,52681,52682,52683,52685,52686,52687,52689,52690,52691,52692,52693,52694,52695,52696,52697,52698,52699,52700,52701,52702,52703,52704,52705,null,null,null,null,null,null,52706,52707,52708,52709,52710,52711,52713,52714,52715,52717,52718,52719,52721,52722,52723,52724,52725,52726,52727,52730,52732,52734,52735,52736,52737,52738,null,null,null,null,null,null,52739,52741,52742,52743,52745,52746,52747,52749,52750,52751,52752,52753,52754,52755,52757,52758,52759,52760,52762,52763,52764,52765,52766,52767,52770,52771,52773,52774,52775,52777,52778,52779,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,52780,52781,52782,52783,52786,52788,52790,52791,52792,52793,52794,52795,52796,52797,52798,52799,52800,52801,52802,52803,52804,52805,52806,52807,52808,52809,null,null,null,null,null,null,52810,52811,52812,52813,52814,52815,52816,52817,52818,52819,52820,52821,52822,52823,52826,52827,52829,52830,52834,52835,52836,52837,52838,52839,52842,52844,null,null,null,null,null,null,52846,52847,52848,52849,52850,52851,52854,52855,52857,52858,52859,52861,52862,52863,52864,52865,52866,52867,52870,52872,52874,52875,52876,52877,52878,52879,52882,52883,52885,52886,52887,52889,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,52890,52891,52892,52893,52894,52895,52898,52902,52903,52904,52905,52906,52907,52910,52911,52912,52913,52914,52915,52916,52917,52918,52919,52920,52921,52922,null,null,null,null,null,null,52923,52924,52925,52926,52927,52928,52930,52931,52932,52933,52934,52935,52936,52937,52938,52939,52940,52941,52942,52943,52944,52945,52946,52947,52948,52949,null,null,null,null,null,null,52950,52951,52952,52953,52954,52955,52956,52957,52958,52959,52960,52961,52962,52963,52966,52967,52969,52970,52973,52974,52975,52976,52977,52978,52979,52982,52986,52987,52988,52989,52990,52991,44032,44033,44036,44039,44040,44041,44042,44048,44049,44050,44051,44052,44053,44054,44055,44057,44058,44059,44060,44061,44064,44068,44076,44077,44079,44080,44081,44088,44089,44092,44096,44107,44109,44116,44120,44124,44144,44145,44148,44151,44152,44154,44160,44161,44163,44164,44165,44166,44169,44170,44171,44172,44176,44180,44188,44189,44191,44192,44193,44200,44201,44202,44204,44207,44208,44216,44217,44219,44220,44221,44225,44228,44232,44236,44245,44247,44256,44257,44260,44263,44264,44266,44268,44271,44272,44273,44275,44277,44278,44284,44285,44288,44292,44294,52994,52995,52997,52998,52999,53001,53002,53003,53004,53005,53006,53007,53010,53012,53014,53015,53016,53017,53018,53019,53021,53022,53023,53025,53026,53027,null,null,null,null,null,null,53029,53030,53031,53032,53033,53034,53035,53038,53042,53043,53044,53045,53046,53047,53049,53050,53051,53052,53053,53054,53055,53056,53057,53058,53059,53060,null,null,null,null,null,null,53061,53062,53063,53064,53065,53066,53067,53068,53069,53070,53071,53072,53073,53074,53075,53078,53079,53081,53082,53083,53085,53086,53087,53088,53089,53090,53091,53094,53096,53098,53099,53100,44300,44301,44303,44305,44312,44316,44320,44329,44332,44333,44340,44341,44344,44348,44356,44357,44359,44361,44368,44372,44376,44385,44387,44396,44397,44400,44403,44404,44405,44406,44411,44412,44413,44415,44417,44418,44424,44425,44428,44432,44444,44445,44452,44471,44480,44481,44484,44488,44496,44497,44499,44508,44512,44516,44536,44537,44540,44543,44544,44545,44552,44553,44555,44557,44564,44592,44593,44596,44599,44600,44602,44608,44609,44611,44613,44614,44618,44620,44621,44622,44624,44628,44630,44636,44637,44639,44640,44641,44645,44648,44649,44652,44656,44664,53101,53102,53103,53106,53107,53109,53110,53111,53113,53114,53115,53116,53117,53118,53119,53121,53122,53123,53124,53126,53127,53128,53129,53130,53131,53133,null,null,null,null,null,null,53134,53135,53136,53137,53138,53139,53140,53141,53142,53143,53144,53145,53146,53147,53148,53149,53150,53151,53152,53154,53155,53156,53157,53158,53159,53161,null,null,null,null,null,null,53162,53163,53164,53165,53166,53167,53169,53170,53171,53172,53173,53174,53175,53176,53177,53178,53179,53180,53181,53182,53183,53184,53185,53186,53187,53189,53190,53191,53192,53193,53194,53195,44665,44667,44668,44669,44676,44677,44684,44732,44733,44734,44736,44740,44748,44749,44751,44752,44753,44760,44761,44764,44776,44779,44781,44788,44792,44796,44807,44808,44813,44816,44844,44845,44848,44850,44852,44860,44861,44863,44865,44866,44867,44872,44873,44880,44892,44893,44900,44901,44921,44928,44932,44936,44944,44945,44949,44956,44984,44985,44988,44992,44999,45000,45001,45003,45005,45006,45012,45020,45032,45033,45040,45041,45044,45048,45056,45057,45060,45068,45072,45076,45084,45085,45096,45124,45125,45128,45130,45132,45134,45139,45140,45141,45143,45145,53196,53197,53198,53199,53200,53201,53202,53203,53204,53205,53206,53207,53208,53209,53210,53211,53212,53213,53214,53215,53218,53219,53221,53222,53223,53225,null,null,null,null,null,null,53226,53227,53228,53229,53230,53231,53234,53236,53238,53239,53240,53241,53242,53243,53245,53246,53247,53249,53250,53251,53253,53254,53255,53256,53257,53258,null,null,null,null,null,null,53259,53260,53261,53262,53263,53264,53266,53267,53268,53269,53270,53271,53273,53274,53275,53276,53277,53278,53279,53280,53281,53282,53283,53284,53285,53286,53287,53288,53289,53290,53291,53292,45149,45180,45181,45184,45188,45196,45197,45199,45201,45208,45209,45210,45212,45215,45216,45217,45218,45224,45225,45227,45228,45229,45230,45231,45233,45235,45236,45237,45240,45244,45252,45253,45255,45256,45257,45264,45265,45268,45272,45280,45285,45320,45321,45323,45324,45328,45330,45331,45336,45337,45339,45340,45341,45347,45348,45349,45352,45356,45364,45365,45367,45368,45369,45376,45377,45380,45384,45392,45393,45396,45397,45400,45404,45408,45432,45433,45436,45440,45442,45448,45449,45451,45453,45458,45459,45460,45464,45468,45480,45516,45520,45524,45532,45533,53294,53295,53296,53297,53298,53299,53302,53303,53305,53306,53307,53309,53310,53311,53312,53313,53314,53315,53318,53320,53322,53323,53324,53325,53326,53327,null,null,null,null,null,null,53329,53330,53331,53333,53334,53335,53337,53338,53339,53340,53341,53342,53343,53345,53346,53347,53348,53349,53350,53351,53352,53353,53354,53355,53358,53359,null,null,null,null,null,null,53361,53362,53363,53365,53366,53367,53368,53369,53370,53371,53374,53375,53376,53378,53379,53380,53381,53382,53383,53384,53385,53386,53387,53388,53389,53390,53391,53392,53393,53394,53395,53396,45535,45544,45545,45548,45552,45561,45563,45565,45572,45573,45576,45579,45580,45588,45589,45591,45593,45600,45620,45628,45656,45660,45664,45672,45673,45684,45685,45692,45700,45701,45705,45712,45713,45716,45720,45721,45722,45728,45729,45731,45733,45734,45738,45740,45744,45748,45768,45769,45772,45776,45778,45784,45785,45787,45789,45794,45796,45797,45798,45800,45803,45804,45805,45806,45807,45811,45812,45813,45815,45816,45817,45818,45819,45823,45824,45825,45828,45832,45840,45841,45843,45844,45845,45852,45908,45909,45910,45912,45915,45916,45918,45919,45924,45925,53397,53398,53399,53400,53401,53402,53403,53404,53405,53406,53407,53408,53409,53410,53411,53414,53415,53417,53418,53419,53421,53422,53423,53424,53425,53426,null,null,null,null,null,null,53427,53430,53432,53434,53435,53436,53437,53438,53439,53442,53443,53445,53446,53447,53450,53451,53452,53453,53454,53455,53458,53462,53463,53464,53465,53466,null,null,null,null,null,null,53467,53470,53471,53473,53474,53475,53477,53478,53479,53480,53481,53482,53483,53486,53490,53491,53492,53493,53494,53495,53497,53498,53499,53500,53501,53502,53503,53504,53505,53506,53507,53508,45927,45929,45931,45934,45936,45937,45940,45944,45952,45953,45955,45956,45957,45964,45968,45972,45984,45985,45992,45996,46020,46021,46024,46027,46028,46030,46032,46036,46037,46039,46041,46043,46045,46048,46052,46056,46076,46096,46104,46108,46112,46120,46121,46123,46132,46160,46161,46164,46168,46176,46177,46179,46181,46188,46208,46216,46237,46244,46248,46252,46261,46263,46265,46272,46276,46280,46288,46293,46300,46301,46304,46307,46308,46310,46316,46317,46319,46321,46328,46356,46357,46360,46363,46364,46372,46373,46375,46376,46377,46378,46384,46385,46388,46392,53509,53510,53511,53512,53513,53514,53515,53516,53518,53519,53520,53521,53522,53523,53524,53525,53526,53527,53528,53529,53530,53531,53532,53533,53534,53535,null,null,null,null,null,null,53536,53537,53538,53539,53540,53541,53542,53543,53544,53545,53546,53547,53548,53549,53550,53551,53554,53555,53557,53558,53559,53561,53563,53564,53565,53566,null,null,null,null,null,null,53567,53570,53574,53575,53576,53577,53578,53579,53582,53583,53585,53586,53587,53589,53590,53591,53592,53593,53594,53595,53598,53600,53602,53603,53604,53605,53606,53607,53609,53610,53611,53613,46400,46401,46403,46404,46405,46411,46412,46413,46416,46420,46428,46429,46431,46432,46433,46496,46497,46500,46504,46506,46507,46512,46513,46515,46516,46517,46523,46524,46525,46528,46532,46540,46541,46543,46544,46545,46552,46572,46608,46609,46612,46616,46629,46636,46644,46664,46692,46696,46748,46749,46752,46756,46763,46764,46769,46804,46832,46836,46840,46848,46849,46853,46888,46889,46892,46895,46896,46904,46905,46907,46916,46920,46924,46932,46933,46944,46948,46952,46960,46961,46963,46965,46972,46973,46976,46980,46988,46989,46991,46992,46993,46994,46998,46999,53614,53615,53616,53617,53618,53619,53620,53621,53622,53623,53624,53625,53626,53627,53629,53630,53631,53632,53633,53634,53635,53637,53638,53639,53641,53642,null,null,null,null,null,null,53643,53644,53645,53646,53647,53648,53649,53650,53651,53652,53653,53654,53655,53656,53657,53658,53659,53660,53661,53662,53663,53666,53667,53669,53670,53671,null,null,null,null,null,null,53673,53674,53675,53676,53677,53678,53679,53682,53684,53686,53687,53688,53689,53691,53693,53694,53695,53697,53698,53699,53700,53701,53702,53703,53704,53705,53706,53707,53708,53709,53710,53711,47000,47001,47004,47008,47016,47017,47019,47020,47021,47028,47029,47032,47047,47049,47084,47085,47088,47092,47100,47101,47103,47104,47105,47111,47112,47113,47116,47120,47128,47129,47131,47133,47140,47141,47144,47148,47156,47157,47159,47160,47161,47168,47172,47185,47187,47196,47197,47200,47204,47212,47213,47215,47217,47224,47228,47245,47272,47280,47284,47288,47296,47297,47299,47301,47308,47312,47316,47325,47327,47329,47336,47337,47340,47344,47352,47353,47355,47357,47364,47384,47392,47420,47421,47424,47428,47436,47439,47441,47448,47449,47452,47456,47464,47465,53712,53713,53714,53715,53716,53717,53718,53719,53721,53722,53723,53724,53725,53726,53727,53728,53729,53730,53731,53732,53733,53734,53735,53736,53737,53738,null,null,null,null,null,null,53739,53740,53741,53742,53743,53744,53745,53746,53747,53749,53750,53751,53753,53754,53755,53756,53757,53758,53759,53760,53761,53762,53763,53764,53765,53766,null,null,null,null,null,null,53768,53770,53771,53772,53773,53774,53775,53777,53778,53779,53780,53781,53782,53783,53784,53785,53786,53787,53788,53789,53790,53791,53792,53793,53794,53795,53796,53797,53798,53799,53800,53801,47467,47469,47476,47477,47480,47484,47492,47493,47495,47497,47498,47501,47502,47532,47533,47536,47540,47548,47549,47551,47553,47560,47561,47564,47566,47567,47568,47569,47570,47576,47577,47579,47581,47582,47585,47587,47588,47589,47592,47596,47604,47605,47607,47608,47609,47610,47616,47617,47624,47637,47672,47673,47676,47680,47682,47688,47689,47691,47693,47694,47699,47700,47701,47704,47708,47716,47717,47719,47720,47721,47728,47729,47732,47736,47747,47748,47749,47751,47756,47784,47785,47787,47788,47792,47794,47800,47801,47803,47805,47812,47816,47832,47833,47868,53802,53803,53806,53807,53809,53810,53811,53813,53814,53815,53816,53817,53818,53819,53822,53824,53826,53827,53828,53829,53830,53831,53833,53834,53835,53836,null,null,null,null,null,null,53837,53838,53839,53840,53841,53842,53843,53844,53845,53846,53847,53848,53849,53850,53851,53853,53854,53855,53856,53857,53858,53859,53861,53862,53863,53864,null,null,null,null,null,null,53865,53866,53867,53868,53869,53870,53871,53872,53873,53874,53875,53876,53877,53878,53879,53880,53881,53882,53883,53884,53885,53886,53887,53890,53891,53893,53894,53895,53897,53898,53899,53900,47872,47876,47885,47887,47889,47896,47900,47904,47913,47915,47924,47925,47926,47928,47931,47932,47933,47934,47940,47941,47943,47945,47949,47951,47952,47956,47960,47969,47971,47980,48008,48012,48016,48036,48040,48044,48052,48055,48064,48068,48072,48080,48083,48120,48121,48124,48127,48128,48130,48136,48137,48139,48140,48141,48143,48145,48148,48149,48150,48151,48152,48155,48156,48157,48158,48159,48164,48165,48167,48169,48173,48176,48177,48180,48184,48192,48193,48195,48196,48197,48201,48204,48205,48208,48221,48260,48261,48264,48267,48268,48270,48276,48277,48279,53901,53902,53903,53906,53907,53908,53910,53911,53912,53913,53914,53915,53917,53918,53919,53921,53922,53923,53925,53926,53927,53928,53929,53930,53931,53933,null,null,null,null,null,null,53934,53935,53936,53938,53939,53940,53941,53942,53943,53946,53947,53949,53950,53953,53955,53956,53957,53958,53959,53962,53964,53965,53966,53967,53968,53969,null,null,null,null,null,null,53970,53971,53973,53974,53975,53977,53978,53979,53981,53982,53983,53984,53985,53986,53987,53990,53991,53992,53993,53994,53995,53996,53997,53998,53999,54002,54003,54005,54006,54007,54009,54010,48281,48282,48288,48289,48292,48295,48296,48304,48305,48307,48308,48309,48316,48317,48320,48324,48333,48335,48336,48337,48341,48344,48348,48372,48373,48374,48376,48380,48388,48389,48391,48393,48400,48404,48420,48428,48448,48456,48457,48460,48464,48472,48473,48484,48488,48512,48513,48516,48519,48520,48521,48522,48528,48529,48531,48533,48537,48538,48540,48548,48560,48568,48596,48597,48600,48604,48617,48624,48628,48632,48640,48643,48645,48652,48653,48656,48660,48668,48669,48671,48708,48709,48712,48716,48718,48724,48725,48727,48729,48730,48731,48736,48737,48740,54011,54012,54013,54014,54015,54018,54020,54022,54023,54024,54025,54026,54027,54031,54033,54034,54035,54037,54039,54040,54041,54042,54043,54046,54050,54051,null,null,null,null,null,null,54052,54054,54055,54058,54059,54061,54062,54063,54065,54066,54067,54068,54069,54070,54071,54074,54078,54079,54080,54081,54082,54083,54086,54087,54088,54089,null,null,null,null,null,null,54090,54091,54092,54093,54094,54095,54096,54097,54098,54099,54100,54101,54102,54103,54104,54105,54106,54107,54108,54109,54110,54111,54112,54113,54114,54115,54116,54117,54118,54119,54120,54121,48744,48746,48752,48753,48755,48756,48757,48763,48764,48765,48768,48772,48780,48781,48783,48784,48785,48792,48793,48808,48848,48849,48852,48855,48856,48864,48867,48868,48869,48876,48897,48904,48905,48920,48921,48923,48924,48925,48960,48961,48964,48968,48976,48977,48981,49044,49072,49093,49100,49101,49104,49108,49116,49119,49121,49212,49233,49240,49244,49248,49256,49257,49296,49297,49300,49304,49312,49313,49315,49317,49324,49325,49327,49328,49331,49332,49333,49334,49340,49341,49343,49344,49345,49349,49352,49353,49356,49360,49368,49369,49371,49372,49373,49380,54122,54123,54124,54125,54126,54127,54128,54129,54130,54131,54132,54133,54134,54135,54136,54137,54138,54139,54142,54143,54145,54146,54147,54149,54150,54151,null,null,null,null,null,null,54152,54153,54154,54155,54158,54162,54163,54164,54165,54166,54167,54170,54171,54173,54174,54175,54177,54178,54179,54180,54181,54182,54183,54186,54188,54190,null,null,null,null,null,null,54191,54192,54193,54194,54195,54197,54198,54199,54201,54202,54203,54205,54206,54207,54208,54209,54210,54211,54214,54215,54218,54219,54220,54221,54222,54223,54225,54226,54227,54228,54229,54230,49381,49384,49388,49396,49397,49399,49401,49408,49412,49416,49424,49429,49436,49437,49438,49439,49440,49443,49444,49446,49447,49452,49453,49455,49456,49457,49462,49464,49465,49468,49472,49480,49481,49483,49484,49485,49492,49493,49496,49500,49508,49509,49511,49512,49513,49520,49524,49528,49541,49548,49549,49550,49552,49556,49558,49564,49565,49567,49569,49573,49576,49577,49580,49584,49597,49604,49608,49612,49620,49623,49624,49632,49636,49640,49648,49649,49651,49660,49661,49664,49668,49676,49677,49679,49681,49688,49689,49692,49695,49696,49704,49705,49707,49709,54231,54233,54234,54235,54236,54237,54238,54239,54240,54242,54244,54245,54246,54247,54248,54249,54250,54251,54254,54255,54257,54258,54259,54261,54262,54263,null,null,null,null,null,null,54264,54265,54266,54267,54270,54272,54274,54275,54276,54277,54278,54279,54281,54282,54283,54284,54285,54286,54287,54288,54289,54290,54291,54292,54293,54294,null,null,null,null,null,null,54295,54296,54297,54298,54299,54300,54302,54303,54304,54305,54306,54307,54308,54309,54310,54311,54312,54313,54314,54315,54316,54317,54318,54319,54320,54321,54322,54323,54324,54325,54326,54327,49711,49713,49714,49716,49736,49744,49745,49748,49752,49760,49765,49772,49773,49776,49780,49788,49789,49791,49793,49800,49801,49808,49816,49819,49821,49828,49829,49832,49836,49837,49844,49845,49847,49849,49884,49885,49888,49891,49892,49899,49900,49901,49903,49905,49910,49912,49913,49915,49916,49920,49928,49929,49932,49933,49939,49940,49941,49944,49948,49956,49957,49960,49961,49989,50024,50025,50028,50032,50034,50040,50041,50044,50045,50052,50056,50060,50112,50136,50137,50140,50143,50144,50146,50152,50153,50157,50164,50165,50168,50184,50192,50212,50220,50224,54328,54329,54330,54331,54332,54333,54334,54335,54337,54338,54339,54341,54342,54343,54344,54345,54346,54347,54348,54349,54350,54351,54352,54353,54354,54355,null,null,null,null,null,null,54356,54357,54358,54359,54360,54361,54362,54363,54365,54366,54367,54369,54370,54371,54373,54374,54375,54376,54377,54378,54379,54380,54382,54384,54385,54386,null,null,null,null,null,null,54387,54388,54389,54390,54391,54394,54395,54397,54398,54401,54403,54404,54405,54406,54407,54410,54412,54414,54415,54416,54417,54418,54419,54421,54422,54423,54424,54425,54426,54427,54428,54429,50228,50236,50237,50248,50276,50277,50280,50284,50292,50293,50297,50304,50324,50332,50360,50364,50409,50416,50417,50420,50424,50426,50431,50432,50433,50444,50448,50452,50460,50472,50473,50476,50480,50488,50489,50491,50493,50500,50501,50504,50505,50506,50508,50509,50510,50515,50516,50517,50519,50520,50521,50525,50526,50528,50529,50532,50536,50544,50545,50547,50548,50549,50556,50557,50560,50564,50567,50572,50573,50575,50577,50581,50583,50584,50588,50592,50601,50612,50613,50616,50617,50619,50620,50621,50622,50628,50629,50630,50631,50632,50633,50634,50636,50638,54430,54431,54432,54433,54434,54435,54436,54437,54438,54439,54440,54442,54443,54444,54445,54446,54447,54448,54449,54450,54451,54452,54453,54454,54455,54456,null,null,null,null,null,null,54457,54458,54459,54460,54461,54462,54463,54464,54465,54466,54467,54468,54469,54470,54471,54472,54473,54474,54475,54477,54478,54479,54481,54482,54483,54485,null,null,null,null,null,null,54486,54487,54488,54489,54490,54491,54493,54494,54496,54497,54498,54499,54500,54501,54502,54503,54505,54506,54507,54509,54510,54511,54513,54514,54515,54516,54517,54518,54519,54521,54522,54524,50640,50641,50644,50648,50656,50657,50659,50661,50668,50669,50670,50672,50676,50678,50679,50684,50685,50686,50687,50688,50689,50693,50694,50695,50696,50700,50704,50712,50713,50715,50716,50724,50725,50728,50732,50733,50734,50736,50739,50740,50741,50743,50745,50747,50752,50753,50756,50760,50768,50769,50771,50772,50773,50780,50781,50784,50796,50799,50801,50808,50809,50812,50816,50824,50825,50827,50829,50836,50837,50840,50844,50852,50853,50855,50857,50864,50865,50868,50872,50873,50874,50880,50881,50883,50885,50892,50893,50896,50900,50908,50909,50912,50913,50920,54526,54527,54528,54529,54530,54531,54533,54534,54535,54537,54538,54539,54541,54542,54543,54544,54545,54546,54547,54550,54552,54553,54554,54555,54556,54557,null,null,null,null,null,null,54558,54559,54560,54561,54562,54563,54564,54565,54566,54567,54568,54569,54570,54571,54572,54573,54574,54575,54576,54577,54578,54579,54580,54581,54582,54583,null,null,null,null,null,null,54584,54585,54586,54587,54590,54591,54593,54594,54595,54597,54598,54599,54600,54601,54602,54603,54606,54608,54610,54611,54612,54613,54614,54615,54618,54619,54621,54622,54623,54625,54626,54627,50921,50924,50928,50936,50937,50941,50948,50949,50952,50956,50964,50965,50967,50969,50976,50977,50980,50984,50992,50993,50995,50997,50999,51004,51005,51008,51012,51018,51020,51021,51023,51025,51026,51027,51028,51029,51030,51031,51032,51036,51040,51048,51051,51060,51061,51064,51068,51069,51070,51075,51076,51077,51079,51080,51081,51082,51086,51088,51089,51092,51094,51095,51096,51098,51104,51105,51107,51108,51109,51110,51116,51117,51120,51124,51132,51133,51135,51136,51137,51144,51145,51148,51150,51152,51160,51165,51172,51176,51180,51200,51201,51204,51208,51210,54628,54630,54631,54634,54636,54638,54639,54640,54641,54642,54643,54646,54647,54649,54650,54651,54653,54654,54655,54656,54657,54658,54659,54662,54666,54667,null,null,null,null,null,null,54668,54669,54670,54671,54673,54674,54675,54676,54677,54678,54679,54680,54681,54682,54683,54684,54685,54686,54687,54688,54689,54690,54691,54692,54694,54695,null,null,null,null,null,null,54696,54697,54698,54699,54700,54701,54702,54703,54704,54705,54706,54707,54708,54709,54710,54711,54712,54713,54714,54715,54716,54717,54718,54719,54720,54721,54722,54723,54724,54725,54726,54727,51216,51217,51219,51221,51222,51228,51229,51232,51236,51244,51245,51247,51249,51256,51260,51264,51272,51273,51276,51277,51284,51312,51313,51316,51320,51322,51328,51329,51331,51333,51334,51335,51339,51340,51341,51348,51357,51359,51361,51368,51388,51389,51396,51400,51404,51412,51413,51415,51417,51424,51425,51428,51445,51452,51453,51456,51460,51461,51462,51468,51469,51471,51473,51480,51500,51508,51536,51537,51540,51544,51552,51553,51555,51564,51568,51572,51580,51592,51593,51596,51600,51608,51609,51611,51613,51648,51649,51652,51655,51656,51658,51664,51665,51667,54730,54731,54733,54734,54735,54737,54739,54740,54741,54742,54743,54746,54748,54750,54751,54752,54753,54754,54755,54758,54759,54761,54762,54763,54765,54766,null,null,null,null,null,null,54767,54768,54769,54770,54771,54774,54776,54778,54779,54780,54781,54782,54783,54786,54787,54789,54790,54791,54793,54794,54795,54796,54797,54798,54799,54802,null,null,null,null,null,null,54806,54807,54808,54809,54810,54811,54813,54814,54815,54817,54818,54819,54821,54822,54823,54824,54825,54826,54827,54828,54830,54831,54832,54833,54834,54835,54836,54837,54838,54839,54842,54843,51669,51670,51673,51674,51676,51677,51680,51682,51684,51687,51692,51693,51695,51696,51697,51704,51705,51708,51712,51720,51721,51723,51724,51725,51732,51736,51753,51788,51789,51792,51796,51804,51805,51807,51808,51809,51816,51837,51844,51864,51900,51901,51904,51908,51916,51917,51919,51921,51923,51928,51929,51936,51948,51956,51976,51984,51988,51992,52000,52001,52033,52040,52041,52044,52048,52056,52057,52061,52068,52088,52089,52124,52152,52180,52196,52199,52201,52236,52237,52240,52244,52252,52253,52257,52258,52263,52264,52265,52268,52270,52272,52280,52281,52283,54845,54846,54847,54849,54850,54851,54852,54854,54855,54858,54860,54862,54863,54864,54866,54867,54870,54871,54873,54874,54875,54877,54878,54879,54880,54881,null,null,null,null,null,null,54882,54883,54884,54885,54886,54888,54890,54891,54892,54893,54894,54895,54898,54899,54901,54902,54903,54904,54905,54906,54907,54908,54909,54910,54911,54912,null,null,null,null,null,null,54913,54914,54916,54918,54919,54920,54921,54922,54923,54926,54927,54929,54930,54931,54933,54934,54935,54936,54937,54938,54939,54940,54942,54944,54946,54947,54948,54949,54950,54951,54953,54954,52284,52285,52286,52292,52293,52296,52300,52308,52309,52311,52312,52313,52320,52324,52326,52328,52336,52341,52376,52377,52380,52384,52392,52393,52395,52396,52397,52404,52405,52408,52412,52420,52421,52423,52425,52432,52436,52452,52460,52464,52481,52488,52489,52492,52496,52504,52505,52507,52509,52516,52520,52524,52537,52572,52576,52580,52588,52589,52591,52593,52600,52616,52628,52629,52632,52636,52644,52645,52647,52649,52656,52676,52684,52688,52712,52716,52720,52728,52729,52731,52733,52740,52744,52748,52756,52761,52768,52769,52772,52776,52784,52785,52787,52789,54955,54957,54958,54959,54961,54962,54963,54964,54965,54966,54967,54968,54970,54972,54973,54974,54975,54976,54977,54978,54979,54982,54983,54985,54986,54987,null,null,null,null,null,null,54989,54990,54991,54992,54994,54995,54997,54998,55000,55002,55003,55004,55005,55006,55007,55009,55010,55011,55013,55014,55015,55017,55018,55019,55020,55021,null,null,null,null,null,null,55022,55023,55025,55026,55027,55028,55030,55031,55032,55033,55034,55035,55038,55039,55041,55042,55043,55045,55046,55047,55048,55049,55050,55051,55052,55053,55054,55055,55056,55058,55059,55060,52824,52825,52828,52831,52832,52833,52840,52841,52843,52845,52852,52853,52856,52860,52868,52869,52871,52873,52880,52881,52884,52888,52896,52897,52899,52900,52901,52908,52909,52929,52964,52965,52968,52971,52972,52980,52981,52983,52984,52985,52992,52993,52996,53000,53008,53009,53011,53013,53020,53024,53028,53036,53037,53039,53040,53041,53048,53076,53077,53080,53084,53092,53093,53095,53097,53104,53105,53108,53112,53120,53125,53132,53153,53160,53168,53188,53216,53217,53220,53224,53232,53233,53235,53237,53244,53248,53252,53265,53272,53293,53300,53301,53304,53308,55061,55062,55063,55066,55067,55069,55070,55071,55073,55074,55075,55076,55077,55078,55079,55082,55084,55086,55087,55088,55089,55090,55091,55094,55095,55097,null,null,null,null,null,null,55098,55099,55101,55102,55103,55104,55105,55106,55107,55109,55110,55112,55114,55115,55116,55117,55118,55119,55122,55123,55125,55130,55131,55132,55133,55134,null,null,null,null,null,null,55135,55138,55140,55142,55143,55144,55146,55147,55149,55150,55151,55153,55154,55155,55157,55158,55159,55160,55161,55162,55163,55166,55167,55168,55170,55171,55172,55173,55174,55175,55178,55179,53316,53317,53319,53321,53328,53332,53336,53344,53356,53357,53360,53364,53372,53373,53377,53412,53413,53416,53420,53428,53429,53431,53433,53440,53441,53444,53448,53449,53456,53457,53459,53460,53461,53468,53469,53472,53476,53484,53485,53487,53488,53489,53496,53517,53552,53553,53556,53560,53562,53568,53569,53571,53572,53573,53580,53581,53584,53588,53596,53597,53599,53601,53608,53612,53628,53636,53640,53664,53665,53668,53672,53680,53681,53683,53685,53690,53692,53696,53720,53748,53752,53767,53769,53776,53804,53805,53808,53812,53820,53821,53823,53825,53832,53852,55181,55182,55183,55185,55186,55187,55188,55189,55190,55191,55194,55196,55198,55199,55200,55201,55202,55203,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,53860,53888,53889,53892,53896,53904,53905,53909,53916,53920,53924,53932,53937,53944,53945,53948,53951,53952,53954,53960,53961,53963,53972,53976,53980,53988,53989,54000,54001,54004,54008,54016,54017,54019,54021,54028,54029,54030,54032,54036,54038,54044,54045,54047,54048,54049,54053,54056,54057,54060,54064,54072,54073,54075,54076,54077,54084,54085,54140,54141,54144,54148,54156,54157,54159,54160,54161,54168,54169,54172,54176,54184,54185,54187,54189,54196,54200,54204,54212,54213,54216,54217,54224,54232,54241,54243,54252,54253,54256,54260,54268,54269,54271,54273,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,54280,54301,54336,54340,54364,54368,54372,54381,54383,54392,54393,54396,54399,54400,54402,54408,54409,54411,54413,54420,54441,54476,54480,54484,54492,54495,54504,54508,54512,54520,54523,54525,54532,54536,54540,54548,54549,54551,54588,54589,54592,54596,54604,54605,54607,54609,54616,54617,54620,54624,54629,54632,54633,54635,54637,54644,54645,54648,54652,54660,54661,54663,54664,54665,54672,54693,54728,54729,54732,54736,54738,54744,54745,54747,54749,54756,54757,54760,54764,54772,54773,54775,54777,54784,54785,54788,54792,54800,54801,54803,54804,54805,54812,54816,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,54820,54829,54840,54841,54844,54848,54853,54856,54857,54859,54861,54865,54868,54869,54872,54876,54887,54889,54896,54897,54900,54915,54917,54924,54925,54928,54932,54941,54943,54945,54952,54956,54960,54969,54971,54980,54981,54984,54988,54993,54996,54999,55001,55008,55012,55016,55024,55029,55036,55037,55040,55044,55057,55064,55065,55068,55072,55080,55081,55083,55085,55092,55093,55096,55100,55108,55111,55113,55120,55121,55124,55126,55127,55128,55129,55136,55137,55139,55141,55145,55148,55152,55156,55164,55165,55169,55176,55177,55180,55184,55192,55193,55195,55197,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,20285,20339,20551,20729,21152,21487,21621,21733,22025,23233,23478,26247,26550,26551,26607,27468,29634,30146,31292,33499,33540,34903,34952,35382,36040,36303,36603,36838,39381,21051,21364,21508,24682,24932,27580,29647,33050,35258,35282,38307,20355,21002,22718,22904,23014,24178,24185,25031,25536,26438,26604,26751,28567,30286,30475,30965,31240,31487,31777,32925,33390,33393,35563,38291,20075,21917,26359,28212,30883,31469,33883,35088,34638,38824,21208,22350,22570,23884,24863,25022,25121,25954,26577,27204,28187,29976,30131,30435,30640,32058,37039,37969,37970,40853,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,21283,23724,30002,32987,37440,38296,21083,22536,23004,23713,23831,24247,24378,24394,24951,27743,30074,30086,31968,32115,32177,32652,33108,33313,34193,35137,35611,37628,38477,40007,20171,20215,20491,20977,22607,24887,24894,24936,25913,27114,28433,30117,30342,30422,31623,33445,33995,63744,37799,38283,21888,23458,22353,63745,31923,32697,37301,20520,21435,23621,24040,25298,25454,25818,25831,28192,28844,31067,36317,36382,63746,36989,37445,37624,20094,20214,20581,24062,24314,24838,26967,33137,34388,36423,37749,39467,20062,20625,26480,26688,20745,21133,21138,27298,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,30652,37392,40660,21163,24623,36850,20552,25001,25581,25802,26684,27268,28608,33160,35233,38548,22533,29309,29356,29956,32121,32365,32937,35211,35700,36963,40273,25225,27770,28500,32080,32570,35363,20860,24906,31645,35609,37463,37772,20140,20435,20510,20670,20742,21185,21197,21375,22384,22659,24218,24465,24950,25004,25806,25964,26223,26299,26356,26775,28039,28805,28913,29855,29861,29898,30169,30828,30956,31455,31478,32069,32147,32789,32831,33051,33686,35686,36629,36885,37857,38915,38968,39514,39912,20418,21843,22586,22865,23395,23622,24760,25106,26690,26800,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,26856,28330,30028,30328,30926,31293,31995,32363,32380,35336,35489,35903,38542,40388,21476,21481,21578,21617,22266,22993,23396,23611,24235,25335,25911,25925,25970,26272,26543,27073,27837,30204,30352,30590,31295,32660,32771,32929,33167,33510,33533,33776,34241,34865,34996,35493,63747,36764,37678,38599,39015,39640,40723,21741,26011,26354,26767,31296,35895,40288,22256,22372,23825,26118,26801,26829,28414,29736,34974,39908,27752,63748,39592,20379,20844,20849,21151,23380,24037,24656,24685,25329,25511,25915,29657,31354,34467,36002,38799,20018,23521,25096,26524,29916,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,31185,33747,35463,35506,36328,36942,37707,38982,24275,27112,34303,37101,63749,20896,23448,23532,24931,26874,27454,28748,29743,29912,31649,32592,33733,35264,36011,38364,39208,21038,24669,25324,36866,20362,20809,21281,22745,24291,26336,27960,28826,29378,29654,31568,33009,37979,21350,25499,32619,20054,20608,22602,22750,24618,24871,25296,27088,39745,23439,32024,32945,36703,20132,20689,21676,21932,23308,23968,24039,25898,25934,26657,27211,29409,30350,30703,32094,32761,33184,34126,34527,36611,36686,37066,39171,39509,39851,19992,20037,20061,20167,20465,20855,21246,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,21312,21475,21477,21646,22036,22389,22434,23495,23943,24272,25084,25304,25937,26552,26601,27083,27472,27590,27628,27714,28317,28792,29399,29590,29699,30655,30697,31350,32127,32777,33276,33285,33290,33503,34914,35635,36092,36544,36881,37041,37476,37558,39378,39493,40169,40407,40860,22283,23616,33738,38816,38827,40628,21531,31384,32676,35033,36557,37089,22528,23624,25496,31391,23470,24339,31353,31406,33422,36524,20518,21048,21240,21367,22280,25331,25458,27402,28099,30519,21413,29527,34152,36470,38357,26426,27331,28528,35437,36556,39243,63750,26231,27512,36020,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,39740,63751,21483,22317,22862,25542,27131,29674,30789,31418,31429,31998,33909,35215,36211,36917,38312,21243,22343,30023,31584,33740,37406,63752,27224,20811,21067,21127,25119,26840,26997,38553,20677,21156,21220,25027,26020,26681,27135,29822,31563,33465,33771,35250,35641,36817,39241,63753,20170,22935,25810,26129,27278,29748,31105,31165,33449,34942,34943,35167,63754,37670,20235,21450,24613,25201,27762,32026,32102,20120,20834,30684,32943,20225,20238,20854,20864,21980,22120,22331,22522,22524,22804,22855,22931,23492,23696,23822,24049,24190,24524,25216,26071,26083,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,26398,26399,26462,26827,26820,27231,27450,27683,27773,27778,28103,29592,29734,29738,29826,29859,30072,30079,30849,30959,31041,31047,31048,31098,31637,32000,32186,32648,32774,32813,32908,35352,35663,35912,36215,37665,37668,39138,39249,39438,39439,39525,40594,32202,20342,21513,25326,26708,37329,21931,20794,63755,63756,23068,25062,63757,25295,25343,63758,63759,63760,63761,63762,63763,37027,63764,63765,63766,63767,63768,35582,63769,63770,63771,63772,26262,63773,29014,63774,63775,38627,63776,25423,25466,21335,63777,26511,26976,28275,63778,30007,63779,63780,63781,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,32013,63782,63783,34930,22218,23064,63784,63785,63786,63787,63788,20035,63789,20839,22856,26608,32784,63790,22899,24180,25754,31178,24565,24684,25288,25467,23527,23511,21162,63791,22900,24361,24594,63792,63793,63794,29785,63795,63796,63797,63798,63799,63800,39377,63801,63802,63803,63804,63805,63806,63807,63808,63809,63810,63811,28611,63812,63813,33215,36786,24817,63814,63815,33126,63816,63817,23615,63818,63819,63820,63821,63822,63823,63824,63825,23273,35365,26491,32016,63826,63827,63828,63829,63830,63831,33021,63832,63833,23612,27877,21311,28346,22810,33590,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,20025,20150,20294,21934,22296,22727,24406,26039,26086,27264,27573,28237,30701,31471,31774,32222,34507,34962,37170,37723,25787,28606,29562,30136,36948,21846,22349,25018,25812,26311,28129,28251,28525,28601,30192,32835,33213,34113,35203,35527,35674,37663,27795,30035,31572,36367,36957,21776,22530,22616,24162,25095,25758,26848,30070,31958,34739,40680,20195,22408,22382,22823,23565,23729,24118,24453,25140,25825,29619,33274,34955,36024,38538,40667,23429,24503,24755,20498,20992,21040,22294,22581,22615,23566,23648,23798,23947,24230,24466,24764,25361,25481,25623,26691,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,26873,27330,28120,28193,28372,28644,29182,30428,30585,31153,31291,33796,35241,36077,36339,36424,36867,36884,36947,37117,37709,38518,38876,27602,28678,29272,29346,29544,30563,31167,31716,32411,35712,22697,24775,25958,26109,26302,27788,28958,29129,35930,38931,20077,31361,20189,20908,20941,21205,21516,24999,26481,26704,26847,27934,28540,30140,30643,31461,33012,33891,37509,20828,26007,26460,26515,30168,31431,33651,63834,35910,36887,38957,23663,33216,33434,36929,36975,37389,24471,23965,27225,29128,30331,31561,34276,35588,37159,39472,21895,25078,63835,30313,32645,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,34367,34746,35064,37007,63836,27931,28889,29662,32097,33853,63837,37226,39409,63838,20098,21365,27396,27410,28734,29211,34349,40478,21068,36771,23888,25829,25900,27414,28651,31811,32412,34253,35172,35261,25289,33240,34847,24266,26391,28010,29436,29701,29807,34690,37086,20358,23821,24480,33802,20919,25504,30053,20142,20486,20841,20937,26753,27153,31918,31921,31975,33391,35538,36635,37327,20406,20791,21237,21570,24300,24942,25150,26053,27354,28670,31018,34268,34851,38317,39522,39530,40599,40654,21147,26310,27511,28701,31019,36706,38722,24976,25088,25891,28451,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,29001,29833,32244,32879,34030,36646,36899,37706,20925,21015,21155,27916,28872,35010,24265,25986,27566,28610,31806,29557,20196,20278,22265,63839,23738,23994,24604,29618,31533,32666,32718,32838,36894,37428,38646,38728,38936,40801,20363,28583,31150,37300,38583,21214,63840,25736,25796,27347,28510,28696,29200,30439,32769,34310,34396,36335,36613,38706,39791,40442,40565,30860,31103,32160,33737,37636,40575,40595,35542,22751,24324,26407,28711,29903,31840,32894,20769,28712,29282,30922,36034,36058,36084,38647,20102,20698,23534,24278,26009,29134,30274,30637,32842,34044,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,36988,39719,40845,22744,23105,23650,27155,28122,28431,30267,32047,32311,34078,35128,37860,38475,21129,26066,26611,27060,27969,28316,28687,29705,29792,30041,30244,30827,35628,39006,20845,25134,38520,20374,20523,23833,28138,32184,36650,24459,24900,26647,63841,38534,21202,32907,20956,20940,26974,31260,32190,33777,38517,20442,21033,21400,21519,21774,23653,24743,26446,26792,28012,29313,29432,29702,29827,63842,30178,31852,32633,32696,33673,35023,35041,37324,37328,38626,39881,21533,28542,29136,29848,34298,36522,38563,40023,40607,26519,28107,29747,33256,38678,30764,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,31435,31520,31890,25705,29802,30194,30908,30952,39340,39764,40635,23518,24149,28448,33180,33707,37000,19975,21325,23081,24018,24398,24930,25405,26217,26364,28415,28459,28771,30622,33836,34067,34875,36627,39237,39995,21788,25273,26411,27819,33545,35178,38778,20129,22916,24536,24537,26395,32178,32596,33426,33579,33725,36638,37017,22475,22969,23186,23504,26151,26522,26757,27599,29028,32629,36023,36067,36993,39749,33032,35978,38476,39488,40613,23391,27667,29467,30450,30431,33804,20906,35219,20813,20885,21193,26825,27796,30468,30496,32191,32236,38754,40629,28357,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,34065,20901,21517,21629,26126,26269,26919,28319,30399,30609,33559,33986,34719,37225,37528,40180,34946,20398,20882,21215,22982,24125,24917,25720,25721,26286,26576,27169,27597,27611,29279,29281,29761,30520,30683,32791,33468,33541,35584,35624,35980,26408,27792,29287,30446,30566,31302,40361,27519,27794,22818,26406,33945,21359,22675,22937,24287,25551,26164,26483,28218,29483,31447,33495,37672,21209,24043,25006,25035,25098,25287,25771,26080,26969,27494,27595,28961,29687,30045,32326,33310,33538,34154,35491,36031,38695,40289,22696,40664,20497,21006,21563,21839,25991,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,27766,32010,32011,32862,34442,38272,38639,21247,27797,29289,21619,23194,23614,23883,24396,24494,26410,26806,26979,28220,28228,30473,31859,32654,34183,35598,36855,38753,40692,23735,24758,24845,25003,25935,26107,26108,27665,27887,29599,29641,32225,38292,23494,34588,35600,21085,21338,25293,25615,25778,26420,27192,27850,29632,29854,31636,31893,32283,33162,33334,34180,36843,38649,39361,20276,21322,21453,21467,25292,25644,25856,26001,27075,27886,28504,29677,30036,30242,30436,30460,30928,30971,31020,32070,33324,34784,36820,38930,39151,21187,25300,25765,28196,28497,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,30332,36299,37297,37474,39662,39747,20515,20621,22346,22952,23592,24135,24439,25151,25918,26041,26049,26121,26507,27036,28354,30917,32033,32938,33152,33323,33459,33953,34444,35370,35607,37030,38450,40848,20493,20467,63843,22521,24472,25308,25490,26479,28227,28953,30403,32972,32986,35060,35061,35097,36064,36649,37197,38506,20271,20336,24091,26575,26658,30333,30334,39748,24161,27146,29033,29140,30058,63844,32321,34115,34281,39132,20240,31567,32624,38309,20961,24070,26805,27710,27726,27867,29359,31684,33539,27861,29754,20731,21128,22721,25816,27287,29863,30294,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,30887,34327,38370,38713,63845,21342,24321,35722,36776,36783,37002,21029,30629,40009,40712,19993,20482,20853,23643,24183,26142,26170,26564,26821,28851,29953,30149,31177,31453,36647,39200,39432,20445,22561,22577,23542,26222,27493,27921,28282,28541,29668,29995,33769,35036,35091,35676,36628,20239,20693,21264,21340,23443,24489,26381,31119,33145,33583,34068,35079,35206,36665,36667,39333,39954,26412,20086,20472,22857,23553,23791,23792,25447,26834,28925,29090,29739,32299,34028,34562,36898,37586,40179,19981,20184,20463,20613,21078,21103,21542,21648,22496,22827,23142,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,23386,23413,23500,24220,63846,25206,25975,26023,28014,28325,29238,31526,31807,32566,33104,33105,33178,33344,33433,33705,35331,36000,36070,36091,36212,36282,37096,37340,38428,38468,39385,40167,21271,20998,21545,22132,22707,22868,22894,24575,24996,25198,26128,27774,28954,30406,31881,31966,32027,33452,36033,38640,63847,20315,24343,24447,25282,23849,26379,26842,30844,32323,40300,19989,20633,21269,21290,21329,22915,23138,24199,24754,24970,25161,25209,26000,26503,27047,27604,27606,27607,27608,27832,63848,29749,30202,30738,30865,31189,31192,31875,32203,32737,32933,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,33086,33218,33778,34586,35048,35513,35692,36027,37145,38750,39131,40763,22188,23338,24428,25996,27315,27567,27996,28657,28693,29277,29613,36007,36051,38971,24977,27703,32856,39425,20045,20107,20123,20181,20282,20284,20351,20447,20735,21490,21496,21766,21987,22235,22763,22882,23057,23531,23546,23556,24051,24107,24473,24605,25448,26012,26031,26614,26619,26797,27515,27801,27863,28195,28681,29509,30722,31038,31040,31072,31169,31721,32023,32114,32902,33293,33678,34001,34503,35039,35408,35422,35613,36060,36198,36781,37034,39164,39391,40605,21066,63849,26388,63850,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,20632,21034,23665,25955,27733,29642,29987,30109,31639,33948,37240,38704,20087,25746,27578,29022,34217,19977,63851,26441,26862,28183,33439,34072,34923,25591,28545,37394,39087,19978,20663,20687,20767,21830,21930,22039,23360,23577,23776,24120,24202,24224,24258,24819,26705,27233,28248,29245,29248,29376,30456,31077,31665,32724,35059,35316,35443,35937,36062,38684,22622,29885,36093,21959,63852,31329,32034,33394,29298,29983,29989,63853,31513,22661,22779,23996,24207,24246,24464,24661,25234,25471,25933,26257,26329,26360,26646,26866,29312,29790,31598,32110,32214,32626,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,32997,33298,34223,35199,35475,36893,37604,40653,40736,22805,22893,24109,24796,26132,26227,26512,27728,28101,28511,30707,30889,33990,37323,37675,20185,20682,20808,21892,23307,23459,25159,25982,26059,28210,29053,29697,29764,29831,29887,30316,31146,32218,32341,32680,33146,33203,33337,34330,34796,35445,36323,36984,37521,37925,39245,39854,21352,23633,26964,27844,27945,28203,33292,34203,35131,35373,35498,38634,40807,21089,26297,27570,32406,34814,36109,38275,38493,25885,28041,29166,63854,22478,22995,23468,24615,24826,25104,26143,26207,29481,29689,30427,30465,31596,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,32854,32882,33125,35488,37266,19990,21218,27506,27927,31237,31545,32048,63855,36016,21484,22063,22609,23477,23567,23569,24034,25152,25475,25620,26157,26803,27836,28040,28335,28703,28836,29138,29990,30095,30094,30233,31505,31712,31787,32032,32057,34092,34157,34311,35380,36877,36961,37045,37559,38902,39479,20439,23660,26463,28049,31903,32396,35606,36118,36895,23403,24061,25613,33984,36956,39137,29575,23435,24730,26494,28126,35359,35494,36865,38924,21047,63856,28753,30862,37782,34928,37335,20462,21463,22013,22234,22402,22781,23234,23432,23723,23744,24101,24833,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,25101,25163,25480,25628,25910,25976,27193,27530,27700,27929,28465,29159,29417,29560,29703,29874,30246,30561,31168,31319,31466,31929,32143,32172,32353,32670,33065,33585,33936,34010,34282,34966,35504,35728,36664,36930,36995,37228,37526,37561,38539,38567,38568,38614,38656,38920,39318,39635,39706,21460,22654,22809,23408,23487,28113,28506,29087,29729,29881,32901,33789,24033,24455,24490,24642,26092,26642,26991,27219,27529,27957,28147,29667,30462,30636,31565,32020,33059,33308,33600,34036,34147,35426,35524,37255,37662,38918,39348,25100,34899,36848,37477,23815,23847,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,23913,29791,33181,34664,28629,25342,32722,35126,35186,19998,20056,20711,21213,21319,25215,26119,32361,34821,38494,20365,21273,22070,22987,23204,23608,23630,23629,24066,24337,24643,26045,26159,26178,26558,26612,29468,30690,31034,32709,33940,33997,35222,35430,35433,35553,35925,35962,22516,23508,24335,24687,25325,26893,27542,28252,29060,31698,34645,35672,36606,39135,39166,20280,20353,20449,21627,23072,23480,24892,26032,26216,29180,30003,31070,32051,33102,33251,33688,34218,34254,34563,35338,36523,36763,63857,36805,22833,23460,23526,24713,23529,23563,24515,27777,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,63858,28145,28683,29978,33455,35574,20160,21313,63859,38617,27663,20126,20420,20818,21854,23077,23784,25105,29273,33469,33706,34558,34905,35357,38463,38597,39187,40201,40285,22538,23731,23997,24132,24801,24853,25569,27138,28197,37122,37716,38990,39952,40823,23433,23736,25353,26191,26696,30524,38593,38797,38996,39839,26017,35585,36555,38332,21813,23721,24022,24245,26263,30284,33780,38343,22739,25276,29390,40232,20208,22830,24591,26171,27523,31207,40230,21395,21696,22467,23830,24859,26326,28079,30861,33406,38552,38724,21380,25212,25494,28082,32266,33099,38989,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,27387,32588,40367,40474,20063,20539,20918,22812,24825,25590,26928,29242,32822,63860,37326,24369,63861,63862,32004,33509,33903,33979,34277,36493,63863,20335,63864,63865,22756,23363,24665,25562,25880,25965,26264,63866,26954,27171,27915,28673,29036,30162,30221,31155,31344,63867,32650,63868,35140,63869,35731,37312,38525,63870,39178,22276,24481,26044,28417,30208,31142,35486,39341,39770,40812,20740,25014,25233,27277,33222,20547,22576,24422,28937,35328,35578,23420,34326,20474,20796,22196,22852,25513,28153,23978,26989,20870,20104,20313,63871,63872,63873,22914,63874,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,63875,27487,27741,63876,29877,30998,63877,33287,33349,33593,36671,36701,63878,39192,63879,63880,63881,20134,63882,22495,24441,26131,63883,63884,30123,32377,35695,63885,36870,39515,22181,22567,23032,23071,23476,63886,24310,63887,63888,25424,25403,63889,26941,27783,27839,28046,28051,28149,28436,63890,28895,28982,29017,63891,29123,29141,63892,30799,30831,63893,31605,32227,63894,32303,63895,34893,36575,63896,63897,63898,37467,63899,40182,63900,63901,63902,24709,28037,63903,29105,63904,63905,38321,21421,63906,63907,63908,26579,63909,28814,28976,29744,33398,33490,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,63910,38331,39653,40573,26308,63911,29121,33865,63912,63913,22603,63914,63915,23992,24433,63916,26144,26254,27001,27054,27704,27891,28214,28481,28634,28699,28719,29008,29151,29552,63917,29787,63918,29908,30408,31310,32403,63919,63920,33521,35424,36814,63921,37704,63922,38681,63923,63924,20034,20522,63925,21000,21473,26355,27757,28618,29450,30591,31330,33454,34269,34306,63926,35028,35427,35709,35947,63927,37555,63928,38675,38928,20116,20237,20425,20658,21320,21566,21555,21978,22626,22714,22887,23067,23524,24735,63929,25034,25942,26111,26212,26791,27738,28595,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,28879,29100,29522,31613,34568,35492,39986,40711,23627,27779,29508,29577,37434,28331,29797,30239,31337,32277,34314,20800,22725,25793,29934,29973,30320,32705,37013,38605,39252,28198,29926,31401,31402,33253,34521,34680,35355,23113,23436,23451,26785,26880,28003,29609,29715,29740,30871,32233,32747,33048,33109,33694,35916,38446,38929,26352,24448,26106,26505,27754,29579,20525,23043,27498,30702,22806,23916,24013,29477,30031,63930,63931,20709,20985,22575,22829,22934,23002,23525,63932,63933,23970,25303,25622,25747,25854,63934,26332,63935,27208,63936,29183,29796,63937,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,31368,31407,32327,32350,32768,33136,63938,34799,35201,35616,36953,63939,36992,39250,24958,27442,28020,32287,35109,36785,20433,20653,20887,21191,22471,22665,23481,24248,24898,27029,28044,28263,28342,29076,29794,29992,29996,32883,33592,33993,36362,37780,37854,63940,20110,20305,20598,20778,21448,21451,21491,23431,23507,23588,24858,24962,26100,29275,29591,29760,30402,31056,31121,31161,32006,32701,33419,34261,34398,36802,36935,37109,37354,38533,38632,38633,21206,24423,26093,26161,26671,29020,31286,37057,38922,20113,63941,27218,27550,28560,29065,32792,33464,34131,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,36939,38549,38642,38907,34074,39729,20112,29066,38596,20803,21407,21729,22291,22290,22435,23195,23236,23491,24616,24895,25588,27781,27961,28274,28304,29232,29503,29783,33489,34945,36677,36960,63942,38498,39000,40219,26376,36234,37470,20301,20553,20702,21361,22285,22996,23041,23561,24944,26256,28205,29234,29771,32239,32963,33806,33894,34111,34655,34907,35096,35586,36949,38859,39759,20083,20369,20754,20842,63943,21807,21929,23418,23461,24188,24189,24254,24736,24799,24840,24841,25540,25912,26377,63944,26580,26586,63945,26977,26978,27833,27943,63946,28216,63947,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,28641,29494,29495,63948,29788,30001,63949,30290,63950,63951,32173,33278,33848,35029,35480,35547,35565,36400,36418,36938,36926,36986,37193,37321,37742,63952,63953,22537,63954,27603,32905,32946,63955,63956,20801,22891,23609,63957,63958,28516,29607,32996,36103,63959,37399,38287,63960,63961,63962,63963,32895,25102,28700,32104,34701,63964,22432,24681,24903,27575,35518,37504,38577,20057,21535,28139,34093,38512,38899,39150,25558,27875,37009,20957,25033,33210,40441,20381,20506,20736,23452,24847,25087,25836,26885,27589,30097,30691,32681,33380,34191,34811,34915,35516,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,35696,37291,20108,20197,20234,63965,63966,22839,23016,63967,24050,24347,24411,24609,63968,63969,63970,63971,29246,29669,63972,30064,30157,63973,31227,63974,32780,32819,32900,33505,33617,63975,63976,36029,36019,36999,63977,63978,39156,39180,63979,63980,28727,30410,32714,32716,32764,35610,20154,20161,20995,21360,63981,21693,22240,23035,23493,24341,24525,28270,63982,63983,32106,33589,63984,34451,35469,63985,38765,38775,63986,63987,19968,20314,20350,22777,26085,28322,36920,37808,39353,20219,22764,22922,23001,24641,63988,63989,31252,63990,33615,36035,20837,21316,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,63991,63992,63993,20173,21097,23381,33471,20180,21050,21672,22985,23039,23376,23383,23388,24675,24904,28363,28825,29038,29574,29943,30133,30913,32043,32773,33258,33576,34071,34249,35566,36039,38604,20316,21242,22204,26027,26152,28796,28856,29237,32189,33421,37196,38592,40306,23409,26855,27544,28538,30430,23697,26283,28507,31668,31786,34870,38620,19976,20183,21280,22580,22715,22767,22892,23559,24115,24196,24373,25484,26290,26454,27167,27299,27404,28479,29254,63994,29520,29835,31456,31911,33144,33247,33255,33674,33900,34083,34196,34255,35037,36115,37292,38263,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,38556,20877,21705,22312,23472,25165,26448,26685,26771,28221,28371,28797,32289,35009,36001,36617,40779,40782,29229,31631,35533,37658,20295,20302,20786,21632,22992,24213,25269,26485,26990,27159,27822,28186,29401,29482,30141,31672,32053,33511,33785,33879,34295,35419,36015,36487,36889,37048,38606,40799,21219,21514,23265,23490,25688,25973,28404,29380,63995,30340,31309,31515,31821,32318,32735,33659,35627,36042,36196,36321,36447,36842,36857,36969,37841,20291,20346,20659,20840,20856,21069,21098,22625,22652,22880,23560,23637,24283,24731,25136,26643,27583,27656,28593,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,29006,29728,30000,30008,30033,30322,31564,31627,31661,31686,32399,35438,36670,36681,37439,37523,37666,37931,38651,39002,39019,39198,20999,25130,25240,27993,30308,31434,31680,32118,21344,23742,24215,28472,28857,31896,38673,39822,40670,25509,25722,34678,19969,20117,20141,20572,20597,21576,22979,23450,24128,24237,24311,24449,24773,25402,25919,25972,26060,26230,26232,26622,26984,27273,27491,27712,28096,28136,28191,28254,28702,28833,29582,29693,30010,30555,30855,31118,31243,31357,31934,32142,33351,35330,35562,35998,37165,37194,37336,37478,37580,37664,38662,38742,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,38748,38914,40718,21046,21137,21884,22564,24093,24351,24716,25552,26799,28639,31085,31532,33229,34234,35069,35576,36420,37261,38500,38555,38717,38988,40778,20430,20806,20939,21161,22066,24340,24427,25514,25805,26089,26177,26362,26361,26397,26781,26839,27133,28437,28526,29031,29157,29226,29866,30522,31062,31066,31199,31264,31381,31895,31967,32068,32368,32903,34299,34468,35412,35519,36249,36481,36896,36973,37347,38459,38613,40165,26063,31751,36275,37827,23384,23562,21330,25305,29469,20519,23447,24478,24752,24939,26837,28121,29742,31278,32066,32156,32305,33131,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,36394,36405,37758,37912,20304,22352,24038,24231,25387,32618,20027,20303,20367,20570,23005,32964,21610,21608,22014,22863,23449,24030,24282,26205,26417,26609,26666,27880,27954,28234,28557,28855,29664,30087,31820,32002,32044,32162,33311,34523,35387,35461,36208,36490,36659,36913,37198,37202,37956,39376,31481,31909,20426,20737,20934,22472,23535,23803,26201,27197,27994,28310,28652,28940,30063,31459,34850,36897,36981,38603,39423,33537,20013,20210,34886,37325,21373,27355,26987,27713,33914,22686,24974,26366,25327,28893,29969,30151,32338,33976,35657,36104,20043,21482,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,21675,22320,22336,24535,25345,25351,25711,25903,26088,26234,26525,26547,27490,27744,27802,28460,30693,30757,31049,31063,32025,32930,33026,33267,33437,33463,34584,35468,63996,36100,36286,36978,30452,31257,31287,32340,32887,21767,21972,22645,25391,25634,26185,26187,26733,27035,27524,27941,28337,29645,29800,29857,30043,30137,30433,30494,30603,31206,32265,32285,33275,34095,34967,35386,36049,36587,36784,36914,37805,38499,38515,38663,20356,21489,23018,23241,24089,26702,29894,30142,31209,31378,33187,34541,36074,36300,36845,26015,26389,63997,22519,28503,32221,36655,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,37878,38598,24501,25074,28548,19988,20376,20511,21449,21983,23919,24046,27425,27492,30923,31642,63998,36425,36554,36974,25417,25662,30528,31364,37679,38015,40810,25776,28591,29158,29864,29914,31428,31762,32386,31922,32408,35738,36106,38013,39184,39244,21049,23519,25830,26413,32046,20717,21443,22649,24920,24921,25082,26028,31449,35730,35734,20489,20513,21109,21809,23100,24288,24432,24884,25950,26124,26166,26274,27085,28356,28466,29462,30241,31379,33081,33369,33750,33980,20661,22512,23488,23528,24425,25505,30758,32181,33756,34081,37319,37365,20874,26613,31574,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,36012,20932,22971,24765,34389,20508,63999,21076,23610,24957,25114,25299,25842,26021,28364,30240,33034,36448,38495,38587,20191,21315,21912,22825,24029,25797,27849,28154,29588,31359,33307,34214,36068,36368,36983,37351,38369,38433,38854,20984,21746,21894,24505,25764,28552,32180,36639,36685,37941,20681,23574,27838,28155,29979,30651,31805,31844,35449,35522,22558,22974,24086,25463,29266,30090,30571,35548,36028,36626,24307,26228,28152,32893,33729,35531,38737,39894,64000,21059,26367,28053,28399,32224,35558,36910,36958,39636,21021,21119,21736,24980,25220,25307,26786,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,26898,26970,27189,28818,28966,30813,30977,30990,31186,31245,32918,33400,33493,33609,34121,35970,36229,37218,37259,37294,20419,22225,29165,30679,34560,35320,23544,24534,26449,37032,21474,22618,23541,24740,24961,25696,32317,32880,34085,37507,25774,20652,23828,26368,22684,25277,25512,26894,27000,27166,28267,30394,31179,33467,33833,35535,36264,36861,37138,37195,37276,37648,37656,37786,38619,39478,39949,19985,30044,31069,31482,31569,31689,32302,33988,36441,36468,36600,36880,26149,26943,29763,20986,26414,40668,20805,24544,27798,34802,34909,34935,24756,33205,33795,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,36101,21462,21561,22068,23094,23601,28810,32736,32858,33030,33261,36259,37257,39519,40434,20596,20164,21408,24827,28204,23652,20360,20516,21988,23769,24159,24677,26772,27835,28100,29118,30164,30196,30305,31258,31305,32199,32251,32622,33268,34473,36636,38601,39347,40786,21063,21189,39149,35242,19971,26578,28422,20405,23522,26517,27784,28024,29723,30759,37341,37756,34756,31204,31281,24555,20182,21668,21822,22702,22949,24816,25171,25302,26422,26965,33333,38464,39345,39389,20524,21331,21828,22396,64001,25176,64002,25826,26219,26589,28609,28655,29730,29752,35351,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,37944,21585,22022,22374,24392,24986,27470,28760,28845,32187,35477,22890,33067,25506,30472,32829,36010,22612,25645,27067,23445,24081,28271,64003,34153,20812,21488,22826,24608,24907,27526,27760,27888,31518,32974,33492,36294,37040,39089,64004,25799,28580,25745,25860,20814,21520,22303,35342,24927,26742,64005,30171,31570,32113,36890,22534,27084,33151,35114,36864,38969,20600,22871,22956,25237,36879,39722,24925,29305,38358,22369,23110,24052,25226,25773,25850,26487,27874,27966,29228,29750,30772,32631,33453,36315,38935,21028,22338,26495,29256,29923,36009,36774,37393,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,38442,20843,21485,25420,20329,21764,24726,25943,27803,28031,29260,29437,31255,35207,35997,24429,28558,28921,33192,24846,20415,20559,25153,29255,31687,32232,32745,36941,38829,39449,36022,22378,24179,26544,33805,35413,21536,23318,24163,24290,24330,25987,32954,34109,38281,38491,20296,21253,21261,21263,21638,21754,22275,24067,24598,25243,25265,25429,64006,27873,28006,30129,30770,32990,33071,33502,33889,33970,34957,35090,36875,37610,39165,39825,24133,26292,26333,28689,29190,64007,20469,21117,24426,24915,26451,27161,28418,29922,31080,34920,35961,39111,39108,39491,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,21697,31263,26963,35575,35914,39080,39342,24444,25259,30130,30382,34987,36991,38466,21305,24380,24517,27852,29644,30050,30091,31558,33534,39325,20047,36924,19979,20309,21414,22799,24264,26160,27827,29781,33655,34662,36032,36944,38686,39957,22737,23416,34384,35604,40372,23506,24680,24717,26097,27735,28450,28579,28698,32597,32752,38289,38290,38480,38867,21106,36676,20989,21547,21688,21859,21898,27323,28085,32216,33382,37532,38519,40569,21512,21704,30418,34532,38308,38356,38492,20130,20233,23022,23270,24055,24658,25239,26477,26689,27782,28207,32568,32923,33322,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,64008,64009,38917,20133,20565,21683,22419,22874,23401,23475,25032,26999,28023,28707,34809,35299,35442,35559,36994,39405,39608,21182,26680,20502,24184,26447,33607,34892,20139,21521,22190,29670,37141,38911,39177,39255,39321,22099,22687,34395,35377,25010,27382,29563,36562,27463,38570,39511,22869,29184,36203,38761,20436,23796,24358,25080,26203,27883,28843,29572,29625,29694,30505,30541,32067,32098,32291,33335,34898,64010,36066,37449,39023,23377,31348,34880,38913,23244,20448,21332,22846,23805,25406,28025,29433,33029,33031,33698,37583,38960,20136,20804,21009,22411,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,24418,27842,28366,28677,28752,28847,29074,29673,29801,33610,34722,34913,36872,37026,37795,39336,20846,24407,24800,24935,26291,34137,36426,37295,38795,20046,20114,21628,22741,22778,22909,23733,24359,25142,25160,26122,26215,27627,28009,28111,28246,28408,28564,28640,28649,28765,29392,29733,29786,29920,30355,31068,31946,32286,32993,33446,33899,33983,34382,34399,34676,35703,35946,37804,38912,39013,24785,25110,37239,23130,26127,28151,28222,29759,39746,24573,24794,31503,21700,24344,27742,27859,27946,28888,32005,34425,35340,40251,21270,21644,23301,27194,28779,30069,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,31117,31166,33457,33775,35441,35649,36008,38772,64011,25844,25899,30906,30907,31339,20024,21914,22864,23462,24187,24739,25563,27489,26213,26707,28185,29029,29872,32008,36996,39529,39973,27963,28369,29502,35905,38346,20976,24140,24488,24653,24822,24880,24908,26179,26180,27045,27841,28255,28361,28514,29004,29852,30343,31681,31783,33618,34647,36945,38541,40643,21295,22238,24315,24458,24674,24724,25079,26214,26371,27292,28142,28590,28784,29546,32362,33214,33588,34516,35496,36036,21123,29554,23446,27243,37892,21742,22150,23389,25928,25989,26313,26783,28045,28102,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,29243,32948,37237,39501,20399,20505,21402,21518,21564,21897,21957,24127,24460,26429,29030,29661,36869,21211,21235,22628,22734,28932,29071,29179,34224,35347,26248,34216,21927,26244,29002,33841,21321,21913,27585,24409,24509,25582,26249,28999,35569,36637,40638,20241,25658,28875,30054,34407,24676,35662,40440,20807,20982,21256,27958,33016,40657,26133,27427,28824,30165,21507,23673,32007,35350,27424,27453,27462,21560,24688,27965,32725,33288,20694,20958,21916,22123,22221,23020,23305,24076,24985,24984,25137,26206,26342,29081,29113,29114,29351,31143,31232,32690,35440,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null], + "gb18030":[19970,19972,19973,19974,19983,19986,19991,19999,20000,20001,20003,20006,20009,20014,20015,20017,20019,20021,20023,20028,20032,20033,20034,20036,20038,20042,20049,20053,20055,20058,20059,20066,20067,20068,20069,20071,20072,20074,20075,20076,20077,20078,20079,20082,20084,20085,20086,20087,20088,20089,20090,20091,20092,20093,20095,20096,20097,20098,20099,20100,20101,20103,20106,20112,20118,20119,20121,20124,20125,20126,20131,20138,20143,20144,20145,20148,20150,20151,20152,20153,20156,20157,20158,20168,20172,20175,20176,20178,20186,20187,20188,20192,20194,20198,20199,20201,20205,20206,20207,20209,20212,20216,20217,20218,20220,20222,20224,20226,20227,20228,20229,20230,20231,20232,20235,20236,20242,20243,20244,20245,20246,20252,20253,20257,20259,20264,20265,20268,20269,20270,20273,20275,20277,20279,20281,20283,20286,20287,20288,20289,20290,20292,20293,20295,20296,20297,20298,20299,20300,20306,20308,20310,20321,20322,20326,20328,20330,20331,20333,20334,20337,20338,20341,20343,20344,20345,20346,20349,20352,20353,20354,20357,20358,20359,20362,20364,20366,20368,20370,20371,20373,20374,20376,20377,20378,20380,20382,20383,20385,20386,20388,20395,20397,20400,20401,20402,20403,20404,20406,20407,20408,20409,20410,20411,20412,20413,20414,20416,20417,20418,20422,20423,20424,20425,20427,20428,20429,20434,20435,20436,20437,20438,20441,20443,20448,20450,20452,20453,20455,20459,20460,20464,20466,20468,20469,20470,20471,20473,20475,20476,20477,20479,20480,20481,20482,20483,20484,20485,20486,20487,20488,20489,20490,20491,20494,20496,20497,20499,20501,20502,20503,20507,20509,20510,20512,20514,20515,20516,20519,20523,20527,20528,20529,20530,20531,20532,20533,20534,20535,20536,20537,20539,20541,20543,20544,20545,20546,20548,20549,20550,20553,20554,20555,20557,20560,20561,20562,20563,20564,20566,20567,20568,20569,20571,20573,20574,20575,20576,20577,20578,20579,20580,20582,20583,20584,20585,20586,20587,20589,20590,20591,20592,20593,20594,20595,20596,20597,20600,20601,20602,20604,20605,20609,20610,20611,20612,20614,20615,20617,20618,20619,20620,20622,20623,20624,20625,20626,20627,20628,20629,20630,20631,20632,20633,20634,20635,20636,20637,20638,20639,20640,20641,20642,20644,20646,20650,20651,20653,20654,20655,20656,20657,20659,20660,20661,20662,20663,20664,20665,20668,20669,20670,20671,20672,20673,20674,20675,20676,20677,20678,20679,20680,20681,20682,20683,20684,20685,20686,20688,20689,20690,20691,20692,20693,20695,20696,20697,20699,20700,20701,20702,20703,20704,20705,20706,20707,20708,20709,20712,20713,20714,20715,20719,20720,20721,20722,20724,20726,20727,20728,20729,20730,20732,20733,20734,20735,20736,20737,20738,20739,20740,20741,20744,20745,20746,20748,20749,20750,20751,20752,20753,20755,20756,20757,20758,20759,20760,20761,20762,20763,20764,20765,20766,20767,20768,20770,20771,20772,20773,20774,20775,20776,20777,20778,20779,20780,20781,20782,20783,20784,20785,20786,20787,20788,20789,20790,20791,20792,20793,20794,20795,20796,20797,20798,20802,20807,20810,20812,20814,20815,20816,20818,20819,20823,20824,20825,20827,20829,20830,20831,20832,20833,20835,20836,20838,20839,20841,20842,20847,20850,20858,20862,20863,20867,20868,20870,20871,20874,20875,20878,20879,20880,20881,20883,20884,20888,20890,20893,20894,20895,20897,20899,20902,20903,20904,20905,20906,20909,20910,20916,20920,20921,20922,20926,20927,20929,20930,20931,20933,20936,20938,20941,20942,20944,20946,20947,20948,20949,20950,20951,20952,20953,20954,20956,20958,20959,20962,20963,20965,20966,20967,20968,20969,20970,20972,20974,20977,20978,20980,20983,20990,20996,20997,21001,21003,21004,21007,21008,21011,21012,21013,21020,21022,21023,21025,21026,21027,21029,21030,21031,21034,21036,21039,21041,21042,21044,21045,21052,21054,21060,21061,21062,21063,21064,21065,21067,21070,21071,21074,21075,21077,21079,21080,21081,21082,21083,21085,21087,21088,21090,21091,21092,21094,21096,21099,21100,21101,21102,21104,21105,21107,21108,21109,21110,21111,21112,21113,21114,21115,21116,21118,21120,21123,21124,21125,21126,21127,21129,21130,21131,21132,21133,21134,21135,21137,21138,21140,21141,21142,21143,21144,21145,21146,21148,21156,21157,21158,21159,21166,21167,21168,21172,21173,21174,21175,21176,21177,21178,21179,21180,21181,21184,21185,21186,21188,21189,21190,21192,21194,21196,21197,21198,21199,21201,21203,21204,21205,21207,21209,21210,21211,21212,21213,21214,21216,21217,21218,21219,21221,21222,21223,21224,21225,21226,21227,21228,21229,21230,21231,21233,21234,21235,21236,21237,21238,21239,21240,21243,21244,21245,21249,21250,21251,21252,21255,21257,21258,21259,21260,21262,21265,21266,21267,21268,21272,21275,21276,21278,21279,21282,21284,21285,21287,21288,21289,21291,21292,21293,21295,21296,21297,21298,21299,21300,21301,21302,21303,21304,21308,21309,21312,21314,21316,21318,21323,21324,21325,21328,21332,21336,21337,21339,21341,21349,21352,21354,21356,21357,21362,21366,21369,21371,21372,21373,21374,21376,21377,21379,21383,21384,21386,21390,21391,21392,21393,21394,21395,21396,21398,21399,21401,21403,21404,21406,21408,21409,21412,21415,21418,21419,21420,21421,21423,21424,21425,21426,21427,21428,21429,21431,21432,21433,21434,21436,21437,21438,21440,21443,21444,21445,21446,21447,21454,21455,21456,21458,21459,21461,21466,21468,21469,21470,21473,21474,21479,21492,21498,21502,21503,21504,21506,21509,21511,21515,21524,21528,21529,21530,21532,21538,21540,21541,21546,21552,21555,21558,21559,21562,21565,21567,21569,21570,21572,21573,21575,21577,21580,21581,21582,21583,21585,21594,21597,21598,21599,21600,21601,21603,21605,21607,21609,21610,21611,21612,21613,21614,21615,21616,21620,21625,21626,21630,21631,21633,21635,21637,21639,21640,21641,21642,21645,21649,21651,21655,21656,21660,21662,21663,21664,21665,21666,21669,21678,21680,21682,21685,21686,21687,21689,21690,21692,21694,21699,21701,21706,21707,21718,21720,21723,21728,21729,21730,21731,21732,21739,21740,21743,21744,21745,21748,21749,21750,21751,21752,21753,21755,21758,21760,21762,21763,21764,21765,21768,21770,21771,21772,21773,21774,21778,21779,21781,21782,21783,21784,21785,21786,21788,21789,21790,21791,21793,21797,21798,21800,21801,21803,21805,21810,21812,21813,21814,21816,21817,21818,21819,21821,21824,21826,21829,21831,21832,21835,21836,21837,21838,21839,21841,21842,21843,21844,21847,21848,21849,21850,21851,21853,21854,21855,21856,21858,21859,21864,21865,21867,21871,21872,21873,21874,21875,21876,21881,21882,21885,21887,21893,21894,21900,21901,21902,21904,21906,21907,21909,21910,21911,21914,21915,21918,21920,21921,21922,21923,21924,21925,21926,21928,21929,21930,21931,21932,21933,21934,21935,21936,21938,21940,21942,21944,21946,21948,21951,21952,21953,21954,21955,21958,21959,21960,21962,21963,21966,21967,21968,21973,21975,21976,21977,21978,21979,21982,21984,21986,21991,21993,21997,21998,22000,22001,22004,22006,22008,22009,22010,22011,22012,22015,22018,22019,22020,22021,22022,22023,22026,22027,22029,22032,22033,22034,22035,22036,22037,22038,22039,22041,22042,22044,22045,22048,22049,22050,22053,22054,22056,22057,22058,22059,22062,22063,22064,22067,22069,22071,22072,22074,22076,22077,22078,22080,22081,22082,22083,22084,22085,22086,22087,22088,22089,22090,22091,22095,22096,22097,22098,22099,22101,22102,22106,22107,22109,22110,22111,22112,22113,22115,22117,22118,22119,22125,22126,22127,22128,22130,22131,22132,22133,22135,22136,22137,22138,22141,22142,22143,22144,22145,22146,22147,22148,22151,22152,22153,22154,22155,22156,22157,22160,22161,22162,22164,22165,22166,22167,22168,22169,22170,22171,22172,22173,22174,22175,22176,22177,22178,22180,22181,22182,22183,22184,22185,22186,22187,22188,22189,22190,22192,22193,22194,22195,22196,22197,22198,22200,22201,22202,22203,22205,22206,22207,22208,22209,22210,22211,22212,22213,22214,22215,22216,22217,22219,22220,22221,22222,22223,22224,22225,22226,22227,22229,22230,22232,22233,22236,22243,22245,22246,22247,22248,22249,22250,22252,22254,22255,22258,22259,22262,22263,22264,22267,22268,22272,22273,22274,22277,22279,22283,22284,22285,22286,22287,22288,22289,22290,22291,22292,22293,22294,22295,22296,22297,22298,22299,22301,22302,22304,22305,22306,22308,22309,22310,22311,22315,22321,22322,22324,22325,22326,22327,22328,22332,22333,22335,22337,22339,22340,22341,22342,22344,22345,22347,22354,22355,22356,22357,22358,22360,22361,22370,22371,22373,22375,22380,22382,22384,22385,22386,22388,22389,22392,22393,22394,22397,22398,22399,22400,22401,22407,22408,22409,22410,22413,22414,22415,22416,22417,22420,22421,22422,22423,22424,22425,22426,22428,22429,22430,22431,22437,22440,22442,22444,22447,22448,22449,22451,22453,22454,22455,22457,22458,22459,22460,22461,22462,22463,22464,22465,22468,22469,22470,22471,22472,22473,22474,22476,22477,22480,22481,22483,22486,22487,22491,22492,22494,22497,22498,22499,22501,22502,22503,22504,22505,22506,22507,22508,22510,22512,22513,22514,22515,22517,22518,22519,22523,22524,22526,22527,22529,22531,22532,22533,22536,22537,22538,22540,22542,22543,22544,22546,22547,22548,22550,22551,22552,22554,22555,22556,22557,22559,22562,22563,22565,22566,22567,22568,22569,22571,22572,22573,22574,22575,22577,22578,22579,22580,22582,22583,22584,22585,22586,22587,22588,22589,22590,22591,22592,22593,22594,22595,22597,22598,22599,22600,22601,22602,22603,22606,22607,22608,22610,22611,22613,22614,22615,22617,22618,22619,22620,22621,22623,22624,22625,22626,22627,22628,22630,22631,22632,22633,22634,22637,22638,22639,22640,22641,22642,22643,22644,22645,22646,22647,22648,22649,22650,22651,22652,22653,22655,22658,22660,22662,22663,22664,22666,22667,22668,22669,22670,22671,22672,22673,22676,22677,22678,22679,22680,22683,22684,22685,22688,22689,22690,22691,22692,22693,22694,22695,22698,22699,22700,22701,22702,22703,22704,22705,22706,22707,22708,22709,22710,22711,22712,22713,22714,22715,22717,22718,22719,22720,22722,22723,22724,22726,22727,22728,22729,22730,22731,22732,22733,22734,22735,22736,22738,22739,22740,22742,22743,22744,22745,22746,22747,22748,22749,22750,22751,22752,22753,22754,22755,22757,22758,22759,22760,22761,22762,22765,22767,22769,22770,22772,22773,22775,22776,22778,22779,22780,22781,22782,22783,22784,22785,22787,22789,22790,22792,22793,22794,22795,22796,22798,22800,22801,22802,22803,22807,22808,22811,22813,22814,22816,22817,22818,22819,22822,22824,22828,22832,22834,22835,22837,22838,22843,22845,22846,22847,22848,22851,22853,22854,22858,22860,22861,22864,22866,22867,22873,22875,22876,22877,22878,22879,22881,22883,22884,22886,22887,22888,22889,22890,22891,22892,22893,22894,22895,22896,22897,22898,22901,22903,22906,22907,22908,22910,22911,22912,22917,22921,22923,22924,22926,22927,22928,22929,22932,22933,22936,22938,22939,22940,22941,22943,22944,22945,22946,22950,22951,22956,22957,22960,22961,22963,22964,22965,22966,22967,22968,22970,22972,22973,22975,22976,22977,22978,22979,22980,22981,22983,22984,22985,22988,22989,22990,22991,22997,22998,23001,23003,23006,23007,23008,23009,23010,23012,23014,23015,23017,23018,23019,23021,23022,23023,23024,23025,23026,23027,23028,23029,23030,23031,23032,23034,23036,23037,23038,23040,23042,23050,23051,23053,23054,23055,23056,23058,23060,23061,23062,23063,23065,23066,23067,23069,23070,23073,23074,23076,23078,23079,23080,23082,23083,23084,23085,23086,23087,23088,23091,23093,23095,23096,23097,23098,23099,23101,23102,23103,23105,23106,23107,23108,23109,23111,23112,23115,23116,23117,23118,23119,23120,23121,23122,23123,23124,23126,23127,23128,23129,23131,23132,23133,23134,23135,23136,23137,23139,23140,23141,23142,23144,23145,23147,23148,23149,23150,23151,23152,23153,23154,23155,23160,23161,23163,23164,23165,23166,23168,23169,23170,23171,23172,23173,23174,23175,23176,23177,23178,23179,23180,23181,23182,23183,23184,23185,23187,23188,23189,23190,23191,23192,23193,23196,23197,23198,23199,23200,23201,23202,23203,23204,23205,23206,23207,23208,23209,23211,23212,23213,23214,23215,23216,23217,23220,23222,23223,23225,23226,23227,23228,23229,23231,23232,23235,23236,23237,23238,23239,23240,23242,23243,23245,23246,23247,23248,23249,23251,23253,23255,23257,23258,23259,23261,23262,23263,23266,23268,23269,23271,23272,23274,23276,23277,23278,23279,23280,23282,23283,23284,23285,23286,23287,23288,23289,23290,23291,23292,23293,23294,23295,23296,23297,23298,23299,23300,23301,23302,23303,23304,23306,23307,23308,23309,23310,23311,23312,23313,23314,23315,23316,23317,23320,23321,23322,23323,23324,23325,23326,23327,23328,23329,23330,23331,23332,23333,23334,23335,23336,23337,23338,23339,23340,23341,23342,23343,23344,23345,23347,23349,23350,23352,23353,23354,23355,23356,23357,23358,23359,23361,23362,23363,23364,23365,23366,23367,23368,23369,23370,23371,23372,23373,23374,23375,23378,23382,23390,23392,23393,23399,23400,23403,23405,23406,23407,23410,23412,23414,23415,23416,23417,23419,23420,23422,23423,23426,23430,23434,23437,23438,23440,23441,23442,23444,23446,23455,23463,23464,23465,23468,23469,23470,23471,23473,23474,23479,23482,23483,23484,23488,23489,23491,23496,23497,23498,23499,23501,23502,23503,23505,23508,23509,23510,23511,23512,23513,23514,23515,23516,23520,23522,23523,23526,23527,23529,23530,23531,23532,23533,23535,23537,23538,23539,23540,23541,23542,23543,23549,23550,23552,23554,23555,23557,23559,23560,23563,23564,23565,23566,23568,23570,23571,23575,23577,23579,23582,23583,23584,23585,23587,23590,23592,23593,23594,23595,23597,23598,23599,23600,23602,23603,23605,23606,23607,23619,23620,23622,23623,23628,23629,23634,23635,23636,23638,23639,23640,23642,23643,23644,23645,23647,23650,23652,23655,23656,23657,23658,23659,23660,23661,23664,23666,23667,23668,23669,23670,23671,23672,23675,23676,23677,23678,23680,23683,23684,23685,23686,23687,23689,23690,23691,23694,23695,23698,23699,23701,23709,23710,23711,23712,23713,23716,23717,23718,23719,23720,23722,23726,23727,23728,23730,23732,23734,23737,23738,23739,23740,23742,23744,23746,23747,23749,23750,23751,23752,23753,23754,23756,23757,23758,23759,23760,23761,23763,23764,23765,23766,23767,23768,23770,23771,23772,23773,23774,23775,23776,23778,23779,23783,23785,23787,23788,23790,23791,23793,23794,23795,23796,23797,23798,23799,23800,23801,23802,23804,23805,23806,23807,23808,23809,23812,23813,23816,23817,23818,23819,23820,23821,23823,23824,23825,23826,23827,23829,23831,23832,23833,23834,23836,23837,23839,23840,23841,23842,23843,23845,23848,23850,23851,23852,23855,23856,23857,23858,23859,23861,23862,23863,23864,23865,23866,23867,23868,23871,23872,23873,23874,23875,23876,23877,23878,23880,23881,23885,23886,23887,23888,23889,23890,23891,23892,23893,23894,23895,23897,23898,23900,23902,23903,23904,23905,23906,23907,23908,23909,23910,23911,23912,23914,23917,23918,23920,23921,23922,23923,23925,23926,23927,23928,23929,23930,23931,23932,23933,23934,23935,23936,23937,23939,23940,23941,23942,23943,23944,23945,23946,23947,23948,23949,23950,23951,23952,23953,23954,23955,23956,23957,23958,23959,23960,23962,23963,23964,23966,23967,23968,23969,23970,23971,23972,23973,23974,23975,23976,23977,23978,23979,23980,23981,23982,23983,23984,23985,23986,23987,23988,23989,23990,23992,23993,23994,23995,23996,23997,23998,23999,24000,24001,24002,24003,24004,24006,24007,24008,24009,24010,24011,24012,24014,24015,24016,24017,24018,24019,24020,24021,24022,24023,24024,24025,24026,24028,24031,24032,24035,24036,24042,24044,24045,24048,24053,24054,24056,24057,24058,24059,24060,24063,24064,24068,24071,24073,24074,24075,24077,24078,24082,24083,24087,24094,24095,24096,24097,24098,24099,24100,24101,24104,24105,24106,24107,24108,24111,24112,24114,24115,24116,24117,24118,24121,24122,24126,24127,24128,24129,24131,24134,24135,24136,24137,24138,24139,24141,24142,24143,24144,24145,24146,24147,24150,24151,24152,24153,24154,24156,24157,24159,24160,24163,24164,24165,24166,24167,24168,24169,24170,24171,24172,24173,24174,24175,24176,24177,24181,24183,24185,24190,24193,24194,24195,24197,24200,24201,24204,24205,24206,24210,24216,24219,24221,24225,24226,24227,24228,24232,24233,24234,24235,24236,24238,24239,24240,24241,24242,24244,24250,24251,24252,24253,24255,24256,24257,24258,24259,24260,24261,24262,24263,24264,24267,24268,24269,24270,24271,24272,24276,24277,24279,24280,24281,24282,24284,24285,24286,24287,24288,24289,24290,24291,24292,24293,24294,24295,24297,24299,24300,24301,24302,24303,24304,24305,24306,24307,24309,24312,24313,24315,24316,24317,24325,24326,24327,24329,24332,24333,24334,24336,24338,24340,24342,24345,24346,24348,24349,24350,24353,24354,24355,24356,24360,24363,24364,24366,24368,24370,24371,24372,24373,24374,24375,24376,24379,24381,24382,24383,24385,24386,24387,24388,24389,24390,24391,24392,24393,24394,24395,24396,24397,24398,24399,24401,24404,24409,24410,24411,24412,24414,24415,24416,24419,24421,24423,24424,24427,24430,24431,24434,24436,24437,24438,24440,24442,24445,24446,24447,24451,24454,24461,24462,24463,24465,24467,24468,24470,24474,24475,24477,24478,24479,24480,24482,24483,24484,24485,24486,24487,24489,24491,24492,24495,24496,24497,24498,24499,24500,24502,24504,24505,24506,24507,24510,24511,24512,24513,24514,24519,24520,24522,24523,24526,24531,24532,24533,24538,24539,24540,24542,24543,24546,24547,24549,24550,24552,24553,24556,24559,24560,24562,24563,24564,24566,24567,24569,24570,24572,24583,24584,24585,24587,24588,24592,24593,24595,24599,24600,24602,24606,24607,24610,24611,24612,24620,24621,24622,24624,24625,24626,24627,24628,24630,24631,24632,24633,24634,24637,24638,24640,24644,24645,24646,24647,24648,24649,24650,24652,24654,24655,24657,24659,24660,24662,24663,24664,24667,24668,24670,24671,24672,24673,24677,24678,24686,24689,24690,24692,24693,24695,24702,24704,24705,24706,24709,24710,24711,24712,24714,24715,24718,24719,24720,24721,24723,24725,24727,24728,24729,24732,24734,24737,24738,24740,24741,24743,24745,24746,24750,24752,24755,24757,24758,24759,24761,24762,24765,24766,24767,24768,24769,24770,24771,24772,24775,24776,24777,24780,24781,24782,24783,24784,24786,24787,24788,24790,24791,24793,24795,24798,24801,24802,24803,24804,24805,24810,24817,24818,24821,24823,24824,24827,24828,24829,24830,24831,24834,24835,24836,24837,24839,24842,24843,24844,24848,24849,24850,24851,24852,24854,24855,24856,24857,24859,24860,24861,24862,24865,24866,24869,24872,24873,24874,24876,24877,24878,24879,24880,24881,24882,24883,24884,24885,24886,24887,24888,24889,24890,24891,24892,24893,24894,24896,24897,24898,24899,24900,24901,24902,24903,24905,24907,24909,24911,24912,24914,24915,24916,24918,24919,24920,24921,24922,24923,24924,24926,24927,24928,24929,24931,24932,24933,24934,24937,24938,24939,24940,24941,24942,24943,24945,24946,24947,24948,24950,24952,24953,24954,24955,24956,24957,24958,24959,24960,24961,24962,24963,24964,24965,24966,24967,24968,24969,24970,24972,24973,24975,24976,24977,24978,24979,24981,24982,24983,24984,24985,24986,24987,24988,24990,24991,24992,24993,24994,24995,24996,24997,24998,25002,25003,25005,25006,25007,25008,25009,25010,25011,25012,25013,25014,25016,25017,25018,25019,25020,25021,25023,25024,25025,25027,25028,25029,25030,25031,25033,25036,25037,25038,25039,25040,25043,25045,25046,25047,25048,25049,25050,25051,25052,25053,25054,25055,25056,25057,25058,25059,25060,25061,25063,25064,25065,25066,25067,25068,25069,25070,25071,25072,25073,25074,25075,25076,25078,25079,25080,25081,25082,25083,25084,25085,25086,25088,25089,25090,25091,25092,25093,25095,25097,25107,25108,25113,25116,25117,25118,25120,25123,25126,25127,25128,25129,25131,25133,25135,25136,25137,25138,25141,25142,25144,25145,25146,25147,25148,25154,25156,25157,25158,25162,25167,25168,25173,25174,25175,25177,25178,25180,25181,25182,25183,25184,25185,25186,25188,25189,25192,25201,25202,25204,25205,25207,25208,25210,25211,25213,25217,25218,25219,25221,25222,25223,25224,25227,25228,25229,25230,25231,25232,25236,25241,25244,25245,25246,25251,25254,25255,25257,25258,25261,25262,25263,25264,25266,25267,25268,25270,25271,25272,25274,25278,25280,25281,25283,25291,25295,25297,25301,25309,25310,25312,25313,25316,25322,25323,25328,25330,25333,25336,25337,25338,25339,25344,25347,25348,25349,25350,25354,25355,25356,25357,25359,25360,25362,25363,25364,25365,25367,25368,25369,25372,25382,25383,25385,25388,25389,25390,25392,25393,25395,25396,25397,25398,25399,25400,25403,25404,25406,25407,25408,25409,25412,25415,25416,25418,25425,25426,25427,25428,25430,25431,25432,25433,25434,25435,25436,25437,25440,25444,25445,25446,25448,25450,25451,25452,25455,25456,25458,25459,25460,25461,25464,25465,25468,25469,25470,25471,25473,25475,25476,25477,25478,25483,25485,25489,25491,25492,25493,25495,25497,25498,25499,25500,25501,25502,25503,25505,25508,25510,25515,25519,25521,25522,25525,25526,25529,25531,25533,25535,25536,25537,25538,25539,25541,25543,25544,25546,25547,25548,25553,25555,25556,25557,25559,25560,25561,25562,25563,25564,25565,25567,25570,25572,25573,25574,25575,25576,25579,25580,25582,25583,25584,25585,25587,25589,25591,25593,25594,25595,25596,25598,25603,25604,25606,25607,25608,25609,25610,25613,25614,25617,25618,25621,25622,25623,25624,25625,25626,25629,25631,25634,25635,25636,25637,25639,25640,25641,25643,25646,25647,25648,25649,25650,25651,25653,25654,25655,25656,25657,25659,25660,25662,25664,25666,25667,25673,25675,25676,25677,25678,25679,25680,25681,25683,25685,25686,25687,25689,25690,25691,25692,25693,25695,25696,25697,25698,25699,25700,25701,25702,25704,25706,25707,25708,25710,25711,25712,25713,25714,25715,25716,25717,25718,25719,25723,25724,25725,25726,25727,25728,25729,25731,25734,25736,25737,25738,25739,25740,25741,25742,25743,25744,25747,25748,25751,25752,25754,25755,25756,25757,25759,25760,25761,25762,25763,25765,25766,25767,25768,25770,25771,25775,25777,25778,25779,25780,25782,25785,25787,25789,25790,25791,25793,25795,25796,25798,25799,25800,25801,25802,25803,25804,25807,25809,25811,25812,25813,25814,25817,25818,25819,25820,25821,25823,25824,25825,25827,25829,25831,25832,25833,25834,25835,25836,25837,25838,25839,25840,25841,25842,25843,25844,25845,25846,25847,25848,25849,25850,25851,25852,25853,25854,25855,25857,25858,25859,25860,25861,25862,25863,25864,25866,25867,25868,25869,25870,25871,25872,25873,25875,25876,25877,25878,25879,25881,25882,25883,25884,25885,25886,25887,25888,25889,25890,25891,25892,25894,25895,25896,25897,25898,25900,25901,25904,25905,25906,25907,25911,25914,25916,25917,25920,25921,25922,25923,25924,25926,25927,25930,25931,25933,25934,25936,25938,25939,25940,25943,25944,25946,25948,25951,25952,25953,25956,25957,25959,25960,25961,25962,25965,25966,25967,25969,25971,25973,25974,25976,25977,25978,25979,25980,25981,25982,25983,25984,25985,25986,25987,25988,25989,25990,25992,25993,25994,25997,25998,25999,26002,26004,26005,26006,26008,26010,26013,26014,26016,26018,26019,26022,26024,26026,26028,26030,26033,26034,26035,26036,26037,26038,26039,26040,26042,26043,26046,26047,26048,26050,26055,26056,26057,26058,26061,26064,26065,26067,26068,26069,26072,26073,26074,26075,26076,26077,26078,26079,26081,26083,26084,26090,26091,26098,26099,26100,26101,26104,26105,26107,26108,26109,26110,26111,26113,26116,26117,26119,26120,26121,26123,26125,26128,26129,26130,26134,26135,26136,26138,26139,26140,26142,26145,26146,26147,26148,26150,26153,26154,26155,26156,26158,26160,26162,26163,26167,26168,26169,26170,26171,26173,26175,26176,26178,26180,26181,26182,26183,26184,26185,26186,26189,26190,26192,26193,26200,26201,26203,26204,26205,26206,26208,26210,26211,26213,26215,26217,26218,26219,26220,26221,26225,26226,26227,26229,26232,26233,26235,26236,26237,26239,26240,26241,26243,26245,26246,26248,26249,26250,26251,26253,26254,26255,26256,26258,26259,26260,26261,26264,26265,26266,26267,26268,26270,26271,26272,26273,26274,26275,26276,26277,26278,26281,26282,26283,26284,26285,26287,26288,26289,26290,26291,26293,26294,26295,26296,26298,26299,26300,26301,26303,26304,26305,26306,26307,26308,26309,26310,26311,26312,26313,26314,26315,26316,26317,26318,26319,26320,26321,26322,26323,26324,26325,26326,26327,26328,26330,26334,26335,26336,26337,26338,26339,26340,26341,26343,26344,26346,26347,26348,26349,26350,26351,26353,26357,26358,26360,26362,26363,26365,26369,26370,26371,26372,26373,26374,26375,26380,26382,26383,26385,26386,26387,26390,26392,26393,26394,26396,26398,26400,26401,26402,26403,26404,26405,26407,26409,26414,26416,26418,26419,26422,26423,26424,26425,26427,26428,26430,26431,26433,26436,26437,26439,26442,26443,26445,26450,26452,26453,26455,26456,26457,26458,26459,26461,26466,26467,26468,26470,26471,26475,26476,26478,26481,26484,26486,26488,26489,26490,26491,26493,26496,26498,26499,26501,26502,26504,26506,26508,26509,26510,26511,26513,26514,26515,26516,26518,26521,26523,26527,26528,26529,26532,26534,26537,26540,26542,26545,26546,26548,26553,26554,26555,26556,26557,26558,26559,26560,26562,26565,26566,26567,26568,26569,26570,26571,26572,26573,26574,26581,26582,26583,26587,26591,26593,26595,26596,26598,26599,26600,26602,26603,26605,26606,26610,26613,26614,26615,26616,26617,26618,26619,26620,26622,26625,26626,26627,26628,26630,26637,26640,26642,26644,26645,26648,26649,26650,26651,26652,26654,26655,26656,26658,26659,26660,26661,26662,26663,26664,26667,26668,26669,26670,26671,26672,26673,26676,26677,26678,26682,26683,26687,26695,26699,26701,26703,26706,26710,26711,26712,26713,26714,26715,26716,26717,26718,26719,26730,26732,26733,26734,26735,26736,26737,26738,26739,26741,26744,26745,26746,26747,26748,26749,26750,26751,26752,26754,26756,26759,26760,26761,26762,26763,26764,26765,26766,26768,26769,26770,26772,26773,26774,26776,26777,26778,26779,26780,26781,26782,26783,26784,26785,26787,26788,26789,26793,26794,26795,26796,26798,26801,26802,26804,26806,26807,26808,26809,26810,26811,26812,26813,26814,26815,26817,26819,26820,26821,26822,26823,26824,26826,26828,26830,26831,26832,26833,26835,26836,26838,26839,26841,26843,26844,26845,26846,26847,26849,26850,26852,26853,26854,26855,26856,26857,26858,26859,26860,26861,26863,26866,26867,26868,26870,26871,26872,26875,26877,26878,26879,26880,26882,26883,26884,26886,26887,26888,26889,26890,26892,26895,26897,26899,26900,26901,26902,26903,26904,26905,26906,26907,26908,26909,26910,26913,26914,26915,26917,26918,26919,26920,26921,26922,26923,26924,26926,26927,26929,26930,26931,26933,26934,26935,26936,26938,26939,26940,26942,26944,26945,26947,26948,26949,26950,26951,26952,26953,26954,26955,26956,26957,26958,26959,26960,26961,26962,26963,26965,26966,26968,26969,26971,26972,26975,26977,26978,26980,26981,26983,26984,26985,26986,26988,26989,26991,26992,26994,26995,26996,26997,26998,27002,27003,27005,27006,27007,27009,27011,27013,27018,27019,27020,27022,27023,27024,27025,27026,27027,27030,27031,27033,27034,27037,27038,27039,27040,27041,27042,27043,27044,27045,27046,27049,27050,27052,27054,27055,27056,27058,27059,27061,27062,27064,27065,27066,27068,27069,27070,27071,27072,27074,27075,27076,27077,27078,27079,27080,27081,27083,27085,27087,27089,27090,27091,27093,27094,27095,27096,27097,27098,27100,27101,27102,27105,27106,27107,27108,27109,27110,27111,27112,27113,27114,27115,27116,27118,27119,27120,27121,27123,27124,27125,27126,27127,27128,27129,27130,27131,27132,27134,27136,27137,27138,27139,27140,27141,27142,27143,27144,27145,27147,27148,27149,27150,27151,27152,27153,27154,27155,27156,27157,27158,27161,27162,27163,27164,27165,27166,27168,27170,27171,27172,27173,27174,27175,27177,27179,27180,27181,27182,27184,27186,27187,27188,27190,27191,27192,27193,27194,27195,27196,27199,27200,27201,27202,27203,27205,27206,27208,27209,27210,27211,27212,27213,27214,27215,27217,27218,27219,27220,27221,27222,27223,27226,27228,27229,27230,27231,27232,27234,27235,27236,27238,27239,27240,27241,27242,27243,27244,27245,27246,27247,27248,27250,27251,27252,27253,27254,27255,27256,27258,27259,27261,27262,27263,27265,27266,27267,27269,27270,27271,27272,27273,27274,27275,27276,27277,27279,27282,27283,27284,27285,27286,27288,27289,27290,27291,27292,27293,27294,27295,27297,27298,27299,27300,27301,27302,27303,27304,27306,27309,27310,27311,27312,27313,27314,27315,27316,27317,27318,27319,27320,27321,27322,27323,27324,27325,27326,27327,27328,27329,27330,27331,27332,27333,27334,27335,27336,27337,27338,27339,27340,27341,27342,27343,27344,27345,27346,27347,27348,27349,27350,27351,27352,27353,27354,27355,27356,27357,27358,27359,27360,27361,27362,27363,27364,27365,27366,27367,27368,27369,27370,27371,27372,27373,27374,27375,27376,27377,27378,27379,27380,27381,27382,27383,27384,27385,27386,27387,27388,27389,27390,27391,27392,27393,27394,27395,27396,27397,27398,27399,27400,27401,27402,27403,27404,27405,27406,27407,27408,27409,27410,27411,27412,27413,27414,27415,27416,27417,27418,27419,27420,27421,27422,27423,27429,27430,27432,27433,27434,27435,27436,27437,27438,27439,27440,27441,27443,27444,27445,27446,27448,27451,27452,27453,27455,27456,27457,27458,27460,27461,27464,27466,27467,27469,27470,27471,27472,27473,27474,27475,27476,27477,27478,27479,27480,27482,27483,27484,27485,27486,27487,27488,27489,27496,27497,27499,27500,27501,27502,27503,27504,27505,27506,27507,27508,27509,27510,27511,27512,27514,27517,27518,27519,27520,27525,27528,27532,27534,27535,27536,27537,27540,27541,27543,27544,27545,27548,27549,27550,27551,27552,27554,27555,27556,27557,27558,27559,27560,27561,27563,27564,27565,27566,27567,27568,27569,27570,27574,27576,27577,27578,27579,27580,27581,27582,27584,27587,27588,27590,27591,27592,27593,27594,27596,27598,27600,27601,27608,27610,27612,27613,27614,27615,27616,27618,27619,27620,27621,27622,27623,27624,27625,27628,27629,27630,27632,27633,27634,27636,27638,27639,27640,27642,27643,27644,27646,27647,27648,27649,27650,27651,27652,27656,27657,27658,27659,27660,27662,27666,27671,27676,27677,27678,27680,27683,27685,27691,27692,27693,27697,27699,27702,27703,27705,27706,27707,27708,27710,27711,27715,27716,27717,27720,27723,27724,27725,27726,27727,27729,27730,27731,27734,27736,27737,27738,27746,27747,27749,27750,27751,27755,27756,27757,27758,27759,27761,27763,27765,27767,27768,27770,27771,27772,27775,27776,27780,27783,27786,27787,27789,27790,27793,27794,27797,27798,27799,27800,27802,27804,27805,27806,27808,27810,27816,27820,27823,27824,27828,27829,27830,27831,27834,27840,27841,27842,27843,27846,27847,27848,27851,27853,27854,27855,27857,27858,27864,27865,27866,27868,27869,27871,27876,27878,27879,27881,27884,27885,27890,27892,27897,27903,27904,27906,27907,27909,27910,27912,27913,27914,27917,27919,27920,27921,27923,27924,27925,27926,27928,27932,27933,27935,27936,27937,27938,27939,27940,27942,27944,27945,27948,27949,27951,27952,27956,27958,27959,27960,27962,27967,27968,27970,27972,27977,27980,27984,27989,27990,27991,27992,27995,27997,27999,28001,28002,28004,28005,28007,28008,28011,28012,28013,28016,28017,28018,28019,28021,28022,28025,28026,28027,28029,28030,28031,28032,28033,28035,28036,28038,28039,28042,28043,28045,28047,28048,28050,28054,28055,28056,28057,28058,28060,28066,28069,28076,28077,28080,28081,28083,28084,28086,28087,28089,28090,28091,28092,28093,28094,28097,28098,28099,28104,28105,28106,28109,28110,28111,28112,28114,28115,28116,28117,28119,28122,28123,28124,28127,28130,28131,28133,28135,28136,28137,28138,28141,28143,28144,28146,28148,28149,28150,28152,28154,28157,28158,28159,28160,28161,28162,28163,28164,28166,28167,28168,28169,28171,28175,28178,28179,28181,28184,28185,28187,28188,28190,28191,28194,28198,28199,28200,28202,28204,28206,28208,28209,28211,28213,28214,28215,28217,28219,28220,28221,28222,28223,28224,28225,28226,28229,28230,28231,28232,28233,28234,28235,28236,28239,28240,28241,28242,28245,28247,28249,28250,28252,28253,28254,28256,28257,28258,28259,28260,28261,28262,28263,28264,28265,28266,28268,28269,28271,28272,28273,28274,28275,28276,28277,28278,28279,28280,28281,28282,28283,28284,28285,28288,28289,28290,28292,28295,28296,28298,28299,28300,28301,28302,28305,28306,28307,28308,28309,28310,28311,28313,28314,28315,28317,28318,28320,28321,28323,28324,28326,28328,28329,28331,28332,28333,28334,28336,28339,28341,28344,28345,28348,28350,28351,28352,28355,28356,28357,28358,28360,28361,28362,28364,28365,28366,28368,28370,28374,28376,28377,28379,28380,28381,28387,28391,28394,28395,28396,28397,28398,28399,28400,28401,28402,28403,28405,28406,28407,28408,28410,28411,28412,28413,28414,28415,28416,28417,28419,28420,28421,28423,28424,28426,28427,28428,28429,28430,28432,28433,28434,28438,28439,28440,28441,28442,28443,28444,28445,28446,28447,28449,28450,28451,28453,28454,28455,28456,28460,28462,28464,28466,28468,28469,28471,28472,28473,28474,28475,28476,28477,28479,28480,28481,28482,28483,28484,28485,28488,28489,28490,28492,28494,28495,28496,28497,28498,28499,28500,28501,28502,28503,28505,28506,28507,28509,28511,28512,28513,28515,28516,28517,28519,28520,28521,28522,28523,28524,28527,28528,28529,28531,28533,28534,28535,28537,28539,28541,28542,28543,28544,28545,28546,28547,28549,28550,28551,28554,28555,28559,28560,28561,28562,28563,28564,28565,28566,28567,28568,28569,28570,28571,28573,28574,28575,28576,28578,28579,28580,28581,28582,28584,28585,28586,28587,28588,28589,28590,28591,28592,28593,28594,28596,28597,28599,28600,28602,28603,28604,28605,28606,28607,28609,28611,28612,28613,28614,28615,28616,28618,28619,28620,28621,28622,28623,28624,28627,28628,28629,28630,28631,28632,28633,28634,28635,28636,28637,28639,28642,28643,28644,28645,28646,28647,28648,28649,28650,28651,28652,28653,28656,28657,28658,28659,28660,28661,28662,28663,28664,28665,28666,28667,28668,28669,28670,28671,28672,28673,28674,28675,28676,28677,28678,28679,28680,28681,28682,28683,28684,28685,28686,28687,28688,28690,28691,28692,28693,28694,28695,28696,28697,28700,28701,28702,28703,28704,28705,28706,28708,28709,28710,28711,28712,28713,28714,28715,28716,28717,28718,28719,28720,28721,28722,28723,28724,28726,28727,28728,28730,28731,28732,28733,28734,28735,28736,28737,28738,28739,28740,28741,28742,28743,28744,28745,28746,28747,28749,28750,28752,28753,28754,28755,28756,28757,28758,28759,28760,28761,28762,28763,28764,28765,28767,28768,28769,28770,28771,28772,28773,28774,28775,28776,28777,28778,28782,28785,28786,28787,28788,28791,28793,28794,28795,28797,28801,28802,28803,28804,28806,28807,28808,28811,28812,28813,28815,28816,28817,28819,28823,28824,28826,28827,28830,28831,28832,28833,28834,28835,28836,28837,28838,28839,28840,28841,28842,28848,28850,28852,28853,28854,28858,28862,28863,28868,28869,28870,28871,28873,28875,28876,28877,28878,28879,28880,28881,28882,28883,28884,28885,28886,28887,28890,28892,28893,28894,28896,28897,28898,28899,28901,28906,28910,28912,28913,28914,28915,28916,28917,28918,28920,28922,28923,28924,28926,28927,28928,28929,28930,28931,28932,28933,28934,28935,28936,28939,28940,28941,28942,28943,28945,28946,28948,28951,28955,28956,28957,28958,28959,28960,28961,28962,28963,28964,28965,28967,28968,28969,28970,28971,28972,28973,28974,28978,28979,28980,28981,28983,28984,28985,28986,28987,28988,28989,28990,28991,28992,28993,28994,28995,28996,28998,28999,29000,29001,29003,29005,29007,29008,29009,29010,29011,29012,29013,29014,29015,29016,29017,29018,29019,29021,29023,29024,29025,29026,29027,29029,29033,29034,29035,29036,29037,29039,29040,29041,29044,29045,29046,29047,29049,29051,29052,29054,29055,29056,29057,29058,29059,29061,29062,29063,29064,29065,29067,29068,29069,29070,29072,29073,29074,29075,29077,29078,29079,29082,29083,29084,29085,29086,29089,29090,29091,29092,29093,29094,29095,29097,29098,29099,29101,29102,29103,29104,29105,29106,29108,29110,29111,29112,29114,29115,29116,29117,29118,29119,29120,29121,29122,29124,29125,29126,29127,29128,29129,29130,29131,29132,29133,29135,29136,29137,29138,29139,29142,29143,29144,29145,29146,29147,29148,29149,29150,29151,29153,29154,29155,29156,29158,29160,29161,29162,29163,29164,29165,29167,29168,29169,29170,29171,29172,29173,29174,29175,29176,29178,29179,29180,29181,29182,29183,29184,29185,29186,29187,29188,29189,29191,29192,29193,29194,29195,29196,29197,29198,29199,29200,29201,29202,29203,29204,29205,29206,29207,29208,29209,29210,29211,29212,29214,29215,29216,29217,29218,29219,29220,29221,29222,29223,29225,29227,29229,29230,29231,29234,29235,29236,29242,29244,29246,29248,29249,29250,29251,29252,29253,29254,29257,29258,29259,29262,29263,29264,29265,29267,29268,29269,29271,29272,29274,29276,29278,29280,29283,29284,29285,29288,29290,29291,29292,29293,29296,29297,29299,29300,29302,29303,29304,29307,29308,29309,29314,29315,29317,29318,29319,29320,29321,29324,29326,29328,29329,29331,29332,29333,29334,29335,29336,29337,29338,29339,29340,29341,29342,29344,29345,29346,29347,29348,29349,29350,29351,29352,29353,29354,29355,29358,29361,29362,29363,29365,29370,29371,29372,29373,29374,29375,29376,29381,29382,29383,29385,29386,29387,29388,29391,29393,29395,29396,29397,29398,29400,29402,29403,58566,58567,58568,58569,58570,58571,58572,58573,58574,58575,58576,58577,58578,58579,58580,58581,58582,58583,58584,58585,58586,58587,58588,58589,58590,58591,58592,58593,58594,58595,58596,58597,58598,58599,58600,58601,58602,58603,58604,58605,58606,58607,58608,58609,58610,58611,58612,58613,58614,58615,58616,58617,58618,58619,58620,58621,58622,58623,58624,58625,58626,58627,58628,58629,58630,58631,58632,58633,58634,58635,58636,58637,58638,58639,58640,58641,58642,58643,58644,58645,58646,58647,58648,58649,58650,58651,58652,58653,58654,58655,58656,58657,58658,58659,58660,58661,12288,12289,12290,183,713,711,168,12291,12293,8212,65374,8214,8230,8216,8217,8220,8221,12308,12309,12296,12297,12298,12299,12300,12301,12302,12303,12310,12311,12304,12305,177,215,247,8758,8743,8744,8721,8719,8746,8745,8712,8759,8730,8869,8741,8736,8978,8857,8747,8750,8801,8780,8776,8765,8733,8800,8814,8815,8804,8805,8734,8757,8756,9794,9792,176,8242,8243,8451,65284,164,65504,65505,8240,167,8470,9734,9733,9675,9679,9678,9671,9670,9633,9632,9651,9650,8251,8594,8592,8593,8595,12307,58662,58663,58664,58665,58666,58667,58668,58669,58670,58671,58672,58673,58674,58675,58676,58677,58678,58679,58680,58681,58682,58683,58684,58685,58686,58687,58688,58689,58690,58691,58692,58693,58694,58695,58696,58697,58698,58699,58700,58701,58702,58703,58704,58705,58706,58707,58708,58709,58710,58711,58712,58713,58714,58715,58716,58717,58718,58719,58720,58721,58722,58723,58724,58725,58726,58727,58728,58729,58730,58731,58732,58733,58734,58735,58736,58737,58738,58739,58740,58741,58742,58743,58744,58745,58746,58747,58748,58749,58750,58751,58752,58753,58754,58755,58756,58757,8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,59238,59239,59240,59241,59242,59243,9352,9353,9354,9355,9356,9357,9358,9359,9360,9361,9362,9363,9364,9365,9366,9367,9368,9369,9370,9371,9332,9333,9334,9335,9336,9337,9338,9339,9340,9341,9342,9343,9344,9345,9346,9347,9348,9349,9350,9351,9312,9313,9314,9315,9316,9317,9318,9319,9320,9321,8364,59245,12832,12833,12834,12835,12836,12837,12838,12839,12840,12841,59246,59247,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,8554,8555,59248,59249,58758,58759,58760,58761,58762,58763,58764,58765,58766,58767,58768,58769,58770,58771,58772,58773,58774,58775,58776,58777,58778,58779,58780,58781,58782,58783,58784,58785,58786,58787,58788,58789,58790,58791,58792,58793,58794,58795,58796,58797,58798,58799,58800,58801,58802,58803,58804,58805,58806,58807,58808,58809,58810,58811,58812,58813,58814,58815,58816,58817,58818,58819,58820,58821,58822,58823,58824,58825,58826,58827,58828,58829,58830,58831,58832,58833,58834,58835,58836,58837,58838,58839,58840,58841,58842,58843,58844,58845,58846,58847,58848,58849,58850,58851,58852,12288,65281,65282,65283,65509,65285,65286,65287,65288,65289,65290,65291,65292,65293,65294,65295,65296,65297,65298,65299,65300,65301,65302,65303,65304,65305,65306,65307,65308,65309,65310,65311,65312,65313,65314,65315,65316,65317,65318,65319,65320,65321,65322,65323,65324,65325,65326,65327,65328,65329,65330,65331,65332,65333,65334,65335,65336,65337,65338,65339,65340,65341,65342,65343,65344,65345,65346,65347,65348,65349,65350,65351,65352,65353,65354,65355,65356,65357,65358,65359,65360,65361,65362,65363,65364,65365,65366,65367,65368,65369,65370,65371,65372,65373,65507,58854,58855,58856,58857,58858,58859,58860,58861,58862,58863,58864,58865,58866,58867,58868,58869,58870,58871,58872,58873,58874,58875,58876,58877,58878,58879,58880,58881,58882,58883,58884,58885,58886,58887,58888,58889,58890,58891,58892,58893,58894,58895,58896,58897,58898,58899,58900,58901,58902,58903,58904,58905,58906,58907,58908,58909,58910,58911,58912,58913,58914,58915,58916,58917,58918,58919,58920,58921,58922,58923,58924,58925,58926,58927,58928,58929,58930,58931,58932,58933,58934,58935,58936,58937,58938,58939,58940,58941,58942,58943,58944,58945,58946,58947,58948,58949,12353,12354,12355,12356,12357,12358,12359,12360,12361,12362,12363,12364,12365,12366,12367,12368,12369,12370,12371,12372,12373,12374,12375,12376,12377,12378,12379,12380,12381,12382,12383,12384,12385,12386,12387,12388,12389,12390,12391,12392,12393,12394,12395,12396,12397,12398,12399,12400,12401,12402,12403,12404,12405,12406,12407,12408,12409,12410,12411,12412,12413,12414,12415,12416,12417,12418,12419,12420,12421,12422,12423,12424,12425,12426,12427,12428,12429,12430,12431,12432,12433,12434,12435,59250,59251,59252,59253,59254,59255,59256,59257,59258,59259,59260,58950,58951,58952,58953,58954,58955,58956,58957,58958,58959,58960,58961,58962,58963,58964,58965,58966,58967,58968,58969,58970,58971,58972,58973,58974,58975,58976,58977,58978,58979,58980,58981,58982,58983,58984,58985,58986,58987,58988,58989,58990,58991,58992,58993,58994,58995,58996,58997,58998,58999,59000,59001,59002,59003,59004,59005,59006,59007,59008,59009,59010,59011,59012,59013,59014,59015,59016,59017,59018,59019,59020,59021,59022,59023,59024,59025,59026,59027,59028,59029,59030,59031,59032,59033,59034,59035,59036,59037,59038,59039,59040,59041,59042,59043,59044,59045,12449,12450,12451,12452,12453,12454,12455,12456,12457,12458,12459,12460,12461,12462,12463,12464,12465,12466,12467,12468,12469,12470,12471,12472,12473,12474,12475,12476,12477,12478,12479,12480,12481,12482,12483,12484,12485,12486,12487,12488,12489,12490,12491,12492,12493,12494,12495,12496,12497,12498,12499,12500,12501,12502,12503,12504,12505,12506,12507,12508,12509,12510,12511,12512,12513,12514,12515,12516,12517,12518,12519,12520,12521,12522,12523,12524,12525,12526,12527,12528,12529,12530,12531,12532,12533,12534,59261,59262,59263,59264,59265,59266,59267,59268,59046,59047,59048,59049,59050,59051,59052,59053,59054,59055,59056,59057,59058,59059,59060,59061,59062,59063,59064,59065,59066,59067,59068,59069,59070,59071,59072,59073,59074,59075,59076,59077,59078,59079,59080,59081,59082,59083,59084,59085,59086,59087,59088,59089,59090,59091,59092,59093,59094,59095,59096,59097,59098,59099,59100,59101,59102,59103,59104,59105,59106,59107,59108,59109,59110,59111,59112,59113,59114,59115,59116,59117,59118,59119,59120,59121,59122,59123,59124,59125,59126,59127,59128,59129,59130,59131,59132,59133,59134,59135,59136,59137,59138,59139,59140,59141,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,59269,59270,59271,59272,59273,59274,59275,59276,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,963,964,965,966,967,968,969,59277,59278,59279,59280,59281,59282,59283,65077,65078,65081,65082,65087,65088,65085,65086,65089,65090,65091,65092,59284,59285,65083,65084,65079,65080,65073,59286,65075,65076,59287,59288,59289,59290,59291,59292,59293,59294,59295,59142,59143,59144,59145,59146,59147,59148,59149,59150,59151,59152,59153,59154,59155,59156,59157,59158,59159,59160,59161,59162,59163,59164,59165,59166,59167,59168,59169,59170,59171,59172,59173,59174,59175,59176,59177,59178,59179,59180,59181,59182,59183,59184,59185,59186,59187,59188,59189,59190,59191,59192,59193,59194,59195,59196,59197,59198,59199,59200,59201,59202,59203,59204,59205,59206,59207,59208,59209,59210,59211,59212,59213,59214,59215,59216,59217,59218,59219,59220,59221,59222,59223,59224,59225,59226,59227,59228,59229,59230,59231,59232,59233,59234,59235,59236,59237,1040,1041,1042,1043,1044,1045,1025,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,59296,59297,59298,59299,59300,59301,59302,59303,59304,59305,59306,59307,59308,59309,59310,1072,1073,1074,1075,1076,1077,1105,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,59311,59312,59313,59314,59315,59316,59317,59318,59319,59320,59321,59322,59323,714,715,729,8211,8213,8229,8245,8453,8457,8598,8599,8600,8601,8725,8735,8739,8786,8806,8807,8895,9552,9553,9554,9555,9556,9557,9558,9559,9560,9561,9562,9563,9564,9565,9566,9567,9568,9569,9570,9571,9572,9573,9574,9575,9576,9577,9578,9579,9580,9581,9582,9583,9584,9585,9586,9587,9601,9602,9603,9604,9605,9606,9607,9608,9609,9610,9611,9612,9613,9614,9615,9619,9620,9621,9660,9661,9698,9699,9700,9701,9737,8853,12306,12317,12318,59324,59325,59326,59327,59328,59329,59330,59331,59332,59333,59334,257,225,462,224,275,233,283,232,299,237,464,236,333,243,466,242,363,250,468,249,470,472,474,476,252,234,593,7743,324,328,505,609,59337,59338,59339,59340,12549,12550,12551,12552,12553,12554,12555,12556,12557,12558,12559,12560,12561,12562,12563,12564,12565,12566,12567,12568,12569,12570,12571,12572,12573,12574,12575,12576,12577,12578,12579,12580,12581,12582,12583,12584,12585,59341,59342,59343,59344,59345,59346,59347,59348,59349,59350,59351,59352,59353,59354,59355,59356,59357,59358,59359,59360,59361,12321,12322,12323,12324,12325,12326,12327,12328,12329,12963,13198,13199,13212,13213,13214,13217,13252,13262,13265,13266,13269,65072,65506,65508,59362,8481,12849,59363,8208,59364,59365,59366,12540,12443,12444,12541,12542,12294,12445,12446,65097,65098,65099,65100,65101,65102,65103,65104,65105,65106,65108,65109,65110,65111,65113,65114,65115,65116,65117,65118,65119,65120,65121,65122,65123,65124,65125,65126,65128,65129,65130,65131,12350,12272,12273,12274,12275,12276,12277,12278,12279,12280,12281,12282,12283,12295,59380,59381,59382,59383,59384,59385,59386,59387,59388,59389,59390,59391,59392,9472,9473,9474,9475,9476,9477,9478,9479,9480,9481,9482,9483,9484,9485,9486,9487,9488,9489,9490,9491,9492,9493,9494,9495,9496,9497,9498,9499,9500,9501,9502,9503,9504,9505,9506,9507,9508,9509,9510,9511,9512,9513,9514,9515,9516,9517,9518,9519,9520,9521,9522,9523,9524,9525,9526,9527,9528,9529,9530,9531,9532,9533,9534,9535,9536,9537,9538,9539,9540,9541,9542,9543,9544,9545,9546,9547,59393,59394,59395,59396,59397,59398,59399,59400,59401,59402,59403,59404,59405,59406,59407,29404,29405,29407,29410,29411,29412,29413,29414,29415,29418,29419,29429,29430,29433,29437,29438,29439,29440,29442,29444,29445,29446,29447,29448,29449,29451,29452,29453,29455,29456,29457,29458,29460,29464,29465,29466,29471,29472,29475,29476,29478,29479,29480,29485,29487,29488,29490,29491,29493,29494,29498,29499,29500,29501,29504,29505,29506,29507,29508,29509,29510,29511,29512,29513,29514,29515,29516,29518,29519,29521,29523,29524,29525,29526,29528,29529,29530,29531,29532,29533,29534,29535,29537,29538,29539,29540,29541,29542,29543,29544,29545,29546,29547,29550,29552,29553,57344,57345,57346,57347,57348,57349,57350,57351,57352,57353,57354,57355,57356,57357,57358,57359,57360,57361,57362,57363,57364,57365,57366,57367,57368,57369,57370,57371,57372,57373,57374,57375,57376,57377,57378,57379,57380,57381,57382,57383,57384,57385,57386,57387,57388,57389,57390,57391,57392,57393,57394,57395,57396,57397,57398,57399,57400,57401,57402,57403,57404,57405,57406,57407,57408,57409,57410,57411,57412,57413,57414,57415,57416,57417,57418,57419,57420,57421,57422,57423,57424,57425,57426,57427,57428,57429,57430,57431,57432,57433,57434,57435,57436,57437,29554,29555,29556,29557,29558,29559,29560,29561,29562,29563,29564,29565,29567,29568,29569,29570,29571,29573,29574,29576,29578,29580,29581,29583,29584,29586,29587,29588,29589,29591,29592,29593,29594,29596,29597,29598,29600,29601,29603,29604,29605,29606,29607,29608,29610,29612,29613,29617,29620,29621,29622,29624,29625,29628,29629,29630,29631,29633,29635,29636,29637,29638,29639,29643,29644,29646,29650,29651,29652,29653,29654,29655,29656,29658,29659,29660,29661,29663,29665,29666,29667,29668,29670,29672,29674,29675,29676,29678,29679,29680,29681,29683,29684,29685,29686,29687,57438,57439,57440,57441,57442,57443,57444,57445,57446,57447,57448,57449,57450,57451,57452,57453,57454,57455,57456,57457,57458,57459,57460,57461,57462,57463,57464,57465,57466,57467,57468,57469,57470,57471,57472,57473,57474,57475,57476,57477,57478,57479,57480,57481,57482,57483,57484,57485,57486,57487,57488,57489,57490,57491,57492,57493,57494,57495,57496,57497,57498,57499,57500,57501,57502,57503,57504,57505,57506,57507,57508,57509,57510,57511,57512,57513,57514,57515,57516,57517,57518,57519,57520,57521,57522,57523,57524,57525,57526,57527,57528,57529,57530,57531,29688,29689,29690,29691,29692,29693,29694,29695,29696,29697,29698,29700,29703,29704,29707,29708,29709,29710,29713,29714,29715,29716,29717,29718,29719,29720,29721,29724,29725,29726,29727,29728,29729,29731,29732,29735,29737,29739,29741,29743,29745,29746,29751,29752,29753,29754,29755,29757,29758,29759,29760,29762,29763,29764,29765,29766,29767,29768,29769,29770,29771,29772,29773,29774,29775,29776,29777,29778,29779,29780,29782,29784,29789,29792,29793,29794,29795,29796,29797,29798,29799,29800,29801,29802,29803,29804,29806,29807,29809,29810,29811,29812,29813,29816,29817,29818,57532,57533,57534,57535,57536,57537,57538,57539,57540,57541,57542,57543,57544,57545,57546,57547,57548,57549,57550,57551,57552,57553,57554,57555,57556,57557,57558,57559,57560,57561,57562,57563,57564,57565,57566,57567,57568,57569,57570,57571,57572,57573,57574,57575,57576,57577,57578,57579,57580,57581,57582,57583,57584,57585,57586,57587,57588,57589,57590,57591,57592,57593,57594,57595,57596,57597,57598,57599,57600,57601,57602,57603,57604,57605,57606,57607,57608,57609,57610,57611,57612,57613,57614,57615,57616,57617,57618,57619,57620,57621,57622,57623,57624,57625,29819,29820,29821,29823,29826,29828,29829,29830,29832,29833,29834,29836,29837,29839,29841,29842,29843,29844,29845,29846,29847,29848,29849,29850,29851,29853,29855,29856,29857,29858,29859,29860,29861,29862,29866,29867,29868,29869,29870,29871,29872,29873,29874,29875,29876,29877,29878,29879,29880,29881,29883,29884,29885,29886,29887,29888,29889,29890,29891,29892,29893,29894,29895,29896,29897,29898,29899,29900,29901,29902,29903,29904,29905,29907,29908,29909,29910,29911,29912,29913,29914,29915,29917,29919,29921,29925,29927,29928,29929,29930,29931,29932,29933,29936,29937,29938,57626,57627,57628,57629,57630,57631,57632,57633,57634,57635,57636,57637,57638,57639,57640,57641,57642,57643,57644,57645,57646,57647,57648,57649,57650,57651,57652,57653,57654,57655,57656,57657,57658,57659,57660,57661,57662,57663,57664,57665,57666,57667,57668,57669,57670,57671,57672,57673,57674,57675,57676,57677,57678,57679,57680,57681,57682,57683,57684,57685,57686,57687,57688,57689,57690,57691,57692,57693,57694,57695,57696,57697,57698,57699,57700,57701,57702,57703,57704,57705,57706,57707,57708,57709,57710,57711,57712,57713,57714,57715,57716,57717,57718,57719,29939,29941,29944,29945,29946,29947,29948,29949,29950,29952,29953,29954,29955,29957,29958,29959,29960,29961,29962,29963,29964,29966,29968,29970,29972,29973,29974,29975,29979,29981,29982,29984,29985,29986,29987,29988,29990,29991,29994,29998,30004,30006,30009,30012,30013,30015,30017,30018,30019,30020,30022,30023,30025,30026,30029,30032,30033,30034,30035,30037,30038,30039,30040,30045,30046,30047,30048,30049,30050,30051,30052,30055,30056,30057,30059,30060,30061,30062,30063,30064,30065,30067,30069,30070,30071,30074,30075,30076,30077,30078,30080,30081,30082,30084,30085,30087,57720,57721,57722,57723,57724,57725,57726,57727,57728,57729,57730,57731,57732,57733,57734,57735,57736,57737,57738,57739,57740,57741,57742,57743,57744,57745,57746,57747,57748,57749,57750,57751,57752,57753,57754,57755,57756,57757,57758,57759,57760,57761,57762,57763,57764,57765,57766,57767,57768,57769,57770,57771,57772,57773,57774,57775,57776,57777,57778,57779,57780,57781,57782,57783,57784,57785,57786,57787,57788,57789,57790,57791,57792,57793,57794,57795,57796,57797,57798,57799,57800,57801,57802,57803,57804,57805,57806,57807,57808,57809,57810,57811,57812,57813,30088,30089,30090,30092,30093,30094,30096,30099,30101,30104,30107,30108,30110,30114,30118,30119,30120,30121,30122,30125,30134,30135,30138,30139,30143,30144,30145,30150,30155,30156,30158,30159,30160,30161,30163,30167,30169,30170,30172,30173,30175,30176,30177,30181,30185,30188,30189,30190,30191,30194,30195,30197,30198,30199,30200,30202,30203,30205,30206,30210,30212,30214,30215,30216,30217,30219,30221,30222,30223,30225,30226,30227,30228,30230,30234,30236,30237,30238,30241,30243,30247,30248,30252,30254,30255,30257,30258,30262,30263,30265,30266,30267,30269,30273,30274,30276,57814,57815,57816,57817,57818,57819,57820,57821,57822,57823,57824,57825,57826,57827,57828,57829,57830,57831,57832,57833,57834,57835,57836,57837,57838,57839,57840,57841,57842,57843,57844,57845,57846,57847,57848,57849,57850,57851,57852,57853,57854,57855,57856,57857,57858,57859,57860,57861,57862,57863,57864,57865,57866,57867,57868,57869,57870,57871,57872,57873,57874,57875,57876,57877,57878,57879,57880,57881,57882,57883,57884,57885,57886,57887,57888,57889,57890,57891,57892,57893,57894,57895,57896,57897,57898,57899,57900,57901,57902,57903,57904,57905,57906,57907,30277,30278,30279,30280,30281,30282,30283,30286,30287,30288,30289,30290,30291,30293,30295,30296,30297,30298,30299,30301,30303,30304,30305,30306,30308,30309,30310,30311,30312,30313,30314,30316,30317,30318,30320,30321,30322,30323,30324,30325,30326,30327,30329,30330,30332,30335,30336,30337,30339,30341,30345,30346,30348,30349,30351,30352,30354,30356,30357,30359,30360,30362,30363,30364,30365,30366,30367,30368,30369,30370,30371,30373,30374,30375,30376,30377,30378,30379,30380,30381,30383,30384,30387,30389,30390,30391,30392,30393,30394,30395,30396,30397,30398,30400,30401,30403,21834,38463,22467,25384,21710,21769,21696,30353,30284,34108,30702,33406,30861,29233,38552,38797,27688,23433,20474,25353,26263,23736,33018,26696,32942,26114,30414,20985,25942,29100,32753,34948,20658,22885,25034,28595,33453,25420,25170,21485,21543,31494,20843,30116,24052,25300,36299,38774,25226,32793,22365,38712,32610,29240,30333,26575,30334,25670,20336,36133,25308,31255,26001,29677,25644,25203,33324,39041,26495,29256,25198,25292,20276,29923,21322,21150,32458,37030,24110,26758,27036,33152,32465,26834,30917,34444,38225,20621,35876,33502,32990,21253,35090,21093,30404,30407,30409,30411,30412,30419,30421,30425,30426,30428,30429,30430,30432,30433,30434,30435,30436,30438,30439,30440,30441,30442,30443,30444,30445,30448,30451,30453,30454,30455,30458,30459,30461,30463,30464,30466,30467,30469,30470,30474,30476,30478,30479,30480,30481,30482,30483,30484,30485,30486,30487,30488,30491,30492,30493,30494,30497,30499,30500,30501,30503,30506,30507,30508,30510,30512,30513,30514,30515,30516,30521,30523,30525,30526,30527,30530,30532,30533,30534,30536,30537,30538,30539,30540,30541,30542,30543,30546,30547,30548,30549,30550,30551,30552,30553,30556,34180,38649,20445,22561,39281,23453,25265,25253,26292,35961,40077,29190,26479,30865,24754,21329,21271,36744,32972,36125,38049,20493,29384,22791,24811,28953,34987,22868,33519,26412,31528,23849,32503,29997,27893,36454,36856,36924,40763,27604,37145,31508,24444,30887,34006,34109,27605,27609,27606,24065,24199,30201,38381,25949,24330,24517,36767,22721,33218,36991,38491,38829,36793,32534,36140,25153,20415,21464,21342,36776,36777,36779,36941,26631,24426,33176,34920,40150,24971,21035,30250,24428,25996,28626,28392,23486,25672,20853,20912,26564,19993,31177,39292,28851,30557,30558,30559,30560,30564,30567,30569,30570,30573,30574,30575,30576,30577,30578,30579,30580,30581,30582,30583,30584,30586,30587,30588,30593,30594,30595,30598,30599,30600,30601,30602,30603,30607,30608,30611,30612,30613,30614,30615,30616,30617,30618,30619,30620,30621,30622,30625,30627,30628,30630,30632,30635,30637,30638,30639,30641,30642,30644,30646,30647,30648,30649,30650,30652,30654,30656,30657,30658,30659,30660,30661,30662,30663,30664,30665,30666,30667,30668,30670,30671,30672,30673,30674,30675,30676,30677,30678,30680,30681,30682,30685,30686,30687,30688,30689,30692,30149,24182,29627,33760,25773,25320,38069,27874,21338,21187,25615,38082,31636,20271,24091,33334,33046,33162,28196,27850,39539,25429,21340,21754,34917,22496,19981,24067,27493,31807,37096,24598,25830,29468,35009,26448,25165,36130,30572,36393,37319,24425,33756,34081,39184,21442,34453,27531,24813,24808,28799,33485,33329,20179,27815,34255,25805,31961,27133,26361,33609,21397,31574,20391,20876,27979,23618,36461,25554,21449,33580,33590,26597,30900,25661,23519,23700,24046,35815,25286,26612,35962,25600,25530,34633,39307,35863,32544,38130,20135,38416,39076,26124,29462,30694,30696,30698,30703,30704,30705,30706,30708,30709,30711,30713,30714,30715,30716,30723,30724,30725,30726,30727,30728,30730,30731,30734,30735,30736,30739,30741,30745,30747,30750,30752,30753,30754,30756,30760,30762,30763,30766,30767,30769,30770,30771,30773,30774,30781,30783,30785,30786,30787,30788,30790,30792,30793,30794,30795,30797,30799,30801,30803,30804,30808,30809,30810,30811,30812,30814,30815,30816,30817,30818,30819,30820,30821,30822,30823,30824,30825,30831,30832,30833,30834,30835,30836,30837,30838,30840,30841,30842,30843,30845,30846,30847,30848,30849,30850,30851,22330,23581,24120,38271,20607,32928,21378,25950,30021,21809,20513,36229,25220,38046,26397,22066,28526,24034,21557,28818,36710,25199,25764,25507,24443,28552,37108,33251,36784,23576,26216,24561,27785,38472,36225,34924,25745,31216,22478,27225,25104,21576,20056,31243,24809,28548,35802,25215,36894,39563,31204,21507,30196,25345,21273,27744,36831,24347,39536,32827,40831,20360,23610,36196,32709,26021,28861,20805,20914,34411,23815,23456,25277,37228,30068,36364,31264,24833,31609,20167,32504,30597,19985,33261,21021,20986,27249,21416,36487,38148,38607,28353,38500,26970,30852,30853,30854,30856,30858,30859,30863,30864,30866,30868,30869,30870,30873,30877,30878,30880,30882,30884,30886,30888,30889,30890,30891,30892,30893,30894,30895,30901,30902,30903,30904,30906,30907,30908,30909,30911,30912,30914,30915,30916,30918,30919,30920,30924,30925,30926,30927,30929,30930,30931,30934,30935,30936,30938,30939,30940,30941,30942,30943,30944,30945,30946,30947,30948,30949,30950,30951,30953,30954,30955,30957,30958,30959,30960,30961,30963,30965,30966,30968,30969,30971,30972,30973,30974,30975,30976,30978,30979,30980,30982,30983,30984,30985,30986,30987,30988,30784,20648,30679,25616,35302,22788,25571,24029,31359,26941,20256,33337,21912,20018,30126,31383,24162,24202,38383,21019,21561,28810,25462,38180,22402,26149,26943,37255,21767,28147,32431,34850,25139,32496,30133,33576,30913,38604,36766,24904,29943,35789,27492,21050,36176,27425,32874,33905,22257,21254,20174,19995,20945,31895,37259,31751,20419,36479,31713,31388,25703,23828,20652,33030,30209,31929,28140,32736,26449,23384,23544,30923,25774,25619,25514,25387,38169,25645,36798,31572,30249,25171,22823,21574,27513,20643,25140,24102,27526,20195,36151,34955,24453,36910,30989,30990,30991,30992,30993,30994,30996,30997,30998,30999,31000,31001,31002,31003,31004,31005,31007,31008,31009,31010,31011,31013,31014,31015,31016,31017,31018,31019,31020,31021,31022,31023,31024,31025,31026,31027,31029,31030,31031,31032,31033,31037,31039,31042,31043,31044,31045,31047,31050,31051,31052,31053,31054,31055,31056,31057,31058,31060,31061,31064,31065,31073,31075,31076,31078,31081,31082,31083,31084,31086,31088,31089,31090,31091,31092,31093,31094,31097,31099,31100,31101,31102,31103,31106,31107,31110,31111,31112,31113,31115,31116,31117,31118,31120,31121,31122,24608,32829,25285,20025,21333,37112,25528,32966,26086,27694,20294,24814,28129,35806,24377,34507,24403,25377,20826,33633,26723,20992,25443,36424,20498,23707,31095,23548,21040,31291,24764,36947,30423,24503,24471,30340,36460,28783,30331,31561,30634,20979,37011,22564,20302,28404,36842,25932,31515,29380,28068,32735,23265,25269,24213,22320,33922,31532,24093,24351,36882,32532,39072,25474,28359,30872,28857,20856,38747,22443,30005,20291,30008,24215,24806,22880,28096,27583,30857,21500,38613,20939,20993,25481,21514,38035,35843,36300,29241,30879,34678,36845,35853,21472,31123,31124,31125,31126,31127,31128,31129,31131,31132,31133,31134,31135,31136,31137,31138,31139,31140,31141,31142,31144,31145,31146,31147,31148,31149,31150,31151,31152,31153,31154,31156,31157,31158,31159,31160,31164,31167,31170,31172,31173,31175,31176,31178,31180,31182,31183,31184,31187,31188,31190,31191,31193,31194,31195,31196,31197,31198,31200,31201,31202,31205,31208,31210,31212,31214,31217,31218,31219,31220,31221,31222,31223,31225,31226,31228,31230,31231,31233,31236,31237,31239,31240,31241,31242,31244,31247,31248,31249,31250,31251,31253,31254,31256,31257,31259,31260,19969,30447,21486,38025,39030,40718,38189,23450,35746,20002,19996,20908,33891,25026,21160,26635,20375,24683,20923,27934,20828,25238,26007,38497,35910,36887,30168,37117,30563,27602,29322,29420,35835,22581,30585,36172,26460,38208,32922,24230,28193,22930,31471,30701,38203,27573,26029,32526,22534,20817,38431,23545,22697,21544,36466,25958,39039,22244,38045,30462,36929,25479,21702,22810,22842,22427,36530,26421,36346,33333,21057,24816,22549,34558,23784,40517,20420,39069,35769,23077,24694,21380,25212,36943,37122,39295,24681,32780,20799,32819,23572,39285,27953,20108,31261,31263,31265,31266,31268,31269,31270,31271,31272,31273,31274,31275,31276,31277,31278,31279,31280,31281,31282,31284,31285,31286,31288,31290,31294,31296,31297,31298,31299,31300,31301,31303,31304,31305,31306,31307,31308,31309,31310,31311,31312,31314,31315,31316,31317,31318,31320,31321,31322,31323,31324,31325,31326,31327,31328,31329,31330,31331,31332,31333,31334,31335,31336,31337,31338,31339,31340,31341,31342,31343,31345,31346,31347,31349,31355,31356,31357,31358,31362,31365,31367,31369,31370,31371,31372,31374,31375,31376,31379,31380,31385,31386,31387,31390,31393,31394,36144,21457,32602,31567,20240,20047,38400,27861,29648,34281,24070,30058,32763,27146,30718,38034,32321,20961,28902,21453,36820,33539,36137,29359,39277,27867,22346,33459,26041,32938,25151,38450,22952,20223,35775,32442,25918,33778,38750,21857,39134,32933,21290,35837,21536,32954,24223,27832,36153,33452,37210,21545,27675,20998,32439,22367,28954,27774,31881,22859,20221,24575,24868,31914,20016,23553,26539,34562,23792,38155,39118,30127,28925,36898,20911,32541,35773,22857,20964,20315,21542,22827,25975,32932,23413,25206,25282,36752,24133,27679,31526,20239,20440,26381,31395,31396,31399,31401,31402,31403,31406,31407,31408,31409,31410,31412,31413,31414,31415,31416,31417,31418,31419,31420,31421,31422,31424,31425,31426,31427,31428,31429,31430,31431,31432,31433,31434,31436,31437,31438,31439,31440,31441,31442,31443,31444,31445,31447,31448,31450,31451,31452,31453,31457,31458,31460,31463,31464,31465,31466,31467,31468,31470,31472,31473,31474,31475,31476,31477,31478,31479,31480,31483,31484,31486,31488,31489,31490,31493,31495,31497,31500,31501,31502,31504,31506,31507,31510,31511,31512,31514,31516,31517,31519,31521,31522,31523,31527,31529,31533,28014,28074,31119,34993,24343,29995,25242,36741,20463,37340,26023,33071,33105,24220,33104,36212,21103,35206,36171,22797,20613,20184,38428,29238,33145,36127,23500,35747,38468,22919,32538,21648,22134,22030,35813,25913,27010,38041,30422,28297,24178,29976,26438,26577,31487,32925,36214,24863,31174,25954,36195,20872,21018,38050,32568,32923,32434,23703,28207,26464,31705,30347,39640,33167,32660,31957,25630,38224,31295,21578,21733,27468,25601,25096,40509,33011,30105,21106,38761,33883,26684,34532,38401,38548,38124,20010,21508,32473,26681,36319,32789,26356,24218,32697,31535,31536,31538,31540,31541,31542,31543,31545,31547,31549,31551,31552,31553,31554,31555,31556,31558,31560,31562,31565,31566,31571,31573,31575,31577,31580,31582,31583,31585,31587,31588,31589,31590,31591,31592,31593,31594,31595,31596,31597,31599,31600,31603,31604,31606,31608,31610,31612,31613,31615,31617,31618,31619,31620,31622,31623,31624,31625,31626,31627,31628,31630,31631,31633,31634,31635,31638,31640,31641,31642,31643,31646,31647,31648,31651,31652,31653,31662,31663,31664,31666,31667,31669,31670,31671,31673,31674,31675,31676,31677,31678,31679,31680,31682,31683,31684,22466,32831,26775,24037,25915,21151,24685,40858,20379,36524,20844,23467,24339,24041,27742,25329,36129,20849,38057,21246,27807,33503,29399,22434,26500,36141,22815,36764,33735,21653,31629,20272,27837,23396,22993,40723,21476,34506,39592,35895,32929,25925,39038,22266,38599,21038,29916,21072,23521,25346,35074,20054,25296,24618,26874,20851,23448,20896,35266,31649,39302,32592,24815,28748,36143,20809,24191,36891,29808,35268,22317,30789,24402,40863,38394,36712,39740,35809,30328,26690,26588,36330,36149,21053,36746,28378,26829,38149,37101,22269,26524,35065,36807,21704,31685,31688,31689,31690,31691,31693,31694,31695,31696,31698,31700,31701,31702,31703,31704,31707,31708,31710,31711,31712,31714,31715,31716,31719,31720,31721,31723,31724,31725,31727,31728,31730,31731,31732,31733,31734,31736,31737,31738,31739,31741,31743,31744,31745,31746,31747,31748,31749,31750,31752,31753,31754,31757,31758,31760,31761,31762,31763,31764,31765,31767,31768,31769,31770,31771,31772,31773,31774,31776,31777,31778,31779,31780,31781,31784,31785,31787,31788,31789,31790,31791,31792,31793,31794,31795,31796,31797,31798,31799,31801,31802,31803,31804,31805,31806,31810,39608,23401,28023,27686,20133,23475,39559,37219,25000,37039,38889,21547,28085,23506,20989,21898,32597,32752,25788,25421,26097,25022,24717,28938,27735,27721,22831,26477,33322,22741,22158,35946,27627,37085,22909,32791,21495,28009,21621,21917,33655,33743,26680,31166,21644,20309,21512,30418,35977,38402,27827,28088,36203,35088,40548,36154,22079,40657,30165,24456,29408,24680,21756,20136,27178,34913,24658,36720,21700,28888,34425,40511,27946,23439,24344,32418,21897,20399,29492,21564,21402,20505,21518,21628,20046,24573,29786,22774,33899,32993,34676,29392,31946,28246,31811,31812,31813,31814,31815,31816,31817,31818,31819,31820,31822,31823,31824,31825,31826,31827,31828,31829,31830,31831,31832,31833,31834,31835,31836,31837,31838,31839,31840,31841,31842,31843,31844,31845,31846,31847,31848,31849,31850,31851,31852,31853,31854,31855,31856,31857,31858,31861,31862,31863,31864,31865,31866,31870,31871,31872,31873,31874,31875,31876,31877,31878,31879,31880,31882,31883,31884,31885,31886,31887,31888,31891,31892,31894,31897,31898,31899,31904,31905,31907,31910,31911,31912,31913,31915,31916,31917,31919,31920,31924,31925,31926,31927,31928,31930,31931,24359,34382,21804,25252,20114,27818,25143,33457,21719,21326,29502,28369,30011,21010,21270,35805,27088,24458,24576,28142,22351,27426,29615,26707,36824,32531,25442,24739,21796,30186,35938,28949,28067,23462,24187,33618,24908,40644,30970,34647,31783,30343,20976,24822,29004,26179,24140,24653,35854,28784,25381,36745,24509,24674,34516,22238,27585,24724,24935,21321,24800,26214,36159,31229,20250,28905,27719,35763,35826,32472,33636,26127,23130,39746,27985,28151,35905,27963,20249,28779,33719,25110,24785,38669,36135,31096,20987,22334,22522,26426,30072,31293,31215,31637,31935,31936,31938,31939,31940,31942,31945,31947,31950,31951,31952,31953,31954,31955,31956,31960,31962,31963,31965,31966,31969,31970,31971,31972,31973,31974,31975,31977,31978,31979,31980,31981,31982,31984,31985,31986,31987,31988,31989,31990,31991,31993,31994,31996,31997,31998,31999,32000,32001,32002,32003,32004,32005,32006,32007,32008,32009,32011,32012,32013,32014,32015,32016,32017,32018,32019,32020,32021,32022,32023,32024,32025,32026,32027,32028,32029,32030,32031,32033,32035,32036,32037,32038,32040,32041,32042,32044,32045,32046,32048,32049,32050,32051,32052,32053,32054,32908,39269,36857,28608,35749,40481,23020,32489,32521,21513,26497,26840,36753,31821,38598,21450,24613,30142,27762,21363,23241,32423,25380,20960,33034,24049,34015,25216,20864,23395,20238,31085,21058,24760,27982,23492,23490,35745,35760,26082,24524,38469,22931,32487,32426,22025,26551,22841,20339,23478,21152,33626,39050,36158,30002,38078,20551,31292,20215,26550,39550,23233,27516,30417,22362,23574,31546,38388,29006,20860,32937,33392,22904,32516,33575,26816,26604,30897,30839,25315,25441,31616,20461,21098,20943,33616,27099,37492,36341,36145,35265,38190,31661,20214,32055,32056,32057,32058,32059,32060,32061,32062,32063,32064,32065,32066,32067,32068,32069,32070,32071,32072,32073,32074,32075,32076,32077,32078,32079,32080,32081,32082,32083,32084,32085,32086,32087,32088,32089,32090,32091,32092,32093,32094,32095,32096,32097,32098,32099,32100,32101,32102,32103,32104,32105,32106,32107,32108,32109,32111,32112,32113,32114,32115,32116,32117,32118,32120,32121,32122,32123,32124,32125,32126,32127,32128,32129,32130,32131,32132,32133,32134,32135,32136,32137,32138,32139,32140,32141,32142,32143,32144,32145,32146,32147,32148,32149,32150,32151,32152,20581,33328,21073,39279,28176,28293,28071,24314,20725,23004,23558,27974,27743,30086,33931,26728,22870,35762,21280,37233,38477,34121,26898,30977,28966,33014,20132,37066,27975,39556,23047,22204,25605,38128,30699,20389,33050,29409,35282,39290,32564,32478,21119,25945,37237,36735,36739,21483,31382,25581,25509,30342,31224,34903,38454,25130,21163,33410,26708,26480,25463,30571,31469,27905,32467,35299,22992,25106,34249,33445,30028,20511,20171,30117,35819,23626,24062,31563,26020,37329,20170,27941,35167,32039,38182,20165,35880,36827,38771,26187,31105,36817,28908,28024,32153,32154,32155,32156,32157,32158,32159,32160,32161,32162,32163,32164,32165,32167,32168,32169,32170,32171,32172,32173,32175,32176,32177,32178,32179,32180,32181,32182,32183,32184,32185,32186,32187,32188,32189,32190,32191,32192,32193,32194,32195,32196,32197,32198,32199,32200,32201,32202,32203,32204,32205,32206,32207,32208,32209,32210,32211,32212,32213,32214,32215,32216,32217,32218,32219,32220,32221,32222,32223,32224,32225,32226,32227,32228,32229,32230,32231,32232,32233,32234,32235,32236,32237,32238,32239,32240,32241,32242,32243,32244,32245,32246,32247,32248,32249,32250,23613,21170,33606,20834,33550,30555,26230,40120,20140,24778,31934,31923,32463,20117,35686,26223,39048,38745,22659,25964,38236,24452,30153,38742,31455,31454,20928,28847,31384,25578,31350,32416,29590,38893,20037,28792,20061,37202,21417,25937,26087,33276,33285,21646,23601,30106,38816,25304,29401,30141,23621,39545,33738,23616,21632,30697,20030,27822,32858,25298,25454,24040,20855,36317,36382,38191,20465,21477,24807,28844,21095,25424,40515,23071,20518,30519,21367,32482,25733,25899,25225,25496,20500,29237,35273,20915,35776,32477,22343,33740,38055,20891,21531,23803,32251,32252,32253,32254,32255,32256,32257,32258,32259,32260,32261,32262,32263,32264,32265,32266,32267,32268,32269,32270,32271,32272,32273,32274,32275,32276,32277,32278,32279,32280,32281,32282,32283,32284,32285,32286,32287,32288,32289,32290,32291,32292,32293,32294,32295,32296,32297,32298,32299,32300,32301,32302,32303,32304,32305,32306,32307,32308,32309,32310,32311,32312,32313,32314,32316,32317,32318,32319,32320,32322,32323,32324,32325,32326,32328,32329,32330,32331,32332,32333,32334,32335,32336,32337,32338,32339,32340,32341,32342,32343,32344,32345,32346,32347,32348,32349,20426,31459,27994,37089,39567,21888,21654,21345,21679,24320,25577,26999,20975,24936,21002,22570,21208,22350,30733,30475,24247,24951,31968,25179,25239,20130,28821,32771,25335,28900,38752,22391,33499,26607,26869,30933,39063,31185,22771,21683,21487,28212,20811,21051,23458,35838,32943,21827,22438,24691,22353,21549,31354,24656,23380,25511,25248,21475,25187,23495,26543,21741,31391,33510,37239,24211,35044,22840,22446,25358,36328,33007,22359,31607,20393,24555,23485,27454,21281,31568,29378,26694,30719,30518,26103,20917,20111,30420,23743,31397,33909,22862,39745,20608,32350,32351,32352,32353,32354,32355,32356,32357,32358,32359,32360,32361,32362,32363,32364,32365,32366,32367,32368,32369,32370,32371,32372,32373,32374,32375,32376,32377,32378,32379,32380,32381,32382,32383,32384,32385,32387,32388,32389,32390,32391,32392,32393,32394,32395,32396,32397,32398,32399,32400,32401,32402,32403,32404,32405,32406,32407,32408,32409,32410,32412,32413,32414,32430,32436,32443,32444,32470,32484,32492,32505,32522,32528,32542,32567,32569,32571,32572,32573,32574,32575,32576,32577,32579,32582,32583,32584,32585,32586,32587,32588,32589,32590,32591,32594,32595,39304,24871,28291,22372,26118,25414,22256,25324,25193,24275,38420,22403,25289,21895,34593,33098,36771,21862,33713,26469,36182,34013,23146,26639,25318,31726,38417,20848,28572,35888,25597,35272,25042,32518,28866,28389,29701,27028,29436,24266,37070,26391,28010,25438,21171,29282,32769,20332,23013,37226,28889,28061,21202,20048,38647,38253,34174,30922,32047,20769,22418,25794,32907,31867,27882,26865,26974,20919,21400,26792,29313,40654,31729,29432,31163,28435,29702,26446,37324,40100,31036,33673,33620,21519,26647,20029,21385,21169,30782,21382,21033,20616,20363,20432,32598,32601,32603,32604,32605,32606,32608,32611,32612,32613,32614,32615,32619,32620,32621,32623,32624,32627,32629,32630,32631,32632,32634,32635,32636,32637,32639,32640,32642,32643,32644,32645,32646,32647,32648,32649,32651,32653,32655,32656,32657,32658,32659,32661,32662,32663,32664,32665,32667,32668,32672,32674,32675,32677,32678,32680,32681,32682,32683,32684,32685,32686,32689,32691,32692,32693,32694,32695,32698,32699,32702,32704,32706,32707,32708,32710,32711,32712,32713,32715,32717,32719,32720,32721,32722,32723,32726,32727,32729,32730,32731,32732,32733,32734,32738,32739,30178,31435,31890,27813,38582,21147,29827,21737,20457,32852,33714,36830,38256,24265,24604,28063,24088,25947,33080,38142,24651,28860,32451,31918,20937,26753,31921,33391,20004,36742,37327,26238,20142,35845,25769,32842,20698,30103,29134,23525,36797,28518,20102,25730,38243,24278,26009,21015,35010,28872,21155,29454,29747,26519,30967,38678,20020,37051,40158,28107,20955,36161,21533,25294,29618,33777,38646,40836,38083,20278,32666,20940,28789,38517,23725,39046,21478,20196,28316,29705,27060,30827,39311,30041,21016,30244,27969,26611,20845,40857,32843,21657,31548,31423,32740,32743,32744,32746,32747,32748,32749,32751,32754,32756,32757,32758,32759,32760,32761,32762,32765,32766,32767,32770,32775,32776,32777,32778,32782,32783,32785,32787,32794,32795,32797,32798,32799,32801,32803,32804,32811,32812,32813,32814,32815,32816,32818,32820,32825,32826,32828,32830,32832,32833,32836,32837,32839,32840,32841,32846,32847,32848,32849,32851,32853,32854,32855,32857,32859,32860,32861,32862,32863,32864,32865,32866,32867,32868,32869,32870,32871,32872,32875,32876,32877,32878,32879,32880,32882,32883,32884,32885,32886,32887,32888,32889,32890,32891,32892,32893,38534,22404,25314,38471,27004,23044,25602,31699,28431,38475,33446,21346,39045,24208,28809,25523,21348,34383,40065,40595,30860,38706,36335,36162,40575,28510,31108,24405,38470,25134,39540,21525,38109,20387,26053,23653,23649,32533,34385,27695,24459,29575,28388,32511,23782,25371,23402,28390,21365,20081,25504,30053,25249,36718,20262,20177,27814,32438,35770,33821,34746,32599,36923,38179,31657,39585,35064,33853,27931,39558,32476,22920,40635,29595,30721,34434,39532,39554,22043,21527,22475,20080,40614,21334,36808,33033,30610,39314,34542,28385,34067,26364,24930,28459,32894,32897,32898,32901,32904,32906,32909,32910,32911,32912,32913,32914,32916,32917,32919,32921,32926,32931,32934,32935,32936,32940,32944,32947,32949,32950,32952,32953,32955,32965,32967,32968,32969,32970,32971,32975,32976,32977,32978,32979,32980,32981,32984,32991,32992,32994,32995,32998,33006,33013,33015,33017,33019,33022,33023,33024,33025,33027,33028,33029,33031,33032,33035,33036,33045,33047,33049,33051,33052,33053,33055,33056,33057,33058,33059,33060,33061,33062,33063,33064,33065,33066,33067,33069,33070,33072,33075,33076,33077,33079,33081,33082,33083,33084,33085,33087,35881,33426,33579,30450,27667,24537,33725,29483,33541,38170,27611,30683,38086,21359,33538,20882,24125,35980,36152,20040,29611,26522,26757,37238,38665,29028,27809,30473,23186,38209,27599,32654,26151,23504,22969,23194,38376,38391,20204,33804,33945,27308,30431,38192,29467,26790,23391,30511,37274,38753,31964,36855,35868,24357,31859,31192,35269,27852,34588,23494,24130,26825,30496,32501,20885,20813,21193,23081,32517,38754,33495,25551,30596,34256,31186,28218,24217,22937,34065,28781,27665,25279,30399,25935,24751,38397,26126,34719,40483,38125,21517,21629,35884,25720,33088,33089,33090,33091,33092,33093,33095,33097,33101,33102,33103,33106,33110,33111,33112,33115,33116,33117,33118,33119,33121,33122,33123,33124,33126,33128,33130,33131,33132,33135,33138,33139,33141,33142,33143,33144,33153,33155,33156,33157,33158,33159,33161,33163,33164,33165,33166,33168,33170,33171,33172,33173,33174,33175,33177,33178,33182,33183,33184,33185,33186,33188,33189,33191,33193,33195,33196,33197,33198,33199,33200,33201,33202,33204,33205,33206,33207,33208,33209,33212,33213,33214,33215,33220,33221,33223,33224,33225,33227,33229,33230,33231,33232,33233,33234,33235,25721,34321,27169,33180,30952,25705,39764,25273,26411,33707,22696,40664,27819,28448,23518,38476,35851,29279,26576,25287,29281,20137,22982,27597,22675,26286,24149,21215,24917,26408,30446,30566,29287,31302,25343,21738,21584,38048,37027,23068,32435,27670,20035,22902,32784,22856,21335,30007,38590,22218,25376,33041,24700,38393,28118,21602,39297,20869,23273,33021,22958,38675,20522,27877,23612,25311,20320,21311,33147,36870,28346,34091,25288,24180,30910,25781,25467,24565,23064,37247,40479,23615,25423,32834,23421,21870,38218,38221,28037,24744,26592,29406,20957,23425,33236,33237,33238,33239,33240,33241,33242,33243,33244,33245,33246,33247,33248,33249,33250,33252,33253,33254,33256,33257,33259,33262,33263,33264,33265,33266,33269,33270,33271,33272,33273,33274,33277,33279,33283,33287,33288,33289,33290,33291,33294,33295,33297,33299,33301,33302,33303,33304,33305,33306,33309,33312,33316,33317,33318,33319,33321,33326,33330,33338,33340,33341,33343,33344,33345,33346,33347,33349,33350,33352,33354,33356,33357,33358,33360,33361,33362,33363,33364,33365,33366,33367,33369,33371,33372,33373,33374,33376,33377,33378,33379,33380,33381,33382,33383,33385,25319,27870,29275,25197,38062,32445,33043,27987,20892,24324,22900,21162,24594,22899,26262,34384,30111,25386,25062,31983,35834,21734,27431,40485,27572,34261,21589,20598,27812,21866,36276,29228,24085,24597,29750,25293,25490,29260,24472,28227,27966,25856,28504,30424,30928,30460,30036,21028,21467,20051,24222,26049,32810,32982,25243,21638,21032,28846,34957,36305,27873,21624,32986,22521,35060,36180,38506,37197,20329,27803,21943,30406,30768,25256,28921,28558,24429,34028,26842,30844,31735,33192,26379,40527,25447,30896,22383,30738,38713,25209,25259,21128,29749,27607,33386,33387,33388,33389,33393,33397,33398,33399,33400,33403,33404,33408,33409,33411,33413,33414,33415,33417,33420,33424,33427,33428,33429,33430,33434,33435,33438,33440,33442,33443,33447,33458,33461,33462,33466,33467,33468,33471,33472,33474,33475,33477,33478,33481,33488,33494,33497,33498,33501,33506,33511,33512,33513,33514,33516,33517,33518,33520,33522,33523,33525,33526,33528,33530,33532,33533,33534,33535,33536,33546,33547,33549,33552,33554,33555,33558,33560,33561,33565,33566,33567,33568,33569,33570,33571,33572,33573,33574,33577,33578,33582,33584,33586,33591,33595,33597,21860,33086,30130,30382,21305,30174,20731,23617,35692,31687,20559,29255,39575,39128,28418,29922,31080,25735,30629,25340,39057,36139,21697,32856,20050,22378,33529,33805,24179,20973,29942,35780,23631,22369,27900,39047,23110,30772,39748,36843,31893,21078,25169,38138,20166,33670,33889,33769,33970,22484,26420,22275,26222,28006,35889,26333,28689,26399,27450,26646,25114,22971,19971,20932,28422,26578,27791,20854,26827,22855,27495,30054,23822,33040,40784,26071,31048,31041,39569,36215,23682,20062,20225,21551,22865,30732,22120,27668,36804,24323,27773,27875,35755,25488,33598,33599,33601,33602,33604,33605,33608,33610,33611,33612,33613,33614,33619,33621,33622,33623,33624,33625,33629,33634,33648,33649,33650,33651,33652,33653,33654,33657,33658,33662,33663,33664,33665,33666,33667,33668,33671,33672,33674,33675,33676,33677,33679,33680,33681,33684,33685,33686,33687,33689,33690,33693,33695,33697,33698,33699,33700,33701,33702,33703,33708,33709,33710,33711,33717,33723,33726,33727,33730,33731,33732,33734,33736,33737,33739,33741,33742,33744,33745,33746,33747,33749,33751,33753,33754,33755,33758,33762,33763,33764,33766,33767,33768,33771,33772,33773,24688,27965,29301,25190,38030,38085,21315,36801,31614,20191,35878,20094,40660,38065,38067,21069,28508,36963,27973,35892,22545,23884,27424,27465,26538,21595,33108,32652,22681,34103,24378,25250,27207,38201,25970,24708,26725,30631,20052,20392,24039,38808,25772,32728,23789,20431,31373,20999,33540,19988,24623,31363,38054,20405,20146,31206,29748,21220,33465,25810,31165,23517,27777,38738,36731,27682,20542,21375,28165,25806,26228,27696,24773,39031,35831,24198,29756,31351,31179,19992,37041,29699,27714,22234,37195,27845,36235,21306,34502,26354,36527,23624,39537,28192,33774,33775,33779,33780,33781,33782,33783,33786,33787,33788,33790,33791,33792,33794,33797,33799,33800,33801,33802,33808,33810,33811,33812,33813,33814,33815,33817,33818,33819,33822,33823,33824,33825,33826,33827,33833,33834,33835,33836,33837,33838,33839,33840,33842,33843,33844,33845,33846,33847,33849,33850,33851,33854,33855,33856,33857,33858,33859,33860,33861,33863,33864,33865,33866,33867,33868,33869,33870,33871,33872,33874,33875,33876,33877,33878,33880,33885,33886,33887,33888,33890,33892,33893,33894,33895,33896,33898,33902,33903,33904,33906,33908,33911,33913,33915,33916,21462,23094,40843,36259,21435,22280,39079,26435,37275,27849,20840,30154,25331,29356,21048,21149,32570,28820,30264,21364,40522,27063,30830,38592,35033,32676,28982,29123,20873,26579,29924,22756,25880,22199,35753,39286,25200,32469,24825,28909,22764,20161,20154,24525,38887,20219,35748,20995,22922,32427,25172,20173,26085,25102,33592,33993,33635,34701,29076,28342,23481,32466,20887,25545,26580,32905,33593,34837,20754,23418,22914,36785,20083,27741,20837,35109,36719,38446,34122,29790,38160,38384,28070,33509,24369,25746,27922,33832,33134,40131,22622,36187,19977,21441,33917,33918,33919,33920,33921,33923,33924,33925,33926,33930,33933,33935,33936,33937,33938,33939,33940,33941,33942,33944,33946,33947,33949,33950,33951,33952,33954,33955,33956,33957,33958,33959,33960,33961,33962,33963,33964,33965,33966,33968,33969,33971,33973,33974,33975,33979,33980,33982,33984,33986,33987,33989,33990,33991,33992,33995,33996,33998,33999,34002,34004,34005,34007,34008,34009,34010,34011,34012,34014,34017,34018,34020,34023,34024,34025,34026,34027,34029,34030,34031,34033,34034,34035,34036,34037,34038,34039,34040,34041,34042,34043,34045,34046,34048,34049,34050,20254,25955,26705,21971,20007,25620,39578,25195,23234,29791,33394,28073,26862,20711,33678,30722,26432,21049,27801,32433,20667,21861,29022,31579,26194,29642,33515,26441,23665,21024,29053,34923,38378,38485,25797,36193,33203,21892,27733,25159,32558,22674,20260,21830,36175,26188,19978,23578,35059,26786,25422,31245,28903,33421,21242,38902,23569,21736,37045,32461,22882,36170,34503,33292,33293,36198,25668,23556,24913,28041,31038,35774,30775,30003,21627,20280,36523,28145,23072,32453,31070,27784,23457,23158,29978,32958,24910,28183,22768,29983,29989,29298,21319,32499,34051,34052,34053,34054,34055,34056,34057,34058,34059,34061,34062,34063,34064,34066,34068,34069,34070,34072,34073,34075,34076,34077,34078,34080,34082,34083,34084,34085,34086,34087,34088,34089,34090,34093,34094,34095,34096,34097,34098,34099,34100,34101,34102,34110,34111,34112,34113,34114,34116,34117,34118,34119,34123,34124,34125,34126,34127,34128,34129,34130,34131,34132,34133,34135,34136,34138,34139,34140,34141,34143,34144,34145,34146,34147,34149,34150,34151,34153,34154,34155,34156,34157,34158,34159,34160,34161,34163,34165,34166,34167,34168,34172,34173,34175,34176,34177,30465,30427,21097,32988,22307,24072,22833,29422,26045,28287,35799,23608,34417,21313,30707,25342,26102,20160,39135,34432,23454,35782,21490,30690,20351,23630,39542,22987,24335,31034,22763,19990,26623,20107,25325,35475,36893,21183,26159,21980,22124,36866,20181,20365,37322,39280,27663,24066,24643,23460,35270,35797,25910,25163,39318,23432,23551,25480,21806,21463,30246,20861,34092,26530,26803,27530,25234,36755,21460,33298,28113,30095,20070,36174,23408,29087,34223,26257,26329,32626,34560,40653,40736,23646,26415,36848,26641,26463,25101,31446,22661,24246,25968,28465,34178,34179,34182,34184,34185,34186,34187,34188,34189,34190,34192,34193,34194,34195,34196,34197,34198,34199,34200,34201,34202,34205,34206,34207,34208,34209,34210,34211,34213,34214,34215,34217,34219,34220,34221,34225,34226,34227,34228,34229,34230,34232,34234,34235,34236,34237,34238,34239,34240,34242,34243,34244,34245,34246,34247,34248,34250,34251,34252,34253,34254,34257,34258,34260,34262,34263,34264,34265,34266,34267,34269,34270,34271,34272,34273,34274,34275,34277,34278,34279,34280,34282,34283,34284,34285,34286,34287,34288,34289,34290,34291,34292,34293,34294,34295,34296,24661,21047,32781,25684,34928,29993,24069,26643,25332,38684,21452,29245,35841,27700,30561,31246,21550,30636,39034,33308,35828,30805,26388,28865,26031,25749,22070,24605,31169,21496,19997,27515,32902,23546,21987,22235,20282,20284,39282,24051,26494,32824,24578,39042,36865,23435,35772,35829,25628,33368,25822,22013,33487,37221,20439,32032,36895,31903,20723,22609,28335,23487,35785,32899,37240,33948,31639,34429,38539,38543,32485,39635,30862,23681,31319,36930,38567,31071,23385,25439,31499,34001,26797,21766,32553,29712,32034,38145,25152,22604,20182,23427,22905,22612,34297,34298,34300,34301,34302,34304,34305,34306,34307,34308,34310,34311,34312,34313,34314,34315,34316,34317,34318,34319,34320,34322,34323,34324,34325,34327,34328,34329,34330,34331,34332,34333,34334,34335,34336,34337,34338,34339,34340,34341,34342,34344,34346,34347,34348,34349,34350,34351,34352,34353,34354,34355,34356,34357,34358,34359,34361,34362,34363,34365,34366,34367,34368,34369,34370,34371,34372,34373,34374,34375,34376,34377,34378,34379,34380,34386,34387,34389,34390,34391,34392,34393,34395,34396,34397,34399,34400,34401,34403,34404,34405,34406,34407,34408,34409,34410,29549,25374,36427,36367,32974,33492,25260,21488,27888,37214,22826,24577,27760,22349,25674,36138,30251,28393,22363,27264,30192,28525,35885,35848,22374,27631,34962,30899,25506,21497,28845,27748,22616,25642,22530,26848,33179,21776,31958,20504,36538,28108,36255,28907,25487,28059,28372,32486,33796,26691,36867,28120,38518,35752,22871,29305,34276,33150,30140,35466,26799,21076,36386,38161,25552,39064,36420,21884,20307,26367,22159,24789,28053,21059,23625,22825,28155,22635,30000,29980,24684,33300,33094,25361,26465,36834,30522,36339,36148,38081,24086,21381,21548,28867,34413,34415,34416,34418,34419,34420,34421,34422,34423,34424,34435,34436,34437,34438,34439,34440,34441,34446,34447,34448,34449,34450,34452,34454,34455,34456,34457,34458,34459,34462,34463,34464,34465,34466,34469,34470,34475,34477,34478,34482,34483,34487,34488,34489,34491,34492,34493,34494,34495,34497,34498,34499,34501,34504,34508,34509,34514,34515,34517,34518,34519,34522,34524,34525,34528,34529,34530,34531,34533,34534,34535,34536,34538,34539,34540,34543,34549,34550,34551,34554,34555,34556,34557,34559,34561,34564,34565,34566,34571,34572,34574,34575,34576,34577,34580,34582,27712,24311,20572,20141,24237,25402,33351,36890,26704,37230,30643,21516,38108,24420,31461,26742,25413,31570,32479,30171,20599,25237,22836,36879,20984,31171,31361,22270,24466,36884,28034,23648,22303,21520,20820,28237,22242,25512,39059,33151,34581,35114,36864,21534,23663,33216,25302,25176,33073,40501,38464,39534,39548,26925,22949,25299,21822,25366,21703,34521,27964,23043,29926,34972,27498,22806,35916,24367,28286,29609,39037,20024,28919,23436,30871,25405,26202,30358,24779,23451,23113,19975,33109,27754,29579,20129,26505,32593,24448,26106,26395,24536,22916,23041,34585,34587,34589,34591,34592,34596,34598,34599,34600,34602,34603,34604,34605,34607,34608,34610,34611,34613,34614,34616,34617,34618,34620,34621,34624,34625,34626,34627,34628,34629,34630,34634,34635,34637,34639,34640,34641,34642,34644,34645,34646,34648,34650,34651,34652,34653,34654,34655,34657,34658,34662,34663,34664,34665,34666,34667,34668,34669,34671,34673,34674,34675,34677,34679,34680,34681,34682,34687,34688,34689,34692,34694,34695,34697,34698,34700,34702,34703,34704,34705,34706,34708,34709,34710,34712,34713,34714,34715,34716,34717,34718,34720,34721,34722,34723,34724,24013,24494,21361,38886,36829,26693,22260,21807,24799,20026,28493,32500,33479,33806,22996,20255,20266,23614,32428,26410,34074,21619,30031,32963,21890,39759,20301,28205,35859,23561,24944,21355,30239,28201,34442,25991,38395,32441,21563,31283,32010,38382,21985,32705,29934,25373,34583,28065,31389,25105,26017,21351,25569,27779,24043,21596,38056,20044,27745,35820,23627,26080,33436,26791,21566,21556,27595,27494,20116,25410,21320,33310,20237,20398,22366,25098,38654,26212,29289,21247,21153,24735,35823,26132,29081,26512,35199,30802,30717,26224,22075,21560,38177,29306,34725,34726,34727,34729,34730,34734,34736,34737,34738,34740,34742,34743,34744,34745,34747,34748,34750,34751,34753,34754,34755,34756,34757,34759,34760,34761,34764,34765,34766,34767,34768,34772,34773,34774,34775,34776,34777,34778,34780,34781,34782,34783,34785,34786,34787,34788,34790,34791,34792,34793,34795,34796,34797,34799,34800,34801,34802,34803,34804,34805,34806,34807,34808,34810,34811,34812,34813,34815,34816,34817,34818,34820,34821,34822,34823,34824,34825,34827,34828,34829,34830,34831,34832,34833,34834,34836,34839,34840,34841,34842,34844,34845,34846,34847,34848,34851,31232,24687,24076,24713,33181,22805,24796,29060,28911,28330,27728,29312,27268,34989,24109,20064,23219,21916,38115,27927,31995,38553,25103,32454,30606,34430,21283,38686,36758,26247,23777,20384,29421,19979,21414,22799,21523,25472,38184,20808,20185,40092,32420,21688,36132,34900,33335,38386,28046,24358,23244,26174,38505,29616,29486,21439,33146,39301,32673,23466,38519,38480,32447,30456,21410,38262,39321,31665,35140,28248,20065,32724,31077,35814,24819,21709,20139,39033,24055,27233,20687,21521,35937,33831,30813,38660,21066,21742,22179,38144,28040,23477,28102,26195,34852,34853,34854,34855,34856,34857,34858,34859,34860,34861,34862,34863,34864,34865,34867,34868,34869,34870,34871,34872,34874,34875,34877,34878,34879,34881,34882,34883,34886,34887,34888,34889,34890,34891,34894,34895,34896,34897,34898,34899,34901,34902,34904,34906,34907,34908,34909,34910,34911,34912,34918,34919,34922,34925,34927,34929,34931,34932,34933,34934,34936,34937,34938,34939,34940,34944,34947,34950,34951,34953,34954,34956,34958,34959,34960,34961,34963,34964,34965,34967,34968,34969,34970,34971,34973,34974,34975,34976,34977,34979,34981,34982,34983,34984,34985,34986,23567,23389,26657,32918,21880,31505,25928,26964,20123,27463,34638,38795,21327,25375,25658,37034,26012,32961,35856,20889,26800,21368,34809,25032,27844,27899,35874,23633,34218,33455,38156,27427,36763,26032,24571,24515,20449,34885,26143,33125,29481,24826,20852,21009,22411,24418,37026,34892,37266,24184,26447,24615,22995,20804,20982,33016,21256,27769,38596,29066,20241,20462,32670,26429,21957,38152,31168,34966,32483,22687,25100,38656,34394,22040,39035,24464,35768,33988,37207,21465,26093,24207,30044,24676,32110,23167,32490,32493,36713,21927,23459,24748,26059,29572,34988,34990,34991,34992,34994,34995,34996,34997,34998,35000,35001,35002,35003,35005,35006,35007,35008,35011,35012,35015,35016,35018,35019,35020,35021,35023,35024,35025,35027,35030,35031,35034,35035,35036,35037,35038,35040,35041,35046,35047,35049,35050,35051,35052,35053,35054,35055,35058,35061,35062,35063,35066,35067,35069,35071,35072,35073,35075,35076,35077,35078,35079,35080,35081,35083,35084,35085,35086,35087,35089,35092,35093,35094,35095,35096,35100,35101,35102,35103,35104,35106,35107,35108,35110,35111,35112,35113,35116,35117,35118,35119,35121,35122,35123,35125,35127,36873,30307,30505,32474,38772,34203,23398,31348,38634,34880,21195,29071,24490,26092,35810,23547,39535,24033,27529,27739,35757,35759,36874,36805,21387,25276,40486,40493,21568,20011,33469,29273,34460,23830,34905,28079,38597,21713,20122,35766,28937,21693,38409,28895,28153,30416,20005,30740,34578,23721,24310,35328,39068,38414,28814,27839,22852,25513,30524,34893,28436,33395,22576,29141,21388,30746,38593,21761,24422,28976,23476,35866,39564,27523,22830,40495,31207,26472,25196,20335,30113,32650,27915,38451,27687,20208,30162,20859,26679,28478,36992,33136,22934,29814,35128,35129,35130,35131,35132,35133,35134,35135,35136,35138,35139,35141,35142,35143,35144,35145,35146,35147,35148,35149,35150,35151,35152,35153,35154,35155,35156,35157,35158,35159,35160,35161,35162,35163,35164,35165,35168,35169,35170,35171,35172,35173,35175,35176,35177,35178,35179,35180,35181,35182,35183,35184,35185,35186,35187,35188,35189,35190,35191,35192,35193,35194,35196,35197,35198,35200,35202,35204,35205,35207,35208,35209,35210,35211,35212,35213,35214,35215,35216,35217,35218,35219,35220,35221,35222,35223,35224,35225,35226,35227,35228,35229,35230,35231,35232,35233,25671,23591,36965,31377,35875,23002,21676,33280,33647,35201,32768,26928,22094,32822,29239,37326,20918,20063,39029,25494,19994,21494,26355,33099,22812,28082,19968,22777,21307,25558,38129,20381,20234,34915,39056,22839,36951,31227,20202,33008,30097,27778,23452,23016,24413,26885,34433,20506,24050,20057,30691,20197,33402,25233,26131,37009,23673,20159,24441,33222,36920,32900,30123,20134,35028,24847,27589,24518,20041,30410,28322,35811,35758,35850,35793,24322,32764,32716,32462,33589,33643,22240,27575,38899,38452,23035,21535,38134,28139,23493,39278,23609,24341,38544,35234,35235,35236,35237,35238,35239,35240,35241,35242,35243,35244,35245,35246,35247,35248,35249,35250,35251,35252,35253,35254,35255,35256,35257,35258,35259,35260,35261,35262,35263,35264,35267,35277,35283,35284,35285,35287,35288,35289,35291,35293,35295,35296,35297,35298,35300,35303,35304,35305,35306,35308,35309,35310,35312,35313,35314,35316,35317,35318,35319,35320,35321,35322,35323,35324,35325,35326,35327,35329,35330,35331,35332,35333,35334,35336,35337,35338,35339,35340,35341,35342,35343,35344,35345,35346,35347,35348,35349,35350,35351,35352,35353,35354,35355,35356,35357,21360,33521,27185,23156,40560,24212,32552,33721,33828,33829,33639,34631,36814,36194,30408,24433,39062,30828,26144,21727,25317,20323,33219,30152,24248,38605,36362,34553,21647,27891,28044,27704,24703,21191,29992,24189,20248,24736,24551,23588,30001,37038,38080,29369,27833,28216,37193,26377,21451,21491,20305,37321,35825,21448,24188,36802,28132,20110,30402,27014,34398,24858,33286,20313,20446,36926,40060,24841,28189,28180,38533,20104,23089,38632,19982,23679,31161,23431,35821,32701,29577,22495,33419,37057,21505,36935,21947,23786,24481,24840,27442,29425,32946,35465,35358,35359,35360,35361,35362,35363,35364,35365,35366,35367,35368,35369,35370,35371,35372,35373,35374,35375,35376,35377,35378,35379,35380,35381,35382,35383,35384,35385,35386,35387,35388,35389,35391,35392,35393,35394,35395,35396,35397,35398,35399,35401,35402,35403,35404,35405,35406,35407,35408,35409,35410,35411,35412,35413,35414,35415,35416,35417,35418,35419,35420,35421,35422,35423,35424,35425,35426,35427,35428,35429,35430,35431,35432,35433,35434,35435,35436,35437,35438,35439,35440,35441,35442,35443,35444,35445,35446,35447,35448,35450,35451,35452,35453,35454,35455,35456,28020,23507,35029,39044,35947,39533,40499,28170,20900,20803,22435,34945,21407,25588,36757,22253,21592,22278,29503,28304,32536,36828,33489,24895,24616,38498,26352,32422,36234,36291,38053,23731,31908,26376,24742,38405,32792,20113,37095,21248,38504,20801,36816,34164,37213,26197,38901,23381,21277,30776,26434,26685,21705,28798,23472,36733,20877,22312,21681,25874,26242,36190,36163,33039,33900,36973,31967,20991,34299,26531,26089,28577,34468,36481,22122,36896,30338,28790,29157,36131,25321,21017,27901,36156,24590,22686,24974,26366,36192,25166,21939,28195,26413,36711,35457,35458,35459,35460,35461,35462,35463,35464,35467,35468,35469,35470,35471,35472,35473,35474,35476,35477,35478,35479,35480,35481,35482,35483,35484,35485,35486,35487,35488,35489,35490,35491,35492,35493,35494,35495,35496,35497,35498,35499,35500,35501,35502,35503,35504,35505,35506,35507,35508,35509,35510,35511,35512,35513,35514,35515,35516,35517,35518,35519,35520,35521,35522,35523,35524,35525,35526,35527,35528,35529,35530,35531,35532,35533,35534,35535,35536,35537,35538,35539,35540,35541,35542,35543,35544,35545,35546,35547,35548,35549,35550,35551,35552,35553,35554,35555,38113,38392,30504,26629,27048,21643,20045,28856,35784,25688,25995,23429,31364,20538,23528,30651,27617,35449,31896,27838,30415,26025,36759,23853,23637,34360,26632,21344,25112,31449,28251,32509,27167,31456,24432,28467,24352,25484,28072,26454,19976,24080,36134,20183,32960,30260,38556,25307,26157,25214,27836,36213,29031,32617,20806,32903,21484,36974,25240,21746,34544,36761,32773,38167,34071,36825,27993,29645,26015,30495,29956,30759,33275,36126,38024,20390,26517,30137,35786,38663,25391,38215,38453,33976,25379,30529,24449,29424,20105,24596,25972,25327,27491,25919,35556,35557,35558,35559,35560,35561,35562,35563,35564,35565,35566,35567,35568,35569,35570,35571,35572,35573,35574,35575,35576,35577,35578,35579,35580,35581,35582,35583,35584,35585,35586,35587,35588,35589,35590,35592,35593,35594,35595,35596,35597,35598,35599,35600,35601,35602,35603,35604,35605,35606,35607,35608,35609,35610,35611,35612,35613,35614,35615,35616,35617,35618,35619,35620,35621,35623,35624,35625,35626,35627,35628,35629,35630,35631,35632,35633,35634,35635,35636,35637,35638,35639,35640,35641,35642,35643,35644,35645,35646,35647,35648,35649,35650,35651,35652,35653,24103,30151,37073,35777,33437,26525,25903,21553,34584,30693,32930,33026,27713,20043,32455,32844,30452,26893,27542,25191,20540,20356,22336,25351,27490,36286,21482,26088,32440,24535,25370,25527,33267,33268,32622,24092,23769,21046,26234,31209,31258,36136,28825,30164,28382,27835,31378,20013,30405,24544,38047,34935,32456,31181,32959,37325,20210,20247,33311,21608,24030,27954,35788,31909,36724,32920,24090,21650,30385,23449,26172,39588,29664,26666,34523,26417,29482,35832,35803,36880,31481,28891,29038,25284,30633,22065,20027,33879,26609,21161,34496,36142,38136,31569,35654,35655,35656,35657,35658,35659,35660,35661,35662,35663,35664,35665,35666,35667,35668,35669,35670,35671,35672,35673,35674,35675,35676,35677,35678,35679,35680,35681,35682,35683,35684,35685,35687,35688,35689,35690,35691,35693,35694,35695,35696,35697,35698,35699,35700,35701,35702,35703,35704,35705,35706,35707,35708,35709,35710,35711,35712,35713,35714,35715,35716,35717,35718,35719,35720,35721,35722,35723,35724,35725,35726,35727,35728,35729,35730,35731,35732,35733,35734,35735,35736,35737,35738,35739,35740,35741,35742,35743,35756,35761,35771,35783,35792,35818,35849,35870,20303,27880,31069,39547,25235,29226,25341,19987,30742,36716,25776,36186,31686,26729,24196,35013,22918,25758,22766,29366,26894,38181,36861,36184,22368,32512,35846,20934,25417,25305,21331,26700,29730,33537,37196,21828,30528,28796,27978,20857,21672,36164,23039,28363,28100,23388,32043,20180,31869,28371,23376,33258,28173,23383,39683,26837,36394,23447,32508,24635,32437,37049,36208,22863,25549,31199,36275,21330,26063,31062,35781,38459,32452,38075,32386,22068,37257,26368,32618,23562,36981,26152,24038,20304,26590,20570,20316,22352,24231,59408,59409,59410,59411,59412,35896,35897,35898,35899,35900,35901,35902,35903,35904,35906,35907,35908,35909,35912,35914,35915,35917,35918,35919,35920,35921,35922,35923,35924,35926,35927,35928,35929,35931,35932,35933,35934,35935,35936,35939,35940,35941,35942,35943,35944,35945,35948,35949,35950,35951,35952,35953,35954,35956,35957,35958,35959,35963,35964,35965,35966,35967,35968,35969,35971,35972,35974,35975,35976,35979,35981,35982,35983,35984,35985,35986,35987,35989,35990,35991,35993,35994,35995,35996,35997,35998,35999,36000,36001,36002,36003,36004,36005,36006,36007,36008,36009,36010,36011,36012,36013,20109,19980,20800,19984,24319,21317,19989,20120,19998,39730,23404,22121,20008,31162,20031,21269,20039,22829,29243,21358,27664,22239,32996,39319,27603,30590,40727,20022,20127,40720,20060,20073,20115,33416,23387,21868,22031,20164,21389,21405,21411,21413,21422,38757,36189,21274,21493,21286,21294,21310,36188,21350,21347,20994,21000,21006,21037,21043,21055,21056,21068,21086,21089,21084,33967,21117,21122,21121,21136,21139,20866,32596,20155,20163,20169,20162,20200,20193,20203,20190,20251,20211,20258,20324,20213,20261,20263,20233,20267,20318,20327,25912,20314,20317,36014,36015,36016,36017,36018,36019,36020,36021,36022,36023,36024,36025,36026,36027,36028,36029,36030,36031,36032,36033,36034,36035,36036,36037,36038,36039,36040,36041,36042,36043,36044,36045,36046,36047,36048,36049,36050,36051,36052,36053,36054,36055,36056,36057,36058,36059,36060,36061,36062,36063,36064,36065,36066,36067,36068,36069,36070,36071,36072,36073,36074,36075,36076,36077,36078,36079,36080,36081,36082,36083,36084,36085,36086,36087,36088,36089,36090,36091,36092,36093,36094,36095,36096,36097,36098,36099,36100,36101,36102,36103,36104,36105,36106,36107,36108,36109,20319,20311,20274,20285,20342,20340,20369,20361,20355,20367,20350,20347,20394,20348,20396,20372,20454,20456,20458,20421,20442,20451,20444,20433,20447,20472,20521,20556,20467,20524,20495,20526,20525,20478,20508,20492,20517,20520,20606,20547,20565,20552,20558,20588,20603,20645,20647,20649,20666,20694,20742,20717,20716,20710,20718,20743,20747,20189,27709,20312,20325,20430,40864,27718,31860,20846,24061,40649,39320,20865,22804,21241,21261,35335,21264,20971,22809,20821,20128,20822,20147,34926,34980,20149,33044,35026,31104,23348,34819,32696,20907,20913,20925,20924,36110,36111,36112,36113,36114,36115,36116,36117,36118,36119,36120,36121,36122,36123,36124,36128,36177,36178,36183,36191,36197,36200,36201,36202,36204,36206,36207,36209,36210,36216,36217,36218,36219,36220,36221,36222,36223,36224,36226,36227,36230,36231,36232,36233,36236,36237,36238,36239,36240,36242,36243,36245,36246,36247,36248,36249,36250,36251,36252,36253,36254,36256,36257,36258,36260,36261,36262,36263,36264,36265,36266,36267,36268,36269,36270,36271,36272,36274,36278,36279,36281,36283,36285,36288,36289,36290,36293,36295,36296,36297,36298,36301,36304,36306,36307,36308,20935,20886,20898,20901,35744,35750,35751,35754,35764,35765,35767,35778,35779,35787,35791,35790,35794,35795,35796,35798,35800,35801,35804,35807,35808,35812,35816,35817,35822,35824,35827,35830,35833,35836,35839,35840,35842,35844,35847,35852,35855,35857,35858,35860,35861,35862,35865,35867,35864,35869,35871,35872,35873,35877,35879,35882,35883,35886,35887,35890,35891,35893,35894,21353,21370,38429,38434,38433,38449,38442,38461,38460,38466,38473,38484,38495,38503,38508,38514,38516,38536,38541,38551,38576,37015,37019,37021,37017,37036,37025,37044,37043,37046,37050,36309,36312,36313,36316,36320,36321,36322,36325,36326,36327,36329,36333,36334,36336,36337,36338,36340,36342,36348,36350,36351,36352,36353,36354,36355,36356,36358,36359,36360,36363,36365,36366,36368,36369,36370,36371,36373,36374,36375,36376,36377,36378,36379,36380,36384,36385,36388,36389,36390,36391,36392,36395,36397,36400,36402,36403,36404,36406,36407,36408,36411,36412,36414,36415,36419,36421,36422,36428,36429,36430,36431,36432,36435,36436,36437,36438,36439,36440,36442,36443,36444,36445,36446,36447,36448,36449,36450,36451,36452,36453,36455,36456,36458,36459,36462,36465,37048,37040,37071,37061,37054,37072,37060,37063,37075,37094,37090,37084,37079,37083,37099,37103,37118,37124,37154,37150,37155,37169,37167,37177,37187,37190,21005,22850,21154,21164,21165,21182,21759,21200,21206,21232,21471,29166,30669,24308,20981,20988,39727,21430,24321,30042,24047,22348,22441,22433,22654,22716,22725,22737,22313,22316,22314,22323,22329,22318,22319,22364,22331,22338,22377,22405,22379,22406,22396,22395,22376,22381,22390,22387,22445,22436,22412,22450,22479,22439,22452,22419,22432,22485,22488,22490,22489,22482,22456,22516,22511,22520,22500,22493,36467,36469,36471,36472,36473,36474,36475,36477,36478,36480,36482,36483,36484,36486,36488,36489,36490,36491,36492,36493,36494,36497,36498,36499,36501,36502,36503,36504,36505,36506,36507,36509,36511,36512,36513,36514,36515,36516,36517,36518,36519,36520,36521,36522,36525,36526,36528,36529,36531,36532,36533,36534,36535,36536,36537,36539,36540,36541,36542,36543,36544,36545,36546,36547,36548,36549,36550,36551,36552,36553,36554,36555,36556,36557,36559,36560,36561,36562,36563,36564,36565,36566,36567,36568,36569,36570,36571,36572,36573,36574,36575,36576,36577,36578,36579,36580,22539,22541,22525,22509,22528,22558,22553,22596,22560,22629,22636,22657,22665,22682,22656,39336,40729,25087,33401,33405,33407,33423,33418,33448,33412,33422,33425,33431,33433,33451,33464,33470,33456,33480,33482,33507,33432,33463,33454,33483,33484,33473,33449,33460,33441,33450,33439,33476,33486,33444,33505,33545,33527,33508,33551,33543,33500,33524,33490,33496,33548,33531,33491,33553,33562,33542,33556,33557,33504,33493,33564,33617,33627,33628,33544,33682,33596,33588,33585,33691,33630,33583,33615,33607,33603,33631,33600,33559,33632,33581,33594,33587,33638,33637,36581,36582,36583,36584,36585,36586,36587,36588,36589,36590,36591,36592,36593,36594,36595,36596,36597,36598,36599,36600,36601,36602,36603,36604,36605,36606,36607,36608,36609,36610,36611,36612,36613,36614,36615,36616,36617,36618,36619,36620,36621,36622,36623,36624,36625,36626,36627,36628,36629,36630,36631,36632,36633,36634,36635,36636,36637,36638,36639,36640,36641,36642,36643,36644,36645,36646,36647,36648,36649,36650,36651,36652,36653,36654,36655,36656,36657,36658,36659,36660,36661,36662,36663,36664,36665,36666,36667,36668,36669,36670,36671,36672,36673,36674,36675,36676,33640,33563,33641,33644,33642,33645,33646,33712,33656,33715,33716,33696,33706,33683,33692,33669,33660,33718,33705,33661,33720,33659,33688,33694,33704,33722,33724,33729,33793,33765,33752,22535,33816,33803,33757,33789,33750,33820,33848,33809,33798,33748,33759,33807,33795,33784,33785,33770,33733,33728,33830,33776,33761,33884,33873,33882,33881,33907,33927,33928,33914,33929,33912,33852,33862,33897,33910,33932,33934,33841,33901,33985,33997,34000,34022,33981,34003,33994,33983,33978,34016,33953,33977,33972,33943,34021,34019,34060,29965,34104,34032,34105,34079,34106,36677,36678,36679,36680,36681,36682,36683,36684,36685,36686,36687,36688,36689,36690,36691,36692,36693,36694,36695,36696,36697,36698,36699,36700,36701,36702,36703,36704,36705,36706,36707,36708,36709,36714,36736,36748,36754,36765,36768,36769,36770,36772,36773,36774,36775,36778,36780,36781,36782,36783,36786,36787,36788,36789,36791,36792,36794,36795,36796,36799,36800,36803,36806,36809,36810,36811,36812,36813,36815,36818,36822,36823,36826,36832,36833,36835,36839,36844,36847,36849,36850,36852,36853,36854,36858,36859,36860,36862,36863,36871,36872,36876,36878,36883,36885,36888,34134,34107,34047,34044,34137,34120,34152,34148,34142,34170,30626,34115,34162,34171,34212,34216,34183,34191,34169,34222,34204,34181,34233,34231,34224,34259,34241,34268,34303,34343,34309,34345,34326,34364,24318,24328,22844,22849,32823,22869,22874,22872,21263,23586,23589,23596,23604,25164,25194,25247,25275,25290,25306,25303,25326,25378,25334,25401,25419,25411,25517,25590,25457,25466,25486,25524,25453,25516,25482,25449,25518,25532,25586,25592,25568,25599,25540,25566,25550,25682,25542,25534,25669,25665,25611,25627,25632,25612,25638,25633,25694,25732,25709,25750,36889,36892,36899,36900,36901,36903,36904,36905,36906,36907,36908,36912,36913,36914,36915,36916,36919,36921,36922,36925,36927,36928,36931,36933,36934,36936,36937,36938,36939,36940,36942,36948,36949,36950,36953,36954,36956,36957,36958,36959,36960,36961,36964,36966,36967,36969,36970,36971,36972,36975,36976,36977,36978,36979,36982,36983,36984,36985,36986,36987,36988,36990,36993,36996,36997,36998,36999,37001,37002,37004,37005,37006,37007,37008,37010,37012,37014,37016,37018,37020,37022,37023,37024,37028,37029,37031,37032,37033,37035,37037,37042,37047,37052,37053,37055,37056,25722,25783,25784,25753,25786,25792,25808,25815,25828,25826,25865,25893,25902,24331,24530,29977,24337,21343,21489,21501,21481,21480,21499,21522,21526,21510,21579,21586,21587,21588,21590,21571,21537,21591,21593,21539,21554,21634,21652,21623,21617,21604,21658,21659,21636,21622,21606,21661,21712,21677,21698,21684,21714,21671,21670,21715,21716,21618,21667,21717,21691,21695,21708,21721,21722,21724,21673,21674,21668,21725,21711,21726,21787,21735,21792,21757,21780,21747,21794,21795,21775,21777,21799,21802,21863,21903,21941,21833,21869,21825,21845,21823,21840,21820,37058,37059,37062,37064,37065,37067,37068,37069,37074,37076,37077,37078,37080,37081,37082,37086,37087,37088,37091,37092,37093,37097,37098,37100,37102,37104,37105,37106,37107,37109,37110,37111,37113,37114,37115,37116,37119,37120,37121,37123,37125,37126,37127,37128,37129,37130,37131,37132,37133,37134,37135,37136,37137,37138,37139,37140,37141,37142,37143,37144,37146,37147,37148,37149,37151,37152,37153,37156,37157,37158,37159,37160,37161,37162,37163,37164,37165,37166,37168,37170,37171,37172,37173,37174,37175,37176,37178,37179,37180,37181,37182,37183,37184,37185,37186,37188,21815,21846,21877,21878,21879,21811,21808,21852,21899,21970,21891,21937,21945,21896,21889,21919,21886,21974,21905,21883,21983,21949,21950,21908,21913,21994,22007,21961,22047,21969,21995,21996,21972,21990,21981,21956,21999,21989,22002,22003,21964,21965,21992,22005,21988,36756,22046,22024,22028,22017,22052,22051,22014,22016,22055,22061,22104,22073,22103,22060,22093,22114,22105,22108,22092,22100,22150,22116,22129,22123,22139,22140,22149,22163,22191,22228,22231,22237,22241,22261,22251,22265,22271,22276,22282,22281,22300,24079,24089,24084,24081,24113,24123,24124,37189,37191,37192,37201,37203,37204,37205,37206,37208,37209,37211,37212,37215,37216,37222,37223,37224,37227,37229,37235,37242,37243,37244,37248,37249,37250,37251,37252,37254,37256,37258,37262,37263,37267,37268,37269,37270,37271,37272,37273,37276,37277,37278,37279,37280,37281,37284,37285,37286,37287,37288,37289,37291,37292,37296,37297,37298,37299,37302,37303,37304,37305,37307,37308,37309,37310,37311,37312,37313,37314,37315,37316,37317,37318,37320,37323,37328,37330,37331,37332,37333,37334,37335,37336,37337,37338,37339,37341,37342,37343,37344,37345,37346,37347,37348,37349,24119,24132,24148,24155,24158,24161,23692,23674,23693,23696,23702,23688,23704,23705,23697,23706,23708,23733,23714,23741,23724,23723,23729,23715,23745,23735,23748,23762,23780,23755,23781,23810,23811,23847,23846,23854,23844,23838,23814,23835,23896,23870,23860,23869,23916,23899,23919,23901,23915,23883,23882,23913,23924,23938,23961,23965,35955,23991,24005,24435,24439,24450,24455,24457,24460,24469,24473,24476,24488,24493,24501,24508,34914,24417,29357,29360,29364,29367,29368,29379,29377,29390,29389,29394,29416,29423,29417,29426,29428,29431,29441,29427,29443,29434,37350,37351,37352,37353,37354,37355,37356,37357,37358,37359,37360,37361,37362,37363,37364,37365,37366,37367,37368,37369,37370,37371,37372,37373,37374,37375,37376,37377,37378,37379,37380,37381,37382,37383,37384,37385,37386,37387,37388,37389,37390,37391,37392,37393,37394,37395,37396,37397,37398,37399,37400,37401,37402,37403,37404,37405,37406,37407,37408,37409,37410,37411,37412,37413,37414,37415,37416,37417,37418,37419,37420,37421,37422,37423,37424,37425,37426,37427,37428,37429,37430,37431,37432,37433,37434,37435,37436,37437,37438,37439,37440,37441,37442,37443,37444,37445,29435,29463,29459,29473,29450,29470,29469,29461,29474,29497,29477,29484,29496,29489,29520,29517,29527,29536,29548,29551,29566,33307,22821,39143,22820,22786,39267,39271,39272,39273,39274,39275,39276,39284,39287,39293,39296,39300,39303,39306,39309,39312,39313,39315,39316,39317,24192,24209,24203,24214,24229,24224,24249,24245,24254,24243,36179,24274,24273,24283,24296,24298,33210,24516,24521,24534,24527,24579,24558,24580,24545,24548,24574,24581,24582,24554,24557,24568,24601,24629,24614,24603,24591,24589,24617,24619,24586,24639,24609,24696,24697,24699,24698,24642,37446,37447,37448,37449,37450,37451,37452,37453,37454,37455,37456,37457,37458,37459,37460,37461,37462,37463,37464,37465,37466,37467,37468,37469,37470,37471,37472,37473,37474,37475,37476,37477,37478,37479,37480,37481,37482,37483,37484,37485,37486,37487,37488,37489,37490,37491,37493,37494,37495,37496,37497,37498,37499,37500,37501,37502,37503,37504,37505,37506,37507,37508,37509,37510,37511,37512,37513,37514,37515,37516,37517,37519,37520,37521,37522,37523,37524,37525,37526,37527,37528,37529,37530,37531,37532,37533,37534,37535,37536,37537,37538,37539,37540,37541,37542,37543,24682,24701,24726,24730,24749,24733,24707,24722,24716,24731,24812,24763,24753,24797,24792,24774,24794,24756,24864,24870,24853,24867,24820,24832,24846,24875,24906,24949,25004,24980,24999,25015,25044,25077,24541,38579,38377,38379,38385,38387,38389,38390,38396,38398,38403,38404,38406,38408,38410,38411,38412,38413,38415,38418,38421,38422,38423,38425,38426,20012,29247,25109,27701,27732,27740,27722,27811,27781,27792,27796,27788,27752,27753,27764,27766,27782,27817,27856,27860,27821,27895,27896,27889,27863,27826,27872,27862,27898,27883,27886,27825,27859,27887,27902,37544,37545,37546,37547,37548,37549,37551,37552,37553,37554,37555,37556,37557,37558,37559,37560,37561,37562,37563,37564,37565,37566,37567,37568,37569,37570,37571,37572,37573,37574,37575,37577,37578,37579,37580,37581,37582,37583,37584,37585,37586,37587,37588,37589,37590,37591,37592,37593,37594,37595,37596,37597,37598,37599,37600,37601,37602,37603,37604,37605,37606,37607,37608,37609,37610,37611,37612,37613,37614,37615,37616,37617,37618,37619,37620,37621,37622,37623,37624,37625,37626,37627,37628,37629,37630,37631,37632,37633,37634,37635,37636,37637,37638,37639,37640,37641,27961,27943,27916,27971,27976,27911,27908,27929,27918,27947,27981,27950,27957,27930,27983,27986,27988,27955,28049,28015,28062,28064,27998,28051,28052,27996,28000,28028,28003,28186,28103,28101,28126,28174,28095,28128,28177,28134,28125,28121,28182,28075,28172,28078,28203,28270,28238,28267,28338,28255,28294,28243,28244,28210,28197,28228,28383,28337,28312,28384,28461,28386,28325,28327,28349,28347,28343,28375,28340,28367,28303,28354,28319,28514,28486,28487,28452,28437,28409,28463,28470,28491,28532,28458,28425,28457,28553,28557,28556,28536,28530,28540,28538,28625,37642,37643,37644,37645,37646,37647,37648,37649,37650,37651,37652,37653,37654,37655,37656,37657,37658,37659,37660,37661,37662,37663,37664,37665,37666,37667,37668,37669,37670,37671,37672,37673,37674,37675,37676,37677,37678,37679,37680,37681,37682,37683,37684,37685,37686,37687,37688,37689,37690,37691,37692,37693,37695,37696,37697,37698,37699,37700,37701,37702,37703,37704,37705,37706,37707,37708,37709,37710,37711,37712,37713,37714,37715,37716,37717,37718,37719,37720,37721,37722,37723,37724,37725,37726,37727,37728,37729,37730,37731,37732,37733,37734,37735,37736,37737,37739,28617,28583,28601,28598,28610,28641,28654,28638,28640,28655,28698,28707,28699,28729,28725,28751,28766,23424,23428,23445,23443,23461,23480,29999,39582,25652,23524,23534,35120,23536,36423,35591,36790,36819,36821,36837,36846,36836,36841,36838,36851,36840,36869,36868,36875,36902,36881,36877,36886,36897,36917,36918,36909,36911,36932,36945,36946,36944,36968,36952,36962,36955,26297,36980,36989,36994,37000,36995,37003,24400,24407,24406,24408,23611,21675,23632,23641,23409,23651,23654,32700,24362,24361,24365,33396,24380,39739,23662,22913,22915,22925,22953,22954,22947,37740,37741,37742,37743,37744,37745,37746,37747,37748,37749,37750,37751,37752,37753,37754,37755,37756,37757,37758,37759,37760,37761,37762,37763,37764,37765,37766,37767,37768,37769,37770,37771,37772,37773,37774,37776,37777,37778,37779,37780,37781,37782,37783,37784,37785,37786,37787,37788,37789,37790,37791,37792,37793,37794,37795,37796,37797,37798,37799,37800,37801,37802,37803,37804,37805,37806,37807,37808,37809,37810,37811,37812,37813,37814,37815,37816,37817,37818,37819,37820,37821,37822,37823,37824,37825,37826,37827,37828,37829,37830,37831,37832,37833,37835,37836,37837,22935,22986,22955,22942,22948,22994,22962,22959,22999,22974,23045,23046,23005,23048,23011,23000,23033,23052,23049,23090,23092,23057,23075,23059,23104,23143,23114,23125,23100,23138,23157,33004,23210,23195,23159,23162,23230,23275,23218,23250,23252,23224,23264,23267,23281,23254,23270,23256,23260,23305,23319,23318,23346,23351,23360,23573,23580,23386,23397,23411,23377,23379,23394,39541,39543,39544,39546,39551,39549,39552,39553,39557,39560,39562,39568,39570,39571,39574,39576,39579,39580,39581,39583,39584,39586,39587,39589,39591,32415,32417,32419,32421,32424,32425,37838,37839,37840,37841,37842,37843,37844,37845,37847,37848,37849,37850,37851,37852,37853,37854,37855,37856,37857,37858,37859,37860,37861,37862,37863,37864,37865,37866,37867,37868,37869,37870,37871,37872,37873,37874,37875,37876,37877,37878,37879,37880,37881,37882,37883,37884,37885,37886,37887,37888,37889,37890,37891,37892,37893,37894,37895,37896,37897,37898,37899,37900,37901,37902,37903,37904,37905,37906,37907,37908,37909,37910,37911,37912,37913,37914,37915,37916,37917,37918,37919,37920,37921,37922,37923,37924,37925,37926,37927,37928,37929,37930,37931,37932,37933,37934,32429,32432,32446,32448,32449,32450,32457,32459,32460,32464,32468,32471,32475,32480,32481,32488,32491,32494,32495,32497,32498,32525,32502,32506,32507,32510,32513,32514,32515,32519,32520,32523,32524,32527,32529,32530,32535,32537,32540,32539,32543,32545,32546,32547,32548,32549,32550,32551,32554,32555,32556,32557,32559,32560,32561,32562,32563,32565,24186,30079,24027,30014,37013,29582,29585,29614,29602,29599,29647,29634,29649,29623,29619,29632,29641,29640,29669,29657,39036,29706,29673,29671,29662,29626,29682,29711,29738,29787,29734,29733,29736,29744,29742,29740,37935,37936,37937,37938,37939,37940,37941,37942,37943,37944,37945,37946,37947,37948,37949,37951,37952,37953,37954,37955,37956,37957,37958,37959,37960,37961,37962,37963,37964,37965,37966,37967,37968,37969,37970,37971,37972,37973,37974,37975,37976,37977,37978,37979,37980,37981,37982,37983,37984,37985,37986,37987,37988,37989,37990,37991,37992,37993,37994,37996,37997,37998,37999,38000,38001,38002,38003,38004,38005,38006,38007,38008,38009,38010,38011,38012,38013,38014,38015,38016,38017,38018,38019,38020,38033,38038,38040,38087,38095,38099,38100,38106,38118,38139,38172,38176,29723,29722,29761,29788,29783,29781,29785,29815,29805,29822,29852,29838,29824,29825,29831,29835,29854,29864,29865,29840,29863,29906,29882,38890,38891,38892,26444,26451,26462,26440,26473,26533,26503,26474,26483,26520,26535,26485,26536,26526,26541,26507,26487,26492,26608,26633,26584,26634,26601,26544,26636,26585,26549,26586,26547,26589,26624,26563,26552,26594,26638,26561,26621,26674,26675,26720,26721,26702,26722,26692,26724,26755,26653,26709,26726,26689,26727,26688,26686,26698,26697,26665,26805,26767,26740,26743,26771,26731,26818,26990,26876,26911,26912,26873,38183,38195,38205,38211,38216,38219,38229,38234,38240,38254,38260,38261,38263,38264,38265,38266,38267,38268,38269,38270,38272,38273,38274,38275,38276,38277,38278,38279,38280,38281,38282,38283,38284,38285,38286,38287,38288,38289,38290,38291,38292,38293,38294,38295,38296,38297,38298,38299,38300,38301,38302,38303,38304,38305,38306,38307,38308,38309,38310,38311,38312,38313,38314,38315,38316,38317,38318,38319,38320,38321,38322,38323,38324,38325,38326,38327,38328,38329,38330,38331,38332,38333,38334,38335,38336,38337,38338,38339,38340,38341,38342,38343,38344,38345,38346,38347,26916,26864,26891,26881,26967,26851,26896,26993,26937,26976,26946,26973,27012,26987,27008,27032,27000,26932,27084,27015,27016,27086,27017,26982,26979,27001,27035,27047,27067,27051,27053,27092,27057,27073,27082,27103,27029,27104,27021,27135,27183,27117,27159,27160,27237,27122,27204,27198,27296,27216,27227,27189,27278,27257,27197,27176,27224,27260,27281,27280,27305,27287,27307,29495,29522,27521,27522,27527,27524,27538,27539,27533,27546,27547,27553,27562,36715,36717,36721,36722,36723,36725,36726,36728,36727,36729,36730,36732,36734,36737,36738,36740,36743,36747,38348,38349,38350,38351,38352,38353,38354,38355,38356,38357,38358,38359,38360,38361,38362,38363,38364,38365,38366,38367,38368,38369,38370,38371,38372,38373,38374,38375,38380,38399,38407,38419,38424,38427,38430,38432,38435,38436,38437,38438,38439,38440,38441,38443,38444,38445,38447,38448,38455,38456,38457,38458,38462,38465,38467,38474,38478,38479,38481,38482,38483,38486,38487,38488,38489,38490,38492,38493,38494,38496,38499,38501,38502,38507,38509,38510,38511,38512,38513,38515,38520,38521,38522,38523,38524,38525,38526,38527,38528,38529,38530,38531,38532,38535,38537,38538,36749,36750,36751,36760,36762,36558,25099,25111,25115,25119,25122,25121,25125,25124,25132,33255,29935,29940,29951,29967,29969,29971,25908,26094,26095,26096,26122,26137,26482,26115,26133,26112,28805,26359,26141,26164,26161,26166,26165,32774,26207,26196,26177,26191,26198,26209,26199,26231,26244,26252,26279,26269,26302,26331,26332,26342,26345,36146,36147,36150,36155,36157,36160,36165,36166,36168,36169,36167,36173,36181,36185,35271,35274,35275,35276,35278,35279,35280,35281,29294,29343,29277,29286,29295,29310,29311,29316,29323,29325,29327,29330,25352,25394,25520,38540,38542,38545,38546,38547,38549,38550,38554,38555,38557,38558,38559,38560,38561,38562,38563,38564,38565,38566,38568,38569,38570,38571,38572,38573,38574,38575,38577,38578,38580,38581,38583,38584,38586,38587,38591,38594,38595,38600,38602,38603,38608,38609,38611,38612,38614,38615,38616,38617,38618,38619,38620,38621,38622,38623,38625,38626,38627,38628,38629,38630,38631,38635,38636,38637,38638,38640,38641,38642,38644,38645,38648,38650,38651,38652,38653,38655,38658,38659,38661,38666,38667,38668,38672,38673,38674,38676,38677,38679,38680,38681,38682,38683,38685,38687,38688,25663,25816,32772,27626,27635,27645,27637,27641,27653,27655,27654,27661,27669,27672,27673,27674,27681,27689,27684,27690,27698,25909,25941,25963,29261,29266,29270,29232,34402,21014,32927,32924,32915,32956,26378,32957,32945,32939,32941,32948,32951,32999,33000,33001,33002,32987,32962,32964,32985,32973,32983,26384,32989,33003,33009,33012,33005,33037,33038,33010,33020,26389,33042,35930,33078,33054,33068,33048,33074,33096,33100,33107,33140,33113,33114,33137,33120,33129,33148,33149,33133,33127,22605,23221,33160,33154,33169,28373,33187,33194,33228,26406,33226,33211,38689,38690,38691,38692,38693,38694,38695,38696,38697,38699,38700,38702,38703,38705,38707,38708,38709,38710,38711,38714,38715,38716,38717,38719,38720,38721,38722,38723,38724,38725,38726,38727,38728,38729,38730,38731,38732,38733,38734,38735,38736,38737,38740,38741,38743,38744,38746,38748,38749,38751,38755,38756,38758,38759,38760,38762,38763,38764,38765,38766,38767,38768,38769,38770,38773,38775,38776,38777,38778,38779,38781,38782,38783,38784,38785,38786,38787,38788,38790,38791,38792,38793,38794,38796,38798,38799,38800,38803,38805,38806,38807,38809,38810,38811,38812,38813,33217,33190,27428,27447,27449,27459,27462,27481,39121,39122,39123,39125,39129,39130,27571,24384,27586,35315,26000,40785,26003,26044,26054,26052,26051,26060,26062,26066,26070,28800,28828,28822,28829,28859,28864,28855,28843,28849,28904,28874,28944,28947,28950,28975,28977,29043,29020,29032,28997,29042,29002,29048,29050,29080,29107,29109,29096,29088,29152,29140,29159,29177,29213,29224,28780,28952,29030,29113,25150,25149,25155,25160,25161,31035,31040,31046,31049,31067,31068,31059,31066,31074,31063,31072,31087,31079,31098,31109,31114,31130,31143,31155,24529,24528,38814,38815,38817,38818,38820,38821,38822,38823,38824,38825,38826,38828,38830,38832,38833,38835,38837,38838,38839,38840,38841,38842,38843,38844,38845,38846,38847,38848,38849,38850,38851,38852,38853,38854,38855,38856,38857,38858,38859,38860,38861,38862,38863,38864,38865,38866,38867,38868,38869,38870,38871,38872,38873,38874,38875,38876,38877,38878,38879,38880,38881,38882,38883,38884,38885,38888,38894,38895,38896,38897,38898,38900,38903,38904,38905,38906,38907,38908,38909,38910,38911,38912,38913,38914,38915,38916,38917,38918,38919,38920,38921,38922,38923,38924,38925,38926,24636,24669,24666,24679,24641,24665,24675,24747,24838,24845,24925,25001,24989,25035,25041,25094,32896,32895,27795,27894,28156,30710,30712,30720,30729,30743,30744,30737,26027,30765,30748,30749,30777,30778,30779,30751,30780,30757,30764,30755,30761,30798,30829,30806,30807,30758,30800,30791,30796,30826,30875,30867,30874,30855,30876,30881,30883,30898,30905,30885,30932,30937,30921,30956,30962,30981,30964,30995,31012,31006,31028,40859,40697,40699,40700,30449,30468,30477,30457,30471,30472,30490,30498,30489,30509,30502,30517,30520,30544,30545,30535,30531,30554,30568,38927,38928,38929,38930,38931,38932,38933,38934,38935,38936,38937,38938,38939,38940,38941,38942,38943,38944,38945,38946,38947,38948,38949,38950,38951,38952,38953,38954,38955,38956,38957,38958,38959,38960,38961,38962,38963,38964,38965,38966,38967,38968,38969,38970,38971,38972,38973,38974,38975,38976,38977,38978,38979,38980,38981,38982,38983,38984,38985,38986,38987,38988,38989,38990,38991,38992,38993,38994,38995,38996,38997,38998,38999,39000,39001,39002,39003,39004,39005,39006,39007,39008,39009,39010,39011,39012,39013,39014,39015,39016,39017,39018,39019,39020,39021,39022,30562,30565,30591,30605,30589,30592,30604,30609,30623,30624,30640,30645,30653,30010,30016,30030,30027,30024,30043,30066,30073,30083,32600,32609,32607,35400,32616,32628,32625,32633,32641,32638,30413,30437,34866,38021,38022,38023,38027,38026,38028,38029,38031,38032,38036,38039,38037,38042,38043,38044,38051,38052,38059,38058,38061,38060,38063,38064,38066,38068,38070,38071,38072,38073,38074,38076,38077,38079,38084,38088,38089,38090,38091,38092,38093,38094,38096,38097,38098,38101,38102,38103,38105,38104,38107,38110,38111,38112,38114,38116,38117,38119,38120,38122,39023,39024,39025,39026,39027,39028,39051,39054,39058,39061,39065,39075,39080,39081,39082,39083,39084,39085,39086,39087,39088,39089,39090,39091,39092,39093,39094,39095,39096,39097,39098,39099,39100,39101,39102,39103,39104,39105,39106,39107,39108,39109,39110,39111,39112,39113,39114,39115,39116,39117,39119,39120,39124,39126,39127,39131,39132,39133,39136,39137,39138,39139,39140,39141,39142,39145,39146,39147,39148,39149,39150,39151,39152,39153,39154,39155,39156,39157,39158,39159,39160,39161,39162,39163,39164,39165,39166,39167,39168,39169,39170,39171,39172,39173,39174,39175,38121,38123,38126,38127,38131,38132,38133,38135,38137,38140,38141,38143,38147,38146,38150,38151,38153,38154,38157,38158,38159,38162,38163,38164,38165,38166,38168,38171,38173,38174,38175,38178,38186,38187,38185,38188,38193,38194,38196,38198,38199,38200,38204,38206,38207,38210,38197,38212,38213,38214,38217,38220,38222,38223,38226,38227,38228,38230,38231,38232,38233,38235,38238,38239,38237,38241,38242,38244,38245,38246,38247,38248,38249,38250,38251,38252,38255,38257,38258,38259,38202,30695,30700,38601,31189,31213,31203,31211,31238,23879,31235,31234,31262,31252,39176,39177,39178,39179,39180,39182,39183,39185,39186,39187,39188,39189,39190,39191,39192,39193,39194,39195,39196,39197,39198,39199,39200,39201,39202,39203,39204,39205,39206,39207,39208,39209,39210,39211,39212,39213,39215,39216,39217,39218,39219,39220,39221,39222,39223,39224,39225,39226,39227,39228,39229,39230,39231,39232,39233,39234,39235,39236,39237,39238,39239,39240,39241,39242,39243,39244,39245,39246,39247,39248,39249,39250,39251,39254,39255,39256,39257,39258,39259,39260,39261,39262,39263,39264,39265,39266,39268,39270,39283,39288,39289,39291,39294,39298,39299,39305,31289,31287,31313,40655,39333,31344,30344,30350,30355,30361,30372,29918,29920,29996,40480,40482,40488,40489,40490,40491,40492,40498,40497,40502,40504,40503,40505,40506,40510,40513,40514,40516,40518,40519,40520,40521,40523,40524,40526,40529,40533,40535,40538,40539,40540,40542,40547,40550,40551,40552,40553,40554,40555,40556,40561,40557,40563,30098,30100,30102,30112,30109,30124,30115,30131,30132,30136,30148,30129,30128,30147,30146,30166,30157,30179,30184,30182,30180,30187,30183,30211,30193,30204,30207,30224,30208,30213,30220,30231,30218,30245,30232,30229,30233,39308,39310,39322,39323,39324,39325,39326,39327,39328,39329,39330,39331,39332,39334,39335,39337,39338,39339,39340,39341,39342,39343,39344,39345,39346,39347,39348,39349,39350,39351,39352,39353,39354,39355,39356,39357,39358,39359,39360,39361,39362,39363,39364,39365,39366,39367,39368,39369,39370,39371,39372,39373,39374,39375,39376,39377,39378,39379,39380,39381,39382,39383,39384,39385,39386,39387,39388,39389,39390,39391,39392,39393,39394,39395,39396,39397,39398,39399,39400,39401,39402,39403,39404,39405,39406,39407,39408,39409,39410,39411,39412,39413,39414,39415,39416,39417,30235,30268,30242,30240,30272,30253,30256,30271,30261,30275,30270,30259,30285,30302,30292,30300,30294,30315,30319,32714,31462,31352,31353,31360,31366,31368,31381,31398,31392,31404,31400,31405,31411,34916,34921,34930,34941,34943,34946,34978,35014,34999,35004,35017,35042,35022,35043,35045,35057,35098,35068,35048,35070,35056,35105,35097,35091,35099,35082,35124,35115,35126,35137,35174,35195,30091,32997,30386,30388,30684,32786,32788,32790,32796,32800,32802,32805,32806,32807,32809,32808,32817,32779,32821,32835,32838,32845,32850,32873,32881,35203,39032,39040,39043,39418,39419,39420,39421,39422,39423,39424,39425,39426,39427,39428,39429,39430,39431,39432,39433,39434,39435,39436,39437,39438,39439,39440,39441,39442,39443,39444,39445,39446,39447,39448,39449,39450,39451,39452,39453,39454,39455,39456,39457,39458,39459,39460,39461,39462,39463,39464,39465,39466,39467,39468,39469,39470,39471,39472,39473,39474,39475,39476,39477,39478,39479,39480,39481,39482,39483,39484,39485,39486,39487,39488,39489,39490,39491,39492,39493,39494,39495,39496,39497,39498,39499,39500,39501,39502,39503,39504,39505,39506,39507,39508,39509,39510,39511,39512,39513,39049,39052,39053,39055,39060,39066,39067,39070,39071,39073,39074,39077,39078,34381,34388,34412,34414,34431,34426,34428,34427,34472,34445,34443,34476,34461,34471,34467,34474,34451,34473,34486,34500,34485,34510,34480,34490,34481,34479,34505,34511,34484,34537,34545,34546,34541,34547,34512,34579,34526,34548,34527,34520,34513,34563,34567,34552,34568,34570,34573,34569,34595,34619,34590,34597,34606,34586,34622,34632,34612,34609,34601,34615,34623,34690,34594,34685,34686,34683,34656,34672,34636,34670,34699,34643,34659,34684,34660,34649,34661,34707,34735,34728,34770,39514,39515,39516,39517,39518,39519,39520,39521,39522,39523,39524,39525,39526,39527,39528,39529,39530,39531,39538,39555,39561,39565,39566,39572,39573,39577,39590,39593,39594,39595,39596,39597,39598,39599,39602,39603,39604,39605,39609,39611,39613,39614,39615,39619,39620,39622,39623,39624,39625,39626,39629,39630,39631,39632,39634,39636,39637,39638,39639,39641,39642,39643,39644,39645,39646,39648,39650,39651,39652,39653,39655,39656,39657,39658,39660,39662,39664,39665,39666,39667,39668,39669,39670,39671,39672,39674,39676,39677,39678,39679,39680,39681,39682,39684,39685,39686,34758,34696,34693,34733,34711,34691,34731,34789,34732,34741,34739,34763,34771,34749,34769,34752,34762,34779,34794,34784,34798,34838,34835,34814,34826,34843,34849,34873,34876,32566,32578,32580,32581,33296,31482,31485,31496,31491,31492,31509,31498,31531,31503,31559,31544,31530,31513,31534,31537,31520,31525,31524,31539,31550,31518,31576,31578,31557,31605,31564,31581,31584,31598,31611,31586,31602,31601,31632,31654,31655,31672,31660,31645,31656,31621,31658,31644,31650,31659,31668,31697,31681,31692,31709,31706,31717,31718,31722,31756,31742,31740,31759,31766,31755,39687,39689,39690,39691,39692,39693,39694,39696,39697,39698,39700,39701,39702,39703,39704,39705,39706,39707,39708,39709,39710,39712,39713,39714,39716,39717,39718,39719,39720,39721,39722,39723,39724,39725,39726,39728,39729,39731,39732,39733,39734,39735,39736,39737,39738,39741,39742,39743,39744,39750,39754,39755,39756,39758,39760,39762,39763,39765,39766,39767,39768,39769,39770,39771,39772,39773,39774,39775,39776,39777,39778,39779,39780,39781,39782,39783,39784,39785,39786,39787,39788,39789,39790,39791,39792,39793,39794,39795,39796,39797,39798,39799,39800,39801,39802,39803,31775,31786,31782,31800,31809,31808,33278,33281,33282,33284,33260,34884,33313,33314,33315,33325,33327,33320,33323,33336,33339,33331,33332,33342,33348,33353,33355,33359,33370,33375,33384,34942,34949,34952,35032,35039,35166,32669,32671,32679,32687,32688,32690,31868,25929,31889,31901,31900,31902,31906,31922,31932,31933,31937,31943,31948,31949,31944,31941,31959,31976,33390,26280,32703,32718,32725,32741,32737,32742,32745,32750,32755,31992,32119,32166,32174,32327,32411,40632,40628,36211,36228,36244,36241,36273,36199,36205,35911,35913,37194,37200,37198,37199,37220,39804,39805,39806,39807,39808,39809,39810,39811,39812,39813,39814,39815,39816,39817,39818,39819,39820,39821,39822,39823,39824,39825,39826,39827,39828,39829,39830,39831,39832,39833,39834,39835,39836,39837,39838,39839,39840,39841,39842,39843,39844,39845,39846,39847,39848,39849,39850,39851,39852,39853,39854,39855,39856,39857,39858,39859,39860,39861,39862,39863,39864,39865,39866,39867,39868,39869,39870,39871,39872,39873,39874,39875,39876,39877,39878,39879,39880,39881,39882,39883,39884,39885,39886,39887,39888,39889,39890,39891,39892,39893,39894,39895,39896,39897,39898,39899,37218,37217,37232,37225,37231,37245,37246,37234,37236,37241,37260,37253,37264,37261,37265,37282,37283,37290,37293,37294,37295,37301,37300,37306,35925,40574,36280,36331,36357,36441,36457,36277,36287,36284,36282,36292,36310,36311,36314,36318,36302,36303,36315,36294,36332,36343,36344,36323,36345,36347,36324,36361,36349,36372,36381,36383,36396,36398,36387,36399,36410,36416,36409,36405,36413,36401,36425,36417,36418,36433,36434,36426,36464,36470,36476,36463,36468,36485,36495,36500,36496,36508,36510,35960,35970,35978,35973,35992,35988,26011,35286,35294,35290,35292,39900,39901,39902,39903,39904,39905,39906,39907,39908,39909,39910,39911,39912,39913,39914,39915,39916,39917,39918,39919,39920,39921,39922,39923,39924,39925,39926,39927,39928,39929,39930,39931,39932,39933,39934,39935,39936,39937,39938,39939,39940,39941,39942,39943,39944,39945,39946,39947,39948,39949,39950,39951,39952,39953,39954,39955,39956,39957,39958,39959,39960,39961,39962,39963,39964,39965,39966,39967,39968,39969,39970,39971,39972,39973,39974,39975,39976,39977,39978,39979,39980,39981,39982,39983,39984,39985,39986,39987,39988,39989,39990,39991,39992,39993,39994,39995,35301,35307,35311,35390,35622,38739,38633,38643,38639,38662,38657,38664,38671,38670,38698,38701,38704,38718,40832,40835,40837,40838,40839,40840,40841,40842,40844,40702,40715,40717,38585,38588,38589,38606,38610,30655,38624,37518,37550,37576,37694,37738,37834,37775,37950,37995,40063,40066,40069,40070,40071,40072,31267,40075,40078,40080,40081,40082,40084,40085,40090,40091,40094,40095,40096,40097,40098,40099,40101,40102,40103,40104,40105,40107,40109,40110,40112,40113,40114,40115,40116,40117,40118,40119,40122,40123,40124,40125,40132,40133,40134,40135,40138,40139,39996,39997,39998,39999,40000,40001,40002,40003,40004,40005,40006,40007,40008,40009,40010,40011,40012,40013,40014,40015,40016,40017,40018,40019,40020,40021,40022,40023,40024,40025,40026,40027,40028,40029,40030,40031,40032,40033,40034,40035,40036,40037,40038,40039,40040,40041,40042,40043,40044,40045,40046,40047,40048,40049,40050,40051,40052,40053,40054,40055,40056,40057,40058,40059,40061,40062,40064,40067,40068,40073,40074,40076,40079,40083,40086,40087,40088,40089,40093,40106,40108,40111,40121,40126,40127,40128,40129,40130,40136,40137,40145,40146,40154,40155,40160,40161,40140,40141,40142,40143,40144,40147,40148,40149,40151,40152,40153,40156,40157,40159,40162,38780,38789,38801,38802,38804,38831,38827,38819,38834,38836,39601,39600,39607,40536,39606,39610,39612,39617,39616,39621,39618,39627,39628,39633,39749,39747,39751,39753,39752,39757,39761,39144,39181,39214,39253,39252,39647,39649,39654,39663,39659,39675,39661,39673,39688,39695,39699,39711,39715,40637,40638,32315,40578,40583,40584,40587,40594,37846,40605,40607,40667,40668,40669,40672,40671,40674,40681,40679,40677,40682,40687,40738,40748,40751,40761,40759,40765,40766,40772,40163,40164,40165,40166,40167,40168,40169,40170,40171,40172,40173,40174,40175,40176,40177,40178,40179,40180,40181,40182,40183,40184,40185,40186,40187,40188,40189,40190,40191,40192,40193,40194,40195,40196,40197,40198,40199,40200,40201,40202,40203,40204,40205,40206,40207,40208,40209,40210,40211,40212,40213,40214,40215,40216,40217,40218,40219,40220,40221,40222,40223,40224,40225,40226,40227,40228,40229,40230,40231,40232,40233,40234,40235,40236,40237,40238,40239,40240,40241,40242,40243,40244,40245,40246,40247,40248,40249,40250,40251,40252,40253,40254,40255,40256,40257,40258,57908,57909,57910,57911,57912,57913,57914,57915,57916,57917,57918,57919,57920,57921,57922,57923,57924,57925,57926,57927,57928,57929,57930,57931,57932,57933,57934,57935,57936,57937,57938,57939,57940,57941,57942,57943,57944,57945,57946,57947,57948,57949,57950,57951,57952,57953,57954,57955,57956,57957,57958,57959,57960,57961,57962,57963,57964,57965,57966,57967,57968,57969,57970,57971,57972,57973,57974,57975,57976,57977,57978,57979,57980,57981,57982,57983,57984,57985,57986,57987,57988,57989,57990,57991,57992,57993,57994,57995,57996,57997,57998,57999,58000,58001,40259,40260,40261,40262,40263,40264,40265,40266,40267,40268,40269,40270,40271,40272,40273,40274,40275,40276,40277,40278,40279,40280,40281,40282,40283,40284,40285,40286,40287,40288,40289,40290,40291,40292,40293,40294,40295,40296,40297,40298,40299,40300,40301,40302,40303,40304,40305,40306,40307,40308,40309,40310,40311,40312,40313,40314,40315,40316,40317,40318,40319,40320,40321,40322,40323,40324,40325,40326,40327,40328,40329,40330,40331,40332,40333,40334,40335,40336,40337,40338,40339,40340,40341,40342,40343,40344,40345,40346,40347,40348,40349,40350,40351,40352,40353,40354,58002,58003,58004,58005,58006,58007,58008,58009,58010,58011,58012,58013,58014,58015,58016,58017,58018,58019,58020,58021,58022,58023,58024,58025,58026,58027,58028,58029,58030,58031,58032,58033,58034,58035,58036,58037,58038,58039,58040,58041,58042,58043,58044,58045,58046,58047,58048,58049,58050,58051,58052,58053,58054,58055,58056,58057,58058,58059,58060,58061,58062,58063,58064,58065,58066,58067,58068,58069,58070,58071,58072,58073,58074,58075,58076,58077,58078,58079,58080,58081,58082,58083,58084,58085,58086,58087,58088,58089,58090,58091,58092,58093,58094,58095,40355,40356,40357,40358,40359,40360,40361,40362,40363,40364,40365,40366,40367,40368,40369,40370,40371,40372,40373,40374,40375,40376,40377,40378,40379,40380,40381,40382,40383,40384,40385,40386,40387,40388,40389,40390,40391,40392,40393,40394,40395,40396,40397,40398,40399,40400,40401,40402,40403,40404,40405,40406,40407,40408,40409,40410,40411,40412,40413,40414,40415,40416,40417,40418,40419,40420,40421,40422,40423,40424,40425,40426,40427,40428,40429,40430,40431,40432,40433,40434,40435,40436,40437,40438,40439,40440,40441,40442,40443,40444,40445,40446,40447,40448,40449,40450,58096,58097,58098,58099,58100,58101,58102,58103,58104,58105,58106,58107,58108,58109,58110,58111,58112,58113,58114,58115,58116,58117,58118,58119,58120,58121,58122,58123,58124,58125,58126,58127,58128,58129,58130,58131,58132,58133,58134,58135,58136,58137,58138,58139,58140,58141,58142,58143,58144,58145,58146,58147,58148,58149,58150,58151,58152,58153,58154,58155,58156,58157,58158,58159,58160,58161,58162,58163,58164,58165,58166,58167,58168,58169,58170,58171,58172,58173,58174,58175,58176,58177,58178,58179,58180,58181,58182,58183,58184,58185,58186,58187,58188,58189,40451,40452,40453,40454,40455,40456,40457,40458,40459,40460,40461,40462,40463,40464,40465,40466,40467,40468,40469,40470,40471,40472,40473,40474,40475,40476,40477,40478,40484,40487,40494,40496,40500,40507,40508,40512,40525,40528,40530,40531,40532,40534,40537,40541,40543,40544,40545,40546,40549,40558,40559,40562,40564,40565,40566,40567,40568,40569,40570,40571,40572,40573,40576,40577,40579,40580,40581,40582,40585,40586,40588,40589,40590,40591,40592,40593,40596,40597,40598,40599,40600,40601,40602,40603,40604,40606,40608,40609,40610,40611,40612,40613,40615,40616,40617,40618,58190,58191,58192,58193,58194,58195,58196,58197,58198,58199,58200,58201,58202,58203,58204,58205,58206,58207,58208,58209,58210,58211,58212,58213,58214,58215,58216,58217,58218,58219,58220,58221,58222,58223,58224,58225,58226,58227,58228,58229,58230,58231,58232,58233,58234,58235,58236,58237,58238,58239,58240,58241,58242,58243,58244,58245,58246,58247,58248,58249,58250,58251,58252,58253,58254,58255,58256,58257,58258,58259,58260,58261,58262,58263,58264,58265,58266,58267,58268,58269,58270,58271,58272,58273,58274,58275,58276,58277,58278,58279,58280,58281,58282,58283,40619,40620,40621,40622,40623,40624,40625,40626,40627,40629,40630,40631,40633,40634,40636,40639,40640,40641,40642,40643,40645,40646,40647,40648,40650,40651,40652,40656,40658,40659,40661,40662,40663,40665,40666,40670,40673,40675,40676,40678,40680,40683,40684,40685,40686,40688,40689,40690,40691,40692,40693,40694,40695,40696,40698,40701,40703,40704,40705,40706,40707,40708,40709,40710,40711,40712,40713,40714,40716,40719,40721,40722,40724,40725,40726,40728,40730,40731,40732,40733,40734,40735,40737,40739,40740,40741,40742,40743,40744,40745,40746,40747,40749,40750,40752,40753,58284,58285,58286,58287,58288,58289,58290,58291,58292,58293,58294,58295,58296,58297,58298,58299,58300,58301,58302,58303,58304,58305,58306,58307,58308,58309,58310,58311,58312,58313,58314,58315,58316,58317,58318,58319,58320,58321,58322,58323,58324,58325,58326,58327,58328,58329,58330,58331,58332,58333,58334,58335,58336,58337,58338,58339,58340,58341,58342,58343,58344,58345,58346,58347,58348,58349,58350,58351,58352,58353,58354,58355,58356,58357,58358,58359,58360,58361,58362,58363,58364,58365,58366,58367,58368,58369,58370,58371,58372,58373,58374,58375,58376,58377,40754,40755,40756,40757,40758,40760,40762,40764,40767,40768,40769,40770,40771,40773,40774,40775,40776,40777,40778,40779,40780,40781,40782,40783,40786,40787,40788,40789,40790,40791,40792,40793,40794,40795,40796,40797,40798,40799,40800,40801,40802,40803,40804,40805,40806,40807,40808,40809,40810,40811,40812,40813,40814,40815,40816,40817,40818,40819,40820,40821,40822,40823,40824,40825,40826,40827,40828,40829,40830,40833,40834,40845,40846,40847,40848,40849,40850,40851,40852,40853,40854,40855,40856,40860,40861,40862,40865,40866,40867,40868,40869,63788,63865,63893,63975,63985,58378,58379,58380,58381,58382,58383,58384,58385,58386,58387,58388,58389,58390,58391,58392,58393,58394,58395,58396,58397,58398,58399,58400,58401,58402,58403,58404,58405,58406,58407,58408,58409,58410,58411,58412,58413,58414,58415,58416,58417,58418,58419,58420,58421,58422,58423,58424,58425,58426,58427,58428,58429,58430,58431,58432,58433,58434,58435,58436,58437,58438,58439,58440,58441,58442,58443,58444,58445,58446,58447,58448,58449,58450,58451,58452,58453,58454,58455,58456,58457,58458,58459,58460,58461,58462,58463,58464,58465,58466,58467,58468,58469,58470,58471,64012,64013,64014,64015,64017,64019,64020,64024,64031,64032,64033,64035,64036,64039,64040,64041,11905,59414,59415,59416,11908,13427,13383,11912,11915,59422,13726,13850,13838,11916,11927,14702,14616,59430,14799,14815,14963,14800,59435,59436,15182,15470,15584,11943,59441,59442,11946,16470,16735,11950,17207,11955,11958,11959,59451,17329,17324,11963,17373,17622,18017,17996,59459,18211,18217,18300,18317,11978,18759,18810,18813,18818,18819,18821,18822,18847,18843,18871,18870,59476,59477,19619,19615,19616,19617,19575,19618,19731,19732,19733,19734,19735,19736,19737,19886,59492,58472,58473,58474,58475,58476,58477,58478,58479,58480,58481,58482,58483,58484,58485,58486,58487,58488,58489,58490,58491,58492,58493,58494,58495,58496,58497,58498,58499,58500,58501,58502,58503,58504,58505,58506,58507,58508,58509,58510,58511,58512,58513,58514,58515,58516,58517,58518,58519,58520,58521,58522,58523,58524,58525,58526,58527,58528,58529,58530,58531,58532,58533,58534,58535,58536,58537,58538,58539,58540,58541,58542,58543,58544,58545,58546,58547,58548,58549,58550,58551,58552,58553,58554,58555,58556,58557,58558,58559,58560,58561,58562,58563,58564,58565], + "gb18030-ranges":[[0,128],[36,165],[38,169],[45,178],[50,184],[81,216],[89,226],[95,235],[96,238],[100,244],[103,248],[104,251],[105,253],[109,258],[126,276],[133,284],[148,300],[172,325],[175,329],[179,334],[208,364],[306,463],[307,465],[308,467],[309,469],[310,471],[311,473],[312,475],[313,477],[341,506],[428,594],[443,610],[544,712],[545,716],[558,730],[741,930],[742,938],[749,962],[750,970],[805,1026],[819,1104],[820,1106],[7922,8209],[7924,8215],[7925,8218],[7927,8222],[7934,8231],[7943,8241],[7944,8244],[7945,8246],[7950,8252],[8062,8365],[8148,8452],[8149,8454],[8152,8458],[8164,8471],[8174,8482],[8236,8556],[8240,8570],[8262,8596],[8264,8602],[8374,8713],[8380,8720],[8381,8722],[8384,8726],[8388,8731],[8390,8737],[8392,8740],[8393,8742],[8394,8748],[8396,8751],[8401,8760],[8406,8766],[8416,8777],[8419,8781],[8424,8787],[8437,8802],[8439,8808],[8445,8816],[8482,8854],[8485,8858],[8496,8870],[8521,8896],[8603,8979],[8936,9322],[8946,9372],[9046,9548],[9050,9588],[9063,9616],[9066,9622],[9076,9634],[9092,9652],[9100,9662],[9108,9672],[9111,9676],[9113,9680],[9131,9702],[9162,9735],[9164,9738],[9218,9793],[9219,9795],[11329,11906],[11331,11909],[11334,11913],[11336,11917],[11346,11928],[11361,11944],[11363,11947],[11366,11951],[11370,11956],[11372,11960],[11375,11964],[11389,11979],[11682,12284],[11686,12292],[11687,12312],[11692,12319],[11694,12330],[11714,12351],[11716,12436],[11723,12447],[11725,12535],[11730,12543],[11736,12586],[11982,12842],[11989,12850],[12102,12964],[12336,13200],[12348,13215],[12350,13218],[12384,13253],[12393,13263],[12395,13267],[12397,13270],[12510,13384],[12553,13428],[12851,13727],[12962,13839],[12973,13851],[13738,14617],[13823,14703],[13919,14801],[13933,14816],[14080,14964],[14298,15183],[14585,15471],[14698,15585],[15583,16471],[15847,16736],[16318,17208],[16434,17325],[16438,17330],[16481,17374],[16729,17623],[17102,17997],[17122,18018],[17315,18212],[17320,18218],[17402,18301],[17418,18318],[17859,18760],[17909,18811],[17911,18814],[17915,18820],[17916,18823],[17936,18844],[17939,18848],[17961,18872],[18664,19576],[18703,19620],[18814,19738],[18962,19887],[19043,40870],[33469,59244],[33470,59336],[33471,59367],[33484,59413],[33485,59417],[33490,59423],[33497,59431],[33501,59437],[33505,59443],[33513,59452],[33520,59460],[33536,59478],[33550,59493],[37845,63789],[37921,63866],[37948,63894],[38029,63976],[38038,63986],[38064,64016],[38065,64018],[38066,64021],[38069,64025],[38075,64034],[38076,64037],[38078,64042],[39108,65074],[39109,65093],[39113,65107],[39114,65112],[39115,65127],[39116,65132],[39265,65375],[39394,65510],[189000,65536]], + "jis0208":[12288,12289,12290,65292,65294,12539,65306,65307,65311,65281,12443,12444,180,65344,168,65342,65507,65343,12541,12542,12445,12446,12291,20189,12293,12294,12295,12540,8213,8208,65295,65340,65374,8741,65372,8230,8229,8216,8217,8220,8221,65288,65289,12308,12309,65339,65341,65371,65373,12296,12297,12298,12299,12300,12301,12302,12303,12304,12305,65291,65293,177,215,247,65309,8800,65308,65310,8806,8807,8734,8756,9794,9792,176,8242,8243,8451,65509,65284,65504,65505,65285,65283,65286,65290,65312,167,9734,9733,9675,9679,9678,9671,9670,9633,9632,9651,9650,9661,9660,8251,12306,8594,8592,8593,8595,12307,null,null,null,null,null,null,null,null,null,null,null,8712,8715,8838,8839,8834,8835,8746,8745,null,null,null,null,null,null,null,null,8743,8744,65506,8658,8660,8704,8707,null,null,null,null,null,null,null,null,null,null,null,8736,8869,8978,8706,8711,8801,8786,8810,8811,8730,8765,8733,8757,8747,8748,null,null,null,null,null,null,null,8491,8240,9839,9837,9834,8224,8225,182,null,null,null,null,9711,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,65296,65297,65298,65299,65300,65301,65302,65303,65304,65305,null,null,null,null,null,null,null,65313,65314,65315,65316,65317,65318,65319,65320,65321,65322,65323,65324,65325,65326,65327,65328,65329,65330,65331,65332,65333,65334,65335,65336,65337,65338,null,null,null,null,null,null,65345,65346,65347,65348,65349,65350,65351,65352,65353,65354,65355,65356,65357,65358,65359,65360,65361,65362,65363,65364,65365,65366,65367,65368,65369,65370,null,null,null,null,12353,12354,12355,12356,12357,12358,12359,12360,12361,12362,12363,12364,12365,12366,12367,12368,12369,12370,12371,12372,12373,12374,12375,12376,12377,12378,12379,12380,12381,12382,12383,12384,12385,12386,12387,12388,12389,12390,12391,12392,12393,12394,12395,12396,12397,12398,12399,12400,12401,12402,12403,12404,12405,12406,12407,12408,12409,12410,12411,12412,12413,12414,12415,12416,12417,12418,12419,12420,12421,12422,12423,12424,12425,12426,12427,12428,12429,12430,12431,12432,12433,12434,12435,null,null,null,null,null,null,null,null,null,null,null,12449,12450,12451,12452,12453,12454,12455,12456,12457,12458,12459,12460,12461,12462,12463,12464,12465,12466,12467,12468,12469,12470,12471,12472,12473,12474,12475,12476,12477,12478,12479,12480,12481,12482,12483,12484,12485,12486,12487,12488,12489,12490,12491,12492,12493,12494,12495,12496,12497,12498,12499,12500,12501,12502,12503,12504,12505,12506,12507,12508,12509,12510,12511,12512,12513,12514,12515,12516,12517,12518,12519,12520,12521,12522,12523,12524,12525,12526,12527,12528,12529,12530,12531,12532,12533,12534,null,null,null,null,null,null,null,null,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,null,null,null,null,null,null,null,null,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,963,964,965,966,967,968,969,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,1040,1041,1042,1043,1044,1045,1025,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,1072,1073,1074,1075,1076,1077,1105,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,null,null,null,null,null,null,null,null,null,null,null,null,null,9472,9474,9484,9488,9496,9492,9500,9516,9508,9524,9532,9473,9475,9487,9491,9499,9495,9507,9523,9515,9531,9547,9504,9519,9512,9527,9535,9501,9520,9509,9528,9538,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,9312,9313,9314,9315,9316,9317,9318,9319,9320,9321,9322,9323,9324,9325,9326,9327,9328,9329,9330,9331,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,null,13129,13076,13090,13133,13080,13095,13059,13110,13137,13143,13069,13094,13091,13099,13130,13115,13212,13213,13214,13198,13199,13252,13217,null,null,null,null,null,null,null,null,13179,12317,12319,8470,13261,8481,12964,12965,12966,12967,12968,12849,12850,12857,13182,13181,13180,8786,8801,8747,8750,8721,8730,8869,8736,8735,8895,8757,8745,8746,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,20124,21782,23043,38463,21696,24859,25384,23030,36898,33909,33564,31312,24746,25569,28197,26093,33894,33446,39925,26771,22311,26017,25201,23451,22992,34427,39156,32098,32190,39822,25110,31903,34999,23433,24245,25353,26263,26696,38343,38797,26447,20197,20234,20301,20381,20553,22258,22839,22996,23041,23561,24799,24847,24944,26131,26885,28858,30031,30064,31227,32173,32239,32963,33806,34915,35586,36949,36986,21307,20117,20133,22495,32946,37057,30959,19968,22769,28322,36920,31282,33576,33419,39983,20801,21360,21693,21729,22240,23035,24341,39154,28139,32996,34093,38498,38512,38560,38907,21515,21491,23431,28879,32701,36802,38632,21359,40284,31418,19985,30867,33276,28198,22040,21764,27421,34074,39995,23013,21417,28006,29916,38287,22082,20113,36939,38642,33615,39180,21473,21942,23344,24433,26144,26355,26628,27704,27891,27945,29787,30408,31310,38964,33521,34907,35424,37613,28082,30123,30410,39365,24742,35585,36234,38322,27022,21421,20870,22290,22576,22852,23476,24310,24616,25513,25588,27839,28436,28814,28948,29017,29141,29503,32257,33398,33489,34199,36960,37467,40219,22633,26044,27738,29989,20985,22830,22885,24448,24540,25276,26106,27178,27431,27572,29579,32705,35158,40236,40206,40644,23713,27798,33659,20740,23627,25014,33222,26742,29281,20057,20474,21368,24681,28201,31311,38899,19979,21270,20206,20309,20285,20385,20339,21152,21487,22025,22799,23233,23478,23521,31185,26247,26524,26550,27468,27827,28779,29634,31117,31166,31292,31623,33457,33499,33540,33655,33775,33747,34662,35506,22057,36008,36838,36942,38686,34442,20420,23784,25105,29273,30011,33253,33469,34558,36032,38597,39187,39381,20171,20250,35299,22238,22602,22730,24315,24555,24618,24724,24674,25040,25106,25296,25913,39745,26214,26800,28023,28784,30028,30342,32117,33445,34809,38283,38542,35997,20977,21182,22806,21683,23475,23830,24936,27010,28079,30861,33995,34903,35442,37799,39608,28012,39336,34521,22435,26623,34510,37390,21123,22151,21508,24275,25313,25785,26684,26680,27579,29554,30906,31339,35226,35282,36203,36611,37101,38307,38548,38761,23398,23731,27005,38989,38990,25499,31520,27179,27263,26806,39949,28511,21106,21917,24688,25324,27963,28167,28369,33883,35088,36676,19988,39993,21494,26907,27194,38788,26666,20828,31427,33970,37340,37772,22107,40232,26658,33541,33841,31909,21000,33477,29926,20094,20355,20896,23506,21002,21208,21223,24059,21914,22570,23014,23436,23448,23515,24178,24185,24739,24863,24931,25022,25563,25954,26577,26707,26874,27454,27475,27735,28450,28567,28485,29872,29976,30435,30475,31487,31649,31777,32233,32566,32752,32925,33382,33694,35251,35532,36011,36996,37969,38291,38289,38306,38501,38867,39208,33304,20024,21547,23736,24012,29609,30284,30524,23721,32747,36107,38593,38929,38996,39000,20225,20238,21361,21916,22120,22522,22855,23305,23492,23696,24076,24190,24524,25582,26426,26071,26082,26399,26827,26820,27231,24112,27589,27671,27773,30079,31048,23395,31232,32000,24509,35215,35352,36020,36215,36556,36637,39138,39438,39740,20096,20605,20736,22931,23452,25135,25216,25836,27450,29344,30097,31047,32681,34811,35516,35696,25516,33738,38816,21513,21507,21931,26708,27224,35440,30759,26485,40653,21364,23458,33050,34384,36870,19992,20037,20167,20241,21450,21560,23470,24339,24613,25937,26429,27714,27762,27875,28792,29699,31350,31406,31496,32026,31998,32102,26087,29275,21435,23621,24040,25298,25312,25369,28192,34394,35377,36317,37624,28417,31142,39770,20136,20139,20140,20379,20384,20689,20807,31478,20849,20982,21332,21281,21375,21483,21932,22659,23777,24375,24394,24623,24656,24685,25375,25945,27211,27841,29378,29421,30703,33016,33029,33288,34126,37111,37857,38911,39255,39514,20208,20957,23597,26241,26989,23616,26354,26997,29577,26704,31873,20677,21220,22343,24062,37670,26020,27427,27453,29748,31105,31165,31563,32202,33465,33740,34943,35167,35641,36817,37329,21535,37504,20061,20534,21477,21306,29399,29590,30697,33510,36527,39366,39368,39378,20855,24858,34398,21936,31354,20598,23507,36935,38533,20018,27355,37351,23633,23624,25496,31391,27795,38772,36705,31402,29066,38536,31874,26647,32368,26705,37740,21234,21531,34219,35347,32676,36557,37089,21350,34952,31041,20418,20670,21009,20804,21843,22317,29674,22411,22865,24418,24452,24693,24950,24935,25001,25522,25658,25964,26223,26690,28179,30054,31293,31995,32076,32153,32331,32619,33550,33610,34509,35336,35427,35686,36605,38938,40335,33464,36814,39912,21127,25119,25731,28608,38553,26689,20625,27424,27770,28500,31348,32080,34880,35363,26376,20214,20537,20518,20581,20860,21048,21091,21927,22287,22533,23244,24314,25010,25080,25331,25458,26908,27177,29309,29356,29486,30740,30831,32121,30476,32937,35211,35609,36066,36562,36963,37749,38522,38997,39443,40568,20803,21407,21427,24187,24358,28187,28304,29572,29694,32067,33335,35328,35578,38480,20046,20491,21476,21628,22266,22993,23396,24049,24235,24359,25144,25925,26543,28246,29392,31946,34996,32929,32993,33776,34382,35463,36328,37431,38599,39015,40723,20116,20114,20237,21320,21577,21566,23087,24460,24481,24735,26791,27278,29786,30849,35486,35492,35703,37264,20062,39881,20132,20348,20399,20505,20502,20809,20844,21151,21177,21246,21402,21475,21521,21518,21897,22353,22434,22909,23380,23389,23439,24037,24039,24055,24184,24195,24218,24247,24344,24658,24908,25239,25304,25511,25915,26114,26179,26356,26477,26657,26775,27083,27743,27946,28009,28207,28317,30002,30343,30828,31295,31968,32005,32024,32094,32177,32789,32771,32943,32945,33108,33167,33322,33618,34892,34913,35611,36002,36092,37066,37237,37489,30783,37628,38308,38477,38917,39321,39640,40251,21083,21163,21495,21512,22741,25335,28640,35946,36703,40633,20811,21051,21578,22269,31296,37239,40288,40658,29508,28425,33136,29969,24573,24794,39592,29403,36796,27492,38915,20170,22256,22372,22718,23130,24680,25031,26127,26118,26681,26801,28151,30165,32058,33390,39746,20123,20304,21449,21766,23919,24038,24046,26619,27801,29811,30722,35408,37782,35039,22352,24231,25387,20661,20652,20877,26368,21705,22622,22971,23472,24425,25165,25505,26685,27507,28168,28797,37319,29312,30741,30758,31085,25998,32048,33756,35009,36617,38555,21092,22312,26448,32618,36001,20916,22338,38442,22586,27018,32948,21682,23822,22524,30869,40442,20316,21066,21643,25662,26152,26388,26613,31364,31574,32034,37679,26716,39853,31545,21273,20874,21047,23519,25334,25774,25830,26413,27578,34217,38609,30352,39894,25420,37638,39851,30399,26194,19977,20632,21442,23665,24808,25746,25955,26719,29158,29642,29987,31639,32386,34453,35715,36059,37240,39184,26028,26283,27531,20181,20180,20282,20351,21050,21496,21490,21987,22235,22763,22987,22985,23039,23376,23629,24066,24107,24535,24605,25351,25903,23388,26031,26045,26088,26525,27490,27515,27663,29509,31049,31169,31992,32025,32043,32930,33026,33267,35222,35422,35433,35430,35468,35566,36039,36060,38604,39164,27503,20107,20284,20365,20816,23383,23546,24904,25345,26178,27425,28363,27835,29246,29885,30164,30913,31034,32780,32819,33258,33940,36766,27728,40575,24335,35672,40235,31482,36600,23437,38635,19971,21489,22519,22833,23241,23460,24713,28287,28422,30142,36074,23455,34048,31712,20594,26612,33437,23649,34122,32286,33294,20889,23556,25448,36198,26012,29038,31038,32023,32773,35613,36554,36974,34503,37034,20511,21242,23610,26451,28796,29237,37196,37320,37675,33509,23490,24369,24825,20027,21462,23432,25163,26417,27530,29417,29664,31278,33131,36259,37202,39318,20754,21463,21610,23551,25480,27193,32172,38656,22234,21454,21608,23447,23601,24030,20462,24833,25342,27954,31168,31179,32066,32333,32722,33261,33311,33936,34886,35186,35728,36468,36655,36913,37195,37228,38598,37276,20160,20303,20805,21313,24467,25102,26580,27713,28171,29539,32294,37325,37507,21460,22809,23487,28113,31069,32302,31899,22654,29087,20986,34899,36848,20426,23803,26149,30636,31459,33308,39423,20934,24490,26092,26991,27529,28147,28310,28516,30462,32020,24033,36981,37255,38918,20966,21021,25152,26257,26329,28186,24246,32210,32626,26360,34223,34295,35576,21161,21465,22899,24207,24464,24661,37604,38500,20663,20767,21213,21280,21319,21484,21736,21830,21809,22039,22888,22974,23100,23477,23558,23567,23569,23578,24196,24202,24288,24432,25215,25220,25307,25484,25463,26119,26124,26157,26230,26494,26786,27167,27189,27836,28040,28169,28248,28988,28966,29031,30151,30465,30813,30977,31077,31216,31456,31505,31911,32057,32918,33750,33931,34121,34909,35059,35359,35388,35412,35443,35937,36062,37284,37478,37758,37912,38556,38808,19978,19976,19998,20055,20887,21104,22478,22580,22732,23330,24120,24773,25854,26465,26454,27972,29366,30067,31331,33976,35698,37304,37664,22065,22516,39166,25325,26893,27542,29165,32340,32887,33394,35302,39135,34645,36785,23611,20280,20449,20405,21767,23072,23517,23529,24515,24910,25391,26032,26187,26862,27035,28024,28145,30003,30137,30495,31070,31206,32051,33251,33455,34218,35242,35386,36523,36763,36914,37341,38663,20154,20161,20995,22645,22764,23563,29978,23613,33102,35338,36805,38499,38765,31525,35535,38920,37218,22259,21416,36887,21561,22402,24101,25512,27700,28810,30561,31883,32736,34928,36930,37204,37648,37656,38543,29790,39620,23815,23913,25968,26530,36264,38619,25454,26441,26905,33733,38935,38592,35070,28548,25722,23544,19990,28716,30045,26159,20932,21046,21218,22995,24449,24615,25104,25919,25972,26143,26228,26866,26646,27491,28165,29298,29983,30427,31934,32854,22768,35069,35199,35488,35475,35531,36893,37266,38738,38745,25993,31246,33030,38587,24109,24796,25114,26021,26132,26512,30707,31309,31821,32318,33034,36012,36196,36321,36447,30889,20999,25305,25509,25666,25240,35373,31363,31680,35500,38634,32118,33292,34633,20185,20808,21315,21344,23459,23554,23574,24029,25126,25159,25776,26643,26676,27849,27973,27927,26579,28508,29006,29053,26059,31359,31661,32218,32330,32680,33146,33307,33337,34214,35438,36046,36341,36984,36983,37549,37521,38275,39854,21069,21892,28472,28982,20840,31109,32341,33203,31950,22092,22609,23720,25514,26366,26365,26970,29401,30095,30094,30990,31062,31199,31895,32032,32068,34311,35380,38459,36961,40736,20711,21109,21452,21474,20489,21930,22766,22863,29245,23435,23652,21277,24803,24819,25436,25475,25407,25531,25805,26089,26361,24035,27085,27133,28437,29157,20105,30185,30456,31379,31967,32207,32156,32865,33609,33624,33900,33980,34299,35013,36208,36865,36973,37783,38684,39442,20687,22679,24974,33235,34101,36104,36896,20419,20596,21063,21363,24687,25417,26463,28204,36275,36895,20439,23646,36042,26063,32154,21330,34966,20854,25539,23384,23403,23562,25613,26449,36956,20182,22810,22826,27760,35409,21822,22549,22949,24816,25171,26561,33333,26965,38464,39364,39464,20307,22534,23550,32784,23729,24111,24453,24608,24907,25140,26367,27888,28382,32974,33151,33492,34955,36024,36864,36910,38538,40667,39899,20195,21488,22823,31532,37261,38988,40441,28381,28711,21331,21828,23429,25176,25246,25299,27810,28655,29730,35351,37944,28609,35582,33592,20967,34552,21482,21481,20294,36948,36784,22890,33073,24061,31466,36799,26842,35895,29432,40008,27197,35504,20025,21336,22022,22374,25285,25506,26086,27470,28129,28251,28845,30701,31471,31658,32187,32829,32966,34507,35477,37723,22243,22727,24382,26029,26262,27264,27573,30007,35527,20516,30693,22320,24347,24677,26234,27744,30196,31258,32622,33268,34584,36933,39347,31689,30044,31481,31569,33988,36880,31209,31378,33590,23265,30528,20013,20210,23449,24544,25277,26172,26609,27880,34411,34935,35387,37198,37619,39376,27159,28710,29482,33511,33879,36015,19969,20806,20939,21899,23541,24086,24115,24193,24340,24373,24427,24500,25074,25361,26274,26397,28526,29266,30010,30522,32884,33081,33144,34678,35519,35548,36229,36339,37530,38263,38914,40165,21189,25431,30452,26389,27784,29645,36035,37806,38515,27941,22684,26894,27084,36861,37786,30171,36890,22618,26626,25524,27131,20291,28460,26584,36795,34086,32180,37716,26943,28528,22378,22775,23340,32044,29226,21514,37347,40372,20141,20302,20572,20597,21059,35998,21576,22564,23450,24093,24213,24237,24311,24351,24716,25269,25402,25552,26799,27712,30855,31118,31243,32224,33351,35330,35558,36420,36883,37048,37165,37336,40718,27877,25688,25826,25973,28404,30340,31515,36969,37841,28346,21746,24505,25764,36685,36845,37444,20856,22635,22825,23637,24215,28155,32399,29980,36028,36578,39003,28857,20253,27583,28593,30000,38651,20814,21520,22581,22615,22956,23648,24466,26007,26460,28193,30331,33759,36077,36884,37117,37709,30757,30778,21162,24230,22303,22900,24594,20498,20826,20908,20941,20992,21776,22612,22616,22871,23445,23798,23947,24764,25237,25645,26481,26691,26812,26847,30423,28120,28271,28059,28783,29128,24403,30168,31095,31561,31572,31570,31958,32113,21040,33891,34153,34276,35342,35588,35910,36367,36867,36879,37913,38518,38957,39472,38360,20685,21205,21516,22530,23566,24999,25758,27934,30643,31461,33012,33796,36947,37509,23776,40199,21311,24471,24499,28060,29305,30563,31167,31716,27602,29420,35501,26627,27233,20984,31361,26932,23626,40182,33515,23493,37193,28702,22136,23663,24775,25958,27788,35930,36929,38931,21585,26311,37389,22856,37027,20869,20045,20970,34201,35598,28760,25466,37707,26978,39348,32260,30071,21335,26976,36575,38627,27741,20108,23612,24336,36841,21250,36049,32905,34425,24319,26085,20083,20837,22914,23615,38894,20219,22922,24525,35469,28641,31152,31074,23527,33905,29483,29105,24180,24565,25467,25754,29123,31896,20035,24316,20043,22492,22178,24745,28611,32013,33021,33075,33215,36786,35223,34468,24052,25226,25773,35207,26487,27874,27966,29750,30772,23110,32629,33453,39340,20467,24259,25309,25490,25943,26479,30403,29260,32972,32954,36649,37197,20493,22521,23186,26757,26995,29028,29437,36023,22770,36064,38506,36889,34687,31204,30695,33833,20271,21093,21338,25293,26575,27850,30333,31636,31893,33334,34180,36843,26333,28448,29190,32283,33707,39361,40614,20989,31665,30834,31672,32903,31560,27368,24161,32908,30033,30048,20843,37474,28300,30330,37271,39658,20240,32624,25244,31567,38309,40169,22138,22617,34532,38588,20276,21028,21322,21453,21467,24070,25644,26001,26495,27710,27726,29256,29359,29677,30036,32321,33324,34281,36009,31684,37318,29033,38930,39151,25405,26217,30058,30436,30928,34115,34542,21290,21329,21542,22915,24199,24444,24754,25161,25209,25259,26000,27604,27852,30130,30382,30865,31192,32203,32631,32933,34987,35513,36027,36991,38750,39131,27147,31800,20633,23614,24494,26503,27608,29749,30473,32654,40763,26570,31255,21305,30091,39661,24422,33181,33777,32920,24380,24517,30050,31558,36924,26727,23019,23195,32016,30334,35628,20469,24426,27161,27703,28418,29922,31080,34920,35413,35961,24287,25551,30149,31186,33495,37672,37618,33948,34541,39981,21697,24428,25996,27996,28693,36007,36051,38971,25935,29942,19981,20184,22496,22827,23142,23500,20904,24067,24220,24598,25206,25975,26023,26222,28014,29238,31526,33104,33178,33433,35676,36000,36070,36212,38428,38468,20398,25771,27494,33310,33889,34154,37096,23553,26963,39080,33914,34135,20239,21103,24489,24133,26381,31119,33145,35079,35206,28149,24343,25173,27832,20175,29289,39826,20998,21563,22132,22707,24996,25198,28954,22894,31881,31966,32027,38640,25991,32862,19993,20341,20853,22592,24163,24179,24330,26564,20006,34109,38281,38491,31859,38913,20731,22721,30294,30887,21029,30629,34065,31622,20559,22793,29255,31687,32232,36794,36820,36941,20415,21193,23081,24321,38829,20445,33303,37610,22275,25429,27497,29995,35036,36628,31298,21215,22675,24917,25098,26286,27597,31807,33769,20515,20472,21253,21574,22577,22857,23453,23792,23791,23849,24214,25265,25447,25918,26041,26379,27861,27873,28921,30770,32299,32990,33459,33804,34028,34562,35090,35370,35914,37030,37586,39165,40179,40300,20047,20129,20621,21078,22346,22952,24125,24536,24537,25151,26292,26395,26576,26834,20882,32033,32938,33192,35584,35980,36031,37502,38450,21536,38956,21271,20693,21340,22696,25778,26420,29287,30566,31302,37350,21187,27809,27526,22528,24140,22868,26412,32763,20961,30406,25705,30952,39764,40635,22475,22969,26151,26522,27598,21737,27097,24149,33180,26517,39850,26622,40018,26717,20134,20451,21448,25273,26411,27819,36804,20397,32365,40639,19975,24930,28288,28459,34067,21619,26410,39749,24051,31637,23724,23494,34588,28234,34001,31252,33032,22937,31885,27665,30496,21209,22818,28961,29279,30683,38695,40289,26891,23167,23064,20901,21517,21629,26126,30431,36855,37528,40180,23018,29277,28357,20813,26825,32191,32236,38754,40634,25720,27169,33538,22916,23391,27611,29467,30450,32178,32791,33945,20786,26408,40665,30446,26466,21247,39173,23588,25147,31870,36016,21839,24758,32011,38272,21249,20063,20918,22812,29242,32822,37326,24357,30690,21380,24441,32004,34220,35379,36493,38742,26611,34222,37971,24841,24840,27833,30290,35565,36664,21807,20305,20778,21191,21451,23461,24189,24736,24962,25558,26377,26586,28263,28044,29494,29495,30001,31056,35029,35480,36938,37009,37109,38596,34701,22805,20104,20313,19982,35465,36671,38928,20653,24188,22934,23481,24248,25562,25594,25793,26332,26954,27096,27915,28342,29076,29992,31407,32650,32768,33865,33993,35201,35617,36362,36965,38525,39178,24958,25233,27442,27779,28020,32716,32764,28096,32645,34746,35064,26469,33713,38972,38647,27931,32097,33853,37226,20081,21365,23888,27396,28651,34253,34349,35239,21033,21519,23653,26446,26792,29702,29827,30178,35023,35041,37324,38626,38520,24459,29575,31435,33870,25504,30053,21129,27969,28316,29705,30041,30827,31890,38534,31452,40845,20406,24942,26053,34396,20102,20142,20698,20001,20940,23534,26009,26753,28092,29471,30274,30637,31260,31975,33391,35538,36988,37327,38517,38936,21147,32209,20523,21400,26519,28107,29136,29747,33256,36650,38563,40023,40607,29792,22593,28057,32047,39006,20196,20278,20363,20919,21169,23994,24604,29618,31036,33491,37428,38583,38646,38666,40599,40802,26278,27508,21015,21155,28872,35010,24265,24651,24976,28451,29001,31806,32244,32879,34030,36899,37676,21570,39791,27347,28809,36034,36335,38706,21172,23105,24266,24324,26391,27004,27028,28010,28431,29282,29436,31725,32769,32894,34635,37070,20845,40595,31108,32907,37682,35542,20525,21644,35441,27498,36036,33031,24785,26528,40434,20121,20120,39952,35435,34241,34152,26880,28286,30871,33109,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,24332,19984,19989,20010,20017,20022,20028,20031,20034,20054,20056,20098,20101,35947,20106,33298,24333,20110,20126,20127,20128,20130,20144,20147,20150,20174,20173,20164,20166,20162,20183,20190,20205,20191,20215,20233,20314,20272,20315,20317,20311,20295,20342,20360,20367,20376,20347,20329,20336,20369,20335,20358,20374,20760,20436,20447,20430,20440,20443,20433,20442,20432,20452,20453,20506,20520,20500,20522,20517,20485,20252,20470,20513,20521,20524,20478,20463,20497,20486,20547,20551,26371,20565,20560,20552,20570,20566,20588,20600,20608,20634,20613,20660,20658,20681,20682,20659,20674,20694,20702,20709,20717,20707,20718,20729,20725,20745,20737,20738,20758,20757,20756,20762,20769,20794,20791,20796,20795,20799,20800,20818,20812,20820,20834,31480,20841,20842,20846,20864,20866,22232,20876,20873,20879,20881,20883,20885,20886,20900,20902,20898,20905,20906,20907,20915,20913,20914,20912,20917,20925,20933,20937,20955,20960,34389,20969,20973,20976,20981,20990,20996,21003,21012,21006,21031,21034,21038,21043,21049,21071,21060,21067,21068,21086,21076,21098,21108,21097,21107,21119,21117,21133,21140,21138,21105,21128,21137,36776,36775,21164,21165,21180,21173,21185,21197,21207,21214,21219,21222,39149,21216,21235,21237,21240,21241,21254,21256,30008,21261,21264,21263,21269,21274,21283,21295,21297,21299,21304,21312,21318,21317,19991,21321,21325,20950,21342,21353,21358,22808,21371,21367,21378,21398,21408,21414,21413,21422,21424,21430,21443,31762,38617,21471,26364,29166,21486,21480,21485,21498,21505,21565,21568,21548,21549,21564,21550,21558,21545,21533,21582,21647,21621,21646,21599,21617,21623,21616,21650,21627,21632,21622,21636,21648,21638,21703,21666,21688,21669,21676,21700,21704,21672,21675,21698,21668,21694,21692,21720,21733,21734,21775,21780,21757,21742,21741,21754,21730,21817,21824,21859,21836,21806,21852,21829,21846,21847,21816,21811,21853,21913,21888,21679,21898,21919,21883,21886,21912,21918,21934,21884,21891,21929,21895,21928,21978,21957,21983,21956,21980,21988,21972,22036,22007,22038,22014,22013,22043,22009,22094,22096,29151,22068,22070,22066,22072,22123,22116,22063,22124,22122,22150,22144,22154,22176,22164,22159,22181,22190,22198,22196,22210,22204,22209,22211,22208,22216,22222,22225,22227,22231,22254,22265,22272,22271,22276,22281,22280,22283,22285,22291,22296,22294,21959,22300,22310,22327,22328,22350,22331,22336,22351,22377,22464,22408,22369,22399,22409,22419,22432,22451,22436,22442,22448,22467,22470,22484,22482,22483,22538,22486,22499,22539,22553,22557,22642,22561,22626,22603,22640,27584,22610,22589,22649,22661,22713,22687,22699,22714,22750,22715,22712,22702,22725,22739,22737,22743,22745,22744,22757,22748,22756,22751,22767,22778,22777,22779,22780,22781,22786,22794,22800,22811,26790,22821,22828,22829,22834,22840,22846,31442,22869,22864,22862,22874,22872,22882,22880,22887,22892,22889,22904,22913,22941,20318,20395,22947,22962,22982,23016,23004,22925,23001,23002,23077,23071,23057,23068,23049,23066,23104,23148,23113,23093,23094,23138,23146,23194,23228,23230,23243,23234,23229,23267,23255,23270,23273,23254,23290,23291,23308,23307,23318,23346,23248,23338,23350,23358,23363,23365,23360,23377,23381,23386,23387,23397,23401,23408,23411,23413,23416,25992,23418,23424,23427,23462,23480,23491,23495,23497,23508,23504,23524,23526,23522,23518,23525,23531,23536,23542,23539,23557,23559,23560,23565,23571,23584,23586,23592,23608,23609,23617,23622,23630,23635,23632,23631,23409,23660,23662,20066,23670,23673,23692,23697,23700,22939,23723,23739,23734,23740,23735,23749,23742,23751,23769,23785,23805,23802,23789,23948,23786,23819,23829,23831,23900,23839,23835,23825,23828,23842,23834,23833,23832,23884,23890,23886,23883,23916,23923,23926,23943,23940,23938,23970,23965,23980,23982,23997,23952,23991,23996,24009,24013,24019,24018,24022,24027,24043,24050,24053,24075,24090,24089,24081,24091,24118,24119,24132,24131,24128,24142,24151,24148,24159,24162,24164,24135,24181,24182,24186,40636,24191,24224,24257,24258,24264,24272,24271,24278,24291,24285,24282,24283,24290,24289,24296,24297,24300,24305,24307,24304,24308,24312,24318,24323,24329,24413,24412,24331,24337,24342,24361,24365,24376,24385,24392,24396,24398,24367,24401,24406,24407,24409,24417,24429,24435,24439,24451,24450,24447,24458,24456,24465,24455,24478,24473,24472,24480,24488,24493,24508,24534,24571,24548,24568,24561,24541,24755,24575,24609,24672,24601,24592,24617,24590,24625,24603,24597,24619,24614,24591,24634,24666,24641,24682,24695,24671,24650,24646,24653,24675,24643,24676,24642,24684,24683,24665,24705,24717,24807,24707,24730,24708,24731,24726,24727,24722,24743,24715,24801,24760,24800,24787,24756,24560,24765,24774,24757,24792,24909,24853,24838,24822,24823,24832,24820,24826,24835,24865,24827,24817,24845,24846,24903,24894,24872,24871,24906,24895,24892,24876,24884,24893,24898,24900,24947,24951,24920,24921,24922,24939,24948,24943,24933,24945,24927,24925,24915,24949,24985,24982,24967,25004,24980,24986,24970,24977,25003,25006,25036,25034,25033,25079,25032,25027,25030,25018,25035,32633,25037,25062,25059,25078,25082,25076,25087,25085,25084,25086,25088,25096,25097,25101,25100,25108,25115,25118,25121,25130,25134,25136,25138,25139,25153,25166,25182,25187,25179,25184,25192,25212,25218,25225,25214,25234,25235,25238,25300,25219,25236,25303,25297,25275,25295,25343,25286,25812,25288,25308,25292,25290,25282,25287,25243,25289,25356,25326,25329,25383,25346,25352,25327,25333,25424,25406,25421,25628,25423,25494,25486,25472,25515,25462,25507,25487,25481,25503,25525,25451,25449,25534,25577,25536,25542,25571,25545,25554,25590,25540,25622,25652,25606,25619,25638,25654,25885,25623,25640,25615,25703,25711,25718,25678,25898,25749,25747,25765,25769,25736,25788,25818,25810,25797,25799,25787,25816,25794,25841,25831,33289,25824,25825,25260,25827,25839,25900,25846,25844,25842,25850,25856,25853,25880,25884,25861,25892,25891,25899,25908,25909,25911,25910,25912,30027,25928,25942,25941,25933,25944,25950,25949,25970,25976,25986,25987,35722,26011,26015,26027,26039,26051,26054,26049,26052,26060,26066,26075,26073,26080,26081,26097,26482,26122,26115,26107,26483,26165,26166,26164,26140,26191,26180,26185,26177,26206,26205,26212,26215,26216,26207,26210,26224,26243,26248,26254,26249,26244,26264,26269,26305,26297,26313,26302,26300,26308,26296,26326,26330,26336,26175,26342,26345,26352,26357,26359,26383,26390,26398,26406,26407,38712,26414,26431,26422,26433,26424,26423,26438,26462,26464,26457,26467,26468,26505,26480,26537,26492,26474,26508,26507,26534,26529,26501,26551,26607,26548,26604,26547,26601,26552,26596,26590,26589,26594,26606,26553,26574,26566,26599,27292,26654,26694,26665,26688,26701,26674,26702,26803,26667,26713,26723,26743,26751,26783,26767,26797,26772,26781,26779,26755,27310,26809,26740,26805,26784,26810,26895,26765,26750,26881,26826,26888,26840,26914,26918,26849,26892,26829,26836,26855,26837,26934,26898,26884,26839,26851,26917,26873,26848,26863,26920,26922,26906,26915,26913,26822,27001,26999,26972,27000,26987,26964,27006,26990,26937,26996,26941,26969,26928,26977,26974,26973,27009,26986,27058,27054,27088,27071,27073,27091,27070,27086,23528,27082,27101,27067,27075,27047,27182,27025,27040,27036,27029,27060,27102,27112,27138,27163,27135,27402,27129,27122,27111,27141,27057,27166,27117,27156,27115,27146,27154,27329,27171,27155,27204,27148,27250,27190,27256,27207,27234,27225,27238,27208,27192,27170,27280,27277,27296,27268,27298,27299,27287,34327,27323,27331,27330,27320,27315,27308,27358,27345,27359,27306,27354,27370,27387,27397,34326,27386,27410,27414,39729,27423,27448,27447,30428,27449,39150,27463,27459,27465,27472,27481,27476,27483,27487,27489,27512,27513,27519,27520,27524,27523,27533,27544,27541,27550,27556,27562,27563,27567,27570,27569,27571,27575,27580,27590,27595,27603,27615,27628,27627,27635,27631,40638,27656,27667,27668,27675,27684,27683,27742,27733,27746,27754,27778,27789,27802,27777,27803,27774,27752,27763,27794,27792,27844,27889,27859,27837,27863,27845,27869,27822,27825,27838,27834,27867,27887,27865,27882,27935,34893,27958,27947,27965,27960,27929,27957,27955,27922,27916,28003,28051,28004,27994,28025,27993,28046,28053,28644,28037,28153,28181,28170,28085,28103,28134,28088,28102,28140,28126,28108,28136,28114,28101,28154,28121,28132,28117,28138,28142,28205,28270,28206,28185,28274,28255,28222,28195,28267,28203,28278,28237,28191,28227,28218,28238,28196,28415,28189,28216,28290,28330,28312,28361,28343,28371,28349,28335,28356,28338,28372,28373,28303,28325,28354,28319,28481,28433,28748,28396,28408,28414,28479,28402,28465,28399,28466,28364,28478,28435,28407,28550,28538,28536,28545,28544,28527,28507,28659,28525,28546,28540,28504,28558,28561,28610,28518,28595,28579,28577,28580,28601,28614,28586,28639,28629,28652,28628,28632,28657,28654,28635,28681,28683,28666,28689,28673,28687,28670,28699,28698,28532,28701,28696,28703,28720,28734,28722,28753,28771,28825,28818,28847,28913,28844,28856,28851,28846,28895,28875,28893,28889,28937,28925,28956,28953,29029,29013,29064,29030,29026,29004,29014,29036,29071,29179,29060,29077,29096,29100,29143,29113,29118,29138,29129,29140,29134,29152,29164,29159,29173,29180,29177,29183,29197,29200,29211,29224,29229,29228,29232,29234,29243,29244,29247,29248,29254,29259,29272,29300,29310,29314,29313,29319,29330,29334,29346,29351,29369,29362,29379,29382,29380,29390,29394,29410,29408,29409,29433,29431,20495,29463,29450,29468,29462,29469,29492,29487,29481,29477,29502,29518,29519,40664,29527,29546,29544,29552,29560,29557,29563,29562,29640,29619,29646,29627,29632,29669,29678,29662,29858,29701,29807,29733,29688,29746,29754,29781,29759,29791,29785,29761,29788,29801,29808,29795,29802,29814,29822,29835,29854,29863,29898,29903,29908,29681,29920,29923,29927,29929,29934,29938,29936,29937,29944,29943,29956,29955,29957,29964,29966,29965,29973,29971,29982,29990,29996,30012,30020,30029,30026,30025,30043,30022,30042,30057,30052,30055,30059,30061,30072,30070,30086,30087,30068,30090,30089,30082,30100,30106,30109,30117,30115,30146,30131,30147,30133,30141,30136,30140,30129,30157,30154,30162,30169,30179,30174,30206,30207,30204,30209,30192,30202,30194,30195,30219,30221,30217,30239,30247,30240,30241,30242,30244,30260,30256,30267,30279,30280,30278,30300,30296,30305,30306,30312,30313,30314,30311,30316,30320,30322,30326,30328,30332,30336,30339,30344,30347,30350,30358,30355,30361,30362,30384,30388,30392,30393,30394,30402,30413,30422,30418,30430,30433,30437,30439,30442,34351,30459,30472,30471,30468,30505,30500,30494,30501,30502,30491,30519,30520,30535,30554,30568,30571,30555,30565,30591,30590,30585,30606,30603,30609,30624,30622,30640,30646,30649,30655,30652,30653,30651,30663,30669,30679,30682,30684,30691,30702,30716,30732,30738,31014,30752,31018,30789,30862,30836,30854,30844,30874,30860,30883,30901,30890,30895,30929,30918,30923,30932,30910,30908,30917,30922,30956,30951,30938,30973,30964,30983,30994,30993,31001,31020,31019,31040,31072,31063,31071,31066,31061,31059,31098,31103,31114,31133,31143,40779,31146,31150,31155,31161,31162,31177,31189,31207,31212,31201,31203,31240,31245,31256,31257,31264,31263,31104,31281,31291,31294,31287,31299,31319,31305,31329,31330,31337,40861,31344,31353,31357,31368,31383,31381,31384,31382,31401,31432,31408,31414,31429,31428,31423,36995,31431,31434,31437,31439,31445,31443,31449,31450,31453,31457,31458,31462,31469,31472,31490,31503,31498,31494,31539,31512,31513,31518,31541,31528,31542,31568,31610,31492,31565,31499,31564,31557,31605,31589,31604,31591,31600,31601,31596,31598,31645,31640,31647,31629,31644,31642,31627,31634,31631,31581,31641,31691,31681,31692,31695,31668,31686,31709,31721,31761,31764,31718,31717,31840,31744,31751,31763,31731,31735,31767,31757,31734,31779,31783,31786,31775,31799,31787,31805,31820,31811,31828,31823,31808,31824,31832,31839,31844,31830,31845,31852,31861,31875,31888,31908,31917,31906,31915,31905,31912,31923,31922,31921,31918,31929,31933,31936,31941,31938,31960,31954,31964,31970,39739,31983,31986,31988,31990,31994,32006,32002,32028,32021,32010,32069,32075,32046,32050,32063,32053,32070,32115,32086,32078,32114,32104,32110,32079,32099,32147,32137,32091,32143,32125,32155,32186,32174,32163,32181,32199,32189,32171,32317,32162,32175,32220,32184,32159,32176,32216,32221,32228,32222,32251,32242,32225,32261,32266,32291,32289,32274,32305,32287,32265,32267,32290,32326,32358,32315,32309,32313,32323,32311,32306,32314,32359,32349,32342,32350,32345,32346,32377,32362,32361,32380,32379,32387,32213,32381,36782,32383,32392,32393,32396,32402,32400,32403,32404,32406,32398,32411,32412,32568,32570,32581,32588,32589,32590,32592,32593,32597,32596,32600,32607,32608,32616,32617,32615,32632,32642,32646,32643,32648,32647,32652,32660,32670,32669,32666,32675,32687,32690,32697,32686,32694,32696,35697,32709,32710,32714,32725,32724,32737,32742,32745,32755,32761,39132,32774,32772,32779,32786,32792,32793,32796,32801,32808,32831,32827,32842,32838,32850,32856,32858,32863,32866,32872,32883,32882,32880,32886,32889,32893,32895,32900,32902,32901,32923,32915,32922,32941,20880,32940,32987,32997,32985,32989,32964,32986,32982,33033,33007,33009,33051,33065,33059,33071,33099,38539,33094,33086,33107,33105,33020,33137,33134,33125,33126,33140,33155,33160,33162,33152,33154,33184,33173,33188,33187,33119,33171,33193,33200,33205,33214,33208,33213,33216,33218,33210,33225,33229,33233,33241,33240,33224,33242,33247,33248,33255,33274,33275,33278,33281,33282,33285,33287,33290,33293,33296,33302,33321,33323,33336,33331,33344,33369,33368,33373,33370,33375,33380,33378,33384,33386,33387,33326,33393,33399,33400,33406,33421,33426,33451,33439,33467,33452,33505,33507,33503,33490,33524,33523,33530,33683,33539,33531,33529,33502,33542,33500,33545,33497,33589,33588,33558,33586,33585,33600,33593,33616,33605,33583,33579,33559,33560,33669,33690,33706,33695,33698,33686,33571,33678,33671,33674,33660,33717,33651,33653,33696,33673,33704,33780,33811,33771,33742,33789,33795,33752,33803,33729,33783,33799,33760,33778,33805,33826,33824,33725,33848,34054,33787,33901,33834,33852,34138,33924,33911,33899,33965,33902,33922,33897,33862,33836,33903,33913,33845,33994,33890,33977,33983,33951,34009,33997,33979,34010,34000,33985,33990,34006,33953,34081,34047,34036,34071,34072,34092,34079,34069,34068,34044,34112,34147,34136,34120,34113,34306,34123,34133,34176,34212,34184,34193,34186,34216,34157,34196,34203,34282,34183,34204,34167,34174,34192,34249,34234,34255,34233,34256,34261,34269,34277,34268,34297,34314,34323,34315,34302,34298,34310,34338,34330,34352,34367,34381,20053,34388,34399,34407,34417,34451,34467,34473,34474,34443,34444,34486,34479,34500,34502,34480,34505,34851,34475,34516,34526,34537,34540,34527,34523,34543,34578,34566,34568,34560,34563,34555,34577,34569,34573,34553,34570,34612,34623,34615,34619,34597,34601,34586,34656,34655,34680,34636,34638,34676,34647,34664,34670,34649,34643,34659,34666,34821,34722,34719,34690,34735,34763,34749,34752,34768,38614,34731,34756,34739,34759,34758,34747,34799,34802,34784,34831,34829,34814,34806,34807,34830,34770,34833,34838,34837,34850,34849,34865,34870,34873,34855,34875,34884,34882,34898,34905,34910,34914,34923,34945,34942,34974,34933,34941,34997,34930,34946,34967,34962,34990,34969,34978,34957,34980,34992,35007,34993,35011,35012,35028,35032,35033,35037,35065,35074,35068,35060,35048,35058,35076,35084,35082,35091,35139,35102,35109,35114,35115,35137,35140,35131,35126,35128,35148,35101,35168,35166,35174,35172,35181,35178,35183,35188,35191,35198,35203,35208,35210,35219,35224,35233,35241,35238,35244,35247,35250,35258,35261,35263,35264,35290,35292,35293,35303,35316,35320,35331,35350,35344,35340,35355,35357,35365,35382,35393,35419,35410,35398,35400,35452,35437,35436,35426,35461,35458,35460,35496,35489,35473,35493,35494,35482,35491,35524,35533,35522,35546,35563,35571,35559,35556,35569,35604,35552,35554,35575,35550,35547,35596,35591,35610,35553,35606,35600,35607,35616,35635,38827,35622,35627,35646,35624,35649,35660,35663,35662,35657,35670,35675,35674,35691,35679,35692,35695,35700,35709,35712,35724,35726,35730,35731,35734,35737,35738,35898,35905,35903,35912,35916,35918,35920,35925,35938,35948,35960,35962,35970,35977,35973,35978,35981,35982,35988,35964,35992,25117,36013,36010,36029,36018,36019,36014,36022,36040,36033,36068,36067,36058,36093,36090,36091,36100,36101,36106,36103,36111,36109,36112,40782,36115,36045,36116,36118,36199,36205,36209,36211,36225,36249,36290,36286,36282,36303,36314,36310,36300,36315,36299,36330,36331,36319,36323,36348,36360,36361,36351,36381,36382,36368,36383,36418,36405,36400,36404,36426,36423,36425,36428,36432,36424,36441,36452,36448,36394,36451,36437,36470,36466,36476,36481,36487,36485,36484,36491,36490,36499,36497,36500,36505,36522,36513,36524,36528,36550,36529,36542,36549,36552,36555,36571,36579,36604,36603,36587,36606,36618,36613,36629,36626,36633,36627,36636,36639,36635,36620,36646,36659,36667,36665,36677,36674,36670,36684,36681,36678,36686,36695,36700,36706,36707,36708,36764,36767,36771,36781,36783,36791,36826,36837,36834,36842,36847,36999,36852,36869,36857,36858,36881,36885,36897,36877,36894,36886,36875,36903,36918,36917,36921,36856,36943,36944,36945,36946,36878,36937,36926,36950,36952,36958,36968,36975,36982,38568,36978,36994,36989,36993,36992,37002,37001,37007,37032,37039,37041,37045,37090,37092,25160,37083,37122,37138,37145,37170,37168,37194,37206,37208,37219,37221,37225,37235,37234,37259,37257,37250,37282,37291,37295,37290,37301,37300,37306,37312,37313,37321,37323,37328,37334,37343,37345,37339,37372,37365,37366,37406,37375,37396,37420,37397,37393,37470,37463,37445,37449,37476,37448,37525,37439,37451,37456,37532,37526,37523,37531,37466,37583,37561,37559,37609,37647,37626,37700,37678,37657,37666,37658,37667,37690,37685,37691,37724,37728,37756,37742,37718,37808,37804,37805,37780,37817,37846,37847,37864,37861,37848,37827,37853,37840,37832,37860,37914,37908,37907,37891,37895,37904,37942,37931,37941,37921,37946,37953,37970,37956,37979,37984,37986,37982,37994,37417,38000,38005,38007,38013,37978,38012,38014,38017,38015,38274,38279,38282,38292,38294,38296,38297,38304,38312,38311,38317,38332,38331,38329,38334,38346,28662,38339,38349,38348,38357,38356,38358,38364,38369,38373,38370,38433,38440,38446,38447,38466,38476,38479,38475,38519,38492,38494,38493,38495,38502,38514,38508,38541,38552,38549,38551,38570,38567,38577,38578,38576,38580,38582,38584,38585,38606,38603,38601,38605,35149,38620,38669,38613,38649,38660,38662,38664,38675,38670,38673,38671,38678,38681,38692,38698,38704,38713,38717,38718,38724,38726,38728,38722,38729,38748,38752,38756,38758,38760,21202,38763,38769,38777,38789,38780,38785,38778,38790,38795,38799,38800,38812,38824,38822,38819,38835,38836,38851,38854,38856,38859,38876,38893,40783,38898,31455,38902,38901,38927,38924,38968,38948,38945,38967,38973,38982,38991,38987,39019,39023,39024,39025,39028,39027,39082,39087,39089,39094,39108,39107,39110,39145,39147,39171,39177,39186,39188,39192,39201,39197,39198,39204,39200,39212,39214,39229,39230,39234,39241,39237,39248,39243,39249,39250,39244,39253,39319,39320,39333,39341,39342,39356,39391,39387,39389,39384,39377,39405,39406,39409,39410,39419,39416,39425,39439,39429,39394,39449,39467,39479,39493,39490,39488,39491,39486,39509,39501,39515,39511,39519,39522,39525,39524,39529,39531,39530,39597,39600,39612,39616,39631,39633,39635,39636,39646,39647,39650,39651,39654,39663,39659,39662,39668,39665,39671,39675,39686,39704,39706,39711,39714,39715,39717,39719,39720,39721,39722,39726,39727,39730,39748,39747,39759,39757,39758,39761,39768,39796,39827,39811,39825,39830,39831,39839,39840,39848,39860,39872,39882,39865,39878,39887,39889,39890,39907,39906,39908,39892,39905,39994,39922,39921,39920,39957,39956,39945,39955,39948,39942,39944,39954,39946,39940,39982,39963,39973,39972,39969,39984,40007,39986,40006,39998,40026,40032,40039,40054,40056,40167,40172,40176,40201,40200,40171,40195,40198,40234,40230,40367,40227,40223,40260,40213,40210,40257,40255,40254,40262,40264,40285,40286,40292,40273,40272,40281,40306,40329,40327,40363,40303,40314,40346,40356,40361,40370,40388,40385,40379,40376,40378,40390,40399,40386,40409,40403,40440,40422,40429,40431,40445,40474,40475,40478,40565,40569,40573,40577,40584,40587,40588,40594,40597,40593,40605,40613,40617,40632,40618,40621,38753,40652,40654,40655,40656,40660,40668,40670,40669,40672,40677,40680,40687,40692,40694,40695,40697,40699,40700,40701,40711,40712,30391,40725,40737,40748,40766,40778,40786,40788,40803,40799,40800,40801,40806,40807,40812,40810,40823,40818,40822,40853,40860,40864,22575,27079,36953,29796,20956,29081,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,32394,35100,37704,37512,34012,20425,28859,26161,26824,37625,26363,24389,20008,20193,20220,20224,20227,20281,20310,20370,20362,20378,20372,20429,20544,20514,20479,20510,20550,20592,20546,20628,20724,20696,20810,20836,20893,20926,20972,21013,21148,21158,21184,21211,21248,21255,21284,21362,21395,21426,21469,64014,21660,21642,21673,21759,21894,22361,22373,22444,22472,22471,64015,64016,22686,22706,22795,22867,22875,22877,22883,22948,22970,23382,23488,29999,23512,23532,23582,23718,23738,23797,23847,23891,64017,23874,23917,23992,23993,24016,24353,24372,24423,24503,24542,24669,24709,24714,24798,24789,24864,24818,24849,24887,24880,24984,25107,25254,25589,25696,25757,25806,25934,26112,26133,26171,26121,26158,26142,26148,26213,26199,26201,64018,26227,26265,26272,26290,26303,26362,26382,63785,26470,26555,26706,26560,26625,26692,26831,64019,26984,64020,27032,27106,27184,27243,27206,27251,27262,27362,27364,27606,27711,27740,27782,27759,27866,27908,28039,28015,28054,28076,28111,28152,28146,28156,28217,28252,28199,28220,28351,28552,28597,28661,28677,28679,28712,28805,28843,28943,28932,29020,28998,28999,64021,29121,29182,29361,29374,29476,64022,29559,29629,29641,29654,29667,29650,29703,29685,29734,29738,29737,29742,29794,29833,29855,29953,30063,30338,30364,30366,30363,30374,64023,30534,21167,30753,30798,30820,30842,31024,64024,64025,64026,31124,64027,31131,31441,31463,64028,31467,31646,64029,32072,32092,32183,32160,32214,32338,32583,32673,64030,33537,33634,33663,33735,33782,33864,33972,34131,34137,34155,64031,34224,64032,64033,34823,35061,35346,35383,35449,35495,35518,35551,64034,35574,35667,35711,36080,36084,36114,36214,64035,36559,64036,64037,36967,37086,64038,37141,37159,37338,37335,37342,37357,37358,37348,37349,37382,37392,37386,37434,37440,37436,37454,37465,37457,37433,37479,37543,37495,37496,37607,37591,37593,37584,64039,37589,37600,37587,37669,37665,37627,64040,37662,37631,37661,37634,37744,37719,37796,37830,37854,37880,37937,37957,37960,38290,63964,64041,38557,38575,38707,38715,38723,38733,38735,38737,38741,38999,39013,64042,64043,39207,64044,39326,39502,39641,39644,39797,39794,39823,39857,39867,39936,40304,40299,64045,40473,40657,null,null,8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,65506,65508,65287,65282,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,65506,65508,65287,65282,12849,8470,8481,8757,32394,35100,37704,37512,34012,20425,28859,26161,26824,37625,26363,24389,20008,20193,20220,20224,20227,20281,20310,20370,20362,20378,20372,20429,20544,20514,20479,20510,20550,20592,20546,20628,20724,20696,20810,20836,20893,20926,20972,21013,21148,21158,21184,21211,21248,21255,21284,21362,21395,21426,21469,64014,21660,21642,21673,21759,21894,22361,22373,22444,22472,22471,64015,64016,22686,22706,22795,22867,22875,22877,22883,22948,22970,23382,23488,29999,23512,23532,23582,23718,23738,23797,23847,23891,64017,23874,23917,23992,23993,24016,24353,24372,24423,24503,24542,24669,24709,24714,24798,24789,24864,24818,24849,24887,24880,24984,25107,25254,25589,25696,25757,25806,25934,26112,26133,26171,26121,26158,26142,26148,26213,26199,26201,64018,26227,26265,26272,26290,26303,26362,26382,63785,26470,26555,26706,26560,26625,26692,26831,64019,26984,64020,27032,27106,27184,27243,27206,27251,27262,27362,27364,27606,27711,27740,27782,27759,27866,27908,28039,28015,28054,28076,28111,28152,28146,28156,28217,28252,28199,28220,28351,28552,28597,28661,28677,28679,28712,28805,28843,28943,28932,29020,28998,28999,64021,29121,29182,29361,29374,29476,64022,29559,29629,29641,29654,29667,29650,29703,29685,29734,29738,29737,29742,29794,29833,29855,29953,30063,30338,30364,30366,30363,30374,64023,30534,21167,30753,30798,30820,30842,31024,64024,64025,64026,31124,64027,31131,31441,31463,64028,31467,31646,64029,32072,32092,32183,32160,32214,32338,32583,32673,64030,33537,33634,33663,33735,33782,33864,33972,34131,34137,34155,64031,34224,64032,64033,34823,35061,35346,35383,35449,35495,35518,35551,64034,35574,35667,35711,36080,36084,36114,36214,64035,36559,64036,64037,36967,37086,64038,37141,37159,37338,37335,37342,37357,37358,37348,37349,37382,37392,37386,37434,37440,37436,37454,37465,37457,37433,37479,37543,37495,37496,37607,37591,37593,37584,64039,37589,37600,37587,37669,37665,37627,64040,37662,37631,37661,37634,37744,37719,37796,37830,37854,37880,37937,37957,37960,38290,63964,64041,38557,38575,38707,38715,38723,38733,38735,38737,38741,38999,39013,64042,64043,39207,64044,39326,39502,39641,39644,39797,39794,39823,39857,39867,39936,40304,40299,64045,40473,40657,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null], + "jis0212":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,728,711,184,729,733,175,731,730,65374,900,901,null,null,null,null,null,null,null,null,161,166,191,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,186,170,169,174,8482,164,8470,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,902,904,905,906,938,null,908,null,910,939,null,911,null,null,null,null,940,941,942,943,970,912,972,962,973,971,944,974,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1038,1039,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1118,1119,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,198,272,null,294,null,306,null,321,319,null,330,216,338,null,358,222,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,230,273,240,295,305,307,312,322,320,329,331,248,339,223,359,254,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,193,192,196,194,258,461,256,260,197,195,262,264,268,199,266,270,201,200,203,202,282,278,274,280,null,284,286,290,288,292,205,204,207,206,463,304,298,302,296,308,310,313,317,315,323,327,325,209,211,210,214,212,465,336,332,213,340,344,342,346,348,352,350,356,354,218,217,220,219,364,467,368,362,370,366,360,471,475,473,469,372,221,376,374,377,381,379,null,null,null,null,null,null,null,225,224,228,226,259,462,257,261,229,227,263,265,269,231,267,271,233,232,235,234,283,279,275,281,501,285,287,null,289,293,237,236,239,238,464,null,299,303,297,309,311,314,318,316,324,328,326,241,243,242,246,244,466,337,333,245,341,345,343,347,349,353,351,357,355,250,249,252,251,365,468,369,363,371,367,361,472,476,474,470,373,253,255,375,378,382,380,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,19970,19972,19973,19980,19986,19999,20003,20004,20008,20011,20014,20015,20016,20021,20032,20033,20036,20039,20049,20058,20060,20067,20072,20073,20084,20085,20089,20095,20109,20118,20119,20125,20143,20153,20163,20176,20186,20187,20192,20193,20194,20200,20207,20209,20211,20213,20221,20222,20223,20224,20226,20227,20232,20235,20236,20242,20245,20246,20247,20249,20270,20273,20320,20275,20277,20279,20281,20283,20286,20288,20290,20296,20297,20299,20300,20306,20308,20310,20312,20319,20323,20330,20332,20334,20337,20343,20344,20345,20346,20349,20350,20353,20354,20356,20357,20361,20362,20364,20366,20368,20370,20371,20372,20375,20377,20378,20382,20383,20402,20407,20409,20411,20412,20413,20414,20416,20417,20421,20422,20424,20425,20427,20428,20429,20431,20434,20444,20448,20450,20464,20466,20476,20477,20479,20480,20481,20484,20487,20490,20492,20494,20496,20499,20503,20504,20507,20508,20509,20510,20514,20519,20526,20528,20530,20531,20533,20544,20545,20546,20549,20550,20554,20556,20558,20561,20562,20563,20567,20569,20575,20576,20578,20579,20582,20583,20586,20589,20592,20593,20539,20609,20611,20612,20614,20618,20622,20623,20624,20626,20627,20628,20630,20635,20636,20638,20639,20640,20641,20642,20650,20655,20656,20665,20666,20669,20672,20675,20676,20679,20684,20686,20688,20691,20692,20696,20700,20701,20703,20706,20708,20710,20712,20713,20719,20721,20726,20730,20734,20739,20742,20743,20744,20747,20748,20749,20750,20722,20752,20759,20761,20763,20764,20765,20766,20771,20775,20776,20780,20781,20783,20785,20787,20788,20789,20792,20793,20802,20810,20815,20819,20821,20823,20824,20831,20836,20838,20862,20867,20868,20875,20878,20888,20893,20897,20899,20909,20920,20922,20924,20926,20927,20930,20936,20943,20945,20946,20947,20949,20952,20958,20962,20965,20974,20978,20979,20980,20983,20993,20994,20997,21010,21011,21013,21014,21016,21026,21032,21041,21042,21045,21052,21061,21065,21077,21079,21080,21082,21084,21087,21088,21089,21094,21102,21111,21112,21113,21120,21122,21125,21130,21132,21139,21141,21142,21143,21144,21146,21148,21156,21157,21158,21159,21167,21168,21174,21175,21176,21178,21179,21181,21184,21188,21190,21192,21196,21199,21201,21204,21206,21211,21212,21217,21221,21224,21225,21226,21228,21232,21233,21236,21238,21239,21248,21251,21258,21259,21260,21265,21267,21272,21275,21276,21278,21279,21285,21287,21288,21289,21291,21292,21293,21296,21298,21301,21308,21309,21310,21314,21324,21323,21337,21339,21345,21347,21349,21356,21357,21362,21369,21374,21379,21383,21384,21390,21395,21396,21401,21405,21409,21412,21418,21419,21423,21426,21428,21429,21431,21432,21434,21437,21440,21445,21455,21458,21459,21461,21466,21469,21470,21472,21478,21479,21493,21506,21523,21530,21537,21543,21544,21546,21551,21553,21556,21557,21571,21572,21575,21581,21583,21598,21602,21604,21606,21607,21609,21611,21613,21614,21620,21631,21633,21635,21637,21640,21641,21645,21649,21653,21654,21660,21663,21665,21670,21671,21673,21674,21677,21678,21681,21687,21689,21690,21691,21695,21702,21706,21709,21710,21728,21738,21740,21743,21750,21756,21758,21759,21760,21761,21765,21768,21769,21772,21773,21774,21781,21802,21803,21810,21813,21814,21819,21820,21821,21825,21831,21833,21834,21837,21840,21841,21848,21850,21851,21854,21856,21857,21860,21862,21887,21889,21890,21894,21896,21902,21903,21905,21906,21907,21908,21911,21923,21924,21933,21938,21951,21953,21955,21958,21961,21963,21964,21966,21969,21970,21971,21975,21976,21979,21982,21986,21993,22006,22015,22021,22024,22026,22029,22030,22031,22032,22033,22034,22041,22060,22064,22067,22069,22071,22073,22075,22076,22077,22079,22080,22081,22083,22084,22086,22089,22091,22093,22095,22100,22110,22112,22113,22114,22115,22118,22121,22125,22127,22129,22130,22133,22148,22149,22152,22155,22156,22165,22169,22170,22173,22174,22175,22182,22183,22184,22185,22187,22188,22189,22193,22195,22199,22206,22213,22217,22218,22219,22223,22224,22220,22221,22233,22236,22237,22239,22241,22244,22245,22246,22247,22248,22257,22251,22253,22262,22263,22273,22274,22279,22282,22284,22289,22293,22298,22299,22301,22304,22306,22307,22308,22309,22313,22314,22316,22318,22319,22323,22324,22333,22334,22335,22341,22342,22348,22349,22354,22370,22373,22375,22376,22379,22381,22382,22383,22384,22385,22387,22388,22389,22391,22393,22394,22395,22396,22398,22401,22403,22412,22420,22423,22425,22426,22428,22429,22430,22431,22433,22421,22439,22440,22441,22444,22456,22461,22471,22472,22476,22479,22485,22493,22494,22500,22502,22503,22505,22509,22512,22517,22518,22520,22525,22526,22527,22531,22532,22536,22537,22497,22540,22541,22555,22558,22559,22560,22566,22567,22573,22578,22585,22591,22601,22604,22605,22607,22608,22613,22623,22625,22628,22631,22632,22648,22652,22655,22656,22657,22663,22664,22665,22666,22668,22669,22671,22672,22676,22678,22685,22688,22689,22690,22694,22697,22705,22706,22724,22716,22722,22728,22733,22734,22736,22738,22740,22742,22746,22749,22753,22754,22761,22771,22789,22790,22795,22796,22802,22803,22804,34369,22813,22817,22819,22820,22824,22831,22832,22835,22837,22838,22847,22851,22854,22866,22867,22873,22875,22877,22878,22879,22881,22883,22891,22893,22895,22898,22901,22902,22905,22907,22908,22923,22924,22926,22930,22933,22935,22943,22948,22951,22957,22958,22959,22960,22963,22967,22970,22972,22977,22979,22980,22984,22986,22989,22994,23005,23006,23007,23011,23012,23015,23022,23023,23025,23026,23028,23031,23040,23044,23052,23053,23054,23058,23059,23070,23075,23076,23079,23080,23082,23085,23088,23108,23109,23111,23112,23116,23120,23125,23134,23139,23141,23143,23149,23159,23162,23163,23166,23179,23184,23187,23190,23193,23196,23198,23199,23200,23202,23207,23212,23217,23218,23219,23221,23224,23226,23227,23231,23236,23238,23240,23247,23258,23260,23264,23269,23274,23278,23285,23286,23293,23296,23297,23304,23319,23348,23321,23323,23325,23329,23333,23341,23352,23361,23371,23372,23378,23382,23390,23400,23406,23407,23420,23421,23422,23423,23425,23428,23430,23434,23438,23440,23441,23443,23444,23446,23464,23465,23468,23469,23471,23473,23474,23479,23482,23484,23488,23489,23501,23503,23510,23511,23512,23513,23514,23520,23535,23537,23540,23549,23564,23575,23582,23583,23587,23590,23593,23595,23596,23598,23600,23602,23605,23606,23641,23642,23644,23650,23651,23655,23656,23657,23661,23664,23668,23669,23674,23675,23676,23677,23687,23688,23690,23695,23698,23709,23711,23712,23714,23715,23718,23722,23730,23732,23733,23738,23753,23755,23762,23773,23767,23790,23793,23794,23796,23809,23814,23821,23826,23851,23843,23844,23846,23847,23857,23860,23865,23869,23871,23874,23875,23878,23880,23893,23889,23897,23882,23903,23904,23905,23906,23908,23914,23917,23920,23929,23930,23934,23935,23937,23939,23944,23946,23954,23955,23956,23957,23961,23963,23967,23968,23975,23979,23984,23988,23992,23993,24003,24007,24011,24016,24014,24024,24025,24032,24036,24041,24056,24057,24064,24071,24077,24082,24084,24085,24088,24095,24096,24110,24104,24114,24117,24126,24139,24144,24137,24145,24150,24152,24155,24156,24158,24168,24170,24171,24172,24173,24174,24176,24192,24203,24206,24226,24228,24229,24232,24234,24236,24241,24243,24253,24254,24255,24262,24268,24267,24270,24273,24274,24276,24277,24284,24286,24293,24299,24322,24326,24327,24328,24334,24345,24348,24349,24353,24354,24355,24356,24360,24363,24364,24366,24368,24372,24374,24379,24381,24383,24384,24388,24389,24391,24397,24400,24404,24408,24411,24416,24419,24420,24423,24431,24434,24436,24437,24440,24442,24445,24446,24457,24461,24463,24470,24476,24477,24482,24487,24491,24484,24492,24495,24496,24497,24504,24516,24519,24520,24521,24523,24528,24529,24530,24531,24532,24542,24545,24546,24552,24553,24554,24556,24557,24558,24559,24562,24563,24566,24570,24572,24583,24586,24589,24595,24596,24599,24600,24602,24607,24612,24621,24627,24629,24640,24647,24648,24649,24652,24657,24660,24662,24663,24669,24673,24679,24689,24702,24703,24706,24710,24712,24714,24718,24721,24723,24725,24728,24733,24734,24738,24740,24741,24744,24752,24753,24759,24763,24766,24770,24772,24776,24777,24778,24779,24782,24783,24788,24789,24793,24795,24797,24798,24802,24805,24818,24821,24824,24828,24829,24834,24839,24842,24844,24848,24849,24850,24851,24852,24854,24855,24857,24860,24862,24866,24874,24875,24880,24881,24885,24886,24887,24889,24897,24901,24902,24905,24926,24928,24940,24946,24952,24955,24956,24959,24960,24961,24963,24964,24971,24973,24978,24979,24983,24984,24988,24989,24991,24992,24997,25000,25002,25005,25016,25017,25020,25024,25025,25026,25038,25039,25045,25052,25053,25054,25055,25057,25058,25063,25065,25061,25068,25069,25071,25089,25091,25092,25095,25107,25109,25116,25120,25122,25123,25127,25129,25131,25145,25149,25154,25155,25156,25158,25164,25168,25169,25170,25172,25174,25178,25180,25188,25197,25199,25203,25210,25213,25229,25230,25231,25232,25254,25256,25267,25270,25271,25274,25278,25279,25284,25294,25301,25302,25306,25322,25330,25332,25340,25341,25347,25348,25354,25355,25357,25360,25363,25366,25368,25385,25386,25389,25397,25398,25401,25404,25409,25410,25411,25412,25414,25418,25419,25422,25426,25427,25428,25432,25435,25445,25446,25452,25453,25457,25460,25461,25464,25468,25469,25471,25474,25476,25479,25482,25488,25492,25493,25497,25498,25502,25508,25510,25517,25518,25519,25533,25537,25541,25544,25550,25553,25555,25556,25557,25564,25568,25573,25578,25580,25586,25587,25589,25592,25593,25609,25610,25616,25618,25620,25624,25630,25632,25634,25636,25637,25641,25642,25647,25648,25653,25661,25663,25675,25679,25681,25682,25683,25684,25690,25691,25692,25693,25695,25696,25697,25699,25709,25715,25716,25723,25725,25733,25735,25743,25744,25745,25752,25753,25755,25757,25759,25761,25763,25766,25768,25772,25779,25789,25790,25791,25796,25801,25802,25803,25804,25806,25808,25809,25813,25815,25828,25829,25833,25834,25837,25840,25845,25847,25851,25855,25857,25860,25864,25865,25866,25871,25875,25876,25878,25881,25883,25886,25887,25890,25894,25897,25902,25905,25914,25916,25917,25923,25927,25929,25936,25938,25940,25951,25952,25959,25963,25978,25981,25985,25989,25994,26002,26005,26008,26013,26016,26019,26022,26030,26034,26035,26036,26047,26050,26056,26057,26062,26064,26068,26070,26072,26079,26096,26098,26100,26101,26105,26110,26111,26112,26116,26120,26121,26125,26129,26130,26133,26134,26141,26142,26145,26146,26147,26148,26150,26153,26154,26155,26156,26158,26160,26161,26163,26169,26167,26176,26181,26182,26186,26188,26193,26190,26199,26200,26201,26203,26204,26208,26209,26363,26218,26219,26220,26238,26227,26229,26239,26231,26232,26233,26235,26240,26236,26251,26252,26253,26256,26258,26265,26266,26267,26268,26271,26272,26276,26285,26289,26290,26293,26299,26303,26304,26306,26307,26312,26316,26318,26319,26324,26331,26335,26344,26347,26348,26350,26362,26373,26375,26382,26387,26393,26396,26400,26402,26419,26430,26437,26439,26440,26444,26452,26453,26461,26470,26476,26478,26484,26486,26491,26497,26500,26510,26511,26513,26515,26518,26520,26521,26523,26544,26545,26546,26549,26555,26556,26557,26617,26560,26562,26563,26565,26568,26569,26578,26583,26585,26588,26593,26598,26608,26610,26614,26615,26706,26644,26649,26653,26655,26664,26663,26668,26669,26671,26672,26673,26675,26683,26687,26692,26693,26698,26700,26709,26711,26712,26715,26731,26734,26735,26736,26737,26738,26741,26745,26746,26747,26748,26754,26756,26758,26760,26774,26776,26778,26780,26785,26787,26789,26793,26794,26798,26802,26811,26821,26824,26828,26831,26832,26833,26835,26838,26841,26844,26845,26853,26856,26858,26859,26860,26861,26864,26865,26869,26870,26875,26876,26877,26886,26889,26890,26896,26897,26899,26902,26903,26929,26931,26933,26936,26939,26946,26949,26953,26958,26967,26971,26979,26980,26981,26982,26984,26985,26988,26992,26993,26994,27002,27003,27007,27008,27021,27026,27030,27032,27041,27045,27046,27048,27051,27053,27055,27063,27064,27066,27068,27077,27080,27089,27094,27095,27106,27109,27118,27119,27121,27123,27125,27134,27136,27137,27139,27151,27153,27157,27162,27165,27168,27172,27176,27184,27186,27188,27191,27195,27198,27199,27205,27206,27209,27210,27214,27216,27217,27218,27221,27222,27227,27236,27239,27242,27249,27251,27262,27265,27267,27270,27271,27273,27275,27281,27291,27293,27294,27295,27301,27307,27311,27312,27313,27316,27325,27326,27327,27334,27337,27336,27340,27344,27348,27349,27350,27356,27357,27364,27367,27372,27376,27377,27378,27388,27389,27394,27395,27398,27399,27401,27407,27408,27409,27415,27419,27422,27428,27432,27435,27436,27439,27445,27446,27451,27455,27462,27466,27469,27474,27478,27480,27485,27488,27495,27499,27502,27504,27509,27517,27518,27522,27525,27543,27547,27551,27552,27554,27555,27560,27561,27564,27565,27566,27568,27576,27577,27581,27582,27587,27588,27593,27596,27606,27610,27617,27619,27622,27623,27630,27633,27639,27641,27647,27650,27652,27653,27657,27661,27662,27664,27666,27673,27679,27686,27687,27688,27692,27694,27699,27701,27702,27706,27707,27711,27722,27723,27725,27727,27730,27732,27737,27739,27740,27755,27757,27759,27764,27766,27768,27769,27771,27781,27782,27783,27785,27796,27797,27799,27800,27804,27807,27824,27826,27828,27842,27846,27853,27855,27856,27857,27858,27860,27862,27866,27868,27872,27879,27881,27883,27884,27886,27890,27892,27908,27911,27914,27918,27919,27921,27923,27930,27942,27943,27944,27751,27950,27951,27953,27961,27964,27967,27991,27998,27999,28001,28005,28007,28015,28016,28028,28034,28039,28049,28050,28052,28054,28055,28056,28074,28076,28084,28087,28089,28093,28095,28100,28104,28106,28110,28111,28118,28123,28125,28127,28128,28130,28133,28137,28143,28144,28148,28150,28156,28160,28164,28190,28194,28199,28210,28214,28217,28219,28220,28228,28229,28232,28233,28235,28239,28241,28242,28243,28244,28247,28252,28253,28254,28258,28259,28264,28275,28283,28285,28301,28307,28313,28320,28327,28333,28334,28337,28339,28347,28351,28352,28353,28355,28359,28360,28362,28365,28366,28367,28395,28397,28398,28409,28411,28413,28420,28424,28426,28428,28429,28438,28440,28442,28443,28454,28457,28458,28463,28464,28467,28470,28475,28476,28461,28495,28497,28498,28499,28503,28505,28506,28509,28510,28513,28514,28520,28524,28541,28542,28547,28551,28552,28555,28556,28557,28560,28562,28563,28564,28566,28570,28575,28576,28581,28582,28583,28584,28590,28591,28592,28597,28598,28604,28613,28615,28616,28618,28634,28638,28648,28649,28656,28661,28665,28668,28669,28672,28677,28678,28679,28685,28695,28704,28707,28719,28724,28727,28729,28732,28739,28740,28744,28745,28746,28747,28756,28757,28765,28766,28750,28772,28773,28780,28782,28789,28790,28798,28801,28805,28806,28820,28821,28822,28823,28824,28827,28836,28843,28848,28849,28852,28855,28874,28881,28883,28884,28885,28886,28888,28892,28900,28922,28931,28932,28933,28934,28935,28939,28940,28943,28958,28960,28971,28973,28975,28976,28977,28984,28993,28997,28998,28999,29002,29003,29008,29010,29015,29018,29020,29022,29024,29032,29049,29056,29061,29063,29068,29074,29082,29083,29088,29090,29103,29104,29106,29107,29114,29119,29120,29121,29124,29131,29132,29139,29142,29145,29146,29148,29176,29182,29184,29191,29192,29193,29203,29207,29210,29213,29215,29220,29227,29231,29236,29240,29241,29249,29250,29251,29253,29262,29263,29264,29267,29269,29270,29274,29276,29278,29280,29283,29288,29291,29294,29295,29297,29303,29304,29307,29308,29311,29316,29321,29325,29326,29331,29339,29352,29357,29358,29361,29364,29374,29377,29383,29385,29388,29397,29398,29400,29407,29413,29427,29428,29434,29435,29438,29442,29444,29445,29447,29451,29453,29458,29459,29464,29465,29470,29474,29476,29479,29480,29484,29489,29490,29493,29498,29499,29501,29507,29517,29520,29522,29526,29528,29533,29534,29535,29536,29542,29543,29545,29547,29548,29550,29551,29553,29559,29561,29564,29568,29569,29571,29573,29574,29582,29584,29587,29589,29591,29592,29596,29598,29599,29600,29602,29605,29606,29610,29611,29613,29621,29623,29625,29628,29629,29631,29637,29638,29641,29643,29644,29647,29650,29651,29654,29657,29661,29665,29667,29670,29671,29673,29684,29685,29687,29689,29690,29691,29693,29695,29696,29697,29700,29703,29706,29713,29722,29723,29732,29734,29736,29737,29738,29739,29740,29741,29742,29743,29744,29745,29753,29760,29763,29764,29766,29767,29771,29773,29777,29778,29783,29789,29794,29798,29799,29800,29803,29805,29806,29809,29810,29824,29825,29829,29830,29831,29833,29839,29840,29841,29842,29848,29849,29850,29852,29855,29856,29857,29859,29862,29864,29865,29866,29867,29870,29871,29873,29874,29877,29881,29883,29887,29896,29897,29900,29904,29907,29912,29914,29915,29918,29919,29924,29928,29930,29931,29935,29940,29946,29947,29948,29951,29958,29970,29974,29975,29984,29985,29988,29991,29993,29994,29999,30006,30009,30013,30014,30015,30016,30019,30023,30024,30030,30032,30034,30039,30046,30047,30049,30063,30065,30073,30074,30075,30076,30077,30078,30081,30085,30096,30098,30099,30101,30105,30108,30114,30116,30132,30138,30143,30144,30145,30148,30150,30156,30158,30159,30167,30172,30175,30176,30177,30180,30183,30188,30190,30191,30193,30201,30208,30210,30211,30212,30215,30216,30218,30220,30223,30226,30227,30229,30230,30233,30235,30236,30237,30238,30243,30245,30246,30249,30253,30258,30259,30261,30264,30265,30266,30268,30282,30272,30273,30275,30276,30277,30281,30283,30293,30297,30303,30308,30309,30317,30318,30319,30321,30324,30337,30341,30348,30349,30357,30363,30364,30365,30367,30368,30370,30371,30372,30373,30374,30375,30376,30378,30381,30397,30401,30405,30409,30411,30412,30414,30420,30425,30432,30438,30440,30444,30448,30449,30454,30457,30460,30464,30470,30474,30478,30482,30484,30485,30487,30489,30490,30492,30498,30504,30509,30510,30511,30516,30517,30518,30521,30525,30526,30530,30533,30534,30538,30541,30542,30543,30546,30550,30551,30556,30558,30559,30560,30562,30564,30567,30570,30572,30576,30578,30579,30580,30586,30589,30592,30596,30604,30605,30612,30613,30614,30618,30623,30626,30631,30634,30638,30639,30641,30645,30654,30659,30665,30673,30674,30677,30681,30686,30687,30688,30692,30694,30698,30700,30704,30705,30708,30712,30715,30725,30726,30729,30733,30734,30737,30749,30753,30754,30755,30765,30766,30768,30773,30775,30787,30788,30791,30792,30796,30798,30802,30812,30814,30816,30817,30819,30820,30824,30826,30830,30842,30846,30858,30863,30868,30872,30881,30877,30878,30879,30884,30888,30892,30893,30896,30897,30898,30899,30907,30909,30911,30919,30920,30921,30924,30926,30930,30931,30933,30934,30948,30939,30943,30944,30945,30950,30954,30962,30963,30976,30966,30967,30970,30971,30975,30982,30988,30992,31002,31004,31006,31007,31008,31013,31015,31017,31021,31025,31028,31029,31035,31037,31039,31044,31045,31046,31050,31051,31055,31057,31060,31064,31067,31068,31079,31081,31083,31090,31097,31099,31100,31102,31115,31116,31121,31123,31124,31125,31126,31128,31131,31132,31137,31144,31145,31147,31151,31153,31156,31160,31163,31170,31172,31175,31176,31178,31183,31188,31190,31194,31197,31198,31200,31202,31205,31210,31211,31213,31217,31224,31228,31234,31235,31239,31241,31242,31244,31249,31253,31259,31262,31265,31271,31275,31277,31279,31280,31284,31285,31288,31289,31290,31300,31301,31303,31304,31308,31317,31318,31321,31324,31325,31327,31328,31333,31335,31338,31341,31349,31352,31358,31360,31362,31365,31366,31370,31371,31376,31377,31380,31390,31392,31395,31404,31411,31413,31417,31419,31420,31430,31433,31436,31438,31441,31451,31464,31465,31467,31468,31473,31476,31483,31485,31486,31495,31508,31519,31523,31527,31529,31530,31531,31533,31534,31535,31536,31537,31540,31549,31551,31552,31553,31559,31566,31573,31584,31588,31590,31593,31594,31597,31599,31602,31603,31607,31620,31625,31630,31632,31633,31638,31643,31646,31648,31653,31660,31663,31664,31666,31669,31670,31674,31675,31676,31677,31682,31685,31688,31690,31700,31702,31703,31705,31706,31707,31720,31722,31730,31732,31733,31736,31737,31738,31740,31742,31745,31746,31747,31748,31750,31753,31755,31756,31758,31759,31769,31771,31776,31781,31782,31784,31788,31793,31795,31796,31798,31801,31802,31814,31818,31829,31825,31826,31827,31833,31834,31835,31836,31837,31838,31841,31843,31847,31849,31853,31854,31856,31858,31865,31868,31869,31878,31879,31887,31892,31902,31904,31910,31920,31926,31927,31930,31931,31932,31935,31940,31943,31944,31945,31949,31951,31955,31956,31957,31959,31961,31962,31965,31974,31977,31979,31989,32003,32007,32008,32009,32015,32017,32018,32019,32022,32029,32030,32035,32038,32042,32045,32049,32060,32061,32062,32064,32065,32071,32072,32077,32081,32083,32087,32089,32090,32092,32093,32101,32103,32106,32112,32120,32122,32123,32127,32129,32130,32131,32133,32134,32136,32139,32140,32141,32145,32150,32151,32157,32158,32166,32167,32170,32179,32182,32183,32185,32194,32195,32196,32197,32198,32204,32205,32206,32215,32217,32256,32226,32229,32230,32234,32235,32237,32241,32245,32246,32249,32250,32264,32272,32273,32277,32279,32284,32285,32288,32295,32296,32300,32301,32303,32307,32310,32319,32324,32325,32327,32334,32336,32338,32344,32351,32353,32354,32357,32363,32366,32367,32371,32376,32382,32385,32390,32391,32394,32397,32401,32405,32408,32410,32413,32414,32572,32571,32573,32574,32575,32579,32580,32583,32591,32594,32595,32603,32604,32605,32609,32611,32612,32613,32614,32621,32625,32637,32638,32639,32640,32651,32653,32655,32656,32657,32662,32663,32668,32673,32674,32678,32682,32685,32692,32700,32703,32704,32707,32712,32718,32719,32731,32735,32739,32741,32744,32748,32750,32751,32754,32762,32765,32766,32767,32775,32776,32778,32781,32782,32783,32785,32787,32788,32790,32797,32798,32799,32800,32804,32806,32812,32814,32816,32820,32821,32823,32825,32826,32828,32830,32832,32836,32864,32868,32870,32877,32881,32885,32897,32904,32910,32924,32926,32934,32935,32939,32952,32953,32968,32973,32975,32978,32980,32981,32983,32984,32992,33005,33006,33008,33010,33011,33014,33017,33018,33022,33027,33035,33046,33047,33048,33052,33054,33056,33060,33063,33068,33072,33077,33082,33084,33093,33095,33098,33100,33106,33111,33120,33121,33127,33128,33129,33133,33135,33143,33153,33168,33156,33157,33158,33163,33166,33174,33176,33179,33182,33186,33198,33202,33204,33211,33227,33219,33221,33226,33230,33231,33237,33239,33243,33245,33246,33249,33252,33259,33260,33264,33265,33266,33269,33270,33272,33273,33277,33279,33280,33283,33295,33299,33300,33305,33306,33309,33313,33314,33320,33330,33332,33338,33347,33348,33349,33350,33355,33358,33359,33361,33366,33372,33376,33379,33383,33389,33396,33403,33405,33407,33408,33409,33411,33412,33415,33417,33418,33422,33425,33428,33430,33432,33434,33435,33440,33441,33443,33444,33447,33448,33449,33450,33454,33456,33458,33460,33463,33466,33468,33470,33471,33478,33488,33493,33498,33504,33506,33508,33512,33514,33517,33519,33526,33527,33533,33534,33536,33537,33543,33544,33546,33547,33620,33563,33565,33566,33567,33569,33570,33580,33581,33582,33584,33587,33591,33594,33596,33597,33602,33603,33604,33607,33613,33614,33617,33621,33622,33623,33648,33656,33661,33663,33664,33666,33668,33670,33677,33682,33684,33685,33688,33689,33691,33692,33693,33702,33703,33705,33708,33726,33727,33728,33735,33737,33743,33744,33745,33748,33757,33619,33768,33770,33782,33784,33785,33788,33793,33798,33802,33807,33809,33813,33817,33709,33839,33849,33861,33863,33864,33866,33869,33871,33873,33874,33878,33880,33881,33882,33884,33888,33892,33893,33895,33898,33904,33907,33908,33910,33912,33916,33917,33921,33925,33938,33939,33941,33950,33958,33960,33961,33962,33967,33969,33972,33978,33981,33982,33984,33986,33991,33992,33996,33999,34003,34012,34023,34026,34031,34032,34033,34034,34039,34098,34042,34043,34045,34050,34051,34055,34060,34062,34064,34076,34078,34082,34083,34084,34085,34087,34090,34091,34095,34099,34100,34102,34111,34118,34127,34128,34129,34130,34131,34134,34137,34140,34141,34142,34143,34144,34145,34146,34148,34155,34159,34169,34170,34171,34173,34175,34177,34181,34182,34185,34187,34188,34191,34195,34200,34205,34207,34208,34210,34213,34215,34228,34230,34231,34232,34236,34237,34238,34239,34242,34247,34250,34251,34254,34221,34264,34266,34271,34272,34278,34280,34285,34291,34294,34300,34303,34304,34308,34309,34317,34318,34320,34321,34322,34328,34329,34331,34334,34337,34343,34345,34358,34360,34362,34364,34365,34368,34370,34374,34386,34387,34390,34391,34392,34393,34397,34400,34401,34402,34403,34404,34409,34412,34415,34421,34422,34423,34426,34445,34449,34454,34456,34458,34460,34465,34470,34471,34472,34477,34481,34483,34484,34485,34487,34488,34489,34495,34496,34497,34499,34501,34513,34514,34517,34519,34522,34524,34528,34531,34533,34535,34440,34554,34556,34557,34564,34565,34567,34571,34574,34575,34576,34579,34580,34585,34590,34591,34593,34595,34600,34606,34607,34609,34610,34617,34618,34620,34621,34622,34624,34627,34629,34637,34648,34653,34657,34660,34661,34671,34673,34674,34683,34691,34692,34693,34694,34695,34696,34697,34699,34700,34704,34707,34709,34711,34712,34713,34718,34720,34723,34727,34732,34733,34734,34737,34741,34750,34751,34753,34760,34761,34762,34766,34773,34774,34777,34778,34780,34783,34786,34787,34788,34794,34795,34797,34801,34803,34808,34810,34815,34817,34819,34822,34825,34826,34827,34832,34841,34834,34835,34836,34840,34842,34843,34844,34846,34847,34856,34861,34862,34864,34866,34869,34874,34876,34881,34883,34885,34888,34889,34890,34891,34894,34897,34901,34902,34904,34906,34908,34911,34912,34916,34921,34929,34937,34939,34944,34968,34970,34971,34972,34975,34976,34984,34986,35002,35005,35006,35008,35018,35019,35020,35021,35022,35025,35026,35027,35035,35038,35047,35055,35056,35057,35061,35063,35073,35078,35085,35086,35087,35093,35094,35096,35097,35098,35100,35104,35110,35111,35112,35120,35121,35122,35125,35129,35130,35134,35136,35138,35141,35142,35145,35151,35154,35159,35162,35163,35164,35169,35170,35171,35179,35182,35184,35187,35189,35194,35195,35196,35197,35209,35213,35216,35220,35221,35227,35228,35231,35232,35237,35248,35252,35253,35254,35255,35260,35284,35285,35286,35287,35288,35301,35305,35307,35309,35313,35315,35318,35321,35325,35327,35332,35333,35335,35343,35345,35346,35348,35349,35358,35360,35362,35364,35366,35371,35372,35375,35381,35383,35389,35390,35392,35395,35397,35399,35401,35405,35406,35411,35414,35415,35416,35420,35421,35425,35429,35431,35445,35446,35447,35449,35450,35451,35454,35455,35456,35459,35462,35467,35471,35472,35474,35478,35479,35481,35487,35495,35497,35502,35503,35507,35510,35511,35515,35518,35523,35526,35528,35529,35530,35537,35539,35540,35541,35543,35549,35551,35564,35568,35572,35573,35574,35580,35583,35589,35590,35595,35601,35612,35614,35615,35594,35629,35632,35639,35644,35650,35651,35652,35653,35654,35656,35666,35667,35668,35673,35661,35678,35683,35693,35702,35704,35705,35708,35710,35713,35716,35717,35723,35725,35727,35732,35733,35740,35742,35743,35896,35897,35901,35902,35909,35911,35913,35915,35919,35921,35923,35924,35927,35928,35931,35933,35929,35939,35940,35942,35944,35945,35949,35955,35957,35958,35963,35966,35974,35975,35979,35984,35986,35987,35993,35995,35996,36004,36025,36026,36037,36038,36041,36043,36047,36054,36053,36057,36061,36065,36072,36076,36079,36080,36082,36085,36087,36088,36094,36095,36097,36099,36105,36114,36119,36123,36197,36201,36204,36206,36223,36226,36228,36232,36237,36240,36241,36245,36254,36255,36256,36262,36267,36268,36271,36274,36277,36279,36281,36283,36288,36293,36294,36295,36296,36298,36302,36305,36308,36309,36311,36313,36324,36325,36327,36332,36336,36284,36337,36338,36340,36349,36353,36356,36357,36358,36363,36369,36372,36374,36384,36385,36386,36387,36390,36391,36401,36403,36406,36407,36408,36409,36413,36416,36417,36427,36429,36430,36431,36436,36443,36444,36445,36446,36449,36450,36457,36460,36461,36463,36464,36465,36473,36474,36475,36482,36483,36489,36496,36498,36501,36506,36507,36509,36510,36514,36519,36521,36525,36526,36531,36533,36538,36539,36544,36545,36547,36548,36551,36559,36561,36564,36572,36584,36590,36592,36593,36599,36601,36602,36589,36608,36610,36615,36616,36623,36624,36630,36631,36632,36638,36640,36641,36643,36645,36647,36648,36652,36653,36654,36660,36661,36662,36663,36666,36672,36673,36675,36679,36687,36689,36690,36691,36692,36693,36696,36701,36702,36709,36765,36768,36769,36772,36773,36774,36789,36790,36792,36798,36800,36801,36806,36810,36811,36813,36816,36818,36819,36821,36832,36835,36836,36840,36846,36849,36853,36854,36859,36862,36866,36868,36872,36876,36888,36891,36904,36905,36911,36906,36908,36909,36915,36916,36919,36927,36931,36932,36940,36955,36957,36962,36966,36967,36972,36976,36980,36985,36997,37000,37003,37004,37006,37008,37013,37015,37016,37017,37019,37024,37025,37026,37029,37040,37042,37043,37044,37046,37053,37068,37054,37059,37060,37061,37063,37064,37077,37079,37080,37081,37084,37085,37087,37093,37074,37110,37099,37103,37104,37108,37118,37119,37120,37124,37125,37126,37128,37133,37136,37140,37142,37143,37144,37146,37148,37150,37152,37157,37154,37155,37159,37161,37166,37167,37169,37172,37174,37175,37177,37178,37180,37181,37187,37191,37192,37199,37203,37207,37209,37210,37211,37217,37220,37223,37229,37236,37241,37242,37243,37249,37251,37253,37254,37258,37262,37265,37267,37268,37269,37272,37278,37281,37286,37288,37292,37293,37294,37296,37297,37298,37299,37302,37307,37308,37309,37311,37314,37315,37317,37331,37332,37335,37337,37338,37342,37348,37349,37353,37354,37356,37357,37358,37359,37360,37361,37367,37369,37371,37373,37376,37377,37380,37381,37382,37383,37385,37386,37388,37392,37394,37395,37398,37400,37404,37405,37411,37412,37413,37414,37416,37422,37423,37424,37427,37429,37430,37432,37433,37434,37436,37438,37440,37442,37443,37446,37447,37450,37453,37454,37455,37457,37464,37465,37468,37469,37472,37473,37477,37479,37480,37481,37486,37487,37488,37493,37494,37495,37496,37497,37499,37500,37501,37503,37512,37513,37514,37517,37518,37522,37527,37529,37535,37536,37540,37541,37543,37544,37547,37551,37554,37558,37560,37562,37563,37564,37565,37567,37568,37569,37570,37571,37573,37574,37575,37576,37579,37580,37581,37582,37584,37587,37589,37591,37592,37593,37596,37597,37599,37600,37601,37603,37605,37607,37608,37612,37614,37616,37625,37627,37631,37632,37634,37640,37645,37649,37652,37653,37660,37661,37662,37663,37665,37668,37669,37671,37673,37674,37683,37684,37686,37687,37703,37704,37705,37712,37713,37714,37717,37719,37720,37722,37726,37732,37733,37735,37737,37738,37741,37743,37744,37745,37747,37748,37750,37754,37757,37759,37760,37761,37762,37768,37770,37771,37773,37775,37778,37781,37784,37787,37790,37793,37795,37796,37798,37800,37803,37812,37813,37814,37818,37801,37825,37828,37829,37830,37831,37833,37834,37835,37836,37837,37843,37849,37852,37854,37855,37858,37862,37863,37881,37879,37880,37882,37883,37885,37889,37890,37892,37896,37897,37901,37902,37903,37909,37910,37911,37919,37934,37935,37937,37938,37939,37940,37947,37951,37949,37955,37957,37960,37962,37964,37973,37977,37980,37983,37985,37987,37992,37995,37997,37998,37999,38001,38002,38020,38019,38264,38265,38270,38276,38280,38284,38285,38286,38301,38302,38303,38305,38310,38313,38315,38316,38324,38326,38330,38333,38335,38342,38344,38345,38347,38352,38353,38354,38355,38361,38362,38365,38366,38367,38368,38372,38374,38429,38430,38434,38436,38437,38438,38444,38449,38451,38455,38456,38457,38458,38460,38461,38465,38482,38484,38486,38487,38488,38497,38510,38516,38523,38524,38526,38527,38529,38530,38531,38532,38537,38545,38550,38554,38557,38559,38564,38565,38566,38569,38574,38575,38579,38586,38602,38610,23986,38616,38618,38621,38622,38623,38633,38639,38641,38650,38658,38659,38661,38665,38682,38683,38685,38689,38690,38691,38696,38705,38707,38721,38723,38730,38734,38735,38741,38743,38744,38746,38747,38755,38759,38762,38766,38771,38774,38775,38776,38779,38781,38783,38784,38793,38805,38806,38807,38809,38810,38814,38815,38818,38828,38830,38833,38834,38837,38838,38840,38841,38842,38844,38846,38847,38849,38852,38853,38855,38857,38858,38860,38861,38862,38864,38865,38868,38871,38872,38873,38877,38878,38880,38875,38881,38884,38895,38897,38900,38903,38904,38906,38919,38922,38937,38925,38926,38932,38934,38940,38942,38944,38947,38950,38955,38958,38959,38960,38962,38963,38965,38949,38974,38980,38983,38986,38993,38994,38995,38998,38999,39001,39002,39010,39011,39013,39014,39018,39020,39083,39085,39086,39088,39092,39095,39096,39098,39099,39103,39106,39109,39112,39116,39137,39139,39141,39142,39143,39146,39155,39158,39170,39175,39176,39185,39189,39190,39191,39194,39195,39196,39199,39202,39206,39207,39211,39217,39218,39219,39220,39221,39225,39226,39227,39228,39232,39233,39238,39239,39240,39245,39246,39252,39256,39257,39259,39260,39262,39263,39264,39323,39325,39327,39334,39344,39345,39346,39349,39353,39354,39357,39359,39363,39369,39379,39380,39385,39386,39388,39390,39399,39402,39403,39404,39408,39412,39413,39417,39421,39422,39426,39427,39428,39435,39436,39440,39441,39446,39454,39456,39458,39459,39460,39463,39469,39470,39475,39477,39478,39480,39495,39489,39492,39498,39499,39500,39502,39505,39508,39510,39517,39594,39596,39598,39599,39602,39604,39605,39606,39609,39611,39614,39615,39617,39619,39622,39624,39630,39632,39634,39637,39638,39639,39643,39644,39648,39652,39653,39655,39657,39660,39666,39667,39669,39673,39674,39677,39679,39680,39681,39682,39683,39684,39685,39688,39689,39691,39692,39693,39694,39696,39698,39702,39705,39707,39708,39712,39718,39723,39725,39731,39732,39733,39735,39737,39738,39741,39752,39755,39756,39765,39766,39767,39771,39774,39777,39779,39781,39782,39784,39786,39787,39788,39789,39790,39795,39797,39799,39800,39801,39807,39808,39812,39813,39814,39815,39817,39818,39819,39821,39823,39824,39828,39834,39837,39838,39846,39847,39849,39852,39856,39857,39858,39863,39864,39867,39868,39870,39871,39873,39879,39880,39886,39888,39895,39896,39901,39903,39909,39911,39914,39915,39919,39923,39927,39928,39929,39930,39933,39935,39936,39938,39947,39951,39953,39958,39960,39961,39962,39964,39966,39970,39971,39974,39975,39976,39977,39978,39985,39989,39990,39991,39997,40001,40003,40004,40005,40009,40010,40014,40015,40016,40019,40020,40022,40024,40027,40029,40030,40031,40035,40041,40042,40028,40043,40040,40046,40048,40050,40053,40055,40059,40166,40178,40183,40185,40203,40194,40209,40215,40216,40220,40221,40222,40239,40240,40242,40243,40244,40250,40252,40261,40253,40258,40259,40263,40266,40275,40276,40287,40291,40290,40293,40297,40298,40299,40304,40310,40311,40315,40316,40318,40323,40324,40326,40330,40333,40334,40338,40339,40341,40342,40343,40344,40353,40362,40364,40366,40369,40373,40377,40380,40383,40387,40391,40393,40394,40404,40405,40406,40407,40410,40414,40415,40416,40421,40423,40425,40427,40430,40432,40435,40436,40446,40458,40450,40455,40462,40464,40465,40466,40469,40470,40473,40476,40477,40570,40571,40572,40576,40578,40579,40580,40581,40583,40590,40591,40598,40600,40603,40606,40612,40616,40620,40622,40623,40624,40627,40628,40629,40646,40648,40651,40661,40671,40676,40679,40684,40685,40686,40688,40689,40690,40693,40696,40703,40706,40707,40713,40719,40720,40721,40722,40724,40726,40727,40729,40730,40731,40735,40738,40742,40746,40747,40751,40753,40754,40756,40759,40761,40762,40764,40765,40767,40769,40771,40772,40773,40774,40775,40787,40789,40790,40791,40792,40794,40797,40798,40808,40809,40813,40814,40815,40816,40817,40819,40821,40826,40829,40847,40848,40849,40850,40852,40854,40855,40862,40865,40866,40867,40869,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null], + "ibm866":[1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,9617,9618,9619,9474,9508,9569,9570,9558,9557,9571,9553,9559,9565,9564,9563,9488,9492,9524,9516,9500,9472,9532,9566,9567,9562,9556,9577,9574,9568,9552,9580,9575,9576,9572,9573,9561,9560,9554,9555,9579,9578,9496,9484,9608,9604,9612,9616,9600,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,1025,1105,1028,1108,1031,1111,1038,1118,176,8729,183,8730,8470,164,9632,160], + "iso-8859-2":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,260,728,321,164,317,346,167,168,352,350,356,377,173,381,379,176,261,731,322,180,318,347,711,184,353,351,357,378,733,382,380,340,193,194,258,196,313,262,199,268,201,280,203,282,205,206,270,272,323,327,211,212,336,214,215,344,366,218,368,220,221,354,223,341,225,226,259,228,314,263,231,269,233,281,235,283,237,238,271,273,324,328,243,244,337,246,247,345,367,250,369,252,253,355,729], + "iso-8859-3":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,294,728,163,164,null,292,167,168,304,350,286,308,173,null,379,176,295,178,179,180,181,293,183,184,305,351,287,309,189,null,380,192,193,194,null,196,266,264,199,200,201,202,203,204,205,206,207,null,209,210,211,212,288,214,215,284,217,218,219,220,364,348,223,224,225,226,null,228,267,265,231,232,233,234,235,236,237,238,239,null,241,242,243,244,289,246,247,285,249,250,251,252,365,349,729], + "iso-8859-4":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,260,312,342,164,296,315,167,168,352,274,290,358,173,381,175,176,261,731,343,180,297,316,711,184,353,275,291,359,330,382,331,256,193,194,195,196,197,198,302,268,201,280,203,278,205,206,298,272,325,332,310,212,213,214,215,216,370,218,219,220,360,362,223,257,225,226,227,228,229,230,303,269,233,281,235,279,237,238,299,273,326,333,311,244,245,246,247,248,371,250,251,252,361,363,729], + "iso-8859-5":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,173,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,8470,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,167,1118,1119], + "iso-8859-6":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,null,null,null,164,null,null,null,null,null,null,null,1548,173,null,null,null,null,null,null,null,null,null,null,null,null,null,1563,null,null,null,1567,null,1569,1570,1571,1572,1573,1574,1575,1576,1577,1578,1579,1580,1581,1582,1583,1584,1585,1586,1587,1588,1589,1590,1591,1592,1593,1594,null,null,null,null,null,1600,1601,1602,1603,1604,1605,1606,1607,1608,1609,1610,1611,1612,1613,1614,1615,1616,1617,1618,null,null,null,null,null,null,null,null,null,null,null,null,null], + "iso-8859-7":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,8216,8217,163,8364,8367,166,167,168,169,890,171,172,173,null,8213,176,177,178,179,900,901,902,183,904,905,906,187,908,189,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,null,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,null], + "iso-8859-8":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,null,162,163,164,165,166,167,168,169,215,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,247,187,188,189,190,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,8215,1488,1489,1490,1491,1492,1493,1494,1495,1496,1497,1498,1499,1500,1501,1502,1503,1504,1505,1506,1507,1508,1509,1510,1511,1512,1513,1514,null,null,8206,8207,null], + "iso-8859-10":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,260,274,290,298,296,310,167,315,272,352,358,381,173,362,330,176,261,275,291,299,297,311,183,316,273,353,359,382,8213,363,331,256,193,194,195,196,197,198,302,268,201,280,203,278,205,206,207,208,325,332,211,212,213,214,360,216,370,218,219,220,221,222,223,257,225,226,227,228,229,230,303,269,233,281,235,279,237,238,239,240,326,333,243,244,245,246,361,248,371,250,251,252,253,254,312], + "iso-8859-13":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,8221,162,163,164,8222,166,167,216,169,342,171,172,173,174,198,176,177,178,179,8220,181,182,183,248,185,343,187,188,189,190,230,260,302,256,262,196,197,280,274,268,201,377,278,290,310,298,315,352,323,325,211,332,213,214,215,370,321,346,362,220,379,381,223,261,303,257,263,228,229,281,275,269,233,378,279,291,311,299,316,353,324,326,243,333,245,246,247,371,322,347,363,252,380,382,8217], + "iso-8859-14":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,7682,7683,163,266,267,7690,167,7808,169,7810,7691,7922,173,174,376,7710,7711,288,289,7744,7745,182,7766,7809,7767,7811,7776,7923,7812,7813,7777,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,372,209,210,211,212,213,214,7786,216,217,218,219,220,221,374,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,373,241,242,243,244,245,246,7787,248,249,250,251,252,253,375,255], + "iso-8859-15":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,8364,165,352,167,353,169,170,171,172,173,174,175,176,177,178,179,381,181,182,183,382,185,186,187,338,339,376,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255], + "iso-8859-16":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,260,261,321,8364,8222,352,167,353,169,536,171,377,173,378,379,176,177,268,322,381,8221,182,183,382,269,537,187,338,339,376,380,192,193,194,258,196,262,198,199,200,201,202,203,204,205,206,207,272,323,210,211,212,336,214,346,368,217,218,219,220,280,538,223,224,225,226,259,228,263,230,231,232,233,234,235,236,237,238,239,273,324,242,243,244,337,246,347,369,249,250,251,252,281,539,255], + "koi8-r":[9472,9474,9484,9488,9492,9496,9500,9508,9516,9524,9532,9600,9604,9608,9612,9616,9617,9618,9619,8992,9632,8729,8730,8776,8804,8805,160,8993,176,178,183,247,9552,9553,9554,1105,9555,9556,9557,9558,9559,9560,9561,9562,9563,9564,9565,9566,9567,9568,9569,1025,9570,9571,9572,9573,9574,9575,9576,9577,9578,9579,9580,169,1102,1072,1073,1094,1076,1077,1092,1075,1093,1080,1081,1082,1083,1084,1085,1086,1087,1103,1088,1089,1090,1091,1078,1074,1100,1099,1079,1096,1101,1097,1095,1098,1070,1040,1041,1062,1044,1045,1060,1043,1061,1048,1049,1050,1051,1052,1053,1054,1055,1071,1056,1057,1058,1059,1046,1042,1068,1067,1047,1064,1069,1065,1063,1066], + "koi8-u":[9472,9474,9484,9488,9492,9496,9500,9508,9516,9524,9532,9600,9604,9608,9612,9616,9617,9618,9619,8992,9632,8729,8730,8776,8804,8805,160,8993,176,178,183,247,9552,9553,9554,1105,1108,9556,1110,1111,9559,9560,9561,9562,9563,1169,1118,9566,9567,9568,9569,1025,1028,9571,1030,1031,9574,9575,9576,9577,9578,1168,1038,169,1102,1072,1073,1094,1076,1077,1092,1075,1093,1080,1081,1082,1083,1084,1085,1086,1087,1103,1088,1089,1090,1091,1078,1074,1100,1099,1079,1096,1101,1097,1095,1098,1070,1040,1041,1062,1044,1045,1060,1043,1061,1048,1049,1050,1051,1052,1053,1054,1055,1071,1056,1057,1058,1059,1046,1042,1068,1067,1047,1064,1069,1065,1063,1066], + "macintosh":[196,197,199,201,209,214,220,225,224,226,228,227,229,231,233,232,234,235,237,236,238,239,241,243,242,244,246,245,250,249,251,252,8224,176,162,163,167,8226,182,223,174,169,8482,180,168,8800,198,216,8734,177,8804,8805,165,181,8706,8721,8719,960,8747,170,186,937,230,248,191,161,172,8730,402,8776,8710,171,187,8230,160,192,195,213,338,339,8211,8212,8220,8221,8216,8217,247,9674,255,376,8260,8364,8249,8250,64257,64258,8225,183,8218,8222,8240,194,202,193,203,200,205,206,207,204,211,212,63743,210,218,219,217,305,710,732,175,728,729,730,184,733,731,711], + "windows-874":[8364,129,130,131,132,8230,134,135,136,137,138,139,140,141,142,143,144,8216,8217,8220,8221,8226,8211,8212,152,153,154,155,156,157,158,159,160,3585,3586,3587,3588,3589,3590,3591,3592,3593,3594,3595,3596,3597,3598,3599,3600,3601,3602,3603,3604,3605,3606,3607,3608,3609,3610,3611,3612,3613,3614,3615,3616,3617,3618,3619,3620,3621,3622,3623,3624,3625,3626,3627,3628,3629,3630,3631,3632,3633,3634,3635,3636,3637,3638,3639,3640,3641,3642,null,null,null,null,3647,3648,3649,3650,3651,3652,3653,3654,3655,3656,3657,3658,3659,3660,3661,3662,3663,3664,3665,3666,3667,3668,3669,3670,3671,3672,3673,3674,3675,null,null,null,null], + "windows-1250":[8364,129,8218,131,8222,8230,8224,8225,136,8240,352,8249,346,356,381,377,144,8216,8217,8220,8221,8226,8211,8212,152,8482,353,8250,347,357,382,378,160,711,728,321,164,260,166,167,168,169,350,171,172,173,174,379,176,177,731,322,180,181,182,183,184,261,351,187,317,733,318,380,340,193,194,258,196,313,262,199,268,201,280,203,282,205,206,270,272,323,327,211,212,336,214,215,344,366,218,368,220,221,354,223,341,225,226,259,228,314,263,231,269,233,281,235,283,237,238,271,273,324,328,243,244,337,246,247,345,367,250,369,252,253,355,729], + "windows-1251":[1026,1027,8218,1107,8222,8230,8224,8225,8364,8240,1033,8249,1034,1036,1035,1039,1106,8216,8217,8220,8221,8226,8211,8212,152,8482,1113,8250,1114,1116,1115,1119,160,1038,1118,1032,164,1168,166,167,1025,169,1028,171,172,173,174,1031,176,177,1030,1110,1169,181,182,183,1105,8470,1108,187,1112,1029,1109,1111,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103], + "windows-1252":[8364,129,8218,402,8222,8230,8224,8225,710,8240,352,8249,338,141,381,143,144,8216,8217,8220,8221,8226,8211,8212,732,8482,353,8250,339,157,382,376,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255], + "windows-1253":[8364,129,8218,402,8222,8230,8224,8225,136,8240,138,8249,140,141,142,143,144,8216,8217,8220,8221,8226,8211,8212,152,8482,154,8250,156,157,158,159,160,901,902,163,164,165,166,167,168,169,null,171,172,173,174,8213,176,177,178,179,900,181,182,183,904,905,906,187,908,189,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,null,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,null], + "windows-1254":[8364,129,8218,402,8222,8230,8224,8225,710,8240,352,8249,338,141,142,143,144,8216,8217,8220,8221,8226,8211,8212,732,8482,353,8250,339,157,158,376,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,286,209,210,211,212,213,214,215,216,217,218,219,220,304,350,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,287,241,242,243,244,245,246,247,248,249,250,251,252,305,351,255], + "windows-1255":[8364,129,8218,402,8222,8230,8224,8225,710,8240,138,8249,140,141,142,143,144,8216,8217,8220,8221,8226,8211,8212,732,8482,154,8250,156,157,158,159,160,161,162,163,8362,165,166,167,168,169,215,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,247,187,188,189,190,191,1456,1457,1458,1459,1460,1461,1462,1463,1464,1465,1466,1467,1468,1469,1470,1471,1472,1473,1474,1475,1520,1521,1522,1523,1524,null,null,null,null,null,null,null,1488,1489,1490,1491,1492,1493,1494,1495,1496,1497,1498,1499,1500,1501,1502,1503,1504,1505,1506,1507,1508,1509,1510,1511,1512,1513,1514,null,null,8206,8207,null], + "windows-1256":[8364,1662,8218,402,8222,8230,8224,8225,710,8240,1657,8249,338,1670,1688,1672,1711,8216,8217,8220,8221,8226,8211,8212,1705,8482,1681,8250,339,8204,8205,1722,160,1548,162,163,164,165,166,167,168,169,1726,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,1563,187,188,189,190,1567,1729,1569,1570,1571,1572,1573,1574,1575,1576,1577,1578,1579,1580,1581,1582,1583,1584,1585,1586,1587,1588,1589,1590,215,1591,1592,1593,1594,1600,1601,1602,1603,224,1604,226,1605,1606,1607,1608,231,232,233,234,235,1609,1610,238,239,1611,1612,1613,1614,244,1615,1616,247,1617,249,1618,251,252,8206,8207,1746], + "windows-1257":[8364,129,8218,131,8222,8230,8224,8225,136,8240,138,8249,140,168,711,184,144,8216,8217,8220,8221,8226,8211,8212,152,8482,154,8250,156,175,731,159,160,null,162,163,164,null,166,167,216,169,342,171,172,173,174,198,176,177,178,179,180,181,182,183,248,185,343,187,188,189,190,230,260,302,256,262,196,197,280,274,268,201,377,278,290,310,298,315,352,323,325,211,332,213,214,215,370,321,346,362,220,379,381,223,261,303,257,263,228,229,281,275,269,233,378,279,291,311,299,316,353,324,326,243,333,245,246,247,371,322,347,363,252,380,382,729], + "windows-1258":[8364,129,8218,402,8222,8230,8224,8225,710,8240,138,8249,338,141,142,143,144,8216,8217,8220,8221,8226,8211,8212,732,8482,154,8250,339,157,158,376,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,258,196,197,198,199,200,201,202,203,768,205,206,207,272,209,777,211,212,416,214,215,216,217,218,219,220,431,771,223,224,225,226,259,228,229,230,231,232,233,234,235,769,237,238,239,273,241,803,243,244,417,246,247,248,249,250,251,252,432,8363,255], + "x-mac-cyrillic":[1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,8224,176,1168,163,167,8226,182,1030,174,169,8482,1026,1106,8800,1027,1107,8734,177,8804,8805,1110,181,1169,1032,1028,1108,1031,1111,1033,1113,1034,1114,1112,1029,172,8730,402,8776,8710,171,187,8230,160,1035,1115,1036,1116,1109,8211,8212,8220,8221,8216,8217,247,8222,1038,1118,1039,1119,8470,1025,1105,1103,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,8364] +}; + +// For strict environments where `this` inside the global scope +// is `undefined`, take a pure object instead +}(this || {})); \ No newline at end of file diff --git a/Url-Shortner/node_modules/bson/vendor/text-encoding/lib/encoding.js b/Url-Shortner/node_modules/bson/vendor/text-encoding/lib/encoding.js new file mode 100644 index 0000000..f01991a --- /dev/null +++ b/Url-Shortner/node_modules/bson/vendor/text-encoding/lib/encoding.js @@ -0,0 +1,3301 @@ +// This is free and unencumbered software released into the public domain. +// See LICENSE.md for more information. + +/** + * @fileoverview Global |this| required for resolving indexes in node. + * @suppress {globalThis} + */ +(function(global) { + 'use strict'; + + // + // Utilities + // + + /** + * @param {number} a The number to test. + * @param {number} min The minimum value in the range, inclusive. + * @param {number} max The maximum value in the range, inclusive. + * @return {boolean} True if a >= min and a <= max. + */ + function inRange(a, min, max) { + return min <= a && a <= max; + } + + /** + * @param {!Array.<*>} array The array to check. + * @param {*} item The item to look for in the array. + * @return {boolean} True if the item appears in the array. + */ + function includes(array, item) { + return array.indexOf(item) !== -1; + } + + var floor = Math.floor; + + /** + * @param {*} o + * @return {Object} + */ + function ToDictionary(o) { + if (o === undefined) return {}; + if (o === Object(o)) return o; + throw TypeError('Could not convert argument to dictionary'); + } + + /** + * @param {string} string Input string of UTF-16 code units. + * @return {!Array.} Code points. + */ + function stringToCodePoints(string) { + // https://heycam.github.io/webidl/#dfn-obtain-unicode + + // 1. Let S be the DOMString value. + var s = String(string); + + // 2. Let n be the length of S. + var n = s.length; + + // 3. Initialize i to 0. + var i = 0; + + // 4. Initialize U to be an empty sequence of Unicode characters. + var u = []; + + // 5. While i < n: + while (i < n) { + + // 1. Let c be the code unit in S at index i. + var c = s.charCodeAt(i); + + // 2. Depending on the value of c: + + // c < 0xD800 or c > 0xDFFF + if (c < 0xD800 || c > 0xDFFF) { + // Append to U the Unicode character with code point c. + u.push(c); + } + + // 0xDC00 ≤ c ≤ 0xDFFF + else if (0xDC00 <= c && c <= 0xDFFF) { + // Append to U a U+FFFD REPLACEMENT CHARACTER. + u.push(0xFFFD); + } + + // 0xD800 ≤ c ≤ 0xDBFF + else if (0xD800 <= c && c <= 0xDBFF) { + // 1. If i = n−1, then append to U a U+FFFD REPLACEMENT + // CHARACTER. + if (i === n - 1) { + u.push(0xFFFD); + } + // 2. Otherwise, i < n−1: + else { + // 1. Let d be the code unit in S at index i+1. + var d = s.charCodeAt(i + 1); + + // 2. If 0xDC00 ≤ d ≤ 0xDFFF, then: + if (0xDC00 <= d && d <= 0xDFFF) { + // 1. Let a be c & 0x3FF. + var a = c & 0x3FF; + + // 2. Let b be d & 0x3FF. + var b = d & 0x3FF; + + // 3. Append to U the Unicode character with code point + // 2^16+2^10*a+b. + u.push(0x10000 + (a << 10) + b); + + // 4. Set i to i+1. + i += 1; + } + + // 3. Otherwise, d < 0xDC00 or d > 0xDFFF. Append to U a + // U+FFFD REPLACEMENT CHARACTER. + else { + u.push(0xFFFD); + } + } + } + + // 3. Set i to i+1. + i += 1; + } + + // 6. Return U. + return u; + } + + /** + * @param {!Array.} code_points Array of code points. + * @return {string} string String of UTF-16 code units. + */ + function codePointsToString(code_points) { + var s = ''; + for (var i = 0; i < code_points.length; ++i) { + var cp = code_points[i]; + if (cp <= 0xFFFF) { + s += String.fromCharCode(cp); + } else { + cp -= 0x10000; + s += String.fromCharCode((cp >> 10) + 0xD800, + (cp & 0x3FF) + 0xDC00); + } + } + return s; + } + + + // + // Implementation of Encoding specification + // https://encoding.spec.whatwg.org/ + // + + // + // 4. Terminology + // + + /** + * An ASCII byte is a byte in the range 0x00 to 0x7F, inclusive. + * @param {number} a The number to test. + * @return {boolean} True if a is in the range 0x00 to 0x7F, inclusive. + */ + function isASCIIByte(a) { + return 0x00 <= a && a <= 0x7F; + } + + /** + * An ASCII code point is a code point in the range U+0000 to + * U+007F, inclusive. + */ + var isASCIICodePoint = isASCIIByte; + + + /** + * End-of-stream is a special token that signifies no more tokens + * are in the stream. + * @const + */ var end_of_stream = -1; + + /** + * A stream represents an ordered sequence of tokens. + * + * @constructor + * @param {!(Array.|Uint8Array)} tokens Array of tokens that provide + * the stream. + */ + function Stream(tokens) { + /** @type {!Array.} */ + this.tokens = [].slice.call(tokens); + // Reversed as push/pop is more efficient than shift/unshift. + this.tokens.reverse(); + } + + Stream.prototype = { + /** + * @return {boolean} True if end-of-stream has been hit. + */ + endOfStream: function() { + return !this.tokens.length; + }, + + /** + * When a token is read from a stream, the first token in the + * stream must be returned and subsequently removed, and + * end-of-stream must be returned otherwise. + * + * @return {number} Get the next token from the stream, or + * end_of_stream. + */ + read: function() { + if (!this.tokens.length) + return end_of_stream; + return this.tokens.pop(); + }, + + /** + * When one or more tokens are prepended to a stream, those tokens + * must be inserted, in given order, before the first token in the + * stream. + * + * @param {(number|!Array.)} token The token(s) to prepend to the + * stream. + */ + prepend: function(token) { + if (Array.isArray(token)) { + var tokens = /**@type {!Array.}*/(token); + while (tokens.length) + this.tokens.push(tokens.pop()); + } else { + this.tokens.push(token); + } + }, + + /** + * When one or more tokens are pushed to a stream, those tokens + * must be inserted, in given order, after the last token in the + * stream. + * + * @param {(number|!Array.)} token The tokens(s) to push to the + * stream. + */ + push: function(token) { + if (Array.isArray(token)) { + var tokens = /**@type {!Array.}*/(token); + while (tokens.length) + this.tokens.unshift(tokens.shift()); + } else { + this.tokens.unshift(token); + } + } + }; + + // + // 5. Encodings + // + + // 5.1 Encoders and decoders + + /** @const */ + var finished = -1; + + /** + * @param {boolean} fatal If true, decoding errors raise an exception. + * @param {number=} opt_code_point Override the standard fallback code point. + * @return {number} The code point to insert on a decoding error. + */ + function decoderError(fatal, opt_code_point) { + if (fatal) + throw TypeError('Decoder error'); + return opt_code_point || 0xFFFD; + } + + /** + * @param {number} code_point The code point that could not be encoded. + * @return {number} Always throws, no value is actually returned. + */ + function encoderError(code_point) { + throw TypeError('The code point ' + code_point + ' could not be encoded.'); + } + + /** @interface */ + function Decoder() {} + Decoder.prototype = { + /** + * @param {Stream} stream The stream of bytes being decoded. + * @param {number} bite The next byte read from the stream. + * @return {?(number|!Array.)} The next code point(s) + * decoded, or null if not enough data exists in the input + * stream to decode a complete code point, or |finished|. + */ + handler: function(stream, bite) {} + }; + + /** @interface */ + function Encoder() {} + Encoder.prototype = { + /** + * @param {Stream} stream The stream of code points being encoded. + * @param {number} code_point Next code point read from the stream. + * @return {(number|!Array.)} Byte(s) to emit, or |finished|. + */ + handler: function(stream, code_point) {} + }; + + // 5.2 Names and labels + + // TODO: Define @typedef for Encoding: {name:string,labels:Array.} + // https://github.com/google/closure-compiler/issues/247 + + /** + * @param {string} label The encoding label. + * @return {?{name:string,labels:Array.}} + */ + function getEncoding(label) { + // 1. Remove any leading and trailing ASCII whitespace from label. + label = String(label).trim().toLowerCase(); + + // 2. If label is an ASCII case-insensitive match for any of the + // labels listed in the table below, return the corresponding + // encoding, and failure otherwise. + if (Object.prototype.hasOwnProperty.call(label_to_encoding, label)) { + return label_to_encoding[label]; + } + return null; + } + + /** + * Encodings table: https://encoding.spec.whatwg.org/encodings.json + * @const + * @type {!Array.<{ + * heading: string, + * encodings: Array.<{name:string,labels:Array.}> + * }>} + */ + var encodings = [ + { + "encodings": [ + { + "labels": [ + "unicode-1-1-utf-8", + "utf-8", + "utf8" + ], + "name": "UTF-8" + } + ], + "heading": "The Encoding" + }, + { + "encodings": [ + { + "labels": [ + "866", + "cp866", + "csibm866", + "ibm866" + ], + "name": "IBM866" + }, + { + "labels": [ + "csisolatin2", + "iso-8859-2", + "iso-ir-101", + "iso8859-2", + "iso88592", + "iso_8859-2", + "iso_8859-2:1987", + "l2", + "latin2" + ], + "name": "ISO-8859-2" + }, + { + "labels": [ + "csisolatin3", + "iso-8859-3", + "iso-ir-109", + "iso8859-3", + "iso88593", + "iso_8859-3", + "iso_8859-3:1988", + "l3", + "latin3" + ], + "name": "ISO-8859-3" + }, + { + "labels": [ + "csisolatin4", + "iso-8859-4", + "iso-ir-110", + "iso8859-4", + "iso88594", + "iso_8859-4", + "iso_8859-4:1988", + "l4", + "latin4" + ], + "name": "ISO-8859-4" + }, + { + "labels": [ + "csisolatincyrillic", + "cyrillic", + "iso-8859-5", + "iso-ir-144", + "iso8859-5", + "iso88595", + "iso_8859-5", + "iso_8859-5:1988" + ], + "name": "ISO-8859-5" + }, + { + "labels": [ + "arabic", + "asmo-708", + "csiso88596e", + "csiso88596i", + "csisolatinarabic", + "ecma-114", + "iso-8859-6", + "iso-8859-6-e", + "iso-8859-6-i", + "iso-ir-127", + "iso8859-6", + "iso88596", + "iso_8859-6", + "iso_8859-6:1987" + ], + "name": "ISO-8859-6" + }, + { + "labels": [ + "csisolatingreek", + "ecma-118", + "elot_928", + "greek", + "greek8", + "iso-8859-7", + "iso-ir-126", + "iso8859-7", + "iso88597", + "iso_8859-7", + "iso_8859-7:1987", + "sun_eu_greek" + ], + "name": "ISO-8859-7" + }, + { + "labels": [ + "csiso88598e", + "csisolatinhebrew", + "hebrew", + "iso-8859-8", + "iso-8859-8-e", + "iso-ir-138", + "iso8859-8", + "iso88598", + "iso_8859-8", + "iso_8859-8:1988", + "visual" + ], + "name": "ISO-8859-8" + }, + { + "labels": [ + "csiso88598i", + "iso-8859-8-i", + "logical" + ], + "name": "ISO-8859-8-I" + }, + { + "labels": [ + "csisolatin6", + "iso-8859-10", + "iso-ir-157", + "iso8859-10", + "iso885910", + "l6", + "latin6" + ], + "name": "ISO-8859-10" + }, + { + "labels": [ + "iso-8859-13", + "iso8859-13", + "iso885913" + ], + "name": "ISO-8859-13" + }, + { + "labels": [ + "iso-8859-14", + "iso8859-14", + "iso885914" + ], + "name": "ISO-8859-14" + }, + { + "labels": [ + "csisolatin9", + "iso-8859-15", + "iso8859-15", + "iso885915", + "iso_8859-15", + "l9" + ], + "name": "ISO-8859-15" + }, + { + "labels": [ + "iso-8859-16" + ], + "name": "ISO-8859-16" + }, + { + "labels": [ + "cskoi8r", + "koi", + "koi8", + "koi8-r", + "koi8_r" + ], + "name": "KOI8-R" + }, + { + "labels": [ + "koi8-ru", + "koi8-u" + ], + "name": "KOI8-U" + }, + { + "labels": [ + "csmacintosh", + "mac", + "macintosh", + "x-mac-roman" + ], + "name": "macintosh" + }, + { + "labels": [ + "dos-874", + "iso-8859-11", + "iso8859-11", + "iso885911", + "tis-620", + "windows-874" + ], + "name": "windows-874" + }, + { + "labels": [ + "cp1250", + "windows-1250", + "x-cp1250" + ], + "name": "windows-1250" + }, + { + "labels": [ + "cp1251", + "windows-1251", + "x-cp1251" + ], + "name": "windows-1251" + }, + { + "labels": [ + "ansi_x3.4-1968", + "ascii", + "cp1252", + "cp819", + "csisolatin1", + "ibm819", + "iso-8859-1", + "iso-ir-100", + "iso8859-1", + "iso88591", + "iso_8859-1", + "iso_8859-1:1987", + "l1", + "latin1", + "us-ascii", + "windows-1252", + "x-cp1252" + ], + "name": "windows-1252" + }, + { + "labels": [ + "cp1253", + "windows-1253", + "x-cp1253" + ], + "name": "windows-1253" + }, + { + "labels": [ + "cp1254", + "csisolatin5", + "iso-8859-9", + "iso-ir-148", + "iso8859-9", + "iso88599", + "iso_8859-9", + "iso_8859-9:1989", + "l5", + "latin5", + "windows-1254", + "x-cp1254" + ], + "name": "windows-1254" + }, + { + "labels": [ + "cp1255", + "windows-1255", + "x-cp1255" + ], + "name": "windows-1255" + }, + { + "labels": [ + "cp1256", + "windows-1256", + "x-cp1256" + ], + "name": "windows-1256" + }, + { + "labels": [ + "cp1257", + "windows-1257", + "x-cp1257" + ], + "name": "windows-1257" + }, + { + "labels": [ + "cp1258", + "windows-1258", + "x-cp1258" + ], + "name": "windows-1258" + }, + { + "labels": [ + "x-mac-cyrillic", + "x-mac-ukrainian" + ], + "name": "x-mac-cyrillic" + } + ], + "heading": "Legacy single-byte encodings" + }, + { + "encodings": [ + { + "labels": [ + "chinese", + "csgb2312", + "csiso58gb231280", + "gb2312", + "gb_2312", + "gb_2312-80", + "gbk", + "iso-ir-58", + "x-gbk" + ], + "name": "GBK" + }, + { + "labels": [ + "gb18030" + ], + "name": "gb18030" + } + ], + "heading": "Legacy multi-byte Chinese (simplified) encodings" + }, + { + "encodings": [ + { + "labels": [ + "big5", + "big5-hkscs", + "cn-big5", + "csbig5", + "x-x-big5" + ], + "name": "Big5" + } + ], + "heading": "Legacy multi-byte Chinese (traditional) encodings" + }, + { + "encodings": [ + { + "labels": [ + "cseucpkdfmtjapanese", + "euc-jp", + "x-euc-jp" + ], + "name": "EUC-JP" + }, + { + "labels": [ + "csiso2022jp", + "iso-2022-jp" + ], + "name": "ISO-2022-JP" + }, + { + "labels": [ + "csshiftjis", + "ms932", + "ms_kanji", + "shift-jis", + "shift_jis", + "sjis", + "windows-31j", + "x-sjis" + ], + "name": "Shift_JIS" + } + ], + "heading": "Legacy multi-byte Japanese encodings" + }, + { + "encodings": [ + { + "labels": [ + "cseuckr", + "csksc56011987", + "euc-kr", + "iso-ir-149", + "korean", + "ks_c_5601-1987", + "ks_c_5601-1989", + "ksc5601", + "ksc_5601", + "windows-949" + ], + "name": "EUC-KR" + } + ], + "heading": "Legacy multi-byte Korean encodings" + }, + { + "encodings": [ + { + "labels": [ + "csiso2022kr", + "hz-gb-2312", + "iso-2022-cn", + "iso-2022-cn-ext", + "iso-2022-kr" + ], + "name": "replacement" + }, + { + "labels": [ + "utf-16be" + ], + "name": "UTF-16BE" + }, + { + "labels": [ + "utf-16", + "utf-16le" + ], + "name": "UTF-16LE" + }, + { + "labels": [ + "x-user-defined" + ], + "name": "x-user-defined" + } + ], + "heading": "Legacy miscellaneous encodings" + } + ]; + + // Label to encoding registry. + /** @type {Object.}>} */ + var label_to_encoding = {}; + encodings.forEach(function(category) { + category.encodings.forEach(function(encoding) { + encoding.labels.forEach(function(label) { + label_to_encoding[label] = encoding; + }); + }); + }); + + // Registry of of encoder/decoder factories, by encoding name. + /** @type {Object.} */ + var encoders = {}; + /** @type {Object.} */ + var decoders = {}; + + // + // 6. Indexes + // + + /** + * @param {number} pointer The |pointer| to search for. + * @param {(!Array.|undefined)} index The |index| to search within. + * @return {?number} The code point corresponding to |pointer| in |index|, + * or null if |code point| is not in |index|. + */ + function indexCodePointFor(pointer, index) { + if (!index) return null; + return index[pointer] || null; + } + + /** + * @param {number} code_point The |code point| to search for. + * @param {!Array.} index The |index| to search within. + * @return {?number} The first pointer corresponding to |code point| in + * |index|, or null if |code point| is not in |index|. + */ + function indexPointerFor(code_point, index) { + var pointer = index.indexOf(code_point); + return pointer === -1 ? null : pointer; + } + + /** + * @param {string} name Name of the index. + * @return {(!Array.|!Array.>)} + * */ + function index(name) { + if (!('encoding-indexes' in global)) { + throw Error("Indexes missing." + + " Did you forget to include encoding-indexes.js first?"); + } + return global['encoding-indexes'][name]; + } + + /** + * @param {number} pointer The |pointer| to search for in the gb18030 index. + * @return {?number} The code point corresponding to |pointer| in |index|, + * or null if |code point| is not in the gb18030 index. + */ + function indexGB18030RangesCodePointFor(pointer) { + // 1. If pointer is greater than 39419 and less than 189000, or + // pointer is greater than 1237575, return null. + if ((pointer > 39419 && pointer < 189000) || (pointer > 1237575)) + return null; + + // 2. If pointer is 7457, return code point U+E7C7. + if (pointer === 7457) return 0xE7C7; + + // 3. Let offset be the last pointer in index gb18030 ranges that + // is equal to or less than pointer and let code point offset be + // its corresponding code point. + var offset = 0; + var code_point_offset = 0; + var idx = index('gb18030-ranges'); + var i; + for (i = 0; i < idx.length; ++i) { + /** @type {!Array.} */ + var entry = idx[i]; + if (entry[0] <= pointer) { + offset = entry[0]; + code_point_offset = entry[1]; + } else { + break; + } + } + + // 4. Return a code point whose value is code point offset + + // pointer − offset. + return code_point_offset + pointer - offset; + } + + /** + * @param {number} code_point The |code point| to locate in the gb18030 index. + * @return {number} The first pointer corresponding to |code point| in the + * gb18030 index. + */ + function indexGB18030RangesPointerFor(code_point) { + // 1. If code point is U+E7C7, return pointer 7457. + if (code_point === 0xE7C7) return 7457; + + // 2. Let offset be the last code point in index gb18030 ranges + // that is equal to or less than code point and let pointer offset + // be its corresponding pointer. + var offset = 0; + var pointer_offset = 0; + var idx = index('gb18030-ranges'); + var i; + for (i = 0; i < idx.length; ++i) { + /** @type {!Array.} */ + var entry = idx[i]; + if (entry[1] <= code_point) { + offset = entry[1]; + pointer_offset = entry[0]; + } else { + break; + } + } + + // 3. Return a pointer whose value is pointer offset + code point + // − offset. + return pointer_offset + code_point - offset; + } + + /** + * @param {number} code_point The |code_point| to search for in the Shift_JIS + * index. + * @return {?number} The code point corresponding to |pointer| in |index|, + * or null if |code point| is not in the Shift_JIS index. + */ + function indexShiftJISPointerFor(code_point) { + // 1. Let index be index jis0208 excluding all entries whose + // pointer is in the range 8272 to 8835, inclusive. + shift_jis_index = shift_jis_index || + index('jis0208').map(function(code_point, pointer) { + return inRange(pointer, 8272, 8835) ? null : code_point; + }); + var index_ = shift_jis_index; + + // 2. Return the index pointer for code point in index. + return index_.indexOf(code_point); + } + var shift_jis_index; + + /** + * @param {number} code_point The |code_point| to search for in the big5 + * index. + * @return {?number} The code point corresponding to |pointer| in |index|, + * or null if |code point| is not in the big5 index. + */ + function indexBig5PointerFor(code_point) { + // 1. Let index be index Big5 excluding all entries whose pointer + big5_index_no_hkscs = big5_index_no_hkscs || + index('big5').map(function(code_point, pointer) { + return (pointer < (0xA1 - 0x81) * 157) ? null : code_point; + }); + var index_ = big5_index_no_hkscs; + + // 2. If code point is U+2550, U+255E, U+2561, U+256A, U+5341, or + // U+5345, return the last pointer corresponding to code point in + // index. + if (code_point === 0x2550 || code_point === 0x255E || + code_point === 0x2561 || code_point === 0x256A || + code_point === 0x5341 || code_point === 0x5345) { + return index_.lastIndexOf(code_point); + } + + // 3. Return the index pointer for code point in index. + return indexPointerFor(code_point, index_); + } + var big5_index_no_hkscs; + + // + // 8. API + // + + /** @const */ var DEFAULT_ENCODING = 'utf-8'; + + // 8.1 Interface TextDecoder + + /** + * @constructor + * @param {string=} label The label of the encoding; + * defaults to 'utf-8'. + * @param {Object=} options + */ + function TextDecoder(label, options) { + // Web IDL conventions + if (!(this instanceof TextDecoder)) + throw TypeError('Called as a function. Did you forget \'new\'?'); + label = label !== undefined ? String(label) : DEFAULT_ENCODING; + options = ToDictionary(options); + + // A TextDecoder object has an associated encoding, decoder, + // stream, ignore BOM flag (initially unset), BOM seen flag + // (initially unset), error mode (initially replacement), and do + // not flush flag (initially unset). + + /** @private */ + this._encoding = null; + /** @private @type {?Decoder} */ + this._decoder = null; + /** @private @type {boolean} */ + this._ignoreBOM = false; + /** @private @type {boolean} */ + this._BOMseen = false; + /** @private @type {string} */ + this._error_mode = 'replacement'; + /** @private @type {boolean} */ + this._do_not_flush = false; + + + // 1. Let encoding be the result of getting an encoding from + // label. + var encoding = getEncoding(label); + + // 2. If encoding is failure or replacement, throw a RangeError. + if (encoding === null || encoding.name === 'replacement') + throw RangeError('Unknown encoding: ' + label); + if (!decoders[encoding.name]) { + throw Error('Decoder not present.' + + ' Did you forget to include encoding-indexes.js first?'); + } + + // 3. Let dec be a new TextDecoder object. + var dec = this; + + // 4. Set dec's encoding to encoding. + dec._encoding = encoding; + + // 5. If options's fatal member is true, set dec's error mode to + // fatal. + if (Boolean(options['fatal'])) + dec._error_mode = 'fatal'; + + // 6. If options's ignoreBOM member is true, set dec's ignore BOM + // flag. + if (Boolean(options['ignoreBOM'])) + dec._ignoreBOM = true; + + // For pre-ES5 runtimes: + if (!Object.defineProperty) { + this.encoding = dec._encoding.name.toLowerCase(); + this.fatal = dec._error_mode === 'fatal'; + this.ignoreBOM = dec._ignoreBOM; + } + + // 7. Return dec. + return dec; + } + + if (Object.defineProperty) { + // The encoding attribute's getter must return encoding's name. + Object.defineProperty(TextDecoder.prototype, 'encoding', { + /** @this {TextDecoder} */ + get: function() { return this._encoding.name.toLowerCase(); } + }); + + // The fatal attribute's getter must return true if error mode + // is fatal, and false otherwise. + Object.defineProperty(TextDecoder.prototype, 'fatal', { + /** @this {TextDecoder} */ + get: function() { return this._error_mode === 'fatal'; } + }); + + // The ignoreBOM attribute's getter must return true if ignore + // BOM flag is set, and false otherwise. + Object.defineProperty(TextDecoder.prototype, 'ignoreBOM', { + /** @this {TextDecoder} */ + get: function() { return this._ignoreBOM; } + }); + } + + /** + * @param {BufferSource=} input The buffer of bytes to decode. + * @param {Object=} options + * @return {string} The decoded string. + */ + TextDecoder.prototype.decode = function decode(input, options) { + var bytes; + if (typeof input === 'object' && input instanceof ArrayBuffer) { + bytes = new Uint8Array(input); + } else if (typeof input === 'object' && 'buffer' in input && + input.buffer instanceof ArrayBuffer) { + bytes = new Uint8Array(input.buffer, + input.byteOffset, + input.byteLength); + } else { + bytes = new Uint8Array(0); + } + + options = ToDictionary(options); + + // 1. If the do not flush flag is unset, set decoder to a new + // encoding's decoder, set stream to a new stream, and unset the + // BOM seen flag. + if (!this._do_not_flush) { + this._decoder = decoders[this._encoding.name]({ + fatal: this._error_mode === 'fatal'}); + this._BOMseen = false; + } + + // 2. If options's stream is true, set the do not flush flag, and + // unset the do not flush flag otherwise. + this._do_not_flush = Boolean(options['stream']); + + // 3. If input is given, push a copy of input to stream. + // TODO: Align with spec algorithm - maintain stream on instance. + var input_stream = new Stream(bytes); + + // 4. Let output be a new stream. + var output = []; + + /** @type {?(number|!Array.)} */ + var result; + + // 5. While true: + while (true) { + // 1. Let token be the result of reading from stream. + var token = input_stream.read(); + + // 2. If token is end-of-stream and the do not flush flag is + // set, return output, serialized. + // TODO: Align with spec algorithm. + if (token === end_of_stream) + break; + + // 3. Otherwise, run these subsubsteps: + + // 1. Let result be the result of processing token for decoder, + // stream, output, and error mode. + result = this._decoder.handler(input_stream, token); + + // 2. If result is finished, return output, serialized. + if (result === finished) + break; + + if (result !== null) { + if (Array.isArray(result)) + output.push.apply(output, /**@type {!Array.}*/(result)); + else + output.push(result); + } + + // 3. Otherwise, if result is error, throw a TypeError. + // (Thrown in handler) + + // 4. Otherwise, do nothing. + } + // TODO: Align with spec algorithm. + if (!this._do_not_flush) { + do { + result = this._decoder.handler(input_stream, input_stream.read()); + if (result === finished) + break; + if (result === null) + continue; + if (Array.isArray(result)) + output.push.apply(output, /**@type {!Array.}*/(result)); + else + output.push(result); + } while (!input_stream.endOfStream()); + this._decoder = null; + } + + // A TextDecoder object also has an associated serialize stream + // algorithm... + /** + * @param {!Array.} stream + * @return {string} + * @this {TextDecoder} + */ + function serializeStream(stream) { + // 1. Let token be the result of reading from stream. + // (Done in-place on array, rather than as a stream) + + // 2. If encoding is UTF-8, UTF-16BE, or UTF-16LE, and ignore + // BOM flag and BOM seen flag are unset, run these subsubsteps: + if (includes(['UTF-8', 'UTF-16LE', 'UTF-16BE'], this._encoding.name) && + !this._ignoreBOM && !this._BOMseen) { + if (stream.length > 0 && stream[0] === 0xFEFF) { + // 1. If token is U+FEFF, set BOM seen flag. + this._BOMseen = true; + stream.shift(); + } else if (stream.length > 0) { + // 2. Otherwise, if token is not end-of-stream, set BOM seen + // flag and append token to stream. + this._BOMseen = true; + } else { + // 3. Otherwise, if token is not end-of-stream, append token + // to output. + // (no-op) + } + } + // 4. Otherwise, return output. + return codePointsToString(stream); + } + + return serializeStream.call(this, output); + }; + + // 8.2 Interface TextEncoder + + /** + * @constructor + * @param {string=} label The label of the encoding. NONSTANDARD. + * @param {Object=} options NONSTANDARD. + */ + function TextEncoder(label, options) { + // Web IDL conventions + if (!(this instanceof TextEncoder)) + throw TypeError('Called as a function. Did you forget \'new\'?'); + options = ToDictionary(options); + + // A TextEncoder object has an associated encoding and encoder. + + /** @private */ + this._encoding = null; + /** @private @type {?Encoder} */ + this._encoder = null; + + // Non-standard + /** @private @type {boolean} */ + this._do_not_flush = false; + /** @private @type {string} */ + this._fatal = Boolean(options['fatal']) ? 'fatal' : 'replacement'; + + // 1. Let enc be a new TextEncoder object. + var enc = this; + + // 2. Set enc's encoding to UTF-8's encoder. + if (Boolean(options['NONSTANDARD_allowLegacyEncoding'])) { + // NONSTANDARD behavior. + label = label !== undefined ? String(label) : DEFAULT_ENCODING; + var encoding = getEncoding(label); + if (encoding === null || encoding.name === 'replacement') + throw RangeError('Unknown encoding: ' + label); + if (!encoders[encoding.name]) { + throw Error('Encoder not present.' + + ' Did you forget to include encoding-indexes.js first?'); + } + enc._encoding = encoding; + } else { + // Standard behavior. + enc._encoding = getEncoding('utf-8'); + + if (label !== undefined && 'console' in global) { + console.warn('TextEncoder constructor called with encoding label, ' + + 'which is ignored.'); + } + } + + // For pre-ES5 runtimes: + if (!Object.defineProperty) + this.encoding = enc._encoding.name.toLowerCase(); + + // 3. Return enc. + return enc; + } + + if (Object.defineProperty) { + // The encoding attribute's getter must return encoding's name. + Object.defineProperty(TextEncoder.prototype, 'encoding', { + /** @this {TextEncoder} */ + get: function() { return this._encoding.name.toLowerCase(); } + }); + } + + /** + * @param {string=} opt_string The string to encode. + * @param {Object=} options + * @return {!Uint8Array} Encoded bytes, as a Uint8Array. + */ + TextEncoder.prototype.encode = function encode(opt_string, options) { + opt_string = opt_string === undefined ? '' : String(opt_string); + options = ToDictionary(options); + + // NOTE: This option is nonstandard. None of the encodings + // permitted for encoding (i.e. UTF-8, UTF-16) are stateful when + // the input is a USVString so streaming is not necessary. + if (!this._do_not_flush) + this._encoder = encoders[this._encoding.name]({ + fatal: this._fatal === 'fatal'}); + this._do_not_flush = Boolean(options['stream']); + + // 1. Convert input to a stream. + var input = new Stream(stringToCodePoints(opt_string)); + + // 2. Let output be a new stream + var output = []; + + /** @type {?(number|!Array.)} */ + var result; + // 3. While true, run these substeps: + while (true) { + // 1. Let token be the result of reading from input. + var token = input.read(); + if (token === end_of_stream) + break; + // 2. Let result be the result of processing token for encoder, + // input, output. + result = this._encoder.handler(input, token); + if (result === finished) + break; + if (Array.isArray(result)) + output.push.apply(output, /**@type {!Array.}*/(result)); + else + output.push(result); + } + // TODO: Align with spec algorithm. + if (!this._do_not_flush) { + while (true) { + result = this._encoder.handler(input, input.read()); + if (result === finished) + break; + if (Array.isArray(result)) + output.push.apply(output, /**@type {!Array.}*/(result)); + else + output.push(result); + } + this._encoder = null; + } + // 3. If result is finished, convert output into a byte sequence, + // and then return a Uint8Array object wrapping an ArrayBuffer + // containing output. + return new Uint8Array(output); + }; + + + // + // 9. The encoding + // + + // 9.1 utf-8 + + // 9.1.1 utf-8 decoder + /** + * @constructor + * @implements {Decoder} + * @param {{fatal: boolean}} options + */ + function UTF8Decoder(options) { + var fatal = options.fatal; + + // utf-8's decoder's has an associated utf-8 code point, utf-8 + // bytes seen, and utf-8 bytes needed (all initially 0), a utf-8 + // lower boundary (initially 0x80), and a utf-8 upper boundary + // (initially 0xBF). + var /** @type {number} */ utf8_code_point = 0, + /** @type {number} */ utf8_bytes_seen = 0, + /** @type {number} */ utf8_bytes_needed = 0, + /** @type {number} */ utf8_lower_boundary = 0x80, + /** @type {number} */ utf8_upper_boundary = 0xBF; + + /** + * @param {Stream} stream The stream of bytes being decoded. + * @param {number} bite The next byte read from the stream. + * @return {?(number|!Array.)} The next code point(s) + * decoded, or null if not enough data exists in the input + * stream to decode a complete code point. + */ + this.handler = function(stream, bite) { + // 1. If byte is end-of-stream and utf-8 bytes needed is not 0, + // set utf-8 bytes needed to 0 and return error. + if (bite === end_of_stream && utf8_bytes_needed !== 0) { + utf8_bytes_needed = 0; + return decoderError(fatal); + } + + // 2. If byte is end-of-stream, return finished. + if (bite === end_of_stream) + return finished; + + // 3. If utf-8 bytes needed is 0, based on byte: + if (utf8_bytes_needed === 0) { + + // 0x00 to 0x7F + if (inRange(bite, 0x00, 0x7F)) { + // Return a code point whose value is byte. + return bite; + } + + // 0xC2 to 0xDF + else if (inRange(bite, 0xC2, 0xDF)) { + // 1. Set utf-8 bytes needed to 1. + utf8_bytes_needed = 1; + + // 2. Set UTF-8 code point to byte & 0x1F. + utf8_code_point = bite & 0x1F; + } + + // 0xE0 to 0xEF + else if (inRange(bite, 0xE0, 0xEF)) { + // 1. If byte is 0xE0, set utf-8 lower boundary to 0xA0. + if (bite === 0xE0) + utf8_lower_boundary = 0xA0; + // 2. If byte is 0xED, set utf-8 upper boundary to 0x9F. + if (bite === 0xED) + utf8_upper_boundary = 0x9F; + // 3. Set utf-8 bytes needed to 2. + utf8_bytes_needed = 2; + // 4. Set UTF-8 code point to byte & 0xF. + utf8_code_point = bite & 0xF; + } + + // 0xF0 to 0xF4 + else if (inRange(bite, 0xF0, 0xF4)) { + // 1. If byte is 0xF0, set utf-8 lower boundary to 0x90. + if (bite === 0xF0) + utf8_lower_boundary = 0x90; + // 2. If byte is 0xF4, set utf-8 upper boundary to 0x8F. + if (bite === 0xF4) + utf8_upper_boundary = 0x8F; + // 3. Set utf-8 bytes needed to 3. + utf8_bytes_needed = 3; + // 4. Set UTF-8 code point to byte & 0x7. + utf8_code_point = bite & 0x7; + } + + // Otherwise + else { + // Return error. + return decoderError(fatal); + } + + // Return continue. + return null; + } + + // 4. If byte is not in the range utf-8 lower boundary to utf-8 + // upper boundary, inclusive, run these substeps: + if (!inRange(bite, utf8_lower_boundary, utf8_upper_boundary)) { + + // 1. Set utf-8 code point, utf-8 bytes needed, and utf-8 + // bytes seen to 0, set utf-8 lower boundary to 0x80, and set + // utf-8 upper boundary to 0xBF. + utf8_code_point = utf8_bytes_needed = utf8_bytes_seen = 0; + utf8_lower_boundary = 0x80; + utf8_upper_boundary = 0xBF; + + // 2. Prepend byte to stream. + stream.prepend(bite); + + // 3. Return error. + return decoderError(fatal); + } + + // 5. Set utf-8 lower boundary to 0x80 and utf-8 upper boundary + // to 0xBF. + utf8_lower_boundary = 0x80; + utf8_upper_boundary = 0xBF; + + // 6. Set UTF-8 code point to (UTF-8 code point << 6) | (byte & + // 0x3F) + utf8_code_point = (utf8_code_point << 6) | (bite & 0x3F); + + // 7. Increase utf-8 bytes seen by one. + utf8_bytes_seen += 1; + + // 8. If utf-8 bytes seen is not equal to utf-8 bytes needed, + // continue. + if (utf8_bytes_seen !== utf8_bytes_needed) + return null; + + // 9. Let code point be utf-8 code point. + var code_point = utf8_code_point; + + // 10. Set utf-8 code point, utf-8 bytes needed, and utf-8 bytes + // seen to 0. + utf8_code_point = utf8_bytes_needed = utf8_bytes_seen = 0; + + // 11. Return a code point whose value is code point. + return code_point; + }; + } + + // 9.1.2 utf-8 encoder + /** + * @constructor + * @implements {Encoder} + * @param {{fatal: boolean}} options + */ + function UTF8Encoder(options) { + var fatal = options.fatal; + /** + * @param {Stream} stream Input stream. + * @param {number} code_point Next code point read from the stream. + * @return {(number|!Array.)} Byte(s) to emit. + */ + this.handler = function(stream, code_point) { + // 1. If code point is end-of-stream, return finished. + if (code_point === end_of_stream) + return finished; + + // 2. If code point is an ASCII code point, return a byte whose + // value is code point. + if (isASCIICodePoint(code_point)) + return code_point; + + // 3. Set count and offset based on the range code point is in: + var count, offset; + // U+0080 to U+07FF, inclusive: + if (inRange(code_point, 0x0080, 0x07FF)) { + // 1 and 0xC0 + count = 1; + offset = 0xC0; + } + // U+0800 to U+FFFF, inclusive: + else if (inRange(code_point, 0x0800, 0xFFFF)) { + // 2 and 0xE0 + count = 2; + offset = 0xE0; + } + // U+10000 to U+10FFFF, inclusive: + else if (inRange(code_point, 0x10000, 0x10FFFF)) { + // 3 and 0xF0 + count = 3; + offset = 0xF0; + } + + // 4. Let bytes be a byte sequence whose first byte is (code + // point >> (6 × count)) + offset. + var bytes = [(code_point >> (6 * count)) + offset]; + + // 5. Run these substeps while count is greater than 0: + while (count > 0) { + + // 1. Set temp to code point >> (6 × (count − 1)). + var temp = code_point >> (6 * (count - 1)); + + // 2. Append to bytes 0x80 | (temp & 0x3F). + bytes.push(0x80 | (temp & 0x3F)); + + // 3. Decrease count by one. + count -= 1; + } + + // 6. Return bytes bytes, in order. + return bytes; + }; + } + + /** @param {{fatal: boolean}} options */ + encoders['UTF-8'] = function(options) { + return new UTF8Encoder(options); + }; + /** @param {{fatal: boolean}} options */ + decoders['UTF-8'] = function(options) { + return new UTF8Decoder(options); + }; + + // + // 10. Legacy single-byte encodings + // + + // 10.1 single-byte decoder + /** + * @constructor + * @implements {Decoder} + * @param {!Array.} index The encoding index. + * @param {{fatal: boolean}} options + */ + function SingleByteDecoder(index, options) { + var fatal = options.fatal; + /** + * @param {Stream} stream The stream of bytes being decoded. + * @param {number} bite The next byte read from the stream. + * @return {?(number|!Array.)} The next code point(s) + * decoded, or null if not enough data exists in the input + * stream to decode a complete code point. + */ + this.handler = function(stream, bite) { + // 1. If byte is end-of-stream, return finished. + if (bite === end_of_stream) + return finished; + + // 2. If byte is an ASCII byte, return a code point whose value + // is byte. + if (isASCIIByte(bite)) + return bite; + + // 3. Let code point be the index code point for byte − 0x80 in + // index single-byte. + var code_point = index[bite - 0x80]; + + // 4. If code point is null, return error. + if (code_point === null) + return decoderError(fatal); + + // 5. Return a code point whose value is code point. + return code_point; + }; + } + + // 10.2 single-byte encoder + /** + * @constructor + * @implements {Encoder} + * @param {!Array.} index The encoding index. + * @param {{fatal: boolean}} options + */ + function SingleByteEncoder(index, options) { + var fatal = options.fatal; + /** + * @param {Stream} stream Input stream. + * @param {number} code_point Next code point read from the stream. + * @return {(number|!Array.)} Byte(s) to emit. + */ + this.handler = function(stream, code_point) { + // 1. If code point is end-of-stream, return finished. + if (code_point === end_of_stream) + return finished; + + // 2. If code point is an ASCII code point, return a byte whose + // value is code point. + if (isASCIICodePoint(code_point)) + return code_point; + + // 3. Let pointer be the index pointer for code point in index + // single-byte. + var pointer = indexPointerFor(code_point, index); + + // 4. If pointer is null, return error with code point. + if (pointer === null) + encoderError(code_point); + + // 5. Return a byte whose value is pointer + 0x80. + return pointer + 0x80; + }; + } + + (function() { + if (!('encoding-indexes' in global)) + return; + encodings.forEach(function(category) { + if (category.heading !== 'Legacy single-byte encodings') + return; + category.encodings.forEach(function(encoding) { + var name = encoding.name; + var idx = index(name.toLowerCase()); + /** @param {{fatal: boolean}} options */ + decoders[name] = function(options) { + return new SingleByteDecoder(idx, options); + }; + /** @param {{fatal: boolean}} options */ + encoders[name] = function(options) { + return new SingleByteEncoder(idx, options); + }; + }); + }); + }()); + + // + // 11. Legacy multi-byte Chinese (simplified) encodings + // + + // 11.1 gbk + + // 11.1.1 gbk decoder + // gbk's decoder is gb18030's decoder. + /** @param {{fatal: boolean}} options */ + decoders['GBK'] = function(options) { + return new GB18030Decoder(options); + }; + + // 11.1.2 gbk encoder + // gbk's encoder is gb18030's encoder with its gbk flag set. + /** @param {{fatal: boolean}} options */ + encoders['GBK'] = function(options) { + return new GB18030Encoder(options, true); + }; + + // 11.2 gb18030 + + // 11.2.1 gb18030 decoder + /** + * @constructor + * @implements {Decoder} + * @param {{fatal: boolean}} options + */ + function GB18030Decoder(options) { + var fatal = options.fatal; + // gb18030's decoder has an associated gb18030 first, gb18030 + // second, and gb18030 third (all initially 0x00). + var /** @type {number} */ gb18030_first = 0x00, + /** @type {number} */ gb18030_second = 0x00, + /** @type {number} */ gb18030_third = 0x00; + /** + * @param {Stream} stream The stream of bytes being decoded. + * @param {number} bite The next byte read from the stream. + * @return {?(number|!Array.)} The next code point(s) + * decoded, or null if not enough data exists in the input + * stream to decode a complete code point. + */ + this.handler = function(stream, bite) { + // 1. If byte is end-of-stream and gb18030 first, gb18030 + // second, and gb18030 third are 0x00, return finished. + if (bite === end_of_stream && gb18030_first === 0x00 && + gb18030_second === 0x00 && gb18030_third === 0x00) { + return finished; + } + // 2. If byte is end-of-stream, and gb18030 first, gb18030 + // second, or gb18030 third is not 0x00, set gb18030 first, + // gb18030 second, and gb18030 third to 0x00, and return error. + if (bite === end_of_stream && + (gb18030_first !== 0x00 || gb18030_second !== 0x00 || + gb18030_third !== 0x00)) { + gb18030_first = 0x00; + gb18030_second = 0x00; + gb18030_third = 0x00; + decoderError(fatal); + } + var code_point; + // 3. If gb18030 third is not 0x00, run these substeps: + if (gb18030_third !== 0x00) { + // 1. Let code point be null. + code_point = null; + // 2. If byte is in the range 0x30 to 0x39, inclusive, set + // code point to the index gb18030 ranges code point for + // (((gb18030 first − 0x81) × 10 + gb18030 second − 0x30) × + // 126 + gb18030 third − 0x81) × 10 + byte − 0x30. + if (inRange(bite, 0x30, 0x39)) { + code_point = indexGB18030RangesCodePointFor( + (((gb18030_first - 0x81) * 10 + gb18030_second - 0x30) * 126 + + gb18030_third - 0x81) * 10 + bite - 0x30); + } + + // 3. Let buffer be a byte sequence consisting of gb18030 + // second, gb18030 third, and byte, in order. + var buffer = [gb18030_second, gb18030_third, bite]; + + // 4. Set gb18030 first, gb18030 second, and gb18030 third to + // 0x00. + gb18030_first = 0x00; + gb18030_second = 0x00; + gb18030_third = 0x00; + + // 5. If code point is null, prepend buffer to stream and + // return error. + if (code_point === null) { + stream.prepend(buffer); + return decoderError(fatal); + } + + // 6. Return a code point whose value is code point. + return code_point; + } + + // 4. If gb18030 second is not 0x00, run these substeps: + if (gb18030_second !== 0x00) { + + // 1. If byte is in the range 0x81 to 0xFE, inclusive, set + // gb18030 third to byte and return continue. + if (inRange(bite, 0x81, 0xFE)) { + gb18030_third = bite; + return null; + } + + // 2. Prepend gb18030 second followed by byte to stream, set + // gb18030 first and gb18030 second to 0x00, and return error. + stream.prepend([gb18030_second, bite]); + gb18030_first = 0x00; + gb18030_second = 0x00; + return decoderError(fatal); + } + + // 5. If gb18030 first is not 0x00, run these substeps: + if (gb18030_first !== 0x00) { + + // 1. If byte is in the range 0x30 to 0x39, inclusive, set + // gb18030 second to byte and return continue. + if (inRange(bite, 0x30, 0x39)) { + gb18030_second = bite; + return null; + } + + // 2. Let lead be gb18030 first, let pointer be null, and set + // gb18030 first to 0x00. + var lead = gb18030_first; + var pointer = null; + gb18030_first = 0x00; + + // 3. Let offset be 0x40 if byte is less than 0x7F and 0x41 + // otherwise. + var offset = bite < 0x7F ? 0x40 : 0x41; + + // 4. If byte is in the range 0x40 to 0x7E, inclusive, or 0x80 + // to 0xFE, inclusive, set pointer to (lead − 0x81) × 190 + + // (byte − offset). + if (inRange(bite, 0x40, 0x7E) || inRange(bite, 0x80, 0xFE)) + pointer = (lead - 0x81) * 190 + (bite - offset); + + // 5. Let code point be null if pointer is null and the index + // code point for pointer in index gb18030 otherwise. + code_point = pointer === null ? null : + indexCodePointFor(pointer, index('gb18030')); + + // 6. If code point is null and byte is an ASCII byte, prepend + // byte to stream. + if (code_point === null && isASCIIByte(bite)) + stream.prepend(bite); + + // 7. If code point is null, return error. + if (code_point === null) + return decoderError(fatal); + + // 8. Return a code point whose value is code point. + return code_point; + } + + // 6. If byte is an ASCII byte, return a code point whose value + // is byte. + if (isASCIIByte(bite)) + return bite; + + // 7. If byte is 0x80, return code point U+20AC. + if (bite === 0x80) + return 0x20AC; + + // 8. If byte is in the range 0x81 to 0xFE, inclusive, set + // gb18030 first to byte and return continue. + if (inRange(bite, 0x81, 0xFE)) { + gb18030_first = bite; + return null; + } + + // 9. Return error. + return decoderError(fatal); + }; + } + + // 11.2.2 gb18030 encoder + /** + * @constructor + * @implements {Encoder} + * @param {{fatal: boolean}} options + * @param {boolean=} gbk_flag + */ + function GB18030Encoder(options, gbk_flag) { + var fatal = options.fatal; + // gb18030's decoder has an associated gbk flag (initially unset). + /** + * @param {Stream} stream Input stream. + * @param {number} code_point Next code point read from the stream. + * @return {(number|!Array.)} Byte(s) to emit. + */ + this.handler = function(stream, code_point) { + // 1. If code point is end-of-stream, return finished. + if (code_point === end_of_stream) + return finished; + + // 2. If code point is an ASCII code point, return a byte whose + // value is code point. + if (isASCIICodePoint(code_point)) + return code_point; + + // 3. If code point is U+E5E5, return error with code point. + if (code_point === 0xE5E5) + return encoderError(code_point); + + // 4. If the gbk flag is set and code point is U+20AC, return + // byte 0x80. + if (gbk_flag && code_point === 0x20AC) + return 0x80; + + // 5. Let pointer be the index pointer for code point in index + // gb18030. + var pointer = indexPointerFor(code_point, index('gb18030')); + + // 6. If pointer is not null, run these substeps: + if (pointer !== null) { + + // 1. Let lead be floor(pointer / 190) + 0x81. + var lead = floor(pointer / 190) + 0x81; + + // 2. Let trail be pointer % 190. + var trail = pointer % 190; + + // 3. Let offset be 0x40 if trail is less than 0x3F and 0x41 otherwise. + var offset = trail < 0x3F ? 0x40 : 0x41; + + // 4. Return two bytes whose values are lead and trail + offset. + return [lead, trail + offset]; + } + + // 7. If gbk flag is set, return error with code point. + if (gbk_flag) + return encoderError(code_point); + + // 8. Set pointer to the index gb18030 ranges pointer for code + // point. + pointer = indexGB18030RangesPointerFor(code_point); + + // 9. Let byte1 be floor(pointer / 10 / 126 / 10). + var byte1 = floor(pointer / 10 / 126 / 10); + + // 10. Set pointer to pointer − byte1 × 10 × 126 × 10. + pointer = pointer - byte1 * 10 * 126 * 10; + + // 11. Let byte2 be floor(pointer / 10 / 126). + var byte2 = floor(pointer / 10 / 126); + + // 12. Set pointer to pointer − byte2 × 10 × 126. + pointer = pointer - byte2 * 10 * 126; + + // 13. Let byte3 be floor(pointer / 10). + var byte3 = floor(pointer / 10); + + // 14. Let byte4 be pointer − byte3 × 10. + var byte4 = pointer - byte3 * 10; + + // 15. Return four bytes whose values are byte1 + 0x81, byte2 + + // 0x30, byte3 + 0x81, byte4 + 0x30. + return [byte1 + 0x81, + byte2 + 0x30, + byte3 + 0x81, + byte4 + 0x30]; + }; + } + + /** @param {{fatal: boolean}} options */ + encoders['gb18030'] = function(options) { + return new GB18030Encoder(options); + }; + /** @param {{fatal: boolean}} options */ + decoders['gb18030'] = function(options) { + return new GB18030Decoder(options); + }; + + + // + // 12. Legacy multi-byte Chinese (traditional) encodings + // + + // 12.1 Big5 + + // 12.1.1 Big5 decoder + /** + * @constructor + * @implements {Decoder} + * @param {{fatal: boolean}} options + */ + function Big5Decoder(options) { + var fatal = options.fatal; + // Big5's decoder has an associated Big5 lead (initially 0x00). + var /** @type {number} */ Big5_lead = 0x00; + + /** + * @param {Stream} stream The stream of bytes being decoded. + * @param {number} bite The next byte read from the stream. + * @return {?(number|!Array.)} The next code point(s) + * decoded, or null if not enough data exists in the input + * stream to decode a complete code point. + */ + this.handler = function(stream, bite) { + // 1. If byte is end-of-stream and Big5 lead is not 0x00, set + // Big5 lead to 0x00 and return error. + if (bite === end_of_stream && Big5_lead !== 0x00) { + Big5_lead = 0x00; + return decoderError(fatal); + } + + // 2. If byte is end-of-stream and Big5 lead is 0x00, return + // finished. + if (bite === end_of_stream && Big5_lead === 0x00) + return finished; + + // 3. If Big5 lead is not 0x00, let lead be Big5 lead, let + // pointer be null, set Big5 lead to 0x00, and then run these + // substeps: + if (Big5_lead !== 0x00) { + var lead = Big5_lead; + var pointer = null; + Big5_lead = 0x00; + + // 1. Let offset be 0x40 if byte is less than 0x7F and 0x62 + // otherwise. + var offset = bite < 0x7F ? 0x40 : 0x62; + + // 2. If byte is in the range 0x40 to 0x7E, inclusive, or 0xA1 + // to 0xFE, inclusive, set pointer to (lead − 0x81) × 157 + + // (byte − offset). + if (inRange(bite, 0x40, 0x7E) || inRange(bite, 0xA1, 0xFE)) + pointer = (lead - 0x81) * 157 + (bite - offset); + + // 3. If there is a row in the table below whose first column + // is pointer, return the two code points listed in its second + // column + // Pointer | Code points + // --------+-------------- + // 1133 | U+00CA U+0304 + // 1135 | U+00CA U+030C + // 1164 | U+00EA U+0304 + // 1166 | U+00EA U+030C + switch (pointer) { + case 1133: return [0x00CA, 0x0304]; + case 1135: return [0x00CA, 0x030C]; + case 1164: return [0x00EA, 0x0304]; + case 1166: return [0x00EA, 0x030C]; + } + + // 4. Let code point be null if pointer is null and the index + // code point for pointer in index Big5 otherwise. + var code_point = (pointer === null) ? null : + indexCodePointFor(pointer, index('big5')); + + // 5. If code point is null and byte is an ASCII byte, prepend + // byte to stream. + if (code_point === null && isASCIIByte(bite)) + stream.prepend(bite); + + // 6. If code point is null, return error. + if (code_point === null) + return decoderError(fatal); + + // 7. Return a code point whose value is code point. + return code_point; + } + + // 4. If byte is an ASCII byte, return a code point whose value + // is byte. + if (isASCIIByte(bite)) + return bite; + + // 5. If byte is in the range 0x81 to 0xFE, inclusive, set Big5 + // lead to byte and return continue. + if (inRange(bite, 0x81, 0xFE)) { + Big5_lead = bite; + return null; + } + + // 6. Return error. + return decoderError(fatal); + }; + } + + // 12.1.2 Big5 encoder + /** + * @constructor + * @implements {Encoder} + * @param {{fatal: boolean}} options + */ + function Big5Encoder(options) { + var fatal = options.fatal; + /** + * @param {Stream} stream Input stream. + * @param {number} code_point Next code point read from the stream. + * @return {(number|!Array.)} Byte(s) to emit. + */ + this.handler = function(stream, code_point) { + // 1. If code point is end-of-stream, return finished. + if (code_point === end_of_stream) + return finished; + + // 2. If code point is an ASCII code point, return a byte whose + // value is code point. + if (isASCIICodePoint(code_point)) + return code_point; + + // 3. Let pointer be the index Big5 pointer for code point. + var pointer = indexBig5PointerFor(code_point); + + // 4. If pointer is null, return error with code point. + if (pointer === null) + return encoderError(code_point); + + // 5. Let lead be floor(pointer / 157) + 0x81. + var lead = floor(pointer / 157) + 0x81; + + // 6. If lead is less than 0xA1, return error with code point. + if (lead < 0xA1) + return encoderError(code_point); + + // 7. Let trail be pointer % 157. + var trail = pointer % 157; + + // 8. Let offset be 0x40 if trail is less than 0x3F and 0x62 + // otherwise. + var offset = trail < 0x3F ? 0x40 : 0x62; + + // Return two bytes whose values are lead and trail + offset. + return [lead, trail + offset]; + }; + } + + /** @param {{fatal: boolean}} options */ + encoders['Big5'] = function(options) { + return new Big5Encoder(options); + }; + /** @param {{fatal: boolean}} options */ + decoders['Big5'] = function(options) { + return new Big5Decoder(options); + }; + + + // + // 13. Legacy multi-byte Japanese encodings + // + + // 13.1 euc-jp + + // 13.1.1 euc-jp decoder + /** + * @constructor + * @implements {Decoder} + * @param {{fatal: boolean}} options + */ + function EUCJPDecoder(options) { + var fatal = options.fatal; + + // euc-jp's decoder has an associated euc-jp jis0212 flag + // (initially unset) and euc-jp lead (initially 0x00). + var /** @type {boolean} */ eucjp_jis0212_flag = false, + /** @type {number} */ eucjp_lead = 0x00; + + /** + * @param {Stream} stream The stream of bytes being decoded. + * @param {number} bite The next byte read from the stream. + * @return {?(number|!Array.)} The next code point(s) + * decoded, or null if not enough data exists in the input + * stream to decode a complete code point. + */ + this.handler = function(stream, bite) { + // 1. If byte is end-of-stream and euc-jp lead is not 0x00, set + // euc-jp lead to 0x00, and return error. + if (bite === end_of_stream && eucjp_lead !== 0x00) { + eucjp_lead = 0x00; + return decoderError(fatal); + } + + // 2. If byte is end-of-stream and euc-jp lead is 0x00, return + // finished. + if (bite === end_of_stream && eucjp_lead === 0x00) + return finished; + + // 3. If euc-jp lead is 0x8E and byte is in the range 0xA1 to + // 0xDF, inclusive, set euc-jp lead to 0x00 and return a code + // point whose value is 0xFF61 − 0xA1 + byte. + if (eucjp_lead === 0x8E && inRange(bite, 0xA1, 0xDF)) { + eucjp_lead = 0x00; + return 0xFF61 - 0xA1 + bite; + } + + // 4. If euc-jp lead is 0x8F and byte is in the range 0xA1 to + // 0xFE, inclusive, set the euc-jp jis0212 flag, set euc-jp lead + // to byte, and return continue. + if (eucjp_lead === 0x8F && inRange(bite, 0xA1, 0xFE)) { + eucjp_jis0212_flag = true; + eucjp_lead = bite; + return null; + } + + // 5. If euc-jp lead is not 0x00, let lead be euc-jp lead, set + // euc-jp lead to 0x00, and run these substeps: + if (eucjp_lead !== 0x00) { + var lead = eucjp_lead; + eucjp_lead = 0x00; + + // 1. Let code point be null. + var code_point = null; + + // 2. If lead and byte are both in the range 0xA1 to 0xFE, + // inclusive, set code point to the index code point for (lead + // − 0xA1) × 94 + byte − 0xA1 in index jis0208 if the euc-jp + // jis0212 flag is unset and in index jis0212 otherwise. + if (inRange(lead, 0xA1, 0xFE) && inRange(bite, 0xA1, 0xFE)) { + code_point = indexCodePointFor( + (lead - 0xA1) * 94 + (bite - 0xA1), + index(!eucjp_jis0212_flag ? 'jis0208' : 'jis0212')); + } + + // 3. Unset the euc-jp jis0212 flag. + eucjp_jis0212_flag = false; + + // 4. If byte is not in the range 0xA1 to 0xFE, inclusive, + // prepend byte to stream. + if (!inRange(bite, 0xA1, 0xFE)) + stream.prepend(bite); + + // 5. If code point is null, return error. + if (code_point === null) + return decoderError(fatal); + + // 6. Return a code point whose value is code point. + return code_point; + } + + // 6. If byte is an ASCII byte, return a code point whose value + // is byte. + if (isASCIIByte(bite)) + return bite; + + // 7. If byte is 0x8E, 0x8F, or in the range 0xA1 to 0xFE, + // inclusive, set euc-jp lead to byte and return continue. + if (bite === 0x8E || bite === 0x8F || inRange(bite, 0xA1, 0xFE)) { + eucjp_lead = bite; + return null; + } + + // 8. Return error. + return decoderError(fatal); + }; + } + + // 13.1.2 euc-jp encoder + /** + * @constructor + * @implements {Encoder} + * @param {{fatal: boolean}} options + */ + function EUCJPEncoder(options) { + var fatal = options.fatal; + /** + * @param {Stream} stream Input stream. + * @param {number} code_point Next code point read from the stream. + * @return {(number|!Array.)} Byte(s) to emit. + */ + this.handler = function(stream, code_point) { + // 1. If code point is end-of-stream, return finished. + if (code_point === end_of_stream) + return finished; + + // 2. If code point is an ASCII code point, return a byte whose + // value is code point. + if (isASCIICodePoint(code_point)) + return code_point; + + // 3. If code point is U+00A5, return byte 0x5C. + if (code_point === 0x00A5) + return 0x5C; + + // 4. If code point is U+203E, return byte 0x7E. + if (code_point === 0x203E) + return 0x7E; + + // 5. If code point is in the range U+FF61 to U+FF9F, inclusive, + // return two bytes whose values are 0x8E and code point − + // 0xFF61 + 0xA1. + if (inRange(code_point, 0xFF61, 0xFF9F)) + return [0x8E, code_point - 0xFF61 + 0xA1]; + + // 6. If code point is U+2212, set it to U+FF0D. + if (code_point === 0x2212) + code_point = 0xFF0D; + + // 7. Let pointer be the index pointer for code point in index + // jis0208. + var pointer = indexPointerFor(code_point, index('jis0208')); + + // 8. If pointer is null, return error with code point. + if (pointer === null) + return encoderError(code_point); + + // 9. Let lead be floor(pointer / 94) + 0xA1. + var lead = floor(pointer / 94) + 0xA1; + + // 10. Let trail be pointer % 94 + 0xA1. + var trail = pointer % 94 + 0xA1; + + // 11. Return two bytes whose values are lead and trail. + return [lead, trail]; + }; + } + + /** @param {{fatal: boolean}} options */ + encoders['EUC-JP'] = function(options) { + return new EUCJPEncoder(options); + }; + /** @param {{fatal: boolean}} options */ + decoders['EUC-JP'] = function(options) { + return new EUCJPDecoder(options); + }; + + // 13.2 iso-2022-jp + + // 13.2.1 iso-2022-jp decoder + /** + * @constructor + * @implements {Decoder} + * @param {{fatal: boolean}} options + */ + function ISO2022JPDecoder(options) { + var fatal = options.fatal; + /** @enum */ + var states = { + ASCII: 0, + Roman: 1, + Katakana: 2, + LeadByte: 3, + TrailByte: 4, + EscapeStart: 5, + Escape: 6 + }; + // iso-2022-jp's decoder has an associated iso-2022-jp decoder + // state (initially ASCII), iso-2022-jp decoder output state + // (initially ASCII), iso-2022-jp lead (initially 0x00), and + // iso-2022-jp output flag (initially unset). + var /** @type {number} */ iso2022jp_decoder_state = states.ASCII, + /** @type {number} */ iso2022jp_decoder_output_state = states.ASCII, + /** @type {number} */ iso2022jp_lead = 0x00, + /** @type {boolean} */ iso2022jp_output_flag = false; + /** + * @param {Stream} stream The stream of bytes being decoded. + * @param {number} bite The next byte read from the stream. + * @return {?(number|!Array.)} The next code point(s) + * decoded, or null if not enough data exists in the input + * stream to decode a complete code point. + */ + this.handler = function(stream, bite) { + // switching on iso-2022-jp decoder state: + switch (iso2022jp_decoder_state) { + default: + case states.ASCII: + // ASCII + // Based on byte: + + // 0x1B + if (bite === 0x1B) { + // Set iso-2022-jp decoder state to escape start and return + // continue. + iso2022jp_decoder_state = states.EscapeStart; + return null; + } + + // 0x00 to 0x7F, excluding 0x0E, 0x0F, and 0x1B + if (inRange(bite, 0x00, 0x7F) && bite !== 0x0E + && bite !== 0x0F && bite !== 0x1B) { + // Unset the iso-2022-jp output flag and return a code point + // whose value is byte. + iso2022jp_output_flag = false; + return bite; + } + + // end-of-stream + if (bite === end_of_stream) { + // Return finished. + return finished; + } + + // Otherwise + // Unset the iso-2022-jp output flag and return error. + iso2022jp_output_flag = false; + return decoderError(fatal); + + case states.Roman: + // Roman + // Based on byte: + + // 0x1B + if (bite === 0x1B) { + // Set iso-2022-jp decoder state to escape start and return + // continue. + iso2022jp_decoder_state = states.EscapeStart; + return null; + } + + // 0x5C + if (bite === 0x5C) { + // Unset the iso-2022-jp output flag and return code point + // U+00A5. + iso2022jp_output_flag = false; + return 0x00A5; + } + + // 0x7E + if (bite === 0x7E) { + // Unset the iso-2022-jp output flag and return code point + // U+203E. + iso2022jp_output_flag = false; + return 0x203E; + } + + // 0x00 to 0x7F, excluding 0x0E, 0x0F, 0x1B, 0x5C, and 0x7E + if (inRange(bite, 0x00, 0x7F) && bite !== 0x0E && bite !== 0x0F + && bite !== 0x1B && bite !== 0x5C && bite !== 0x7E) { + // Unset the iso-2022-jp output flag and return a code point + // whose value is byte. + iso2022jp_output_flag = false; + return bite; + } + + // end-of-stream + if (bite === end_of_stream) { + // Return finished. + return finished; + } + + // Otherwise + // Unset the iso-2022-jp output flag and return error. + iso2022jp_output_flag = false; + return decoderError(fatal); + + case states.Katakana: + // Katakana + // Based on byte: + + // 0x1B + if (bite === 0x1B) { + // Set iso-2022-jp decoder state to escape start and return + // continue. + iso2022jp_decoder_state = states.EscapeStart; + return null; + } + + // 0x21 to 0x5F + if (inRange(bite, 0x21, 0x5F)) { + // Unset the iso-2022-jp output flag and return a code point + // whose value is 0xFF61 − 0x21 + byte. + iso2022jp_output_flag = false; + return 0xFF61 - 0x21 + bite; + } + + // end-of-stream + if (bite === end_of_stream) { + // Return finished. + return finished; + } + + // Otherwise + // Unset the iso-2022-jp output flag and return error. + iso2022jp_output_flag = false; + return decoderError(fatal); + + case states.LeadByte: + // Lead byte + // Based on byte: + + // 0x1B + if (bite === 0x1B) { + // Set iso-2022-jp decoder state to escape start and return + // continue. + iso2022jp_decoder_state = states.EscapeStart; + return null; + } + + // 0x21 to 0x7E + if (inRange(bite, 0x21, 0x7E)) { + // Unset the iso-2022-jp output flag, set iso-2022-jp lead + // to byte, iso-2022-jp decoder state to trail byte, and + // return continue. + iso2022jp_output_flag = false; + iso2022jp_lead = bite; + iso2022jp_decoder_state = states.TrailByte; + return null; + } + + // end-of-stream + if (bite === end_of_stream) { + // Return finished. + return finished; + } + + // Otherwise + // Unset the iso-2022-jp output flag and return error. + iso2022jp_output_flag = false; + return decoderError(fatal); + + case states.TrailByte: + // Trail byte + // Based on byte: + + // 0x1B + if (bite === 0x1B) { + // Set iso-2022-jp decoder state to escape start and return + // continue. + iso2022jp_decoder_state = states.EscapeStart; + return decoderError(fatal); + } + + // 0x21 to 0x7E + if (inRange(bite, 0x21, 0x7E)) { + // 1. Set the iso-2022-jp decoder state to lead byte. + iso2022jp_decoder_state = states.LeadByte; + + // 2. Let pointer be (iso-2022-jp lead − 0x21) × 94 + byte − 0x21. + var pointer = (iso2022jp_lead - 0x21) * 94 + bite - 0x21; + + // 3. Let code point be the index code point for pointer in + // index jis0208. + var code_point = indexCodePointFor(pointer, index('jis0208')); + + // 4. If code point is null, return error. + if (code_point === null) + return decoderError(fatal); + + // 5. Return a code point whose value is code point. + return code_point; + } + + // end-of-stream + if (bite === end_of_stream) { + // Set the iso-2022-jp decoder state to lead byte, prepend + // byte to stream, and return error. + iso2022jp_decoder_state = states.LeadByte; + stream.prepend(bite); + return decoderError(fatal); + } + + // Otherwise + // Set iso-2022-jp decoder state to lead byte and return + // error. + iso2022jp_decoder_state = states.LeadByte; + return decoderError(fatal); + + case states.EscapeStart: + // Escape start + + // 1. If byte is either 0x24 or 0x28, set iso-2022-jp lead to + // byte, iso-2022-jp decoder state to escape, and return + // continue. + if (bite === 0x24 || bite === 0x28) { + iso2022jp_lead = bite; + iso2022jp_decoder_state = states.Escape; + return null; + } + + // 2. Prepend byte to stream. + stream.prepend(bite); + + // 3. Unset the iso-2022-jp output flag, set iso-2022-jp + // decoder state to iso-2022-jp decoder output state, and + // return error. + iso2022jp_output_flag = false; + iso2022jp_decoder_state = iso2022jp_decoder_output_state; + return decoderError(fatal); + + case states.Escape: + // Escape + + // 1. Let lead be iso-2022-jp lead and set iso-2022-jp lead to + // 0x00. + var lead = iso2022jp_lead; + iso2022jp_lead = 0x00; + + // 2. Let state be null. + var state = null; + + // 3. If lead is 0x28 and byte is 0x42, set state to ASCII. + if (lead === 0x28 && bite === 0x42) + state = states.ASCII; + + // 4. If lead is 0x28 and byte is 0x4A, set state to Roman. + if (lead === 0x28 && bite === 0x4A) + state = states.Roman; + + // 5. If lead is 0x28 and byte is 0x49, set state to Katakana. + if (lead === 0x28 && bite === 0x49) + state = states.Katakana; + + // 6. If lead is 0x24 and byte is either 0x40 or 0x42, set + // state to lead byte. + if (lead === 0x24 && (bite === 0x40 || bite === 0x42)) + state = states.LeadByte; + + // 7. If state is non-null, run these substeps: + if (state !== null) { + // 1. Set iso-2022-jp decoder state and iso-2022-jp decoder + // output state to states. + iso2022jp_decoder_state = iso2022jp_decoder_state = state; + + // 2. Let output flag be the iso-2022-jp output flag. + var output_flag = iso2022jp_output_flag; + + // 3. Set the iso-2022-jp output flag. + iso2022jp_output_flag = true; + + // 4. Return continue, if output flag is unset, and error + // otherwise. + return !output_flag ? null : decoderError(fatal); + } + + // 8. Prepend lead and byte to stream. + stream.prepend([lead, bite]); + + // 9. Unset the iso-2022-jp output flag, set iso-2022-jp + // decoder state to iso-2022-jp decoder output state and + // return error. + iso2022jp_output_flag = false; + iso2022jp_decoder_state = iso2022jp_decoder_output_state; + return decoderError(fatal); + } + }; + } + + // 13.2.2 iso-2022-jp encoder + /** + * @constructor + * @implements {Encoder} + * @param {{fatal: boolean}} options + */ + function ISO2022JPEncoder(options) { + var fatal = options.fatal; + // iso-2022-jp's encoder has an associated iso-2022-jp encoder + // state which is one of ASCII, Roman, and jis0208 (initially + // ASCII). + /** @enum */ + var states = { + ASCII: 0, + Roman: 1, + jis0208: 2 + }; + var /** @type {number} */ iso2022jp_state = states.ASCII; + /** + * @param {Stream} stream Input stream. + * @param {number} code_point Next code point read from the stream. + * @return {(number|!Array.)} Byte(s) to emit. + */ + this.handler = function(stream, code_point) { + // 1. If code point is end-of-stream and iso-2022-jp encoder + // state is not ASCII, prepend code point to stream, set + // iso-2022-jp encoder state to ASCII, and return three bytes + // 0x1B 0x28 0x42. + if (code_point === end_of_stream && + iso2022jp_state !== states.ASCII) { + stream.prepend(code_point); + iso2022jp_state = states.ASCII; + return [0x1B, 0x28, 0x42]; + } + + // 2. If code point is end-of-stream and iso-2022-jp encoder + // state is ASCII, return finished. + if (code_point === end_of_stream && iso2022jp_state === states.ASCII) + return finished; + + // 3. If ISO-2022-JP encoder state is ASCII or Roman, and code + // point is U+000E, U+000F, or U+001B, return error with U+FFFD. + if ((iso2022jp_state === states.ASCII || + iso2022jp_state === states.Roman) && + (code_point === 0x000E || code_point === 0x000F || + code_point === 0x001B)) { + return encoderError(0xFFFD); + } + + // 4. If iso-2022-jp encoder state is ASCII and code point is an + // ASCII code point, return a byte whose value is code point. + if (iso2022jp_state === states.ASCII && + isASCIICodePoint(code_point)) + return code_point; + + // 5. If iso-2022-jp encoder state is Roman and code point is an + // ASCII code point, excluding U+005C and U+007E, or is U+00A5 + // or U+203E, run these substeps: + if (iso2022jp_state === states.Roman && + ((isASCIICodePoint(code_point) && + code_point !== 0x005C && code_point !== 0x007E) || + (code_point == 0x00A5 || code_point == 0x203E))) { + + // 1. If code point is an ASCII code point, return a byte + // whose value is code point. + if (isASCIICodePoint(code_point)) + return code_point; + + // 2. If code point is U+00A5, return byte 0x5C. + if (code_point === 0x00A5) + return 0x5C; + + // 3. If code point is U+203E, return byte 0x7E. + if (code_point === 0x203E) + return 0x7E; + } + + // 6. If code point is an ASCII code point, and iso-2022-jp + // encoder state is not ASCII, prepend code point to stream, set + // iso-2022-jp encoder state to ASCII, and return three bytes + // 0x1B 0x28 0x42. + if (isASCIICodePoint(code_point) && + iso2022jp_state !== states.ASCII) { + stream.prepend(code_point); + iso2022jp_state = states.ASCII; + return [0x1B, 0x28, 0x42]; + } + + // 7. If code point is either U+00A5 or U+203E, and iso-2022-jp + // encoder state is not Roman, prepend code point to stream, set + // iso-2022-jp encoder state to Roman, and return three bytes + // 0x1B 0x28 0x4A. + if ((code_point === 0x00A5 || code_point === 0x203E) && + iso2022jp_state !== states.Roman) { + stream.prepend(code_point); + iso2022jp_state = states.Roman; + return [0x1B, 0x28, 0x4A]; + } + + // 8. If code point is U+2212, set it to U+FF0D. + if (code_point === 0x2212) + code_point = 0xFF0D; + + // 9. Let pointer be the index pointer for code point in index + // jis0208. + var pointer = indexPointerFor(code_point, index('jis0208')); + + // 10. If pointer is null, return error with code point. + if (pointer === null) + return encoderError(code_point); + + // 11. If iso-2022-jp encoder state is not jis0208, prepend code + // point to stream, set iso-2022-jp encoder state to jis0208, + // and return three bytes 0x1B 0x24 0x42. + if (iso2022jp_state !== states.jis0208) { + stream.prepend(code_point); + iso2022jp_state = states.jis0208; + return [0x1B, 0x24, 0x42]; + } + + // 12. Let lead be floor(pointer / 94) + 0x21. + var lead = floor(pointer / 94) + 0x21; + + // 13. Let trail be pointer % 94 + 0x21. + var trail = pointer % 94 + 0x21; + + // 14. Return two bytes whose values are lead and trail. + return [lead, trail]; + }; + } + + /** @param {{fatal: boolean}} options */ + encoders['ISO-2022-JP'] = function(options) { + return new ISO2022JPEncoder(options); + }; + /** @param {{fatal: boolean}} options */ + decoders['ISO-2022-JP'] = function(options) { + return new ISO2022JPDecoder(options); + }; + + // 13.3 Shift_JIS + + // 13.3.1 Shift_JIS decoder + /** + * @constructor + * @implements {Decoder} + * @param {{fatal: boolean}} options + */ + function ShiftJISDecoder(options) { + var fatal = options.fatal; + // Shift_JIS's decoder has an associated Shift_JIS lead (initially + // 0x00). + var /** @type {number} */ Shift_JIS_lead = 0x00; + /** + * @param {Stream} stream The stream of bytes being decoded. + * @param {number} bite The next byte read from the stream. + * @return {?(number|!Array.)} The next code point(s) + * decoded, or null if not enough data exists in the input + * stream to decode a complete code point. + */ + this.handler = function(stream, bite) { + // 1. If byte is end-of-stream and Shift_JIS lead is not 0x00, + // set Shift_JIS lead to 0x00 and return error. + if (bite === end_of_stream && Shift_JIS_lead !== 0x00) { + Shift_JIS_lead = 0x00; + return decoderError(fatal); + } + + // 2. If byte is end-of-stream and Shift_JIS lead is 0x00, + // return finished. + if (bite === end_of_stream && Shift_JIS_lead === 0x00) + return finished; + + // 3. If Shift_JIS lead is not 0x00, let lead be Shift_JIS lead, + // let pointer be null, set Shift_JIS lead to 0x00, and then run + // these substeps: + if (Shift_JIS_lead !== 0x00) { + var lead = Shift_JIS_lead; + var pointer = null; + Shift_JIS_lead = 0x00; + + // 1. Let offset be 0x40, if byte is less than 0x7F, and 0x41 + // otherwise. + var offset = (bite < 0x7F) ? 0x40 : 0x41; + + // 2. Let lead offset be 0x81, if lead is less than 0xA0, and + // 0xC1 otherwise. + var lead_offset = (lead < 0xA0) ? 0x81 : 0xC1; + + // 3. If byte is in the range 0x40 to 0x7E, inclusive, or 0x80 + // to 0xFC, inclusive, set pointer to (lead − lead offset) × + // 188 + byte − offset. + if (inRange(bite, 0x40, 0x7E) || inRange(bite, 0x80, 0xFC)) + pointer = (lead - lead_offset) * 188 + bite - offset; + + // 4. If pointer is in the range 8836 to 10715, inclusive, + // return a code point whose value is 0xE000 − 8836 + pointer. + if (inRange(pointer, 8836, 10715)) + return 0xE000 - 8836 + pointer; + + // 5. Let code point be null, if pointer is null, and the + // index code point for pointer in index jis0208 otherwise. + var code_point = (pointer === null) ? null : + indexCodePointFor(pointer, index('jis0208')); + + // 6. If code point is null and byte is an ASCII byte, prepend + // byte to stream. + if (code_point === null && isASCIIByte(bite)) + stream.prepend(bite); + + // 7. If code point is null, return error. + if (code_point === null) + return decoderError(fatal); + + // 8. Return a code point whose value is code point. + return code_point; + } + + // 4. If byte is an ASCII byte or 0x80, return a code point + // whose value is byte. + if (isASCIIByte(bite) || bite === 0x80) + return bite; + + // 5. If byte is in the range 0xA1 to 0xDF, inclusive, return a + // code point whose value is 0xFF61 − 0xA1 + byte. + if (inRange(bite, 0xA1, 0xDF)) + return 0xFF61 - 0xA1 + bite; + + // 6. If byte is in the range 0x81 to 0x9F, inclusive, or 0xE0 + // to 0xFC, inclusive, set Shift_JIS lead to byte and return + // continue. + if (inRange(bite, 0x81, 0x9F) || inRange(bite, 0xE0, 0xFC)) { + Shift_JIS_lead = bite; + return null; + } + + // 7. Return error. + return decoderError(fatal); + }; + } + + // 13.3.2 Shift_JIS encoder + /** + * @constructor + * @implements {Encoder} + * @param {{fatal: boolean}} options + */ + function ShiftJISEncoder(options) { + var fatal = options.fatal; + /** + * @param {Stream} stream Input stream. + * @param {number} code_point Next code point read from the stream. + * @return {(number|!Array.)} Byte(s) to emit. + */ + this.handler = function(stream, code_point) { + // 1. If code point is end-of-stream, return finished. + if (code_point === end_of_stream) + return finished; + + // 2. If code point is an ASCII code point or U+0080, return a + // byte whose value is code point. + if (isASCIICodePoint(code_point) || code_point === 0x0080) + return code_point; + + // 3. If code point is U+00A5, return byte 0x5C. + if (code_point === 0x00A5) + return 0x5C; + + // 4. If code point is U+203E, return byte 0x7E. + if (code_point === 0x203E) + return 0x7E; + + // 5. If code point is in the range U+FF61 to U+FF9F, inclusive, + // return a byte whose value is code point − 0xFF61 + 0xA1. + if (inRange(code_point, 0xFF61, 0xFF9F)) + return code_point - 0xFF61 + 0xA1; + + // 6. If code point is U+2212, set it to U+FF0D. + if (code_point === 0x2212) + code_point = 0xFF0D; + + // 7. Let pointer be the index Shift_JIS pointer for code point. + var pointer = indexShiftJISPointerFor(code_point); + + // 8. If pointer is null, return error with code point. + if (pointer === null) + return encoderError(code_point); + + // 9. Let lead be floor(pointer / 188). + var lead = floor(pointer / 188); + + // 10. Let lead offset be 0x81, if lead is less than 0x1F, and + // 0xC1 otherwise. + var lead_offset = (lead < 0x1F) ? 0x81 : 0xC1; + + // 11. Let trail be pointer % 188. + var trail = pointer % 188; + + // 12. Let offset be 0x40, if trail is less than 0x3F, and 0x41 + // otherwise. + var offset = (trail < 0x3F) ? 0x40 : 0x41; + + // 13. Return two bytes whose values are lead + lead offset and + // trail + offset. + return [lead + lead_offset, trail + offset]; + }; + } + + /** @param {{fatal: boolean}} options */ + encoders['Shift_JIS'] = function(options) { + return new ShiftJISEncoder(options); + }; + /** @param {{fatal: boolean}} options */ + decoders['Shift_JIS'] = function(options) { + return new ShiftJISDecoder(options); + }; + + // + // 14. Legacy multi-byte Korean encodings + // + + // 14.1 euc-kr + + // 14.1.1 euc-kr decoder + /** + * @constructor + * @implements {Decoder} + * @param {{fatal: boolean}} options + */ + function EUCKRDecoder(options) { + var fatal = options.fatal; + + // euc-kr's decoder has an associated euc-kr lead (initially 0x00). + var /** @type {number} */ euckr_lead = 0x00; + /** + * @param {Stream} stream The stream of bytes being decoded. + * @param {number} bite The next byte read from the stream. + * @return {?(number|!Array.)} The next code point(s) + * decoded, or null if not enough data exists in the input + * stream to decode a complete code point. + */ + this.handler = function(stream, bite) { + // 1. If byte is end-of-stream and euc-kr lead is not 0x00, set + // euc-kr lead to 0x00 and return error. + if (bite === end_of_stream && euckr_lead !== 0) { + euckr_lead = 0x00; + return decoderError(fatal); + } + + // 2. If byte is end-of-stream and euc-kr lead is 0x00, return + // finished. + if (bite === end_of_stream && euckr_lead === 0) + return finished; + + // 3. If euc-kr lead is not 0x00, let lead be euc-kr lead, let + // pointer be null, set euc-kr lead to 0x00, and then run these + // substeps: + if (euckr_lead !== 0x00) { + var lead = euckr_lead; + var pointer = null; + euckr_lead = 0x00; + + // 1. If byte is in the range 0x41 to 0xFE, inclusive, set + // pointer to (lead − 0x81) × 190 + (byte − 0x41). + if (inRange(bite, 0x41, 0xFE)) + pointer = (lead - 0x81) * 190 + (bite - 0x41); + + // 2. Let code point be null, if pointer is null, and the + // index code point for pointer in index euc-kr otherwise. + var code_point = (pointer === null) + ? null : indexCodePointFor(pointer, index('euc-kr')); + + // 3. If code point is null and byte is an ASCII byte, prepend + // byte to stream. + if (pointer === null && isASCIIByte(bite)) + stream.prepend(bite); + + // 4. If code point is null, return error. + if (code_point === null) + return decoderError(fatal); + + // 5. Return a code point whose value is code point. + return code_point; + } + + // 4. If byte is an ASCII byte, return a code point whose value + // is byte. + if (isASCIIByte(bite)) + return bite; + + // 5. If byte is in the range 0x81 to 0xFE, inclusive, set + // euc-kr lead to byte and return continue. + if (inRange(bite, 0x81, 0xFE)) { + euckr_lead = bite; + return null; + } + + // 6. Return error. + return decoderError(fatal); + }; + } + + // 14.1.2 euc-kr encoder + /** + * @constructor + * @implements {Encoder} + * @param {{fatal: boolean}} options + */ + function EUCKREncoder(options) { + var fatal = options.fatal; + /** + * @param {Stream} stream Input stream. + * @param {number} code_point Next code point read from the stream. + * @return {(number|!Array.)} Byte(s) to emit. + */ + this.handler = function(stream, code_point) { + // 1. If code point is end-of-stream, return finished. + if (code_point === end_of_stream) + return finished; + + // 2. If code point is an ASCII code point, return a byte whose + // value is code point. + if (isASCIICodePoint(code_point)) + return code_point; + + // 3. Let pointer be the index pointer for code point in index + // euc-kr. + var pointer = indexPointerFor(code_point, index('euc-kr')); + + // 4. If pointer is null, return error with code point. + if (pointer === null) + return encoderError(code_point); + + // 5. Let lead be floor(pointer / 190) + 0x81. + var lead = floor(pointer / 190) + 0x81; + + // 6. Let trail be pointer % 190 + 0x41. + var trail = (pointer % 190) + 0x41; + + // 7. Return two bytes whose values are lead and trail. + return [lead, trail]; + }; + } + + /** @param {{fatal: boolean}} options */ + encoders['EUC-KR'] = function(options) { + return new EUCKREncoder(options); + }; + /** @param {{fatal: boolean}} options */ + decoders['EUC-KR'] = function(options) { + return new EUCKRDecoder(options); + }; + + + // + // 15. Legacy miscellaneous encodings + // + + // 15.1 replacement + + // Not needed - API throws RangeError + + // 15.2 Common infrastructure for utf-16be and utf-16le + + /** + * @param {number} code_unit + * @param {boolean} utf16be + * @return {!Array.} bytes + */ + function convertCodeUnitToBytes(code_unit, utf16be) { + // 1. Let byte1 be code unit >> 8. + var byte1 = code_unit >> 8; + + // 2. Let byte2 be code unit & 0x00FF. + var byte2 = code_unit & 0x00FF; + + // 3. Then return the bytes in order: + // utf-16be flag is set: byte1, then byte2. + if (utf16be) + return [byte1, byte2]; + // utf-16be flag is unset: byte2, then byte1. + return [byte2, byte1]; + } + + // 15.2.1 shared utf-16 decoder + /** + * @constructor + * @implements {Decoder} + * @param {boolean} utf16_be True if big-endian, false if little-endian. + * @param {{fatal: boolean}} options + */ + function UTF16Decoder(utf16_be, options) { + var fatal = options.fatal; + var /** @type {?number} */ utf16_lead_byte = null, + /** @type {?number} */ utf16_lead_surrogate = null; + /** + * @param {Stream} stream The stream of bytes being decoded. + * @param {number} bite The next byte read from the stream. + * @return {?(number|!Array.)} The next code point(s) + * decoded, or null if not enough data exists in the input + * stream to decode a complete code point. + */ + this.handler = function(stream, bite) { + // 1. If byte is end-of-stream and either utf-16 lead byte or + // utf-16 lead surrogate is not null, set utf-16 lead byte and + // utf-16 lead surrogate to null, and return error. + if (bite === end_of_stream && (utf16_lead_byte !== null || + utf16_lead_surrogate !== null)) { + return decoderError(fatal); + } + + // 2. If byte is end-of-stream and utf-16 lead byte and utf-16 + // lead surrogate are null, return finished. + if (bite === end_of_stream && utf16_lead_byte === null && + utf16_lead_surrogate === null) { + return finished; + } + + // 3. If utf-16 lead byte is null, set utf-16 lead byte to byte + // and return continue. + if (utf16_lead_byte === null) { + utf16_lead_byte = bite; + return null; + } + + // 4. Let code unit be the result of: + var code_unit; + if (utf16_be) { + // utf-16be decoder flag is set + // (utf-16 lead byte << 8) + byte. + code_unit = (utf16_lead_byte << 8) + bite; + } else { + // utf-16be decoder flag is unset + // (byte << 8) + utf-16 lead byte. + code_unit = (bite << 8) + utf16_lead_byte; + } + // Then set utf-16 lead byte to null. + utf16_lead_byte = null; + + // 5. If utf-16 lead surrogate is not null, let lead surrogate + // be utf-16 lead surrogate, set utf-16 lead surrogate to null, + // and then run these substeps: + if (utf16_lead_surrogate !== null) { + var lead_surrogate = utf16_lead_surrogate; + utf16_lead_surrogate = null; + + // 1. If code unit is in the range U+DC00 to U+DFFF, + // inclusive, return a code point whose value is 0x10000 + + // ((lead surrogate − 0xD800) << 10) + (code unit − 0xDC00). + if (inRange(code_unit, 0xDC00, 0xDFFF)) { + return 0x10000 + (lead_surrogate - 0xD800) * 0x400 + + (code_unit - 0xDC00); + } + + // 2. Prepend the sequence resulting of converting code unit + // to bytes using utf-16be decoder flag to stream and return + // error. + stream.prepend(convertCodeUnitToBytes(code_unit, utf16_be)); + return decoderError(fatal); + } + + // 6. If code unit is in the range U+D800 to U+DBFF, inclusive, + // set utf-16 lead surrogate to code unit and return continue. + if (inRange(code_unit, 0xD800, 0xDBFF)) { + utf16_lead_surrogate = code_unit; + return null; + } + + // 7. If code unit is in the range U+DC00 to U+DFFF, inclusive, + // return error. + if (inRange(code_unit, 0xDC00, 0xDFFF)) + return decoderError(fatal); + + // 8. Return code point code unit. + return code_unit; + }; + } + + // 15.2.2 shared utf-16 encoder + /** + * @constructor + * @implements {Encoder} + * @param {boolean} utf16_be True if big-endian, false if little-endian. + * @param {{fatal: boolean}} options + */ + function UTF16Encoder(utf16_be, options) { + var fatal = options.fatal; + /** + * @param {Stream} stream Input stream. + * @param {number} code_point Next code point read from the stream. + * @return {(number|!Array.)} Byte(s) to emit. + */ + this.handler = function(stream, code_point) { + // 1. If code point is end-of-stream, return finished. + if (code_point === end_of_stream) + return finished; + + // 2. If code point is in the range U+0000 to U+FFFF, inclusive, + // return the sequence resulting of converting code point to + // bytes using utf-16be encoder flag. + if (inRange(code_point, 0x0000, 0xFFFF)) + return convertCodeUnitToBytes(code_point, utf16_be); + + // 3. Let lead be ((code point − 0x10000) >> 10) + 0xD800, + // converted to bytes using utf-16be encoder flag. + var lead = convertCodeUnitToBytes( + ((code_point - 0x10000) >> 10) + 0xD800, utf16_be); + + // 4. Let trail be ((code point − 0x10000) & 0x3FF) + 0xDC00, + // converted to bytes using utf-16be encoder flag. + var trail = convertCodeUnitToBytes( + ((code_point - 0x10000) & 0x3FF) + 0xDC00, utf16_be); + + // 5. Return a byte sequence of lead followed by trail. + return lead.concat(trail); + }; + } + + // 15.3 utf-16be + // 15.3.1 utf-16be decoder + /** @param {{fatal: boolean}} options */ + encoders['UTF-16BE'] = function(options) { + return new UTF16Encoder(true, options); + }; + // 15.3.2 utf-16be encoder + /** @param {{fatal: boolean}} options */ + decoders['UTF-16BE'] = function(options) { + return new UTF16Decoder(true, options); + }; + + // 15.4 utf-16le + // 15.4.1 utf-16le decoder + /** @param {{fatal: boolean}} options */ + encoders['UTF-16LE'] = function(options) { + return new UTF16Encoder(false, options); + }; + // 15.4.2 utf-16le encoder + /** @param {{fatal: boolean}} options */ + decoders['UTF-16LE'] = function(options) { + return new UTF16Decoder(false, options); + }; + + // 15.5 x-user-defined + + // 15.5.1 x-user-defined decoder + /** + * @constructor + * @implements {Decoder} + * @param {{fatal: boolean}} options + */ + function XUserDefinedDecoder(options) { + var fatal = options.fatal; + /** + * @param {Stream} stream The stream of bytes being decoded. + * @param {number} bite The next byte read from the stream. + * @return {?(number|!Array.)} The next code point(s) + * decoded, or null if not enough data exists in the input + * stream to decode a complete code point. + */ + this.handler = function(stream, bite) { + // 1. If byte is end-of-stream, return finished. + if (bite === end_of_stream) + return finished; + + // 2. If byte is an ASCII byte, return a code point whose value + // is byte. + if (isASCIIByte(bite)) + return bite; + + // 3. Return a code point whose value is 0xF780 + byte − 0x80. + return 0xF780 + bite - 0x80; + }; + } + + // 15.5.2 x-user-defined encoder + /** + * @constructor + * @implements {Encoder} + * @param {{fatal: boolean}} options + */ + function XUserDefinedEncoder(options) { + var fatal = options.fatal; + /** + * @param {Stream} stream Input stream. + * @param {number} code_point Next code point read from the stream. + * @return {(number|!Array.)} Byte(s) to emit. + */ + this.handler = function(stream, code_point) { + // 1.If code point is end-of-stream, return finished. + if (code_point === end_of_stream) + return finished; + + // 2. If code point is an ASCII code point, return a byte whose + // value is code point. + if (isASCIICodePoint(code_point)) + return code_point; + + // 3. If code point is in the range U+F780 to U+F7FF, inclusive, + // return a byte whose value is code point − 0xF780 + 0x80. + if (inRange(code_point, 0xF780, 0xF7FF)) + return code_point - 0xF780 + 0x80; + + // 4. Return error with code point. + return encoderError(code_point); + }; + } + + /** @param {{fatal: boolean}} options */ + encoders['x-user-defined'] = function(options) { + return new XUserDefinedEncoder(options); + }; + /** @param {{fatal: boolean}} options */ + decoders['x-user-defined'] = function(options) { + return new XUserDefinedDecoder(options); + }; + + if (typeof module !== "undefined" && module.exports) { + module.exports = { + TextEncoder: TextEncoder, + TextDecoder: TextDecoder, + EncodingIndexes: require("./encoding-indexes.js")["encoding-indexes"] + }; + } + +// For strict environments where `this` inside the global scope +// is `undefined`, take a pure object instead +}(this || {})); diff --git a/Url-Shortner/node_modules/bson/vendor/text-encoding/package.json b/Url-Shortner/node_modules/bson/vendor/text-encoding/package.json new file mode 100644 index 0000000..ffc3155 --- /dev/null +++ b/Url-Shortner/node_modules/bson/vendor/text-encoding/package.json @@ -0,0 +1,37 @@ +{ + "name": "text-encoding", + "author": "Joshua Bell ", + "contributors": [ + "Joshua Bell ", + "Rick Eyre ", + "Eugen Podaru ", + "Filip Dupanović ", + "Anne van Kesteren ", + "Author: Francis Avila ", + "Michael J. Ryan ", + "Pierre Queinnec ", + "Zack Weinberg " + ], + "version": "0.7.0", + "description": "Polyfill for the Encoding Living Standard's API.", + "main": "index.js", + "files": [ + "index.js", + "lib/encoding.js", + "lib/encoding-indexes.js" + ], + "repository": { + "type": "git", + "url": "https://github.com/inexorabletash/text-encoding.git" + }, + "keywords": [ + "encoding", + "decoding", + "living standard" + ], + "bugs": { + "url": "https://github.com/inexorabletash/text-encoding/issues" + }, + "homepage": "https://github.com/inexorabletash/text-encoding", + "license": "(Unlicense OR Apache-2.0)" +} diff --git a/Url-Shortner/node_modules/bytes/History.md b/Url-Shortner/node_modules/bytes/History.md new file mode 100644 index 0000000..d60ce0e --- /dev/null +++ b/Url-Shortner/node_modules/bytes/History.md @@ -0,0 +1,97 @@ +3.1.2 / 2022-01-27 +================== + + * Fix return value for un-parsable strings + +3.1.1 / 2021-11-15 +================== + + * Fix "thousandsSeparator" incorrecting formatting fractional part + +3.1.0 / 2019-01-22 +================== + + * Add petabyte (`pb`) support + +3.0.0 / 2017-08-31 +================== + + * Change "kB" to "KB" in format output + * Remove support for Node.js 0.6 + * Remove support for ComponentJS + +2.5.0 / 2017-03-24 +================== + + * Add option "unit" + +2.4.0 / 2016-06-01 +================== + + * Add option "unitSeparator" + +2.3.0 / 2016-02-15 +================== + + * Drop partial bytes on all parsed units + * Fix non-finite numbers to `.format` to return `null` + * Fix parsing byte string that looks like hex + * perf: hoist regular expressions + +2.2.0 / 2015-11-13 +================== + + * add option "decimalPlaces" + * add option "fixedDecimals" + +2.1.0 / 2015-05-21 +================== + + * add `.format` export + * add `.parse` export + +2.0.2 / 2015-05-20 +================== + + * remove map recreation + * remove unnecessary object construction + +2.0.1 / 2015-05-07 +================== + + * fix browserify require + * remove node.extend dependency + +2.0.0 / 2015-04-12 +================== + + * add option "case" + * add option "thousandsSeparator" + * return "null" on invalid parse input + * support proper round-trip: bytes(bytes(num)) === num + * units no longer case sensitive when parsing + +1.0.0 / 2014-05-05 +================== + + * add negative support. fixes #6 + +0.3.0 / 2014-03-19 +================== + + * added terabyte support + +0.2.1 / 2013-04-01 +================== + + * add .component + +0.2.0 / 2012-10-28 +================== + + * bytes(200).should.eql('200b') + +0.1.0 / 2012-07-04 +================== + + * add bytes to string conversion [yields] diff --git a/Url-Shortner/node_modules/bytes/LICENSE b/Url-Shortner/node_modules/bytes/LICENSE new file mode 100644 index 0000000..63e95a9 --- /dev/null +++ b/Url-Shortner/node_modules/bytes/LICENSE @@ -0,0 +1,23 @@ +(The MIT License) + +Copyright (c) 2012-2014 TJ Holowaychuk +Copyright (c) 2015 Jed Watson + +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/Url-Shortner/node_modules/bytes/Readme.md b/Url-Shortner/node_modules/bytes/Readme.md new file mode 100644 index 0000000..5790e23 --- /dev/null +++ b/Url-Shortner/node_modules/bytes/Readme.md @@ -0,0 +1,152 @@ +# Bytes utility + +[![NPM Version][npm-image]][npm-url] +[![NPM Downloads][downloads-image]][downloads-url] +[![Build Status][ci-image]][ci-url] +[![Test Coverage][coveralls-image]][coveralls-url] + +Utility to parse a string bytes (ex: `1TB`) to bytes (`1099511627776`) and vice-versa. + +## Installation + +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): + +```bash +$ npm install bytes +``` + +## Usage + +```js +var bytes = require('bytes'); +``` + +#### bytes(number|string value, [options]): number|string|null + +Default export function. Delegates to either `bytes.format` or `bytes.parse` based on the type of `value`. + +**Arguments** + +| Name | Type | Description | +|---------|----------|--------------------| +| value | `number`|`string` | Number value to format or string value to parse | +| options | `Object` | Conversion options for `format` | + +**Returns** + +| Name | Type | Description | +|---------|------------------|-------------------------------------------------| +| results | `string`|`number`|`null` | Return null upon error. Numeric value in bytes, or string value otherwise. | + +**Example** + +```js +bytes(1024); +// output: '1KB' + +bytes('1KB'); +// output: 1024 +``` + +#### bytes.format(number value, [options]): string|null + +Format the given value in bytes into a string. If the value is negative, it is kept as such. If it is a float, it is + rounded. + +**Arguments** + +| Name | Type | Description | +|---------|----------|--------------------| +| value | `number` | Value in bytes | +| options | `Object` | Conversion options | + +**Options** + +| Property | Type | Description | +|-------------------|--------|-----------------------------------------------------------------------------------------| +| decimalPlaces | `number`|`null` | Maximum number of decimal places to include in output. Default value to `2`. | +| fixedDecimals | `boolean`|`null` | Whether to always display the maximum number of decimal places. Default value to `false` | +| thousandsSeparator | `string`|`null` | Example of values: `' '`, `','` and `'.'`... Default value to `''`. | +| unit | `string`|`null` | The unit in which the result will be returned (B/KB/MB/GB/TB). Default value to `''` (which means auto detect). | +| unitSeparator | `string`|`null` | Separator to use between number and unit. Default value to `''`. | + +**Returns** + +| Name | Type | Description | +|---------|------------------|-------------------------------------------------| +| results | `string`|`null` | Return null upon error. String value otherwise. | + +**Example** + +```js +bytes.format(1024); +// output: '1KB' + +bytes.format(1000); +// output: '1000B' + +bytes.format(1000, {thousandsSeparator: ' '}); +// output: '1 000B' + +bytes.format(1024 * 1.7, {decimalPlaces: 0}); +// output: '2KB' + +bytes.format(1024, {unitSeparator: ' '}); +// output: '1 KB' +``` + +#### bytes.parse(string|number value): number|null + +Parse the string value into an integer in bytes. If no unit is given, or `value` +is a number, it is assumed the value is in bytes. + +Supported units and abbreviations are as follows and are case-insensitive: + + * `b` for bytes + * `kb` for kilobytes + * `mb` for megabytes + * `gb` for gigabytes + * `tb` for terabytes + * `pb` for petabytes + +The units are in powers of two, not ten. This means 1kb = 1024b according to this parser. + +**Arguments** + +| Name | Type | Description | +|---------------|--------|--------------------| +| value | `string`|`number` | String to parse, or number in bytes. | + +**Returns** + +| Name | Type | Description | +|---------|-------------|-------------------------| +| results | `number`|`null` | Return null upon error. Value in bytes otherwise. | + +**Example** + +```js +bytes.parse('1KB'); +// output: 1024 + +bytes.parse('1024'); +// output: 1024 + +bytes.parse(1024); +// output: 1024 +``` + +## License + +[MIT](LICENSE) + +[ci-image]: https://badgen.net/github/checks/visionmedia/bytes.js/master?label=ci +[ci-url]: https://github.com/visionmedia/bytes.js/actions?query=workflow%3Aci +[coveralls-image]: https://badgen.net/coveralls/c/github/visionmedia/bytes.js/master +[coveralls-url]: https://coveralls.io/r/visionmedia/bytes.js?branch=master +[downloads-image]: https://badgen.net/npm/dm/bytes +[downloads-url]: https://npmjs.org/package/bytes +[npm-image]: https://badgen.net/npm/v/bytes +[npm-url]: https://npmjs.org/package/bytes diff --git a/Url-Shortner/node_modules/bytes/index.js b/Url-Shortner/node_modules/bytes/index.js new file mode 100644 index 0000000..6f2d0f8 --- /dev/null +++ b/Url-Shortner/node_modules/bytes/index.js @@ -0,0 +1,170 @@ +/*! + * bytes + * Copyright(c) 2012-2014 TJ Holowaychuk + * Copyright(c) 2015 Jed Watson + * MIT Licensed + */ + +'use strict'; + +/** + * Module exports. + * @public + */ + +module.exports = bytes; +module.exports.format = format; +module.exports.parse = parse; + +/** + * Module variables. + * @private + */ + +var formatThousandsRegExp = /\B(?=(\d{3})+(?!\d))/g; + +var formatDecimalsRegExp = /(?:\.0*|(\.[^0]+)0+)$/; + +var map = { + b: 1, + kb: 1 << 10, + mb: 1 << 20, + gb: 1 << 30, + tb: Math.pow(1024, 4), + pb: Math.pow(1024, 5), +}; + +var parseRegExp = /^((-|\+)?(\d+(?:\.\d+)?)) *(kb|mb|gb|tb|pb)$/i; + +/** + * Convert the given value in bytes into a string or parse to string to an integer in bytes. + * + * @param {string|number} value + * @param {{ + * case: [string], + * decimalPlaces: [number] + * fixedDecimals: [boolean] + * thousandsSeparator: [string] + * unitSeparator: [string] + * }} [options] bytes options. + * + * @returns {string|number|null} + */ + +function bytes(value, options) { + if (typeof value === 'string') { + return parse(value); + } + + if (typeof value === 'number') { + return format(value, options); + } + + return null; +} + +/** + * Format the given value in bytes into a string. + * + * If the value is negative, it is kept as such. If it is a float, + * it is rounded. + * + * @param {number} value + * @param {object} [options] + * @param {number} [options.decimalPlaces=2] + * @param {number} [options.fixedDecimals=false] + * @param {string} [options.thousandsSeparator=] + * @param {string} [options.unit=] + * @param {string} [options.unitSeparator=] + * + * @returns {string|null} + * @public + */ + +function format(value, options) { + if (!Number.isFinite(value)) { + return null; + } + + var mag = Math.abs(value); + var thousandsSeparator = (options && options.thousandsSeparator) || ''; + var unitSeparator = (options && options.unitSeparator) || ''; + var decimalPlaces = (options && options.decimalPlaces !== undefined) ? options.decimalPlaces : 2; + var fixedDecimals = Boolean(options && options.fixedDecimals); + var unit = (options && options.unit) || ''; + + if (!unit || !map[unit.toLowerCase()]) { + if (mag >= map.pb) { + unit = 'PB'; + } else if (mag >= map.tb) { + unit = 'TB'; + } else if (mag >= map.gb) { + unit = 'GB'; + } else if (mag >= map.mb) { + unit = 'MB'; + } else if (mag >= map.kb) { + unit = 'KB'; + } else { + unit = 'B'; + } + } + + var val = value / map[unit.toLowerCase()]; + var str = val.toFixed(decimalPlaces); + + if (!fixedDecimals) { + str = str.replace(formatDecimalsRegExp, '$1'); + } + + if (thousandsSeparator) { + str = str.split('.').map(function (s, i) { + return i === 0 + ? s.replace(formatThousandsRegExp, thousandsSeparator) + : s + }).join('.'); + } + + return str + unitSeparator + unit; +} + +/** + * Parse the string value into an integer in bytes. + * + * If no unit is given, it is assumed the value is in bytes. + * + * @param {number|string} val + * + * @returns {number|null} + * @public + */ + +function parse(val) { + if (typeof val === 'number' && !isNaN(val)) { + return val; + } + + if (typeof val !== 'string') { + return null; + } + + // Test if the string passed is valid + var results = parseRegExp.exec(val); + var floatValue; + var unit = 'b'; + + if (!results) { + // Nothing could be extracted from the given string + floatValue = parseInt(val, 10); + unit = 'b' + } else { + // Retrieve the value and the unit + floatValue = parseFloat(results[1]); + unit = results[4].toLowerCase(); + } + + if (isNaN(floatValue)) { + return null; + } + + return Math.floor(map[unit] * floatValue); +} diff --git a/Url-Shortner/node_modules/bytes/package.json b/Url-Shortner/node_modules/bytes/package.json new file mode 100644 index 0000000..f2b6a8b --- /dev/null +++ b/Url-Shortner/node_modules/bytes/package.json @@ -0,0 +1,42 @@ +{ + "name": "bytes", + "description": "Utility to parse a string bytes to bytes and vice-versa", + "version": "3.1.2", + "author": "TJ Holowaychuk (http://tjholowaychuk.com)", + "contributors": [ + "Jed Watson ", + "Théo FIDRY " + ], + "license": "MIT", + "keywords": [ + "byte", + "bytes", + "utility", + "parse", + "parser", + "convert", + "converter" + ], + "repository": "visionmedia/bytes.js", + "devDependencies": { + "eslint": "7.32.0", + "eslint-plugin-markdown": "2.2.1", + "mocha": "9.2.0", + "nyc": "15.1.0" + }, + "files": [ + "History.md", + "LICENSE", + "Readme.md", + "index.js" + ], + "engines": { + "node": ">= 0.8" + }, + "scripts": { + "lint": "eslint .", + "test": "mocha --check-leaks --reporter spec", + "test-ci": "nyc --reporter=lcov --reporter=text npm test", + "test-cov": "nyc --reporter=html --reporter=text npm test" + } +} diff --git a/Url-Shortner/node_modules/call-bind/.eslintignore b/Url-Shortner/node_modules/call-bind/.eslintignore new file mode 100644 index 0000000..404abb2 --- /dev/null +++ b/Url-Shortner/node_modules/call-bind/.eslintignore @@ -0,0 +1 @@ +coverage/ diff --git a/Url-Shortner/node_modules/call-bind/.eslintrc b/Url-Shortner/node_modules/call-bind/.eslintrc new file mode 100644 index 0000000..e5d3c9a --- /dev/null +++ b/Url-Shortner/node_modules/call-bind/.eslintrc @@ -0,0 +1,17 @@ +{ + "root": true, + + "extends": "@ljharb", + + "rules": { + "func-name-matching": 0, + "id-length": 0, + "new-cap": [2, { + "capIsNewExceptions": [ + "GetIntrinsic", + ], + }], + "no-magic-numbers": 0, + "operator-linebreak": [2, "before"], + }, +} diff --git a/Url-Shortner/node_modules/call-bind/.github/FUNDING.yml b/Url-Shortner/node_modules/call-bind/.github/FUNDING.yml new file mode 100644 index 0000000..c70c2ec --- /dev/null +++ b/Url-Shortner/node_modules/call-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/call-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/Url-Shortner/node_modules/call-bind/.nycrc b/Url-Shortner/node_modules/call-bind/.nycrc new file mode 100644 index 0000000..1826526 --- /dev/null +++ b/Url-Shortner/node_modules/call-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/Url-Shortner/node_modules/call-bind/CHANGELOG.md b/Url-Shortner/node_modules/call-bind/CHANGELOG.md new file mode 100644 index 0000000..62a3727 --- /dev/null +++ b/Url-Shortner/node_modules/call-bind/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/ljharb/call-bind/compare/v1.0.1...v1.0.2) - 2021-01-11 + +### Commits + +- [Fix] properly include the receiver in the bound length [`dbae7bc`](https://github.com/ljharb/call-bind/commit/dbae7bc676c079a0d33c0a43e9ef92cb7b01345d) + +## [v1.0.1](https://github.com/ljharb/call-bind/compare/v1.0.0...v1.0.1) - 2021-01-08 + +### Commits + +- [Tests] migrate tests to Github Actions [`b6db284`](https://github.com/ljharb/call-bind/commit/b6db284c36f8ccd195b88a6764fe84b7223a0da1) +- [meta] do not publish github action workflow files [`ec7fe46`](https://github.com/ljharb/call-bind/commit/ec7fe46e60cfa4764ee943d2755f5e5a366e578e) +- [Fix] preserve original function’s length when possible [`adbceaa`](https://github.com/ljharb/call-bind/commit/adbceaa3cac4b41ea78bb19d7ccdbaaf7e0bdadb) +- [Tests] gather coverage data on every job [`d69e23c`](https://github.com/ljharb/call-bind/commit/d69e23cc65f101ba1d4c19bb07fa8eb0ec624be8) +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `tape` [`2fd3586`](https://github.com/ljharb/call-bind/commit/2fd3586c5d47b335364c14293114c6b625ae1f71) +- [Deps] update `get-intrinsic` [`f23e931`](https://github.com/ljharb/call-bind/commit/f23e9318cc271c2add8bb38cfded85ee7baf8eee) +- [Deps] update `get-intrinsic` [`72d9f44`](https://github.com/ljharb/call-bind/commit/72d9f44e184465ba8dd3fb48260bbcff234985f2) +- [meta] fix FUNDING.yml [`e723573`](https://github.com/ljharb/call-bind/commit/e723573438c5a68dcec31fb5d96ea6b7e4a93be8) +- [eslint] ignore coverage output [`15e76d2`](https://github.com/ljharb/call-bind/commit/15e76d28a5f43e504696401e5b31ebb78ee1b532) +- [meta] add Automatic Rebase and Require Allow Edits workflows [`8fa4dab`](https://github.com/ljharb/call-bind/commit/8fa4dabb23ba3dd7bb92c9571c1241c08b56e4b6) + +## v1.0.0 - 2020-10-30 + +### Commits + +- Initial commit [`306cf98`](https://github.com/ljharb/call-bind/commit/306cf98c7ec9e7ef66b653ec152277ac1381eb50) +- Tests [`e10d0bb`](https://github.com/ljharb/call-bind/commit/e10d0bbdadc7a10ecedc9a1c035112d3e368b8df) +- Implementation [`43852ed`](https://github.com/ljharb/call-bind/commit/43852eda0f187327b7fad2423ca972149a52bd65) +- npm init [`408f860`](https://github.com/ljharb/call-bind/commit/408f860b773a2f610805fd3613d0d71bac1b6249) +- [meta] add Automatic Rebase and Require Allow Edits workflows [`fb349b2`](https://github.com/ljharb/call-bind/commit/fb349b2e48defbec8b5ec8a8395cc8f69f220b13) +- [meta] add `auto-changelog` [`c4001fc`](https://github.com/ljharb/call-bind/commit/c4001fc43031799ef908211c98d3b0fb2b60fde4) +- [meta] add "funding"; create `FUNDING.yml` [`d4d6d29`](https://github.com/ljharb/call-bind/commit/d4d6d2974a14bc2e98830468eda7fe6d6a776717) +- [Tests] add `npm run lint` [`dedfb98`](https://github.com/ljharb/call-bind/commit/dedfb98bd0ecefb08ddb9a94061bd10cde4332af) +- Only apps should have lockfiles [`54ac776`](https://github.com/ljharb/call-bind/commit/54ac77653db45a7361dc153d2f478e743f110650) +- [meta] add `safe-publish-latest` [`9ea8e43`](https://github.com/ljharb/call-bind/commit/9ea8e435b950ce9b705559cd651039f9bf40140f) diff --git a/Url-Shortner/node_modules/call-bind/LICENSE b/Url-Shortner/node_modules/call-bind/LICENSE new file mode 100644 index 0000000..48f05d0 --- /dev/null +++ b/Url-Shortner/node_modules/call-bind/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/Url-Shortner/node_modules/call-bind/README.md b/Url-Shortner/node_modules/call-bind/README.md new file mode 100644 index 0000000..53649eb --- /dev/null +++ b/Url-Shortner/node_modules/call-bind/README.md @@ -0,0 +1,2 @@ +# call-bind +Robustly `.call.bind()` a function. diff --git a/Url-Shortner/node_modules/call-bind/callBound.js b/Url-Shortner/node_modules/call-bind/callBound.js new file mode 100644 index 0000000..8374adf --- /dev/null +++ b/Url-Shortner/node_modules/call-bind/callBound.js @@ -0,0 +1,15 @@ +'use strict'; + +var GetIntrinsic = require('get-intrinsic'); + +var callBind = require('./'); + +var $indexOf = callBind(GetIntrinsic('String.prototype.indexOf')); + +module.exports = function callBoundIntrinsic(name, allowMissing) { + var intrinsic = GetIntrinsic(name, !!allowMissing); + if (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) { + return callBind(intrinsic); + } + return intrinsic; +}; diff --git a/Url-Shortner/node_modules/call-bind/index.js b/Url-Shortner/node_modules/call-bind/index.js new file mode 100644 index 0000000..6fa3e4a --- /dev/null +++ b/Url-Shortner/node_modules/call-bind/index.js @@ -0,0 +1,47 @@ +'use strict'; + +var bind = require('function-bind'); +var GetIntrinsic = require('get-intrinsic'); + +var $apply = GetIntrinsic('%Function.prototype.apply%'); +var $call = GetIntrinsic('%Function.prototype.call%'); +var $reflectApply = GetIntrinsic('%Reflect.apply%', true) || bind.call($call, $apply); + +var $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%', true); +var $defineProperty = GetIntrinsic('%Object.defineProperty%', true); +var $max = GetIntrinsic('%Math.max%'); + +if ($defineProperty) { + try { + $defineProperty({}, 'a', { value: 1 }); + } catch (e) { + // IE 8 has a broken defineProperty + $defineProperty = null; + } +} + +module.exports = function callBind(originalFunction) { + var func = $reflectApply(bind, $call, arguments); + if ($gOPD && $defineProperty) { + var desc = $gOPD(func, 'length'); + if (desc.configurable) { + // original length, plus the receiver, minus any additional arguments (after the receiver) + $defineProperty( + func, + 'length', + { value: 1 + $max(0, originalFunction.length - (arguments.length - 1)) } + ); + } + } + return func; +}; + +var applyBind = function applyBind() { + return $reflectApply(bind, $apply, arguments); +}; + +if ($defineProperty) { + $defineProperty(module.exports, 'apply', { value: applyBind }); +} else { + module.exports.apply = applyBind; +} diff --git a/Url-Shortner/node_modules/call-bind/package.json b/Url-Shortner/node_modules/call-bind/package.json new file mode 100644 index 0000000..4360556 --- /dev/null +++ b/Url-Shortner/node_modules/call-bind/package.json @@ -0,0 +1,80 @@ +{ + "name": "call-bind", + "version": "1.0.2", + "description": "Robustly `.call.bind()` a function", + "main": "index.js", + "exports": { + ".": [ + { + "default": "./index.js" + }, + "./index.js" + ], + "./callBound": [ + { + "default": "./callBound.js" + }, + "./callBound.js" + ], + "./package.json": "./package.json" + }, + "scripts": { + "prepublish": "safe-publish-latest", + "lint": "eslint --ext=.js,.mjs .", + "pretest": "npm run lint", + "tests-only": "nyc tape 'test/*'", + "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/ljharb/call-bind.git" + }, + "keywords": [ + "javascript", + "ecmascript", + "es", + "js", + "callbind", + "callbound", + "call", + "bind", + "bound", + "call-bind", + "call-bound", + "function", + "es-abstract" + ], + "author": "Jordan Harband ", + "funding": { + "url": "https://github.com/sponsors/ljharb" + }, + "license": "MIT", + "bugs": { + "url": "https://github.com/ljharb/call-bind/issues" + }, + "homepage": "https://github.com/ljharb/call-bind#readme", + "devDependencies": { + "@ljharb/eslint-config": "^17.3.0", + "aud": "^1.1.3", + "auto-changelog": "^2.2.1", + "eslint": "^7.17.0", + "nyc": "^10.3.2", + "safe-publish-latest": "^1.1.4", + "tape": "^5.1.1" + }, + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "auto-changelog": { + "output": "CHANGELOG.md", + "template": "keepachangelog", + "unreleased": false, + "commitLimit": false, + "backfillLimit": false, + "hideCredit": true + } +} diff --git a/Url-Shortner/node_modules/call-bind/test/callBound.js b/Url-Shortner/node_modules/call-bind/test/callBound.js new file mode 100644 index 0000000..209ce3c --- /dev/null +++ b/Url-Shortner/node_modules/call-bind/test/callBound.js @@ -0,0 +1,55 @@ +'use strict'; + +var test = require('tape'); + +var callBound = require('../callBound'); + +test('callBound', function (t) { + // static primitive + t.equal(callBound('Array.length'), Array.length, 'Array.length yields itself'); + t.equal(callBound('%Array.length%'), Array.length, '%Array.length% yields itself'); + + // static non-function object + t.equal(callBound('Array.prototype'), Array.prototype, 'Array.prototype yields itself'); + t.equal(callBound('%Array.prototype%'), Array.prototype, '%Array.prototype% yields itself'); + t.equal(callBound('Array.constructor'), Array.constructor, 'Array.constructor yields itself'); + t.equal(callBound('%Array.constructor%'), Array.constructor, '%Array.constructor% yields itself'); + + // static function + t.equal(callBound('Date.parse'), Date.parse, 'Date.parse yields itself'); + t.equal(callBound('%Date.parse%'), Date.parse, '%Date.parse% yields itself'); + + // prototype primitive + t.equal(callBound('Error.prototype.message'), Error.prototype.message, 'Error.prototype.message yields itself'); + t.equal(callBound('%Error.prototype.message%'), Error.prototype.message, '%Error.prototype.message% yields itself'); + + // prototype function + t.notEqual(callBound('Object.prototype.toString'), Object.prototype.toString, 'Object.prototype.toString does not yield itself'); + t.notEqual(callBound('%Object.prototype.toString%'), Object.prototype.toString, '%Object.prototype.toString% does not yield itself'); + t.equal(callBound('Object.prototype.toString')(true), Object.prototype.toString.call(true), 'call-bound Object.prototype.toString calls into the original'); + t.equal(callBound('%Object.prototype.toString%')(true), Object.prototype.toString.call(true), 'call-bound %Object.prototype.toString% calls into the original'); + + t['throws']( + function () { callBound('does not exist'); }, + SyntaxError, + 'nonexistent intrinsic throws' + ); + t['throws']( + function () { callBound('does not exist', true); }, + SyntaxError, + 'allowMissing arg still throws for unknown intrinsic' + ); + + /* globals WeakRef: false */ + t.test('real but absent intrinsic', { skip: typeof WeakRef !== 'undefined' }, function (st) { + st['throws']( + function () { callBound('WeakRef'); }, + TypeError, + 'real but absent intrinsic throws' + ); + st.equal(callBound('WeakRef', true), undefined, 'allowMissing arg avoids exception'); + st.end(); + }); + + t.end(); +}); diff --git a/Url-Shortner/node_modules/call-bind/test/index.js b/Url-Shortner/node_modules/call-bind/test/index.js new file mode 100644 index 0000000..bf6769c --- /dev/null +++ b/Url-Shortner/node_modules/call-bind/test/index.js @@ -0,0 +1,66 @@ +'use strict'; + +var callBind = require('../'); +var bind = require('function-bind'); + +var test = require('tape'); + +/* + * older engines have length nonconfigurable + * in io.js v3, it is configurable except on bound functions, hence the .bind() + */ +var functionsHaveConfigurableLengths = !!( + Object.getOwnPropertyDescriptor + && Object.getOwnPropertyDescriptor(bind.call(function () {}), 'length').configurable +); + +test('callBind', function (t) { + var sentinel = { sentinel: true }; + var func = function (a, b) { + // eslint-disable-next-line no-invalid-this + return [this, a, b]; + }; + t.equal(func.length, 2, 'original function length is 2'); + t.deepEqual(func(), [undefined, undefined, undefined], 'unbound func with too few args'); + t.deepEqual(func(1, 2), [undefined, 1, 2], 'unbound func with right args'); + t.deepEqual(func(1, 2, 3), [undefined, 1, 2], 'unbound func with too many args'); + + var bound = callBind(func); + t.equal(bound.length, func.length + 1, 'function length is preserved', { skip: !functionsHaveConfigurableLengths }); + t.deepEqual(bound(), [undefined, undefined, undefined], 'bound func with too few args'); + t.deepEqual(bound(1, 2), [1, 2, undefined], 'bound func with right args'); + t.deepEqual(bound(1, 2, 3), [1, 2, 3], 'bound func with too many args'); + + var boundR = callBind(func, sentinel); + t.equal(boundR.length, func.length, 'function length is preserved', { skip: !functionsHaveConfigurableLengths }); + t.deepEqual(boundR(), [sentinel, undefined, undefined], 'bound func with receiver, with too few args'); + t.deepEqual(boundR(1, 2), [sentinel, 1, 2], 'bound func with receiver, with right args'); + t.deepEqual(boundR(1, 2, 3), [sentinel, 1, 2], 'bound func with receiver, with too many args'); + + var boundArg = callBind(func, sentinel, 1); + t.equal(boundArg.length, func.length - 1, 'function length is preserved', { skip: !functionsHaveConfigurableLengths }); + t.deepEqual(boundArg(), [sentinel, 1, undefined], 'bound func with receiver and arg, with too few args'); + t.deepEqual(boundArg(2), [sentinel, 1, 2], 'bound func with receiver and arg, with right arg'); + t.deepEqual(boundArg(2, 3), [sentinel, 1, 2], 'bound func with receiver and arg, with too many args'); + + t.test('callBind.apply', function (st) { + var aBound = callBind.apply(func); + st.deepEqual(aBound(sentinel), [sentinel, undefined, undefined], 'apply-bound func with no args'); + st.deepEqual(aBound(sentinel, [1], 4), [sentinel, 1, undefined], 'apply-bound func with too few args'); + st.deepEqual(aBound(sentinel, [1, 2], 4), [sentinel, 1, 2], 'apply-bound func with right args'); + + var aBoundArg = callBind.apply(func); + st.deepEqual(aBoundArg(sentinel, [1, 2, 3], 4), [sentinel, 1, 2], 'apply-bound func with too many args'); + st.deepEqual(aBoundArg(sentinel, [1, 2], 4), [sentinel, 1, 2], 'apply-bound func with right args'); + st.deepEqual(aBoundArg(sentinel, [1], 4), [sentinel, 1, undefined], 'apply-bound func with too few args'); + + var aBoundR = callBind.apply(func, sentinel); + st.deepEqual(aBoundR([1, 2, 3], 4), [sentinel, 1, 2], 'apply-bound func with receiver and too many args'); + st.deepEqual(aBoundR([1, 2], 4), [sentinel, 1, 2], 'apply-bound func with receiver and right args'); + st.deepEqual(aBoundR([1], 4), [sentinel, 1, undefined], 'apply-bound func with receiver and too few args'); + + st.end(); + }); + + t.end(); +}); diff --git a/Url-Shortner/node_modules/chalk/index.d.ts b/Url-Shortner/node_modules/chalk/index.d.ts new file mode 100644 index 0000000..9cd88f3 --- /dev/null +++ b/Url-Shortner/node_modules/chalk/index.d.ts @@ -0,0 +1,415 @@ +/** +Basic foreground colors. + +[More colors here.](https://github.com/chalk/chalk/blob/master/readme.md#256-and-truecolor-color-support) +*/ +declare type ForegroundColor = + | 'black' + | 'red' + | 'green' + | 'yellow' + | 'blue' + | 'magenta' + | 'cyan' + | 'white' + | 'gray' + | 'grey' + | 'blackBright' + | 'redBright' + | 'greenBright' + | 'yellowBright' + | 'blueBright' + | 'magentaBright' + | 'cyanBright' + | 'whiteBright'; + +/** +Basic background colors. + +[More colors here.](https://github.com/chalk/chalk/blob/master/readme.md#256-and-truecolor-color-support) +*/ +declare type BackgroundColor = + | 'bgBlack' + | 'bgRed' + | 'bgGreen' + | 'bgYellow' + | 'bgBlue' + | 'bgMagenta' + | 'bgCyan' + | 'bgWhite' + | 'bgGray' + | 'bgGrey' + | 'bgBlackBright' + | 'bgRedBright' + | 'bgGreenBright' + | 'bgYellowBright' + | 'bgBlueBright' + | 'bgMagentaBright' + | 'bgCyanBright' + | 'bgWhiteBright'; + +/** +Basic colors. + +[More colors here.](https://github.com/chalk/chalk/blob/master/readme.md#256-and-truecolor-color-support) +*/ +declare type Color = ForegroundColor | BackgroundColor; + +declare type Modifiers = + | 'reset' + | 'bold' + | 'dim' + | 'italic' + | 'underline' + | 'inverse' + | 'hidden' + | 'strikethrough' + | 'visible'; + +declare namespace chalk { + /** + Levels: + - `0` - All colors disabled. + - `1` - Basic 16 colors support. + - `2` - ANSI 256 colors support. + - `3` - Truecolor 16 million colors support. + */ + type Level = 0 | 1 | 2 | 3; + + interface Options { + /** + Specify the color support for Chalk. + + By default, color support is automatically detected based on the environment. + + Levels: + - `0` - All colors disabled. + - `1` - Basic 16 colors support. + - `2` - ANSI 256 colors support. + - `3` - Truecolor 16 million colors support. + */ + level?: Level; + } + + /** + Return a new Chalk instance. + */ + type Instance = new (options?: Options) => Chalk; + + /** + Detect whether the terminal supports color. + */ + interface ColorSupport { + /** + The color level used by Chalk. + */ + level: Level; + + /** + Return whether Chalk supports basic 16 colors. + */ + hasBasic: boolean; + + /** + Return whether Chalk supports ANSI 256 colors. + */ + has256: boolean; + + /** + Return whether Chalk supports Truecolor 16 million colors. + */ + has16m: boolean; + } + + interface ChalkFunction { + /** + Use a template string. + + @remarks Template literals are unsupported for nested calls (see [issue #341](https://github.com/chalk/chalk/issues/341)) + + @example + ``` + import chalk = require('chalk'); + + log(chalk` + CPU: {red ${cpu.totalPercent}%} + RAM: {green ${ram.used / ram.total * 100}%} + DISK: {rgb(255,131,0) ${disk.used / disk.total * 100}%} + `); + ``` + + @example + ``` + import chalk = require('chalk'); + + log(chalk.red.bgBlack`2 + 3 = {bold ${2 + 3}}`) + ``` + */ + (text: TemplateStringsArray, ...placeholders: unknown[]): string; + + (...text: unknown[]): string; + } + + interface Chalk extends ChalkFunction { + /** + Return a new Chalk instance. + */ + Instance: Instance; + + /** + The color support for Chalk. + + By default, color support is automatically detected based on the environment. + + Levels: + - `0` - All colors disabled. + - `1` - Basic 16 colors support. + - `2` - ANSI 256 colors support. + - `3` - Truecolor 16 million colors support. + */ + level: Level; + + /** + Use HEX value to set text color. + + @param color - Hexadecimal value representing the desired color. + + @example + ``` + import chalk = require('chalk'); + + chalk.hex('#DEADED'); + ``` + */ + hex(color: string): Chalk; + + /** + Use keyword color value to set text color. + + @param color - Keyword value representing the desired color. + + @example + ``` + import chalk = require('chalk'); + + chalk.keyword('orange'); + ``` + */ + keyword(color: string): Chalk; + + /** + Use RGB values to set text color. + */ + rgb(red: number, green: number, blue: number): Chalk; + + /** + Use HSL values to set text color. + */ + hsl(hue: number, saturation: number, lightness: number): Chalk; + + /** + Use HSV values to set text color. + */ + hsv(hue: number, saturation: number, value: number): Chalk; + + /** + Use HWB values to set text color. + */ + hwb(hue: number, whiteness: number, blackness: number): Chalk; + + /** + Use a [Select/Set Graphic Rendition](https://en.wikipedia.org/wiki/ANSI_escape_code#SGR_parameters) (SGR) [color code number](https://en.wikipedia.org/wiki/ANSI_escape_code#3/4_bit) to set text color. + + 30 <= code && code < 38 || 90 <= code && code < 98 + For example, 31 for red, 91 for redBright. + */ + ansi(code: number): Chalk; + + /** + Use a [8-bit unsigned number](https://en.wikipedia.org/wiki/ANSI_escape_code#8-bit) to set text color. + */ + ansi256(index: number): Chalk; + + /** + Use HEX value to set background color. + + @param color - Hexadecimal value representing the desired color. + + @example + ``` + import chalk = require('chalk'); + + chalk.bgHex('#DEADED'); + ``` + */ + bgHex(color: string): Chalk; + + /** + Use keyword color value to set background color. + + @param color - Keyword value representing the desired color. + + @example + ``` + import chalk = require('chalk'); + + chalk.bgKeyword('orange'); + ``` + */ + bgKeyword(color: string): Chalk; + + /** + Use RGB values to set background color. + */ + bgRgb(red: number, green: number, blue: number): Chalk; + + /** + Use HSL values to set background color. + */ + bgHsl(hue: number, saturation: number, lightness: number): Chalk; + + /** + Use HSV values to set background color. + */ + bgHsv(hue: number, saturation: number, value: number): Chalk; + + /** + Use HWB values to set background color. + */ + bgHwb(hue: number, whiteness: number, blackness: number): Chalk; + + /** + Use a [Select/Set Graphic Rendition](https://en.wikipedia.org/wiki/ANSI_escape_code#SGR_parameters) (SGR) [color code number](https://en.wikipedia.org/wiki/ANSI_escape_code#3/4_bit) to set background color. + + 30 <= code && code < 38 || 90 <= code && code < 98 + For example, 31 for red, 91 for redBright. + Use the foreground code, not the background code (for example, not 41, nor 101). + */ + bgAnsi(code: number): Chalk; + + /** + Use a [8-bit unsigned number](https://en.wikipedia.org/wiki/ANSI_escape_code#8-bit) to set background color. + */ + bgAnsi256(index: number): Chalk; + + /** + Modifier: Resets the current color chain. + */ + readonly reset: Chalk; + + /** + Modifier: Make text bold. + */ + readonly bold: Chalk; + + /** + Modifier: Emitting only a small amount of light. + */ + readonly dim: Chalk; + + /** + Modifier: Make text italic. (Not widely supported) + */ + readonly italic: Chalk; + + /** + Modifier: Make text underline. (Not widely supported) + */ + readonly underline: Chalk; + + /** + Modifier: Inverse background and foreground colors. + */ + readonly inverse: Chalk; + + /** + Modifier: Prints the text, but makes it invisible. + */ + readonly hidden: Chalk; + + /** + Modifier: Puts a horizontal line through the center of the text. (Not widely supported) + */ + readonly strikethrough: Chalk; + + /** + Modifier: Prints the text only when Chalk has a color support level > 0. + Can be useful for things that are purely cosmetic. + */ + readonly visible: Chalk; + + readonly black: Chalk; + readonly red: Chalk; + readonly green: Chalk; + readonly yellow: Chalk; + readonly blue: Chalk; + readonly magenta: Chalk; + readonly cyan: Chalk; + readonly white: Chalk; + + /* + Alias for `blackBright`. + */ + readonly gray: Chalk; + + /* + Alias for `blackBright`. + */ + readonly grey: Chalk; + + readonly blackBright: Chalk; + readonly redBright: Chalk; + readonly greenBright: Chalk; + readonly yellowBright: Chalk; + readonly blueBright: Chalk; + readonly magentaBright: Chalk; + readonly cyanBright: Chalk; + readonly whiteBright: Chalk; + + readonly bgBlack: Chalk; + readonly bgRed: Chalk; + readonly bgGreen: Chalk; + readonly bgYellow: Chalk; + readonly bgBlue: Chalk; + readonly bgMagenta: Chalk; + readonly bgCyan: Chalk; + readonly bgWhite: Chalk; + + /* + Alias for `bgBlackBright`. + */ + readonly bgGray: Chalk; + + /* + Alias for `bgBlackBright`. + */ + readonly bgGrey: Chalk; + + readonly bgBlackBright: Chalk; + readonly bgRedBright: Chalk; + readonly bgGreenBright: Chalk; + readonly bgYellowBright: Chalk; + readonly bgBlueBright: Chalk; + readonly bgMagentaBright: Chalk; + readonly bgCyanBright: Chalk; + readonly bgWhiteBright: Chalk; + } +} + +/** +Main Chalk object that allows to chain styles together. +Call the last one as a method with a string argument. +Order doesn't matter, and later styles take precedent in case of a conflict. +This simply means that `chalk.red.yellow.green` is equivalent to `chalk.green`. +*/ +declare const chalk: chalk.Chalk & chalk.ChalkFunction & { + supportsColor: chalk.ColorSupport | false; + Level: chalk.Level; + Color: Color; + ForegroundColor: ForegroundColor; + BackgroundColor: BackgroundColor; + Modifiers: Modifiers; + stderr: chalk.Chalk & {supportsColor: chalk.ColorSupport | false}; +}; + +export = chalk; diff --git a/Url-Shortner/node_modules/chalk/license b/Url-Shortner/node_modules/chalk/license new file mode 100644 index 0000000..e7af2f7 --- /dev/null +++ b/Url-Shortner/node_modules/chalk/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +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/Url-Shortner/node_modules/chalk/package.json b/Url-Shortner/node_modules/chalk/package.json new file mode 100644 index 0000000..47c23f2 --- /dev/null +++ b/Url-Shortner/node_modules/chalk/package.json @@ -0,0 +1,68 @@ +{ + "name": "chalk", + "version": "4.1.2", + "description": "Terminal string styling done right", + "license": "MIT", + "repository": "chalk/chalk", + "funding": "https://github.com/chalk/chalk?sponsor=1", + "main": "source", + "engines": { + "node": ">=10" + }, + "scripts": { + "test": "xo && nyc ava && tsd", + "bench": "matcha benchmark.js" + }, + "files": [ + "source", + "index.d.ts" + ], + "keywords": [ + "color", + "colour", + "colors", + "terminal", + "console", + "cli", + "string", + "str", + "ansi", + "style", + "styles", + "tty", + "formatting", + "rgb", + "256", + "shell", + "xterm", + "log", + "logging", + "command-line", + "text" + ], + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "devDependencies": { + "ava": "^2.4.0", + "coveralls": "^3.0.7", + "execa": "^4.0.0", + "import-fresh": "^3.1.0", + "matcha": "^0.7.0", + "nyc": "^15.0.0", + "resolve-from": "^5.0.0", + "tsd": "^0.7.4", + "xo": "^0.28.2" + }, + "xo": { + "rules": { + "unicorn/prefer-string-slice": "off", + "unicorn/prefer-includes": "off", + "@typescript-eslint/member-ordering": "off", + "no-redeclare": "off", + "unicorn/string-content": "off", + "unicorn/better-regex": "off" + } + } +} diff --git a/Url-Shortner/node_modules/chalk/readme.md b/Url-Shortner/node_modules/chalk/readme.md new file mode 100644 index 0000000..a055d21 --- /dev/null +++ b/Url-Shortner/node_modules/chalk/readme.md @@ -0,0 +1,341 @@ +

+
+
+ Chalk +
+
+
+

+ +> Terminal string styling done right + +[![Build Status](https://travis-ci.org/chalk/chalk.svg?branch=master)](https://travis-ci.org/chalk/chalk) [![Coverage Status](https://coveralls.io/repos/github/chalk/chalk/badge.svg?branch=master)](https://coveralls.io/github/chalk/chalk?branch=master) [![npm dependents](https://badgen.net/npm/dependents/chalk)](https://www.npmjs.com/package/chalk?activeTab=dependents) [![Downloads](https://badgen.net/npm/dt/chalk)](https://www.npmjs.com/package/chalk) [![](https://img.shields.io/badge/unicorn-approved-ff69b4.svg)](https://www.youtube.com/watch?v=9auOCbH5Ns4) [![XO code style](https://img.shields.io/badge/code_style-XO-5ed9c7.svg)](https://github.com/xojs/xo) ![TypeScript-ready](https://img.shields.io/npm/types/chalk.svg) [![run on repl.it](https://repl.it/badge/github/chalk/chalk)](https://repl.it/github/chalk/chalk) + + + +
+ +--- + + + +--- + +
+ +## Highlights + +- Expressive API +- Highly performant +- Ability to nest styles +- [256/Truecolor color support](#256-and-truecolor-color-support) +- Auto-detects color support +- Doesn't extend `String.prototype` +- Clean and focused +- Actively maintained +- [Used by ~50,000 packages](https://www.npmjs.com/browse/depended/chalk) as of January 1, 2020 + +## Install + +```console +$ npm install chalk +``` + +## Usage + +```js +const chalk = require('chalk'); + +console.log(chalk.blue('Hello world!')); +``` + +Chalk comes with an easy to use composable API where you just chain and nest the styles you want. + +```js +const chalk = require('chalk'); +const log = console.log; + +// Combine styled and normal strings +log(chalk.blue('Hello') + ' World' + chalk.red('!')); + +// Compose multiple styles using the chainable API +log(chalk.blue.bgRed.bold('Hello world!')); + +// Pass in multiple arguments +log(chalk.blue('Hello', 'World!', 'Foo', 'bar', 'biz', 'baz')); + +// Nest styles +log(chalk.red('Hello', chalk.underline.bgBlue('world') + '!')); + +// Nest styles of the same type even (color, underline, background) +log(chalk.green( + 'I am a green line ' + + chalk.blue.underline.bold('with a blue substring') + + ' that becomes green again!' +)); + +// ES2015 template literal +log(` +CPU: ${chalk.red('90%')} +RAM: ${chalk.green('40%')} +DISK: ${chalk.yellow('70%')} +`); + +// ES2015 tagged template literal +log(chalk` +CPU: {red ${cpu.totalPercent}%} +RAM: {green ${ram.used / ram.total * 100}%} +DISK: {rgb(255,131,0) ${disk.used / disk.total * 100}%} +`); + +// Use RGB colors in terminal emulators that support it. +log(chalk.keyword('orange')('Yay for orange colored text!')); +log(chalk.rgb(123, 45, 67).underline('Underlined reddish color')); +log(chalk.hex('#DEADED').bold('Bold gray!')); +``` + +Easily define your own themes: + +```js +const chalk = require('chalk'); + +const error = chalk.bold.red; +const warning = chalk.keyword('orange'); + +console.log(error('Error!')); +console.log(warning('Warning!')); +``` + +Take advantage of console.log [string substitution](https://nodejs.org/docs/latest/api/console.html#console_console_log_data_args): + +```js +const name = 'Sindre'; +console.log(chalk.green('Hello %s'), name); +//=> 'Hello Sindre' +``` + +## API + +### chalk.` + + + + Home Page + + +

URL SHORTNER

+ <% if (locals.id) { %> +

Generated short URL : http://localhost:3000/url/<%= id %>

+ <% } %> + +
+
+ + + +
+
+
+

Analytics of your Generated url

+ <% if (locals.urls) { %> + + + + + + + + + <% urls.forEach((url, index) => { %> + + + + + + + <% }) %> + +
S. NoShortIDRedirectClicks
<%= index + 1 %><%= url.shortId %><%= url.redirectURL %><%= url.visitHistory.length %>
+ <% } %> +
+ + From 4e247307222a6cd4e7444bf2297aff92981d2d68 Mon Sep 17 00:00:00 2001 From: TOLU-MICH Date: Tue, 3 Oct 2023 17:36:51 +0100 Subject: [PATCH 49/71] Created a memory game. --- memory/README.md | 29 ++++ memory/files/click.wav | Bin 0 -> 354534 bytes memory/files/complete.wav | Bin 0 -> 274734 bytes memory/files/correct.wav | Bin 0 -> 750430 bytes memory/files/wrong.wav | Bin 0 -> 442732 bytes memory/images/cheeseburger.png | Bin 0 -> 7442 bytes memory/images/diamond.jpg | Bin 0 -> 58151 bytes memory/images/fries.png | Bin 0 -> 3608 bytes memory/images/hotdog.png | Bin 0 -> 9007 bytes memory/images/ice-cream.png | Bin 0 -> 1327 bytes memory/images/milkshake.png | Bin 0 -> 4989 bytes .../pink-polygonal-vector-background.jpg | Bin 0 -> 75863 bytes memory/images/pizza.png | Bin 0 -> 7817 bytes memory/images/result.png | Bin 0 -> 166513 bytes memory/images/white.png | Bin 0 -> 420 bytes memory/index.html | 18 +++ memory/index.js | 125 ++++++++++++++++++ memory/styles.css | 75 +++++++++++ 18 files changed, 247 insertions(+) create mode 100755 memory/README.md create mode 100755 memory/files/click.wav create mode 100755 memory/files/complete.wav create mode 100755 memory/files/correct.wav create mode 100755 memory/files/wrong.wav create mode 100755 memory/images/cheeseburger.png create mode 100755 memory/images/diamond.jpg create mode 100755 memory/images/fries.png create mode 100755 memory/images/hotdog.png create mode 100755 memory/images/ice-cream.png create mode 100755 memory/images/milkshake.png create mode 100755 memory/images/pink-polygonal-vector-background.jpg create mode 100755 memory/images/pizza.png create mode 100644 memory/images/result.png create mode 100755 memory/images/white.png create mode 100755 memory/index.html create mode 100755 memory/index.js create mode 100755 memory/styles.css diff --git a/memory/README.md b/memory/README.md new file mode 100755 index 0000000..6939bc1 --- /dev/null +++ b/memory/README.md @@ -0,0 +1,29 @@ + MEMORY GAME + +It's a simple grid game, in which you as a player needs to flip over two cards. If the two cards match thats a point for you and the card is take off the board, leaving with you the remainder that you also have to flip over. The game is completed when you flipped over all the cards. + +#### HTML Structure + +- div.container +- h3 + - span#result +- span.notification +- div.grid + +#### FLIP CARD + +- flipCard() +- gets the data-id of the card +- push the id to cardsChosen & cardsChosen Array +- set the clicked card source to the cardArray item whoose position is equal to the data-id +- check if the card is equal to 2 + +#### CHECKFORMATCH + +- checkForMatch() +- if the card chosen are the same let the clicked card be blank and let 1 be added to the score +- else it will notify you with you picked the wrong card + +## RESULT + +![screenshot](./images/result.png) diff --git a/memory/files/click.wav b/memory/files/click.wav new file mode 100755 index 0000000000000000000000000000000000000000..7b5e67418db211c8a10b7b1d0febd88b28109700 GIT binary patch literal 354534 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%0ApMA=nNF{0C#U?q&N#b*c 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 literal 0 HcmV?d00001 diff --git a/memory/files/complete.wav b/memory/files/complete.wav new file mode 100755 index 0000000000000000000000000000000000000000..00ec94f47841d315f6ed7e84596aa4b710f8f968 GIT binary patch literal 274734 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

      v0lTRy;YW+& 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 oEAM`*>iA#3{0Co^Hk~~0Q~p) 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

      jvCiH})FqF5%m7Q&O*4>o# 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 literal 0 HcmV?d00001 diff --git a/memory/images/cheeseburger.png b/memory/images/cheeseburger.png new file mode 100755 index 0000000000000000000000000000000000000000..5ae481d3c73992935b3df6b22e93bed8a3b1e5e2 GIT binary patch literal 7442 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 literal 0 HcmV?d00001 diff --git a/memory/images/hotdog.png b/memory/images/hotdog.png new file mode 100755 index 0000000000000000000000000000000000000000..e67d875708b73afc6069557ca8f7643cc2de1322 GIT binary patch literal 9007 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 literal 0 HcmV?d00001 diff --git a/memory/images/milkshake.png b/memory/images/milkshake.png new file mode 100755 index 0000000000000000000000000000000000000000..7be827b80d8115b15cd16b831325d60a997b6f27 GIT binary patch literal 4989 zcmaKwS2P?Bu*Q>r^b&$ZCo8NjdRZ-2iNzAE-jb-%d+!#}*J4>cY;;!d5;b~n5uFt! z5uNBa_x+yxFf-pg&7AMd%lu;AXuc*VVIX<%-~l;ARY~Vxwff&6BKVhGH_~7a9#AVm zloVjT=KDFso_ez_{UO)c(yLivh?wX3p?G#rwUuBrg!%Xi_YbEzPWtZ6>t@|tgnHCy;cy8h2$>*q8+cm^9XMKM>z6dSf5$rQ1Y>&Wn7!Lb zETwXjc)bMyzbAr22i#sa;Zy&B*FUJI_KSlK#3(i4do2Fn?f!YLs%Mr|(>puZ+|JzW z3+G#era|Nr$?r#{(MAXHuQ+sm*nFF8u+hu_r|0M-w>sMGn$%6=ezwWKQd6|9u6P*} zBjANmH9wWdE_Wu8roa)YZnoSyVaUm#Y#Fw?GFlL~uiS?4F&4(5w&ox*17ikFZ1mFD@T=kf0^O(G{g0={5j97^g+X_L8&V%ur2zAd}qdX6u)l zekxFRZ<)Y6W|8sL4uf+ZYnV3?K(5N~>H@y^%PpWIBTAv9HIsQ*-kjpLz|Hn^VGvjcWb7m^c`Q^_%myVv=uV#6|N}>Y)7LW>= z(C}aNmfjx&k><&VPNYhgpWk-9HcA8n_Gn?k*55Yqc-0}}V@(*9OyEui&Q&rl{qcClM?;p`0Rd$j`&yB|<=0x%L>qMc!z2sV*^Y%P5p{zqiX7dt6%; zaH%|Emw~-MC9DPIK`!1E5=9OXW45$)8)=ysGOGZaLeDh(GW`zB)SXRqfTKuZIG;&N zk_Gf8DlF+XYNTD}nMM#&&M5BkEP=zSf%>%LlZ0Y!hMIA(IGAMiBqHYR-1nO71xh;S z%mYhYJ+1Hkn8o2z^I65h#`djs2i#yg_lnMtkrPf@fGcL2d>JMmu40DEG2ZwLR&)$BsET24+bQzJ(*?M~09C#A} zJ6P_yS(WRmmp2{34{~<|Gd#(VD~#`Bw0HG7fJVy&8UF3AGriyJJN?y?^e5*LpWFYQC}<>s&Y)phe3m>j#O9j@8Lo|51N{rO+dOVd(PCg0eOQW({r`&1DHFaEcyzz z&DR@ZlySIzA#zBGCL*oyzgB{Z^X)0IH@iN73OWvkG`w;Sr<43Z?DH4u$d8I_<(F4QQWPEW%8ekXy|2K zbd&upW|m0%vW%2q)apu$?1!&dyXL@vYb{n(Q!_CU7_3?iEGZFol@@C^Pne2r=76*~ z<-o&K5E@Mv9KuEn?l)Dlk$pj3>>PE7`<{43HGH=ivuGMWTYe~O6 z{4PtsWb3;gzxbvPu)0n(u4>uR{h6Rz_7wZN=MzU4go0hY7Ik&`P_eYoP=iXM^Wf=B zG#Pw?uY1-fOrdfrmHb<&b~$$o(`E8np-;4{fBz|KbvSDIhdn&L*_y>eWrqlgOfK4- z!D~>6@RXO#0cD=|Bsg$cQ6{QQ-TYUq`yyG8II;^79!fh@J_D3A6ys?Ve=i<*`e!19 z6&&j`cT^{ocl75?43M4vA)%ZLRY|RTMEh@60YJjFh_fmW5A@i>bBKqmT`p`Iz=ajo zc6Z-VB}x$raTDH5=*nJM#~C~`Q3lfx)imcHbkb)O9fvdJ%kZ7`A6FyGaE7z`mIkp% z{xmZPkAhgSdjewz&z3(2^zv(zsvInc9gp|tDtveW&My$K9NTq96K{Q|6sXd?Cnr2#0Cn2EQnvD130NYou_yAj>$ihR6wa-+e3rOn zn|1JVld`TNR%a%otdflhFQdjw$f6spS-MWc*UN! z;S*mL!olTEdfxPgIXzp~9{qi>nC2L)?_*xE08P4Eq?fG-XYBXc-fEN`=#8Oq6Yt-Q zf4SV-bWlmKq>($9h&8aLJnTnb+yKiWG|PrLSiUOo{jom9Xv%ExV#@m!zSF?y-S)^c zbiSf}Se8SJ=mQ%-Nm{6!(cev2NzH%`>*@Mdc!{-EZfh>m$>R7rpfPz_bGyLA|G2Hq z+g%$A5*Fqt;+8rnT4~Q*Ma!he@z)Sh4@uN*EFYZHmZzo(xdEU#!A>`f>( z9M&ROy`L$~L)h1H$U9z@ELxXJb(-%$Jt0AQx^iG~Q`j!g_K-EnbA9%8oazY&<9bjsLKsemYhCAsi zAK151rZk-odiluTKnFqHw<%Wn9rr4_sbFO^I}#nJ69`h&; zt@^2Q2JRy>t~dO{&!&c4f|{gKe&pxhOL@WfU{@>k#8R*=xeI@xxVZ|>UrRiJP8#~{ zoM=x=;-CQd;2;rjR==mD%A>~KgCV8Z$GTG~XPh(A*JkOlfOHeGEI;X?rN7`QJ#Eb% z*CLAOy+h$hu(xbO8WOQ?dsW=xxcF(zIZNO|wHxZ~*o;?v=Jy2K zTspO{atr*5hmxyl!tj!+lmJe?wJA5C9YZctjv240{j*u2i_czmf1SOpU5oN6F}ig3S|PitJ#2ltaM*e4bt*B+uH8G{A1 zuvF~Hl}P#|R_oXN^wTEp*8?0EXuRWgxI^J@V?e3J)AhRaIOLXbClWybhN&37rz{mx zWfx_diY#`@Ui%{XM}x304!=Qt&-c2C(JlqwV0D$+;-&J(t3Lcspuhc$4AZ&o-Oi6d zu&E36fgq}Ai+pL*-#2p@n-BaUetw%zh@~_vGk`VKuYgpr1HqDIp515Vy<1@o!lWUD zIj4<05oxD1&%WScWrPr<<8{}ykGtKSwE496^v&GqXdjY%88KoXT&2V?4}$>_Yh&D?(KT`z})>`TL|1*o^nK{69{`NCE4f!ppa!uTGks-!_BHpq21@s4_mEadhTSf-^ltw5L> zm|Hr7GUvu(X1Y zQ^k-9D{E@aEka#7&2`n;Uwj`R_RvDadl=Hn{<*#4+iJ@}C&iAOu!0R?C*WvXigM$6 zd8xdcyXRjv4z_eY6tU>={}28L2?_HtFVD=Wc85n|-rU9h0G` znS;c&Q8!B!=zG0r^?$GUiNr@Q>q5Ad7v4Hmvxujs!PKJt*hfw(c6)Y}Uf8I4BV3fQ zzR;{L4tekq^lKI!>lNv?4HNGat4JK-COT@^uz?5nEXiv>`tP`x4~x0*pdX-kWDECoT0$X;UODWY+$q|6e4F5M0;yuu5vYS&O%OA;nfpYbFuIro z)sN6l8fOKqR|P3d?!GboX_;Nor61j0+_Y%Is~lCQZyVJ> zGY)7rJ%Xax8HyOvxG$9TDLK9;pW`%nCPsq{_o$Dl)6QlOZG0;VNulK2&;qeNF^0$S z8NF|A3kl;3UWy)Dzh0>&{y;JmA@7ok_#^+sZg0TE#I{aPzg{Ns=d92s628Y*Lo6kJ z`1N3KF{B|?*75VA9_4_SaZu~1&Xt-q8n{mKh+d@HeEu!9I}_ZUxwW<&3v_mM_*a{p#@mv`os57@1g@|5d4gE2DBTeXj6M;sOrHeDfqm6c7p zZ_cv#M@){HZOw`|N4>?>t+|Pb^_1K$O*7W5%rI^hXj|d-`xdg@5Q0dv-#!8?B4Vr~ z%R{;$=HDVO!1)~{kF)fR%F3RWC2mYGvlkH9luU}G@CBJ!-k8w}?(L2Bx1&Bn-{Z(qS7s(PDRzEsqZr$0>t#9KT9?IpqJz^$>eJbC5Z~}i30w=_X0_;bL zA9<(YrQ}3Gcgv&Zk4ld&h6^-FyG`cdm2(IA`U$xMs*?X04gE?&p5)=bqm`e*Xe4>S$_f0#sB0 zU=MzP-y^_Xfacse>T_plsHv%GX=&*GVy6G={Q1Awm@Zvl=48Ld#mUaWah*qu|N2c4 zZVnCsSwWFo5>ir9*ZAd?&&miDjne_f%czan{qvIZJ!??71`4 z0M%Il{F3p^S*9Bjm(=thd*76VJ$si`_8EVU`L_Bhw}GwC1k2s$iP=oI8DT1l1`dX!Ev&QTr;9a$ID{Sa2ziFl2DY?o#MB6AjYPjWs-nUJG32j#+hxEt zl#7d}`S75RGw1sdQx7gWBFMlcpo3|b&oTr;z?+Z3Ob^;h{N<}({agwU&=Q|16rX~3 zxxrtl{=9j(Bz@sfZugPr{B)lVa@~~F!B3^xAtvQ>i0o)-<6XU*)elMD?x-W8cGK>7 z_)i~{=%rw*4)KY5l3`tXJ-9a!>vrTw;Hu}cLVUhpgb1abPLfUzGoXBzT-BF@7^nn+0EXUnLk}mXxkfhy|(MU z`dN0fe>M-Y=Sb?{k)fQfsn11D;Z!d3HPQI7n{+MMjZ&bYnsKM70t zOzgAQPeq~{rKTAYb)^U9dnO`mjPDZhT68!1dm@5te>HG#^*!@rna2qDC3<5^bv@7T z@0W9-qviA&Qrr%@SxW51#UIhBJz{67dhKF09RD-en~=s$wFzvSTUe%A{^>>H{-7Od{p@T4@AB zPJ)R&rCBc@`{a_J+6w=xq?&Lo{pt~q=_V!J-lF(d8Y*oH8xtbGf!dP$(=RIB+(?**Hi(5!vQIxL<3`l5}h&oPr_lh~Js z>4(rqNK$tFZ$FKFdJ62N^Qouw{~0jAGome0^O?urvGBXd2#X^IRk9Wr(K9}_w8+lH zOw#bKH%h)-L5KKKyf5|}csxL)xD$JH0`;T6JWAna8MPg83d45u&B`lP@4Xj>0jGo; z(MY|ViU+&B4I?(5YvP&tza%sWgz@u5fk`~5MJG2C%NzbjZrd^%x}2R`!L_COW@V(a zH^Bb90PaxTJA3^haOUjw(`AKE(lap_Z2NNJLPzSg%*x5a0xLhE=ikso*c#vWYFW2p zuOO_b`n9fF@uz0XxW9q#{}~d^6m~=qm2Qy4(=27p&_b#!c6BaXne-k*R@sds&<_<| z8(GF*h0Y-kt4rp710TZv>Ql>)wInm7RQ1A@HyhL9%ks?>axs?Ew52_)FQ1{+MuPW- zzyq=M2eTZI!|n@{)Hx#~nFw?NyhbpTwKGji`jD4q{}yC+Lr&MErY9d?G_ivU*4Q2B z=vqn&3A4FyibnS#3S4GE4|HnB6nGSaadw;|MW$HK#KY2xEh1b4<>vq*q#8T7=Iiel zUpTXvIuG`Dj7z3mDy(kqyl9ovPRZ~^JzfQo(Ux-YW8C#WgB2ptTG+c`MZ2H^c|8^Q z#`b(Ih#}&IN1e7$(*8K1{!1_FnqPn8y;>_*?-F?aR`*n+6D{`R_Xj|<&)|fE55aN` z`o4SS*M8pqOgwYf^@WxZ8TjBlTzZ8#j{NI@mvv)7vy`yuDx+?(si%mryghorHq?~a zJZ}i=&Cai}aVO91;~L#QZET`yFg~$4%@1~Ut5-84e2;v@e*!oAb{ZcgU;!wMnSQ0SzFYt+k~ zgV&Kd+e?wyp~1bjszpg(SBHMHtIZ*n?tLK;mBTc?1v(no&F9Qi_koY#-H4`n2m-}Z zfIW7a`h6#6bk+Whuc$RznC?JgsA<)tuxeuzxnaT)$yqEC(H}E;(<+<$) z%T2sZw@j0~+|wc4^k_e1-Rj!;OEzb8BOziY7F@IDZj+Dbu?u?I2GfPlkDawcFY%A& z9*z`5kUKg6`m}^vSA`t52+?=Q&+mhk4UMf)#QFd(`eYsbAehUJ(giJkt9JdsB=fMi zM{hi}Me;I!Y6ZDgF`AnEKsp|L?xDXo`@$CMR@E-KdtCo22hnTP#MZ~3{9`cUBfLtG zH-o9gwA=ka6!~eeNeK4B2i7j}mxIsp%F&I=ZC(qZ52JJ6a*&^8`!X5$YTF|M7%T&p z)-U$=>W?Gh;F!3*2Cab+N+(x#w4A|zqoIdkK2f`#x1a=TF%P+R;RER)&*xCtNDrso zb||sJS4Aj#{@?hhD6UozZqJgQ&Otn8ljAo^Rx+bi+t!ieuL4=w|F7Kv07Y}bj&MWM zHLGrTO{Z$tQPX1jLsMBfow}||rb!l1l^lLggP6@N3No$Cs!3UIuyHZp<5Gdc|) z{V-gJf)1K2@^}j~8Srs#Fq~^iwt0Evi_>9g(dYe4{h6mJ9;0czw6(orl6v&gFJn`S zEZEwNigdjpjAhSYSS9^Egv|YPMH!SdYaBP`|Kg^hyYmsCq640udVR9R&>M%#3CHXhHK+H@FgD_bIVGKQJEDWbR6e!ZJx~#Nb#e6aM;eS0_Mm0KS;9{6`zd@6aWvT~<2Qx>e z=v(90=L*w|-O3#6inYbunu&fZXhZV_B!@TD$E|Yds+T#+NPLYOX|QyBjb!u2sToQR z=klhPBDDU((~O9odiRn0o->~P6#Fn3)LI(sq{MC5xJB6q*D&|@2RtIMni#0<{HeEb zQ37Dx;!NjCcNKfmJ|JDPz=J~$r2D0zv}HzGATjQn;_ay9+(;;<(H+UrT`{oMY0nWb zx`H#7O8k|>(y8I2#YSb6qe;j3@jc+ml*G%XQAvPG_i!jebTKR?XhBWA%WXcf#|fkB z^$hoVT|JEIz&TupVf(z*v9)q$b3+PMH*eps1MlHg7#9>LeOes9XXH)PSKjAYP2Ko- zz`Nf{QP>~j?zgGUYqU(+@}(pmg?w{?8}$E}N=)J@lT(#}lpWX7FAR8m^7lYrDq2x+ z$6ft`APbG#?Wr_#QJd1-y+_wcf00Hrnnsci4?N3$OLG@`@q+Cezf^HOu_tvpHOq;= zfr7W>p~Rp4t_3sXdRMFW-)xTV4^?}*0@pvjp!xU$IGG~=@V`Q0(o;GrTw!|u7*;;? zfJvR3-v=ejebuwvsBKL@f%dlG0OnB1!V^tOY*4{mO-macO+`$OOs-qU&2NQpFEM?W zD;Z1-G)pnJ+B*`D8nFmC(Cu1Cx_vbudnC|peRc#fowNt%y__gky>q@$KM>w7saMv} zJrg6j=bIrSzd@=|C#IN>wT9MsuO7dm{XzPyW#N`U(^=5bVj6K9%k_4)$e<9aUgXjJ zD?4{MJm=|tbA_U!69vwQlZEOkas39S+-rL(lHd1`dXJW2hdT3_Atn4vruO6g-F*bP z-#~X+>3(@gri+Y!-w>(Oa8}seqXRz4-^;XoWhiOXSD_Ly4gVCDSOWQ(`8BK)vbrUu zSJw^y4HQw+Ty^=n$(~zYkVNtbhwa$^N^)Sc)pyyJe(A$U=n8Zz;aD4_*m3v~yf^K4 zkPR7exJS#%I>$w4!Wk8M_LNZ*cGEXQ)qeBG3c zcm=<-S^+;;l~VXPn-ODl7Kte<)z%Uojz5PAbffpZ_s{aW15gd)&1i-xRg*==i>Z__ zJ>pTv+2pPw2g^ZzHYt2$eYki(sld{S!^A0J8l;<=^^s`cdV#!DqDM`vm`56}{xa%= zi?GX&)#b#c%`mI5<8#E6SGw4U1lusCO_RLM?F>7QhNiGQGiHFD;b%;jdEt=|@A8-C zVK~FjZ{$j$1Ptmo@C~(>;;(T1ln@wEdoaWiGy-1rvP_`reRmtj^$WVUicBle>!J%; z4K;_QrLCE7NG@oCsaxa&3YyUMi^LZ&QSvfN!0mQJt#JQ0i7@!qQaI!fQ2PtJ4c-B z1!+?B!~_@DMm~)C4siC&$;$h8yI|n3sBGMyn5c`p-QHfe%UbP0=tHN9SD8HEmG4f1 zQO}JiI=J|ISX8!lh5L=O-Ew_29olrH;*rDm6+azl#;rkR#?QQ7D?R9v%`9zH^l?kV z8rD)JzTX&e?NTm&&P3L7BZ>gk5l2|PvM^9byL_&(9DFpc6rnyIKE^u=|LT&>h&DgV zeMd9S&1W-Mi&)dYoy|UwyB(gM*JftxIl$DHQs#GusuCnj%rpJ-KeMM=TXKdmD-cXN#Z6QfB)*$wSpcg59yC#1vMELqmM##FWIzI(!i+h(@8mh zR+qX2FgVaq=7J&Y&<28Rm*nDV1jp^RG+xV5epa@&DxO`b;5SGsy>Y1(1C~^Zwt1t# zzBRVl(|M`bt&ia9-apc8Vd};dLuM0e4-hRZayjTtuCbxtRgo+?QoL64W`<+f1B$cA z@zA69aw$gFv+=roW%x#Unf<}luba_yUZ~f~bAEN|V889&jqJ1bFJGVG);Pm<*7@lj z{C(;Gd&pIF=`9O3V^WA7*CA(QPhp3~zzCODV&a-sMN#z2!nSMD)#P8hIR?4dQ*X~a z1eh;oF<<<6GMfP4%tQ63f&eqP1qMI>U04_Z@vp7k+u`xQR0N%|9Wj}4lZaVf+NJ-i z^+67c!@5_bnZC7O!+D2g{ketc7m#?$Lf8?8V^*-U3-&}W-lE(7fq8GsTSj*6>cp8{ z?gSfNQTUH(Hn{^i&h(qG0mDpQp7H#RSy}ly6(5ggrbB5CR8=E}U_rtyAXXzZ;|oS1 z5l$9dxLLOSOzL$7&2)Ype`k`bRAq0WLv8N*R0FyA+$Oede@U~jR()?JUxpBh|ND;G z9pGd*;9#EF$*Y^irrEd#I?0a1>1~bW^I9*9ZY5aj0y6SrTit6?mEDc}tjo^v3i7@$ zzK0dMLVh*z(_G~!g00v}$37WsIV`R`}YH}b+jN*aDCCT1^3TrEG`{;@4(ZV?s%>%or73I>iA(mYx`HJj&mo*MvnSVy-2jjxHL zw$P5l{P&XF<0Z>cLC^q6m(=-os!k(=rZ!9Nl-+Hf=eH0^Nw5>t7p*9hCspj_j}&bN zwbzUfAJmC8wO*!7sqq_)>ccuS$<71Ni5M~|e7CE~ZaoLZ-Lv#gN@ZybwNP$*C+lKYuW>wTG=wwXO zL%mypNxUOq#(U-wD0bclM}FhZ#hJ!UMKK(S)<#zLu&m4a@PI*}tyf3Tp*qp3xL()Q ze8`0QJuF#2tiX4>;Q%VKL;x5+feY$Cpm`c@#sAe`6QCZ2@| z5Lv8K^1-QW9>0i5@Kgdg0pJqntKdTysfGK^Os2_WeT6Ee3D2b7nFs$YZ%ZfDKd|9f z88_*mHtOtxR*!g!Hi=dk5KZ$WVM0kyx$l4k?o=H6t%q?}K~d5*O&*Ks-~%|ra&qG& zQE(~`yy6LJj&V%a*_ zNB(JUg9F0(I;}5n&jtkk7p*hoHWGsFA0r7R*~I!@d#)89jM8c@pQ^)^ z>}W^qNx!)R*q=Zq_}+0qU5M?tH!pE8jj6cADC@QBvR7O0;X7w->f* zlWRCn2&%6hnOC_Lvv;VZE7)tS-Rt9nSO_(pPqnPJp5}_LEnL_%k)7P{y~zjj0HNCD zmO7eR`U2d-DaR5Owq!RGRFDxFg5$i`$bUurNyKo_bfc_-f2FliKW67sl5*h0%4fVh zrEI`m#B!3@=^57ES-m+H0+2PJ>4F6z=PlJRX%7NXDbQzGe4@&Y4v^+D z?(NsZ`<5K!9h1@KpHAdRFmjz_;~wq>2^#iBm9j`nTs?sjfk8y0M2UJn`SQ|jhICD$i5DdH>`a?k#!`XO6I_?$7C;Yex&6K|D>S}$6&3de?Z=oys2z?>EDm9^Ki zH>mO(z;F-ZZ9*&QI(skUG-|gGP7<6Y4f0) zH*{5TI6XOx(cdJdz|wMIk`z7D#5sE}{weVM@R`7AVm998~C6(iP?o9yr!{HR!`HHH8Klo%b zv}Kr0U)z!jDmhtdYaSUd*5_ml?e?lJJNyPjB8q+k+OzC#R{)ytAQl0CV4OOu!e6Dx zrN_^Ev`ER_?bVi$1x6D$>+ud-Ti2yWC+JW?+145|;vA{k^+XkTTQ`lrdb7CLlaM!* zJXyP9N=mky>AN@DVO2XlwHw>Q7-jgF>Civt38_TsOqRe0raoa{jLx+Kz-RaccJPoml75O3F&xIuwI6uPS3(niUDx8mswmb?dO zo%ig5iO+QIFn$F250z%z6#>n7h~UBT2g6#55R|w-g(GinbJ$9HC%RM;y4)h~1YO_U zj-&e#ww+HF70zxJsSmx@K@5tjfYw+c3cn6njykcv@APusOj*Xql)o2nwM|WjJVz}h z^aPUvl3Xt(@nArKT?w7R&J_Q*qIZ%^lJA+EV(mILFXI60@p6;fC(0ky;J*o;GJVoc zUOt9UP+3oY6DsM)uBfOmpo`D;*^uo=M*cb)5?S$vZ5nctI&ySrLA9ZY%kLVgvF3r7L&D(C+H+Xlvg7e z1}oquGc4A^B2Gv9>kico@e8VWyiMJA#7n;AyXRc+L4f_tgDh})HbTa}8{%f|Gt0z_ z6!<-@ckIxm<&Coop8K4VgTwMwO@>lC!A1f#;~b?g8BTxt4Y*X;<0w_ChAArdHOrQW z0L!Ob;3075kl%>2g1rW5sY$6GO%*r#p*QGg@>63GP;`b*tyC{DN#^-_n%lq@ zbTuwRIib07QC?u(VQFYygCy=W zpT0d<+hR1I_1$>zYRtE3viN}*xlq3^yuAA{zD={xge$)3JZWU1lLWGGGtcMuIhT@Q zH7ebNu8eUC7vAf`(zGi>T6uTpeiqe0Kz zFGnKC&enXLe|cMgn32g&(4&9+E(diWQa!K8`@sP_<$Wc8IGSkmUG|L#Ze(e3>rhV_ za~V`EUS4w2a06|yxk7hxV1k^)hXRhENl&_?H2hp4y@qTblJJ_qLybi!$C`JSJT%Z)3V=Jna>aH$;D zE+2}G?ARpSz1(<6SOk$YHR7@1J~J?K)rno88=XtE$r};3spGV>3Vxy?NOkTR-P!*F z-CB)aS7A2K^Wx|E`xi6IadC!X^I6k!wpU9o7KhB~3i5RQd5EbgOlG0V zFV{%j@;;=!kRaSqa(Iu6jY3UoORPgm@0-zK)DI7OJEEp!Op@_>sMl}6RN)?OJkJ^b z{H?FPr-tnNl@{%Guh87gh2fwR71Qc#jULPA6U*=`tN%wR1(CR2GRJSrmpi4i=JkdjHkllgp zUzz+3HR_6@kR4&9@Z+n>1y17#tdGWKsw`CH34@WU!B3kl4#x!{8rVNf4fq$hzbwM~ z_o&y_X>Z+p?MuR}v(!Lx3f4Uwx<7}%D<dh{=JpUURs%gzsm-Dltgaf_VC(#067{D!;O zQ{M?vP~E5V#Cot-BE&TxMB_4<+MZUd8!p)d-FSG>LH5USObKCiCSSb zHor6XK$lxL8n}KEkp7E%Mj8z$qKmK$24VM?TUcD=FjqY{>)J2WR~^(Vs#~Ci`rC7h ziPH{_()@2A9c3Zo4b>yU=Dp0eWgy{r_d!-rX2heRdbhe~z|ztxrL+BgP>-)?SwQ^J z?Z&qc3o-e1j+JXy)_ub=I5Fx6;O>y!x6A?_PlNmv^w><2Z3_3X1E{EB{ zJ(c4bJA>SZuk`Mvqx{zz<0Y1n3x7#heGf9WvccTz-{Kd4*RL#^YHm*9^2y^tEXAzb zd|9wif6*%{m7SWnFhly@e7e{G78%nz+20MxpUTmGk|nPpK;mL5_hhtgCeTeN8aZQx z2C6#^Ak*?&yJDUbKYaw}E1M%(!io;Mxu;5Lj>2A2?zA+^R`o7|U!l!A#^t z#^RPU*_s*h4?}u$p1?e+M}j=o+%H~Ne=fw;+g=m^3G4ArOZE=yj@jdq*aY#zxpH$W zUr?2`V}4P@NqEjVj@>zqrRU{qe06LkOUi3J`t^4jU3m8`M9g%O*LZF}rM9+EBqF0~ zs`<*1#4n#p&F2kqx_v|!39o~v#BoLgr@>s7Jc)0DFV)noAm{lK7s3EpzY}t8 z=J~g)D+wk=KcLc*2Z0|KDSoW;u;jNr9usD)@0)Gr(`{vdQy_r>08sSbG)%!bwMYDP zS)&d3yjMEV{R7_qa(8}9aHzcibDn9_hL9O8FJ5S9rI6Yki|U&CUi^a$FkWPS%3xum zR-S3Nb@_1wNQJFi-|+opm0U8;DU8ohs$4Z{o|&9paW5+v$%X;LPeEn$DRqF;Vu^8o z1#{~~J%)}J0Zs+)D2zZmqYolbTco-#e@NBALCLC8PAk%gzprC!Q@IiOX|rBNuw8LS z`jtKM5>eqn_^9Oip{7tF^I(=G^UV|{2<=sX@D}*vxHt&~yL4M9RN})X7xAv2CZA^F z2^9xjg_+^Y3pTO%P#Bv)xD zwgA1`w(7F>K*UKRWnnQi4wqDxd83I=FV}sAmg%0!lm4f z@G*JqrBxhi`usphlkt?CSh%aANsGAa`4x*tpN5A^LP~Tc zwDIPl(=Xb#A0O$Zl3Y9kY>ZT^%2ant^it0pF^}^!mLk0a7e=u14{$-Zy`$kIk1$q-Uq(lxKohSX>eLY@}c1UQ&J~ocmaIQS(=~N%qEv~ycyAerC+S>Gkmx76<5wz z<>-=RW8v#-0u4DOm40OS%Q5E&1Jv!ZAsiu*u$l@AHAmU}|9bCpE}7!hB!(VFOZ2W_RdhH$|^j)`Z;;rZkgCx{9H%ngL zb(>rtGxy?_mRP%%Tb4|B(ND}x?A=NR)V(7o1XUHnRqwvYMq%qLq-n6?C9B$(s%5JR zG4>huIW)z+o{3r(CIu#)>XqaNa+>0)D`B&IrTVNa8sgjfK|WJ62jQqooO33BDLds$ZB@0t6oWN)ooo@hoVBg z+m351a>BF6?ppC|Tv?5UeSs}&iPi{uO3l)WdH-xzwJtqf=-Bv<>b?d5+<{T`WoNm< zEBgdx#ii4+S%nO zVf?66q8oiAtot?SLJx|}x^Q$G8?ssrFA!+vT}?9oW)m$Zig$stdAULDD6`ZX)?2@z zVbYR;zh;T^;{DpfkE0HU_}@35^J2_9sZ23%mRBjzSoC&DSRR-kmQFUldhcJ!+Mcds ztYl#8Rq=UizgG1jL>ZXE73lj>GSk_lTi>;7f))2Trf6c3V+CFIQsPp_wUE!#y*_Ev z@=Bn3d0;m8W1l`*w#%ePEkeX=yxDJqK2-L#|H{zL{HCGn?6slM48^)b{qC|Y<#V|F zMr9MtPEEOTHkYRM@HgRvp$fb*rw+0>x+@0N9R@l3epwV z-zmc5%?5|H>A>`(J!+y7yPZ6p7JH2QYkXb@2~PCv6>a?ptM2-t;DJh7>$fJcRdxSO zY#;RLwOy0Z8*&+msoIMQDn!aohIvSlFeN62%r{t0#F)?hP^CQwpCvUqHZZ^ZPrH`( z{O#ID02Kc&ex&goD8jwZqwN(ggXSJx0(xhTxl`k&dobKS+V?il;GwU z(#_hZJAQ8XXUvwj65K68;Ir5+W=#=g0SBvJ6!f)*ByN_ajsX;M*i~i0!Q{N(T5F-V zr{LhH%%c4LIIiCLL~Vym-m=nUBQ;lP?1D&8{HCGruiD!Seij-qgx(ber^et=u*!YZ z6Ok-kub5@(M*SrWU8K*R!>O#GakgzJbnxau_OAUwm_L5rz+)$qv1UtRV2H7jlp^ z{2Tuui4F$DodW$>bW*+sa&ld%2)`eRiIyZgtA%}zvov#*%0U-tCiFL%+5$09p!Uij z7MdSP=KKaI!qEOBu^(ZIyYP(LP$d<5I8*y1K$A5$za>o(GWRg7abQk1X)2vS21J-V zn?2Q?8{mQVGhZlYxNS+e3^eifW2U=|5y4J3VdacD1I1F^qaIZyIrPUW*_6T49UfYK=6rq=Q|dM+rW9Dx z)HL6Sr+lcz^(%|q!dJR{Vr^4F;^%8m9AkG2cFj$Vcq2_3t#9Jz-4^BG^p2=W{DL}O z@(( zwL<@bV28XBtBbok$)bek?9^v4g_-v)#fDLKpw7^EsUxSGE|f9Q8^duAwBJq$smQb>ET@$abp-eH=1G5 z-EvQWAs_U~zXi?}7MfUD>5~PkSQbvt`NORkdJ3f9n2sgXa3JeKdi~?I^V=;xZP+H+ z{i?m<_&8h2BS-YCL$;Jlw$wRuNqqI|@5Z2=6UBY! zhWi2x!oakV#gk@}KT&fR-5e*rysg^J|6UcfvmbB#`a5?Q(Z#dBQ@F^x?@E))uF8W6 zx|vt&R6 zR4QVlfrrX`#~WGLV}GOQ;-zEO#R-Z+tD2u1(a&GWz;$ls;CAPJ23sc_mOVcp{YDci z5&omXsGVM$C!1v6_hpu#t{V0Yxk!1^32NklQSj}eQCy?sw1%r_#3izLNJsu0M~Y5> zPC(Bd4B^?>BtjN0HXOD8SKd!G^4)z&7hmJ6_g7x8XOup*5x*c0!lQwwwmOWj^FY+$ zpvJAjDs;dtDl@^U z#n7szIx#K9Is~~u^vYAjT+smiV$pX^isPR%5$4eu*^tZTnI8@%_7CXWb4MDsHt-bV zRH$o(v*nHlQMRGb$|ZE1Cj@?knX6Ko+T5CVu+{5DGUsHnWNvUzRvLBr#CZjl@8B_W z9UH17BJ@*kk7= zu?y2bzSnu;Zz0fb16`6nXiq)aSxpuDMw=b$GijUKkN^YpXsXQ{Ekx$(dU!Es&}R*F zZQHtgw2!`buK^|0%g)bNnOeI85-N5~J=OQ)*i4}U3x~FR)nT$E^S+ErTOAy`A~Zwx za7z-g=nRCH8lSJN_ag|7dVv<%2&n9_T$o7%Ipg_m+Yoa}NqBI^y0x+!=~VGcbm}zErumxMPj*!F-+fzj?;fueVIE61uKL;J;&+y zLD~iU$-Kky+`&*wW|gHvT|=2s``WIW;U>4zF9YCPA3UpM-uFG;u}D|(4QkrChdbNG z^0*SWffFK~e!9LQV-qg5Z&b%SemS$1H~lr3m(mGH)97@zUyMmgZP9k9_^_#<`eh6^ z-9&=*I^nU&9 zo0KRA-!LGJ^LFPZTA!ZC|0PJpqI2h5e0y_u6KnW(Z6B%gfS}OfI6mx7aUvNdMy>|B z9krLaag9BsG6z!`Fa)qi@w=1hCa3vU6V2Q=T?wRIvgnAXC60WdXeTgP^j(|g8-eyQ zT|3tHTmPg8zPcSei8{9uXg+)0*MTLae1IOT=?8jz;`6c7@Ie#5dS}-NuR|gz7h5|mU$d6E@~<<&MgYV|GJb^xum9# zIh5P17GDvuWQ_`MYLyvNG#^ianZ}x&X<&TrIiG5tHfx`T0V^`q>))Q<1Ax0%wc-@C zTBCUC4`;XJ|5_OIGdCF$EZq-B=a~9$Jf->pS{Hyb%A#+Kx9f&UblKAjQ%x%5UX@5Y zBm5k%ovDA{Xfqa~2!V69|518edj64m*qpmHhq>>7fd2>SPayu@73a9C&fRKee_{bu zN^GS^wiL_1m0I(p?EloZ2E_% zD>5%Y=c*#gGA#-{Q$o3J9Vm8$BSc+Dg$$m$`)Q+L^M_xFSrx_JW)=F<4@@j9ul@!+ zD|afdvd?1L-hSEK8A{qee31}-LDeJ+m(F(H%QYF->UBuV8PNhc?ib zEU>`$bdT&bmb|Rbz8{`X@lk@l+qNFl6&su>+{^bt?1zS4_(Yg5=qDDU8KYRwB!2$- zsg8LR6|~+p1)RSAuRsB=GXQw{XXiriQ|fnM2w{!_OXHuwf=1NM(bN`5>c#)rlqeeL z(4z$ln!4?%@_}xy*l^F%*7SGY9gd}DoKg-Lf}V_YjA+dCp~PNO6PDvJ@8zI1tHlhJ zhd)B^E>yV-Zr<=%lat=9tXudvZNC>4QI>ctaM(Low9T$8mWuEW&}%pC*oSSW-w1y> z+b-Qy!^Lah%IFH!W%_15yT70IC~^Q75kgS53WRnF|3V4|TQ{jRq#GzGL;A-X$jz21 zOK&%G_IJ|bpmZ@zu{8^cFsxgNDybmlV7tfbDb2IT@+4k`SpjXI#6ah#4BZ3mKiN?? z+#=G0Zf}=nXz!SdkugMp?(fZ=5i`@P3cucGDfxct9(4>xIaB z{rUeJC1}w&D@ZQc3?sJ2GYP}yt45oxgaYD zg8eFv+6`nFG>Hc!!Mc2a6snCTZ2V!`W`9r%XtcK5Z{111#oMn;ubGbLeNzCwd}zjX z@*ZDFy0rE8tR_Yueb2hph)b`uiwy-0{1l){yIu0Fdi@Cz9SC_(0!~&Wia4Kn#k5W} zXZLER9m>lq?c-isqy}5@T=v1DKU}Q6-8=3Ko2Yd0yjT zp7oW)WChi>wwlsq!n*Bm;LRbjBpp&(qp!Tco07sbmAI_Fud`@TtRGw0-$t_dHFdbR z+l>4|0c^+0^ZqDgf(F-5{~sd2qVuP!WbL(wPdq<693}{YzJ-`jv-$oV7vj(yfj494 z^(pr2DbO!;GrdF>nKxiG_^a4jB0{sbVCXyau7&Z&7oHv7U%RSrycgp?iTs+7 zr4^B@My=ey+yQ_^m&yuaCz&xSbiRoev{at6yILjMQgZ_Ps@X@}Rq}Nj8XBN%^vRM* z{K0fuRDeKasV)j?YY^_&6tnq_`K3SkNeeR-gZTu_=Q00axrWDHK4F>Idxcd>T|Q%2 zB?qxD@G9B*nNKxt(O<6D@tAEBV{QCas)m#tR<*sf{kdP`PdkGmJGdeXWL8rwD2n=c z0bbDu`_g^h-l_Y+M=v-{)%~^A!51dBcvE^u{i^gk^p*F*muu1jo6%vKV+Un$!dWBF zNJtDa=17bjb-RWa+2!?6TfM4H{rvf@@o$sBb?^hWOC}wT106lpmP)XFW?Y7%m}QU+ z7nhKYdVAT@%*BriAA!P)A5TFW#6;J%23ztpr2CueqZ3L?#}TvJM#?h%1=8<7uXHQb zdhcJ;+-=yZFfB{}huOQNfSi6<5`WJ854Hcl%mf^Ai7`eo^sO7dg4>lDYpqV);&Hi z4Rzz|9W@^&y0lf2o4H(60-eB&+)({xE+SAVJd9x(DAW=01X+BlUMx7f}Ll?MX+bn3vq!jL}{E zcByyek=T(-JIYM}G=lw`wf}J>{V6Gj`vFR?PoC4uELsa`D{qi0Fj@Y1;ZuELW)M{3 zsjFZgv-cb5hUTG?rpn;mh~q0e{!PtP{N1MH3X7tb8IoXV%(H`9_)H&`Ew3!B&Q3kG zu*&`J>pXYRi!HQhNov5%VQUsUTLSztKjB@glydvg7n;mKB}6A2uV})6{S7owO6sq` z5Z+cX1tGV*P6)#Vt-H2F!%Z2fR1ZA=fVdWEZ7ajuz-8LYxqQwa<&A)X4ir5UwWF{3 zlI%|;`7Yho$dIayO~jkQ%PvpB6a{QhO!BwI5_oxZ96oN%lBvugkNj27_#Y6Mt3S}qE7^;<)1 zF0Auz?gV%5n3s^zL`}W#688l zUa^V6^bqPt#aMtU%EPf=~^JS61{8Z;mRntYuM^z;hzl*NO83PeA0A1^ht)c*xvMJWC}Ty*g)-vi(1Ue&e9v#7^1I98%&%#Su%AA= z73?0OxDV22lDKD~t0$KCcm#&|hA>~2rDY!fi5OX+o7gDE>$p@?+TD9=zd7JdtAWBcb3KuQPrFsOSeQs!gFhDVCW$Z%)z+Ml;Ws ze^ESR?RJ8#A7wc4?u`?UC#AXBQwQE-8wwxo^7k~6_J6_u7Ivmn7rKb=Hb!-4PnFS; zsO6P3n7uerm5E74DV;_ZlX+qu0bC9id0M^sM@)&E>sMwAFV2P`Nvq!2m#S*5OFG9HeuhBa_%!({Z=R zY?`JaB3c#JJLtdu^`VLV4Ye}>i}lRk82{82w^&q(%ChHFa1Vz$doX>bMqumMPh<>v zQywL&;8Oz!IWSlxHT(xWPZ%+{r}qEEqZ!pYof4Nq84D=}sHhvl_Iny$VBjxkVGk^z zIN{OdA8UIdtrWkitLpx00}q1PZK#>orw{u|Cq}7rM02cPJZabIRw&GyJinJ)+r9N= zd)s&z$Nrj7ka4u}tvGu9G3L2tgI-)z)5^4XJNSO~!s^=eyt}isXNVQgxHT)P(WiCw zJ|x&li8o_B+n~y@2mvjYsci~WK$T=~NehrW>lCd=WgjZ5u1_ z#vA)f;{0Rj_noSzAHV$vkHE+IFX7}wG6Cgnfy)<@5wSNePyJ+4|Ie1zc&R*ATKf0;9nty##2p}-bIEni znc!kVeZ>!9(S|eU9s=0C^$w zm_{_tEgcaWV8_wGwVk<$E~ zf(Xi{rTduW`OZsA_K#m>f|0V-OR`Hd%YFx#pZ}Cx*pV zF10TJ3wsm2R8!K$zQZ?K^`jDb4G(vr5WCT7$cek>Tllq9oBqi;GHu?Yne7^nOn_NT z5ZH-*REFAq?}%JB;F5!geZHpaU;}+qEV%RchRb@kCcmEUL5h9O`z;kBacI=zaXuVK z0z9vCofm4;X8kxbifTg)#cgabd(11dxOS+gBG^O2+a|qZ(v7=&&HF_4 z`uo*O$p1b5mB+tsSv^r;Fki5-D_A#HF===|#dR}I1!)k&A^&K)^}cW4_@%15tXG-&0mNZ70ONl)qs=W{lCCADgUp zlncU=1fsjKs-(mBSEFz5sr$ zpHJlZIlZAfe4$9x-QB-%tFg$g5IMrd?U9?M!`cZH-mnKW9XBu0(zG_F5zhh%Y2Np{ zwi!H?aB2Dm+M!c1USj9pTZ}p5C#%Z*hszBKB(vrz6AcmR!luj5zy(F|pe5t=Rj0a5 zehs>oy_k1FHt`+Gj;$iBjr=DexnQ195@fI+wu z%Oz%1mUI~bQnvWHy~HW zUct7f6CENb8yd<}APatf^`)Ibs6G1S@qCi|(&c0udJBKv%gOM|p9I>0s@M@Z@6uoX zwnZqK;X8c-%07t>I^N9vb=YE$!m2>ZaW5}Ga=COXETYIUuYq%I9&v>?cr2=-MFd60 z$FjQrMT^_sjT}$DhG*}L)@ks?s-!eUXd|lb7>1Ki%$YIuNJQULoTT&k3JoyN=(&bC z@4%i+>btf8561Zesgv0Bu7Qkj*EUX%T*b=<=Z4u1Q3Q1~R#X`{1U!J$=^JYaPijo( zkm}#2y06rtO}6=XHxlLYGF+xTYrJbf0d z7OedO5&BUj+Q~-pp3h%GiJte-!4p$i)05+HHiC}-WLfC-7b8N6q1tRA7&|5&VJU$z zmd{$SnW+2X?>}lqaG9xdJx2;9sMqRS%o8(<7#Z`*S~JWdPPV@(r3xSfZN`7pp~$M2 z-)81Ai*WFOV@Yq@=nAL=7|L!}S4<4LT6I_NG}i6OhL7ogGP@rfZG4C5@ag+;A4Aq7 zoZFvMylx-ze z3;{0G&07e(t{1&3B^md>T(BJ&{|UME5+X)2N$=ea8j3g8sI5g;^!$R{>kuO?^*&Nb zMa*U^SZ$})?R}|`dxD?&6Y{WhK3+@KrKQHfBRHZ~X|F}9&r=Zg1j(3cg}#-Ie*Psj zOm!L3*;MaX%ZSMf9qg>IbdB1QC0erzjj&H|dWL>FW7GElLZ$AvL^6m=Ncxy+Zavb) zugyN|gMBtauw+lI6n;b>G`@`~C9H^*qCPVy>ERM%Fed$FSNT;R!Yn~dn+My(Q6l3wNg7*akkXA0yRo>;?;9=t+)-a?eM=$kc9}@?B>}GStzw6uT9x#b z-TN>kskcCOKrKE4-%uUEBH^oJXLa*fVzYK5A8c;OO6;sU98f!-a5T_|~yJw_#E`1c!Yh zi|&a}Z~U*N8@(&SIcE_xKAGpzS|7F8)FVv9mNb<5*5@(rUVVg0S}S5WGI52EYGcs5dcoStZ5MZE0|ZXx}+4dLvoi2by`W^)`$A!KpjFQJ8GKJMrN^pL===a{Bl! z3_j7|3yA1C+J(XaSY8>oG4@O$w2}wX9PHs>S4vZ7rXK#@fStr4dpX2m?N+4rE8!q|!zbj5EgN$8Sb}o#|Ea=L zzxP122+F=}memz%XE+H8Kb+=aag$A2jrbIMz{@dJs_DH>WQ^m%?d&wt z-$1^3Uys9h*cMeRp;i# zP;bU6bv);LA3mcksir@5-u%Ut0dFn!VIs258YXHaUbhmoAfuzBlpd>;{u(KOF%`g^ zAyAMXqtO%_*%W(*a8zqU-7T}i&a9TT=9wzpZhw<^W#kTF6WxwB$xA^kil;Qi1vS}7 zc2Wm*pOt3Fyj@+sjb84mLEJ(44!350xtLzB$cYI7=HIJ-p4jOvor^D$Egc24@e^&t zLLQVzhS74Ac)j!7(J_jGea}iKcBSk~={OgbHE*2Sw=$ju9xZmvcxsGr^EZi?CSNsUj=@yV;)<4a65K__O7 zL0%qX0e}Vue;S^y05t~FU5-8IFHHp{26iKF+ATZ7xsPi;l$DmCKS|l*w6_^S6`HKV zERp|eCnxZ)ZrXbfem8l**?js2a6OTmK3iJlbWWnEv{hu%a(l1tVZxvuUoG5o|MXfXrL)YbI`nV1A6FxMx^xE-JiHD+4ePM|$F=0%N_{r;!;La{uqO}hEY@&$U zEW~t2JMr?8RC*)v9L7Yw%?wRTs6x|lzj0IyTevS(VAhVFh`1m@U-^306ne8;*vX~- zAJ@SN(Cm!h!~wmrRXmuR8Te#}oBA7(NL;ut!HCvJd1THh@?W^3SShuoKZW>${>&;O zUoSr)xZLixS!TjiRj!#flJN#;H7c@S7!)?{C3?g;M+7iMHR`GDFOP-Mw9pyCVG{ys zKoav_<2&T%Ez>{1s4uoDVY01D1*ZVTj;{-rM%Zb; z5Ufr?JF;a2XSKzir?L-$K_XOBZ=q<*h$a>!)(o|xp-VFMp>uf+?~_|_Hkdy-$T3hiKWKf=|cdrT%`Um%3M^L%#b89HcsS001HPx{%5rmbzX8) zSD!~4QeAam2pS0Y2@wd5S{dl1eAv`2`(nm}$nd}4gCX9ORKjk(AJudrz<3rmTvuibKgDtD6L`fZ`g+VMlvoo1xw|wKQ}uA~Mcf&%>GxR6AFv-&OAj zff`*`>QMN;Zs$KmyBk{{oAPz|D4^rb`PdfAp|B_A6E%wX@)4zME>oo@Q>9C68b2@^ zUr9#yIZ;aIk4o;14zq~6vFaz00pH2D#pM{nf*cR@ewc97pbJ6pqnsWpPmgLD3$+o zl;#MbJp6eOfqha{{7UW6t=^E)GgKlTVV)I?$=8?fgOZXPhN?YVuUkhIwKkRm@2?%6 zb@n#o4{&xsb`dy9;G)S<>gn~_#qrzdYV5S75rr%RN{bUOsq&ex_&_X-XVC(B7pI1q zJY2H9nkYd8Fte5;e}?O1_^vs&R8!@8yEpM_tH50dP_!Q(pzlA@`&|eu9b~4Kugv=U zgcnf&B5Gtc99IkH*kB#>5}IY#r|C!;jZ$@QWuf8pZXeauE1K3SX-vz}nYLoXW)(KH z3|dNFcm?H4GDU>xSQ{8w50jb(qVJI^*_d%!zPuVeWg~$L&&(0jE+HjD1MIDt+&*7W zRy~I)o(iVho@ra$w?+?o<^E)ADOzVhn?cv#IkY&cZ=1{&Hwk=8B7p80onEk-z%btG zlGVwPR>nA5#T(?|wJO0kaKp`0*L)kL+qdBF;HTmcqZRI*Rf_H9Nawd~_*%;Jz_oIW z)0d{Rwl zz>jC!``+6%u134gSYx%4>D1NH9k_ViZgZ+b9v~YJ191(>_4rgU;4?erjm!6U)nyQ`e+2 zEqlRym;&ny`LLRaMmxhk;thtyQZ~rCMbAa;GZ&W^2_g zLluXLM*92-Qqc}6+=hei>HBZ0^_Eu%hTE`!xc%rI{=Vixo{T1x*24zzI0U^!-gn4R zS9AQ1Bxlh4=k0ll<75z$$L2!9y;$}z#`|e*LLjLpxbnfusY90Ast@!0UW!zphW$QF%7Km_vvIfK!3ceH)c6|LM`#uI@aq67Hw?~4Uws|Wez zK?XFN<~}26O@)$T-mNdlo`=@{z;SVIrg(@kpa;xSaWp(~I|;rz5|3MpRrHM6j_R9P z@4u_v^W!fr7lW%ZP9lBPqVCJnaI0X`IsuHW2wLCKUFE$`FpoVO^=;)V$SlE?R~W6R zBZzo8g$xcqURPo>y)XZlI=Oc@VNmKYqvm>Ub2k>;BJajVwy>R6x_tNS zN6lu$!J2Zx?@O7j!;*2~F#hd9is9y+6yYw}A6d>|9$BdFTcw za(A>#)poJ=WcvqgnKb{jG-MdgHr#Vm^Ic?nux?W)qCf@WUi8(TnJLe^xYdZvn2c8O zl&8*{x@k&%BWMg+iw7=_EHcN~z7-42X53MpP4rYZyv_f3Vq5pUdH)39r@LNFyD00r z2+gc!#zgSLE}8My(YCN*(k7i- zBavZr=o;S;OJEpZ0D37GA1l8ytT?xq8T_W7A^bh)OTM|sM}0zH@r6NWge%!5$dS|}8soJpK40SMlerUBpUq7cBI1D&7KExK=-oKQ zRJy_xVKo>3(;y{vL+;spTVt;vUx~h`*H!J#+35F9?U_}|sEl5YN(b*32Z&IJyt4#{ z&3SCifg}r7y`f}zn{oNIw(sfXxOLOJ1AZo?giNanGMpc?5JV>Pl1uNAi;yfC6PM+K zr&aTm2nT#P!yuAV8PDs(y4J4}KE*y<^<-@$&hgJ5f>)@B7sh z=Y<(7Y7eYKwYu3^J5=gcx1LWZDcd?ZdiS-8or@iWiyn95C*`B=b4J|_IR=d#|3Z*8 z!X}>2?D!?Q!#rU#@oyVJHMSTlJsdQ?tnjtZ?2!%?&TS3!-Ly5L8e zqk8->rG?GtsB`}SZX?d9Lwp?};x^=;_pFmyjg*%*-0Uj5l}Zj{Mb25JCAq8Cu~NY7 zb^-4yr3E5TE_X(v$0yihh5GEWUZ47p&;UdUgC{tN|J+$0gy4nGEa(;0IW<@=$vvfT zmbfHyC22;BWaS?m!zr_BF)F$qu{W8x7(V8LEH%_y2yAhia6zBW4T7Bb^S>yY2f$$r zvW}PoXeWQ9yY!l1XP+rfIxz00mi#2_l_sH@W1u0j>vfnjG113OoR0H=KG3 z%J-Si*0a%8=udmN#zP(}{Gkc8@1Qw^c?5soQ)h?d@oyFQGg) zUsUcb;1DI4pxfreN3=Pp@4XXw+j0VB7PslwGmg{lj-q{p$=MRhlK11+-7pzdrb4r% zkIlMrcNRCe%<={M(Bg>|NzJrcnLou+JFIt_Q*)Z4gzWS9Cq4JXOd52v(9h>^)1^!4 zS+L131Vdcje5U3Wk;WB8q(vLU5GLge!(qkkGm)r~x{dfdsJ_IQ<{C+Zq5REX5M$-{ z%NqipHOmKS?T<6=Z@u5PR>nlnWq1sm(<+!FOQmfM08SsWK7 zE)`1n#3&0}uDi&+pPt2sitP@4UDm%Fq_{*Qb()WPj7}Z79>n{Q|5wC36WQgG0`)*LSd-$o3uSl3 zsK%pqLhT^F(p;kiC~|M4-Z%;Tdg<|{o1saURnbvj5W+TkJsWE=V5X?$3~fgV$TFLHYRrj0;9Uor?Sf1WW?$82^U|n~OrrB_BIyksaC{hR{pIqM=K z+xg@7mnq;C{MT_}Za$+_f)_7&C3jJ7N9+0yv&M@lRuI}D&)V&C>Qnktkl~olG2v(j zV5+-{^~B?*SZa!R9UB3R5rAjMSnarK1pIgSci$d~rSQm`+!JdRZ2Bn2I65Ls*K+xO zg6d3W&DvNLEc8E7zU6!Yd-e8zR@)SX)87#X*2+UO-_Y^xHKpv3g z#lMf^dc+W%O2H{p2=tO52WQEltD~?mCCz0lRU8`inA6o1n-P(z3`)%I8NH0}irX^alAEuD-kl?rsXn)(2&J@34W&h^{T_@vdmutwIbGCjKM>_086kj2{7?rx1++p7{V$)7_h z?K(d08NAL63Ut@1T^ctl4I~LE`AR$9;**K_ycu0$vBU0SipZHcw6V=koR;`Qg=dW` z;d^i&u|LG}TQja|nynWvnR(?%rY^zyjFDZ1f;3HS`-P1XQ+4fWgcdD^qkSX^=@vmu^!ZiJ0OK${=1Sh`(9_MuJsr>}jP1>!nd0HB{#X zJRA;0-nN`t&T8q)wrwlpW%jrT{W!a}^7I?gd5M%UfkQcPBD z#OEn~8vtX=o$;Bgc|8&w&5Cv-{d2w{nampp7ht?N&L%3CL(_Wx?qX)6X3Z_+_<)we zrM21`Qm_K(|rwQq+yLl$@b8m*t z3oT*xKL1XOC`|_BYlk)Ct1*9JLUWr2x*0ApSTxH3>Al=-xwstCt_`J8LiEJWtsTj& zT@xLl#m4%3j*%d^0s*-B<&7bWn-_`6daL8}R%Qc;_lB@rUARasjGc_Z)Yf zKO)O)^Y)mcTh$}x?0CMO0SU4Y;PoZn9v>&Btx@yzu(Nv)}{0-#D(d&{Z5&^`z#-(m=#H1 z0r@6;PNDfWXt_D>#8{my28$f>)FvbzZzZlaaC)sBs$*P>f=4%$i^YkLHC3%56mz;) z56m?RA>?Vnaq%LbmERIEPuO)@Ok&Bi74Z^P_Ra$q!-j7oKmpUuFcR3pq(MSr-xM!P zDBdY7wW~aGhd!=5%AaA4*D+63LEQdBbAeD-pNjJ5 zv{$Y&SbFTJhkxQJtEldm;~BAf<=t0r<#RTUa@PgXz(lYaHZ55hw^rE4dRG?3544H~ zw5Y#v2d!EKo&$49tA&!lKD=%Fo4C8}4vFku2)~-rO3AYck=YUG@fCEFO3+<_mEh&6 zzibEY5I!^xaS%_JovxNkcdH^6$B?oj)tUlsC12f**%;l|xy^d6nb~P1;oEZ?{YKJ? zHT4Lu_^p^XR%8lk1o5zTR$AXg)i5NB(qa+^6`p~ ztQs5V+c*VJU`k%h#=ZBc7*gqm^{dZYEX|TSXEM8FCROXS%oC}gyF{vM@tne`x6Z5nkB5qleJyrxJnA?rXH>Yt*HD}a}KwPmrENlVMetnT=1moYVq2quni}T zbny0Z9ZcAHN)d=}oI|>N3RHaKSSgI@Rp|K+32^^-%k{10PC^O$!NLXRp4H9godxQV zU{2DYsyjO1t-BHiU0!0?1#R4XXF>--xba!a0YW*K)O)CmQD5iEGpJ}dI5qFw=NMrZ z=W#|s#sbJVA*YT^u)zNM`AF4yLiR6m9x2m%7q_3e7Z`%3=<4}9x0&9~aVF4o+E$im ztStKdoW5F?+!68=zswiVx1ZA(le?ei&%T{jKh0i+cX34UN&t5AH^7D6r>l8mpA0=4}@D^6;PDHCu@zsLjz8lLxOa z9D!*-l%tNP2uuaF1uf=g3!N=8X83a-y71Xlj(sOdAwgM6Qg8%isnLK5B$iGtR<_9C znz5WM8~6x1j+syvJ8eV!Qsu)RnpXtBE69R*#MoEvcVpT{Jrq zuBN`(qcbdHrF+TtvGN~HH~r8>-Ul}L?nlX2rk#fKwbh$ofNse)>v(Yk2EhP+P^ zbyqMp&d?5#0I zU~LQNm^FPidOU+YhFhnPzW4{N{T|3xQ=ejCE$DV8iEhf;Z;FGBHfvPc2z-&g-Oo}* zQp_)idXso$!zYNWe?`8woDB-wta28bs2J(9Af?(awx)lkDWg)Y6U5g|=%{Wj(fTB( zJvajL|DxHBK{Mn?8#sIWMd-S&1Db_XW=#%qvZIs0kV>!3&SkCF)wq$9F}EZ_sed}R zi0YAbxVi^MCDMG|Pu8LJN&uSmcw-fBB9BfAxJ*6r#q`kad$UHKn4{y zIo&Wj3E!lyV8CQ9u_>05M+D=F&6p8x$RBr)9zp)`{`k$2K`4Zli}8(&MO+0|FwDTm zrX>C=zaVtx4aIrZ5vCeV-v%{|SYVFs?+;v^M6yYLeipIFn;?2evutaF@a@@Im*`oP znkBTM1t)&1%7Bn%Q0n|~M(;?q&}vBA3%UIO!a<%4Qx3KjT`tuC8Okfu<3p@H2P({2 zXj&qdZM-Xw!WD<``RaPNLa7x7-9oG2XfAx6BM6gMs`%#o611vMzo0YG<`g0=;_2*f zVj)a*IU)Vf$V|P%Rc0k(rWde0VnQqZ4nzIoo*dn#ZRSt^MXkE3w}-7=hf@bn@`D0W!N?JbtD$=0XEx`z-t8Az z)k|8;rv1E?5hwd#J^AO{t>tw*wrAENOg=rRmOx50_LotQ)Vhk&f0wT?XWZ17Lm?s5$G=5Y zRSQC;F`HmjP*17g%PL>&FNlox&cp_bPjZfI{(#lj4u>?ggDpj3O0-vY%{Eo#3~U|G zf1%?S#EJnb9kGOB{{>km<{X;*f{=o?DyR?Vo|bJ9c5WtXO8Z#FN^X2!cj2z`XYu^$ z>6!QoLS#9tm19_VWa#)lBt-9Y<1>8j+@xcsbJ3c55?Fmg9Ch|x`E;-eeu(u35Id`t z{O}hft;7xH{tMD+XqH*IPCz!{uRkxI#G^e+(DG)_TE&$MTo^bS6<{TGIF%%1j?r{i zfiqr4c0p69A=)}9xT3sS&@%O@R}8kL3py0lFzuris9aFWkgj+=cPybj*Of`PxMo%l zZOX{A(o}1x=9AiC>CE8G*?M`r^Y(<4q4wN6B9oj{fBnRs*XHa36F&7P`^9y<=VkA5 zFRBRQ0$l57%!2t__9%qA45QFWlj?iel!)`opReXb;-z1AX*PWutqUEI9F_MM#KoRx=GMVg z7_TGp+!9DtKjfVag1l8E3dTv#bcW0PudQx1WgJmtLjR+V7OS`-v|e=IDN_b5D}7OA zsJqHN?-zSYY_4irwaMN)b({CI2yo07;+gjuM@9Gizvr{(e)Ddaix|jGX7^!Zg{P3T z)q&!qdqYw5VVDjjDX&5;Xg7g#tm1Jks9r_0Al2afr+m>y8Gh>g0-oTF2+eY$0e9eP zLtxdUl{sI?P^MqM)|TN)<%P)uxu+G6AxD%I`PBXfdgQxDS|tfNsVbzWX@jboLKl%^ zLvj2-X|>fxD9KZA%=#{=$-!G)9~pf+l5rRH`RsLMb5iHTne9SSqURy@1P_7yEC9QK zUnfiQBSMM>_A*k|2KT|5Kvn+;CA^RgVJ`1`ZD-!l_c2~`)>EAHM}HrbcJTX&2Ps_e z0uWs(0#xHkS~AUCG!3oj1W*P$deYmoW(_vbU6YPG2t zD`Y=*yEDYf-*lid5P>;WDtBjuD=W$=l$9QOX9x3q$#Nx)pqXvpROjXg8$YlbjBN)g z8^EESpKq2)(nSit?vN2Gqwl6DZWLT5H2I9`Q<)^d}ei z^Z0|)>Ye)f4n+-|;zl5@YfmD9U0$Y1;U2uPARM7*-aaGPZ2oi(F7cSSU{XA`t=(4j zwHTwVx)Dcb!yC)BzK-ee%8hm!b=f46lUZQ|~ZQ#sa#Nm_Mn@=&3j?v9}i*L{_Hm^io*?$Z6A&8^yJTb@s# zXFIbjU-Xwa=dQ(s*)^2M^|jyM^Dq&Eh0sLGrNDI*-DhsrdG1jb+uk_B^GB!t=!T4G z&a%=d?9E{$ok<3#nWIrmXWHP)QA-}bAY9~3`S-DzQ}nuBet}m%pWf$wbr-PHvd4ov zQ_yUExcj^1`tW<0hrBNz3%arY*PiUYwp>b}0#HX-;md2xfL)TU828K@brKh=F6?4? zMOoa4j}wiI!W_47{~hAoef*XAOst)9(*Z0iEC=XpAJs|>P%G-mdWfbRn7U zSarJ}($`|10J)xNTBo*>_}rbO3KJU=e)GDpiV9~RyK|XC{kWbO|n$Gb3wmV&MOXwF!@XMp8`E&xL{@s<_qc@W zeGC})FWhA7$Y3=&(sH|m14QGcEatM3Dq=xUiKs-}*%ycK3Q7KF{%OTegXnd;haydlNNe|;r;(03oW9x%TS6|sZ5$3Z z@{$(SL*0exm~6{644(JUg*f+YV;rEG2S?RRyFzg$86lc28^t=rVamUIZ%%wIQN`*_ zkes*otWBg(T;5LJ>}&`u(}?B1*S$mSI1&9|)tAx?61=gWgR4e2F1M(<2e52~@A6OI>9viIk4@Q&w^Dy`P~L4B zwEtnf+)x|;W&RzY8X^;bcIOS+v5XptDfyf&ZlXMdlRS79W}~ zT3yqXR@EDfLes*dQz;R7+(G_p9Xq=fZ!6Yk1p1OrJ^(Vte;+ret$S=`7Zj(iEdpRb z-PX+hV8fi!Uqv}FBG_%R>fP9czdO7$>xgG){qfHr2&GhWq#pYI@prTEJ>>tWn-Dd6 z_mIdQ0A6lvH?rQA*9iM2RHLP*RCkM*NHgK~EtARlXh8p4R{zfj?(*HsYhR-0$N1`F zJ4kmm7kD-3SgmtIf8-b0+kiOt)%!6TV-)OTSKAn8f|;l*J{^R3hNw>=7;pT7yw@?j zSOvNWQdp0LAjwxP!8S1`z^7SilzO3^a73^D>#Q7I?T)_&^zB5_&dk#5u5x95ZgF*y zmq091EK;j3T_-e=N)9aC@M>%!jG zt~3&^J^(*3^P3M#^8=4PM@;Tics1@H`6)Y)xXDg^HNWQO{`St^9IqwKT@CykTyea$ zJ8lytAtT|S&;!EfoVKpVv%0*s2mpZ`H?th(mn4(te?fZjS)H=BU_p{hT0KAK)VJcX zf)XXOxrrxUURFkOCansdAB%=Q7>HxSuIi-5I63^SMz3)*38dAYdH4jdR$vbhxO4TU zvc3??vuq4*6*Ss64%n}Vhe@8zad8ew<)V#F%lh-1Sc!R7nsYL&*KqRGGz1L`ti)CK ziDgHhoQ>)~iOUnwdXN);cjuaEN|KTnn|A1-8Dq-vn-3cfRAz6D&c6Cv5Kv_BdU*^1 zp^jiUbu!vEUirq4H-xFwIb{Xb_su%&S{1Qi9xV9i9Gn~OX4Gx+ z;G{vH*q`_{vFs|r~d|U}R(j&*PV7gCZCYNYpN>&zV%e#L6*Opqy{4{3>sdy=i zc(K*5sj}*Rz8I@bUY?3TgiSuoVqHw4WjSiK=1_CPee?4DB5G9>z>YO$5kkkk{69$Y zpAWA3Eh9h%kY(4m$eaM1##bN(6gc{TlRxI50v$2FL=Vo@{;m} z?=h@Bdz5!tzcK1YIjxxzdk5{6ui$L2OqN8MQj^(FBi-M#-|EP(EHDQf&50T8%+um6 zEXRJR`gM78xs*g>v_y#17PH7iplviNFuhAt!QClbXI6iTt!N{ytItI1*5IwOTgCjY zl=^h@&ZKy4w&eDQTg_4njRY3TPyYi@fcN7+VrhWQ&O-vRj}P}!rW2WDF56P!?B`bu zsZRb7*33`p=|!N;>Df@Trf=s@=BEYo;$TfLqFjZrrw{sfiG;GRb5~l9T6(5gt;rt| z;|qnXBQ(DtGfdP!D{PU@Q7#$%L&0%7&%fCJarI~}1EB6@wa7?g+CKLh9qY-&he`Y1 zdX9%Pk{5Oo8yyxbp5)nZeQxDzl-E`=U;0&6Cm4Q%@uQtP;Pw6PeIO8RCv$lnZb2uc^m?S;c$R_Hj%RD8 zvH;LMEfXeVBS{_zhB+}(7on!Y@^Fjmhs(2)J$ES`-^(3jBQFr1+JPl|>0wLPbM_k> zCS9G?HRrgUMks{ow0$7L7Ff0Z_PQoSL0dX2J~jB>#T+34Rz5#X>M?a zauDAf<%ZMhP8sqXKA4GD)d8P98Y*>jn@k~tXqTChJso(nPbG!D_!k}PX}6*TLPBSh zdQsu^7br&+P8>_;TFal&^Z)DB_MEgj+UOh}EMr6HNz7V=z6n&)b!}$iAu>z8Uo_Zs zuy7u7OxJ%=pHw%FZ7r^>qFXdz=fr(%=6?yf27>d2{g`O@^PCLVKZ>&De`-s9v4vf~ z?BD`9k#hRRv7SoPGTyRmI6K=BKB~Ixm)h@eqOgz7f*Fke_@WE)y6=f>=X5N?%s&gHBxT42JdRl&| zx^f}VQ-lDe7a{jMtq+Ek($V;8`=Se%BWe{hj81Kn@z&<_%aj{OVo7G)*KR!wNmKh;jcSplz+kBEl2V@S3?r-}BBKN8y!)=M zxIe$zA!vS+>Ey;GLlRS>?Hf3aW*>p1DFn*BRt=%94`=q6 znPJ~*5gssE^N}yro8s80ovg6PA4@)qO{x^1-htbWIS?C!E+%w^>N zP@A8Wnv-7mvAT?9+ll|fb-?sZ;L$N7T#$23U{TKLU{+C%8a_2U3fAbafxH@`)xDxz zGb)sgj%{vMP{}~K?Vh5Erj-4t{kHLnwCSOAygHPd6>T4^R-;%#ha-I~qn%4e=zEG3 z%PdEQwT18S6U?9dVN?9)C(vHrBA?ISod&tf09?Q^-F#x;r@U@fyL^^G^q6;4P|N0u zL4FE=vE+cN$s53Gh^j>}n243G<22`J~&9#?fe?xW-4v%3FR^=4~;wf zZdyJ&;>n$Meh*U;b%Qh80^)u_9C;Xj9^hK6;xIpe$K0^XtF@%%lNV7TrfFJ)b*ROw zLqr#j zPvi8%gDbg#yr;{7Fsr@HR-q;hY_?BdpLhzPIq~Fo&2V#8%-H%W^zO`!=&Skf>fEGaZfEs-jkoBB@1EvJLqiBn%&RPlNT_`i)o-x3-WSPO-)zezN=yCTTv^E%uiLIve+ zhP^u0@z6-}k}E~_Zd4Fz)pYg1?W$=?GHq$MVfnhvE5b}B0cTUjKDXvGMC~t++3O;? zOFF>Vl>1K>Wy57cydZ(JQjSi{RG^+Ckxn%5)wS5yz`m%r6TAM_1 zr1=v3sPv9JDp0=*ECv6A&pL(*rb_Puet+lfZwmpaDNRR^0ssr4e?Rotc2FZ~bSIzQ zAt0JTgvUR_mOo6_DngbZdXGSCKXjh}Q3f?1x&d0?GQvavWyWwqLVbpig!YrT?9MR` z?3=Y;5HpX!%sdi~#@xSXiqVZ@?4TinYSy6vucw(O_*1zlt<(j_OSFqDe?izz@FG~G zHmiEG7^g#5BtHPp0?8@@(OQX>lg;6Cn4b3=eCV`dh_M}$WMaPXQ=9+3p5kJ7q+#tT zFQKhTh1g#Z-rTl)QPB+5K9rrExlJn8VFB$|rpU-K?JxY+oo;yvyhDxRcpJf;|&mzB`@hl_9!0#-?BD;jzn=-$$Xq zKlaMPV?u0^f&Lf7#hb;lP~Q7ug;1!0EvBckv8%SfKJYOU@l$XWl@8XY&69sHxFRmy z*AnN~=xlO$TT}mmEBmLe?tBT}M%U6o$}+e(^i2sy5n$4Pj(^bxwA4{f>H(-oT_o<3 z07OD;%SABT6v@sW^rD!fZTc{6j=tSe3pG{6v}>(bR9hsa*)`}26@>8)sHq1jJVj01 z*%2VSabKQmF8i!kFq=J}{m{KJCtCS7ilWxEA-&Jamy7!sgdn1*_VNz_urvnCdQJv- zmhR;BHVey!t=w~&i$YG`^ZT~DPgj66>D8osI%6H45xG3Y2j6l&F%6uY88dqa>U*Gp zCni74j%H3y6_dbnrX)#L`ARToWH6{%b0>qSyd3S*ZwKST5s^f6rSHY6lNiVi=Fr$B z>vaBs!NfPKzaYyV4Swd}$^-bFg?isc{s_}=H$}Bgtb@KK-yw+U_Q*1%7xPHFqrF+E zG3^7n>!nN*@%Faq?oNhu^H7-FGst65rO4Y%9zc$n1dxMECKn#XfSpPi8;HB56YNd* z7R+u^=z(3~CCb3=Ak=0CZID+abQ2$IY-TA#nb*>EXpl_ZdC|G`UREhJ+sy?p` zgZu$ViI)&YlCK1hmt{QIhN>tzmAY4P~MIt&cC$+;!$jpild=-krTPjh+K zHze)zM3p+LY?KPtv^Hp8*iU{L-GT1z#*+jswWTR0L)08_b{YEeTi7sdK65vDupUVl zS9T@HZ^vthYPrS15NF;#pOgQyqsc+bxzy?&E27)YB==3?Tw3S5#AsuocKYSh9nB&z4giUy+xdoD8Nn0y#@v zvf>mIW9-vD9P@5Wp~p@bAyVm>yCl4N;3Tx6SW;}%#C=&c&}wcYR;f86qS>aB`0YPd z(+G+q!Ro)%9{)Y;3-EZ5)=Dioz^{}}_XGYeZ9YF^c6;^s;d+)hce1j_@=I5Hr^_%6*^6bzSBEP7+ z>%J1gH)`S!Ag>3Vlskys{`>0@Mfo((-Xmawj+8*@lG8Q9o|cDnfiLlUbe|poR{0WN zRtAsl&WNq&&H0M_Vlt;mbLa>lqWvrP$H=D`4ohyo)|AR~%^gVANz2KyEG)~J*1JNY z%zps~0dne)o#nl(K}(nKGg-gY`QXY+v8UGWnFVQTk0Nn_Yg+9!ZZ};D51AqY1HL#` z_@?g=75vs{e?b~{r| z7J-(%yk?0@4u%DA+3g&~41=n$chv}{==#D|HF@`3>tO=EB-Zi12 zNl0d|-P{FeKh9(?#FZ4s9|vFPu`Snvu~^&!y<$imP&kE4PO; z5<6!qn}+CUyS6clr5<&x&GlE@Q>x2(FS@hP+=_=j{ zg~FjMj#y8{L$>d`b3r>*j;BGe2pM))+WeiR_vL8&GlaY?cd`S@q|duLq_aG1kMi%& z=OVrK8HYycPFlvJKECw|8O}^ zRcLxYM5b|sZRmv<_md0--Sl;P+zTvZDg1qVG&h7F>6=F@2aH;`WI=I4m1@7$plr6!L$(ji$OR~ja z;%Be@We+`>T7I_=lf(k=z<2ft%F1NjDQ2o5ol#>JroKt{Dr#}>IPXQ$&w8yADi@Z~J+jqH$C6UI&-6{PFvhA&Mz`hbdH~}3du0mAT-VPm zJ1jOWxD0Ji7wP^k>VA7dHSytyH1(m5kG%^ve@pyi|PhSH*rf|ja#OC@+)F!n5za_u6Z(HC_|H-rO_0)ZMxj+D1^2 zDkP^Q>jz7YP!JM7zy$|&s%O}E`FnSqhyJi1j*(^>-Q?_ywfYMdeM>8E&$ z{}+kU;sWj1Fec%3rugQct%Il^rU(pA#e#0@a5z1rf9Q52j<09c)Zx`3^Un$4?|l|o zT7GE*xea`wd9|aQ;wgotshM0}8@v}Qa0+tWBbdtS)3H{srkHCiH~ZWwEXXLODsOGi z1?q3M=Lxa!RRb&F@Sa}IuU&IfKheOLe4~isKvalw9o=q+pkHj!9gbev{MpB)s_U4A zEq|O=VUg)D(;DD)A#XGM`hv=+kEYeK-T{VF>aJ3rGcr)?DT^F#47hC`}f ze|Wao|6(;S_P&@QZv2HYdrn|r{uOGNBl$y&dBKI^rn6&QKENZE1)y&P-XfIOplR_V zpEnSVk=P^u6G|7xT`#^iloTcC)tx(+o2Rq=bMB3zdb{Ek3p+$Zt~q{Tj9kFNQbsd9 zcug)WYT95F*#D4xWH~G9X*tp>+c_e|=N-+oF4QEN=Ps98Sd#5dX-IDyQ=L+o=}B*1 z8&gn({?+Q=?5>#KDL2RG`Dr23!m@6~o6biK^v3|s1C=ENz5)1?Lhv~bVPXA4L5ju9 z-Xqy(vJ0W!K4h&d|WA%*n?S?ZiTvkd5Scc#9 z_G2Ho3cGdu&!bTUATv$&{RNw0^UM(&ae*Hj=(DTf+Q@pfP4C!%2RcO$2&{o)Pp|nv zqk3o41_rVYh4K5FZv=uZHo7CoB4yMyF&wodSj86RUp%?_Uap)BE*!OnpB4tKmcU{d zaC$b?L|7QB{J@%tmM8^Q%VkZB*b3V*PQ=aZj$ZGeQ$~ms$J*C{PkK&E$xbKm$ zFyc0Jxy5Zz*CeLoE6%3S&s)E3HPR}9yfeVlKj#z8VRv}bDP0*SwiK-`u>^MeskWfC zMQZfCFjuG6=V>3(D?Z?t`Wj|h&!r%cmY_jWwdEDoFojsKDRq83c+6=X{%J!+?>4ho zFI}E^VX^p^8q3{CFaM(RRarCeEjIuk!L8^k4M{WlOA%4GP* zNxpSjnxaDTtn|?uiw&mkh%quLI0Q4DEgtx8pcE*d0o4CvQWJ!3)qePMLCFX~zhm>I zTyCC3dA%7Wzs2-P!y^EvA1o-ql+Sx#TjiC0^p^`|>*06dX72o&r=sL6i$!9&l4o5v z6~*pE1HXB?wn{m_hQes#_#gfWEa zp%w6`HLBLOnY4>7)J0K?2nyP0hmePC#WKZ=F)7KJw%+S`T)}0KofrMXe7!_3Khthw zA#C?oh)hcAoEBk|_<_`$E}e@<8^ky7M$$3VH2{mEmS@Swx_hiDa@&g9HN}UUcRA}0 zJTV`T8p_7G1F~1aPJ6mb}>8bMt&^k#KZ)iO4o>d`)fc z85DsL!(-HX684)I0`0;69@Jd|zd+dIqF-@gf5Emnn|1-JIJ-a{q!gOe^(7}`5PB`B zFTfD_X__puw^bu;o(56TGHONN)p?NgyiA({te<{JJE-bNylWwBsfRWora&Ar2D5DS@{=#OFkKtdf9h1q z!##!U6+<(#Knwex&2lTnLay6_W#D9uwG^?;B>B2QkuL2zw`jYOT$+NH)`xo7H^i#z zxGyu{iTob{yJI6=wN;3mt{N`yqO9F0-UWk=;J2AGce8`uyFlH4nlG@MUGbNrmXsqi zq~1X{i?>xP4Zlif`@WIszJIs0U%wz=Gqt~Mf;Y(>N3AAGenE`&;G19Q;CJ3_w604~ zzGE$U>*%YuME(aAf=G3NJL`n^2;a%4G|H9%R5?9Bhs-?x=+33CEXkI zZ0*D6rCBqp#i`|SQA9e`bkx@HnhElu|VK1UFh9P%}+qG9*WuMgu; zf&6kW?cGhfc?FT*^2KR{Cc==JpZF^Jbq@dXe4=NkZhgTf0M!U z2D5O%M+lREK7L=KgfHl1*0q_>PsEWaOgq*aure9AbIXW1GW=X|hS6A+@RAA_pgi>y z&n?O@eAJ6sw5wb6smwdB%cM%9Td)HEqe$nYh>&Ug5>vMiaxM3Yf86ORjpOj1F)?&g z^cPX~s~r}vZ1Sic;nzVGH5}Q7m9Y&_DlhcYWvp#Bi3+)doMKe#*eFp5XfNPw_;Wn6 zqo-lzWu)*8zJ)XrX-oyxd;&>PfsbZrmTsw3?Qs8%{YcMUfvfzUaeQe*qAYyD+?~pU z-<2E;AJ03;_3Y4mQQ)g2Jq`$^Vbdt{Jyw-DlYYjvAmc7QBvj)t6Qxs*^GLn>Zcdb- z@@WQ|DzMJ4?HkxE!_rry2a_%`E?d9c+lwBE1Sxh@Dv=vC6yG zb`ns{@{2rT5P93rAG&L7w=JZXD@cjxBIq5EEH+5?M|vszWb`e_Oa_!QCiK>)=~^L0w{KKHS#p7pH5q)q$Q7E?M>6uijltT!C#Q!7aUC$Hipg z%FhX~F#&BG`v_+lW;QZ7p!Dt=jT+8>+izF-rNF?x)pXBmCd4kDrLp3{lC?P;P&YF+ zYpxpJ@$4w~x}KYMa1%qmu^k?yp!w7vv54284AQ@&?MKIA6xt3 zHNyi##q|&wOkkm7>()J&CMN#Dy?Mdx0*&?#y-}5)q44AsYX!jLY_-YuW&RU@^*~)5 z#t7uz!S5f4K(~tt-SECxu#MgjYBII^K2S}0=b&4t9#UjD?ko6A0t3+}a!Kr6q)an2 zfef;Z+;$0v82T@mxAOA>Wbvaw^{96BGYzI@3eLbWeEn*lHRd9Z5OWO)a@wZ9cV4J4 zHXH1KOffZ-tPO@@byVJ8R)ZSDQ$VI;be}773%!XZTNODm>(vgo-|oTjgCoKH=ZQkX z`<@7%B4HBkL->SvlSufB_J)_hJplmET|32gkqRvi4gsJC zxaS_I=j9&{BaFgfkY4Ul>`K{cAE<><_M;;kTOf@E`r|}!v?{TTe(?v(NW1()&a!4v3LU( zF@xLYH{7!oNQ<`>UIO1fbAHr{ZN#9l#?0W|TQ8b?js;6QuSF1SLK4CuX7h$)={mJr ziz;3n@KZ(lj~j{=O9ushMrsN8fP?4g40>FhYUtXno9bZ|jKtK^*l*_TDTY=cRtKJyBP%qNKV2@!dFJb!rG+ntMo+#%YwF8Iya6V{nbW-sJ2;0u z6aRyKG&KD~y^WG(in4xI@M8F?6igbfs)A89wG32s@ytpeH(xZ^QxJ<^Dy0cFxPSOj z;DWovZJm>Vu6Ah(ix^36gF9UY(u?$O)m1A7`gPh;S3-wlUaRMba^6$oio$SWo*AJ_ zSc-2*I{`Rb)c?}4_b_l_KOh*$!C)U@FnMtKc4|^{BsnqHdWpgH77;s5Pb)1wf1$kT za+!U8+-7N(0)D`gVXbDE@1U`y&}RtPuNdVd2l4eZ)ZMHCV`*`@MUEXX2e+846O`%& zY8v`m&iw**KMSK-B^$}O*On1?@~_!OrInQgw8-gkSH8H#p?{#8JB5M%=2o5DKz~o4DB4Zoa*BjGju3`)66QIl-w@@) z5(!@%3GMy?GU34 zH|R|O;2e<*L((oL<*zMPdZRDFJlMgOexW{~E)#2nn0mi~>r(2#%2IFY zzCO(U=*G@g)voq)pDpXJ&3F&x}g~2HCF9iXbD+A$P8P8(*W;c1*1~CP!#Z9j^ z!_|PUtT4{3ScsCRbCtEd*Qt0nsxTydCSYW+0^!CLXM;l@PIROVc0K3F8Mj5`ei`_n z930%QauA5QkhSpD1ZCONckyd(BJ9l)B0(mlrlyS7MAMmR)!>Woh@XW}8HdzpG+n3LV+nh74d6GkoyH(ViHCc;fK#lK3p*ObPp8BC96lb|Q znQy$InXbsN&>->Z8{xRimCJ7{;HoEHuZ6k%5dHBk5;6;n6%RMs@BzNmd!<>hHA zm-E~&;MLS9_@mn3oj7WN_PLs7=TEz8%-KVlNE$wc=KW9lKqGA_Jg7Satp_$wSnuB* zd!(c)+P12m%k7n$r`?c(b9;@9^y;{uS>EcX5oSY5{cFWmFXj35+}I5#5n1-Bdi?~& z-UW_o&WlcyrMiNW{qpMSH5Zv8``r)dGLL~OoOpqNQr?hzbYBOuP z&u83K3)wQc3ZlCE%BI+4AV^T60eIm3r^a0%P)V=>1xL9g!3y|NBA`V<*ASs_VF9-=;1CJ}|9JfUv|qTY zMZ253S%S_h^OQFjH%fBzcE+N1roPG0A^*V~J=AEy$J`qB{LGk;8^g}Js_jmSq$ON+ z8)OGj!K#I7xW&MGPFef>Ndawfg-iDJ+kaMBilj`(=Q{k->bG`V%#qo5jYT4uX6BsT z=kuE;!tr+phQxAp%*ChIYM88ZM0v6`)o#`Lv5>!X2=NX67Mx_3P|dd1F5HT%@y|#b z6l!tO-*Y#psmHRU*GCo){K?Zm#!E=Hv(W?n_lFp6m^8V4iZGM*i7 zCN|#Ca%KxG(pHlpnv-TU#1)yW&cK$@&&g-!8UXm|n$+x#P3J~>tM`rVr>xXQLkw$~ zB$nznVg#Lf`Knb8GxjBXK`^ATmMLi9YqxS7~E`gqcPM$KRKsQ*? zhJBsav6?NCu2N5f4(MYBW+uJ{(+3#kYmLDj#}2Q{-)@{?P5QFRr0$8$XIh-Lt9<@` zy_mzMpkip}XO%^>#R*bFw0|_Fz^25Zev4sUU<6z2Ma`o*_{K(j)5OkzY%q|4=}klF zK&1A!jlMdwuUYyfGScI&;r;WA3UbP33o~SFoJIoN@tn~vjhLVXK}1sAfx4^yQ$?k@ z<$IeIPh3A$^pEtAx2+$0UU+s{6sTjmSs0J9HSh1Z2MZ$EO~Pe&ABtVnC?&5vqjoui z9{83-!kHNNhFZCv0yxo$)jdX7Q%q6!17>`?7H4Z-Y@=W~5`4g|Tk^QrQ&YLq{l_4$ zbZ#q}Q%%K?@A*Z=$mg4!S;-N4rnP!~n+|%Y1NWPa@W&Z`3*8nB?@ZRu)hDl zB#fa33yPe7w4;pLxnSTu11X*v>a{^f7vXc>)2~j(>Rp0m_;%q$XTiYRoDZ^=R5!6C zgVmz2W4%7m5dndC4}R}z{$pQVR@qlCwfmhm@E~>Mt&|PAX2)M`taqzCfj0+7zF@j9 zV{~rnp}k~iwq5bu!q!@_Ww)J2g;bea$noZm=JF0j6%Sn-c3@h9(WW;6vU%S$bWVXR z{oef8`(u+1DnMY}K}z;aZ*xYgt9_V?!5_^{=&*Rdx88X4;@Fy?ju2O?1f;MmVGabA z>47OYu_u1_e`}DTF8O%DcUB4WvtXS#H1UqTZ@5BQId5I8^IUqb=^)L!rh`fHGvl>N zUxy@4fH6RB_gDu@T@_1Hpy2|}u`@An>JM~-7zw+n_%%nH!Hv^oz6?nvomXK z#AsqegA?k>%{Acg0@0vuFb1tJ}oJSiOxi2oh_R++tPsYU+_y4jH)?k;1bh z$$^<@`r*;>eX!4J;RC<6TK4pWUX10}Jqj<}UYL_)_0onC@j-SZsU zc}iCOR(}pqJy?EhY&qk8rJj$b<$m8q3m z_RvX6KoFv3-z9Q2??TcKrr#*!`QtC(OsjUt?p3I{dYhwzf{Z%($(E(lq9;AkE`x84 zS=!kGy2lQbS97Q$ERa~4C7v-(p)1;fRo>b_d@NW=uIshBMc-k}eb=>251m7U(U1`C z7-_wTMRXI#H(7z1DbBl`Kc1Vb1g11(8waNNR(o&jH_ax%ofLFsGm+Ni1O2h+>JY<) zYzwFL-GZhDL4$o05DBkbz6rrQk#8ZW11Zz#KtSW+$*?UNP>-wldVi*SAx znT%`2dxUv?naHb^`=eYqZN2%igIH;3Q-7L>s}iF~{@hm*rlM!GU%LA$7sJDM>4Na0 zs_Rzjc?V_bwRQp(wz(V6``b;``J(s(={U+Bukv1dTx_!}?xe)wG-y?5GQ~f{6!~YB zu^wHI^K4Sb5aa%B1M=e9Q2!#9kg+-YeXBy&;a44}dbE9=4X{1lPMI0rr!2+#BOUR* zhHed|gS>+*Q&bOl(+P(PEb;X%@X1*KD3-o%BhgRXX6;t1WxuP`s8H)i68ZxdE29sKBi3mmk8HeI`sei$QHay%#M zFRQf|a@mJ-#3df<^7(z{{nz5@1Ueh{eD13DXkq5LwbcuZ!({HC4i1 zqD^+m_6#wLE(*Zr1!eh4>6JVUK0iw(KjRgWjg_umZr*h-DB4lkNu#%y!#;#}yrPDB znu9Ja`G-mWwfuzRbu4BA<9$X?n(Gm{mILiA!WsGoY7PqlT-++{z1eUsJ(7+WWz~|^ zPm_^ijo3P%O)q@gM1zh8L)JSs?<%a(0|;Shs3ts}tk;#+9g3#nxGHlD!CKGe@Xp`Dj#VUyA8qu0On zEuvan7W9-sO?ML1d4LfN`t%d19KPhK{k!Z5YjvN3@5BvQd3r<|B-nXVMR+ms@R8w} zglGLNMv(iVj;eOkCx(LS(Y&>p;Y&eUJB9I-bdSlSC^5gV_1m{or)Wh;GyDQ1N%>_o z+)blBbcHWj)PC`0J$%Ca>q6?}u53|7K%@nBh_3z zyg2FQEtr_zUVM@6;!yF%DQ9}LoN8r&jInf6#j`7qmb+IzBT89NQuKtSA8-uPSQ8F6!+k_Yk0Sy3ZbXX4L178uuOQaF?yHjXv6*UBAF0`=VzlB>0|*>!_Cz zm9%6V2M*F*i#A0%6`a_vbBx)M0xO^`%3krzqUGqX0v>|YF)~^^nLkG>ou`?wf)iY* zywv^28NC)8`aA}E0c#5$s)l)3F+PV^+AqI&bh{jQmC-sp3Mx{(qOHV|GVX}eHs6d? zWvlL=EbXfZj+U|wznQ+^^9LX7EP&qr^FcVEsP=BK^7cGjbCMRLh94X35*=bM-G1I- zu*m8D$VrG_YpJ4@R_j;pl%MyiFQ+!h_mGiS^VPSFhy5CV#%!k#16Zf$wAAoof zkbzq;7_Dp4SYnd#jT|<&kXK@V!4ylM_hQHWCX&UTr%k-u=qYP!k&}q;qklk&{`qm@$p+ zfz_HWQQ?mV6iPxesphZEdB}*Znhw#I^T?c;a9}-5^Px6+Pa_2!1YgWA3L2|g388hp z8f!Bai#)cz#V>Vdarze0TEM$vn$qn5cOe&5nc~gHskl~bX zkL}=Ok(A$HS*vMvqt5MQ9;s-cpG^0Fa5NF-pqKwoLs9UIZry}#h~*;%S62bg=@XLX zK2kxC+zV8EW9iFzTQ~7{nsjXHej1T>8?2De&h}zhnvxTiEw#ZC8Sq^`k-Sm5xNvPL z3yoFsMW6ZDA||Rdu;zA8Sw)e2iMP3^{|i%f{shaw1XEf8yC|?MIIvrwGKI5dlmb`n zR$g7PmdsfADF$oQNDt5%us6((_rvWATW2XzJa0XZS1B13Q`RlB+3f2q7~DHQakjop z>XKdxnQw^VaKwbcdhlfqtxl!W-f{O@l^VBl+k%6a!sc7-Ngtu%N{+WhzMOEe4@O2h%v=eGVq#g=rGGv z^;6y(4bU^pLG|rx;2frr|6>Qm$14R&uC=v=k*0{0!5Q z{B&?blCifY|4_LmsU_TzD@~N??n0C4tZ@gq!uCMeHeEaglAh*SN``Y)>-b<%y{SS! zJyX{q6>Hw1zJ>S+#lhB&*o1)Q#*gxJgfj_fsHy@bRj8f=TXz2tQf(n_-a&^MDELnN zb6@9QIy`4_giSu?G_as|7FyFQTVst}KGm?bbqZ1CFf#yWuVHiuOH&3M07zDqAZh_9 zQY(ku;!N_DdhwqAWzj!9lUz$)50bAj%vA}yDBLuk1i6$tR)MDROP*5}-eX8v2{-y} z4JGyp{y1f@m!rItuX>bDYb*NsCXY=^7+xmc2B$zShtWyryjyc+`Rxc+j+_C95-#+$ z%2jVS<5J++>qww*7)b!IN^W~J5MZUHK*&(VuA9)oarYa)z?Xk4{NEx|xqVMw19-VWU6T4(nT&;?gBoAg61 zlwAGk?#%E>7D zPhQ?S?V(y7I$Gin1KL#aPZlQN3^2++p=b6RjUr;nB6x$I+`#%O#SZ;%Sq!=O{(j7> zxG-gXu;`zSE7AX``tfmTPMq*^!EX5=AINx;q5V`mgw~JsNf!m{!^C@#+r<6%TwSEP z@I~ECO|+@PW5*Q*(>SDcYma$sT)ymm56Vccs}Un5v%t9La$+{YzUMb!Ty*~XiFB0{ z-&!Jk=n~}Ml38g@E!+WKJ)S0!^!>)>JJ>~Iv9L1jxdu60Xq6lM7O0L8k>HSdp_~km zExkS|%_MUC4c<4HKtXY%lWAZ7Nn>B*gqx{V~+#)5*cxrj8pijPI z-3+n3)gjkHe0xp#nb6p>nN?<_^tgj%v1+d_1IvWwV~eW+O)|6@U2ah(rP)aB{ckHa zO{L?OJD#MZ0b3In`*x+|erYq(^)fAJu_fq@qr6cf+@j%~9 zWh`=~^2tnfovr?BeV*xZPF?&th|2@`ia@TO$Z`Dex3)#y(6UfPpEsl30=z1EeIL1O znKG*lhK-yl1i%->Vidaz+e<@{E<2|J)&K8 zv$xF z7~=RJ+UI2U@2G@)%ZFQkgk^%qoJ}%jc_gbGt^z!k8*jpBvQvvAs^za}G*R=Aldf_? zhRGx)G0LL6Ex6SWb(jX;fzC&>59@{Aam^J9CkHgIr$=#8z{px@>6+r_S(AajdHd8T;)!Il9XZt=}*s+jf9UU?o_yQJ@UC zE%gME41x`cGeYxnCa1uur$k?OC1N1X>|D zmS}tW*ru@Gp{@w&3yOit#W$GrmQ*c*JbgvwG5fXU4Nm&tFKz3 zI0c9r!vSyC6I9Cr> zx*%?umAa&=X+5`QBTaPy{(710olr3br5Dm|+AOm7!;#v5NY>O))#`r@S5>t1t>rSj z8l!(o<9h|Cui1Khu80?t2A3To7cMkp7aqdYiJCVSbZrz4js3v&e-FEhzn9-34LpFa z5Tx+_w<%g1jAJ}r@xUfH#c3TF&OMb-tVP$u3UjOPw?Q+gVe6)6^@xN z*A~V&b`ERcRc5w9A6l+z2Zk$%6$}=-c|9j-tdwD=DQIDcm0Tet>wrW;X#68xpU6*o zS!gI>h+0(Gag39*avBz<6_jc1>sWfdq`2ViEI;C*`fj_(wK4fKOdSTM;Q-Bmx`|}P z%Bzv_Z7dBAtNIIj)KAY~JUIgHSD~**r0}-L6^-*I*YG`FijrY2MWyXNGL&BOkQlo= zy%4JtYe3Awq-F>b3$vg1<&f=|>gyodJ2;_^x1v*AwJ5^jyi1Ml@RJG)IX9=}o_ zcAa30y?tzqP0<&rRL7=smkAw&2G9%vD*Y!P5wQob$CdU5vag2l2QUu$4*XMqn+o7S zYP>qit`IQd+Hgzc4f@tuOy!oFmtyk8JubPS1JbjbPA7XD*Fw;`T3h0wc8k?wz5vbe zmu4h@%6}AD`9Qq~83p(eK%E@?<;JCnm348(lI0U$lHU<9; zS^KX>L!M9Yk3On5j5}MF*u|ZsAf!dBR5s*N4##U=QC~{{iBZg zUmM`0OvwI#yTy(eTKGXH3->6lczKpmE|4P18{W3N(Pld2kVc@>N0Sj#lGHyJp#H6J z`%l_EA!h;h{qF~{9Az_Lv_h1_B~bN&gcD@J0z9mMo8J%Ph#{AE3xD2;jVCY7pm1Vl zd${WTaUw3J)rs}e;)0p#d5~?Pol}Be6*Dox{#_(POR0ZX(ebBiTl#SOt1F_DEl29IX3UDuhpftT9XyXMc9%3EW07UaKoO_ zndizuc9cbP7jU{`sLTj~U%Nc-b6$iKB*_@r;(OY0dLT*8ZHlQKT(=DzV+JnDp#1Gx zaXX+d(ivj$2yfF}(3j#$U^mwP^O&Cx6i~+iQw{nX2BSv(3W~`}V4pdUU9~pE3!QP> zE-%Q?chY5Xzalr@@iwFT>#5sn;ErJI3p@FAleuttBXg)D4Lw;?d8eXEv)YA5`$^>0<#rQ)UrqvJW4?+$b-@tq}e0 zUeliCtGdU$e^qndtoO?OV_!9wT5x6n#`BrDE(kluz;JB{!O+*j^2IB&f^JHrwM$x6 zxrp`#_R!3A%~}OmW=;=g1f&Ugmh)0na=O@D-cas0ACl7H!81mig9{m?9fH9HxMopw z51u7ZQ|ukyqJIEeYYVh@rwsEMt{DRU%LeuAH##H>UafVPy6Am zDUXiOX303R&4KbpS%dnHuC1KQDfR}cb&*hu)Wzvc9=i_DL5xxP-#ZgO6lo?IL8 zl1kO4RFD!b&Xyjj2N$TR1{T^mffUDp>m+nh`?fP4SqfcvhE)|hU@l9U62SP^r7T<( zvjI%v+zJ6uD$6y!jYTzlCKQHT*dxh>qx$h53)X*YG91;B|IlLj?-ZQ{Bjnfjf~6*u zM1)0YQk7F9?x5jJEvzy3g{ekq&e_X_-J6_Y1p4$tU>SyB!2zNUP63RHi4w5HrJd{o!@(=8rjDFotX_Rp)tV_6AiW?%U(o>*9J+ZOKLYhjJi)&tGr^1<5 zQf4o{3n|@b7Pcsj95LkYgT7HmU{Q3%Or?qGAU&klPqV5hWLhmxYau^*_sr|9a7ipe zBkclrmT%?6ff%O3>_3t8z0i0)(aCX7#=N*hWtZtAgofoee?QV~ItiHIAT;hORB^Dc zJ#erbS>*ZP#)Ao&wl+K+4Dfj*z~{+YO0o>cWX0*yknjhvyF@hu=uvmdi*Rq}tTi5! z-c;m_h|+<(?TuAZW+1!FoE;h(HXC-_`>(cw?4@QNo;x`LvKPADNya&ER*tVj)%t)wBkVUoay3u+xB< z1UvTh3eX7#p@njf!<+-cnR8U03d z6vZ0JwyOT+3J&t%!%#g{^! zai;eS z?Ih^+Scz?5P})^4NHc+8u?Ur$pv*m5LL~M>iSUKM1p*U{tkx(l z8cmo_%Q-)(g!3K99WG9oPt`W7KaO0yuIWCp&cUih$e3oK#BV~==%8O7je%ms8!)uIGN`3rxnbO4&Q2UST?-$cP%5Y4**O zn^O6?pJ1(kX$P)SB1+@Lb4j(oi+p)x>vA0j~oJQREagGstkuueEyN4bYI`_!>YJf@r0@Kc& z==MQ-d(YXBT3z|)-Xd_Qbz5PGF=kmCgWY(xx?V-vY==pxlCx5JKHVyo?F>FetM?RRz-3|1@bOA`;KMQ)Li&8R2u0@vK_CSPYOq zFXDTg%g2wGo9)z3nK^7%V09$hENhhO{R`$Wt0UAATYv}kBPj8-iBCk503H*FLze(% z1L4AdLpJH2{ey?xGGmxNpIx4o z=+>O9q`qMtEm;Nhk6kL3*kNMA`#Wa-*Fjb3gM-sQyV0O+Y{40(H%Jk5fscJbD5)hMu&qtM+L1vrk98=u`?fPDmo>G*d*GEJEl7kNk0%ERs6v{~M^291E6X7Z)9${pbS4bv*nkdPg3fg- z&`ovJ%CTQBX`yAVYN#phaST@U0YL%%0ioq@R!e6#kC_wDs7AIPVDuIZw)xcWFBA;Q z4TKq9x1?!$07E2#J3b(64ii3sfxUz*I-uR4jL6`)c=M!Y4nMU%r>2?;0{xtvxwY6? z++l3Mv7;tRm7TriTPjvT_9&+%kx^z?t7%7F-^KI+Mcy=kk`yXAEGD<3GMt$6-fo_0 z_l#)d<)kuLrbTREP)Msg&nUXoT_tgZ!V-lI_PFRZ3(&QK@u^;N@KFN ze?r3i2ge0E|Swf{Z9Z z;Rp3E1Y?hfm;AzP!a83#Gwwbz_$=_PtM$9it|ouHfs6ravm@pT-md=E&)aRY`3}J% zI#Sd~TZbI6CL?(gzBgUpdNhSM0ML)3Rb}rfpEqxEeETBO#|hCds?ORs`t8`559!?u z`3TUCo#@*aH=FJW^maWbJ+mg3zEd4#oQIf8tyq*B`n<0Z{BdIn1(sGQc)oyi`L`4B zodN=>p1{g6O@UK~zrH_OprsTxJxMMb9>tL>xG2e5ILUqUp1R1pN9+U zlvXM{HH{xrAdwzHCY*<$51 zm9)ib(T^%}0Ri)2E8Dqeo-QIb!fJpPpt`)r0zq3vtWkiiNDOwha*qM4VWLFSpA zbe?sRw69A%$(NpbcOgfW8H$CNKvSk@F(vWulQno#(m-s$6vN52=S|eo95mYozA@pg zu4XzSQMo;b>j%uOz4PMkoSG-xkqbrgVyQ06>gfju0rgs3o8+ZYjvhCzoXYK&3e<1DosoWu)_FGS8V$n{Mg{zYOgIYy1ofWoxTDeQ!>N zCR@4X>7xzfZR$@OeDB^GK9t-PNqh61CIu&CW&1j3J2kKxt)#9Yt|N^yO+?IzVl)rq zZEDd?-&%3+=dogog9oG{K_?XVad9Y@y~)9-Vv}-Zr99VP9RU(2DzHRk(3-JIwN(hw|>+wyu~bM>|$Y(7G&bf8}{y;GRR#V>2C|NwDeT_xCgi z97`urPaE;Ye)3t`mJ=n)*La8b~4HKd00U%phkd(>nP&Da&ue$)l< zMW;f?{^it8OS4w@CsD~b5w%Vwlg`y!`w3rDunH)?MD;en>!LpMr<|E-5H8vpDlL)%0dKfQ+Cs`QyZOJ?oyl z_71Wgr&{~vY5IXSo=?e_E43p~Z7cy_F%tvT%UMNZJr?kEgoxB-t=D#AH+HX}#(0Ie|ebo60N{&#`RC=A_b|E`7CE^xrERzKk7;?UmE5}};vv6bx z2ePT5SxlWv9JTd8#JWMuJ%1)K6>p`t)9})0cE={tQqjE_$LltOA~on{Fh4nml5hQ& zs}J)ep+bf_-Uz4#AY97?jsbA|IYM~;Ip>5>R3H%i_XP6@MIA?GZaaqN+ZUXhskYsv z!^y92wec4@4wUzcxFsCCp0mS`6TS=g#iAqL!apXUf3vg*ZbL+3!`W`Lq??Ks_X6xa z?v+idtL22tonwfWS&^YARK6jlj#vxV`VjIes>|ymRq!{2%fpP}Ifp{N067;y=Do7oq_X@;!mH-W0`DYv>xrs{pK)+^(@tm25LtE_H@LBkXuG+7^yjeCP3GeQ#b?a#RWkx zp7G=lo<#6K*m05u8)wii^s_uF#@qh|vk;PY0zmO>h<;>;Qcsv6ck1&vwg*Jjmj?un z6*yHcEzT8%_pm55YaW#rcI_JP$R6=qa)oQZmh;7I7;N|A18D44;ver5*SP%VDq7eyG}&Zq@d{oQfycATg;;wVHRg;f zjkM!#b_h@4suw=b0lQXu^f`fM5uju${L%0GWQsw~rhQP}J-AiLBgAW zNp!>)A_g{B&_84TgiNek<{t9m=DPL8JhG-qB=A&~WzWuDm8Y8oAX;8VS4IJ*SAJyV1R~HSo9Pu^I zoo+T^UsZmFEiq44sw}?Cz5F9XB%LXCyQa?$YW5|GsNKIUd5Dn3WrAxozyqO|`oBx* zXDlvk-Cst=oAt*tD0seY9Rgm)JueS}yhz78FCYdmMeH(D(wDc4_hJI5pF?kKwE7@+ zjahtGB#jNzNVX%v&=?XLX@PoSQ+Tf)#dGz!c@mMbKwyExuFUrG9L=0-y-u zQm7A5F>(UNZ1c|O59d>6207&BKaXW*j6zzJ9eP*f*fwsTe=eed$9>o>udgNPU(%m) zsz=2MX_Y-(i5QK8hd4WbT_^&LZUOxaD-#RYnXzFnjch9dy**MJ@XByt_Cx6OAL0*U zl+ZoicXtyWc`O43jdgFhbgWxvG8+Ip9=$&%BhYAP8>^PQFMBqGTQ%{6Yn*m0IhA8d zTG#TLD^P4rk-o6bY;@f{I*vO>#4j+mL|w>iOrWS=^&S|JO2UX}8i7N84MNkpjtJrq zE8?`y>A)f|u%$R+K@jhIl1|e6m>V7m#(~I2*wY3;X+e7_y%<_dtOon^zh_;^&P|tmb9nwREd^k7JZkglJ zPvSb(5EI`$?6eo2mDAsql;<|L>XBGhVq>0Tfco$q8!eJE-A~%TkpIiCAV@VLx2Ms4 zIap_GZ`&oNCiYXKDL%)mx7LtNW=SpKEYm7p2m$imM<-%1KnWdaOcD|5BR_Rwl?x&R znxsN!0r0<32CX$P3qAWU5c zJg(zWuNQ)BrVqYN6sn%5yIa)Bo-I3~u+7o1>@|@dt*X#sABz@jF6WONY6S@T2QF4{ zszKHx-~=P`tpL(acl7@NxX$AH`DhSKuuKIf71Z58htq$Ai+|_oql1({%u0d4dXyY1 zD{B61_uZYFdPe;^;{h~+`WY`~HQ!+MVtz*IE{%JnPA`^dh}k1+ug*D!&z7jo^mn20 z^}7kYC(D}GLa3bL?tBIByHPB9WM|TGWt@!ozC))ji1{N21<~P9Q9Nsip2>lKqRaku z@1l~Lo`kPk=i8xphrwJD%s2G;LM?6;3YBj+ZLW*SA5bW(1_Xuy9e*%Tj**sTCn;$$ zM8zBJ6G&H2VWx>7=z;nICND{x-;@7mSz)eIk%4?3Ab+>-;ebG;?JKm&aAXJMDzew+ zgM0vf3Q;=g^n9kXHpRlL*wmFUZL5v>272dy9QFU zS?V$Ht{KwgVk3vp*4MAGhMcWuy=<6gc@;`m&@X88dK=I4aD{Jx>QJcc({mq4}B%6aLd)(89om0pQR~9m6a3QIeV5fbE8UqpqW%?JJn^;Fe zI8~G51Ywyl>?ru3j~K zUXCrZt|FsgcS-$>phLZ0Xfp%4`;a$|JzzgG;pF~Q>tKR%U#&i}%Q0JBb7^6W*3c%8 zp&!?5SygdSR(%)7eBG?$>21co{Ms* z6=Y6}qT5ioj;g*MSuHAe`DLTq5S~A9C?Vmd-Gsq14(ZiiDsxxugZqNBFY3#(W$3Q{ zvT9alidf}%#rO}`?!XT!_f=g!2ZmdW4_8z)6j_!WQ5O@7n62Y*85;F9lNZC0e{IN=~M$j{$_+zbREs0ho6F3H~B2+V?U*ky?JOG zsA>20qyB$kpAio@VwndTj3c@@DCPcH`u$zr5yp$)eS&+HS5nohg5(by~U zDhNt-hTfIlu>nH~kuF{7Ar$En2smOH`bdjF0HuYF^iD<*kuD^(&^sa2K_Ifzw4a*K`>D2239$&Ed>_UBL;ReM6pHU$`_KH2Ofg$*DydpgUR$?9J7B)ZR z?&99KAe0iQ5#@#%@*MsFUoh#2Q1qDy8dzJ*)h&^?EtOqMT7VS|Qk7Tqi?7$zP{rta z&*lZ2GuFZ|eT!k)I`8eJ)@yZ@eU!hVImzR$kDtyoi>9z;GFINApyhl@via9i&&?M) zD3yySe6e7#O6*el33;1G{YqZBuk37wD%lMhF3e8I_&z;N8GHMb;nwlE`?oRZxga~3 zuf=tY0B_VsWiu@>i0K8yqCf3MXC7}RPc`kSrja%fx@VFECikZLch{6Ya%VCnLZ#lM zKIX)nsw^vWdr(-C+JPro= z1P7Z8h#)9q;P%Tv&wN3zbl)!q0ed`O_!mhP9=gU(>*uB3_f=^krg6V54j~f54GjLN zqwt)_K4_XZiR?v6n_~Xr8R&HwRy*lVqt3AQCDQnyV9gIqLjG$baf|1|O5K0Bt5LL^>$lk!O|{!*M{K^Xyw`h%1%5DsxUk*e*5~!v?EPOLRePR1hcDIIVSzI7Yk~vP2I#njAH%F%mt7Wj_N|XT=*J(V} zc5)Ipd*8BrFh8Y@-S#LP+wl=lapyCP+gXhbunC^iL6#>bG6@pQ&J5lx3v1;~0sWrh z_a&6+`iw=`HW>;W7mA0j28Co4Z1n@*!4|)J^Sli5-9)57k)TZ9K4bs)**EDLGSg0E zSP8so|F&-Hdu@Usuv)qDsPfR9&~Wk*Mpoxq*vjMc#}tPDwR`NMcYfgM*sAf=&*2s%@0YvwPJ=31V7NZtO=)i}x-W9jbB~+(|A|m%^O&4X8}~#%y&C#bOMJ z$oFuDA}tXz%hw|FJ0qM$GQ$QQ8vP&kRavE!gQr-=f)L9K4+8yP%n$MW%Gb@eKy`oI>s)OtGr^X$S3pjd zuvmIhqo#i$aUK&u>gAj*5t_BDNuP6av}EXNyahm~w}H`$)Mu#HYe8IMCh1WME8X?`{~P5s1+^VTXe5@2nwoJ&;11O@@ihthid*Gtvm~dV5XOu{$F?D6Z~cb> zzm7GPxUv*MB{ZSW78YlpuOP_sSku*9l?T^|NK()NG;GIm^!T@0jPvr0Fs4MK_)|se$gK<>Ah2QOPn3yW<|RIL$!=*$4EQTDj7a zYZJi>6@l?gWhwNX($|Mn>;_rV&HD=b($Yq$QB9&(H&Z<`h!+K>x8%gP!fT^NzO&C}3$r`6R-P=5DG-La@@gKt$S=E!TVg*a zo9MvHWmT1%PbZ9QTF=T(FsJlU9=6maew(zIKf*CV!*K4`zd1E17YUNU>y&8iozq>w z(0^=@s<@_6Bn$t>bc`WpQ2C= zSen`$5jGZgPsCmMhHEi3t!H6CG(g*CBTr)zwZhykunmC`x=3T@zGmG|h*%6oREYhq z9?K&zCoYmCjTWYfUxlJlZR-f<=nQqp*S(uMJ)Y}o$tjsi#yJ)XxDI8T*G!o0;NJRm zoH0to8l{Nv7R%w}gH%V>WQj6&_MBj4VA_$>gn}fR?Fu_k>(gBTk88Rlr@v;7DKN`nvN*`4{%4rx{eQqzd^7SXXA)GJqstT1L0kpSsw+2(~tf&v5itv z7{koHi(n~9I}c9&dEze6m}jsV!^s47CQ+f6(X&xPx*4T9l)fiB8Xig?df-_xuwYoE zMwW8`34~ngbapymsh{_w*fT+@x+YegNKgm^0y!-HWlbqx0J4xxHt7@@})Q_Y0Uv7=F33M^}If}K{mV*kL2!{ z9(7+FWxp5W(jXQl6*Yv8-j@SI@0Wz{30S_jmHK;&tmFa}f5k?^P|m>umO$1T?Gm0t zJFynF7}`1qe??nKK)z4(lYUL#Dv)&7PT>P_ZVgd+1AcSmhJ`tmHJLYgGtaeZeVQki zAz(Z%&^DO8FZWK-1nMW``d1UmaN&Cz6DsY!Q+)r3lkN^Sojoo$^$tM!Am_G5b(%PL!wn_B7?5pFYfk)mT;3y`geEqe0!8rGR_; zfw5&!i0r-*ebSj3eOTTr_S82M4*S(P0jI)0tnrua_0h*FNFmC-GV%yRj5V>Nm%iiY zf$MJwU1?ra3c1)vvpm)3W*1!*uC7P*Cj_Xhnt5gz49URY^ObZ%=;Kl2dkq6QVxbEE z>T_HKhBR~ArJNzY=blQ0nd#R$Se;IS3p9x;;<9wU3VCWY`h4x5jz<5rXqbh`SZA)8 zB&5jW7A<%;wlg}BlFRe8JW>{S))xcNy~(&LRG(aLRyv0g%Y+bTi)bZ*;zfn&XUFOl zY`8yu?cKCo)bC~zA@5_AuUF8W6;>E|vn$!=Pz=lM9V3@sN-Z%l)mrP@m3~)V>W%W| z{|S*K1PZ70;|t$wFNq|3tmmhx>=y@JPBcATw`8CE+)ZWk)v&kzh2*A;kDk4AJ5Fv> zFS5Iv_l9PELcXQ1Kb2EA6wmS@Na`N0=!zX0;D~Lw%qS7jpu}&7H_q`dfTOA$PpBK= zxzy~pZ=y`)neDv~(jLOLvt$@z@)N3Zv|`OrZG19g-j`wtLGgkr5Nb`1uoASx$1Cd8 zvuSmW9CQ-4eEVK0LN&*H!Tr#UZ_+!{c5Y4w)-?Usu#V2k2yb=gAKN2r`|9`3?+|mD z3ve$Texpk&T%Ju-q`C*SnWr|N9_wySu9O+k(>hGgI@?j3tQ@WQF#z{9ono_s^lpRl z?f1=%zw0?YBE5_{6pD|Io18whx9qN@^gav_f=$I_pPgR{a$Kmvp4l%~4Y-OflZvoe zk>MH0>X9FJjcC*L+TY7ZuWOWs(_*_`(%cw9QWrlH12n&|^X`dOOr-}gm%cO@F?o0< zq9k|(k7e3+6BQ3C>eJyvw-fzC_!T?yrK`r%@q<#(g}@bTjFCnlaeDvz?wz%z&1aK` zg-Ha_+}jkV9P2yg=u@qOMAgy_C%QmlfHNw2v?x+%*pe01PEwMc$zAR;5$IItp*Wa^ zqm4}(1xYux*v~8Ta3GAU?m4Qt>54im5;4T4-R`Ui|eH$i?rFTeRxOAx0Eo zhNYYSA>5f?8CgX=tb;j5hhof4p;F<>+Vq|GMu_r!X}xB~Y^q=n)0F&}dpL$1Hnnnl zDCyoArH}Umof6$XyE_=Q)C$K%VKN3syLoO{xtSx9x@^9!?7jN|{Dz_@QYu@RgzvJL zb+H*emubKLh&4B7#QL?nXKV_iUMI{3`Y}&EWU$tS94YsOe)eGWS7>BKjQxtLMJ`y} z+no8LzsprGx1x4O_fa8;NM6;VE(s53@(D-}O`)4gMcBFV9`Iw>(kQ`kd2s;lLJ%y! zUM;7{oB7I%C}k0o)g-H^;XwZ>e6VUyq#$eX-QcJ4dqcA7qOvpN0ougaAzfYQoVSO% zV8eVX)I_mOVc0X~b(%(&qNT#C-r8fPKD_&wr3K125V!yx8I3#nx63zsa{RDQ9G&MV zVz?_?*~&q>B0jm$pTw#2Yd|)nC;OMX$8;H5*#zDIzn#01u4R;Iuf?#CDEIrdjyj=@ zKKM*XA$=^Gv6Cq(-AN)WJPl)|KNZtXSe#?)3~yB&mMha@z+#S0xLZf0XK@<;>ZPPz zx~=17Nw6C_C2~s56xb;NnJjH#bQgU6E;#PanO*Q@CPfLGiPK zWkRZXEy{|G$zRKxqccj2{Yo^8_gkJBAYH^^xjr2oE0rnL#|O-N4x^#An)n@8$@+Xs zm$8do>)YO%{=X>Ub_1v4lck6uQc%4l^VQPe{>sJKLIvf#kLJlyU6JlDHJn@n>LlWG zn$!%Nlsa`o;BRX{PnOY?=Hy_1i;Z)w(T zfNPWi(JPX3xUtfC97M|MgI!E?DnS4F*acyQz<#S4>|Jq;sKFoDI z@zD$BU~t~35wX}+VieSOPk!h2_H^m1=mQ@K|BdxPSmfNBO#JAc&U|49(feA#3|4T@ ze>F+@fuRW0#cjkkW-?>R1M164-0Ey2m$xyLWUNQh--N0-kl)A~k{4f&xa;Sv7Y67D zF>0Z|Y_Cm)|1or&pVTsF(5TBS!kq-S>lIT1$wB^+wQ6Q}!SgWy?-xc|t{>nifXEb@ zAK>4nULbexHRL|18inN5mFoN z5%MBGigC@)d1_as42)#k`VBtjdEw+%)Zd!HQv=7dfOT(Tqc(-+Ni2zcVCteY9k3?@AWAFplqwkpp}8A&wVik6S#5j(q#T)aeg5 z&7nIj4!fma`{27bm5kEr`)$4@Y4=~h{#j16bGd@+@thd!4v&FBMk#OU4O|p?qAN+` zW37da`^4#W1)di64(XN>J!1ssLuQll&fLcK76&HgQH0Z-+$ze;@pn1WB;MichDPy~ zmMJ23)>=-MM}|h3JVnU zUlf=bqGBGu$tU#_qA~rxt+*?r#>*)W!#j@GXz}4RQ7NZtzD;ZIRZfgLv#xymf>-C` z_Sy(&wGOn+uVN^MY!7OnM{5-VZtBlsq`vBmf_0;S_RHa4fcSO6&^E6`R3Z%CwCdQh zxWI3wmKn7_;{MfY_;RE~;{zKPGbA5$CKIlOdOzFgXoup=N=KZ3g zsYxe)_9sRdTRaF=!;g1^p$Eu9L5p<%MfP!?DX`oI=?TYKrx%ZM6waR*8#I;5sUNiU zgg*9w6;Q?cb)h8EVm;r8WIcDhXf^Mi0kR(Vpe6wgj^a_X$uIW91w-)vwv+-2-Xo@q z94Ipkl7DOVV{LRZv4(U*Pca_R5Idr)r z*1A@1`OtVnQOl_$jNRwnH?1W-_Y4fo-e{8U~u&N?SVV1Th1_kA0 z+6~fzp2pzi1}snfIe(bZPsoJ_zc0fjm44OWYU+MmqgMB-U$QzCT1wR|$XferX1c;_ z2Zv7a2#RY8?0ELZJ$SYvGCD%4q*p{TpP*rbyfccJM^#ihewp|7SWq^0B94fUgvJEi z!BwZ4q+YMAKAQRT6x#+ zq@)*E9^B9Qp*f4qba6AmaY&1eJJmft6fbhqap<@r03zex72)52&3{S;s2}k!#gD24 zZQ2EBXfV>DHaBzq>*T@wZaig>Qm!w){6sdogzyb!_u*;io{N_*)g*PKh17xc^bvi{=qi1hiTT;>NJ-&fQ}qqq!9=hPhN zMa!F&5MPtIGXCx|{!M(dRWZ2|p!qdy>Th1u*@tiI5 zzJZY~TEQ4N`9wu2qm)!UyT4@>dsihVkA?>ZHcWN=N}-YllanZ|q2YR(cYyLsReM64 zX#d`m*G1yB1pL+C_i=2jx|Nxk-U4moQT$Y&u+GR!CC#gf={J2|99uo-fKY*~6n%5N zL;+sJ!lT!au`smbhZbvFkCloW9BOQvTOtjjN-gzI*F0}hVh@ZK5AG#Rg$`-9_HVh( z9}L&hOUBE$l>>d<8OAJ4&}baB8OIAc8gc-+g5pS6D1VeE3!Mc7j@iyr{XYzUIA$Uy z>{h&e?|E+Gez&&smR=l^vWv)GZhESw^v*my%Qh!rX~wA+S6Z%1)(uDJY6NuM*jzAM zYrttH6j`$FaNH_JOl2nT z5ZNuHFcE4Ee~b$Y+gz6tLL#GyiH;Nx^edg4F3A2QgR!vBKb~a;Iw!l8m>ZXUoiDlC z7HLBgj^j8N}qrUl-o@@$Mm+vhK6BKoR z@|0FqlAd2|rnC#Rud4p*PY6!{>srv(sw^S#u@-%0zN)Cly0PADt3sL6%=tWF|5(*o z$;P)DqCX)iFxTX2XVD&A9%j2JX&VZ*C4fFbZ!}dy>V1>2XyLSAi4~G$=Bg#$Wo059 z*QLTF=d(Lhu@ILVN*pc03Qq6H3@$7B`^36hD6$r4y?(bIYlU0{>}I*ji`II!4rhPbOGgzW~c@(63)mY_gY6vBQ(^xuFPQ%0PSH4!r#UBue9we0J zb_Agfq8HPK&6-bMJ^APLqXdb&;40(&ae|%QsPpw;vh1s!D%vTKB$TZG4ERLXBy7B8 zCm3hHS$fwgC-pg9nrrTS_i(SHFusy!rk}*q_H_ZEZvU^XH$+lH$qqWBCWeH1ewjQx zr#M?4SFf#S#JBgjuxOIHmm2a}Yks3945TW$2dZ>SybPPcR+})U>W5ADKb=KutJ_Ju z6E{2Gq()5g8vG`*4lCZipf?pBE8hNX z{qoF^6y)q(aGe3(BacxHHZ}$-#or*PRh-No7@^lom?14b4+}820;XK%xAu;htLYheu8fk9 z(-6bntcTXJs5NZq1z@5B>3^Tl6ussiz~W+4M+Gsc0;2FNFX?bb>G&)mv<7e8O=b4m z-hZ8T0S2~?psp%-BN#ujl;8I0i)ZNM<2*;18TW>ue_I~Ra;kKZFv62W>7ExBz4iOc zJ}*DbsdaXOr}1~9e!6j&PgrX1wVx33>Z*)rziX8gkR7-(fkq)`^Cm6k_x_7tF4EGL zE`rw{IC|4iAplykM=-@LPzC8Gs|rYMC45$N4QyS=P^KvDoI}dvxFTE*vVrH%N*y>< z)BM+1Jq=Zl-)QDx@Q&j}$v+~cqeV%q%kjSC=u1aR+263-#Bnt6a0;x^TtwZ7vK;~b`LQ;7p&dgQRK^? zyI8R|mgjD7*p>v(^L2{nY!=>;YGr+PcIX>2{)$6Z3TqLQs(ZU^`NHh8GPq%RP4rC1 zcC?~Qs;$X6x1ihftCP5p{XbHy@e7l0*=({;Fuh|-0v+SNCSUy}jA6jh>mUVC)G5 zpZ#}$!wcH|FC!hwH&70#xr6Ug9I#*Qy4)#&=RRD>z|T5dxUVA~rf1HAxFO!XVHzQY zd~e;<Evc z^N${axBtn`*S=2d`sOU2kN6v2vqUAX8?i6c+BGV zdRC9c+nWo{#9bDVUYxv1ZsG8u!{P*4&@89Yp7a1I1(Fl(%ng1SMOzhxQ892}8YWhm zSO%ybk0N-zD}atFQh$T|3fF@sEb_X$JRFvc_aRIk=mi;=;2$ee5(L=6|29B>(h~R? zGfuGQdb{2>w73$Vs#+&CzT3dw%)Qb2D6R&+QJxu}_%(g9At3TywuyWe)*NG-q7S2E zNkAnzv&Xr}7cyJtrEZ1ziG#7P=xL)1lP-6Dq6*N(I-dB|Ai?naUwM~r6)emy)UR~`;!5hxIKOqBONhM{N4?RH%?yx?)^hXum zmDSRvglcgL+ucR4IM|v{<3`@Z^2{n1eq}AoJ$03WE0)D9v&wKUGs?6B#1G&t1dK!h;`)zT{g|otZz${y$6ZsR z7onf;JkEVRg7bk6N8%ftFXzh(lxfIy1DZcN?G1YMKVl>RD>>iO2<1&Zo7kxdS(h>s zlS@fTRgS>@KJ!m-f@10;Z>qdzxo&$OK*nws%LkC}E;@NtkTS!#Vs|v$waI1oSk6Ga zGKQz8N6lO+iS4nHemCwO#h5exfcOr_7ow5-jyye0-oWy+ANO@qdpwQQ?dAMNye5@# zFLLBZdhPj`!U((gz$v}Hrdt96N#D^93Alu@3m?gn)E>J{?BS+c)UC=_v z4~ZD&PY}D4jEr|_&kfvIYhITL=vwXMPKA!GaLsRT`YX_1KiW~U`DOWED8s|(7)-KE zTQjo@g1+9fA1Laq7vmTmMWt617v0J@YevIP|9eAmqUNJeL4it+ zY)yJCQ_YwewJzBr;YuhIne!ayVDElc5>?D!4bM#Qpjf@ZU-&a8!9x!y>t8u`*1I_q z?dHvR7T~Cx`Xb~YyV3faUl5}Wb`ds1t)~Uh;0MM65Bn_5v!S*h^!_}pU#ynvt=i9@ zC*USp?a}4?wEv{Vm391=?P?PD%xkp%de6>b6}wI3QFt7_)A(${h-qlKqLh$N*O;n% zP~>U;Eg*v9-0CbyJ#k#kD1M^ zc2N`NCbk0;Kqt&|qhgG^D*2D@8*3#df#Fu|yYda+mTDzelUYo6<(i~wou6ZezOM22 zSmpE?XXet4$Sw0zCe5FZp%oQJg}2;WEqqt7my+B^G}M&BUf%9rTB0whHM5_e%k9-Y zuYcKI^Ls@}&yu3Pz5wdmexSKx%yScm)uYwG{CA;;$D4qBNg7rFR3Z3>w<7*kaQ4M# z7HQjK*OUC?ZvCIuou)3CHVwO`8_##9Rl?*q8<<0;KG;bH;uyl)RO3IlC`rB3(Gd6? z=%|?C&Jvz^f$yd)EfBB;pYyDys%sk^Bi3I==rBL6z<%8*@OqAlS||Nb+qnCn!2;am z92>R#b0XR%Jc5z&7dc}deqa$(pvYe3Bvku4$5;g_#mZMyQ8)3-s*;tZwVj$=2c|?B1yl(^7J^=Fmx%y8% z!sI1lxCv>L#M$r{veez*I_ZtEp}MW4Jgaw`g>%aR3iP)(b1Mv?8c)}CMC_ynI#Y1! zEbiIqVlbI-WzlOJR&C|Traf1{p*d^%Z>$H&*fqYyxrR{5Gj=@Q6?!Eh>9otdsw^FX%{W1$ERcr;H=*M3Qg60)f z#IKDL8q_a3*!)&W6~v9IJ=)9>!t^vhr~|rpAt0iMW=^en_p0XIb4n~p z{G(de3jYQ-F$Z*}De?|s@}!tH5OYV~-cG)iVE@47|FN@Yf4}e%`KTAm8-G2o%Tfu) zu`UD8G%yUwA&hd_KF4lI7M^50<14Mxj&okpln#vhY~|@B+Wf~VbZe8-SZtqvPvb^K zW?GDeWX0)#&s6-1Wq4Nrs`GQo`;N7Om`1H@S zl%197!>-VlLyNtnoq&e!!J3Yk{FE3gY%+5*#;$*~R+pgSxTp2$<7S@Orpbb_x&j$f zenpX|>f=qRrHMnXcL#qCAeZd1wzyK6`T4>dd5!`*9X4pTz2}MyTfFsEHoFxJmt8%_ zIvbS8bBA4DBfo`d*yF6Q-93{91T&To)7$p2OUn3-l~PWdO_cvR!+;7q1uG~0oRW}k zy91W6SC#I4XyLV`S-&JVJLlHGUgwLs1IQ7y-EMArcA=Y;hFh~jj9!4Tk9;*VWV*DX8HlY)mQl##4EGdL=DkWYM%19 z#gX)%kUwg2U0?l#lx`%NE+xCRD3KH= zezy}@z*Am7B&ki$h*X3O^xBd*!ReJU-=ZtWoh+oNr_~EW;MnI(rT> zh;C-}_MP3vtRK(rs9JxwCkUUjx%JA$eTyZmYxC1Hjk3$~RL6|fCI7H) zbKAgz&2*FEG6i**{f{47h5_UesEYVaK&k9Q4<1Bi?rG?xbjYV9nQ3Pl*a`SCL~>qH zOyrf@9o3y%JI)I#S7PM1%cSJ0~YL}EmaUMcLO zf3dy^tVotTj^2q%95PMjEk#&l|G@tsP4_MO`Xa09L`@W?Fs%zp4Pvd$Z8KF*Ww=+S zR;=a^v=#xs({E4eL#bSoCg+Slj%&7|%{d4#b)>Tj-6@ilCKfJ5?bAOYLu*Q$pO`mr z;NS^>H|Sc@)6aI&RaU$G2pNKjNsy3CdJy5G{0Rj#wIKsO-*W61XG+S z=aoaT*7a@N^r7Nms)d{HEQmax^B1#5RD3HmMM;_4%ykAZDh6V@(r|z=>b;7W!{=oU z>9rMIky~{bL}BpFuwo&CT6vGtdQPH+Yk+a>`Td`e2b=u}$CR8whf(%wccZ!ux7yk& zQkUY=#OfBTZ6DV{aZusZvnev38QbIB)IlcY5f$#|j>ft1H{w6<&xcmK|7?W z!#4#|wbW2l4jzaG?WK}Vd@<@|!rM4WKX}7wqXHZ9DCG1iS;}EQBQ>0lW=yWyuU=dN z(Z+p)V{o6&U^~(n4C-?*Ik;TTT+94N{`zE}nzHlK*q7}fy?xC3L7U9m`VMct_01h< z%qG3#l9Hqp)1YO1PJREcOEvk zB#&%|Z>z{qC<$|MXg0g8A|rDDUY$tkri@{+q@GPWO`tD{i<%V+u2RT`w=#;UZx_9RNMo&Z2;Ek!>^q}qF?D@b}v&$1B&O(+W zE1MxRt!t@>se=a;@dh?unYbq5vN`;nlqo9NDP1%%A?6_Q3R9KVo-GMt9qBx^BiP#XrK5}0 z1`2cX%gM9m@Wpip!OTJBJDcgA{Ich}JCu|@MXpCaC8^G^slBzXH-q2bu5Nm!H^c2w zLr7aJ)O==v2)5*(FMF)x-J(-1+u~h#!VX^oKKg%j3>CM2F|-1Xkwag$y_;;1<% z=ovd)a(pI_+Q733$20FSDd?=JQoX41%md4??b0U4&9e7<5gga77QkXm^vMZBTGI#O zVrbLT$v;oiva~+@J1z9&pHCY!c3<+d7I=PHv-Quz^ymG-m}Nd*GrfNm?Tq}m^rYA0 zRLF?v_dQ6@T2bUL_a@u{HG}1s2lpPW$e}1`>wVa2SZanQOylZCwzTYu)0~nB^A}Jl+rpUY=zHNqI%r#t7-XDg`A@yx8M$nN$-|_= z$Iz!u`PfMy67asCY|LVsJ9jXg3Oca3{nRqD&b3#W7n;6l1?xQq8qlQ&2AO9pv#xyS zdCfD|{CU6O?3Ng!GJR7Y4&PKEqORZ!rn9s3JlrF#Zj`Sp5BB(KhY`SeP;C?}5hhc0Zhopn_nb(5KVI@7f!W7k)2fkcg#{)Ak` z1`(I85c0GHH{_)Rr_?B;v36fzrHWM^6k~?LUR2&5HX7P zaDPkL)VPz+B25C5#%ua!v+AuP$2>ntuMAdxtdS=nd@OsCql?L9@tt}pmd{4b$c?Rj z3VZ%b4XwRS(r1%k_E@_ipsCp6=(5@lDi|2rRI;nAZsJ#z>Jji<)hR~~g`J&nV+PGp02b1vVY=EhQC$w}0NAK%Fzpj-(-00@Jt-?_bS_1Sz(CPup z82Hq|r*5NW$+Z*?7t0hmkdlag9hJhdqO25fvv&Xocf`87Typ6dp^M9Zh0v{NF|pQ? z4b*pwT%QkZndH*0sVEE|a2OB8E~_vbODIIFYz6%PrET0v{X|zo)X5 zyNM(mj@TPPWrqGJoQV%G0|dM0Pw$ZCR|BP$S>yGFTq|)CTdexd2MI&S+|kmNJBHj- z&ena;*TT&G>+99yDk_$etX$!RgJq^u8I3t=H)H(fUiY?bbYT?C6yQ!3Mww$7#rK=p zzYXiRQn$Gzn(mP1npbbHK_`}5Y~y#g#&#RVmOAU+xtorri?w6GgRJYSuNOb$A?hHHFo&x}L&9fS-amEyKq%PVu!?H4}~ z-9#J|>(vg4s0{p)AiUdAlq3iX9ON%Y6RLK{K5b7*I&2otbtG+b2<@m$iUlog9GqKh zCXSr(7ffbq7=1}JnzqF|Y2~50q7W`CrAQIc9On)xW~Y@`A7(6`hqjX4#-o0Bl!Og7 z#}DHs0y#$-G~95=G30umfg}y{uDdOI(j>E1aw!fQo~(~4XHsLW7u`}07?TdLdB|BBC1ezsFmW(kSBsk+ojvdm zEXvta-86G@1fEx7S;T(!HiUo6wvBS*Ot}@p%i!Q+x07_>y9cTn;dx(PhGFcwF4ZPl z)F&w4OJm@?awnCZWXZ{KFr>6wxq_!gSP?l(l3>53RO+ghH?8oS7$m_OZz>j?BU+Vi zE)7}IJLC^)`Kxoq1v*tikJBs=V9m$$!hV2vxs*;mvH z$~T)fwiX%d=&g{|6O4(;Ve}Pxg!@h`Ch+U*g25UsT0(E_WgV*a=Xaw@{5|cQ7o=E3 z^0HpXj_@eI>&vS02K*=wyNUO01^r@Tq!g7aH|<`viJA5t9@Z;wsa8s|>LWJf&lfz* zE7(YkyK+5$HFA9krS)kCx35FUR15ws^`@qg)L`VL$u6}Zpsro)5Q==MFcJr!_s%+i zbFC+rmY1_49J@@izqq)5yA;bsz*#t`Fh^2G%emTieaGhxfAw>fVRPSGuA2n@g&dV6 zU0~+(;|7;n`|n4A540F6;Ai#^R7+dS0%y@9Ya(EYa2!%~@2TxV{01L?!(1>L3kFA) z>`KyumY@f}r%75wHs8CXa(19{zN-cOV1ms*A1@+$C8? z2amc707!32KHrP5#DyuwM;WXCgv7jEznv=j7cIX71cM*1wgI4eM7=o~p2}Z29#++_ zD8}?~_^x7HC!+VO{iQ+}0m2Zd^k}oVM>&)8iBc}eb28tu%AfLq9@^KP9}3ux?e(x> z8%CugFJVd-WM6bQeP4VzopE4G^1oFdpnW29ik0L*=vh@WpWbP~G2NA{c|mIxAoTCf z{IWj!>xHa0iU*sZ0%f3-+0F(+rZkH^g*2u)rTa82ws zX1^3o(5Q48iPP9AM%5pTsGDxX5e){dKKk6-(v?%9&2i1c9SnxXqh$$NGLMp0o*kxM zj@Z8=J`}YauPH*9@-nvY7zOOjOHk>=MsvJ;NL3jgUReG)xoU|O)JQjr_=35mxfO}3 zA6HZZqsQc#9_?9gO;Lgv5Za6TmxO9-u6?bKx?IBsDS7pgHxqg zPE3|f@g~BtZ&J^OkLg4&UA(J$3~$BMmkNd##cgtvKYB$dLk|tf&#AWecYO+8;^DbH zqSv$n$L3I$nNgNHSLIq;s#|7($@}gggM=&jb**Dgg1}AiLHmQ_Rqc0}%+O+6eiQf&^5d7gfZGGe4?s=RtsQ$2 z5FvoGyZ)_H@wDZ(cSjSYm8@_BzfkSk?YR)}ix{@?FH)9Xs~dF4fRyz5Pxt7#7_gAl ze?;4O#kGn|H1Aj$H&&JQ|hA?%re>jU4=z zjFXn|$Q|tps zkMSrQjpFR|Yo(hNqLnSk$V1sDB*h>{61>8WB|y4Hqo{-DGcs~&lI5HRH|Z#jQkUfy znwcr^8M$|)eKIlyF%EwxuN?W80cVm&M>*ohAMTmbG9AExaZI;AO|vvRO^dNRd%nB$ zmf9c3R%J&HsmEfgBTtjFrgTSU24FJ;jLg74|9d}l+A-vaK^bX$79>M>6qsjznOEx_ z61}#$zK!;Txh2>XT1H^%^LE+j{#7b;?&+5U;kYoQk|umc#fmFlMnCAnWS$atUHqX{ zp}JmeL1v}-uxAI~XH314(X*P^RIF9>0jA+BFdvhO)2xV%muQk|l88u;NAnjDgF9Dd+)r8RO1>DF@w+Zuq_4Q&VYq~CF4L+g-EWeWX$-4sr%J4zxKe?o$PLRh!C zpaIQKGS0y7o`BHtYaALK+$Ek|R<1yYi7px|Fz491NPm}_7So793dJ%POtYR-*5VmM zX$pP5+UbT#E#v6-uy99weJa+$36DNyh~x2$2|Vwn>H*!Zy8*$Q9sC)(h0Z|hH^01n zHbT`SW{!8?ghqw#^i>|X+KAblo7JMoc{ zYr%_%bC2foj8S(+UPpNr(ubp>e)m0dPLR;;Fa?hejDvaaaTx#Ala-`$PM>LPrr1>l zTUTRz;)A;p3tvn5=iScRw~k(&i&DrSoUzac+~iZXPNBV~p~;#(zx7{0(1dQR zEg_~AkqEeh;~Ui7$0O(R(qs`4y@k4mJiy(%YW;$JGS7hCNg##iD4W=_xNhof-C{lD z|9mHpP`|j~yzq-p9mKz1Tr;`&-!>RO={du>P?h1Hgf_TVc}UOirh zQ>xl6_a$iya>?@vno>DBX1u8K5#}YmU9MK805?aeKgsh1bZGRB?OM~e8%N@40TzIw zs|rB=eb9<2wu~~QW!jrAJsRg8m=G9w^S!r?wfhwVIkvxz&zhAXYDr4hs^#+jGfS!D zy0nyOX|;Hv*0|E3_Gr0@w4Mj7HI5GDvnHG9kgA=pK0@6K&L(eCzSa6#(x(MK+L!&t z*}^{dyO~>3SIBc(=;^!Mc$wH+sm}Oq+a=u+2ZJe@+~LHj#3?jI>0gL&Xr?4Q*CQrV zr$yZd)&YI)p%7+#zKO^3+Qh4Eu3S2;r>(U?{!t$e(pPjhILj7Zu44t4P_xRxn=vbQ zzysvpJ282s_{Q!(NfYyJ!``8Cy))(qk_z1NkA1X;pD}u31!qaW>^}(PY+97PJEvpV zfjdX?Kf9q4HV}C&(qP8CI+%?9l%k#~M#0!=dte1ee<5k@XD5By$UM{olCg#5Mm%~) zZCXj@@X@7KOip)mPtXiIBMSWSLMtZMOLt>zNBsfw4xo29UNM+^Jg*WptP{L_(9F-4 zyIv?(8^p57u$+gtYAZXG)@?qG&iDG0jA0J{ zq#qBvvpCexcaAJ^kQ`)-!shf4aCL8Y-oo_etXcBf_~H(dz{BZ#61sz&@CDRtN-cBo zyM>&M^#v9=TVVQ7D#iY8^W90AN`J*$wBq2wO1TegK(emH&uTES=w46)!=8lU zyx2NNUSDIbI43H~fV0eT6ehGMX1G^=Xsv|KYrcqI9#zlVn%Toq=^GlddB|+gX^Kio zc`CT1O?T0ILS}oZ)S{e)gH6<Uw>ds?wZA2ZR);iyk@-f=u!u&+t(6BTkRgZ`;Ke3MsZY}FEn=wi= zlP>+Q_3HT-yef^>UQ5l`%&n~{u%Ng}xsPnRW8BBvTE%3&q8Fa8@|uwYOCJ|d zTj&To8pv)x)tNBJ=+uIHV2PLKLRcW1R#iX$cTtvwz>*{N)BmjF|NJ>10ix{R%07|` z^-);F_}1{dsfop)#zF3~aEXtO9;T%Ih23|cm^yK)s64I4$z{K<7fe#|rOS{2sjv?( z&YBs(Ay*&WJ)!&P1RG&N^y6V`i@IV@0B81w98NM zA9Wofrdx-kgQ&fDaWWPX8u|kC-Dw{#D!)}NmaK#)m&O$o7R*Hb-d@HcpAqZz!^OKz zOu7HXl^!UM=e^vq#VMAbkZ3`bQ)V6OE-y6a9zm{Z0!laJ1NcBAihysH4f*v2u&w~? zd4LUqPr#As;riiZ=!H#8T$|uUzC=r=ZyHFRnzc(*7I%!|lY+!T$rJTiGT6 literal 0 HcmV?d00001 diff --git a/memory/images/pizza.png b/memory/images/pizza.png new file mode 100755 index 0000000000000000000000000000000000000000..99347440804253743f0c25783482fe1f29640680 GIT binary patch literal 7817 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 bFp&NaXAAR+s3C3*00000NkvXXu0mjfB3{P$ literal 0 HcmV?d00001 diff --git a/memory/images/result.png b/memory/images/result.png new file mode 100644 index 0000000000000000000000000000000000000000..59f8e5deb7ac03412b94fd4342d2bf2e95d47bf0 GIT binary patch literal 166513 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πDy9wH-f^sPQ|eCca|h%H_wuga`gFiW~%M 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