python311-tornado6-6.3.2-150400.9.6.1<>,D0gH"p9|εIAaW[: "Ai8Ő2ˈ&NΓ5!2٥'ƑxN%y7|thޚs:U_g|pm isP[|B0QLivM H3řCO{rIƼ ga)Cm %UA.yɵx/(t7o&u$X(CW |i~2Ј~=Qu B:3ˆ;{Uko9zeaPe=G5F^>I1?1d ( w1R] s\    0  4 58< ??BC C0 D3 DdDhD(D8D?9E?:JW?= BF"G8H I X Y Z [ \ ]^4b$c$d%Je%Of%Rl%Tu%hv(< w)x,|y/Poz1 11 1p1t111Cpython311-tornado66.3.2150400.9.6.1Open source version of scalable, non-blocking web server that power FriendFeedTornado is an open source version of the scalable, non-blocking web server and tools that power FriendFeed. The FriendFeed application is written using a web framework that looks a bit like web.py or Google's webapp, but with additional tools and optimizations to take advantage of the underlying non-blocking infrastructure. The framework is distinct from most mainstream web server frameworks (and certainly most Python frameworks) because it is non-blocking and reasonably fast. Because it is non-blocking and uses epoll, it can handle thousands of simultaneous standing connections, which means it is ideal for real-time web services. We built the web server specifically to handle FriendFeed's real-time features — every active user of FriendFeed maintains an open connection to the FriendFeed servers. (For more information on scaling servers to support thousands of clients, see The C10K problem.)gH"h01-ch3d/OSUSE Linux Enterprise 15SUSE LLC Apache-2.0https://www.suse.com/Unspecifiedhttps://www.tornadoweb.orglinuxx86_64# remove egg-info _file_, being replaced by an egg-info directory if [ -f /usr/lib64/python3.11/site-packages/tornado-6.3.2-py3.11.egg-info ]; then rm /usr/lib64/python3.11/site-packages/tornado-6.3.2-py3.11.egg-info fi,^ g__!12++phq5CC)LLxdeHcc3I3muoN=>ZKM ~<<>,>%PwPwa3&7345`T3z_|>"QC1bfv8vzb 10al/x:=?./*A:(JR 3RAVug[/s c'\ L[ ,^AA큤A큤A큤A큤큤AAA큤A큤A큤A큤A큤A큤A큤A큤A큤AA큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤gH"gH"~gH"~gH"~gH"~gH"~gH"~gH"~gH"~gH"~gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"~gH"~gH"~gH"~gH"~gH"~gH"~gH"~gH"~gH"~gH"~gH"~gH"~gH"~gH"~gH"~gH"~gH"~gH"gH"~gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"~gH"~gH"~gH"~gH"~gH"~gH"~gH"~gH"gH"~gH"~gH"~gH"~gH"~gH"~gH"~gH"~gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"gH"d`Mceebae7b8927a3227e5303cf5e0f1f7b34bb542ad7250ac03fbcde36ec2f1508cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d306f3f2dbf79d0af1859c9ed0b354cbc08cbb138685d2cbb5dce3cceccc545e4ea5b2f67cb9af55307531a39694c9ff107fc8ad4a8bddabaf4b20db62dc2e0e78de3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b8556ac0fdab670d0ddeeadcd160bcb8ba82276df69a74b51b7c756ad7353365ebe7e5000ad4c78da5681876a5a853c898943b8607c8fa3433e0c7eb925074ded00edff4c8193578760ea37052641daa626af2bdbead4abd927b76af52510e65a9395dc88d1d5686d18d5aac7e489816049836e0cf9a5189bc1d1e7ddb82db0422e65dc88d1d5686d18d5aac7e489816049836e0cf9a5189bc1d1e7ddb82db0422e6d83cd0f6ccca920317f0c9e2e02198dac32fc7ba3b3319619be7bc632677576cd83cd0f6ccca920317f0c9e2e02198dac32fc7ba3b3319619be7bc632677576c9f9f5bc66722397a7826bde5b1066183c2f8dc14840d0fa8c24ef0914c360c0e7cc34d971dd7c66deb6cbff82c6683467a64b63e35d7ec865eee042d5349ce26df7bf652fc6874946e05507d502a4c8474e66bd727d36a81af1706032762d1132b4a51cd6ba532c609dc219389b5b57b55aedd0b0fd9dcb0aab0aee75e5a91343dc88f4d54b5c781f73b661496443abd0af1354efab88b87820b8f9f49ecc6db0bd4c92fc8b178a6499d076a166d293f65015ba395f6f966f24c5b341e93064b812460d169205d5062143628c02cf6c08092849529f412352aa4fab613b03ba6eceeb21a5bf2613bffbfa7793b036e72c07fdc96e5b8ca82c71eaafde9acffe1fa8ced4f4700a8b2204fba0ca8c06d089c740cea5c6f000c70f22ef264f7c232fa8ced4f4700a8b2204fba0ca8c06d089c740cea5c6f000c70f22ef264f7c232f9390daadf033d653d339cbe81d74d466fba82b83fd62fa8d281d0748014943620891bb745336db401858a72f90a71c417e3116123fbc51667d7114a67c74cafe4e3e2fcbe979e1717bd8416279dee9a18b19f3fbd80abef7a08b5f844bed70f15e82622b733742b5e4e5540900aeec5201f2e41d0acd0dde48639de6af4f6afc1a24df743b637aadf5276362aef368762efe9dcfdeb5cfa97d6ed1a2941aeb64a25ce449ef28e9791d0106080819b675c9833f904b00dcfb3d8f9600c8fd303edba3141e934f9f6d755ed1fbbf3b2c969269bfdd4e19ec14eb79bb9de2aff5082b871b4949826758f102d223ac4880f16e41d9613e9bc82e4871e3444ef8a73dadfeeefd1a8cac802aa1deb555db8f7968f6dd567ec437f55e52fd4173f1540dadfeeefd1a8cac802aa1deb555db8f7968f6dd567ec437f55e52fd4173f1540e19061cabbf2468c5c26de8b3aa9909e505519266c91916689d67059206b4ec94880b0986ab04c9c0f9727f2c44f824529c2d788e77d3e9b8f95088a5cd7df67f9724322e9d14139c63b4d374633045082e2f701ce2070e6490f8d0aae386ff53f5893c4d105295454b02a0068bd3b5d40fe7737d7696339ff3f718243102b016c9c160333bce7c411d5385144073c43584737577ad4b636693bdc612aae80cbde4f468f30dc63066de8ba0b3cf86b68535a808a820c5ecafc5620cb8f64aaa7caa6735c4beb9928988cb9c458ebca131b6f7b8de0142492fdc420d9a8615c71caa6735c4beb9928988cb9c458ebca131b6f7b8de0142492fdc420d9a8615c7124a06014f2faa2b2dc6e2569197ba2ca734911ac2112590dbe3c3b7d702339ebcfad1befc64d91231802ee17b0ae76d03fa96f168ebb0481e634a8e8b58b18e3ee050ecd701d2acaeb4fd627898a02993a3c155476aff8049219ae0bde0902436c1bd79e1eec354d0a82bad56cc91c61f986c15ad3387138e1941ed8fed4ae08b52f334b2de685abd8cbaa9cbb3f3eb8903196b641a24246abdede13de907eef4a3edac03474503c5cc17e47cd31d036075a6a4fc4d43934ffc7229e99e2829e1c121e617377dba20192b6b63600031459df11d5295cb22796e4fa1ad5c32d79574fc1ee3b15506ef8d448c7b2f3fc0e36cf423da16367499db76e666ce32e9816b39e234146a4d1c34bdd15b5d8aad869b03fe2a10c6302e8d4718be722d35b9e6545ae346d6411b89e9ab6b77711a5800125b2a1d790cd60d2cfa1728a409cd3f3c8f5d1bb52a2ace2303a6b07385ef8e5eeb1d63e0605f1efb1c3884fbaed4d0d7c2aaedd10766c6396efe1b10166785885373c621242a5109a708ac038e53e276b9a9d773175826ea8d962aa357689d8560c316831e0af3532e8285a45f8d6ddf0b6ebbf0f943077b20a25aa88d9bbc312c5e9cbd805319b13cde49431f33ed98819ad9d7153e01ae48812da6999fed81cbb85a7932b09196385534428223ed98819ad9d7153e01ae48812da6999fed81cbb85a7932b09196385534428228c71c42bc98470b7b3dabc29972dde8bf78f102848c242a66480bdec6a423bf59bfbf2ae33a0645ff5021e7d627670d284efd9e07134906a55b1f948ae9c7a1045b6fe01eca2bcacad85fa021dfa8cb42d307958568f52d5314cf20179332df5a8bc5aa18b77feb40fe973e36a2ea52a99f170cb661c425652832ac0cd7fa1b487c5a9abd06cfa373426668c1f39cd6e87d574006ed02bf199b46a500bf715e6f2bed207d3336ebd60521e5e6eba81a4df0f0288a53c842b957335d0b29fbe05cb5a8f0d8d46276263303639cddc72df88b67ac7a73d6c8b1fed5dfddf08d35ccb5a8f0d8d46276263303639cddc72df88b67ac7a73d6c8b1fed5dfddf08d35cf9df29d06d993d1d3318ed51b399fb7ca386b8429da36fcd5b6a291155b833756cef6610edaf95630f975a3fa1845b257415da804a20a67b2f27d9bdfb2d9a1bd45b455feec1669c2a8f9ffa8e111397351717bceaad0a3c68adf604e811c0e142409d7752d5ae5cf73041f8195dc839b5af7ff1f9079af63ffc834bb8e8ef709b30e1dd60fd2ff8906cedd123090d89111b87aa9f53f64bcc5fca560a37bcbbd0392cbc6f90b8081846a534cce472cc5db1fc0d2421339417c06c81f42909ca00ef19b59ef955e66c891a62adb1fe14dbf3dce1434311907179aa4f6f6f696a1624bb43e1e48f90977098915a099a485194250ac485e5716f6c2943e49bafb6007365389688a8d5d9f1bd60d708b07a2eb0d18796c9a82fb8612ab5d00a2050552cea99d1e00519261455e0d11729c06a350034ca4e19880ef6beaa47c08a5bd196ad31569ea217f3780a815a4813e1dfd4fecbab2b0433411f025c07db8ccfa19c5f053687130d8b5825378ba3d5e2d8f08a3f4ea3e54c5c2225952ff4cd7a01a617f385b42de42ceac97686f8aae660d1c276d7dfa466d17c7357d18dea84e7464dbf5f7b8bfa4f800d8ee8dbb8da5a83031e02005efe4bfe4c0d4ac0328e7c328b33454b48ecf8c1ec813a11bcc3e58f7eeff28db4f99b0d10d18c51e51bb6ff0283ef09a48f9ae5ceefbe5ff91db4d4e82b3c1f441b529523e92f57899aca2ccabab7850f983847cfbad491b70e1c560d6945ada0c3767a8a137c5c68836ac14bfeb97ac4ae7e4c97a40bf538a33c1b573b91fcf8b5bd5188c72f7a97138249508df2afedd21472ec7bf01ab01a177653238cd5650fdb3d1abf28bbfd1afbe899f37b4038b48d1dd728e226f029036541ef4e167aa45faf79478dadb5e287717f3f71e90ea9795e168d4dd4abf3f6e25f4b3409e62a466dbb5352575c01ade852c7ea1bb95fb263fbdcdd7892894098484cbe538d3380ec4ca6b9481b87e55fbb89b628c06827cddec270de489517888a7e1d638f2ac4bf97e8fe43dfa1e649dec18fde66e943122b01539e57c9df5825d49f5f0be406728474c7033c45e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b8557efe188140b3d4018712ec049f7cc70eebddf474edb151398467af823ce7246b7efe188140b3d4018712ec049f7cc70eebddf474edb151398467af823ce7246b87661862e23cf106756405ca02287b4e2a2e77adf852815aace1f1cc7bdc05d669d7732fa8fa3b5561906d5edb0a1f2b3ae671b6fffe9a351a91c81d4101a0a4b6f2486f3d9ba5f2c22ba6d3d977984607282f92d9a8c0146589bef280141271b6f2486f3d9ba5f2c22ba6d3d977984607282f92d9a8c0146589bef280141271004d854a0284dc4e53f31f9610e8ee0e06be8588ca2ab467ed6b3d0b73538aeb004d854a0284dc4e53f31f9610e8ee0e06be8588ca2ab467ed6b3d0b73538aeb778e55aa31a6f648142df35158db20834a07b87a8caac22a47c6d7887c36e510682e60d6e92ee67fdb0d5d8770090422e32a7838c9a3dd17881c7558e5d347da58ebf984197a6f8bd4620bb028c8222c981c23ac06e659ba355ebae3d6a3da11c03d3d0cf11193cf918b682a94c7129a457978a465fdcf3eb7c30ba13b7a40ade3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855997788ffe32956989b693e3aa339991bd2fb08e32a7aa0e16cc674fc313557ef7c452904f1ca45de0f0a9e0b1f55ca1eca64a841b68e4204ffd86f26bdcc12201a68aa88feed576b11fb6d6b881ed64de8a721fe981ced6c982f78892c9641db00fe905fbfeac38cc184b406c2980076324a631c74e6ebd46c334c663f788251d6398d11fbbc4bf455dfc88a99392d0029280b81197e24408e8055cc9e826fcfcde81f93309ec40689588d9d3a2683b2290d7653a7746f11edcadc6db1fcffc5a3053624b9f167339cbf7ad2ed0787e531292cb8743c84373fb7de7826a5fe0624fca04a8626a95128ce3fc89ede5a057e361785d5bc3f834274591d2485708bb1d2a102b8f841ab75a93ab9982a81537c6afb7e2de6f67c39f8caac8b1fb75a56a6130e6920b022bdd5735083d2be7509db2b9b203262ee18fb621a06e5c927687cf4ab4a9efb60726422fcabec75d57e68af14e16491c126818cb3c4063a6793a5830ca3f6c26c8c4e341dbf4998d85e5269d15cb9323a80e9968d58326ee41b1093c3f0ee4201afdfebfe6014002f7130cfc725b7dcf558710a539c3bc33d50d1e754435be07d060fd00cae72726920e1dbbd439b1d4364c2f0707ba31525b435f6a0bfc675f58b8d5a6722178309fafa1bee1cdaff6ed443dc8dfe4613e4661ec6a22348ebf5a252fe156bfcbc29853808c2d2b886217db35b7f017e5d9d4e61e7f508e1781bf55c2fafaaff3a65f81332e17322da13c093edc7d94ef7a7fd25af98617b8fd363741a4dc01f61edf3ffbd1ce2be9e3f4cae49c9df3ce1bdbfaa3e7c4acd4cf504fc552c3f12e1c16683a7aad86ed3dbe61c8bf285616cb0de1eb541973a3102bf2b7cfdf0d74b261967e85c39345e5b23c1ec14ca7c5cf5914944c86b231b88f42c0a5ca674571377adab3261e1e82c1cb78f095ec3a1abcb079b29afce0523de15c4675545f5c13d975d0d685cb204f991775356cddf590234d541c04a5a97b36af321fb23a9b48330d80fbbf5bf6ba3a007ca88c8e109af6662d44605562e0c3ec70a25b883f5a08c09aba2e518da24f9d7d090a321256ea71ac91c0238fd05e290a14403c214512eb127f157771baeb0afc0aae66c9afb9d7475062a441a29e3f2b0597374685ac1c95ce1d8afdc9aaa2e27254a2e80caeb0e12734fa7e926dc6d3706459fcf2628fa280c4490801fe48e42215b99a0bec26c10d4c98c32e2cbdea0f24cfe9776a3243746b89df49b5ebf2f4eabae39e9b09c7445bcf93e9b7f213987150102cdda85fdcf8668edb9aad98dafbfa7730ee01a5765068f26aec16801be33cac1b9262f74074cea8b36c421b2f183f2c887252deb5ec246d7c2b0a68b469a59026d6c679d958c4d96e563f3cf142cc6e89d62f11388b4fd19012c37447ea62e785c08b0366b9b530d48d06cfe4e2bc9b0bd53edfa3d26b971b28302ba7581fb3b271dd8a894cf9543b0b576b07ed372b5e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b85547fed6106a31ebd36abd3b04374b68b4eec7a61dd649bc664296eb099df793c667a100c2357a9b1bce36ea70880f3ce92a4107b6a7231c53b504d4ba1d2926f91fffa2d49acdc46b8bc55cedce83fab936aba97dcc2944c629d117da10b050edc9e0d21990aa98ed73ae579e5439c8f0ef0830f62e6f30f45f90e2d35cb8a0d19a03600fb8402e938c2d0064d34f62dfe4554509485808e1909dfd24e585cd8934102e562e15e75767434f424d17fc8c01f06ac529666e39a5a362100792ac85d4759d5968f336abce6dec6fcf3ebe1e5fd0c732979ead9c8559fe8aea531d8bda38bb89afe94288abac3a670b436f1242225c1bfda043f7966db2399386f817fe83e1e6594814297295a8e37f2822bb5f3cf8f0296e8b69939e224d688d80cae0f9ab5496fd8b3ab81d7c782eb899522d800c49a5578f47317d9f275309b842d5b8ba7703d181691469c59955383eca9d9b07c81d7193d0251d577a9edcb2c9caeb0e12734fa7e926dc6d3706459fcf2628fa280c4490801fe48e42215b99a0adb30bfc11b0bba821faa84143ce43800afdc9b0a1f8da9d76508705cf5db0ee0db6b3c16cf0be9cbd5874f3cd249d1e3d8ccf24f040db9c707aa168a2d6bd230ee01a5765068f26aec16801be33cac1b9262f74074cea8b36c421b2f183f2c87b17acdbbf841ad93139c443fbe3988b9f88720b8e5e1e6a444a784ae0f3c50ccfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30rootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootpython-tornado6-6.3.2-150400.9.6.1.src.rpmpython311-tornadopython311-tornado-implpython311-tornado6python311-tornado6(x86-64)python311-toro@@@@@     /bin/shlibc.so.6()(64bit)libc.so.6(GLIBC_2.2.5)(64bit)libc.so.6(GLIBC_2.4)(64bit)libpthread.so.0()(64bit)python(abi)python311rpmlib(CompressedFileNames)rpmlib(FileDigests)rpmlib(PartialHardlinkSets)rpmlib(PayloadFilesHavePrefix)rpmlib(PayloadIsXz)3.113.0.4-14.6.0-14.0.4-14.0-15.2-1python311-tornado-impl4.14.3gG du@dBzb{@bjaa `!'`@`J@^U@^h]҇]X]c@]@]?]m]@]]]z3@]z3@]S]M`@]M`@]M`@]M`@]>]>\\Q\N\73\73Z4@Z3@ZZ@ZH@Z@ZN@Z'ZfYYY@YMY?Y.@X@X-X)@VzVhVf@V"8@V VV@UpU5@U7@steven.kowalik@suse.comdcermak@suse.comdmueller@suse.comdmueller@suse.comsteven.kowalik@suse.comcode@bnavigator.decode@bnavigator.decode@bnavigator.demcepl@suse.comcode@bnavigator.depmonrealgonzalez@suse.compgajdos@suse.comsteven.kowalik@suse.comschwab@suse.demcepl@suse.comdimstar@opensuse.orgtchvatal@suse.comtchvatal@suse.comtchvatal@suse.comtchvatal@suse.comtchvatal@suse.comtchvatal@suse.comtchvatal@suse.comtoddrme2178@gmail.comtoddrme2178@gmail.comtoddrme2178@gmail.comtoddrme2178@gmail.comtoddrme2178@gmail.comtoddrme2178@gmail.comtoddrme2178@gmail.comtchvatal@suse.comtchvatal@suse.comjbrownell@suse.comtchvatal@suse.comtchvatal@suse.comtoddrme2178@gmail.comtoddrme2178@gmail.comro@suse.deaplanas@suse.comaplanas@suse.comtoddrme2178@gmail.comjmatejek@suse.comtchvatal@suse.comarun@gmx.deopensuse_buildservice@ojkastl.deopensuse_buildservice@ojkastl.detoddrme2178@gmail.comjmatejek@suse.comjmatejek@suse.comdmueller@suse.comtoddrme2178@gmail.comjmatejek@suse.comdmueller@suse.comjmassaguerpla@suse.comtoddrme2178@gmail.comkkaempf@suse.commc@suse.comfcastelli@suse.comtoddrme2178@gmail.comtampakrap@opensuse.orgaboe76@gmail.comseife+obs@b1-systems.commcihar@suse.cz- Add patch CVE-2024-52804-avoid-quadratic-cookie-parsing.patch: * Avoid quadratic performance of cookie parsing. (CVE-2024-52804, bsc#1233668)- New upstream release 6.3.2 (bsc#1211741, CVE-2023-28370) - Security improvements - Fixed an open redirect vulnerability in StaticFileHandler under certain configurations. - ``tornado.web`` - `.RequestHandler.set_cookie` once again accepts capitalized keyword arguments for backwards compatibility. This is deprecated and in Tornado 7.0 only lowercase arguments will be accepted. - What's new in Tornado 6.3.0 - The new `.Application` setting ``xsrf_cookie_name`` can now be used to take advantage of the ``__Host`` cookie prefix for improved security. To use it, add ``{"xsrf_cookie_name": "__Host-xsrf", "xsrf_cookie_kwargs": {"secure": True}}`` to your `.Application` settings. Note that this feature currently only works when HTTPS is used. - `.WSGIContainer` now supports running the application in a ``ThreadPoolExecutor`` so the event loop is no longer blocked. - `.AsyncTestCase` and `.AsyncHTTPTestCase`, which were deprecated in Tornado 6.2, are no longer deprecated. - WebSockets are now much faster at receiving large messages split into many fragments. - General changes - Python 3.7 is no longer supported; the minimum supported . Python version is 3.8 Python 3.12 is now supported . - To avoid spurious deprecation warnings, users of Python 3.10 should upgrade to at least version 3.10.9, and users of Python 3.11 should upgrade to at least version 3.11.1. - Tornado submodules are now imported automatically on demand. This means it is now possible to use a single ``import tornado`` statement and refer to objects in submodules such as `tornado.web.RequestHandler`. - Deprecation notices - In Tornado 7.0, `tornado.testing.ExpectLog` will match ``WARNING`` and above regardless of the current logging configuration, unless the ``level`` argument is used. - `.RequestHandler.get_secure_cookie` is now a deprecated alias for `.RequestHandler.get_signed_cookie`. `.RequestHandler.set_secure_cookie` is now a deprecated alias for `.RequestHandler.set_signed_cookie`. - `.RequestHandler.clear_all_cookies` is deprecated. No direct replacement is provided; `.RequestHandler.clear_cookie` should be used on individual cookies. - Calling the `.IOLoop` constructor without a ``make_current`` argument, which was deprecated in Tornado 6.2, is no longer deprecated. - `.AsyncTestCase` and `.AsyncHTTPTestCase`, which were deprecated in Tornado 6.2, are no longer deprecated. - `.AsyncTestCase.get_new_ioloop` is deprecated. - ``tornado.auth`` - New method `.GoogleOAuth2Mixin.get_google_oauth_settings` can now be overridden to get credentials from a source other than the `.Application` settings. - ``tornado.gen`` - `contextvars` now work properly when a ``@gen.coroutine`` calls a native coroutine. - ``tornado.options`` - `~.OptionParser.parse_config_file` now recognizes single comma-separated strings (in addition to lists of strings) for options with ``multiple=True``. - ``tornado.web`` - New `.Application` setting ``xsrf_cookie_name`` can be used to change the name of the XSRF cookie. This is most useful to take advantage of the ``__Host-`` cookie prefix. - `.RequestHandler.get_secure_cookie` and `.RequestHandler.set_secure_cookie` (and related methods and attributes) have been renamed to `~.RequestHandler.get_signed_cookie` and `~.RequestHandler.set_signed_cookie`. This makes it more explicit what kind of security is provided, and avoids confusion with the ``Secure`` cookie attribute and ``__Secure-`` cookie prefix. The old names remain supported as deprecated aliases. - `.RequestHandler.clear_cookie` now accepts all keyword arguments accepted by `~.RequestHandler.set_cookie`. In some cases clearing a cookie requires certain arguments to be passed the same way in which it was set. - `.RequestHandler.clear_all_cookies` now accepts additional keyword arguments for the same reason as ``clear_cookie``. However, since the requirements for additional arguments mean that it cannot reliably clear all cookies, this method is now deprecated. - ``tornado.websocket`` - It is now much faster (no longer quadratic) to receive large messages that have been split into many fragments. - `.websocket_connect` now accepts a ``resolver`` parameter. - ``tornado.wsgi`` - `.WSGIContainer` now accepts an ``executor`` parameter which can be used to run the WSGI application on a thread pool. - What's new in Tornado 6.2.0 - Deprecation notice - Python 3.10 has begun the process of significant changes to the APIs for managing the event loop. Calls to methods such as `asyncio.get_event_loop` may now raise `DeprecationWarning` if no event loop is running. This has significant impact on the patterns for initializing applications, and in particular invalidates patterns that have long been the norm in Tornado's documentation and actual usage. In the future (with some as-yet-unspecified future version of Python), the old APIs will be removed. The new recommended pattern is to start the event loop with `asyncio.run`. More detailed migration guides will be coming in the future. - The `.IOLoop` constructor is deprecated unless the ``make_current=False`` argument is used. Use `.IOLoop.current` when the loop is already running instead. - `.AsyncTestCase` (and `.AsyncHTTPTestCase`) are deprecated. Use `unittest.IsolatedAsyncioTestCase` instead. - Multi-process `.TCPServer.bind`/`.TCPServer.start` is deprecated. See `.TCPServer` docs for supported alternatives. - `.AnyThreadEventLoopPolicy` is deprecated. This class controls the creation of the "current" event loop so it will be removed when that concept is no longer supported. - `.IOLoop.make_current` and `.IOLoop.clear_current` are deprecated. In the future the concept of a "current" event loop as distinct from one that is currently running will be removed. - ``TwistedResolver`` and ``CaresResolver`` are deprecated and will be removed in Tornado 7.0. - General changes - The minimum supported Python version is now 3.7. - Wheels are now published with the Python stable ABI (``abi3``) for compatibility across versions of Python. - SSL certificate verfication and hostname checks are now enabled by default in more places (primarily in client-side usage of `.SSLIOStream`). - Various improvements to type hints throughout the package. - CI has moved from Travis and Appveyor to Github Actions. - `tornado.gen` - Fixed a bug in which ``WaitIterator.current_index`` could be incorrect. - ``tornado.gen.TimeoutError``` is now an alias for `asyncio.TimeoutError`. - `tornado.http1connection` - ``max_body_size`` may now be set to zero to disallow a non-empty body. - ``Content-Encoding: gzip`` is now recognized case-insensitively. - `tornado.httpclient` - ``curl_httpclient`` now supports non-ASCII (ISO-8859-1) header values, same as ``simple_httpclient``. - `tornado.ioloop` - `.PeriodicCallback` now understands coroutines and will not start multiple copies if a previous invocation runs too long. - `.PeriodicCallback` now accepts `datetime.timedelta` objects in addition to numbers of milliseconds. - Avoid logging "Event loop is closed" during shutdown-related race conditions. - Tornado no longer calls `logging.basicConfig` when starting an IOLoop; this has been unnecessary since Python 3.2 added a logger of last resort. - The `.IOLoop` constructor now accepts an ``asyncio_loop`` keyword argument to initialize with a specfied asyncio event loop. - It is now possible to construct an `.IOLoop` on one thread (with ``make_current=False``) and start it on a different thread. - `tornado.iostream` - `.SSLIOStream` now supports reading more than 2GB at a time. - ``IOStream.write`` now supports typed `memoryview` objects. - `tornado.locale` - `.load_gettext_translations` no longer logs errors when language directories exist but do not contain the expected file. - `tornado.netutil` - `.is_valid_ip` no longer raises exceptions when the input is too long. - The default resolver now uses the same methods (and thread pool) as `asyncio`. - `tornado.tcpserver` - `.TCPServer.listen` now supports more arguments to pass through to `.netutil.bind_sockets`. - `tornado.testing` - `.bind_unused_port` now takes an optional ``address`` argument. - Wrapped test methods now include the ``__wrapped__`` attribute. - `tornado.web` - When using a custom `.StaticFileHandler` subclass, the ``reset()`` method is now called on this subclass instead of the base class. - Improved handling of the ``Accept-Language`` header. - `.Application.listen` now supports more arguments to pass through to `.netutil.bind_sockets`. - `tornado.websocket` - `.WebSocketClientConnection.write_message` now accepts `dict` arguments for consistency with `.WebSocketHandler.write_message`. - `.WebSocketClientConnection.write_message` now raises an exception as documented if the connection is already closed. - Gave rpmlint a hug - Remove upstreamed ignore-py310-deprecation-warnings.patch- add sle15_python_module_pythons (jsc#PED-68)- update to 6.2: * https://www.tornadoweb.org/en/stable/releases/v6.2.0.html - drop remove-multiheader-http-test.patch (upstream)- Add patch remove-multiheader-http-test.patch: * Do not test multi-line headers.- Filter Python 3.10 deprecation warnings during testing * ignore-py310-deprecation-warnings.patch * gh#tornadoweb/tornado#3033- Remove exec bits from demos: fix boo#1189066 - Add python-tornado6-rpmlintrc for empty JS resource in demo- back to version 6.1. Tornado pin in distributed is removed. - Dear bot, here are the patch names: * re-drop python-tornado6-httpclient-test.patch * re-drop skip-failing-tests.patch * re-drop tornado-testsuite_timeout.patch * refreshed ignore-resourcewarning-doctests.patch- Revert back to 6.0.4 for incompatibility with python-distributed. - Adds back patches: * python-tornado6-httpclient-test.patch * skip-failing-tests.patch * tornado-testsuite_timeout.patch- Update to version 6.1.0 * Full changelog can be found at https://www.tornadoweb.org/en/stable/releases/v6.1.0.html - Drop patches not applying anymore. * python-tornado6-httpclient-test.patch * skip-failing-tests.patch * tornado-testsuite_timeout.patch - Refresh and comment ignore-resourcewarning-doctests.patch - Fix documentation deduplication- Fix build with curl 7.70.0: * Revert commit c443fb7bf8a87ba8ab02b9a6af9e140cabc0ab0d which introduces test_method_after_redirect() test. - Add python-tornado6-httpclient-test.patch- version update to 6.0.4 General changes ~~~~~~~~~~~~~~ ``asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())`` for this platform/version. Bug fixes ~~~~~~~~ - Fixed an issue in `.IOStream` (introduced in 6.0.0) that resulted in ``StreamClosedError`` being incorrectly raised if a stream is closed mid-read but there is enough buffered data to satisfy the read. - `.AnyThreadEventLoopPolicy` now always uses the selector event loop on Windows. - modified patches % ignore-resourcewarning-doctests.patch (refreshed) % skip-failing-tests.patch (refreshed) % tornado-testsuite_timeout.patch (refreshed)- Add ignore-resourcewarning-doctests.patch to ignore ResourceWarnings when running doctests. - Use %autopatch macro instead of specific patch number macros- Define TRAVIS to disable unreliable tests- Replace %fdupes -s with plain %fdupes; hardlinks are better.- Provide versioned python-tornado symbol, making this package a full option in case the meta package is not applicable.- Per discussion with RM switch back to python-tornado system with python-tornado standing in as a metapkg- Provide and obsolete python-toro that was integrated in tornado- Minimal version is 3.5 and as such remove 3.4 compat deps - Change this package back to latest python tornado to use same approach like we do with pytest- Provide %oldpython-tornado symbol too- Reduce the conflicts even more- Remove duplicate entry- Remove cruft dependencies that should not be needed- Switch to tornado 4 temporarily.- Conflicts fixes- Fix package name- Split tornado versions into their own packages. This package now depends on the current preferred version. - Remove patches since there is no longer a source here: * asyncio.patch * openssl-cert-size.patch * skip-failing-tests.patch * tornado-testsuite_timeout.patch- Use a different conflicts with other tornado versions.- Rename to python-tornado6 to handle version incompatibilities - Update to 6.0.3 + Bug fixes * `.gen.with_timeout` always treats ``asyncio.CancelledError`` as a ``quiet_exception`` (this improves compatibility with Python 3.8, which changed ``CancelledError`` to a ``BaseException``). * ``IOStream`` now checks for closed streams earlier, avoiding spurious logged errors in some situations (mainly with websockets). - Update to 6.0.2 + Bug fixes * `.WebSocketHandler.set_nodelay` works again. * Accessing ``HTTPResponse.body`` now returns an empty byte string instead of raising ``ValueError`` for error responses that don't have a body (it returned None in this case in Tornado 5). - Update to 6.0.1 + Bug fixes * Fixed issues with type annotations that caused errors while importing Tornado on Python 3.5.2. - Update to 6.0.0 + Backwards-incompatible changes * Python 2.7 and 3.4 are no longer supported; the minimum supported Python version is 3.5.2. * APIs deprecated in Tornado 5.1 have been removed. This includes the ``tornado.stack_context`` module and most ``callback`` arguments throughout the package. All removed APIs emitted `DeprecationWarning` when used in Tornado 5.1, so running your application with the ``-Wd`` Python command-line flag or the environment variable ``PYTHONWARNINGS=d`` should tell you whether your application is ready to move to Tornado 6.0. * ``.WebSocketHandler.get`` is now a coroutine and must be called accordingly in any subclasses that override this method (but note that overriding ``get`` is not recommended; either ``prepare`` or ``open`` should be used instead). + General changes * Tornado now includes type annotations compatible with ``mypy``. These annotations will be used when type-checking your application with ``mypy``, and may be usable in editors and other tools. * Tornado now uses native coroutines internally, improving performance. + tornado.auth * All ``callback`` arguments in this package have been removed. Use the coroutine interfaces instead. * The ``OAuthMixin._oauth_get_user`` method has been removed. Override `~.OAuthMixin._oauth_get_user_future` instead. + tornado.concurrent * The ``callback`` argument to `.run_on_executor` has been removed. * ``return_future`` has been removed. + tornado.gen * Some older portions of this module have been removed. This includes ``engine``, ``YieldPoint``, ``Callback``, ``Wait``, ``WaitAll``, ``MultiYieldPoint``, and ``Task``. * Functions decorated with ``@gen.coroutine`` no longer accept ``callback`` arguments. + tornado.httpclient * The behavior of ``raise_error=False`` has changed. Now only suppresses the errors raised due to completed responses with non-200 status codes (previously it suppressed all errors). * The ``callback`` argument to `.AsyncHTTPClient.fetch` has been removed. + tornado.httputil * ``HTTPServerRequest.write`` has been removed. Use the methods of ``request.connection`` instead. * Unrecognized ``Content-Encoding`` values now log warnings only for content types that we would otherwise attempt to parse. + tornado.ioloop * ``IOLoop.set_blocking_signal_threshold``, ``IOLoop.set_blocking_log_threshold``, ``IOLoop.log_stack``, and ``IOLoop.handle_callback_exception`` have been removed. * Improved performance of `.IOLoop.add_callback`. + tornado.iostream * All ``callback`` arguments in this module have been removed except for `.BaseIOStream.set_close_callback`. * ``streaming_callback`` arguments to `.BaseIOStream.read_bytes` and `.BaseIOStream.read_until_close` have been removed. * Eliminated unnecessary logging of "Errno 0". + tornado.log * Log files opened by this module are now explicitly set to UTF-8 encoding. + tornado.netutil * The results of ``getaddrinfo`` are now sorted by address family to avoid partial failures and deadlocks. + tornado.platform.twisted * ``TornadoReactor`` and ``TwistedIOLoop`` have been removed. + tornado.simple_httpclient * The default HTTP client now supports the ``network_interface`` request argument to specify the source IP for the connection. * If a server returns a 3xx response code without a ``Location`` header, the response is raised or returned directly instead of trying and failing to follow the redirect. * When following redirects, methods other than ``POST`` will no longer be transformed into ``GET`` requests. 301 (permanent) redirects are now treated the same way as 302 (temporary) and 303 (see other) redirects in this respect. * Following redirects now works with ``body_producer``. + tornado.stack_context * The ``tornado.stack_context`` module has been removed. + tornado.tcpserver * `.TCPServer.start` now supports a ``max_restarts`` argument (same as `.fork_processes`). + tornado.testing * `.AsyncHTTPTestCase` now drops all references to the `.Application` during ``tearDown``, allowing its memory to be reclaimed sooner. * `.AsyncTestCase` now cancels all pending coroutines in ``tearDown``, in an effort to reduce warnings from the python runtime about coroutines that were not awaited. Note that this may cause ``asyncio.CancelledError`` to be logged in other places. Coroutines that expect to be running at test shutdown may need to catch this exception. + tornado.web * The ``asynchronous`` decorator has been removed. * The ``callback`` argument to `.RequestHandler.flush` has been removed. * `.StaticFileHandler` now supports large negative values for the ``Range`` header and returns an appropriate error for ``end > start``. * It is now possible to set ``expires_days`` in ``xsrf_cookie_kwargs``. + tornado.websocket * Pings and other messages sent while the connection is closing are now silently dropped instead of logging exceptions. * Errors raised by ``open()`` are now caught correctly when this method is a coroutine. + tornado.wsgi * ``WSGIApplication`` and ``WSGIAdapter`` have been removed. - Rebase patches: * tornado-testsuite_timeout.patch * skip-failing-tests.patch - Remove upstream-included openssl-cert-size.patch- Rename to python-tornado5 to handle version incompatibilities - Update to 5.1.1 + Bug fixes * Fixed an case in which the `.Future` returned by `.RequestHandler.finish` could fail to resolve. * The `.TwitterMixin.authenticate_redirect` method works again. * Improved error handling in the `tornado.auth` module, fixing hanging requests when a network or other error occurs. - Update to 5.1.0 + Deprecation notice * Tornado 6.0 will drop support for Python 2.7 and 3.4. The minimum supported Python version will be 3.5.2. * The ``tornado.stack_context`` module is deprecated and will be removed in Tornado 6.0. The reason for this is that it is not feasible to provide this module's semantics in the presence of ``async def`` native coroutines. ``ExceptionStackContext`` is mainly obsolete thanks to coroutines. ``StackContext`` lacks a direct replacement although the new ``contextvars`` package (in the Python standard library beginning in Python 3.7) may be an alternative. * Callback-oriented code often relies on ``ExceptionStackContext`` to handle errors and prevent leaked connections. In order to avoid the risk of silently introducing subtle leaks (and to consolidate all of Tornado's interfaces behind the coroutine pattern), ``callback`` arguments throughout the package are deprecated and will be removed in version 6.0. All functions that had a ``callback`` argument removed now return a `.Future` which should be used instead. * Where possible, deprecation warnings are emitted when any of these deprecated interfaces is used. However, Python does not display deprecation warnings by default. To prepare your application for Tornado 6.0, run Python with the ``-Wd`` argument or set the environment variable ``PYTHONWARNINGS`` to ``d``. If your application runs on Python 3 without deprecation warnings, it should be able to move to Tornado 6.0 without disruption. + tornado.auth * `.OAuthMixin._oauth_get_user_future` may now be a native coroutine. * All ``callback`` arguments in this package are deprecated and will be removed in 6.0. Use the coroutine interfaces instead. * The ``OAuthMixin._oauth_get_user`` method is deprecated and will be removed in 6.0. Override `~.OAuthMixin._oauth_get_user_future` instead. + tornado.autoreload * The command-line autoreload wrapper is now preserved if an internal autoreload fires. * The command-line wrapper no longer starts duplicated processes on windows when combined with internal autoreload. + tornado.concurrent * `.run_on_executor` now returns `.Future` objects that are compatible with ``await``. * The ``callback`` argument to `.run_on_executor` is deprecated and will be removed in 6.0. * ``return_future`` is deprecated and will be removed in 6.0. + tornado.gen * Some older portions of this module are deprecated and will be removed in 6.0. This includes ``engine``, ``YieldPoint``, ``Callback``, ``Wait``, ``WaitAll``, ``MultiYieldPoint``, and ``Task``. * Functions decorated with ``@gen.coroutine`` will no longer accept ``callback`` arguments in 6.0. + tornado.httpclient * The behavior of ``raise_error=False`` is changing in 6.0. Currently it suppresses all errors; in 6.0 it will only suppress the errors raised due to completed responses with non-200 status codes. * The ``callback`` argument to `.AsyncHTTPClient.fetch` is deprecated and will be removed in 6.0. * `tornado.httpclient.HTTPError` has been renamed to `.HTTPClientError` to avoid ambiguity in code that also has to deal with `tornado.web.HTTPError`. The old name remains as an alias. * ``tornado.curl_httpclient`` now supports non-ASCII characters in username and password arguments. * ``.HTTPResponse.request_time`` now behaves consistently across ``simple_httpclient`` and ``curl_httpclient``, excluding time spent in the ``max_clients`` queue in both cases (previously this time was included in ``simple_httpclient`` but excluded in ``curl_httpclient``). In both cases the time is now computed using a monotonic clock where available. * `.HTTPResponse` now has a ``start_time`` attribute recording a wall-clock (`time.time`) timestamp at which the request started (after leaving the ``max_clients`` queue if applicable). + tornado.httputil * `.parse_multipart_form_data` now recognizes non-ASCII filenames in RFC 2231/5987 (``filename*=``) format. * ``HTTPServerRequest.write`` is deprecated and will be removed in 6.0. Use the methods of ``request.connection`` instead. * Malformed HTTP headers are now logged less noisily. + tornado.ioloop * `.PeriodicCallback` now supports a ``jitter`` argument to randomly vary the timeout. * ``IOLoop.set_blocking_signal_threshold``, ``IOLoop.set_blocking_log_threshold``, ``IOLoop.log_stack``, and ``IOLoop.handle_callback_exception`` are deprecated and will be removed in 6.0. * Fixed a `KeyError` in `.IOLoop.close` when `.IOLoop` objects are being opened and closed in multiple threads. + tornado.iostream * All ``callback`` arguments in this module are deprecated except for `.BaseIOStream.set_close_callback`. They will be removed in 6.0. * ``streaming_callback`` arguments to `.BaseIOStream.read_bytes` and `.BaseIOStream.read_until_close` are deprecated and will be removed in 6.0. + tornado.netutil * Improved compatibility with GNU Hurd. + tornado.options * `tornado.options.parse_config_file` now allows setting options to strings (which will be parsed the same way as `tornado.options.parse_command_line`) in addition to the specified type for the option. + tornado.platform.twisted * ``TornadoReactor`` and ``TwistedIOLoop`` are deprecated and will be removed in 6.0. Instead, Tornado will always use the asyncio event loop and twisted can be configured to do so as well. ``tornado.stack_context`` * The ``tornado.stack_context`` module is deprecated and will be removed in 6.0. + tornado.testing * `.AsyncHTTPTestCase.fetch` now takes a ``raise_error`` argument. This argument has the same semantics as `.AsyncHTTPClient.fetch`, but defaults to false because tests often need to deal with non-200 responses (and for backwards-compatibility). * The `.AsyncTestCase.stop` and `.AsyncTestCase.wait` methods are deprecated. + tornado.web * New method `.RequestHandler.detach` can be used from methods that are not decorated with ``@asynchronous`` (the decorator was required to use ``self.request.connection.detach()``. * `.RequestHandler.finish` and `.RequestHandler.render` now return ``Futures`` that can be used to wait for the last part of the response to be sent to the client. * `.FallbackHandler` now calls ``on_finish`` for the benefit of subclasses that may have overridden it. * The ``asynchronous`` decorator is deprecated and will be removed in 6.0. * The ``callback`` argument to `.RequestHandler.flush` is deprecated and will be removed in 6.0. + tornado.websocket * When compression is enabled, memory limits now apply to the post-decompression size of the data, protecting against DoS attacks. * `.websocket_connect` now supports subprotocols. * `.WebSocketHandler` and `.WebSocketClientConnection` now have ``selected_subprotocol`` attributes to see the subprotocol in use. * The `.WebSocketHandler.select_subprotocol` method is now called with an empty list instead of a list containing an empty string if no subprotocols were requested by the client. * `.WebSocketHandler.open` may now be a coroutine. * The ``data`` argument to `.WebSocketHandler.ping` is now optional. * Client-side websocket connections no longer buffer more than one message in memory at a time. * Exception logging now uses `.RequestHandler.log_exception`. + tornado.wsgi * ``WSGIApplication`` and ``WSGIAdapter`` are deprecated and will be removed in Tornado 6.0. - Update to 5.0.2 + Bug fixes * Fixed a memory leak when `.IOLoop` objects are created and destroyed. * If `.AsyncTestCase.get_new_ioloop` returns a reference to a preexisting event loop (typically when it has been overridden to return `.IOLoop.current()`), the test's ``tearDown`` method will not close this loop. * Fixed a confusing error message when the synchronous `.HTTPClient` fails to initialize because an event loop is already running. * `.PeriodicCallback` no longer executes twice in a row due to backwards clock adjustments. - Update to 5.0.1 + Bug fix * This release restores support for versions of Python 3.4 prior to 3.4.4. This is important for compatibility with Debian Jessie which has 3.4.2 as its version of Python 3. + Highlights * The focus of this release is improving integration with `asyncio`. On Python 3, the `.IOLoop` is always a wrapper around the `asyncio` event loop, and `asyncio.Future` and `asyncio.Task` are used instead of their Tornado counterparts. This means that libraries based on `asyncio` can be mixed relatively seamlessly with those using Tornado. While care has been taken to minimize the disruption from this change, code changes may be required for compatibility with Tornado 5.0, as detailed in the following section. * Tornado 5.0 supports Python 2.7.9+ and 3.4+. Python 2.7 and 3.4 are deprecated and support for them will be removed in Tornado 6.0, which will require Python 3.5+. + Backwards-compatibility notes * Python 3.3 is no longer supported. * Versions of Python 2.7 that predate the `ssl` module update are no longer supported. (The `ssl` module was updated in version 2.7.9, although in some distributions the updates are present in builds with a lower version number. Tornado requires `ssl.SSLContext`, `ssl.create_default_context`, and `ssl.match_hostname`) * Versions of Python 3.5 prior to 3.5.2 are no longer supported due to a change in the async iterator protocol in that version. * The ``trollius`` project (`asyncio` backported to Python 2) is no longer supported. * `tornado.concurrent.Future` is now an alias for `asyncio.Future` when running on Python 3. This results in a number of minor behavioral changes: > `.Future` objects can only be created while there is a current `.IOLoop` > The timing of callbacks scheduled with ``Future.add_done_callback`` has changed. `tornado.concurrent.future_add_done_callback` can be used to make the behavior more like older versions of Tornado (but not identical). Some of these changes are also present in the Python 2 version of `tornado.concurrent.Future` to minimize the difference between Python 2 and 3. > Cancellation is now partially supported, via `asyncio.Future.cancel`. A canceled `.Future` can no longer have its result set. Applications that handle `~asyncio.Future` objects directly may want to use `tornado.concurrent.future_set_result_unless_cancelled`. In native coroutines, cancellation will cause an exception to be raised in the coroutine. > The ``exc_info`` and ``set_exc_info`` methods are no longer present. Use `tornado.concurrent.future_set_exc_info` to replace the latter, and raise the exception with `~asyncio.Future.result` to replace the former. * ``io_loop`` arguments to many Tornado functions have been removed. Use `.IOLoop.current()` instead of passing `.IOLoop` objects explicitly. * On Python 3, `.IOLoop` is always a wrapper around the `asyncio` event loop. ``IOLoop.configure`` is effectively removed on Python 3 (for compatibility, it may be called to redundantly specify the `asyncio`-backed `.IOLoop`) * `.IOLoop.instance` is now a deprecated alias for `.IOLoop.current`. Applications that need the cross-thread communication behavior facilitated by `.IOLoop.instance` should use their own global variable instead. + Other notes * The ``futures`` (`concurrent.futures` backport) package is now required on Python 2.7. * The ``certifi`` and ``backports.ssl-match-hostname`` packages are no longer required on Python 2.7. * Python 3.6 or higher is recommended, because it features more efficient garbage collection of `asyncio.Future` objects. + tornado.auth * `.GoogleOAuth2Mixin` now uses a newer set of URLs. + tornado.autoreload * On Python 3, uses ``__main__.__spec`` to more reliably reconstruct the original command line and avoid modifying ``PYTHONPATH``. * The ``io_loop`` argument to `tornado.autoreload.start` has been removed. + tornado.concurrent * `tornado.concurrent.Future` is now an alias for `asyncio.Future` when running on Python 3. See "Backwards-compatibility notes" for more. * Setting the result of a ``Future`` no longer blocks while callbacks are being run. Instead, the callbacks are scheduled on the next `.IOLoop` iteration. * The deprecated alias ``tornado.concurrent.TracebackFuture`` has been removed. * `tornado.concurrent.chain_future` now works with all three kinds of ``Futures`` (Tornado, `asyncio`, and `concurrent.futures`) * The ``io_loop`` argument to `tornado.concurrent.run_on_executor` has been removed. * New functions `.future_set_result_unless_cancelled`, `.future_set_exc_info`, and `.future_add_done_callback` help mask the difference between `asyncio.Future` and Tornado's previous ``Future`` implementation. + tornado.curl_httpclient * Improved debug logging on Python 3. * The ``time_info`` response attribute now includes ``appconnect`` in addition to other measurements. * Closing a `.CurlAsyncHTTPClient` now breaks circular references that could delay garbage collection. * The ``io_loop`` argument to the `.CurlAsyncHTTPClient` constructor has been removed. + tornado.gen * ``tornado.gen.TimeoutError`` is now an alias for `tornado.util.TimeoutError`. * Leak detection for ``Futures`` created by this module now attributes them to their proper caller instead of the coroutine machinery. * Several circular references that could delay garbage collection have been broken up. * On Python 3, `asyncio.Task` is used instead of the Tornado coroutine runner. This improves compatibility with some `asyncio` libraries and adds support for cancellation. * The ``io_loop`` arguments to ``YieldFuture`` and `.with_timeout` have been removed. + tornado.httpclient * The ``io_loop`` argument to all `.AsyncHTTPClient` constructors has been removed. + tornado.httpserver * It is now possible for a client to reuse a connection after sending a chunked request. * If a client sends a malformed request, the server now responds with a 400 error instead of simply closing the connection. * ``Content-Length`` and ``Transfer-Encoding`` headers are no longer sent with 1xx or 204 responses (this was already true of 304 responses). * When closing a connection to a HTTP/1.1 client, the ``Connection: close`` header is sent with the response. * The ``io_loop`` argument to the `.HTTPServer` constructor has been removed. * If more than one ``X-Scheme`` or ``X-Forwarded-Proto`` header is present, only the last is used. + tornado.httputil * The string representation of `.HTTPServerRequest` objects (which are sometimes used in log messages) no longer includes the request headers. * New function `.qs_to_qsl` converts the result of `urllib.parse.parse_qs` to name-value pairs. + tornado.ioloop * ``tornado.ioloop.TimeoutError`` is now an alias for `tornado.util.TimeoutError`. * `.IOLoop.instance` is now a deprecated alias for `.IOLoop.current`. * `.IOLoop.install` and `.IOLoop.clear_instance` are deprecated. * The ``IOLoop.initialized`` method has been removed. * On Python 3, the `asyncio`-backed `.IOLoop` is always used and alternative `.IOLoop` implementations cannot be configured. `.IOLoop.current` and related methods pass through to `asyncio.get_event_loop`. * `~.IOLoop.run_sync` cancels its argument on a timeout. This results in better stack traces (and avoids log messages about leaks) in native coroutines. * New methods `.IOLoop.run_in_executor` and `.IOLoop.set_default_executor` make it easier to run functions in other threads from native coroutines (since `concurrent.futures.Future` does not support ``await``). * ``PollIOLoop`` (the default on Python 2) attempts to detect misuse of `.IOLoop` instances across `os.fork`. * The ``io_loop`` argument to `.PeriodicCallback` has been removed. * It is now possible to create a `.PeriodicCallback` in one thread and start it in another without passing an explicit event loop. * The ``IOLoop.set_blocking_signal_threshold`` and ``IOLoop.set_blocking_log_threshold`` methods are deprecated because they are not implemented for the `asyncio` event loop`. Use the ``PYTHONASYNCIODEBUG=1`` environment variable instead. * `.IOLoop.clear_current` now works if it is called before any current loop is established. + tornado.iostream * The ``io_loop`` argument to the `.IOStream` constructor has been removed. * New method `.BaseIOStream.read_into` provides a minimal-copy alternative to `.BaseIOStream.read_bytes`. * `.BaseIOStream.write` is now much more efficient for very large amounts of data. * Fixed some cases in which ``IOStream.error`` could be inaccurate. * Writing a `memoryview` can no longer result in "BufferError: Existing exports of data: object cannot be re-sized". + tornado.locks * As a side effect of the ``Future`` changes, waiters are always notified asynchronously with respect to `.Condition.notify`. + tornado.netutil * The default `.Resolver` now uses `.IOLoop.run_in_executor`. `.ExecutorResolver`, `.BlockingResolver`, and `.ThreadedResolver` are deprecated. * The ``io_loop`` arguments to `.add_accept_handler`, `.ExecutorResolver`, and `.ThreadedResolver` have been removed. * `.add_accept_handler` returns a callable which can be used to remove all handlers that were added. * `.OverrideResolver` now accepts per-family overrides. + tornado.options * Duplicate option names are now detected properly whether they use hyphens or underscores. + tornado.platform.asyncio * `.AsyncIOLoop` and `.AsyncIOMainLoop` are now used automatically when appropriate; referencing them explicitly is no longer recommended. * Starting an `.IOLoop` or making it current now also sets the `asyncio` event loop for the current thread. Closing an `.IOLoop` closes the corresponding `asyncio` event loop. * `.to_tornado_future` and `.to_asyncio_future` are deprecated since they are now no-ops. * `~.AnyThreadEventLoopPolicy` can now be used to easily allow the creation of event loops on any thread (similar to Tornado's prior policy). + tornado.platform.caresresolver * The ``io_loop`` argument to `.CaresResolver` has been removed. + tornado.platform.twisted * The ``io_loop`` arguments to ``TornadoReactor``, `.TwistedResolver`, and ``tornado.platform.twisted.install`` have been removed. + tornado.process * The ``io_loop`` argument to the `.Subprocess` constructor and `.Subprocess.initialize` has been removed. + tornado.routing * A default 404 response is now generated if no delegate is found for a request. + tornado.simple_httpclient * The ``io_loop`` argument to `.SimpleAsyncHTTPClient` has been removed. * TLS is now configured according to `ssl.create_default_context` by default. + tornado.tcpclient * The ``io_loop`` argument to the `.TCPClient` constructor has been removed. * `.TCPClient.connect` has a new ``timeout`` argument. + tornado.tcpserver * The ``io_loop`` argument to the `.TCPServer` constructor has been removed. * `.TCPServer` no longer logs ``EBADF`` errors during shutdown. + tornado.testing * The deprecated ``tornado.testing.get_unused_port`` and ``tornado.testing.LogTrapTestCase`` have been removed. * `.AsyncHTTPTestCase.fetch` now supports absolute URLs. * `.AsyncHTTPTestCase.fetch` now connects to ``127.0.0.1`` instead of ``localhost`` to be more robust against faulty ipv6 configurations. + tornado.util * `tornado.util.TimeoutError` replaces ``tornado.gen.TimeoutError`` and ``tornado.ioloop.TimeoutError``. * `.Configurable` now supports configuration at multiple levels of an inheritance hierarchy. + tornado.web * `.RequestHandler.set_status` no longer requires that the given status code appear in `http.client.responses`. * It is no longer allowed to send a body with 1xx or 204 responses. * Exception handling now breaks up reference cycles that could delay garbage collection. * `.RedirectHandler` now copies any query arguments from the request to the redirect location. * If both ``If-None-Match`` and ``If-Modified-Since`` headers are present in a request to `.StaticFileHandler`, the latter is now ignored. + tornado.websocket * The C accelerator now operates on multiple bytes at a time to improve performance. * Requests with invalid websocket headers now get a response with status code 400 instead of a closed connection. * `.WebSocketHandler.write_message` now raises `.WebSocketClosedError` if the connection closes while the write is in progress. * The ``io_loop`` argument to `.websocket_connect` has been removed. - Rebase patches: * tornado-testsuite_timeout.patch * skip-failing-tests.patch - Remove upstream-included asyncio.patch- Fix fdupes macro expansion- Add patch to skip tests failing with openss-1.1.1; this happens only when using TLS 1.3 so if user wants to use tornado they can hand disable the TLS and continue: * skip-failing-tests.patch- Import necessary dependencies on Red Hat platforms- Add patch really fixing the tests/tool to work on py3.7: * asyncio.patch - Add patch to enlarge key size for openssl 1.1.1: * openssl-cert-size.patch- Drop patch tornado-async-deprecations.patch that does not fix stuff on py3.7- Fix building on SLE- Don't require backport_abc for python >= 3.5- add tornado-testsuite_timeout.patch (bsc#1085661) extend timeouts in testsuite to allow successful build on ppc64le- Allows Recommends and Suggest in Fedora- Recommends only for SUSE- Update to version 4.5.3 + tornado.curl_httpclient * Improved debug logging on Python 3. + tornado.httpserver * ``Content-Length`` and ``Transfer-Encoding`` headers are no longer sent with 1xx or 204 responses (this was already true of 304 responses). * Reading chunked requests no longer leaves the connection in a broken state. + tornado.iostream * Writing a `memoryview` can no longer result in "BufferError: Existing exports of data: object cannot be re-sized". + tornado.options * Duplicate option names are now detected properly whether they use hyphens or underscores. + tornado.testing * `.AsyncHTTPTestCase.fetch` now uses ``127.0.0.1`` instead of ``localhost``, improving compatibility with systems that have partially-working ipv6 stacks. + tornado.web * It is no longer allowed to send a body with 1xx or 204 responses. + tornado.websocket * Requests with invalid websocket headers now get a response with status code 400 instead of a closed connection.- only buildrequire futures / singledispatch if python2 is present (fixes build in environments that don't have python2 at all)- Distribute license file- specfile: * removed tornado-configtest.patch: fixed upstream * update tornado-async-deprecation.patch (partly integrated) - update to version 4.5.2: * Tornado now sets the FD_CLOEXEC flag on all file descriptors it creates. This prevents hanging client connections and resource leaks when the tornado.autoreload module (or Application(debug=True)) is used. - changes from version 4.5.1: * tornado.log + Improved detection of libraries for colorized logging. * tornado.httputil + url_concat once again treats None as equivalent to an empty sequence. - changes from version 4.5.0: * long changelog, see http://www.tornadoweb.org/en/stable/releases/v4.5.0.html for details- added %{python_module backports.ssl_match_hostname} on SLES12 GA aka SP0, to avoid build errors - explicit BuildRequires for certifi on SLES12 GA aka SP0 only- added certifi to BuildRequires, to fix 'ImportError: No module named certifi'- Fix tests- in %pre, remove egg-info file if installed, because it's being replaced by a directory (bsc#1035604)- replace the complicated condition for requiring backports.ssl_match_hostname with unconditional requirement for Python >= 2.7.9- require python-backports.ssl_hostname only on python 2.x- update to 4.4.3 * The `tornado.auth` module has been updated for compatibility with `a change to Facebook's access_token endpoint.- tornado-configtest.patch: fix test failure when __file__ is not absolute - tornado-async-deprecations.patch: filter test failures due to async deprecation warnings, to fix build on python 3.6 - update for multipython build - enable test suite- update to 4.4.2: * Tornado now requires Python 2.7 or 3.3+; versions 2.6 and 3.2 are no longer supported. Pypy3 is still supported even though its latest release is mainly based on Python 3.2. * The `monotonic `_ package is now supported as an alternative to `Monotime `_ for monotonic clock support on Python 2.- add singledispatch and backports_abc dependencies as stated in docs/releases/v4.3.0.rst * Tornado has several new dependencies: (...) ``singledispatch`` on all Python versions prior to 3.4 (This was an optional dependency in prior versions of Tornado, and is now mandatory), and ``backports_abc>=0.4`` on all versions prior to 3.5 Since this python module works with python version >= 2.7.9 (otherwise it would be called python3-tornado, afaiu)- Switch to pypi tarball. It uses "4.3" instead of "4.3.0"- Update to 4.3.0 - The new async/await keywords in Python 3.5 are supported. Deprecation notice - This will be the last release of Tornado to support Python 2.6 or 3.2. See http://www.tornadoweb.org/en/stable/releases/v4.3.0.html- fix macro - use package name python-backports-ssl_match_hostname on rhel7 - define py_ver where it does not exist- python-certifi is an optional depedency when python 2.7.9 is available.- python-certifi is a hard dependency, not an optional one.- Remove python-Twisted BuildRequires. It causes a python-cryptography build dependency, which is currently broken on SLE11SP4 due to old OpenSSL version- Update to 4.2.1: Security fix: * This release fixes a path traversal vulnerability in StaticFileHandler, in which files whose names started with the static_path directory but were not actually in that directory could be accessed. - Update to 4.2: Backwards-compatibility: * SSLIOStream.connect and IOStream.start_tls now validate certificates by default. * Certificate validation will now use the system CA root certificates instead of certifi when possible (i.e. Python 2.7.9+ or 3.4+). This includes IOStream and simple_httpclient, but not curl_httpclient * The default SSL configuration has become stricter, using ssl.create_default_context where available on the client side. (On the server side, applications are encouraged to migrate from the ssl_options dict-based API to pass an ssl.SSLContext instead). * The deprecated classes in the tornado.auth module, GoogleMixin, FacebookMixin, and FriendFeedMixin have been removed. * see more details: http://www.tornadoweb.org/en/stable/releases/v4.2.0.html- fix build with non-SUSE distributions- Update to 4.1: * If a `.Future` contains an exception but that exception is never examined or re-raised (e.g. by yielding the `.Future`), a stack trace will be logged when the `.Future` is garbage-collected. * New class `tornado.gen.WaitIterator` provides a way to iterate over ``Futures`` in the order they resolve. * The `tornado.websocket` module now supports compression via the "permessage-deflate" extension. Override `.WebSocketHandler.get_compression_options` to enable on the server side, and use the ``compression_options`` keyword argument to `.websocket_connect` on the client side. * When the appropriate packages are installed, it is possible to yield `asyncio.Future` or Twisted ``Defered`` objects in Tornado coroutines./bin/shpython311-toroh01-ch3d 1732780685  !""$%&'()**,-./0123456789::<=>?@ABBDEFGHIJKLMNOPQRSTUVWXYZ[\]^__abcceeghijklmnopqrstuvwxyz{|}~6.3.26.3.26.3.2-150400.9.6.16.3.2-150400.9.6.16.3.26.3.2   tornadotornado-6.3.2.dist-infoINSTALLERLICENSEMETADATARECORDREQUESTEDWHEELtop_level.txt__init__.py__pycache____init__.cpython-311.opt-1.pyc__init__.cpython-311.pyc_locale_data.cpython-311.opt-1.pyc_locale_data.cpython-311.pycauth.cpython-311.opt-1.pycauth.cpython-311.pycautoreload.cpython-311.opt-1.pycautoreload.cpython-311.pycconcurrent.cpython-311.opt-1.pycconcurrent.cpython-311.pyccurl_httpclient.cpython-311.opt-1.pyccurl_httpclient.cpython-311.pycescape.cpython-311.opt-1.pycescape.cpython-311.pycgen.cpython-311.opt-1.pycgen.cpython-311.pychttp1connection.cpython-311.opt-1.pychttp1connection.cpython-311.pychttpclient.cpython-311.opt-1.pychttpclient.cpython-311.pychttpserver.cpython-311.opt-1.pychttpserver.cpython-311.pychttputil.cpython-311.opt-1.pychttputil.cpython-311.pycioloop.cpython-311.opt-1.pycioloop.cpython-311.pyciostream.cpython-311.opt-1.pyciostream.cpython-311.pyclocale.cpython-311.opt-1.pyclocale.cpython-311.pyclocks.cpython-311.opt-1.pyclocks.cpython-311.pyclog.cpython-311.opt-1.pyclog.cpython-311.pycnetutil.cpython-311.opt-1.pycnetutil.cpython-311.pycoptions.cpython-311.opt-1.pycoptions.cpython-311.pycprocess.cpython-311.opt-1.pycprocess.cpython-311.pycqueues.cpython-311.opt-1.pycqueues.cpython-311.pycrouting.cpython-311.opt-1.pycrouting.cpython-311.pycsimple_httpclient.cpython-311.opt-1.pycsimple_httpclient.cpython-311.pyctcpclient.cpython-311.opt-1.pyctcpclient.cpython-311.pyctcpserver.cpython-311.opt-1.pyctcpserver.cpython-311.pyctemplate.cpython-311.opt-1.pyctemplate.cpython-311.pyctesting.cpython-311.opt-1.pyctesting.cpython-311.pycutil.cpython-311.opt-1.pycutil.cpython-311.pycweb.cpython-311.opt-1.pycweb.cpython-311.pycwebsocket.cpython-311.opt-1.pycwebsocket.cpython-311.pycwsgi.cpython-311.opt-1.pycwsgi.cpython-311.pyc_locale_data.pyauth.pyautoreload.pyconcurrent.pycurl_httpclient.pyescape.pygen.pyhttp1connection.pyhttpclient.pyhttpserver.pyhttputil.pyioloop.pyiostream.pylocale.pylocks.pylog.pynetutil.pyoptions.pyplatform__init__.py__pycache____init__.cpython-311.opt-1.pyc__init__.cpython-311.pycasyncio.cpython-311.opt-1.pycasyncio.cpython-311.pyccaresresolver.cpython-311.opt-1.pyccaresresolver.cpython-311.pyctwisted.cpython-311.opt-1.pyctwisted.cpython-311.pycasyncio.pycaresresolver.pytwisted.pyprocess.pypy.typedqueues.pyrouting.pysimple_httpclient.pyspeedups.abi3.sotcpclient.pytcpserver.pytemplate.pytesting.pyutil.pyweb.pywebsocket.pywsgi.pypython311-tornado6demosblogREADMEblog.pyschema.sqlstaticblog.csstemplatesarchive.htmlbase.htmlcompose.htmlcreate_author.htmlentry.htmlfeed.xmlhome.htmllogin.htmlmodulesentry.htmlchatchatdemo.pystaticchat.csschat.jstemplatesindex.htmlmessage.htmlfacebookREADMEfacebook.pystaticfacebook.cssfacebook.jstemplatesmodulespost.htmlstream.htmlfile_uploadfile_receiver.pyfile_uploader.pyhelloworldhelloworld.pys3servers3server.pytcpechoclient.pyserver.pytwitterhome.htmltwitterdemo.pywebsocketchatdemo.pystaticchat.csschat.jstemplatesindex.htmlmessage.htmlwebspiderwebspider.pypython311-tornado6LICENSE/usr/lib64/python3.11/site-packages//usr/lib64/python3.11/site-packages/tornado-6.3.2.dist-info//usr/lib64/python3.11/site-packages/tornado//usr/lib64/python3.11/site-packages/tornado/__pycache__//usr/lib64/python3.11/site-packages/tornado/platform//usr/lib64/python3.11/site-packages/tornado/platform/__pycache__//usr/share/doc/packages//usr/share/doc/packages/python311-tornado6//usr/share/doc/packages/python311-tornado6/demos//usr/share/doc/packages/python311-tornado6/demos/blog//usr/share/doc/packages/python311-tornado6/demos/blog/static//usr/share/doc/packages/python311-tornado6/demos/blog/templates//usr/share/doc/packages/python311-tornado6/demos/blog/templates/modules//usr/share/doc/packages/python311-tornado6/demos/chat//usr/share/doc/packages/python311-tornado6/demos/chat/static//usr/share/doc/packages/python311-tornado6/demos/chat/templates//usr/share/doc/packages/python311-tornado6/demos/facebook//usr/share/doc/packages/python311-tornado6/demos/facebook/static//usr/share/doc/packages/python311-tornado6/demos/facebook/templates//usr/share/doc/packages/python311-tornado6/demos/facebook/templates/modules//usr/share/doc/packages/python311-tornado6/demos/file_upload//usr/share/doc/packages/python311-tornado6/demos/helloworld//usr/share/doc/packages/python311-tornado6/demos/s3server//usr/share/doc/packages/python311-tornado6/demos/tcpecho//usr/share/doc/packages/python311-tornado6/demos/twitter//usr/share/doc/packages/python311-tornado6/demos/websocket//usr/share/doc/packages/python311-tornado6/demos/websocket/static//usr/share/doc/packages/python311-tornado6/demos/websocket/templates//usr/share/doc/packages/python311-tornado6/demos/webspider//usr/share/licenses//usr/share/licenses/python311-tornado6/-fmessage-length=0 -grecord-gcc-switches -O2 -Wall -D_FORTIFY_SOURCE=2 -fstack-protector-strong -funwind-tables -fasynchronous-unwind-tables -fstack-clash-protection -gobs://build.suse.de/SUSE:Maintenance:36547/SUSE_SLE-15-SP4_Update/cff493700cdd8ff10004f3e0486e7cc8-python-tornado6.SUSE_SLE-15-SP4_Updatedrpmxz5x86_64-suse-linux       directoryASCII textPython script, ASCII text executableASCII text, with CRLF line terminatorsemptyUTF-8 Unicode textPython script, UTF-8 Unicode text executableELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=3b3272ee5f279a47b937fe27738a379a885d0cb9, strippedHTML document, ASCII textXML 1.0 document, ASCII text  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abghijklmnRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR%[)P7h?v3/python311-Twistedpython311-pycarespython311-pycurlpython311-service_identityutf-8237b71938667e7f392ab3440f1f5c7f78e926d3e595cd21c2a804b0be78f9b2c?p7zXZ !t/Q V]"k%0a M+偢סnIKWפNȩdN}Ck6b,R=b9Bk*xfG#TF|yNI3ipwU_]ia ?`;2/8. \O9!!}s"Z_BM.UQzb`loY4+21öC ^e,PZ;Sgwce.Nq㟕U+/!_%fMǚ K)enVX"/ 48 5̫jXng I" ƄUJa5){tӚC68oؘMDPc;Gq7R8Ă>zIXØ[tb=_/wB60,2[bU'p hr\26:ˑ@R1r tS:#kVMĽmVgdO-CaƧuYͥ_!V;d,xF" L4oVp.7P7/x+5*J$‚naI6tWq6AͣݍyBpmDŬZ(WI ̌CyK >Q;'Apw܎q9`򐮨L y4!@Y:e=_ߴP̀ A Y=kIA:(` w~fjda0t3΋&; ]'WUh#D  e+KT肔2\0EDc^I<U:#v$T Z@߼w,2gq8mpZi唧6ko5=PZI/nU_L?旃\ȵ/(߸z3#l=^xpt8*[ܠ% < Nr%JE{Fn0 Ѧps]7(s$0dv6ut}Ju5]k9?;+oȳWj&0-e0 c6\߃yݭ E; aA@$!,@G/̕cIp:w8 H,X6ݡv=nD|1+lv 6m5׳i[#㚏ibFL0hzOՃŊh.NA͝zĚI9W~w66$BS`$lB &Jжv s_CBd[xz7`P0u~Rz>5vu3HZ #@_>2ėlА$Dװ|=gwo@qkW#gD\f{ЌC77Pj}ui5=IK(r]1oyW 6-LNR-# u|P|#/LJȦ>VuiS.2|B^Kݑd*쎣:j8t6No)§ػ=}v6۹ aƋ İt<\H-C7X *h 7 P%e+ۙ 'ďC9&J2VKoTd' h+:u>v[Jm.YΞ̠ƭa76uq!ϒȋ5I7_ Qd^±}d6r0mf^:=bÚuW>͏5?"HJVkU'Hm$m c{QpϙY-gKA 8m Q3'&K;>h/Bco//,,6g&@DֈK`$ KX٧ k2؇84P?( nl,ŧTϵ@"J[W܄OԘX;s!]gsx#v>mb>*UKL5rLX6$J9]l DtBH J` ņh6(fy&I B1I-a~e/$v-<'W`;D1Y@9<,h3⇇+:QZK:L QG* < :# E`wJo5f7^I:Q>f}uð]Vڝ֧1/Q# x\DY}A&'_uFy=IDngo5֙~R_W\fәt^%/ **Zl{  bECmkt;&)5͒@ez  0莭lSiҫcv7.~qDx-1~fU!FIaˑ\ }nIԹI%B$Tٱ$9",Js=+:~Ū hɽD[)GDB0Ą$D:ԛ\i1rPL Knus_ ;FK6a7 &ܺRN% ^P!f":X'^;Ѷ-g#j+Q=̼A9@{9T ja۝W>Qnhf wd$v z{qc- q%g]5k⹭B>\z$];Je{L}@+ k'>xɶ YZ