Exemple #1
0
/*************************************************************************
1-dimensional Fast Hartley Transform.

Algorithm has O(N*logN) complexity for any N (composite or prime).

INPUT PARAMETERS
    A   -   array[0..N-1] - real function to be transformed
    N   -   problem size
    
OUTPUT PARAMETERS
    A   -   FHT of a input array, array[0..N-1],
            A_out[k] = sum(A_in[j]*(cos(2*pi*j*k/N)+sin(2*pi*j*k/N)), j=0..N-1)


  -- ALGLIB --
     Copyright 04.06.2009 by Bochkanov Sergey
*************************************************************************/
void fhtr1d(ap::real_1d_array& a, int n)
{
    ftplan plan;
    int i;
    ap::complex_1d_array fa;

    ap::ap_error::make_assertion(n>0, "FHTR1D: incorrect N!");
    
    //
    // Special case: N=1, FHT is just identity transform.
    // After this block we assume that N is strictly greater than 1.
    //
    if( n==1 )
    {
        return;
    }
    
    //
    // Reduce FHt to real FFT
    //
    fftr1d(a, n, fa);
    for(i = 0; i <= n-1; i++)
    {
        a(i) = fa(i).x-fa(i).y;
    }
}
Exemple #2
0
int main()
{
    int tt;scanf("%d",&tt);
    while (tt>0)
    {
        tt--;
        int n,m;
        scanf("%d%d",&n,&m);
        for (int i=0;i<n;i++) father[i]=i;
        for (int i=0;i<m;i++)
        {
            int x,y;
            scanf("%d%d",&x,&y);
            int fx=fa(x),fy=fa(y);
            if (fx!=fy)
            {
                father[fx]=fy;
            }
        }
        int q;scanf("%d",&q);
        while (q>0)
        {
            int x,y;scanf("%d%d",&x,&y);
            int fx=fa(x),fy=fa(y);
            if (fx!=fy) {printf("NO\n");}
            else {printf("YO\n");}
            q--;
        }
    }
    return 0;
}
Exemple #3
0
Bed2Fa::Bed2Fa(bool useName, const string &dbFile, const string &bedFile,
    const string &fastaOutFile, bool useFasta, bool useStrand) {

    _useName      = useName;
    _dbFile       = dbFile;
    _bedFile      = bedFile;
    _fastaOutFile = fastaOutFile;
    _useFasta     = useFasta;
    _useStrand    = useStrand;

    _bed = new BedFile(_bedFile);

    // Figure out what the output file should be.
    if (fastaOutFile == "stdout") {
        _faOut = &cout;
    }
    else {
        // Make sure we can open the file.
        ofstream fa(fastaOutFile.c_str(), ios::out);
        if ( !fa ) {
            cerr << "Error: The requested fasta output file (" << fastaOutFile << ") could not be opened. Exiting!" << endl;
            exit (1);
        }
        else {
            fa.close();
            _faOut = new ofstream(fastaOutFile.c_str(), ios::out);
        }
    }

    // Extract the requested intervals from the FASTA input file.
    ExtractDNA();
}
Exemple #4
0
Fichier : a.cpp Projet : filaPro/my
void multiply_vec(const std::vector<int> &aarr, const std::vector<int> &barr, 
    std::vector<int> &res) {
    std::vector<base> fa(aarr.begin(), aarr.end()),  fb(barr.begin(), barr.end());
    size_t cnt = 1;
    while (cnt < std::max(aarr.size(), barr.size())) {
        cnt <<= 1;
    }
    cnt <<= 1;
    fa.resize(cnt);
    fb.resize(cnt);

    fft(fa, false);
    fft(fb, false);
    for (size_t i = 0; i < cnt; ++i) {
        fa[i] *= fb[i];
    }
    fft(fa, true);

    res.resize(cnt);
    for (size_t i = 0; i < cnt; ++i) {
        res[i] = int (fa[i].re + 0.5);
    }
    // delete [] fa;
    // delete [] fb;
}
bool CDataBase::CreateNewFile(TDBFileType File)
{
	CEncryptionManager enc;
	CDirectAccess fa(m_FileName[File]);
	fa.Size(sizeof(TGenericFileHeader));
	CBlockManager bm(fa, enc);
	bm.ScanFile(sizeof(TGenericFileHeader), 0, sizeof(TGenericFileHeader));

	CBlockManager::WriteTransaction trans(bm);

	uint32_t block;
	TGenericFileHeader * buf = bm.CreateBlock<TGenericFileHeader>(block, cHeaderBlockSignature);
	uint32_t size = 0;
	uint32_t sig = -1;
	TGenericFileHeader * h = bm.ReadBlock<TGenericFileHeader>(0, size, sig);

	memset(h, 0, sizeof(TGenericFileHeader));
	memcpy(&h->Gen.Signature, &cFileSignature[File], sizeof(h->Gen.Signature));
	h->Gen.Version = cDBVersion;
	h->Gen.FileSize = fa.Size();

	memcpy(buf, h, sizeof(TGenericFileHeader));
	bm.UpdateBlock(block, 0);
	bm.UpdateBlock(0, -1);
	
	return true;
}
Exemple #6
0
FA::StatePair REParser::quantified(const FA::StatePair & p, const Quantifier & q) {
	FA dfa;
	{
		FA fa(this->fa);
		fa.removeAllMarks();
		fa.setStart(p.first);
		fa.addMark(p.second, 0);
		dfa=fa.deterministic();
	}
	QList<FA::StatePair> pairs;
	int i(0);
	for(; i<q.min; ++i) {
		pairs.append(fa.insert(dfa, false));
	}
	if(q.max>0) {
		for(; i<q.max; ++i) {
			pairs.append(reoptional_impl(fa.insert(dfa, false), -1));
		}
	} else {
		pairs.append(reclosure_impl(fa.insert(dfa, false), -1));
	}
	for(i=1; i<pairs.size(); i++) {
		pairs[0]=reconcat_impl(pairs[0], pairs[i], -1);
	}
	Q_ASSERT(pairs.size());
	int rid(-1);
	if(rec) {
		rid=rec->uniqueId();
		rec->addLine(QString("FA::StatePair p%1(reparser.quantified(p%2, REParser::Quantifier(%3)));").arg(rid).arg(p.rid).arg(q.max>=0?QString("%1,%2").arg(q.min).arg(q.max):QString().setNum(q.min)));
	}
	pairs[0].rid=rid;
	return pairs[0];
}
    vector<int64_t> multiply(const vector<int64_t>& a, const vector<int64_t>& b) {
        int n1 = a.size(), n2 = b.size();
        int m = 1;
        while (m < n1 || m < n2) m <<= 1;
        m <<= 1;

        vector<Complex> fa(m, 0), fb(m, 0);
        for (int i = 0; i < n1; ++i) {
            fa[i] = a[i];
        }
        for (int i = 0; i < n2; ++i) {
            fb[i] = b[i];
        }
        fft(fa, false);
        fft(fb, false);
        for (int i = 0; i < m; ++i) {
            fa[i] *= fb[i];
        }
        fft(fa, true);
        vector<int64_t> res(m);
        for (int i = 0; i < m; ++i) {
            res[i] = (int64_t) (fa[i].real + 0.5);
        }
        return res;
    }
Exemple #8
0
/* Main Implementation -------------------------------------------------------*/
int main( int argc, char *argv[] )
{
    if (argc == 2 && strcmp(argv[1], "--help") == 0) {
        std::cout << "Input Format:\n\n"
        << "Initial State: {3}\n"
        << "Final States:  {12,...}\n"
        << "Total States:  15\n"
        << "State    a     b     E\n"
        << "1      {...} {...} {...}\n"
        << "...    ...\n";
        exit(0);
    }

    int initState=0, totalStates=0;
    std::vector<int> finalStates;
    std::string alphabet;

    scanf("Initial State: {%d}\n", &initState); // read initial state
    read_final_states(&finalStates);            // read final states 
    scanf("Total States: %d\n", &totalStates);  // read total no. of states
    read_alphabet(&alphabet);                   // read alphabet

    // Create NFA in memory and read transition table from stdin
    Automata fa(alphabet, initState-1, totalStates, finalStates);
    read_automata(&fa);

    // Convert to dfa
    convert_nfa_dfa(&fa);
    fa.Print();

    return 0;
}
void BigIntegerStrassen::Multiply(const BigIntegerStrassen &right_number){
    vcomp fa(number.begin(), number.end());
    auto right_arr = right_number.ToArray();
    vcomp fb(right_arr.begin(), right_arr.end());

    ll n = 1;
    while (n < std::max(number.size(), right_arr.size())) n <<= 1;
    n <<= 1;

    fa.resize(n);
    fb.resize(n);

    FastFourierTransform(fa, false);
    FastFourierTransform(fb, false);

    for (ll i = 0; i < n; i++) fa[i] *= fb[i];
    FastFourierTransform(fa, true);
    
    number.resize(n);
    ll carry = 0;
    for (ll i = 0; i < n; i++){
        carry += ll(fa[i].real() + 0.5);
        number[i] = carry % base;
        carry /= base;
    }

    while (number.size() && number.back() == 0) number.pop_back();

}
void MovingMonsters::FillDistances()
{
	_currentDistance = 0;
	_somethingChanged = true;
	while (_somethingChanged) //нашлись ли еще ходы
	{
		_somethingChanged = false; //сбрасываем флажок
		//перебираем клетки
		for (int row = _fieldBottom; row <= _fieldTop; row++)
		{
			for (int col = _fieldLeft; col <= _fieldRight; col++)
			{
				Game::FieldAddress fa(col, row);
				if (_movesToRecievers[fa] == _currentDistance) //из этой надо двигаться дальше
				{
					//специально проверяем приемник с заказом
					if (_currentDistance == 0) //расстояние 0 значит приемник прямо тут
					{
						EnergyReceiver *reciever = Gadgets::receivers.GetReceiverOnSquare(fa);
						if (reciever && reciever->IsOrdered())
						{   //если есть заказ то придти к приемнику один фиг нельзя
							continue;
						}
					}

					UpdateDistance(fa, fa.UP);
					UpdateDistance(fa, fa.LEFT);
					UpdateDistance(fa, fa.RIGHT);
					UpdateDistance(fa, fa.DOWN);
				}
			}
		}
		++_currentDistance;
	}
}
Exemple #11
0
void FileAllocator::testAlloc(){

    FileAllocator fa(9*512*2/3);
    fa.setNextCluster(0, FileAllocator::EndOfClusterChain);
    fa.setNextCluster(1, FileAllocator::EndOfClusterChain);

    {
        int32_t noCluster = fa.allocate();
        assert(noCluster != -1 && noCluster > 1);
        //std::cout << "allocated no cluster is: " << noCluster << std::endl;

        fa.setNextCluster(noCluster, EndOfClusterChain);
        assert(fa.isLastCluster(noCluster));
        assert(fa.getNextCluster(noCluster) == EndOfClusterChain);
        fa.free(noCluster);
    }

    {
        int32_t noCluster = fa.allocate();
        //fill the data in this cluster....
        fa.setNextCluster(noCluster, FileAllocator::EndOfClusterChain);

        int32_t noNextCluster = fa.allocate();
        //fill the data in this cluster ....
        fa.setNextCluster(noCluster, noNextCluster);
        fa.setNextCluster(noNextCluster, FileAllocator::EndOfClusterChain);

        assert(true == fa.isUsed(noNextCluster));
        assert(true == fa.isUsed(noCluster));

        fa.free(noCluster);
        assert(true == fa.isFree(noCluster));
        assert(true == fa.isFree(noNextCluster));
    }
}
int main()
{
	Loki::FixedAllocator fa(sizeof(Obj));
	Loki::SmallObjAllocator sa(3 * sizeof(Obj), sizeof(Obj));

	Obj * p1[4];
	Obj * p2[4];
	for (int k = 0; k<4; k++) {
		p1[k] = reinterpret_cast<Obj*>(fa.Allocate());
		p2[k] = (Obj*)sa.Allocate(sizeof(Obj));
		std::cout << p1[k] << " " << p2[k] << "\n";
	}
	for (int k = 0; k<4; k++) {
		fa.Deallocate(p1[k]);
		sa.Deallocate(p2[k], sizeof(Obj));
	}

	typedef Loki::SmallObject< Loki::SingleThreaded,
		3 * sizeof(Obj),
		sizeof(Obj) > sobj;
	for (int k = 0; k<4; k++) {
		p1[k] = (Obj*)sobj::operator new(sizeof(Obj));
		p2[k] = (Obj*)sobj::operator new(sizeof(Obj));
		std::cout << p1[k] << " " << p2[k] << "\n";
	}
	for (int k = 0; k<4; k++) {
		sobj::operator delete(p1[k], sizeof(Obj));
	}
	for (int k = 0; k<4; k++) {
		std::cout << p2[k] << "\n";
	}
	for (int k = 0; k<4; k++) {
		sobj::operator delete(p2[k], sizeof(Obj));
	}
}
Exemple #13
0
void REParser::defineAs(const QString & id) {
	Q_ASSERT(id=="." || !defs.contains(id));
	if(id==".") {
		Q_ASSERT(!dot);
		dot=true;
		FA fa_dot;
		const FA::State startSate(fa_dot.addState());
		const FA::State finalState(fa_dot.addState());
		fa_dot.setStart(startSate);
		Q_ASSERT(defs.contains("."));
		FA::StatePair p(fa_dot.insert(defs["."]));
		fa_dot.addETransition(startSate, p.first);
		fa_dot.addETransition(p.second, finalState);
		fa_dot.addMark(p.second, 0);
		for(int i=0; i<6; i++) {
			FA fa(fa_dot);
			p=fa.insert(faForCharClass((CharClass)i));
			fa.addETransition(startSate, p.first);
			fa.addETransition(p.second, finalState);
			fa.addMark(p.second, 1);
			fa=fa.deterministic();
			QVector<FA::State> finals;
			for(int s(0); s<fa.count(); ++s) {
				const FA::State curState(s);
				if(fa.marks(curState).size()==2)finals.append(curState);
			}
			fa.removeAllMarks();
			foreach(FA::State s, finals) {
				fa.addMark(s, 0);
			}
			fa=fa.minimal();
			predefs[i]=fa;
		}
Exemple #14
0
void debug(void){A name,seq;C err,*sp,*spz,*spp;DC si;
 sp=scad; spz=sczad; spp=scpad; si=sitop;
 if(!debugb||!si) R;
 if(DCPARS==si->t) si=si->lnk;
 if(!si || DCDEFN!=si->t && DCSCRP!=si->t) R;
 err=jerr; jerr=0;
 if(!debadd(DCDEBG)){debugb=0; jsignal(EVSYSTEM); R;}
 sitop->ln=err;
 if(DCDEFN==si->t){
  name=scnm(CSPARS);
  seq=srd(name,local);
  seq=append(sc(si->ln),seq);
  symbis(name,seq,local);
  susp();
  scad=sp; sczad=spz; scpad=spp;
  switch(susact){
   case SUSNON: break;
   case SUSRUN: break;
   case SUSRET: symbis(name, mtv, local); break;
   case SUSPOP: symbis(name, mtv, local); break;
   case SUSRES: break;
   case SUSNXT: symbis(name, behead(seq), local); break;
 }} else if(DCSCRP==si->t){
  susp();
  scad=sp; sczad=spz; scpad=spp;
  switch(susact){
   case SUSNON: break;
   case SUSRUN: scad=scpad; break;
   case SUSRET: fa(qpopres); qpopres=0;
   case SUSPOP: scad=0; break;
   case SUSRES: break;
   case SUSNXT: break;
 }}
 susact=SUSNON; debz();
}
Exemple #15
0
LL fa(int nr) {
    if(nr==1) return 1;
    int i=0;
    for(;1LL<<i<nr;++i);
    --i;
    return 2*fa(nr-(1<<i));
}
Exemple #16
0
int main(int argc, char **argv) {
    int a;
    switch (a) {
        case 0:
            return 0;
        default:
            return 1;
    }
    for (int i = 0; i < 10; i++) {
        a = i;
    }
    while (!a) {
        a++;
    }
    do {
        --a;
    } while (a);
    if (fa(a)) {
        a = 1;
    } else if (fb(b)) {
        a = 2;
    } else {
        a = 3;
    }

}
Exemple #17
0
int main(int c, char **v)
   {int rv;
    double a, b;
    char *ss;
    unsigned char *us;
    const char *cs;

    rv = 0;

    a = 1.0;

/* warn about statement with no effect */
    b == a;

    cs = "abcd";

/* warn about const qualifier */
    ss = cs;

/* warn about signed/unsigned mismatch */
    us = fa(ss);

/* warn about signed/unsigned mismatch */
    ss = us;

    return(rv);}
Exemple #18
0
 void f_main()
 {
   int n=1;
   printf("在主程中,调用函数fa之前:n=%d\n",n);
   fa(n);
   printf("在主程中,调用函数fa之后,调用函数fb之前:n=%d\n",n);
   fb(n);
   printf("在主程中,调用函数fb之后:n=%d\n",n);
 }
 void GO(int x,int fx){
     int px=b[COT2::a[x]];BIT::I(px,-1);BIT::I(b[COT2::a[x]]=D[x]=fx==-1?1:D[fx]+1,1);
     for(QUE*p=Q[x];p;p=p->next)if(!p->ans){
         int fu=fa(p->u);if(!D[fu])continue;
         p->ans=BIT::S(D[fu])+Calc(p->u,fu,x)+Calc(p->v,fu,x);
         Clean(p->u);Clean(p->v);
     }for(EDGE*p=COT2::map[x];p;p=p->next)if(!d[p->y]&&p->y!=fx)CT::T[p->y]=CT::I(CT::T[x],0,n,COT2::a[p->y]),GO(p->y,x);
     BIT::I(b[COT2::a[x]]=px,1);BIT::I(D[x],-1);D[x]=0;
 }inline bool Run(){
 void main()
 {
   int n=1;
   printf("在主程中,调用函数fa之前:n=%d\n",n);
   fa(n);
   printf("在主程中,调用函数fa之后,调用函数fb之前:n=%d\n",n);
   fb(&n); /* 实参为n的地址 */
   printf("在主程中,调用函数fb之后:n=%d\n",n);
 }
Exemple #21
0
int main()
{
	printf("&i1=%p\n", &i1);
	printf("&i2=%p\n", &i2);
	printf("&i3=%p\n", &i3);
	printf("&i4=%p\n", &i4);
	printf("&i5=%p\n", &i5);
	fa(100);	
	while(1);
}
Exemple #22
0
int main(){
  printf("i1=%p\n",&i1);
  printf("i2=%p\n",&i2);
  printf("i3=%p\n",&i3);
  printf("i4=%p\n",&i4);
  fa(1);
  printf("fa=%p\n",fa);
  printf("pid=%d\n",getpid());
  while(1);
}//cat /proc/pid/maps
wxArrayString FileAnalysis::ParseForIncludes()
{
  if (m_Verbose)
    m_Log << _T("- Searching in \"") << m_FileName << _T("\" for included headers.\n");

  m_IncludedHeaders.Clear();

  for (size_t LineIdx = 0; LineIdx < m_LinesOfFile.GetCount(); ++LineIdx )
  {
    const wxString Line = m_LinesOfFile.Item(LineIdx);
    const wxRegEx RegEx(reInclude);
    wxString Include;
    if (RegEx.Matches(Line))
    {
      Include = RegEx.GetMatch(Line, 1);
    }
    // Include is empty if the RegEx did *not* match.
    if (!Include.IsEmpty())
    {
      if (m_Verbose)
        m_Log << _T("- Include detected via RegEx: \"") << Include << _T("\".\n");
      m_IncludedHeaders.Add(Include);

      // if it's a source file try to obtain the included header file
      if ( !m_IsHeaderFile )
      {
        wxFileName FileToParseFile(m_FileName);
        wxFileName IncludeFile(Include); // e.g. myheader.h
        if ( FileToParseFile.GetName().IsSameAs(IncludeFile.GetName()) )
        {
          if (m_Verbose)
            m_Log << _T("- Recursing into \"") << IncludeFile.GetFullName() << _T("\" for more included headers.\n");

          // "Recursion" -> do another file analysis on the header file
          FileAnalysis fa(FileToParseFile.GetPath()+
                          FileToParseFile.GetPathSeparator()+
                          IncludeFile.GetFullName());
          fa.LoadFile();
          wxArrayString MoreIncludedHeaders = fa.ParseForIncludes();

          // Only add headers that are not included by the source file
          for ( size_t i = 0; i < MoreIncludedHeaders.GetCount(); ++i )
            if ( m_IncludedHeaders.Index(MoreIncludedHeaders[i]) == wxNOT_FOUND )
              m_IncludedHeaders.Add(MoreIncludedHeaders[i]);

          m_Log << fa.GetLog();
          m_HasHeaderFile = true;
        }
      }
    }
  }

  return m_IncludedHeaders;
}
Exemple #24
0
int main()
{
	printf("i1 addr=%p\n", &i1);		
	printf("i2 addr=%p\n", &i2);		
	printf("i3 addr=%p\n", &i3);		
	printf("i4 addr=%p\n", &i4);		
	printf("i5 addr=%p\n", &i5);		
	fa(100);
	while(1);
	return 0;
}
Exemple #25
0
int main(){
	printf("pid = %d\n",getpid());//取进程的ID;
	printf("@全局i1 = %p\n",&i1);
	printf("@全局i2 = %p\n",&i2);
	printf("@BSS段i3 = %p\n",&i3);
	printf("@只读常量i4 = %p\n",&i4);
	printf("@代码fa = %p\n",fa);
	fa(1);
	sleep(20);//死循环;
	return 0;
}
Exemple #26
0
int main(){
  printf("i1=%p\n",&i1);
  printf("i2=%p\n",&i2);
  printf("i3=%p\n",&i3);
  printf("i4=%p\n",&i4);
  printf("i5=%p\n",&i5);
  printf("fa=%p\n",fa);
  fa(100);
  while(1);
  return 0;
}
Exemple #27
0
int main(int argc, char* argv[])
{
	ifstream fs(argv[1]);
	ifstream ft(argv[2]);
	ifstream fa(argv[3]);
	string line_tree,line_str,line_align;
	vector<vector<string> > line_tree_vecs;
	vector<vector<string> > line_str_vecs;
	vector<vector<string> > line_align_vecs;
	int block_size = 1000;
	load_data_into_blocks(line_tree_vecs,fs,block_size);
	load_data_into_blocks(line_str_vecs,ft,block_size);
	load_data_into_blocks(line_align_vecs,fa,block_size);
	ofstream fs2t("rules.s2t");
	ofstream ft2s("rules.t2s");
	if (!fs2t.is_open() || !ft2s.is_open())
		return 0;
	int processed_num = 0;
	int block_num = line_tree_vecs.size();
	for (size_t i=0;i<block_num;i++)
	{
		vector<vector<string> > fw_rules_vec;
		vector<vector<string> > bw_rules_vec;
		block_size = line_tree_vecs.at(i).size();
		fw_rules_vec.resize(block_size);
		bw_rules_vec.resize(block_size);
#pragma omp parallel for num_threads(16)
		for (size_t j=0;j<block_size;j++)
		{
			RuleExtractor rule_extractor(line_tree_vecs.at(i).at(j),line_str_vecs.at(i).at(j),line_align_vecs.at(i).at(j));
			if (rule_extractor.flag == false)
				continue;
			rule_extractor.extract_rules();
			rule_extractor.dump_rules(fw_rules_vec.at(j),bw_rules_vec.at(j));
		}
		processed_num += block_size;
		cerr<<processed_num<<endl;
		for (auto &rules : fw_rules_vec)
		{
			for (auto &rule : rules)
			{
				fs2t<<rule<<endl;
			}
		}
		for (auto &rules : bw_rules_vec)
		{
			for (auto &rule : rules)
			{
				ft2s<<rule<<endl;
			}
		}
	}
}
    char a_getchar(ac_node *p)
    {
        //返回节点p的字母 若为根节点则输出@
        if(p->a_fa == NULL)
            return('@');

        ac_node *fa(p->a_fa);
        for(int i = 0; i < MAX; ++ i)
            if(fa->a_ch[i] == p)
                return('a' + i);
        return('@');
    }
Exemple #29
0
void RichEdit::SpellerAdd(const WString& w, int lang)
{
	if(!SpellWord(w, w.GetCount(), lang)) {
		Speller *f = sGetSpeller(lang);
		if(f) {
			FileAppend fa(sUserFile(lang));
			fa.PutLine(ToUtf8(w));
			f->user.Add(w);
			speller_cache.Clear();
		}
	}
}
void MovingMonsterSources::LoadLevel(rapidxml::xml_node<> *root)
{
	rapidxml::xml_node<> *elem = root->first_node("MovingMonsterSources");
	if( elem ) {
		elem = elem->first_node("Source");
		while( elem )
		{
			Game::FieldAddress fa(elem);
			_sources.insert( std::make_pair(fa, 0) );
			elem = elem->next_sibling("Source");
		}
	}
}