Caml1999I0311 F#"Ƞ4Stdlib__StringLabels!t8@@@A&stringO@@@g@@@@0stringLabels.mliRR@@@@@A@$make@#intA@@@h@$charB@@@i @@@j@@k@@l@UU@@/A@$init@@@@m!f@'@@@n#@@@o@@pA@@@q@@r@@s@?[@[@@PB@%emptyN@@@t@LbMb@@]C@(of_bytes@%bytesC@@@uc@@@v@@w@ahbh@@rD@(to_bytes@r@@@x@@@y@@z@tohhuoh@@E@&length@@@@{w@@@|@@}.%string_lengthAA @@@vv%@@F@#get@@@@~@@@@@@@@@@@0%string_safe_getBA@@@@yllyl@@G@&concat#sep@@@@$listI@@@@@@@@@@@@@@@@H@#cat@@@@@@@@@@@@@@@@@@I@%equal@@@@@@@@$boolE@@@@@@@@@@J@'compare@@@@@@@@@@@@@@@@@@@[@@'K@+starts_with&prefix)@@@@/@@@4@@@@@@@@12V@@BL@)ends_with&suffixD@@@@J@@@O@@@@@@@@LM"@@]M@-contains_from@]@@@@Q@@@@O@@@n@@@@@@@@@@kl@@|N@.rcontains_from@|@@@@p@@@@n@@@@@@@@@@@@@kkk@@O@(contains@@@@@@@@@@@@@@@@eee@@P@#sub@@@@#pos@@@#len@@@@@@@@@@@@@ @@Q@-split_on_char#sep@@@@@@@ @@@@@@@@@@@H@@R@#map!f@@@@@@@@@@@@@ @@@@@@@@RRR@@S@$mapi!f@ @@@@@@@ @@@@@@@@,@@@0@@@@@@@@./<@@?T@)fold_left!f@!a@@/@@@ @@@@$init@S@@@@@@@@@@QR@@bU@*fold_right!f@L@@@@!a@@@@@@r@@@$init@@@@@@@t ~ ~u ~ @@V@'for_all!f@o@@@@@@@@@@@@@@@@@@@@!R!R!R!@@W@&exists!f@@@@@@@@@@@@@@@@@@@@@!!!"@@X@$trim@@@@@@@@@@""""@@Y@'escaped@@@@@@@@@@#N#N#N#l@@Z@/uppercase_ascii@@@@@@@@@@ %% %%@@[@/lowercase_ascii@@@@@@@@@@&6&6&6&\@@\@0capitalize_ascii@@@@@@@@@@&&&'@@&]@2uncapitalize_ascii@&@@@*@@@@@@('')''@@9^@$iter!f@#@@@$unitF@@@@@@I@@@ @@@@@@@@K#(s(sL#(s(@@\_@%iteri!f@N@@@ @L@@@ )@@@ @@ @@ @p@@@3@@@@@@@@r')9)9s')9)n@@`@*index_from @@@@@w@@@@u@@@@@@@@@@@@@/* * /* *6@@a@.index_from_opt @@@@@@@@@@@@&optionJ@@@@@@@@@@@@ @7+(+(7+(+`@@b@+rindex_from @@@@!@@@@"@@@@#@@@$@@%@@&@@'@>,(,(>,(,V@@c@/rindex_from_opt @@@@(@@@@)@@@@*E@@@+@@@,@@-@@.@@/@E-O-OE-O-@@ d@%index @ @@@0@@@@1@@@2@@3@@4@L.U.UL.U.v@@$e@)index_opt@$@@@5@@@@6| @@@7@@@8@@9@@:@1O..2O..@@Bf@&rindex@B@@@;@.@@@<:@@@=@@>@@?@JT/'/'KT/'/I@@[g@*rindex_opt@[@@@@@G@@@AW@@@B@@@C@@D@@E@hW//iW//@@yh@&to_seq@@@@F&Stdlib#Seq!tl@@@G@@@H@@I@^0;0;^0;0W@@i@'to_seqi@@@@J#Seq!t@@@L@@@K@@M@@@N@@O@e1212e121W@@j@&of_seq@<#Seq!t@@@P@@@Q@@@R@@S@j11j11@@k@/get_utf_8_uchar@@@@T@@@@U_%Uchar*utf_decode@@@V@@W@@X@u2~2~u2~2@@l@.is_valid_utf_8@@@@Y@@@Z@@[@y33y33!@@m@2get_utf_16be_uchar@ @@@\@@@@]%Uchar*utf_decode@@@^@@_@@`@ 33 33@@n@1is_valid_utf_16be@$@@@a@@@b@@c@4%4%4%4F@@,o@2get_utf_16le_uchar@6@@@d@@@@e%Uchar*utf_decode@@@f@@g@@h@644744@@Gp@1is_valid_utf_16le@Q@@@iK@@@j@@k@H5P5PI5P5q@@Yq@&create@G@@@l@@@m@@n2caml_create_stringAAԠ@@@_55`616v@0ocaml.deprecatedf6166g616F@ ,Use Bytes.create/BytesLabels.create instead.q616Hr616t@@t616Gu616u@@@@@w6163@@r@#set@*@@@o@{@@@p@y@@@qV@@@r@@s@@t@@u0%string_safe_setCA@@@@@7778@0ocaml.deprecated7777@ &Use Bytes.set/BytesLabels.set instead.7778@@7778@@@@@77@@s@$blit#src@@@v'src_pos@@@w#dstx@@@x'dst_pos@@@y#len@@@z@@@{@@|@@}@@~@@@@@9S9S9^9@@t@$copy@@@@@@@@@@;;;,;k@0ocaml.deprecated;,;1;,;A@ &Strings now immutable: no need to copy ;,;C ;,;i@@;,;B;,;j@@@@@;,;.@@"u@$fill@@@@#pos@@@#len @@@@@@@@@@@@@@@@@@@:<<;*@0ocaml.deprecatedk==l==@ @Use String.uppercase_ascii/StringLabels.uppercase_ascii instead.v==w=>(@@y==z=>)@@@@@|==@@w@)lowercase @@@@@@@@@@?"?"?Y?@0ocaml.deprecated?C?H?C?X@ @Use String.lowercase_ascii/StringLabels.lowercase_ascii instead.?Y?^?Y?@@?Y?]?Y?@@@@@?C?E@@x@*capitalize!@@@@@@@@@@@@@A@0ocaml.deprecated@@@@@ BUse String.capitalize_ascii/StringLabels.capitalize_ascii instead.@@@A@@@@@A@@@@@@@@@y@,uncapitalize"@@@@@@@@@@AAB'Bt@0ocaml.deprecatedBBBB&@ FUse String.uncapitalize_ascii/StringLabels.uncapitalize_ascii instead.B'B,B'Br@@B'B+B'Bs@@@@@BB@@ z@)get_uint8#@ @@@@@@@@@@@@@@@FFFG@@#{@(get_int8$@#@@@@@@@@@@@@@@@+GG,GG@@<|@-get_uint16_ne%@<@@@@0@@@4@@@@@@@@DHHEHHE@@U}@-get_uint16_be&@U@@@@I@@@M@@@@@@@@]HH^HH@@n~@-get_uint16_le'@n@@@@b@@@f@@@@@@@@vIrIrwIrI@@@,get_int16_ne(@@@@@{@@@@@@@@@@@JJJJE@@@@,get_int16_be)@@@@@@@@@@@@@@@@#JJ#JJ@@A@,get_int16_le*@@@@@@@@@@@@@@@@*KkKk*KkK@@B@,get_int32_ne+@@@@@@@@%int32L@@@@@@@@1LL1LL<@@C@,get_int32_be,@@@@@@@@@@@@@@@@8LL8LL@@D@,get_int32_le-@@@@@@@@4@@@@@@@@?MVMV?MVM@@E@,get_int64_ne.@@@@@@@@%int64M@@@@@@@@)FMM*FMN"@@:F@,get_int64_be/@:@@@@.@@@@@@@@@@@BMNNCMNN@@SG@,get_int64_le0@S@@@@G@@@4@@@@@@@@[TO<O<\TO<Oe@@lH@*unsafe_get1@l@@@@`@@@\@@@@@@@2%string_unsafe_getBA@@@@y_P+P+z_P+Pm@@I@*unsafe_set2@-@@@@~@@@@|@@@Y@@@@@@@@@2%string_unsafe_setCA@@@@@`PnPnaPP@0ocaml.deprecatedaPPaPP@@aPP @@J@+unsafe_blit3#src@@@'src_pos@@@#dstn@@@'dst_pos@@@#len@@@@@@@@@@@@@@@@0caml_blit_stringE@V@@@@@@@bPPdQ,QU@'noallocdQ,QMdQ,QT@@dQ,QJ @@ K@+unsafe_fill4@@@@#pos@@@#len@@@@@@@@@@@@@@@@@@0caml_fill_stringD@@@@@@@ eQVQV gQQ@'noalloc &fQmQ 'fQmQ@@ *fQmQ +fQmQ@0ocaml.deprecated 1gQQ 2gQQ@@ 5gQQ@@ EL@@t\4Stdlib__StringLabels0:>_]ÿ-Stdlib__Uchar0*Ujmyc6]]W+Stdlib__Seq05"g1<)b.Stdlib__Either0&]XF&Stdlib0yӶ~*8CamlinternalFormatBasics0cEXy= 0] and [start], [start+len] are positions of [s]. {b Unicode text.} Strings being arbitrary sequences of bytes, they can hold any kind of textual encoding. However the recommended encoding for storing Unicode text in OCaml strings is UTF-8. This is the encoding used by Unicode escapes in string literals. For example the string ["\u{1F42B}"] is the UTF-8 encoding of the Unicode character U+1F42B. {b Past mutability.} OCaml strings used to be modifiable in place, for instance via the {!String.set} and {!String.blit} functions. This use is nowadays only possible when the compiler is put in "unsafe-string" mode by giving the [-unsafe-string] command-line option. This compatibility mode makes the types [string] and [bytes] (see {!Bytes.t}) interchangeable so that functions expecting byte sequences can also accept strings as arguments and modify them. The distinction between [bytes] and [string] was introduced in OCaml 4.02, and the "unsafe-string" compatibility mode was the default until OCaml 4.05. Starting with 4.06, the compatibility mode is opt-in; we intend to remove the option in the future. The labeled version of this module can be used as described in the {!StdLabels} module. 0stringLabels.mliX%%N}@@@@@@0@@@@@@%arrayH8@@M@A@A@@@@@@8@@@$boolE8@@%false^@@B@$true_@@H@@@A@@@@@I@A@$charB8@@@A@@@@@M@A@#exnG8@@AA@@@@@Q@@@5extension_constructorP8@@@A@@@@@U@@@%floatD8@@@A@@@@@Y@@@*floatarrayQ8@@@A@@@@@]@@@#intA8@@@A@@@@@a@A@%int32L8@@@A@@@@@e@@@%int64M8@@@A@@@@@i@@@&lazy_tN8@@O@A@A@Y@@@@@r@@@$listI8@@P@A"[]a@@@"::b@@@Q@@@ @@A@Y@@@@@@@@)nativeintK8@@@A@@@@@@@@&optionJ8@@S@A$Nonec@@@$Somed@@@@@A@Y@@@@@@@@&stringO8@@@A@@@@@@@@$unitF8@@"()`@@@@@A@@@@@@A@ .Assert_failure\ p@@@@Jm@@@@@@V@@A͠=ocaml.warn_on_literal_patternѐ@@0Division_by_zeroY @@@Aנ  @+End_of_fileX !@@@Aߠ@'FailureU )@%@@A蠰@0Invalid_argumentT 2@.@@A񠰠$#@-Match_failureR ;@:67@@\@@A21@ )Not_foundV I@@@A: 9 @-Out_of_memoryS Q@@@ABA@.Stack_overflowZ Y@@@AJI@.Sys_blocked_io[ a@@@AR"Q"@)Sys_errorW i@e@@A([+Z+@:Undefined_recursive_module] r@qmn@@c@@A6i9h9@ %bytesC8@@@A@@@@@=@@@&Stdlib@A6G5 {1:strings Strings} BPCP@@@@@@AA(!t AMRNR@@8@@@A@@@@@@@VRWR@)ocaml.doch7 The type for strings. eSfS@@@@@@@@@}@@@Aг&stringoR@@0mllmmmmm@l)8@@@A0@@B@B@@@@@%"@@@A $@@&#@x&%@$make UU@б@г9#intUU@@ @@@0@MG@A@@б@г^$charUU@@ @@@@@г &stringUU@@ @@@@@@@@!@@@'@@$* @@@U@d [make n c] is a string of length [n] with each index holding the character [c]. @raise Invalid_argument if [n < 0] or [n > ]{!Sys.max_string_length}. VYE@@@@@@@A@@7$init [[@б@г#int[[@@ @@@0@Pe,@A@@б!fб@г#int[[@@ @@@@@г$char[[@@ @@@"@@@@@%@@гm&string[[@@ @@@2@@0@@5[ @@@<@@9? @@@[@Ȑ [init n ~f] is a string of length [n] with index [i] holding the character [f i] (called in increasing index order). @raise Invalid_argument if [n < 0] or [n > ]{!Sys.max_string_length}. @since 4.02.0 +\,`@@@@@@@CB@@L%empty7b8b@г&string@bAb@@ @@@0BAABBBBB@cx*@A@@@Jb @󐠠 & The empty string. @since 4.13.0 VcWf@@@@@@@nC@@(of_bytesbhch@б@г;%bytesmhnh@@ @@@0onnooooo@.A,@A@@г٠&string|h}h@@ @@@@@@@@@@@h @0 e Return a new string that contains the same bytes as the given byte sequence. @since 4.13.0 imdf@@@@@@@D@@%(to_bytesohloht@б@г&stringohwoh}@@ @@@0@>S,@A@@г%bytesohoh@@ @@@@@@@@@@@ohh @m e Return a new byte sequence that contains the same bytes as the given string. @since 4.13.0 pt@@@@@@@E@@%&lengthvv@б@гD&stringvv @@ @@@0@>S,@A@@г#intvv@@ @@@@@@@@@@.%string_lengthAA @@@vv%@ ? [length s] is the length (number of bytes/characters) of [s]. w&&w&j@@@@@@@+F@@,#get ylu!ylx@б@г&string+yl{,yl@@ @@@0-,,-----@EZ3@A@@б@г栐#int<yl=yl@@ @@@@@г$charIylJyl@@ @@@@@@@@!@@@'@@$* @@0%string_safe_getBAV@@@@\yll]yl@ [get s i] is the character at index [i] in [s]. This is the same as writing [s.[i]]. @raise Invalid_argument if [i] not an index of [s]. izj}>@@@@@@@G@@> k {1:concat Concatenating} {b Note.} The {!Stdlib.( ^ )} binary operator concatenates two strings. {@@|@@@@@@0zyyzzzzz@Nc*@A&concat@б#sepг&string@@ @@@@@б@г8$list@г &string@@ @@@5@@@@@@: @@г&string@@ @@@G@@@@@J@@?4@@M @@@@w [concat ~sep ss] concatenates the list of strings [ss], inserting the separator string [sep] between each. @raise Invalid_argument if the result is longer than {!Sys.max_string_length} bytes. @@@@@@@H@@a#cat@б@гN&string@@ @@@0@zu,@A@@б@г_&string@@ @@@@@гl&string@@ @@@@@@@@!@@@'@@$* @@@@Ɛ [cat s1 s2] concatenates s1 and s2 ([s1 ^ s2]). @raise Invalid_argument if the result is longer than {!Sys.max_string_length} bytes. @since 4.13.0 )*@@@@@@@AI@@7? + {1:predicates Predicates and comparisons} :;@@@@@@098899999@G\#@A%equalFG@б@г!tQR@@ @@@@@б@г!t`a@@ @@@)@@г<$boolmn@@ @@@6@@@@@9@@@%@@<( @@@{@$ f [equal s0 s1] is [true] if and only if [s0] and [s1] are character-wise equal. @since 4.05.0 *>@@@@@@@J@@O'compare@D@K@б@гQ!t@N@O@@ @@@0@hc,@A@@б@гb!t@S@T@@ @@@@@гf#int@X@[@@ @@@@@@@@!@@@'@@$* @@@@@@s [compare s0 s1] sorts [s0] and [s1] in lexicographical order. [compare] behaves like {!Stdlib.compare} on strings but may be more efficient. \\@@@@@@@K@@7+starts_with@б&prefixгL&string>D@@ @@@0@Rg.@A@@б@г]&stringHN@@ @@@@@гܠ$bool RV@@ @@@@@@@@!@@2'@@$  @@@@Ő e [starts_with ][~prefix s] is [true] if and only if [s] starts with [prefix]. @since 4.13.0 (WW)@@@@@@@@L@@8)ends_with45@б&suffixг&stringA B@@ @@@0CBBCCCCC@Sj.@A@@б@г&stringRS@@ @@@@@г.$bool_`"@@ @@@@@@@@!@@2'@@$k @@@n@ ] [ends_with ][~suffix s] is [true] if and only if [s] ends with [suffix]. @since 4.13.0 z##{q@@@@@@@M@@8-contains_from@б@г&string@@ @@@0@Qh,@A@@б@гL#int@@ @@@@@б@гo$char@@ @@@ @@г$bool@@ @@@-@@@@@0@@@%@@3( @@@9@@6<@@@@x [contains_from s start c] is [true] if and only if [c] appears in [s] after position [start]. @raise Invalid_argument if [start] is not a valid position in [s].  i@@@@@@@N@ @I.rcontains_fromkok}@б@гO&stringkk@@ @@@0@bw,@A@@б@г#intkk@@ @@@@@б@гР$charkk@@ @@@ @@г$boolk k@@ @@@-@@@@@0@@@%@@3( @@@9@@6<@@@0kk@ِ [rcontains_from s stop c] is [true] if and only if [c] appears in [s] before position [stop+1]. @raise Invalid_argument if [stop < 0] or [stop+1] is not a valid position in [s]. <=Lc@@@@@@@TO@ @I(containsHeiIeq@б@г&stringSetTez@@ @@@0UTTUUUUU@bw,@A@@б@г"$charde~ee@@ @@@@@г@$boolqere@@ @@@@@@@@!@@@'@@$* @@@ee@( 4 [contains s c] is {!String.contains_from}[ s 0 c]. @@@@@@@P@@7 # {1:extract Extracting substrings} @@@@@@0@G\#@A#sub@б@г&string@@ @@@@@б#posгn#int @@ @@@+@@б#lenг#int@@ @@@<@@г?&string @@ @@@I@@@@L @@3(@@P @@@=@@T@@@@@ [sub s ~pos ~len] is a string of length [len], containing the substring of [s] that starts at position [pos] and has length [len]. @raise Invalid_argument if [pos] and [len] do not designate a valid substring of [s]. !!@@@@@@@Q@"@g-split_on_char $@б#sepгؠ$char+/@@ @@@0@}.@A@@б@г&string+3,9@@ @@@@@г͠$list8D9H@г&stringB=CC@@ @@@(@@@@@@- @@@"@@0%@@A6@@ 3S'@@@V@  [split_on_char ~sep s] is the list of all (possibly empty) substrings of [s] that are delimited by the character [sep]. The function's result is specified by the following invariants: {ul {- The list is not empty.} {- Concatenating its elements using [sep] as a separator returns a string equal to the input ([concat (make 1 sep) (split_on_char sep s) = s]).} {- No string in the result contains the [sep] character.}} @since 4.05.0 bIIc*@@@@@@@zR@-@Gx? {1:transforming Transforming} s,,t,P@@@@@@0rqqrrrrr@Wn#@A#mapRVRY@б!fб@гL$charR_Rc@@ @@@ @@гY$charRgRk@@ @@@ +@@@@@ .@@б@г &stringRpRv@@ @@@ =@@г&stringRzR@@ @@@J@@@@@M@@B$@@PR\ @@@RR@r ~ [map f s] is the string resulting from applying [f] to all the characters of [s] in increasing order. @since 4.00.0 @@@@@@@S@@d$mapi @б!fб@г#int@@ @@@0@|0@A@@б@г$char@@ @@@@@г̠$char#'@@ @@@@@@@@!@@@'@@$* @@б@г&string#,$2@@ @@@3@@г&string061<@@ @@@@@@@@@C@@V$@@F< @@@?@萠 i [mapi ~f s] is like {!map} but the index of the character is also passed to [f]. @since 4.02.0 K==L@@@@@@@cT@@Z)fold_left WX@б!fб@А!a@#B@0dccddddd@s,@Ajk@@б@г3$charuv@@ @@@@@А!a@@@ !@@@@@$@@@@б$initА!a,'@@б@г&string@@ @@@8@@А!aA<@@@ F@@A@@"I@@ D@@T+@@!H @@@@\ [fold_left f x s] computes [f (... (f (f x s.[0]) s.[1]) ...) s.[n-1]], where [n] is the length of the string [s]. @since 4.13.0  h |@@@@@@@U@@\*fold_right! ~  ~ @б!fб@г$char ~  ~ @@ @@@$0@y0@A@@б@А!a@-B@%  ~  ~ @@А!a  ~  ~ @@@@@& @@@@@'!@@б@гa&string  ~   ~ @@ @@@(*@@б$initА!a*2  ~   ~ @@А!a08  ~   ~ @@55@@)=  ~ @@@@@*A@@T+@@+D $ ~  @@@ ' ~ ~@А [fold_right f s x] computes [f s.[0] (f s.[1] ( ... (f s.[n-1] x) ...))], where [n] is the length of the string [s]. @since 4.13.0  3   4!<!P@@@@@@@ KV@@X'for_all" ?!R!V @!R!]@б!fб@г $char N!R!c O!R!g@@ @@@.0 P O O P P P P P@u0@A@@г ,$bool ]!R!k ^!R!o@@ @@@/@@@@@0@@б@г̠&string o!R!t p!R!z@@ @@@1!@@г K$bool |!R!~ }!R!@@ @@@2.@@@@@31@@D$@@44 !R!` @@@ !R!R@4 \ [for_all p s] checks if all characters in [s] satisfy the predicate [p]. @since 4.13.0  !! !!@@@@@@@ W@@H&exists# !! !!@б!fб@г p$char !! !!@@ @@@50        @e~0@A@@г $bool !! !"@@ @@@6@@@@@7@@б@г 0&string !" !" @@ @@@8!@@г $bool !" !"@@ @@@9.@@@@@:1@@D$@@;4 !! @@@ !!@ i [exists p s] checks if at least one character of [s] satisfies the predicate [p]. @since 4.13.0  "" "p"@@@@@@@ X@@H$trim$ "" ""@б@г o&string "" ""@@ @@@<0        @az,@A@@г ~&string !"" """@@ @@@=@@@@@>@@@ ,"" @Ր [trim s] is [s] without leading and trailing whitespace. Whitespace characters are: [' '], ['\x0C'] (form feed), ['\n'], ['\r'], and ['\t']. @since 4.00.0  8"" 9#8#L@@@@@@@ PY@@%'escaped% D#N#R E#N#Y@б@г &string O#N#\ P#N#b@@ @@@?0 Q P P Q Q Q Q Q@>S,@A@@г &string ^#N#f _#N#l@@ @@@@@@@@@A@@@ i#N#N @   [escaped s] is [s] with special characters represented by escape sequences, following the lexical conventions of OCaml. All characters outside the US-ASCII printable range \[0x20;0x7E\] are escaped, as well as backslash (0x2F) and double-quote (0x22). The function {!Scanf.unescaped} is a left inverse of [escaped], i.e. [Scanf.unescaped (escaped s) = s] for any string [s] (unless [escaped s] fails). @raise Invalid_argument if the result is longer than {!Sys.max_string_length} bytes.  u#m#m v%W%}@@@@@@@ Z@@%/uppercase_ascii&  %%  %%@б@г 預&string  %%  %%@@ @@@B0        @>S,@A@@г &string  %%  %%@@ @@@C@@@@@D@@@  %% @ O [uppercase_ascii s] is [s] with all lowercase letters translated to uppercase, using the US-ASCII character set. @since 4.05.0   %%  & &4@@@@@@@ [@@%/lowercase_ascii' &6&: &6&I@б@г &&string &6&L &6&R@@ @@@E0        @>S,@A@@г 5&string &6&V &6&\@@ @@@F@@@@@G@@@ &6&6 @ [lowercase_ascii s] is [s] with all uppercase letters translated to lowercase, using the US-ASCII character set. @since 4.05.0  &]&] &&@@@@@@@ \@@%0capitalize_ascii( && &'@б@г c&string &' &' @@ @@@H0        @>S,@A@@г r&string &' &'@@ @@@I@@@@@J@@@ && @ ɐ [capitalize_ascii s] is [s] with the first character set to uppercase, using the US-ASCII character set. @since 4.05.0  ,'' -''@@@@@@@ D]@@%2uncapitalize_ascii) 8'' 9''@б@г &string C'' D''@@ @@@K0 E D D E E E E E@>S,@A@@г &string R'' S''@@ @@@L@@@@@M@@@ ]'' @  [uncapitalize_ascii s] is [s] with the first character set to lowercase, using the US-ASCII character set. @since 4.05.0  i'' j(;(O@@@@@@@ ^@@% ; {1:traversing Traversing}  z!(Q(Q {!(Q(q@@@@@@0 y x x y y y y y@5J#@A$iter* #(s(w #(s({@б!fб@г S$char #(s( #(s(@@ @@@N@@г $unit #(s( #(s(@@ @@@O+@@@@@P.@@б@г &string #(s( #(s(@@ @@@Q=@@г $unit #(s( #(s(@@ @@@RJ@@@@@SM@@B$@@TP #(s(~ @@@ #(s(s@ y [iter ~f s] applies function [f] in turn to all the characters of [s]. It is equivalent to [f s.[0]; f s.[1]; ...; f s.[length s - 1]; ()].  $(( %()7@@@@@@@ _@@d%iteri+ ')9)= ')9)B@б!fб@г #int ')9)H ')9)K@@ @@@U0        @|0@A@@б@г Ơ$char ')9)O ')9)S@@ @@@V@@г n$unit ')9)W ')9)[@@ @@@W@@@@@X!@@@'@@Y$* @@б@г &string *')9)` +')9)f@@ @@@Z3@@г $unit 7')9)j 8')9)n@@ @@@[@@@@@@\C@@V$@@]F C')9)E @@@ F')9)9@  s [iteri] is like {!iter}, but the function is also given the corresponding character index. @since 4.00.0  R()o)o S+))@@@@@@@ j`@@Z h9 {1:searching Searching}  c-)) d-)*@@@@@@0 b a a b b b b b@j#@A*index_from, o/* *  p/* *@б@г נ&string z/* * {/* * @@ @@@^@@б@г 3#int /* *$ /* *'@@ @@@_)@@б@г V$char /* *+ /* */@@ @@@`8@@г O#int /* *3 /* *6@@ @@@aE@@@@@bH@@@%@@cK( @@@7@@dN:@@@ /* * @ _ [index_from s i c] is the index of the first occurrence of [c] in [s] after position [i]. @raise Not_found if [c] does not occur in [s] after position [i]. @raise Invalid_argument if [i] is not a valid position in [s].  0*7*7 4*+%@@@@@@@ a@ @a.index_from_opt- 7+(+, 7+(+:@б@г 6&string 7+(+= 7+(+C@@ @@@e0        @zu,@A@@б@г #int 7+(+G 7+(+J@@ @@@f@@б@г $char 7+(+N 7+(+R@@ @@@g @@г z&option 7+(+Z 7+(+`@г #int 7+(+V 7+(+Y@@ @@@h7@@@@@@j< @@@"@@k?%@@@4@@lB7@@@H@@mEK@@@ &7+(+( @ ϐ [index_from_opt s i c] is the index of the first occurrence of [c] in [s] after position [i] (if any). @raise Invalid_argument if [i] is not a valid position in [s]. @since 4.05  28+a+a 3<,,&@@@@@@@ Jb@/@X+rindex_from. >>,(,, ?>,(,7@б@г &string I>,(,: J>,(,@@@ @@@n0 K J J K K K K K@q,@A@@б@г #int Z>,(,D [>,(,G@@ @@@o@@б@г '$char i>,(,K j>,(,O@@ @@@p @@г #int v>,(,S w>,(,V@@ @@@q-@@@@@r0@@@%@@s3( @@@9@@t6<@@@ >,(,(@ 0 [rindex_from s i c] is the index of the last occurrence of [c] in [s] before position [i+1]. @raise Not_found if [c] does not occur in [s] before position [i+1]. @raise Invalid_argument if [i+1] is not a valid position in [s].  ?,W,W C--M@@@@@@@ c@ @I/rindex_from_opt/ E-O-S E-O-b@б@г &string E-O-e E-O-k@@ @@@u0        @bw,@A@@б@г e#int E-O-o E-O-r@@ @@@v@@б@г $char E-O-v E-O-z@@ @@@w @@г K&option E-O- E-O-@г #int E-O-~ E-O-@@ @@@x7@@@@@@z< @@@"@@{?%@@@4@@|B7@@@H@@}EK@@@ E-O-O @ [rindex_from_opt s i c] is the index of the last occurrence of [c] in [s] before position [i+1] (if any). @raise Invalid_argument if [i+1] is not a valid position in [s]. @since 4.05 F--J.A.S@@@@@@@d@/@X%index0L.U.YL.U.^@б@г w&stringL.U.aL.U.g@@ @@@~0@q,@A@@б@г 預$char+L.U.k,L.U.o@@ @@@@@г ⠐#int8L.U.s9L.U.v@@ @@@@@@@@!@@@'@@$* @@@FL.U.U@  . [index s c] is {!String.index_from}[ s 0 c]. RM.w.wSM.w.@@@@@@@je@@7)index_opt1^O.._O..@б@г Ơ&stringiO..jO..@@ @@@0kjjkkkkk@Pe,@A@@б@г8$charzO..{O..@@ @@@@@г &optionO..O..@г;#intO..O..@@ @@@(@@@@@@- @@@"@@0%@@@6@@39@@@O..@ M G [index_opt s c] is {!String.index_from_opt}[ s 0 c]. @since 4.05 P..R//%@@@@@@@f@,@F&rindex2T/'/+T/'/1@б@г$&stringT/'/4T/'/:@@ @@@0@_t,@A@@б@г$charT/'/>T/'/B@@ @@@@@г#intT/'/FT/'/I@@ @@@@@@@@!@@@'@@$* @@@T/'/'@ = [rindex s c] is {!String.rindex_from}[ s (length s - 1) c]. U/J/JU/J/@@@@@@@g@@7*rindex_opt3 W// W//@б@гs&stringW//W//@@ @@@0@Pe,@A@@б@г堐$char'W//(W//@@ @@@@@г&option4W//5W//@г蠐#int>W//?W//@@ @@@(@@@@@@- @@@"@@0%@@@6@@39@@@QW//@ V [rindex_opt s c] is {!String.rindex_from_opt}[ s (length s - 1) c]. @since 4.05 ]X//^Z00@@@@@@@uh@,@Fs; {1 Strings and Sequences} n\00o\009@@@@@@0mllmmmmm@Vk#@A&to_seqoz^0;0?{^0;0E@б@г8!t^0;0H^0;0I@@ @@@@@г]#Seq!t^0;0R^0;0W@г]$char^0;0M^0;0Q@@ @@@ 4@@@@@@ 9 @@@%@@ <(@@@^0;0;@X [to_seq s] is a sequence made of the string's characters in increasing order. In ["unsafe-string"] mode, modifications of the string during iteration will be reflected in the sequence. @since 4.07 _0X0Xc110@@@@@@@i@)@O'to_seqipe1216e121=@б@г!te121@e121A@@ @@@ 0@hc,@A@@г#Seq!te121Re121W@Вг#inte121Fe121I@@ @@@ @@г$chare121Le121P@@ @@@ -@@@@@ 2 @@@0@@@ 7e121E+@@@>@@ ;A.@@@e12121@ Y [to_seqi s] is like {!to_seq} but also tuples the corresponding index. @since 4.07 !f1X1X"h11@@@@@@@9j@@@N&of_seqq-j11.j11@б@г#Seq!t;j11<j11@г$charEj11Fj11@@ @@@ 0GFFGGGGG@t9@A@@@ @@@  @@г !tYj11Zj11@@ @@@ @@@@@ @@@dj11 @ L [of_seq s] is a string made of the sequence's characters. @since 4.07 pk11qm22&@@@@@@@k@@* 7 {1:utf UTF decoding and validations} @since 4.14 o2(2(q2R2d@@@@@@0@:\#@A1 {2:utf_8 UTF-8} s2f2fs2f2|@@@@@@/get_utf_8_ucharu2~2u2~2@б@гZ!tu2~2u2~2@@ @@@ )@@б@г`#intu2~2u2~2@@ @@@ 8@@г%Uchar*utf_decodeu2~2u2~2@@ @@@ %H@@@@@ &K@@@(@@ 'N+ @@@u2~2~@} K [get_utf_8_uchar b i] decodes an UTF-8 character at index [i] in [b]. v22w23@@@@@@@l@@a.is_valid_utf_8y33y33@б@г!ty33y33@@ @@@ (0@zf,@A@@гՠ$booly33y33!@@ @@@ )@@@@@ *@@@y33 @ P [is_valid_utf_8 b] is [true] if and only if [b] contains valid UTF-8 data. z3"3"{3e3w@@@@@@@5m@@%37 {2:utf_16be UTF-16BE} .}3y3y/}3y3@@@@@@0-,,-----@5J#@A2get_utf_16be_uchar:33;33@б@г!tE33F33@@ @@@ +@@б@г#intT33U33@@ @@@ ,)@@г,%Uchar*utf_decoded33e33@@ @@@ -9@@@@@ .<@@@(@@ /?+ @@@r33@ Q [get_utf_16be_uchar b i] decodes an UTF-16BE character at index [i] in [b]. ~3344#@@@@@@@n@@R1is_valid_utf_16be4%4)4%4:@б@гH!t4%4=4%4>@@ @@@ 00@kf,@A@@гs$bool4%4B4%4F@@ @@@ 1@@@@@ 2@@@4%4% @X V [is_valid_utf_16be b] is [true] if and only if [b] contains valid UTF-16BE data. 4G4G44@@@@@@@o@@%ѐ7 {2:utf_16le UTF-16LE} 4444@@@@@@0@5J#@A2get_utf_16le_uchar4444@б@г!t4444@@ @@@ 3@@б@г#int4444@@ @@@ 4)@@г%Uchar*utf_decode4444@@ @@@ 59@@@@@ 6<@@@(@@ 7?+ @@@44@ Q [get_utf_16le_uchar b i] decodes an UTF-16LE character at index [i] in [b]. 445<5N@@@@@@@4p@@R1is_valid_utf_16le(5P5T)5P5e@б@г栐!t35P5h45P5i@@ @@@ 8054455555@kf,@A@@г$boolB5P5mC5P5q@@ @@@ 9@@@@@ :@@@M5P5P @ V [is_valid_utf_16le b] is [true] if and only if [b] contains valid UTF-16LE data. Y5r5rZ55@@@@@@@qq@@%o % {1:deprecated Deprecated functions} j55k55@@@@@@0ihhiiiii@5J#@A&createv56w56 @б@г+#int56 56@@ @@@ ;@@г\%bytes5656@@ @@@ <'@@@@@ =*@@2caml_create_stringAA@@@55616v@0ocaml.deprecated6166616F@ ,Use Bytes.create/BytesLabels.create instead.616H616t@@616G616u@@@@@6163@^  [create n] returns a fresh byte sequence of length [n]. The sequence is uninitialized and contains arbitrary bytes. @raise Invalid_argument if [n < 0] or [n > ]{!Sys.max_string_length}. @deprecated This is a deprecated alias of {!Bytes.create}/{!BytesLabels.create}. 6w6w7l7@@@@@@@r+@)(@'Z*#set7777@б@г%bytes7777@@ @@@ >0@snI@A@@б@г#int7777@@ @@@ ?@@б@г$char7777@@ @@@ @ @@г_$unit7777@@ @@@ A-@@@@@ B0@@@%@@ C3( @@@9@@ D6<@@0%string_safe_setCA@@@@@7778@0ocaml.deprecated$77%77@ &Use Bytes.set/BytesLabels.set instead./77078@@277378@@@@@577@ސ 0 [set s n c] modifies byte sequence [s] in place, replacing the byte at index [n] with [c]. You can also write [s.[n] <- c] instead of [set s n c]. @raise Invalid_argument if [n] is not a valid index in [s]. @deprecated This is a deprecated alias of {!Bytes.set}/{!BytesLabels.set}. A88B9*9Q@@@@@@@Ys-@)(@'h*$blitN9S9WO9S9[@б#srcг&string[9^9d\9^9j@@ @@@ E0]\\]]]]]@M@A@@б'src_posг#intn9^9vo9^9y@@ @@@ F@@б#dstгM%bytes9^99^9@@ @@@ G$@@б'dst_posг:#int9^99^9@@ @@@ H5@@б#lenгK#int9^99^9@@ @@@ IF@@г$unit9^99^9@@ @@@ JS@@@@ KV9^9 @@3(@@ LZ9^9 @@H=@@ M^9^9}@@]R@@ Nb9^9n@@ti@@ Of9^9`@@@9S9S@s ` [blit ~src ~src_pos ~dst ~dst_pos ~len] copies [len] bytes from the string [src], starting at index [src_pos], to byte sequence [dst], starting at character number [dst_pos]. @raise Invalid_argument if [src_pos] and [len] do not designate a valid range of [src], or if [dst_pos] and [len] do not designate a valid range of [dst]. 99:;@@@@@@@t@+@z$copy;;;;@б@гJ&string;;;;!@@ @@@ P0@,@A@@гY&string;;%;;+@@ @@@ Q@@@@@ R@@@;;;,;k@0ocaml.deprecated;,;1;,;A@ &Strings now immutable: no need to copy;,;C;,;i@@;,;B;,;j@@@@@;,;.@Ȑ Return a copy of the given string. @deprecated Because strings are immutable, it doesn't make much sense to make identical copies of them. +;l;l,;<@@@@@@@Cu@('@&=)$fill7<< 8<<@б@г%bytesB<<C<<@@ @@@ S0DCCDDDDD@VkD@A@@б#posг#intU<< V<<#@@ @@@ T@@б#lenг#intf<<+g<<.@@ @@@ U$@@б@г3$charu<<2v<<6@@ @@@ V3@@г۠$unit<<:<<>@@ @@@ W@@@@@@ XC@@0%@@ YF<<' @@E:@@ ZJ<<@@@Q@@ [NT@@@<<*@0ocaml.deprecated====@ @Use String.uppercase_ascii/StringLabels.uppercase_ascii instead.===>(@@===>)@@@@@==@ Return a copy of the argument, with all lowercase letters translated to uppercase, including accented letters of the ISO Latin-1 (8859-1) character set. @deprecated Functions operating on Latin-1 character set are deprecated. >+>+>? @@@@@@@)w@('@&=))lowercase?"?&?"?/@б@г&string(?"?2)?"?8@@ @@@ _0*))*****@VkD@A@@г&string7?"?<8?"?B@@ @@@ `@@@@@ a@@@B?"?"C?Y?@0ocaml.deprecatedI?C?HJ?C?X@ @Use String.lowercase_ascii/StringLabels.lowercase_ascii instead.T?Y?^U?Y?@@W?Y?]X?Y?@@@@@Z?C?E@ Return a copy of the argument, with all uppercase letters translated to lowercase, including accented letters of the ISO Latin-1 (8859-1) character set. @deprecated Functions operating on Latin-1 character set are deprecated. f??g@G@@@@@@@@~x@('@&=)*capitalizer@@s@@@б@гڠ&string}@@~@@@@ @@@ b0~~@VkD@A@@г預&string@@@@@@ @@@ c@@@@@ d@@@@@@A@0ocaml.deprecated@@@@@ BUse String.capitalize_ascii/StringLabels.capitalize_ascii instead.@@@A@@@@@A@@@@@@@@X Return a copy of the argument, with the first character set to uppercase, using the ISO Latin-1 (8859-1) character set.. @deprecated Functions operating on Latin-1 character set are deprecated. AAAA@@@@@@@y@('@&=),uncapitalizeAAAA@б@г/&stringABAB@@ @@@ e0@VkD@A@@г>&stringAB AB@@ @@@ f@@@@@ g@@@AAB'Bt@0ocaml.deprecatedBBBB&@ FUse String.uncapitalize_ascii/StringLabels.uncapitalize_ascii instead.B'B,B'Br@@B'B+B'Bs@@@@@BB@ Return a copy of the argument, with the first character set to lowercase, using the ISO Latin-1 (8859-1) character set. @deprecated Functions operating on Latin-1 character set are deprecated. BuBuBCE@@@@@@@(z@('@&=)& ! {1 Binary decoding of integers} !CGCG"CGCm@@@@@@0      @Mb;@A7  The functions in this section binary decode integers from strings. All following functions raise [Invalid_argument] if the characters needed at index [i] to decode the integer are not available. Little-endian (resp. big-endian) encoding means that least (resp. most) significant bytes are stored first. Big-endian is also known as network byte order. Native-endian encoding is either little-endian or big-endian depending on {!Sys.big_endian}. 32-bit and 64-bit integers are represented by the [int32] and [int64] types, which can be interpreted either as signed or unsigned numbers. 8-bit and 16-bit integers are represented by the [int] type, which has more bits than the binary encoding. These extra bits are sign-extended (or zero-extended) for functions which decode 8-bit or 16-bit integers and represented them with [int] values. 2CoCo3FF@@@@@@)get_uint8<FF=FG@б@г&stringGFGHFG @@ @@@ h)@@б@г#intVFGWFG@@ @@@ i8@@г #intcFGdFG@@ @@@ jE@@@@@ kH@@@%@@ lK( @@@qFF@ i [get_uint8 b i] is [b]'s unsigned 8-bit integer starting at character index [i]. @since 4.13.0 }GG~GG@@@@@@@{@@^(get_int8GGGG@б@г&stringGGGG@@ @@@ m0@wc,@A@@б@гO#intGGGG@@ @@@ n@@г\#intGGGG@@ @@@ o@@@@@ p!@@@'@@ q$* @@@GG@i f [get_int8 b i] is [b]'s signed 8-bit integer starting at character index [i]. @since 4.13.0 GGHH@@@@@@@|@@7-get_uint16_neHH!HH.@б@г@&stringHH1HH7@@ @@@ r0@Pe,@A@@б@г#intHH;HH>@@ @@@ s@@г#intHHBHHE@@ @@@ t@@@@@ u!@@@'@@ v$* @@@HH@ | [get_uint16_ne b i] is [b]'s native-endian unsigned 16-bit integer starting at character index [i]. @since 4.13.0 HFHF HH@@@@@@@3}@@7-get_uint16_be'HH(HH@б@г&string2HH3HH@@ @@@ w043344444@Pe,@A@@б@г#intCHHDHH@@ @@@ x@@г#intPHHQHH@@ @@@ y@@@@@ z!@@@'@@ {$* @@@^HH@ y [get_uint16_be b i] is [b]'s big-endian unsigned 16-bit integer starting at character index [i]. @since 4.13.0 jHHkInIp@@@@@@@~@@7-get_uint16_levIrIvwIrI@б@гޠ&stringIrIIrI@@ @@@ |0@Pe,@A@@б@г<#intIrIIrI@@ @@@ }@@гI#intIrIIrI@@ @@@ ~@@@@@ !@@@'@@ $* @@@IrIr@V | [get_uint16_le b i] is [b]'s little-endian unsigned 16-bit integer starting at character index [i]. @since 4.13.0 IIJJ@@@@@@@@@7,get_int16_neJJ"JJ.@б@г-&stringJJ1JJ7@@ @@@ 0@Pe,@A@@б@г#intJJ;JJ>@@ @@@ @@г#intJJBJJE@@ @@@ @@@@@ !@@@'@@ $* @@@JJ@ y [get_int16_ne b i] is [b]'s native-endian signed 16-bit integer starting at character index [i]. @since 4.13.0 JFJF !JJ@@@@@@@ @@@7,get_int16_be#JJ#JJ@б@г|&string#JJ #JJ@@ @@@ 0!  !!!!!@Pe,@A@@б@гڠ#int0#JJ1#JJ@@ @@@ @@г砐#int=#JJ>#JJ@@ @@@ @@@@@ !@@@'@@ $* @@@K#JJ@ v [get_int16_be b i] is [b]'s big-endian signed 16-bit integer starting at character index [i]. @since 4.13.0 W$JJX(KgKi@@@@@@@oA@@7,get_int16_lec*KkKod*KkK{@б@гˠ&stringn*KkK~o*KkK@@ @@@ 0pooppppp@Pe,@A@@б@г)#int*KkK*KkK@@ @@@ @@г6#int*KkK*KkK@@ @@@ @@@@@ !@@@'@@ $* @@@*KkKk@C y [get_int16_le b i] is [b]'s little-endian signed 16-bit integer starting at character index [i]. @since 4.13.0 +KK/LL@@@@@@@B@@7,get_int32_ne1LL1LL#@б@г&string1LL&1LL,@@ @@@ 0@Pe,@A@@б@гx#int1LL01LL3@@ @@@ @@г%int321LL71LL<@@ @@@ @@@@@ !@@@'@@ $* @@@1LL@ r [get_int32_ne b i] is [b]'s native-endian 32-bit integer starting at character index [i]. @since 4.13.0 2L=L=6LL@@@@@@@ C@@7,get_int32_be8LL8LL@б@гi&string 8LL 8LL@@ @@@ 0  @Pe,@A@@б@гǠ#int8LL8LL@@ @@@ @@гР%int32*8LL+8LL@@ @@@ @@@@@ !@@@'@@ $* @@@88LL@ᐠ o [get_int32_be b i] is [b]'s big-endian 32-bit integer starting at character index [i]. @since 4.13.0 D9LLE=MRMT@@@@@@@\D@@7,get_int32_leP?MVMZQ?MVMf@б@г&string[?MVMi\?MVMo@@ @@@ 0]\\]]]]]@Pe,@A@@б@г#intl?MVMsm?MVMv@@ @@@ @@г%int32y?MVMzz?MVM@@ @@@ @@@@@ !@@@'@@ $* @@@?MVMV@0 r [get_int32_le b i] is [b]'s little-endian 32-bit integer starting at character index [i]. @since 4.13.0 @MMDMM@@@@@@@E@@7,get_int64_neFMMFMN @б@г&stringFMN FMN@@ @@@ 0@Pe,@A@@б@гe#intFMNFMN@@ @@@ @@гj%int64FMNFMN"@@ @@@ @@@@@ !@@@'@@ $* @@@FMM@ r [get_int64_ne b i] is [b]'s native-endian 64-bit integer starting at character index [i]. @since 4.13.0 GN#N#KNN@@@@@@@F@@7,get_int64_beMNNMNN@б@гV&stringMNNMNN@@ @@@ 0@Pe,@A@@б@г#int MNN MNN@@ @@@ @@г%int64MNNMNN@@ @@@ @@@@@ !@@@'@@ $* @@@%MNN@ΐ o [get_int64_be b i] is [b]'s big-endian 64-bit integer starting at character index [i]. @since 4.13.0 1NNN2RO8O:@@@@@@@IG@@7,get_int64_le=TO<O@>TO<OL@б@г&stringHTO<OOITO<OU@@ @@@ 0JIIJJJJJ@Pe,@A@@б@г#intYTO<OYZTO<O\@@ @@@ @@г%int64fTO<O`gTO<Oe@@ @@@ @@@@@ !@@@'@@ $* @@@tTO<O<@ r [get_int64_le b i] is [b]'s little-endian 64-bit integer starting at character index [i]. @since 4.13.0 UOfOfYOO@@@@@@@H@@7"/*[OO[OO@@@@@@0@G\#@A*unsafe_get_P+P4_P+P>@б@г&string_P+PA_P+PG@@ @@@ @@б@гa#int_P+PK_P+PN@@ @@@ )@@г$char_P+PR_P+PV@@ @@@ 6@@@@@ 9@@@%@@ <( @@2%string_unsafe_getBAѠ@@@@_P+P+_P+Pm@@I@@@I*unsafe_set`PnPw`PnP@б@г%bytes`PnP`PnP@@ @@@ 0@b]&@A@@б@г#int`PnP`PnP@@ @@@ @@б@г͠$char`PnP`PnP@@ @@@  @@гu$unit`PnP`PnP@@ @@@ -@@@@@ 0@@@%@@ 3( @@@9@@ 6<@@2%string_unsafe_setCA,@@@@@3`PnPn4aPP@0ocaml.deprecated:aPP;aPP@@>aPP @@UJ@@ N+unsafe_blitJbPPKbPP@б#srcг&stringWcPPXcPP@@ @@@ 0YXXYYYYY@i~3@A@@б'src_posг#intjcPPkcPQ@@ @@@ @@б#dstгI%bytes{cPQ |cPQ@@ @@@ $@@б'dst_posг6#intcPQcPQ@@ @@@ 5@@б#lenгG#intcPQ%cPQ(@@ @@@ F@@г$unitdQ,Q0dQ,Q4@@ @@@ S@@@@ VcPQ! @@3(@@ ZcPQ @@H=@@ ^cPQ@@]R@@ bcPP@@ti@@ fcPP@@0caml_blit_stringE@Š@@@@@@@bPPdQ,QU@'noallocdQ,QMdQ,QT@@dQ,QJ @@K@@ +unsafe_filleQVQ_eQVQj@б@г%bytesfQmQofQmQt@@ @@@ 0@3@A@@б#posг#intfQmQ|fQmQ@@ @@@ @@б#lenг#intfQmQfQmQ@@ @@@ $@@б@г᠐$char#fQmQ$fQmQ@@ @@@ 3@@г$unit0fQmQ1fQmQ@@ @@@ @@@@@@ C@@0%@@ F<fQmQ @@E:@@ J@fQmQx@@@Q@@ NT@@0caml_fill_stringD@E@@@@@@MeQVQVNgQQ@'noallocTfQmQUfQmQ@@XfQmQYfQmQ@0ocaml.deprecated_gQQ`gQQ@@cgQQ@@zL@@r@ A@@P@<'@@@v@["@@`@;@@g@S@@Y@E @@9@@T@@@p@\@@q@]6@"@@@qJ@%@e@@@@u*@@o@[@  @  j@ E @  @  ]@ ) @  @  U@ A @  @  @ [ 6@  @  @@?@@@mF@@p@\#@@@u<@(@@U@A@@n@Z!@ @@b+@@;@ @@0@ "@A@ H************************************************************************AWWAWc@ H  BddBd@ H OCaml CC@ H DDJ@ H Xavier Leroy, projet Cristal, INRIA Rocquencourt EKK EK@ H %F&F@ H Copyright 1996 Institut National de Recherche en Informatique et +G,G1@ H en Automatique. 1H222H2~@ H 7I8I@ H All rights reserved. This file is distributed under the terms of =J>J@ H the GNU Lesser General Public License version 2.1, with the CKDKe@ H special exception on linking described in the file LICENSE. ILffJLf@ H OMPM@ H************************************************************************UNVNL@ NOTE: If this file is stringLabels.mli, run tools/sync_stdlib_docs after editing it to generate string.mli. If this file is string.mli, do not edit it directly -- edit stringLabels.mli instead. [PNN\V #@ V* Strings. A string [s] of length [n] is an indexable and immutable sequence of [n] bytes. For historical reasons these bytes are referred to as characters. The semantics of string functions is defined in terms of indices and positions. These are depicted and described as follows. {v positions 0 1 2 3 4 n-1 n +---+---+---+---+ +-----+ indices | 0 | 1 | 2 | 3 | ... | n-1 | +---+---+---+---+ +-----+ v} {ul {- An {e index} [i] of [s] is an integer in the range \[[0];[n-1]\]. It represents the [i]th byte (character) of [s] which can be accessed using the constant time string indexing operator [s.[i]].} {- A {e position} [i] of [s] is an integer in the range \[[0];[n]\]. It represents either the point at the beginning of the string, or the point between two indices, or the point at the end of the string. The [i]th byte index is between position [i] and [i+1].}} Two integers [start] and [len] are said to define a {e valid substring} of [s] if [len >= 0] and [start], [start+len] are positions of [s]. {b Unicode text.} Strings being arbitrary sequences of bytes, they can hold any kind of textual encoding. However the recommended encoding for storing Unicode text in OCaml strings is UTF-8. This is the encoding used by Unicode escapes in string literals. For example the string ["\u{1F42B}"] is the UTF-8 encoding of the Unicode character U+1F42B. {b Past mutability.} OCaml strings used to be modifiable in place, for instance via the {!String.set} and {!String.blit} functions. This use is nowadays only possible when the compiler is put in "unsafe-string" mode by giving the [-unsafe-string] command-line option. This compatibility mode makes the types [string] and [bytes] (see {!Bytes.t}) interchangeable so that functions expecting byte sequences can also accept strings as arguments and modify them. The distinction between [bytes] and [string] was introduced in OCaml 4.02, and the "unsafe-string" compatibility mode was the default until OCaml 4.05. Starting with 4.06, the compatibility mode is opt-in; we intend to remove the option in the future. The labeled version of this module can be used as described in the {!StdLabels} module. a6* {1:strings Strings} "8* The type for strings.  * [make n c] is a string of length [n] with each index holding the character [c]. @raise Invalid_argument if [n < 0] or [n > ]{!Sys.max_string_length}.  * [init n ~f] is a string of length [n] with index [i] holding the character [f i] (called in increasing index order). @raise Invalid_argument if [n < 0] or [n > ]{!Sys.max_string_length}. @since 4.02.0 B '* The empty string. @since 4.13.0  f* Return a new string that contains the same bytes as the given byte sequence. @since 4.13.0 ࠠ f* Return a new byte sequence that contains the same bytes as the given string. @since 4.13.0  @* [length s] is the length (number of bytes/characters) of [s]. f * [get s i] is the character at index [i] in [s]. This is the same as writing [s.[i]]. @raise Invalid_argument if [i] not an index of [s].  l* {1:concat Concatenating} {b Note.} The {!Stdlib.( ^ )} binary operator concatenates two strings.  * [concat ~sep ss] concatenates the list of strings [ss], inserting the separator string [sep] between each. @raise Invalid_argument if the result is longer than {!Sys.max_string_length} bytes.  * [cat s1 s2] concatenates s1 and s2 ([s1 ^ s2]). @raise Invalid_argument if the result is longer than {!Sys.max_string_length} bytes. @since 4.13.0 \ ,* {1:predicates Predicates and comparisons} N g* [equal s0 s1] is [true] if and only if [s0] and [s1] are character-wise equal. @since 4.05.0  * [compare s0 s1] sorts [s0] and [s1] in lexicographical order. [compare] behaves like {!Stdlib.compare} on strings but may be more efficient.  ( comment thwarts tools/sync_stdlib_docs <@ f* [starts_with ][~prefix s] is [true] if and only if [s] starts with [prefix]. @since 4.13.0 o ( comment thwarts tools/sync_stdlib_docs @ ^* [ends_with ][~suffix s] is [true] if and only if [s] ends with [suffix]. @since 4.13.0 & * [contains_from s start c] is [true] if and only if [c] appears in [s] after position [start]. @raise Invalid_argument if [start] is not a valid position in [s]. Ƞ * [rcontains_from s stop c] is [true] if and only if [c] appears in [s] before position [stop+1]. @raise Invalid_argument if [stop < 0] or [stop+1] is not a valid position in [s]. j 5* [contains s c] is {!String.contains_from}[ s 0 c].  $* {1:extract Extracting substrings}  * [sub s ~pos ~len] is a string of length [len], containing the substring of [s] that starts at position [pos] and has length [len]. @raise Invalid_argument if [pos] and [len] do not designate a valid substring of [s].  * [split_on_char ~sep s] is the list of all (possibly empty) substrings of [s] that are delimited by the character [sep]. The function's result is specified by the following invariants: {ul {- The list is not empty.} {- Concatenating its elements using [sep] as a separator returns a string equal to the input ([concat (make 1 sep) (split_on_char sep s) = s]).} {- No string in the result contains the [sep] character.}} @since 4.05.0 P * {1:transforming Transforming} B * [map f s] is the string resulting from applying [f] to all the characters of [s] in increasing order. @since 4.00.0 㠠 j* [mapi ~f s] is like {!map} but the index of the character is also passed to [f]. @since 4.02.0 p * [fold_left f x s] computes [f (... (f (f x s.[0]) s.[1]) ...) s.[n-1]], where [n] is the length of the string [s]. @since 4.13.0  * [fold_right f s x] computes [f s.[0] (f s.[1] ( ... (f s.[n-1] x) ...))], where [n] is the length of the string [s]. @since 4.13.0  ]* [for_all p s] checks if all characters in [s] satisfy the predicate [p]. @since 4.13.0 - j* [exists p s] checks if at least one character of [s] satisfies the predicate [p]. @since 4.13.0 ̠ * [trim s] is [s] without leading and trailing whitespace. Whitespace characters are: [' '], ['\x0C'] (form feed), ['\n'], ['\r'], and ['\t']. @since 4.00.0   * [escaped s] is [s] with special characters represented by escape sequences, following the lexical conventions of OCaml. All characters outside the US-ASCII printable range \[0x20;0x7E\] are escaped, as well as backslash (0x2F) and double-quote (0x22). The function {!Scanf.unescaped} is a left inverse of [escaped], i.e. [Scanf.unescaped (escaped s) = s] for any string [s] (unless [escaped s] fails). @raise Invalid_argument if the result is longer than {!Sys.max_string_length} bytes. X * [uppercase_ascii s] is [s] with all lowercase letters translated to uppercase, using the US-ASCII character set. @since 4.05.0  * [lowercase_ascii s] is [s] with all uppercase letters translated to lowercase, using the US-ASCII character set. @since 4.05.0 䠠 * [capitalize_ascii s] is [s] with the first character set to uppercase, using the US-ASCII character set. @since 4.05.0  * [uncapitalize_ascii s] is [s] with the first character set to lowercase, using the US-ASCII character set. @since 4.05.0 p<* {1:traversing Traversing} b * [iter ~f s] applies function [f] in turn to all the characters of [s]. It is equivalent to [f s.[0]; f s.[1]; ...; f s.[length s - 1]; ()].  t* [iteri] is like {!iter}, but the function is also given the corresponding character index. @since 4.00.0 :* {1:searching Searching}  * [index_from s i c] is the index of the first occurrence of [c] in [s] after position [i]. @raise Not_found if [c] does not occur in [s] after position [i]. @raise Invalid_argument if [i] is not a valid position in [s]. & * [index_from_opt s i c] is the index of the first occurrence of [c] in [s] after position [i] (if any). @raise Invalid_argument if [i] is not a valid position in [s]. @since 4.05  * [rindex_from s i c] is the index of the last occurrence of [c] in [s] before position [i+1]. @raise Not_found if [c] does not occur in [s] before position [i+1]. @raise Invalid_argument if [i+1] is not a valid position in [s]. [ * [rindex_from_opt s i c] is the index of the last occurrence of [c] in [s] before position [i+1] (if any). @raise Invalid_argument if [i+1] is not a valid position in [s]. @since 4.05  /* [index s c] is {!String.index_from}[ s 0 c].  H* [index_opt s c] is {!String.index_from_opt}[ s 0 c]. @since 4.05 G >* [rindex s c] is {!String.rindex_from}[ s (length s - 1) c].  W* [rindex_opt s c] is {!String.rindex_from_opt}[ s (length s - 1) c]. @since 4.05 <* {1 Strings and Sequences}  * [to_seq s] is a sequence made of the string's characters in increasing order. In ["unsafe-string"] mode, modifications of the string during iteration will be reflected in the sequence. @since 4.07 H Z* [to_seqi s] is like {!to_seq} but also tuples the corresponding index. @since 4.07  堠 M* [of_seq s] is a string made of the sequence's characters. @since 4.07  8* {1:utf UTF decoding and validations} @since 4.14  2* {2:utf_8 UTF-8}  } L* [get_utf_8_uchar b i] decodes an UTF-8 character at index [i] in [b].  2 Q* [is_valid_utf_8 b] is [true] if and only if [b] contains valid UTF-8 data.  8* {2:utf_16be UTF-16BE}  ꠠ R* [get_utf_16be_uchar b i] decodes an UTF-16BE character at index [i] in [b].  W* [is_valid_utf_16be b] is [true] if and only if [b] contains valid UTF-16BE data.  c8* {2:utf_16le UTF-16LE}  U R* [get_utf_16le_uchar b i] decodes an UTF-16LE character at index [i] in [b].   W* [is_valid_utf_16le b] is [true] if and only if [b] contains valid UTF-16LE data.  Π &* {1:deprecated Deprecated functions}  * [create n] returns a fresh byte sequence of length [n]. The sequence is uninitialized and contains arbitrary bytes. @raise Invalid_argument if [n < 0] or [n > ]{!Sys.max_string_length}. @deprecated This is a deprecated alias of {!Bytes.create}/{!BytesLabels.create}.  l 1* [set s n c] modifies byte sequence [s] in place, replacing the byte at index [n] with [c]. You can also write [s.[n] <- c] instead of [set s n c]. @raise Invalid_argument if [n] is not a valid index in [s]. @deprecated This is a deprecated alias of {!Bytes.set}/{!BytesLabels.set}.   a* [blit ~src ~src_pos ~dst ~dst_pos ~len] copies [len] bytes from the string [src], starting at index [src_pos], to byte sequence [dst], starting at character number [dst_pos]. @raise Invalid_argument if [src_pos] and [len] do not designate a valid range of [src], or if [dst_pos] and [len] do not designate a valid range of [dst].  ] * Return a copy of the given string. @deprecated Because strings are immutable, it doesn't make much sense to make identical copies of them.  %* [fill s ~pos ~len c] modifies byte sequence [s] in place, replacing [len] bytes by [c], starting at [pos]. @raise Invalid_argument if [pos] and [len] do not designate a valid substring of [s]. @deprecated This is a deprecated alias of {!Bytes.fill}/{!BytesLabels.fill}.  } * Return a copy of the argument, with all lowercase letters translated to uppercase, including accented letters of the ISO Latin-1 (8859-1) character set. @deprecated Functions operating on Latin-1 character set are deprecated.  + * Return a copy of the argument, with all uppercase letters translated to lowercase, including accented letters of the ISO Latin-1 (8859-1) character set. @deprecated Functions operating on Latin-1 character set are deprecated. ٠ * Return a copy of the argument, with the first character set to uppercase, using the ISO Latin-1 (8859-1) character set.. @deprecated Functions operating on Latin-1 character set are deprecated.  * Return a copy of the argument, with the first character set to lowercase, using the ISO Latin-1 (8859-1) character set. @deprecated Functions operating on Latin-1 character set are deprecated. 5 "* {1 Binary decoding of integers} ' * The functions in this section binary decode integers from strings. All following functions raise [Invalid_argument] if the characters needed at index [i] to decode the integer are not available. Little-endian (resp. big-endian) encoding means that least (resp. most) significant bytes are stored first. Big-endian is also known as network byte order. Native-endian encoding is either little-endian or big-endian depending on {!Sys.big_endian}. 32-bit and 64-bit integers are represented by the [int32] and [int64] types, which can be interpreted either as signed or unsigned numbers. 8-bit and 16-bit integers are represented by the [int] type, which has more bits than the binary encoding. These extra bits are sign-extended (or zero-extended) for functions which decode 8-bit or 16-bit integers and represented them with [int] values.  j* [get_uint8 b i] is [b]'s unsigned 8-bit integer starting at character index [i]. @since 4.13.0 Ѡ g* [get_int8 b i] is [b]'s signed 8-bit integer starting at character index [i]. @since 4.13.0  }* [get_uint16_ne b i] is [b]'s native-endian unsigned 16-bit integer starting at character index [i]. @since 4.13.0 9 z* [get_uint16_be b i] is [b]'s big-endian unsigned 16-bit integer starting at character index [i]. @since 4.13.0  }* [get_uint16_le b i] is [b]'s little-endian unsigned 16-bit integer starting at character index [i]. @since 4.13.0  z* [get_int16_ne b i] is [b]'s native-endian signed 16-bit integer starting at character index [i]. @since 4.13.0 U w* [get_int16_be b i] is [b]'s big-endian signed 16-bit integer starting at character index [i]. @since 4.13.0  z* [get_int16_le b i] is [b]'s little-endian signed 16-bit integer starting at character index [i]. @since 4.13.0  s* [get_int32_ne b i] is [b]'s native-endian 32-bit integer starting at character index [i]. @since 4.13.0 q p* [get_int32_be b i] is [b]'s big-endian 32-bit integer starting at character index [i]. @since 4.13.0 % s* [get_int32_le b i] is [b]'s little-endian 32-bit integer starting at character index [i]. @since 4.13.0 ٠ s* [get_int64_ne b i] is [b]'s native-endian 64-bit integer starting at character index [i]. @since 4.13.0  p* [get_int64_be b i] is [b]'s big-endian 64-bit integer starting at character index [i]. @since 4.13.0 A s* [get_int64_le b i] is [b]'s little-endian 64-bit integer starting at character index [i]. @since 4.13.0 #*/*砠 = The following is for system use only. Do not call directly. {]OO|]OP)@@L)../ocamlc0-strict-sequence(-absname"-w8+a-4-9-41-42-44-45-48-70"-g+-warn-error"+A*-bin-annot)-nostdlib*-principal,-safe-string/-strict-formats#-pp #gawk -f ./expand_module_aliases.awk"-o8stdlib__StringLabels.cmi"-c0stringLabels.mli :/home/barsac/ci/builds/workspace/step-by-step-build/stdlib @0%,,4Y$Xrp0@@@8CamlinternalFormatBasics0cEXy_]ÿ-Stdlib__Uchar0*Ujmyc6]]W@0:>_]ÿAM߰@ y w43@@  @@VT@@ C B@@@@@@vu@@srVUgy@  @  @@=<@@@GF@@  @@@@@sq@10@  @sr@@@@ } |  @ut@@@@hg@@87@@ + )ts@@  Ұ@@a`xw_^@@ > =gf@@@  @@@0/@@@  @@GF=<@@@P@