﻿<?xml version="1.0" encoding="utf-8"?><Root><Survey VersionNumber="2" VersionName="1.31.0"><SurveyID>a9f02ea5-bb6c-4204-b2fb-389eaf64fb73</SurveyID><OrgId>d98564a9-a241-4bf2-b502-018cf75a9b72</OrgId><SurveyName>Rating Sample</SurveyName><Description /><Sealed>False</Sealed><Creator>DoobloSupport-Daniel</Creator><TimeCreated>636619985497300000</TimeCreated><TimeModified>636619994001168682</TimeModified><TimeSealed>3155378903999970000</TimeSealed><Randomed>True</Randomed><HalfRandomed>False</HalfRandomed><NextQuestionID>7</NextQuestionID><ReadOnly>False</ReadOnly><Deleted>0</Deleted><ULAssembly /><ULClassName>SurveyToGo.UserLogic.Creator.SurveyLogicTempl</ULClassName><ULSource>&lt;?xml version="1.0" encoding="utf-16"?&gt;
&lt;UserLogicContents xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"&gt;
  &lt;Items&gt;
    &lt;HData&gt;
      &lt;HTp&gt;ehtQuestion&lt;/HTp&gt;
      &lt;STp&gt;estLast&lt;/STp&gt;
      &lt;CTp&gt;echtLast&lt;/CTp&gt;
      &lt;QTp&gt;eqhtExpression&lt;/QTp&gt;
      &lt;Key&gt;3&lt;/Key&gt;
      &lt;Name&gt;QuestionExpression_3&lt;/Name&gt;
      &lt;Behv&gt;ecsbDefault&lt;/Behv&gt;
      &lt;QDep&gt;
        &lt;int&gt;2&lt;/int&gt;
        &lt;int&gt;1&lt;/int&gt;
        &lt;int&gt;4&lt;/int&gt;
      &lt;/QDep&gt;
      &lt;CDep /&gt;
    &lt;/HData&gt;
    &lt;HData&gt;
      &lt;HTp&gt;ehtQuestion&lt;/HTp&gt;
      &lt;STp&gt;estLast&lt;/STp&gt;
      &lt;CTp&gt;echtLast&lt;/CTp&gt;
      &lt;QTp&gt;eqhtStart&lt;/QTp&gt;
      &lt;Key&gt;5&lt;/Key&gt;
      &lt;Name&gt;QuestionStart_5&lt;/Name&gt;
      &lt;Behv&gt;ecsbDefault&lt;/Behv&gt;
      &lt;QDep&gt;
        &lt;int&gt;0&lt;/int&gt;
        &lt;int&gt;1&lt;/int&gt;
        &lt;int&gt;4&lt;/int&gt;
      &lt;/QDep&gt;
      &lt;CDep /&gt;
    &lt;/HData&gt;
  &lt;/Items&gt;
  &lt;Source&gt;// Question symbols
var NumRated = null;var TopBottom = null;var Rates = null;var SetRated = null;var RatedOrder = null;var UseRate = null;

	function StartSurvey()
	{
		/*_@_SS_START_@*/

		/*_@_SS_END_@*/
	}

	/*_@_USERCODE_START_@*/
/***********************************************************************/

function Kad_ValidationBrandDisposition(qidx)
{
	var check = false;
	var at1=0;
	var at2=0;
	var a=1;
	for(a=1;a&amp;lt;=GetTopicCount(qidx);a++)
	{
		if(AnswerChoice(qidx,a)==1)
		{
			at1+=1;
		}
		if(AnswerChoice(qidx,a)==2)
		{
			at2+=1;
		}
	}
	if(at1&amp;gt;1 || at2&amp;gt;3)
	{
		check=true;
	}
	return check;
}

function Kad_GetCodes(arrayidxbrdcodes)
{
	var codes1=Array();
	var codes2=Array();
	var result=Array();
	var a=0;
	var b=0;
	var c=0;
	var n=0;
	for(a=0;a&amp;lt;arrayidxbrdcodes.length;a++)
	{
		codes1=stringSplit(arrayidxbrdcodes[a],"/");
		for(b=0;b&amp;lt;codes1.length;b++)
		{
			if(stringContains(codes1[b],"-"))
			{
				codes2=stringSplit(codes1[b],"-")
				for(c=0;c&amp;lt;codes2.length;c++)
				{
					result[n]=codes2[c];
					n+=1;
				}
			}
			else
			{
				result[n]=codes1[b];
				n+=1;
			}
		}
	}
	return result;
}

function Kad_BrandUmbrella(qidxfiltered,arrayidxbrdcodes)
{
	var result=Array();
	var a=0;
	var b=0;
	for(a=0;a&amp;lt;arrayidxbrdcodes.length;a++)
	{
		if(Contains(qidxfiltered,Kad_GetCodes(arrayidxbrdcodes[a])))
		{
			result[b]=a+1;
			b+=1;
		}
	}
	return result;
}

function Kad_CombineTomSpontAided(qidxtom,qidxspont,qidxaided,arrayothers)
{
	var a=1;
	var h=Array();
	var n=0;
	for(a=1;a&amp;lt;=arrayothers;a++)
	{
		if(Answer(qidxtom)==arrayothers[a-1] || Contains(qidxspont,arrayothers[a-1]))
		{
			SetAnswerVisible(qidxaided,arrayothers[a-1],true);
		}
	}
	for(a=1;a&amp;lt;=GetAnswerCount(qidxaided)-1;a++)
	{
		if(Answer(qidxtom)==a || Contains(qidxspont,a) || Contains(qidxaided,a))
		{
			h[n]=a;
			n=n+1;
		}
	}
	ClearAnswer(qidxaided);
	SetAnswer(qidxaided,h);
}

function Kad_CheckExistingBrand(qidxbrand,arraybrand)
{
	var a = 0;
	var h = false;
	var res = 0;
	var arr = GetAnswers(QRef(qidxbrand));
	var codes = Kad_GetCodes(arraybrand);
	for(a=0;a&amp;lt;arr.length;a++)
	{
		if(InArray(arraybrand[a],arr)==true)
		{
			h = true;
			break;
		}
	}
	return h;
}

function Kad_CheckExistingBrand(qidxbrand1,qidxbrand2,arraybrand)
{
	var a = 0;
	var h = false;
	var res = 0;
	var arr1 = GetAnswers(qidxbrand1);
	var arr2 = GetAnswers(qidxbrand2);
	var codes = Kad_GetCodes(arraybrand);
	for(a=0;a&amp;lt;codes.length;a++)
	{
		if(InArray(codes[a],arr1)==true &amp;amp;&amp;amp; InArray(codes[a],arr2)==false)
		{
			res = a + 1;
		}
	}
	if(res == codes.length)
	{
		h = true;
	}
	return h;
}

function Kad_RangeScore(totalscore,arrayscore)
{
	var scorecat=0;
	var a=0;
	for(a=0;a&amp;lt;arrayscore.length;a++)
	{
		if(totalscore&amp;lt;=arrayscore[a])
		{
			scorecat=a+1;
		}
	}
	return scorecat;
}

function Kad_GetRespondent(iteration,qidxday,qidxmonth,qidxyear,qidxrespname)
{
	var diff = Array();
	var arr = Array();
	var a = 1;
	var val = 0;
	var dtresp;
	for(a=1;a&amp;lt;=iteration;a++)
	{
		dtresp = Date(AnswerIter(QRef(qidxmonth),a)+ "/" + AnswerIter(QRef(qidxday),a)+ "/" + Today.Year);
		if(dtresp &amp;gt; Now)
		{
			dtresp = Date(AnswerIter(QRef(qidxmonth),a)+ "/" + AnswerIter(QRef(qidxday),a)+ "/" + (Today.Year - 1));
		}
		diff[a-1] = Round(TimeDiffDays(Now,dtresp));
	}
	val = diff[0];
	for(a=1;a&amp;lt;iteration;a++)
	{
		if(val &amp;gt; diff[a])
		{
			val = diff[a];
		}
	}
	SetAnswerVisible(CurrQues,false);
	for(a=1;a&amp;lt;=iteration;a++)
	{
		if(val == diff[a-1])
		{
			SetAnswerTextFormat(CurrQues,a,AnswerIter(QRef(qidxrespname),a)+" - "+AnswerIter(QRef(qidxday),a)+"/"+AnswerIter(QRef(qidxmonth),a)+"/"+AnswerIter(QRef(qidxyear),a));
			SetAnswerVisible(CurrQues,a,true);
		}
	}
}

function Kad_AgeCategory(age,arrayages)
{
	var agecat=0;
	var a=0;
	for(a=0;a&amp;lt;arrayages.length;a++)
	{
		if(age&amp;gt;=arrayages[a])
		{
			agecat=a+1;
		}
	}
	return agecat;
}

function Kad_GetAge(date,month,year)
{
	var res = 0;
	var lday = Today.Day;
	var lmonth = Today.Month;
	var lyear = Today.Year;

	if(lmonth &amp;gt; month){res = lyear - year;}
	if(lmonth &amp;lt; month){res = lyear - year - 1;}
	if(lmonth == month &amp;amp;&amp;amp; lday &amp;gt;= date){res = lyear - year;}
	if(lmonth == month &amp;amp;&amp;amp; lday &amp;lt; date){res = lyear - year - 1;}
	
	return res;
}

function Kad_IsAllMultiVisibleAnswerChecked(qidx)
{
	var a=1;
	var av=Array();
	var n=0;
	var hs=true;
	for(a=1;a&amp;lt;=GetAnswerCount(qidx);a++)
	{
		if(IsAnswerVisible(qidx,a))
		{
			av[n]=a;
			n+=1;
		}
	}
	for(a=0;a&amp;lt;av.length;a++)
	{
		if(NotContains(qidx,av[a]))
		{
			hs=false;
			break;
		}
	}
	return hs;
}


/***********************************************************************/



function MyMultipleSetFromMultipleArray (inDest, inSrc, inShow)
{
	var arr = GetAnswers(inSrc);
	
	for (var i = 0; i &amp;lt; arr.length; i++)
	{
		dblSetSpecificAnswer(inDest, arr[i], inShow);
	}
}





function CheckIDPSU()
{
      Vars["idInvRegEx"]="^......$";
      if (!dblIsRegEx(Vars["idInvRegEx"],Answer(CurrQues)))
      {
            return true;
      }
}

function ConvertToDp(a1,a2)
{

	for(var j = 0; j &amp;lt;=GetAnswerCount(QRef(a1));j++)
	{
		for (var i=0; i &amp;lt;=GetAnswerCount(QRef(a2)); i++)
		{
			if (ContainsOneOf(QRef(a1+i),j+1 ))
    		{
     		dblSetSpecificAnswer(QRef(a2+j),i+1,true);
   	   	    }
		}   
	}
}


function dblSetSpecificTopicChoicffffffe(inQ, inTopicIndex, inValue)
{
	var curTopics = GetTopicCount(inQ);
	var newAnswers=new Array();
	newAnswers.push(inValue);
	var i;
	var ansArr = GetAnswersChoice(inQ, inTopicIndex);
	for (i=0;i &amp;lt; ansArr.length;i++)
 	{
		newAnswers.push(ansArr[i]);
	}
	SetAnswerChoice(inQ, inTopicIndex, newAnswers);
}



/* sample general jump rule

var newIdx = FixJumpOrder(QRef(6),SelectedAnswerText(4),"Final");
if (newIdx != -1) {
	idx = newIdx;
	jump = eJumpQuestionResult.ejqrChapter;
}

*/
/*function FixJumpOrder(inStartQ,inOrder,inFinalChapter)
{
	var retVal = -1;
	var chapArr = inOrder.split(",");
	if (CurrQues==inStartQ) {
		retVal = GetChapterIdxFromName(chapArr[0]);
	}
	var jumpIdx = GetJumpChapterIdxOfQuestion(CurrQues, chapArr);
	if (jumpIdx != -1) {
		if (IsLastQuestionInChapter(CurrQues)) {
			Trace("Ned to jump, last question of: "+chapArr[jumpIdx]);
			jumpIdx +=1;
			if (jumpIdx &amp;lt; chapArr.length) {
				Trace("Jumping to: "+chapArr[jumpIdx]);
				retVal = GetChapterIdxFromName(chapArr[jumpIdx]);
			}
			else {
				Trace("Jumping to: "+inFinalChapter);
				retVal = GetChapterIdxFromName(inFinalChapter);
			}
		}
	}
	
	return retVal;
}

function IsLastQuestionInChapter(inQuestion) 
{
	var retVal = false;
	var chapterInfo = QuestionChapter(inQuestion);
	if (chapterInfo.Questions[chapterInfo.Questions.length-1] == inQuestion) {
		retVal = true;
	}
	return retVal;
}

function GetJumpChapterIdxOfQuestion(inQuestion, inJumpArray)
{
	var retVal = -1;
	var chapterInfo = QuestionChapter(inQuestion);
	for (var i=0; i&amp;lt;inJumpArray.length;i++) {
		if (chapterInfo.Name == inJumpArray[i]) {
			retVal = i;
			break;
		}
	}
	return retVal;
}

function GetChapterIdxFromName (inChapterName) 
{
	var retVal = -1;
	var chapterInfos = GetAllChapters();
	for(var i=0;i&amp;lt;chapterInfos.length;i++) {
		if (chapterInfos[i].Name == inChapterName) {
			retVal = chapterInfos[i].ID+1;
			break;
		}
	}
	return retVal;
}*/

function AreAllTopicsDifferent (inQIdx)
{
	var retVal = true;
	var topicAmount = GetTopicCount(inQIdx);
	var flag = false;
	
	for (var i = 1; i &amp;lt;= topicAmount; i++)
	{
		for (var j = 1; j &amp;lt;= topicAmount; j++)
		{
			if (i != j &amp;amp;&amp;amp;
				IsTopicVisible(inQIdx, i) &amp;amp;&amp;amp; IsTopicVisible(inQIdx, j) &amp;amp;&amp;amp;
				AnswerChoice(inQIdx, i) == AnswerChoice(inQIdx, j))
			{
				retVal = false;
				break;
			}
		}
		if (flag)
		{
			break;
		}
	}
	
	return retVal;
}

/** intage thailand **/

function TNS_SetQuesOrder(controlQuestion,variant0) 
{ 
var retVal=false; 
if (variant0==8) 
{ 
switch(Answer(controlQuestion)) 
{ 
case 1: RandomizeAnswers(CurrQues,[1,2,3,4,5,6,7,8]); break; 
case 2: RandomizeAnswers(CurrQues,[4,1,2,3,5,6,7,8]); break; 
case 3: RandomizeAnswers(CurrQues,[3,4,1,2,5,6,7,8]); break; 
case 4: RandomizeAnswers(CurrQues,[2,3,4,1,5,6,7,8]); break; 
case 5: RandomizeAnswers(CurrQues,[4,5,6,7,1,2,3,8]); break; 
case 6: RandomizeAnswers(CurrQues,[7,4,5,6,1,2,3,8]); break; 
case 7: RandomizeAnswers(CurrQues,[6,7,4,5,1,2,3,8]); break; 
case 8: RandomizeAnswers(CurrQues,[5,6,7,4,1,2,3,8]); break; 
} 
retVal=true; 
}
}
//################################ Prince ######################################
// ใช้สำหรับดึงอื่นๆที่พิมพ์ 5 บรรทัดมาไว้ในข้อปัจจุบัน
function SetOther(other,openEnd,start) 
{
SetAnswerVisible(CurrQues, false, false, start,start+1,start+2,start+3,start+4);
if (ContainsOneOf(QRef(other),start))
{
	var topic;
	var answer;
	for (topic = 1, answer = start; topic &amp;lt;= 5; answer++, topic++)
	{
		var text = AnswerChoice(QRef(openEnd), topic);
		if (text != "")
		{
			SetAnswerVisible(CurrQues, true, false, answer);
			SetAnswerTextFormat(CurrQues, answer, text);
		}
	}
}
}
function SetTopicOther(other,openEnd,start)
{
SetTopicVisible(CurrQues, false, false, start,start+1,start+2,start+3,start+4);
if (ContainsOneOf(QRef(other),start))
{
	var topic;
	var answer;
	for (topic = 1, answer = start; topic &amp;lt;= 5; answer++, topic++)
	{
		var text = AnswerChoice(QRef(openEnd), topic);
		if (text != "")
		{
			SetTopicVisible(CurrQues, true, false, answer);
			SetTopicTextFormat(CurrQues, answer, text);
		}
	}
}
}
// ใช้สำหรับการโชว์คำตอบ
// ถ้า eiei เป็น 1 คือติ๊ก 1 ค่า โชว์หลายค่า
// ถ้า eiei เป็น 2 คือติ๊ก หลายค่าโชว์ 1 ค่า
// ถ้า eiei เป็น 3 
function MultiSetVisible(QTarget,Qin,tick,startIdx,endIdx,eiei)
{
	if(eiei==1)
	{
		if(Contains(Qin,tick))
		{
		for(startIdx;startIdx&amp;lt;=endIdx;startIdx++)
			{
				SetAnswerVisible(QTarget,true,false,startIdx)
			}
		}
	}	
	else if(eiei==2)
	{
		for(startIdx;startIdx&amp;lt;=endIdx;startIdx++)
			{
				if(Contains(Qin,startIdx))
				{
				SetAnswerVisible(QTarget,true,false,tick)
				break
				}
			}
	}
	else if(eiei==3)
	{
		if(Contains(Qin,tick))
		{
		for(startIdx;startIdx&amp;lt;=endIdx;startIdx++)
			{
				SetTopicVisible(QTarget,true,false,startIdx)
			}
		}
	}
	else if(eiei==4)
	{
		for(startIdx;startIdx&amp;lt;=endIdx;startIdx++)
			{
				if(Contains(Qin,startIdx))
				{
				SetTopicVisible(QTarget,true,false,tick)
				break
				}
			}
	}	
}
// ใช้สำหรับการติ๊กคำตอบ
function MultiDblSetSpecificAnswer(QTarget,Qin,tick,startIdx,endIdx,eiei)
{
	if(eiei==1)
	{
		if(Contains(Qin,tick))
		{
		for(startIdx;startIdx&amp;lt;=endIdx;startIdx++)
			{
				dblSetSpecificAnswer(QTarget,startIdx,true)
			}
		}
	}	
	else if(eiei==2)
	{
		for(startIdx;startIdx&amp;lt;=endIdx;startIdx++)
			{
				if(Contains(Qin,startIdx))
				{
				dblSetSpecificAnswer(QTarget,tick,true)
				break
				}
			}
	}
}
// วิธีใช้ ถ้าหน้า 1 ตอบโค้ด 998 999  ContainsOneOfByCode(Qref(1),["998","999"])
//****** ใชกับเครื่องหมายตกใจไม่ได้ !ContainsOneOfByCode(Qref(1),["998","999"])
function MyContainsOneOfByCode(qIdx, codeArr)
{
    var retVal = false;

    for(var i=1; i &amp;lt;=codeArr.length; i++)
    {
        if(MyContainsByCode(qIdx,codeArr[i-1]))
        {
            retVal = true;
            break;
        }
    }

    return retVal;
}

function MyContainsByCode(qIdx, code)
{
    var retVal = Contains(qIdx,GetAnswerChoiceIdxByCode(qIdx,code));
    return retVal;
}
//เอ๋ยเอง ไป โชว์การ์ด MultiContainsOneOf([QRef(20),QRef(21)....],1)
function MultiContainsOneOf(QRefArr,Idx)
{
	var retVal = false;
	for(var i=1 ; i&amp;lt;=QRefArr.length ; i++)
	{
		if(Contains(QRefArr[i-1],Idx))
		{
			retVal = true
			return  retVal
		}
	}
	return retVal
}
// การดึงคำตอบโดยเรียงลำดับจากความถี่  ใช้ได้แค่กรณีที่ index ที่1 คือ ไปบ่อยสุด จนถึง ไม่ไปเลย
function FilterFrequency(curr,qref)
{
	for(var i = 1; i &amp;lt;= GetAnswerCount(CurrQues) ; i++)
	{
		if(ContainsOneOf(QRef(qref),i))
		{
		FilterAnswersByTopics(QRef(curr),QRef(qref),i)
		break
		}
	}
}
function AnswerRotateByNo(Qne,cons)
{
	var countMod = GetAnswerCount(CurrQues) - cons.length
	var newAnswers=new Array();
	var t = Answer(Qne)%countMod
	var k 
	if(t == 0)
		{
			t = countMod;
		}	
	for(k = t ; k &amp;lt;= countMod ; k++ )
		{
				newAnswers.push(k)
		}
	if(newAnswers.length != countMod)
		{	
			for(var j = 1 ; j &amp;lt; t ; j++ )
			{
				newAnswers.push(j)
			}
				//newAnswers.push(1)
		}
	for(var i = 0 ; i+1 &amp;lt;= cons.length ; i++)
			newAnswers.push(cons[i])
			
	RandomizeAnswers(CurrQues,newAnswers);
}
function SortRotateByNo(Qin,cons)  // Rotate Answer By No
{ 
	var newAnswers=new Array();
	
	if(Answer(Qin) % 2 == 1)
	{
		for(var i = 1; i &amp;lt;= GetAnswerCount(CurrQues) ; i++) 
        { 
           newAnswers.push(i); 
     	}
		RandomizeAnswers(CurrQues,newAnswers); 
	}


    if(Answer(Qin) % 2 == 0)// sort descending 
    {
        		 for(var i = GetAnswerCount(CurrQues)-cons.length ; i &amp;gt;= 1 ; i--) 
        		 { 
              		newAnswers.push(i);  
       		 	 }
			  
				for(var i = 0 ; i+1 &amp;lt;= cons.length ; i++)
				newAnswers.push(cons[i])
		 RandomizeAnswers(CurrQues,newAnswers);
	} 

}
//################################ End Prince ######################################




/** Ipsos napoleon franco scripts **/
function innovaip_EdadRango(intEdad) {
	if (intEdad&amp;gt;= 18 &amp;amp;&amp;amp; intEdad&amp;lt;= 19){
		return 1;
	}
	if (intEdad&amp;gt;= 20 &amp;amp;&amp;amp; intEdad&amp;lt;= 24){
	 return 2;
	}
	if (intEdad&amp;gt;= 25 &amp;amp;&amp;amp; intEdad&amp;lt;= 34){
	 return 3;
	}
	if (intEdad&amp;gt;= 35 &amp;amp;&amp;amp; intEdad&amp;lt;= 44){
	 return 4;
	}
	if (intEdad&amp;gt;= 45 &amp;amp;&amp;amp; intEdad&amp;lt;= 54){
	 return 5;
	}
	if (intEdad&amp;gt;= 55 &amp;amp;&amp;amp; intEdad&amp;lt;= 64){
	 return 6;
	}
    return -1;
}

function innovaip_EdadRango1(intEdad) {
	if (intEdad &amp;lt; 18){
		return 1;
	}
	if (intEdad &amp;gt;= 18 &amp;amp;&amp;amp; intEdad &amp;lt;= 64){
	 return 2;
	}
	if (intEdad &amp;gt; 64 &amp;amp;&amp;amp; intEdad &amp;lt;= 98){
	 return 3;
	}
	if (intEdad = 99){
	 return 4;
	}
	    return -1;
}

function innovaip_SortIntArray(intArray, arraySize, idx)
{
    if (arraySize == 1) return 1;
    
	var sortedArray = [];
				 //Prompt("ArraySize: " + arraySize);
	for (var i = 0;i&amp;lt;arraySize;i++) {
		sortedArray[i] = intArray[i];
		Prompt("item " + i + " is " + sortedArray[i]);
				 //Prompt( "Iteration: " + i + " = " + sortedArray[i] );
	}
	
	var numSwap = 1
	
	while (numSwap &amp;gt; 0) {
	    numSwap = 0;
		for (var j = 0;j&amp;lt;arraySize-1;j++) {
		    	 //Prompt("Comparing: " + sortedArray[j] + "," + sortedArray[j+1] )
			if (sortedArray[j] &amp;lt; sortedArray[j+1]) {
			    var temp;
				temp = sortedArray[j+1];
				sortedArray[j+1] = sortedArray[j];
				sortedArray[j] = temp;
				numSwap++;
			}
		}
				 //Prompt( "Swaps: " + numSwap );
	}
	
	var selectedAge = sortedArray[idx-1];
	Prompt("Selected age is " + selectedAge);
	
	var iterNum = 0
	
	for (var l = 0; l&amp;lt;= arraySize-1 ; l++) {
	    Prompt("Comparing:" + intArray[l] + "," + selectedAge )
		if ( intArray[l] == selectedAge) {
			return l;
		}
	}

	return 0;
}



function dblGetSubjectStoreColumn(inStoreName,inIDColumnName,inID)
{
	var retVal = null;
	try {
		var table = GetTableFromStore(inStoreName,"","@@"+inIDColumnName+"='"+inID+"'","");
		if (table != null &amp;amp;&amp;amp; table.ColumnCount &amp;gt;0) {
			var column = table[0];
			retVal = column;
		}
	}
	catch(err)
	{
		retVal = null;	
	}

	return retVal;
}



/*Valida que no se repitan los numeros/id de los contactos no efectivos*/

function ValidaNumeros2(Pregunta)
{
    for(var i= 1;i&amp;lt;=10;i++)
 	{
 		  
 		if(IterationIndex &amp;gt; 1)
 		{ 	
 			if(IterationIndex == i){continue;} 				
 		
 		  	if(Answer(Pregunta) == AnswerIter(Pregunta,i))
 		  	{	 		  		
 		  			//var respuesta= AnswerIter(9,i);
 		  	 		//Prompt("Respuesta en la pregunta 3: " + respuesta + "\n iteracción No. " + i.ToString());
 		  	 		return true;
 		    }
 		}  		 			
 		
    }
    
  	return false;
}

/*Valida y marca la edad exacta VS los rangos de Edad*/



function ValidarEdades(pregunta,r1,r2,pregunta2,respuesta)
{
	if(Answer(pregunta)&amp;gt;= r1 &amp;amp;&amp;amp; Answer(pregunta)&amp;lt;=r2)
	{
		SetAnswer(pregunta2,respuesta);		
	}

}

/* Valida que solo se acepten letras y no numeros en preguntas tipo texto
	parametro: cadena  ---&amp;gt; recibe el valor de la respuesta
 */

function ValidaSoloTexto(cadena)
{
	var patronLet = /^[a-zA-Z]*$/;	
	var patronNum = /^\d*$/;
	var respuesta = cadena.ToString();
	
	
	var arr = new Array();
	arr = respuesta;
	
	if(respuesta.search(patronNum) != 0)
	{	
		if(respuesta.search(patronLet) != 0 || arr.length &amp;lt; 3 )
		{			
			return true;
		}else
		{
			return false;
			
		}
    }else
    {
    	return true;
    }
    
}

/* recibe dos parametros*/

function ValidaMaximoDeCaracteres(cadena,limite)
{
	
	var respuesta = cadena.ToString().replace(/^\s+/g,'').replace(/\s+$/g,'');
	
	var arr = new Array();
	arr = respuesta;

	
	if(arr.length &amp;lt; limite )
	{			
		return true;
	}else
	{
		return false;
		
	}    
    
}



/* Validar solo números en una pregunta tipo texto y un minimo de 6 caracteres (validando cedulas de ciudadania) 

cedana -&amp;gt; la respuesta como texto
limite -&amp;gt; el minimo de caracteres aceptados

*/

function ValidaSoloNumeros(cadena,limite)
{
	var patronLet = /^[a-zA-Z]*$/;	
	var patronNum = /^\d*$/;
	var respuesta = cadena.ToString();
		
	var arr = new Array();
	arr = respuesta;
	
	if(respuesta.search(patronLet) != 0)
	{	
		if(respuesta.search(patronNum) != 0 || arr.length &amp;lt; limite )
		{			
			return true;
		}else
		{
			return false;
			
		}
    }else
    {    	
    	return true;
    }
    
}



/* Validar que la pregunta sea solo números y un máximo de caracteres

cadena -&amp;gt; la respuesta como texto
limite -&amp;gt; el minimo de caracteres aceptados

*/

function ValidaNumeros(cadena,limite)
{
	var patronLet = /^[a-zA-Z]*$/;	
	var patronNum = /^\d*$/;
	var respuesta = cadena.ToString();
		
	var arr = new Array();
	arr = respuesta;
	
	if(respuesta.search(patronLet) != 0)
	{	
		if(respuesta.search(patronNum) != 0 || arr.length &amp;gt; limite || respuesta == 0)
		{			
			return true;
		}else
		{
			return false;	
		}
    }else
    {    	
    	return true;
    }
    
}

//TBS Vietnam scripts

function dblNumOfCodesDupplicated(inQ)
{
	var retVal = 0;
	var i=0;
	var j=0;
	
	
	for (i=1; i&amp;lt;=GetTopicCount(inQ)-1;i++){
	{for (j=1;j&amp;lt;=GetTopicCount(inQ)-1;j++){
		if (IsTopicVisible(inQ,i) &amp;amp;&amp;amp; IsTopicVisible(inQ,i+j)&amp;amp;&amp;amp;AnswerChoice(inQ,i)==AnswerChoice(inQ,i+j)&amp;amp;&amp;amp;AnswerChoice(inQ,i)&amp;gt;=1) {
			retVal++;
		}}}
	}
	
	return retVal;
}

/*function TNS_SetQuesOrder(controlQuestion,variant0) 
{ 
	Prompt("answer of question index = " + Answer(controlQuestion).ToInt());
	var retVal=false; 
	if (variant0==8) 
	{ 
		switch(Answer(controlQuestion).ToInt()) 
		{ 
		case 1: RandomizeAnswers(CurrQues,[1,2,3,4,5,6,7,8]); break; 
		case 2: RandomizeAnswers(CurrQues,[4,1,2,3,5,6,7,8]); break; 
		case 3: RandomizeAnswers(CurrQues,[3,4,1,2,5,6,7,8]); break; 
		case 4: RandomizeAnswers(CurrQues,[2,3,4,1,5,6,7,8]); break; 
		case 5: RandomizeAnswers(CurrQues,[4,5,6,7,1,2,3,8]); break; 
		case 6: RandomizeAnswers(CurrQues,[7,4,5,6,1,2,3,8]); break; 
		case 7: RandomizeAnswers(CurrQues,[6,7,4,5,1,2,3,8]); break; 
		case 8: RandomizeAnswers(CurrQues,[5,6,7,4,1,2,3,8]); break; 
		} 
		retVal=true; 
	} 
	if (variant0==7) 
	{ 
		switch(Answer(controlQuestion).ToInt()) 
		{ 
		case 1: RandomizeAnswers(CurrQues,[1,2,3,4,5,6,7]); break; 
		case 2: RandomizeAnswers(CurrQues,[4,1,2,3,5,6,7]); break; 
		case 3: RandomizeAnswers(CurrQues,[3,4,1,2,5,6,7]); break; 
		case 4: RandomizeAnswers(CurrQues,[2,3,4,1,5,6,7]); break; 
		case 5: RandomizeAnswers(CurrQues,[4,5,6,7,1,2,3]); break; 
		case 6: RandomizeAnswers(CurrQues,[7,4,5,6,1,2,3]); break; 
		case 7: RandomizeAnswers(CurrQues,[6,7,4,5,1,2,3]); break; 
		case 8: RandomizeAnswers(CurrQues,[5,6,7,4,1,2,3]); break; 
		} 
		retVal=true; 
	}	
	return retVal; 
}*/

function TNS_rand(){
	return Math.floor(Math.random()*(999-100+1)+100);
}

function TNS_contains(arr,n) {
    var i = arr.length;
    while (i--) {
        if (arr[i] == n) {
            return true;
        }
    }
    return false;
}

function decodeArray(text){
	var array=[];
	var dcArray=[];
	var rndLetter=["А","Б","Е","И","К","Л","Р","С","Т","У"];
	var letter = /^[А-Я]/;
	var number = /^[0-9]/;
	var flag=false;
	
	for (var i=0;i&amp;lt;=text.length-1;i++){
		if (text.charAt(i).match(letter)||text.charAt(i).match(number)){
				array.push(text.charAt(i).toString());
		};
	};

	for (var i=0;i&amp;lt;=array.length-1;i++){
		if (array[i].match(number)){
			dcArray.push(array[i]);
		} else if (array[i].match(letter)) {
			if (!flag) {
				for (var j=0;j&amp;lt;=rndLetter.length-1;j++){
					if (array[i]==rndLetter[j]){
						dcArray.push(j);
						break;
					};
				};
				flag=true;
			} else {
				switch (array[i]) {
					case "К":
					case "Б":
					case "А":
						dcArray.push(1);
						break;
					case "У":
					case "Э":
						dcArray.push(2);
						break;
					case "Е":
					case "И":
						dcArray.push(3);
						break;
					case "Р":
					case "Т":
						dcArray.push(4);
						break;
					case "Л":
					case "С":
					case "Я":
						dcArray.push(5);
						break;
					default:
						dcArray.push(0);
						break;
				};
			};
		};
	};
	
	return dcArray;
}

function returnTimeDiff_Uni(timeDiff,t1,t2,t3,t4){
	var timeCode=[
		["К","Б","А"],
		["У","Э"],
		["Е","И"],
		["Р","Т"],
		["Л","С","Я"]
	];
	var rndLetter=["А","Б","Е","И","К","Л","Р","С","Т","У"];
	var rndTimeIdx=Math.floor((Math.random()*100)+1);
	var rndLetterIdx=Math.floor(Math.random()*10);
	
	var text=new String();	
	var i,j;
	
	if (timeDiff&amp;lt;t1){
		i=0;
		if (rndTimeIdx&amp;lt;33){
			j=0;
		} else if (rndTimeIdx&amp;gt;=33 &amp;amp;&amp;amp; rndTimeIdx&amp;lt;66) {
			j=1;
		} else if (rndTimeIdx&amp;gt;=66) {
			j=2;
		};
	} else if (timeDiff&amp;gt;=t1 &amp;amp;&amp;amp; timeDiff&amp;lt;t2){
		i=1;
		if (rndTimeIdx&amp;lt;=50){
			j=0;
		} else if (rndTimeIdx&amp;gt;50) {
			j=1;
		};
	} else if (timeDiff&amp;gt;=t2 &amp;amp;&amp;amp; timeDiff&amp;lt;t3){
		i=2;
		if (rndTimeIdx&amp;lt;=50){
			j=0;
		} else if (rndTimeIdx&amp;gt;50) {
			j=1;
		};
	} else if (timeDiff&amp;gt;=t3 &amp;amp;&amp;amp; timeDiff&amp;lt;t4){
		i=3;
		if (rndTimeIdx&amp;lt;=50){
			j=0;
		} else if (rndTimeIdx&amp;gt;50) {
			j=1;
		};
	} else if (timeDiff&amp;gt;=t4){
		i=4;
		if (rndTimeIdx&amp;lt;33){
			j=0;
		} else if (rndTimeIdx&amp;gt;=33 &amp;amp;&amp;amp; rndTimeIdx&amp;lt;66) {
			j=1;
		} else if (rndTimeIdx&amp;gt;=66) {
			j=2;
		};
	};
	
	text=rndLetter[rndLetterIdx]+timeCode[i][j];
		
	return text;
}

function generateCheckSum(array){
	var c=0;
	
	var invertedArray=[];
	
	var d=[
		   [0,1,2,3,4,5,6,7,8,9],
		   [1,2,3,4,0,6,7,8,9,5],
		   [2,3,4,0,1,7,8,9,5,6],
		   [3,4,0,1,2,8,9,5,6,7],
		   [4,0,1,2,3,9,5,6,7,8],
		   [5,9,8,7,6,0,4,3,2,1],
		   [6,5,9,8,7,1,0,4,3,2],
		   [7,6,5,9,8,2,1,0,4,3],
		   [8,7,6,5,9,3,2,1,0,4],
		   [9,8,7,6,5,4,3,2,1,0]
		];

	var p=[
	       [0,1,2,3,4,5,6,7,8,9],
	       [1,5,7,6,2,8,3,0,9,4],
	       [5,8,0,3,7,9,6,1,4,2],
	       [8,9,1,6,0,4,3,5,2,7],
	       [9,4,5,3,1,2,6,8,7,0],
	       [4,2,8,6,5,7,3,9,0,1],
	       [2,7,9,3,8,0,6,4,1,5],
	       [7,0,4,6,9,1,3,2,5,8]
	    ];
	
	var inv=[0, 4, 3, 2, 1, 5, 6, 7, 8, 9];
	
	for (var i=array.length-1;i&amp;gt;=0;i--){
		invertedArray.push(array[i]);
	}
	
	for (var i=0;i&amp;lt;invertedArray.length-1;i++){
		c=d[c][p[((i+1)%8)][invertedArray[i]]];
	}
	
//	array.push(c);
	
	return inv[c];
}





/*	Nome da Função:	IsRange
	Programador:	Clayton
	Data:			00/00/0000
	Descrição:		Checar se existe um valor de-para
	Tipo Quest:		Single e Mult
	Exemplo:		IsRange(QRef(5), 18, 24);
*/
	function IsRange(inQIdx, inBegin, inEnd) {
		var retVal = false;
		for (var j = inBegin; j &amp;lt;= inEnd; j++) {
			if (Contains(inQIdx, j)) {
				retVal = true; break; }
		}
		return retVal;
	}

/*	Nome da Função:	IsRangeIter
	Programador:	Clayton
	Data:			00/00/0000
	Descrição:		Checar se existe um valor de-para em um Iter
	Tipo Quest:		Single e Mult Iter
	Exemplo:		IsRange(QRef(5), 18, 24);
*/
	function IsRangeIter(inQIdx, inIter, inBegin, inEnd) {
		var retVal = false;
		for (var j = inBegin; j &amp;lt;= inEnd; j++) {
			if (ContainsIter(inQIdx, j, inIter)) {
				retVal = true; break; }
		}
		return retVal;
	}


/*	Nome da Função:	IsRangeChoice
	Programador:	Clayton
	Data:			00/00/0000
	Descrição:		Checar se existe um valor de-para em questões Topics
	Tipo Quest:		Topics
	Exemplo:		IsRangeChoice(QRef(5), 1, 1,5);
*/
	function IsRangeChoice(inQIdx, inAnsIdx, inBegin, inEnd) {
		var retVal = false;
		for (var j = inBegin; j &amp;lt;=inEnd; j++) {
			if (AnswerChoice(inQIdx, inAnsIdx) == j) {
				retVal = true; break; }
		}
		return retVal;
	}

/*	Nome da Função:	checkMail
	Programador:	Internet (desconhecido)
	Data:			00/00/0000
	Descrição:		Checar se o email é válido
	Tipo Quest:		Strings
	Exemplo:		checkMail(Answer(100)); // checkMail(SelectedAnswerText(100));
*/
	function checkMail(mail) {
		var er = new RegExp(/^[A-Za-z0-9_\-\.]+@[A-Za-z0-9_\-\.]{2,}\.[A-Za-z0-9]{2,}(\.[A-Za-z0-9])?/);
		if (typeof(mail) == "string"){
			if (er.test(mail)) { return true; }
		} else if (typeof(mail) == "object"){
			if (er.test(mail.value)){ 
				return true; 
			}
		} else {
			return false;
			}
	}

/*	Nome da Função:	IsRight
	Programador:	Internet (desconhecido)
	Data:			00/00/0000
	Descrição:		Buscar valor À Direita
	Tipo Quest:		Strings
	Exemplo:		IsRight(Answer(100)); // IsRight(SelectedAnswerText(100));
*/
	function IsRight(str, n) {
		str = str.ToString();
		if (n &amp;lt;= 0)
			{ return ""; }
		else if (n &amp;gt; String(str).length)
			{ return str;}
		else {
			var iLen = String(str).length;
			return String(str).substring(iLen, iLen - n);
			}
	}

/*	Nome da Função:	IsLeft
	Programador:	Internet (desconhecido)
	Data:			00/00/0000
	Descrição:		Buscar valor À Esquerda
	Tipo Quest:		Strings
	Exemplo:		IsLeft(Answer(100)); // IsLeft(SelectedAnswerText(100));
*/
	function IsLeft(str, n) {
		str = str.ToString();
		if (n &amp;lt;= 0)
		    return "";
		else if (n &amp;gt; String(str).length)
		    return str;
		else
		    return String(str).substring(0,n);
	}

/*	Nome da Função:	BuscaCep (Inativa)
	Programador:	Clayton
	Data:			00/00/0000
	Descrição:		Buscar Cep (Projeto Leroy)
	Tipo Quest:		Strings
	Exemplo:		BuscaCep(QRef(10), QRef(11), QRef(5));
*/
	function BuscaCep(inQidxCep, inQidxRua, inQidxCidade) {
		var retVal = false;
		var arrBaseCep = new Array();
		
			for (var i = 0; i &amp;lt; arrBaseCep.length; i++) {
				if (Answer(inQidxCep) == arrBaseCep[i].substr(0,8)) {	
					retVal = true;
					break; }
			}
		
			if (retVal) {
				SetAnswer(inQidxRua, arrBaseCep[i - 1].substr(9,102)); }
	}

/*	Nome da Função:	DBLIsValidPhone
	Programador:	Ron Tal
	Data:			00/00/0000
	Descrição:		Checar Telefone Válido (8 dígitos)
	Tipo Quest:		Numérica
	Exemplo:		DBLIsValidPhone(Answer(QRef(20));
	OBS:			Adaptado (9 dígitos SP) - 14/08/2012
*/


/*	Nome da Função:	IsContainsTo
	Programador:	Clayton
	Data:			00/00/0000
	Descrição:		Busca um valor entre várias Questões
	Tipo Quest:		Single e Mult
	Exemplo:		IsContainsTo(QRef(108), QRef(111), 2);
*/
	function IsContainsTo(inQIdxBegin, inQIdxEnd, inAnswer) {
		var retVal = false;
		for (var j = inQIdxBegin; j &amp;lt;= inQIdxEnd; j++) {
			if (Contains(j, inAnswer)) {
				retVal = true; }
		}
		return retVal;
	}

/*	Nome da Função:	IsContainsRangeTo
	Programador:	Clayton
	Data:			00/00/0000
	Descrição:		Busca um ou mais valores entre várias Questões
	Tipo Quest:		Single e Mult
	Exemplo:		IsContainsRangeTo(QRef(108), QRef(111), 2,10);
*/
	function IsContainsRangeTo(inQIdxBegin, inQIdxEnd,  inBegin, inEnd) {
		var retVal = false;
			for (var j = inQIdxBegin; j &amp;lt;= inQIdxEnd; j++) {		
				for (var k = inBegin; k &amp;lt;= inEnd; k++) {
					if (Contains(j, k)) {
						retVal = true; }
				}
			}
		return retVal;
	}

/*	Nome da Função:	IsSelectedAnswerRankingIdx
	Programador:	Clayton
	Data:			00/00/0000
	Descrição:		Busca Index da Resposta Selecionada p/ Ranking
	Tipo Quest:		Ranking
	Exemplo:		IsSelectedAnswerRankingIdx(QRef(108), 1);
*/
	function IsSelectedAnswerRankingIdx(inQidx, inRank) {
		for (var i = 1; i &amp;lt;= GetAnswerCount(inQidx); i++) {
			if (ContainsSpecificRate(inQidx, inRank, i)) {
				break; }
		}
		return i;
	}

/*	Nome da Função:	IsSomaAnswer
	Programador:	Clayton
	Data:			00/00/0000
	Descrição:		Soma uma sequência de Questões
	Tipo Quest:		Numéricas Single e Multi
	Exemplo:		IsSomaAnswers(QRef(90), QRef(100));
*/
//Função Soma Answer
	function IsSomaAnswer(inBegin, inEnd) {
		var intSoma = 0;
			for (var j = inBegin; j &amp;lt;=inEnd; j++)
				{ intSoma += Answer(j); }
		
		return intSoma;
	}

/*	Nome da Função:	IsSomaTopic
	Programador:	Clayton
	Data:			00/00/0000
	Descrição:		Soma uma sequência de Questões
	Tipo Quest:		Numéricas Topics
	Exemplo:		IsSomaTopics(QRef(90), QRef(100));
*/
	function IsSomaTopic(inBegin, inEnd) {
		var intSoma = 0;
			for (var j = inBegin; j &amp;lt;= inEnd; j++)
				if (IsTopicVisible(CurrQues, j)) {
					intSoma += AnswerChoice(CurrQues, j); }
		
		return intSoma;
	}
	function IsSomaTopics(inQidx, inBegin, inEnd) {
		var intSoma = 0;
			for (var j = inBegin; j &amp;lt;= inEnd; j++)
				if (IsTopicVisible(inQidx, j)) {
					intSoma += AnswerChoice(inQidx, j); }
		
		return intSoma;
	}


/*	Nome da Função:	IsSearchOthers
	Programador:	Clayton
	Data:			00/00/0000
	Descrição:		Busca Outras na Lista Fixa
	Tipo Quest:		Single e Multi
	Exemplo:		IsSearchOthers(AddtionalText(CurrQues), QRef(CurrQues)); /
					IsSearchOthers(SelectedAnswerText(CurrQues+1), QRef(CurrQues));
					Msg 'Verificar Outros vs Lista de Marcas.'
	OBS: 			Alterado dia 21/08 - inclusão do RegExp
*/
	function IsSearchOthers(inQidxOther, inQidxList) {
		var retVal = false;
		if (inQidxOther != '') {
			var arrList = new Array();
			
			for (var j=1;j&amp;lt;=GetAnswerCount(inQidxList);j++) {
				arrList[j-1] = IsTrim(IsUpper(GetAnswerOriginalText(inQidxList, j)));
			}
			
			var reList = new RegExp(arrList);
			var reAnswer = new RegExp(IsTrim(IsUpper(inQidxOther)));
			
			if (reAnswer.test(reList)) {
				Prompt("A resposta (ou alguma variante) digitada em outros '"+inQidxOther+"' está na lista de marcas. Verifique");
				retVal = true;
			}
		}
		return retVal;
	}

/*	Nome da Função:	IsTrim
	Programador:	Internet (desconhecido)
	Data:			00/00/0000
	Descrição:		Remove espaços
	Tipo Quest:		Strings
	Exemplo:		IsTrim(Answer(CurrQues)); / IsTrim(SelectedAnswerText(CurrQues));
*/
	function IsTrim(str) {
		str = str.ToString();
		return str.replace(/^\s+|\s+$/g,"");
	}

/*	Nome da Função:	IsLTrim
	Programador:	Internet (desconhecido)
	Data:			00/00/0000
	Descrição:		Remove espaços à Esquerda
	Tipo Quest:		Strings
	Exemplo:		IsLTrim(Answer(CurrQues)); / IsLTrim(SelectedAnswerText(CurrQues));
*/
	function IsLTrim(str) {
		str = str.ToString();
		return str.replace(/^\s+/,"");
	}
	 
/*	Nome da Função:	IsRTrim
	Programador:	Internet (desconhecido)
	Data:			00/00/0000
	Descrição:		Remove espaços à Direita
	Tipo Quest:		Strings
	Exemplo:		IsRTrim(Answer(CurrQues)); / IsRTrim(SelectedAnswerText(CurrQues));
*/
	function IsRTrim(str) {
		str = str.ToString();
		return str.replace(/\s+$/,"");
	}

/*	Nome da Função:	IsUpper
	Programador:	Internet (desconhecido)
	Data:			00/00/0000
	Descrição:		Letras em Maiúscula
	Tipo Quest:		Strings
	Exemplo:		IsUpper(Answer(CurrQues)); / IsUpper(SelectedAnswerText(CurrQues));
*/
	function IsUpper(str) {
		str = str.ToString();
		return str.toUpperCase();
	}
		
/*	Nome da Função:	IsUpper
	Programador:	Internet (desconhecido)
	Data:			00/00/0000
	Descrição:		Letras em Minúscula
	Tipo Quest:		Strings
	Exemplo:		IsLower(Answer(CurrQues)); / IsLower(SelectedAnswerText(CurrQues));
*/
	function IsLower(str) {
		str = str.ToString();
		return str.toLowerCase();
	}

/*	Nome da Função:	IsCheckAbertas
	Programador:	Clayton
	Data:			11/07/2012
	Descrição:		Checagem Abertas
	Tipo Quest:		Single
	Exemplo:		IsCheckAbertas([QRef(175), QRef(177), ...]);
*/
	function IsCheckAbertas(inQids)  {
		var retErro = '';
		var numOfQues = inQids.length;
			for (var j = 0; j &amp;lt; numOfQues; j++) {
				if (Answered(inQids[j]) &amp;amp;&amp;amp; NotAnswered(inQids[j] + 1))
					{ retErro += ('Questão : ' + VarName(inQids[j] + 1) + ' - Falta Resposta \n'); }
				if (NotAnswered(inQids[j]) &amp;amp;&amp;amp; Answered(inQids[j] + 1))
					{ retErro += ('Questão : ' + VarName(inQids[j] + 1) + ' - Sobra Resposta \n'); }
			}
			if (retErro != '') { ExtRefNum = 'Abertas - Erro'; }
				else { ExtRefNum = 'Abertas - Ok'; }
		return retErro;	
	}

/*	Nome da Função:	IsEncerre
	Programador:	Wilson Ruiz/Clayton Araujo
	Data:			16/08/2012
	Descrição:		Essa função verifica se uma questão foi respondida como encerre, se sim ela seta as váriáveis de filtro e ocorrência e vai para o encerramento da entrevista.
	Tipo Quest:		Simgle/Multiple/Topic
	Exemplo:		IsEncerre((Contains(CurrQues, 1)), QRef(42), QRef(44)) (Encerra se na questão atual a resposta for código 1)
*/
function IsEncerre(InFunction, InMsg, InOcor, InEncer){
	SetAnswer(InEncer, 2);
	if (InFunction) {
		Prompt("Se "+InMsg+". Agradeça e encerre.");
		SetAnswer(InOcor, VarName(CurrQues) + " = "+InMsg+".");
		SetAnswer(InEncer, 1);
	}
	return InFunction;
}

/*	Nome da Função:	IsArrend
	Programador:	Internet (desconhecido)
	Data:			24/09/2012
	Descrição:		Arredonda um número para o inteiro mais próximo, tanto para baixo quanto para cima. Por exemplo, o número 3.3 arredondado será 3, mas o número 3.8 arredondado será 4.
	Tipo Quest:		Numérica
	Exemplo:		
*/
function IsArrend(InValue, InDecimals){
	var retVal = Math.round(InValue * Math.pow(10, InDecimals)) / Math.pow(10, InDecimals);
	return retVal;
}

/*	Nome da Função:	IsArrendDown
	Programador:	Internet (desconhecido)
	Data:			24/09/2012
	Descrição:		Arredonda um número para o inteiro mais baixo
	Tipo Quest:		Numérica
	Exemplo:		
*/
function IsArrendDown(InValue, InDecimals){
	var retVal = Math.floor(InValue * Math.pow(10, InDecimals)) / Math.pow(10, InDecimals);
	return retVal;
}
/*	Nome da Função:	IsAnyOneOfVars
	Programador:	Clayton
	Data:			13/11/2012
	Descrição:		Busca 1 ou Mais valores entre 1 ou mais Variáveis
					Se Deseja saber onde o valor foi localizado, digite adicione true no final da função, senão, digite false;
	Tipo Quest:		Vars
	Exemplo:		IsAnyOneOfVars([1], [v1, v2], false) / IsAnyOneOfVars([1,2,3], [v1], false) / IsAnyOneOfVars([1,2,3], [v1,v2,v3], false)
*/
function IsAnyOneOfVars(inValues, inVars, inGetVar) {
	var retVal = false;
	var retVar = 0;
	var numOfValues = inValues.length;
	var numOfVars = inVars.length;
	
	for (var i=0; i&amp;lt;numOfValues; i++)
	{
		for (var j=0; j&amp;lt;numOfVars; j++)
		{
			if (inVars[j] == inValues[i])
			{
			retVal = true;
			retVar = j+1;
			break;
			}
		}
	}
	if (inGetVar)
	{
		return retVar;
	}
	else
	{	
		return retVal;
	}
}
/*	Nome da Função:	IsRangeOneOfVars
	Programador:	Clayton
	Data:			20/11/2012
	Descrição:		Busca valores de x a x entre 1 ou mais Variáveis
					Se Deseja saber onde o valor foi localizado, digite adicione true no final da função, senão, digite false;
	Tipo Quest:		Vars
	Exemplo:		IsRangeOneOfVars(1,10, [v1, v2], false) / IsRangeOneOfVars(1,3, [v1], false) / IsRangeOneOfVars(1,200, [v1,v2,v3], false)
*/
function IsRangeOneOfVars(inValueBegin, inValueEnd, inVars, inGetVar) {
	var retVal = false;
	var retVar = 0;
	var numOfVars = inVars.length;
	
	for (var i=inValueBegin; i&amp;lt;=inValueEnd; i++)
	{
		for (var j=0; j&amp;lt;numOfVars; j++)
		{
			if (inVars[j] == i)
			{
			retVal = true;
			retVar = j+1;
			break;
			}
		}
	}
	if (inGetVar)
	{
		return retVar;
	}
	else
	{	
		return retVal;
	}
}

/*	Nome da Função:	IsRangeCount
	Programador:	Clayton
	Data:			00/00/0000
	Descrição:		Checar se existe um valor de-para e retorna a quantidade
	Tipo Quest:		Single e Mult
	Exemplo:		IsRange(QRef(5), 18, 24);
*/
	function IsRangeCount(inQIdx, inBegin, inEnd) {
		var retVal = 0;
		for (var j = inBegin; j &amp;lt;= inEnd; j++) {
			if (Contains(inQIdx, j)) {
				retVal += 1; }
		}
		return retVal;
	}

/*	Nome da Função:	IsRangeChoiceCount
	Programador:	Clayton
	Data:			00/00/0000
	Descrição:		Checar se existe um valor de-para em questões Topics e retorna a quantidade
	Tipo Quest:		Topics
	Exemplo:		IsRangeChoice(QRef(5), 1, 1,5);
*/
	function IsRangeChoiceCount(inQIdx, inAnsIdx, inBegin, inEnd) {
		var retVal = 0;
		for (var j = inBegin; j &amp;lt;=inEnd; j++) {
			if (AnswerChoice(inQIdx, inAnsIdx) == j) {
				retVal += 1; }
		}
		return retVal;
	}

/*	Nome da Função:	IsContainsOneOfTopics
	Programador:	Clayton
	Data:			19/11/2012
	Descrição:		Checar se existe um/ou valor(es) em questões Topics
	Tipo Quest:		Topics
	Exemplo:		IsContainsOneOfTopics(QRef(5), 1, [1,2,5,4]);
*/
	function IsContainsOneOfTopics(inQTarget,inTopic,inAnswers)
	{
		var retVal = false;
		var numOfAnswers = inAnswers.length;
		for (var i=0;i&amp;lt;numOfAnswers;i++) {
			if (AnswerChoice(inQTarget,inTopic) == inAnswers[i]) {
				retVal = true;
				break;
			}
		}
		return retVal;
	}

/*	Nome da Função:	IsSetAnswersRangeVisible
	Programador:	Clayton
	Data:			
	Descrição:		Exibir/Ocultar respostas de X a X
	Tipo Quest:		Single e Multi
	Exemplo:		IsSetAnswersRangeVisible(CurrQues, true, true, 1, 10);
*/
function IsSetAnswersRangeVisible(inQIdx, inShow, inReset, inAnsBegin, inAnsEnd){
	var inAnswers = new Array();
	var i = 0;
	
	for (var j = inAnsBegin; j&amp;lt;=inAnsEnd; j++)
	{
		inAnswers[i] = j;
		i++;
	}
		
	SetAnswerVisible(inQIdx, inShow, inReset, inAnswers);

}
/*	Nome da Função:	IsSetTopicsRangeVisible
	Programador:	Clayton
	Data:			
	Descrição:		Exibir/Ocultar respostas de X a X
	Tipo Quest:		Topics
	Exemplo:		IsSetTopicsRangeVisible(CurrQues, true, true, 1, 10);
*/
function IsSetTopicsRangeVisible(inQIdx, inShow, inReset, inTopBegin, inTopEnd){
	var inTopics = new Array();
	var i = 0;
	
	for (var j = inTopBegin; j&amp;lt;=inTopEnd; j++)
	{
		inTopics[i] = j;
		i++;
	}
		
	SetTopicVisible(inQIdx, inShow, inReset, inTopics);
}
/*	Nome da Função:	IsGetIndexAnswers
	Programador:	Clayton
	Data:			17/12/2012
	Descrição:		Retornar os índices dos itens da lista em Matriz
	Tipo Quest:		RU/RM
	Exemplo:		IsGetIndexAnswers(QRef(1));
*/
function IsGetIndexAnswers(inQIdx){
	var inAnswers = new Array();
	var i = 0;
	
	for (var j=1;j&amp;lt;=GetAnswerCount(inQIdx);j++)
	{
		inAnswers[i] = j;
		i++;
	}
		
	return inAnswers;
}
/*	Nome da Função:	IsGetIndexAnswersExclude
	Programador:	Clayton
	Data:			17/12/2012
	Descrição:		Retornar os índices dos itens da lista em Matriz
	Tipo Quest:		RU/RM
	Exemplo:		IsGetIndexAnswersExclude(QRef(1), [1,2,3]);
*/
function IsGetIndexAnswersExclude(inQIdx, AnsExclude){
	var inAnswers = new Array();
	var i = 0;
	
	for (var j=1;j&amp;lt;=GetAnswerCount(inQIdx);j++)
	{
		if (IndexOfInt(j, AnsExclude)==-1)
		{	
			inAnswers[i] = j;
			i++;
		}
	}
		
	return inAnswers;
}
/*	Nome da Função:	IsGetIndexTopics
	Programador:	Clayton
	Data:			17/12/2012
	Descrição:		Retornar os índices dos itens da lista em Matriz
	Tipo Quest:		Topic
	Exemplo:		IsGetIndexTopics(QRef(1));
*/
function IsGetIndexTopics(inQIdx){
	var inTopics = new Array();
	var i = 0;
	
	for (var j=1;j&amp;lt;=GetTopicCount(inQIdx);j++)
	{
		inTopics[i] = j;
		i++;
	}
		
	return inTopics;
}

/*	Nome da Função:	IsGetNumOfTopicsWithValuesRange
	Programador:	Clayton
	Data:			04/01/2013
	Descrição:		Facilitando o uso da da função GetNumOfTopicsWithValues, para colocar um range nos valores
	Tipo Quest:		Topics
	Exemplo:		IsGetNumOfTopicsWithValuesRange(CurrQues, 20,97);
*/
function IsGetNumOfTopicsWithValuesRange(inQIdx, inBegin, inEnd) {
	var retVal = false;
		for (var j=inBegin;j&amp;lt;=inEnd;j++)
		{
			if (GetNumOfTopicsWithValues(inQIdx, j) &amp;gt; 0) { retVal = true; break;}
		}
	return retVal;
}

/*	Nome da Função:	IsDataNasc
	Programador:	Clayton
	Data:			16/01/2013
	Descrição:		Retorna a idade baseada na Data de Nascimento
	Tipo Quest:		Date
	Exemplo:		IsDataNasc(QRef(1));
*/
function IsDataNasc(inQIdxDataNasc)
{
	var retVal = 0;
	retVal = (Now.Year-Answer(inQIdxDataNasc).Year);
	if ((Answer(inQIdxDataNasc).Month &amp;gt; Now.Month) || (Answer(inQIdxDataNasc).Month == Now.Month &amp;amp;&amp;amp; Answer(inQIdxDataNasc).Day &amp;gt; Now.Day))
	{
		retVal = retVal-1;
	}
	return retVal;
}

/*	Nome da Função:	IsDataNascIter
	Programador:	Clayton
	Data:			16/01/2013
	Descrição:		Retorna a idade baseada na Data de Nascimento
	Tipo Quest:		Date Iter
	Exemplo:		IsDataNascIter(QRef(1), IterationIdex);
*/
function IsDataNascIter(inQIdxDataNasc, inIter)
{
	var retVal = 0;
	retVal = (Now.Year-Answer(inQIdxDataNasc).Year);
	if ((AnswerIter(inQIdxDataNasc, inIter).Month &amp;gt; Now.Month) || (AnswerIter(inQIdxDataNasc, inIter).Month == Now.Month &amp;amp;&amp;amp; AnswerIter(inQIdxDataNasc, inIter).Day &amp;gt; Now.Day))
	{
		retVal = retVal-1;
	}
	return retVal;
}

/*	Nome da Função:	IpsChekTrim
	Programador:	Wilson
	Data:			18-01-2013
	Descrição:		Essa função verifica se os valores digitados em uma questão aberta ou semi-aberta
					são apenas espaços, apenas números ou ambas as situações e retorna erro.
	Tipo Quest:		Aberta e Addictional Text
	Exemplo:		IpsChekTrim(true,true,false) | IpsChekTrim(false,false,true)&amp;amp;&amp;amp;Contains(CurrQues,1)
	Descrição do comando: IpsTrimTeste( ; nome da função
							true,		; aceita true/false. Se for true retorna erro caso a questão estiver apenas com espaços, se for false não aplica a checagem de espaços.
							true,		; aceita true/false. Se for true retorna erro caso a questão estiver apenas com números, se for false não aplica a checagem de números.
							false)		; aceita true/false. Faz a checagem de números e espaços para o Addictional Text. se estiver com false não checa o Addictional.
	Observação: Quando usar essa função para questões Addictional precisa vincular ao código fechado de outros.
*/
function IpsChekTrim(chkTxt,chkNum,chkAdd){
	var retVal = false;
	if (chkTxt){
		var txt = Answer(CurrQues).ToString()
		txt = txt.replace(/\s/g,'')
		if (txt == ''){
			retVal = true;
			return retVal;
		}
	}
	if (chkNum){
		var num = Answer(CurrQues).ToString()
		num = num.replace(/1|2|3|4|5|6|7|8|9|0|\s/g,'')
		if (num == ''){
			retVal = true;
			return retVal;
		}
	}
	if (chkAdd){
		var add = AdditionalText(CurrQues).ToString()
		add = add.replace(/1|2|3|4|5|6|7|8|9|0|\s/g,'')
		if (add == ''){
			retVal = true;
			return retVal;
		}
	}
}

/*	Nome da Função:	IpsChekTrimIterIter
	Programador:	Wilson
	Data:			28-02-2013
	Descrição:		Essa função verifica se os valores digitados em uma questão aberta ou semi-aberta
					são apenas espaços, apenas números ou ambas as situações e retorna erro.
	Tipo Quest:		Aberta e Addictional Text
	Exemplo:		IpsChekTrimIter(true,true,false) | IpsChekTrimIter(false,false,true)&amp;amp;&amp;amp;Contains(CurrQues,1)
	Descrição do comando: IpsTrimTeste( ; nome da função
							true,		; aceita true/false. Se for true retorna erro caso a questão estiver apenas com espaços, se for false não aplica a checagem de espaços.
							true,		; aceita true/false. Se for true retorna erro caso a questão estiver apenas com números, se for false não aplica a checagem de números.
							false)		; aceita true/false. Faz a checagem de números e espaços para o Addictional Text. se estiver com false não checa o Addictional.
	Observação: Quando usar essa função para questões Addictional precisa vincular ao código fechado de outros.
		    Texto padrão da mensagem(sugestão): ATENÇÃO: Não aceitar apenas números ou em branco!
*/
function IpsChekTrimIter(chkTxt,chkNum,chkAdd){
	var retVal = false;
	if (chkTxt){
		var txt = AnswerIter(CurrQues,IterationIndex).ToString()
		txt = txt.replace(/\s/g,'')
		if (txt == ''){
			retVal = true;
			return retVal;
		}
	}
	if (chkNum){
		var num = AnswerIter(CurrQues,IterationIndex).ToString()
		num = num.replace(/1|2|3|4|5|6|7|8|9|0|\s/g,'')
		if (num == ''){
			retVal = true;
			return retVal;
		}
	}
	if (chkAdd){
		var add = AdditionalTextIter(CurrQues,IterationIndex).ToString()
		add = add.replace(/1|2|3|4|5|6|7|8|9|0|\s/g,'')
		if (add == ''){
			retVal = true;
			return retVal;
		}
	}
}

/*	Nome da Função:	IsFilterAnswersByCods
	Programador:	Clayton
	Data:			28/02/13
	Descrição:		Filtrar pór código
	Tipo Quest:		Single e Multiple
	Exemplo:		IsFilterAnswersByCods(CurrQues, true, true, [10,11,13,9996,998,999]);
*/
function IsFilterAnswersByCods(inQIdx, inShow, inReset, inCods)
{
	var numOfCods = inCods.length;
	var inAnswers = new Array();

	for (var i=0;i&amp;lt;numOfCods;i++)
	{
		inAnswers[i] = GetAnswerChoiceIdxByCode(inQIdx,inCods[i]);
	}

	SetAnswerVisible(inQIdx, inShow, inReset, inAnswers);

}

/*	Nome da Função:	IsFilterTopicsByCods
	Programador:	Clayton
	Data:			28/02/13
	Descrição:		Filtrar pór código
	Tipo Quest:		Grid
	Exemplo:		IsFilterTopicsByCods(CurrQues, true, true, [10,11,13,9996,998,999], QRef(CurrQues-1));
*/
function IsFilterTopicsByCods(inQIdx, inShow, inReset, inCods, inQIdxCod)
{
	var numOfCods = inCods.length;
	var inTopics = new Array();

	for (var i=0;i&amp;lt;numOfCods;i++)
	{
		inTopics[i] = GetAnswerChoiceIdxByCode(inQIdxCod,inCods[i]);
	}

	SetTopicVisible(inQIdx, inShow, inReset, inTopics);

}

/*	Nome da Função:	IsFilterAnswersMarcasByCid
	Programador:	Clayton
	Data:			28/02/13
	Descrição:		Filtra as marcas do AddLists por cidade(neste Add List contém todas as marcas de cigarro)
	Tipo Quest:		Single e Multiple
	Exemplo:		IsFilterAnswersMarcasByCid(CurrQues, true, true, Answer(1));
	
	**Cidades GCS:
		Bauru					1
		São José do Rio Preto	2
		Belo Horizonte			3
		Recife					4
		Porto Alegre			5
		Curitiba				6
		Ribeirão Preto			7
		São Paulo				8
		Rio de Janeiro			9 **
*/
function IsFilterAnswersMarcasByCid(inQIdx, inShow, inReset, inCodCid)
{
	var inAnswers = new Array();
	var i = 0;
	var tblTable = GetTableFromStore("LISTA_DE_MARCAS_GCS","","cid_"+inCodCid+"=1","marca");
	for (var j=0; j&amp;lt;tblTable.RowCount; j++)
	{
		var rowRow = tblTable[j];
		if (rowRow["status_cod"]==1)
		{
			inAnswers[i] = rowRow["marca_cod"].ToInt();
			i++;
		}
	}
	
	IsFilterAnswersByCods(inQIdx, inShow, inReset, inAnswers);
}

/*	Nome da Função:	IsSetAnswerCodeLabel
	Programador:	Clayton
	Data:			05/03/13
	Descrição:		
	Tipo Quest:		Single e Multipe
	Exemplo:		IsSetAnswerCodeLabel(CurrQues, [42,43]);
*/
function IsSetAnswerCodeLabel(inQIdx, inIgnore)
{
	for (var j=1;j&amp;lt;=GetAnswerCount(inQIdx);j++)
	{
		SetAnswerText(inQIdx, j, AnswerCode(inQIdx, j)+'-'+GetAnswerOriginalText(inQIdx, j));
	}
	if (inIgnore!='undefined')
	{
		for (var j=0;j&amp;lt;inIgnore.length;j++)
		{
			SetAnswerText(inQIdx, inIgnore[j], GetAnswerOriginalText(inQIdx, inIgnore[j]));
		}
	}
}

/*	Nome da Função:	IsSetTopicCodeLabel
	Programador:	Clayton
	Data:			17/05/13
	Descrição:		
	Tipo Quest:		Topic
	Exemplo:		IsSetTopicCodeLabel(CurrQues, [42,43]);
*/
function IsSetTopicCodeLabel(inQIdx, inQIdxCod, inIgnore)
{
	for (var j=1;j&amp;lt;=GetTopicCount(inQIdx);j++)
	{
		SetTopicText(inQIdx, j, AnswerCode(inQIdxCod, j)+'-'+GetTopicOriginalText(inQIdx, j));
	}
	if (inIgnore!='undefined')
	{
		for (var j=0;j&amp;lt;inIgnore.length;j++)
		{
			SetTopicText(inQIdx, inIgnore[j], GetTopicOriginalText(inQIdx, inIgnore[j]));
		}
	}
}

/*	Nome da Função:	IsSortAnswersByCod
	Programador:	Clayton
	Data:			06/03/2013
	Descrição:		Ordenar Lista por Index
	Tipo Quest:		
	Exemplo:		
*/
function IsSortAnswersByCod(inQIdx)
{
	var inAnswersCod = new Array();
	var inAnswersIdx = new Array();
	for (var i=1;i&amp;lt;=GetAnswerCount(inQIdx);i++)
	{
		inAnswersCod[i-1] = AnswerCode(inQIdx, i);
		//Prompt("cod "+inAnswersCod[i-1]);
	}
	var inAnswersCod = inAnswersCod.sort(IsCrescente);
	for (var i=1;i&amp;lt;=GetAnswerCount(inQIdx);i++)
	{
		inAnswersIdx[i-1] = GetAnswerChoiceIdxByCode(inQIdx, inAnswersCod[i-1]);
		//Prompt("idx "+inAnswersIdx[i-1]);
	}	
	RandomizeAnswers(inQIdx, inAnswersIdx);
	/* Crescente */
		function IsCrescente(index1, index2)
		{
			return index1 - index2;
		}
	/* Decrescente */
		function IsDecrescente(index1, index2)
		{
			return index2 - index1;
		}
}

/*	Nome da Função:	IsRangeAll
	Programador:	Clayton
	Data:			09/04/2013
	Descrição:		Checar se existe todos os valores de-para
	Tipo Quest:		Single e Mult
	Exemplo:		IsRangeAll(QRef(5), 18, 24);
*/
	function IsRangeAll(inQIdx, inBegin, inEnd) {
		var intVal = 0;
		for (var j=inBegin;j&amp;lt;=inEnd;j++) { if (Contains(inQIdx, j)) { intVal++} }
		if (intVal==inEnd) { return true; }
		else { return false; }
	}

/*	Nome da Função:	IsContainsByOriginalText
	Programador:	Clayton
	Data:			15/04/2013
	Descrição:		Buscar Resposta por Original Text
	Tipo Quest:		Single e Mult
	Exemplo:		IsContainsByOriginalText(QRef(5), 'Outros');
*/
function IsContainsByOriginalText(inQues, inText)
{
	var retVal = false;
	for (var j=1;j&amp;lt;=GetAnswerCount(inQues);j++)
	{
		if (Contains(inQues, j) &amp;amp;&amp;amp; GetAnswerOriginalText(inQues, j)==inText) { retVal = true; break; }
	}
	return retVal;
}

/* 
	Nome da Função:	IsSetAnswersByCod
	Programador:	Clayton
	Data:			29/04/13
	Descrição:		
	Tipo Quest:		Single e Multipe
	Exemplo:		IsSetAnswersByCod(QRef(1), CurrQues);
*/
function IsSetAnswersByCod(inQIdx, inQIdxTarget)
{
	if (NumOfSelectedChoices(inQIdxTarget)&amp;gt;0)
	{
		var numOfAnswers = GetAnswers(inQIdxTarget);
		var codOfAnswers = new Array();
		
		for (var j=0; j&amp;lt;numOfAnswers.length; j++)
		{
			codOfAnswers[j] = GetAnswerChoiceIdxByCode(inQIdx, AnswerCode(inQIdxTarget, numOfAnswers[j]));
		}
		SetAnswer(inQIdx, codOfAnswers);
	}
	else
	{
		SetAnswer(inQIdx, GetAnswerChoiceIdxByCode(inQIdx, SelectedAnswerCode(inQIdxTarget)));
	}
}

/*	Nome da Função:	IsRangeVar
	Programador:	Clayton
	Data:			23/05/2013
	Descrição:		Checar se existe um valor de-para
	Tipo Quest:		Variável de Usuário
	Exemplo:		IsRangeVar(Var, 8,10);
*/
	function IsRangeVar(inVar, inBegin, inEnd) {
		var retVal = false;
		if (inVar&amp;gt;=inBegin &amp;amp;&amp;amp; inVar&amp;lt;=inEnd) { retVal = true; }
		return retVal;
	}

/*	Nome da Função:	IsContainsNumOfValues
	Programador:	Clayton
	Data:			27/05/2013
	Descrição:		Retorna o total de valores que a questão possui
	Tipo Quest:		Multiple
	Exemplo:		IsContainsNumOfValues(CurrQues, [1,2,3,4]);
*/
	function IsContainsNumOfValues(inQIdx, inAnswers) {
		var retVal = 0;
		for (var j=0;j&amp;lt;inAnswers.length;j++)
		{
			if (Contains(inQIdx, inAnswers[j])) { retVal++; }
		}
		return retVal;
	}

/*	Nome da Função:	IsContainsTopicsValues
	Programador:	Clayton
	Data:			27/05/2013
	Descrição:		Checa se há valores nos Tópics
	Tipo Quest:		Single Topic
	Exemplo:		IsContainsTopicsValues(CurrQues, [1,2,3,9], [1], false, false);
					false, false = Qlqer um dos Tópicos, Qlqer um dos Valores
					true, false = Todos os Tópicos, Qlqer um dos Valores
					true, true = Todos os Tópicos, Todos os Valores
*/
	function IsContainsTopicsValues(inQIdx, inTopics, inAnswers, inAllTopics, inAllAnswers) {
		var retVal = false;
		var intValTopic = 0;
		var intValAnswer = 0;
		
		for (var tpc=0;tpc&amp;lt;inTopics.length;tpc++)
		{
			if (!inAllTopics &amp;amp;&amp;amp; !inAllAnswers)
			{
				for (var ans=0;ans&amp;lt;inAnswers.length;ans++)
				{
					if (AnswerChoice(inQIdx, inTopics[tpc])==inAnswers[ans]) { retVal=true; break; }
				}
			}
			if (inAllTopics)
			{
				if (IsContainsOneOfTopics(inQIdx, inTopics[tpc], inAnswers)) { intValTopic++; }
			}
			if (inAllAnswers)
			{
				for (var ans=0;ans&amp;lt;inAnswers.length;ans++)
				{
					if (AnswerChoice(inQIdx, inTopics[tpc])==inAnswers[ans]) { intValAnswer++; }
				}
			}
		}
		if (inAllTopics &amp;amp;&amp;amp; intValTopic==inTopics.length) { retVal=true; }
		if (inAllAnswers &amp;amp;&amp;amp; intValAnswer==inAnswers.length) { retVal=true; }
		if ((inAllAnswers &amp;amp;&amp;amp; intValAnswer==inAnswers.length) &amp;amp;&amp;amp; (inAllTopics &amp;amp;&amp;amp; intValTopic==inTopics.length)) { retVal=true; }

		return retVal;
	}

/*	Nome da Função:	IsGetTopicsTextWithValues
	Programador:	Clayton
	Data:			04/06/2013
	Descrição:		Exibe o Texto dos Topics que Tem um determinado valor
	Tipo Quest:		Single Grid
	Exemplo:		IsGetTopicsTextWithValues(QRef(1), [1,2,3,4], [QRef(1),QRef(2)], [4,5]);
					Se não tiver Outros, coloque 0 IsGetTopicsTextWithValues(QRef(1), [1,2,3,4], [0], [0]);
*/
	function IsGetTopicsTextWithValues(inQIdx, inAnswers, inOuts, inAnswersOuts) {
		var retVal = "";
		var txtOut = "";
		var ans = 0;
		for (var tpc=1;tpc&amp;lt;=GetTopicCount(inQIdx);tpc++)
		{
				if (IsContainsOneOfTopics(inQIdx, tpc, inAnswers))
				{
					if (tpc==inAnswersOuts[ans])
					{
						txtOut = AdditionalText(inOuts[ans]) + Answer(inOuts[ans]);
						retVal += txtOut+", ";
						ans++;
					}
					else
					{
						retVal += GetTopicOriginalText(inQIdx, tpc)+", ";
					}
				}
		}
		return retVal.substring(0, retVal.length-2);
	}

/*	Nome da Função:	IsGetIdxTopicsWithValues
	Programador:	Clayton
	Data:			06/06/2013
	Descrição:		Exibe os IDXs dos Topics que Tem um determinado valor
	Tipo Quest:		Single Grid
	Exemplo:		IsGetIdxTopicsWithValues(QRef(1), [1,2,3,4]);
*/
	function IsGetIdxTopicsWithValues(inQIdx, inAnswers) {
		var retVal = new Array();
		var i = 0;
		for (var tpc=1;tpc&amp;lt;=GetTopicCount(inQIdx);tpc++)
		{
			if (IsContainsOneOfTopics(inQIdx, tpc, inAnswers))
			{
				retVal[i] = tpc; i++;
			}
		}
		return retVal;
	}

/*	Nome da Função:	IsRandomAnswersWithExclusive
	Programador:	Clayton
	Data:			06/03/2013
	Descrição:		Retorna as opções e rodízio e fixa determinados índices no fim da lista
	Tipo Quest:		Single
	Exemplo:		IsRandomAnswersWithExclusive(CurrQues, [10,11], false);
					inSet = true somente se for para setar a ordem do rodízio, se for para exibição deixe false;
*/
function IsRandomAnswersWithExclusive(inQIdx, inExcludeRandom, inSet)
{
		var retVal = new Array();
		var inAnswersIdx = new Array();
		var j = 0;
		for (var i=1;i&amp;lt;=GetAnswerCount(inQIdx);i++)
		{
			if (!InArray(i, inExcludeRandom))
			{
				inAnswersIdx[j] = i; j++;
			}
		}
		inAnswersIdx = RandomizeArray(inAnswersIdx);
		
		j = 0;
		for (var i=0;i&amp;lt;GetAnswerCount(inQIdx);i++)
		{	
			if (i&amp;lt;inAnswersIdx.length) { retVal[i] = inAnswersIdx[i]; }
			else { retVal[i] = inExcludeRandom[j]; j++; }
		}
		
		if (!inSet)
			{ RandomizeAnswers(inQIdx, retVal); }
		else if (inSet)
			{ return retVal; }
}

/*	Nome da Função:	IsRangeTopics
	Programador:	Clayton
	Data:			17/05/2013
	Descrição:		Retorna a soma dos valores em questões Topics
	Tipo Quest:		Topics
	Exemplo:		IsRangeTopics(QRef(5), 1,5)&amp;gt;0;
*/
	function IsRangeTopics(inQIdx, inTpcIn, inTpcEnd) {
		var retVal = 0;
		for (var j = inTpcIn; j &amp;lt;=inTpcEnd; j++) {
			if (AnswerChoice(inQIdx, j)&amp;gt;= 0) {
				retVal += AnswerChoice(inQIdx, j); }
		}
		return retVal;
	}

/*	Nome da Função:	IsSortAnswersWithExclusive
	Programador:	Clayton
	Data:			06/03/2013
	Descrição:		Retorna as opções em ordem de indice e fixa determinados índices no fim da lista
	Tipo Quest:		Single
	Exemplo:		IsSortAnswersWithExclusive(CurrQues, [10,11]);
*/
function IsSortAnswersWithExclusive(inQIdx, inExcludeRandom)
{
		var retVal = new Array();
		var inAnswersIdx = new Array();
		var j = 0;
		for (var i=1;i&amp;lt;=GetAnswerCount(inQIdx);i++)
		{
			if (!InArray(i, inExcludeRandom))
			{
				inAnswersIdx[j] = i; j++;
			}
		}
	
		j = 0;
		for (var i=0;i&amp;lt;GetAnswerCount(inQIdx);i++)
		{	
			if (i&amp;lt;inAnswersIdx.length) { retVal[i] = inAnswersIdx[i]; }
			else { retVal[i] = inExcludeRandom[j]; j++; }
		}
		
		RandomizeAnswers(inQIdx, retVal);
}

/*	Nome da Função:	IsContainsAnyIterRange
	Programador:	Clayton
	Data:			09/08/2013
	Descrição:		Buscar Valor no Iter
	Tipo Quest:		Single e Multiple
	Exemplo:		IsContainsAnyIterRange(CurrQues, 1, 10);
*/
function IsContainsAnyIterRange(inQIdx, inBegin, inEnd)
{
	var retVal = false;
	for (var j=inBegin; j&amp;lt;=inEnd; j++)
	{
		if (ContainsAnyIter(inQIdx, j))
		{
			retVal = true;
			break;
		}
	}
	return retVal;
}

/*	Nome da Função:	IsSetTextCod
	Programador:	Clayton
	Data:			14/08/2013
	Descrição:		Setar código(indíce) no lugar do label
	Tipo Quest:		Answer e Tópic
	Exemplo:		IsSetTextCod(inQIdx, inTopic)
*/
function IsSetTextCod(inQIdx, inTopic)
{
	if (inTopic)
	{
		for (var j=1;j&amp;lt;=GetTopicCount(inQIdx);j++)
		{
			SetTopicText(inQIdx, j, ""+j+"");
		}
	}
	else
	{	
		for (var j=1;j&amp;lt;=GetAnswerCount(inQIdx);j++)
		{
			SetAnswerText(inQIdx, j, ""+j+"");
		}
	}
}

/*	Nome da Função:	IsRemoveAcento
	Programador:	Internet
	Data:			21/08/2013
	Descrição:		Remove os Acentos da String
	Tipo Quest:		String
	Exemplo:		IsRemoveAcento("São Paulo");
*/
function IsRemoveAcento(strToReplace)
{
var str_acento= "áàãâäéèêëíìîïóòõôöúùûüçÁÀÃÂÄÉÈÊËÍÌÎÏÓÒÕÖÔÚÙÛÜÇ";
var str_sem_acento = "aaaaaeeeeiiiiooooouuuucAAAAAEEEEIIIIOOOOOUUUUC";
var nova="";
	for (var i = 0; i &amp;lt; strToReplace.length; i++)
	{
		if (str_acento.indexOf(strToReplace.charAt(i)) != -1) {
			nova+=str_sem_acento.substr(str_acento.search(strToReplace.substr(i,1)),1);
		} else {
			nova+=strToReplace.substr(i,1);
		}
	}
	return nova;
}

/*	Nome da Função:	IsSetValuesRandom
	Programador:	Clayton/Carla
	Data:			
	Descrição:		Escolhe X valores rodiziado com base nos parametros de X a X
	Tipo Quest:		Single
	Exemplo:		IsSetValuesRandom(CurrQues, 1, 1, 4, 0)
*/
function IsSetValuesRandom(inSet, inSize, inMin, inMax, inIgnore)
{
	if (NotAnswered(inSet))
	{
		do {
			var arraySort = new Array();
			arraySort = CreateRandomArray(inSize, inMin,inMax);
		} while (IsRangeOneOfVars(inMin, inMax,[inIgnore],false) &amp;amp;&amp;amp; IsAnyOneOfVars([inIgnore],[arraySort[0],arraySort[1]],false));
		
		var inAns = new Array();
		for (var j=0;j&amp;lt;inSize;j++)
		{
			inAns[j] = arraySort[j];
		}
		SetAnswer(inSet, inAns);
	}
}

/*	Nome da Função:	IsCheckIntCompra
	Programador:	Clayton
	Data:			04-11
	Descrição:		Checar Intenção de Compra entre Marca Mãe e Variante
	Tipo Quest:		Loop Single/Multiple
	Exemplo:		
*/
function IsCheckIntCompra(inQIdxMae, inIdxCodMae, inQIdxVar, inIdxCodVarIn, inIdxCodVarFim)
{
	var retVal = false;
	var i = 0;
	var k = 0;
	
	for (var j=inIdxCodVarIn;j&amp;lt;=inIdxCodVarFim;j++)
	{	
		if (AnsweredIter(inQIdxVar, j))
		{
			k++;
			if (AnswerIter(inQIdxVar, j)&amp;gt;AnswerIter(inQIdxMae, inIdxCodMae))
			{
				i++;
			}
		}
	}
	if (i == k)
	{
		Prompt("As variantes de "+IterationName+" não podem ter respostas maior do que "
			+AnswerIter(inQIdxMae, inIdxCodMae)+" para todas");
		retVal = true;
	}
	
	return retVal;
}

/*	Nome da Função:	IsCheckOrdemSelOutros
	Programador:	Clayton
	Data:			02/12/2013
	Descrição:		Checar se os outros foram selecionados na Ordem Outros 1, Outros 2, etc.
	Tipo Quest:		RU/RM
	Exemplo:		IsCheckOrdemSelOutros(CurrQues, 3, 12);
*/
function IsCheckOrdemSelOutros(inQues, inQtdeOuts, inIdxOut1)
{
	var retVal = false;
	var i = 2;
	for (var j=inIdxOut1+1;j&amp;lt;inIdxOut1+inQtdeOuts;j++)
	{
		if (IsAnswerVisible(inQues, j) &amp;amp;&amp;amp; IsAnswerVisible(inQues, j-1) &amp;amp;&amp;amp; Contains(inQues, j) &amp;amp;&amp;amp; !Contains(inQues, j-1))
		{
			Prompt("Por favor, escolha na Ordem Outros "+(i-1)+", Outros "+i+", etc.");
			retVal = true;
			break;
		}
		i++;
	}	
	return retVal;
}

/*	Nome da Função:	IsCheckEspEst (falta testar)
	Programador:	Clayton
	Data:			04/12/2013
	Descrição:		Checar se o que foi mencionado no Espontâneo está no estimulado, com a possibilidade de Ignorar NH/NS
	Tipo Quest:		RU/RM/Grid
	Exemplo:		IsCheckEspEst([QRef(2), QRef(3)], CurrQues, false, [11]);
*/
function IsCheckEspEst(inEsps, inEst, inGridEst, inIgnore)
{
	var retVal = false;

	for (var i=0;i&amp;lt;inEsps.length;i++)
	{
		for (var j=1;j&amp;lt;=GetAnswerCount(inEsps[0]);j++)
		{
			if (!InArray(j, inIgnore))
			{
				if (inGridEst)
				{
					if (IsTopicVisible(inEst, j) &amp;amp;&amp;amp; Contains(inEsps[i], j) &amp;amp;&amp;amp; !ContainsSpecificRate(inEst, 1, j))
					{
						Prompt("Em "+VarName(inEsps[i])+" selecionou a opção "+GetAnswerOriginalText(inEsps[i], j)+" devendo selecioná-la nesta questão. Verifique!");
						retVal = true;
					}
				} else {
					if (IsAnswerVisible(inEst, j) &amp;amp;&amp;amp; Contains(inEsps[i], j) &amp;amp;&amp;amp; !Contains(inEst, j))
					{
						Prompt("Em "+VarName(inEsps[i])+" selecionou a opção "+GetAnswerOriginalText(inEsps[i], j)+" devendo selecioná-la nesta questão. Verifique!");
						retVal = true;
					}
				}
			}
			if (retVal) { break; }
		}
		if (retVal) { break; }
	}
    return retVal;
}

/*	Nome da Função:	
	Programador:	
	Data:			
	Descrição:		
	Tipo Quest:		
	Exemplo:		
*/

/***************************************************************************************/

function NoMoreThanOneFirstAnswer(InQIdx)
{
	var count=0;
	var RetVal=false;
	for(var i=1; i&amp;lt;=GetTopicCount(InQIdx); i++)
	{
		if(AnswerChoice(InQIdx,i)==1)
		{
			count++;
		}
	}
	
	if(count&amp;gt;1)
	{
		RetVal=true;
	}

	return RetVal

}

function LessThan4Ans(InQIdx)
{
	var count3=0;
	var RetVal3=false;
	for(var i=1; i&amp;lt;=GetTopicCount(InQIdx); i++)
	{
		if(AnswerChoice(InQIdx,i)==2)
		{
			count3++;
		}
	}
	
	if(count3&amp;gt;3)
	{
		RetVal3=true;
	}

	return RetVal3

}




function dblToJSArray(inArray){
	var retVal = new Array();
		
	for(var i=0; i&amp;lt;inArray.length; i++){		
		retVal.push(inArray[i]);
	}	
	
	return retVal;
}

function dblColorFromRGB(red, green, blue){
	return (255&amp;lt;&amp;lt;24)+ (red&amp;lt;&amp;lt;16) + (green&amp;lt;&amp;lt;8) + blue;
}

//Gets latitude and longitude coordinates, and returns the distance of the surveyor from the specific point.
function dblDistanceFromGPSFence (fenceLat, fenceLon)
{
	var pi = Math.PI;
	var fenceLatInRad=fenceLat* pi / 180;
	var fenceLonInRad=fenceLon* pi / 180;
	var targetLatInRad = GetGPSLocation().Latitude * pi / 180;
	var targetLonInRad = GetGPSLocation().Longitude * pi / 180;
	var dist = Math.acos(Math.sin(targetLatInRad) * Math.sin(fenceLatInRad) + Math.cos(targetLatInRad) * Math.cos(fenceLatInRad) * Math.cos(targetLonInRad - fenceLonInRad)) * 6371;
	
	return dist;
}

//Gets latitude and longitude coordinates and a radius in Kilo-Meters.
//Returns ‘true’ if the surveyor is in the given radius.
//Returns ‘false’ if the surveyor is not in the given radius.
function dblIsInGPSFence (fenceLat, fenceLon, distInKM)
{
	var dist = dblDistanceFromGPSFence(fenceLat, fenceLon);
	var retVal = false;
	
	if(dist&amp;lt;distInKM){
	    retVal=true;}
	else{
	    retVal=false;
	}
	return retVal;
}

//will return the distance between 2 locations 
function dblDistanceBetweenTwoLocations (firstLat, firstLon, secondLat, secondLon)
{
	var pi = Math.PI;
	var firstLatInRad=firstLat* pi / 180;
	var firstLonInRad=firstLon* pi / 180;
	var targetLatInRad = secondLat * pi / 180;
	var targetLonInRad = secondLon * pi / 180;
	var dist = Math.acos(Math.sin(targetLatInRad) * Math.sin(firstLatInRad) + Math.cos(targetLatInRad) * Math.cos(firstLatInRad) * Math.cos(targetLonInRad - firstLonInRad)) * 6371;
	
	return dist;
}

//Calculates the sum of all the visible topics in a numeric grid
function dblSumNumericGrid(inQ)
{
	var retVal=0;
	var numOfTopics=GetTopicCount(inQ);
	var i;
	
	for(i=1; i&amp;lt;=numOfTopics; i++)
	{
		if (IsTopicVisible(inQ,i)) {
			retVal+=AnswerChoice(inQ,i);
		}
	}
	
	return retVal;
}

//will check if one of the answers mentioned were chosen
function dblContainsOneOf(inQTarget,inAnswers)
{
	var retVal = false;
	var numOfAnswers = inAnswers.length;
	var i;
	for (i=0;i&amp;lt; numOfAnswers;i++) {
		if (Contains(inQTarget,inAnswers[i])) {
			retVal = true;
			break;
		}
	}
	return retVal;
}


//function dblContainsAll(inQTarget,inAnswers)
//{
//	var retVal = true;
//	var numOfAnswers = arguments.length-1;
//	var i;
//	for (i=0;i&amp;lt; numOfAnswers;i++) {
//		retVal = retVal &amp;amp;&amp;amp; Contains(inQTarget,arguments[i+1]);
//	}
//	return retVal;
//}

//will check if ALL of the answers mentioned were chosen
function dblContainsAllOf(inQTarget,inAnswers)
{
	var retVal = true;
	var numOfAnswers = inAnswers.length;
	var i;
	for (i=0;i&amp;lt; numOfAnswers;i++) {
		retVal = retVal &amp;amp;&amp;amp; Contains(inQTarget,inAnswers[i]);
	}
	return retVal;
}

//Single Choice Grid - in how many topics the answer was selected
function dblNumOfTopicsContains(inQ, inValueToCheck)
{
	var retVal = 0;
	var i=0;
	for (i=1; i&amp;lt;=GetTopicCount(inQ);i++){
		if (IsTopicVisible(inQ,i) &amp;amp;&amp;amp; AnswerChoice(inQ,i) == inValueToCheck) {
			retVal++;
		}
	}
	
	return retVal;
}

//Multiple Selection Grid - in how many topics the answer was selected
function dblNumOfTopicsContainsChoice(inQ, inValueToCheck)
{
	var retVal = 0;
	var i=0;
	for (i=1; i&amp;lt;=GetTopicCount(inQ);i++){
		if (IsTopicVisible(inQ,i) &amp;amp;&amp;amp; ContainsChoice(inQ,i,inValueToCheck)) {
			retVal++;
		}
	}
	
	return retVal;
}

//Multiple Selection &amp;amp; Single Choice - relevant for questions in iterations - in how many iterations the answer was selected
function dblNumOfIterContains(inQ, inValueToCheck)
{
	var retVal = 0;
	var i=0;
	for (i=1; i&amp;lt;IterationIndex;i++){
		if (ContainsIter(inQ,inValueToCheck,i)) {
			retVal++;
		}
	}
	return retVal;
}

//Numeric Grid, Open Ended Grid &amp;amp; Single Choice Grid - Will set the Topic with the value you enter
function dblSetSpecificTopic(inQ, inTopicIndex, inValue)
{
	var curTopics = GetTopicCount(inQ);
	var newAnswers=new Array();
	var newArIdx=0;
	var i;
	for (i=0;i&amp;lt; curTopics;i++) {
		var actualTopic = i+1;
		if (actualTopic == inTopicIndex) {
			newAnswers[i] = inValue;
		}
		else {
			newAnswers[i] = AnswerChoice(inQ,actualTopic);
		}
	}
	SetAnswer(inQ,newAnswers);
}

//Multiple Selection Grid - Will set the Topic with the value you enter
function dblSetSpecificTopicChoice(inQ, inTopicIndex, inValue)
{
	var curTopics = GetTopicCount(inQ);
	var newAnswers=new Array();
	newAnswers.push(inValue);
	var i;
	var ansArr = GetAnswersChoice(inQ, inTopicIndex);
	for (i=0;i &amp;lt; ansArr.length;i++)
 	{
		newAnswers.push(ansArr[i]);
	}
	SetAnswerChoice(inQ, inTopicIndex, newAnswers);
}

//Will set the Answer with the value you enter
function dblSetSpecificAnswer(inQ, inAnswerIdx, inChecked)
{
	var curAnswers = GetAnswers(inQ);
	var newAnswers=new Array();
	var newArIdx=0;
	var i;
	for (i=0;i&amp;lt; curAnswers.length;i++) {
		if (curAnswers[i] != inAnswerIdx) {
			newAnswers[newArIdx] = curAnswers[i];
			newArIdx++;
		}
	}
	if (inChecked) {
		newAnswers[newArIdx] = inAnswerIdx;
	}
	if (newAnswers.length &amp;gt; 0) {
	
		SetAnswer(inQ,newAnswers);
	}
	else {
		ClearAnswer(inQ);
	}
}

//Set the answers based on the answers of a different question
function dblSetAnswersByAnswers(inQTarget,inQids)
{
	var numOfQues = inQids.length;
	var numOfAnswers = GetAnswerCount(inQids[0]);
	var i;
	for (i=1;i&amp;lt;= numOfAnswers;i++) {
		var contained = false;
		var j;
		for (j=0; j&amp;lt;numOfQues;j++) {
			contained = Contains(inQids[j],i);
			if (contained) {
				break;
			}
		}
		if (contained) {
			dblSetSpecificAnswer(inQTarget, i,true);
		}
	}
}

//Set the answers based on the answers of a different question with the ability to exclude specific answers you add as an array.
function dblSetAnswersByAnswersEx (inQTarget,inQids,inExcludeHiddenTargetAnswers)
{
	var numOfQues = inQids.length;
	var numOfAnswers = GetAnswerCount(inQids[0]);
	var i;
	// go over all answers and for each check if it exists in the source questions
	for (i=1;i&amp;lt;= numOfAnswers;i++) {
		var contained = false;
		var j;
		// go over all source questions and check if the answer is checked
		for (j=0; j&amp;lt;numOfQues;j++) {
			contained = Contains(inQids[j],i);
			if (contained) {
				break;
			}
		}
		// in case it was contained check if need to add to target question
		if (contained) {
			var addAnswer = true;
			if ((inExcludeHiddenTargetAnswers) &amp;amp;&amp;amp; !IsAnswerVisible(inQTarget,i)) {
				addAnswer = false;
			}
			if (addAnswer) {
				dblSetSpecificAnswer(inQTarget, i,true);
			}
		}
	}
}

//Calculates the sum of the Answered &amp;amp; visible topics 
function dblSumOfTopics (inQuesIdx)
{
      var retVal = 0;
      var i;
      var numOfTopics = GetTopicCount(inQuesIdx);
      for (i=0;i&amp;lt;numOfTopics;i++) {
            var currTopic = i+1;
            if (IsTopicVisible (inQuesIdx, currTopic)) {
                  var currValue = AnswerChoice(inQuesIdx, currTopic);
                  if (currValue != -99999) {
	                  retVal += currValue;
                  }
            }
      }
      return retVal;
}

//Using this function will format the number entered to a Currency Format
function dblFormatNumberToCurrency(num) {
	var retVal = "";
	var num = num.toString().replace(/\$|\,/g,'');
	if(isNaN(num))
	num = "0";
	var sign = (num == (num = Math.abs(num)));
	num = Math.floor(num*100+0.50000000001);
	var cents = num%100;
	num = Math.floor(num/100).toString();
	var addZero = "";
	if(cents&amp;lt;10) {
		addZero = "0";
	}
	for (var i = 0; i &amp;lt; Math.floor((num.length-(1+i))/3); i++) {
		num = num.substring(0,num.length-(4*i+3))+','+num.substring(num.length-(4*i+3));
	}
	retVal = (((sign)?'':'-') + '$' + num + '.' +addZero+ cents)
	return retVal;
}

//Will convert a number to Float
function dblToFloat(inNumber)
{
	var retVal = parseFloat(inNumber.toString().replace(",", "."));
	return retVal;
}

//Will set the answers visible in a question 
function dblSetAnswerVisible(inQTarget,inValue,inReset,inAnswers)
{
	var retVal = false;
	var numOfAnswers = inAnswers.length;
	var i;
	if (inReset) {
		SetAnswerVisible(inQTarget,true);
	}
	for (i=0;i&amp;lt; numOfAnswers;i++) {
		SetAnswerVisible(inQTarget, inAnswers[i], inValue);
	}
	return retVal;
}

//Will search for the text entered and return true/false if found
function dblContainsByText(inQIdx, inText)
{
	var retVal = false;
	var i=0;
	for (i=0; i&amp;lt;GetAnswerCount(inQIdx); i++){
		var idx = i+1;
		var text = AnswerText(inQIdx,idx);
		if (text == inText) {
			if (Contains(inQIdx,idx)) {
				retVal = true;
				break;
			}
		}
	}
	return retVal;
}

//Filters the answers of a question based on another question 
function dblFilterAnswersByAnswersByText (inTargetQ, inShow,inSourceQ)
{
	SetAnswerVisible(inTargetQ,!inShow);	
	var i =0;
	for (i=0; i&amp;lt;GetAnswerCount(inTargetQ);i++){
		var idx = i+1;
		var text = AnswerText(inTargetQ,idx);
		if (dblContainsByText(inSourceQ,text)) {
			SetAnswerVisible(inTargetQ,idx,inShow);	
		}
	}
	return true;
}

//Filters the topics of a question based on another question 
function dblFilterTopicsByAnswersByText (inTargetQ, inShow, inSourceQ)
{
	SetTopicVisible(inTargetQ,!inShow);	
	var i=0;
	for (i=0; i&amp;lt;GetTopicCount(inTargetQ); i++){
		var idx = i+1;
		var text = GetTopicOriginalText(inTargetQ,idx);
		if (dblContainsByText(inSourceQ,text)) {
			SetTopicVisible(inTargetQ,idx,inShow);	
		}
	}
	return true;
}

//function will retrieve a row from a subject store
function dblGetSubjectStoreRow(inStoreName,inIDColumnName,inID)
{
	var retVal = null;
	try {
		var table = GetTableFromStore(inStoreName,"","@@"+inIDColumnName+"='"+inID+"'","");
		if (table != null &amp;amp;&amp;amp; table.RowCount &amp;gt;0) {
			var row = table[0];
			retVal = row;
		}
	}
	catch(err)
	{
		retVal = null;	
	}
	return retVal;
}

/*
This function gets two parameters:
1st parameter is the RegEx expression.
2nd parameter is the text to check.
This function returns ‘true’ if the text is valid according to the RegEx expression, or ‘false’ if the text is not valid according to the RegEx expression.
*/
function dblIsRegEx (pattern,value) {
	var pattern = new RegExp(pattern);
	return pattern.test(value);
}


function dblDateToSQLDate(inDate)
{
	var retVal = "";
	retVal = inDate.Year+"-"+inDate.Month+"-"+inDate.Day;	
	return retVal;
}

//Will order an array 
function dblOrderArray(inOrderArray, inDataArray)
{
	var retVal = CreateRandomArray(inOrderArray.length);
	var i = 0;
	for (i = 0; i &amp;lt; inOrderArray.length; i++) {
		retVal[i] = inDataArray[inOrderArray[i]-1];
	}
	return retVal;
} 

//Will return a unique respondent ID based on the SID and Device Index
function dblRespondentID ()
{
	var retVal = "".concat("D", SID, "-", DeviceIndex);
	return retVal;
}


	/*_@_USERCODE_END_@*/

	//_@_AddHandler_@{ Begin Add Handlers
	//_@_AddHandler_@} End Add Handlers

	//_@_HandlerZone_@{
		
		function QuestionStart_5()
		{
SetTextFormat(CurrQues, SelectedAnswerText(NumRated), SelectedAnswerText(TopBottom));

var rated = StringToIntArray(Answer(RatedOrder));

SetAnswerVisible(CurrQues, false);

for (var i=0; i &amp;lt; Answer(NumRated); i++)
{
	SetAnswerVisible(CurrQues, rated[i], true);
}

RandomizeAnswers(CurrQues, rated);

		}
		
		
		function QuestionExpression_3()
		{
var itemsCount = GetTopicCount(Rates);

//Get the rates into an array
var rates = new Array();
for (var i=1; i&amp;lt;= itemsCount; i++)
{
	rates.push(AnswerChoice(Rates, i));
}

//Order the rates (descending or ascending based on what was selected)
for (var i=0; i&amp;lt;itemsCount; i++)
{
	for(var j=0; j &amp;lt;itemsCount; j++)
	{
		if ((Answer(TopBottom) == 1 &amp;amp;&amp;amp; rates[j] &amp;lt; rates[j+1]) || 
			(Answer(TopBottom) == 2 &amp;amp;&amp;amp; rates[j] &amp;gt; rates[j+1]))
		{
			var temp = rates[j];
			rates[j] = rates[j+1];
			rates[j+1] = temp;
		}
	}
}	
var ItemsRandomized = CreateRandomArray(itemsCount);
var ratedItems = new Array(); 

//Enter the items to the final array per the rates order
for (var i=0; i&amp;lt;itemsCount; i++)
{
	for (var j=0; j &amp;lt; itemsCount; j++)
	{
		if (AnswerChoice(Rates, ItemsRandomized[j]) == rates[i])
			if (!InArray(ItemsRandomized[j], ratedItems))
			{
				ratedItems.push(ItemsRandomized[j]);
			}
	}
}
//Store the rated items in the Dummy question	
SetAnswer(RatedOrder, IntArrayToString(ratedItems)); 

		}
		
	//_@_HandlerZone_@}


    function JSDBLInitAllScript()
    {
    }var eJumpQuestionResult = {ejqrNext:0, ejqrSubmit:1,ejqrCancel:2,ejqrFilter:3,ejqrNone:4,ejqrIndex:5,ejqrChapter:6};
var ePlatform = {None:0, Web:1, PC:2, PDA:4, MobileWeb:8, SmartPhone:16, Android:32, AllWindows:31, AllJSEnabled: 34, All:63};
var eAttachmentSource = {easDefault:0};
var eAskButtons = {OKCancel:0, YesNoCancel:1, YesNo:2};
var eAskResult = {None:0, OK:1, Yes:2, No:3, Cancel:4};
var eQuotaFilledResult = {Default:0,Filter:1,Cancel:2,Nothing:3};
var eExtraLabel = { MatrixLower:0, MatrixMiddle:1, MatrixUpper:2, MatrixIrrelevant:3, ScaleLower:4, ScaleMiddle:5, ScaleUpper:6, CountersTotal:7,CountersRemaining:8, NumericGridTotal:9, NumericGridRemaining:10 }; 
var eFontSize = {XSmall:-4,Smaller:-2,Small:-1,Regular:0,Large:2,Largest:8,XLarge:14};

var eULQuestionType = {eqtYesNo: 0, 
eqtAmerican: 1, 
eqtNumeric: 2, 
eqtFreeText: 3, 
eqtMultiSelect: 4, 
eqtRating: 5, 
eqtScale: 6, 
eqtMatrix: 7, 
eqtMultiTopics: 8, 
eqtNoQuestion: 9, 
eqtDateTime: 10, 
eqtCounters: 11, 
eqtStopper: 12, 
eqtMassiveMultiSelect: 13, 
eqtExpression: 14, 
eqtMultiText: 15, 
eqtMultiNumeric: 16, 
eqtMultimedia: 17, 
eqtMultiTopicsSelect: 18, 
eqtGPSQuestion: 19, 
eqtListSource: 20, 
eqtPositionTopicsOnImage: 21, 
eqtNumOfTypes: 22};

var eRenderGridAlignment = {Top: 0, 
Center: 1, 
Bottom: 2};

var eInterviewExtraField = {AttemptsPerCompletedInterview: 0, 
AdherenceToMethodology: 1, 
CustomData1: 2, 
CustomData2: 3, 
CustomData3: 4, 
CustomData4: 5, 
CustomData5: 6, 
CustomData6: 7, 
CustomDataInt1: 8, 
CustomDataInt2: 9, 
CustomDataInt3: 10, 
CustomDataInt4: 11, 
CustomDataInt5: 12, 
CustomDataInt6: 13, 
InterviewStopComment: 14};

var eSurveyStatus = {New: 0, 
EditNotCompleted: 1, 
EditCompleted: 2, 
EditTextReturn: 3, 
EditReturned: 4, 
EditObserverInProgress: 5};

var ePageType = {Cancel: 0, 
Error: 1, 
Filter: 2, 
Finish: 3, 
NonActive: 4, 
AlreadyConducted: 5};
&lt;/Source&gt;
&lt;/UserLogicContents&gt;</ULSource><RestrictSPSS>False</RestrictSPSS><ExtraText1>1.32.459.0</ExtraText1><ExtraBool1>False</ExtraBool1><ExtraBool2>False</ExtraBool2><ExtraInt1>-1</ExtraInt1><ExtraInt2>0</ExtraInt2><STGVersion>1.32.0.0</STGVersion><ULAssemblyData>AAEAAAD/////AQAAAAAAAAAMAgAAAEdVc2VyTG9naWNDcmVhdG9yLCBWZXJzaW9uPTEuMC4xLjMsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAAKVN1cnZleVRvR28uVXNlckxvZ2ljLkNyZWF0b3IuQXNzZW1ibHlEYXRhEAAAAAZtVGFibGUNbVN1cnZleUNvbnN0cw9tU3VydmV5U25pcHBldHMNbUNoYXB0ZXJUYWJsZQ1tTGFzdEJ1Y2tldElEEW1MYXN0TWV0YUJ1Y2tldElED21TdXJ2ZXlJbml0Q29kZRBtU3VydmV5QmxvY2tDb2RlEW1MYXN0TGlzdFNvdXJjZUlEE21MYXN0Q3VzdG9tQWN0aW9uSUQHbUZsYXZvcg5tVXNlR2xvYmFsQ29kZQttVXNlT3JnQ29kZQ5tU3RyaWN0SlNDaGVjaxdtTGFzdEF0dGFjaG1lbnRTb3VyY2VJRA5tU3VydmV5TmF2Q29kZQMDAwMAAAIBAAAEAAAAAAEeU3lzdGVtLkNvbGxlY3Rpb25zLkhhc2h0YWJsZVtdHFN5c3RlbS5Db2xsZWN0aW9ucy5IYXNodGFibGUeU3lzdGVtLkNvbGxlY3Rpb25zLkhhc2h0YWJsZVtdHlN5c3RlbS5Db2xsZWN0aW9ucy5IYXNodGFibGVbXQgICAgkU3VydmV5VG9Hby5Vc2VyTG9naWMuQ3JlYXRvci5lRmxhdm9yAgAAAAEBAQgCAAAACQMAAAAJBAAAAAkFAAAACQYAAAABAAAAAgAAAAoGBwAAAAABAAAAAQAAAAX4////JFN1cnZleVRvR28uVXNlckxvZ2ljLkNyZWF0b3IuZUZsYXZvcgEAAAAHdmFsdWVfXwAIAgAAAAIAAAABAQEBAAAACQcAAAAHAwAAAAABAAAABgAAAAMcU3lzdGVtLkNvbGxlY3Rpb25zLkhhc2h0YWJsZQkJAAAACQoAAAAJCwAAAAkMAAAACQ0AAAAJDgAAAAQEAAAAHFN5c3RlbS5Db2xsZWN0aW9ucy5IYXNodGFibGUHAAAACkxvYWRGYWN0b3IHVmVyc2lvbghDb21wYXJlchBIYXNoQ29kZVByb3ZpZGVyCEhhc2hTaXplBEtleXMGVmFsdWVzAAADAwAFBQsIHFN5c3RlbS5Db2xsZWN0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IGkrKykNCnsNCglmb3IodmFyIGo9MDsgaiA8aXRlbXNDb3VudDsgaisrKQ0KCXsNCgkJaWYgKChBbnN3ZXIoVG9wQm90dG9tKSA9PSAxICYmIHJhdGVzW2pdIDwgcmF0ZXNbaisxXSkgfHwgDQoJCQkoQW5zd2VyKFRvcEJvdHRvbSkgPT0gMiAmJiByYXRlc1tqXSA+IHJhdGVzW2orMV0pKQ0KCQl7DQoJCQl2YXIgdGVtcCA9IHJhdGVzW2pdOw0KCQkJcmF0ZXNbal0gPSByYXRlc1tqKzFdOw0KCQkJcmF0ZXNbaisxXSA9IHRlbXA7DQoJCX0NCgl9DQp9CQ0KdmFyIEl0ZW1zUmFuZG9taXplZCA9IENyZWF0ZVJhbmRvbUFycmF5KGl0ZW1zQ291bnQpOw0KdmFyIHJhdGVkSXRlbXMgPSBuZXcgQXJyYXkoKTsgDQoNCi8vRW50ZXIgdGhlIGl0ZW1zIHRvIHRoZSBmaW5hbCBhcnJheSBwZXIgdGhlIHJhdGVzIG9yZGVyDQpmb3IgKHZhciBpPTA7IGk8aXRlbXNDb3VudDsgaSsrKQ0Kew0KCWZvciAodmFyIGo9MDsgaiA8IGl0ZW1zQ291bnQ7IGorKykNCgl7DQoJCWlmIChBbnN3ZXJDaG9pY2UoUmF0ZXMsIEl0ZW1zUmFuZG9taXplZFtqXSkgPT0gcmF0ZXNbaV0pDQoJCQlpZiAoIUluQXJyYXkoSXRlbXNSYW5kb21pemVkW2pdLCByYXRlZEl0ZW1zKSkNCgkJCXsNCgkJCQlyYXRlZEl0ZW1zLnB1c2goSXRlbXNSYW5kb21pemVkW2pdKTsNCgkJCX0NCgl9DQp9DQovL1N0b3JlIHRoZSByYXRlZCBpdGVtcyBpbiB0aGUgRHVtbXkgcXVlc3Rpb24JDQpTZXRBbnN3ZXIoUmF0ZWRPcmRlciwgSW50QXJyYXlUb1N0cmluZyhyYXRlZEl0ZW1zKSk7IA0KBUUAAAArU3VydmV5VG9Hby5Vc2VyTG9naWMuQ3JlYXRvci5RdWVzdGlvbkFjdGlvbgUAAAAZUXVlc3Rpb25JbmZvK21RdWVzdGlvbklkeBZRdWVzdGlvbkluZm8rbUhhc0Vycm9yIlF1ZXN0aW9uSW5mbyttUXVlc3Rpb25EZXBlbmRlbmNpZXMhUXVlc3Rpb25JbmZvK21DaGFwdGVyRGVwZW5kZW5jaWVzBkFjdGlvbgAAAwMBCAEcU3lzdGVtLkNvbGxlY3Rpb25zLkFycmF5TGlzdBxTeXN0ZW0uQ29sbGVjdGlvbnMuQXJyYXlMaXN0AgAAAAUAAAAACUkAAAAJSgAAAAZLAAAAuAJTZXRUZXh0Rm9ybWF0KEN1cnJRdWVzLCBTZWxlY3RlZEFuc3dlclRleHQoTnVtUmF0ZWQpLCBTZWxlY3RlZEFuc3dlclRleHQoVG9wQm90dG9tKSk7DQoNCnZhciByYXRlZCA9IFN0cmluZ1RvSW50QXJyYXkoQW5zd2VyKFJhdGVkT3JkZXIpKTsNCg0KU2V0QW5zd2VyVmlzaWJsZShDdXJyUXVlcywgZmFsc2UpOw0KDQpmb3IgKHZhciBpPTA7IGkgPCBBbnN3ZXIoTnVtUmF0ZWQpOyBpKyspDQp7DQoJU2V0QW5zd2VyVmlzaWJsZShDdXJyUXVlcywgcmF0ZWRbaV0sIHRydWUpOw0KfQ0KDQpSYW5kb21pemVBbnN3ZXJzKEN1cnJRdWVzLCByYXRlZCk7DQoERgAAABxTeXN0ZW0uQ29sbGVjdGlvbnMuQXJyYXlMaXN0AwAAAAZfaXRlbXMFX3NpemUIX3ZlcnNpb24FAAAICAlMAAAAAwAAAAEAAAABRwAAAEYAAAAJTQAAAAAAAAAAAAAAAUkAAABGAAAACU4AAAADAAAAAQAAAAFKAAAARgAAAAlPAAAAAAAAAAAAAAAQTAAAAAQAAAAICAIAAAAICAEAAAAICAQAAAAKEE0AAAAAAAAAEE4AAAAEAAAACAgAAAAACAgBAAAACAgEAAAAChBPAAAAAAAAAAs=</ULAssemblyData><NumOfQuestionsInPage>-1</NumOfQuestionsInPage><Version>2</Version><NextChapterID>1</NextChapterID><DefaultChapterDesc /><Flags>272629772</Flags><NextAnswerID>1</NextAnswerID><ClientData /><DefaultFont /><Comment /><ExternalSystem>-1</ExternalSystem><NextScoreID>1</NextScoreID><LocationStoreID>2032</LocationStoreID><NextScaleID>2</NextScaleID><Mode>0</Mode><DefTextPanelHeight>-1</DefTextPanelHeight><DefAnswerPanelHeight>-1</DefAnswerPanelHeight><SurveyFlags2>65792</SurveyFlags2><NumOfQuestionsPDA>-1</NumOfQuestionsPDA><NumOfQuestionsPC>-1</NumOfQuestionsPC><NumOfQuestionsSmartPhone>-1</NumOfQuestionsSmartPhone><NextLangID>0</NextLangID><QuestionCounterResetText /><QuestionNumericResetText /><QuestionStopperResetText /><QuestionFormSurveyCanceled /><QuestionFormSurveyFiltered /><QuestionFormCanotExit /><QuestionFormSureToCancelNoSave /><QuestionFormSureToCancel /><QuestionFormSaved /><PromptOnSubmitText /><PromptOnCancelText /><PromptOnFilterText /><StartWithLangID>-1</StartWithLangID><ReportFlags>0</ReportFlags><SurveyFlags3>54820992</SurveyFlags3><ClientTypes>54</ClientTypes><MDDScript /><MDDScriptOps /><MDDScriptRouting /><FlagIfDuredLessThan>0</FlagIfDuredLessThan><FlagIfDuredMoreThan>0</FlagIfDuredMoreThan><PropertiesAsString /><SurveyFlags4>8257616</SurveyFlags4><InternalProps>{"eColumns_FlagClockChanged":"true","eColumns_FlagSingleChoice":"true","eColumns_FlagQuestionTakingTooLong":"true","eColumns_FlagGPSTimeDifferenceDate":"true","eColumns_FlagGPSTimeDifferenceStale":"true"}</InternalProps><SurveyLogicVersion>1</SurveyLogicVersion></Survey><SQs><ElemStr>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</ElemStr></SQs><SANs><ElemStr>H4sIAAAAAAAEAO29B2AcSZYlJi9tynt/SvVK1+B0oQiAYBMk2JBAEOzBiM3mkuwdaUcjKasqgcplVmVdZhZAzO2dvPfee++999577733ujudTif33/8/XGZkAWz2zkrayZ4hgKrIHz9+fB8/Iv7Hv/cffPx7vFuU6WVeN0W1/Oyj3fHOR2m+nFazYnnx2Ufr9nz74KPf4+jx6+MXDf979Ph42Vzl9dnTo53Hd+3vj39inTctgaDf9x7f9f56fDZ7h6b48fhN/q49elOtHt/l3x6/nld1S42y5e+/s7NH/999fNd85kDSm7seTAD6yawuskmZv8gW+dHx708gn1RtWy1+f2oYfPf4hIcCAPrb49fr+jK/Rq8Pz3f28uz+9mTy6XR7f29nf3uydz7ZvnfwMM/OP90/nzy4R/iY5o+f5mXe5jOMxvz6+DvrxepseV4dbVMP9o/Hp+/aOsMYd9O7+teTqip3j55lZZM/vut9It+eLdtdAHZ/KOZfLU/m+fStdNv9SNuYP+0g7fdA4dtvvngOLJ6V2UUDKPLL4y/beV6/XuVTIhjT6vXvvwf69T6nXhaLfNkCyHfz4mLeAor+9vj1tKpzfCC/PD5rXk+zMjcjNX8+fpWvaGKBEOC8yi+L/Mr9he/OlrP8HRPS//vxy7w+DxueVGVVew3l78dPi2ZVZtfu2+ADQux42haX+dGbes2I6Z+Pv6yLi2KZlYwoTTRe7X72+GWdNzlxwsxv1fvw8dkiu8iB7cu6WjVHu58+ePBg7x6JROcLaXg2w6C+ev6TWbnOvV+JAUBR7y/zzdN86n2Dvx6/ypazavF5Xa1XQhPvbyWYnXr/T6IXzSrkvvnqq7On6B645XVb5M1x87qtiZP406ym2beyzgMPP1KlwHD3nGLQv4k1oDhC7bF7e+2x62sPkfNBBbL3oQpkb0CB7P1IgdxKgez9SIH8SIH8MBTIkPtx/wb340lNw0uPoxrk/gYXxIcb0SBfNfmrrM1/5IDcpD8+3Xu4u3//041q5NMf+SFiIn+kRX6WtciQGxLRIqEbwlrkyaAWGfJDbqlFfuSFfCNa5EfOyI+0yA9Di+zdXovs9bXIyaAWufdhWuTegBa59yMt8j5a5N6PtMiPtMgPQYvcu70WudfXIk8Htcj+h2mR/QEtsv8jLfI+WmT//31a5Eda5P+HWmT/9lpkv69FTge1yP0P0yL3B7TI/R9pkffRIvd/pEV+pEV+CFrk/u21yP2+Fnk2qEU+/TAt8umAFvn0R1rkfbTIp6JFfqRFfqRFfla1yKe31yKf9rXI54Na5MGHaZEHA1rkwY+0yPtokQc/0iI/0iI/BC3y4PZa5EFfi3x7UIscfJgWORjQIgc/0iLvo0UOfqRFfqRFfghaxDbqaJHdvhbZ6WuR46gW2cX/B7TItg84okZ2fv/dAQViZetHCuRmBcJk/IYUiBHT/8/pD7z6IwXys6xAdm+vQHb7CuTJoALZ+9oKZG9AgezdToH8SIGIAtn7kQL5kQL5ISiQvdsrkL2+AjkZVCD3vrYCuTegQO79SIG8jwK59yMF8iMF8kNQIPdur0Du9RXI00EFsv+1Fcj+gALZ/5ECeR8Fsv8jBfIjBfJDUCD7t1cg+30FcjqoQO5/bQVyf0CB3P+RAnkfBXL/RwrkRwrkvRXI+yuQ+7dXIPf7CuTZoAL59GsrkE8HFMinP1Ig76NAPv2RAvmRAvkhKJBPb69APu0rkM8HFciDr61AHgwokAc/UiDvo0Ae/EiB/H9Mgfx/U4E8uL0CedBXIN8eVCAHX1uBHAwokIMfKZD3USAHP1IgP1IgPysKBP82R/8PIZdXqO1MAAA=</ElemStr></SANs><STos><ElemStr>H4sIAAAAAAAEAO29B2AcSZYlJi9tynt/SvVK1+B0oQiAYBMk2JBAEOzBiM3mkuwdaUcjKasqgcplVmVdZhZAzO2dvPfee++999577733ujudTif33/8/XGZkAWz2zkrayZ4hgKrIHz9+fB8/Iv7Hv/cffPx7vFuU6WVeN0W1/Oyj3fHOR2m+nFazYnnx2Ufr9nz74KPf4+jx6zdVw/8ePT5eNld5ffb0aOfxXfv7459Y501LIOj3e4/ven89Ppu9O9refXwXPx+/yd+1R0/qbDlLjx/f5b8ev55XdUst29Xvv7Nzj/5Pjc1nDi69vecBBrCfzOoim5T5i2yRH735/V9lbd78/vRy8PnjEx7LEX2uvz1+va4v82uCnj0839nLs/vbk8mn0+39vZ397cne+WT73sHDPDv/dP988oAGY5s/fpqXeZvPMHLz6+PvrBers+V5xWO0fzw+fdfWGca3m97Vv55UVbl79Cwrm/zxXe8T+fZs2e4CsPtDMf9qeTLPp2+l2+5H2sb8aQdpvwcK337zxXNg8azMLpqje/fu39/fv0fElL8ff9nO8/r1Kp8S3ZSU937/3d//9eO7vW+ou8UiX7aA9t28uJi36FJ/e/x6WtU5sJRfHp81r6dZmZshmz8fv8pXNLvADHBe5ZdFfuX+wndny1n+Dozk//n4ZV6fh+1OqrKqmfL+34+fFs2qzK7dt8EHhNfxtC0uaaD1mvHSPx9/WRcXxTIrGU+acHqz+9Hjl3Xe5MQQM/MJ4Pc+fHy2yC5yIPuyrlYNiNL5RFqczTCYr57/ZFauc+9XYgC84/1lvnmaT71v8NfjVyRO1eLzulqvhBbe30oomeodQyed+acFTSYEv/nqq7On6B645XVb5M1x87qtiZP406ymSbfCziMOP6I5h24IFcTueyiIvb6CeDKoIPY+REHsDSiIvR8piPdREHv/L1AQ+z9SEP+fVhB776Eg7vUVxMmggrj3IQri3oCCuPcjBfE+CuLe/wsUxP0fKYj/TyuIe++hIPb7CuLpoILY/xAFsT+gIPZ/pCDeR0Hs/79AQXz6IwXx/2kFsf8eCuJ+X0GcDiqI+x+iIO4PKIj7P1IQ76Mg7v+/QEE8+JGC+P+0grj/Hgri076CeDaoID79EAXx6YCC+PRHCuJ9FMSn/y9QEAf/H1YQP1IQTyFyt1YQD/oK4vNBBfHgQxTEgwEF8eBHCuJ9FMSD/xcoiIc/UhD/n1YQD95DQRz0FcS3BxXEwYcoiIMBBXHwIwXxPgri4P8FCmLXMvQPW0P8SEN8TQ2Bf5uj/wfKUKQ1PyEAAA==</ElemStr></STos><SCs><ElemStr>H4sIAAAAAAAEAO29B2AcSZYlJi9tynt/SvVK1+B0oQiAYBMk2JBAEOzBiM3mkuwdaUcjKasqgcplVmVdZhZAzO2dvPfee++999577733ujudTif33/8/XGZkAWz2zkrayZ4hgKrIHz9+fB8/Iv7Hv/cffPx7vFuU6WVeN0W1/Oyj3fHOR2m+nFazYnnx2Ufr9nz74KPf4+jx65MG/xw9Pnt6tPP4Lv37+EW2yI++90VWLNOTebZq8/r7j+/yh49fr+vL/JoaZQ/Pd/by7P72ZPLpdHt/b2d/e7J3Ptm+d/Awz84/3T+fPLj3+K5t/vhpXuZtPkMX5tfHL7M6X7b07fbu47v2j8fPq4ti+qzMLhq09v56/CpfzvJa/rj/+K7/J3XQTOti1dJgj97Miyal/7XzPK2rqk2nMoy0Ok+zsuTPf9E6b9C4udusJ9vagN5a8rcNIz76jZPfOPl9qnU6zZbpkuDU+aK6zKkFAddXRmm2nDFUB9FCW6ybNp3k6RqIBq+NfdALmpTz67Rom3RVV6u8bou8SbeWRPJROnMDG6Vt/q5N83Y6vgM6uhE/foMv7h49Pn3X1tmTqip3j55lZZM/vut94r7dO3pTr/0v9/TLs2W7y/Ph/rJf7GE+3B+Pz2bvuCl+MgLffvPFcyBxUi0WNJn49bt5cTFv8aL+9vj1tKpzcBO+fpWvqro9ydr8oqqve0zX+Vqbvynakt/+Int3Rg0zJgEwCT54/Lxo2tfVup7mZzP+OviAMX6ZLfPy24IZWnQ/e/zqzTND2lc00dXi87par7it//fjs+Z42haXudLV/hng2LypTt9hBD1k3TePX1oOOG5etzVJKzp3YrAXSgXNw12I710I8v8DdDBFFfcDAAA=</ElemStr></SCs><SBNs><ElemStr>H4sIAAAAAAAEAO29B2AcSZYlJi9tynt/SvVK1+B0oQiAYBMk2JBAEOzBiM3mkuwdaUcjKasqgcplVmVdZhZAzO2dvPfee++999577733ujudTif33/8/XGZkAWz2zkrayZ4hgKrIHz9+fB8/Iv7Hv/cffPx7vFuU6WVeN0W1/Oyj3fHOR2m+nFazYnnx2Ufr9nz74KPf4+jx6ycvmvTu0f8DVNIIpTEAAAA=</ElemStr></SBNs><SATs><ElemStr>H4sIAAAAAAAEAO29B2AcSZYlJi9tynt/SvVK1+B0oQiAYBMk2JBAEOzBiM3mkuwdaUcjKasqgcplVmVdZhZAzO2dvPfee++999577733ujudTif33/8/XGZkAWz2zkrayZ4hgKrIHz9+fB8/Iv7Hv/cffPx7vFuU6WVeN0W1/Oyj3fHOR2m+nFazYnnx2Ufr9nz74KPf4+jx6+M3TXr36P8B2S/MCTEAAAA=</ElemStr></SATs><SSCOs><ElemStr>H4sIAAAAAAAEAO29B2AcSZYlJi9tynt/SvVK1+B0oQiAYBMk2JBAEOzBiM3mkuwdaUcjKasqgcplVmVdZhZAzO2dvPfee++999577733ujudTif33/8/XGZkAWz2zkrayZ4hgKrIHz9+fB8/Iv7Hv/cffPx7vFuU6WVeN0W1/Oyj3fHOR2m+nFazYnnx2Ufr9nz74KPf4+jx69cnXzbp3aP/B1t6G+cyAAAA</ElemStr></SSCOs><SPs><ElemStr>H4sIAAAAAAAEAO29B2AcSZYlJi9tynt/SvVK1+B0oQiAYBMk2JBAEOzBiM3mkuwdaUcjKasqgcplVmVdZhZAzO2dvPfee++999577733ujudTif33/8/XGZkAWz2zkrayZ4hgKrIHz9+fB8/Iv7Hv/cffPx7vFuU6WVeN0W1/Oyj3fHOR2m+nFazYnnx2Ufr9nz74KPf4+jx65dNevfo/wF1B76WMAAAAA==</ElemStr></SPs><RGs><ElemStr>H4sIAAAAAAAEAO29B2AcSZYlJi9tynt/SvVK1+B0oQiAYBMk2JBAEOzBiM3mkuwdaUcjKasqgcplVmVdZhZAzO2dvPfee++999577733ujudTif33/8/XGZkAWz2zkrayZ4hgKrIHz9+fB8/Iv7Hv/cffPx7vFuU6WVeN0W1/Oyj3fHOR2m+nFazYnnx2Ufr9nz74KPf4+jxq8+b9O7R/wNCnyKPMAAAAA==</ElemStr></RGs><CSs><ElemStr>H4sIAAAAAAAEAO29B2AcSZYlJi9tynt/SvVK1+B0oQiAYBMk2JBAEOzBiM3mkuwdaUcjKasqgcplVmVdZhZAzO2dvPfee++999577733ujudTif33/8/XGZkAWz2zkrayZ4hgKrIHz9+fB8/Iv7Hv/cffPx7vFuU6WVeN0W1/Oyj3fHOR2m+nFazYnnx2Ufr9nz74KPf4+jxyesmvXv0/wA+f8jSMAAAAA==</ElemStr></CSs><SSCs><ElemStr>H4sIAAAAAAAEAO29B2AcSZYlJi9tynt/SvVK1+B0oQiAYBMk2JBAEOzBiM3mkuwdaUcjKasqgcplVmVdZhZAzO2dvPfee++999577733ujudTif33/8/XGZkAWz2zkrayZ4hgKrIHz9+fB8/Iv7Hv/cffPx7vFuU6WVeN0W1/Oyj3fHOR2m+nFazYnnx2Ufr9nz74KPf4+jx69cnDf9L/6zry/z67OlR9vB8Zy/P7m9PJp9Ot/f3dva3J3vnk+17Bw/z7PzT/fPJg3uP79rmj19PszKnX3bpQ/318YtskR89qbPlrEnbKn2Vtfnju/zh46d5M62LVUt4pXePHj8rs4vmaOfxXfmFvi7zNp/hE/Pr47PmeNoWl/nRm3pNcOyfj1/k79rjZXOV19TpAfXg//34abHIlxh/89VXZ0/R2V0e6V0e9f8Dmu6ZTSUBAAA=</ElemStr></SSCs><QAs><ElemStr>H4sIAAAAAAAEAO29B2AcSZYlJi9tynt/SvVK1+B0oQiAYBMk2JBAEOzBiM3mkuwdaUcjKasqgcplVmVdZhZAzO2dvPfee++999577733ujudTif33/8/XGZkAWz2zkrayZ4hgKrIHz9+fB8/Iv7Hv/cffPx7vFuU6WVeN0W1/Oyj3fHOR2m+nFazYnnx2Ufr9nz74KPf4+jxTxw36d2j/wdMGPaGMAAAAA==</ElemStr></QAs><SLs><ElemStr>H4sIAAAAAAAEAO29B2AcSZYlJi9tynt/SvVK1+B0oQiAYBMk2JBAEOzBiM3mkuwdaUcjKasqgcplVmVdZhZAzO2dvPfee++999577733ujudTif33/8/XGZkAWz2zkrayZ4hgKrIHz9+fB8/Iv7Hv/cffPx7vFuU6WVeN0W1/Oyj3fHOR2m+nFazYnnx2Ufr9nz74KPf4+jx6+dNevfo/wH2fa4zMAAAAA==</ElemStr></SLs><STes><ElemStr>H4sIAAAAAAAEAO29B2AcSZYlJi9tynt/SvVK1+B0oQiAYBMk2JBAEOzBiM3mkuwdaUcjKasqgcplVmVdZhZAzO2dvPfee++999577733ujudTif33/8/XGZkAWz2zkrayZ4hgKrIHz9+fB8/Iv7Hv/cffPx7vFuU6WVeN0W1/Oyj3fHOR2m+nFazYnnx2Ufr9nz74KPf4+jx6zd5w//SP+v6Mr8+e3qUPTzf2cuz+9uTyafT7f29nf3tyd75ZPvewcM8O/90/3zy4N7ju7b54+fZ8oJ+bu8+vqu/Pj5r8wX9pE/0t8cvszpftvoXmgYf8Atvrlf50T15hX8nlCb8y95D9Ce/P36Tv2vTu0ePn5XZRXO08/iu/PL4rDmetsVlfvSmXucExfxJr/Lw/l8+xns7/+8doyL8wWP8f/M8flNj/H/zPH76DY3x/83z+E2N8ZuYR/zbHP0/PtCnGo4FAAA=</ElemStr></STes><SMBs><ElemStr>H4sIAAAAAAAEAO29B2AcSZYlJi9tynt/SvVK1+B0oQiAYBMk2JBAEOzBiM3mkuwdaUcjKasqgcplVmVdZhZAzO2dvPfee++999577733ujudTif33/8/XGZkAWz2zkrayZ4hgKrIHz9+fB8/Iv7Hv/cffPx7vFuU6WVeN0W1/Oyj3fHOR2m+nFazYnnx2Ufr9nz74KPf4+jx6y+eNPwv/bOuL/Prs6dH2cPznb08u789mXw63d7f29nfnuydT7bvHTzMs/NP988nD+49vmubP36ynr7NW/pt5/Fd+7t++iJb5Ondo8dP8/NsXbY/sa7aDO2Cvx+/uV7l+JR/Pv6Jdd60hDVB2d59fNf78/HLrM6XrX5h/3j81fJknlN3s+Nlc0VDfkJ4oddnRdnmdT4TXJrXbU2jxxd3ZcTfzLB348M+epFfpa/ned6a7/nT25Di3vuQYucboMRd5oP/B3qD37Q3AgAA</ElemStr></SMBs></Root>