// Copyright © 2002 Microsoft Corporation.  All rights reserved. 

var dicts_base_path = "viewer/search";
var dicts_file = "viewer/search/dicts.xml";	
var dicts_doc = null;

var dicts = new Array();
var dict_ranges = new Array();
var pattern_ranges = new Array();

var dicts_rfc_1766_lang = "";

function get_dictionary_scripts(){
	var r = new Array();
	if ( dicts_doc == null ) dicts_doc = xml_load( dicts_file );
	var n = dicts_doc.documentElement.selectSingleNode("./dict_location[@lang='" + dicts_rfc_1766_lang + "']/item");
	if ( !n ) return r;
	while( n ){
		var a = n.getAttribute("scid");
		if (a!="") {	
			var i = parseInt(a);
			if ((i>-1)&&(i<42))	r[r.length] = i;
		}
		n = n.nextSibling;
	}
	return r;
}

function hasDictionary( in_lang ){
	if ( dicts_doc == null ) return false;
	var n = dicts_doc.documentElement.selectSingleNode("./dict_location[@lang='" + in_lang + "']/item");
	if ( !n ) return false;
	return true;	
}

function getHlof( in_lang ){
	
	var iRet = 2;
	if ( hasDictionary( in_lang ) ) iRet = 0;
	var n = dicts_doc.documentElement.selectSingleNode("//map[@lang='" + in_lang + "']");
	if ( n ) {
		var sAtt = n.getAttribute("hlof");
		if ( sAtt ){
			if ( sAtt != "" ){
				try {
					var iVal = parseInt( sAtt );
					iRet = iVal;
				} catch(e) { }
			}
		}
	}
	return iRet;
}

function add_dict_rng( in_scid ){
	if ( dicts_doc == null ) dicts_doc = xml_load( dicts_file );
	if ( dicts_doc == null ) return null;
	var s_scid = in_scid.toString();
	var n = dicts_doc.documentElement.selectSingleNode("./dict_location[@lang='" + dicts_rfc_1766_lang + "']/item[@scid='" + s_scid + "']");
	if ( !n ) return null;
	for( var i = 0; i < dict_ranges.length; i++ ){		//do we already have the dic with this script
		var test_rng = dict_ranges[i];
		for( var j = 0; j < test_rng.scids.length; j++ ){	//multiple scids
			if( test_rng.scids[j] == s_scid )	return dict_ranges[i];
		}
	} 
	dict_ranges[dict_ranges.length] = new dict_ranges_obj();
	return dict_ranges[dict_ranges.length-1];
}

function dict_ranges_obj(){
	this.doms = new Array();
	this.urls = new Array();
	this.scids = new Array()
	this.path = "";
	this.basepath = dicts_base_path;
	this.set_dict_range_path = function( xml_doc ){
		if ( xml_doc != null ){
			var n = xml_doc.documentElement.selectSingleNode("./dict_location[@lang='" + dicts_rfc_1766_lang + "']");
			if ( !n ) return;
			var elm = n;
			var out_path = elm.getAttribute("term_relpath");
			this.path = this.basepath + "/" + out_path;
			this.scids = new Array();
			for( var i = 0; i < elm.childNodes.length; i++ ){
				this.scids[this.scids.length] = elm.childNodes[i].getAttribute('scid');
			}
		}
	}
	this.set_dict_range_path( dicts_doc );
	this.basepath  = getbasepath( this.path );
	this.dictranges = xml_load( this.path );
	this.test_word_node = function( in_text ){

		var url = this.lookup_range_url( in_text );
		if ( url == "" ) return null;
		if ( this.basepath != "" ) url = this.basepath + "\\" + url;
		var ind = this.load_range_url( url );
		if(( in_text.indexOf("\\") > -1 )||( in_text.indexOf("'") > -1 )||( in_text.indexOf("\"") > -1 )||( in_text.indexOf("*") > -1 )){
			for( var i = 0; i < this.doms[ind].documentElement.childNodes.length; i++ ){
				var node = this.doms[ind].documentElement.childNodes[i];
				var comp = vbCompareString( node.text, in_text, true );
				if ( comp == 0 ) return node;
			}
			return null;
		} else {
			var node = this.doms[ind].documentElement.selectSingleNode( "./e[text()='"+in_text+"']" );
			if ( node != null ) return node;
			return null;
		}

		
	}

	this.lookup_range_url = function( in_text ){
		var elms = this.dictranges.documentElement.selectNodes( "./rng" );
		for( var i = 0; i < elms.length; i++ ){
			var att = elms[i].getAttribute("v");
			var ses = att.split(" - ");
			var cmp_l = vbCompareString( in_text, ses[0], true );
			var cmp_r = vbCompareString( in_text, ses[1], true );
			if(( cmp_l > -1 ) && ( cmp_r < 1 ))	return elms[i].getAttribute("s");
		}
		return "";
	}

	this.load_range_url = function( url ){
		for( var i = 0; i < this.doms.length; i++ ){
			if ( this.doms[i].url == url ) return i;
		}
		this.doms[this.doms.length] = xml_load( url );
		this.urls[this.urls.length] = url;
		return this.doms.length-1;
	}
}

function add_pat_rng( in_scid ){
	if ( dicts_doc == null ) dicts_doc = xml_load( dicts_file );
	if ( dicts_doc == null ) return null;
	var s_scid = in_scid.toString();
	var n = dicts_doc.documentElement.selectSingleNode("./dict_location[@lang='" + dicts_rfc_1766_lang + "']/item[@scid='" + s_scid + "']");
	if ( !n ) return null;
	for( var i = 0; i < pattern_ranges.length; i++ ){
		var test_rng = pattern_ranges[i];
		for( var j = 0; j < test_rng.scids.length; j++ ){	//multiple scids
			if( test_rng.scids[j] == s_scid )	return pattern_ranges[i];
		}
	}
	pattern_ranges[pattern_ranges.length] = new pattern_ranges_obj();
	return pattern_ranges[pattern_ranges.length-1];
}

function pattern_ranges_obj(){
	this.doms = new Array();
	this.urls = new Array();
	this.scids = new Array();
	this.path = "";
	this.basepath = dicts_base_path;
	this.set_pattern_range_path = function( xml_doc ){
		if ( xml_doc != null ){
			var n = xml_doc.documentElement.selectSingleNode("./dict_location[@lang='" + dicts_rfc_1766_lang + "']");
			if ( !n ) return;
			var elm = n;
			var out_path = elm.getAttribute("pattern_relpath");
			this.path = this.basepath + "/" + out_path;
			this.scids = new Array();
			for( var i = 0; i < elm.childNodes.length; i++ ){
				this.scids[this.scids.length] = elm.childNodes[i].getAttribute('scid');
			}
		}
	}
	this.set_pattern_range_path( dicts_doc );
	this.basepath  = getbasepath( this.path );
	this.patternranges = xml_load( this.path );
	this.lkw = function(){
		var lkw = this.patternranges.documentElement.getAttribute("lkw");
		if ( lkw == "" ) lkw = "50";
		return lkw.toString();
	}

	this.is_end_pattern = function( e ){
		var ends = this.patternranges.documentElement.getAttribute("ends");
		if ( ends == "" ) return false;
		if ( ends.indexOf(e) > -1 ) return true;
		return false;
	}

	this.is_start_pattern = function( e ){
		var starts = this.patternranges.documentElement.getAttribute("starts");
		if ( starts == "" ) return false;
		if ( starts.indexOf(e) > -1 ) return true;
		return false;
	}
	this.get_pattern_node = function( in_s ){
		var url = this.lookup_range_url( in_s );
		if ( url == "" ) return null;
		if ( this.basepath != "" ) url = this.basepath + "/" + url;
		var ind = this.load_range_url( url );
		var s_id = "id_" + in_s;
		var node = this.doms[ind].documentElement.selectSingleNode( "./p[@id='"+s_id+"']" );
		if ( node != null ) return node;
		return null;
	}
	this.lookup_range_url = function( in_s ) {
		var elms = this.patternranges.documentElement.selectNodes( "./rng" );
		for( var i = 0; i < elms.length; i++ ) {
			var att = elms[i].getAttribute("v");
			var ses = att.split(" - ");
			var cmp_l = vbCompareString( in_s, ses[0], true );
			var cmp_r = vbCompareString( in_s, ses[1], true );
			if(( cmp_l > -1 ) && ( cmp_r < 1 )) return elms[i].getAttribute("s");
		}
		return "";
	}
	this.load_range_url = function( url ){
		for( var i = 0; i < this.doms.length; i++ ){
			if ( this.doms[i].url == url ) return i;
		}
		this.doms[this.doms.length] = xml_load( url );
		this.urls[this.doms.length] = url;
		return this.doms.length-1;
	}
}

function match_dict_patterns_rev( in_fwo, dr, pr ){
	if (( dr == null ) | ( pr == null )) return in_fwo;
	in_fwo.offsets.length = 0;
	var i = 0;
	var lkword = pr.lkw();

	for( i = in_fwo.str.length-1; i > -1; i-- ) {
		var b_dict = false;
		var fl = 1;	
		if ( i + 1 < lkword ) lkword = i + 1;
		var cw = in_fwo.str.substr( ( i + 1 )- ( lkword ), lkword );
		if ( pr.is_end_pattern( cw.substr(cw.length-1) )){
			while( cw.Length > 1 ){
				while(( !pr.is_start_pattern( cw.substr( 0,1 ))) && ( cw.length > 1 )) cw = cw.substr( 1 );
				if ( cw.length <= 1 ) break;
				var node  = pr.get_pattern_node( cw.substr( 0,1 ) );
				if ( node == null )	break;
				var ends = node.getAttribute("e");
				if (( ends != null ) && ( ends != "" )){
					if( ends.indexOf( cw[cw.length-1] ) > -1  ){
						if ( dr.test_word_node( cw ) != null ){
							i-= cw.length-1;
							fl = cw.length;
							b_dict = true;
							break;
						}
					}
				}
				cw = cw.substr( 1 );	
			}
		}
		in_fwo.add_word_offest_begin( i, fl, b_dict );
	}
	return in_fwo;
}

function match_dict_patterns( in_fwo, dr, pr ){		
	if (( dr == null ) | ( pr == null )) return in_fwo;
	in_fwo.offsets.length = 0;
	var i = 0;
	var lkword = pr.lkw();
	for( i = 0; i < in_fwo.str.length; i++ ) {
		var b_dict = false;
		if ( (in_fwo.str.length - i ) < lkword ) lkword = in_fwo.str.length - i;
		var cw = in_fwo.str.substr( i, lkword );
		if ( pr.is_start_pattern( cw.charAt(0) ) == false ) {
			if ( in_fwo.offsets.length > 0 ){
				var off_obj = in_fwo.offsets[in_fwo.offsets.length-1];
				if (( off_obj.start + off_obj.length ) < i )	continue;	
			}
			in_fwo.add_word_offest( i, 1, b_dict );
			continue;
		}
		var node  = pr.get_pattern_node( cw.charAt(0) );
		if ( node == null ){
			in_fwo.add_word_offest( i, 1, b_dict );
			continue;
		}

		var ends = node.getAttribute("e");

		if (( ends != null ) &&  ( cw.length - 1 > 0 ) && ( ends != "" )){
			var j = cw.length - 1;
			var b_offset = false;
			while(( j > 0 ) && ( b_offset == false )){
				//if ( pr.is_end_pattern( cw.charAt(cw.length-1) )) {
				if ( pr.is_end_pattern( cw.charAt(j) )) {
					if (( ends.charCodeAt(0) == cw.charCodeAt(j) ) || ( ends.indexOf( cw.charAt(j)+" ") != -1 ) || ( ends.indexOf(" "+cw.charAt(j)) != -1 )){
						var tw = cw.substr(0,j+1);
						if ( dr.test_word_node( tw ) != null ) {
							b_dict = true;
							in_fwo.add_word_offest( i, tw.length, b_dict );
							i += (tw.length - 1);
							b_offset = true;
						}
					}
				}
				j--;
			}
			if ( b_offset == true )	continue;
			else in_fwo.add_word_offest( i, 1, b_dict );
		} else {
			b_dict = true;
			in_fwo.add_word_offest( i, 1, b_dict );
		}
	}
	return in_fwo;
}

function offset_obj( in_start, in_length, in_dict ) {
	this.start = in_start;
	this.length = in_length;
	this.b_dict = in_dict;
}

function fwo_obj( in_string, in_scid ) {
	this.str = in_string;
	this.scid = in_scid;
	this.offsets = new Array();
	this.start = 0;
	this.length = in_string.length;
	this.add_word_offest = function( in_start, in_length, in_dict ) {
		this.offsets[this.offsets.length] = new offset_obj( in_start, in_length, in_dict );
	}

	this.add_word_offest_begin =  function( in_start, in_length, in_dict ){
		if ( this.offsets.length == 0 )	this.offsets[this.offsets.length] = new offset_obj( in_start, in_length, in_dict );
		else {
			var a = new Array( new offset_obj( in_start, in_length, in_dict ) );
			this.offsets = a.concat( this.offsets );
		}
	}
}
// SIG // Begin signature block
// SIG // MIIbDwYJKoZIhvcNAQcCoIIbADCCGvwCAQExCzAJBgUr
// SIG // DgMCGgUAMGcGCisGAQQBgjcCAQSgWTBXMDIGCisGAQQB
// SIG // gjcCAR4wJAIBAQQQEODJBs441BGiowAQS9NQkAIBAAIB
// SIG // AAIBAAIBAAIBADAhMAkGBSsOAwIaBQAEFLXV39d5AW2y
// SIG // W8D3zj1byC9gpK/2oIIV6jCCBIUwggNtoAMCAQICCmEF
// SIG // 9x4AAAAAADIwDQYJKoZIhvcNAQEFBQAweTELMAkGA1UE
// SIG // BhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNV
// SIG // BAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBD
// SIG // b3Jwb3JhdGlvbjEjMCEGA1UEAxMaTWljcm9zb2Z0IENv
// SIG // ZGUgU2lnbmluZyBQQ0EwHhcNMDkwNzEzMjMwMDE4WhcN
// SIG // MTAxMDEzMjMxMDE4WjCBgzELMAkGA1UEBhMCVVMxEzAR
// SIG // BgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1v
// SIG // bmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlv
// SIG // bjENMAsGA1UECxMETU9QUjEeMBwGA1UEAxMVTWljcm9z
// SIG // b2Z0IENvcnBvcmF0aW9uMIIBIjANBgkqhkiG9w0BAQEF
// SIG // AAOCAQ8AMIIBCgKCAQEAtYypnJSEYRrMLiLEoJNkCd6F
// SIG // obCQXfzJbGi18e/8jmv0+KBu11HeYKMnY9T237ZM0kUL
// SIG // pz3Yb/7tpxhj0x/GgdS/BzeXQCt/519aNdmTT6vzKpLw
// SIG // po2B7AUk3Nu4YWNTYQI1ONa49e57VKbJWDXp9BXv2gds
// SIG // BS1NpLa6mzu4MTB+RbypoSU5DEOkRzuXnCBEcjfPUKBN
// SIG // TfTDZdxE0Qg7ON0+xRdsRsetcyTAj4nB6uq6zWipEtZY
// SIG // DFMWDP45A9aB8j5cV/N622bhBxjZGQMU9uZFmSpRTJDX
// SIG // Wu+vtzsMKU1tIK4Ht5Iu6GnKnzBC58MyigsiSjLonAzG
// SIG // UQMmAW2ScwIDAQABo4IBAjCB/zATBgNVHSUEDDAKBggr
// SIG // BgEFBQcDAzAdBgNVHQ4EFgQUh4G33+76d/pZBWM3BArX
// SIG // 6dqg4OAwDgYDVR0PAQH/BAQDAgeAMB8GA1UdIwQYMBaA
// SIG // FFdFdBxdsPbIQwXgjFQtjzKn/kiWMEkGA1UdHwRCMEAw
// SIG // PqA8oDqGOGh0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9w
// SIG // a2kvY3JsL3Byb2R1Y3RzL0NvZGVTaWdQQ0EuY3JsME0G
// SIG // CCsGAQUFBwEBBEEwPzA9BggrBgEFBQcwAoYxaHR0cDov
// SIG // L3d3dy5taWNyb3NvZnQuY29tL3BraS9jZXJ0cy9Db2Rl
// SIG // U2lnUENBLmNydDANBgkqhkiG9w0BAQUFAAOCAQEANiGE
// SIG // 9Y+DIU2HqD+L58WkD0wwbll0mwuXdBapsfNwpK/CDDMk
// SIG // 86BK+sHkIca22epcW5Fh9yJt/zH8F07XzUDjndLltNL6
// SIG // jWwH2neayivuDVlHzwTCEGf66ulDO7fm0ZzZjiNgbhKb
// SIG // w9l+XFcy3ZQN333FSJJNSHa3osBTlT78OqOTfPKFBMfG
// SIG // hTiXNvgSkyIAmU55r5brWiCDrNBcWjCwAOJrOY8kido9
// SIG // DKRGeWI2U2rXyc2SCPuH5VT1fFnFxHd9sMEsmMeXbEOn
// SIG // +CD4g1RknmD44kqlZ9RJv1SIfVJE81HAJtHFfPCJ1hEJ
// SIG // KMJFRYAdkCK9jqIFPjyzT73XOeCIkzCCBM0wggO1oAMC
// SIG // AQICCmEWtSkAAAAAABAwDQYJKoZIhvcNAQEFBQAwdzEL
// SIG // MAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24x
// SIG // EDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jv
// SIG // c29mdCBDb3Jwb3JhdGlvbjEhMB8GA1UEAxMYTWljcm9z
// SIG // b2Z0IFRpbWUtU3RhbXAgUENBMB4XDTEwMDEwNDIxMTIw
// SIG // M1oXDTEzMDEwNDIxMjIwM1owgbYxCzAJBgNVBAYTAlVT
// SIG // MRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdS
// SIG // ZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9y
// SIG // YXRpb24xEDAOBgNVBAsTB25DaXBoZXIxJzAlBgNVBAsT
// SIG // Hm5DaXBoZXIgRFNFIEVTTjpBQ0QzLUFFNjYtRTBCNTEl
// SIG // MCMGA1UEAxMcTWljcm9zb2Z0IFRpbWUtU3RhbXAgU2Vy
// SIG // dmljZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
// SIG // ggEBAOMoqtk8Q0L4BhO64sf5wS9ZyzyV51SQbMNYlWKz
// SIG // D2y9g9stWIgIkgvbzXbHVsbg7irTiDtcyqlwowAjIixT
// SIG // OOhQx/EUCY0dy3yL9aYza6/IRl9Le17556bHL0KFZzaN
// SIG // YEryE2bcsDltzhDK3XIFWHKd8gA7ADntJlM+Hs3uUJLN
// SIG // hfQ6/YGhBV8L6UQO79VZQCYoy4JOTivIFCK7cB3kPdH9
// SIG // YHZUTDns73c4i4z+dK/nFvRwMbjLrdTdi7b6AK3tdBSw
// SIG // Rb78ZYjhrfxJ21/R1M50edSNhm+z9ZcHIS2aYcn8uhtM
// SIG // 0uiruVDk0yv0wdlN1kCsFKeIhXNeaD5jt0HUZr0CAwEA
// SIG // AaOCARkwggEVMB0GA1UdDgQWBBTh8K4PDQX8MvMcfRl/
// SIG // z8TFv5FVTTAfBgNVHSMEGDAWgBQjNPjZUkZwCu1A+3b7
// SIG // syuwwzWzDzBUBgNVHR8ETTBLMEmgR6BFhkNodHRwOi8v
// SIG // Y3JsLm1pY3Jvc29mdC5jb20vcGtpL2NybC9wcm9kdWN0
// SIG // cy9NaWNyb3NvZnRUaW1lU3RhbXBQQ0EuY3JsMFgGCCsG
// SIG // AQUFBwEBBEwwSjBIBggrBgEFBQcwAoY8aHR0cDovL3d3
// SIG // dy5taWNyb3NvZnQuY29tL3BraS9jZXJ0cy9NaWNyb3Nv
// SIG // ZnRUaW1lU3RhbXBQQ0EuY3J0MBMGA1UdJQQMMAoGCCsG
// SIG // AQUFBwMIMA4GA1UdDwEB/wQEAwIGwDANBgkqhkiG9w0B
// SIG // AQUFAAOCAQEAjVtJKFSHyYqpk/6b+I1UcSCdwDiTJym5
// SIG // y5ZTios1tZQ3Fli9nj4XJ19ZL+Rdfh3iWdwH+2IY5WO/
// SIG // 9AvPTdpbMPbImv8mWb8ZwxCy8OMewQyZ2lWSxswS38BY
// SIG // TN2a1B0j+YYSROcmAuiAQWgWVDYdp2WzxDOh46SY2b5i
// SIG // kE+SN7apiBdUSB+dwiLYciq5wzCTPjfsKam5zgvVwskW
// SIG // pudeVQ3MgYRh6SwD25umG1MCOIsKWJEXyHFwFs4uxmP8
// SIG // eZ+DBIK0gecvV2mtuKUfIzZ29hWUhgoe6t0RO2ZE0hVa
// SIG // z6YrKB9OxQpzV0uVA2Ci6+kyfr09j6a9SSopwVcxwBDf
// SIG // UTCCBgcwggPvoAMCAQICCmEWaDQAAAAAABwwDQYJKoZI
// SIG // hvcNAQEFBQAwXzETMBEGCgmSJomT8ixkARkWA2NvbTEZ
// SIG // MBcGCgmSJomT8ixkARkWCW1pY3Jvc29mdDEtMCsGA1UE
// SIG // AxMkTWljcm9zb2Z0IFJvb3QgQ2VydGlmaWNhdGUgQXV0
// SIG // aG9yaXR5MB4XDTA3MDQwMzEyNTMwOVoXDTIxMDQwMzEz
// SIG // MDMwOVowdzELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldh
// SIG // c2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNV
// SIG // BAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEhMB8GA1UE
// SIG // AxMYTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBMIIBIjAN
// SIG // BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAn6Fssd/b
// SIG // SJIqfGsuGeG94uPFmVEjUK3O3RhOJA/u0afRTK10MCAR
// SIG // 6wfVVJUVSZQbQpKumFwwJtoAa+h7veyJBw/3DgSY8InM
// SIG // H8szJIed8vRnHCz8e+eIHernTqOhwSNTyo36Rc8J0F6v
// SIG // 0LBCBKL5pmyTZ9co3EZTsIbQ5ShGLieshk9VUgzkAyz7
// SIG // apCQMG6H81kwnfp+1pez6CGXfvjSE/MIt1NtUrRFkJ9I
// SIG // AEpHZhEnKWaol+TTBoFKovmEpxFHFAmCn4TtVXj+AZod
// SIG // UAiFABAwRu233iNGu8QtVJ+vHnhBMXfMm987g5OhYQK1
// SIG // HQ2x/PebsgHOIktU//kFw8IgCwIDAQABo4IBqzCCAacw
// SIG // DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUIzT42VJG
// SIG // cArtQPt2+7MrsMM1sw8wCwYDVR0PBAQDAgGGMBAGCSsG
// SIG // AQQBgjcVAQQDAgEAMIGYBgNVHSMEgZAwgY2AFA6sgmBA
// SIG // VieX5SUT/CrhClOVWeSkoWOkYTBfMRMwEQYKCZImiZPy
// SIG // LGQBGRYDY29tMRkwFwYKCZImiZPyLGQBGRYJbWljcm9z
// SIG // b2Z0MS0wKwYDVQQDEyRNaWNyb3NvZnQgUm9vdCBDZXJ0
// SIG // aWZpY2F0ZSBBdXRob3JpdHmCEHmtFqFKoKWtTHNY9AcT
// SIG // LmUwUAYDVR0fBEkwRzBFoEOgQYY/aHR0cDovL2NybC5t
// SIG // aWNyb3NvZnQuY29tL3BraS9jcmwvcHJvZHVjdHMvbWlj
// SIG // cm9zb2Z0cm9vdGNlcnQuY3JsMFQGCCsGAQUFBwEBBEgw
// SIG // RjBEBggrBgEFBQcwAoY4aHR0cDovL3d3dy5taWNyb3Nv
// SIG // ZnQuY29tL3BraS9jZXJ0cy9NaWNyb3NvZnRSb290Q2Vy
// SIG // dC5jcnQwEwYDVR0lBAwwCgYIKwYBBQUHAwgwDQYJKoZI
// SIG // hvcNAQEFBQADggIBABCXisNcA0Q23em0rXfbznlRTQGx
// SIG // LnRxW20ME6vOvnuPuC7UEqKMbWK4VwLLTiATUJndekDi
// SIG // V7uvWJoc4R0Bhqy7ePKL0Ow7Ae7ivo8KBciNSOLwUxXd
// SIG // T6uS5OeNatWAweaU8gYvhQPpkSokInD79vzkeJkuDfcH
// SIG // 4nC8GE6djmsKcpW4oTmcZy3FUQ7qYlw/FpiLID/iBxoy
// SIG // +cwxSnYxPStyC8jqcD3/hQoT38IKYY7w17gX606Lf8U1
// SIG // K16jv+u8fQtCe9RTciHuMMq7eGVcWwEXChQO0toUmPU8
// SIG // uWZYsy0v5/mFhsxRVuidcJRsrDlM1PZ5v6oYemIp76Kb
// SIG // KTQGdxpiyT0ebR+C8AvHLLvPQ7Pl+ex9teOkqHQ1uE7F
// SIG // cSMSJnYLPFKMcVpGQxS8s7OwTWfIn0L/gHkhgJ4VMGbo
// SIG // QhJeGsieIiHQQ+kr6bv0SMws1NgygEwmKkgkX1rqVu+m
// SIG // 3pmdyjpvvYEndAYR7nYhv5uCwSdUtrFqPYmhdmG0bqET
// SIG // pr+qR/ASb/2KMmyy/t9RyIwjyWa9nR2HEmQCPS2vWY+4
// SIG // 5CHltbDKY7R4VAXUQS5QrJSwpXirs6CWdRrZkocTdSIv
// SIG // MqgIbqBbjCW/oO+EyiHW6x5PyZruSeD3AWVviQt9yGnI
// SIG // 5m7qp5fOMSn/DsVbXNhNG6HY+i+ePy5VFmvJE6P9MIIG
// SIG // gTCCBGmgAwIBAgIKYRUIJwAAAAAADDANBgkqhkiG9w0B
// SIG // AQUFADBfMRMwEQYKCZImiZPyLGQBGRYDY29tMRkwFwYK
// SIG // CZImiZPyLGQBGRYJbWljcm9zb2Z0MS0wKwYDVQQDEyRN
// SIG // aWNyb3NvZnQgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3Jp
// SIG // dHkwHhcNMDYwMTI1MjMyMjMyWhcNMTcwMTI1MjMzMjMy
// SIG // WjB5MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGlu
// SIG // Z3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMV
// SIG // TWljcm9zb2Z0IENvcnBvcmF0aW9uMSMwIQYDVQQDExpN
// SIG // aWNyb3NvZnQgQ29kZSBTaWduaW5nIFBDQTCCASIwDQYJ
// SIG // KoZIhvcNAQEBBQADggEPADCCAQoCggEBAJ+N34U3jLEG
// SIG // VmY2TtQK6zYjkR6vq41Y6cTPwZ86CiTExMResO4VFMX6
// SIG // PpkzaxlpcvR8BV/lmSVE1zUZipDcKI6QDO/VkGGt3twY
// SIG // cC2DyW+vhSz43bm5MP1xeByD/cipuYJnDXq4wQnCvBaX
// SIG // Vz8cmNNp1zCQkJCNMB/YJtSee4jZ4gntl0lF6wRSgXV7
// SIG // uLUiuC5Wu9fPqU48CoOiqDrFrbYBDmrPIrQjH2zVJ+e3
// SIG // fsG01TKteSUcQobinYX0V9obWS8tJpIpxbPXhaOeYFqU
// SIG // 5nuce16CNEtt/9TuJ9Ci3NGQDM59DhV8iKw0x8BsmIRK
// SIG // yUR5aCjfIoMNuIosSGHi/hECAwEAAaOCAiMwggIfMBAG
// SIG // CSsGAQQBgjcVAQQDAgEAMB0GA1UdDgQWBBRXRXQcXbD2
// SIG // yEMF4IxULY8yp/5IljALBgNVHQ8EBAMCAcYwDwYDVR0T
// SIG // AQH/BAUwAwEB/zCBmAYDVR0jBIGQMIGNgBQOrIJgQFYn
// SIG // l+UlE/wq4QpTlVnkpKFjpGEwXzETMBEGCgmSJomT8ixk
// SIG // ARkWA2NvbTEZMBcGCgmSJomT8ixkARkWCW1pY3Jvc29m
// SIG // dDEtMCsGA1UEAxMkTWljcm9zb2Z0IFJvb3QgQ2VydGlm
// SIG // aWNhdGUgQXV0aG9yaXR5ghB5rRahSqClrUxzWPQHEy5l
// SIG // MFAGA1UdHwRJMEcwRaBDoEGGP2h0dHA6Ly9jcmwubWlj
// SIG // cm9zb2Z0LmNvbS9wa2kvY3JsL3Byb2R1Y3RzL21pY3Jv
// SIG // c29mdHJvb3RjZXJ0LmNybDBUBggrBgEFBQcBAQRIMEYw
// SIG // RAYIKwYBBQUHMAKGOGh0dHA6Ly93d3cubWljcm9zb2Z0
// SIG // LmNvbS9wa2kvY2VydHMvTWljcm9zb2Z0Um9vdENlcnQu
// SIG // Y3J0MHYGA1UdIARvMG0wawYJKwYBBAGCNxUvMF4wXAYI
// SIG // KwYBBQUHAgIwUB5OAEMAbwBwAHkAcgBpAGcAaAB0ACAA
// SIG // qQAgADIAMAAwADYAIABNAGkAYwByAG8AcwBvAGYAdAAg
// SIG // AEMAbwByAHAAbwByAGEAdABpAG8AbgAuMBMGA1UdJQQM
// SIG // MAoGCCsGAQUFBwMDMA0GCSqGSIb3DQEBBQUAA4ICAQAw
// SIG // vLAgpGKgp+85JmE93KzGmdCGxC71gzJlXiI+m9aG+Oi2
// SIG // n8qL1jt1C6GRPkzdZHSMSfKIjBhnbP4VZka4OkZCl8iR
// SIG // N9Qksees0+pBFIN308lPBV+jFFK/lqQvPlZbEHXOU8PO
// SIG // BVRptGXJJKUP4SW4GrlN5QK5UB5Ps5gMHZUC7iJZrSLL
// SIG // BXQLBEV7BFng2A+z60z4YN3CeJ7Rup9r9/PufkQRQNK9
// SIG // uptLFghupL5V5KY4EqNI9BxVeoog0X3+kduUjy/Ce2um
// SIG // ZIVPo+UsNCldC7/1xzgvxCDEVjH2ac6F+AqR7NDWrro4
// SIG // BQzrbk9MnAMpqqL8GKApDA1cXFYjV9oclg3IJjbBRMvl
// SIG // 4eZvieeP6Zi1c9N44+2jATx05V68bPYhiWcF7JedtbH9
// SIG // r6bpcqXDNOEvn/n0ajniLQSCW/zQnK58nRH55rVTGXS6
// SIG // OUo5631Cs0o7Nz3CSnsnmOfiTpsbSlQ4aiM3vmq3SO7q
// SIG // Qg1JJJGOtwQul2/k50W7j039YNnXWcLYgNZgNHu3oZMg
// SIG // /oG4qqVcCemKDb4oTX7X6A/tZXjRMV+5ZtvfQucLzAIH
// SIG // jd//IAajRWW0szKNLpHiTbSpyfq8awQOsp/qn96kyQqW
// SIG // 9I332Jio8IUCCFmkIKYsCxryUgbtaeVkGBvgo6veynwU
// SIG // YUO4ZfU2o1UTK2csTRswTDGCBJEwggSNAgEBMIGHMHkx
// SIG // CzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9u
// SIG // MRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy
// SIG // b3NvZnQgQ29ycG9yYXRpb24xIzAhBgNVBAMTGk1pY3Jv
// SIG // c29mdCBDb2RlIFNpZ25pbmcgUENBAgphBfceAAAAAAAy
// SIG // MAkGBSsOAwIaBQCggb4wGQYJKoZIhvcNAQkDMQwGCisG
// SIG // AQQBgjcCAQQwHAYKKwYBBAGCNwIBCzEOMAwGCisGAQQB
// SIG // gjcCARUwIwYJKoZIhvcNAQkEMRYEFBcSi40HQzhdJmwg
// SIG // YPPsj/E44x2VMF4GCisGAQQBgjcCAQwxUDBOoCaAJABN
// SIG // AGkAYwByAG8AcwBvAGYAdAAgAEwAZQBhAHIAbgBpAG4A
// SIG // Z6EkgCJodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vbGVh
// SIG // cm5pbmcgMA0GCSqGSIb3DQEBAQUABIIBAD4U9mHLso3Q
// SIG // mljIK/mMmmBfSC7D6tBVbun8OwzNLSlvsqJDX6xJWr2f
// SIG // 9N3TjZmRVTo3JeC0xhU+xEYxRZjWgmO78mYcmUAd04Os
// SIG // bUGUS4/cly5OY2y9cDapLbB2pKfi3Ni76bOD9HVo34wL
// SIG // P3SvtaEDvHOYAi31UxBWPL8uSfwwQ8YZ5XmsuNQL8Yr1
// SIG // Hvt9v0o35vgVJIJrsQ3vAfd7eMYWVZTnOxKWgCdL5QVQ
// SIG // WgAxKl89QZdRVQK3v123Mwpjwm22CyRH4US35SszWSHM
// SIG // RoeCepgB/TBwVbVn/8CuAbw+ZaCuxorMrBOzk6nFlNMS
// SIG // bghxTMwGj6IwNPrOVVnL0qyhggIdMIICGQYJKoZIhvcN
// SIG // AQkGMYICCjCCAgYCAQEwgYUwdzELMAkGA1UEBhMCVVMx
// SIG // EzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1Jl
// SIG // ZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3Jh
// SIG // dGlvbjEhMB8GA1UEAxMYTWljcm9zb2Z0IFRpbWUtU3Rh
// SIG // bXAgUENBAgphFrUpAAAAAAAQMAcGBSsOAwIaoF0wGAYJ
// SIG // KoZIhvcNAQkDMQsGCSqGSIb3DQEHATAcBgkqhkiG9w0B
// SIG // CQUxDxcNMTAwMjE5MjIzNzM0WjAjBgkqhkiG9w0BCQQx
// SIG // FgQUh/5h/MCPGDiR/tRL7rwYTnwODX8wDQYJKoZIhvcN
// SIG // AQEFBQAEggEAd3CuuzvWgJwO2vRhD2EzxP6VEgeTpp6E
// SIG // DNq/wnTnu6DfzDssdnTblVCMHaALc5/ckaoIhR1ustZ2
// SIG // hIFQxDlj4lZt8WoiYl6zsLIHfBtNA2oz6gf4NNpZP36G
// SIG // Y6rulig0d5BZbA7BzbzrsGIIjaHnMIcP4lViisJjBXri
// SIG // r0yLciENLzo7qnDo4uPMT+03Vrsjv3+twW0+uSNrztbq
// SIG // IcOfobuTOhPS9XJc5DGl+vsawrNbEAHYB3gEbhIZCS/b
// SIG // x7eJ7cC/WgXUKqeumiIP4qV0gd3LL7jugAdHCGMuLgvs
// SIG // OMi9lYUYh30JdWpsHm0jPwH1h96CO6p6z5uda7rxRVs6Yg==
// SIG // End signature block
