安全研究
CVE-2025-27415 Nuxt.js Cache Poisoning 拒绝服务:路由正则的换行符绕过
Thinking
2025-03-15
3 分钟阅读
研究档案
#漏洞分析#代码审计#Web安全
Nuxt.js 的 Nitro 路由正则把换行符 \n 当作合法字符——攻击者在 URL 中塞入大量换行符 + 空白,绕过路由正则的 key 提取,让 Nitro 把空 key 写入缓存;重复请求后缓存无限增长,耗尽服务器内存实现拒绝服务。
Unlock to view this content.
ad8d9422966c73fee42096dad808c6448a272095349f41facc28f3d18d1ee66a0726fb5aaffd9271b6702e0ae53f6961031443030e63d37842b7356b4a67d1f44b648f709f84d99b1640e6f7a87a3d44129b61502fc0c5c728a88c67798e6cfb7bcb30fe880464fad1a2cf9635735fbd6e964b402ea4ed27e494f7c87c72f1c586b333a47062292625ea7240d146fb061f3975a6253d117e97272d7df5aa897fb9fe2c09034f658aae2645a68076992d7d9de07ae63e2fac88f85e475412988dfbc9227687c88e2b6d0cc05eab1af2bd120a3ddf30411b7ad410a5b9e27fe0929ec7457e7d8b3bed8cc9d47ae49fb9a031be3781a01ee010f7fa113dc539cb5d42db5be3d1b18d878b76035e7b6481200590c2db89a98ef8090d9f6313af8c533b6b6bc249f7f525fa4bd782fbeec69d479e95a7e352b1bf80b54cbd99136517c7bf195961d0f514f66fe2ec7bee7a8595453b21e74a1549159bc93b41e557a43b189528717068bb51bcff72b1eff29e98302f34a0a3c68a7a8c101f45c2679583a553a9ae65d75b49ff1e8ede5d27d1444d25f04fd506abf8b1727da67283b33e0472c4b25c04ae1663cd799d62f93be40b26cbd328f665d66b427d462a157a1f7873420fceafafd6061070fea52a050081302ca787c33519d37db904440ab9145d75c46fdffb48252bd12acb4d8eddcc210e60529bb464f086b51d288adc13fb6879039997f065704ec4a891dd535142b081ce80c2a20b08a4129aefbf1c35122b7235b7dbabbe539c7eab1f76cacf4b1bc63763c6407d36d1b30b50f2ddf86b500842e5808486c4d8e54dcf72db0a6405d543a5a12a2924acb5c6b3b4da4f6d6bc16f5b9a83aa229813cba41f864ec63e00b91c62fce0ace4404e2e83d64d0b34ed1fba7484f3069fdc4b9c54be4cc8d7f95695676663ace6a7ef2aaeb2b2614865e4344b8b571d39f71048425e858154f8662dabb2ec9998d9edc66e56699b4b1ba2bb5784bf13b1141f5c22fa4b05aa6db428e49bd2bce847ef577216cb1b62d9e6efc57e9cf6dbe0d176221f9d804b95d13da9a6d870f90c1405989cb7abdd00b1c181c5c6655f42eb536fb3bc11479ba7c4ecdb4248e1e9c1739dc9c2c96b72146df006233d6934dd6495dfb389b342bc26be51736afa974ca47c3ac1d0cbdc5385a5e9e969b632533fe7664514d9009d1b6c517dd952492477a4c450baaef285d906cde0a08ee21118fd95b6984d63420adb762c95c019892e1398ac0115638724536a938260dfb42eba97f41ee2962b99eff081cbfc648bca5b09313913f2b8d3ae231642c0aee41cd4c68a19004f7489996ca968cc708fdba7f42387ed7637168423135281f95319bd9dd65e7b2ff5d235342a71a6f716cd8b6fbe4f5d32250ed95cc6b61c2b93a680c9414993aa5328797955ae8d8a726a98f69510304b5da4db194234583e7a27710c0b55795f9363e8196abf6bb291a650ab57bf4712931068dc0c94b6ceb6eb0e4433c4fcb71494dd39401a8f261471e950c6202d2058032e32d8e11252da31ba4b3a300c05da7820ced6ee1ec17991951d947895145b7018a0475778c9b90068148be2dfbc35733ef23f2cf663bb7eea558b4da7817e8af2fea24968ddcd341dd92c0427520b3d29cf498c9620d01f4913a6aa353fcdd1cde69daf5c02da42520acaea787e98ce68046ae375f827e0a808128cf977a3e1e40ffaf13cb4473598d6237589632859275da415ace857df37c8f30d04a5ff7a64f962c7321f6b46b50f2d9a30000d733fc2cb3ba0b3d064437a34809a3fd55556c08739e8bda22c6a55ba395529c5483fd952778851fd3411c4749004b1c7421141df3f6722b5ea99e05b98b62c644ec762bdf37c0962ef28fecd80f2550eea491cecf43312df01fc649ec442f05ebb1da57542409b8e417f507d012e36ad2a39ab48e66cc875c2a66e1175a1de89b41c27406f3fe316446da2d86c87f14749f8d6efb7a4dedf92cec51393dbf0221ee3ba751422e19bc126b57c1a4849e548d72a3aba48baed2f9b674a5743c1b4df5ea0754a0a587d5373c7a0112563f3412a0c7d2cf8f5a9502562306b8ad870918748f7385ccd9699c16b9d485a20a00447f0e1177494b93401bb2392809a1b1c59cbe918aa4234e68a550a71b53ac1ecf211c9f9ac04cb0bdb16e089ee0197a34f7857369b96f4373c5b72060125435bfe57f21ecea5cdba044946d3812c8c60644ab2fb83bc6c88ccc894d0b720115cb2bac1a69da7a9ab0919e2cb83c6135e30ac7ffcf195d80cf8a53829baa14ddae2f3d81eaba3c0bd53670e29eccbb450cbff1e76c8b5f188cac613f3d6a746ec2a976373cf5ac117218abf45da3576a081bdd3ad51e3b596a79302f8eb33dba8f77e98b5ce9b4950d7926434def6245a1331162147c2219f6b51517556b10da50b3d3667cc23c292fb00a5a07d56c1bf8ff5bd558444f19e4e2faaad770d6d56c5a3cf13ce46b3c233083b6b7f25c6fe3c63f4e92aafa03d807d6d58745dbc57e6f772a30c953cf2b6e323ee3892f12e5a7e6200c8d733428fe7be2c8bdbe75225b4e384e127092eb70ca7d291d31df8acb103dd7ac3dda1f1240936bf904e47deece710330e6a59b91249af877098db9a2e9471e432405ddb32b09d7b270290cac267ea0e16783c669d70a0376649842c4a0543f5548b776408ef81ae8536e58bde3cc6daeabd3f715e418f342ad5680a25454a122228dcc264db45e61ee1745b0dc955dc04c49889e73c9d5f0a0bb71f0ec0f50c06e9601fe8a1b61a3f5b04b1c3c42f9343befb0c9ac1dfdd086ef8c3e996fd1777e88b196dfa520d9487767387c24659b9f63397a002377f6510149b48cbbac3be8c823b5bc81b877a8234ae8732de1127eb78500c086bd9c92912e057a7d80ff48de51688fb785193dc47a1f12b2d667897180a8782516c851f9270f226cf98c79cdb62cec44737995770cbb16e487bdb0b4053b53f63eac1f69b5ec39f29d630e52e0de3afe7232150633b55ef5297716a4d8e7b2ce80738543aa5ad75631491150ee661a9878a3bb8936fb830f9df18c26e33d96b0aea5bfb392a24df043c3c2ba561c6302f64813217f727ee3b2f919052adaa501aa12c250e92c6af05d6bb1183c00a3cf314659a116cb3a4e962201081fde61c8a1a75a582215cc2e7b4f48b9973620953f7d5c0ad4bab962efe7dd64a9cee59196076dff12f46e005d8a3a2bc200c4c4b085383bfd504fa985b9cc5618224a30ab104a0967df3b482c63f20261948e0497b1fdfe0c3002ec9d82fc47189cdd55b9f62802112caf52751d2cf9e6e73991d9f707f0ad12e417b7431e5d19a372285cfa2395f8002b25f27a2f8065dd95551e190ae8b3852d8d643292c3c03cfb6cc1d7989b82f51c81066160a81c4caac16247d14a25e785f8515799dbff323449eda73d85ce42d58615dac76ff2e1362ce7d53a4e24eae98a6a76e88d630280adf48b90ea0252e73abd3308ac4d1762af80ec7c1cd02eedb87fb049e036eaffb2f01ea1f566a136ecdcaac8fa832063b374566beeb1b5eff804e68640d4b5f435790fb83fe9e8828080fdbcdec348f15766cc0549597f82a9dc7eecce00c0d3c6510d16afc6c4803ca0e28f446f34c426a61ba810a02489a9075ce7e483b0ee82af7dd2d9e439b3a36932ea530defb1c20742bc9e4ca20b72f1c54e4689b444201bcd1da914adfb80a1299484bd90af44cfe87d7e25e37829ee644147c0ddc94db815c543ccc6c194266704ea52f9a3a2921f6f274915268d1165c012e09c17a1a952576aeb32424142f014f7e6e11c3b5b979ee752eac122718b12aeca47a553b1a8b8260d493f997030abb9c31c8a9caf79d3cec7bf257072d4ac5ab263ba5609fdfbdff7281a790b1b0737eabb794ef96dd79e965cd1e5612f0c09d7a4e004523e53677337c14ed2edb5b035bad6620f9e43bae2c891ba0f132cb35f8593b65023254e6e6ac6b3ac959633445d69f5331e98571ef46220caf45a96435600debf50ded05cbb10880da3bd3f9f3344903ee4256e453e8fcef73dc3a0b4c6e1e6688e969c5880506a8be409614def1605576cee00f099684a30cdad0a017ced0ba9ffd529f89f9d2049dd4c8d20fbb4b5dc9cf768f758c166276817c90faeef30040f1c5ec576b79d47b5b0058094b4f9ba4a5292e53970c8c194a1e47c21788cba21e7bec1545bd4a3c2ae6946283d1de44f8ac42122bcd519397c05f02d90aaab6545b41da00c6528e4614ac9cc4b853400b1baa82ed396e4ab9fc0389e252ed9ed865d6705c065ffb899bf0a998744c52ca445802ddec1487eae81d8bfcd90fcc6718fee784ecd4bb98bc8419a2aba1b019fa68eb895fb280667c4551f59e6250382fc92c07947bade13bc61dc388ab29395a854c9547a8eb3ed27f32dc032f9e7aa1a2a0eba1a18a93b3816f73169a161e7a18296792050561afade4875c0d2bc893b64e3ef8a3f92683875ba4c80745dd14d6ea67aec0d6efafd5d96342cc81c8b909a59b1a2d586fec20e9ca94c09dd95d07a0e530b53ac95a01729f40ac0e98fcd8a51e5eede783737ef4f09cf54d443d2e7886340a76182309ccf93a14f04b915e228ca0a45c8390a27185534d4838554a79e79c01afb379ae615b007d389af8c8c4d25ebdfc18cb68f0da76873ab72ab1adb195f66babde88bcaf8ae9e340a18bf0dba776b5283c8cb1932445404c933bcb076911e0f3242b75718ee2f34075ab642a2e2b156523c17baa226d3e821ba3818e5fc3c516626073929bd9f9289e8c30ac607741b0ff5a014a60fef8959769518428868f5be1a3d58e163c66f49ba479aafd15222031dc66471b6de61e09840644ed420d0e1be31f3c1873b33a9cb7d51ee9b422ac59aa7d3223dd13224101ceebdba4a9c25bde9c164103e1b7eea49ecd3b2560bb8b048e924fa923da267d821f3daa195e9c41cecd3bb67e062a370c3d61792eb4b9d5a58208b4f013554c6a293597f5cbe2580cc65fe6c9846a6ffa4a01b54eb008aedde1b33778561978b5c82eb0515b833daaae1e4d2254e8b122617eb17318cadf95dce3f532480668808094d3fffdcb6a5348c2f6b70f189743c6cb4e6f06d78efefefd284dc35fc2e6a306be2f9c3c4d2b8a6dc80f95fe0cdb6f497485f0412b86845eb4470a86893eec4c1fd684f938e54675518f7095de9114db896c569fbcb755815a907e67f9a1202f5d73975f923d204a61c3f8636ccce3adff1953c35dd5e55ec446ae8730ab44e4b3105a488eaefa7f36befe16ff2ea6f1d7bdc44806cb2cdd5269efae5fe1467417c02cbfb12e7e30c7d7422b6d96808aa9e4a3a7777e420faa9cdad377e43d75e4e5278d8de1a1175c32f95d278e3c3597ee3950b870313d9392593d9dc39876daaab8e6ab9af092670f980f34219f3c7a02786af18106a06f12da2183b530c87d853cf9996af65d9877b381bc8eeae23539263f5df6ab302a8e196e2c5d6137412531357eba1475b861cebd7672cff7f8e78758927c0b846bf288f4c7f996a8ae4a7937eae17a539dc0d502141458cf63eef8b27246e2cf3b97444c5b3de8721412f2a97336eee2e26f25db6f4dcacd6c5eb1cc8956678cc1aa736e06f2a1a8d988bc644a6e12faf901786fb69e1a859ac04dd95b25572bfc3d165eb277ae98850e5c3476e1369db22aa1995440d883743ff08954965f53215a461e33fd13e3a42289ee24e5441f4a953443d50ad1fb45e4c9acc199f73d96b8111d382986a68b7323a0ef4fe23fd6cc0d2cb24e22439745e26b26baa2d444e8fcbf0211a6bea73cd7d57970e0c4927cc80f5b90ca89c46007d439448d5d138f21fabc949c0704bc8517476ce3ee794b7ac1dfbbfd645ee56ea97c9531b348f3275fcec398e8eaefcf982afc3c855b7ad4e2473a776e04f51cd43ce6dca7b7c40c19ed7cb436b5ef3ece89ac2b2f04f426bfdc6276116f2e07b37b20e7988c53e9847f90defed842e22d315652040c6d2113d8940e66259fe8e997eb15b472e72d0fa81bc86e24e770e5802f3492382de1c38b8d71ef055efbb5dfffb1c18c2d7504ed222473b803f4249c4b2e339945bcc9a068562f3ccfb2516c03d9b89d90afc5585faa2264a147412f5ee62e32ac6b95da760bc5a40e565115e35ad4d1f40c7236e650c57d83965246384d97ff77704f509c95f5b197360be234432ffbfa26e63c370fcd07d33d2f3017da99131b787463c3b00fd25d55ed7fc1b2708fa673cf183f504e716ddd68ab58d7bf2d3f38cd5ccc92ebcb785f6387828607823aa00a35c7e1bb656b4ea8f0e0627dd863bc536e040b0513c15133800693953f10c4b1c9f3de39841b7df87e98089b8cbb1d37f589b34d753a8c4f66211dd7696012e5ff1394480eb84c7291d9facc1e15b957230ef72f5cd9dbb4252f73170088c2fd4af0e081dd5c8dc0d39b0bc228111f668ce2bd0b74250d58e460844952a68710303b8fca989c9440bdb72281e0402ce96043f8ef941142a7f8d7154bfefd8c943688108ba639840b829f7880d7f65f87148c5481c5583ff4598b7afc49bba4fcf9f463315740899afacf611b4add1190274068f7f6b7bd42c67bac6823a216503167d84367e314ca53a66a1b99f22e85d559e12714aeea5469f0542dd8b6294d21507b69f9540aec9353a596d1df657c2c141eb3064fa8bebb61e68b203d75fd5f04c965f5f8743b1a454d7f9cd9e83b4f5f5ee5a4af2e00753914022586eff40dc411394006fc17e7dae5638b7d79bd8fbb8b1b35963fe96e99626d75cbd4e78df522fdda02a499e3ac4669c06603c484319f722b21df4e58b9adc647d9bfc8f717304611eeb15813c021c2acb506e4deb0b5709de07b5057cb2cfa221ae16747ea9268885d81920900fa0226cda16c174ab18482dccdfb386dcf4c6269dc10c4ef4bd0ce6cbcf26c92606729c57c1917d6043a03e3076388aa404c4c3cae3ac56cde23ff574f19ca252883fa0e8d23c46e6e6299736cb1b486fb7eccf20a377b6cd90d35bf101efe83df2e9ac0519b637a3b901939af95b9f3c26c29467b0ea4ebdaceda97274fec076ec8bdde19554763cb7aba3e4779cde2cf09f7d89a2c089a211a8508e928474493ac5da7e894ebd976640c6ab5b5b6723721f532eb2ad21e3757805d3205176b46d2b9c72321177378ee3a90228d65b836211955edc9d570cf87b2849a605a09287728722fffc6962c1dd596660dd7010fbf5e0a86c3a62482a4fbec4f5c71c46046c87f008fa9ebf4de73804ebd85d551a57fb4b41603810c1097a53558911fa60807845e0f5a5c2ee5941ff79bd787d915608318ccaf58b8b3b6f943493cbecb2703740a461b67822d71476d395b8607e6f2288a17dca2dc4f2ba0c81f847acbba5cda445cfb254307c15f7f71e6615ec491b2649638c7facf49e22753e4227fa3b2862b324bbd25ff491f0c738efc0ece4ef4414c966db2c3070b8be26f6d99d899f4392c5f169352f99038943ea0f10d58e843e04f5f941a48f08dbf8bd377f78ad61c3043acd4c34b51abc404ce0c24e65c66cc517b9629b23c5a6128d99a46e2e73c015762915f44d1ae4a682bff69fd1818433e099bf799721a699f825c56d91267522c1a2be64c8a65fdddd2b33a1e000481ffc052485c0a8e8719c56265834e43a4374267fd12098cf80295644dcb09fb3be5456b01a0436601f0806e05ee24593d7a420c017758461e743437cf2433760da853bfc7d63a79638ae0cedbd02eaa909feb85997adfdffd5bf918f003f3986aaa3b494609537f0dd68a47d09c89892bc4bb1e7af3f85a36f7cac6b6c22720d798bf1ae0a1340503fe7bc86e91cf3badb19dae8d414bd5b093f5e8d55d984f829fe5dd8b2774983f14b948d1668d2a0db27b1e7e44759daee37fd8a70fc720145a48dde704f7edb40cf8d191a56664565e9e492ca1971ce599ffabe476a6f0587c18b2b9c4acbdf625bbe4286ebe19427aab65a39a169b034e4f6566bd78b19adf2e22064a5c76e17df65270a2c50439537aeb0038c6b60d3968867955c154367615def6d551b49b411decb8c6afb8d77f68f6914d28eb3b7b8c06721ec6404aeb3d29bb1da325cf67d6203cdbf1a26bd052510e16d765aae7606551a3a5f3476a06c900f38a79de22a87c4dc796c8b420a624b8548c5b9932530a11662c1fa3f20bbd929f589c84661983cbd6fa3b6c0765c43ddeb876d69e09434a0e3814bb1bc8207979bad68eae85bbb78371897d6e4d795b5cae45baf4d63ed7bb529c3345eeb22999875e254eb5991295fbcdc850c21528760738e556e9ff01d33363bfbaaa489e44b1f5658070c0ef20bff8a09584f3eccd380d4e85d0d2ff8415aa6837d0243d99f59bbddf7de8649e36a8889df506bc7098d0ffef79a5edd53deafa4efcc725547f7603809dd5351807c16324dbd17545b037af36a0e8799e31561a7827114bb4108dc3cbe78420e00f45e88d3f9472144432b62accb2dba08c1786090ad52c9d0e26880d79d46007a190701f65de03eb4abd5d571bd2a3249644137a00c830c784ef115882f72327c93d66e7e8b58897de00768f2eb04ba7343fe615a1b699cd34b4f36bb3e6064bad3f3570811a3acc5c04556fb6da712056190ade66cc55b67d1e2996d9ea9f214e2ade90fc42a3fa2a6c0dfd2d5732db730257eb6467723de4dde1ce59870029834b67f1f652fa9ba28c59c20e4ef90baeaac4cf8ca5e66c131b43e80826f983151859fbaf0c3ad62efb68384acb87c535af61a90232ea809753d267ea221ee6c6a684774940adedbd3c0ba0d4b3e51f33143748a1060ab122530c6c99e1633a532af5eefb21ae7e4a5f1241a387e75e4c2db62f36f948278315b9bf3cc8831b66dd52dbde997978e02fd1bed0b390fd7da2e0a60475b3643911e5122a2be69e2f7d38cca0ca46e8e580baa73a588050147d683e1f88339c1ed9e5a8b859755462a59e0ae77b1007b86fc1b8f258208d8be670abe3d13a78b2e0df830bc82d474e4e7dfbda87577e3f846ecbe0371b2da8addc5e0bef8c2811ca34bd0e7abcf5fd878b310c3469a8f42d44ee25be06a694d69543fc787446f31795769345fae791379a47189116083b0895ea0f99a3425d2e05f811a0a970af69652c3ed9374b5d3962484e8d8c543640205349278fb16275498be3587eb0d375348ac3ee88051ea7bea9a6ada1de45004b0508fbf8a65fd5f3110de559d8d70d4d497319565084973d0d20ae4feeb2491b3c7162f2c28d04bba14df65ab204ece1591a2c46aa3ee6ba4b1a8454b387e2ea7b10b8bbdf8b26a960c7e306d4869440b6b13e739c3bc0f64021e1ea7b967252e3020cff9874c5f411e8ceb6d2cf23b2377c57b4904ddd718f90d878e334d83a7921985fcc58c0db2264ec8d65a84e1305d5fb2cc47bfa1a050581ad8e44843af3744904bd8b0f1ba93a580bb8c57bb9d418b8f052e75363ee98f558d523ae3ac71e5a4110e79f9091fcc4be358f6b1edbab736a62c5808e0804a9d91d87305b59f791c83f6388499f6ccb254ea78ae1ccf0f411cc242d05a58c8d492efc722addddd878af39ea81ec780244e650a15bbf312c0a9d534e35ffe229cea3895017cb63e1b084a7295c002b7d7d04770d841cb192f04c0c4cf7acbb11a071d86b5ccc8af459b3257a84fab97a48a6582435638bfffc149b59249c2d0c990905360b61bef31a0d5bb38b3b1e06fc0f8676b651e795b89e80641906f574f80d126a56e294dd919ab8e18a2b96e2522f4141ca4fa1e95602dcc498dfb0ebd2d8d7f178caabf86a3baccae5499833b20a1696e7b631dab765345d8baf7b7e52255ae71a7a5d9954070e0858e62f87c6d013dc3e1ebf3a222e6b5297875c5a265f41cc17905b49dcba0cd45ca1e6b371ccdef92e81eb1e16bb513d56d1254531bc88140f6cbdb8973f1e2d6ef9a13c2e728d2854b0bf7f809cd1d4107bd926b809fa97fcee7b862c383ed16b0a36140da5b3c01b0d99429f0f41ce56baea01790e04ba78e619ddda359b314097c7b37a55521510a31225529606231800c8a2bfbb5ca5c86d5d04a5e198ce98dba3e40db50d08b48147b8bd7aef0c64d7ea0f733f415d6a508e78db0a808fba72b57c18c2edda67ecce3843152c23aff89104298dc0f0b36d0e69b86130936316d80028c05ef4e5c2823fd5cc1679e08c39ca88caee029c8c89cf4baaf1d78cd21abd2721599b7cd164dfa54dab8002bb9ed03fd8e4f8198f24e10c7a1f9bc3042fbe7dde5de1883d11dc6b969a9800b9ccaa36cebec1d99ca3aebc364f501f3ecb3d1fece1b04ab1a17e360d9a0c72af911d654f3a18ce65e9b0d1ce414d853366a804ee449aa4ab064789be2c4ea0a00d92b9fc1714e8f5fd40428934b0f71a802f771738fc7700856f39bc9f1553d989cea9bb10e3a4185690420526eb184d1020cd6ccfa3ce57923c51be3b45ad296166e24c6922644057b0919936944ba6eb3c6d152f942c526a9b7dc8b4e5bd57934d8095329c1310c5b513a092082eaf564c335313665379a0dd7a430b3835b00f5cee6dcbacdf29efeb9013fb99d15a92ec777f1610ae920bbd14a5e27c721c6652ec332f1e884d9855b7c1c42dee61ef1890c1ef1ecd3cd718017061bce0d6c855d536efcce9d0ae47ebe237e7a28e8feee44dbd34a7c8956b1281f26359239e220aa6f3f6ab5d9cd776fba6a2996253c38cfd336231b4a6aedf953819d4665c6d5bb86c79a865db00f2f4cd21929671f201ce1301210475ac847fd3cda571c7a5cdf50f627ce6f553e15268fbedcab21a74e463561bc27d66bf4494e81899131fddd9837dc1897d7b8f50ed5ea985f6cb6268c4c6ce89b2d7b298e344a27bbc4dd49cbaca0e9955e0788d446392b3754b3a40178575019ee3ae0c2ff835d68e7a30cd26aecb213b983c66a56e98d87d040c96ca3d52a6d31056f6e41b48c7e7901efcac8fa1e9c1d2eead3376f62879152fb0762c9a5d02e29ff90eafaa0522898afda705b59929864e79709720c8ea508eff7350486db5801d91193fc07b805136ca8e72bf54895edb1e213b63857056dda55a2aacd7f2e06f6ee85c9085d9527dff93f310776adee9dd9dcf8a0b90c9a61f1906ab116836f6469deb2623d13b252a046e532463ebb3ecaf0d0ac76303e145fca4bd014f1445f248d19daddf0b95416731d1b8741460861c4287758f9fdf04927b295199d6b197a55d64423774abc8ebdd6d4f58fcba84b63be740efaebf71988277bb16ff94f02be2fe79543b6c35e0ef3f1a0134c0bef78a6a91318817bde7e57468b6656715c71ad179fd72aac578c95d03652f8cdea12aa586970d074739f6dfe54cfb4baf38d5d6214593282ce735807ba237b4da51809624d8c0277823824fc8e8151e5a4456f95471945269e99031ee3d86e72f05e02919741205614168adbff52254871f7e901739e78c7300c95b429a397979226776881eef6f8bb649a511e78bee83605d97fd1186f2c0d146d0fe40ba76c897b9d3ed4732c61952bab65689ca3023bd1a7a7ceb1f2211f318b835bf96f3339d287e221fb4b438024397be67d17753e3582a4f62984487e27455931d4c23dba930aa70f383f0e07fe6865764159e01175d24f32b7cc46253d10a991148b5ba3ad4ac739e76a93e79d10b0972909c0d88413e54d393544c4991d6bac15f1a9ea1a2565e3cded66caee190f690b85b721ac20883f01926f82785256380ffb6997c7af780adf16070a2f6adc112caa4d00e8db1166eebda6da3bcd393c8350ef7e3e0aca3c0b6489496dbc868a1bd99eaf4aad776e398e9d4f83a411d5e8b55b5d23aa7bd3c31f34adf39e696a59d738ba357586b554a37d193d120858e153c9a9246123698cc0b2720d42ff9deef9d1d6a1e9e8b5fff77e34b20c5dedcdc888f9f4939cc4d371e8b86219664cdc214ea5f03b117068c32699695fe79375999ba049cf19d0e2805b29d77b2d16a1777a26f8bb88c9b031a24a062b1daf56ee6f02297c81e77ce66650581fa9f347e93f4fca1228ce97b7a34a2a05df2d64c20986156c1fc00e658b551b08760f854f3b3aaf75b2ae4b8d97a103269249fc499fffae5b89a3d1bfac9f2f2efb0a186347fb366868137d4d441f3cff5fb22d2a50cda264225978abf232678d03a8331eceefec8db03bf2a925714a129fe06b7