import{s as Ze,n as Ne,o as Se}from"../chunks/scheduler.9bc65507.js";import{S as He,i as We,g as a,s,r as h,A as Xe,h as i,f as t,c as r,j as x,u as g,x as p,k as $,y as o,a as d,v as f,d as u,t as _,w as k}from"../chunks/index.707bf1b6.js";import{D as A}from"../chunks/Docstring.17db21ae.js";import{C as Ae}from"../chunks/CodeBlock.54a9f38d.js";import{H as Pe}from"../chunks/Heading.342b1fa6.js";function Ye(Ce){let b,K,Y,ee,J,te,M,ne,q,Ue='The PhoBERT model was proposed in <a href="https://www.aclweb.org/anthology/2020.findings-emnlp.92.pdf" rel="nofollow">PhoBERT: Pre-trained language models for Vietnamese</a> by Dat Quoc Nguyen, Anh Tuan Nguyen.',oe,P,ze="The abstract from the paper is the following:",se,C,Ve=`<em>We present PhoBERT with two versions, PhoBERT-base and PhoBERT-large, the first public large-scale monolingual
language models pre-trained for Vietnamese. Experimental results show that PhoBERT consistently outperforms the recent
best pre-trained multilingual model XLM-R (Conneau et al., 2020) and improves the state-of-the-art in multiple
Vietnamese-specific NLP tasks including Part-of-speech tagging, Dependency parsing, Named-entity recognition and
Natural language inference.</em>`,re,U,Ee="Example of use:",ae,z,ie,V,Ie='This model was contributed by <a href="https://huggingface.co/dqnguyen" rel="nofollow">dqnguyen</a>. The original code can be found <a href="https://github.com/VinAIResearch/PhoBERT" rel="nofollow">here</a>.',le,E,de,l,I,ue,G,Le="Construct a PhoBERT tokenizer. Based on Byte-Pair-Encoding.",_e,F,Be=`This tokenizer inherits from <a href="/docs/transformers/main/en/main_classes/tokenizer#transformers.PreTrainedTokenizer">PreTrainedTokenizer</a> which contains most of the main methods. Users should refer to
this superclass for more information regarding those methods.`,ke,T,L,be,Q,Re="Loads a pre-existing dictionary from a text file and adds its symbols to this instance.",Te,m,B,ve,Z,je=`Build model inputs from a sequence or a pair of sequence for sequence classification tasks by concatenating and
adding special tokens. A PhoBERT sequence has the following format:`,ye,N,De="<li>single sequence: <code>&lt;s&gt; X &lt;/s&gt;</code></li> <li>pair of sequences: <code>&lt;s&gt; A &lt;/s&gt;&lt;/s&gt; B &lt;/s&gt;</code></li>",we,v,R,xe,S,Ge="Converts a sequence of tokens (string) in a single string.",$e,y,j,Je,H,Fe=`Create a mask from the two sequences passed to be used in a sequence-pair classification task. PhoBERT does not
make use of token type ids, therefore a list of zeros is returned.`,Me,w,D,qe,W,Qe=`Retrieve sequence ids from a token list that has no special tokens added. This method is called when adding
special tokens using the tokenizer <code>prepare_for_model</code> method.`,ce,O,pe;return J=new Pe({props:{title:"PhoBERT",local:"phobert",headingTag:"h1"}}),M=new Pe({props:{title:"Overview",local:"overview",headingTag:"h2"}}),z=new Ae({props:{code:"aW1wb3J0JTIwdG9yY2glMEFmcm9tJTIwdHJhbnNmb3JtZXJzJTIwaW1wb3J0JTIwQXV0b01vZGVsJTJDJTIwQXV0b1Rva2VuaXplciUwQSUwQXBob2JlcnQlMjAlM0QlMjBBdXRvTW9kZWwuZnJvbV9wcmV0cmFpbmVkKCUyMnZpbmFpJTJGcGhvYmVydC1iYXNlJTIyKSUwQXRva2VuaXplciUyMCUzRCUyMEF1dG9Ub2tlbml6ZXIuZnJvbV9wcmV0cmFpbmVkKCUyMnZpbmFpJTJGcGhvYmVydC1iYXNlJTIyKSUwQSUwQSUyMyUyMElOUFVUJTIwVEVYVCUyME1VU1QlMjBCRSUyMEFMUkVBRFklMjBXT1JELVNFR01FTlRFRCElMEFsaW5lJTIwJTNEJTIwJTIyVCVDMyVCNGklMjBsJUMzJUEwJTIwc2luaF92aSVDMyVBQW4lMjB0ciVDNiVCMCVFMSVCQiU5RG5nJTIwJUM0JTkxJUUxJUJBJUExaV9oJUUxJUJCJThEYyUyMEMlQzMlQjRuZ19uZ2glRTElQkIlODclMjAuJTIyJTBBJTBBaW5wdXRfaWRzJTIwJTNEJTIwdG9yY2gudGVuc29yKCU1QnRva2VuaXplci5lbmNvZGUobGluZSklNUQpJTBBJTBBd2l0aCUyMHRvcmNoLm5vX2dyYWQoKSUzQSUwQSUyMCUyMCUyMCUyMGZlYXR1cmVzJTIwJTNEJTIwcGhvYmVydChpbnB1dF9pZHMpJTIwJTIwJTIzJTIwTW9kZWxzJTIwb3V0cHV0cyUyMGFyZSUyMG5vdyUyMHR1cGxlcyUwQSUwQSUyMyUyMFdpdGglMjBUZW5zb3JGbG93JTIwMi4wJTJCJTNBJTBBJTIzJTIwZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMFRGQXV0b01vZGVsJTBBJTIzJTIwcGhvYmVydCUyMCUzRCUyMFRGQXV0b01vZGVsLmZyb21fcHJldHJhaW5lZCglMjJ2aW5haSUyRnBob2JlcnQtYmFzZSUyMik=",highlighted:`<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-keyword">import</span> torch
<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoModel, AutoTokenizer

<span class="hljs-meta">&gt;&gt;&gt; </span>phobert = AutoModel.from_pretrained(<span class="hljs-string">&quot;vinai/phobert-base&quot;</span>)
<span class="hljs-meta">&gt;&gt;&gt; </span>tokenizer = AutoTokenizer.from_pretrained(<span class="hljs-string">&quot;vinai/phobert-base&quot;</span>)

<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-comment"># INPUT TEXT MUST BE ALREADY WORD-SEGMENTED!</span>
<span class="hljs-meta">&gt;&gt;&gt; </span>line = <span class="hljs-string">&quot;Tôi là sinh_viên trường đại_học Công_nghệ .&quot;</span>

<span class="hljs-meta">&gt;&gt;&gt; </span>input_ids = torch.tensor([tokenizer.encode(line)])

<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-keyword">with</span> torch.no_grad():
<span class="hljs-meta">... </span>    features = phobert(input_ids)  <span class="hljs-comment"># Models outputs are now tuples</span>

<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-comment"># With TensorFlow 2.0+:</span>
<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-comment"># from transformers import TFAutoModel</span>
<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-comment"># phobert = TFAutoModel.from_pretrained(&quot;vinai/phobert-base&quot;)</span>`,wrap:!1}}),E=new Pe({props:{title:"PhobertTokenizer",local:"transformers.PhobertTokenizer",headingTag:"h2"}}),I=new A({props:{name:"class transformers.PhobertTokenizer",anchor:"transformers.PhobertTokenizer",parameters:[{name:"vocab_file",val:""},{name:"merges_file",val:""},{name:"bos_token",val:" = '<s>'"},{name:"eos_token",val:" = '</s>'"},{name:"sep_token",val:" = '</s>'"},{name:"cls_token",val:" = '<s>'"},{name:"unk_token",val:" = '<unk>'"},{name:"pad_token",val:" = '<pad>'"},{name:"mask_token",val:" = '<mask>'"},{name:"**kwargs",val:""}],parametersDescription:[{anchor:"transformers.PhobertTokenizer.vocab_file",description:`<strong>vocab_file</strong> (<code>str</code>) &#x2014;
Path to the vocabulary file.`,name:"vocab_file"},{anchor:"transformers.PhobertTokenizer.merges_file",description:`<strong>merges_file</strong> (<code>str</code>) &#x2014;
Path to the merges file.`,name:"merges_file"},{anchor:"transformers.PhobertTokenizer.bos_token",description:`<strong>bos_token</strong> (<code>st</code>, <em>optional</em>, defaults to <code>&quot;&lt;s&gt;&quot;</code>) &#x2014;
The beginning of sequence token that was used during pretraining. Can be used a sequence classifier token.</p>
<div class="course-tip  bg-gradient-to-br dark:bg-gradient-to-r before:border-green-500 dark:before:border-green-800 from-green-50 dark:from-gray-900 to-white dark:to-gray-950 border border-green-50 text-green-700 dark:text-gray-400">
						
<p>When building a sequence using special tokens, this is not the token that is used for the beginning of
sequence. The token used is the <code>cls_token</code>.</p>

					</div>`,name:"bos_token"},{anchor:"transformers.PhobertTokenizer.eos_token",description:`<strong>eos_token</strong> (<code>str</code>, <em>optional</em>, defaults to <code>&quot;&lt;/s&gt;&quot;</code>) &#x2014;
The end of sequence token.</p>
<div class="course-tip  bg-gradient-to-br dark:bg-gradient-to-r before:border-green-500 dark:before:border-green-800 from-green-50 dark:from-gray-900 to-white dark:to-gray-950 border border-green-50 text-green-700 dark:text-gray-400">
						
<p>When building a sequence using special tokens, this is not the token that is used for the end of sequence.
The token used is the <code>sep_token</code>.</p>

					</div>`,name:"eos_token"},{anchor:"transformers.PhobertTokenizer.sep_token",description:`<strong>sep_token</strong> (<code>str</code>, <em>optional</em>, defaults to <code>&quot;&lt;/s&gt;&quot;</code>) &#x2014;
The separator token, which is used when building a sequence from multiple sequences, e.g. two sequences for
sequence classification or for a text and a question for question answering. It is also used as the last
token of a sequence built with special tokens.`,name:"sep_token"},{anchor:"transformers.PhobertTokenizer.cls_token",description:`<strong>cls_token</strong> (<code>str</code>, <em>optional</em>, defaults to <code>&quot;&lt;s&gt;&quot;</code>) &#x2014;
The classifier token which is used when doing sequence classification (classification of the whole sequence
instead of per-token classification). It is the first token of the sequence when built with special tokens.`,name:"cls_token"},{anchor:"transformers.PhobertTokenizer.unk_token",description:`<strong>unk_token</strong> (<code>str</code>, <em>optional</em>, defaults to <code>&quot;&lt;unk&gt;&quot;</code>) &#x2014;
The unknown token. A token that is not in the vocabulary cannot be converted to an ID and is set to be this
token instead.`,name:"unk_token"},{anchor:"transformers.PhobertTokenizer.pad_token",description:`<strong>pad_token</strong> (<code>str</code>, <em>optional</em>, defaults to <code>&quot;&lt;pad&gt;&quot;</code>) &#x2014;
The token used for padding, for example when batching sequences of different lengths.`,name:"pad_token"},{anchor:"transformers.PhobertTokenizer.mask_token",description:`<strong>mask_token</strong> (<code>str</code>, <em>optional</em>, defaults to <code>&quot;&lt;mask&gt;&quot;</code>) &#x2014;
The token used for masking values. This is the token used when training this model with masked language
modeling. This is the token which the model will try to predict.`,name:"mask_token"}],source:"https://github.com/huggingface/transformers/blob/main/src/transformers/models/phobert/tokenization_phobert.py#L68"}}),L=new A({props:{name:"add_from_file",anchor:"transformers.PhobertTokenizer.add_from_file",parameters:[{name:"f",val:""}],source:"https://github.com/huggingface/transformers/blob/main/src/transformers/models/phobert/tokenization_phobert.py#L346"}}),B=new A({props:{name:"build_inputs_with_special_tokens",anchor:"transformers.PhobertTokenizer.build_inputs_with_special_tokens",parameters:[{name:"token_ids_0",val:": typing.List[int]"},{name:"token_ids_1",val:": typing.Optional[typing.List[int]] = None"}],parametersDescription:[{anchor:"transformers.PhobertTokenizer.build_inputs_with_special_tokens.token_ids_0",description:`<strong>token_ids_0</strong> (<code>List[int]</code>) &#x2014;
List of IDs to which the special tokens will be added.`,name:"token_ids_0"},{anchor:"transformers.PhobertTokenizer.build_inputs_with_special_tokens.token_ids_1",description:`<strong>token_ids_1</strong> (<code>List[int]</code>, <em>optional</em>) &#x2014;
Optional second list of IDs for sequence pairs.`,name:"token_ids_1"}],source:"https://github.com/huggingface/transformers/blob/main/src/transformers/models/phobert/tokenization_phobert.py#L165",returnDescription:`<script context="module">export const metadata = 'undefined';<\/script>


<p>List of <a href="../glossary#input-ids">input IDs</a> with the appropriate special tokens.</p>
`,returnType:`<script context="module">export const metadata = 'undefined';<\/script>


<p><code>List[int]</code></p>
`}}),R=new A({props:{name:"convert_tokens_to_string",anchor:"transformers.PhobertTokenizer.convert_tokens_to_string",parameters:[{name:"tokens",val:""}],source:"https://github.com/huggingface/transformers/blob/main/src/transformers/models/phobert/tokenization_phobert.py#L312"}}),j=new A({props:{name:"create_token_type_ids_from_sequences",anchor:"transformers.PhobertTokenizer.create_token_type_ids_from_sequences",parameters:[{name:"token_ids_0",val:": typing.List[int]"},{name:"token_ids_1",val:": typing.Optional[typing.List[int]] = None"}],parametersDescription:[{anchor:"transformers.PhobertTokenizer.create_token_type_ids_from_sequences.token_ids_0",description:`<strong>token_ids_0</strong> (<code>List[int]</code>) &#x2014;
List of IDs.`,name:"token_ids_0"},{anchor:"transformers.PhobertTokenizer.create_token_type_ids_from_sequences.token_ids_1",description:`<strong>token_ids_1</strong> (<code>List[int]</code>, <em>optional</em>) &#x2014;
Optional second list of IDs for sequence pairs.`,name:"token_ids_1"}],source:"https://github.com/huggingface/transformers/blob/main/src/transformers/models/phobert/tokenization_phobert.py#L219",returnDescription:`<script context="module">export const metadata = 'undefined';<\/script>


<p>List of zeros.</p>
`,returnType:`<script context="module">export const metadata = 'undefined';<\/script>


<p><code>List[int]</code></p>
`}}),D=new A({props:{name:"get_special_tokens_mask",anchor:"transformers.PhobertTokenizer.get_special_tokens_mask",parameters:[{name:"token_ids_0",val:": typing.List[int]"},{name:"token_ids_1",val:": typing.Optional[typing.List[int]] = None"},{name:"already_has_special_tokens",val:": bool = False"}],parametersDescription:[{anchor:"transformers.PhobertTokenizer.get_special_tokens_mask.token_ids_0",description:`<strong>token_ids_0</strong> (<code>List[int]</code>) &#x2014;
List of IDs.`,name:"token_ids_0"},{anchor:"transformers.PhobertTokenizer.get_special_tokens_mask.token_ids_1",description:`<strong>token_ids_1</strong> (<code>List[int]</code>, <em>optional</em>) &#x2014;
Optional second list of IDs for sequence pairs.`,name:"token_ids_1"},{anchor:"transformers.PhobertTokenizer.get_special_tokens_mask.already_has_special_tokens",description:`<strong>already_has_special_tokens</strong> (<code>bool</code>, <em>optional</em>, defaults to <code>False</code>) &#x2014;
Whether or not the token list is already formatted with special tokens for the model.`,name:"already_has_special_tokens"}],source:"https://github.com/huggingface/transformers/blob/main/src/transformers/models/phobert/tokenization_phobert.py#L191",returnDescription:`<script context="module">export const metadata = 'undefined';<\/script>


<p>A list of integers in the range [0, 1]: 1 for a special token, 0 for a sequence token.</p>
`,returnType:`<script context="module">export const metadata = 'undefined';<\/script>


<p><code>List[int]</code></p>
`}}),{c(){b=a("meta"),K=s(),Y=a("p"),ee=s(),h(J.$$.fragment),te=s(),h(M.$$.fragment),ne=s(),q=a("p"),q.innerHTML=Ue,oe=s(),P=a("p"),P.textContent=ze,se=s(),C=a("p"),C.innerHTML=Ve,re=s(),U=a("p"),U.textContent=Ee,ae=s(),h(z.$$.fragment),ie=s(),V=a("p"),V.innerHTML=Ie,le=s(),h(E.$$.fragment),de=s(),l=a("div"),h(I.$$.fragment),ue=s(),G=a("p"),G.textContent=Le,_e=s(),F=a("p"),F.innerHTML=Be,ke=s(),T=a("div"),h(L.$$.fragment),be=s(),Q=a("p"),Q.textContent=Re,Te=s(),m=a("div"),h(B.$$.fragment),ve=s(),Z=a("p"),Z.textContent=je,ye=s(),N=a("ul"),N.innerHTML=De,we=s(),v=a("div"),h(R.$$.fragment),xe=s(),S=a("p"),S.textContent=Ge,$e=s(),y=a("div"),h(j.$$.fragment),Je=s(),H=a("p"),H.textContent=Fe,Me=s(),w=a("div"),h(D.$$.fragment),qe=s(),W=a("p"),W.innerHTML=Qe,ce=s(),O=a("p"),this.h()},l(e){const n=Xe("svelte-u9bgzb",document.head);b=i(n,"META",{name:!0,content:!0}),n.forEach(t),K=r(e),Y=i(e,"P",{}),x(Y).forEach(t),ee=r(e),g(J.$$.fragment,e),te=r(e),g(M.$$.fragment,e),ne=r(e),q=i(e,"P",{"data-svelte-h":!0}),p(q)!=="svelte-1ao5fqi"&&(q.innerHTML=Ue),oe=r(e),P=i(e,"P",{"data-svelte-h":!0}),p(P)!=="svelte-vfdo9a"&&(P.textContent=ze),se=r(e),C=i(e,"P",{"data-svelte-h":!0}),p(C)!=="svelte-pnlemp"&&(C.innerHTML=Ve),re=r(e),U=i(e,"P",{"data-svelte-h":!0}),p(U)!=="svelte-1euxn0a"&&(U.textContent=Ee),ae=r(e),g(z.$$.fragment,e),ie=r(e),V=i(e,"P",{"data-svelte-h":!0}),p(V)!=="svelte-cbf0gj"&&(V.innerHTML=Ie),le=r(e),g(E.$$.fragment,e),de=r(e),l=i(e,"DIV",{class:!0});var c=x(l);g(I.$$.fragment,c),ue=r(c),G=i(c,"P",{"data-svelte-h":!0}),p(G)!=="svelte-f1kmpq"&&(G.textContent=Le),_e=r(c),F=i(c,"P",{"data-svelte-h":!0}),p(F)!=="svelte-1c3t5ty"&&(F.innerHTML=Be),ke=r(c),T=i(c,"DIV",{class:!0});var me=x(T);g(L.$$.fragment,me),be=r(me),Q=i(me,"P",{"data-svelte-h":!0}),p(Q)!=="svelte-ooaeix"&&(Q.textContent=Re),me.forEach(t),Te=r(c),m=i(c,"DIV",{class:!0});var X=x(m);g(B.$$.fragment,X),ve=r(X),Z=i(X,"P",{"data-svelte-h":!0}),p(Z)!=="svelte-dhtv7"&&(Z.textContent=je),ye=r(X),N=i(X,"UL",{"data-svelte-h":!0}),p(N)!=="svelte-rq8uot"&&(N.innerHTML=De),X.forEach(t),we=r(c),v=i(c,"DIV",{class:!0});var he=x(v);g(R.$$.fragment,he),xe=r(he),S=i(he,"P",{"data-svelte-h":!0}),p(S)!=="svelte-b3k2yi"&&(S.textContent=Ge),he.forEach(t),$e=r(c),y=i(c,"DIV",{class:!0});var ge=x(y);g(j.$$.fragment,ge),Je=r(ge),H=i(ge,"P",{"data-svelte-h":!0}),p(H)!=="svelte-qg6q9n"&&(H.textContent=Fe),ge.forEach(t),Me=r(c),w=i(c,"DIV",{class:!0});var fe=x(w);g(D.$$.fragment,fe),qe=r(fe),W=i(fe,"P",{"data-svelte-h":!0}),p(W)!=="svelte-1f4f5kp"&&(W.innerHTML=Qe),fe.forEach(t),c.forEach(t),ce=r(e),O=i(e,"P",{}),x(O).forEach(t),this.h()},h(){$(b,"name","hf:doc:metadata"),$(b,"content",Oe),$(T,"class","docstring border-l-2 border-t-2 pl-4 pt-3.5 border-gray-100 rounded-tl-xl mb-6 mt-8"),$(m,"class","docstring border-l-2 border-t-2 pl-4 pt-3.5 border-gray-100 rounded-tl-xl mb-6 mt-8"),$(v,"class","docstring border-l-2 border-t-2 pl-4 pt-3.5 border-gray-100 rounded-tl-xl mb-6 mt-8"),$(y,"class","docstring border-l-2 border-t-2 pl-4 pt-3.5 border-gray-100 rounded-tl-xl mb-6 mt-8"),$(w,"class","docstring border-l-2 border-t-2 pl-4 pt-3.5 border-gray-100 rounded-tl-xl mb-6 mt-8"),$(l,"class","docstring border-l-2 border-t-2 pl-4 pt-3.5 border-gray-100 rounded-tl-xl mb-6 mt-8")},m(e,n){o(document.head,b),d(e,K,n),d(e,Y,n),d(e,ee,n),f(J,e,n),d(e,te,n),f(M,e,n),d(e,ne,n),d(e,q,n),d(e,oe,n),d(e,P,n),d(e,se,n),d(e,C,n),d(e,re,n),d(e,U,n),d(e,ae,n),f(z,e,n),d(e,ie,n),d(e,V,n),d(e,le,n),f(E,e,n),d(e,de,n),d(e,l,n),f(I,l,null),o(l,ue),o(l,G),o(l,_e),o(l,F),o(l,ke),o(l,T),f(L,T,null),o(T,be),o(T,Q),o(l,Te),o(l,m),f(B,m,null),o(m,ve),o(m,Z),o(m,ye),o(m,N),o(l,we),o(l,v),f(R,v,null),o(v,xe),o(v,S),o(l,$e),o(l,y),f(j,y,null),o(y,Je),o(y,H),o(l,Me),o(l,w),f(D,w,null),o(w,qe),o(w,W),d(e,ce,n),d(e,O,n),pe=!0},p:Ne,i(e){pe||(u(J.$$.fragment,e),u(M.$$.fragment,e),u(z.$$.fragment,e),u(E.$$.fragment,e),u(I.$$.fragment,e),u(L.$$.fragment,e),u(B.$$.fragment,e),u(R.$$.fragment,e),u(j.$$.fragment,e),u(D.$$.fragment,e),pe=!0)},o(e){_(J.$$.fragment,e),_(M.$$.fragment,e),_(z.$$.fragment,e),_(E.$$.fragment,e),_(I.$$.fragment,e),_(L.$$.fragment,e),_(B.$$.fragment,e),_(R.$$.fragment,e),_(j.$$.fragment,e),_(D.$$.fragment,e),pe=!1},d(e){e&&(t(K),t(Y),t(ee),t(te),t(ne),t(q),t(oe),t(P),t(se),t(C),t(re),t(U),t(ae),t(ie),t(V),t(le),t(de),t(l),t(ce),t(O)),t(b),k(J,e),k(M,e),k(z,e),k(E,e),k(I),k(L),k(B),k(R),k(j),k(D)}}}const Oe='{"title":"PhoBERT","local":"phobert","sections":[{"title":"Overview","local":"overview","sections":[],"depth":2},{"title":"PhobertTokenizer","local":"transformers.PhobertTokenizer","sections":[],"depth":2}],"depth":1}';function Ke(Ce){return Se(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class rt extends He{constructor(b){super(),We(this,b,Ke,Ye,Ze,{})}}export{rt as component};
