\bg& ddlZddlZddlZddlZddlZddlZddlZddlZddlm Z ddl m Z ddl m Z mZddlmZddlZddlmZddlmZdd lmZd Zeejd d Zd ejvZejej dkoedZ!GddZ"Gdde"Z#Gdde"Z$ededdededdededddediededd edd edd!gZ%Gd"d#Z&Gd$d%e&Z'd&Z(ej)d'd(Z*d)Z+dS)*N)futures)Path)AnyCallable)ZipFile)path) Requirement)DALSz __import__('setuptools').setup()TIMEOUT_BACKEND_TEST180__pypy__win32z_The combination of PyPy + Windows + pytest-xdist + ProcessPoolExecutor is flaky and problematic)reasonceZdZddZdS)BuildBackendBase.Nsetuptools.build_metac4||_|pi|_||_dS)N)cwdenv backend_name)selfrrrs q/builddir/build/BUILD/cloudlinux-venv-1.0.7/venv/lib/python3.11/site-packages/setuptools/tests/test_build_meta.py__init__zBuildBackendBase.__init__#s"9"()rNr)__name__ __module__ __qualname__rrrrr"s())))))rrcHeZdZdZfdZdededeffdZdZ xZ S) BuildBackendzPEP 517 Build Backendcntj|i|tjd|_dS)Nr ) max_workers)superrrProcessPoolExecutorpool)rargskwargs __class__s rrzBuildBackend.__init__,s8$)&)))/A>>> rnamereturn.cfd}|S).method3s;7??48,,D'dh8IJJFC i&&ry1188AA'ty'BtBBBrBBII'RRR' V V V """... 3 TTTTUUUUUUO5{GL   XL!VWWW sA*B//AE =E r )rr+rFs`` r __getattr__zBuildBackend.__getattr__0s)        rc|dStjtt5t j|tjdkr tjn tj ddddS#1swxYwYdS)Nnt) contextlibsuppressProcessLookupErrorr@r1killr+signalSIGTERMSIGKILL)rrEs rr:zBuildBackend._killEs ; F  !3W = = P P GC27d?? O O O P P P P P P P P P P P P P P P P P Psed?iZ&d@Z'd>edAiZ(dBZ)ej dCdDdEZ*d S)FTestBuildMetaBackendrc,t|jS)Nr)r"r)rs rget_build_backendz&TestBuildMetaBackend.get_build_backends):;;;;r)paramsc#Ktj|jt||5|VddddS#1swxYwYdS)N)prefix)rbuildparamrRas_cwdrn)rtmpdirrequests r build_backendz"TestBuildMetaBackend.build_backends 7=V5555 ]]__ + +((** * * * + + + + + + + + + + + + + + + + + +sA##A'*A'cx|}dg}t|t|ksJdSNsix)get_requires_for_build_wheelsortedrrwactualexpecteds r!test_get_requires_for_build_wheelz6TestBuildMetaBackend.test_get_requires_for_build_wheel?;;==7f~~!1!1111111rcx|}dg}t|t|ksJdSry)get_requires_for_build_sdistr|r}s r!test_get_requires_for_build_sdistz6TestBuildMetaBackend.test_get_requires_for_build_sdistrrcDtjd}tj|||}tj||}tj|sJtjdrJt|5}t| }dddn #1swxYwYd|D}d|D}t|dksJdS)Nz pip-wheelworld.pyc3DK|]}|d|VdS)z.pyNendswith.0fs r z8TestBuildMetaBackend.test_build_wheel..s3IIqzz%7H7HI!IIIIIIrc<g|]}|d|S)rgrrs r z9TestBuildMetaBackend.test_build_wheel..s)KKKAJJz4J4JK1KKKrr ) r1rr2makedirs build_wheeljoinisfilersetnamelistlen) rrwdist_dir wheel_name wheel_filezipfilewheel_contentspython_scriptsmoduless rtest_build_wheelz%TestBuildMetaBackend.test_build_wheelsB7??;// H"..x88 W\\(J77 w~~j)))))7>>*----- Z  5G !1!1!3!344N 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 JI^IIIKKnKKK7||q      s:"C((C,/C, build_type)wheelsdistcfddtdtdd}tj|tjd|z}|}t |d|z}||}tdd d 5}|d dddn #1swxYwY||} tj tj ||sJ|| ksJttj || d  ||} | | ksJtj tj || dksJdS)Nz$from setuptools import setup setup()z0.0.1zo [metadata] name = foo version = file: VERSION [build-system] requires = ["setuptools", "wheel"] build-backend = "setuptools.build_meta" )rgVERSIONripyproject.tomlz preexisting-build_rwtutf-8encodingz0.0.2wbr) r rrrr1r2rnraopenwriterrclosegetsize) rr tmpdir_cwdfilesrrw build_method first_result version_file second_result third_results r%test_build_with_existing_file_presentz:TestBuildMetaBackend.test_build_with_existing_file_present s @#  & 57??>J#>??..00 }h.CDD $|H-- )TG 4 4 4 (   w ' ' ' ( ( ( ( ( ( ( ( ( ( ( ( ( ( (% X.. w~~bgll8\BBCCCCC},,,, RW\\(M 2 2D99??AAA#|H-- },,,,wrw||HlCCDDqHHHHHHsB>>CC setup_scriptNc Ltdtddddddddd d id }|r||d <|}|5tj||d }|d }dddn #1swxYwYtjtj |d |5}t| }dddn #1swxYwYttj |d |5} t| } t| dd} t| dd} t| dd} dddn #1swxYwY|dhz hdksJ| hdksJ| dksJdddddtt#dzdtt#dzfD]}|| vs J|| f| dsJ| dksJdS)Naj [build-system] requires = ["setuptools", "wheel"] build-backend = "setuptools.build_meta" [project] name = "foo" license = {text = "MIT"} description = "This is a Python package" dynamic = ["version", "readme"] classifiers = [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers" ] urls = {Homepage = "http://github.com"} dependencies = [ "appdirs", ] [project.optional-dependencies] all = [ "tomli>=1", "pyscaffold>=4,<5", 'importlib; python_version == "2.6"', ] [project.scripts] foo = "foo.cli:main" [tool.setuptools] zip-safe = false package-dir = {"" = "src"} packages = {find = {where = ["src"]}} license-files = ["LICENSE*"] [tool.setuptools.dynamic] version = {attr = "foo.__version__"} readme = {file = "README.rst"} [tool.distutils.sdist] formats = "gztar" zd global-include *.py *.txt global-exclude *.py[cod] zThis is a ``README``z!---- placeholder MIT license ----fooz__version__ = '0.1'z__version__: strz def main(): print('hello world')) __init__.pyz __init__.pyizcli.pyzdata.txtzpy.typed)r MANIFEST.inz README.rstz LICENSE.txtsrcrgtempfoo-0.1.dist-info/METADATArfoo-0.1.dist-info/LICENSE.txt"foo-0.1.dist-info/entry_points.txtzfoo-0.1/setup.py>foo-0.1 foo-0.1/srcfoo-0.1/src/foofoo-0.1/PKG-INFOfoo-0.1/setup.cfgfoo-0.1/README.rstfoo-0.1/LICENSE.txtfoo-0.1/MANIFEST.infoo-0.1/pyproject.tomlfoo-0.1/src/foo/cli.pyfoo-0.1/src/foo.egg-infofoo-0.1/src/foo/data.txtfoo-0.1/src/foo/py.typedfoo-0.1/src/foo/__init__.pyfoo-0.1/src/foo/__init__.pyi!foo-0.1/src/foo.egg-info/PKG-INFO$foo-0.1/src/foo.egg-info/SOURCES.txt%foo-0.1/src/foo.egg-info/not-zip-safe%foo-0.1/src/foo.egg-info/requires.txt&foo-0.1/src/foo.egg-info/top_level.txt)foo-0.1/src/foo.egg-info/entry_points.txt-foo-0.1/src/foo.egg-info/dependency_links.txt> foo/cli.py foo/data.txt foo/py.typedfoo/__init__.pyfoo/__init__.pyifoo-0.1.dist-info/WHEELfoo-0.1.dist-info/RECORDfoo-0.1.dist-info/top_level.txtrrrz!Summary: This is a Python packagez License: MITz+Classifier: Intended Audience :: DeveloperszRequires-Dist: appdirszRequires-Dist: ztomli>=1 ; extra == "all"z2importlib; python_version=="2.6" and extra =="all"z$[console_scripts] foo = foo.cli:main)r rnrtrrr build_sdistrtarfilerr1rrgetnamesrrrRreadr stripr)rrurrrw sdist_pathrtarsdist_contentsrrmetadatalicenseepointslines r test_build_with_pyproject_configz5TestBuildMetaBackend.test_build_with_pyproject_config<s#)++X  1>#8$6@ B " k> > ~  - ,E* ..00 ]]__ ; ; Ju   &226::J&226::J ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; \"',,vvzBB C C 1s 00N 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1RW\\&&*== > > W' !1!1!3!344N7<<(DEEwOOH',,'FGGQQG',,'KLLgVVG  W W W W W W W W W W W W W W W !3 449 9 9     0 " " "     ===== 0  9 $ K0K$L$L M M M +RSSTT U  6 6D8###dH%5####~~(()?@@@@@}}"IIIIIIIs7?B%%B),B)#"DDD B G!!G%(G%cdtdtdtdd}|}|5tj||d}|d}dddn #1swxYwY|dz sJ|dz sJ|dz rJ|d z rJ|d z rJ|d z rJ|d z rJ|d z rJtj tj |d|5}t| dd}|}d|vsJ dddn #1swxYwYt!tj |d|5} t| dd} | }d|vsJ dddn #1swxYwY|| fD]} dD]} | | vsJ dD]} | | vsJ dS)NaR [build-system] requires = ["setuptools", "wheel"] build-backend = "setuptools.build_meta" [project] name = "foo" description = "This is a Python package" version = "42" dependencies = ["six"] zO def run(): print('hello') z __import__('setuptools').setup( name='bar', version='13', ) )rrhrgrztemp/foo-42.tar.gzztemp/foo-42-py3-none-any.whlztemp/bar-13.tar.gzztemp/bar-42.tar.gzztemp/foo-13.tar.gzztemp/bar-13-py3-none-any.whlztemp/bar-42-py3-none-any.whlztemp/foo-13-py3-none-any.whlzfoo-42/PKG-INFOrzbar-13/PKG-INFOzfoo-42.dist-info/METADATAzbar-13.dist-info/METADATA)z Name: fooz Version: 42)z Name: barz Version: 13)r rnrtrrrrrexistsrrr1rrR extractfilerrrr) rrurrwrrrpkg_infomembersrrfilers r(test_static_metadata_in_pyproject_configz=TestBuildMetaBackend.test_static_metadata_in_pyproject_configs#    )  :..00 ]]__ ; ; Ju   &226::J&226::J ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; --557777777??AAAAA1199;;;;;1199;;;;;1199;;;;;;;CCEEEEE;;CCEEEEE;;CCEEEEE \"',,vvzBB C C 4s3??+<==BBDDgNNHllnnG$G33333 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 RW\\&&*== > > >'7<<(CDDgNNH&&((G.g===== > > > > > > > > > > > > > > > h& ( (D4 $ $t|||||4 ( (4''''' ( ( (s7?B!!B%(B%'AHH H=>JJ J ctjd}tj|||}tjtj||sJdS)Nz pip-sdist)r1rr2rrrrrrwr sdist_names rtest_build_sdistz%TestBuildMetaBackend.test_build_sdistsh7??;// H"..x88 w~~bgll8Z@@AAAAAAArctjd}tj|||}tjtj||dsJdS)N pip-dist-infoMETADATA)r1rr2r prepare_metadata_for_build_wheelrr)rrwr dist_infos r%test_prepare_metadata_for_build_wheelz:TestBuildMetaBackend.test_prepare_metadata_for_build_wheel sj7???33 H!BB8LL w~~bgll8Y KKLLLLLLLrcdD]}tj|d|d}tjtj|dsJdS)zy Some users might pass metadata_directory pre-populated with `.tox` or `.venv`. See issue #3523. )z?.tox/python/lib/python3.10/site-packages/attrs-22.1.0.dist-infozD.tox/python/lib/python3.10/site-packages/autocommand-2.2.1.dist-infoz>.nox/python/lib/python3.10/site-packages/build-0.8.0.dist-infoz4.venv/python3.10/site-packages/click-8.1.3.dist-infoz5venv/python3.10/site-packages/distlib-0.3.5.dist-infoz4env/python3.10/site-packages/docutils-0.19.dist-infoT)exist_okrrN)r1rrrrr)rrw pre_existingrs rtest_prepare_metadata_inplacez2TestBuildMetaBackend.test_prepare_metadata_inplacesp   5 5L K t 4 4 4 4 4!BB3GG w~~bgll9jAABBBBBBBrctjd}||}tjtj||sJdS)Ndist)r1rr2rrrrs rtest_build_sdist_explicit_distz3TestBuildMetaBackend.test_build_sdist_explicit_dist#sZ7??6**"..x88 w~~bgll8Z@@AAAAAAArc"tjd}tj|||}tjtj||sJtjd}tj|stjd}t|dd5}| }dddn #1swxYwYt|dd5}| | dd dddn #1swxYwYtj |tj||d}tjtjtjd|sJdS) N out_sdistrgrirtrrrzversion='0.0.0'zversion='0.0.1')r1rr2rrrrrrrrreplaceshutilrmtree)rrwsdist_into_directoryr setup_loc file_handlercontents rtest_build_sdist_version_changez4TestBuildMetaBackend.test_build_sdist_version_change*s,!w{;; ()))"../CDD w~~bgll+?LLMMMMM GOOJ// w~~i(( 5 44I )TG 4 4 4 * "''))G * * * * * * * * * * * * * * * )TG 4 4 4 V   w/@BSTT U U U V V V V V V V V V V V V V V V  *+++ ()))"..{;; w~~bgll27??;+G+GTTUUUUUUUs$7DDD5*E++E/2E/ctddtdd}tj||}|d}t jtjd|5}td| DsJ ddddS#1swxYwYdS)N __import__('setuptools').setup( name='foo', version='0.0.0', py_modules=['hello'] )rr)rgrhrrc3K|]}d|vV dS)rNr rr+s rrzNTestBuildMetaBackend.test_build_sdist_pyproject_toml_exists..Zs(KKD'4/KKKKKKr r rrrrnrrrr1ranyrrrrrw targz_pathrs r&test_build_sdist_pyproject_toml_existsz;TestBuildMetaBackend.test_build_sdist_pyproject_toml_existsCs/"  $ 5..00 "..v66 \"',,vz:: ; ; LsKKCLLNNKKKKK K KK K L L L L L L L L L L L L L L L L L L.C  CCctjtd|}|d}t jtjd|5}td| DsJ ddddS#1swxYwYdS)Nrrc3K|]}d|vV dSrgNr rs rrzHTestBuildMetaBackend.test_build_sdist_setup_py_exists..ds'EEdzT)EEEEEEr) rrrdefnsrnrrrr1rrr)rrrwrrs r test_build_sdist_setup_py_existsz5TestBuildMetaBackend.test_build_sdist_setup_py_exists\s 58..00 "..v66 \"',,vz:: ; ; FsEEcllnnEEEEE E EE E F F F F F F F F F F F F F F F F F Fs;.B77B;>B;ctddtdd}tj||}|d}t jtjd|5}td| DrJ ddddS#1swxYwYdS)Nz __import__('setuptools').setup( name='foo', version='0.0.0', py_modules=['hello'] )rz" exclude setup.py )rgrhrrc3K|]}d|vV dSrr rs rrzSTestBuildMetaBackend.test_build_sdist_setup_py_manifest_excluded..~s'II$:-IIIIIIrrrs r+test_build_sdist_setup_py_manifest_excludedz@TestBuildMetaBackend.test_build_sdist_setup_py_manifest_excludedfs1    " 5..00 "..v66 \"',,vz:: ; ; JsII#,,..IIIII I II I J J J J J J J J J J J J J J J J J Jrctddtdd}tj||}|ddS)NrrzE [sdist] formats=zip rgrhrir)r rrrrnr)rrrrws r3test_build_sdist_builds_targz_even_if_zip_indicatedzHTestBuildMetaBackend.test_build_sdist_builds_targz_even_if_zip_indicatedst  $ 5..00 !!&)))))rz __import__('setuptools').setup( name='foo', version=__import__('hello').__version__, py_modules=['hello'] )z__version__ = "0.0.0"z9 [sdist] formats=zip r$ctj|j|}t jt d5|dddddS#1swxYwYdS)Nz^No module named 'hello'$matchr)rrr_relative_path_import_filesrnr;raises ImportErrorrrrrws r%test_build_sdist_relative_path_importz:TestBuildMetaBackend.test_build_sdist_relative_path_imports 43444..00 ];.I J J J . .  % %f - - - . . . . . . . . . . . . . . . . . .s A,,A03A0zX [project] name = "proj" version = "42" projrr)rrctt|d}|sJ|D]5}|st j|jdksJ6dS)z?All files in the directory should be either links or hard linksz**/*rN)listrglob is_symlinkr1statst_nlink)r parent_dirrrs r_assert_link_treez&TestBuildMetaBackend._assert_link_treeswT*%%**62233 u C CD??$$ B (>(B(B(BB C Crctj|j|}t drJ|dt drJdS)z Sanity check to ensure tests with --mode=strict are different from the ones without --mode. --mode=strict should create a local directory with a package tree. The directory should not get created otherwise. rrrN)rrr_simple_pyproject_examplernrrbuild_editabler,s r%test_editable_without_config_settingsz:TestBuildMetaBackend.test_editable_without_config_settingss~ 41222..00 =='')))))$$V,,,=='')))))))rcdddgi}tj|j|}t drJt d|d||d|t dsJdS)Nz--build-option build_extz --inplacerrzbuild/proj-42-py3-none-any.whl) rrrr8rnrrmkdirrrrrconfig_settingsrws rtest_build_wheel_inplacez-TestBuildMetaBackend.test_build_wheel_inplaces+k;-GH 41222..00 ==''))))) W 66wPPP!!'?;;;455<<>>>>>>>rr?z editable-modestrictctji|jdiitdrJ|}|d||d|d|ttd ddS)N_metarrrz__editable__.*) rrrr8rrrn#prepare_metadata_for_build_editabler9r6nextr1r>s r"test_editable_with_config_settingsz7TestBuildMetaBackend.test_editable_with_config_settingss Bd4BgrBBCCC=='')))))..00 99'?SSS$$V_gFFF tDMM$6$67G$H$HIIJJJJJr) setup_literal requirementsz'foo'rz['foo']z'foo\n'z 'foo\n\n'z['foo', 'bar']barz'# Has a comment line\nfoo'z'foo # Has an inline comment'z'foo \\\n >=3.0'zfoo>=3.0z 'foo\nbar'z 'foo\nbar\n'z['foo\n', 'bar\n'] use_wheelTFc:td|tdd}tj||}|r|j}n|j}t|}|} |t| ksJdS)Na from setuptools import setup setup( name="qux", version="0.0.0", py_modules=["hello"], setup_requires={setup_literal}, ) )rGrerf)r formatrrrrnr{rr|) rrGrHrJrrrw get_requiresrr~s rtest_setup_requiresz(TestBuildMetaBackend.test_setup_requiress&   f=f11  * 5..00  F(ELL(EL,''6&>>))))))rctdtdddd}tj||}|}|dgksJdS)Nzd [project] name = "proj" version = "42" z __import__('setuptools').setup( setup_requires=["foo"], py_modules = ["hello", "world"] ) z'hello'z'world')rrgrhrr)r rrrrnr{)rrrrwsetup_requiress r'test_setup_requires_with_auto_discoveryz99"], ) z[ def run(): print('hello') rfr)r rrrrnr1r2rr)rrrrwrs r test_dont_install_setup_requiresz5TestBuildMetaBackend.test_dont_install_setup_requires5s     * 5..00 7???33 H 66x@@@@@rrgaD import os import sys __import__('setuptools').setup( name='foo', version='0.0.0', ) sys_argv = os.path.abspath(sys.argv[0]) file_path = os.path.abspath('setup.py') assert sys_argv == file_path ctj|j|}t jt 5|dddddS#1swxYwYdSNr)rrr_sys_argv_0_passthroughrnr;r*AssertionErrorrr,s rtest_sys_argv_passthroughz.TestBuildMetaBackend.test_sys_argv_passthroughhs 4/000..00 ]> * * . .  % %f - - - . . . . . . . . . . . . . . . . . .sA**A.1A.a import os assert os.path.isabs(__file__) __import__('setuptools').setup( name='foo', version='0.0.0', py_modules=['hello'], setup_requires=['six'], ) ctj|j|}|ddSrU)rrr_setup_py_file_abspathrnrr,s rtest_setup_py_file_abspathz/TestBuildMetaBackend.test_setup_py_file_abspath}s@ 4.///..00 !!&)))))r build_hook)rrcddi}tj|tjd}t jt |5t||dddddS#1swxYwYdS)NrgrzNo distribution was found.r'r)rrrreescaper;r* ValueErrorra)rrwr\rmsgs rtest_build_with_empty_setuppyz2TestBuildMetaBackend.test_build_with_empty_setuppysR  5i455 ]:S 1 1 1 7 7 .GM: . .v 6 6 6 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7sA//A36A3)+rrrrrnr;fixturerrwrrrmark parametrizerSETUP_SCRIPT_STUBrrrrrrrrrr"r%r r)r-r8r6r:r@rFrNrQrSrVrXrZr[rbr rrrkrks*L<<<V^5!!!++"!+ 222 222 !!!( [\+=>>0I0I?>0Id [^d4E-FGGEJEJHGEJN=(=(=(~BBBMMMCCC"BBBVVV2LLL2FFFJJJ4***2D   ,T   ##$...$   +, ! !CCC * * *??? [./81L0MNNKKONK [) ug   % ! E7 # u~ . +eW 5 -w 7 :, / UEN + uen - "UEN 3   [[4-88#*#*98!"#*J)))8AAAD DD   $... DD     ***  [\+IJJ77KJ777rrkceZdZdZdZdZdS)TestBuildMetaLegacyBackendz setuptools.build_meta:__legacy__ctj|j|}|ddSrU)rrrr)rnrr,s rr-z@TestBuildMetaLegacyBackend.test_build_sdist_relative_path_imports@ 43444..00 !!&)))))rctj|j|}|ddSrU)rrrrVrnrr,s rrXz4TestBuildMetaLegacyBackend.test_sys_argv_passthroughs@ 4/000..00 !!&)))))rN)rrrrr-rXr rrrhrhs75L********rrhcPd}tjt|ddgd}|||}d|vsJd|vsJit jdd i}gd}|||| }d|vsJdS) Nz [build-system] requires = ["setuptools"] build-backend = "setuptools.build_meta" [project] name = "myproj" version = "42" r)rzmymod.py)pipinstallz--no-build-isolationz-er)rz#running setup.py develop for myprojzcreated wheel for myprojSETUPTOOLS_ENABLE_FEATURESzlegacy-editable)rr)rrrr runlowerr1r])venvrur pyprojectcmdoutputrs rtest_legacy_editable_installrusI J$y//rBBCCC @ ? ?C XXcvX & & , , . .F 0 > > > > % / / / / JRZ I57H I IC ? ? ?C XXcv3X / / 5 5 7 7F 0F : : : : : :rz/ignore::setuptools.SetuptoolsDeprecationWarningc||d}|dz t|dtd}|gksJdS)zHSetuptools should be resilient to setup.py with ``sys.exit(0)`` (#3973).zr import sys, setuptools setuptools.setup(name='foo', version='0.0.0') sys.exit(0) rgrrrrmN)r\ write_textr r"r{ monkeypatchtmp_pathsetuppyrcs rtest_sys_exit_0_in_setuppyr|syh G  &&tG}}w&GGG(?@@@G  / / 1 1R 7 7 7 7 7 7rc||d}|dz |dtjtd5t d}|ddddS#1swxYwYdS) Nz"import sys; sys.exit('some error')rgrrz some errorr'rrm)r\rwr;r* SystemExitr"r{rxs rtest_system_exit_in_setuppyrsh2G &&w&AAA z 6 6 6//,CDDD,,...//////////////////s %A??BB),rJr_r1r^r rNsysr concurrentrpathlibrtypingrrrrr;jaracorpackaging.requirementsr textwrapr rfintgetenvr7builtin_module_namesrArdskipifplatform pytestmarkrr"r3rrkrhrufilterwarningsr|rr rrrs   ......6 #ibi.66 7 7 0 0[  LG'   )))))))) P P P P P# P P PF33333)333,D    D   &D    D   (D    D   . DD   4T    D   (T    7D   Q| ~j 7j 7j 7j 7j 7j 7j 7j 7Z*****!5***$;;;0MNN 8 8ON 8/////r