//////////////////////////////////////////////////////////////////////////////
//
// Copyright © 2002-2003, Microsoft Corporation.  All rights reserved.
//
// File: Viewer.js
//
// Description: Functionality associated with viewer.htm.  These functions
//		are in a separate file so loading can be deferred for
//		improved performance.
//
//////////////////////////////////////////////////////////////////////////////

//--------------------------------------------------------------------
// Function: document.ondragstart
//
// Purpose:
//
//
//
// Parameters: None
//
// Returns: None
//--------------------------------------------------------------------
document.ondragstart=function(event)
{
	// don't allow elements to be dragged onto the desktop
	CancelEvent(event);
}

//--------------------------------------------------------------------
// Function: document.oncontextmenu
//
// Purpose:
//
//
//
// Parameters: None
//
// Returns: None
//--------------------------------------------------------------------
document.oncontextmenu=function(event)
{
    if(window.ActiveXObject)
    {
    	if (window.event.srcElement.id != "idsearchinput")	// only display default context menu for search
    	{
 		    CancelEvent(event);
 		}
    }
    else
    {
        if (event.target.id != "idsearchinput")	// only display default context menu for search
    	{
 		    CancelEvent(event);
 		}
    }
}

//--------------------------------------------------------------------
// Function: document.onkeypress
//
// Purpose:
//
//
//
// Parameters: None
//
// Returns: None
//--------------------------------------------------------------------
document.onkeypress=function(event)
{

//MV CHANGE - adding bannerlink code back in - see diff
    var eventSrc = (window.ActiveXObject)?window.event.srcElement.id:event.target.id;
    var keyCode = (window.ActiveXObject)?window.event.keyCode:event.which;
	switch (eventSrc)
	{
		case "BannerLinkBtn":
		case "BannerLinkLabel":
		case "TocMenuLabel":
		case "imgTocBtn":
		case "HelpMenu1":
		case "imgTextView":
		case "imgThumbnailView":
		case "__thumbnails":
		case "__textView":
		case "imgCloseTOC":
		case "imgTocBtn_1":
	    case "imgTocBtn_2":
	    case "imgTocBtn_3":
		case "BookmarkMenuLabel":
		case "NotesMenuLabel":
		case "HelpMenuLabel":
		case "PreviousBtn":
		case "NextBtn":
		case "imgBasicSearchGo":
		{
			if (keyCode == ASCII_KEYCODE_ENTER)
			{
				document.onclick();
				CancelEvent(event);
				break;
			}
		}
		case "idsearchinput":
			if (keyCode == ASCII_KEYCODE_ENTER)
			        go_onClick(); break;
	}

	HandleKeys(event);
}

//--------------------------------------------------------------------
// Function: document.onkeyup
//
// Purpose:
//
//
//
// Parameters: None
//
// Returns: None
//--------------------------------------------------------------------
document.onkeyup=function(event)	// ALT modifier cannot be trapped using document.onkeypress() or document.onkeydown()
{
	HandleKeys(event);
}

//--------------------------------------------------------------------
// Function: document.onkeydown
//
// Purpose:
//
//
//
// Parameters: None
//
// Returns: None
//--------------------------------------------------------------------
document.onkeydown=function(event)
{
	HandleKeys(event);
}

//--------------------------------------------------------------------
// Function: document.onclick
//
// Purpose:
//
//
//
// Parameters: None
//
// Returns: None
//--------------------------------------------------------------------
document.onclick=function(event)
{

//MV CHANGE - adding bannerlink code back in - see diff

	try {
	    if (window.ActiveXObject)
	        event = window.event;
	        
		if (g_bModal)
		{
			CancelEvent(event);
			return;
		}
        var srcElementId =null;
        if(window.ActiveXObject)
            srcElementId = event.srcElement.id;
        else
            srcElementId= event.target.id;
		switch (srcElementId)
		{
			case "BannerLinkLabel":
			case "BannerLinkBtn":
			case "imgBannerLinkBtn":
				window.location.href = URI_BANNER_LINK;
				break;
			case "imgBasicSearchGo":
			go_onClick();
			break;
			case "__thumbnails":
			getTOCNodes();
			break;
			case "__textView":
			loadTOC();
			break;
			case "imgCloseTOC":
			hideTOC();
			break;
			case "TocMenuLabel":
			case "imgTocBtn":
		    case "imgTocBtn_1":
		    case "imgTocBtn_2":
		    case "imgTocBtn_3":
		    case "TocMenuLabel_Text":
				ToggleToc();
				break;
			case "PreviousBtn": 
				if (!PreviousBtn.disabled) API.LRNDoPrevious();
				break;
			case "NextBtn":
				if (!NextBtn.disabled) API.LRNDoNext();
				break;
			case "NotesMenuLabel":
			case "BookmarkMenuLabel":
			case "HelpMenuLabel":
			    if(window.ActiveXObject)
					ShowMenu(event.srcElement);
				else
				    ShowMenu(event.target);
				return;
		}

        if(window.ActiveXObject)
        {
            if (event.srcElement.tagName != "U") parent.HideMenu();
        }    
        else
        {
            if(event.target.tagName != 'U') HideMenu();
        }
	}
	catch(e)
	{
	}
}

//--------------------------------------------------------------------
// Function: ToggleToc
//
// Purpose:
//
//
//
// Parameters: None
//
// Returns:
//--------------------------------------------------------------------
function ToggleToc()
{
	var oTocFrameStyle = g_oTocFrame.style;

	if (oTocFrameStyle.display == "" || oTocFrameStyle.display == "inline")
	{
		oTocFrameStyle.display = "none";
		divSep.style.display = "none";
		TocMenuLabel.style.color = "White";
		TocMenuLabel.title = LBL_TOC_TOOLTIP_SHOW;
		imgTocBtn.title = LBL_TOC_TOOLTIP_SHOW;
		imgTocBtn.style.display = "inline";
		TocMenuLabel_Text.style.display = "none";	
		bshowTOC = "0";
	}
	else
	{
		oTocFrameStyle.display = "block";
		divSep.style.display = "block";
		TocMenuLabel_Text.style.color = "#7CB6E6";
		TocMenuLabel.title = LBL_TOC_TOOLTIP_HIDE;
        imgTocBtn.title = LBL_TOC_TOOLTIP_HIDE;	
		ScrollToNode();
	    imgTocBtn.style.display = "none";
		TocMenuLabel_Text.style.display = "inline";
		bshowTOC = "1";
	}
}

//--------------------------------------------------------------------
// Function: divSep_onmouseup
//
// Purpose:
//
//
//
// Parameters: None
//
// Returns: None
//--------------------------------------------------------------------
function divSep_onmouseup()
{
    isResize = false;
    if(window.ActiveXObject)
	    divSep.releaseCapture();
	else
	    divSep.removeEventListener("mousemove",divSep_onmousemove,false);
}

//--------------------------------------------------------------------
// Function: divSep_onmousedown
//
// Purpose:
//
//
//
// Parameters: None
//
// Returns: None
//--------------------------------------------------------------------
function divSep_onmousedown()
{
	isResize = true;
    if(window.ActiveXObject)
	    divSep.setCapture();
	else
	    divSep.addEventListener("mousemove",divSep_onmousemove,false);
}

//--------------------------------------------------------------------
// Function: divSep_onmousemoveFF
//
// Purpose:
//
//
//
// Parameters: None
//
// Returns: None
//--------------------------------------------------------------------
function divSep_onmousemoveFF(event) 
{
    divSepMove(event.screenX);
}

//--------------------------------------------------------------------
// Function: divSep_onmousemove
//
// Purpose:
//
//
//
// Parameters: None
//
// Returns: None
//--------------------------------------------------------------------
function divSep_onmousemove(event) 
{
    var button = (window.ActiveXObject)?window.event.button:event.which;
	if (button == MOUSE_BUTTON_LEFT)
	{
	
//		if (document.dir == "rtl")
//			divSepMove(document.body.clientWidth - event.clientX);
//		else
			divSepMove(event.screenX);
	}
}

//--------------------------------------------------------------------
// Function: divSep_onkeypress
//
// Purpose:
//
//
//
// Parameters: None
//
// Returns: None
//--------------------------------------------------------------------
function divSep_onkeypress(event) 
{
    if (event == undefined)
        return;
	var evX = g_oTocFrame.style.posWidth;
	var nDelta = (document.dir == "rtl") ? -10 : 10;
	var key = (window.ActiveXObject)?window.event.keyCode:event.which;
	switch ((window.ActiveXObject)?event.keyCode:event.which)
	{
		case ASCII_KEYCODE_ARROW_RIGHT:
			evX += nDelta;
			break;
		case ASCII_KEYCODE_ARROW_LEFT:
			evX -= nDelta;
			break;
		default:
			return;
	}

	divSepMove(evX);
	window.scrollBy(-evX,0);
}

//--------------------------------------------------------------------
// Function: divSepMove
//
// Purpose:
//
//
//
// Parameters:
//	evX [in] - 
//
// Returns: None
//--------------------------------------------------------------------
function divSepMove(evX)
{
    evX -=7;
    if(isResize){
	    var oTocFrameStyle = g_oTocFrame.style;
	    var nDivSepWidth = divSep.clientWidth;
	    var nDivSearchSepWidth = tdResizeSearchFrame.clientWidth;
	    var nDocBodyWidth = document.body.clientWidth;
	    var minWidthPerc = 12.7; //for 100x100 image
	    var maxWidthPerc = 60; //for 500x400 image
	    var minTocWidth = (minWidthPerc* nDocBodyWidth)/100;
	    var maxTocWidthPerc = (maxWidthPerc * nDocBodyWidth) / 100;
	    var maxTocWidth = maxTocWidthPerc;
	    var searchFrameWidth = document.getElementById("searchResultsFrame").clientWidth;
	    //allow TOC to be resized only within the min and max values
	    if (bshowSearchResults)
	    {
	        maxTocWidth = nDocBodyWidth - (searchFrameWidth + nDivSepWidth + nDivSearchSepWidth + 12+30);
	        if (maxTocWidth > maxTocWidthPerc)
	            maxTocWidth = maxTocWidthPerc;
	    }
	     if(evX > minTocWidth && evX < maxTocWidth )
	    {
	        oTocFrameStyle.width = evX+'px';

	        // Don't allow the divider to move beyond the client edge
	        if (oTocFrameStyle.posWidth >= nDocBodyWidth - (nDivSepWidth + 20))
		        oTocFrameStyle.posWidth = nDocBodyWidth - nDivSepWidth-20+'px';
        		
	        ContentAreaTbl.width = nDocBodyWidth - (g_oTocFrame.clientWidth + nDivSepWidth)+'px';

	        SaveOrigTocWidth();

	        // Force a resize, otherwise we may end-up with a blank space at the bottom of the
	        // client area if the horizontal scrollbar disappears.  Note that this only occurs when
	        // the content wheel is visible.
	        //resize();
	    
	    //resize thumbnails
	    if (bthumbnailsLoaded) {
	        var currentTOCWidth = g_oTocFrame.clientWidth;
	        resizeThumbnails(currentTOCWidth, "onResize");
	    }
	    }
	}
}

//--------------------------------------------------------------------
// Function: ForceTocRedraw
//
// Purpose: Causes the TOC to redraw (fixes bug #4347).
//
// Parameters: None
//
// Returns: None
//--------------------------------------------------------------------
function ForceTocRedraw()
{
	var oTocFrameStyle = g_oTocFrame.style;
	var nWidth = oTocFrameStyle.pixelWidth;
	oTocFrameStyle.pixelWidth = nWidth + 10;
	oTocFrameStyle.pixelWidth = nWidth;
}

//--------------------------------------------------------------------
// Function: ChangeButtonImage
//
// Purpose:
//
//
//
// Parameters: None
//
// Returns: None
//--------------------------------------------------------------------
function ChangeButtonImage(event)
{
	var nState = -1;
	if(window.ActiveXObject)
	    event=window.event;
	switch (event.type)
	{
		case "mouseover":
			nState = BUTTON_STATE_RO;
			break;
		case "mouseout":
			nState = BUTTON_STATE_NORMAL;
			break;
		case "mousedown":
			if (event.button == MOUSE_BUTTON_LEFT)
			{
				nState = BUTTON_STATE_DOWN;
				break;
			}
		case "mouseup":
			if (event.button == MOUSE_BUTTON_LEFT)
			{
				nState = BUTTON_STATE_RO;
				break;
			}
		default:
			return;
	}
	
	if(window.ActiveXObject)
	{
	    var oSrc = event.srcElement;
	    var sID = (oSrc.tagName != "U") ? oSrc.id : oSrc.parentElement.id;
	}
	else
	{
	    var oSrc = event.target;
	    var sID = (oSrc.tagName != "U") ? oSrc.id : oSrc.parentNode.id;
	}
	
	switch (sID)
	{
		case "imgBannerLinkBtn":
		case "BannerLinkLabel":
			imgBannerLinkBtn.src = g_aImgBannerLinkBtn[nState].src;
			BannerLinkLabel.className = (nState == BUTTON_STATE_NORMAL) ? "BannerLinkLabel" : "BannerLinkLabelRO";
			if (BannerLinkLabel.children.length) BannerLinkLabel.children(0).className = (nState == BUTTON_STATE_NORMAL) ? "BannerLinkLabel" : "BannerLinkLabelRO";
			break;
		case "PreviousBtn":
			if (!PreviousBtn.disabled) 
			{
				PreviousBtn.src = g_aImgPreviousBtn[nState].src;
			}
			break;
		case "NextBtn":
			if (!NextBtn.disabled)
			{
				NextBtn.src = g_aImgNextBtn[nState].src;
			}
			break;
		case "imgBasicSearchGo":
		    imgBasicSearchGo.src = g_aImgBasicSearchGo[nState].src;
		    break;
		case "HelpMenuLabel":
		    HelpMenuLabel.src = g_aImgHelpMenuLabel[nState].src;
		    break;
		case "imgTextView":
		    if(TocFrame.document.getElementById("TreeControltd").style.display == "")
		    {
		        imgTextView.src = IMG_TOC_TEXTVIEW_BTN_SELECTED;
		    }
		    else
		    {
		        imgTextView.src = g_aImgTocTextView[nState].src;
		    }
		    
		    break;
		case "imgThumbnailView":
		    if(TocFrame.document.getElementById("thumbnailControl").style.display == "")
		    {
		        imgThumbnailView.src = IMG_TOC_THUMBNAILVIEW_BTN_SELECTED;
		    }
		    else
		    {
		        imgThumbnailView.src = g_aImgTocThumbNailView[nState].src;
		    }
		    break;
		case "imgCloseTOC":
		    imgCloseTOC.src = g_aImgTocClose[nState].src;
		    break;
		case "imgTocBtn":
		case "imgTocBtn_1":
		case "imgTocBtn_2":
		case "imgTocBtn_3":
		case "TocMenuLabel":
			imgTocBtn_1.style.backgroundImage = "url( ' " + g_aImgTocBtn1[nState].src + "')";
	        imgTocBtn_2.style.backgroundImage = "url( ' " + g_aImgTocBtn2[nState].src + "')";
	        imgTocBtn_3.style.backgroundImage = "url( ' " + g_aImgTocBtn3[nState].src + "')";

		    //imgTocBtn.src = g_aImgTocBtn[nState].src;
		    break;
		default:
			return;
	}
}

//--------------------------------------------------------------------
// Function: onContentFrameKeypress
//
// Purpose:
//
//
//
// Parameters: None
//
// Returns: None
//--------------------------------------------------------------------
function onContentFrameKeypress()
{
	HandleKeys(ContentFrame.event);
}

//--------------------------------------------------------------------
// Function: HandleKeys
//
// Purpose:
//
//
//
// Parameters: 
//
// Returns: None
//--------------------------------------------------------------------
function HandleKeys(oEvent)
{
	try
	{
		if (oEvent.type == "keydown")
		{
			if (oEvent.keyCode == ASCII_KEYCODE_F11)
			{
				oEvent.keyCode = null;
				CancelEvent(oEvent);
			}

			return;
		}

		if (oEvent.altKey)
		{
			HideMenu();

			switch (String.fromCharCode(oEvent.keyCode))
			{
				case LBL_PREVIOUS_TOPIC_ACCESSKEY:
					if (!PreviousBtn.disabled) API.LRNDoPrevious();
					break;
				case LBL_NEXT_TOPIC_ACCESSKEY:
					if (!NextBtn.disabled) API.LRNDoNext();
					break;
				case LBL_TOC_MENU_ACCESSKEY:
					ToggleToc();
					/*if (g_oTocFrame.style.display == "inline")
					{
						if (TocMenuLabel.className == "TocMenuLabel")
							imgTocBtn.src = g_aImgTocUpBtn[BUTTON_STATE_NORMAL].src;
						else
							imgTocBtn.src = g_aImgTocUpBtn[BUTTON_STATE_RO].src;
					}
					else
					{
						if (TocMenuLabel.className == "TocMenuLabel")
							imgTocBtn.src = g_aImgTocDownBtn[BUTTON_STATE_NORMAL].src;
						else
							imgTocBtn.src = g_aImgTocDownBtn[BUTTON_STATE_RO].src;
					}*/
					break;
				case LBL_BOOKMARK_MENU_ACCESSKEY:
					if (BookmarkMenuLabel.style.display != "none")
						ShowMenu(BookmarkMenuLabel);
					break;
				case LBL_NOTES_MENU_ACCESSKEY:
					if (NotesMenuLabel.style.display != "none")
						ShowMenu(NotesMenuLabel);
					break;
				case LBL_HELP_MENU_ACCESSKEY:
					if (HelpMenuLabel.style.display != "none")
						ShowMenu(HelpMenuLabel);
					break;
				case LBL_ADVANCED_SEARCH_ACCESSKEY:
					if (AdvSearchLink.style.display != "none")
						AdvSearchLink.click();
					break;
				case LBL_BANNER_LINK_ACCESSKEY:
					if (BannerLinkBtn.style.display != "none")
						BannerLinkLabel.click();
					break;
				case LBL_COMMUNITY_LINK_ACCESSKEY:
					if (Community.style.display != "none")
						CommunityFrame.LaunchCommunity();
					break;
				case LBL_BTN_GO_ACCESSKEY:
				    if(imgBasicSearchGo.style.display != "none")
				        imgBasicSearchGo.click();
				    break;
				case LBL_TEXT_VIEW_ACCESSKEY:
				    if(imgTextView.style.display != "none")
				        loadTOC();
				    break;
				case LBL_THUMBNAIL_VIEW_ACCESSKEY:
				    if(imgThumbnailView.style.display != "none")
				        getTOCNodes();
				    break;
				case LBL_SEARCH_INPUT_ACCESSKEY:
				    idsearchinput.focus();						    
				    break;					    
			}
		}
		
		if (oEvent.ctrlKey)
		{
			switch (oEvent.keyCode)
			{
				case ASCII_KEYCODE_CTRL_J:
					ContentFrame.focus();
					break;
				case ASCII_KEYCODE_CTRL_Q:
					DisplayHelp(1);
					break;
				case ASCII_KEYCODE_CTRL_1:
					TocBtn.focus();
					break;
				case ASCII_KEYCODE_CTRL_2:
					TocFrame.focus();
					break;
				case ASCII_KEYCODE_CTRL_3:
					if (WheelNotesTbl.style.display != "none")
						TopicWheelFrame.focus();
					else if (ContentFrame.scoNavigation)
						ContentFrame.scoNavigation.focus();
					break;
				case ASCII_KEYCODE_CTRL_4:
					if (WheelNotesTbl.style.display != "none")
						NotesFrame.focus();
					else if (ContentFrame.notesContent)
						ContentFrame.notesContent.focus();
					break;
				case ASCII_KEYCODE_CTRL_5:
					if (!PreviousBtn.disabled)
						PreviousBtn.focus();
					else
						NextBtn.focus();
					break;
			}
		}
	}
	catch(e)
	{
	}
}
/* ------------------- Resizing the searchResultFrame -------------*/
function searchFrame_mousedown()
{
    isSearchResize = true;
    if(window.ActiveXObject)
        tdResizeSearchFrame.setCapture();
    else
	    divSep.addEventListener("mousemove",tdResizeSearchFrame_onmousemove,false);
}

function searchFrame_mouseup()
{
    isSearchResize = false;
    if(window.ActiveXObject)
        tdResizeSearchFrame.releaseCapture();
    else
	    divSep.removeEventListener("mousemove",tdResizeSearchFrame_onmousemove,false);
        
}
function tdResizeSearchFrame_onmousemoveFF(event) 
{
    tdResizeSearchFrameMove(event.screenX);
}

function tdResizeSearchFrame_onmousemove(event) 
{
    if(window.ActiveXObject)
    {
	    if (event.button == MOUSE_BUTTON_LEFT)
			    tdResizeSearchFrameMove(event.clientX);
	}else
        tdResizeSearchFrameMove(event.screenX);
}
function tdResizeSearchFrame_onkeypress() 
{
    var evX = searchResultsFrame.document.body.style.posWidth;
	var nDelta = (document.dir == "rtl") ? -10 : 10;
	
	switch (event.keyCode)
	{
		case ASCII_KEYCODE_ARROW_RIGHT:
			evX += nDelta;
			break;
		case ASCII_KEYCODE_ARROW_LEFT:
			evX -= nDelta;
			break;
		default:
			return;
	}
	tdResizeSearchFrameMove(document.body.clientWidth - evX);
	window.scrollBy(-evX,0);
}
function tdResizeSearchFrameMove(evX)
{
    evX+=7;
    if(isSearchResize)
    {
	    //var nSearchFrameStyle = document.getElementById("searchResultsFrame").document.body.style;
	    //var divSepSearch = document.getElementById("tdResizeSearchFrame").clientWidth;
	    var nDocBodyWidth = document.body.clientWidth;
	    if ((nDocBodyWidth - evX) <= (nDocBodyWidth - g_oTocFrame.clientWidth - 75)) 
        {
            document.getElementById("searchResultsFrame").width = (nDocBodyWidth - (evX)) + 'px';
            ContentAreaTbl.width = (document.body.clientWidth - (document.getElementById("searchResultsFrame").width)) + 'px';
            //window.onresize();
        }
    }

}

// SIG // Begin signature block
// SIG // MIIbDwYJKoZIhvcNAQcCoIIbADCCGvwCAQExCzAJBgUr
// SIG // DgMCGgUAMGcGCisGAQQBgjcCAQSgWTBXMDIGCisGAQQB
// SIG // gjcCAR4wJAIBAQQQEODJBs441BGiowAQS9NQkAIBAAIB
// SIG // AAIBAAIBAAIBADAhMAkGBSsOAwIaBQAEFHBxAuWcbfVO
// SIG // CKl1KhlEMTewaEcNoIIV6jCCBIUwggNtoAMCAQICCmEF
// 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 // gjcCARUwIwYJKoZIhvcNAQkEMRYEFKosDRfDcCQ8B/sF
// SIG // S14VbSkadm3HMF4GCisGAQQBgjcCAQwxUDBOoCaAJABN
// SIG // AGkAYwByAG8AcwBvAGYAdAAgAEwAZQBhAHIAbgBpAG4A
// SIG // Z6EkgCJodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vbGVh
// SIG // cm5pbmcgMA0GCSqGSIb3DQEBAQUABIIBAHuizLZ40owd
// SIG // w6X7eQ2L2/A+QJNdW6r8gPNWo6TF/gloA1ChYJSuYXta
// SIG // P6GGoglyHaHYEhs2MBC9dtSYiBPDBZvYBCVazSwkBWYP
// SIG // rn7He8QTk9E78qAvRrVjTpI9nesf2avMF5VBAw8SX/8F
// SIG // x/LOqMonaBMFR/Vrs7xxvWsbiHZJv9d39VgFs3npHo/e
// SIG // z+6x8tj7jqatTCAr0fdRQEzLgpjQI3L4vRdV1ggwspW8
// SIG // D4A7kLTEsXz/ufchHhDhiwZiHDpkIUOvptVQ2yCipF/G
// SIG // JYFpEqkeDLfEHM1Poiu1o3bAr+DDbW6H43iCtfEMtgi2
// SIG // 8Y3XEF4KpKx2Fa2QkUT7ivuhggIdMIICGQYJKoZIhvcN
// SIG // AQkGMYICCjCCAgYCAQEwgYUwdzELMAkGA1UEBhMCVVMx
// SIG // EzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1Jl
// SIG // ZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3Jh
// SIG // dGlvbjEhMB8GA1UEAxMYTWljcm9zb2Z0IFRpbWUtU3Rh
// SIG // bXAgUENBAgphFrUpAAAAAAAQMAcGBSsOAwIaoF0wGAYJ
// SIG // KoZIhvcNAQkDMQsGCSqGSIb3DQEHATAcBgkqhkiG9w0B
// SIG // CQUxDxcNMTAwMjE5MjIzNzQxWjAjBgkqhkiG9w0BCQQx
// SIG // FgQU/+96SBsGekYxfobvk8WIJ+JdHYowDQYJKoZIhvcN
// SIG // AQEFBQAEggEAHYzWiALSpCuD9tgZxzpqvrd4G+EWerib
// SIG // q6VqFpeKmcwrJa3kJlQQSbRbaZTUlDaC9OTh6HywGKRn
// SIG // uS51xNU+FkuxzFOI3ijSVFV4cu72cOf+3yT9I+J3jQbn
// SIG // ChLTb8BHmwHzButSd+2FUzLRSLJRwwqueZ6n2DwsTQYB
// SIG // ib6OdDE+Mm9IgtFeSKY0HphSOPOJLunVfVWagjzmNuBf
// SIG // L3ToLoYS2zf2ijHqgLA6FB4YLHbU4p9xeIVF6pSDf6I3
// SIG // 0F7Uc+6oy58YBuRp1YuGCD8s0nQgvFjB2iGcFG5fbJ2j
// SIG // MHqqTUdM/wyTURFhoe+5oHn8ovRWh0wzYe0O65qKt+E1Qg==
// SIG // End signature block
