€•ŽPŒsphinx.addnodes”Œdocument”“”)�”}”(Œ rawsource”Œ”Œchildren”]”(Œ translations”Œ LanguagesNode”“”)�”}”(hhh]”(hŒ pending_xref”“”)�”}”(hhh]”Œdocutils.nodes”ŒText”“”ŒChinese (Simplified)”…”�”}”Œparent”hsbaŒ attributes”}”(Œids”]”Œclasses”]”Œnames”]”Œdupnames”]”Œbackrefs”]”Œ refdomain”Œstd”Œreftype”Œdoc”Œ reftarget”Œ#/translations/zh_CN/tools/jobserver”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)�”}”(hhh]”hŒChinese (Traditional)”…”�”}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ#/translations/zh_TW/tools/jobserver”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒItalian”…”�”}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ#/translations/it_IT/tools/jobserver”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒJapanese”…”�”}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ#/translations/ja_JP/tools/jobserver”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒKorean”…”�”}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ#/translations/ko_KR/tools/jobserver”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒPortuguese (Brazilian)”…”�”}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ#/translations/pt_BR/tools/jobserver”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒSpanish”…”�”}”hh–sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ#/translations/sp_SP/tools/jobserver”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒcomment”“”)�”}”(hŒ SPDX-License-Identifier: GPL-2.0”h]”hŒ SPDX-License-Identifier: GPL-2.0”…”�”}”hh·sbah}”(h]”h ]”h"]”h$]”h&]”Œ xml:space”Œpreserve”uh1hµhhh²hh³Œ=/var/lib/git/docbuild/linux/Documentation/tools/jobserver.rst”h´KubhŒsection”“”)�”}”(hhh]”(hŒtitle”“”)�”}”(hŒJob server module”h]”hŒJob server module”…”�”}”(hhÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhhÊh²hh³hÇh´KubhŒindex”“”)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(Œpair”Œmodule; lib.python.jobserver”Œmodule-lib.python.jobserver”hNt”auh1hÝhhÊh²hh³Nh´NubhŒ paragraph”“”)�”}”(hŒ@Interacts with the POSIX jobserver during the Kernel build time.”h]”hŒ@Interacts with the POSIX jobserver during the Kernel build time.”…”�”}”(hhðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³Œl/var/lib/git/docbuild/linux/Documentation/../tools/lib/python/jobserver.py:docstring of lib.python.jobserver”h´KhhÊh²hubhï)�”}”(hŒPA "normal" jobserver task, like the one initiated by a make subprocess would do:”h]”hŒTA “normalâ€� jobserver task, like the one initiated by a make subprocess would do:”…”�”}”(hhÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hþh´KhhÊh²hubhŒ block_quote”“”)�”}”(hŒß- open read/write file descriptors to communicate with the job server; - ask for one slot by calling:: claim = os.read(reader, 1) - when the job finishes, call:: os.write(writer, b"+") # os.write(writer, claim) ”h]”hŒ bullet_list”“”)�”}”(hhh]”(hŒ list_item”“”)�”}”(hŒDopen read/write file descriptors to communicate with the job server;”h]”hï)�”}”(hjh]”hŒDopen read/write file descriptors to communicate with the job server;”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hþh´Khjubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubj)�”}”(hŒ, >]”h]”(hŒclass”…”�”}”(hjWh²hh³Nh´NubhŒdesc_sig_space”“”)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”Œw”ah"]”h$]”h&]”uh1j_hjWubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jUhjQh²hh³Œz/var/lib/git/docbuild/linux/Documentation/../tools/lib/python/jobserver.py:docstring of lib.python.jobserver.JobserverExec”h´KubhŒ desc_addname”“”)�”}”(hŒlib.python.jobserver.”h]”hŒlib.python.jobserver.”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”(Œ sig-prename”Œ descclassname”eh"]”h$]”h&]”hÅhÆuh1jwhjQh²hh³jvh´KubhŒ desc_name”“”)�”}”(hŒ JobserverExec”h]”hŒ JobserverExec”…”�”}”(hj‹h²hh³Nh´Nubah}”(h]”h ]”(Œsig-name”Œdescname”eh"]”h$]”h&]”hÅhÆuh1j‰hjQh²hh³jvh´Kubeh}”(h]”jHah ]”(Œsig”Œ sig-object”eh"]”h$]”h&]”Œmodule”Œlib.python.jobserver”Œclass”hŒfullname”j�Œ _toc_parts”j¤j�†”Œ _toc_name”j�uh1jOh³jvh´KhjLh²hubhŒ desc_content”“”)�”}”(hhh]”(hï)�”}”(hŒBases: :py:class:`object`”h]”(hŒBases: ”…”�”}”(hj¯h²hh³Nh´Nubh)�”}”(hŒ:py:class:`object`”h]”j–)�”}”(hj¹h]”hŒobject”…”�”}”(hj»h²hh³Nh´Nubah}”(h]”h ]”(Œxref”Œpy”Œpy-class”eh"]”h$]”h&]”uh1j•hj·ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”Œtools/jobserver”Œ refdomain”jÆŒreftype”Œclass”Œ refexplicit”‰Œrefwarn”‰Œ py:module”j¤Œpy:class”j�Œ reftarget”Œobject”uh1hh³Œl/var/lib/git/docbuild/linux/Documentation/../tools/lib/python/jobserver.py:docstring of lib.python.jobserver”h´Khj¯ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîh³Œz/var/lib/git/docbuild/linux/Documentation/../tools/lib/python/jobserver.py:docstring of lib.python.jobserver.JobserverExec”h´Khj¬h²hubhï)�”}”(hŒ0Claim all slots from make using POSIX Jobserver.”h]”hŒ0Claim all slots from make using POSIX Jobserver.”…”�”}”(hjäh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³Œz/var/lib/git/docbuild/linux/Documentation/../tools/lib/python/jobserver.py:docstring of lib.python.jobserver.JobserverExec”h´Khj¬h²hubhï)�”}”(hŒThe main methods here are:”h]”hŒThe main methods here are:”…”�”}”(hjóh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³jòh´Khj¬h²hubj)�”}”(hhh]”(j)�”}”(hŒopen(): reserves all slots;”h]”hï)�”}”(hjh]”hŒopen(): reserves all slots;”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³jòh´Khjubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjh²hh³jòh´Nubj)�”}”(hŒ4close(): method returns all used slots back to make;”h]”hï)�”}”(hjh]”hŒ4close(): method returns all used slots back to make;”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³jòh´Khjubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjh²hh³jòh´Nubj)�”}”(hŒKrun(): executes a command setting PARALLELISM=. ”h]”hï)�”}”(hŒIrun(): executes a command setting PARALLELISM=.”h]”hŒIrun(): executes a command setting PARALLELISM=.”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³jòh´Khj2ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjh²hh³Œ€/var/lib/git/docbuild/linux/Documentation/../tools/lib/python/jobserver.py:docstring of lib.python.jobserver.JobserverExec.close”h´Nubeh}”(h]”h ]”h"]”h$]”h&]”j…j†uh1jh³jòh´Khj¬h²hubhÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jFŒ3close() (lib.python.jobserver.JobserverExec method)”Œ(lib.python.jobserver.JobserverExec.close”hNt”auh1hÝhj¬h²hh³Œ€/var/lib/git/docbuild/linux/Documentation/../tools/lib/python/jobserver.py:docstring of lib.python.jobserver.JobserverExec.close”h´NubjK)�”}”(hhh]”(jP)�”}”(hŒJobserverExec.close()”h]”(jŠ)�”}”(hŒclose”h]”hŒclose”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”(j–j—eh"]”h$]”h&]”hÅhÆuh1j‰hjch²hh³Œ€/var/lib/git/docbuild/linux/Documentation/../tools/lib/python/jobserver.py:docstring of lib.python.jobserver.JobserverExec.close”h´KubhŒdesc_parameterlist”“”)�”}”(hŒ()”h]”h}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jvhjch²hh³juh´Kubeh}”(h]”j]ah ]”(jžjŸeh"]”h$]”h&]”j£Œlib.python.jobserver”j¥j�j¦ŒJobserverExec.close”j§jˆŒ JobserverExec”Œclose”‡”j©ŒJobserverExec.close()”uh1jOh³juh´Khj`h²hubj«)�”}”(hhh]”hï)�”}”(hŒ'Return all reserved slots to Jobserver.”h]”hŒ'Return all reserved slots to Jobserver.”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³j_h´KhjŽh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jªhj`h²hh³juh´Kubeh}”(h]”h ]”(Œpy”Œmethod”eh"]”h$]”h&]”Œdomain”j¨Œobjtype”j©Œdesctype”j©Œnoindex”‰Œ noindexentry”‰Œnocontentsentry”‰uh1jJh²hhj¬h³j_h´NubhÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jFŒ2open() (lib.python.jobserver.JobserverExec method)”Œ'lib.python.jobserver.JobserverExec.open”hNt”auh1hÝhj¬h²hh³Œ/var/lib/git/docbuild/linux/Documentation/../tools/lib/python/jobserver.py:docstring of lib.python.jobserver.JobserverExec.open”h´NubjK)�”}”(hhh]”(jP)�”}”(hŒJobserverExec.open()”h]”(jŠ)�”}”(hŒopen”h]”hŒopen”…”�”}”(hjÉh²hh³Nh´Nubah}”(h]”h ]”(j–j—eh"]”h$]”h&]”hÅhÆuh1j‰hjÅh²hh³Œ/var/lib/git/docbuild/linux/Documentation/../tools/lib/python/jobserver.py:docstring of lib.python.jobserver.JobserverExec.open”h´Kubjw)�”}”(hŒ()”h]”h}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jvhjÅh²hh³j×h´Kubeh}”(h]”j¿ah ]”(jžjŸeh"]”h$]”h&]”j£Œlib.python.jobserver”j¥j�j¦ŒJobserverExec.open”j§jèŒ JobserverExec”Œopen”‡”j©ŒJobserverExec.open()”uh1jOh³j×h´KhjÂh²hubj«)�”}”(hhh]”hï)�”}”(hŒ3Reserve all available slots to be claimed later on.”h]”hŒ3Reserve all available slots to be claimed later on.”…”�”}”(hjñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³jÁh´Khjîh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jªhjÂh²hh³j×h´Kubeh}”(h]”h ]”(Œpy”Œmethod”eh"]”h$]”h&]”j­jj®j j¯j j°‰j±‰j²‰uh1jJh²hhj¬h³jÁh´NubhÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jFŒ1run() (lib.python.jobserver.JobserverExec method)”Œ&lib.python.jobserver.JobserverExec.run”hNt”auh1hÝhj¬h²hh³Œ~/var/lib/git/docbuild/linux/Documentation/../tools/lib/python/jobserver.py:docstring of lib.python.jobserver.JobserverExec.run”h´NubjK)�”}”(hhh]”(jP)�”}”(hŒ'JobserverExec.run(cmd, *args, **pwargs)”h]”(jŠ)�”}”(hŒrun”h]”hŒrun”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”(j–j—eh"]”h$]”h&]”hÅhÆuh1j‰hjh²hh³Œ~/var/lib/git/docbuild/linux/Documentation/../tools/lib/python/jobserver.py:docstring of lib.python.jobserver.JobserverExec.run”h´Kubjw)�”}”(hŒcmd, *args, **pwargs”h]”(hŒdesc_parameter”“”)�”}”(hŒcmd”h]”hŒ desc_sig_name”“”)�”}”(hŒcmd”h]”hŒcmd”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”Œn”ah"]”h$]”h&]”uh1j<hj8ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j6hj2ubj7)�”}”(hŒ*args”h]”(hŒdesc_sig_operator”“”)�”}”(hŒ*”h]”hŒ*”…”�”}”(hjYh²hh³Nh´Nubah}”(h]”h ]”Œo”ah"]”h$]”h&]”uh1jWhjSubj=)�”}”(hŒargs”h]”hŒargs”…”�”}”(hjhh²hh³Nh´Nubah}”(h]”h ]”jIah"]”h$]”h&]”uh1j<hjSubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j6hj2ubj7)�”}”(hŒ**pwargs”h]”(jX)�”}”(hŒ**”h]”hŒ**”…”�”}”(hj€h²hh³Nh´Nubah}”(h]”h ]”jdah"]”h$]”h&]”uh1jWhj|ubj=)�”}”(hŒpwargs”h]”hŒpwargs”…”�”}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”jIah"]”h$]”h&]”uh1j<hj|ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j6hj2ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jvhjh²hh³j1h´Kubeh}”(h]”jah ]”(jžjŸeh"]”h$]”h&]”j£Œlib.python.jobserver”j¥j�j¦ŒJobserverExec.run”j§j®Œ JobserverExec”Œrun”‡”j©ŒJobserverExec.run()”uh1jOh³j1h´Khjh²hubj«)�”}”(hhh]”(hï)�”}”(hŒÀRun a command setting PARALLELISM env variable to the number of available job slots (claim) + 1, e.g. it will reserve claim slots to do the actual build work, plus one to monitor its children.”h]”hŒÀRun a command setting PARALLELISM env variable to the number of available job slots (claim) + 1, e.g. it will reserve claim slots to do the actual build work, plus one to monitor its children.”…”�”}”(hj·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³jh´Khj´h²hubhï)�”}”(hŒpAny %PARALLELISM% in the command's arguments is replaced by the same number, or by 1 when there is no jobserver.”h]”hŒrAny %PARALLELISM% in the command’s arguments is replaced by the same number, or by 1 when there is no jobserver.”…”�”}”(hjÅh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³jh´Khj´h²hubeh}”(h]”h ]”h"]”h$]”h&]”uh1jªhjh²hh³j1h´Kubeh}”(h]”h ]”(Œpy”Œmethod”eh"]”h$]”h&]”j­jÜj®jÝj¯jÝj°‰j±‰j²‰uh1jJh²hhj¬h³jh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jªhjLh²hh³jvh´Kubeh}”(h]”h ]”(Œpy”Œclass”eh"]”h$]”h&]”j­jêj®jëj¯jëj°‰j±‰j²‰uh1jJh²hhhÊh³Nh´NubhÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jFŒ'warn() (in module lib.python.jobserver)”Œlib.python.jobserver.warn”hNt”auh1hÝhhÊh²hh³Nh´NubjK)�”}”(hhh]”(jP)�”}”(hŒwarn(text, *args)”h]”(jx)�”}”(hŒlib.python.jobserver.”h]”hŒlib.python.jobserver.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”(j„j…eh"]”h$]”h&]”hÅhÆuh1jwhjh²hh³Œq/var/lib/git/docbuild/linux/Documentation/../tools/lib/python/jobserver.py:docstring of lib.python.jobserver.warn”h´KubjŠ)�”}”(hŒwarn”h]”hŒwarn”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”(j–j—eh"]”h$]”h&]”hÅhÆuh1j‰hjh²hh³jh´Kubjw)�”}”(hŒ text, *args”h]”(j7)�”}”(hŒtext”h]”j=)�”}”(hŒtext”h]”hŒtext”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”jIah"]”h$]”h&]”uh1j<hj%ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j6hj!ubj7)�”}”(hŒ*args”h]”(jX)�”}”(hŒ*”h]”hŒ*”…”�”}”(hjAh²hh³Nh´Nubah}”(h]”h ]”jdah"]”h$]”h&]”uh1jWhj=ubj=)�”}”(hŒargs”h]”hŒargs”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”jIah"]”h$]”h&]”uh1j<hj=ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j6hj!ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jvhjh²hh³jh´Kubeh}”(h]”jûah ]”(jžjŸeh"]”h$]”h&]”j£Œlib.python.jobserver”j¥hj¦jj§joj†”j©Œwarn()”uh1jOh³jh´Khjýh²hubj«)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jªhjýh²hh³jh´Kubeh}”(h]”h ]”(Œpy”Œfunction”eh"]”h$]”h&]”j­j~j®jj¯jj°‰j±‰j²‰uh1jJh²hhhÊh³Nh´Nubeh}”(h]”(hìŒjob-server-module”eh ]”h"]”Œjob server module”ah$]”h&]”uh1hÈhhh²hh³hÇh´Kubeh}”(h]”h ]”h"]”h$]”h&]”Œsource”hÇuh1hŒcurrent_source”NŒ current_line”NŒsettings”Œdocutils.frontend”ŒValues”“”)�”}”(hÍNŒ generator”NŒ datestamp”NŒ source_link”NŒ source_url”NŒ toc_backlinks”Œentry”Œfootnote_backlinks”KŒ sectnum_xform”KŒstrip_comments”NŒstrip_elements_with_classes”NŒ strip_classes”NŒ report_level”KŒ halt_level”KŒexit_status_level”KŒdebug”NŒwarning_stream”NŒ traceback”ˆŒinput_encoding”Œ utf-8-sig”Œinput_encoding_error_handler”Œstrict”Œoutput_encoding”Œutf-8”Œoutput_encoding_error_handler”j®Œerror_encoding”Œutf-8”Œerror_encoding_error_handler”Œbackslashreplace”Œ language_code”Œen”Œrecord_dependencies”NŒconfig”NŒ id_prefix”hŒauto_id_prefix”Œid”Œ dump_settings”NŒdump_internals”NŒdump_transforms”NŒdump_pseudo_xml”NŒexpose_internals”NŒstrict_visitor”NŒ_disable_config”NŒ_source”hÇŒ _destination”NŒ _config_files”]”Œ7/var/lib/git/docbuild/linux/Documentation/docutils.conf”aŒfile_insertion_enabled”ˆŒ raw_enabled”KŒline_length_limit”M'Œpep_references”NŒ pep_base_url”Œhttps://peps.python.org/”Œpep_file_url_template”Œpep-%04d”Œrfc_references”NŒ rfc_base_url”Œ&https://datatracker.ietf.org/doc/html/”Œ tab_width”KŒtrim_footnote_reference_space”‰Œsyntax_highlight”Œlong”Œ smart_quotes”ˆŒsmartquotes_locales”]”Œcharacter_level_inline_markup”‰Œdoctitle_xform”‰Œ docinfo_xform”KŒsectsubtitle_xform”‰Œ image_loading”Œlink”Œembed_stylesheet”‰Œcloak_email_addresses”ˆŒsection_self_link”‰Œenv”NubŒreporter”NŒindirect_targets”]”Œsubstitution_defs”}”Œsubstitution_names”}”Œrefnames”}”Œrefids”}”Œnameids”}”jˆj…sŒ nametypes”}”jˆ‰sh}”(j…hÊhìhŒtarget”“”)�”}”(hhh]”h}”(h]”hìah ]”h"]”h$]”h&]”Œismod”ˆuh1jõh³Œl/var/lib/git/docbuild/linux/Documentation/../tools/lib/python/jobserver.py:docstring of lib.python.jobserver”h´KhhÊh²hubjHjQj]jcj¿jÅjjjûjuŒ footnote_refs”}”Œ citation_refs”}”Œ autofootnotes”]”Œautofootnote_refs”]”Œsymbol_footnotes”]”Œsymbol_footnote_refs”]”Œ footnotes”]”Œ citations”]”Œautofootnote_start”KŒsymbol_footnote_start”KŒ id_counter”Œ collections”ŒCounter”“”}”…”R”Œparse_messages”]”Œtransform_messages”]”Œ transformer”NŒ include_log”]”Œ decoration”Nh²hub.