deverything 1.5.0 → 1.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/helpers/array.ts","../src/helpers/uniqueValues.ts","../src/helpers/arrayDiff.ts","../src/helpers/arrayIntersection.ts","../src/helpers/capitalize.ts","../src/helpers/chunkArray.ts","../src/helpers/chunkedAll.ts","../src/helpers/chunkedAsync.ts","../src/helpers/sleep.ts","../src/helpers/chunkedDynamic.ts","../src/helpers/clamp.ts","../src/regex/controlCharRegex.ts","../src/regex/invisibleWhitespaceRegex.ts","../src/regex/lineSeparatorRegex.ts","../src/regex/paragraphSeparatorRegex.ts","../src/helpers/cleanSpaces.ts","../src/helpers/cyclicalItem.ts","../src/helpers/dir.ts","../src/validators/isNumber.ts","../src/validators/isSpacedString.ts","../src/validators/isString.ts","../src/validators/isNumeric.ts","../src/helpers/enumKeys.ts","../src/validators/isKey.ts","../src/helpers/enumValues.ts","../src/helpers/filterAlphanumeric.ts","../src/helpers/first.ts","../src/helpers/firstKey.ts","../src/helpers/firstValue.ts","../src/helpers/getCookieByName.ts","../src/helpers/getKeys.ts","../src/helpers/getUrlSearchParams.ts","../src/helpers/getUrlSearchParam.ts","../src/helpers/incrementalId.ts","../src/helpers/keysLength.ts","../src/helpers/lastIndex.ts","../src/helpers/last.ts","../src/validators/isArray.ts","../src/validators/isArrayIncluded.ts","../src/validators/isBoolean.ts","../src/validators/isServer.ts","../src/validators/isClient.ts","../src/validators/isBrowser.ts","../src/validators/isFunction.ts","../src/validators/isValue.ts","../src/validators/isBuffer.ts","../src/validators/isEmail.ts","../src/validators/isObject.ts","../src/validators/isEmpty.ts","../src/validators/isFile.ts","../src/validators/isFutureDate.ts","../src/validators/isJsDate.ts","../src/validators/isLastIndex.ts","../src/validators/isNotEmptyString.ts","../src/validators/isNumericId.ts","../src/validators/isPastDate.ts","../src/validators/isPromise.ts","../src/validators/isPWA.ts","../src/validators/isReactElement.ts","../src/validators/isRegExp.ts","../src/validators/isSame.ts","../src/validators/isStringDate.ts","../src/validators/isURL.ts","../src/validators/isUUID.ts","../src/helpers/merge.ts","../src/helpers/mergeArrays.ts","../src/helpers/moveToFirst.ts","../src/helpers/moveToLast.ts","../src/helpers/normalizeNumber.ts","../src/helpers/objectDiff.ts","../src/helpers/omit.ts","../src/helpers/parseDate.ts","../src/helpers/pickObjectKeys.ts","../src/helpers/pickObjectValues.ts","../src/helpers/promiseWithTimeout.ts","../src/random/randomInt.ts","../src/random/randomChar.ts","../src/regex/letterRegex.ts","../src/helpers/scrambleText.ts","../src/helpers/serialize.ts","../src/helpers/seriesAll.ts","../src/helpers/setObjectPath.ts","../src/helpers/setUrlSearchParams.ts","../src/helpers/shuffle.ts","../src/_internals/objectSerializer.ts","../src/helpers/stringify.ts","../src/helpers/toggleArrayValue.ts","../src/helpers/truncate.ts","../src/dates/isOver18.ts","../src/dates/startOfNextMonth.ts","../src/dates/startOfNextWeek.ts","../src/dates/startOfThisWeek.ts","../src/dates/startOfDay.ts","../src/dates/startOfToday.ts","../src/dates/startOfTomorrow.ts","../src/formatters/formatCamelCase.ts","../src/formatters/formatCookies.ts","../src/formatters/formatNumber.ts","../src/formatters/formatPercentage.ts","../src/formatters/formatProgress.ts","../src/formatters/stringToCSSUnicode.ts","../src/formatters/stringToUnicode.ts","../src/math/average.ts","../src/math/isBetween.ts","../src/math/isOutside.ts","../src/math/isStrictlyBetween.ts","../src/math/max.ts","../src/math/min.ts","../src/math/multiply.ts","../src/math/normaliseNumber.ts","../src/math/normaliseArray.ts","../src/math/percentageChange.ts","../src/math/sum.ts","../src/prisma/prismaDateRange.ts","../src/constants/addresses.ts","../src/random/randomArrayItem.ts","../src/random/randomAddress.ts","../src/random/randomAlphaNumericCode.ts","../src/random/randomBool.ts","../src/random/randomDate.ts","../src/random/randomString.ts","../src/random/randomSymbol.ts","../src/random/randomValue.ts","../src/random/randomArray.ts","../src/constants/banking.ts","../src/random/randomBankAccount.ts","../src/constants/companies.ts","../src/random/randomCompany.ts","../src/random/randomFloat.ts","../src/random/randomCoords.ts","../src/constants/domains.ts","../src/constants/names.ts","../src/random/randomHandle.ts","../src/random/randomEmail.ts","../src/constants/unicode.ts","../src/random/randomEmoji.ts","../src/random/randomEmptyValue.ts","../src/random/randomEnumKey.ts","../src/random/randomEnumValue.ts","../src/constants/words.ts","../src/random/randomWord.ts","../src/random/randomParagraph.ts","../src/random/randomFile.ts","../src/constants/hex.ts","../src/random/randomHexColor.ts","../src/random/randomHexValue.ts","../src/random/randomHtmlColorName.ts","../src/random/randomIBAN.ts","../src/random/randomIP.ts","../src/random/randomName.ts","../src/random/randomNumericCode.ts","../src/random/randomObject.ts","../src/random/randomPassword.ts","../src/random/randomPath.ts","../src/constants/phoneNumbers.ts","../src/random/randomPhoneNumber.ts","../src/random/randomUUID.ts","../src/trpc/formatTrpcInputQueryString.ts"],"names":["array","length","mapFn","uniqueValues","arr","arrayDiff","arr1","arr2","value","arrayIntersection","capitalize","string","chunkArray","size","chunks","i","chunkedAll","chunkSize","fn","__async","chunkedAsync","chunkResults","chunkIndex","chunk","chunkResult","sleep","timeMs","resolve","chunkedDynamic","_0","_1","_2","_3","initialChunkSize","sleepTime","maxChunkDuration","chunkSizeStep","currentIndex","currentChunkSize","step","start","duration","clamp","number","min","max","controlCharRegex","invisibleWhitespaceRegex","lineSeparatorRegex","paragraphSeparatorRegex","cleanSpaces","str","cyclicalItem","index","dir","arg","maxDepth","isInt","isEven","isOdd","isPositive","isPositiveInt","isNegative","isNegativeInt","isNumber","isSpacedString","s","isString","isNumeric","enumKeys","key","isKey","obj","enumValues","enumObject","values","filterAlphanumeric","first","firstKey","firstValue","getCookieByName","name","cookies","cookie","cookieName","cookieValue","getKeys","getEnumerableOwnPropertySymbols","symbol","getUrlSearchParams","urlString","url","_e","getUrlSearchParam","param","id","incrementalId","keysLength","lastIndex","last","isArray","isArrayIncluded","isBoolean","isServer","isClient","isBrowser","isFunction","type","isValue","isBuffer","val","isEmail","isObject","isEmpty","isEmptyString","isEmptyObject","isEmptyArray","isFile","isFutureDate","date","parseDate","isJsDate","isLastIndex","isNotEmptyString","isNumericId","isPastDate","isPromise","isPWA","canUseSymbol","REACT_ELEMENT_TYPE","isReactElement","isRegExp","isSame","value1","value2","keys","isStringDate","pattern","isURL","isUUID","merge","target","source","merger","mergeArrays","arrayA","arrayB","item","moveToFirst","items","condition","resortedItems","firstItem","moveToLast","lastItem","normalizeNumber","objectDiff","leftObject","rightObject","diff","allKeys","omit","ret","pickObjectKeys","pickObjectValues","promiseWithTimeout","promise","timeoutMs","error","timeout","timeoutPromise","_","reject","randomInt","randomBigInt","randomPositiveInt","randomNegativeInt","randomMaxSafeInt","randomMaxInt","randomFormattedPercentage","randomChar","letterRegex","scrambleText","serialize","seriesAll","series","results","setObjectPath","path","set","relPath","setUrlSearchParams","currentURL","searchParams","isRelativeUrl","paramKey","paramValue","shuffle","newArray","j","objectSerializer","stack","cycleReplacer","_key","thisPos","stringify","toggleArrayValue","copy","acc","toggleArray","truncate","limit","ellipsis","position","argArray","ellipsisLength","startSliceLength","endSliceStart","isOver18","birthDate","now","birth","age","startOfNextMonth","startOfNextWeek","startOfThisWeek","startOfDay","day","startOfToday","startOfTomorrow","formatCamelCase","_m","p1","p2","formatCookies","object","formatNumber","compact","maxDigits","percentage","formatPercentage","digits","formatProgress","total","stringToCSSUnicode","text","char","codePoint","stringToUnicode","average","numbers","num","isBetween","isOutside","isStrictlyBetween","multiply","normaliseNumber","minValue","maxValue","normaliseArray","percentageChange","previous","current","perChange","sum","prismaDateRange","startDate","endDate","gte","lt","UK_ADDRESSES","US_ADDRESSES","EUROPE_ADDRESSES","MIXED_ADDRESSES","ADDRESSES","randomArrayItem","weights","totalWeight","random","randomAddress","chars","randomAlphaNumericCode","randomBool","datePlusDecade","datePlusMs","dateMinusDecade","ms","randomDate","parsedStartDate","parsedEndDate","finalStartDate","finalEndDate","randomMaxDate","randomFutureDate","randomPastDate","randomDateRange","randomString","randomSymbol","randomValue","randomArray","IBAN_SAMPLES","UK_BANK_ACCOUNT_SAMPLES","US_BANK_ACCOUNT_SAMPLES","AU_BANK_ACCOUNT_SAMPLES","CA_BANK_ACCOUNT_SAMPLES","BANK_ACCOUNT_SAMPLES","randomBankAccount","VAT_REGISTRATION_NUMBER_SAMPLES","COMPANY_NAME_SAMPLES","randomCompany","JS_MAX_DIGITS","randomFloat","decimals","float","randomCoords","randomLat","randomLng","DOMAIN_NAMES","ANIMAL_NAMES","TOOL_NAMES","WESTERN_FIRST_NAMES","WESTERN_LAST_NAMES","CYRILLIC_FIRST_NAMES","CYRILLIC_LAST_NAMES","JAPANESE_FIRST_NAMES","JAPANESE_LAST_NAMES","ARABIC_FIRST_NAMES","ARABIC_LAST_NAMES","FIRST_NAMES","LAST_NAMES","randomHandle","suffix","randomEmail","handle","handleSuffix","EMOJI_SAMPLE","SPECIAL_CHARACTERS","randomEmoji","randomEmptyValue","randomEnumKey","randomEnumValue","VERBS","NOUNS","ADJECTIVES","ADVERBS","LONG_WORDS","HTML_COLOR_NAME_SAMPLES","WORDS","randomWord","randomNoun","randomVerb","randomParagraph","maxCharacters","minWords","maxWords","fileExtensions","randomFile","extension","_extension","HEX_VALUES","randomHexColor","randomHexValue","randomHtmlColorName","randomIBAN","randomIP","randomName","randomFirstName","randomLastName","randomFullName","randomNumericCode","randomObject","circular","getRandomObject","depth","partial","valueOrObject","randomPassword","minChars","maxChars","randomPath","PHONE_NUMBER_SAMPLES","randomPhoneNumber","randomUUID","digit12","formatTrpcInputQueryString","input"],"mappings":"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,IAAKC,GAAU,CACjB,GAGWD,GAAY,IAChBJ,EAAY,IAAK,EAAE,EAGfK,GAAY,IAChBL,EAAY,KAAM,GAAG,ECfvB,IAAMM,GAAe,CAC1B,YACA,YACA,cACA,UACA,UACA,cACA,WACA,UACA,UACA,SACA,cACA,UACA,WACA,WACA,SACA,SACA,SACA,SACF,ECnBO,IAAMC,GAAe,CAC1B,YACA,UACA,WACA,UACA,QACA,OACA,UACA,WACA,QACA,SACA,QACA,OACF,EAEaC,GAAa,CACxB,MACA,SACA,QACA,SACA,SACA,SACA,MACA,cACA,SACA,YACA,UACA,QACF,EAEaC,EAAsB,CACjC,SACA,SACA,YACA,QACA,SACA,MACA,WACA,QACA,OACA,SACA,SACA,OACA,QACA,UACF,EAEaC,EAAqB,CAChC,WACA,QACA,QACA,UACA,UACA,QACA,SACA,QACA,QACA,SACA,SACA,QACA,WACA,QACF,EAEaC,GAAuB,CAClC,6CACA,iCACA,2BACA,uCACA,2BACA,yDACA,iCACA,6CACA,uCACA,uCACA,qBACA,gCACF,EAEaC,GAAsB,CACjC,mDACA,iCACA,uCACA,6CACA,iCACA,6CACA,iCACA,uCACA,qBACA,2BACA,uCACA,iCACA,2BACA,4CACF,EAEaC,GAAuB,CAClC,2BACA,qBACA,iCACA,iCACA,2BACA,qBACA,2BACA,qBACA,qBACA,iCACA,6CACA,sCACF,EAEaC,GAAsB,CACjC,uCACA,uCACA,iCACA,iCACA,iCACA,iCACA,qBACA,2BACA,2BACA,2BACA,2BACA,2BACA,qBACA,cACF,EAEaC,GAAqB,CAChC,uCACA,qBACA,2BACA,iCACA,2BACA,uCACA,qBACA,uCACA,uCACA,iCACA,6CACA,gCACF,EAEaC,GAAoB,CAC/B,6CACA,iCACA,uCACA,iCACA,uCACA,2BACA,uCACA,iCACA,2BACA,qBACA,2BACA,2BACA,uCACA,4CACF,EAEaC,GAAc,CACzB,GAAGR,EACH,GAAGE,GACH,GAAGE,GACH,GAAGE,EACL,EAEaG,GAAa,CACxB,GAAGR,EACH,GAAGE,GACH,GAAGE,GACH,GAAGE,EACL,ECnKO,IAAMG,GAAe,CAAC,CAAE,OAAAC,CAAO,EAAyB,CAAC,KAE5DxD,EAAgB6C,CAAmB,EACnC,IACA7C,EAAgB8C,CAAkB,GAClC,YAAY,EACdjO,EAAc,GACb2O,GAAkB,ICZd,IAAMC,GAAc,CAAC,CAC1B,OAAAC,EACA,aAAAC,CACF,EAAgD,CAAC,IAC/C,GAAGD,GAAUH,GAAa,CAAE,OAAQI,CAAa,CAAC,KAAK3D,EACrD0C,EACF,ICVK,IAAMkB,GAAe,CAC1B,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,WACF,EAEaC,GAAqB,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,GAAG,EChBlE,IAAMC,GAAc,IAClB9D,EAAgB4D,EAAY,ECF9B,IAAMG,GAAmB,IACvB/D,EAAgB,CAAC,OAAW,KAAM,IAAK,GAAQ,CAAC,ECClD,IAAMgE,GAAmC5R,GAAyB,CACvE,IAAMgF,EAAOlE,GAASd,CAAG,EAEzB,OAAO4N,EAAgB5I,CAAI,CAC7B,ECJO,IAAM6M,GAAqC7R,GAA2B,CAC3E,IAAMoB,EAASF,GAAWlB,CAAG,EAE7B,OAAO4N,EAAgBxM,CAAM,CAC/B,ECRO,IAAM0Q,EAAQ,CACnB,MACA,MACA,QACA,QACA,KACA,QACA,SACA,SACA,WACA,MACA,UACA,KACA,OACA,UACA,OACA,QACA,OACA,QACA,OACA,OACA,MACA,SACA,OACA,QACA,QACA,QACA,MACA,OACA,OACF,EAEaC,EAAQ,CACnB,OACA,SACA,UACA,OACA,SACA,SACA,OACA,SACA,MACA,OACA,UACA,MACA,OACA,OACA,QACA,QACA,MACF,EAEaC,GAAa,CACxB,WACA,gBACA,OACA,OACA,YACA,cACA,cACA,UACA,cACA,aACA,WACA,QACA,gBACA,WACF,EAEaC,GAAU,CACrB,eACA,kBACA,SACA,UACA,YACA,cACA,SACA,SACA,UACA,UACA,SACA,UACA,UACA,WACA,eACA,QACF,EAEaC,GAAa,CACx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","sourcesContent":["export const array = <U extends (...args: any) => any>(\n length: number,\n mapFn: U = (() => {}) as U\n): ReturnType<U>[] => {\n return Array.from({ length }, mapFn);\n};\n","export const uniqueValues = (arr: any[]) => {\n return [...new Set(arr)];\n};\n","import { uniqueValues } from \"./uniqueValues\";\n\n// TODO: optimize with maps?\nexport const arrayDiff = (arr1: any[], arr2: any[]) => {\n return uniqueValues(\n arr1\n .filter((value) => !arr2.includes(value))\n .concat(arr2.filter((value) => !arr1.includes(value)))\n );\n};\n","import { uniqueValues } from \"./uniqueValues\";\n\nexport const arrayIntersection = <T>(arr1: T[], arr2: T[]): T[] => {\n return uniqueValues(arr1.filter((value) => arr2.includes(value)));\n};\n","export const capitalize = (string: string) => {\n return string.charAt(0).toUpperCase() + string.slice(1).toLowerCase();\n};\n","export const chunkArray = <T>(array: T[], size: number): T[][] => {\n const chunks: T[][] = [];\n for (let i = 0; i < array.length; i += size) {\n chunks.push(array.slice(i, i + size));\n }\n return chunks;\n};\n","import { chunkArray } from \"./chunkArray\";\n\nexport const chunkedAll = async <T>(\n array: T[],\n chunkSize: number,\n fn: (chunk: T[]) => Promise<any>\n): Promise<any[]> => {\n const chunks = chunkArray(array, chunkSize);\n return await Promise.all(chunks.map(fn));\n};\n","import { chunkArray } from \"./chunkArray\";\n\n/**\n * @description Run a series of (async) functions in order and return the results\n * @param array\n * @param chunkSize\n * @param fn\n *\n */\nexport const chunkedAsync = async <T>(\n array: T[],\n chunkSize: number,\n fn: (chunk: T[], chunkIndex: number, chunks: T[][]) => Promise<any>\n): Promise<any[]> => {\n const chunkResults: any[] = [];\n\n const chunks = chunkArray(array, chunkSize);\n for (const [chunkIndex, chunk] of chunks.entries()) {\n const chunkResult = await fn(chunk, chunkIndex, chunks);\n chunkResults.push(chunkResult);\n }\n\n return chunkResults;\n};\n","export const sleep = (timeMs: number): Promise<void> => {\n return new Promise((resolve) => {\n setTimeout(resolve, timeMs);\n });\n};\n","import { sleep } from \"./sleep\";\n\n/**\n * @description Run a series of (async) functions with dynamic chunk sizes\n * @param array - Array to chunk\n * @param initialChunkSize - Size of initial chunk\n * @param fn - Function to run on each chunk\n * @param options.sleepTime - Time to sleep between each chunk\n * @param options.maxChunkDuration - Time to sleep between each chunk\n * @param options.chunkSizeStep - Step to increase/decrease chunk size (works only if maxChunkDuration is set)\n */\nexport const chunkedDynamic = async <T>(\n array: T[],\n initialChunkSize: number,\n fn: (chunk: T[], currentChunkSize: number) => Promise<any>,\n {\n sleepTime,\n maxChunkDuration,\n chunkSizeStep,\n }: {\n sleepTime?: number;\n maxChunkDuration?: number;\n chunkSizeStep?: number;\n } = {}\n): Promise<any[]> => {\n const chunkResults: any[] = [];\n\n let currentIndex = 0;\n let currentChunkSize = initialChunkSize;\n const step = chunkSizeStep || 1;\n\n while (currentIndex < array.length) {\n const start = performance.now();\n const chunk = array.slice(currentIndex, currentIndex + currentChunkSize);\n const chunkResult = await fn(chunk, currentChunkSize);\n chunkResults.push(chunkResult);\n if (sleepTime) await sleep(sleepTime);\n if (maxChunkDuration) {\n const duration = performance.now() - start;\n if (duration > maxChunkDuration) {\n if (currentChunkSize <= 1)\n // < is just for safety, should not go below 1\n await sleep(duration - maxChunkDuration); // Sleep the remaining time\n else {\n if (currentChunkSize - step < 1) currentChunkSize = 1;\n else currentChunkSize -= step; // decrease chunk size to slow down\n }\n } else {\n currentChunkSize += step; // increase chunk size to speed up\n }\n }\n\n currentIndex += currentChunkSize;\n }\n\n return chunkResults;\n};\n","export const clamp = ({\n number,\n min,\n max,\n}: {\n number: number;\n min: number;\n max: number;\n}) => {\n if (max < min && process.env.DEVERYTHING_WARNINGS) {\n console.warn(\"clamp: max < min\", { number, min, max });\n }\n\n if (number < min) {\n return min;\n }\n\n if (number > max) {\n return max;\n }\n\n return number;\n};\n","export const controlCharRegex = new RegExp(/\\p{C}/, \"gu\");\n\n// Charcodes:\n// [\n// 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 127, 129, 131, 133,\n// 135, 137, 139, 141, 143, 145, 147, 149, 151, 153, 155, 157, 159, 173, 888,\n// 896, 898, 907, 909, 930, 1328, 1367, 1419, 1424, 1480, 1482, 1484, 1486, 1515,\n// 1517, 1525, 1527, 1529, 1531, 1533, 1535, 1537, 1539, 1541, 1564, 1757, 1806,\n// 1867, 1970, 1972, 1974, 1976, 1978, 1980, 1982, 2043, 2094, 2111, 2140, 2143,\n// 2155, 2157, 2159, 2191, 2193, 2195, 2197, 2199, 2274, 2436, 2445, 2449, 2473,\n// 2481, 2483, 2485, 2490, 2501, 2505, 2511, 2513, 2515, 2517, 2520, 2522, 2526,\n// 2532, 2559, 2564, 2571, 2573, 2577, 2601, 2609, 2612, 2615, 2618, 2621, 2627,\n// 2629, 2633, 2638, 2640, 2642, 2644, 2646, 2648, 2653, 2655, 2657, 2659, 2661,\n// 2679, 2681, 2683, 2685, 2687, 2692, 2702, 2706, 2729, 2737, 2740, 2746, 2758,\n// 2762, 2766, 2769, 2771, 2773, 2775, 2777, 2779, 2781, 2783, 2788, 2802, 2804,\n// 2806, 2808, 2816, 2820, 2829, 2833, 2857, 2865, 2868, 2874, 2885, 2889, 2894,\n// 2896, 2898, 2900, 2904, 2906, 2910, 2916, 2936, 2938, 2940, 2942, 2944, 2948,\n// 2955, 2957, 2961, 2966, 2968, 2971, 2973, 2976, 2978, 2981, 2983, 2987, 2989,\n// 3002, 3004, 3011, 3013, 3017, 3022, 3025, 3027, 3029, 3032, 3034, 3036, 3038,\n// 3040, 3042, 3044, 3067, 3069, 3071, 3085, 3089, 3113, 3130, 3141, 3145, 3150,\n// 3152, 3154, 3156, 3159, 3163, 3166, 3172, 3184, 3186, 3188, 3190, 3213, 3217,\n// 3241, 3252, 3258, 3269, 3273, 3278, 3280, 3282, 3284, 3287, 3289, 3291, 3295,\n// 3300, 3312, 3316, 3318, 3320, 3322, 3324, 3326, 3341, 3345, 3397, 3401, 3408,\n// 3410, 3428, 3456, 3460, 3479, 3481, 3506, 3516, 3518, 3527, 3529, 3531, 3533,\n// 3541, 3543, 3552, 3554, 3556, 3568, 3573, 3575, 3577, 3579, 3581, 3583, 3643,\n// 3645, 3676, 3678, 3680, 3682, 3684, 3686, 3688, 3690, 3692, 3694, 3696, 3698,\n// 3700, 3702, 3704, 3706, 3708, 3710, 3712, 3715, 3717, 3723, 3748, 3750, 3774,\n// 3781, 3783, 3791, 3802, 3808, 3810, 3812, 3814, 3816, 3818, 3820, 3822, 3824,\n// 3826, 3828, 3830, 3832, 3834, 3836, 3838, 3912, 3949, 3951, 3992, 4029, 4045,\n// 4059, 4061, 4063, 4065, 4067, 4069, 4071, 4073, 4075, 4077, 4079, 4081, 4083,\n// 4085, 4087, 4089, 4091, 4093, 4095, 4294, 4296, 4298, 4300, 4302, 4681, 4686,\n// 4695, 4697, 4702, 4745, 4750, 4785, 4790, 4799, 4801, 4806, 4823, 4881, 4886,\n// 4955, 4989, 4991, 5018, 5020, 5022, 5110, 5118, 5789, 5791, 5881, 5883, 5885,\n// 5887, 5910, 5912, 5914, 5916, 5918, 5943, 5945, 5947, 5949, 5951, 5972, 5974,\n// 5976, 5978, 5980, 5982, 5997, 6001, 6004, 6006, 6008, 6010, 6012, 6014, 6110,\n// 6122, 6124, 6126, 6138, 6140, 6142, 6158, 6170, 6172, 6174, 6265, 6267, 6269,\n// 6271, 6315, 6317, 6319, 6390, 6392, 6394, 6396, 6398, 6431, 6444, 6446, 6460,\n// 6462, 6465, 6467, 6510, 6517, 6519, 6521, 6523, 6525, 6527, 6572, 6574, 6602,\n// 6604, 6606, 6619, 6621, 6684, 6751, 6781, 6794, 6796, 6798, 6810, 6812, 6814,\n// 6830, 6863, 6865, 6867, 6869, 6871, 6873, 6875, 6877, 6879, 6881, 6883, 6885,\n// 6887, 6889, 6891, 6893, 6895, 6897, 6899, 6901, 6903, 6905, 6907, 6909, 6911,\n// 6989, 6991, 7039, 7156, 7158, 7160, 7162, 7224, 7226, 7242, 7244, 7305, 7307,\n// 7309, 7311, 7355, 7368, 7370, 7372, 7374, 7419, 7421, 7423, 7958, 7966, 8006,\n// 8014, 8024, 8026, 8028, 8030, 8062, 8117, 8133, 8148, 8156, 8176, 8181, 8191,\n// 8203, 8205, 8207, 8234, 8236, 8238, 8288, 8290, 8292, 8294, 8296, 8298, 8300,\n// 8302, 8306, 8335, 8349, 8351, 8385, 8387, 8389, 8391, 8393, 8395, 8397, 8399,\n// 8433, 8435, 8437, 8439, 8441, 8443, 8445, 8447, 8588, 8590, 9255, 9257, 9259,\n// 9261, 9263, 9265, 9267, 9269, 9271, 9273, 9275, 9277, 9279, 9291, 9293, 9295,\n// 9297, 9299, 9301, 9303, 9305, 9307, 9309, 9311, 11124, 11158, 11508, 11510,\n// 11512, 11558, 11560, 11562, 11564, 11566, 11624, 11626, 11628, 11630, 11633,\n// 11635, 11637, 11639, 11641, 11643, 11645, 11671, 11673, 11675, 11677, 11679,\n// 11687, 11695, 11703, 11711, 11719, 11727, 11735, 11743, 11870, 11872, 11874,\n// 11876, 11878, 11880, 11882, 11884, 11886, 11888, 11890, 11892, 11894, 11896,\n// 11898, 11900, 11902, 11930, 12020, 12022, 12024, 12026, 12028, 12030, 12246,\n// 12248, 12250, 12252, 12254, 12256, 12258, 12260, 12262, 12264, 12266, 12268,\n// 12270, 12284, 12286, 12352, 12439, 12544, 12546, 12548, 12592, 12687, 12772,\n// 12774, 12776, 12778, 12780, 12782, 12831, 42125, 42127, 42183, 42185, 42187,\n// 42189, 42191, 42540, 42542, 42544, 42546, 42548, 42550, 42552, 42554, 42556,\n// 42558, 42744, 42746, 42748, 42750, 42955, 42957, 42959, 42962, 42964, 42970,\n// 42972, 42974, 42976, 42978, 42980, 42982, 42984, 42986, 42988, 42990, 42992,\n// 43053, 43055, 43066, 43068, 43070, 43128, 43130, 43132, 43134, 43206, 43208,\n// 43210, 43212, 43226, 43228, 43230, 43348, 43350, 43352, 43354, 43356, 43358,\n// 43389, 43391, 43470, 43482, 43484, 43519, 43575, 43577, 43579, 43581, 43583,\n// 43598, 43610, 43715, 43717, 43719, 43721, 43723, 43725, 43727, 43729, 43731,\n// 43733, 43735, 43737, 43767, 43769, 43771, 43773, 43775, 43783, 43791, 43799,\n// 43801, 43803, 43805, 43807, 43815, 43823, 43884, 43886, 44014, 44026, 44028,\n// 44030, 55204, 55206, 55208, 55210, 55212, 55214, 55239, 55241, 55292, 55294,\n// 55296, 55298, 55300, 55302, 55304, 55306, 55308, 55310, 55312, 55314, 55316,\n// 55318, 55320, 55322, 55324, 55326, 55328, 55330, 55332, 55334, 55336, 55338,\n// 55340, 55342, 55344, 55346, 55348, 55350, 55352, 55354, 55356, 55358, 55360,\n// 55362, 55364, 55366, 55368, 55370, 55372, 55374, 55376, 55378, 55380, 55382,\n// 55384, 55386, 55388, 55390, 55392, 55394, 55396, 55398, 55400, 55402, 55404,\n// 55406, 55408, 55410, 55412, 55414, 55416, 55418, 55420, 55422, 55424, 55426,\n// 55428, 55430, 55432, 55434, 55436, 55438, 55440, 55442, 55444, 55446, 55448,\n// 55450, 55452, 55454, 55456, 55458, 55460, 55462, 55464, 55466, 55468, 55470,\n// 55472, 55474, 55476, 55478, 55480, 55482, 55484, 55486, 55488, 55490, 55492,\n// 55494, 55496, 55498, 55500, 55502, 55504, 55506, 55508, 55510, 55512, 55514,\n// 55516, 55518, 55520, 55522, 55524, 55526, 55528, 55530, 55532, 55534, 55536,\n// 55538, 55540, 55542, 55544, 55546, 55548, 55550, 55552, 55554, 55556, 55558,\n// 55560, 55562, 55564, 55566, 55568, 55570, 55572, 55574, 55576, 55578, 55580,\n// 55582, 55584, 55586, 55588, 55590, 55592, 55594, 55596, 55598, 55600, 55602,\n// 55604, 55606, 55608, 55610, 55612, 55614, 55616, 55618, 55620, 55622, 55624,\n// 55626, 55628, 55630, 55632, 55634, 55636, 55638, 55640, 55642, 55644, 55646,\n// 55648, 55650, 55652, 55654, 55656, 55658, 55660, 55662, 55664, 55666, 55668,\n// 55670, 55672, 55674, 55676, 55678, 55680, 55682, 55684, 55686, 55688, 55690,\n// 55692, 55694, 55696, 55698, 55700, 55702, 55704, 55706, 55708, 55710, 55712,\n// 55714, 55716, 55718, 55720, 55722, 55724, 55726, 55728, 55730, 55732, 55734,\n// 55736, 55738, 55740, 55742, 55744, 55746, 55748, 55750, 55752, 55754, 55756,\n// 55758, 55760, 55762, 55764, 55766, 55768, 55770, 55772, 55774, 55776, 55778,\n// 55780, 55782, 55784, 55786, 55788, 55790, 55792, 55794, 55796, 55798, 55800,\n// 55802, 55804, 55806, 55808, 55810, 55812, 55814, 55816, 55818, 55820, 55822,\n// 55824, 55826, 55828, 55830, 55832, 55834, 55836, 55838, 55840, 55842, 55844,\n// 55846, 55848, 55850, 55852, 55854, 55856, 55858, 55860, 55862, 55864, 55866,\n// 55868, 55870, 55872, 55874, 55876, 55878, 55880, 55882, 55884, 55886, 55888,\n// 55890, 55892, 55894, 55896, 55898, 55900, 55902, 55904, 55906, 55908, 55910,\n// 55912, 55914, 55916, 55918, 55920, 55922, 55924, 55926, 55928, 55930, 55932,\n// 55934, 55936, 55938, 55940, 55942, 55944, 55946, 55948, 55950, 55952, 55954,\n// 55956, 55958, 55960, 55962, 55964, 55966, 55968, 55970, 55972, 55974, 55976,\n// 55978, 55980, 55982, 55984, 55986, 55988, 55990, 55992, 55994, 55996, 55998,\n// 56000, 56002, 56004, 56006, 56008, 56010, 56012, 56014, 56016, 56018, 56020,\n// 56022, 56024, 56026, 56028, 56030, 56032, 56034, 56036, 56038, 56040, 56042,\n// 56044, 56046, 56048, 56050, 56052, 56054, 56056, 56058, 56060, 56062, 56064,\n// 56066, 56068, 56070, 56072, 56074, 56076, 56078, 56080, 56082, 56084, 56086,\n// 56088, 56090, 56092, 56094, 56096, 56098, 56100, 56102, 56104, 56106, 56108,\n// 56110, 56112, 56114, 56116, 56118, 56120, 56122, 56124, 56126, 56128, 56130,\n// 56132, 56134, 56136, 56138, 56140, 56142, 56144, 56146, 56148, 56150, 56152,\n// 56154, 56156, 56158, 56160, 56162, 56164, 56166, 56168, 56170, 56172, 56174,\n// 56176, 56178, 56180, 56182, 56184, 56186, 56188, 56190, 56192, 56194, 56196,\n// 56198, 56200, 56202, 56204, 56206, 56208, 56210, 56212, 56214, 56216, 56218,\n// 56220, 56222, 56224, 56226, 56228, 56230, 56232, 56234, 56236, 56238, 56240,\n// 56242, 56244, 56246, 56248, 56250, 56252, 56254, 56256, 56258, 56260, 56262,\n// 56264, 56266, 56268, 56270, 56272, 56274, 56276, 56278, 56280, 56282, 56284,\n// 56286, 56288, 56290, 56292, 56294, 56296, 56298, 56300, 56302, 56304, 56306,\n// 56308, 56310, 56312, 56314, 56316, 56318, 56320, 56322, 56324, 56326, 56328,\n// 56330, 56332, 56334, 56336, 56338, 56340, 56342, 56344, 56346, 56348, 56350,\n// 56352, 56354, 56356, 56358, 56360, 56362, 56364, 56366, 56368, 56370, 56372,\n// 56374, 56376, 56378, 56380, 56382, 56384, 56386, 56388, 56390, 56392, 56394,\n// 56396, 56398, 56400, 56402, 56404, 56406, 56408, 56410, 56412, 56414, 56416,\n// 56418, 56420, 56422, 56424, 56426, 56428, 56430, 56432, 56434, 56436, 56438,\n// 56440, 56442, 56444, 56446, 56448, 56450, 56452, 56454, 56456, 56458, 56460,\n// 56462, 56464, 56466, 56468, 56470, 56472, 56474, 56476, 56478, 56480, 56482,\n// 56484, 56486, 56488, 56490, 56492, 56494, 56496, 56498, 56500, 56502, 56504,\n// 56506, 56508, 56510, 56512, 56514, 56516, 56518, 56520, 56522, 56524, 56526,\n// 56528, 56530, 56532, 56534, 56536, 56538, 56540, 56542, 56544, 56546, 56548,\n// 56550, 56552, 56554, 56556, 56558, 56560, 56562, 56564, 56566, 56568, 56570,\n// 56572, 56574, 56576, 56578, 56580, 56582, 56584, 56586, 56588, 56590, 56592,\n// 56594, 56596, 56598, 56600, 56602, 56604, 56606, 56608, 56610, 56612, 56614,\n// 56616, 56618, 56620, 56622, 56624, 56626, 56628, 56630, 56632, 56634, 56636,\n// 56638, 56640, 56642, 56644, 56646, 56648, 56650, 56652, 56654, 56656, 56658,\n// 56660, 56662, 56664, 56666, 56668, 56670, 56672, 56674, 56676, 56678, 56680,\n// 56682, 56684, 56686, 56688, 56690, 56692, 56694, 56696, 56698, 56700, 56702,\n// 56704, 56706, 56708, 56710, 56712, 56714, 56716, 56718, 56720, 56722, 56724,\n// 56726, 56728, 56730, 56732, 56734, 56736, 56738, 56740, 56742, 56744, 56746,\n// 56748, 56750, 56752, 56754, 56756, 56758, 56760, 56762, 56764, 56766, 56768,\n// 56770, 56772, 56774, 56776, 56778, 56780, 56782, 56784, 56786, 56788, 56790,\n// 56792, 56794, 56796, 56798, 56800, 56802, 56804, 56806, 56808, 56810, 56812,\n// 56814, 56816, 56818, 56820, 56822, 56824, 56826, 56828, 56830, 56832, 56834,\n// 56836, 56838, 56840, 56842, 56844, 56846, 56848, 56850, 56852, 56854, 56856,\n// 56858, 56860, 56862, 56864, 56866, 56868, 56870, 56872, 56874, 56876, 56878,\n// 56880, 56882, 56884, 56886, 56888, 56890, 56892, 56894, 56896, 56898, 56900,\n// 56902, 56904, 56906, 56908, 56910, 56912, 56914, 56916, 56918, 56920, 56922,\n// 56924, 56926, 56928, 56930, 56932, 56934, 56936, 56938, 56940, 56942, 56944,\n// 56946, 56948, 56950, 56952, 56954, 56956, 56958, 56960, 56962, 56964, 56966,\n// 56968, 56970, 56972, 56974, 56976, 56978, 56980, 56982, 56984, 56986, 56988,\n// 56990, 56992, 56994, 56996, 56998, 57000, 57002, 57004, 57006, 57008, 57010,\n// 57012, 57014, 57016, 57018, 57020, 57022, 57024, 57026, 57028, 57030, 57032,\n// 57034, 57036, 57038, 57040, 57042, 57044, 57046, 57048, 57050, 57052, 57054,\n// 57056, 57058, 57060, 57062, 57064, 57066, 57068, 57070, 57072, 57074, 57076,\n// 57078, 57080, 57082, 57084, 57086, 57088, 57090, 57092, 57094, 57096, 57098,\n// 57100, 57102, 57104, 57106, 57108, 57110, 57112, 57114, 57116, 57118, 57120,\n// 57122, 57124, 57126, 57128, 57130, 57132, 57134, 57136, 57138, 57140, 57142,\n// 57144, 57146, 57148, 57150, 57152, 57154, 57156, 57158, 57160, 57162, 57164,\n// 57166, 57168, 57170, 57172, 57174, 57176, 57178, 57180, 57182, 57184, 57186,\n// 57188, 57190, 57192, 57194, 57196, 57198, 57200, 57202, 57204, 57206, 57208,\n// 57210, 57212, 57214, 57216, 57218, 57220, 57222, 57224, 57226, 57228, 57230,\n// 57232, 57234, 57236, 57238, 57240, 57242, 57244, 57246, 57248, 57250, 57252,\n// 57254, 57256, 57258, 57260, 57262, 57264, 57266, 57268, 57270, 57272, 57274,\n// 57276, 57278, 57280, 57282, 57284, 57286, 57288, 57290, 57292, 57294, 57296,\n// 57298, 57300, 57302, 57304, 57306, 57308, 57310, 57312, 57314, 57316, 57318,\n// 57320, 57322, 57324, 57326, 57328, 57330, 57332, 57334, 57336, 57338, 57340,\n// 57342, 57344, 57346, 57348, 57350, 57352, 57354, 57356, 57358, 57360, 57362,\n// 57364, 57366, 57368, 57370, 57372, 57374, 57376, 57378, 57380, 57382, 57384,\n// 57386, 57388, 57390, 57392, 57394, 57396, 57398, 57400, 57402, 57404, 57406,\n// 57408, 57410, 57412, 57414, 57416, 57418, 57420, 57422, 57424, 57426, 57428,\n// 57430, 57432, 57434, 57436, 57438, 57440, 57442, 57444, 57446, 57448, 57450,\n// 57452, 57454, 57456, 57458, 57460, 57462, 57464, 57466, 57468, 57470, 57472,\n// 57474, 57476, 57478, 57480, 57482, 57484, 57486, 57488, 57490, 57492, 57494,\n// 57496, 57498, 57500, 57502, 57504, 57506, 57508, 57510, 57512, 57514, 57516,\n// 57518, 57520, 57522, 57524, 57526, 57528, 57530, 57532, 57534, 57536, 57538,\n// 57540, 57542, 57544, 57546, 57548, 57550, 57552, 57554, 57556, 57558, 57560,\n// 57562, 57564, 57566, 57568, 57570, 57572, 57574, 57576, 57578, 57580, 57582,\n// 57584, 57586, 57588, 57590, 57592, 57594, 57596, 57598, 57600, 57602, 57604,\n// 57606, 57608, 57610, 57612, 57614, 57616, 57618, 57620, 57622, 57624, 57626,\n// 57628, 57630, 57632, 57634, 57636, 57638, 57640, 57642, 57644, 57646, 57648,\n// 57650, 57652, 57654, 57656, 57658, 57660, 57662, 57664, 57666, 57668, 57670,\n// 57672, 57674, 57676, 57678, 57680, 57682, 57684, 57686, 57688, 57690, 57692,\n// 57694, 57696, 57698, 57700, 57702, 57704, 57706, 57708, 57710, 57712, 57714,\n// 57716, 57718, 57720, 57722, 57724, 57726, 57728, 57730, 57732, 57734, 57736,\n// 57738, 57740, 57742, 57744, 57746, 57748, 57750, 57752, 57754, 57756, 57758,\n// 57760, 57762, 57764, 57766, 57768, 57770, 57772, 57774, 57776, 57778, 57780,\n// 57782, 57784, 57786, 57788, 57790, 57792, 57794, 57796, 57798, 57800, 57802,\n// 57804, 57806, 57808, 57810, 57812, 57814, 57816, 57818, 57820, 57822, 57824,\n// 57826, 57828, 57830, 57832, 57834, 57836, 57838, 57840, 57842, 57844, 57846,\n// 57848, 57850, 57852, 57854, 57856, 57858, 57860, 57862, 57864, 57866, 57868,\n// 57870, 57872, 57874, 57876, 57878, 57880, 57882, 57884, 57886, 57888, 57890,\n// 57892, 57894, 57896, 57898, 57900, 57902, 57904, 57906, 57908, 57910, 57912,\n// 57914, 57916, 57918, 57920, 57922, 57924, 57926, 57928, 57930, 57932, 57934,\n// 57936, 57938, 57940, 57942, 57944, 57946, 57948, 57950, 57952, 57954, 57956,\n// 57958, 57960, 57962, 57964, 57966, 57968, 57970, 57972, 57974, 57976, 57978,\n// 57980, 57982, 57984, 57986, 57988, 57990, 57992, 57994, 57996, 57998, 58000,\n// 58002, 58004, 58006, 58008, 58010, 58012, 58014, 58016, 58018, 58020, 58022,\n// 58024, 58026, 58028, 58030, 58032, 58034, 58036, 58038, 58040, 58042, 58044,\n// 58046, 58048, 58050, 58052, 58054, 58056, 58058, 58060, 58062, 58064, 58066,\n// 58068, 58070, 58072, 58074, 58076, 58078, 58080, 58082, 58084, 58086, 58088,\n// 58090, 58092, 58094, 58096, 58098, 58100, 58102, 58104, 58106, 58108, 58110,\n// 58112, 58114, 58116, 58118, 58120, 58122, 58124, 58126, 58128, 58130, 58132,\n// 58134, 58136, 58138, 58140, 58142, 58144, 58146, 58148, 58150, 58152, 58154,\n// 58156, 58158, 58160, 58162, 58164, 58166, 58168, 58170, 58172, 58174, 58176,\n// 58178, 58180, 58182, 58184, 58186, 58188, 58190, 58192, 58194, 58196, 58198,\n// 58200, 58202, 58204, 58206, 58208, 58210, 58212, 58214, 58216, 58218, 58220,\n// 58222, 58224, 58226, 58228, 58230, 58232, 58234, 58236, 58238, 58240, 58242,\n// 58244, 58246, 58248, 58250, 58252, 58254, 58256, 58258, 58260, 58262, 58264,\n// 58266, 58268, 58270, 58272, 58274, 58276, 58278, 58280, 58282, 58284, 58286,\n// 58288, 58290, 58292, 58294, 58296, 58298, 58300, 58302, 58304, 58306, 58308,\n// 58310, 58312, 58314, 58316, 58318, 58320, 58322, 58324, 58326, 58328, 58330,\n// 58332, 58334, 58336, 58338, 58340, 58342, 58344, 58346, 58348, 58350, 58352,\n// 58354, 58356, 58358, 58360, 58362, 58364, 58366, 58368, 58370, 58372, 58374,\n// 58376, 58378, 58380, 58382, 58384, 58386, 58388, 58390, 58392, 58394, 58396,\n// 58398, 58400, 58402, 58404, 58406, 58408, 58410, 58412, 58414, 58416, 58418,\n// 58420, 58422, 58424, 58426, 58428, 58430, 58432, 58434, 58436, 58438, 58440,\n// 58442, 58444, 58446, 58448, 58450, 58452, 58454, 58456, 58458, 58460, 58462,\n// 58464, 58466, 58468, 58470, 58472, 58474, 58476, 58478, 58480, 58482, 58484,\n// 58486, 58488, 58490, 58492, 58494, 58496, 58498, 58500, 58502, 58504, 58506,\n// 58508, 58510, 58512, 58514, 58516, 58518, 58520, 58522, 58524, 58526, 58528,\n// 58530, 58532, 58534, 58536, 58538, 58540, 58542, 58544, 58546, 58548, 58550,\n// 58552, 58554, 58556, 58558, 58560, 58562, 58564, 58566, 58568, 58570, 58572,\n// 58574, 58576, 58578, 58580, 58582, 58584, 58586, 58588, 58590, 58592, 58594,\n// 58596, 58598, 58600, 58602, 58604, 58606, 58608, 58610, 58612, 58614, 58616,\n// 58618, 58620, 58622, 58624, 58626, 58628, 58630, 58632, 58634, 58636, 58638,\n// 58640, 58642, 58644, 58646, 58648, 58650, 58652, 58654, 58656, 58658, 58660,\n// 58662, 58664, 58666, 58668, 58670, 58672, 58674, 58676, 58678, 58680, 58682,\n// 58684, 58686, 58688, 58690, 58692, 58694, 58696, 58698, 58700, 58702, 58704,\n// 58706, 58708, 58710, 58712, 58714, 58716, 58718, 58720, 58722, 58724, 58726,\n// 58728, 58730, 58732, 58734, 58736, 58738, 58740, 58742, 58744, 58746, 58748,\n// 58750, 58752, 58754, 58756, 58758, 58760, 58762, 58764, 58766, 58768, 58770,\n// 58772, 58774, 58776, 58778, 58780, 58782, 58784, 58786, 58788, 58790, 58792,\n// 58794, 58796, 58798, 58800, 58802, 58804, 58806, 58808, 58810, 58812, 58814,\n// 58816, 58818, 58820, 58822, 58824, 58826, 58828, 58830, 58832, 58834, 58836,\n// 58838, 58840, 58842, 58844, 58846, 58848, 58850, 58852, 58854, 58856, 58858,\n// 58860, 58862, 58864, 58866, 58868, 58870, 58872, 58874, 58876, 58878, 58880,\n// 58882, 58884, 58886, 58888, 58890, 58892, 58894, 58896, 58898, 58900, 58902,\n// 58904, 58906, 58908, 58910, 58912, 58914, 58916, 58918, 58920, 58922, 58924,\n// 58926, 58928, 58930, 58932, 58934, 58936, 58938, 58940, 58942, 58944, 58946,\n// 58948, 58950, 58952, 58954, 58956, 58958, 58960, 58962, 58964, 58966, 58968,\n// 58970, 58972, 58974, 58976, 58978, 58980, 58982, 58984, 58986, 58988, 58990,\n// 58992, 58994, 58996, 58998, 59000, 59002, 59004, 59006, 59008, 59010, 59012,\n// 59014, 59016, 59018, 59020, 59022, 59024, 59026, 59028, 59030, 59032, 59034,\n// 59036, 59038, 59040, 59042, 59044, 59046, 59048, 59050, 59052, 59054, 59056,\n// 59058, 59060, 59062, 59064, 59066, 59068, 59070, 59072, 59074, 59076, 59078,\n// 59080, 59082, 59084, 59086, 59088, 59090, 59092, 59094, 59096, 59098, 59100,\n// 59102, 59104, 59106, 59108, 59110, 59112, 59114, 59116, 59118, 59120, 59122,\n// 59124, 59126, 59128, 59130, 59132, 59134, 59136, 59138, 59140, 59142, 59144,\n// 59146, 59148, 59150, 59152, 59154, 59156, 59158, 59160, 59162, 59164, 59166,\n// 59168, 59170, 59172, 59174, 59176, 59178, 59180, 59182, 59184, 59186, 59188,\n// 59190, 59192, 59194, 59196, 59198, 59200, 59202, 59204, 59206, 59208, 59210,\n// 59212, 59214, 59216, 59218, 59220, 59222, 59224, 59226, 59228, 59230, 59232,\n// 59234, 59236, 59238, 59240, 59242, 59244, 59246, 59248, 59250, 59252, 59254,\n// 59256, 59258, 59260, 59262, 59264, 59266, 59268, 59270, 59272, 59274, 59276,\n// 59278, 59280, 59282, 59284, 59286, 59288, 59290, 59292, 59294, 59296, 59298,\n// 59300, 59302, 59304, 59306, 59308, 59310, 59312, 59314, 59316, 59318, 59320,\n// 59322, 59324, 59326, 59328, 59330, 59332, 59334, 59336, 59338, 59340, 59342,\n// 59344, 59346, 59348, 59350, 59352, 59354, 59356, 59358, 59360, 59362, 59364,\n// 59366, 59368, 59370, 59372, 59374, 59376, 59378, 59380, 59382, 59384, 59386,\n// 59388, 59390, 59392, 59394, 59396, 59398, 59400, 59402, 59404, 59406, 59408,\n// 59410, 59412, 59414, 59416, 59418, 59420, 59422, 59424, 59426, 59428, 59430,\n// 59432, 59434, 59436, 59438, 59440, 59442, 59444, 59446, 59448, 59450, 59452,\n// 59454, 59456, 59458, 59460, 59462, 59464, 59466, 59468, 59470, 59472, 59474,\n// 59476, 59478, 59480, 59482, 59484, 59486, 59488, 59490, 59492, 59494, 59496,\n// 59498, 59500, 59502, 59504, 59506, 59508, 59510, 59512, 59514, 59516, 59518,\n// 59520, 59522, 59524, 59526, 59528, 59530, 59532, 59534, 59536, 59538, 59540,\n// 59542, 59544, 59546, 59548, 59550, 59552, 59554, 59556, 59558, 59560, 59562,\n// 59564, 59566, 59568, 59570, 59572, 59574, 59576, 59578, 59580, 59582, 59584,\n// 59586, 59588, 59590, 59592, 59594, 59596, 59598, 59600, 59602, 59604, 59606,\n// 59608, 59610, 59612, 59614, 59616, 59618, 59620, 59622, 59624, 59626, 59628,\n// 59630, 59632, 59634, 59636, 59638, 59640, 59642, 59644, 59646, 59648, 59650,\n// 59652, 59654, 59656, 59658, 59660, 59662, 59664, 59666, 59668, 59670, 59672,\n// 59674, 59676, 59678, 59680, 59682, 59684, 59686, 59688, 59690, 59692, 59694,\n// 59696, 59698, 59700, 59702, 59704, 59706, 59708, 59710, 59712, 59714, 59716,\n// 59718, 59720, 59722, 59724, 59726, 59728, 59730, 59732, 59734, 59736, 59738,\n// 59740, 59742, 59744, 59746, 59748, 59750, 59752, 59754, 59756, 59758, 59760,\n// 59762, 59764, 59766, 59768, 59770, 59772, 59774, 59776, 59778, 59780, 59782,\n// 59784, 59786, 59788, 59790, 59792, 59794, 59796, 59798, 59800, 59802, 59804,\n// 59806, 59808, 59810, 59812, 59814, 59816, 59818, 59820, 59822, 59824, 59826,\n// 59828, 59830, 59832, 59834, 59836, 59838, 59840, 59842, 59844, 59846, 59848,\n// 59850, 59852, 59854, 59856, 59858, 59860, 59862, 59864, 59866, 59868, 59870,\n// 59872, 59874, 59876, 59878, 59880, 59882, 59884, 59886, 59888, 59890, 59892,\n// 59894, 59896, 59898, 59900, 59902, 59904, 59906, 59908, 59910, 59912, 59914,\n// 59916, 59918, 59920, 59922, 59924, 59926, 59928, 59930, 59932, 59934, 59936,\n// 59938, 59940, 59942, 59944, 59946, 59948, 59950, 59952, 59954, 59956, 59958,\n// 59960, 59962, 59964, 59966, 59968, 59970, 59972, 59974, 59976, 59978, 59980,\n// 59982, 59984, 59986, 59988, 59990, 59992, 59994, 59996, 59998, 60000, 60002,\n// 60004, 60006, 60008, 60010, 60012, 60014, 60016, 60018, 60020, 60022, 60024,\n// 60026, 60028, 60030, 60032, 60034, 60036, 60038, 60040, 60042, 60044, 60046,\n// 60048, 60050, 60052, 60054, 60056, 60058, 60060, 60062, 60064, 60066, 60068,\n// 60070, 60072, 60074, 60076, 60078, 60080, 60082, 60084, 60086, 60088, 60090,\n// 60092, 60094, 60096, 60098, 60100, 60102, 60104, 60106, 60108, 60110, 60112,\n// 60114, 60116, 60118, 60120, 60122, 60124, 60126, 60128, 60130, 60132, 60134,\n// 60136, 60138, 60140, 60142, 60144, 60146, 60148, 60150, 60152, 60154, 60156,\n// 60158, 60160, 60162, 60164, 60166, 60168, 60170, 60172, 60174, 60176, 60178,\n// 60180, 60182, 60184, 60186, 60188, 60190, 60192, 60194, 60196, 60198, 60200,\n// 60202, 60204, 60206, 60208, 60210, 60212, 60214, 60216, 60218, 60220, 60222,\n// 60224, 60226, 60228, 60230, 60232, 60234, 60236, 60238, 60240, 60242, 60244,\n// 60246, 60248, 60250, 60252, 60254, 60256, 60258, 60260, 60262, 60264, 60266,\n// 60268, 60270, 60272, 60274, 60276, 60278, 60280, 60282, 60284, 60286, 60288,\n// 60290, 60292, 60294, 60296, 60298, 60300, 60302, 60304, 60306, 60308, 60310,\n// 60312, 60314, 60316, 60318, 60320, 60322, 60324, 60326, 60328, 60330, 60332,\n// 60334, 60336, 60338, 60340, 60342, 60344, 60346, 60348, 60350, 60352, 60354,\n// 60356, 60358, 60360, 60362, 60364, 60366, 60368, 60370, 60372, 60374, 60376,\n// 60378, 60380, 60382, 60384, 60386, 60388, 60390, 60392, 60394, 60396, 60398,\n// 60400, 60402, 60404, 60406, 60408, 60410, 60412, 60414, 60416, 60418, 60420,\n// 60422, 60424, 60426, 60428, 60430, 60432, 60434, 60436, 60438, 60440, 60442,\n// 60444, 60446, 60448, 60450, 60452, 60454, 60456, 60458, 60460, 60462, 60464,\n// 60466, 60468, 60470, 60472, 60474, 60476, 60478, 60480, 60482, 60484, 60486,\n// 60488, 60490, 60492, 60494, 60496, 60498, 60500, 60502, 60504, 60506, 60508,\n// 60510, 60512, 60514, 60516, 60518, 60520, 60522, 60524, 60526, 60528, 60530,\n// 60532, 60534, 60536, 60538, 60540, 60542, 60544, 60546, 60548, 60550, 60552,\n// 60554, 60556, 60558, 60560, 60562, 60564, 60566, 60568, 60570, 60572, 60574,\n// 60576, 60578, 60580, 60582, 60584, 60586, 60588, 60590, 60592, 60594, 60596,\n// 60598, 60600, 60602, 60604, 60606, 60608, 60610, 60612, 60614, 60616, 60618,\n// 60620, 60622, 60624, 60626, 60628, 60630, 60632, 60634, 60636, 60638, 60640,\n// 60642, 60644, 60646, 60648, 60650, 60652, 60654, 60656, 60658, 60660, 60662,\n// 60664, 60666, 60668, 60670, 60672, 60674, 60676, 60678, 60680, 60682, 60684,\n// 60686, 60688, 60690, 60692, 60694, 60696, 60698, 60700, 60702, 60704, 60706,\n// 60708, 60710, 60712, 60714, 60716, 60718, 60720, 60722, 60724, 60726, 60728,\n// 60730, 60732, 60734, 60736, 60738, 60740, 60742, 60744, 60746, 60748, 60750,\n// 60752, 60754, 60756, 60758, 60760, 60762, 60764, 60766, 60768, 60770, 60772,\n// 60774, 60776, 60778, 60780, 60782, 60784, 60786, 60788, 60790, 60792, 60794,\n// 60796, 60798, 60800, 60802, 60804, 60806, 60808, 60810, 60812, 60814, 60816,\n// 60818, 60820, 60822, 60824, 60826, 60828, 60830, 60832, 60834, 60836, 60838,\n// 60840, 60842, 60844, 60846, 60848, 60850, 60852, 60854, 60856, 60858, 60860,\n// 60862, 60864, 60866, 60868, 60870, 60872, 60874, 60876, 60878, 60880, 60882,\n// 60884, 60886, 60888, 60890, 60892, 60894, 60896, 60898, 60900, 60902, 60904,\n// 60906, 60908, 60910, 60912, 60914, 60916, 60918, 60920, 60922, 60924, 60926,\n// 60928, 60930, 60932, 60934, 60936, 60938, 60940, 60942, 60944, 60946, 60948,\n// 60950, 60952, 60954, 60956, 60958, 60960, 60962, 60964, 60966, 60968, 60970,\n// 60972, 60974, 60976, 60978, 60980, 60982, 60984, 60986, 60988, 60990, 60992,\n// 60994, 60996, 60998, 61000, 61002, 61004, 61006, 61008, 61010, 61012, 61014,\n// 61016, 61018, 61020, 61022, 61024, 61026, 61028, 61030, 61032, 61034, 61036,\n// 61038, 61040, 61042, 61044, 61046, 61048, 61050, 61052, 61054, 61056, 61058,\n// 61060, 61062, 61064, 61066, 61068, 61070, 61072, 61074, 61076, 61078, 61080,\n// 61082, 61084, 61086, 61088, 61090, 61092, 61094, 61096, 61098, 61100, 61102,\n// 61104, 61106, 61108, 61110, 61112, 61114, 61116, 61118, 61120, 61122, 61124,\n// 61126, 61128, 61130, 61132, 61134, 61136, 61138, 61140, 61142, 61144, 61146,\n// 61148, 61150, 61152, 61154, 61156, 61158, 61160, 61162, 61164, 61166, 61168,\n// 61170, 61172, 61174, 61176, 61178, 61180, 61182, 61184, 61186, 61188, 61190,\n// 61192, 61194, 61196, 61198, 61200, 61202, 61204, 61206, 61208, 61210, 61212,\n// 61214, 61216, 61218, 61220, 61222, 61224, 61226, 61228, 61230, 61232, 61234,\n// 61236, 61238, 61240, 61242, 61244, 61246, 61248, 61250, 61252, 61254, 61256,\n// 61258, 61260, 61262, 61264, 61266, 61268, 61270, 61272, 61274, 61276, 61278,\n// 61280, 61282, 61284, 61286, 61288, 61290, 61292, 61294, 61296, 61298, 61300,\n// 61302, 61304, 61306, 61308, 61310, 61312, 61314, 61316, 61318, 61320, 61322,\n// 61324, 61326, 61328, 61330, 61332, 61334, 61336, 61338, 61340, 61342, 61344,\n// 61346, 61348, 61350, 61352, 61354, 61356, 61358, 61360, 61362, 61364, 61366,\n// 61368, 61370, 61372, 61374, 61376, 61378, 61380, 61382, 61384, 61386, 61388,\n// 61390, 61392, 61394, 61396, 61398, 61400, 61402, 61404, 61406, 61408, 61410,\n// 61412, 61414, 61416, 61418, 61420, 61422, 61424, 61426, 61428, 61430, 61432,\n// 61434, 61436, 61438, 61440, 61442, 61444, 61446, 61448, 61450, 61452, 61454,\n// 61456, 61458, 61460, 61462, 61464, 61466, 61468, 61470, 61472, 61474, 61476,\n// 61478, 61480, 61482, 61484, 61486, 61488, 61490, 61492, 61494, 61496, 61498,\n// 61500, 61502, 61504, 61506, 61508, 61510, 61512, 61514, 61516, 61518, 61520,\n// 61522, 61524, 61526, 61528, 61530, 61532, 61534, 61536, 61538, 61540, 61542,\n// 61544, 61546, 61548, 61550, 61552, 61554, 61556, 61558, 61560, 61562, 61564,\n// 61566, 61568, 61570, 61572, 61574, 61576, 61578, 61580, 61582, 61584, 61586,\n// 61588, 61590, 61592, 61594, 61596, 61598, 61600, 61602, 61604, 61606, 61608,\n// 61610, 61612, 61614, 61616, 61618, 61620, 61622, 61624, 61626, 61628, 61630,\n// 61632, 61634, 61636, 61638, 61640, 61642, 61644, 61646, 61648, 61650, 61652,\n// 61654, 61656, 61658, 61660, 61662, 61664, 61666, 61668, 61670, 61672, 61674,\n// 61676, 61678, 61680, 61682, 61684, 61686, 61688, 61690, 61692, 61694, 61696,\n// 61698, 61700, 61702, 61704, 61706, 61708, 61710, 61712, 61714, 61716, 61718,\n// 61720, 61722, 61724, 61726, 61728, 61730, 61732, 61734, 61736, 61738, 61740,\n// 61742, 61744, 61746, 61748, 61750, 61752, 61754, 61756, 61758, 61760, 61762,\n// 61764, 61766, 61768, 61770, 61772, 61774, 61776, 61778, 61780, 61782, 61784,\n// 61786, 61788, 61790, 61792, 61794, 61796, 61798, 61800, 61802, 61804, 61806,\n// 61808, 61810, 61812, 61814, 61816, 61818, 61820, 61822, 61824, 61826, 61828,\n// 61830, 61832, 61834, 61836, 61838, 61840, 61842, 61844, 61846, 61848, 61850,\n// 61852, 61854, 61856, 61858, 61860, 61862, 61864, 61866, 61868, 61870, 61872,\n// 61874, 61876, 61878, 61880, 61882, 61884, 61886, 61888, 61890, 61892, 61894,\n// 61896, 61898, 61900, 61902, 61904, 61906, 61908, 61910, 61912, 61914, 61916,\n// 61918, 61920, 61922, 61924, 61926, 61928, 61930, 61932, 61934, 61936, 61938,\n// 61940, 61942, 61944, 61946, 61948, 61950, 61952, 61954, 61956, 61958, 61960,\n// 61962, 61964, 61966, 61968, 61970, 61972, 61974, 61976, 61978, 61980, 61982,\n// 61984, 61986, 61988, 61990, 61992, 61994, 61996, 61998, 62000, 62002, 62004,\n// 62006, 62008, 62010, 62012, 62014, 62016, 62018, 62020, 62022, 62024, 62026,\n// 62028, 62030, 62032, 62034, 62036, 62038, 62040, 62042, 62044, 62046, 62048,\n// 62050, 62052, 62054, 62056, 62058, 62060, 62062, 62064, 62066, 62068, 62070,\n// 62072, 62074, 62076, 62078, 62080, 62082, 62084, 62086, 62088, 62090, 62092,\n// 62094, 62096, 62098, 62100, 62102, 62104, 62106, 62108, 62110, 62112, 62114,\n// 62116, 62118, 62120, 62122, 62124, 62126, 62128, 62130, 62132, 62134, 62136,\n// 62138, 62140, 62142, 62144, 62146, 62148, 62150, 62152, 62154, 62156, 62158,\n// 62160, 62162, 62164, 62166, 62168, 62170, 62172, 62174, 62176, 62178, 62180,\n// 62182, 62184, 62186, 62188, 62190, 62192, 62194, 62196, 62198, 62200, 62202,\n// 62204, 62206, 62208, 62210, 62212, 62214, 62216, 62218, 62220, 62222, 62224,\n// 62226, 62228, 62230, 62232, 62234, 62236, 62238, 62240, 62242, 62244, 62246,\n// 62248, 62250, 62252, 62254, 62256, 62258, 62260, 62262, 62264, 62266, 62268,\n// 62270, 62272, 62274, 62276, 62278, 62280, 62282, 62284, 62286, 62288, 62290,\n// 62292, 62294, 62296, 62298, 62300, 62302, 62304, 62306, 62308, 62310, 62312,\n// 62314, 62316, 62318, 62320, 62322, 62324, 62326, 62328, 62330, 62332, 62334,\n// 62336, 62338, 62340, 62342, 62344, 62346, 62348, 62350, 62352, 62354, 62356,\n// 62358, 62360, 62362, 62364, 62366, 62368, 62370, 62372, 62374, 62376, 62378,\n// 62380, 62382, 62384, 62386, 62388, 62390, 62392, 62394, 62396, 62398, 62400,\n// 62402, 62404, 62406, 62408, 62410, 62412, 62414, 62416, 62418, 62420, 62422,\n// 62424, 62426, 62428, 62430, 62432, 62434, 62436, 62438, 62440, 62442, 62444,\n// 62446, 62448, 62450, 62452, 62454, 62456, 62458, 62460, 62462, 62464, 62466,\n// 62468, 62470, 62472, 62474, 62476, 62478, 62480, 62482, 62484, 62486, 62488,\n// 62490, 62492, 62494, 62496, 62498, 62500, 62502, 62504, 62506, 62508, 62510,\n// 62512, 62514, 62516, 62518, 62520, 62522, 62524, 62526, 62528, 62530, 62532,\n// 62534, 62536, 62538, 62540, 62542, 62544, 62546, 62548, 62550, 62552, 62554,\n// 62556, 62558, 62560, 62562, 62564, 62566, 62568, 62570, 62572, 62574, 62576,\n// 62578, 62580, 62582, 62584, 62586, 62588, 62590, 62592, 62594, 62596, 62598,\n// 62600, 62602, 62604, 62606, 62608, 62610, 62612, 62614, 62616, 62618, 62620,\n// 62622, 62624, 62626, 62628, 62630, 62632, 62634, 62636, 62638, 62640, 62642,\n// 62644, 62646, 62648, 62650, 62652, 62654, 62656, 62658, 62660, 62662, 62664,\n// 62666, 62668, 62670, 62672, 62674, 62676, 62678, 62680, 62682, 62684, 62686,\n// 62688, 62690, 62692, 62694, 62696, 62698, 62700, 62702, 62704, 62706, 62708,\n// 62710, 62712, 62714, 62716, 62718, 62720, 62722, 62724, 62726, 62728, 62730,\n// 62732, 62734, 62736, 62738, 62740, 62742, 62744, 62746, 62748, 62750, 62752,\n// 62754, 62756, 62758, 62760, 62762, 62764, 62766, 62768, 62770, 62772, 62774,\n// 62776, 62778, 62780, 62782, 62784, 62786, 62788, 62790, 62792, 62794, 62796,\n// 62798, 62800, 62802, 62804, 62806, 62808, 62810, 62812, 62814, 62816, 62818,\n// 62820, 62822, 62824, 62826, 62828, 62830, 62832, 62834, 62836, 62838, 62840,\n// 62842, 62844, 62846, 62848, 62850, 62852, 62854, 62856, 62858, 62860, 62862,\n// 62864, 62866, 62868, 62870, 62872, 62874, 62876, 62878, 62880, 62882, 62884,\n// 62886, 62888, 62890, 62892, 62894, 62896, 62898, 62900, 62902, 62904, 62906,\n// 62908, 62910, 62912, 62914, 62916, 62918, 62920, 62922, 62924, 62926, 62928,\n// 62930, 62932, 62934, 62936, 62938, 62940, 62942, 62944, 62946, 62948, 62950,\n// 62952, 62954, 62956, 62958, 62960, 62962, 62964, 62966, 62968, 62970, 62972,\n// 62974, 62976, 62978, 62980, 62982, 62984, 62986, 62988, 62990, 62992, 62994,\n// 62996, 62998, 63000, 63002, 63004, 63006, 63008, 63010, 63012, 63014, 63016,\n// 63018, 63020, 63022, 63024, 63026, 63028, 63030, 63032, 63034, 63036, 63038,\n// 63040, 63042, 63044, 63046, 63048, 63050, 63052, 63054, 63056, 63058, 63060,\n// 63062, 63064, 63066, 63068, 63070, 63072, 63074, 63076, 63078, 63080, 63082,\n// 63084, 63086, 63088, 63090, 63092, 63094, 63096, 63098, 63100, 63102, 63104,\n// 63106, 63108, 63110, 63112, 63114, 63116, 63118, 63120, 63122, 63124, 63126,\n// 63128, 63130, 63132, 63134, 63136, 63138, 63140, 63142, 63144, 63146, 63148,\n// 63150, 63152, 63154, 63156, 63158, 63160, 63162, 63164, 63166, 63168, 63170,\n// 63172, 63174, 63176, 63178, 63180, 63182, 63184, 63186, 63188, 63190, 63192,\n// 63194, 63196, 63198, 63200, 63202, 63204, 63206, 63208, 63210, 63212, 63214,\n// 63216, 63218, 63220, 63222, 63224, 63226, 63228, 63230, 63232, 63234, 63236,\n// 63238, 63240, 63242, 63244, 63246, 63248, 63250, 63252, 63254, 63256, 63258,\n// 63260, 63262, 63264, 63266, 63268, 63270, 63272, 63274, 63276, 63278, 63280,\n// 63282, 63284, 63286, 63288, 63290, 63292, 63294, 63296, 63298, 63300, 63302,\n// 63304, 63306, 63308, 63310, 63312, 63314, 63316, 63318, 63320, 63322, 63324,\n// 63326, 63328, 63330, 63332, 63334, 63336, 63338, 63340, 63342, 63344, 63346,\n// 63348, 63350, 63352, 63354, 63356, 63358, 63360, 63362, 63364, 63366, 63368,\n// 63370, 63372, 63374, 63376, 63378, 63380, 63382, 63384, 63386, 63388, 63390,\n// 63392, 63394, 63396, 63398, 63400, 63402, 63404, 63406, 63408, 63410, 63412,\n// 63414, 63416, 63418, 63420, 63422, 63424, 63426, 63428, 63430, 63432, 63434,\n// 63436, 63438, 63440, 63442, 63444, 63446, 63448, 63450, 63452, 63454, 63456,\n// 63458, 63460, 63462, 63464, 63466, 63468, 63470, 63472, 63474, 63476, 63478,\n// 63480, 63482, 63484, 63486, 63488, 63490, 63492, 63494, 63496, 63498, 63500,\n// 63502, 63504, 63506, 63508, 63510, 63512, 63514, 63516, 63518, 63520, 63522,\n// 63524, 63526, 63528, 63530, 63532, 63534, 63536, 63538, 63540, 63542, 63544,\n// 63546, 63548, 63550, 63552, 63554, 63556, 63558, 63560, 63562, 63564, 63566,\n// 63568, 63570, 63572, 63574, 63576, 63578, 63580, 63582, 63584, 63586, 63588,\n// 63590, 63592, 63594, 63596, 63598, 63600, 63602, 63604, 63606, 63608, 63610,\n// 63612, 63614, 63616, 63618, 63620, 63622, 63624, 63626, 63628, 63630, 63632,\n// 63634, 63636, 63638, 63640, 63642, 63644, 63646, 63648, 63650, 63652, 63654,\n// 63656, 63658, 63660, 63662, 63664, 63666, 63668, 63670, 63672, 63674, 63676,\n// 63678, 63680, 63682, 63684, 63686, 63688, 63690, 63692, 63694, 63696, 63698,\n// 63700, 63702, 63704, 63706, 63708, 63710, 63712, 63714, 63716, 63718, 63720,\n// 63722, 63724, 63726, 63728, 63730, 63732, 63734, 63736, 63738, 63740, 63742,\n// 64110, 64218, 64220, 64222, 64224, 64226, 64228, 64230, 64232, 64234, 64236,\n// 64238, 64240, 64242, 64244, 64246, 64248, 64250, 64252, 64254, 64263, 64265,\n// 64267, 64269, 64271, 64273, 64280, 64282, 64284, 64311, 64317, 64319, 64322,\n// 64325, 64451, 64453, 64455, 64457, 64459, 64461, 64463, 64465, 64912, 64968,\n// 64970, 64972, 64974, 64976, 64978, 64980, 64982, 64984, 64986, 64988, 64990,\n// 64992, 64994, 64996, 64998, 65000, 65002, 65004, 65006, 65050, 65052, 65054,\n// 65107, 65127, 65132, 65134, 65141, 65277, 65279, 65471, 65473, 65480, 65488,\n// 65496, 65501, 65503, 65511, 65519, 65521, 65523, 65525, 65527, 65529, 65531,\n// 65534, 65536,\n// ];\n","export const invisibleWhitespaceRegex = /\\p{Zs}/gu;\n\n// Charcodes:\n// [32, 160, 5760, 8192, 8194, 8196, 8198, 8200, 8202, 8239, 8287, 12288];\n","export const lineSeparatorRegex = /\\p{Zl}/gu;\n\n// charcode\n// [8232]\n","export const paragraphSeparatorRegex = /\\p{Zp}/gu;\n\n// charcode\n// [8233]\n","import { controlCharRegex } from \"../regex/controlCharRegex\";\nimport { invisibleWhitespaceRegex } from \"../regex/invisibleWhitespaceRegex\";\nimport { lineSeparatorRegex } from \"../regex/lineSeparatorRegex\";\nimport { paragraphSeparatorRegex } from \"../regex/paragraphSeparatorRegex\";\n\nexport const cleanSpaces = (str: string): string => {\n return str\n .replace(controlCharRegex, \" \")\n .replace(invisibleWhitespaceRegex, \" \")\n .replace(lineSeparatorRegex, \" \")\n .replace(paragraphSeparatorRegex, \" \")\n .trim() // leave trim after replace, so this test can pass `expect(cleanSpaces(\" \\b \")).toBe(\"\");`\n .replace(/\\s{2,}/g, \" \"); // replace multiple spaces with one space\n};\n","/**\n * @returns element from array at index, if index is greater than array length, it will loop back to the start of the array\n */\nexport const cyclicalItem = <T>(array: T[], index: number): T => {\n return array[index % array.length];\n};\n","/**\n * Print or log helper that does not break on circular references, and expands nested objects.\n */\nexport const dir = (\n arg: any,\n { maxDepth = 5 }: { maxDepth?: number } = {}\n): void => {\n console.dir(arg, { depth: maxDepth });\n};\n","export const isInt = (arg: any) => Number.isInteger(arg);\n\nexport const isEven = (arg: any) => isInt(arg) && !(arg % 2);\n\nexport const isOdd = (arg: any) => isInt(arg) && !!(arg % 2);\n\n/**\n * @deprecated use isPositiveInt instead\n */\nexport const isPositive = (arg: any) => isInt(arg) && arg > 0;\n\nexport const isPositiveInt = (arg: any) => isInt(arg) && arg > 0;\n\n/**\n * @deprecated use isNegativeInt instead\n */\nexport const isNegative = (arg: any) => isInt(arg) && arg < 0;\n\nexport const isNegativeInt = (arg: any) => isInt(arg) && arg < 0;\n\nexport const isNumber = (arg: any): arg is number => {\n return (\n Object.prototype.toString.apply(arg) === \"[object Number]\" && isFinite(arg)\n );\n};\n","export const isSpacedString = (s: string) => {\n return s.indexOf(\" \") >= 0;\n};\n","export const isString = (arg: any): arg is string => typeof arg === \"string\";\n","import { isNumber } from \"./isNumber\";\nimport { isSpacedString } from \"./isSpacedString\";\nimport { isString } from \"./isString\";\n\n/**\n *\n * @example isNumeric(1) => true\n * @example isNumeric('1') => true\n * @example isNumeric('1.1') => true\n * @example isNumeric('1.1.1') => false\n */\nexport const isNumeric = (arg: number | string): boolean => {\n if (isNumber(arg)) return true;\n\n if (!isString(arg) || isSpacedString(arg)) return false;\n\n return !isNaN(parseFloat(arg));\n};\n","import { ObjectKeys } from \"../types/Object\";\nimport { isNumeric } from \"../validators/isNumeric\";\n\nexport const enumKeys = <T extends object>(arg: T): ObjectKeys<T> => {\n return Object.keys(arg).filter(\n (key) => !isNumeric(key) // enum key cannot be a number\n ) as ObjectKeys<T>; // Type 'string' is not assignable to type 'keyof T'.\n};\n","import { PlainObject } from \"../types\";\nimport { Key } from \"../types/Object\";\n\nexport const isKey = <T extends PlainObject>(\n key: Key, // cannot use PlainKey here because it does not include symbol (keyof T does)\n obj: T\n): key is keyof T =>\n obj.hasOwnProperty(key) && // makes sure the prop is not in the prototype chain\n obj.propertyIsEnumerable(key); // makes sure the prop is not a getter/setter\n","import { ObjectValue, ObjectKey, ObjectValues } from \"../types/Object\";\nimport { isKey } from \"../validators/isKey\";\n\nexport const enumValues = <T extends object>(\n enumObject: T\n): ObjectValues<T> => {\n let values: ObjectValues<T> = [];\n\n Object.values(enumObject).forEach((value) => {\n // types are tricky here because the value is used also to check if exists as a key\n if (isKey(value, enumObject) && !values.includes(value as ObjectValue<T>))\n values.push(enumObject[value as ObjectKey<T>]);\n });\n\n return values;\n};\n","/**\n * @returns a string with only alphanumeric characters\n * @example filterAlphanumeric(\"!abc()\") // returns \"abc\"\n */\nexport const filterAlphanumeric = (string: string) => {\n return string.replace(/[^a-zA-Z0-9]/g, \"\");\n};\n","export const first = <T>(arr: T[]): T => arr[0];\n","import { ObjectKey, PlainObject } from \"../types\";\n\nexport const firstKey = <T extends PlainObject>(arg: T): ObjectKey<T> =>\n Object.keys(arg)[0];\n","import { ObjectValue, PlainObject } from \"../types\";\n\nexport const firstValue = <T extends PlainObject>(arg: T): ObjectValue<T> =>\n Object.values(arg)[0];\n","/**\n * Get a client cookie by name, works only in the browser\n * @param name\n * @returns the cookie value, if exists\n */\nexport const getCookieByName = (name: string): string | undefined => {\n if (typeof document === \"undefined\") {\n return undefined;\n }\n\n const cookies = document.cookie.split(\";\");\n\n for (const cookie of cookies) {\n const [cookieName, cookieValue] = cookie.trim().split(\"=\");\n if (cookieName === name) {\n return decodeURIComponent(cookieValue);\n }\n }\n\n return undefined;\n};\n","import { PlainObject } from \"../types\";\n\n/**\n * TODO: rename to allKeys\n * @deprecated use Object.keys instead unless you need to include symbols, but the function will be renamed to allKeys\n */\nexport const getKeys = <T extends PlainObject>(obj: T): (string | symbol)[] => {\n return (Object.keys(obj) as (string | symbol)[]).concat(\n getEnumerableOwnPropertySymbols(obj)\n );\n};\n\n// Object.keys does not return enumerable symbols\nexport const getEnumerableOwnPropertySymbols = (obj: object): symbol[] => {\n return Object.getOwnPropertySymbols\n ? Object.getOwnPropertySymbols(obj).filter(function (symbol) {\n return Object.propertyIsEnumerable.call(obj, symbol);\n })\n : [];\n};\n","import { Maybe } from \"../types/Maybe\";\n\nexport const getUrlSearchParams = (\n urlString: Maybe<string>\n): Record<string, string> => {\n if (!urlString) return {};\n try {\n const url = new URL(urlString);\n return Object.fromEntries(url.searchParams);\n } catch (_e) {\n return {};\n }\n};\n","import { Maybe } from \"../types/Maybe\";\nimport { getUrlSearchParams } from \"./getUrlSearchParams\";\n\nexport const getUrlSearchParam = (\n urlString: Maybe<string>,\n param: string\n): string | undefined => {\n return getUrlSearchParams(urlString)[param];\n};\n","let id = 1; // don't start with 0, to be closer to SQL autoincrement\n\nexport const incrementalId = () => {\n return id++;\n};\n","import { PlainObject } from \"../types\";\n\nexport const keysLength = <T extends PlainObject>(obj: T) => {\n return Object.keys(obj).length;\n};\n","export const lastIndex = (array: any[]): number => {\n return array.length - 1;\n};\n","import { lastIndex } from \"./lastIndex\";\n\n// Assume the array is not empty, otherwise the result needs to be banged all the time\nexport const last = <T>(arr: T[]): T => arr[lastIndex(arr)];\n","export const isArray = <T>(arg?: any): arg is T[] => Array.isArray(arg);\n","export const isArrayIncluded = <T>(arr1: T[], arr2: T[]): boolean => {\n return arr1.every((value) => arr2.includes(value));\n};\n","export const isBoolean = (arg: any): arg is boolean =>\n Object.prototype.toString.call(arg) === \"[object Boolean]\";\n","export const isServer = () => typeof window === \"undefined\";\n","import { isServer } from \"./isServer\";\n\nexport const isClient = () => !isServer();\n","import { isClient } from \"./isClient\";\n\nexport const isBrowser = isClient;\n","/**\n * @returns true if the argument can be called like a function -> fn() or await fn()\n */\nexport const isFunction = (arg: any): arg is Function => {\n const type = Object.prototype.toString.call(arg);\n return type === \"[object Function]\" || type === \"[object AsyncFunction]\";\n};\n","import { Maybe } from \"../types\";\n\nexport const isValue = (arg?: Maybe<any>): boolean => {\n return arg !== undefined && arg !== null && !Number.isNaN(arg);\n};\n","import { isFunction } from \"./isFunction\";\nimport { isValue } from \"./isValue\";\n\nexport const isBuffer = (val?: any): boolean => {\n return (\n isValue(val) &&\n isValue(val.constructor) &&\n isFunction(val.constructor.isBuffer) &&\n val.constructor.isBuffer(val)\n );\n};\n","import { isString } from \"./isString\";\n\nexport const isEmail = (arg: string) =>\n isString(arg) && /\\S+@\\S+\\.\\S+/.test(arg);\n","import { PlainObject } from \"../types\";\n\nexport const isObject = <T>(arg?: any): arg is PlainObject<T> =>\n Object.prototype.toString.call(arg) === \"[object Object]\";\n","import { Maybe, PlainObject } from \"../types\";\nimport { isArray } from \"./isArray\";\nimport { isObject } from \"./isObject\";\nimport { isString } from \"./isString\";\n\nexport const isEmpty = (arg?: Maybe<any>) => {\n if (arg === undefined) return true;\n if (arg === null) return true;\n if (isEmptyString(arg)) return true;\n if (isEmptyObject(arg)) return true;\n if (isEmptyArray(arg)) return true;\n\n return false;\n};\n\nexport const isEmptyString = (arg: string) => {\n return isString(arg) && arg.trim().length === 0;\n};\n\nexport const isEmptyArray = (arg: any[]) => {\n return isArray(arg) && arg.length === 0;\n};\n\nexport const isEmptyObject = (arg: PlainObject) => {\n return isObject(arg) && Object.keys(arg).length === 0;\n};\n","export const isFile = (arg?: any): arg is File =>\n Object.prototype.toString.call(arg) === \"[object File]\";\n","import { parseDate } from \"../helpers\";\nimport { DateLike } from \"../types\";\n\nexport const isFutureDate = (arg: DateLike): boolean => {\n const date = parseDate(arg);\n return !!date && date > new Date();\n};\n","export const isJsDate = (arg: Date): arg is Date =>\n Object.prototype.toString.call(arg) === \"[object Date]\" &&\n !isNaN(arg as unknown as number);\n","import { lastIndex } from \"../helpers/lastIndex\";\n\nexport const isLastIndex = (index: number, array: any[]): boolean => {\n return index === lastIndex(array);\n};\n","import { isString } from \"./isString\";\n\nexport const isNotEmptyString = (arg: any): boolean => {\n return isString(arg) && arg.trim().length > 0;\n};\n","export const isNumericId = (id: string): boolean =>\n /^\\d+$/.test(id) && parseInt(id) > 0;\n","import { parseDate } from \"../helpers\";\nimport { DateLike } from \"../types\";\n\nexport const isPastDate = (arg: DateLike): boolean => {\n const date = parseDate(arg);\n return !!date && date < new Date();\n};\n","export const isPromise = (arg: any) => arg instanceof Promise;\n","import { isClient } from \"./isClient\";\n\nexport const isPWA = () => {\n return isClient() && window.matchMedia(\"(display-mode: standalone)\").matches; // credits to Narcis\n};\n","var canUseSymbol = typeof Symbol === \"function\" && Symbol.for;\nvar REACT_ELEMENT_TYPE = canUseSymbol ? Symbol.for(\"react.element\") : 0xeac7;\n\nexport const isReactElement = (value: any) => {\n return value.$$typeof === REACT_ELEMENT_TYPE;\n};\n","export const isRegExp = (arg: any): arg is RegExp =>\n Object.prototype.toString.call(arg) === \"[object RegExp]\";\n","import { isArray } from \"./isArray\";\nimport { isFunction } from \"./isFunction\";\nimport { isObject } from \"./isObject\";\n\nexport const isSame = (value1: any, value2: any): boolean => {\n if (value1 === value2) {\n return true;\n }\n\n if (isArray(value1) && isArray(value2)) {\n if (value1.length !== value2.length) return false;\n return value1.every((value, index) => isSame(value, value2[index]));\n }\n\n if (isObject(value1) && isObject(value2)) {\n const keys = Object.keys(value1);\n if (keys.length !== Object.keys(value2).length) return false;\n\n return keys.every((key: string) => {\n return isSame(value1[key], value2[key]);\n });\n }\n\n if (isFunction(value1) && isFunction(value2)) {\n return value1.toString() === value2.toString();\n }\n\n return false;\n};\n","import { isJsDate } from \"./isJsDate\";\n\nexport const isStringDate = (arg: string) => {\n const date = new Date(arg);\n return isJsDate(date);\n};\n","const pattern = new RegExp(\n \"^(https?:\\\\/\\\\/)?\" + // protocol\n \"((([a-z\\\\d]([a-z\\\\d-]*[a-z\\\\d])*)\\\\.?)+[a-z]{2,}|\" + // domain name\n \"((\\\\d{1,3}\\\\.){3}\\\\d{1,3}))\" + // OR ip (v4) address\n \"(\\\\:\\\\d+)?(\\\\/[-a-z\\\\d%_.~+]*)*\" + // port and path\n \"(\\\\?[;&a-z\\\\d%_.~+=-]*)?\" + // query string\n \"(\\\\#[-a-z\\\\d_]*)?$\", // fragment locator\n \"i\"\n);\n\nexport const isURL = (arg: string) => {\n return !!arg && pattern.test(arg);\n};\n","export const isUUID = (arg: string) =>\n /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(\n arg\n );\n","import { PlainObject } from \"../types\";\nimport { isKey, isObject } from \"../validators\";\n\n/**\n * @description Simple merge function that merges two objects, arrays get overwritten, no options\n *\n */\nexport const merge = (target: PlainObject, source: PlainObject) => {\n const merger: PlainObject = {};\n Object.keys(target).forEach((key) => {\n merger[key] = isObject(target[key]) ? merge({}, target[key]) : target[key];\n });\n Object.keys(source).forEach((key) => {\n if (isKey(key, target))\n merger[key] =\n isObject(target[key]) && isObject(source[key])\n ? merge(target[key], source[key])\n : source[key];\n else\n merger[key] = isObject(source[key])\n ? merge({}, source[key])\n : source[key];\n });\n return merger;\n};\n","/**\n * @description Merge two arrays, unique values, no options\n * @example mergeArrays([1,2,3], [2,3,4]) => [1,2,3,4]\n */\nexport const mergeArrays = (arrayA: any[], arrayB: any[]) => {\n return arrayA.concat(\n arrayB.filter((item) => {\n return !arrayA.includes(item); // TODO: use isSame for objects\n })\n );\n};\n","export const moveToFirst = <T>(\n items: T[],\n condition: (item: T, i: number, items: T[]) => boolean\n): T[] => {\n const resortedItems = [...items];\n for (let i = 0; i < resortedItems.length; i++) {\n if (condition(resortedItems[i], i, resortedItems)) {\n let firstItem = resortedItems.splice(i, 1);\n resortedItems.unshift(firstItem[0]);\n break;\n }\n }\n return resortedItems;\n};\n","export const moveToLast = <T>(\n items: T[],\n condition: (item: T, i: number, items: T[]) => boolean\n): T[] => {\n const resortedItems = [...items];\n for (let i = 0; i < resortedItems.length; i++) {\n if (condition(resortedItems[i], i, resortedItems)) {\n let lastItem = resortedItems.splice(i, 1)[0];\n resortedItems.push(lastItem);\n break;\n }\n }\n return resortedItems;\n};\n","export const normalizeNumber = ({\n value,\n max,\n min,\n}: {\n value: number;\n max: number;\n min: number;\n}) => {\n if (value >= max) return 1;\n if (value <= min) return 0;\n\n return (value - min) / (max - min);\n};\n","import { PlainObject } from \"../types\";\nimport { isSame } from \"../validators/isSame\";\n\nexport const objectDiff = (\n leftObject: PlainObject,\n rightObject: PlainObject\n) => {\n var diff: PlainObject = {};\n const allKeys = new Set([\n ...Object.keys(leftObject),\n ...Object.keys(rightObject),\n ]);\n\n for (const key of allKeys) {\n if (!isSame(rightObject[key], leftObject[key])) {\n diff[key] = {\n from: leftObject[key],\n to: rightObject[key],\n };\n }\n }\n\n return diff;\n};\n","import { PlainObject } from \"../types\";\n\nexport const omit = <T extends PlainObject>(obj: T, keys: (keyof T)[]) => {\n const ret: Partial<T> = {};\n for (const key in obj) {\n if (keys.includes(key)) continue;\n ret[key] = obj[key];\n }\n return ret;\n};\n","import { DateLike, Maybe } from \"../types\";\nimport { isEmpty } from \"../validators/isEmpty\";\nimport { isJsDate } from \"../validators/isJsDate\";\n\nexport const parseDate = (arg?: Maybe<DateLike>) => {\n if (isEmpty(arg)) return;\n\n const date = new Date(arg!);\n\n if (!isJsDate(date)) return;\n\n return date;\n};\n","import { ObjectKeys, PlainObject } from \"../types\";\n\nexport const pickObjectKeys = <T extends PlainObject>(\n obj: T,\n keys: ObjectKeys<T>\n): Partial<T> => {\n const ret: Partial<T> = {};\n for (const key in obj) {\n if (keys.includes(key)) ret[key] = obj[key];\n }\n return ret;\n};\n","import { ObjectValues, PlainObject } from \"../types/Object\";\n\nexport const pickObjectValues = <T extends PlainObject>(\n obj: T,\n values: ObjectValues<T>\n): Partial<T> => {\n const ret: Partial<T> = {};\n for (const key in obj) {\n if (values.includes(obj[key])) ret[key] = obj[key];\n }\n return ret;\n};\n","export const promiseWithTimeout = <T>(\n promise: () => Promise<T>,\n timeoutMs: number,\n error?: Error\n): Promise<T> => {\n let timeout: ReturnType<typeof setTimeout>;\n const timeoutPromise = new Promise<never>((_, reject) => {\n timeout = setTimeout(\n () => reject(error ?? new Error(\"Promise timed out\")),\n timeoutMs\n );\n });\n\n return Promise.race([promise(), timeoutPromise]).finally(() => {\n clearTimeout(timeout);\n });\n};\n","export const randomInt = ({\n min = -100,\n max = 100,\n}: {\n min?: number;\n max?: number;\n} = {}): number => {\n min = Math.ceil(min); // in case is a float\n max = Math.floor(max); // in case is a float\n return Math.floor(Math.random() * (max - min + 1) + min);\n};\n\nexport const randomBigInt = (): BigInt => {\n return BigInt(randomInt());\n};\n\nexport const randomPositiveInt = ({\n min = 1,\n max,\n}: {\n min?: number;\n max?: number;\n} = {}): number =>\n randomInt({\n min,\n max,\n });\n\nexport const randomNegativeInt = ({\n min,\n max = -1,\n}: {\n min?: number;\n max?: number;\n} = {}): number =>\n randomInt({\n min,\n max,\n });\n\nexport const randomMaxSafeInt = () =>\n randomInt({ min: -Number.MAX_SAFE_INTEGER, max: Number.MAX_SAFE_INTEGER });\n\nexport const randomMaxInt = () =>\n randomInt({ min: -Number.MAX_VALUE, max: Number.MAX_VALUE });\n\nexport const randomFormattedPercentage = () => randomInt() + \"%\";\n","import { randomInt } from \"./randomInt\";\n\nexport const randomChar = () => {\n return String.fromCharCode(randomInt({ min: 97, max: 122 }));\n};\n","export const letterRegex = new RegExp(/\\p{L}/, \"gu\");\n","import { randomChar } from \"../random/randomChar\";\nimport { letterRegex } from \"../regex/letterRegex\";\n\nexport const scrambleText = (str: string): string => {\n return str.replace(letterRegex, () => {\n return randomChar();\n });\n};\n","import { PlainObject } from \"../types\";\n\n/**\n * Serialize shallow object to a deterministic string,\n * for nested objects use [json-stable-stringify](https://www.npmjs.com/package/json-stable-stringify)\n *\n * @example\n * serialize({ b: 1, a: 2 }) // '{\"a\":1,\"b\":2}'\n */\nexport const serialize = <T extends PlainObject>(obj: T) => {\n const allKeys = new Set<string>();\n JSON.stringify(obj, (key, value) => (allKeys.add(key), value));\n return JSON.stringify(obj, Array.from(allKeys).sort());\n};\n","import { isFunction, isPromise } from \"../validators\";\n\n/**\n *\n * @description Run a series of (async) functions in order and return the results\n * @example\n * const results = await seriesAll([\n * Promise.resolve(1),\n * sleep(100).then(() => 2),\n * () => Promise.resolve(3),\n * async () => 4,\n * ]); => [1, 2, 3, 4]\n */\nexport const seriesAll = async <T>(\n series: (Promise<T> | (() => Promise<T>))[]\n): Promise<T[]> => {\n const results = [];\n for (const fn of series) {\n if (isPromise(fn)) results.push(await fn);\n else if (isFunction(fn)) results.push(await fn());\n else throw new Error(\"seriesAll: invalid type\");\n }\n\n // TODO: \"as T[];\" fix TS error\n // error TS2345: Argument of type '(() => Promise<T>) | Awaited<T>' is not assignable to parameter of type 'T'.\n // 'T' could be instantiated with an arbitrary type which could be unrelated to '(() => Promise<T>) | Awaited<T>'.\n return results as T[];\n};\n\n// TODO: rename to seriesAsync\n","import { PlainObject } from \"../types\";\nimport { isObject } from \"../validators/isObject\";\n\n/**\n * Sets a value in an object using a dot-separated path.\n *\n * @param obj The object to set the value in.\n * @param path The path to the key to set, separated by dots.\n * @param value The value to set.\n */\nexport const setObjectPath = (obj: PlainObject, path: string, value: any) => {\n const keys = path.split(\".\");\n\n const set = (obj: PlainObject, relPath: string[], value: any) => {\n const key = relPath[0];\n if (relPath.length === 1) {\n obj[key] = value;\n return;\n }\n\n // creates empty object is key does not exist, or it's not an object (overwrites)\n if (!obj[key] || !isObject(obj[key])) {\n obj[key] = {};\n }\n\n set(obj[key], relPath.slice(1), value);\n };\n\n set(obj, keys, value);\n};\n","import { Maybe } from \"../types\";\n\nexport const setUrlSearchParams = (\n currentURL: string,\n searchParams: Record<string, Maybe<string | number | boolean>> = {}\n) => {\n const isRelativeUrl = currentURL.startsWith(\"/\");\n const url = new URL(\n currentURL,\n isRelativeUrl ? \"https://deverything.dev/\" : undefined // add base to make relative urls work\n );\n\n Object.entries(searchParams).forEach(([paramKey, paramValue]) => {\n if (paramValue === null || paramValue === undefined) return;\n url.searchParams.set(paramKey, paramValue.toString());\n });\n\n if (isRelativeUrl) {\n return url.pathname + url.search + url.hash;\n }\n\n return url.toString();\n};\n","export const shuffle = <T>(array: T[]): T[] => {\n const newArray = [...array]; // create a new array to avoid modifying the original array\n for (let i = newArray.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [newArray[i], newArray[j]] = [newArray[j], newArray[i]]; // swap elements\n }\n return newArray;\n};\n","type Replacer = (this: any, key: string, value: any) => any;\n\n/**\n * Stringifies objects without breaking on circular dependencies\n * @source https://github.com/moll/json-stringify-safe/blob/master/stringify.js\n */\nexport const objectSerializer = () => {\n const stack: any[] = [];\n const keys: string[] = [];\n\n const cycleReplacer: Replacer = function (_key, value) {\n if (stack[0] === value) return \"[Circular ~]\";\n return \"[Circular ~.\" + keys.slice(0, stack.indexOf(value)).join(\".\") + \"]\";\n };\n\n return function (this: any, key: string, value: any) {\n if (stack.length > 0) {\n const thisPos = stack.indexOf(this);\n ~thisPos ? stack.splice(thisPos + 1) : stack.push(this);\n ~thisPos ? keys.splice(thisPos, Infinity, key) : keys.push(key);\n if (~stack.indexOf(value)) value = cycleReplacer.call(this, key, value);\n\n // TODO: also sort keys! so it can be used for deep serialization\n } else stack.push(value);\n\n return value;\n };\n};\n","import { objectSerializer } from \"../_internals/objectSerializer\";\n\nexport const stringify = (arg?: any) => {\n return JSON.stringify(arg, objectSerializer(), 2);\n};\n","import { isArray } from \"../validators\";\n\nexport const toggleArrayValue = <T>(array: T[], value: T) => {\n // extra safety\n if (!isArray<T>(array)) return array;\n\n // This will remove all instances of the value\n const copy: T[] = array.reduce((acc: T[], val) => {\n if (val !== value) acc.push(val);\n return acc;\n }, []);\n\n // no value was removed, so add it\n if (copy.length === array.length) copy.push(value);\n\n return copy;\n};\n\n/**\n * @deprecated Use toggleArrayValue instead\n * @param {T[]} array\n * @param {T} value\n * @returns {T[]}\n */\nexport const toggleArray = toggleArrayValue;\n","import { isPositiveInt } from \"../validators/isNumber\";\n\nexport const truncate = (\n arg: string,\n limit: number,\n {\n ellipsis,\n position,\n }: { ellipsis?: string; position?: \"start\" | \"middle\" | \"end\" } = {}\n) => {\n if (!ellipsis) ellipsis = \"...\";\n if (!position) position = \"end\";\n\n if (!isPositiveInt(limit)) return arg;\n\n const argArray = [...arg]; // convert string to array, emoji and unicode safe\n\n const ellipsisLength = ellipsis.length;\n\n if (argArray.length <= limit) return arg;\n\n switch (position) {\n case \"start\":\n const startSliceLength = limit - ellipsisLength;\n return ellipsis + argArray.slice(-startSliceLength).join(\"\");\n case \"middle\": {\n const startSliceLength = Math.ceil((limit - ellipsisLength) / 2);\n const endSliceStart =\n argArray.length - Math.floor((limit - ellipsisLength) / 2);\n return (\n argArray.slice(0, startSliceLength).join(\"\") +\n ellipsis +\n argArray.slice(endSliceStart).join(\"\")\n );\n }\n case \"end\":\n default:\n return argArray.slice(0, limit - ellipsisLength).join(\"\") + ellipsis;\n }\n};\n","import { parseDate } from \"../helpers\";\nimport { DateLike } from \"../types\";\n\nexport const isOver18 = (birthDate: DateLike) => {\n const now = new Date();\n const birth = parseDate(birthDate);\n if (!birth) return false;\n\n const age = now.getFullYear() - birth.getFullYear();\n if (age > 18) return true;\n if (age < 18) return false;\n if (age === 18) {\n if (now.getMonth() > birth.getMonth()) return true;\n if (now.getMonth() < birth.getMonth()) return false;\n if (now.getMonth() === birth.getMonth()) {\n if (now.getDate() >= birth.getDate()) return true;\n if (now.getDate() < birth.getDate()) return false;\n }\n }\n return false;\n};\n","export const startOfNextMonth = () => {\n const now = new Date();\n return new Date(now.getFullYear(), now.getMonth() + 1, 1);\n};\n","export const startOfNextWeek = () => {\n const now = new Date();\n return new Date(\n now.getFullYear(),\n now.getMonth(),\n now.getDate() + 7 - now.getDay()\n );\n};\n","export const startOfThisWeek = () => {\n const now = new Date();\n return new Date(\n now.getFullYear(),\n now.getMonth(),\n now.getDate() - now.getDay()\n );\n};\n","export const startOfDay = (day: Date): Date => {\n return new Date(day.getFullYear(), day.getMonth(), day.getDate());\n};\n","import { startOfDay } from \"./startOfDay\";\n\nexport const startOfToday = (): Date => {\n const now = new Date();\n return startOfDay(now);\n};\n","export const startOfTomorrow = () => {\n const now = new Date();\n return new Date(now.getFullYear(), now.getMonth(), now.getDate() + 1);\n};\n","export const formatCamelCase = (str: string) => {\n return str\n .toLowerCase()\n .replace(/[-_\\s]([a-z\\d])(\\w*)/g, function replacer(_m, p1, p2) {\n return p1.toUpperCase() + p2;\n });\n};\n","import { PlainObject } from \"../types/Object\";\n\n/**\n *\n * @example formatCookies({}) => \"\"\n * @example formatCookies({ session: \"123\", _ga: 123 }) => \"session=123; _ga=123;\"\n */\nexport const formatCookies = (object: PlainObject): string => {\n return (\n Object.entries(object)\n .reduce((acc: string[], [key, value]) => {\n // allow nulls to be set?\n if (value !== undefined) acc.push(`${key}=${value}`);\n\n return acc;\n }, [])\n .join(\"; \") + \";\"\n );\n};\n","import { isNumber } from \"../validators/isNumber\";\n\n/**\n *\n * @example formatNumber(1000, { compact: true }) // 1K\n * @example formatNumber(1111, { maxDigits: 2 }) // 1,100\n * @example formatNumber(111111.123123123) // 111,111.123\n * @example formatNumber(0.12345, { percentage: true, maxDigits: 2 }) // '12.35%' (rounding)\n */\nexport const formatNumber = (\n value: number,\n {\n compact,\n maxDigits,\n percentage,\n }: {\n compact?: boolean;\n maxDigits?: number;\n percentage?: boolean;\n } = {}\n): string => {\n if (percentage) {\n const useValue = isNumber(value) ? value : 0;\n const number = (useValue * 100).toFixed(maxDigits || 0);\n return `${number}%`;\n }\n\n const formatter = Intl.NumberFormat(\"en\", {\n notation: compact ? \"compact\" : \"standard\",\n maximumSignificantDigits: maxDigits,\n });\n\n return formatter.format(value);\n};\n","import { clamp } from \"../helpers\";\n\n/**\n *\n * @example formatPercentage(1) => 100%\n * @example formatPercentage(0, { digits: 2 }) => 0.00%\n */\nexport const formatPercentage = (\n value: number,\n {\n digits,\n }: {\n digits?: number;\n } = {}\n): string => {\n return `${clamp({\n number: value * 100,\n min: 0,\n max: 100,\n }).toFixed(digits || 0)}%`;\n};\n","import { clamp } from \"../helpers\";\n\n/**\n *\n * @example formatProgress({ index: -1, total: 10 }) => [1/10] capped\n * @example formatProgress({ index: 1, total: 10 }) => [2/10]\n * @example formatProgress({ index: 11, total: 10 }) => [10/10] capped\n */\nexport const formatProgress = ({\n index,\n total,\n}: {\n index: number;\n total: number;\n}): string => {\n return `[${clamp({\n number: index + 1,\n min: 1,\n max: total,\n })}/${total}]`;\n};\n","export const stringToCSSUnicode = (text: string): string =>\n Array.from(text)\n .map((char: string) => {\n const codePoint = char.codePointAt(0);\n return codePoint !== undefined ? `\\\\${codePoint.toString(16)}` : \"\";\n })\n .join(\"\");\n","export const stringToUnicode = (text: string): string =>\n Array.from(text)\n .map((char: string) => {\n const codePoint = char.codePointAt(0);\n return codePoint !== undefined ? `\\\\u{${codePoint.toString(16)}}` : \"\";\n })\n .join(\"\");\n","/**\n * Calculates the average of a list of numbers.\n * @example\n * average([1, 2, 3, 4, 5]); // 3\n * average(1, 2, 3, 4, 5); // 3\n */\nexport const average = (numbers: number[]): number => {\n const sum = numbers.reduce((total, num) => total + num, 0);\n return sum / numbers.length;\n};\n","export const isBetween = (value: number, min: number, max: number) => {\n return value >= min && value <= max;\n};\n","export const isOutside = (value: number, min: number, max: number) => {\n return value < min || value > max;\n};\n","export const isStrictlyBetween = (value: number, min: number, max: number) => {\n return value > min && value < max;\n};\n","export const max = (values: number[]): number => {\n const maxValue = Math.max(...values);\n return maxValue;\n};\n","export const min = (values: number[]): number => {\n const minValue = Math.min(...values);\n return minValue;\n};\n","export const multiply = (numbers: number[]) => {\n return numbers.reduce((total, num) => total * num, 1);\n};\n","/**\n *\n * @example normaliseNumber(50, 0, 100) => 0.5\n */\nexport const normaliseNumber = (\n value: number,\n minValue: number,\n maxValue: number\n) => (value - minValue) / (maxValue - minValue);\n","import { max } from \"./max\";\nimport { min } from \"./min\";\nimport { normaliseNumber } from \"./normaliseNumber\";\n\n/**\n * Normalises an array of numbers\n * @example normaliseArray([1, 2, 3]) => [0, 0.5, 1]\n */\nexport const normaliseArray = (values: number[]) => {\n const minValue = min(values);\n const maxValue = max(values);\n\n return values.map((value) => normaliseNumber(value, minValue, maxValue));\n};\n","/**\n *\n * @param previous Positive percentage i.e. 0.1 for 10%\n * @param current Positive percentage i.e. 0.2 for 20%\n * @returns\n */\nexport const percentageChange = (previous: number, current: number): number => {\n if (previous < 0 || current < 0) return 0;\n if (current === 0 && previous === 0) return 0;\n if (current === 0 && previous !== 0) return -1;\n if (current !== 0 && previous === 0) return 1;\n const perChange = (current - previous) / previous;\n return parseFloat(perChange.toFixed(4)); // 4 decimal places so when formatting to % two decimal places are shown\n};\n","export const sum = (numbers: number[]) => {\n return numbers.reduce((total, num) => total + num, 0);\n};\n","import { parseDate } from \"../helpers/parseDate\";\nimport { DateRange } from \"../types/Date\";\n\nexport const prismaDateRange = ({ startDate, endDate }: DateRange) => {\n const gte = parseDate(startDate);\n const lt = parseDate(endDate);\n\n if (!gte || !lt) {\n throw new Error(\"prismaDateRange: Invalid date range\");\n }\n\n return {\n gte,\n lt,\n };\n};\n","// Prefix with Random to avoid name collision with the Address type from other libs\nexport type RandomAddress = {\n city: string;\n country: string;\n countryCode: string;\n state?: string;\n street: string;\n line2?: string;\n number: string;\n zip: string;\n};\n\nexport const UK_ADDRESSES: RandomAddress[] = [\n {\n city: \"London\",\n country: \"United Kingdom\",\n countryCode: \"GB\",\n line2: \"Marylebone\",\n number: \"221B\",\n street: \"Baker Street\",\n zip: \"NW1 6XE\",\n },\n {\n city: \"Birmingham\",\n country: \"United Kingdom\",\n countryCode: \"GB\",\n number: \"B1 1AA\",\n street: \"Bordesley Street\",\n zip: \"B1 1AA\",\n },\n];\n\nexport const US_ADDRESSES: RandomAddress[] = [\n {\n city: \"New York\",\n country: \"United States\",\n countryCode: \"US\",\n state: \"NY\",\n street: \"Broadway\",\n line2: \"Manhattan\",\n number: \"42\",\n zip: \"10036\",\n },\n {\n city: \"Los Angeles\",\n country: \"United States\",\n countryCode: \"US\",\n state: \"CA\",\n street: \"Hollywood Boulevard\",\n number: \"6801\",\n zip: \"90028\",\n },\n];\n\nexport const EUROPE_ADDRESSES: RandomAddress[] = [\n {\n city: \"Paris\",\n country: \"France\",\n countryCode: \"FR\",\n street: \"Rue de Rivoli\",\n number: \"75001\",\n zip: \"75001\",\n },\n {\n city: \"Berlin\",\n country: \"Germany\",\n countryCode: \"DE\",\n street: \"Unter den Linden\",\n line2: \"Mitte\",\n number: \"10117\",\n zip: \"10117\",\n },\n {\n city: \"Rome\",\n country: \"Italy\",\n countryCode: \"IT\",\n street: \"Via del Corso\",\n number: \"00186\",\n zip: \"00186\",\n },\n {\n city: \"Madrid\",\n country: \"Spain\",\n countryCode: \"ES\",\n street: \"Gran Vía\",\n line2: \"Sol\",\n number: \"28013\",\n zip: \"28013\",\n },\n];\n\nexport const MIXED_ADDRESSES: RandomAddress[] = [\n {\n city: \"Moscow\",\n country: \"Russia\",\n countryCode: \"RU\",\n street: \"Tverskaya\",\n number: \"101000\",\n zip: \"101000\",\n },\n {\n city: \"Tokyo\",\n country: \"Japan\",\n countryCode: \"JP\",\n street: \"Shinjuku\",\n line2: \"Shinjuku City\",\n number: \"160-0022\",\n zip: \"160-0022\",\n },\n {\n city: \"Beijing\",\n country: \"China\",\n countryCode: \"CN\",\n street: \"Changan\",\n number: \"100005\",\n zip: \"100005\",\n },\n {\n city: \"Cairo\",\n country: \"Egypt\",\n countryCode: \"EG\",\n street: \"Al-Muizz\",\n number: \"11511\",\n zip: \"11511\",\n },\n {\n city: \"Buenos Aires\",\n country: \"Argentina\",\n countryCode: \"AR\",\n street: \"Avenida de Mayo\",\n number: \"1002\",\n zip: \"C1006AAQ\",\n },\n {\n city: \"Cape Town\",\n country: \"South Africa\",\n countryCode: \"ZA\",\n street: \"Adderley\",\n number: \"7700\",\n zip: \"7700\",\n },\n {\n city: \"Sydney\",\n country: \"Australia\",\n countryCode: \"AU\",\n street: \"George\",\n line2: \"Haymarket\",\n number: \"2000\",\n zip: \"2000\",\n },\n {\n city: \"Rio de Janeiro\",\n country: \"Brazil\",\n countryCode: \"BR\",\n street: \"Av. Presidente Vargas\",\n number: \"20021-000\",\n zip: \"20021-000\",\n },\n {\n city: \"Mexico City\",\n country: \"Mexico\",\n countryCode: \"MX\",\n street: \"Paseo de la Reforma\",\n number: \"06500\",\n zip: \"06500\",\n },\n];\n\nexport const ADDRESSES: RandomAddress[] = [\n ...UK_ADDRESSES,\n ...US_ADDRESSES,\n ...EUROPE_ADDRESSES,\n ...MIXED_ADDRESSES,\n];\n","import { lastIndex } from \"../helpers/lastIndex\";\nimport { last } from \"../helpers/last\";\nimport { randomInt } from \"./randomInt\";\nimport { sum } from \"../math/sum\";\n\nexport const randomArrayItem = <T>(\n array: T[],\n { weights }: { weights?: number[] } = {}\n): T => {\n if (weights && weights.length === array.length) {\n const totalWeight = sum(weights);\n let random = Math.random() * totalWeight;\n\n for (let i = 0; i < weights.length; i++) {\n random -= weights[i];\n if (random <= 0) {\n return array[i];\n }\n }\n\n // In case of rounding errors, return the last item\n return last(array);\n }\n\n return array[randomInt({ min: 0, max: lastIndex(array) })];\n};\n","import { ADDRESSES } from \"../constants/addresses\";\nimport { randomArrayItem } from \"./randomArrayItem\";\n\nexport const randomAddress = () => {\n return randomArrayItem(ADDRESSES);\n};\n","import { array } from \"../helpers/array\";\nimport { randomArrayItem } from \"./randomArrayItem\";\n\n//avoid 0s and Os as they get confused with each other\nconst chars = \"123456789ABCDEFGHIJKLMNPQRSTUVWXYZ\".split(\"\");\n\n/**\n * Generates a random alphanumeric code that can be used for verification codes, etc.\n * Does not contain 0s or Os as they get confused with each other.\n * @param length The length of the code to generate.\n * @returns A random alphanumeric code.\n * @example\n * randomAlphaNumericCode(); => \"A2G4G6\"\n */\nexport const randomAlphaNumericCode = ({\n length = 6,\n}: { length?: number } = {}) => {\n if (length < 1)\n throw new Error(\"randomAlphaNumericCode: Length must be greater than 0.\");\n\n return array(length, () => randomArrayItem(chars)).join(\"\");\n};\n","import { randomArrayItem } from \"./randomArrayItem\";\n\nexport const randomBool = () => randomArrayItem([true, false]);\n","import {\n MILLISECONDS_IN_DECADE,\n MAX_DATE_MILLISECONDS,\n MILLISECONDS_IN_MINUTE,\n} from \"../constants/time\";\nimport { parseDate } from \"../helpers/parseDate\";\nimport { DateRange } from \"../types\";\nimport { isFutureDate, isPastDate } from \"../validators\";\nimport { randomInt } from \"./randomInt\";\n\nconst datePlusDecade = (date: Date = new Date()) =>\n datePlusMs(date, MILLISECONDS_IN_DECADE);\n\nconst dateMinusDecade = (date: Date = new Date()) =>\n datePlusMs(date, -MILLISECONDS_IN_DECADE);\n\nconst datePlusMs = (date: Date, ms: number) => new Date(date.getTime() + ms);\n\nexport const randomDate = ({ startDate, endDate }: Partial<DateRange> = {}) => {\n const parsedStartDate = parseDate(startDate);\n const parsedEndDate = parseDate(endDate);\n\n if (parsedStartDate && parsedEndDate && parsedStartDate > parsedEndDate) {\n console.warn(`randomDate: startDate must be before endDate`);\n }\n\n const finalStartDate =\n parsedStartDate || //\n dateMinusDecade(parsedEndDate); // uses now if undefined\n\n const finalEndDate =\n parsedEndDate || //\n datePlusDecade(parsedStartDate); // uses now if undefined\n\n return new Date(\n randomInt({ min: finalStartDate.getTime(), max: finalEndDate.getTime() })\n );\n};\n\nexport const randomMaxDate = ({ startDate, endDate }: Partial<DateRange>) => {\n startDate = startDate || new Date(-MAX_DATE_MILLISECONDS);\n endDate = endDate || new Date(MAX_DATE_MILLISECONDS);\n return randomDate({ startDate, endDate });\n};\n\nexport const randomFutureDate = ({\n startDate,\n endDate,\n}: Partial<DateRange> = {}) => {\n if (startDate && isPastDate(startDate)) {\n console.warn(`randomFutureDate: startDate must be in the future`);\n }\n if (endDate && isPastDate(endDate)) {\n console.warn(`randomFutureDate: endDate must be in the future`);\n }\n\n const finalStartDate =\n parseDate(startDate) || datePlusMs(new Date(), 5 * MILLISECONDS_IN_MINUTE); // Add a safe margin in the future (i.e. lagging tests)\n\n return randomDate({ startDate: finalStartDate, endDate });\n};\n\nexport const randomPastDate = ({\n startDate,\n endDate,\n}: Partial<DateRange> = {}) => {\n if (startDate && isFutureDate(startDate)) {\n console.warn(`randomPastDate: startDate must be in the past`);\n }\n if (endDate && isFutureDate(endDate)) {\n console.warn(`randomPastDate: endDate must be in the past`);\n }\n\n const finalEndDate = parseDate(endDate) || new Date();\n return randomDate({ startDate, endDate: finalEndDate });\n};\n\nexport const randomDateRange = () => {\n const startDate = randomDate();\n const endDate = randomDate({ startDate });\n\n return {\n endDate,\n startDate,\n };\n};\n","import { array } from \"../helpers\";\nimport { randomChar } from \"./randomChar\";\n\nexport const randomString = ({\n length = 10,\n}: {\n length?: number;\n} = {}) => {\n return array(length, () => randomChar()).join(\"\");\n};\n","import { randomString } from \"./randomString\";\n\nexport const randomSymbol = () => {\n return Symbol(randomString());\n};\n","import { randomArrayItem } from \"./randomArrayItem\";\nimport { randomBool } from \"./randomBool\";\nimport { randomDate } from \"./randomDate\";\nimport { randomBigInt, randomInt } from \"./randomInt\";\nimport { randomString } from \"./randomString\";\nimport { randomSymbol } from \"./randomSymbol\";\n\n// This must return true with `isValue` assertion\nexport const randomValue = () => {\n return randomArrayItem([\n randomBool(),\n randomString(),\n randomInt(),\n randomDate(),\n randomBigInt(),\n randomSymbol(),\n ]);\n};\n","import { randomInt } from \"./randomInt\";\nimport { randomValue } from \"./randomValue\";\nimport { array } from \"../helpers/array\";\n\nexport const randomArray = () => {\n return array(randomInt({ min: 1, max: 5 }), randomValue);\n};\n","export const IBAN_SAMPLES = [\n \"AD1200012030200359100100\",\n \"BA391290079401028494\",\n \"BE68539007547034\",\n \"BG80BNBG96611020345678\",\n \"FI2112345600000785\",\n \"FO6264600001631634\",\n \"FR1420041010050500013M02606\",\n \"GB29NWBK60161331926819\",\n \"GE29NB0000000101904917\",\n];\n\nexport const BIC_SWIFT_SAMPLES = [\n \"ABNANL2A\",\n \"BKENGB2LXXX\",\n \"BUKBGB22\",\n \"CITIUS33\",\n \"CITIUS33XXX\",\n \"CSCHUS6SXXX\",\n \"NOSCCATTXXX\",\n];\n\nexport const CARD_NUMBER_SAMPLES = [\n \"371449635398431\", //american express\n \"30569309025904\", //diners club\n \"6011111111111117\", //discover\n \"3530111333300000\", //jcb\n \"6304000000000000\", //laser\n \"5555555555554444\", //mastercard\n \"4111111111111111\", //visa\n];\n\n//An ABA routing number is a nine-digit code that identifies banks in the U.S.\nexport const ABA_NUMBER_SAMPLES = [\n \"111000025\",\n \"081000210\",\n \"104000029\",\n \"091300023\",\n \"123000220\",\n];\n\nexport const ROUTING_NUMBER_SAMPLES = [\n \"637530215\",\n \"130436324\",\n \"611531133\",\n \"865673685\",\n];\n\nexport const BANK_ACCOUNT_NUMBER_SAMPLES = [\n \"64766774\",\n \"39526009\",\n \"25048213\",\n \"72796383\",\n];\n\nexport const SORT_CODE_SAMPLES = [\"100000\", \"902127\", \"800551\"];\n\nexport const SSN_SAMPLES = [\"235-55-7216\", \"372-37-3976\", \"414-99-6488\"];\n\nexport const BANK_NAME_SAMPLES = [\n \"JPMorgan Chase & Co.\",\n \"Bank of America Corporation\",\n \"Wells Fargo & Company\",\n \"Citigroup Inc.\",\n \"Goldman Sachs Group Inc.\",\n];\n\nexport type BankAccount = {\n abaNumber?: string;\n accountHolderName: string;\n accountHolderType: \"company\" | \"individual\" | \"other\";\n accountNumber: string;\n accountType?: \"checking\" | \"savings\";\n bankName?: string;\n bsbNumber?: string;\n bankAddress?: string;\n bicSwift?: string;\n branchCode?: string;\n iban?: string;\n routingNumber?: string;\n institutionNumber?: string;\n branchTransitNumber?: string;\n sortCode?: string;\n};\n\nexport const UK_BANK_ACCOUNT_SAMPLES: BankAccount[] = [\n {\n accountHolderName: \"John Peters\",\n accountNumber: \"12345678\",\n bankAddress: \"1 Churchill Place, Canary Wharf, London, E14 5HP, UK\",\n bankName: \"Barclays plc\",\n bicSwift: \"BARCGB22\",\n iban: \"GB51BARC20039534871253\",\n sortCode: \"12-34-56\",\n accountHolderType: \"individual\",\n },\n {\n accountHolderName: \"Jane Evans\",\n accountNumber: \"87654321\",\n bankAddress: \"8 Canada Square, London, E14 5HQ, UK\",\n bankName: \"HSBC Holdings plc\",\n bicSwift: \"HSBCGB2L\",\n iban: \"GB82BARC20031847813531\",\n sortCode: \"65-43-21\",\n accountHolderType: \"company\",\n },\n];\n\nexport const US_BANK_ACCOUNT_SAMPLES: BankAccount[] = [\n {\n accountHolderName: \"Jack I. Taylor\",\n accountNumber: \"123456789012\",\n accountType: \"checking\",\n bankAddress:\n \"Bank of America Corporate Center, 100 North Tryon Street, Charlotte, NC 28255, USA\",\n bankName: \"Bank of America Corporation\",\n routingNumber: \"111000025\",\n accountHolderType: \"individual\",\n },\n {\n accountHolderName: \"Sally T King\",\n accountNumber: \"987654321098\",\n accountType: \"savings\",\n bankAddress: \"383 Madison Avenue, New York, NY 10179, USA\",\n bankName: \"JPMorgan Chase & Co.\",\n routingNumber: \"021000021\",\n accountHolderType: \"company\",\n },\n];\n\nexport const AU_BANK_ACCOUNT_SAMPLES: BankAccount[] = [\n {\n accountHolderName: \"William Kevin White\",\n accountNumber: \"123456789012\",\n accountType: \"savings\",\n bankAddress:\n \"Commonwealth Bank Centre, Tower 1, 201 Sussex Street, Sydney, NSW 2000, Australia\",\n bankName: \"Commonwealth Bank of Australia\",\n bicSwift: \"CTBAAU2S\",\n bsbNumber: \"062-000\",\n accountHolderType: \"individual\",\n },\n {\n accountHolderName: \"Jennifer Ann Brown\",\n accountNumber: \"987654321098\",\n accountType: \"checking\",\n bankAddress: \"Westpac Place, 275 Kent Street, Sydney, NSW 2000, Australia\",\n bankName: \"Westpac Banking Corporation\",\n bicSwift: \"WPACAU2S\",\n bsbNumber: \"032-001\",\n accountHolderType: \"company\",\n },\n];\n\nexport const CA_BANK_ACCOUNT_SAMPLES: BankAccount[] = [\n {\n accountHolderName: \"Charles Green\",\n accountNumber: \"123456789012\",\n accountType: \"savings\",\n bankAddress:\n \"Royal Bank Plaza, 200 Bay Street, North Tower, Toronto, ON M5J 2J5, Canada\",\n bankName: \"Royal Bank of Canada\",\n branchTransitNumber: \"45678\",\n institutionNumber: \"123\",\n accountHolderType: \"individual\",\n },\n {\n accountHolderName: \"Olivia Orange\",\n accountNumber: \"987654321098\",\n accountType: \"checking\",\n bankAddress:\n \"TD Canada Trust Tower, 161 Bay Street, Toronto, ON M5J 2S8, Canada\",\n bankName: \"Toronto-Dominion Bank\",\n branchTransitNumber: \"65432\",\n institutionNumber: \"987\",\n accountHolderType: \"company\",\n },\n];\n\nexport const BANK_ACCOUNT_SAMPLES = [\n ...UK_BANK_ACCOUNT_SAMPLES,\n ...US_BANK_ACCOUNT_SAMPLES,\n ...AU_BANK_ACCOUNT_SAMPLES,\n ...CA_BANK_ACCOUNT_SAMPLES,\n];\n","import { BANK_ACCOUNT_SAMPLES } from \"../constants/banking\";\nimport { randomArrayItem } from \"./randomArrayItem\";\n\nexport const randomBankAccount = () => {\n return randomArrayItem(BANK_ACCOUNT_SAMPLES);\n};\n","export const VAT_REGISTRATION_NUMBER_SAMPLES = [\n \"IE1234567T\",\n \"GB123456789\",\n \"XI123456789\",\n];\n\nexport const COMPANY_NAME_SAMPLES = [\n \"Acme Inc.\",\n \"Globex Ltd.\",\n \"Aurora LLC\",\n \"Serenity Systems\",\n \"Vulcan Ventures\",\n \"Umbrella Corp.\",\n];\n\nexport type Company = {\n name: string;\n vatRegNumber?: string;\n};\n","import {\n COMPANY_NAME_SAMPLES,\n Company,\n VAT_REGISTRATION_NUMBER_SAMPLES,\n} from \"../constants/companies\";\nimport { randomArrayItem } from \"./randomArrayItem\";\n\nexport const randomCompany = (): Company => {\n return {\n name: randomArrayItem(COMPANY_NAME_SAMPLES),\n vatRegNumber: randomArrayItem(VAT_REGISTRATION_NUMBER_SAMPLES),\n };\n};\n","import { isValue } from \"../validators/isValue\";\n\n// Max js digits is theoretically 17, but is actually 16, see Math.random output.\nexport const JS_MAX_DIGITS = 16;\n\n// TODO: with big numbers there will be less digits\nexport const randomFloat = (\n min: number = -9,\n max: number = 9,\n decimals?: number // toFixed accepts max 100 anyway... even if the docs say 20\n) => {\n const float = Math.random() * (max - min) + min;\n\n if (isValue(decimals)) return parseFloat(float.toFixed(decimals));\n\n return float;\n};\n\n// TODO: randomBigFloat\n","import { Coords } from \"../types\";\nimport { randomFloat } from \"./randomFloat\";\n\nexport const randomCoords = (): Coords => {\n return {\n lat: randomLat(),\n lng: randomLng(),\n };\n};\n\nexport const randomLat = () => {\n return randomFloat(-90, 90);\n};\n\nexport const randomLng = () => {\n return randomFloat(-180, 180);\n};\n","export const DOMAIN_NAMES = [\n \"gmail.com\",\n \"yahoo.com\",\n \"hotmail.com\",\n \"aol.com\",\n \"msn.com\",\n \"comcast.net\",\n \"live.com\",\n \"att.net\",\n \"mac.com\",\n \"me.com\",\n \"charter.net\",\n \"shaw.ca\",\n \"yahoo.ca\",\n \"mail.com\",\n \"qq.com\",\n \"web.de\",\n \"gmx.de\",\n \"mail.ru\",\n];\n","export const ANIMAL_NAMES = [\n \"Albatross\",\n \"Dolphin\",\n \"Elephant\",\n \"Giraffe\",\n \"Koala\",\n \"Lion\",\n \"Penguin\",\n \"Squirrel\",\n \"Tiger\",\n \"Turtle\",\n \"Whale\",\n \"Zebra\",\n];\n\nexport const TOOL_NAMES = [\n \"Axe\",\n \"Chisel\",\n \"Drill\",\n \"Hammer\",\n \"Mallet\",\n \"Pliers\",\n \"Saw\",\n \"Screwdriver\",\n \"Wrench\",\n \"Blowtorch\",\n \"Crowbar\",\n \"Ladder\",\n];\n\nexport const WESTERN_FIRST_NAMES = [\n \"Adrian\",\n \"Albert\",\n \"Alexander\",\n \"Alice\",\n \"Amanda\",\n \"Amy\",\n \"Benjamin\",\n \"David\",\n \"Emma\",\n \"Esther\",\n \"Olivia\",\n \"Ruby\",\n \"Sarah\",\n \"Victoria\",\n];\n\nexport const WESTERN_LAST_NAMES = [\n \"Anderson\",\n \"Brown\",\n \"Davis\",\n \"Jackson\",\n \"Johnson\",\n \"Jones\",\n \"Miller\",\n \"Moore\",\n \"Smith\",\n \"Taylor\",\n \"Thomas\",\n \"White\",\n \"Williams\",\n \"Wilson\",\n];\n\nexport const CYRILLIC_FIRST_NAMES = [\n \"Абигаил\",\n \"Агнес\",\n \"Адам\",\n \"Адриан\",\n \"Алан\",\n \"Александр\",\n \"Алиса\",\n \"Альберт\",\n \"Аманда\",\n \"Амелия\",\n \"Эми\",\n \"Эндрю\",\n];\n\nexport const CYRILLIC_LAST_NAMES = [\n \"Андерсон\",\n \"Браун\",\n \"Вилсон\",\n \"Джексон\",\n \"Джонс\",\n \"Джонсон\",\n \"Дэвис\",\n \"Миллер\",\n \"Мур\",\n \"Смит\",\n \"Тейлор\",\n \"Томас\",\n \"Уайт\",\n \"Уильямс\",\n];\n\nexport const JAPANESE_FIRST_NAMES = [\n \"アグネス\",\n \"アダム\",\n \"アドリアン\",\n \"アビゲイル\",\n \"アマンダ\",\n \"アミー\",\n \"アメリア\",\n \"アラン\",\n \"アリス\",\n \"アルバート\",\n \"アレクサンダー\",\n \"アンドリュー\",\n];\n\nexport const JAPANESE_LAST_NAMES = [\n \"アンダーソン\",\n \"ウィリアムズ\",\n \"ウィルソン\",\n \"ジャクソン\",\n \"ジョーンズ\",\n \"ジョンソン\",\n \"スミス\",\n \"タイラー\",\n \"デイビス\",\n \"トーマス\",\n \"ブラウン\",\n \"ホワイト\",\n \"ミラー\",\n \"モア\",\n];\n\nexport const ARABIC_FIRST_NAMES = [\n \"آدريان\",\n \"آدم\",\n \"آلان\",\n \"آلبرت\",\n \"آليس\",\n \"آماندا\",\n \"آمي\",\n \"آميليا\",\n \"أبيجيل\",\n \"أغنيس\",\n \"ألكسندر\",\n \"أندرو\",\n];\n\nexport const ARABIC_LAST_NAMES = [\n \"أندرسون\",\n \"براون\",\n \"تايلور\",\n \"توماس\",\n \"جاكسون\",\n \"جونز\",\n \"جونسون\",\n \"ديفيس\",\n \"سميث\",\n \"مور\",\n \"ميلر\",\n \"وايت\",\n \"ويلسون\",\n \"ويليامز\",\n];\n\nexport const FIRST_NAMES = [\n ...WESTERN_FIRST_NAMES,\n ...CYRILLIC_FIRST_NAMES,\n ...JAPANESE_FIRST_NAMES,\n ...ARABIC_FIRST_NAMES,\n];\n\nexport const LAST_NAMES = [\n ...WESTERN_LAST_NAMES,\n ...CYRILLIC_LAST_NAMES,\n ...JAPANESE_LAST_NAMES,\n ...ARABIC_LAST_NAMES,\n];\n","import { WESTERN_FIRST_NAMES, WESTERN_LAST_NAMES } from \"../constants/names\";\nimport { incrementalId } from \"../helpers/incrementalId\";\nimport { randomArrayItem } from \"./randomArrayItem\";\n\n/**\n *\n * @returns a unique social-like handle\n * @example \"john.doe15\"\n */\nexport const randomHandle = ({ suffix }: { suffix?: string } = {}): string =>\n (\n randomArrayItem(WESTERN_FIRST_NAMES) +\n \".\" +\n randomArrayItem(WESTERN_LAST_NAMES)\n ).toLowerCase() +\n incrementalId() + // process-unique\n (suffix ? suffix : \"\");\n","import { DOMAIN_NAMES } from \"../constants/domains\";\nimport { randomArrayItem } from \"./randomArrayItem\";\nimport { randomHandle } from \"./randomHandle\";\n\nexport const randomEmail = ({\n handle,\n handleSuffix,\n}: { handle?: string; handleSuffix?: string } = {}) =>\n `${handle || randomHandle({ suffix: handleSuffix })}@${randomArrayItem(\n DOMAIN_NAMES\n )}`;\n","export const EMOJI_SAMPLE = [\n \"😀\",\n \"😁\",\n \"😂\",\n \"🤣\",\n \"😃\",\n \"😄\",\n \"😅\",\n \"😆\",\n \"😉\",\n \"😊\",\n \"😋\",\n \"😎\",\n \"😍\",\n \"😘\",\n \"😗\",\n \"😙\",\n];\n\nexport const SPECIAL_CHARACTERS = [\"!\", \"@\", \"#\", \"$\", \"%\", \"^\", \"&\", \"*\"];\n","import { EMOJI_SAMPLE } from \"../constants/unicode\";\nimport { randomArrayItem } from \"./randomArrayItem\";\n\nexport const randomEmoji = () => {\n return randomArrayItem(EMOJI_SAMPLE);\n};\n","import { randomArrayItem } from \"./randomArrayItem\";\n\nexport const randomEmptyValue = () => {\n return randomArrayItem([undefined, null, NaN, Infinity]);\n};\n","import { enumKeys } from \"../helpers/enumKeys\";\nimport { ObjectKey } from \"../types/Object\";\nimport { randomArrayItem } from \"./randomArrayItem\";\n\nexport const randomEnumKey = <T extends object>(arg: T): ObjectKey<T> => {\n const keys = enumKeys(arg);\n\n return randomArrayItem(keys);\n};\n","import { enumValues } from \"../helpers/enumValues\";\nimport { ObjectValue } from \"../types/Object\";\nimport { randomArrayItem } from \"./randomArrayItem\";\n\nexport const randomEnumValue = <T extends object>(arg: T): ObjectValue<T> => {\n const values = enumValues(arg);\n\n return randomArrayItem(values);\n};\n","export const VERBS = [\n \"act\",\n \"add\",\n \"agree\",\n \"allow\",\n \"be\",\n \"catch\",\n \"create\",\n \"delete\",\n \"discover\",\n \"eat\",\n \"explore\",\n \"go\",\n \"help\",\n \"imagine\",\n \"jump\",\n \"merge\",\n \"need\",\n \"offer\",\n \"play\",\n \"read\",\n \"run\",\n \"search\",\n \"skip\",\n \"solve\",\n \"speak\",\n \"think\",\n \"try\",\n \"work\",\n \"write\",\n];\n\nexport const NOUNS = [\n \"city\",\n \"coffee\",\n \"courage\",\n \"fact\",\n \"family\",\n \"flower\",\n \"food\",\n \"friend\",\n \"fun\",\n \"hope\",\n \"justice\",\n \"key\",\n \"life\",\n \"love\",\n \"music\",\n \"smile\",\n \"time\",\n];\n\nexport const ADJECTIVES = [\n \"absolute\",\n \"compassionate\",\n \"cozy\",\n \"dull\",\n \"enigmatic\",\n \"fascinating\",\n \"interesting\",\n \"playful\",\n \"predictable\",\n \"remarkable\",\n \"soothing\",\n \"sunny\",\n \"unforgettable\",\n \"wonderful\",\n];\n\nexport const ADVERBS = [\n \"accidentally\",\n \"accommodatingly\",\n \"boldly\",\n \"briskly\",\n \"carefully\",\n \"efficiently\",\n \"freely\",\n \"gently\",\n \"happily\",\n \"lightly\",\n \"loudly\",\n \"quickly\",\n \"quietly\",\n \"suddenly\",\n \"unexpectedly\",\n \"wisely\",\n];\n\nexport const LONG_WORDS = [\n \"Pneumonoultramicroscopicsilicovolcanoconiosis\",\n \"Floccinaucinihilipilification\",\n \"Pseudopseudohypoparathyroidism\",\n \"Hippopotomonstrosesquippedaliophobia\",\n \"Antidisestablishmentarianism\",\n \"Supercalifragilisticexpialidocious\",\n \"Honorificabilitudinitatibus\",\n];\n\nexport const JS_RESERVED_WORDS = [\n \"abstract\",\n \"arguments\",\n \"await\",\n \"boolean\",\n \"break\",\n \"byte\",\n \"case\",\n \"catch\",\n \"char\",\n \"class\",\n \"const\",\n \"continue\",\n \"debugger\",\n \"default\",\n \"delete\",\n \"do\",\n \"double\",\n \"else\",\n \"enum*\",\n \"eval\",\n \"export\",\n \"extends\",\n \"false\",\n \"final\",\n \"finally\",\n \"float\",\n \"for\",\n \"function\",\n \"goto\",\n \"if\",\n \"implements\",\n \"import\",\n \"in\",\n \"instanceof\",\n \"int\",\n \"interface\",\n \"let\",\n \"long\",\n \"native\",\n \"new\",\n \"null\",\n \"package\",\n \"private\",\n \"protected\",\n \"public\",\n \"return\",\n \"short\",\n \"static\",\n \"super\",\n \"switch\",\n \"synchronized\",\n \"this\",\n \"throw\",\n \"throws\",\n \"transient\",\n \"true\",\n \"try\",\n \"typeof\",\n \"var\",\n \"void\",\n \"volatile\",\n \"while\",\n \"with\",\n \"yield\",\n];\n\nexport const HTML_COLOR_NAME_SAMPLES = [\n \"AliceBlue\",\n \"Aqua\",\n \"Aquamarine\",\n \"Azure\",\n \"Beige\",\n \"Bisque\",\n \"Black\",\n \"Blue\",\n \"BlueViolet\",\n \"Brown\",\n \"BurlyWood\",\n \"CadetBlue\",\n \"Chartreuse\",\n \"Chocolate\",\n \"Coral\",\n \"DarkSlateGray\",\n \"DeepPink\",\n \"Gold\",\n \"Lime\",\n \"Olive\",\n \"Orchid\",\n \"Salmon\",\n \"Turquoise\",\n];\n\nexport const WORDS = [\n ...VERBS,\n ...NOUNS,\n ...ADJECTIVES,\n ...ADVERBS,\n ...LONG_WORDS,\n];\n","import { NOUNS, VERBS, WORDS } from \"../constants/words\";\nimport { randomArrayItem } from \"./randomArrayItem\";\n\nexport const randomWord = () => {\n return randomArrayItem(WORDS);\n};\n\nexport const randomNoun = () => {\n return randomArrayItem(NOUNS);\n};\n\nexport const randomVerb = () => {\n return randomArrayItem(VERBS);\n};\n","import { array } from \"../helpers\";\nimport { capitalize } from \"../helpers/capitalize\";\nimport { randomInt } from \"./randomInt\";\nimport { randomWord } from \"./randomWord\";\n\n// TODO: add a comma in the middle of the sentence\n/**\n * Generates a random paragraph of text.\n * @param maxCharacters The maximum number of characters. The paragraph will be truncated to this length if it exceeds it. Default is 200.\n * @param words The number of words. Default is 8.\n * @returns A random paragraph of text.\n */\nexport const randomParagraph = ({\n maxCharacters = 200,\n minWords = 8,\n maxWords = 16,\n}: {\n maxCharacters?: number;\n minWords?: number;\n maxWords?: number;\n} = {}) => {\n return capitalize(\n array(randomInt({ min: minWords, max: maxWords }), () => randomWord())\n .join(\" \")\n .slice(0, maxCharacters - 1) + \".\"\n );\n};\n","import { randomArrayItem } from \"./randomArrayItem\";\nimport { randomParagraph } from \"./randomParagraph\";\nimport { randomWord } from \"./randomWord\";\n\nconst fileExtensions = [\"png\", \"jpg\", \"jpeg\", \"gif\", \"svg\", \"webp\"];\n\n// This is a client only function\nexport const randomFile = ({\n name,\n extension,\n}: {\n name?: string;\n extension?: string;\n} = {}): File | undefined => {\n if (typeof File === \"undefined\") return undefined;\n\n const _extension = extension || randomArrayItem(fileExtensions);\n return new File(\n [randomParagraph()], // TODO: Use random char string\n `${name || randomWord()}.${_extension}`,\n {\n type: `image/${_extension}`,\n }\n );\n};\n","export const HEX_VALUES = [\n \"0\",\n \"1\",\n \"2\",\n \"3\",\n \"4\",\n \"5\",\n \"6\",\n \"7\",\n \"8\",\n \"9\",\n \"A\",\n \"B\",\n \"C\",\n \"D\",\n \"E\",\n \"F\",\n];\n","import { HEX_VALUES } from \"../constants/hex\";\nimport { array } from \"../helpers\";\nimport { randomArrayItem } from \"./randomArrayItem\";\n\nexport const randomHexColor = () => {\n return \"#\" + array(6, () => randomArrayItem(HEX_VALUES)).join(\"\");\n};\n","import { HEX_VALUES } from \"../constants/hex\";\nimport { randomArrayItem } from \"./randomArrayItem\";\n\nexport const randomHexValue = () => {\n return randomArrayItem(HEX_VALUES);\n};\n","import { HTML_COLOR_NAME_SAMPLES } from \"../constants/words\";\nimport { randomArrayItem } from \"./randomArrayItem\";\n\nexport const randomHtmlColorName = () => {\n return randomArrayItem(HTML_COLOR_NAME_SAMPLES);\n};\n","import { IBAN_SAMPLES } from \"../constants/banking\";\nimport { randomArrayItem } from \"./randomArrayItem\";\n\nexport const randomIBAN = () => {\n return randomArrayItem(IBAN_SAMPLES);\n};\n","import { array } from \"../helpers/array\";\nimport { randomInt } from \"./randomInt\";\n\nexport const randomIP = () => {\n return array(4, () => randomInt({ min: 0, max: 255 }).toString()).join(\".\");\n};\n","import {\n ANIMAL_NAMES,\n FIRST_NAMES,\n LAST_NAMES,\n WESTERN_FIRST_NAMES,\n WESTERN_LAST_NAMES,\n TOOL_NAMES,\n} from \"../constants/names\";\nimport { randomArrayItem } from \"./randomArrayItem\";\n\nexport const randomName = () =>\n randomArrayItem([...ANIMAL_NAMES, ...TOOL_NAMES]);\n\nexport const randomFirstName = () => randomArrayItem(FIRST_NAMES);\n\nexport const randomLastName = () => randomArrayItem(LAST_NAMES);\n\nexport const randomFullName = () =>\n randomArrayItem(WESTERN_FIRST_NAMES) +\n \" \" +\n randomArrayItem(WESTERN_LAST_NAMES);\n","import { array } from \"../helpers/array\";\nimport { randomInt } from \"./randomInt\";\n\n/**\n * Generates a random numeric code that can be used for verification codes, etc.\n * Does not start with 0.\n * @param length The length of the code to generate.\n * @returns A random numeric code.\n * @example\n * randomNumericCode(); => \"123456\"\n * @example\n * randomNumericCode({ length: 4 }); => \"1234\"\n */\nexport const randomNumericCode = ({ length = 6 }: { length?: number } = {}) => {\n if (length < 1)\n throw new Error(\"randomNumericCode: Length must be greater than 0.\");\n\n return array(length, (_, index) =>\n randomInt({ min: !index ? 1 : 0, max: 9 })\n ).join(\"\");\n};\n","import { array } from \"../helpers\";\nimport { PlainObject } from \"../types\";\nimport { randomArray } from \"./randomArray\";\nimport { randomArrayItem } from \"./randomArrayItem\";\nimport { randomInt } from \"./randomInt\";\nimport { randomValue } from \"./randomValue\";\nimport { randomNoun } from \"./randomWord\";\n\nexport const randomObject = ({\n maxDepth = 5,\n circular = false,\n}: {\n maxDepth?: number;\n circular?: boolean;\n} = {}) => {\n const getRandomObject = (depth: number = 0): PlainObject => {\n if (depth >= maxDepth) return {};\n\n const keys = array(randomInt({ min: 1, max: 5 }), randomNoun);\n return keys.reduce((partial, key) => {\n const valueOrObject = randomArrayItem([\"value\", \"object\", \"array\"]);\n\n if (valueOrObject === \"object\") {\n const object = getRandomObject(depth + 1);\n partial[key] = object;\n if (\n circular &&\n randomArrayItem([true, false], { weights: [0.2, 0.8] })\n ) {\n object.circular = object;\n }\n } else if (valueOrObject === \"array\") {\n const array = randomArray();\n partial[key] = array;\n } else {\n const value = randomValue();\n partial[key] = value;\n }\n return partial;\n }, {} as PlainObject);\n };\n\n const object = getRandomObject();\n\n return object;\n};\n","import { SPECIAL_CHARACTERS } from \"../constants/unicode\";\nimport { randomArrayItem } from \"./randomArrayItem\";\nimport { randomInt } from \"./randomInt\";\nimport { randomString } from \"./randomString\";\n\nexport const randomPassword = ({\n minChars = 9,\n maxChars = 32,\n}: { minChars?: number; maxChars?: number } = {}) =>\n randomString({ length: 1 }).toUpperCase() + // Upper case\n randomString({ length: randomInt({ min: minChars, max: maxChars }) - 3 }) + // At least 9 chars\n randomArrayItem(SPECIAL_CHARACTERS) + // Special character\n randomInt({ min: 1, max: 9 }); // Number\n","import { array } from \"../helpers\";\nimport { randomWord } from \"./randomWord\";\n\nexport const randomPath = ({\n depth = 3,\n}: {\n depth?: number;\n} = {}) => {\n return array(depth, randomWord).join(\"/\");\n};\n","export const PHONE_NUMBER_SAMPLES = [\n \"+44 20 7123 4567\", // (United Kingdom)\n \"+33 1 45 67 89 10\", // (France)\n \"+81 3 1234 5678\", //(Japan)\n \"+61 2 9876 5432\", //(Australia)\n \"+49 30 9876 5432\", //(Germany)\n];\n","import { PHONE_NUMBER_SAMPLES } from \"../constants/phoneNumbers\";\nimport { randomArrayItem } from \"./randomArrayItem\";\n\nexport const randomPhoneNumber = () => {\n return randomArrayItem(PHONE_NUMBER_SAMPLES);\n};\n","import { incrementalId } from \"../helpers\";\n\n/**\n * This is a light-weight version of the `generateUuid` function\n * To be used only for test purposed and NOT for production\n * Leave 0s, so it gets immediately recognized as a fake uuid\n *\n * /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i\n */\nexport const randomUUID = () => {\n const id = incrementalId().toString().padStart(15, \"0\");\n const digit12 = id.substring(0, 12);\n const digit3 = id.substring(12, 15);\n return `00000000-0000-1000-8${digit3}-${digit12}`;\n};\n","import { PlainObject } from \"../types\";\n\nexport const formatTrpcInputQueryString = (input: PlainObject) => {\n return new URLSearchParams({\n input: JSON.stringify(input),\n });\n};\n"]}
1
+ {"version":3,"sources":["../src/helpers/array.ts","../src/helpers/uniqueValues.ts","../src/helpers/arrayDiff.ts","../src/helpers/arrayIntersection.ts","../src/helpers/capitalize.ts","../src/helpers/chunkArray.ts","../src/helpers/chunkedAll.ts","../src/helpers/chunkedAsync.ts","../src/helpers/sleep.ts","../src/helpers/chunkedDynamic.ts","../src/helpers/clamp.ts","../src/regex/controlCharRegex.ts","../src/regex/invisibleWhitespaceRegex.ts","../src/regex/lineSeparatorRegex.ts","../src/regex/paragraphSeparatorRegex.ts","../src/helpers/cleanSpaces.ts","../src/helpers/cyclicalItem.ts","../src/helpers/dir.ts","../src/validators/isNumber.ts","../src/validators/isSpacedString.ts","../src/validators/isString.ts","../src/validators/isNumeric.ts","../src/helpers/enumKeys.ts","../src/validators/isKey.ts","../src/helpers/enumValues.ts","../src/helpers/filterAlphanumeric.ts","../src/helpers/first.ts","../src/helpers/firstKey.ts","../src/helpers/firstValue.ts","../src/helpers/getCookieByName.ts","../src/helpers/getKeys.ts","../src/helpers/getUrlSearchParams.ts","../src/helpers/getUrlSearchParam.ts","../src/helpers/incrementalId.ts","../src/helpers/keysLength.ts","../src/helpers/lastIndex.ts","../src/helpers/last.ts","../src/validators/isArray.ts","../src/validators/isArrayIncluded.ts","../src/validators/isBoolean.ts","../src/validators/isServer.ts","../src/validators/isClient.ts","../src/validators/isBrowser.ts","../src/validators/isFunction.ts","../src/validators/isValue.ts","../src/validators/isBuffer.ts","../src/validators/isEmail.ts","../src/validators/isObject.ts","../src/validators/isEmpty.ts","../src/validators/isFile.ts","../src/validators/isFutureDate.ts","../src/validators/isJsDate.ts","../src/validators/isLastIndex.ts","../src/validators/isNotEmptyString.ts","../src/validators/isNumericId.ts","../src/validators/isPastDate.ts","../src/validators/isPromise.ts","../src/validators/isPWA.ts","../src/validators/isReactElement.ts","../src/validators/isRegExp.ts","../src/validators/isSame.ts","../src/validators/isStringDate.ts","../src/validators/isURL.ts","../src/validators/isUUID.ts","../src/helpers/merge.ts","../src/helpers/mergeArrays.ts","../src/helpers/moveToFirst.ts","../src/helpers/moveToLast.ts","../src/helpers/normalizeNumber.ts","../src/helpers/objectDiff.ts","../src/helpers/omit.ts","../src/helpers/parseDate.ts","../src/helpers/pickObjectKeys.ts","../src/helpers/pickObjectValues.ts","../src/helpers/promiseWithTimeout.ts","../src/random/randomInt.ts","../src/random/randomChar.ts","../src/regex/letterRegex.ts","../src/helpers/scrambleText.ts","../src/helpers/serialize.ts","../src/helpers/seriesAll.ts","../src/helpers/setObjectPath.ts","../src/helpers/setUrlSearchParams.ts","../src/helpers/shuffle.ts","../src/_internals/objectSerializer.ts","../src/helpers/stringify.ts","../src/helpers/toggleArrayValue.ts","../src/helpers/truncate.ts","../src/dates/isOver18.ts","../src/dates/startOfNextMonth.ts","../src/dates/startOfNextWeek.ts","../src/dates/startOfThisWeek.ts","../src/dates/startOfDay.ts","../src/dates/startOfToday.ts","../src/dates/startOfTomorrow.ts","../src/formatters/formatCamelCase.ts","../src/formatters/formatCookies.ts","../src/formatters/formatNumber.ts","../src/formatters/formatPercentage.ts","../src/formatters/formatProgress.ts","../src/formatters/stringToCSSUnicode.ts","../src/formatters/stringToUnicode.ts","../src/math/average.ts","../src/math/isBetween.ts","../src/math/isOutside.ts","../src/math/isStrictlyBetween.ts","../src/math/max.ts","../src/math/min.ts","../src/math/multiply.ts","../src/math/normaliseNumber.ts","../src/math/normaliseArray.ts","../src/math/percentageChange.ts","../src/math/sum.ts","../src/prisma/prismaDateRange.ts","../src/constants/addresses.ts","../src/random/randomArrayItem.ts","../src/random/randomAddress.ts","../src/random/randomAlphaNumericCode.ts","../src/random/randomBool.ts","../src/random/randomDate.ts","../src/random/randomString.ts","../src/random/randomSymbol.ts","../src/random/randomValue.ts","../src/random/randomArray.ts","../src/constants/banking.ts","../src/random/randomBankAccount.ts","../src/constants/companies.ts","../src/random/randomCompany.ts","../src/random/randomFloat.ts","../src/random/randomCoords.ts","../src/constants/domains.ts","../src/constants/names.ts","../src/random/randomHandle.ts","../src/random/randomEmail.ts","../src/constants/unicode.ts","../src/random/randomEmoji.ts","../src/random/randomEmptyValue.ts","../src/random/randomEnumKey.ts","../src/random/randomEnumValue.ts","../src/constants/words.ts","../src/random/randomWord.ts","../src/random/randomParagraph.ts","../src/random/randomFile.ts","../src/constants/hex.ts","../src/random/randomHexColor.ts","../src/random/randomHexValue.ts","../src/random/randomHtmlColorName.ts","../src/random/randomIBAN.ts","../src/random/randomIP.ts","../src/random/randomName.ts","../src/random/randomNumericCode.ts","../src/random/randomObject.ts","../src/random/randomPassword.ts","../src/random/randomPath.ts","../src/constants/phoneNumbers.ts","../src/random/randomPhoneNumber.ts","../src/random/randomUUID.ts","../src/trpc/formatTrpcInputQueryString.ts"],"names":["array","length","mapFn","uniqueValues","arr","arrayDiff","arr1","arr2","value","arrayIntersection","capitalize","string","chunkArray","size","chunks","i","chunkedAll","chunkSize","fn","__async","chunkedAsync","chunkResults","chunkIndex","chunk","chunkResult","sleep","timeMs","resolve","chunkedDynamic","_0","_1","_2","_3","initialChunkSize","sleepTime","maxChunkDuration","chunkSizeStep","currentIndex","currentChunkSize","step","start","duration","clamp","number","min","max","controlCharRegex","invisibleWhitespaceRegex","lineSeparatorRegex","paragraphSeparatorRegex","cleanSpaces","str","cyclicalItem","index","dir","arg","maxDepth","isInt","isEven","isOdd","isPositive","isPositiveInt","isNegative","isNegativeInt","isNumber","isSpacedString","s","isString","isNumeric","enumKeys","key","isKey","obj","enumValues","enumObject","values","filterAlphanumeric","first","firstKey","firstValue","getCookieByName","name","cookies","cookie","cookieName","cookieValue","getKeys","getEnumerableOwnPropertySymbols","symbol","getUrlSearchParams","urlString","url","_e","getUrlSearchParam","param","id","incrementalId","keysLength","lastIndex","last","isArray","isArrayIncluded","isBoolean","isServer","isClient","isBrowser","isFunction","type","isValue","isBuffer","val","isEmail","isObject","isEmpty","isEmptyString","isEmptyObject","isEmptyArray","isFile","isFutureDate","date","parseDate","isJsDate","isLastIndex","isNotEmptyString","isNumericId","isPastDate","isPromise","isPWA","canUseSymbol","REACT_ELEMENT_TYPE","isReactElement","isRegExp","isSame","value1","value2","keys","isStringDate","pattern","isURL","isUUID","merge","target","source","merger","mergeArrays","arrayA","arrayB","item","moveToFirst","items","condition","resortedItems","firstItem","moveToLast","lastItem","normalizeNumber","objectDiff","leftObject","rightObject","diff","allKeys","omit","ret","pickObjectKeys","pickObjectValues","promiseWithTimeout","promise","timeoutMs","error","timeout","timeoutPromise","_","reject","randomInt","randomBigInt","randomPositiveInt","randomNegativeInt","randomMaxSafeInt","randomMaxInt","randomFormattedPercentage","randomChar","letterRegex","scrambleText","serialize","seriesAll","series","results","setObjectPath","path","set","relPath","setUrlSearchParams","currentURL","searchParams","isRelativeUrl","paramKey","paramValue","shuffle","newArray","j","objectSerializer","stack","cycleReplacer","_key","thisPos","stringify","toggleArrayValue","copy","acc","toggleArray","truncate","limit","ellipsis","position","argArray","ellipsisLength","startSliceLength","endSliceStart","isOver18","birthDate","now","birth","age","startOfNextMonth","startOfNextWeek","startOfThisWeek","startOfDay","day","startOfToday","startOfTomorrow","formatCamelCase","_m","p1","p2","formatCookies","object","formatNumber","compact","maxDigits","percentage","formatPercentage","digits","formatProgress","total","stringToCSSUnicode","text","char","codePoint","stringToUnicode","average","numbers","num","isBetween","isOutside","isStrictlyBetween","multiply","normaliseNumber","minValue","maxValue","normaliseArray","percentageChange","previous","current","perChange","sum","prismaDateRange","startDate","endDate","gte","lt","UK_ADDRESSES","US_ADDRESSES","EUROPE_ADDRESSES","MIXED_ADDRESSES","ADDRESSES","randomArrayItem","weights","totalWeight","random","randomAddress","chars","randomAlphaNumericCode","randomBool","datePlusDecade","datePlusMs","dateMinusDecade","ms","randomDate","parsedStartDate","parsedEndDate","finalStartDate","finalEndDate","randomMaxDate","randomFutureDate","randomPastDate","randomDateRange","randomString","randomSymbol","randomValue","randomArray","IBAN_SAMPLES","UK_BANK_ACCOUNT_SAMPLES","US_BANK_ACCOUNT_SAMPLES","AU_BANK_ACCOUNT_SAMPLES","CA_BANK_ACCOUNT_SAMPLES","BANK_ACCOUNT_SAMPLES","randomBankAccount","VAT_REGISTRATION_NUMBER_SAMPLES","COMPANY_NAME_SAMPLES","randomCompany","JS_MAX_DIGITS","randomFloat","decimals","float","randomCoords","randomLat","randomLng","DOMAIN_NAMES","ANIMAL_NAMES","TOOL_NAMES","WESTERN_FIRST_NAMES","WESTERN_LAST_NAMES","CYRILLIC_FIRST_NAMES","CYRILLIC_LAST_NAMES","JAPANESE_FIRST_NAMES","JAPANESE_LAST_NAMES","ARABIC_FIRST_NAMES","ARABIC_LAST_NAMES","FIRST_NAMES","LAST_NAMES","randomHandle","suffix","randomEmail","handle","handleSuffix","EMOJI_SAMPLE","SPECIAL_CHARACTERS","randomEmoji","randomEmptyValue","randomEnumKey","randomEnumValue","VERBS","NOUNS","ADJECTIVES","ADVERBS","LONG_WORDS","HTML_COLOR_NAME_SAMPLES","WORDS","randomWord","randomNoun","randomVerb","randomParagraph","maxCharacters","minWords","maxWords","fileExtensions","randomFile","extension","_extension","HEX_VALUES","randomHexColor","randomHexValue","randomHtmlColorName","randomIBAN","randomIP","randomName","randomFirstName","randomLastName","randomFullName","randomNumericCode","randomObject","circular","getRandomObject","depth","partial","valueOrObject","randomPassword","minChars","maxChars","randomPath","PHONE_NUMBER_SAMPLES","randomPhoneNumber","randomUUID","digit12","formatTrpcInputQueryString","input"],"mappings":"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B,CACL,IAAKC,GAAU,EACf,IAAKC,GAAU,CACjB,GAGWD,GAAY,IAChBJ,EAAY,IAAK,EAAE,EAGfK,GAAY,IAChBL,EAAY,KAAM,GAAG,ECfvB,IAAMM,GAAe,CAC1B,YACA,YACA,cACA,UACA,UACA,cACA,WACA,UACA,UACA,SACA,cACA,UACA,WACA,WACA,SACA,SACA,SACA,SACF,ECnBO,IAAMC,GAAe,CAC1B,YACA,UACA,WACA,UACA,QACA,OACA,UACA,WACA,QACA,SACA,QACA,OACF,EAEaC,GAAa,CACxB,MACA,SACA,QACA,SACA,SACA,SACA,MACA,cACA,SACA,YACA,UACA,QACF,EAEaC,EAAsB,CACjC,SACA,SACA,YACA,QACA,SACA,MACA,WACA,QACA,OACA,SACA,SACA,OACA,QACA,UACF,EAEaC,EAAqB,CAChC,WACA,QACA,QACA,UACA,UACA,QACA,SACA,QACA,QACA,SACA,SACA,QACA,WACA,QACF,EAEaC,GAAuB,CAClC,6CACA,iCACA,2BACA,uCACA,2BACA,yDACA,iCACA,6CACA,uCACA,uCACA,qBACA,gCACF,EAEaC,GAAsB,CACjC,mDACA,iCACA,uCACA,6CACA,iCACA,6CACA,iCACA,uCACA,qBACA,2BACA,uCACA,iCACA,2BACA,4CACF,EAEaC,GAAuB,CAClC,2BACA,qBACA,iCACA,iCACA,2BACA,qBACA,2BACA,qBACA,qBACA,iCACA,6CACA,sCACF,EAEaC,GAAsB,CACjC,uCACA,uCACA,iCACA,iCACA,iCACA,iCACA,qBACA,2BACA,2BACA,2BACA,2BACA,2BACA,qBACA,cACF,EAEaC,GAAqB,CAChC,uCACA,qBACA,2BACA,iCACA,2BACA,uCACA,qBACA,uCACA,uCACA,iCACA,6CACA,gCACF,EAEaC,GAAoB,CAC/B,6CACA,iCACA,uCACA,iCACA,uCACA,2BACA,uCACA,iCACA,2BACA,qBACA,2BACA,2BACA,uCACA,4CACF,EAEaC,GAAc,CACzB,GAAGR,EACH,GAAGE,GACH,GAAGE,GACH,GAAGE,EACL,EAEaG,GAAa,CACxB,GAAGR,EACH,GAAGE,GACH,GAAGE,GACH,GAAGE,EACL,ECnKO,IAAMG,GAAe,CAAC,CAAE,OAAAC,CAAO,EAAyB,CAAC,KAE5DxD,EAAgB6C,CAAmB,EACnC,IACA7C,EAAgB8C,CAAkB,GAClC,YAAY,EACdjO,EAAc,GACb2O,GAAkB,ICZd,IAAMC,GAAc,CAAC,CAC1B,OAAAC,EACA,aAAAC,CACF,EAAgD,CAAC,IAC/C,GAAGD,GAAUH,GAAa,CAAE,OAAQI,CAAa,CAAC,KAAK3D,EACrD0C,EACF,ICVK,IAAMkB,GAAe,CAC1B,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,WACF,EAEaC,GAAqB,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,GAAG,EChBlE,IAAMC,GAAc,IAClB9D,EAAgB4D,EAAY,ECF9B,IAAMG,GAAmB,IACvB/D,EAAgB,CAAC,OAAW,KAAM,IAAK,GAAQ,CAAC,ECClD,IAAMgE,GAAmC5R,GAAyB,CACvE,IAAMgF,EAAOlE,GAASd,CAAG,EAEzB,OAAO4N,EAAgB5I,CAAI,CAC7B,ECJO,IAAM6M,GAAqC7R,GAA2B,CAC3E,IAAMoB,EAASF,GAAWlB,CAAG,EAE7B,OAAO4N,EAAgBxM,CAAM,CAC/B,ECRO,IAAM0Q,EAAQ,CACnB,MACA,MACA,QACA,QACA,KACA,QACA,SACA,SACA,WACA,MACA,UACA,KACA,OACA,UACA,OACA,QACA,OACA,QACA,OACA,OACA,MACA,SACA,OACA,QACA,QACA,QACA,MACA,OACA,OACF,EAEaC,EAAQ,CACnB,OACA,SACA,UACA,OACA,SACA,SACA,OACA,SACA,MACA,OACA,UACA,MACA,OACA,OACA,QACA,QACA,MACF,EAEaC,GAAa,CACxB,WACA,gBACA,OACA,OACA,YACA,cACA,cACA,UACA,cACA,aACA,WACA,QACA,gBACA,WACF,EAEaC,GAAU,CACrB,eACA,kBACA,SACA,UACA,YACA,cACA,SACA,SACA,UACA,UACA,SACA,UACA,UACA,WACA,eAC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","sourcesContent":["export const array = <U extends (...args: any) => any>(\n length: number,\n mapFn: U = (() => {}) as U\n): ReturnType<U>[] => {\n return Array.from({ length }, mapFn);\n};\n","export const uniqueValues = (arr: any[]) => {\n return [...new Set(arr)];\n};\n","import { uniqueValues } from \"./uniqueValues\";\n\n// TODO: optimize with maps?\nexport const arrayDiff = (arr1: any[], arr2: any[]) => {\n return uniqueValues(\n arr1\n .filter((value) => !arr2.includes(value))\n .concat(arr2.filter((value) => !arr1.includes(value)))\n );\n};\n","import { uniqueValues } from \"./uniqueValues\";\n\nexport const arrayIntersection = <T>(arr1: T[], arr2: T[]): T[] => {\n return uniqueValues(arr1.filter((value) => arr2.includes(value)));\n};\n","export const capitalize = (string: string) => {\n return string.charAt(0).toUpperCase() + string.slice(1).toLowerCase();\n};\n","export const chunkArray = <T>(array: T[], size: number): T[][] => {\n const chunks: T[][] = [];\n for (let i = 0; i < array.length; i += size) {\n chunks.push(array.slice(i, i + size));\n }\n return chunks;\n};\n","import { chunkArray } from \"./chunkArray\";\n\nexport const chunkedAll = async <T>(\n array: T[],\n chunkSize: number,\n fn: (chunk: T[]) => Promise<any>\n): Promise<any[]> => {\n const chunks = chunkArray(array, chunkSize);\n return await Promise.all(chunks.map(fn));\n};\n","import { chunkArray } from \"./chunkArray\";\n\n/**\n * @description Run a series of (async) functions in order and return the results\n * @param array\n * @param chunkSize\n * @param fn\n *\n */\nexport const chunkedAsync = async <T>(\n array: T[],\n chunkSize: number,\n fn: (chunk: T[], chunkIndex: number, chunks: T[][]) => Promise<any>\n): Promise<any[]> => {\n const chunkResults: any[] = [];\n\n const chunks = chunkArray(array, chunkSize);\n for (const [chunkIndex, chunk] of chunks.entries()) {\n const chunkResult = await fn(chunk, chunkIndex, chunks);\n chunkResults.push(chunkResult);\n }\n\n return chunkResults;\n};\n","export const sleep = (timeMs: number): Promise<void> => {\n return new Promise((resolve) => {\n setTimeout(resolve, timeMs);\n });\n};\n","import { sleep } from \"./sleep\";\n\n/**\n * @description Run a series of (async) functions with dynamic chunk sizes\n * @param array - Array to chunk\n * @param initialChunkSize - Size of initial chunk\n * @param fn - Function to run on each chunk\n * @param options.sleepTime - Time to sleep between each chunk\n * @param options.maxChunkDuration - Time to sleep between each chunk\n * @param options.chunkSizeStep - Step to increase/decrease chunk size (works only if maxChunkDuration is set)\n */\nexport const chunkedDynamic = async <T>(\n array: T[],\n initialChunkSize: number,\n fn: (chunk: T[], currentChunkIndex: number) => Promise<any>,\n {\n sleepTime,\n maxChunkDuration,\n chunkSizeStep,\n }: {\n sleepTime?: number;\n maxChunkDuration?: number;\n chunkSizeStep?: number;\n } = {}\n): Promise<any[]> => {\n const chunkResults: any[] = [];\n\n let currentIndex = 0;\n let chunkIndex = 0;\n let currentChunkSize = initialChunkSize;\n const step = chunkSizeStep || 1;\n\n while (currentIndex < array.length) {\n const start = performance.now();\n const chunk = array.slice(currentIndex, currentIndex + currentChunkSize);\n const chunkResult = await fn(chunk, chunkIndex);\n chunkResults.push(chunkResult);\n if (sleepTime) await sleep(sleepTime);\n if (maxChunkDuration) {\n const duration = performance.now() - start;\n if (duration > maxChunkDuration) {\n if (currentChunkSize <= 1)\n // < is just for safety, should not go below 1\n await sleep(duration - maxChunkDuration); // Sleep the remaining time\n else {\n if (currentChunkSize - step < 1) currentChunkSize = 1;\n else currentChunkSize -= step; // decrease chunk size to slow down\n }\n } else {\n currentChunkSize += step; // increase chunk size to speed up\n }\n }\n\n currentIndex += currentChunkSize;\n chunkIndex += 1;\n }\n\n return chunkResults;\n};\n","export const clamp = ({\n number,\n min,\n max,\n}: {\n number: number;\n min: number;\n max: number;\n}) => {\n if (max < min && process.env.DEVERYTHING_WARNINGS) {\n console.warn(\"clamp: max < min\", { number, min, max });\n }\n\n if (number < min) {\n return min;\n }\n\n if (number > max) {\n return max;\n }\n\n return number;\n};\n","export const controlCharRegex = new RegExp(/\\p{C}/, \"gu\");\n\n// Charcodes:\n// [\n// 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 127, 129, 131, 133,\n// 135, 137, 139, 141, 143, 145, 147, 149, 151, 153, 155, 157, 159, 173, 888,\n// 896, 898, 907, 909, 930, 1328, 1367, 1419, 1424, 1480, 1482, 1484, 1486, 1515,\n// 1517, 1525, 1527, 1529, 1531, 1533, 1535, 1537, 1539, 1541, 1564, 1757, 1806,\n// 1867, 1970, 1972, 1974, 1976, 1978, 1980, 1982, 2043, 2094, 2111, 2140, 2143,\n// 2155, 2157, 2159, 2191, 2193, 2195, 2197, 2199, 2274, 2436, 2445, 2449, 2473,\n// 2481, 2483, 2485, 2490, 2501, 2505, 2511, 2513, 2515, 2517, 2520, 2522, 2526,\n// 2532, 2559, 2564, 2571, 2573, 2577, 2601, 2609, 2612, 2615, 2618, 2621, 2627,\n// 2629, 2633, 2638, 2640, 2642, 2644, 2646, 2648, 2653, 2655, 2657, 2659, 2661,\n// 2679, 2681, 2683, 2685, 2687, 2692, 2702, 2706, 2729, 2737, 2740, 2746, 2758,\n// 2762, 2766, 2769, 2771, 2773, 2775, 2777, 2779, 2781, 2783, 2788, 2802, 2804,\n// 2806, 2808, 2816, 2820, 2829, 2833, 2857, 2865, 2868, 2874, 2885, 2889, 2894,\n// 2896, 2898, 2900, 2904, 2906, 2910, 2916, 2936, 2938, 2940, 2942, 2944, 2948,\n// 2955, 2957, 2961, 2966, 2968, 2971, 2973, 2976, 2978, 2981, 2983, 2987, 2989,\n// 3002, 3004, 3011, 3013, 3017, 3022, 3025, 3027, 3029, 3032, 3034, 3036, 3038,\n// 3040, 3042, 3044, 3067, 3069, 3071, 3085, 3089, 3113, 3130, 3141, 3145, 3150,\n// 3152, 3154, 3156, 3159, 3163, 3166, 3172, 3184, 3186, 3188, 3190, 3213, 3217,\n// 3241, 3252, 3258, 3269, 3273, 3278, 3280, 3282, 3284, 3287, 3289, 3291, 3295,\n// 3300, 3312, 3316, 3318, 3320, 3322, 3324, 3326, 3341, 3345, 3397, 3401, 3408,\n// 3410, 3428, 3456, 3460, 3479, 3481, 3506, 3516, 3518, 3527, 3529, 3531, 3533,\n// 3541, 3543, 3552, 3554, 3556, 3568, 3573, 3575, 3577, 3579, 3581, 3583, 3643,\n// 3645, 3676, 3678, 3680, 3682, 3684, 3686, 3688, 3690, 3692, 3694, 3696, 3698,\n// 3700, 3702, 3704, 3706, 3708, 3710, 3712, 3715, 3717, 3723, 3748, 3750, 3774,\n// 3781, 3783, 3791, 3802, 3808, 3810, 3812, 3814, 3816, 3818, 3820, 3822, 3824,\n// 3826, 3828, 3830, 3832, 3834, 3836, 3838, 3912, 3949, 3951, 3992, 4029, 4045,\n// 4059, 4061, 4063, 4065, 4067, 4069, 4071, 4073, 4075, 4077, 4079, 4081, 4083,\n// 4085, 4087, 4089, 4091, 4093, 4095, 4294, 4296, 4298, 4300, 4302, 4681, 4686,\n// 4695, 4697, 4702, 4745, 4750, 4785, 4790, 4799, 4801, 4806, 4823, 4881, 4886,\n// 4955, 4989, 4991, 5018, 5020, 5022, 5110, 5118, 5789, 5791, 5881, 5883, 5885,\n// 5887, 5910, 5912, 5914, 5916, 5918, 5943, 5945, 5947, 5949, 5951, 5972, 5974,\n// 5976, 5978, 5980, 5982, 5997, 6001, 6004, 6006, 6008, 6010, 6012, 6014, 6110,\n// 6122, 6124, 6126, 6138, 6140, 6142, 6158, 6170, 6172, 6174, 6265, 6267, 6269,\n// 6271, 6315, 6317, 6319, 6390, 6392, 6394, 6396, 6398, 6431, 6444, 6446, 6460,\n// 6462, 6465, 6467, 6510, 6517, 6519, 6521, 6523, 6525, 6527, 6572, 6574, 6602,\n// 6604, 6606, 6619, 6621, 6684, 6751, 6781, 6794, 6796, 6798, 6810, 6812, 6814,\n// 6830, 6863, 6865, 6867, 6869, 6871, 6873, 6875, 6877, 6879, 6881, 6883, 6885,\n// 6887, 6889, 6891, 6893, 6895, 6897, 6899, 6901, 6903, 6905, 6907, 6909, 6911,\n// 6989, 6991, 7039, 7156, 7158, 7160, 7162, 7224, 7226, 7242, 7244, 7305, 7307,\n// 7309, 7311, 7355, 7368, 7370, 7372, 7374, 7419, 7421, 7423, 7958, 7966, 8006,\n// 8014, 8024, 8026, 8028, 8030, 8062, 8117, 8133, 8148, 8156, 8176, 8181, 8191,\n// 8203, 8205, 8207, 8234, 8236, 8238, 8288, 8290, 8292, 8294, 8296, 8298, 8300,\n// 8302, 8306, 8335, 8349, 8351, 8385, 8387, 8389, 8391, 8393, 8395, 8397, 8399,\n// 8433, 8435, 8437, 8439, 8441, 8443, 8445, 8447, 8588, 8590, 9255, 9257, 9259,\n// 9261, 9263, 9265, 9267, 9269, 9271, 9273, 9275, 9277, 9279, 9291, 9293, 9295,\n// 9297, 9299, 9301, 9303, 9305, 9307, 9309, 9311, 11124, 11158, 11508, 11510,\n// 11512, 11558, 11560, 11562, 11564, 11566, 11624, 11626, 11628, 11630, 11633,\n// 11635, 11637, 11639, 11641, 11643, 11645, 11671, 11673, 11675, 11677, 11679,\n// 11687, 11695, 11703, 11711, 11719, 11727, 11735, 11743, 11870, 11872, 11874,\n// 11876, 11878, 11880, 11882, 11884, 11886, 11888, 11890, 11892, 11894, 11896,\n// 11898, 11900, 11902, 11930, 12020, 12022, 12024, 12026, 12028, 12030, 12246,\n// 12248, 12250, 12252, 12254, 12256, 12258, 12260, 12262, 12264, 12266, 12268,\n// 12270, 12284, 12286, 12352, 12439, 12544, 12546, 12548, 12592, 12687, 12772,\n// 12774, 12776, 12778, 12780, 12782, 12831, 42125, 42127, 42183, 42185, 42187,\n// 42189, 42191, 42540, 42542, 42544, 42546, 42548, 42550, 42552, 42554, 42556,\n// 42558, 42744, 42746, 42748, 42750, 42955, 42957, 42959, 42962, 42964, 42970,\n// 42972, 42974, 42976, 42978, 42980, 42982, 42984, 42986, 42988, 42990, 42992,\n// 43053, 43055, 43066, 43068, 43070, 43128, 43130, 43132, 43134, 43206, 43208,\n// 43210, 43212, 43226, 43228, 43230, 43348, 43350, 43352, 43354, 43356, 43358,\n// 43389, 43391, 43470, 43482, 43484, 43519, 43575, 43577, 43579, 43581, 43583,\n// 43598, 43610, 43715, 43717, 43719, 43721, 43723, 43725, 43727, 43729, 43731,\n// 43733, 43735, 43737, 43767, 43769, 43771, 43773, 43775, 43783, 43791, 43799,\n// 43801, 43803, 43805, 43807, 43815, 43823, 43884, 43886, 44014, 44026, 44028,\n// 44030, 55204, 55206, 55208, 55210, 55212, 55214, 55239, 55241, 55292, 55294,\n// 55296, 55298, 55300, 55302, 55304, 55306, 55308, 55310, 55312, 55314, 55316,\n// 55318, 55320, 55322, 55324, 55326, 55328, 55330, 55332, 55334, 55336, 55338,\n// 55340, 55342, 55344, 55346, 55348, 55350, 55352, 55354, 55356, 55358, 55360,\n// 55362, 55364, 55366, 55368, 55370, 55372, 55374, 55376, 55378, 55380, 55382,\n// 55384, 55386, 55388, 55390, 55392, 55394, 55396, 55398, 55400, 55402, 55404,\n// 55406, 55408, 55410, 55412, 55414, 55416, 55418, 55420, 55422, 55424, 55426,\n// 55428, 55430, 55432, 55434, 55436, 55438, 55440, 55442, 55444, 55446, 55448,\n// 55450, 55452, 55454, 55456, 55458, 55460, 55462, 55464, 55466, 55468, 55470,\n// 55472, 55474, 55476, 55478, 55480, 55482, 55484, 55486, 55488, 55490, 55492,\n// 55494, 55496, 55498, 55500, 55502, 55504, 55506, 55508, 55510, 55512, 55514,\n// 55516, 55518, 55520, 55522, 55524, 55526, 55528, 55530, 55532, 55534, 55536,\n// 55538, 55540, 55542, 55544, 55546, 55548, 55550, 55552, 55554, 55556, 55558,\n// 55560, 55562, 55564, 55566, 55568, 55570, 55572, 55574, 55576, 55578, 55580,\n// 55582, 55584, 55586, 55588, 55590, 55592, 55594, 55596, 55598, 55600, 55602,\n// 55604, 55606, 55608, 55610, 55612, 55614, 55616, 55618, 55620, 55622, 55624,\n// 55626, 55628, 55630, 55632, 55634, 55636, 55638, 55640, 55642, 55644, 55646,\n// 55648, 55650, 55652, 55654, 55656, 55658, 55660, 55662, 55664, 55666, 55668,\n// 55670, 55672, 55674, 55676, 55678, 55680, 55682, 55684, 55686, 55688, 55690,\n// 55692, 55694, 55696, 55698, 55700, 55702, 55704, 55706, 55708, 55710, 55712,\n// 55714, 55716, 55718, 55720, 55722, 55724, 55726, 55728, 55730, 55732, 55734,\n// 55736, 55738, 55740, 55742, 55744, 55746, 55748, 55750, 55752, 55754, 55756,\n// 55758, 55760, 55762, 55764, 55766, 55768, 55770, 55772, 55774, 55776, 55778,\n// 55780, 55782, 55784, 55786, 55788, 55790, 55792, 55794, 55796, 55798, 55800,\n// 55802, 55804, 55806, 55808, 55810, 55812, 55814, 55816, 55818, 55820, 55822,\n// 55824, 55826, 55828, 55830, 55832, 55834, 55836, 55838, 55840, 55842, 55844,\n// 55846, 55848, 55850, 55852, 55854, 55856, 55858, 55860, 55862, 55864, 55866,\n// 55868, 55870, 55872, 55874, 55876, 55878, 55880, 55882, 55884, 55886, 55888,\n// 55890, 55892, 55894, 55896, 55898, 55900, 55902, 55904, 55906, 55908, 55910,\n// 55912, 55914, 55916, 55918, 55920, 55922, 55924, 55926, 55928, 55930, 55932,\n// 55934, 55936, 55938, 55940, 55942, 55944, 55946, 55948, 55950, 55952, 55954,\n// 55956, 55958, 55960, 55962, 55964, 55966, 55968, 55970, 55972, 55974, 55976,\n// 55978, 55980, 55982, 55984, 55986, 55988, 55990, 55992, 55994, 55996, 55998,\n// 56000, 56002, 56004, 56006, 56008, 56010, 56012, 56014, 56016, 56018, 56020,\n// 56022, 56024, 56026, 56028, 56030, 56032, 56034, 56036, 56038, 56040, 56042,\n// 56044, 56046, 56048, 56050, 56052, 56054, 56056, 56058, 56060, 56062, 56064,\n// 56066, 56068, 56070, 56072, 56074, 56076, 56078, 56080, 56082, 56084, 56086,\n// 56088, 56090, 56092, 56094, 56096, 56098, 56100, 56102, 56104, 56106, 56108,\n// 56110, 56112, 56114, 56116, 56118, 56120, 56122, 56124, 56126, 56128, 56130,\n// 56132, 56134, 56136, 56138, 56140, 56142, 56144, 56146, 56148, 56150, 56152,\n// 56154, 56156, 56158, 56160, 56162, 56164, 56166, 56168, 56170, 56172, 56174,\n// 56176, 56178, 56180, 56182, 56184, 56186, 56188, 56190, 56192, 56194, 56196,\n// 56198, 56200, 56202, 56204, 56206, 56208, 56210, 56212, 56214, 56216, 56218,\n// 56220, 56222, 56224, 56226, 56228, 56230, 56232, 56234, 56236, 56238, 56240,\n// 56242, 56244, 56246, 56248, 56250, 56252, 56254, 56256, 56258, 56260, 56262,\n// 56264, 56266, 56268, 56270, 56272, 56274, 56276, 56278, 56280, 56282, 56284,\n// 56286, 56288, 56290, 56292, 56294, 56296, 56298, 56300, 56302, 56304, 56306,\n// 56308, 56310, 56312, 56314, 56316, 56318, 56320, 56322, 56324, 56326, 56328,\n// 56330, 56332, 56334, 56336, 56338, 56340, 56342, 56344, 56346, 56348, 56350,\n// 56352, 56354, 56356, 56358, 56360, 56362, 56364, 56366, 56368, 56370, 56372,\n// 56374, 56376, 56378, 56380, 56382, 56384, 56386, 56388, 56390, 56392, 56394,\n// 56396, 56398, 56400, 56402, 56404, 56406, 56408, 56410, 56412, 56414, 56416,\n// 56418, 56420, 56422, 56424, 56426, 56428, 56430, 56432, 56434, 56436, 56438,\n// 56440, 56442, 56444, 56446, 56448, 56450, 56452, 56454, 56456, 56458, 56460,\n// 56462, 56464, 56466, 56468, 56470, 56472, 56474, 56476, 56478, 56480, 56482,\n// 56484, 56486, 56488, 56490, 56492, 56494, 56496, 56498, 56500, 56502, 56504,\n// 56506, 56508, 56510, 56512, 56514, 56516, 56518, 56520, 56522, 56524, 56526,\n// 56528, 56530, 56532, 56534, 56536, 56538, 56540, 56542, 56544, 56546, 56548,\n// 56550, 56552, 56554, 56556, 56558, 56560, 56562, 56564, 56566, 56568, 56570,\n// 56572, 56574, 56576, 56578, 56580, 56582, 56584, 56586, 56588, 56590, 56592,\n// 56594, 56596, 56598, 56600, 56602, 56604, 56606, 56608, 56610, 56612, 56614,\n// 56616, 56618, 56620, 56622, 56624, 56626, 56628, 56630, 56632, 56634, 56636,\n// 56638, 56640, 56642, 56644, 56646, 56648, 56650, 56652, 56654, 56656, 56658,\n// 56660, 56662, 56664, 56666, 56668, 56670, 56672, 56674, 56676, 56678, 56680,\n// 56682, 56684, 56686, 56688, 56690, 56692, 56694, 56696, 56698, 56700, 56702,\n// 56704, 56706, 56708, 56710, 56712, 56714, 56716, 56718, 56720, 56722, 56724,\n// 56726, 56728, 56730, 56732, 56734, 56736, 56738, 56740, 56742, 56744, 56746,\n// 56748, 56750, 56752, 56754, 56756, 56758, 56760, 56762, 56764, 56766, 56768,\n// 56770, 56772, 56774, 56776, 56778, 56780, 56782, 56784, 56786, 56788, 56790,\n// 56792, 56794, 56796, 56798, 56800, 56802, 56804, 56806, 56808, 56810, 56812,\n// 56814, 56816, 56818, 56820, 56822, 56824, 56826, 56828, 56830, 56832, 56834,\n// 56836, 56838, 56840, 56842, 56844, 56846, 56848, 56850, 56852, 56854, 56856,\n// 56858, 56860, 56862, 56864, 56866, 56868, 56870, 56872, 56874, 56876, 56878,\n// 56880, 56882, 56884, 56886, 56888, 56890, 56892, 56894, 56896, 56898, 56900,\n// 56902, 56904, 56906, 56908, 56910, 56912, 56914, 56916, 56918, 56920, 56922,\n// 56924, 56926, 56928, 56930, 56932, 56934, 56936, 56938, 56940, 56942, 56944,\n// 56946, 56948, 56950, 56952, 56954, 56956, 56958, 56960, 56962, 56964, 56966,\n// 56968, 56970, 56972, 56974, 56976, 56978, 56980, 56982, 56984, 56986, 56988,\n// 56990, 56992, 56994, 56996, 56998, 57000, 57002, 57004, 57006, 57008, 57010,\n// 57012, 57014, 57016, 57018, 57020, 57022, 57024, 57026, 57028, 57030, 57032,\n// 57034, 57036, 57038, 57040, 57042, 57044, 57046, 57048, 57050, 57052, 57054,\n// 57056, 57058, 57060, 57062, 57064, 57066, 57068, 57070, 57072, 57074, 57076,\n// 57078, 57080, 57082, 57084, 57086, 57088, 57090, 57092, 57094, 57096, 57098,\n// 57100, 57102, 57104, 57106, 57108, 57110, 57112, 57114, 57116, 57118, 57120,\n// 57122, 57124, 57126, 57128, 57130, 57132, 57134, 57136, 57138, 57140, 57142,\n// 57144, 57146, 57148, 57150, 57152, 57154, 57156, 57158, 57160, 57162, 57164,\n// 57166, 57168, 57170, 57172, 57174, 57176, 57178, 57180, 57182, 57184, 57186,\n// 57188, 57190, 57192, 57194, 57196, 57198, 57200, 57202, 57204, 57206, 57208,\n// 57210, 57212, 57214, 57216, 57218, 57220, 57222, 57224, 57226, 57228, 57230,\n// 57232, 57234, 57236, 57238, 57240, 57242, 57244, 57246, 57248, 57250, 57252,\n// 57254, 57256, 57258, 57260, 57262, 57264, 57266, 57268, 57270, 57272, 57274,\n// 57276, 57278, 57280, 57282, 57284, 57286, 57288, 57290, 57292, 57294, 57296,\n// 57298, 57300, 57302, 57304, 57306, 57308, 57310, 57312, 57314, 57316, 57318,\n// 57320, 57322, 57324, 57326, 57328, 57330, 57332, 57334, 57336, 57338, 57340,\n// 57342, 57344, 57346, 57348, 57350, 57352, 57354, 57356, 57358, 57360, 57362,\n// 57364, 57366, 57368, 57370, 57372, 57374, 57376, 57378, 57380, 57382, 57384,\n// 57386, 57388, 57390, 57392, 57394, 57396, 57398, 57400, 57402, 57404, 57406,\n// 57408, 57410, 57412, 57414, 57416, 57418, 57420, 57422, 57424, 57426, 57428,\n// 57430, 57432, 57434, 57436, 57438, 57440, 57442, 57444, 57446, 57448, 57450,\n// 57452, 57454, 57456, 57458, 57460, 57462, 57464, 57466, 57468, 57470, 57472,\n// 57474, 57476, 57478, 57480, 57482, 57484, 57486, 57488, 57490, 57492, 57494,\n// 57496, 57498, 57500, 57502, 57504, 57506, 57508, 57510, 57512, 57514, 57516,\n// 57518, 57520, 57522, 57524, 57526, 57528, 57530, 57532, 57534, 57536, 57538,\n// 57540, 57542, 57544, 57546, 57548, 57550, 57552, 57554, 57556, 57558, 57560,\n// 57562, 57564, 57566, 57568, 57570, 57572, 57574, 57576, 57578, 57580, 57582,\n// 57584, 57586, 57588, 57590, 57592, 57594, 57596, 57598, 57600, 57602, 57604,\n// 57606, 57608, 57610, 57612, 57614, 57616, 57618, 57620, 57622, 57624, 57626,\n// 57628, 57630, 57632, 57634, 57636, 57638, 57640, 57642, 57644, 57646, 57648,\n// 57650, 57652, 57654, 57656, 57658, 57660, 57662, 57664, 57666, 57668, 57670,\n// 57672, 57674, 57676, 57678, 57680, 57682, 57684, 57686, 57688, 57690, 57692,\n// 57694, 57696, 57698, 57700, 57702, 57704, 57706, 57708, 57710, 57712, 57714,\n// 57716, 57718, 57720, 57722, 57724, 57726, 57728, 57730, 57732, 57734, 57736,\n// 57738, 57740, 57742, 57744, 57746, 57748, 57750, 57752, 57754, 57756, 57758,\n// 57760, 57762, 57764, 57766, 57768, 57770, 57772, 57774, 57776, 57778, 57780,\n// 57782, 57784, 57786, 57788, 57790, 57792, 57794, 57796, 57798, 57800, 57802,\n// 57804, 57806, 57808, 57810, 57812, 57814, 57816, 57818, 57820, 57822, 57824,\n// 57826, 57828, 57830, 57832, 57834, 57836, 57838, 57840, 57842, 57844, 57846,\n// 57848, 57850, 57852, 57854, 57856, 57858, 57860, 57862, 57864, 57866, 57868,\n// 57870, 57872, 57874, 57876, 57878, 57880, 57882, 57884, 57886, 57888, 57890,\n// 57892, 57894, 57896, 57898, 57900, 57902, 57904, 57906, 57908, 57910, 57912,\n// 57914, 57916, 57918, 57920, 57922, 57924, 57926, 57928, 57930, 57932, 57934,\n// 57936, 57938, 57940, 57942, 57944, 57946, 57948, 57950, 57952, 57954, 57956,\n// 57958, 57960, 57962, 57964, 57966, 57968, 57970, 57972, 57974, 57976, 57978,\n// 57980, 57982, 57984, 57986, 57988, 57990, 57992, 57994, 57996, 57998, 58000,\n// 58002, 58004, 58006, 58008, 58010, 58012, 58014, 58016, 58018, 58020, 58022,\n// 58024, 58026, 58028, 58030, 58032, 58034, 58036, 58038, 58040, 58042, 58044,\n// 58046, 58048, 58050, 58052, 58054, 58056, 58058, 58060, 58062, 58064, 58066,\n// 58068, 58070, 58072, 58074, 58076, 58078, 58080, 58082, 58084, 58086, 58088,\n// 58090, 58092, 58094, 58096, 58098, 58100, 58102, 58104, 58106, 58108, 58110,\n// 58112, 58114, 58116, 58118, 58120, 58122, 58124, 58126, 58128, 58130, 58132,\n// 58134, 58136, 58138, 58140, 58142, 58144, 58146, 58148, 58150, 58152, 58154,\n// 58156, 58158, 58160, 58162, 58164, 58166, 58168, 58170, 58172, 58174, 58176,\n// 58178, 58180, 58182, 58184, 58186, 58188, 58190, 58192, 58194, 58196, 58198,\n// 58200, 58202, 58204, 58206, 58208, 58210, 58212, 58214, 58216, 58218, 58220,\n// 58222, 58224, 58226, 58228, 58230, 58232, 58234, 58236, 58238, 58240, 58242,\n// 58244, 58246, 58248, 58250, 58252, 58254, 58256, 58258, 58260, 58262, 58264,\n// 58266, 58268, 58270, 58272, 58274, 58276, 58278, 58280, 58282, 58284, 58286,\n// 58288, 58290, 58292, 58294, 58296, 58298, 58300, 58302, 58304, 58306, 58308,\n// 58310, 58312, 58314, 58316, 58318, 58320, 58322, 58324, 58326, 58328, 58330,\n// 58332, 58334, 58336, 58338, 58340, 58342, 58344, 58346, 58348, 58350, 58352,\n// 58354, 58356, 58358, 58360, 58362, 58364, 58366, 58368, 58370, 58372, 58374,\n// 58376, 58378, 58380, 58382, 58384, 58386, 58388, 58390, 58392, 58394, 58396,\n// 58398, 58400, 58402, 58404, 58406, 58408, 58410, 58412, 58414, 58416, 58418,\n// 58420, 58422, 58424, 58426, 58428, 58430, 58432, 58434, 58436, 58438, 58440,\n// 58442, 58444, 58446, 58448, 58450, 58452, 58454, 58456, 58458, 58460, 58462,\n// 58464, 58466, 58468, 58470, 58472, 58474, 58476, 58478, 58480, 58482, 58484,\n// 58486, 58488, 58490, 58492, 58494, 58496, 58498, 58500, 58502, 58504, 58506,\n// 58508, 58510, 58512, 58514, 58516, 58518, 58520, 58522, 58524, 58526, 58528,\n// 58530, 58532, 58534, 58536, 58538, 58540, 58542, 58544, 58546, 58548, 58550,\n// 58552, 58554, 58556, 58558, 58560, 58562, 58564, 58566, 58568, 58570, 58572,\n// 58574, 58576, 58578, 58580, 58582, 58584, 58586, 58588, 58590, 58592, 58594,\n// 58596, 58598, 58600, 58602, 58604, 58606, 58608, 58610, 58612, 58614, 58616,\n// 58618, 58620, 58622, 58624, 58626, 58628, 58630, 58632, 58634, 58636, 58638,\n// 58640, 58642, 58644, 58646, 58648, 58650, 58652, 58654, 58656, 58658, 58660,\n// 58662, 58664, 58666, 58668, 58670, 58672, 58674, 58676, 58678, 58680, 58682,\n// 58684, 58686, 58688, 58690, 58692, 58694, 58696, 58698, 58700, 58702, 58704,\n// 58706, 58708, 58710, 58712, 58714, 58716, 58718, 58720, 58722, 58724, 58726,\n// 58728, 58730, 58732, 58734, 58736, 58738, 58740, 58742, 58744, 58746, 58748,\n// 58750, 58752, 58754, 58756, 58758, 58760, 58762, 58764, 58766, 58768, 58770,\n// 58772, 58774, 58776, 58778, 58780, 58782, 58784, 58786, 58788, 58790, 58792,\n// 58794, 58796, 58798, 58800, 58802, 58804, 58806, 58808, 58810, 58812, 58814,\n// 58816, 58818, 58820, 58822, 58824, 58826, 58828, 58830, 58832, 58834, 58836,\n// 58838, 58840, 58842, 58844, 58846, 58848, 58850, 58852, 58854, 58856, 58858,\n// 58860, 58862, 58864, 58866, 58868, 58870, 58872, 58874, 58876, 58878, 58880,\n// 58882, 58884, 58886, 58888, 58890, 58892, 58894, 58896, 58898, 58900, 58902,\n// 58904, 58906, 58908, 58910, 58912, 58914, 58916, 58918, 58920, 58922, 58924,\n// 58926, 58928, 58930, 58932, 58934, 58936, 58938, 58940, 58942, 58944, 58946,\n// 58948, 58950, 58952, 58954, 58956, 58958, 58960, 58962, 58964, 58966, 58968,\n// 58970, 58972, 58974, 58976, 58978, 58980, 58982, 58984, 58986, 58988, 58990,\n// 58992, 58994, 58996, 58998, 59000, 59002, 59004, 59006, 59008, 59010, 59012,\n// 59014, 59016, 59018, 59020, 59022, 59024, 59026, 59028, 59030, 59032, 59034,\n// 59036, 59038, 59040, 59042, 59044, 59046, 59048, 59050, 59052, 59054, 59056,\n// 59058, 59060, 59062, 59064, 59066, 59068, 59070, 59072, 59074, 59076, 59078,\n// 59080, 59082, 59084, 59086, 59088, 59090, 59092, 59094, 59096, 59098, 59100,\n// 59102, 59104, 59106, 59108, 59110, 59112, 59114, 59116, 59118, 59120, 59122,\n// 59124, 59126, 59128, 59130, 59132, 59134, 59136, 59138, 59140, 59142, 59144,\n// 59146, 59148, 59150, 59152, 59154, 59156, 59158, 59160, 59162, 59164, 59166,\n// 59168, 59170, 59172, 59174, 59176, 59178, 59180, 59182, 59184, 59186, 59188,\n// 59190, 59192, 59194, 59196, 59198, 59200, 59202, 59204, 59206, 59208, 59210,\n// 59212, 59214, 59216, 59218, 59220, 59222, 59224, 59226, 59228, 59230, 59232,\n// 59234, 59236, 59238, 59240, 59242, 59244, 59246, 59248, 59250, 59252, 59254,\n// 59256, 59258, 59260, 59262, 59264, 59266, 59268, 59270, 59272, 59274, 59276,\n// 59278, 59280, 59282, 59284, 59286, 59288, 59290, 59292, 59294, 59296, 59298,\n// 59300, 59302, 59304, 59306, 59308, 59310, 59312, 59314, 59316, 59318, 59320,\n// 59322, 59324, 59326, 59328, 59330, 59332, 59334, 59336, 59338, 59340, 59342,\n// 59344, 59346, 59348, 59350, 59352, 59354, 59356, 59358, 59360, 59362, 59364,\n// 59366, 59368, 59370, 59372, 59374, 59376, 59378, 59380, 59382, 59384, 59386,\n// 59388, 59390, 59392, 59394, 59396, 59398, 59400, 59402, 59404, 59406, 59408,\n// 59410, 59412, 59414, 59416, 59418, 59420, 59422, 59424, 59426, 59428, 59430,\n// 59432, 59434, 59436, 59438, 59440, 59442, 59444, 59446, 59448, 59450, 59452,\n// 59454, 59456, 59458, 59460, 59462, 59464, 59466, 59468, 59470, 59472, 59474,\n// 59476, 59478, 59480, 59482, 59484, 59486, 59488, 59490, 59492, 59494, 59496,\n// 59498, 59500, 59502, 59504, 59506, 59508, 59510, 59512, 59514, 59516, 59518,\n// 59520, 59522, 59524, 59526, 59528, 59530, 59532, 59534, 59536, 59538, 59540,\n// 59542, 59544, 59546, 59548, 59550, 59552, 59554, 59556, 59558, 59560, 59562,\n// 59564, 59566, 59568, 59570, 59572, 59574, 59576, 59578, 59580, 59582, 59584,\n// 59586, 59588, 59590, 59592, 59594, 59596, 59598, 59600, 59602, 59604, 59606,\n// 59608, 59610, 59612, 59614, 59616, 59618, 59620, 59622, 59624, 59626, 59628,\n// 59630, 59632, 59634, 59636, 59638, 59640, 59642, 59644, 59646, 59648, 59650,\n// 59652, 59654, 59656, 59658, 59660, 59662, 59664, 59666, 59668, 59670, 59672,\n// 59674, 59676, 59678, 59680, 59682, 59684, 59686, 59688, 59690, 59692, 59694,\n// 59696, 59698, 59700, 59702, 59704, 59706, 59708, 59710, 59712, 59714, 59716,\n// 59718, 59720, 59722, 59724, 59726, 59728, 59730, 59732, 59734, 59736, 59738,\n// 59740, 59742, 59744, 59746, 59748, 59750, 59752, 59754, 59756, 59758, 59760,\n// 59762, 59764, 59766, 59768, 59770, 59772, 59774, 59776, 59778, 59780, 59782,\n// 59784, 59786, 59788, 59790, 59792, 59794, 59796, 59798, 59800, 59802, 59804,\n// 59806, 59808, 59810, 59812, 59814, 59816, 59818, 59820, 59822, 59824, 59826,\n// 59828, 59830, 59832, 59834, 59836, 59838, 59840, 59842, 59844, 59846, 59848,\n// 59850, 59852, 59854, 59856, 59858, 59860, 59862, 59864, 59866, 59868, 59870,\n// 59872, 59874, 59876, 59878, 59880, 59882, 59884, 59886, 59888, 59890, 59892,\n// 59894, 59896, 59898, 59900, 59902, 59904, 59906, 59908, 59910, 59912, 59914,\n// 59916, 59918, 59920, 59922, 59924, 59926, 59928, 59930, 59932, 59934, 59936,\n// 59938, 59940, 59942, 59944, 59946, 59948, 59950, 59952, 59954, 59956, 59958,\n// 59960, 59962, 59964, 59966, 59968, 59970, 59972, 59974, 59976, 59978, 59980,\n// 59982, 59984, 59986, 59988, 59990, 59992, 59994, 59996, 59998, 60000, 60002,\n// 60004, 60006, 60008, 60010, 60012, 60014, 60016, 60018, 60020, 60022, 60024,\n// 60026, 60028, 60030, 60032, 60034, 60036, 60038, 60040, 60042, 60044, 60046,\n// 60048, 60050, 60052, 60054, 60056, 60058, 60060, 60062, 60064, 60066, 60068,\n// 60070, 60072, 60074, 60076, 60078, 60080, 60082, 60084, 60086, 60088, 60090,\n// 60092, 60094, 60096, 60098, 60100, 60102, 60104, 60106, 60108, 60110, 60112,\n// 60114, 60116, 60118, 60120, 60122, 60124, 60126, 60128, 60130, 60132, 60134,\n// 60136, 60138, 60140, 60142, 60144, 60146, 60148, 60150, 60152, 60154, 60156,\n// 60158, 60160, 60162, 60164, 60166, 60168, 60170, 60172, 60174, 60176, 60178,\n// 60180, 60182, 60184, 60186, 60188, 60190, 60192, 60194, 60196, 60198, 60200,\n// 60202, 60204, 60206, 60208, 60210, 60212, 60214, 60216, 60218, 60220, 60222,\n// 60224, 60226, 60228, 60230, 60232, 60234, 60236, 60238, 60240, 60242, 60244,\n// 60246, 60248, 60250, 60252, 60254, 60256, 60258, 60260, 60262, 60264, 60266,\n// 60268, 60270, 60272, 60274, 60276, 60278, 60280, 60282, 60284, 60286, 60288,\n// 60290, 60292, 60294, 60296, 60298, 60300, 60302, 60304, 60306, 60308, 60310,\n// 60312, 60314, 60316, 60318, 60320, 60322, 60324, 60326, 60328, 60330, 60332,\n// 60334, 60336, 60338, 60340, 60342, 60344, 60346, 60348, 60350, 60352, 60354,\n// 60356, 60358, 60360, 60362, 60364, 60366, 60368, 60370, 60372, 60374, 60376,\n// 60378, 60380, 60382, 60384, 60386, 60388, 60390, 60392, 60394, 60396, 60398,\n// 60400, 60402, 60404, 60406, 60408, 60410, 60412, 60414, 60416, 60418, 60420,\n// 60422, 60424, 60426, 60428, 60430, 60432, 60434, 60436, 60438, 60440, 60442,\n// 60444, 60446, 60448, 60450, 60452, 60454, 60456, 60458, 60460, 60462, 60464,\n// 60466, 60468, 60470, 60472, 60474, 60476, 60478, 60480, 60482, 60484, 60486,\n// 60488, 60490, 60492, 60494, 60496, 60498, 60500, 60502, 60504, 60506, 60508,\n// 60510, 60512, 60514, 60516, 60518, 60520, 60522, 60524, 60526, 60528, 60530,\n// 60532, 60534, 60536, 60538, 60540, 60542, 60544, 60546, 60548, 60550, 60552,\n// 60554, 60556, 60558, 60560, 60562, 60564, 60566, 60568, 60570, 60572, 60574,\n// 60576, 60578, 60580, 60582, 60584, 60586, 60588, 60590, 60592, 60594, 60596,\n// 60598, 60600, 60602, 60604, 60606, 60608, 60610, 60612, 60614, 60616, 60618,\n// 60620, 60622, 60624, 60626, 60628, 60630, 60632, 60634, 60636, 60638, 60640,\n// 60642, 60644, 60646, 60648, 60650, 60652, 60654, 60656, 60658, 60660, 60662,\n// 60664, 60666, 60668, 60670, 60672, 60674, 60676, 60678, 60680, 60682, 60684,\n// 60686, 60688, 60690, 60692, 60694, 60696, 60698, 60700, 60702, 60704, 60706,\n// 60708, 60710, 60712, 60714, 60716, 60718, 60720, 60722, 60724, 60726, 60728,\n// 60730, 60732, 60734, 60736, 60738, 60740, 60742, 60744, 60746, 60748, 60750,\n// 60752, 60754, 60756, 60758, 60760, 60762, 60764, 60766, 60768, 60770, 60772,\n// 60774, 60776, 60778, 60780, 60782, 60784, 60786, 60788, 60790, 60792, 60794,\n// 60796, 60798, 60800, 60802, 60804, 60806, 60808, 60810, 60812, 60814, 60816,\n// 60818, 60820, 60822, 60824, 60826, 60828, 60830, 60832, 60834, 60836, 60838,\n// 60840, 60842, 60844, 60846, 60848, 60850, 60852, 60854, 60856, 60858, 60860,\n// 60862, 60864, 60866, 60868, 60870, 60872, 60874, 60876, 60878, 60880, 60882,\n// 60884, 60886, 60888, 60890, 60892, 60894, 60896, 60898, 60900, 60902, 60904,\n// 60906, 60908, 60910, 60912, 60914, 60916, 60918, 60920, 60922, 60924, 60926,\n// 60928, 60930, 60932, 60934, 60936, 60938, 60940, 60942, 60944, 60946, 60948,\n// 60950, 60952, 60954, 60956, 60958, 60960, 60962, 60964, 60966, 60968, 60970,\n// 60972, 60974, 60976, 60978, 60980, 60982, 60984, 60986, 60988, 60990, 60992,\n// 60994, 60996, 60998, 61000, 61002, 61004, 61006, 61008, 61010, 61012, 61014,\n// 61016, 61018, 61020, 61022, 61024, 61026, 61028, 61030, 61032, 61034, 61036,\n// 61038, 61040, 61042, 61044, 61046, 61048, 61050, 61052, 61054, 61056, 61058,\n// 61060, 61062, 61064, 61066, 61068, 61070, 61072, 61074, 61076, 61078, 61080,\n// 61082, 61084, 61086, 61088, 61090, 61092, 61094, 61096, 61098, 61100, 61102,\n// 61104, 61106, 61108, 61110, 61112, 61114, 61116, 61118, 61120, 61122, 61124,\n// 61126, 61128, 61130, 61132, 61134, 61136, 61138, 61140, 61142, 61144, 61146,\n// 61148, 61150, 61152, 61154, 61156, 61158, 61160, 61162, 61164, 61166, 61168,\n// 61170, 61172, 61174, 61176, 61178, 61180, 61182, 61184, 61186, 61188, 61190,\n// 61192, 61194, 61196, 61198, 61200, 61202, 61204, 61206, 61208, 61210, 61212,\n// 61214, 61216, 61218, 61220, 61222, 61224, 61226, 61228, 61230, 61232, 61234,\n// 61236, 61238, 61240, 61242, 61244, 61246, 61248, 61250, 61252, 61254, 61256,\n// 61258, 61260, 61262, 61264, 61266, 61268, 61270, 61272, 61274, 61276, 61278,\n// 61280, 61282, 61284, 61286, 61288, 61290, 61292, 61294, 61296, 61298, 61300,\n// 61302, 61304, 61306, 61308, 61310, 61312, 61314, 61316, 61318, 61320, 61322,\n// 61324, 61326, 61328, 61330, 61332, 61334, 61336, 61338, 61340, 61342, 61344,\n// 61346, 61348, 61350, 61352, 61354, 61356, 61358, 61360, 61362, 61364, 61366,\n// 61368, 61370, 61372, 61374, 61376, 61378, 61380, 61382, 61384, 61386, 61388,\n// 61390, 61392, 61394, 61396, 61398, 61400, 61402, 61404, 61406, 61408, 61410,\n// 61412, 61414, 61416, 61418, 61420, 61422, 61424, 61426, 61428, 61430, 61432,\n// 61434, 61436, 61438, 61440, 61442, 61444, 61446, 61448, 61450, 61452, 61454,\n// 61456, 61458, 61460, 61462, 61464, 61466, 61468, 61470, 61472, 61474, 61476,\n// 61478, 61480, 61482, 61484, 61486, 61488, 61490, 61492, 61494, 61496, 61498,\n// 61500, 61502, 61504, 61506, 61508, 61510, 61512, 61514, 61516, 61518, 61520,\n// 61522, 61524, 61526, 61528, 61530, 61532, 61534, 61536, 61538, 61540, 61542,\n// 61544, 61546, 61548, 61550, 61552, 61554, 61556, 61558, 61560, 61562, 61564,\n// 61566, 61568, 61570, 61572, 61574, 61576, 61578, 61580, 61582, 61584, 61586,\n// 61588, 61590, 61592, 61594, 61596, 61598, 61600, 61602, 61604, 61606, 61608,\n// 61610, 61612, 61614, 61616, 61618, 61620, 61622, 61624, 61626, 61628, 61630,\n// 61632, 61634, 61636, 61638, 61640, 61642, 61644, 61646, 61648, 61650, 61652,\n// 61654, 61656, 61658, 61660, 61662, 61664, 61666, 61668, 61670, 61672, 61674,\n// 61676, 61678, 61680, 61682, 61684, 61686, 61688, 61690, 61692, 61694, 61696,\n// 61698, 61700, 61702, 61704, 61706, 61708, 61710, 61712, 61714, 61716, 61718,\n// 61720, 61722, 61724, 61726, 61728, 61730, 61732, 61734, 61736, 61738, 61740,\n// 61742, 61744, 61746, 61748, 61750, 61752, 61754, 61756, 61758, 61760, 61762,\n// 61764, 61766, 61768, 61770, 61772, 61774, 61776, 61778, 61780, 61782, 61784,\n// 61786, 61788, 61790, 61792, 61794, 61796, 61798, 61800, 61802, 61804, 61806,\n// 61808, 61810, 61812, 61814, 61816, 61818, 61820, 61822, 61824, 61826, 61828,\n// 61830, 61832, 61834, 61836, 61838, 61840, 61842, 61844, 61846, 61848, 61850,\n// 61852, 61854, 61856, 61858, 61860, 61862, 61864, 61866, 61868, 61870, 61872,\n// 61874, 61876, 61878, 61880, 61882, 61884, 61886, 61888, 61890, 61892, 61894,\n// 61896, 61898, 61900, 61902, 61904, 61906, 61908, 61910, 61912, 61914, 61916,\n// 61918, 61920, 61922, 61924, 61926, 61928, 61930, 61932, 61934, 61936, 61938,\n// 61940, 61942, 61944, 61946, 61948, 61950, 61952, 61954, 61956, 61958, 61960,\n// 61962, 61964, 61966, 61968, 61970, 61972, 61974, 61976, 61978, 61980, 61982,\n// 61984, 61986, 61988, 61990, 61992, 61994, 61996, 61998, 62000, 62002, 62004,\n// 62006, 62008, 62010, 62012, 62014, 62016, 62018, 62020, 62022, 62024, 62026,\n// 62028, 62030, 62032, 62034, 62036, 62038, 62040, 62042, 62044, 62046, 62048,\n// 62050, 62052, 62054, 62056, 62058, 62060, 62062, 62064, 62066, 62068, 62070,\n// 62072, 62074, 62076, 62078, 62080, 62082, 62084, 62086, 62088, 62090, 62092,\n// 62094, 62096, 62098, 62100, 62102, 62104, 62106, 62108, 62110, 62112, 62114,\n// 62116, 62118, 62120, 62122, 62124, 62126, 62128, 62130, 62132, 62134, 62136,\n// 62138, 62140, 62142, 62144, 62146, 62148, 62150, 62152, 62154, 62156, 62158,\n// 62160, 62162, 62164, 62166, 62168, 62170, 62172, 62174, 62176, 62178, 62180,\n// 62182, 62184, 62186, 62188, 62190, 62192, 62194, 62196, 62198, 62200, 62202,\n// 62204, 62206, 62208, 62210, 62212, 62214, 62216, 62218, 62220, 62222, 62224,\n// 62226, 62228, 62230, 62232, 62234, 62236, 62238, 62240, 62242, 62244, 62246,\n// 62248, 62250, 62252, 62254, 62256, 62258, 62260, 62262, 62264, 62266, 62268,\n// 62270, 62272, 62274, 62276, 62278, 62280, 62282, 62284, 62286, 62288, 62290,\n// 62292, 62294, 62296, 62298, 62300, 62302, 62304, 62306, 62308, 62310, 62312,\n// 62314, 62316, 62318, 62320, 62322, 62324, 62326, 62328, 62330, 62332, 62334,\n// 62336, 62338, 62340, 62342, 62344, 62346, 62348, 62350, 62352, 62354, 62356,\n// 62358, 62360, 62362, 62364, 62366, 62368, 62370, 62372, 62374, 62376, 62378,\n// 62380, 62382, 62384, 62386, 62388, 62390, 62392, 62394, 62396, 62398, 62400,\n// 62402, 62404, 62406, 62408, 62410, 62412, 62414, 62416, 62418, 62420, 62422,\n// 62424, 62426, 62428, 62430, 62432, 62434, 62436, 62438, 62440, 62442, 62444,\n// 62446, 62448, 62450, 62452, 62454, 62456, 62458, 62460, 62462, 62464, 62466,\n// 62468, 62470, 62472, 62474, 62476, 62478, 62480, 62482, 62484, 62486, 62488,\n// 62490, 62492, 62494, 62496, 62498, 62500, 62502, 62504, 62506, 62508, 62510,\n// 62512, 62514, 62516, 62518, 62520, 62522, 62524, 62526, 62528, 62530, 62532,\n// 62534, 62536, 62538, 62540, 62542, 62544, 62546, 62548, 62550, 62552, 62554,\n// 62556, 62558, 62560, 62562, 62564, 62566, 62568, 62570, 62572, 62574, 62576,\n// 62578, 62580, 62582, 62584, 62586, 62588, 62590, 62592, 62594, 62596, 62598,\n// 62600, 62602, 62604, 62606, 62608, 62610, 62612, 62614, 62616, 62618, 62620,\n// 62622, 62624, 62626, 62628, 62630, 62632, 62634, 62636, 62638, 62640, 62642,\n// 62644, 62646, 62648, 62650, 62652, 62654, 62656, 62658, 62660, 62662, 62664,\n// 62666, 62668, 62670, 62672, 62674, 62676, 62678, 62680, 62682, 62684, 62686,\n// 62688, 62690, 62692, 62694, 62696, 62698, 62700, 62702, 62704, 62706, 62708,\n// 62710, 62712, 62714, 62716, 62718, 62720, 62722, 62724, 62726, 62728, 62730,\n// 62732, 62734, 62736, 62738, 62740, 62742, 62744, 62746, 62748, 62750, 62752,\n// 62754, 62756, 62758, 62760, 62762, 62764, 62766, 62768, 62770, 62772, 62774,\n// 62776, 62778, 62780, 62782, 62784, 62786, 62788, 62790, 62792, 62794, 62796,\n// 62798, 62800, 62802, 62804, 62806, 62808, 62810, 62812, 62814, 62816, 62818,\n// 62820, 62822, 62824, 62826, 62828, 62830, 62832, 62834, 62836, 62838, 62840,\n// 62842, 62844, 62846, 62848, 62850, 62852, 62854, 62856, 62858, 62860, 62862,\n// 62864, 62866, 62868, 62870, 62872, 62874, 62876, 62878, 62880, 62882, 62884,\n// 62886, 62888, 62890, 62892, 62894, 62896, 62898, 62900, 62902, 62904, 62906,\n// 62908, 62910, 62912, 62914, 62916, 62918, 62920, 62922, 62924, 62926, 62928,\n// 62930, 62932, 62934, 62936, 62938, 62940, 62942, 62944, 62946, 62948, 62950,\n// 62952, 62954, 62956, 62958, 62960, 62962, 62964, 62966, 62968, 62970, 62972,\n// 62974, 62976, 62978, 62980, 62982, 62984, 62986, 62988, 62990, 62992, 62994,\n// 62996, 62998, 63000, 63002, 63004, 63006, 63008, 63010, 63012, 63014, 63016,\n// 63018, 63020, 63022, 63024, 63026, 63028, 63030, 63032, 63034, 63036, 63038,\n// 63040, 63042, 63044, 63046, 63048, 63050, 63052, 63054, 63056, 63058, 63060,\n// 63062, 63064, 63066, 63068, 63070, 63072, 63074, 63076, 63078, 63080, 63082,\n// 63084, 63086, 63088, 63090, 63092, 63094, 63096, 63098, 63100, 63102, 63104,\n// 63106, 63108, 63110, 63112, 63114, 63116, 63118, 63120, 63122, 63124, 63126,\n// 63128, 63130, 63132, 63134, 63136, 63138, 63140, 63142, 63144, 63146, 63148,\n// 63150, 63152, 63154, 63156, 63158, 63160, 63162, 63164, 63166, 63168, 63170,\n// 63172, 63174, 63176, 63178, 63180, 63182, 63184, 63186, 63188, 63190, 63192,\n// 63194, 63196, 63198, 63200, 63202, 63204, 63206, 63208, 63210, 63212, 63214,\n// 63216, 63218, 63220, 63222, 63224, 63226, 63228, 63230, 63232, 63234, 63236,\n// 63238, 63240, 63242, 63244, 63246, 63248, 63250, 63252, 63254, 63256, 63258,\n// 63260, 63262, 63264, 63266, 63268, 63270, 63272, 63274, 63276, 63278, 63280,\n// 63282, 63284, 63286, 63288, 63290, 63292, 63294, 63296, 63298, 63300, 63302,\n// 63304, 63306, 63308, 63310, 63312, 63314, 63316, 63318, 63320, 63322, 63324,\n// 63326, 63328, 63330, 63332, 63334, 63336, 63338, 63340, 63342, 63344, 63346,\n// 63348, 63350, 63352, 63354, 63356, 63358, 63360, 63362, 63364, 63366, 63368,\n// 63370, 63372, 63374, 63376, 63378, 63380, 63382, 63384, 63386, 63388, 63390,\n// 63392, 63394, 63396, 63398, 63400, 63402, 63404, 63406, 63408, 63410, 63412,\n// 63414, 63416, 63418, 63420, 63422, 63424, 63426, 63428, 63430, 63432, 63434,\n// 63436, 63438, 63440, 63442, 63444, 63446, 63448, 63450, 63452, 63454, 63456,\n// 63458, 63460, 63462, 63464, 63466, 63468, 63470, 63472, 63474, 63476, 63478,\n// 63480, 63482, 63484, 63486, 63488, 63490, 63492, 63494, 63496, 63498, 63500,\n// 63502, 63504, 63506, 63508, 63510, 63512, 63514, 63516, 63518, 63520, 63522,\n// 63524, 63526, 63528, 63530, 63532, 63534, 63536, 63538, 63540, 63542, 63544,\n// 63546, 63548, 63550, 63552, 63554, 63556, 63558, 63560, 63562, 63564, 63566,\n// 63568, 63570, 63572, 63574, 63576, 63578, 63580, 63582, 63584, 63586, 63588,\n// 63590, 63592, 63594, 63596, 63598, 63600, 63602, 63604, 63606, 63608, 63610,\n// 63612, 63614, 63616, 63618, 63620, 63622, 63624, 63626, 63628, 63630, 63632,\n// 63634, 63636, 63638, 63640, 63642, 63644, 63646, 63648, 63650, 63652, 63654,\n// 63656, 63658, 63660, 63662, 63664, 63666, 63668, 63670, 63672, 63674, 63676,\n// 63678, 63680, 63682, 63684, 63686, 63688, 63690, 63692, 63694, 63696, 63698,\n// 63700, 63702, 63704, 63706, 63708, 63710, 63712, 63714, 63716, 63718, 63720,\n// 63722, 63724, 63726, 63728, 63730, 63732, 63734, 63736, 63738, 63740, 63742,\n// 64110, 64218, 64220, 64222, 64224, 64226, 64228, 64230, 64232, 64234, 64236,\n// 64238, 64240, 64242, 64244, 64246, 64248, 64250, 64252, 64254, 64263, 64265,\n// 64267, 64269, 64271, 64273, 64280, 64282, 64284, 64311, 64317, 64319, 64322,\n// 64325, 64451, 64453, 64455, 64457, 64459, 64461, 64463, 64465, 64912, 64968,\n// 64970, 64972, 64974, 64976, 64978, 64980, 64982, 64984, 64986, 64988, 64990,\n// 64992, 64994, 64996, 64998, 65000, 65002, 65004, 65006, 65050, 65052, 65054,\n// 65107, 65127, 65132, 65134, 65141, 65277, 65279, 65471, 65473, 65480, 65488,\n// 65496, 65501, 65503, 65511, 65519, 65521, 65523, 65525, 65527, 65529, 65531,\n// 65534, 65536,\n// ];\n","export const invisibleWhitespaceRegex = /\\p{Zs}/gu;\n\n// Charcodes:\n// [32, 160, 5760, 8192, 8194, 8196, 8198, 8200, 8202, 8239, 8287, 12288];\n","export const lineSeparatorRegex = /\\p{Zl}/gu;\n\n// charcode\n// [8232]\n","export const paragraphSeparatorRegex = /\\p{Zp}/gu;\n\n// charcode\n// [8233]\n","import { controlCharRegex } from \"../regex/controlCharRegex\";\nimport { invisibleWhitespaceRegex } from \"../regex/invisibleWhitespaceRegex\";\nimport { lineSeparatorRegex } from \"../regex/lineSeparatorRegex\";\nimport { paragraphSeparatorRegex } from \"../regex/paragraphSeparatorRegex\";\n\nexport const cleanSpaces = (str: string): string => {\n return str\n .replace(controlCharRegex, \" \")\n .replace(invisibleWhitespaceRegex, \" \")\n .replace(lineSeparatorRegex, \" \")\n .replace(paragraphSeparatorRegex, \" \")\n .trim() // leave trim after replace, so this test can pass `expect(cleanSpaces(\" \\b \")).toBe(\"\");`\n .replace(/\\s{2,}/g, \" \"); // replace multiple spaces with one space\n};\n","/**\n * @returns element from array at index, if index is greater than array length, it will loop back to the start of the array\n */\nexport const cyclicalItem = <T>(array: T[], index: number): T => {\n return array[index % array.length];\n};\n","/**\n * Print or log helper that does not break on circular references, and expands nested objects.\n */\nexport const dir = (\n arg: any,\n { maxDepth = 5 }: { maxDepth?: number } = {}\n): void => {\n console.dir(arg, { depth: maxDepth });\n};\n","export const isInt = (arg: any) => Number.isInteger(arg);\n\nexport const isEven = (arg: any) => isInt(arg) && !(arg % 2);\n\nexport const isOdd = (arg: any) => isInt(arg) && !!(arg % 2);\n\n/**\n * @deprecated use isPositiveInt instead\n */\nexport const isPositive = (arg: any) => isInt(arg) && arg > 0;\n\nexport const isPositiveInt = (arg: any) => isInt(arg) && arg > 0;\n\n/**\n * @deprecated use isNegativeInt instead\n */\nexport const isNegative = (arg: any) => isInt(arg) && arg < 0;\n\nexport const isNegativeInt = (arg: any) => isInt(arg) && arg < 0;\n\nexport const isNumber = (arg: any): arg is number => {\n return (\n Object.prototype.toString.apply(arg) === \"[object Number]\" && isFinite(arg)\n );\n};\n","export const isSpacedString = (s: string) => {\n return s.indexOf(\" \") >= 0;\n};\n","export const isString = (arg: any): arg is string => typeof arg === \"string\";\n","import { isNumber } from \"./isNumber\";\nimport { isSpacedString } from \"./isSpacedString\";\nimport { isString } from \"./isString\";\n\n/**\n *\n * @example isNumeric(1) => true\n * @example isNumeric('1') => true\n * @example isNumeric('1.1') => true\n * @example isNumeric('1.1.1') => false\n */\nexport const isNumeric = (arg: number | string): boolean => {\n if (isNumber(arg)) return true;\n\n if (!isString(arg) || isSpacedString(arg)) return false;\n\n return !isNaN(parseFloat(arg));\n};\n","import { ObjectKeys } from \"../types/Object\";\nimport { isNumeric } from \"../validators/isNumeric\";\n\nexport const enumKeys = <T extends object>(arg: T): ObjectKeys<T> => {\n return Object.keys(arg).filter(\n (key) => !isNumeric(key) // enum key cannot be a number\n ) as ObjectKeys<T>; // Type 'string' is not assignable to type 'keyof T'.\n};\n","import { PlainObject } from \"../types\";\nimport { Key } from \"../types/Object\";\n\nexport const isKey = <T extends PlainObject>(\n key: Key, // cannot use PlainKey here because it does not include symbol (keyof T does)\n obj: T\n): key is keyof T =>\n obj.hasOwnProperty(key) && // makes sure the prop is not in the prototype chain\n obj.propertyIsEnumerable(key); // makes sure the prop is not a getter/setter\n","import { ObjectValue, ObjectKey, ObjectValues } from \"../types/Object\";\nimport { isKey } from \"../validators/isKey\";\n\nexport const enumValues = <T extends object>(\n enumObject: T\n): ObjectValues<T> => {\n let values: ObjectValues<T> = [];\n\n Object.values(enumObject).forEach((value) => {\n // types are tricky here because the value is used also to check if exists as a key\n if (isKey(value, enumObject) && !values.includes(value as ObjectValue<T>))\n values.push(enumObject[value as ObjectKey<T>]);\n });\n\n return values;\n};\n","/**\n * @returns a string with only alphanumeric characters\n * @example filterAlphanumeric(\"!abc()\") // returns \"abc\"\n */\nexport const filterAlphanumeric = (string: string) => {\n return string.replace(/[^a-zA-Z0-9]/g, \"\");\n};\n","export const first = <T>(arr: T[]): T => arr[0];\n","import { ObjectKey, PlainObject } from \"../types\";\n\nexport const firstKey = <T extends PlainObject>(arg: T): ObjectKey<T> =>\n Object.keys(arg)[0];\n","import { ObjectValue, PlainObject } from \"../types\";\n\nexport const firstValue = <T extends PlainObject>(arg: T): ObjectValue<T> =>\n Object.values(arg)[0];\n","/**\n * Get a client cookie by name, works only in the browser\n * @param name\n * @returns the cookie value, if exists\n */\nexport const getCookieByName = (name: string): string | undefined => {\n if (typeof document === \"undefined\") {\n return undefined;\n }\n\n const cookies = document.cookie.split(\";\");\n\n for (const cookie of cookies) {\n const [cookieName, cookieValue] = cookie.trim().split(\"=\");\n if (cookieName === name) {\n return decodeURIComponent(cookieValue);\n }\n }\n\n return undefined;\n};\n","import { PlainObject } from \"../types\";\n\n/**\n * TODO: rename to allKeys\n * @deprecated use Object.keys instead unless you need to include symbols, but the function will be renamed to allKeys\n */\nexport const getKeys = <T extends PlainObject>(obj: T): (string | symbol)[] => {\n return (Object.keys(obj) as (string | symbol)[]).concat(\n getEnumerableOwnPropertySymbols(obj)\n );\n};\n\n// Object.keys does not return enumerable symbols\nexport const getEnumerableOwnPropertySymbols = (obj: object): symbol[] => {\n return Object.getOwnPropertySymbols\n ? Object.getOwnPropertySymbols(obj).filter(function (symbol) {\n return Object.propertyIsEnumerable.call(obj, symbol);\n })\n : [];\n};\n","import { Maybe } from \"../types/Maybe\";\n\nexport const getUrlSearchParams = (\n urlString: Maybe<string>\n): Record<string, string> => {\n if (!urlString) return {};\n try {\n const url = new URL(urlString);\n return Object.fromEntries(url.searchParams);\n } catch (_e) {\n return {};\n }\n};\n","import { Maybe } from \"../types/Maybe\";\nimport { getUrlSearchParams } from \"./getUrlSearchParams\";\n\nexport const getUrlSearchParam = (\n urlString: Maybe<string>,\n param: string\n): string | undefined => {\n return getUrlSearchParams(urlString)[param];\n};\n","let id = 1; // don't start with 0, to be closer to SQL autoincrement\n\nexport const incrementalId = () => {\n return id++;\n};\n","import { PlainObject } from \"../types\";\n\nexport const keysLength = <T extends PlainObject>(obj: T) => {\n return Object.keys(obj).length;\n};\n","export const lastIndex = (array: any[]): number => {\n return array.length - 1;\n};\n","import { lastIndex } from \"./lastIndex\";\n\n// Assume the array is not empty, otherwise the result needs to be banged all the time\nexport const last = <T>(arr: T[]): T => arr[lastIndex(arr)];\n","export const isArray = <T>(arg?: any): arg is T[] => Array.isArray(arg);\n","export const isArrayIncluded = <T>(arr1: T[], arr2: T[]): boolean => {\n return arr1.every((value) => arr2.includes(value));\n};\n","export const isBoolean = (arg: any): arg is boolean =>\n Object.prototype.toString.call(arg) === \"[object Boolean]\";\n","export const isServer = () => typeof window === \"undefined\";\n","import { isServer } from \"./isServer\";\n\nexport const isClient = () => !isServer();\n","import { isClient } from \"./isClient\";\n\nexport const isBrowser = isClient;\n","/**\n * @returns true if the argument can be called like a function -> fn() or await fn()\n */\nexport const isFunction = (arg: any): arg is Function => {\n const type = Object.prototype.toString.call(arg);\n return type === \"[object Function]\" || type === \"[object AsyncFunction]\";\n};\n","import { Maybe } from \"../types\";\n\nexport const isValue = (arg?: Maybe<any>): boolean => {\n return arg !== undefined && arg !== null && !Number.isNaN(arg);\n};\n","import { isFunction } from \"./isFunction\";\nimport { isValue } from \"./isValue\";\n\nexport const isBuffer = (val?: any): boolean => {\n return (\n isValue(val) &&\n isValue(val.constructor) &&\n isFunction(val.constructor.isBuffer) &&\n val.constructor.isBuffer(val)\n );\n};\n","import { isString } from \"./isString\";\n\nexport const isEmail = (arg: string) =>\n isString(arg) && /\\S+@\\S+\\.\\S+/.test(arg);\n","import { PlainObject } from \"../types\";\n\nexport const isObject = <T>(arg?: any): arg is PlainObject<T> =>\n Object.prototype.toString.call(arg) === \"[object Object]\";\n","import { Maybe, PlainObject } from \"../types\";\nimport { isArray } from \"./isArray\";\nimport { isObject } from \"./isObject\";\nimport { isString } from \"./isString\";\n\nexport const isEmpty = (arg?: Maybe<any>) => {\n if (arg === undefined) return true;\n if (arg === null) return true;\n if (isEmptyString(arg)) return true;\n if (isEmptyObject(arg)) return true;\n if (isEmptyArray(arg)) return true;\n\n return false;\n};\n\nexport const isEmptyString = (arg: string) => {\n return isString(arg) && arg.trim().length === 0;\n};\n\nexport const isEmptyArray = (arg: any[]) => {\n return isArray(arg) && arg.length === 0;\n};\n\nexport const isEmptyObject = (arg: PlainObject) => {\n return isObject(arg) && Object.keys(arg).length === 0;\n};\n","export const isFile = (arg?: any): arg is File =>\n Object.prototype.toString.call(arg) === \"[object File]\";\n","import { parseDate } from \"../helpers\";\nimport { DateLike } from \"../types\";\n\nexport const isFutureDate = (arg: DateLike): boolean => {\n const date = parseDate(arg);\n return !!date && date > new Date();\n};\n","export const isJsDate = (arg: Date): arg is Date =>\n Object.prototype.toString.call(arg) === \"[object Date]\" &&\n !isNaN(arg as unknown as number);\n","import { lastIndex } from \"../helpers/lastIndex\";\n\nexport const isLastIndex = (index: number, array: any[]): boolean => {\n return index === lastIndex(array);\n};\n","import { isString } from \"./isString\";\n\nexport const isNotEmptyString = (arg: any): boolean => {\n return isString(arg) && arg.trim().length > 0;\n};\n","export const isNumericId = (id: string): boolean =>\n /^\\d+$/.test(id) && parseInt(id) > 0;\n","import { parseDate } from \"../helpers\";\nimport { DateLike } from \"../types\";\n\nexport const isPastDate = (arg: DateLike): boolean => {\n const date = parseDate(arg);\n return !!date && date < new Date();\n};\n","export const isPromise = (arg: any) => arg instanceof Promise;\n","import { isClient } from \"./isClient\";\n\nexport const isPWA = () => {\n return isClient() && window.matchMedia(\"(display-mode: standalone)\").matches; // credits to Narcis\n};\n","var canUseSymbol = typeof Symbol === \"function\" && Symbol.for;\nvar REACT_ELEMENT_TYPE = canUseSymbol ? Symbol.for(\"react.element\") : 0xeac7;\n\nexport const isReactElement = (value: any) => {\n return value.$$typeof === REACT_ELEMENT_TYPE;\n};\n","export const isRegExp = (arg: any): arg is RegExp =>\n Object.prototype.toString.call(arg) === \"[object RegExp]\";\n","import { isArray } from \"./isArray\";\nimport { isFunction } from \"./isFunction\";\nimport { isObject } from \"./isObject\";\n\nexport const isSame = (value1: any, value2: any): boolean => {\n if (value1 === value2) {\n return true;\n }\n\n if (isArray(value1) && isArray(value2)) {\n if (value1.length !== value2.length) return false;\n return value1.every((value, index) => isSame(value, value2[index]));\n }\n\n if (isObject(value1) && isObject(value2)) {\n const keys = Object.keys(value1);\n if (keys.length !== Object.keys(value2).length) return false;\n\n return keys.every((key: string) => {\n return isSame(value1[key], value2[key]);\n });\n }\n\n if (isFunction(value1) && isFunction(value2)) {\n return value1.toString() === value2.toString();\n }\n\n return false;\n};\n","import { isJsDate } from \"./isJsDate\";\n\nexport const isStringDate = (arg: string) => {\n const date = new Date(arg);\n return isJsDate(date);\n};\n","const pattern = new RegExp(\n \"^(https?:\\\\/\\\\/)?\" + // protocol\n \"((([a-z\\\\d]([a-z\\\\d-]*[a-z\\\\d])*)\\\\.?)+[a-z]{2,}|\" + // domain name\n \"((\\\\d{1,3}\\\\.){3}\\\\d{1,3}))\" + // OR ip (v4) address\n \"(\\\\:\\\\d+)?(\\\\/[-a-z\\\\d%_.~+]*)*\" + // port and path\n \"(\\\\?[;&a-z\\\\d%_.~+=-]*)?\" + // query string\n \"(\\\\#[-a-z\\\\d_]*)?$\", // fragment locator\n \"i\"\n);\n\nexport const isURL = (arg: string) => {\n return !!arg && pattern.test(arg);\n};\n","export const isUUID = (arg: string) =>\n /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(\n arg\n );\n","import { PlainObject } from \"../types\";\nimport { isKey, isObject } from \"../validators\";\n\n/**\n * @description Simple merge function that merges two objects, arrays get overwritten, no options\n *\n */\nexport const merge = (target: PlainObject, source: PlainObject) => {\n const merger: PlainObject = {};\n Object.keys(target).forEach((key) => {\n merger[key] = isObject(target[key]) ? merge({}, target[key]) : target[key];\n });\n Object.keys(source).forEach((key) => {\n if (isKey(key, target))\n merger[key] =\n isObject(target[key]) && isObject(source[key])\n ? merge(target[key], source[key])\n : source[key];\n else\n merger[key] = isObject(source[key])\n ? merge({}, source[key])\n : source[key];\n });\n return merger;\n};\n","/**\n * @description Merge two arrays, unique values, no options\n * @example mergeArrays([1,2,3], [2,3,4]) => [1,2,3,4]\n */\nexport const mergeArrays = (arrayA: any[], arrayB: any[]) => {\n return arrayA.concat(\n arrayB.filter((item) => {\n return !arrayA.includes(item); // TODO: use isSame for objects\n })\n );\n};\n","export const moveToFirst = <T>(\n items: T[],\n condition: (item: T, i: number, items: T[]) => boolean\n): T[] => {\n const resortedItems = [...items];\n for (let i = 0; i < resortedItems.length; i++) {\n if (condition(resortedItems[i], i, resortedItems)) {\n let firstItem = resortedItems.splice(i, 1);\n resortedItems.unshift(firstItem[0]);\n break;\n }\n }\n return resortedItems;\n};\n","export const moveToLast = <T>(\n items: T[],\n condition: (item: T, i: number, items: T[]) => boolean\n): T[] => {\n const resortedItems = [...items];\n for (let i = 0; i < resortedItems.length; i++) {\n if (condition(resortedItems[i], i, resortedItems)) {\n let lastItem = resortedItems.splice(i, 1)[0];\n resortedItems.push(lastItem);\n break;\n }\n }\n return resortedItems;\n};\n","export const normalizeNumber = ({\n value,\n max,\n min,\n}: {\n value: number;\n max: number;\n min: number;\n}) => {\n if (value >= max) return 1;\n if (value <= min) return 0;\n\n return (value - min) / (max - min);\n};\n","import { PlainObject } from \"../types\";\nimport { isSame } from \"../validators/isSame\";\n\nexport const objectDiff = (\n leftObject: PlainObject,\n rightObject: PlainObject\n) => {\n var diff: PlainObject = {};\n const allKeys = new Set([\n ...Object.keys(leftObject),\n ...Object.keys(rightObject),\n ]);\n\n for (const key of allKeys) {\n if (!isSame(rightObject[key], leftObject[key])) {\n diff[key] = {\n from: leftObject[key],\n to: rightObject[key],\n };\n }\n }\n\n return diff;\n};\n","import { PlainObject } from \"../types\";\n\nexport const omit = <T extends PlainObject>(obj: T, keys: (keyof T)[]) => {\n const ret: Partial<T> = {};\n for (const key in obj) {\n if (keys.includes(key)) continue;\n ret[key] = obj[key];\n }\n return ret;\n};\n","import { DateLike, Maybe } from \"../types\";\nimport { isEmpty } from \"../validators/isEmpty\";\nimport { isJsDate } from \"../validators/isJsDate\";\n\nexport const parseDate = (arg?: Maybe<DateLike>) => {\n if (isEmpty(arg)) return;\n\n const date = new Date(arg!);\n\n if (!isJsDate(date)) return;\n\n return date;\n};\n","import { ObjectKeys, PlainObject } from \"../types\";\n\nexport const pickObjectKeys = <T extends PlainObject>(\n obj: T,\n keys: ObjectKeys<T>\n): Partial<T> => {\n const ret: Partial<T> = {};\n for (const key in obj) {\n if (keys.includes(key)) ret[key] = obj[key];\n }\n return ret;\n};\n","import { ObjectValues, PlainObject } from \"../types/Object\";\n\nexport const pickObjectValues = <T extends PlainObject>(\n obj: T,\n values: ObjectValues<T>\n): Partial<T> => {\n const ret: Partial<T> = {};\n for (const key in obj) {\n if (values.includes(obj[key])) ret[key] = obj[key];\n }\n return ret;\n};\n","export const promiseWithTimeout = <T>(\n promise: () => Promise<T>,\n timeoutMs: number,\n error?: Error\n): Promise<T> => {\n let timeout: ReturnType<typeof setTimeout>;\n const timeoutPromise = new Promise<never>((_, reject) => {\n timeout = setTimeout(\n () => reject(error ?? new Error(\"Promise timed out\")),\n timeoutMs\n );\n });\n\n return Promise.race([promise(), timeoutPromise]).finally(() => {\n clearTimeout(timeout);\n });\n};\n","export const randomInt = ({\n min = -100,\n max = 100,\n}: {\n min?: number;\n max?: number;\n} = {}): number => {\n min = Math.ceil(min); // in case is a float\n max = Math.floor(max); // in case is a float\n return Math.floor(Math.random() * (max - min + 1) + min);\n};\n\nexport const randomBigInt = (): BigInt => {\n return BigInt(randomInt());\n};\n\nexport const randomPositiveInt = ({\n min = 1,\n max,\n}: {\n min?: number;\n max?: number;\n} = {}): number =>\n randomInt({\n min,\n max,\n });\n\nexport const randomNegativeInt = ({\n min,\n max = -1,\n}: {\n min?: number;\n max?: number;\n} = {}): number =>\n randomInt({\n min,\n max,\n });\n\nexport const randomMaxSafeInt = () =>\n randomInt({ min: -Number.MAX_SAFE_INTEGER, max: Number.MAX_SAFE_INTEGER });\n\nexport const randomMaxInt = () =>\n randomInt({ min: -Number.MAX_VALUE, max: Number.MAX_VALUE });\n\nexport const randomFormattedPercentage = () => randomInt() + \"%\";\n","import { randomInt } from \"./randomInt\";\n\nexport const randomChar = () => {\n return String.fromCharCode(randomInt({ min: 97, max: 122 }));\n};\n","export const letterRegex = new RegExp(/\\p{L}/, \"gu\");\n","import { randomChar } from \"../random/randomChar\";\nimport { letterRegex } from \"../regex/letterRegex\";\n\nexport const scrambleText = (str: string): string => {\n return str.replace(letterRegex, () => {\n return randomChar();\n });\n};\n","import { PlainObject } from \"../types\";\n\n/**\n * Serialize shallow object to a deterministic string,\n * for nested objects use [json-stable-stringify](https://www.npmjs.com/package/json-stable-stringify)\n *\n * @example\n * serialize({ b: 1, a: 2 }) // '{\"a\":1,\"b\":2}'\n */\nexport const serialize = <T extends PlainObject>(obj: T) => {\n const allKeys = new Set<string>();\n JSON.stringify(obj, (key, value) => (allKeys.add(key), value));\n return JSON.stringify(obj, Array.from(allKeys).sort());\n};\n","import { isFunction, isPromise } from \"../validators\";\n\n/**\n *\n * @description Run a series of (async) functions in order and return the results\n * @example\n * const results = await seriesAll([\n * Promise.resolve(1),\n * sleep(100).then(() => 2),\n * () => Promise.resolve(3),\n * async () => 4,\n * ]); => [1, 2, 3, 4]\n */\nexport const seriesAll = async <T>(\n series: (Promise<T> | (() => Promise<T>))[]\n): Promise<T[]> => {\n const results = [];\n for (const fn of series) {\n if (isPromise(fn)) results.push(await fn);\n else if (isFunction(fn)) results.push(await fn());\n else throw new Error(\"seriesAll: invalid type\");\n }\n\n // TODO: \"as T[];\" fix TS error\n // error TS2345: Argument of type '(() => Promise<T>) | Awaited<T>' is not assignable to parameter of type 'T'.\n // 'T' could be instantiated with an arbitrary type which could be unrelated to '(() => Promise<T>) | Awaited<T>'.\n return results as T[];\n};\n\n// TODO: rename to seriesAsync\n","import { PlainObject } from \"../types\";\nimport { isObject } from \"../validators/isObject\";\n\n/**\n * Sets a value in an object using a dot-separated path.\n *\n * @param obj The object to set the value in.\n * @param path The path to the key to set, separated by dots.\n * @param value The value to set.\n */\nexport const setObjectPath = (obj: PlainObject, path: string, value: any) => {\n const keys = path.split(\".\");\n\n const set = (obj: PlainObject, relPath: string[], value: any) => {\n const key = relPath[0];\n if (relPath.length === 1) {\n obj[key] = value;\n return;\n }\n\n // creates empty object is key does not exist, or it's not an object (overwrites)\n if (!obj[key] || !isObject(obj[key])) {\n obj[key] = {};\n }\n\n set(obj[key], relPath.slice(1), value);\n };\n\n set(obj, keys, value);\n};\n","import { Maybe } from \"../types\";\n\nexport const setUrlSearchParams = (\n currentURL: string,\n searchParams: Record<string, Maybe<string | number | boolean>> = {}\n) => {\n const isRelativeUrl = currentURL.startsWith(\"/\");\n const url = new URL(\n currentURL,\n isRelativeUrl ? \"https://deverything.dev/\" : undefined // add base to make relative urls work\n );\n\n Object.entries(searchParams).forEach(([paramKey, paramValue]) => {\n if (paramValue === null || paramValue === undefined) return;\n url.searchParams.set(paramKey, paramValue.toString());\n });\n\n if (isRelativeUrl) {\n return url.pathname + url.search + url.hash;\n }\n\n return url.toString();\n};\n","export const shuffle = <T>(array: T[]): T[] => {\n const newArray = [...array]; // create a new array to avoid modifying the original array\n for (let i = newArray.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [newArray[i], newArray[j]] = [newArray[j], newArray[i]]; // swap elements\n }\n return newArray;\n};\n","type Replacer = (this: any, key: string, value: any) => any;\n\n/**\n * Stringifies objects without breaking on circular dependencies\n * @source https://github.com/moll/json-stringify-safe/blob/master/stringify.js\n */\nexport const objectSerializer = () => {\n const stack: any[] = [];\n const keys: string[] = [];\n\n const cycleReplacer: Replacer = function (_key, value) {\n if (stack[0] === value) return \"[Circular ~]\";\n return \"[Circular ~.\" + keys.slice(0, stack.indexOf(value)).join(\".\") + \"]\";\n };\n\n return function (this: any, key: string, value: any) {\n if (stack.length > 0) {\n const thisPos = stack.indexOf(this);\n ~thisPos ? stack.splice(thisPos + 1) : stack.push(this);\n ~thisPos ? keys.splice(thisPos, Infinity, key) : keys.push(key);\n if (~stack.indexOf(value)) value = cycleReplacer.call(this, key, value);\n\n // TODO: also sort keys! so it can be used for deep serialization\n } else stack.push(value);\n\n return value;\n };\n};\n","import { objectSerializer } from \"../_internals/objectSerializer\";\n\nexport const stringify = (arg?: any) => {\n return JSON.stringify(arg, objectSerializer(), 2);\n};\n","import { isArray } from \"../validators\";\n\nexport const toggleArrayValue = <T>(array: T[], value: T) => {\n // extra safety\n if (!isArray<T>(array)) return array;\n\n // This will remove all instances of the value\n const copy: T[] = array.reduce((acc: T[], val) => {\n if (val !== value) acc.push(val);\n return acc;\n }, []);\n\n // no value was removed, so add it\n if (copy.length === array.length) copy.push(value);\n\n return copy;\n};\n\n/**\n * @deprecated Use toggleArrayValue instead\n * @param {T[]} array\n * @param {T} value\n * @returns {T[]}\n */\nexport const toggleArray = toggleArrayValue;\n","import { isPositiveInt } from \"../validators/isNumber\";\n\nexport const truncate = (\n arg: string,\n limit: number,\n {\n ellipsis,\n position,\n }: { ellipsis?: string; position?: \"start\" | \"middle\" | \"end\" } = {}\n) => {\n if (!ellipsis) ellipsis = \"...\";\n if (!position) position = \"end\";\n\n if (!isPositiveInt(limit)) return arg;\n\n const argArray = [...arg]; // convert string to array, emoji and unicode safe\n\n const ellipsisLength = ellipsis.length;\n\n if (argArray.length <= limit) return arg;\n\n switch (position) {\n case \"start\":\n const startSliceLength = limit - ellipsisLength;\n return ellipsis + argArray.slice(-startSliceLength).join(\"\");\n case \"middle\": {\n const startSliceLength = Math.ceil((limit - ellipsisLength) / 2);\n const endSliceStart =\n argArray.length - Math.floor((limit - ellipsisLength) / 2);\n return (\n argArray.slice(0, startSliceLength).join(\"\") +\n ellipsis +\n argArray.slice(endSliceStart).join(\"\")\n );\n }\n case \"end\":\n default:\n return argArray.slice(0, limit - ellipsisLength).join(\"\") + ellipsis;\n }\n};\n","import { parseDate } from \"../helpers\";\nimport { DateLike } from \"../types\";\n\nexport const isOver18 = (birthDate: DateLike) => {\n const now = new Date();\n const birth = parseDate(birthDate);\n if (!birth) return false;\n\n const age = now.getFullYear() - birth.getFullYear();\n if (age > 18) return true;\n if (age < 18) return false;\n if (age === 18) {\n if (now.getMonth() > birth.getMonth()) return true;\n if (now.getMonth() < birth.getMonth()) return false;\n if (now.getMonth() === birth.getMonth()) {\n if (now.getDate() >= birth.getDate()) return true;\n if (now.getDate() < birth.getDate()) return false;\n }\n }\n return false;\n};\n","export const startOfNextMonth = () => {\n const now = new Date();\n return new Date(now.getFullYear(), now.getMonth() + 1, 1);\n};\n","export const startOfNextWeek = () => {\n const now = new Date();\n return new Date(\n now.getFullYear(),\n now.getMonth(),\n now.getDate() + 7 - now.getDay()\n );\n};\n","export const startOfThisWeek = () => {\n const now = new Date();\n return new Date(\n now.getFullYear(),\n now.getMonth(),\n now.getDate() - now.getDay()\n );\n};\n","export const startOfDay = (day: Date): Date => {\n return new Date(day.getFullYear(), day.getMonth(), day.getDate());\n};\n","import { startOfDay } from \"./startOfDay\";\n\nexport const startOfToday = (): Date => {\n const now = new Date();\n return startOfDay(now);\n};\n","export const startOfTomorrow = () => {\n const now = new Date();\n return new Date(now.getFullYear(), now.getMonth(), now.getDate() + 1);\n};\n","export const formatCamelCase = (str: string) => {\n return str\n .toLowerCase()\n .replace(/[-_\\s]([a-z\\d])(\\w*)/g, function replacer(_m, p1, p2) {\n return p1.toUpperCase() + p2;\n });\n};\n","import { PlainObject } from \"../types/Object\";\n\n/**\n *\n * @example formatCookies({}) => \"\"\n * @example formatCookies({ session: \"123\", _ga: 123 }) => \"session=123; _ga=123;\"\n */\nexport const formatCookies = (object: PlainObject): string => {\n return (\n Object.entries(object)\n .reduce((acc: string[], [key, value]) => {\n // allow nulls to be set?\n if (value !== undefined) acc.push(`${key}=${value}`);\n\n return acc;\n }, [])\n .join(\"; \") + \";\"\n );\n};\n","import { isNumber } from \"../validators/isNumber\";\n\n/**\n *\n * @example formatNumber(1000, { compact: true }) // 1K\n * @example formatNumber(1111, { maxDigits: 2 }) // 1,100\n * @example formatNumber(111111.123123123) // 111,111.123\n * @example formatNumber(0.12345, { percentage: true, maxDigits: 2 }) // '12.35%' (rounding)\n */\nexport const formatNumber = (\n value: number,\n {\n compact,\n maxDigits,\n percentage,\n }: {\n compact?: boolean;\n maxDigits?: number;\n percentage?: boolean;\n } = {}\n): string => {\n if (percentage) {\n const useValue = isNumber(value) ? value : 0;\n const number = (useValue * 100).toFixed(maxDigits || 0);\n return `${number}%`;\n }\n\n const formatter = Intl.NumberFormat(\"en\", {\n notation: compact ? \"compact\" : \"standard\",\n maximumSignificantDigits: maxDigits,\n });\n\n return formatter.format(value);\n};\n","import { clamp } from \"../helpers\";\n\n/**\n *\n * @example formatPercentage(1) => 100%\n * @example formatPercentage(0, { digits: 2 }) => 0.00%\n */\nexport const formatPercentage = (\n value: number,\n {\n digits,\n }: {\n digits?: number;\n } = {}\n): string => {\n return `${clamp({\n number: value * 100,\n min: 0,\n max: 100,\n }).toFixed(digits || 0)}%`;\n};\n","import { clamp } from \"../helpers\";\n\n/**\n *\n * @example formatProgress({ index: -1, total: 10 }) => [1/10] capped\n * @example formatProgress({ index: 1, total: 10 }) => [2/10]\n * @example formatProgress({ index: 11, total: 10 }) => [10/10] capped\n */\nexport const formatProgress = ({\n index,\n total,\n}: {\n index: number;\n total: number;\n}): string => {\n return `[${clamp({\n number: index + 1,\n min: 1,\n max: total,\n })}/${total}]`;\n};\n","export const stringToCSSUnicode = (text: string): string =>\n Array.from(text)\n .map((char: string) => {\n const codePoint = char.codePointAt(0);\n return codePoint !== undefined ? `\\\\${codePoint.toString(16)}` : \"\";\n })\n .join(\"\");\n","export const stringToUnicode = (text: string): string =>\n Array.from(text)\n .map((char: string) => {\n const codePoint = char.codePointAt(0);\n return codePoint !== undefined ? `\\\\u{${codePoint.toString(16)}}` : \"\";\n })\n .join(\"\");\n","/**\n * Calculates the average of a list of numbers.\n * @example\n * average([1, 2, 3, 4, 5]); // 3\n * average(1, 2, 3, 4, 5); // 3\n */\nexport const average = (numbers: number[]): number => {\n const sum = numbers.reduce((total, num) => total + num, 0);\n return sum / numbers.length;\n};\n","export const isBetween = (value: number, min: number, max: number) => {\n return value >= min && value <= max;\n};\n","export const isOutside = (value: number, min: number, max: number) => {\n return value < min || value > max;\n};\n","export const isStrictlyBetween = (value: number, min: number, max: number) => {\n return value > min && value < max;\n};\n","export const max = (values: number[]): number => {\n const maxValue = Math.max(...values);\n return maxValue;\n};\n","export const min = (values: number[]): number => {\n const minValue = Math.min(...values);\n return minValue;\n};\n","export const multiply = (numbers: number[]) => {\n return numbers.reduce((total, num) => total * num, 1);\n};\n","/**\n *\n * @example normaliseNumber(50, 0, 100) => 0.5\n */\nexport const normaliseNumber = (\n value: number,\n minValue: number,\n maxValue: number\n) => (value - minValue) / (maxValue - minValue);\n","import { max } from \"./max\";\nimport { min } from \"./min\";\nimport { normaliseNumber } from \"./normaliseNumber\";\n\n/**\n * Normalises an array of numbers\n * @example normaliseArray([1, 2, 3]) => [0, 0.5, 1]\n */\nexport const normaliseArray = (values: number[]) => {\n const minValue = min(values);\n const maxValue = max(values);\n\n return values.map((value) => normaliseNumber(value, minValue, maxValue));\n};\n","/**\n *\n * @param previous Positive percentage i.e. 0.1 for 10%\n * @param current Positive percentage i.e. 0.2 for 20%\n * @returns\n */\nexport const percentageChange = (previous: number, current: number): number => {\n if (previous < 0 || current < 0) return 0;\n if (current === 0 && previous === 0) return 0;\n if (current === 0 && previous !== 0) return -1;\n if (current !== 0 && previous === 0) return 1;\n const perChange = (current - previous) / previous;\n return parseFloat(perChange.toFixed(4)); // 4 decimal places so when formatting to % two decimal places are shown\n};\n","export const sum = (numbers: number[]) => {\n return numbers.reduce((total, num) => total + num, 0);\n};\n","import { parseDate } from \"../helpers/parseDate\";\nimport { DateRange } from \"../types/Date\";\n\nexport const prismaDateRange = ({ startDate, endDate }: DateRange) => {\n const gte = parseDate(startDate);\n const lt = parseDate(endDate);\n\n if (!gte || !lt) {\n throw new Error(\"prismaDateRange: Invalid date range\");\n }\n\n return {\n gte,\n lt,\n };\n};\n","// Prefix with Random to avoid name collision with the Address type from other libs\nexport type RandomAddress = {\n city: string;\n country: string;\n countryCode: string;\n state?: string;\n street: string;\n line2?: string;\n number: string;\n zip: string;\n};\n\nexport const UK_ADDRESSES: RandomAddress[] = [\n {\n city: \"London\",\n country: \"United Kingdom\",\n countryCode: \"GB\",\n line2: \"Marylebone\",\n number: \"221B\",\n street: \"Baker Street\",\n zip: \"NW1 6XE\",\n },\n {\n city: \"Birmingham\",\n country: \"United Kingdom\",\n countryCode: \"GB\",\n number: \"B1 1AA\",\n street: \"Bordesley Street\",\n zip: \"B1 1AA\",\n },\n];\n\nexport const US_ADDRESSES: RandomAddress[] = [\n {\n city: \"New York\",\n country: \"United States\",\n countryCode: \"US\",\n state: \"NY\",\n street: \"Broadway\",\n line2: \"Manhattan\",\n number: \"42\",\n zip: \"10036\",\n },\n {\n city: \"Los Angeles\",\n country: \"United States\",\n countryCode: \"US\",\n state: \"CA\",\n street: \"Hollywood Boulevard\",\n number: \"6801\",\n zip: \"90028\",\n },\n];\n\nexport const EUROPE_ADDRESSES: RandomAddress[] = [\n {\n city: \"Paris\",\n country: \"France\",\n countryCode: \"FR\",\n street: \"Rue de Rivoli\",\n number: \"75001\",\n zip: \"75001\",\n },\n {\n city: \"Berlin\",\n country: \"Germany\",\n countryCode: \"DE\",\n street: \"Unter den Linden\",\n line2: \"Mitte\",\n number: \"10117\",\n zip: \"10117\",\n },\n {\n city: \"Rome\",\n country: \"Italy\",\n countryCode: \"IT\",\n street: \"Via del Corso\",\n number: \"00186\",\n zip: \"00186\",\n },\n {\n city: \"Madrid\",\n country: \"Spain\",\n countryCode: \"ES\",\n street: \"Gran Vía\",\n line2: \"Sol\",\n number: \"28013\",\n zip: \"28013\",\n },\n];\n\nexport const MIXED_ADDRESSES: RandomAddress[] = [\n {\n city: \"Moscow\",\n country: \"Russia\",\n countryCode: \"RU\",\n street: \"Tverskaya\",\n number: \"101000\",\n zip: \"101000\",\n },\n {\n city: \"Tokyo\",\n country: \"Japan\",\n countryCode: \"JP\",\n street: \"Shinjuku\",\n line2: \"Shinjuku City\",\n number: \"160-0022\",\n zip: \"160-0022\",\n },\n {\n city: \"Beijing\",\n country: \"China\",\n countryCode: \"CN\",\n street: \"Changan\",\n number: \"100005\",\n zip: \"100005\",\n },\n {\n city: \"Cairo\",\n country: \"Egypt\",\n countryCode: \"EG\",\n street: \"Al-Muizz\",\n number: \"11511\",\n zip: \"11511\",\n },\n {\n city: \"Buenos Aires\",\n country: \"Argentina\",\n countryCode: \"AR\",\n street: \"Avenida de Mayo\",\n number: \"1002\",\n zip: \"C1006AAQ\",\n },\n {\n city: \"Cape Town\",\n country: \"South Africa\",\n countryCode: \"ZA\",\n street: \"Adderley\",\n number: \"7700\",\n zip: \"7700\",\n },\n {\n city: \"Sydney\",\n country: \"Australia\",\n countryCode: \"AU\",\n street: \"George\",\n line2: \"Haymarket\",\n number: \"2000\",\n zip: \"2000\",\n },\n {\n city: \"Rio de Janeiro\",\n country: \"Brazil\",\n countryCode: \"BR\",\n street: \"Av. Presidente Vargas\",\n number: \"20021-000\",\n zip: \"20021-000\",\n },\n {\n city: \"Mexico City\",\n country: \"Mexico\",\n countryCode: \"MX\",\n street: \"Paseo de la Reforma\",\n number: \"06500\",\n zip: \"06500\",\n },\n];\n\nexport const ADDRESSES: RandomAddress[] = [\n ...UK_ADDRESSES,\n ...US_ADDRESSES,\n ...EUROPE_ADDRESSES,\n ...MIXED_ADDRESSES,\n];\n","import { lastIndex } from \"../helpers/lastIndex\";\nimport { last } from \"../helpers/last\";\nimport { randomInt } from \"./randomInt\";\nimport { sum } from \"../math/sum\";\n\nexport const randomArrayItem = <T>(\n array: T[],\n { weights }: { weights?: number[] } = {}\n): T => {\n if (weights && weights.length === array.length) {\n const totalWeight = sum(weights);\n let random = Math.random() * totalWeight;\n\n for (let i = 0; i < weights.length; i++) {\n random -= weights[i];\n if (random <= 0) {\n return array[i];\n }\n }\n\n // In case of rounding errors, return the last item\n return last(array);\n }\n\n return array[randomInt({ min: 0, max: lastIndex(array) })];\n};\n","import { ADDRESSES } from \"../constants/addresses\";\nimport { randomArrayItem } from \"./randomArrayItem\";\n\nexport const randomAddress = () => {\n return randomArrayItem(ADDRESSES);\n};\n","import { array } from \"../helpers/array\";\nimport { randomArrayItem } from \"./randomArrayItem\";\n\n//avoid 0s and Os as they get confused with each other\nconst chars = \"123456789ABCDEFGHIJKLMNPQRSTUVWXYZ\".split(\"\");\n\n/**\n * Generates a random alphanumeric code that can be used for verification codes, etc.\n * Does not contain 0s or Os as they get confused with each other.\n * @param length The length of the code to generate.\n * @returns A random alphanumeric code.\n * @example\n * randomAlphaNumericCode(); => \"A2G4G6\"\n */\nexport const randomAlphaNumericCode = ({\n length = 6,\n}: { length?: number } = {}) => {\n if (length < 1)\n throw new Error(\"randomAlphaNumericCode: Length must be greater than 0.\");\n\n return array(length, () => randomArrayItem(chars)).join(\"\");\n};\n","import { randomArrayItem } from \"./randomArrayItem\";\n\nexport const randomBool = () => randomArrayItem([true, false]);\n","import {\n MILLISECONDS_IN_DECADE,\n MAX_DATE_MILLISECONDS,\n MILLISECONDS_IN_MINUTE,\n} from \"../constants/time\";\nimport { parseDate } from \"../helpers/parseDate\";\nimport { DateRange } from \"../types\";\nimport { isFutureDate, isPastDate } from \"../validators\";\nimport { randomInt } from \"./randomInt\";\n\nconst datePlusDecade = (date: Date = new Date()) =>\n datePlusMs(date, MILLISECONDS_IN_DECADE);\n\nconst dateMinusDecade = (date: Date = new Date()) =>\n datePlusMs(date, -MILLISECONDS_IN_DECADE);\n\nconst datePlusMs = (date: Date, ms: number) => new Date(date.getTime() + ms);\n\nexport const randomDate = ({ startDate, endDate }: Partial<DateRange> = {}) => {\n const parsedStartDate = parseDate(startDate);\n const parsedEndDate = parseDate(endDate);\n\n if (parsedStartDate && parsedEndDate && parsedStartDate > parsedEndDate) {\n console.warn(`randomDate: startDate must be before endDate`);\n }\n\n const finalStartDate =\n parsedStartDate || //\n dateMinusDecade(parsedEndDate); // uses now if undefined\n\n const finalEndDate =\n parsedEndDate || //\n datePlusDecade(parsedStartDate); // uses now if undefined\n\n return new Date(\n randomInt({ min: finalStartDate.getTime(), max: finalEndDate.getTime() })\n );\n};\n\nexport const randomMaxDate = ({ startDate, endDate }: Partial<DateRange>) => {\n startDate = startDate || new Date(-MAX_DATE_MILLISECONDS);\n endDate = endDate || new Date(MAX_DATE_MILLISECONDS);\n return randomDate({ startDate, endDate });\n};\n\nexport const randomFutureDate = ({\n startDate,\n endDate,\n}: Partial<DateRange> = {}) => {\n if (startDate && isPastDate(startDate)) {\n console.warn(`randomFutureDate: startDate must be in the future`);\n }\n if (endDate && isPastDate(endDate)) {\n console.warn(`randomFutureDate: endDate must be in the future`);\n }\n\n const finalStartDate =\n parseDate(startDate) || datePlusMs(new Date(), 5 * MILLISECONDS_IN_MINUTE); // Add a safe margin in the future (i.e. lagging tests)\n\n return randomDate({ startDate: finalStartDate, endDate });\n};\n\nexport const randomPastDate = ({\n startDate,\n endDate,\n}: Partial<DateRange> = {}) => {\n if (startDate && isFutureDate(startDate)) {\n console.warn(`randomPastDate: startDate must be in the past`);\n }\n if (endDate && isFutureDate(endDate)) {\n console.warn(`randomPastDate: endDate must be in the past`);\n }\n\n const finalEndDate = parseDate(endDate) || new Date();\n return randomDate({ startDate, endDate: finalEndDate });\n};\n\nexport const randomDateRange = () => {\n const startDate = randomDate();\n const endDate = randomDate({ startDate });\n\n return {\n endDate,\n startDate,\n };\n};\n","import { array } from \"../helpers\";\nimport { randomChar } from \"./randomChar\";\n\nexport const randomString = ({\n length = 10,\n}: {\n length?: number;\n} = {}) => {\n return array(length, () => randomChar()).join(\"\");\n};\n","import { randomString } from \"./randomString\";\n\nexport const randomSymbol = () => {\n return Symbol(randomString());\n};\n","import { randomArrayItem } from \"./randomArrayItem\";\nimport { randomBool } from \"./randomBool\";\nimport { randomDate } from \"./randomDate\";\nimport { randomBigInt, randomInt } from \"./randomInt\";\nimport { randomString } from \"./randomString\";\nimport { randomSymbol } from \"./randomSymbol\";\n\n// This must return true with `isValue` assertion\nexport const randomValue = () => {\n return randomArrayItem([\n randomBool(),\n randomString(),\n randomInt(),\n randomDate(),\n randomBigInt(),\n randomSymbol(),\n ]);\n};\n","import { randomInt } from \"./randomInt\";\nimport { randomValue } from \"./randomValue\";\nimport { array } from \"../helpers/array\";\n\nexport const randomArray = () => {\n return array(randomInt({ min: 1, max: 5 }), randomValue);\n};\n","export const IBAN_SAMPLES = [\n \"AD1200012030200359100100\",\n \"BA391290079401028494\",\n \"BE68539007547034\",\n \"BG80BNBG96611020345678\",\n \"FI2112345600000785\",\n \"FO6264600001631634\",\n \"FR1420041010050500013M02606\",\n \"GB29NWBK60161331926819\",\n \"GE29NB0000000101904917\",\n];\n\nexport const BIC_SWIFT_SAMPLES = [\n \"ABNANL2A\",\n \"BKENGB2LXXX\",\n \"BUKBGB22\",\n \"CITIUS33\",\n \"CITIUS33XXX\",\n \"CSCHUS6SXXX\",\n \"NOSCCATTXXX\",\n];\n\nexport const CARD_NUMBER_SAMPLES = [\n \"371449635398431\", //american express\n \"30569309025904\", //diners club\n \"6011111111111117\", //discover\n \"3530111333300000\", //jcb\n \"6304000000000000\", //laser\n \"5555555555554444\", //mastercard\n \"4111111111111111\", //visa\n];\n\n//An ABA routing number is a nine-digit code that identifies banks in the U.S.\nexport const ABA_NUMBER_SAMPLES = [\n \"111000025\",\n \"081000210\",\n \"104000029\",\n \"091300023\",\n \"123000220\",\n];\n\nexport const ROUTING_NUMBER_SAMPLES = [\n \"637530215\",\n \"130436324\",\n \"611531133\",\n \"865673685\",\n];\n\nexport const BANK_ACCOUNT_NUMBER_SAMPLES = [\n \"64766774\",\n \"39526009\",\n \"25048213\",\n \"72796383\",\n];\n\nexport const SORT_CODE_SAMPLES = [\"100000\", \"902127\", \"800551\"];\n\nexport const SSN_SAMPLES = [\"235-55-7216\", \"372-37-3976\", \"414-99-6488\"];\n\nexport const BANK_NAME_SAMPLES = [\n \"JPMorgan Chase & Co.\",\n \"Bank of America Corporation\",\n \"Wells Fargo & Company\",\n \"Citigroup Inc.\",\n \"Goldman Sachs Group Inc.\",\n];\n\nexport type BankAccount = {\n abaNumber?: string;\n accountHolderName: string;\n accountHolderType: \"company\" | \"individual\" | \"other\";\n accountNumber: string;\n accountType?: \"checking\" | \"savings\";\n bankName?: string;\n bsbNumber?: string;\n bankAddress?: string;\n bicSwift?: string;\n branchCode?: string;\n iban?: string;\n routingNumber?: string;\n institutionNumber?: string;\n branchTransitNumber?: string;\n sortCode?: string;\n};\n\nexport const UK_BANK_ACCOUNT_SAMPLES: BankAccount[] = [\n {\n accountHolderName: \"John Peters\",\n accountNumber: \"12345678\",\n bankAddress: \"1 Churchill Place, Canary Wharf, London, E14 5HP, UK\",\n bankName: \"Barclays plc\",\n bicSwift: \"BARCGB22\",\n iban: \"GB51BARC20039534871253\",\n sortCode: \"12-34-56\",\n accountHolderType: \"individual\",\n },\n {\n accountHolderName: \"Jane Evans\",\n accountNumber: \"87654321\",\n bankAddress: \"8 Canada Square, London, E14 5HQ, UK\",\n bankName: \"HSBC Holdings plc\",\n bicSwift: \"HSBCGB2L\",\n iban: \"GB82BARC20031847813531\",\n sortCode: \"65-43-21\",\n accountHolderType: \"company\",\n },\n];\n\nexport const US_BANK_ACCOUNT_SAMPLES: BankAccount[] = [\n {\n accountHolderName: \"Jack I. Taylor\",\n accountNumber: \"123456789012\",\n accountType: \"checking\",\n bankAddress:\n \"Bank of America Corporate Center, 100 North Tryon Street, Charlotte, NC 28255, USA\",\n bankName: \"Bank of America Corporation\",\n routingNumber: \"111000025\",\n accountHolderType: \"individual\",\n },\n {\n accountHolderName: \"Sally T King\",\n accountNumber: \"987654321098\",\n accountType: \"savings\",\n bankAddress: \"383 Madison Avenue, New York, NY 10179, USA\",\n bankName: \"JPMorgan Chase & Co.\",\n routingNumber: \"021000021\",\n accountHolderType: \"company\",\n },\n];\n\nexport const AU_BANK_ACCOUNT_SAMPLES: BankAccount[] = [\n {\n accountHolderName: \"William Kevin White\",\n accountNumber: \"123456789012\",\n accountType: \"savings\",\n bankAddress:\n \"Commonwealth Bank Centre, Tower 1, 201 Sussex Street, Sydney, NSW 2000, Australia\",\n bankName: \"Commonwealth Bank of Australia\",\n bicSwift: \"CTBAAU2S\",\n bsbNumber: \"062-000\",\n accountHolderType: \"individual\",\n },\n {\n accountHolderName: \"Jennifer Ann Brown\",\n accountNumber: \"987654321098\",\n accountType: \"checking\",\n bankAddress: \"Westpac Place, 275 Kent Street, Sydney, NSW 2000, Australia\",\n bankName: \"Westpac Banking Corporation\",\n bicSwift: \"WPACAU2S\",\n bsbNumber: \"032-001\",\n accountHolderType: \"company\",\n },\n];\n\nexport const CA_BANK_ACCOUNT_SAMPLES: BankAccount[] = [\n {\n accountHolderName: \"Charles Green\",\n accountNumber: \"123456789012\",\n accountType: \"savings\",\n bankAddress:\n \"Royal Bank Plaza, 200 Bay Street, North Tower, Toronto, ON M5J 2J5, Canada\",\n bankName: \"Royal Bank of Canada\",\n branchTransitNumber: \"45678\",\n institutionNumber: \"123\",\n accountHolderType: \"individual\",\n },\n {\n accountHolderName: \"Olivia Orange\",\n accountNumber: \"987654321098\",\n accountType: \"checking\",\n bankAddress:\n \"TD Canada Trust Tower, 161 Bay Street, Toronto, ON M5J 2S8, Canada\",\n bankName: \"Toronto-Dominion Bank\",\n branchTransitNumber: \"65432\",\n institutionNumber: \"987\",\n accountHolderType: \"company\",\n },\n];\n\nexport const BANK_ACCOUNT_SAMPLES = [\n ...UK_BANK_ACCOUNT_SAMPLES,\n ...US_BANK_ACCOUNT_SAMPLES,\n ...AU_BANK_ACCOUNT_SAMPLES,\n ...CA_BANK_ACCOUNT_SAMPLES,\n];\n","import { BANK_ACCOUNT_SAMPLES } from \"../constants/banking\";\nimport { randomArrayItem } from \"./randomArrayItem\";\n\nexport const randomBankAccount = () => {\n return randomArrayItem(BANK_ACCOUNT_SAMPLES);\n};\n","export const VAT_REGISTRATION_NUMBER_SAMPLES = [\n \"IE1234567T\",\n \"GB123456789\",\n \"XI123456789\",\n];\n\nexport const COMPANY_NAME_SAMPLES = [\n \"Acme Inc.\",\n \"Globex Ltd.\",\n \"Aurora LLC\",\n \"Serenity Systems\",\n \"Vulcan Ventures\",\n \"Umbrella Corp.\",\n];\n\nexport type Company = {\n name: string;\n vatRegNumber?: string;\n};\n","import {\n COMPANY_NAME_SAMPLES,\n Company,\n VAT_REGISTRATION_NUMBER_SAMPLES,\n} from \"../constants/companies\";\nimport { randomArrayItem } from \"./randomArrayItem\";\n\nexport const randomCompany = (): Company => {\n return {\n name: randomArrayItem(COMPANY_NAME_SAMPLES),\n vatRegNumber: randomArrayItem(VAT_REGISTRATION_NUMBER_SAMPLES),\n };\n};\n","import { isValue } from \"../validators/isValue\";\n\n// Max js digits is theoretically 17, but is actually 16, see Math.random output.\nexport const JS_MAX_DIGITS = 16;\n\n// TODO: with big numbers there will be less digits\nexport const randomFloat = (\n min: number = -9,\n max: number = 9,\n decimals?: number // toFixed accepts max 100 anyway... even if the docs say 20\n) => {\n const float = Math.random() * (max - min) + min;\n\n if (isValue(decimals)) return parseFloat(float.toFixed(decimals));\n\n return float;\n};\n\n// TODO: randomBigFloat\n","import { Coords } from \"../types\";\nimport { randomFloat } from \"./randomFloat\";\n\nexport const randomCoords = (): Coords => {\n return {\n lat: randomLat(),\n lng: randomLng(),\n };\n};\n\nexport const randomLat = () => {\n return randomFloat(-90, 90);\n};\n\nexport const randomLng = () => {\n return randomFloat(-180, 180);\n};\n","export const DOMAIN_NAMES = [\n \"gmail.com\",\n \"yahoo.com\",\n \"hotmail.com\",\n \"aol.com\",\n \"msn.com\",\n \"comcast.net\",\n \"live.com\",\n \"att.net\",\n \"mac.com\",\n \"me.com\",\n \"charter.net\",\n \"shaw.ca\",\n \"yahoo.ca\",\n \"mail.com\",\n \"qq.com\",\n \"web.de\",\n \"gmx.de\",\n \"mail.ru\",\n];\n","export const ANIMAL_NAMES = [\n \"Albatross\",\n \"Dolphin\",\n \"Elephant\",\n \"Giraffe\",\n \"Koala\",\n \"Lion\",\n \"Penguin\",\n \"Squirrel\",\n \"Tiger\",\n \"Turtle\",\n \"Whale\",\n \"Zebra\",\n];\n\nexport const TOOL_NAMES = [\n \"Axe\",\n \"Chisel\",\n \"Drill\",\n \"Hammer\",\n \"Mallet\",\n \"Pliers\",\n \"Saw\",\n \"Screwdriver\",\n \"Wrench\",\n \"Blowtorch\",\n \"Crowbar\",\n \"Ladder\",\n];\n\nexport const WESTERN_FIRST_NAMES = [\n \"Adrian\",\n \"Albert\",\n \"Alexander\",\n \"Alice\",\n \"Amanda\",\n \"Amy\",\n \"Benjamin\",\n \"David\",\n \"Emma\",\n \"Esther\",\n \"Olivia\",\n \"Ruby\",\n \"Sarah\",\n \"Victoria\",\n];\n\nexport const WESTERN_LAST_NAMES = [\n \"Anderson\",\n \"Brown\",\n \"Davis\",\n \"Jackson\",\n \"Johnson\",\n \"Jones\",\n \"Miller\",\n \"Moore\",\n \"Smith\",\n \"Taylor\",\n \"Thomas\",\n \"White\",\n \"Williams\",\n \"Wilson\",\n];\n\nexport const CYRILLIC_FIRST_NAMES = [\n \"Абигаил\",\n \"Агнес\",\n \"Адам\",\n \"Адриан\",\n \"Алан\",\n \"Александр\",\n \"Алиса\",\n \"Альберт\",\n \"Аманда\",\n \"Амелия\",\n \"Эми\",\n \"Эндрю\",\n];\n\nexport const CYRILLIC_LAST_NAMES = [\n \"Андерсон\",\n \"Браун\",\n \"Вилсон\",\n \"Джексон\",\n \"Джонс\",\n \"Джонсон\",\n \"Дэвис\",\n \"Миллер\",\n \"Мур\",\n \"Смит\",\n \"Тейлор\",\n \"Томас\",\n \"Уайт\",\n \"Уильямс\",\n];\n\nexport const JAPANESE_FIRST_NAMES = [\n \"アグネス\",\n \"アダム\",\n \"アドリアン\",\n \"アビゲイル\",\n \"アマンダ\",\n \"アミー\",\n \"アメリア\",\n \"アラン\",\n \"アリス\",\n \"アルバート\",\n \"アレクサンダー\",\n \"アンドリュー\",\n];\n\nexport const JAPANESE_LAST_NAMES = [\n \"アンダーソン\",\n \"ウィリアムズ\",\n \"ウィルソン\",\n \"ジャクソン\",\n \"ジョーンズ\",\n \"ジョンソン\",\n \"スミス\",\n \"タイラー\",\n \"デイビス\",\n \"トーマス\",\n \"ブラウン\",\n \"ホワイト\",\n \"ミラー\",\n \"モア\",\n];\n\nexport const ARABIC_FIRST_NAMES = [\n \"آدريان\",\n \"آدم\",\n \"آلان\",\n \"آلبرت\",\n \"آليس\",\n \"آماندا\",\n \"آمي\",\n \"آميليا\",\n \"أبيجيل\",\n \"أغنيس\",\n \"ألكسندر\",\n \"أندرو\",\n];\n\nexport const ARABIC_LAST_NAMES = [\n \"أندرسون\",\n \"براون\",\n \"تايلور\",\n \"توماس\",\n \"جاكسون\",\n \"جونز\",\n \"جونسون\",\n \"ديفيس\",\n \"سميث\",\n \"مور\",\n \"ميلر\",\n \"وايت\",\n \"ويلسون\",\n \"ويليامز\",\n];\n\nexport const FIRST_NAMES = [\n ...WESTERN_FIRST_NAMES,\n ...CYRILLIC_FIRST_NAMES,\n ...JAPANESE_FIRST_NAMES,\n ...ARABIC_FIRST_NAMES,\n];\n\nexport const LAST_NAMES = [\n ...WESTERN_LAST_NAMES,\n ...CYRILLIC_LAST_NAMES,\n ...JAPANESE_LAST_NAMES,\n ...ARABIC_LAST_NAMES,\n];\n","import { WESTERN_FIRST_NAMES, WESTERN_LAST_NAMES } from \"../constants/names\";\nimport { incrementalId } from \"../helpers/incrementalId\";\nimport { randomArrayItem } from \"./randomArrayItem\";\n\n/**\n *\n * @returns a unique social-like handle\n * @example \"john.doe15\"\n */\nexport const randomHandle = ({ suffix }: { suffix?: string } = {}): string =>\n (\n randomArrayItem(WESTERN_FIRST_NAMES) +\n \".\" +\n randomArrayItem(WESTERN_LAST_NAMES)\n ).toLowerCase() +\n incrementalId() + // process-unique\n (suffix ? suffix : \"\");\n","import { DOMAIN_NAMES } from \"../constants/domains\";\nimport { randomArrayItem } from \"./randomArrayItem\";\nimport { randomHandle } from \"./randomHandle\";\n\nexport const randomEmail = ({\n handle,\n handleSuffix,\n}: { handle?: string; handleSuffix?: string } = {}) =>\n `${handle || randomHandle({ suffix: handleSuffix })}@${randomArrayItem(\n DOMAIN_NAMES\n )}`;\n","export const EMOJI_SAMPLE = [\n \"😀\",\n \"😁\",\n \"😂\",\n \"🤣\",\n \"😃\",\n \"😄\",\n \"😅\",\n \"😆\",\n \"😉\",\n \"😊\",\n \"😋\",\n \"😎\",\n \"😍\",\n \"😘\",\n \"😗\",\n \"😙\",\n];\n\nexport const SPECIAL_CHARACTERS = [\"!\", \"@\", \"#\", \"$\", \"%\", \"^\", \"&\", \"*\"];\n","import { EMOJI_SAMPLE } from \"../constants/unicode\";\nimport { randomArrayItem } from \"./randomArrayItem\";\n\nexport const randomEmoji = () => {\n return randomArrayItem(EMOJI_SAMPLE);\n};\n","import { randomArrayItem } from \"./randomArrayItem\";\n\nexport const randomEmptyValue = () => {\n return randomArrayItem([undefined, null, NaN, Infinity]);\n};\n","import { enumKeys } from \"../helpers/enumKeys\";\nimport { ObjectKey } from \"../types/Object\";\nimport { randomArrayItem } from \"./randomArrayItem\";\n\nexport const randomEnumKey = <T extends object>(arg: T): ObjectKey<T> => {\n const keys = enumKeys(arg);\n\n return randomArrayItem(keys);\n};\n","import { enumValues } from \"../helpers/enumValues\";\nimport { ObjectValue } from \"../types/Object\";\nimport { randomArrayItem } from \"./randomArrayItem\";\n\nexport const randomEnumValue = <T extends object>(arg: T): ObjectValue<T> => {\n const values = enumValues(arg);\n\n return randomArrayItem(values);\n};\n","export const VERBS = [\n \"act\",\n \"add\",\n \"agree\",\n \"allow\",\n \"be\",\n \"catch\",\n \"create\",\n \"delete\",\n \"discover\",\n \"eat\",\n \"explore\",\n \"go\",\n \"help\",\n \"imagine\",\n \"jump\",\n \"merge\",\n \"need\",\n \"offer\",\n \"play\",\n \"read\",\n \"run\",\n \"search\",\n \"skip\",\n \"solve\",\n \"speak\",\n \"think\",\n \"try\",\n \"work\",\n \"write\",\n];\n\nexport const NOUNS = [\n \"city\",\n \"coffee\",\n \"courage\",\n \"fact\",\n \"family\",\n \"flower\",\n \"food\",\n \"friend\",\n \"fun\",\n \"hope\",\n \"justice\",\n \"key\",\n \"life\",\n \"love\",\n \"music\",\n \"smile\",\n \"time\",\n];\n\nexport const ADJECTIVES = [\n \"absolute\",\n \"compassionate\",\n \"cozy\",\n \"dull\",\n \"enigmatic\",\n \"fascinating\",\n \"interesting\",\n \"playful\",\n \"predictable\",\n \"remarkable\",\n \"soothing\",\n \"sunny\",\n \"unforgettable\",\n \"wonderful\",\n];\n\nexport const ADVERBS = [\n \"accidentally\",\n \"accommodatingly\",\n \"boldly\",\n \"briskly\",\n \"carefully\",\n \"efficiently\",\n \"freely\",\n \"gently\",\n \"happily\",\n \"lightly\",\n \"loudly\",\n \"quickly\",\n \"quietly\",\n \"suddenly\",\n \"unexpectedly\",\n \"wisely\",\n];\n\nexport const LONG_WORDS = [\n \"Pneumonoultramicroscopicsilicovolcanoconiosis\",\n \"Floccinaucinihilipilification\",\n \"Pseudopseudohypoparathyroidism\",\n \"Hippopotomonstrosesquippedaliophobia\",\n \"Antidisestablishmentarianism\",\n \"Supercalifragilisticexpialidocious\",\n \"Honorificabilitudinitatibus\",\n];\n\nexport const JS_RESERVED_WORDS = [\n \"abstract\",\n \"arguments\",\n \"await\",\n \"boolean\",\n \"break\",\n \"byte\",\n \"case\",\n \"catch\",\n \"char\",\n \"class\",\n \"const\",\n \"continue\",\n \"debugger\",\n \"default\",\n \"delete\",\n \"do\",\n \"double\",\n \"else\",\n \"enum*\",\n \"eval\",\n \"export\",\n \"extends\",\n \"false\",\n \"final\",\n \"finally\",\n \"float\",\n \"for\",\n \"function\",\n \"goto\",\n \"if\",\n \"implements\",\n \"import\",\n \"in\",\n \"instanceof\",\n \"int\",\n \"interface\",\n \"let\",\n \"long\",\n \"native\",\n \"new\",\n \"null\",\n \"package\",\n \"private\",\n \"protected\",\n \"public\",\n \"return\",\n \"short\",\n \"static\",\n \"super\",\n \"switch\",\n \"synchronized\",\n \"this\",\n \"throw\",\n \"throws\",\n \"transient\",\n \"true\",\n \"try\",\n \"typeof\",\n \"var\",\n \"void\",\n \"volatile\",\n \"while\",\n \"with\",\n \"yield\",\n];\n\nexport const HTML_COLOR_NAME_SAMPLES = [\n \"AliceBlue\",\n \"Aqua\",\n \"Aquamarine\",\n \"Azure\",\n \"Beige\",\n \"Bisque\",\n \"Black\",\n \"Blue\",\n \"BlueViolet\",\n \"Brown\",\n \"BurlyWood\",\n \"CadetBlue\",\n \"Chartreuse\",\n \"Chocolate\",\n \"Coral\",\n \"DarkSlateGray\",\n \"DeepPink\",\n \"Gold\",\n \"Lime\",\n \"Olive\",\n \"Orchid\",\n \"Salmon\",\n \"Turquoise\",\n];\n\nexport const WORDS = [\n ...VERBS,\n ...NOUNS,\n ...ADJECTIVES,\n ...ADVERBS,\n ...LONG_WORDS,\n];\n","import { NOUNS, VERBS, WORDS } from \"../constants/words\";\nimport { randomArrayItem } from \"./randomArrayItem\";\n\nexport const randomWord = () => {\n return randomArrayItem(WORDS);\n};\n\nexport const randomNoun = () => {\n return randomArrayItem(NOUNS);\n};\n\nexport const randomVerb = () => {\n return randomArrayItem(VERBS);\n};\n","import { array } from \"../helpers\";\nimport { capitalize } from \"../helpers/capitalize\";\nimport { randomInt } from \"./randomInt\";\nimport { randomWord } from \"./randomWord\";\n\n// TODO: add a comma in the middle of the sentence\n/**\n * Generates a random paragraph of text.\n * @param maxCharacters The maximum number of characters. The paragraph will be truncated to this length if it exceeds it. Default is 200.\n * @param words The number of words. Default is 8.\n * @returns A random paragraph of text.\n */\nexport const randomParagraph = ({\n maxCharacters = 200,\n minWords = 8,\n maxWords = 16,\n}: {\n maxCharacters?: number;\n minWords?: number;\n maxWords?: number;\n} = {}) => {\n return capitalize(\n array(randomInt({ min: minWords, max: maxWords }), () => randomWord())\n .join(\" \")\n .slice(0, maxCharacters - 1) + \".\"\n );\n};\n","import { randomArrayItem } from \"./randomArrayItem\";\nimport { randomParagraph } from \"./randomParagraph\";\nimport { randomWord } from \"./randomWord\";\n\nconst fileExtensions = [\"png\", \"jpg\", \"jpeg\", \"gif\", \"svg\", \"webp\"];\n\n// This is a client only function\nexport const randomFile = ({\n name,\n extension,\n}: {\n name?: string;\n extension?: string;\n} = {}): File | undefined => {\n if (typeof File === \"undefined\") return undefined;\n\n const _extension = extension || randomArrayItem(fileExtensions);\n return new File(\n [randomParagraph()], // TODO: Use random char string\n `${name || randomWord()}.${_extension}`,\n {\n type: `image/${_extension}`,\n }\n );\n};\n","export const HEX_VALUES = [\n \"0\",\n \"1\",\n \"2\",\n \"3\",\n \"4\",\n \"5\",\n \"6\",\n \"7\",\n \"8\",\n \"9\",\n \"A\",\n \"B\",\n \"C\",\n \"D\",\n \"E\",\n \"F\",\n];\n","import { HEX_VALUES } from \"../constants/hex\";\nimport { array } from \"../helpers\";\nimport { randomArrayItem } from \"./randomArrayItem\";\n\nexport const randomHexColor = () => {\n return \"#\" + array(6, () => randomArrayItem(HEX_VALUES)).join(\"\");\n};\n","import { HEX_VALUES } from \"../constants/hex\";\nimport { randomArrayItem } from \"./randomArrayItem\";\n\nexport const randomHexValue = () => {\n return randomArrayItem(HEX_VALUES);\n};\n","import { HTML_COLOR_NAME_SAMPLES } from \"../constants/words\";\nimport { randomArrayItem } from \"./randomArrayItem\";\n\nexport const randomHtmlColorName = () => {\n return randomArrayItem(HTML_COLOR_NAME_SAMPLES);\n};\n","import { IBAN_SAMPLES } from \"../constants/banking\";\nimport { randomArrayItem } from \"./randomArrayItem\";\n\nexport const randomIBAN = () => {\n return randomArrayItem(IBAN_SAMPLES);\n};\n","import { array } from \"../helpers/array\";\nimport { randomInt } from \"./randomInt\";\n\nexport const randomIP = () => {\n return array(4, () => randomInt({ min: 0, max: 255 }).toString()).join(\".\");\n};\n","import {\n ANIMAL_NAMES,\n FIRST_NAMES,\n LAST_NAMES,\n WESTERN_FIRST_NAMES,\n WESTERN_LAST_NAMES,\n TOOL_NAMES,\n} from \"../constants/names\";\nimport { randomArrayItem } from \"./randomArrayItem\";\n\nexport const randomName = () =>\n randomArrayItem([...ANIMAL_NAMES, ...TOOL_NAMES]);\n\nexport const randomFirstName = () => randomArrayItem(FIRST_NAMES);\n\nexport const randomLastName = () => randomArrayItem(LAST_NAMES);\n\nexport const randomFullName = () =>\n randomArrayItem(WESTERN_FIRST_NAMES) +\n \" \" +\n randomArrayItem(WESTERN_LAST_NAMES);\n","import { array } from \"../helpers/array\";\nimport { randomInt } from \"./randomInt\";\n\n/**\n * Generates a random numeric code that can be used for verification codes, etc.\n * Does not start with 0.\n * @param length The length of the code to generate.\n * @returns A random numeric code.\n * @example\n * randomNumericCode(); => \"123456\"\n * @example\n * randomNumericCode({ length: 4 }); => \"1234\"\n */\nexport const randomNumericCode = ({ length = 6 }: { length?: number } = {}) => {\n if (length < 1)\n throw new Error(\"randomNumericCode: Length must be greater than 0.\");\n\n return array(length, (_, index) =>\n randomInt({ min: !index ? 1 : 0, max: 9 })\n ).join(\"\");\n};\n","import { array } from \"../helpers\";\nimport { PlainObject } from \"../types\";\nimport { randomArray } from \"./randomArray\";\nimport { randomArrayItem } from \"./randomArrayItem\";\nimport { randomInt } from \"./randomInt\";\nimport { randomValue } from \"./randomValue\";\nimport { randomNoun } from \"./randomWord\";\n\nexport const randomObject = ({\n maxDepth = 5,\n circular = false,\n}: {\n maxDepth?: number;\n circular?: boolean;\n} = {}) => {\n const getRandomObject = (depth: number = 0): PlainObject => {\n if (depth >= maxDepth) return {};\n\n const keys = array(randomInt({ min: 1, max: 5 }), randomNoun);\n return keys.reduce((partial, key) => {\n const valueOrObject = randomArrayItem([\"value\", \"object\", \"array\"]);\n\n if (valueOrObject === \"object\") {\n const object = getRandomObject(depth + 1);\n partial[key] = object;\n if (\n circular &&\n randomArrayItem([true, false], { weights: [0.2, 0.8] })\n ) {\n object.circular = object;\n }\n } else if (valueOrObject === \"array\") {\n const array = randomArray();\n partial[key] = array;\n } else {\n const value = randomValue();\n partial[key] = value;\n }\n return partial;\n }, {} as PlainObject);\n };\n\n const object = getRandomObject();\n\n return object;\n};\n","import { SPECIAL_CHARACTERS } from \"../constants/unicode\";\nimport { randomArrayItem } from \"./randomArrayItem\";\nimport { randomInt } from \"./randomInt\";\nimport { randomString } from \"./randomString\";\n\nexport const randomPassword = ({\n minChars = 9,\n maxChars = 32,\n}: { minChars?: number; maxChars?: number } = {}) =>\n randomString({ length: 1 }).toUpperCase() + // Upper case\n randomString({ length: randomInt({ min: minChars, max: maxChars }) - 3 }) + // At least 9 chars\n randomArrayItem(SPECIAL_CHARACTERS) + // Special character\n randomInt({ min: 1, max: 9 }); // Number\n","import { array } from \"../helpers\";\nimport { randomWord } from \"./randomWord\";\n\nexport const randomPath = ({\n depth = 3,\n}: {\n depth?: number;\n} = {}) => {\n return array(depth, randomWord).join(\"/\");\n};\n","export const PHONE_NUMBER_SAMPLES = [\n \"+44 20 7123 4567\", // (United Kingdom)\n \"+33 1 45 67 89 10\", // (France)\n \"+81 3 1234 5678\", //(Japan)\n \"+61 2 9876 5432\", //(Australia)\n \"+49 30 9876 5432\", //(Germany)\n];\n","import { PHONE_NUMBER_SAMPLES } from \"../constants/phoneNumbers\";\nimport { randomArrayItem } from \"./randomArrayItem\";\n\nexport const randomPhoneNumber = () => {\n return randomArrayItem(PHONE_NUMBER_SAMPLES);\n};\n","import { incrementalId } from \"../helpers\";\n\n/**\n * This is a light-weight version of the `generateUuid` function\n * To be used only for test purposed and NOT for production\n * Leave 0s, so it gets immediately recognized as a fake uuid\n *\n * /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i\n */\nexport const randomUUID = () => {\n const id = incrementalId().toString().padStart(15, \"0\");\n const digit12 = id.substring(0, 12);\n const digit3 = id.substring(12, 15);\n return `00000000-0000-1000-8${digit3}-${digit12}`;\n};\n","import { PlainObject } from \"../types\";\n\nexport const formatTrpcInputQueryString = (input: PlainObject) => {\n return new URLSearchParams({\n input: JSON.stringify(input),\n });\n};\n"]}