Xsphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextChinese (Simplified)}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget(/translations/zh_CN/staging/magic-numbermodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget(/translations/zh_TW/staging/magic-numbermodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget(/translations/it_IT/staging/magic-numbermodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget(/translations/ja_JP/staging/magic-numbermodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget(/translations/ko_KR/staging/magic-numbermodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget(/translations/sp_SP/staging/magic-numbermodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageEnglishuh1h hh _documenthsourceNlineNubhtarget)}(h.. _magicnumbers:h]h}(h]h ]h"]h$]h&]refid magicnumbersuh1hhKhhhhhB/var/lib/git/docbuild/linux/Documentation/staging/magic-number.rstubhsection)}(hhh](htitle)}(hLinux magic numbersh]hLinux magic numbers}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubh paragraph)}(hThis file is a registry of magic numbers which are in use. When you add a magic number to a structure, you should also add it to this file, since it is best if the magic numbers used by various structures are unique.h]hThis file is a registry of magic numbers which are in use. When you add a magic number to a structure, you should also add it to this file, since it is best if the magic numbers used by various structures are unique.}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hXIt is a **very** good idea to protect kernel data structures with magic numbers. This allows you to check at run time whether (a) a structure has been clobbered, or (b) you've passed the wrong structure to a routine. This last is especially useful --- particularly when you are passing pointers to structures via a void * pointer. The tty code, for example, does this frequently to pass driver-specific and line discipline-specific structures back and forth.h](hIt is a }(hhhhhNhNubhstrong)}(h**very**h]hvery}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhubhX good idea to protect kernel data structures with magic numbers. This allows you to check at run time whether (a) a structure has been clobbered, or (b) you’ve passed the wrong structure to a routine. This last is especially useful --- particularly when you are passing pointers to structures via a void * pointer. The tty code, for example, does this frequently to pass driver-specific and line discipline-specific structures back and forth.}(hhhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK hhhhubh)}(h\The way to use magic numbers is to declare them at the beginning of the structure, like so::h]h[The way to use magic numbers is to declare them at the beginning of the structure, like so:}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh literal_block)}(h8struct tty_ldisc { int magic; ... };h]h8struct tty_ldisc { int magic; ... };}hjsbah}(h]h ]h"]h$]h&] xml:spacepreserveuh1jhhhKhhhhubh)}(hXAPlease follow this discipline when you are adding future enhancements to the kernel! It has saved me countless hours of debugging, especially in the screwy cases where an array has been overrun and structures following the array have been overwritten. Using this discipline, these cases get detected quickly and safely.h]hXAPlease follow this discipline when you are adding future enhancements to the kernel! It has saved me countless hours of debugging, especially in the screwy cases where an array has been overrun and structures following the array have been overwritten. Using this discipline, these cases get detected quickly and safely.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(h Changelog::h]h Changelog:}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK!hhhhubj)}(hX Theodore Ts'o 31 Mar 94 The magic table is current to Linux 2.1.55. Michael Chastain 22 Sep 1997 Now it should be up to date with Linux 2.1.112. Because we are in feature freeze time it is very unlikely that something will change before 2.2.x. The entries are sorted by number field. Krzysztof G. Baranowski 29 Jul 1998 Updated the magic table to Linux 2.5.45. Right over the feature freeze, but it is possible that some new magic numbers will sneak into the kernel before 2.6.x yet. Petr Baudis 03 Nov 2002 Updated the magic table to Linux 2.5.74. Fabian Frederick 09 Jul 2003h]hX Theodore Ts'o 31 Mar 94 The magic table is current to Linux 2.1.55. Michael Chastain 22 Sep 1997 Now it should be up to date with Linux 2.1.112. Because we are in feature freeze time it is very unlikely that something will change before 2.2.x. The entries are sorted by number field. Krzysztof G. Baranowski 29 Jul 1998 Updated the magic table to Linux 2.5.45. Right over the feature freeze, but it is possible that some new magic numbers will sneak into the kernel before 2.6.x yet. Petr Baudis 03 Nov 2002 Updated the magic table to Linux 2.5.74. Fabian Frederick 09 Jul 2003}hj3sbah}(h]h ]h"]h$]h&]jjuh1jhhhK#hhhhubhtable)}(hhh]htgroup)}(hhh](hcolspec)}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1jKhjHubjL)}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1jKhjHubjL)}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1jKhjHubjL)}(hhh]h}(h]h ]h"]h$]h&]colwidthK*uh1jKhjHubhthead)}(hhh]hrow)}(hhh](hentry)}(hhh]h)}(h Magic Nameh]h Magic Name}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKEhjubah}(h]h ]h"]h$]h&]uh1jhj|ubj)}(hhh]h)}(hNumberh]hNumber}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKEhjubah}(h]h ]h"]h$]h&]uh1jhj|ubj)}(hhh]h)}(h Structureh]h Structure}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKEhjubah}(h]h ]h"]h$]h&]uh1jhj|ubj)}(hhh]h)}(hFileh]hFile}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKEhjubah}(h]h ]h"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]uh1jzhjwubah}(h]h ]h"]h$]h&]uh1juhjHubhtbody)}(hhh](j{)}(hhh](j)}(hhh]h)}(hPG_MAGICh]hPG_MAGIC}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKGhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(h'P'h]h‘P’}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKGhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(hpg_{read,write}_hdrh]hpg_{read,write}_hdr}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKGhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(h``include/uapi/linux/pg.h``h]hliteral)}(hj;h]hinclude/uapi/linux/pg.h}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j=hj9ubah}(h]h ]h"]h$]h&]uh1hhhhKGhj6ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jzhjubj{)}(hhh](j)}(hhh]h)}(hAPM_BIOS_MAGICh]hAPM_BIOS_MAGIC}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKHhjaubah}(h]h ]h"]h$]h&]uh1jhj^ubj)}(hhh]h)}(h0x4101h]h0x4101}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKHhjxubah}(h]h ]h"]h$]h&]uh1jhj^ubj)}(hhh]h)}(hapm_userh]hapm_user}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKHhjubah}(h]h ]h"]h$]h&]uh1jhj^ubj)}(hhh]h)}(h``arch/x86/kernel/apm_32.c``h]j>)}(hjh]harch/x86/kernel/apm_32.c}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j=hjubah}(h]h ]h"]h$]h&]uh1hhhhKHhjubah}(h]h ]h"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]uh1jzhjubj{)}(hhh](j)}(hhh]h)}(h FASYNC_MAGICh]h FASYNC_MAGIC}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKIhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(h0x4601h]h0x4601}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKIhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(h fasync_structh]h fasync_struct}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKIhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(h``include/linux/fs.h``h]j>)}(hjh]hinclude/linux/fs.h}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j=hjubah}(h]h ]h"]h$]h&]uh1hhhhKIhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jzhjubj{)}(hhh](j)}(hhh]h)}(h SLIP_MAGICh]h SLIP_MAGIC}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKJhj=ubah}(h]h ]h"]h$]h&]uh1jhj:ubj)}(hhh]h)}(h0x5302h]h0x5302}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKJhjTubah}(h]h ]h"]h$]h&]uh1jhj:ubj)}(hhh]h)}(hsliph]hslip}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKJhjkubah}(h]h ]h"]h$]h&]uh1jhj:ubj)}(hhh]h)}(h``drivers/net/slip/slip.h``h]j>)}(hjh]hdrivers/net/slip/slip.h}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j=hjubah}(h]h ]h"]h$]h&]uh1hhhhKJhjubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jzhjubj{)}(hhh](j)}(hhh]h)}(h BAYCOM_MAGICh]h BAYCOM_MAGIC}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(h19730510h]h19730510}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(h baycom_stateh]h baycom_state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(h%``drivers/net/hamradio/baycom_epp.c``h]j>)}(hjh]h!drivers/net/hamradio/baycom_epp.c}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j=hjubah}(h]h ]h"]h$]h&]uh1hhhhKKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jzhjubj{)}(hhh](j)}(hhh]h)}(h HDLCDRV_MAGICh]h HDLCDRV_MAGIC}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKLhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(h 0x5ac6e778h]h 0x5ac6e778}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKLhj0ubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(h hdlcdrv_stateh]h hdlcdrv_state}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKLhjGubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(h``include/linux/hdlcdrv.h``h]j>)}(hjch]hinclude/linux/hdlcdrv.h}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1j=hjaubah}(h]h ]h"]h$]h&]uh1hhhhKLhj^ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jzhjubj{)}(hhh](j)}(hhh]h)}(hKV_MAGICh]hKV_MAGIC}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKMhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(h 0x5f4b565fh]h 0x5f4b565f}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKMhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(h kernel_vars_sh]h kernel_vars_s}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKMhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(h)``arch/mips/include/asm/sn/klkernvars.h``h]j>)}(hjh]h%arch/mips/include/asm/sn/klkernvars.h}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j=hjubah}(h]h ]h"]h$]h&]uh1hhhhKMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jzhjubj{)}(hhh](j)}(hhh]h)}(h CODA_MAGICh]h CODA_MAGIC}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKNhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(h 0xC0DAC0DAh]h 0xC0DAC0DA}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKNhj ubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(hcoda_file_infoh]hcoda_file_info}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKNhj#ubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(h``fs/coda/coda_fs_i.h``h]j>)}(hj?h]hfs/coda/coda_fs_i.h}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j=hj=ubah}(h]h ]h"]h$]h&]uh1hhhhKNhj:ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jzhjubj{)}(hhh](j)}(hhh]h)}(h YAM_MAGICh]h YAM_MAGIC}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKOhjcubah}(h]h ]h"]h$]h&]uh1jhj`ubj)}(hhh]h)}(h 0xF10A7654h]h 0xF10A7654}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKOhjzubah}(h]h ]h"]h$]h&]uh1jhj`ubj)}(hhh]h)}(hyam_porth]hyam_port}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKOhjubah}(h]h ]h"]h$]h&]uh1jhj`ubj)}(hhh]h)}(h``drivers/net/hamradio/yam.c``h]j>)}(hjh]hdrivers/net/hamradio/yam.c}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j=hjubah}(h]h ]h"]h$]h&]uh1hhhhKOhjubah}(h]h ]h"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]uh1jzhjubj{)}(hhh](j)}(hhh]h)}(h CCB_MAGICh]h CCB_MAGIC}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKPhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(h 0xf2691ad2h]h 0xf2691ad2}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKPhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(hccbh]hccb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKPhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(h``drivers/scsi/ncr53c8xx.c``h]j>)}(hjh]hdrivers/scsi/ncr53c8xx.c}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j=hjubah}(h]h ]h"]h$]h&]uh1hhhhKPhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jzhjubj{)}(hhh](j)}(hhh]h)}(hQUEUE_MAGIC_FREEh]hQUEUE_MAGIC_FREE}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKQhj?ubah}(h]h ]h"]h$]h&]uh1jhj<ubj)}(hhh]h)}(h 0xf7e1c9a3h]h 0xf7e1c9a3}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKQhjVubah}(h]h ]h"]h$]h&]uh1jhj<ubj)}(hhh]h)}(h queue_entryh]h queue_entry}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKQhjmubah}(h]h ]h"]h$]h&]uh1jhj<ubj)}(hhh]h)}(h``drivers/scsi/arm/queue.c``h]j>)}(hjh]hdrivers/scsi/arm/queue.c}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j=hjubah}(h]h ]h"]h$]h&]uh1hhhhKQhjubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jzhjubj{)}(hhh](j)}(hhh]h)}(hQUEUE_MAGIC_USEDh]hQUEUE_MAGIC_USED}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKRhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(h 0xf7e1cc33h]h 0xf7e1cc33}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKRhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(h queue_entryh]h queue_entry}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKRhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(h``drivers/scsi/arm/queue.c``h]j>)}(hjh]hdrivers/scsi/arm/queue.c}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j=hjubah}(h]h ]h"]h$]h&]uh1hhhhKRhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jzhjubj{)}(hhh](j)}(hhh]h)}(h NMI_MAGICh]h NMI_MAGIC}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKShjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(h0x48414d4d455201h]h0x48414d4d455201}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKShj2ubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(hnmi_sh]hnmi_s}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKShjIubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(h"``arch/mips/include/asm/sn/nmi.h``h]j>)}(hjeh]harch/mips/include/asm/sn/nmi.h}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1j=hjcubah}(h]h ]h"]h$]h&]uh1hhhhKShj`ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jzhjubeh}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]colsKuh1jFhjCubah}(h]h ]h"]h$]h&]uh1jAhhhhhhhNubeh}(h](linux-magic-numbersheh ]h"](linux magic numbers magicnumberseh$]h&]uh1hhhhhhhhKexpect_referenced_by_name}jhsexpect_referenced_by_id}hhsubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(hN generatorN datestampN source_linkN source_urlN toc_backlinksjfootnote_backlinksK sectnum_xformKstrip_commentsNstrip_elements_with_classesN strip_classesN report_levelK halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerjerror_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourceh _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}refids}h]hasnameids}(jhjju nametypes}(jjuh}(hhjhu footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}Rparse_messages]transform_messages]hsystem_message)}(hhh]h)}(hhh]h2Hyperlink target "magicnumbers" is not referenced.}hj2sbah}(h]h ]h"]h$]h&]uh1hhj/ubah}(h]h ]h"]h$]h&]levelKtypeINFOsourcehlineKuh1j-uba transformerN include_log] decorationNhhub.