{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./target/debug/2P/derived/ui/dojo/_base/lang.js","webpack:///./target/debug/2P/derived/ui/mw-log/Log.js","webpack:///./target/debug/2P/derived/ui/dojo/_base/declare.js","webpack:///./target/debug/2P/derived/ui/dojo/_base/kernel.js","webpack:///./target/debug/2P/derived/ui/dojo/has.js","webpack:///./target/debug/2P/derived/ui/dojo/sniff.js","webpack:///./target/debug/2P/derived/ui/dojo/aspect.js","webpack:///./target/debug/2P/derived/ui/dojo/dom.js","webpack:///./target/debug/2P/derived/ui/dojo/on.js","webpack:///./target/debug/2P/derived/ui/dojo/_base/array.js","webpack:///./target/debug/2P/derived/ui/dojo/_base/Deferred.js","webpack:///./target/debug/2P/derived/ui/dojo/_base/window.js","webpack:///./target/debug/2P/derived/ui/mw-remote/RemoteEndPointsManager.js","webpack:///./target/debug/2P/derived/ui/dojo/Deferred.js","webpack:///./target/debug/2P/derived/ui/dojo/_base/config.js","webpack:///./node_modules/dojo-webpack-plugin/lib/NoModule.js","webpack:///./target/debug/2P/derived/ui/dojo/errors/CancelError.js","webpack:///./target/debug/2P/derived/ui/dojo/promise/Promise.js","webpack:///./target/debug/2P/derived/ui/mw-statemachine/statemachineimpl/Trigger.js","webpack:///./target/debug/2P/derived/ui/dojo/dom-construct.js","webpack:///./target/debug/2P/derived/ui/dojo/request/util.js","webpack:///./target/debug/2P/derived/ui/dojo/io-query.js","webpack:///./target/debug/2P/derived/ui/dojo/json.js","webpack:///./target/debug/2P/derived/ui/lit/lit-element/lit-element.bundled.js","webpack:///./target/debug/2P/derived/ui/mw-ddux/Sender.js","webpack:///./target/debug/2P/derived/ui/dojo/global.js","webpack:///./target/debug/2P/derived/ui/dojo/errors/create.js","webpack:///./target/debug/2P/derived/ui/mw-remote/iframeproxy/IframeProxyClient.js","webpack:///./target/debug/2P/derived/ui/dojo/dom-style.js","webpack:///./target/debug/2P/derived/ui/dojo/request/watch.js","webpack:///./target/debug/2P/derived/ui/dojo/errors/RequestError.js","webpack:///./target/debug/2P/derived/ui/mw-remote/impl/Transaction.js","webpack:///./target/debug/2P/derived/ui/mw-utils/Utils.js","webpack:///./target/debug/2P/derived/ui/mw-remote/utils/SendMessageUtil.js","webpack:///./node_modules/dojo-webpack-plugin/loaders/dojo/runner.js","webpack:///./target/debug/2P/derived/ui/cometd/cometd.js","webpack:///./target/debug/2P/derived/ui/mw-messageservice/messageserviceimpl/instanceEnums.js","webpack:///./target/debug/2P/derived/ui/mw-widget-api/WidgetBase.js","webpack:///./target/debug/2P/derived/ui/mw-widget-api/defineWidget.js","webpack:///./target/debug/2P/derived/ui/mw-widget-api/facade/html.js","webpack:////tmp/tmp-76940kQBoXn1fHSwj/dojo/dojo.js","webpack:///./target/debug/2P/derived/ui/mw-log/impl/Modes.js","webpack:///./target/debug/2P/derived/ui/mw-log/util/LogUtils.js","webpack:///./target/debug/2P/derived/ui/mw-messageservice/MessageService.js","webpack:///./target/debug/2P/derived/ui/dojo/Evented.js","webpack:///./target/debug/2P/derived/ui/dojo/topic.js","webpack:///./target/debug/2P/derived/ui/mw-remote/Remote.js","webpack:///./target/debug/2P/derived/ui/dojo/_base/connect.js","webpack:///./target/debug/2P/derived/ui/dojo/_base/sniff.js","webpack:///./target/debug/2P/derived/ui/mw-deprecation-utils/deprecation.js","webpack:///./target/debug/2P/derived/ui/dojo/_base/xhr.js","webpack:///./target/debug/2P/derived/ui/dojo/request/xhr.js","webpack:///./target/debug/2P/derived/ui/mw-html-utils/HtmlUtils.js","webpack:///./target/debug/2P/derived/ui/mw-messageservice/messageserviceimpl/transportEnums.js","webpack:///./target/debug/2P/derived/ui/mw-rating/Rating.js","webpack:///./target/debug/2P/derived/ui/dojo/i18n.js","webpack:///./assets/main_application.js","webpack:///./target/debug/2P/derived/ui/mw-ddux/UsageLogger.js","webpack:///./target/debug/2P/derived/ui/mw-ddux/DirectSender.js","webpack:///./target/debug/2P/derived/ui/mw-log/impl/Levels.js","webpack:///./target/debug/2P/derived/ui/mw-log/impl/Backlog.js","webpack:///./target/debug/2P/derived/ui/mw-ddux/DirectSendFunction.js","webpack:///./target/debug/2P/derived/ui/mw-ddux/MatlabSender.js","webpack:///./target/debug/2P/derived/ui/mw-messageservice/messageserviceimpl/createMessageServiceDefaultInstance.js","webpack:///./target/debug/2P/derived/ui/mw-messageservice/messageserviceimpl/MessageServiceBase.js","webpack:///./target/debug/2P/derived/ui/mw-messageservice/messageserviceimpl/MessageServiceState.js","webpack:///./target/debug/2P/derived/ui/mw-statemachine/StateMachine.js","webpack:///./target/debug/2P/derived/ui/mw-statemachine/statemachineimpl/State.js","webpack:///./target/debug/2P/derived/ui/mw-statemachine/statemachineimpl/EventTrigger.js","webpack:///./target/debug/2P/derived/ui/mw-statemachine/statemachineimpl/MessageTrigger.js","webpack:///./target/debug/2P/derived/ui/mw-statemachine/statemachineimpl/RemoteTrigger.js","webpack:///./target/debug/2P/derived/ui/dojo/when.js","webpack:///./target/debug/2P/derived/ui/dojo/_base/event.js","webpack:///./target/debug/2P/derived/ui/dojo/dom-geometry.js","webpack:///./target/debug/2P/derived/ui/dojo/mouse.js","webpack:///./target/debug/2P/derived/ui/dojo/keys.js","webpack:///./target/debug/2P/derived/ui/dojo/dom-attr.js","webpack:///./target/debug/2P/derived/ui/dojo/dom-prop.js","webpack:///./target/debug/2P/derived/ui/mw-remote/iframeproxy/CheckUrlService.js","webpack:///./target/debug/2P/derived/ui/dojo/request/script.js","webpack:///./target/debug/2P/derived/ui/dojo/errors/RequestTimeoutError.js","webpack:///./target/debug/2P/derived/ui/mw-remote/impl/FaultManager.js","webpack:///./target/debug/2P/derived/ui/mw-remote/impl/RequestManager.js","webpack:///./target/debug/2P/derived/ui/mw-remote/EndPointsManager.js","webpack:///./target/debug/2P/derived/ui/mw-remote/defaultMessageMapping.js","webpack:///./target/debug/2P/derived/ui/mw-remote/impl/ResponseManager.js","webpack:///./target/debug/2P/derived/ui/mw-remote/impl/AutoDetectedTransaction.js","webpack:///./target/debug/2P/derived/ui/mw-remote/impl/JsonTransaction.js","webpack:///./target/debug/2P/derived/ui/dojo/dom-form.js","webpack:///./target/debug/2P/derived/ui/dojo/_base/json.js","webpack:///./target/debug/2P/derived/ui/dojo/request/handlers.js","webpack:///./target/debug/2P/derived/ui/mw-remote/UploadToWorker.js","webpack:///./target/debug/2P/derived/ui/mw-html-utils/_parseHtml/sanitize.js","webpack:///./target/debug/2P/derived/ui/mw-remote/ReplaceUploadIframe.js","webpack:///./target/debug/2P/derived/ui/mw-remote/utils/RemoteUrlUtils.js","webpack:///./node_modules/dojo-webpack-plugin/loaders/dojo/loaderProxy","webpack:///./target/debug/2P/derived/ui/mw-remote/serviceRegistryLookup.js","webpack:///./target/debug/2P/derived/ui/mw-statemachine/statemachineimpl/TimeoutTrigger.js","webpack:///./target/debug/2P/derived/ui/mw-statemachine/statemachineimpl/Transition.js","webpack:///./target/debug/2P/derived/ui/mw-messageservice/messageserviceimpl/isValidChannel.js","webpack:///./target/debug/2P/derived/ui/mw-messageservice/messageserviceimpl/MessageServiceAsync.js","webpack:///./target/debug/2P/derived/ui/cometd/AckExtension.js","webpack:///./target/debug/2P/derived/ui/mw-messageservice/messageserviceimpl/messageServiceFactory.js","webpack:///./target/debug/2P/derived/ui/mw-ddux/StubSender.js","webpack:///./target/debug/2P/derived/ui/mw-widget-api/facade/LitElement.js","webpack:///./target/debug/2P/derived/ui/lit/reactive-element/reactive-element.js","webpack:///./target/debug/2P/derived/ui/lit/reactive-element/css-tag.js","webpack:///./target/debug/2P/derived/ui/lit/reactive-element/custom-elements-es5-adapter.js","webpack:///./target/debug/2P/derived/ui/lit/lit-html/lit-html.js","webpack:///./target/debug/2P/derived/ui/mw-widget-api/facade/render.js","webpack:///./target/debug/2P/derived/ui/mw-widget-api/facade/svg.js","webpack:///./target/debug/2P/derived/ui/mw-rating/nls/main.js?46ad","webpack:///./target/debug/2P/derived/ui/mw-rating/nls/main.js","webpack:///./target/debug/2P/derived/ui/mw-rating-feedback/RatingFeedback.js","webpack:///./target/debug/2P/derived/ui/mw-rating-feedback/nls/main.js?bd06","webpack:///./target/debug/2P/derived/ui/mw-rating-feedback/nls/main.js","webpack:///./target/debug/2P/derived/ui/mw-rating-feedback/impl/RatingFeedbackStep.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","toUrl","referenceModule","loaderScope","require","toAbsMid","req","config","dependencies","callback","contextRequire","findModule","mid","noInstall","asModuleObj","result","split","map","segment","charAt","join","absMids","Error","a1","a2","a3","type","__DOJO_WEBPACK_DEFINE_PROMISE__","errors","forEach","push","e","error","length","isDefinePromise","Promise","all","wrapPromises","then","deps","apply","this","unwrapPromises","catch","err","console","src","info","signal","Array","isArray","__DOJO_WEBPACK_PROMISE_VALUE__","values","some","dep","absMidsById","async","globalObj","window","s","registerAbsMids","dj","undef","webpackModule","id","set","configurable","h","expr","normalize","arg","undefined","defArray","defFactory","defModule","promise","w","u","document","global","dojoConfig","userConfig","dest","mix","absMid","originalToAbsMid","indexOf","pkgName","substring","pkg","packs","realMain","url","originalToUrl","parts","test","keys","main","reduce","acc","pathComp","dojo","has","add","toString","_extraNames","_extraLen","getProp","context","scopeMap","shift","opts","efficient","obj","offset","startWith","concat","slice","_pattern","lang","_mixin","source","copyFunc","empty","mixin","sources","arguments","setObject","pop","getObject","exists","isString","it","String","isFunction","isObject","isArrayLike","tagName","toLowerCase","isFinite","isAlien","extend","ctor","props","_hitchArgs","scope","method","pre","_toArray","named","args","f","hitch","delegate","TMP","tmp","slow","arr","x","partial","clone","nodeType","cloneNode","Date","getTime","RegExp","constructor","trim","str","replace","tmpl","pattern","_","k","Modes","Levels","Backlog","LogUtils","backlog","levelOf","callbacks","nextCallbackId","globalThreshold","DEBUG","DEVELOPMENT","groupStack","loggers","Log","makeReadOnlyProperty","_timers","_threshold","_showTimestamp","level","objectValues","development","_sanitizeLevel","_sanitizeMode","label","currentTimeString","data","_shouldLog","message","namespace","time","printToConsole","_nameAndTime","execCallbacks","trace","stack","includes","warn","delta","collapsed","_group","groupName","condition","description","assertParams","varArgs","_basicLogMethod","useBacklog","applyCallback","remover","position","remove","newLogger","xtor","op","counter","cname","msg","cls","inherited","a","g","chains","bases","caller","meta","base","proto","opf","pos","cache","_inherited","callee","TypeError","declaredClass","nom","_meta","hidden","getInherited","__inherited","Function","inheritedImpl","isDebug","isInstanceOf","mixOwn","target","extraNames","declare","safeMixin","createSubclass","mixins","chain","reversed","b","step","forceNew","applyNew","className","superclass","parents","j","lin","top","rec","refs","roots","nameMap","clsCount","count","c3mro","postscript","simpleConstructor","ctorSpecial","a0","preamble","singleConstructor","preArgs","chainedConstructor","item","dijit","dojox","packageMap","match","_scopeName","noGlobals","baseUrl","isAsync","locale","rev","version","major","minor","patch","flag","revision","NaN","v","exit","exitcode","quit","log","tn","cn","tcn","unshift","_fake","deprecated","experimental","behaviour","extra","removal","moduleName","modulePaths","paths","moduleUrl","_hasResource","isBrowser","location","doc","element","createElement","now","force","process","versions","node","v8","load","Packages","addEventListener","navigator","maxTouchPoints","msMaxTouchPoints","pointerEnabled","msPointerEnabled","screen","availWidth","innerWidth","form","attributes","clearElement","innerHTML","tokens","skip","term","parentRequire","loaded","dua","userAgent","dav","appVersion","tv","parseFloat","compatMode","$1","os","SVGAngle","isIE","documentMode","Math","floor","opera","wiiremote","aspect","methodName","advice","receiveArguments","dispatcher","existing","executionId","nextId","before","next","around","results","after","newResults","previous","advised","advise","win","kernel","execCommand","dom","byId","_d","te","getElementById","eles","nodeName","contains","isDescendant","ancestor","parentNode","style","prefixes","cssUserSelect","setSelectable","selectable","nodes","getElementsByTagName","removeAttribute","setAttribute","ScriptEngineMajorVersion","ScriptEngineMinorVersion","Event","stopImmediatePropagation","EventDelegate","createEvent","eventDelegate","on","listener","dontFix","parse","addListener","pausable","paused","pause","resume","once","matchesTarget","events","eventName","handles","touchEvents","selector","fixTouchListener","addStopImmediate","capture","captures","adjustedType","removeEventListener","fixAttach","attachEvent","syntheticPreventDefault","cancelable","defaultPrevented","syntheticStopPropagation","bubbles","matches","children","query","eventType","bubble","select","eventTarget","event","selectorTarget","syntheticDispatch","emit","newEvent","preventDefault","stopPropagation","focusin","focusout","immediatelyStopped","modified","dispatchEvent","ownerDocument","nativeEvent","initEvent","_fixEvent","evt","sender","parentWindow","lastEvent","srcElement","currentTarget","relatedTarget","fromElement","toElement","charCode","keyCode","_setKeyChar","IESignal","handle","_dojoIEListeners_","setTimeout","fixListener","emitter","listeners","oldListener","keyChar","fromCharCode","charOrCode","cancelBubble","_preventDefault","bubbledKeyCode","ctrlKey","returnValue","windowOrientation","orientation","originalEvent","corrected","rotation","scale","TouchEvent","firstChangeTouch","changedTouches","buildFn","everyOrSome","every","fn","index","up","lOver","uOver","from","last","array","lastIndexOf","end","thisObject","Ctr","out","filter","clearCache","NewDeferred","CancelError","when","mutator","freeze","Deferred","canceller","finished","canceled","fired","isError","head","nextListener","complete","notify","mutated","progress","func","resolved","instrumentRejected","newResult","deferred","unchanged","reject","resolve","isResolved","isRejected","isFulfilled","isCanceled","errback","update","addCallbacks","resolvedCallback","errorCallback","progressCallback","returnDeferred","cancel","addCallback","addErrback","addBoth","enclosed","ret","body","setContext","globalObject","globalDocument","withGlobal","cbArguments","oldGlob","withDoc","documentObject","pwin","oldDoc","oldQ","oldIE","isQuirks","EndPointsManager","_instance","instrumentation","FULFILLED_ERROR_MESSAGE","freezeObject","signalWaiting","waiting","rejection","signalListener","signalDeferred","makeDeferredSignaler","canceler","fulfilled","captureStackTrace","strict","progback","reason","returnedReason","rawConfig","adviseHas","featureSet","prefix","booting","djConfig","updateLocale","supportedLocales","navigatorLanguage","firstPart","toLocaleLowerCase","language","languages","userLanguage","_testLanguageOverride","dojoType","throwAbstract","valueOrPromise","always","callbackOrErrback","otherwise","traceRejected","triggerHandler","enable","disable","attr","html5domfix","tagWrap","option","tbody","thead","tfoot","tr","td","th","legend","caption","colgroup","col","li","reTag","masterNode","masterNum","masterName","param","tw","post","reverse","_insertBefore","ref","parent","insertBefore","__dojo_html5_tested","div","visibility","childNodes","destroy","toDom","frag","masterId","wrap","fc","df","tag","master","firstChild","removeChild","createDocumentFragment","appendChild","place","refNode","lastChild","nextSibling","_insertAfter","replaceChild","attrs","_empty","canHaveChildren","removeNode","_destroy","RequestError","ioQuery","isArrayBuffer","ArrayBuffer","isBlob","Blob","shouldDeepCopy","FormData","isFormData","Element","isElement","deepCopy","tval","sval","deepCopyArray","clonedArray","svalItem","deepCreate","properties","okHandler","response","dataHandler","text","isValid","isReady","handleResponse","def","responsePromise","dataPromise","prop","addCommonMethods","provider","methods","options","parseArgs","skipData","objectToQuery","preventCache","getHeader","headerName","checkStatus","stat","backstop","enc","encodeURIComponent","pairs","assign","queryToObject","val","dec","decodeURIComponent","qp","hasJSON","JSON","stringify","escapeString","SyntaxError","eval","replacer","spacer","indent","objtype","toJSON","plus","num","valueOf","nextIndent","sep","newLine","itl","res","output","keyStr","ReactiveElement","super","renderOptions","host","_$Dt","createRenderRoot","renderBefore","render","hasUpdated","isConnected","renderRoot","connectedCallback","setConnected","disconnectedCallback","noChange","finalized","_$litElement$","globalThis","litElementHydrateSupport","LitElement","litElementPolyfillSupport","litElementVersions","UpdatingElement","_$AK","_$AL","_exports","default","self","ErrorCtor","connect","domConstruct","CheckUrlService","IframeProxyClient","_messageId","_loaded","_pendingQueue","_transactions","_uploadTargetCallbacks","_checkUrl","_loadTimeoutHandle","_checkUrlTimeout","_errorRate","_inFlightTransactions","_webSocket","setRemotePageHost","computeToken","proxyUrl","_combineUriPaths","_withCredentials","withCredentials","_host","_key","_proxyUrl","_errorLoading","_cleanupFailureChecks","_flushPending","setLatency","latency","_latency","setErrorRate","errorRate","sendMessage","endpoint","transaction","that","headers","optionHeaders","_getNewMessageId","action","_postMessage","_url","_postMessageNow","_handleMessage","messageData","closeEvent","msgEvent","_sendMessageResponse","onWebsocketOpen","onWebsocketClose","onWebsocketMsg","onWebsocketError","responseType","onError","clearTimeout","_handleLoadTimeout","fault","transactions","code","_handleXhrResponse","_handleXhrFault","_sendXHRNow","xhr","header","_this","XMLHttpRequest","onreadystatechange","status","readyState","handleXhrFault","responseText","_noop","open","setRequestHeader","contentType","send","abort","WebSocket","onopen","onmessage","onclose","wasClean","onerror","close","doPost","random","combinedUri","proxyClient","getComputedStyle","toPixel","dv","defaultView","display","currentStyle","opener","avalue","rs","runtimeStyle","cs","sLeft","left","rsLeft","pixelLeft","toPixelValue","astr","af","filters","_getOpacity","Opacity","opacity","_setOpacity","ov","zoom","Enabled","_pixelNamesCache","_pixelRegExp","_toStyleValue","offsetHeight","offsetWidth","_floatAliases","cssFloat","styleFloat","util","RequestTimeoutError","_inFlightIntvl","_inFlight","watchInFlight","dfd","splice","watch","_onAction","startTime","timeout","_onInFlight","clearInterval","setInterval","sync","cancelAll","RemoteEndPointsManager","Utils","requestMessages","responseMessages","uuidClassifierMap","endPointName","allowedMessages","ignoreMessageTypes","addRequestMessage","classifier","isMessageContainerBased","isEndpointMessageContainerBased","uuid","_generateUuid","_filterMessages","originalMessages","filteredMessages","getRequestMessageTypes","getResponseMessageTypes","types","getMessageClassifier","_removeEmptyMessages","_isEmpty","_doSend","_getRequest","_processResponse","_processFault","addIgnoreMessageType","messageType","getArrayLength","generateUuid","deprecation","_uuidFromTemplate","toUpperCase","generateUUIDv4","template","isImageData","ImageData","geckNumber","isWhitespace","removeSurroundingNewLines","getFirstUniqueElement","array1","array2","unique","elem","unionOfWordSets","set1","set2","asString","_stringToArray","union","unionOfArrays","intersectionOfWordSets","intersection","intersectionOfArrays","differenceOfWordSets","difference","differenceOfArrays","arr1","arr2","nonunique","Map","_legacyDifferenceOfArrays","isInBothArrays","elementInArray1","mapOfArray2","idx","arrayEquals","compareFunction","elem1","elem2","len","removeEmptyElements","_isString","sendPayload","endPoint","messageResponse","getIframeProxyClientForEndPoint","getRemoteUrlForEndPoint","sendDataUsingIFrame","responseData","ldr","resolveFn","resultSet","isBuild","Scheduler","_ids","_tasks","register","funktion","unregister","delay","WorkerScheduler","cmd","postMessage","TransportRegistry","_types","_transports","getTransportTypes","findTransportTypes","crossDomain","accept","negotiateTransport","transport","find","clear","reset","init","Transport","_type","_cometd","registered","cometd","unregistered","_notifyTransportTimeout","messages","_getTransportListeners","_info","_debug","getConfiguration","getAdvice","convertToJSON","maxSize","maxSendBayeuxMessageSize","json","convertToMessages","getType","getURL","setURL","envelope","metaConnect","RequestTransport","_super","_self","derive","_requestIds","_metaConnectRequest","_requests","_envelopes","_coalesceEnvelopes","envelopeAndRequest","newEnvelope","newRequest","_onTransportTimeout","request","expired","errorMessage","failure","httpCode","xhrStatus","abortXHR","onFailure","_transportSend","transportSend","maxNetworkDelay","_queueSend","requestId","maxConnections","_metaConnectComplete","_complete","success","nextEnvelope","nextRequest","autoBatch","_metaConnectSend","transportSuccess","responses","onSuccess","transportFailure","metaConnectRequest","state","UNSENT","LongPollingTransport","_supportsCrossDomain","newXMLHttpRequest","xhrSend","packet","_copyContext","onload","statusText","onabort","sameStack","requestHeaders","received","exception","CallbackPollingTransport","jsonp","_failTransportFn","jsonpSend","script","callbackName","start","lengths","urlLength","encodeURI","maxLength","maxURILength","envelopeToSend","begin","xx","WebSocketTransport","_webSocketSupported","_webSocketConnected","_stickyReconnect","_context","_connecting","_connected","_successCallback","_forceClose","webSocketClose","onClose","_sameContext","_storeEnvelope","messageIds","envelopes","_removeEnvelope","removed","ids","_websocketConnect","protocol","webSocket","stickyReconnect","connectTimeout","connectTimer","onOpen","_warn","wsMessage","onMessage","timeouts","_webSocketSend","mIds","_notifyFailure","_send","_notifySuccess","channel","websocketCode","websocketEnabled","baseObject","F","_z85EncodeTable","_z85DecodeTable","Z85","encode","bytes","buffer","Uint8Array","byteLength","remainder","padding","view","DataView","isPadding","getUint8","divisor","decode","string","charIdx","byteIdx","charCodeAt","setUint8","CometD","_scheduler","_name","_crossDomain","_transport","_status","_clientId","_batch","_messageQueue","_internalBatch","_listenerId","_listeners","_transportListeners","_backoff","_scheduledSend","_extensions","_handshakeProps","_handshakeCallback","_advice","_callbacks","_remoteCalls","_handleMessages","_handleFailure","_reestablish","_unconnectTime","_handshakeMessages","_metaConnect","_config","useWorkerScheduler","backoffIncrement","maxBackoff","logLevel","appendMessageTypeToURL","urls","interval","reconnect","maxInterval","_fieldValue","_isAlpha","char","_isNumeric","_isAllowed","_isValidChannel","_isFunction","_zeroPad","pow","_log","logger","getHours","getMinutes","getSeconds","getMilliseconds","_splitURL","exec","_configure","configuration","urlParts","hostAndPort","uri","afterURI","_isCrossDomain","uriSegments","lastSegmentIndex","Worker","URL","blob","blobURL","createObjectURL","worker","_removeListener","subscription","subscriptions","_removeSubscription","_clearSubscriptions","_setStatus","newStatus","_isDisconnected","_nextMessageId","_applyExtension","outgoing","handler","onExtensionException","_applyOutgoingExtensions","extension","_notify","onListenerException","_notifyListeners","channelParts","channelPart","_cancelDelayedSend","_delayedSend","operation","extraPath","messageId","clientId","rcvdMessages","conduit","getTransport","connectionType","_resetBackoff","_flushBatch","_delayedConnect","bayeuxMessage","_connect","_updateAdvice","newAdvice","_disconnect","_notifyTransportException","oldTransport","newTransport","onTransportException","_handshake","handshakeProps","handshakeCallback","transportTypes","minimumVersion","supportedConnectionTypes","_putCallback","_notifyCallback","onCallbackException","_handleCallback","_getCallback","_handleRemoteCall","_handleTransportFailure","failureInfo","_delayedHandshake","_failHandshake","onTransportFailure","_handshakeFailure","cause","_matchMetaConnect","_failConnect","_connectFailure","_failDisconnect","_disconnectFailure","_failSubscribe","_subscribeFailure","_failUnsubscribe","_unsubscribeFailure","_failMessage","_messageFailure","_receive","incoming","_applyIncomingExtensions","successful","reestablish","_handshakeResponse","_connectResponse","_disconnectResponse","_subscribeResponse","_unsubscribeResponse","_messageResponse","_hasSubscriptions","_resolveScopedCallback","_addListener","isListener","deep","objects","propName","targ","failureHandler","transports","getTransportRegistry","getBackoffPeriod","oldTransportType","newTransportType","increaseBackoffPeriod","expiration","resetBackoffPeriod","receive","failureMessage","registerTransport","unregisterTransport","unregisterTransports","findTransport","configure","handshake","disconnect","disconnectProps","disconnectCallback","startBatch","endBatch","_endBatch","batch","addTransportListener","removeTransportListener","removeListener","clearListeners","subscribe","subscribeProps","subscribeCallback","unsubscribe","unsubscribeProps","unsubscribeCallback","resubscribe","clearSubscriptions","publish","content","publishProps","publishCallback","publishBinary","ext","binary","remoteCall","callProps","remoteCallBinary","getStatus","isDisconnected","setBackoffIncrement","period","getBackoffIncrement","setLogLevel","registerExtension","unregisterExtension","getExtension","getName","getClientId","APP_SERVICE_HOST","BASE_PREFIX","BASE_END_POINT","MATLAB_SERVICE_HOST","noOp","ShadowRoot","_experimentalUseShadowDom","eventObj","CustomEvent","detail","removeFn","widgetDefinition","widgetClass","WidgetClass","_observedAttributes","observedAttributes","customElements","define","params","widget","litElementComponents","html","defaultConfig","loaderVersion","noop","vector","uidSeed","hasCache","eval_","hint","listenerQueues","queue","aliases","pathsMapProg","mapProgs","cacheBust","computeMapProg","sort","lhs","rhs","fixupPackageInfo","packageInfo","waitms","packages","packagePaths","star","pair","computeAliases","runMapProg","targetMid","compactPath","path","lastSegment","makeModuleInfo","pid","pack","executed","getModuleInfo_","alwaysCreate","fromPendingCache","midInPackage","mapItem","isRelative","makeError","candidate","getModuleInfo","fixupUrl","moduleInfo","loaderPatch","uid","modes","PRODUCTION","utils","writable","cbList","toLocaleTimeString","hour12","hour","minute","second","createMessageServiceDefaultInstance","MessageServiceAsync","instanceEnums","messageServiceFactory","Remote","defaultInstance","instanceType","appServiceHostInstance","enableServerOnWorkerAsync","disableServerOnWorkerAsync","instances","isStarted","appStart","_startFunction","appStop","stop","defaultStart","defaultStop","newStart","newStop","rewireStartStop","Evented","hub","topic","FaultManager","RequestManager","ResponseManager","Transaction","AutoDetectedTransaction","SendMessageUtil","UploadToWorker","RemoteUrlUtils","serviceRegistryLookup","remote","faultManager","responseManager","requestManager","_serviceRegistryLookup","_uploadParameters","createUploadIframeTarget","cancelUpload","setIframeProxyClientForEndPoint","getEndPointNames","ROUTER_LEAF_SECURE_ENDPOINT","ROUTER_LEAF_INSECURE_ENDPOINT","construct","getRoutingHost","setEndpoint","computeSessionId","getComputeSessionId","registerEndpointLevelFaultHandler","registerDefaultMessageFactory","deregisterDefaultMessageFactory","registerResponseHandler","deregisterResponseHandler","registerFaultHandler","deregisterFaultHandler","registerTopLevelFaultHandler","deregisterTopLevelFaultHandler","setServiceEndPoint","serviceName","routingHost","routingKey","setRoutingHostAndRoutingKey","setServicePathSuffixForEndPoint","pathSuffix","setPathSuffixForEndPoint","ignoreTopLevelFault","setComputeToken","token","setWorkerEndpoint","newRoutingHost","newRoutingKey","WORKER_ENDPOINT","newEndpoint","getServiceRegistryEndpoint","baseHref","href","fakeLink","hostname","port","endPointsCollection","setAllowedMessages","newAllowedMessages","allowAllMessages","getEndPoint","getWorkerRoutingHost","workerRoutingHost","getWorkerRoutingKey","getRoutingKey","getDownloadUrlForFile","filepath","getDownloadurlResponse","downloadUrl","CreateCsrfToken","CreateCsrfTokenResponse","messageFaults","searchParams","csrfToken","upload","artifactsList","destination","uploadParams","createWorkerRoutingHostUrl","sessionId","enableEndPoint","WORKER_ASYNC_ENDPOINT","disableEndPoint","isServerOnWorkerAsyncEnabled","isEndPointEnabled","enableServerOnWorker","disableServerOnWorker","isWorkerEndpointEnabled","setWorkerOnlyMessageTypes","setMessageTypesToEndPoint","handleNonTransactionFault","createNewEndPoint","isEnabled","IframeProxyName","getEndPointByName","setUpNewEndPoint","getUrlForEndPoint","endpointName","eventModule","mouse","connect_","keypress","enter","leave","testKeyEvent","initKeyboardEvent","initKeyEvent","_punctMap","106","111","186","187","188","189","190","191","192","219","220","221","222","229","evtCopyKey","_synthesizeEvent","faux","setKeyChar","keydownSignal","unprintable","shiftKey","_trySetKeyCode","keypressSignal","which","_keypress","connectPublisher","pf","isCopyKey","isFF","isKhtml","isWebKit","isMozilla","isMoz","isOpera","isSafari","isChrome","isMac","isIos","isAndroid","isWii","isAir","dojoConfiguration","consoleLevel","showDeprecationsAsErrors","_isConfigValid","deprecationLevel","ERROR","WARN","replacement","removalVersion","additionalInformation","deprecationConfig","isConfigurationValid","defineProperties","ioq","domForm","_xhr","_xhrObj","_create","cfg","fieldToObject","formToObject","toObject","formToQuery","toQuery","formToJson","toJson","_blockAsync","handlers","_contentHandlers","contentHandlers","fromJson","useCommentedJson","cStartIdx","cEndIdx","responseXML","querySelectorAll","DOMParser","parseFromString","documentElement","ms","dp","ActiveXObject","loadXML","_ioSetArgs","errHandler","ioArgs","formObject","actnNode","getAttributeNode","miArgs","handleAs","ld","ioPublish","_deferredOk","_deferError","failOk","_checkPubCount","_pubCount","_ioCancelAll","_ioNotifyStart","_ioWatch","validCheck","ioCheck","resHandle","_ioAddQueryToUrl","hasBody","rDfd","postData","putData","rawBody","xhrGet","rawXhrPost","xhrPost","rawXhrPut","xhrPut","xhrDelete","_isDocumentOk","_getText","put","del","addListeners","nativeResponseTypes","handleError","getResponseHeader","uploadProgress","onLoad","onProgress","transferType","lengthComputable","total","onDownloadProgress","onUploadProgress","_at","defaultOptions","hasNoData","user","password","hdr","sanitize","HYPERLINK_ESCAPE_REGEXP","HYPERLINK_WITH_PARENTHESIS_ESCAPE_REGEXP","STRONG_ESCAPE_REGEXP","BOLD_LINK_ATTRIBUTE_REGEX","parseQueryString","queryString","search","substr","_parseQueryString","parseUrl","parsedUrl","pathname","hash","escapeHtml","textContent","escapeLinksAndHtml","escapeLinks","newString","normalStrings","aTags","newHyperLink","regexpReplaceFunction","linkUrl","linkLabel","_strongNotEscaped","escapeWhitespace","treatHtmlLikeCommandWindow","addBold","addPreTagToPreserveWhiteSpace","strongMatches","strongSplits","whiteSpaceEscapeFunction","handleAnchors","helpCallback","command","unescape","isElementOverflown","scrollHeight","clientHeight","scrollWidth","clientWidth","sanitizeHtmlFromJava","UNKNOWN","LONG_POLLING","WEBSOCKET","WidgetBase","defineWidget","svg","i18n","LOCALIZED_STRINGS","star0","star1","star2","star3","star4","star5","rating","STAR_SVG","nameCounter","booleanToString","bool","noFocusChange","reflect","Number","doesDisplayRating","Boolean","readOnly","disabled","minimumRating","dataTestId","attribute","_mouseHoveredOnRating","_value","oldValue","parseInt","isNaN","requestUpdate","__overrideRatingHover","_addSVGTemplate","changedProperties","focusedElem","activeElement","blur","_overrideRatingHover","_wasCommit","_focusedValue","newValue","_saveFocusedValue","_noInput","clientX","clientY","pageX","pageY","screenX","screenY","isRealClickEvent","_radioCommit","_eatInternalEvent","updateComplete","checkedButton","querySelector","focus","ratingConfig","number","radioValue","starSvgRef","isDisabled","isChecked","tabindexAttr","_handleRadioButtonChange","_assignChildFocus","hoverOverrideClass","_ratingValueRenderer","ratings","_ratingButtonRenderer","_handleRatingHovered","_handleRadioContainerFocusIn","_handleRadioContainerFocusOut","thisModule","nlsRe","getBundleName","bundleName","getL10nName","bundlePath","bundlePathAndName","localeSpecified","targetLocale","loadTarget","loadList","list","extraLocale","getLocalesToLoad","remaining","finish","preloadDemand","preloadL10n","waitForPreloads","checkForLegacyModules","root","current","ROOT","availableLocales","localeParts","specificity","getAvailableLocales","_v1x","$locale","doLoad","normalizeLocale","isXd","isXdUrl","preloading","preloadWaitQueue","_preloadLocalizations","bundlePrefix","localesGenerated","guaranteedAmdFormat","forEachLocale","preloadingAddLock","preloadingRelLock","cacheId","loc","preload","syncRequire","doRequire","rollup","bundle","_localized","localized","requiredBundles","cacheIds","improveBundle","evalBundle","amdValue","l10nCache","syncLoadNls","getText","names","getLocalization","l10nName","result_","dynamic","UsageLogger","MessageService","Rating","RatingFeedback","ratingValue","commentValue","feedbackId","pageURL","docURL","docURLTemp","docLang","dataset","currentPath","surveyState","sendDirect","applicationName","applicationVersion","logData","comment","context2","eventKey","$","modal","DirectSender","MatlabSender","StubSender","_sender","_uiEventDefaults","_telemetryDefaults","_compositionDefaults","_selectedContext","_elementIdPrefixes","_taps","hasWindow","_isRunning","allowProductScopeOverride","loggerProperties","product","appComponent","artifactType","artifactId","dontSend","isRunning","setDefaults","updatedProperties","identification","ancestorLogger","_getRunningAncestor","doSend","_sendEvent","_composeTelemetryEvent","logUIEvent","eventData","logEvent","assert","elementType","elementId","doLogEvent","_filterElementId","selection","_uiEventInProgress","setSelectedContext","setPrefixesOfElementIdsToRedact","_productAndScopeKey","logComposition","componentCounts","componentProperties","addTap","matchProperties","tapFunction","blockDefault","tap","blocked","matchKeys","allMatch","sendEvent","startsWith","redactedHash","hashString","abs","Sender","sendEventToServer","_sendProperties","applicationKey","sessionKey","postUrl","getPostUrlFromQueryParameter","getPostUrlFromPropertiesAndHostname","sendFromWorker","_worker","sendProperties","pageUrl","queryIndex","endIndex","endPointUrl","integNumber","postURL","sendToDev","integIndex","endPointNumber","release","indexToIntegMap","getIntegNumberForRelease","levels","LOG","TABLE","TIME","DIR","INFO","ASSERT","backlogMaker","size","cleanUpEventType","replaceAll","apiKeys","AIRD1_INSIDE","CLOUD_CENTER","CRASHPAD","DDUX_CLIENT","DESIGN_CLOUD","DESKTOP_MATLAB","DESKTOP_MSH","DOC_FEEDBACK","GDS","INSTALLER","MATLABCONNECTOR","MATLAB_BATCH","MATLAB_EXTENSION_FOR_VSCODE","MATLAB_HOME","MATLAB_MOBILE","MATLAB_ONLINE","MATLAB_PACKAGE_MANAGER","MATLAB_PLAYGROUND","MODELSCAPE","MOSH","MOSH_MSH","MPI","ONLINE_COURSES","POLYSPACE","PRODUCT_INSTALLER_V2","PRODUCT_UNINSTALLER","SEGV","SSI","UNIFIED_ADDON_INSTALLER","UPDATES_INSTALLER","UPDATE_INSTALLER_V2","VRD","WEB_PAGE_METRICS","logDDUXData","keyValues","uiEvent","productName","uiScope","keyValuePairs","entries","entry","eventDataString","eventEntry","eventDate","toISOString","applicationComponent","fetch","ok","_channel","USAGE_DATA_CHANNEL","_responseChannel","USAGE_RESPONSE_CHANNEL","responseChannel","title","MessageServiceBase","messageServiceDelgateInstance","service","messageServiceInstance","messageService","isFatallyDisconnected","onConnected","onDisconnected","onReconnected","onFatallyDisconnected","onNotConnected","handleMessage","internalMotwDisableStart","internalMotwEnableStart","setDelegate","MessageServiceState","isValidChannel","transportEnums","logSubscriptions","batching","typeSerializers","typeDeserializers","channelSubscriptions","_queuedOps","_hasConnected","_delegate","_queuePublish","serialize","_deferProcessQueue","_queueSubscribe","_addHandler","_removeHandler","_removeQueuedMatchingSubscribe","_queueUnsubscribe","flush","_processQueue","doSetLatency","doSetErrorRate","_enterDisconnected","_rejectQueue","_enterConnecting","subscribed","_enterConnected","_enterDisconnecting","_enterFatallyDisconnected","queuedItem","delegateConnected","_currentState","doStartBatch","doPublish","_doSubscribe","_doUnsubscribe","doEndBatch","_deferredTimeout","doSubscribe","doUnsubscribe","deserialize","pathParts","_callHandlers","registerMessageHandler","deregisterMessageHandler","registerTypeSerializer","typeMatcher","serializer","registerTypeDeserializer","deserializer","_serializeArray","_serializeObject","_deserializeArray","_deserializeObject","channelHandlers","exclusive","_getHandlerIndex","jsonIndentation","__type__","__value__","Image","returnedData","returnedArray","StateMachine","logStateChanges","_stateOptions","defaultSubstate","substates","disconnected","transitions","onEnterState","connecting","_connectSuccess","connected","_reconnect","disconnecting","_disconnectSuccess","fatallyDisconnected","_states","_enterState","_changeStateToConnecting","onNewlyConnected","_forceStop","newState","oldState","_previouslyConnected","cleanup","destructCometd","_timeoutAction","State","stateMachine","_changeState","otherArguments","onExitState","EventTrigger","MessageTrigger","RemoteTrigger","TimeoutTrigger","Transition","getDefaultName","composition","constructSubstates","constructTriggersAndTransitions","active","substate","newSubstates","triggerName","newTrigger","newTransitions","newTriggers","constructTrigger","constructTransition","triggers","nameParts","TriggerConstructor","handleTrigger","transition","nextState","enableTriggers","changeSubstates","changeToDefaultSubstate","activeSubstates","disableTriggers","trigger","Trigger","connection","cachedFunction","subscrition","handlerType","receivedPromise","nativePromise","fixEvent","se","normalizeEvent","fix","stopEvent","geom","boxModel","getPadExtents","computedStyle","px","paddingLeft","paddingTop","paddingRight","paddingBottom","none","setBox","width","height","isButtonTag","getAttribute","usesBorderBox","getBoundingClientRect","retEmpty","y","right","bottom","getBorderExtents","borderLeftStyle","borderLeftWidth","borderTopStyle","borderTopWidth","borderRightStyle","borderRightWidth","borderBottomStyle","borderBottomWidth","getPadBorderExtents","getMarginExtents","marginLeft","marginTop","marginRight","marginBottom","getMarginBox","pcs","me","offsetLeft","offsetTop","sl","st","overflow","getContentBox","pe","be","setContentSize","box","pb","nilExtents","setMarginBox","mb","max","isBodyLtr","dir","docScroll","pageXOffset","pageYOffset","fixIeBiDiScrollLeft","scrollLeft","scrollTop","getIeDocumentElementOffset","ie","qk","de","frameElement","clientLeft","includeScroll","db","clientTop","scroll","getMarginSize","layerX","offsetX","layerY","offsetY","docBody","mouseButtons","wheel","eventHandler","selectHandler","LEFT","MIDDLE","RIGHT","isButton","button","isLeft","isMiddle","isRight","wheelDelta","_eventHandler","BACKSPACE","TAB","CLEAR","ENTER","SHIFT","CTRL","ALT","META","PAUSE","CAPS_LOCK","ESCAPE","SPACE","PAGE_UP","PAGE_DOWN","END","HOME","LEFT_ARROW","UP_ARROW","RIGHT_ARROW","DOWN_ARROW","INSERT","DELETE","HELP","LEFT_WINDOW","RIGHT_WINDOW","SELECT","NUMPAD_0","NUMPAD_1","NUMPAD_2","NUMPAD_3","NUMPAD_4","NUMPAD_5","NUMPAD_6","NUMPAD_7","NUMPAD_8","NUMPAD_9","NUMPAD_MULTIPLY","NUMPAD_PLUS","NUMPAD_ENTER","NUMPAD_MINUS","NUMPAD_PERIOD","NUMPAD_DIVIDE","F1","F2","F3","F4","F5","F6","F7","F8","F9","F10","F11","F12","F13","F14","F15","NUM_LOCK","SCROLL_LOCK","UP_DPAD","DOWN_DPAD","LEFT_DPAD","RIGHT_DPAD","copyKey","forcePropNames","htmlFor","attrNames","classname","htmlfor","tabindex","readonly","_hasAttr","specified","lc","forceProp","attrName","getNodeProp","ctr","conn","_evtHdlrMap","_ctr","_attrId","colspan","frameborder","rowspan","textcontent","valuetype","ch","nodeValue","table","createTextNode","attrId","urlToEmptyJsFile","framedoc","frameDoc","loadEvent","readyRegExp","deadScripts","attach","errorHandler","charset","_addDeadScript","canDelete","_remove","_script","isReadyScript","scriptLoaded","isReadyCheckString","checkString","canAttach","_attach","newError","_callbacksProperty","faultHandlers","topLevelHandlers","endPointLevelHandlers","handlerFunction","faultMatcher","matcher","defaultTopLevelHandler","_constructMatcherFromQuery","registrationToken","terms","regexs","regex","faultCode","handleFault","handleWithClassifier","typeWithClassifier","_handleEndpointLevelFault","_handleTopLevelFault","isFaultHandled","matching","matcherAndHandler","defaultMessageMapping","defaultMapping","defaultFactories","mockHandlers","mapping","factoryFunction","registerMockResponseGenerator","mockResponseGenerator","transactionCopy","_processResult","deregisterMockResponseGenerator","endPointNames","mockTransactions","_createAndFillTransactions","_callMocks","handleTransaction","_getTransaction","_getMockTransaction","classifiedType","mockTransaction","addToTransaction","extraMessageType","newMessage","typeParts","newMessageType","newClassifier","extraMessageEndPointName","mockTrans","getEndPointForMessageType","callMocksWithClassifiers","arrayUtils","_initializeEndPointsCollection","iframeProxy","enabled","iframeProxyUrl","iframeProxyName","acceptsMessageContainerMessages","USAGE_DATA_ROUTER_ENDPOINT","HELP_DATA_ROUTER_ENDPOINT","getPathSuffixForEndPoint","endPointsEnumeration","_setIframeRoutingHostAndRoutingkey","iframeProxyClient","getMessageTypesMappedToEndPoint","endPointType","addMessagesTypesToEndPoint","removeMessageTypesFromEndPoint","responseHandlers","_processAll","unclassifiedResponses","responseMessage","handled","requestType","requestMessage","_processUdcResponses","JsonTransaction","_sanitizeForJson","_getEndpoint","stopTime","setValue","inputNode","_in","checked","multiple","selected","formNode","elems","elements","prettyPrint","js","_escapeString","toJsonIndentStr","tf","__json__","handleXML","lastParser","createDocument","handleNativeResponse","HtmlUtils","ReplaceUploadIframe","fsDest","_uploadHandler","postMessageToUploadIframe","_unloadIframe","_workerEndpoint","FileList","uploadToken","validForMs","_initiateUpload","uploadDestinationUrl","routingkey","fileDestination","_eventCallBack","_ReplaceUploadIframe","getHostName","whiteList","whitelistProtocols","allowStyleTag","whiteListStyles","A","ABBR","ADDRESS","AREA","ARTICLE","ASIDE","AUDIO","B","BDI","BDO","BIG","BLOCKQUOTE","BR","CAPTION","CENTER","CITE","CODE","COL","COLGROUP","DD","DEL","DETAILS","DIV","DL","DT","EM","FONT","FOOTER","H1","H2","H3","H4","H5","H6","HEADER","HR","I","IMG","INS","LI","MARK","NAV","OL","P","PRE","S","SECTION","SMALL","SPAN","SUB","SUP","STRONG","TBODY","TD","TFOOT","TH","THEAD","TR","TT","U","UL","VIDEO","relative","htmlToClean","cleanUrl","dirtyUrl","dirtyTrimUrl","locateColon","getCleanNode","dirtyNode","cleanNode","Node","ELEMENT_NODE","whitelistAttrs","dirtyElem","cleanAttrs","attrIndex","attrToCheck","hasAttribute","dirtyValue","cleanValue","getCleanAttrs","wasStyleTagSpecified","styleKey","copyAndSanitizeStyles","TEXT_NODE","dirtyDom","sanitizeDom","dirtyRoot","dirtyChild","tmpNode","_defineProperties","descriptor","_class","instance","Constructor","_classCallCheck","_uploadDestinationUrl","_computeToken","_routingkey","_fileDestination","_csrfToken","protoProps","staticProps","fileList","formData","file","append","onprogress","_postMessageToParent","_createFormDataFromFileList","_createAndSendXhr","absoluteUrlRegex","ALLOWED_LOCAL_DOMAINS","absRemoteUrl","remoteHost","localhostUrl","shouldAddQueryParams","isAbsoluteUrl","origin","localhostPath","loader","runner","attemptedResolution","numServices","_serviceData","serviceregistry","overrideDefaultRemoteEndpoint","serviceRegistryData","defaultRemoteEndpoint","_checkIfDomainIsAllowed","newServiceRegistry","foundPrimaryEndpoint","queryVal","_doSubDomainCheck","incomingDomain","incomingOriginStr","acceptableDomains","domain","endsWith","_doXhr","_reset","timeoutInSeconds","timeoutHandle","checkCondition","runAction","getTarget","targetState","partialTargetState","AckExtension","oldSetTimeout","oldClearTimeout","tick","timeoutHandleCount","timeoutFunctions","execTime","constructCometD","endPointInfo","motwCometD","processMessageAcknowledgement","logCometdLifecycle","logCometdSubscriptions","constructCometDOverride","cometdProperties","workerProxyAsyncClient","MAX_SAFE_INTEGER","dojoConfigOverrides","dojoConfigCometdProps","recentMessages","_deferredCleanupFunction","_deferredCleanup","workerHostOverride","asyncWorkerEndPoint","_setUpEndPoint","_connectedAtLeastOnce","onConnectionError","onConnectionFails","onConnectionSuccess","websocket","enableWebsocket","registerTransports","retryConnectCount","cleanupListeners","_handshakeHandle","deferreds","_connectHandle","_unsuccessHandle","disconnectPromise","doDisconnect","longPollTransport","webSocketTransport","_createOneShotMessagePromise","_getRequestChannel","_handleCometResponse","_shouldHandleMessage","_stripBasePrefixAndConvertToJson","_deferRecentMessagesCleanup","_addOneShotListener","remoteSupportsSendPayload","endPointAllowsDirectXhr","cometdModule","_serverSupportsAcks","ackField","ack","ackEnabled","serviceHostRegEx","getInstance","messageServiceInstances","isAppServiceHost","newInstance","MWLitElement","reactiveElementPolyfillSupport","converter","hasChanged","HTMLElement","_$Et","isUpdatePending","_$Ei","finalize","elementProperties","_$Eh","_$Eu","noAccessor","getPropertyDescriptor","getPrototypeOf","getOwnPropertyNames","getOwnPropertySymbols","createProperty","elementStyles","finalizeStyles","styles","Set","flat","getCompatibleStyle","_$Ev","enableUpdating","_$Ep","_$Em","hostConnected","shadowRoot","attachShadow","shadowRootOptions","adoptStyles","hostDisconnected","toAttribute","getPropertyOptions","fromAttribute","_$ES","_$ET","scheduleUpdate","throw","done","performUpdate","shouldUpdate","willUpdate","hostUpdate","_$EC","_$AE","hostUpdated","firstUpdated","updated","getUpdateComplete","_$Eg","reactiveElementVersions","CSSResult","css","supportsAdoptingStyleSheets","unsafeCSS","defaultConverter","notEqual","ShadyCSS","nativeShadow","Document","CSSStyleSheet","_$cssResult$","cssText","replaceSync","cssRules","adoptedStyleSheets","styleSheet","litNonce","Reflect","polyfillWrapFlushCallback","setPrototypeOf","trustedTypes","createPolicy","createHTML","createComment","iterator","_$litType$","strings","T","for","WeakMap","C","createTreeWalker","lastIndex","V","el","currentNode","nextNode","hasAttributes","getAttributeNames","H","emptyScript","E","_$Cl","_$Cu","_$litDirective$","_$AO","_$AT","_$AS","M","_$AN","_$AD","_$AM","_$AU","creationScope","importNode","N","L","_$AI","_$AH","_$AA","_$AB","_$Cg","_$AR","_$AC","_$AP","fill","passive","handleEvent","R","D","O","W","Z","litHtmlPolyfillSupport","litHtmlVersions","nothing","_$litPart$","container","scopeName","l10n","idCounter","generateId","STEP_TEMPLATES","feedbackWidget","isVisible","steps","_handleNext","_handleKeyCommitsForRating","forwardLabelAria","forwardLabel","BUTTON_TEMPLATE","_steps","_currentValues","_updateValues","_processDomSteps","_getStepsFromDom","feedbackStep","integerStep","domNode","range","createRange","selectNodeContents","extractContents","rawSteps","processedSteps","parsedFeedback","_parseFeedbackStep","stepContents","_extractDomContentToDocFragment","_step","oldVal","min","isComposing","_moveToNextStep","_getWidgetValues","litTemplates"],"mappings":"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","file":"bundle.index.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/\";\n\n\n \t(function() { /* Start undefined extensions */\n \t\t\tfunction mix(dest, src) { // eslint-disable-line no-unused-vars\n \t\t\t\tfor(var n in src) dest[n] = src[n];\n \t\t\t\treturn dest;\n \t\t\t}\n\n \t\t\tfunction toUrl(name, referenceModule) {\n \t\t\t\treturn loaderScope.require.toUrl(name, referenceModule);\n \t\t\t}\n\n \t\t\tfunction toAbsMid(name, referenceModule) {\n \t\t\t\treturn loaderScope.require.toAbsMid(name, referenceModule);\n \t\t\t}\n\n \t\t\t// dojo require function.\n \t\t\tfunction req(config, dependencies, callback) {\n \t\t\t\treturn contextRequire(config, dependencies, callback, 0, req);\n \t\t\t};\n\n \t\t\tfunction createContextRequire(moduleId) { // eslint-disable-line no-unused-vars\n \t\t\t\tif (req.absMidsById[moduleId]) {\n \t\t\t\t\tmoduleId = req.absMidsById[moduleId];\n \t\t\t\t}\n \t\t\t\tif (!moduleId) return req;\n \t\t\t\tvar result = function(a1, a2, a3) {\n \t\t\t\t\treturn contextRequire(a1, a2, a3, moduleId, req);\n \t\t\t\t};\n \t\t\t\tfor (var p in req) {\n \t\t\t\t\tif (req.hasOwnProperty(p)) {\n \t\t\t\t\t\tresult[p] = req[p];\n \t\t\t\t\t}\n \t\t\t\t}\n \t\t\t\tresult.toUrl = function(name) {\n \t\t\t\t\treturn toUrl(name, moduleId ? {mid: moduleId} : null);\n \t\t\t\t};\n \t\t\t\tresult.toAbsMid = function(name) {\n \t\t\t\t\treturn toAbsMid(name, moduleId ? {mid: moduleId} : null);\n \t\t\t\t};\n\n \t\t\t\tif (req.undef) {\n \t\t\t\t\tresult.undef = function(mid) {\n \t\t\t\t\t\treq.undef(mid, moduleId);\n \t\t\t\t\t};\n \t\t\t\t}\n \t\t\t\treturn result;\n \t\t\t}\n\n \t\t\tfunction registerAbsMids(absMids) { // eslint-disable-line no-unused-vars\n \t\t\t\tfor (var s in absMids) {\n \t\t\t\t\treq.absMids[s] = absMids[s];\n \t\t\t\t\tif (!req.absMidsById[absMids[s]]) {\n \t\t\t\t\t\treq.absMidsById[absMids[s]] = s;\n \t\t\t\t\t}\n \t\t\t\t}\n \t\t\t}\n\n \t\t\tfunction resolveTernaryHasExpression(expr) { // eslint-disable-line no-unused-vars\n \t\t\t\t// Expects an expression of the form supported by dojo/has.js loader, except that module identifiers are\n \t\t\t\t// integers corresponding to webpack module ids. Returns a module reference if evaluation of the expression\n \t\t\t\t// using the currently defined features returns a module id, or else undefined.\n\n \t\t\t\tvar has = findModule(\"dojo/has\", null, false);\n \t\t\t\tvar id = has.normalize(expr, function(arg){return arg;});\n \t\t\t\treturn id && __webpack_require__(id) || undefined;\n \t\t\t}\n\n \t\t\tfunction findModule(mid, referenceModule, noInstall, asModuleObj) {\n \t\t\t\tmid = mid.split(\"!\").map(function(segment) {\n \t\t\t\t\tvar isRelative = segment.charAt(0) === '.';\n \t\t\t\t\tif(isRelative && !referenceModule){\n \t\t\t\t\t\treturn segment;\n \t\t\t\t\t}\n \t\t\t\t\treturn toAbsMid(segment, referenceModule ? {mid: referenceModule} : null);\n \t\t\t\t}).join(\"!\");\n \t\t\t\tvar result;\n \t\t\t\tif (mid in req.absMids && __webpack_require__.m[req.absMids[mid]]) {\n \t\t\t\t\tif (noInstall) {\n \t\t\t\t\t\tvar module = installedModules[req.absMids[mid]];\n \t\t\t\t\t\tresult = module && module.l && (asModuleObj ? module : module.exports);\n \t\t\t\t\t} else {\n \t\t\t\t\t\tresult = __webpack_require__(req.absMids[mid]);\n \t\t\t\t\t}\n \t\t\t\t}\n \t\t\t\tif (!result) {\n \t\t\t\t\tthrow new Error('Module not found: ' + mid);\n \t\t\t\t}\n \t\t\t\treturn result;\n \t\t\t}\n\n \t\t\tfunction dojoModuleFromWebpackModule(webpackModule) { // eslint-disable-line no-unused-vars\n \t\t\t\tvar result = {i:webpackModule.i};\n \t\t\t\tvar id = req.absMidsById[webpackModule.i];\n \t\t\t\tif (id) {\n \t\t\t\t\tresult.id = id;\n \t\t\t\t}\n \t\t\t\tObject.defineProperty(result, \"exports\", {\n \t\t\t\t\tget: function() { return webpackModule.exports;},\n \t\t\t\t\tset: function(value) {webpackModule.exports = value;},\n \t\t\t\t\tenumerable: true,\n \t\t\t\t\tconfigurable: true\n \t\t\t\t});\n \t\t\t\treturn result;\n \t\t\t}\n\n \t\t\tfunction contextRequire(a1, a2, a3, referenceModule, req) { // eslint-disable-line no-shadow\n \t\t\t\tvar type = ({}.toString).call(a1);\n \t\t\t\tif (type === '[object String]') {\n \t\t\t\t\t// a3 is passed by require calls injected into dependency arrays for dependencies specified\n \t\t\t\t\t// as identifiers (vs. string literals).\n \t\t\t\t\tvar noInstall = !(a3 === false);\n \t\t\t\t\tvar m = findModule(a1, referenceModule, noInstall);\n \t\t\t\t\tif (typeof m === 'object' && m.__DOJO_WEBPACK_DEFINE_PROMISE__) {\n \t\t\t\t\t\tthrow new Error('Module not found: ' + a1);\n \t\t\t\t\t}\n \t\t\t\t\treturn m;\n \t\t\t\t} else if (type === '[object Object]') {\n \t\t\t\t\tthrow new Error('Require config is not supported by WebPack');\n \t\t\t\t}\n \t\t\t\tif (type === '[object Array]') {\n \t\t\t\t\tvar modules = [], callback = a2, errors = [];\n \t\t\t\t\ta1.forEach(function (mid) {\n \t\t\t\t\t\ttry {\n \t\t\t\t\t\t\tmodules.push(findModule(mid, referenceModule));\n \t\t\t\t\t\t} catch (e) {\n \t\t\t\t\t\t\terrors.push({mid: mid, error: e});\n \t\t\t\t\t\t}\n \t\t\t\t\t});\n \t\t\t\t\tif (errors.length === 0) {\n \t\t\t\t\t\tif (callback) {\n \t\t\t\t\t\t\tif (true && isDefinePromise(modules)) { // eslint-disable-line no-undef\n \t\t\t\t\t\t\t\tPromise.all(wrapPromises(modules)).then(function(deps) { // eslint-disable-line no-undef\n \t\t\t\t\t\t\t\t\tcallback.apply(this, unwrapPromises(deps)); // eslint-disable-line no-undef\n \t\t\t\t\t\t\t\t}.bind(this)).catch(function(err){console.error(err);});\n \t\t\t\t\t\t\t} else {\n \t\t\t\t\t\t\t\tcallback.apply(this, modules);\n \t\t\t\t\t\t\t}\n \t\t\t\t\t\t}\n \t\t\t\t\t} else {\n \t\t\t\t\t\tvar error = new Error(\"findModules\");\n \t\t\t\t\t\terror.src = \"dojo-webpack-plugin\";\n \t\t\t\t\t\terror.info = errors;\n \t\t\t\t\t\treq.signal(\"error\", error);\n \t\t\t\t\t}\n \t\t\t\t\treturn req;\n \t\t\t\t} else {\n \t\t\t\t\tthrow new Error('Unsupported require call');\n \t\t\t\t}\n \t\t\t}\n \t\t\treq.toUrl = toUrl;\n \t\t\treq.toAbsMid = toAbsMid;\n \t\t\treq.absMids = {};\n \t\t\treq.absMidsById = [];\n \t\t\treq.async = 1;\n \t\t\tfunction wrapPromises(deps) {\n \t\t\t\tvar result = (Array.isArray(deps) ? deps : [deps]).map(function(m) {\n \t\t\t\t\treturn (m && typeof m.then === 'function' && !m.__DOJO_WEBPACK_DEFINE_PROMISE__) ? {__DOJO_WEBPACK_PROMISE_VALUE__: m} : m;\n \t\t\t\t});\n \t\t\t\treturn Array.isArray(deps) ? result : result[0];\n \t\t\t}\n\n \t\t\tfunction unwrapPromises(deps) {\n \t\t\t\tvar result = (Array.isArray(deps) ? deps : [deps]).map(function(m) {\n \t\t\t\t\treturn m && m.__DOJO_WEBPACK_PROMISE_VALUE__ || m;\n \t\t\t\t});\n \t\t\t\treturn Array.isArray(deps) ? result : result[0];\n \t\t\t}\n\n \t\t\tfunction isDefinePromise(values) {\n \t\t\t\treturn (Array.isArray(values) ? values : [values]).some(function(dep) {\n \t\t\t\t\treturn typeof dep === 'object' && dep.__DOJO_WEBPACK_DEFINE_PROMISE__;\n \t\t\t\t});\n \t\t\t}\n\n \t\t\tfunction asyncDefineModule(defArray, defFactory, module, exports) { // eslint-disable-line no-unused-vars\n\n \t\t\t\tfunction setDefinePromise(promise) {\n \t\t\t\t\tpromise.__DOJO_WEBPACK_DEFINE_PROMISE__ = true;\n \t\t\t\t\treturn promise;\n \t\t\t\t}\n\n \t\t\t\tfunction defModule(deps) {\n \t\t\t\t\tmodule && (module.exports = exports);\n \t\t\t\t\tvar result = defFactory.apply(null, deps);\n \t\t\t\t\tif (typeof module === 'function') {\n \t\t\t\t\t\t// module is actually a callback function\n \t\t\t\t\t\tmodule(result);\n \t\t\t\t\t} else {\n \t\t\t\t\t\tif (result !== undefined) {\n \t\t\t\t\t\t\tmodule.exports = result;\n \t\t\t\t\t\t} else {\n \t\t\t\t\t\t\tresult = module.exports;\n \t\t\t\t\t\t}\n \t\t\t\t\t}\n \t\t\t\t\treturn result;\n \t\t\t\t}\n\n \t\t\t\tif (!isDefinePromise(defArray)) {\n \t\t\t\t\treturn defModule(defArray);\n \t\t\t\t} else {\n \t\t\t\t\treturn setDefinePromise(Promise.all(defArray).then(function(deps) {\n \t\t\t\t\t\treturn wrapPromises(defModule(unwrapPromises(deps)));\n \t\t\t\t\t}));\n \t\t\t\t}\n \t\t\t}\n \t\tvar globalObj = this||window;\n \t\tregisterAbsMids({\n \t\t\t\"dojo/_base/lang\":0,\n \t\t\t\"mw-log/Log\":1,\n \t\t\t\"dojo/_base/declare\":2,\n \t\t\t\"dojo/_base/kernel\":3,\n \t\t\t\"dojo/has\":4,\n \t\t\t\"dojo/sniff\":5,\n \t\t\t\"dojo/aspect\":6,\n \t\t\t\"dojo/dom\":7,\n \t\t\t\"dojo/on\":8,\n \t\t\t\"dojo/_base/array\":9,\n \t\t\t\"dojo/_base/Deferred\":10,\n \t\t\t\"dojo/_base/window\":11,\n \t\t\t\"mw-remote/RemoteEndPointsManager\":12,\n \t\t\t\"dojo/Deferred\":13,\n \t\t\t\"dojo/_base/config\":14,\n \t\t\t// \"/mathworks/devel/sandbox/csun/workspaces/docsurvey/node_modules/dojo-webpack-plugin/lib/NoModule.js\" = 15\n \t\t\t\"dojo/errors/CancelError\":16,\n \t\t\t\"dojo/promise/Promise\":17,\n \t\t\t\"mw-statemachine/statemachineimpl/Trigger\":18,\n \t\t\t\"dojo/dom-construct\":19,\n \t\t\t\"dojo/request/util\":20,\n \t\t\t\"dojo/io-query\":21,\n \t\t\t\"dojo/json\":22,\n \t\t\t\"lit/lit-element/lit-element.bundled\":23,\n \t\t\t\"mw-ddux/Sender\":24,\n \t\t\t\"dojo/global\":25,\n \t\t\t\"dojo/errors/create\":26,\n \t\t\t\"mw-remote/iframeproxy/IframeProxyClient\":27,\n \t\t\t\"dojo/dom-style\":28,\n \t\t\t\"dojo/request/watch\":29,\n \t\t\t\"dojo/errors/RequestError\":30,\n \t\t\t\"mw-remote/impl/Transaction\":31,\n \t\t\t\"mw-utils/Utils\":32,\n \t\t\t\"mw-remote/utils/SendMessageUtil\":33,\n \t\t\t// \"/mathworks/devel/sandbox/csun/workspaces/docsurvey/node_modules/dojo-webpack-plugin/loaders/dojo/runner.js\" = 34\n \t\t\t\"cometd/cometd\":35,\n \t\t\t\"mw-messageservice/messageserviceimpl/instanceEnums\":36,\n \t\t\t\"mw-widget-api/WidgetBase\":37,\n \t\t\t\"mw-widget-api/defineWidget\":38,\n \t\t\t\"mw-widget-api/facade/html\":39,\n \t\t\t// \"/tmp/tmp-76940kQBoXn1fHSwj/dojo/dojo.js\" = 40\n \t\t\t\"mw-log/impl/Modes\":41,\n \t\t\t\"mw-log/util/LogUtils\":42,\n \t\t\t\"mw-messageservice/MessageService\":43,\n \t\t\t\"dojo/Evented\":44,\n \t\t\t\"dojo/topic\":45,\n \t\t\t\"mw-remote/Remote\":46,\n \t\t\t\"dojo/_base/connect\":47,\n \t\t\t\"dojo/_base/sniff\":48,\n \t\t\t\"mw-deprecation-utils/deprecation\":49,\n \t\t\t\"dojo/_base/xhr\":50,\n \t\t\t\"dojo/request/xhr\":51,\n \t\t\t\"mw-html-utils/HtmlUtils\":52,\n \t\t\t\"mw-messageservice/messageserviceimpl/transportEnums\":53,\n \t\t\t\"mw-rating/Rating\":54,\n \t\t\t\"dojo/i18n\":55,\n \t\t\t// \"/mathworks/devel/sandbox/csun/workspaces/docsurvey/assets/main_application.js\" = 56\n \t\t\t\"mw-ddux/UsageLogger\":57,\n \t\t\t\"mw-ddux/DirectSender\":58,\n \t\t\t\"mw-log/impl/Levels\":59,\n \t\t\t\"mw-log/impl/Backlog\":60,\n \t\t\t\"mw-ddux/DirectSendFunction\":61,\n \t\t\t\"mw-ddux/MatlabSender\":62,\n \t\t\t\"mw-messageservice/messageserviceimpl/createMessageServiceDefaultInstance\":63,\n \t\t\t\"mw-messageservice/messageserviceimpl/MessageServiceBase\":64,\n \t\t\t\"mw-messageservice/messageserviceimpl/MessageServiceState\":65,\n \t\t\t\"mw-statemachine/StateMachine\":66,\n \t\t\t\"mw-statemachine/statemachineimpl/State\":67,\n \t\t\t\"mw-statemachine/statemachineimpl/EventTrigger\":68,\n \t\t\t\"mw-statemachine/statemachineimpl/MessageTrigger\":69,\n \t\t\t\"mw-statemachine/statemachineimpl/RemoteTrigger\":70,\n \t\t\t\"dojo/when\":71,\n \t\t\t\"dojo/_base/event\":72,\n \t\t\t\"dojo/dom-geometry\":73,\n \t\t\t\"dojo/mouse\":74,\n \t\t\t\"dojo/keys\":75,\n \t\t\t\"dojo/dom-attr\":76,\n \t\t\t\"dojo/dom-prop\":77,\n \t\t\t\"mw-remote/iframeproxy/CheckUrlService\":78,\n \t\t\t\"dojo/request/script\":79,\n \t\t\t\"dojo/errors/RequestTimeoutError\":80,\n \t\t\t\"mw-remote/impl/FaultManager\":81,\n \t\t\t\"mw-remote/impl/RequestManager\":82,\n \t\t\t\"mw-remote/EndPointsManager\":83,\n \t\t\t\"mw-remote/defaultMessageMapping\":84,\n \t\t\t\"mw-remote/impl/ResponseManager\":85,\n \t\t\t\"mw-remote/impl/AutoDetectedTransaction\":86,\n \t\t\t\"mw-remote/impl/JsonTransaction\":87,\n \t\t\t\"dojo/dom-form\":88,\n \t\t\t\"dojo/_base/json\":89,\n \t\t\t\"dojo/request/handlers\":90,\n \t\t\t\"mw-remote/UploadToWorker\":91,\n \t\t\t\"mw-html-utils/_parseHtml/sanitize\":92,\n \t\t\t\"mw-remote/ReplaceUploadIframe\":93,\n \t\t\t\"mw-remote/utils/RemoteUrlUtils\":94,\n \t\t\t\"mw-remote/serviceRegistryLookup!\":95,\n \t\t\t\"mw-remote/serviceRegistryLookup\":96,\n \t\t\t\"mw-statemachine/statemachineimpl/TimeoutTrigger\":97,\n \t\t\t\"mw-statemachine/statemachineimpl/Transition\":98,\n \t\t\t\"mw-messageservice/messageserviceimpl/isValidChannel\":99,\n \t\t\t\"mw-messageservice/messageserviceimpl/MessageServiceAsync\":100,\n \t\t\t\"cometd/AckExtension\":101,\n \t\t\t\"mw-messageservice/messageserviceimpl/messageServiceFactory\":102,\n \t\t\t\"mw-ddux/StubSender\":103,\n \t\t\t\"mw-widget-api/facade/LitElement\":104,\n \t\t\t\"lit/reactive-element/reactive-element\":105,\n \t\t\t\"lit/reactive-element/css-tag\":106,\n \t\t\t\"lit/reactive-element/custom-elements-es5-adapter\":107,\n \t\t\t\"lit/lit-html/lit-html\":108,\n \t\t\t\"mw-widget-api/facade/render\":109,\n \t\t\t\"mw-widget-api/facade/svg\":110,\n \t\t\t\"dojo/i18n!mw-rating/nls/main\":111,\n \t\t\t\"mw-rating/nls/main\":112,\n \t\t\t\"mw-rating-feedback/RatingFeedback\":113,\n \t\t\t\"dojo/i18n!mw-rating-feedback/nls/main\":114,\n \t\t\t\"mw-rating-feedback/nls/main\":115,\n \t\t\t\"mw-rating-feedback/impl/RatingFeedbackStep\":116\n \t\t});\n\n \t\tglobalObj.require = req;\n\n \t\t// expose the Dojo compatibility functions as a properties of __webpack_require__\n \t\tif (__webpack_require__.dj) throw new Error(\"__webpack_require__.dj name collision.\")\n \t\t__webpack_require__.dj = {\n \t\t\tr: req,\n \t\t\tc: createContextRequire,\n \t\t\tm: dojoModuleFromWebpackModule,\n \t\t\th: resolveTernaryHasExpression,\n \t\t\td: asyncDefineModule,\n \t\t\tw: wrapPromises,\n \t\t\tu: unwrapPromises\n \t\t};\n \t\tvar loaderScope = Object.create(globalObj, {\n \t\t document:{value: globalObj.document},\n \t\t window:{value:loaderScope},\n \t\t global:{value:loaderScope}\n \t\t});\n \t\tglobalObj.dojoConfig = globalObj.dojoConfig || {}\n \t\tvar userConfig = mix(globalObj.dojoConfig, ({'baseUrl':'.','packages':[({'name':'dojo','location':'target/debug/2P/derived/ui/dojo','lib':'.'}),({'name':'dijit','location':'target/debug/2P/derived/ui/dijit','lib':'.'}),({'name':'dojox','location':'target/debug/2P/derived/ui/dojox','lib':'.'}),({'name':'mw-log','location':'target/debug/2P/derived/ui/mw-log','lib':'.'}),({'name':'mw-utils','location':'target/debug/2P/derived/ui/mw-utils','lib':'.'}),({'name':'mw-ddux','location':'target/debug/2P/derived/ui/mw-ddux','lib':'.'}),({'name':'mw-progress-indicator','location':'target/debug/2P/derived/ui/mw-progress-indicator','lib':'.'}),({'name':'mw-widget-api','location':'target/debug/2P/derived/ui/mw-widget-api','lib':'.'}),({'name':'lit-element','location':'target/debug/2P/derived/ui/lit-element','lib':'.'}),({'name':'lit-html','location':'target/debug/2P/derived/ui/lit-html','lib':'.'}),({'name':'mw-statemachine','location':'target/debug/2P/derived/ui/mw-statemachine','lib':'.'}),({'name':'mw-peermodel','location':'target/debug/2P/derived/ui/mw-peermodel','lib':'.'}),({'name':'mw-deferred-utils','location':'target/debug/2P/derived/ui/mw-deferred-utils','lib':'.'}),({'name':'mw-remote','location':'target/debug/2P/derived/ui/mw-remote','lib':'.'}),({'name':'mw-messageservice','location':'target/debug/2P/derived/ui/mw-messageservice','lib':'.'}),({'name':'mw-html-utils','location':'target/debug/2P/derived/ui/mw-html-utils','lib':'.'}),({'name':'mw-browser-utils','location':'target/debug/2P/derived/ui/mw-browser-utils','lib':'.'}),({'name':'mldo-embedded-client','location':'target/debug/2P/derived/ui/mldo-embedded-client','lib':'.'}),({'name':'mw-utils','location':'target/debug/2P/derived/ui/mw-utils','trees':[['.','.',/(\\/\\.)|(~$)|(test|txt|BusyOverlay)/]],'lib':'.'})],'deps':['bootstrap'],'async':false,'has':({'config-deferredInstrumentation':false}),'supportedLocales':['en-us']}));\n \t\tvar defaultConfig = ({'hasCache':({'webpack':1,'host-browser':1,'dom':1,'dojo-loader':1,'dojo-has-api':1,'dojo-dom-ready-api':1,'dojo-sniff':1,'dojo-test-sniff':1,'config-deferredInstrumentation':1,'config-tlmSiblingOfDojo':1})});\n \t\tvar dojoLoader = __webpack_require__(40);\n \t\tdojoLoader.call(loaderScope, userConfig, defaultConfig, loaderScope, loaderScope);\n \t\tObject.keys(loaderScope.require.packs).forEach(function(key) {\n \t\t\tvar pkg = loaderScope.require.packs[key];\n \t\t\tif ((/(^\\/)|(\\:)/.test(pkg.main)\t// main path is absolute\n \t\t\t || pkg.main.split('/').reduce(function(acc, pathComp) {\n \t\t\t\t\t\tif (acc < 0 || pathComp === '.') return acc;\n \t\t\t\t\t\treturn (pathComp === '..' ? --acc : ++acc);\n \t\t\t\t\t}, 0) <= 0) // main path is outside package\n \t\t\t\t\t&& typeof pkg.realMain === 'undefined'\t// hasn't already been adjusted\n \t\t\t) {\n \t\t\t\tpkg.realMain = pkg.main;\n \t\t\t\tpkg.main = '';\n \t\t\t}\n \t\t});\n \t\tfunction toAbsMid(name, referenceModule) {\n \t\t\tvar absMid = loaderScope.require.originalToAbsMid(name, referenceModule);\n \t\t\tif (absMid.indexOf('/') === absMid.length-1) {\n \t\t\t\tvar pkgName = absMid.substring(0, absMid.length-1);\n \t\t\t\tvar pkg = loaderScope.require.packs[pkgName];\n \t\t\t\tif (pkg && pkg.realMain) {\n \t\t\t\t\tabsMid = pkgName;\n \t\t\t\t}\n \t\t\t}\n \t\t\treturn absMid;\n \t\t}\n \t\tfunction toUrl(name, referenceModule) {\n \t\t\tvar url = loaderScope.require.originalToUrl(name, referenceModule);\n \t\t\tvar pkg = loaderScope.require.packs[name];\n \t\t\tif (pkg && pkg.realMain) {\n \t\t\t\tvar parts = url.split('?');\n \t\t\t\tif (/(^\\/)|(\\:)/.test(pkg.realMain)) {\n \t\t\t\t\t// absolute URL\n \t\t\t\t\tparts[0] = pkg.realMain;\n \t\t\t\t} else {\n \t\t\t\t\t// relative URL\n \t\t\t\t\tparts[0] = parts[0] + '/' + pkg.realMain;\n \t\t\t\t}\n \t\t\t\turl = parts.join('?');\n \t\t\t}\n \t\t\treturn url;\n \t\t}\n \t\tloaderScope.require.originalToAbsMid = loaderScope.require.toAbsMid;\n \t\tloaderScope.require.originalToUrl = loaderScope.require.toUrl;\n \t\tloaderScope.require.toAbsMid = toAbsMid;\n \t\tloaderScope.require.toUrl = toUrl;\n \t\t['baseUrl','has','rawConfig','on','signal'].forEach(function(name) {req[name] = loaderScope.require[name]})\n \t})(); /* End undefined extensions */\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 56);\n","define([\"./kernel\", \"../has\", \"../sniff\"], function(dojo, has){\n\t// module:\n\t//\t\tdojo/_base/lang\n\n\thas.add(\"bug-for-in-skips-shadowed\", function(){\n\t\t// if true, the for-in iterator skips object properties that exist in Object's prototype (IE 6 - ?)\n\t\tfor(var i in {toString: 1}){\n\t\t\treturn 0;\n\t\t}\n\t\treturn 1;\n\t});\n\n\t// Helper methods\n\tvar _extraNames =\n\t\t\thas(\"bug-for-in-skips-shadowed\") ?\n\t\t\t\t\"hasOwnProperty.valueOf.isPrototypeOf.propertyIsEnumerable.toLocaleString.toString.constructor\".split(\".\") : [],\n\n\t\t_extraLen = _extraNames.length,\n\n\t\tgetProp = function(/*Array*/parts, /*Boolean*/create, /*Object*/context){\n\t\t\tif(!context){\n\t\t\t\tif(parts[0] && dojo.scopeMap[parts[0]]) {\n\t\t\t\t\t// Voodoo code from the old days where \"dojo\" or \"dijit\" maps to some special object\n\t\t\t\t\t// rather than just window.dojo\n\t\t\t\t\tcontext = dojo.scopeMap[parts.shift()][1];\n\t\t\t\t}else{\n\t\t\t\t\tcontext = dojo.global;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\ttry{\n\t\t\t\tfor(var i = 0; i < parts.length; i++){\n\t\t\t\t\tvar p = parts[i];\n\t\t\t\t\t// Fix for prototype pollution CVE-2021-23450\n\t\t\t\t\tif (p === '__proto__' || p === 'constructor') {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif(!(p in context)){\n\t\t\t\t\t\tif(create){\n\t\t\t\t\t\t\tcontext[p] = {};\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\treturn;\t\t// return undefined\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tcontext = context[p];\n\t\t\t\t}\n\t\t\t\treturn context; // mixed\n\t\t\t}catch(e){\n\t\t\t\t// \"p in context\" throws an exception when context is a number, boolean, etc. rather than an object,\n\t\t\t\t// so in that corner case just return undefined (by having no return statement)\n\t\t\t}\n\t\t},\n\n\t\topts = Object.prototype.toString,\n\n\t\tefficient = function(obj, offset, startWith){\n\t\t\treturn (startWith||[]).concat(Array.prototype.slice.call(obj, offset||0));\n\t\t},\n\n\t\t_pattern = /\\{([^\\}]+)\\}/g;\n\n\t// Module export\n\tvar lang = {\n\t\t// summary:\n\t\t//\t\tThis module defines Javascript language extensions.\n\n\t\t// _extraNames: String[]\n\t\t//\t\tLists property names that must be explicitly processed during for-in iteration\n\t\t//\t\tin environments that have has(\"bug-for-in-skips-shadowed\") true.\n\t\t_extraNames:_extraNames,\n\n\t\t_mixin: function(dest, source, copyFunc){\n\t\t\t// summary:\n\t\t\t//\t\tCopies/adds all properties of source to dest; returns dest.\n\t\t\t// dest: Object\n\t\t\t//\t\tThe object to which to copy/add all properties contained in source.\n\t\t\t// source: Object\n\t\t\t//\t\tThe object from which to draw all properties to copy into dest.\n\t\t\t// copyFunc: Function?\n\t\t\t//\t\tThe process used to copy/add a property in source; defaults to the Javascript assignment operator.\n\t\t\t// returns:\n\t\t\t//\t\tdest, as modified\n\t\t\t// description:\n\t\t\t//\t\tAll properties, including functions (sometimes termed \"methods\"), excluding any non-standard extensions\n\t\t\t//\t\tfound in Object.prototype, are copied/added to dest. Copying/adding each particular property is\n\t\t\t//\t\tdelegated to copyFunc (if any); copyFunc defaults to the Javascript assignment operator if not provided.\n\t\t\t//\t\tNotice that by default, _mixin executes a so-called \"shallow copy\" and aggregate types are copied/added by reference.\n\t\t\tvar name, s, i, empty = {};\n\t\t\tfor(name in source){\n\t\t\t\t// the (!(name in empty) || empty[name] !== s) condition avoids copying properties in \"source\"\n\t\t\t\t// inherited from Object.prototype.\t For example, if dest has a custom toString() method,\n\t\t\t\t// don't overwrite it with the toString() method that source inherited from Object.prototype\n\t\t\t\ts = source[name];\n\t\t\t\tif(!(name in dest) || (dest[name] !== s && (!(name in empty) || empty[name] !== s))){\n\t\t\t\t\tdest[name] = copyFunc ? copyFunc(s) : s;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif(has(\"bug-for-in-skips-shadowed\")){\n\t\t\t\tif(source){\n\t\t\t\t\tfor(i = 0; i < _extraLen; ++i){\n\t\t\t\t\t\tname = _extraNames[i];\n\t\t\t\t\t\ts = source[name];\n\t\t\t\t\t\tif(!(name in dest) || (dest[name] !== s && (!(name in empty) || empty[name] !== s))){\n\t\t\t\t\t\t\tdest[name] = copyFunc ? copyFunc(s) : s;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn dest; // Object\n\t\t},\n\n\t\tmixin: function(dest, sources){\n\t\t\t// summary:\n\t\t\t//\t\tCopies/adds all properties of one or more sources to dest; returns dest.\n\t\t\t// dest: Object\n\t\t\t//\t\tThe object to which to copy/add all properties contained in source. If dest is falsy, then\n\t\t\t//\t\ta new object is manufactured before copying/adding properties begins.\n\t\t\t// sources: Object...\n\t\t\t//\t\tOne of more objects from which to draw all properties to copy into dest. sources are processed\n\t\t\t//\t\tleft-to-right and if more than one of these objects contain the same property name, the right-most\n\t\t\t//\t\tvalue \"wins\".\n\t\t\t// returns: Object\n\t\t\t//\t\tdest, as modified\n\t\t\t// description:\n\t\t\t//\t\tAll properties, including functions (sometimes termed \"methods\"), excluding any non-standard extensions\n\t\t\t//\t\tfound in Object.prototype, are copied/added from sources to dest. sources are processed left to right.\n\t\t\t//\t\tThe Javascript assignment operator is used to copy/add each property; therefore, by default, mixin\n\t\t\t//\t\texecutes a so-called \"shallow copy\" and aggregate types are copied/added by reference.\n\t\t\t// example:\n\t\t\t//\t\tmake a shallow copy of an object\n\t\t\t//\t|\tvar copy = lang.mixin({}, source);\n\t\t\t// example:\n\t\t\t//\t\tmany class constructors often take an object which specifies\n\t\t\t//\t\tvalues to be configured on the object. In this case, it is\n\t\t\t//\t\toften simplest to call `lang.mixin` on the `this` object:\n\t\t\t//\t|\tdeclare(\"acme.Base\", null, {\n\t\t\t//\t|\t\tconstructor: function(properties){\n\t\t\t//\t|\t\t\t// property configuration:\n\t\t\t//\t|\t\t\tlang.mixin(this, properties);\n\t\t\t//\t|\n\t\t\t//\t|\t\t\tconsole.log(this.quip);\n\t\t\t//\t|\t\t\t//\t...\n\t\t\t//\t|\t\t},\n\t\t\t//\t|\t\tquip: \"I wasn't born yesterday, you know - I've seen movies.\",\n\t\t\t//\t|\t\t// ...\n\t\t\t//\t|\t});\n\t\t\t//\t|\n\t\t\t//\t|\t// create an instance of the class and configure it\n\t\t\t//\t|\tvar b = new acme.Base({quip: \"That's what it does!\" });\n\t\t\t// example:\n\t\t\t//\t\tcopy in properties from multiple objects\n\t\t\t//\t|\tvar flattened = lang.mixin(\n\t\t\t//\t|\t\t{\n\t\t\t//\t|\t\t\tname: \"Frylock\",\n\t\t\t//\t|\t\t\tbraces: true\n\t\t\t//\t|\t\t},\n\t\t\t//\t|\t\t{\n\t\t\t//\t|\t\t\tname: \"Carl Brutanananadilewski\"\n\t\t\t//\t|\t\t}\n\t\t\t//\t|\t);\n\t\t\t//\t|\n\t\t\t//\t|\t// will print \"Carl Brutanananadilewski\"\n\t\t\t//\t|\tconsole.log(flattened.name);\n\t\t\t//\t|\t// will print \"true\"\n\t\t\t//\t|\tconsole.log(flattened.braces);\n\n\t\t\tif(!dest){ dest = {}; }\n\t\t\tfor(var i = 1, l = arguments.length; i < l; i++){\n\t\t\t\tlang._mixin(dest, arguments[i]);\n\t\t\t}\n\t\t\treturn dest; // Object\n\t\t},\n\n\t\tsetObject: function(name, value, context){\n\t\t\t// summary:\n\t\t\t//\t\tSet a property from a dot-separated string, such as \"A.B.C\"\n\t\t\t// description:\n\t\t\t//\t\tUseful for longer api chains where you have to test each object in\n\t\t\t//\t\tthe chain, or when you have an object reference in string format.\n\t\t\t//\t\tObjects are created as needed along `path`. Returns the passed\n\t\t\t//\t\tvalue if setting is successful or `undefined` if not.\n\t\t\t// name: String\n\t\t\t//\t\tPath to a property, in the form \"A.B.C\".\n\t\t\t// value: anything\n\t\t\t//\t\tvalue or object to place at location given by name\n\t\t\t// context: Object?\n\t\t\t//\t\tOptional. Object to use as root of path. Defaults to\n\t\t\t//\t\t`dojo.global`.\n\t\t\t// example:\n\t\t\t//\t\tset the value of `foo.bar.baz`, regardless of whether\n\t\t\t//\t\tintermediate objects already exist:\n\t\t\t//\t| lang.setObject(\"foo.bar.baz\", value);\n\t\t\t// example:\n\t\t\t//\t\twithout `lang.setObject`, we often see code like this:\n\t\t\t//\t| // ensure that intermediate objects are available\n\t\t\t//\t| if(!obj[\"parent\"]){ obj.parent = {}; }\n\t\t\t//\t| if(!obj.parent[\"child\"]){ obj.parent.child = {}; }\n\t\t\t//\t| // now we can safely set the property\n\t\t\t//\t| obj.parent.child.prop = \"some value\";\n\t\t\t//\t\twhereas with `lang.setObject`, we can shorten that to:\n\t\t\t//\t| lang.setObject(\"parent.child.prop\", \"some value\", obj);\n\n\t\t\tvar parts = name.split(\".\"), p = parts.pop(), obj = getProp(parts, true, context);\n\t\t\treturn obj && p ? (obj[p] = value) : undefined; // Object\n\t\t},\n\n\t\tgetObject: function(name, create, context){\n\t\t\t// summary:\n\t\t\t//\t\tGet a property from a dot-separated string, such as \"A.B.C\"\n\t\t\t// description:\n\t\t\t//\t\tUseful for longer api chains where you have to test each object in\n\t\t\t//\t\tthe chain, or when you have an object reference in string format.\n\t\t\t// name: String\n\t\t\t//\t\tPath to an property, in the form \"A.B.C\".\n\t\t\t// create: Boolean?\n\t\t\t//\t\tOptional. Defaults to `false`. If `true`, Objects will be\n\t\t\t//\t\tcreated at any point along the 'path' that is undefined.\n\t\t\t// context: Object?\n\t\t\t//\t\tOptional. Object to use as root of path. Defaults to\n\t\t\t//\t\t'dojo.global'. Null may be passed.\n\t\t\treturn !name ? context : getProp(name.split(\".\"), create, context); // Object\n\t\t},\n\n\t\texists: function(name, obj){\n\t\t\t// summary:\n\t\t\t//\t\tdetermine if an object supports a given method\n\t\t\t// description:\n\t\t\t//\t\tuseful for longer api chains where you have to test each object in\n\t\t\t//\t\tthe chain. Useful for object and method detection.\n\t\t\t// name: String\n\t\t\t//\t\tPath to an object, in the form \"A.B.C\".\n\t\t\t// obj: Object?\n\t\t\t//\t\tObject to use as root of path. Defaults to\n\t\t\t//\t\t'dojo.global'. Null may be passed.\n\t\t\t// example:\n\t\t\t//\t| // define an object\n\t\t\t//\t| var foo = {\n\t\t\t//\t|\t\tbar: { }\n\t\t\t//\t| };\n\t\t\t//\t|\n\t\t\t//\t| // search the global scope\n\t\t\t//\t| lang.exists(\"foo.bar\"); // true\n\t\t\t//\t| lang.exists(\"foo.bar.baz\"); // false\n\t\t\t//\t|\n\t\t\t//\t| // search from a particular scope\n\t\t\t//\t| lang.exists(\"bar\", foo); // true\n\t\t\t//\t| lang.exists(\"bar.baz\", foo); // false\n\t\t\treturn lang.getObject(name, false, obj) !== undefined; // Boolean\n\t\t},\n\n\t\t// Crockford (ish) functions\n\n\t\tisString: function(it){\n\t\t\t// summary:\n\t\t\t//\t\tReturn true if it is a String\n\t\t\t// it: anything\n\t\t\t//\t\tItem to test.\n\t\t\treturn (typeof it == \"string\" || it instanceof String); // Boolean\n\t\t},\n\n\t\tisArray: Array.isArray || function(it){\n\t\t\t// summary:\n\t\t\t//\t\tReturn true if it is an Array.\n\t\t\t// it: anything\n\t\t\t//\t\tItem to test.\n\t\t\treturn opts.call(it) == \"[object Array]\"; // Boolean\n\t\t},\n\n\t\tisFunction: function(it){\n\t\t\t// summary:\n\t\t\t//\t\tReturn true if it is a Function\n\t\t\t// it: anything\n\t\t\t//\t\tItem to test.\n\t\t\treturn opts.call(it) === \"[object Function]\";\n\t\t},\n\n\t\tisObject: function(it){\n\t\t\t// summary:\n\t\t\t//\t\tReturns true if it is a JavaScript object (or an Array, a Function\n\t\t\t//\t\tor null)\n\t\t\t// it: anything\n\t\t\t//\t\tItem to test.\n\t\t\treturn it !== undefined &&\n\t\t\t\t(it === null || typeof it == \"object\" || lang.isArray(it) || lang.isFunction(it)); // Boolean\n\t\t},\n\n\t\tisArrayLike: function(it){\n\t\t\t// summary:\n\t\t\t//\t\tsimilar to isArray() but more permissive\n\t\t\t// it: anything\n\t\t\t//\t\tItem to test.\n\t\t\t// returns:\n\t\t\t//\t\tIf it walks like a duck and quacks like a duck, return `true`\n\t\t\t// description:\n\t\t\t//\t\tDoesn't strongly test for \"arrayness\". Instead, settles for \"isn't\n\t\t\t//\t\ta string or number and has a length property\". Arguments objects\n\t\t\t//\t\tand DOM collections will return true when passed to\n\t\t\t//\t\tisArrayLike(), but will return false when passed to\n\t\t\t//\t\tisArray().\n\t\t\treturn !!it && // Boolean\n\t\t\t\t// keep out built-in constructors (Number, String, ...) which have length\n\t\t\t\t// properties\n\t\t\t\t!lang.isString(it) && !lang.isFunction(it) &&\n\t\t\t\t!(it.tagName && it.tagName.toLowerCase() == 'form') &&\n\t\t\t\t(lang.isArray(it) || isFinite(it.length));\n\t\t},\n\n\t\tisAlien: function(it){\n\t\t\t// summary:\n\t\t\t//\t\tReturns true if it is a built-in function or some other kind of\n\t\t\t//\t\toddball that *should* report as a function but doesn't\n\t\t\treturn it && !lang.isFunction(it) && /\\{\\s*\\[native code\\]\\s*\\}/.test(String(it)); // Boolean\n\t\t},\n\n\t\textend: function(ctor, props){\n\t\t\t// summary:\n\t\t\t//\t\tAdds all properties and methods of props to constructor's\n\t\t\t//\t\tprototype, making them available to all instances created with\n\t\t\t//\t\tconstructor.\n\t\t\t// ctor: Object\n\t\t\t//\t\tTarget constructor to extend.\n\t\t\t// props: Object\n\t\t\t//\t\tOne or more objects to mix into ctor.prototype\n\t\t\tfor(var i=1, l=arguments.length; i<l; i++){\n\t\t\t\tlang._mixin(ctor.prototype, arguments[i]);\n\t\t\t}\n\t\t\treturn ctor; // Object\n\t\t},\n\n\t\t_hitchArgs: function(scope, method){\n\t\t\tvar pre = lang._toArray(arguments, 2);\n\t\t\tvar named = lang.isString(method);\n\t\t\treturn function(){\n\t\t\t\t// arrayify arguments\n\t\t\t\tvar args = lang._toArray(arguments);\n\t\t\t\t// locate our method\n\t\t\t\tvar f = named ? (scope||dojo.global)[method] : method;\n\t\t\t\t// invoke with collected args\n\t\t\t\treturn f && f.apply(scope || this, pre.concat(args)); // mixed\n\t\t\t}; // Function\n\t\t},\n\n\t\thitch: function(scope, method){\n\t\t\t// summary:\n\t\t\t//\t\tReturns a function that will only ever execute in the given scope.\n\t\t\t//\t\tThis allows for easy use of object member functions\n\t\t\t//\t\tin callbacks and other places in which the \"this\" keyword may\n\t\t\t//\t\totherwise not reference the expected scope.\n\t\t\t//\t\tAny number of default positional arguments may be passed as parameters\n\t\t\t//\t\tbeyond \"method\".\n\t\t\t//\t\tEach of these values will be used to \"placehold\" (similar to curry)\n\t\t\t//\t\tfor the hitched function.\n\t\t\t// scope: Object\n\t\t\t//\t\tThe scope to use when method executes. If method is a string,\n\t\t\t//\t\tscope is also the object containing method.\n\t\t\t// method: Function|String...\n\t\t\t//\t\tA function to be hitched to scope, or the name of the method in\n\t\t\t//\t\tscope to be hitched.\n\t\t\t// example:\n\t\t\t//\t|\tlang.hitch(foo, \"bar\")();\n\t\t\t//\t\truns foo.bar() in the scope of foo\n\t\t\t// example:\n\t\t\t//\t|\tlang.hitch(foo, myFunction);\n\t\t\t//\t\treturns a function that runs myFunction in the scope of foo\n\t\t\t// example:\n\t\t\t//\t\tExpansion on the default positional arguments passed along from\n\t\t\t//\t\thitch. Passed args are mixed first, additional args after.\n\t\t\t//\t|\tvar foo = { bar: function(a, b, c){ console.log(a, b, c); } };\n\t\t\t//\t|\tvar fn = lang.hitch(foo, \"bar\", 1, 2);\n\t\t\t//\t|\tfn(3); // logs \"1, 2, 3\"\n\t\t\t// example:\n\t\t\t//\t|\tvar foo = { bar: 2 };\n\t\t\t//\t|\tlang.hitch(foo, function(){ this.bar = 10; })();\n\t\t\t//\t\texecute an anonymous function in scope of foo\n\t\t\tif(arguments.length > 2){\n\t\t\t\treturn lang._hitchArgs.apply(dojo, arguments); // Function\n\t\t\t}\n\t\t\tif(!method){\n\t\t\t\tmethod = scope;\n\t\t\t\tscope = null;\n\t\t\t}\n\t\t\tif(lang.isString(method)){\n\t\t\t\tscope = scope || dojo.global;\n\t\t\t\tif(!scope[method]){ throw(['lang.hitch: scope[\"', method, '\"] is null (scope=\"', scope, '\")'].join('')); }\n\t\t\t\treturn function(){ return scope[method].apply(scope, arguments || []); }; // Function\n\t\t\t}\n\t\t\treturn !scope ? method : function(){ return method.apply(scope, arguments || []); }; // Function\n\t\t},\n\n\t\tdelegate: (function(){\n\t\t\t// boodman/crockford delegation w/ cornford optimization\n\t\t\tfunction TMP(){}\n\t\t\treturn function(obj, props){\n\t\t\t\tTMP.prototype = obj;\n\t\t\t\tvar tmp = new TMP();\n\t\t\t\tTMP.prototype = null;\n\t\t\t\tif(props){\n\t\t\t\t\tlang._mixin(tmp, props);\n\t\t\t\t}\n\t\t\t\treturn tmp; // Object\n\t\t\t};\n\t\t})(),\n\t\t/*=====\n\t\tdelegate: function(obj, props){\n\t\t\t// summary:\n\t\t\t//\t\tReturns a new object which \"looks\" to obj for properties which it\n\t\t\t//\t\tdoes not have a value for. Optionally takes a bag of properties to\n\t\t\t//\t\tseed the returned object with initially.\n\t\t\t// description:\n\t\t\t//\t\tThis is a small implementation of the Boodman/Crockford delegation\n\t\t\t//\t\tpattern in JavaScript. An intermediate object constructor mediates\n\t\t\t//\t\tthe prototype chain for the returned object, using it to delegate\n\t\t\t//\t\tdown to obj for property lookup when object-local lookup fails.\n\t\t\t//\t\tThis can be thought of similarly to ES4's \"wrap\", save that it does\n\t\t\t//\t\tnot act on types but rather on pure objects.\n\t\t\t// obj: Object\n\t\t\t//\t\tThe object to delegate to for properties not found directly on the\n\t\t\t//\t\treturn object or in props.\n\t\t\t// props: Object...\n\t\t\t//\t\tan object containing properties to assign to the returned object\n\t\t\t// returns:\n\t\t\t//\t\tan Object of anonymous type\n\t\t\t// example:\n\t\t\t//\t|\tvar foo = { bar: \"baz\" };\n\t\t\t//\t|\tvar thinger = lang.delegate(foo, { thud: \"xyzzy\"});\n\t\t\t//\t|\tthinger.bar == \"baz\"; // delegated to foo\n\t\t\t//\t|\tfoo.thud == undefined; // by definition\n\t\t\t//\t|\tthinger.thud == \"xyzzy\"; // mixed in from props\n\t\t\t//\t|\tfoo.bar = \"thonk\";\n\t\t\t//\t|\tthinger.bar == \"thonk\"; // still delegated to foo's bar\n\t\t},\n\t\t=====*/\n\n\t\t_toArray: has(\"ie\") ?\n\t\t\t(function(){\n\t\t\t\tfunction slow(obj, offset, startWith){\n\t\t\t\t\tvar arr = startWith||[];\n\t\t\t\t\tfor(var x = offset || 0; x < obj.length; x++){\n\t\t\t\t\t\tarr.push(obj[x]);\n\t\t\t\t\t}\n\t\t\t\t\treturn arr;\n\t\t\t\t}\n\t\t\t\treturn function(obj){\n\t\t\t\t\treturn ((obj.item) ? slow : efficient).apply(this, arguments);\n\t\t\t\t};\n\t\t\t})() : efficient,\n\t\t/*=====\n\t\t _toArray: function(obj, offset, startWith){\n\t\t\t // summary:\n\t\t\t //\t\tConverts an array-like object (i.e. arguments, DOMCollection) to an\n\t\t\t //\t\tarray. Returns a new Array with the elements of obj.\n\t\t\t // obj: Object\n\t\t\t //\t\tthe object to \"arrayify\". We expect the object to have, at a\n\t\t\t //\t\tminimum, a length property which corresponds to integer-indexed\n\t\t\t //\t\tproperties.\n\t\t\t // offset: Number?\n\t\t\t //\t\tthe location in obj to start iterating from. Defaults to 0.\n\t\t\t //\t\tOptional.\n\t\t\t // startWith: Array?\n\t\t\t //\t\tAn array to pack with the properties of obj. If provided,\n\t\t\t //\t\tproperties in obj are appended at the end of startWith and\n\t\t\t //\t\tstartWith is the returned array.\n\t\t },\n\t\t =====*/\n\n\t\tpartial: function(/*Function|String*/ method /*, ...*/){\n\t\t\t// summary:\n\t\t\t//\t\tsimilar to hitch() except that the scope object is left to be\n\t\t\t//\t\twhatever the execution context eventually becomes.\n\t\t\t// description:\n\t\t\t//\t\tCalling lang.partial is the functional equivalent of calling:\n\t\t\t//\t\t|\tlang.hitch(null, funcName, ...);\n\t\t\t// method:\n\t\t\t//\t\tThe function to \"wrap\"\n\t\t\tvar arr = [ null ];\n\t\t\treturn lang.hitch.apply(dojo, arr.concat(lang._toArray(arguments))); // Function\n\t\t},\n\n\t\tclone: function(/*anything*/ src){\n\t\t\t// summary:\n\t\t\t//\t\tClones objects (including DOM nodes) and all children.\n\t\t\t//\t\tWarning: do not clone cyclic structures.\n\t\t\t// src:\n\t\t\t//\t\tThe object to clone\n\t\t\tif(!src || typeof src != \"object\" || lang.isFunction(src)){\n\t\t\t\t// null, undefined, any non-object, or function\n\t\t\t\treturn src;\t// anything\n\t\t\t}\n\t\t\tif(src.nodeType && \"cloneNode\" in src){\n\t\t\t\t// DOM Node\n\t\t\t\treturn src.cloneNode(true); // Node\n\t\t\t}\n\t\t\tif(src instanceof Date){\n\t\t\t\t// Date\n\t\t\t\treturn new Date(src.getTime());\t// Date\n\t\t\t}\n\t\t\tif(src instanceof RegExp){\n\t\t\t\t// RegExp\n\t\t\t\treturn new RegExp(src); // RegExp\n\t\t\t}\n\t\t\tvar r, i, l;\n\t\t\tif(lang.isArray(src)){\n\t\t\t\t// array\n\t\t\t\tr = [];\n\t\t\t\tfor(i = 0, l = src.length; i < l; ++i){\n\t\t\t\t\tif(i in src){\n\t\t\t\t\t\tr[i] = lang.clone(src[i]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// we don't clone functions for performance reasons\n\t\t\t\t//\t\t}else if(d.isFunction(src)){\n\t\t\t\t//\t\t\t// function\n\t\t\t\t//\t\t\tr = function(){ return src.apply(this, arguments); };\n\t\t\t}else{\n\t\t\t\t// generic objects\n\t\t\t\tr = src.constructor ? new src.constructor() : {};\n\t\t\t}\n\t\t\treturn lang._mixin(r, src, lang.clone);\n\t\t},\n\n\n\t\ttrim: String.prototype.trim ?\n\t\t\tfunction(str){ return str.trim(); } :\n\t\t\tfunction(str){ return str.replace(/^\\s\\s*/, '').replace(/\\s\\s*$/, ''); },\n\t\t/*=====\n\t\t trim: function(str){\n\t\t\t // summary:\n\t\t\t //\t\tTrims whitespace from both sides of the string\n\t\t\t // str: String\n\t\t\t //\t\tString to be trimmed\n\t\t\t // returns: String\n\t\t\t //\t\tReturns the trimmed string\n\t\t\t // description:\n\t\t\t //\t\tThis version of trim() was selected for inclusion into the base due\n\t\t\t //\t\tto its compact size and relatively good performance\n\t\t\t //\t\t(see [Steven Levithan's blog](http://blog.stevenlevithan.com/archives/faster-trim-javascript)\n\t\t\t //\t\tUses String.prototype.trim instead, if available.\n\t\t\t //\t\tThe fastest but longest version of this function is located at\n\t\t\t //\t\tlang.string.trim()\n\t\t },\n\t\t =====*/\n\n\t\treplace: function(tmpl, map, pattern){\n\t\t\t// summary:\n\t\t\t//\t\tPerforms parameterized substitutions on a string. Throws an\n\t\t\t//\t\texception if any parameter is unmatched.\n\t\t\t// tmpl: String\n\t\t\t//\t\tString to be used as a template.\n\t\t\t// map: Object|Function\n\t\t\t//\t\tIf an object, it is used as a dictionary to look up substitutions.\n\t\t\t//\t\tIf a function, it is called for every substitution with following parameters:\n\t\t\t//\t\ta whole match, a name, an offset, and the whole template\n\t\t\t//\t\tstring (see https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/String/replace\n\t\t\t//\t\tfor more details).\n\t\t\t// pattern: RegEx?\n\t\t\t//\t\tOptional regular expression objects that overrides the default pattern.\n\t\t\t//\t\tMust be global and match one item. The default is: /\\{([^\\}]+)\\}/g,\n\t\t\t//\t\twhich matches patterns like that: \"{xxx}\", where \"xxx\" is any sequence\n\t\t\t//\t\tof characters, which doesn't include \"}\".\n\t\t\t// returns: String\n\t\t\t//\t\tReturns the substituted string.\n\t\t\t// example:\n\t\t\t//\t|\t// uses a dictionary for substitutions:\n\t\t\t//\t|\tlang.replace(\"Hello, {name.first} {name.last} AKA {nick}!\",\n\t\t\t//\t|\t\t{\n\t\t\t//\t|\t\t\tnick: \"Bob\",\n\t\t\t//\t|\t\t\tname: {\n\t\t\t//\t|\t\t\t\tfirst:\t\"Robert\",\n\t\t\t//\t|\t\t\t\tmiddle: \"X\",\n\t\t\t//\t|\t\t\t\tlast:\t\t\"Cringely\"\n\t\t\t//\t|\t\t\t}\n\t\t\t//\t|\t\t});\n\t\t\t//\t|\t// returns: Hello, Robert Cringely AKA Bob!\n\t\t\t// example:\n\t\t\t//\t|\t// uses an array for substitutions:\n\t\t\t//\t|\tlang.replace(\"Hello, {0} {2}!\",\n\t\t\t//\t|\t\t[\"Robert\", \"X\", \"Cringely\"]);\n\t\t\t//\t|\t// returns: Hello, Robert Cringely!\n\t\t\t// example:\n\t\t\t//\t|\t// uses a function for substitutions:\n\t\t\t//\t|\tfunction sum(a){\n\t\t\t//\t|\t\tvar t = 0;\n\t\t\t//\t|\t\tarrayforEach(a, function(x){ t += x; });\n\t\t\t//\t|\t\treturn t;\n\t\t\t//\t|\t}\n\t\t\t//\t|\tlang.replace(\n\t\t\t//\t|\t\t\"{count} payments averaging {avg} USD per payment.\",\n\t\t\t//\t|\t\tlang.hitch(\n\t\t\t//\t|\t\t\t{ payments: [11, 16, 12] },\n\t\t\t//\t|\t\t\tfunction(_, key){\n\t\t\t//\t|\t\t\t\tswitch(key){\n\t\t\t//\t|\t\t\t\t\tcase \"count\": return this.payments.length;\n\t\t\t//\t|\t\t\t\t\tcase \"min\":\t\treturn Math.min.apply(Math, this.payments);\n\t\t\t//\t|\t\t\t\t\tcase \"max\":\t\treturn Math.max.apply(Math, this.payments);\n\t\t\t//\t|\t\t\t\t\tcase \"sum\":\t\treturn sum(this.payments);\n\t\t\t//\t|\t\t\t\t\tcase \"avg\":\t\treturn sum(this.payments) / this.payments.length;\n\t\t\t//\t|\t\t\t\t}\n\t\t\t//\t|\t\t\t}\n\t\t\t//\t|\t\t)\n\t\t\t//\t|\t);\n\t\t\t//\t|\t// prints: 3 payments averaging 13 USD per payment.\n\t\t\t// example:\n\t\t\t//\t|\t// uses an alternative PHP-like pattern for substitutions:\n\t\t\t//\t|\tlang.replace(\"Hello, ${0} ${2}!\",\n\t\t\t//\t|\t\t[\"Robert\", \"X\", \"Cringely\"], /\\$\\{([^\\}]+)\\}/g);\n\t\t\t//\t|\t// returns: Hello, Robert Cringely!\n\n\t\t\treturn tmpl.replace(pattern || _pattern, lang.isFunction(map) ?\n\t\t\t\tmap : function(_, k){ return lang.getObject(k, false, map); });\n\t\t}\n\t};\n\n\thas(\"extend-dojo\") && lang.mixin(dojo, lang);\n\n\treturn lang;\n});\n","\"use strict\";\n\ndefine(['mw-log/impl/Modes', 'mw-log/impl/Levels', 'mw-log/impl/Backlog', 'mw-log/util/LogUtils'], function (Modes, Levels, Backlog, LogUtils) {\n const defaultName = 'DEFAULT';\n const backlogSize = 100; // backlog will save 100 most recent messages\n\n const backlog = Backlog.create(backlogSize);\n const levelOf = {\n debug: 4,\n log: 3,\n dir: 3,\n table: 3,\n trace: 3,\n time: 3,\n timeEnd: 3,\n group: 3,\n groupCollapsed: 3,\n groupEnd: 3,\n info: 2,\n warn: 1,\n assert: 0,\n error: 0\n };\n let callbacks = {};\n let nextCallbackId = 0;\n let globalThreshold = Levels.DEBUG;\n let mode = Modes.DEVELOPMENT;\n let groupStack = [];\n let loggers = {};\n /** Class for logging messages to console */\n\n class Log {\n constructor(name) {\n if (loggers[name] != null) {\n loggers[defaultName].error(\"a logger with the name '\" + name + \"' already exists - \" + 'change the name to prevent interference'); // return empty object (no properties have been declared)\n\n return;\n }\n\n LogUtils.makeReadOnlyProperty(this, 'name', name);\n loggers[this.name] = this;\n this._timers = {};\n this._threshold = Levels.DEBUG;\n this._showTimestamp = true;\n LogUtils.makeReadOnlyProperty(this, 'modes', Modes);\n LogUtils.makeReadOnlyProperty(this, 'levels', Levels);\n }\n\n static _sanitizeLevel(level) {\n return typeof level === 'number' ? level : Levels.DEBUG;\n }\n\n static _sanitizeMode(mode) {\n return LogUtils.objectValues(Modes).indexOf(mode) > -1 ? mode : Modes.development;\n }\n\n get threshold() {\n return this._threshold;\n }\n\n set threshold(value) {\n this._threshold = Log._sanitizeLevel(value);\n }\n\n get showTimestamp() {\n return this._showTimestamp;\n }\n\n set showTimestamp(value) {\n this._showTimestamp = !!value;\n }\n\n get globalThreshold() {\n return globalThreshold;\n }\n\n set globalThreshold(value) {\n globalThreshold = Log._sanitizeLevel(value);\n }\n\n get mode() {\n return mode;\n }\n\n set mode(value) {\n mode = Log._sanitizeMode(value);\n }\n\n _shouldLog(level) {\n return globalThreshold > level && this._threshold > level;\n }\n\n _nameAndTime() {\n let label = [];\n\n if (this.name !== defaultName) {\n label.push(this.name);\n }\n\n if (this._showTimestamp) {\n label.push(LogUtils.currentTimeString());\n }\n\n return label;\n }\n /**\n * Displays a table\n * @param {array} data - will display as a table. also accepts objects with named parameters\n * @example\n * logger.table([[1,2,3],[4,5,6],[7,8,9]]);\n * logger.table([{x:0,y:1},{x:1,y:0}]);\n * logger.table({name:\"Vincent\",score:99.5,inventory:[\"pliers\",\"string\",\"tape\"]});\n */\n\n\n table(data) {\n if (this._shouldLog(levelOf.table)) {\n const message = {\n namespace: this.name,\n type: 'table',\n message: [data],\n time: new Date()\n };\n backlog.add(message); // name and time on a separate line, because the first arg must be data for table\n\n LogUtils.printToConsole('log', this._nameAndTime(), mode);\n LogUtils.printToConsole('table', [data], mode);\n LogUtils.execCallbacks(callbacks, message);\n }\n }\n /**\n * Displays a stack trace\n * @example\n * logger.trace();\n */\n\n\n trace() {\n if (this._shouldLog(levelOf.trace)) {\n const message = {\n namespace: this.name,\n type: 'trace',\n message: null,\n time: new Date()\n };\n const e = new Error();\n let trace = e.stack.split('\\n'); // remove \"Error\" in chrome\n\n if (trace[0] === 'Error') {\n trace.shift();\n } // remove trace into mw-log\n // firefox & chrome edge safari\n\n\n while (trace[0].includes('Log.js') || trace[0].includes('logger.trace') || trace[0] === 'trace') {\n trace.shift();\n }\n\n trace = trace.join('\\n');\n message.message = [trace];\n backlog.add(message);\n LogUtils.printToConsole('log', this._nameAndTime(), mode);\n LogUtils.printToConsole('trace', [], mode);\n LogUtils.execCallbacks(callbacks, message);\n }\n }\n /**\n * Starts a timer\n * @param {string} label - label for the timer\n * @example\n * logger.time(\"my timer\");\n * // code that is being timed\n * logger.timeEnd(\"my timer\");\n */\n\n\n time(label) {\n if (this._shouldLog(levelOf.time)) {\n if (this._timers[label] == null) {\n this._timers[label] = new Date().getTime();\n } else {\n this.warn('timer \"' + label + '\" already exists.');\n }\n }\n }\n /**\n * Ends a timer and displays the time since start\n * @param {string} label - label for the timer\n * @example\n * logger.time(\"my timer\");\n * // code that is being timed\n * logger.timeEnd(\"my timer\");\n */\n\n\n timeEnd(label) {\n if (this._shouldLog(levelOf.timeEnd)) {\n const message = {\n namespace: this.name,\n type: 'timeEnd',\n message: null,\n time: new Date()\n };\n\n if (this._timers[label] != null) {\n const delta = new Date().getTime() - this._timers[label];\n\n message.message = [label + ': ' + delta + 'ms - timer ended'];\n backlog.add(message);\n LogUtils.printToConsole('log', this._nameAndTime().concat(message.message), mode);\n LogUtils.execCallbacks(callbacks, message);\n this._timers[label] = null;\n } else {\n this.warn('timer \"' + label + '\" doesn\\'t exist.');\n }\n }\n }\n\n _group(label, collapsed) {\n if (this._shouldLog(levelOf.group)) {\n const method = collapsed ? 'groupCollapsed' : 'group';\n const message = {\n namespace: this.name,\n type: method,\n message: [label],\n time: new Date()\n }; // store the label of the group\n\n groupStack.push(label);\n backlog.add(message);\n LogUtils.printToConsole(method, [label], mode);\n LogUtils.execCallbacks(callbacks, message);\n }\n }\n /**\n * Starts a console message group in a collapsed state\n * @param {string} label - name of group\n * @example\n * logger.groupCollapsed(\"my group\");\n * logger.log(\"this message is hidden in the collapsed group\");\n * logger.groupEnd();\n */\n\n\n groupCollapsed(label) {\n this._group(label, true);\n }\n /**\n * Starts a console message group in an expanded state\n * @param {string} label - name of group\n * @example\n * logger.group(\"my group\");\n * logger.log(\"this message is visible in 'my group' \");\n * logger.groupEnd();\n */\n\n\n group(label) {\n this._group(label, false);\n }\n /**\n * Ends the current console message group\n * @example\n * logger.group(\"my group\");\n * logger.log(\"hello!\");\n * logger.groupEnd();\n */\n\n\n groupEnd() {\n if (this._shouldLog(levelOf.groupEnd)) {\n // clear the current group from the stack\n const groupName = groupStack.pop();\n const message = {\n namespace: this.name,\n type: 'groupEnd',\n message: [groupName],\n time: new Date()\n };\n backlog.add(message);\n LogUtils.printToConsole('groupEnd', [], mode);\n LogUtils.execCallbacks(callbacks, message);\n }\n }\n /**\n * Display an error if the condition is false\n * @param {boolean} condition - condition being tested\n * @param {string} description - sent as an error if the condition is false\n * @example\n * logger.assert(1 > 0, \"the condition is true so this message will not be shown\");\n * logger.assert(1 < 0, \"the condition is false so this message will be shown\");\n */\n\n\n assert(condition, description) {\n if (this._shouldLog(levelOf.assert) && !condition) {\n const message = {\n namespace: this.name,\n type: 'assert',\n message: ['Assertion failed:', description],\n time: new Date()\n };\n backlog.add(message);\n message.message.shift();\n let assertParams = [false].concat(this._nameAndTime().concat(message.message));\n LogUtils.printToConsole('assert', assertParams, mode);\n LogUtils.execCallbacks(callbacks, message);\n }\n }\n\n _basicLogMethod(method, level, args) {\n if (this._shouldLog(level)) {\n const message = {\n namespace: this.name,\n type: method,\n message: args,\n time: new Date()\n };\n args = this._nameAndTime().concat(args);\n backlog.add(message);\n LogUtils.printToConsole(method, args, mode);\n LogUtils.execCallbacks(callbacks, message);\n }\n }\n /**\n * Displays a debug message in the console\n * @param {...*} varArgs - displays anything you pass in\n * @example\n * logger.debug(\"hello world\");\n * logger.debug(\"favorite number:\", 7);\n * logger.debug(1, \"h\", {a:4,b:[1,2,3]});\n */\n\n\n debug(varArgs) {\n const args = Array.prototype.slice.call(arguments);\n\n this._basicLogMethod('debug', levelOf.debug, args);\n }\n /**\n * Displays a log message in the console\n * @param {...*} varArgs - displays anything you pass in\n * @example\n * logger.log(\"hello world\");\n * logger.log(\"favorite number:\", 7);\n * logger.log(1, \"h\", {a:4,b:[1,2,3]});\n */\n\n\n log(varArgs) {\n const args = Array.prototype.slice.call(arguments);\n\n this._basicLogMethod('log', levelOf.log, args);\n }\n /**\n * Display the properties of an object in a tree\n * @param {object} obj - object to display properties of\n * @example\n * logger.dir({a:\"Apple\",b:[\"Brother\",\"Bright\"],c:{name:\"Cat\",remaining_lives:9}});\n */\n\n\n dir(obj) {\n const args = Array.prototype.slice.call(arguments);\n\n this._basicLogMethod('dir', levelOf.dir, args);\n }\n /**\n * Displays an info message in the console\n * @param {...*} varArgs - displays anything you pass in\n * @example\n * logger.info(\"hello world\");\n * logger.info(\"favorite number:\", 7);\n * logger.info(1, \"h\", {a:4,b:[1,2,3]});\n */\n\n\n info(varArgs) {\n const args = Array.prototype.slice.call(arguments);\n\n this._basicLogMethod('info', levelOf.info, args);\n }\n /**\n * Displays a warn message in the console\n * @param {...*} varArgs - displays anything you pass in\n * @example\n * logger.warn(\"hello world\");\n * logger.warn(\"favorite number:\", 7);\n * logger.warn(1, \"h\", {a:4,b:[1,2,3]});\n */\n\n\n warn(varArgs) {\n const args = Array.prototype.slice.call(arguments);\n\n this._basicLogMethod('warn', levelOf.warn, args);\n }\n /**\n * Displays an error message in the console and shows a stack trace\n * @param {...*} varArgs - displays anything you pass in\n * @example\n * logger.error(\"hello world\");\n * logger.error(\"favorite number:\", 7);\n * logger.error(1, \"h\", {a:4,b:[1,2,3]});\n */\n\n\n error(varArgs) {\n const args = Array.prototype.slice.call(arguments);\n\n this._basicLogMethod('error', levelOf.error, args);\n }\n /**\n * Add a callback to be called on every message passed through every logger.\n *\n * @param {function} callback - function that takes a message object as input.\n * A message object has the following properties: namespace, type, time, message.\n *\n * @param {boolean} useBacklog - Will call function on up to 100 previous\n * messages when true. Optional.\n *\n * @returns {object} remover - Call remover.remove() to remove the callback\n * (no longer pass messages to it)\n *\n * @example\n * let messageTypes = [];\n * let callback = function(message){\n * messageTypes.push(message.type);\n * };\n * let remover = logger.addCallback(callback, true);\n * // messageTypes now contains the types of the last 100 messages, because useBacklog was true\n * remover.remove();\n * // the callback will not be run on any messages after it has been removed\n */\n\n\n addCallback(callback, useBacklog) {\n callbacks[nextCallbackId] = callback;\n\n if (useBacklog) {\n backlog.applyCallback(callback);\n }\n\n let remover = {};\n const position = nextCallbackId;\n\n remover.remove = () => {\n delete callbacks[position];\n };\n\n nextCallbackId++;\n return remover;\n }\n /**\n * Creates a new logger instance under a new namespace.\n *\n * @param {string} name - namespace of new logger.\n *\n * @returns {object} logger - if a logger has already been instantiated with the same name,\n * an error will be displayed and the previously declared instance will be returned.\n *\n * @example\n * let myNewLogger = logger.createLogger(\"myNewLogger\");\n * myNewLogger.log(\"hello from my new logger!\");\n */\n\n\n createLogger(name) {\n const newLogger = new Log(name);\n return newLogger.name ? newLogger : loggers[name];\n }\n\n }\n\n return new Log(defaultName);\n});\n//# sourceMappingURL=Log.js.map\n","define([\"./kernel\", \"../has\", \"./lang\"], function(dojo, has, lang){\n\t// module:\n\t//\t\tdojo/_base/declare\n\n\tvar mix = lang.mixin, op = Object.prototype, opts = op.toString,\n\t\txtor, counter = 0, cname = \"constructor\";\n\n\tif(!has(\"csp-restrictions\")){\n\t\t// 'new Function()' is preferable when available since it does not create a closure\n\t\txtor = new Function;\n\t}else{\n\t\txtor = function(){};\n\t}\n\n\tfunction err(msg, cls){ throw new Error(\"declare\" + (cls ? \" \" + cls : \"\") + \": \" + msg); }\n\n\t// C3 Method Resolution Order (see http://www.python.org/download/releases/2.3/mro/)\n\tfunction c3mro(bases, className){\n\t\tvar result = [], roots = [{cls: 0, refs: []}], nameMap = {}, clsCount = 1,\n\t\t\tl = bases.length, i = 0, j, lin, base, top, proto, rec, name, refs;\n\n\t\t// build a list of bases naming them if needed\n\t\tfor(; i < l; ++i){\n\t\t\tbase = bases[i];\n\t\t\tif(!base){\n\t\t\t\terr(\"mixin #\" + i + \" is unknown. Did you use dojo.require to pull it in?\", className);\n\t\t\t}else if(opts.call(base) != \"[object Function]\"){\n\t\t\t\terr(\"mixin #\" + i + \" is not a callable constructor.\", className);\n\t\t\t}\n\t\t\tlin = base._meta ? base._meta.bases : [base];\n\t\t\ttop = 0;\n\t\t\t// add bases to the name map\n\t\t\tfor(j = lin.length - 1; j >= 0; --j){\n\t\t\t\tproto = lin[j].prototype;\n\t\t\t\tif(!proto.hasOwnProperty(\"declaredClass\")){\n\t\t\t\t\tproto.declaredClass = \"uniqName_\" + (counter++);\n\t\t\t\t}\n\t\t\t\tname = proto.declaredClass;\n\t\t\t\tif(!nameMap.hasOwnProperty(name)){\n\t\t\t\t\tnameMap[name] = {count: 0, refs: [], cls: lin[j]};\n\t\t\t\t\t++clsCount;\n\t\t\t\t}\n\t\t\t\trec = nameMap[name];\n\t\t\t\tif(top && top !== rec){\n\t\t\t\t\trec.refs.push(top);\n\t\t\t\t\t++top.count;\n\t\t\t\t}\n\t\t\t\ttop = rec;\n\t\t\t}\n\t\t\t++top.count;\n\t\t\troots[0].refs.push(top);\n\t\t}\n\n\t\t// remove classes without external references recursively\n\t\twhile(roots.length){\n\t\t\ttop = roots.pop();\n\t\t\tresult.push(top.cls);\n\t\t\t--clsCount;\n\t\t\t// optimization: follow a single-linked chain\n\t\t\twhile(refs = top.refs, refs.length == 1){\n\t\t\t\ttop = refs[0];\n\t\t\t\tif(!top || --top.count){\n\t\t\t\t\t// branch or end of chain => do not end to roots\n\t\t\t\t\ttop = 0;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tresult.push(top.cls);\n\t\t\t\t--clsCount;\n\t\t\t}\n\t\t\tif(top){\n\t\t\t\t// branch\n\t\t\t\tfor(i = 0, l = refs.length; i < l; ++i){\n\t\t\t\t\ttop = refs[i];\n\t\t\t\t\tif(!--top.count){\n\t\t\t\t\t\troots.push(top);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif(clsCount){\n\t\t\terr(\"can't build consistent linearization\", className);\n\t\t}\n\n\t\t// calculate the superclass offset\n\t\tbase = bases[0];\n\t\tresult[0] = base ?\n\t\t\tbase._meta && base === result[result.length - base._meta.bases.length] ?\n\t\t\t\tbase._meta.bases.length : 1 : 0;\n\n\t\treturn result;\n\t}\n\n\tfunction inherited(args, a, f, g){\n\t\tvar name, chains, bases, caller, meta, base, proto, opf, pos,\n\t\t\tcache = this._inherited = this._inherited || {};\n\n\t\t// crack arguments\n\t\tif(typeof args === \"string\"){\n\t\t\tname = args;\n\t\t\targs = a;\n\t\t\ta = f;\n\t\t\tf = g;\n\t\t}\n\n\t\tif(typeof args === \"function\"){\n\t\t\t// support strict mode\n\t\t\tcaller = args;\n\t\t\targs = a;\n\t\t\ta = f;\n\t\t}else{\n\t\t\ttry{\n\t\t\t\tcaller = args.callee;\n\t\t\t}catch (e){\n\t\t\t\tif(e instanceof TypeError){\n\t\t\t\t\t// caller was defined in a strict-mode context\n\t\t\t\t\terr(\"strict mode inherited() requires the caller function to be passed before arguments\", this.declaredClass);\n\t\t\t\t}else{\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tname = name || caller.nom;\n\t\tif(!name){\n\t\t\terr(\"can't deduce a name to call inherited()\", this.declaredClass);\n\t\t}\n\t\tf = g = 0;\n\n\t\tmeta = this.constructor._meta;\n\t\tbases = meta.bases;\n\n\t\tpos = cache.p;\n\t\tif(name != cname){\n\t\t\t// method\n\t\t\tif(cache.c !== caller){\n\t\t\t\t// cache bust\n\t\t\t\tpos = 0;\n\t\t\t\tbase = bases[0];\n\t\t\t\tmeta = base._meta;\n\t\t\t\tif(meta.hidden[name] !== caller){\n\t\t\t\t\t// error detection\n\t\t\t\t\tchains = meta.chains;\n\t\t\t\t\tif(chains && typeof chains[name] == \"string\"){\n\t\t\t\t\t\terr(\"calling chained method with inherited: \" + name, this.declaredClass);\n\t\t\t\t\t}\n\t\t\t\t\t// find caller\n\t\t\t\t\tdo{\n\t\t\t\t\t\tmeta = base._meta;\n\t\t\t\t\t\tproto = base.prototype;\n\t\t\t\t\t\tif(meta && (proto[name] === caller && proto.hasOwnProperty(name) || meta.hidden[name] === caller)){\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}while(base = bases[++pos]); // intentional assignment\n\t\t\t\t\tpos = base ? pos : -1;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// find next\n\t\t\tbase = bases[++pos];\n\t\t\tif(base){\n\t\t\t\tproto = base.prototype;\n\t\t\t\tif(base._meta && proto.hasOwnProperty(name)){\n\t\t\t\t\tf = proto[name];\n\t\t\t\t}else{\n\t\t\t\t\topf = op[name];\n\t\t\t\t\tdo{\n\t\t\t\t\t\tproto = base.prototype;\n\t\t\t\t\t\tf = proto[name];\n\t\t\t\t\t\tif(f && (base._meta ? proto.hasOwnProperty(name) : f !== opf)){\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}while(base = bases[++pos]); // intentional assignment\n\t\t\t\t}\n\t\t\t}\n\t\t\tf = base && f || op[name];\n\t\t}else{\n\t\t\t// constructor\n\t\t\tif(cache.c !== caller){\n\t\t\t\t// cache bust\n\t\t\t\tpos = 0;\n\t\t\t\tmeta = bases[0]._meta;\n\t\t\t\tif(meta && meta.ctor !== caller){\n\t\t\t\t\t// error detection\n\t\t\t\t\tchains = meta.chains;\n\t\t\t\t\tif(!chains || chains.constructor !== \"manual\"){\n\t\t\t\t\t\terr(\"calling chained constructor with inherited\", this.declaredClass);\n\t\t\t\t\t}\n\t\t\t\t\t// find caller\n\t\t\t\t\twhile(base = bases[++pos]){ // intentional assignment\n\t\t\t\t\t\tmeta = base._meta;\n\t\t\t\t\t\tif(meta && meta.ctor === caller){\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpos = base ? pos : -1;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// find next\n\t\t\twhile(base = bases[++pos]){\t// intentional assignment\n\t\t\t\tmeta = base._meta;\n\t\t\t\tf = meta ? meta.ctor : base;\n\t\t\t\tif(f){\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tf = base && f;\n\t\t}\n\n\t\t// cache the found super method\n\t\tcache.c = f;\n\t\tcache.p = pos;\n\n\t\t// now we have the result\n\t\tif(f){\n\t\t\treturn a === true ? f : f.apply(this, a || args);\n\t\t}\n\t\t// intentionally no return if a super method was not found\n\t}\n\n\tfunction getInherited(name, args, a){\n\t\tif(typeof name === \"string\"){\n\t\t\tif (typeof args === \"function\") {\n\t\t\t\treturn this.__inherited(name, args, a, true);\n\t\t\t}\n\t\t\treturn this.__inherited(name, args, true);\n\t\t}\n\t\telse if (typeof name === \"function\") {\n\t\t\treturn this.__inherited(name, args, true);\n\t\t}\n\t\treturn this.__inherited(name, true);\n\t}\n\n\tfunction inherited__debug(args, a1, a2, a3){\n\t\tvar f = this.getInherited(args, a1, a2);\n\t\tif(f){\n\t\t\treturn f.apply(this, a3 || a2 || a1 || args);\n\t\t}\n\t\t// intentionally no return if a super method was not found\n\t}\n\n\tvar inheritedImpl = dojo.config.isDebug ? inherited__debug : inherited;\n\n\t// emulation of \"instanceof\"\n\tfunction isInstanceOf(cls){\n\t\tvar bases = this.constructor._meta.bases;\n\t\tfor(var i = 0, l = bases.length; i < l; ++i){\n\t\t\tif(bases[i] === cls){\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn this instanceof cls;\n\t}\n\n\tfunction mixOwn(target, source){\n\t\t// add props adding metadata for incoming functions skipping a constructor\n\t\tfor(var name in source){\n\t\t\tif(name != cname && source.hasOwnProperty(name)){\n\t\t\t\ttarget[name] = source[name];\n\t\t\t}\n\t\t}\n\t\tif(has(\"bug-for-in-skips-shadowed\")){\n\t\t\tfor(var extraNames= lang._extraNames, i= extraNames.length; i;){\n\t\t\t\tname = extraNames[--i];\n\t\t\t\tif(name != cname && source.hasOwnProperty(name)){\n\t\t\t\t\t target[name] = source[name];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// implementation of safe mixin function\n\tfunction safeMixin(target, source){\n\t\t// summary:\n\t\t//\t\tMix in properties skipping a constructor and decorating functions\n\t\t//\t\tlike it is done by declare().\n\t\t// target: Object\n\t\t//\t\tTarget object to accept new properties.\n\t\t// source: Object\n\t\t//\t\tSource object for new properties.\n\t\t// description:\n\t\t//\t\tThis function is used to mix in properties like lang.mixin does,\n\t\t//\t\tbut it skips a constructor property and decorates functions like\n\t\t//\t\tdeclare() does.\n\t\t//\n\t\t//\t\tIt is meant to be used with classes and objects produced with\n\t\t//\t\tdeclare. Functions mixed in with dojo.safeMixin can use\n\t\t//\t\tthis.inherited() like normal methods.\n\t\t//\n\t\t//\t\tThis function is used to implement extend() method of a constructor\n\t\t//\t\tproduced with declare().\n\t\t//\n\t\t// example:\n\t\t//\t|\tvar A = declare(null, {\n\t\t//\t|\t\tm1: function(){\n\t\t//\t|\t\t\tconsole.log(\"A.m1\");\n\t\t//\t|\t\t},\n\t\t//\t|\t\tm2: function(){\n\t\t//\t|\t\t\tconsole.log(\"A.m2\");\n\t\t//\t|\t\t}\n\t\t//\t|\t});\n\t\t//\t|\tvar B = declare(A, {\n\t\t//\t|\t\tm1: function(){\n\t\t//\t|\t\t\tthis.inherited(arguments);\n\t\t//\t|\t\t\tconsole.log(\"B.m1\");\n\t\t//\t|\t\t}\n\t\t//\t|\t});\n\t\t//\t|\tB.extend({\n\t\t//\t|\t\tm2: function(){\n\t\t//\t|\t\t\tthis.inherited(arguments);\n\t\t//\t|\t\t\tconsole.log(\"B.m2\");\n\t\t//\t|\t\t}\n\t\t//\t|\t});\n\t\t//\t|\tvar x = new B();\n\t\t//\t|\tdojo.safeMixin(x, {\n\t\t//\t|\t\tm1: function(){\n\t\t//\t|\t\t\tthis.inherited(arguments);\n\t\t//\t|\t\t\tconsole.log(\"X.m1\");\n\t\t//\t|\t\t},\n\t\t//\t|\t\tm2: function(){\n\t\t//\t|\t\t\tthis.inherited(arguments);\n\t\t//\t|\t\t\tconsole.log(\"X.m2\");\n\t\t//\t|\t\t}\n\t\t//\t|\t});\n\t\t//\t|\tx.m2();\n\t\t//\t|\t// prints:\n\t\t//\t|\t// A.m1\n\t\t//\t|\t// B.m1\n\t\t//\t|\t// X.m1\n\n\t\tvar name, t;\n\t\t// add props adding metadata for incoming functions skipping a constructor\n\t\tfor(name in source){\n\t\t\tt = source[name];\n\t\t\tif((t !== op[name] || !(name in op)) && name != cname){\n\t\t\t\tif(opts.call(t) == \"[object Function]\"){\n\t\t\t\t\t// non-trivial function method => attach its name\n\t\t\t\t\tt.nom = name;\n\t\t\t\t}\n\t\t\t\ttarget[name] = t;\n\t\t\t}\n\t\t}\n\t\tif(has(\"bug-for-in-skips-shadowed\") && source){\n\t\t\tfor(var extraNames= lang._extraNames, i= extraNames.length; i;){\n\t\t\t\tname = extraNames[--i];\n\t\t\t\tt = source[name];\n\t\t\t\tif((t !== op[name] || !(name in op)) && name != cname){\n\t\t\t\t\tif(opts.call(t) == \"[object Function]\"){\n\t\t\t\t\t\t// non-trivial function method => attach its name\n\t\t\t\t\t\t t.nom = name;\n\t\t\t\t\t}\n\t\t\t\t\ttarget[name] = t;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn target;\n\t}\n\n\tfunction extend(source){\n\t\tdeclare.safeMixin(this.prototype, source);\n\t\treturn this;\n\t}\n\n\tfunction createSubclass(mixins, props){\n\t\t// crack parameters\n\t\tif(!(mixins instanceof Array || typeof mixins === 'function')){\n\t\t\tprops = mixins;\n\t\t\tmixins = undefined;\n\t\t}\n\n\t\tprops = props || {};\n\t\tmixins = mixins || [];\n\n\t\treturn declare([this].concat(mixins), props);\n\t}\n\n\t// chained constructor compatible with the legacy declare()\n\tfunction chainedConstructor(bases, ctorSpecial){\n\t\treturn function(){\n\t\t\tvar a = arguments, args = a, a0 = a[0], f, i, m,\n\t\t\t\tl = bases.length, preArgs;\n\n\t\t\tif(!(this instanceof a.callee)){\n\t\t\t\t// not called via new, so force it\n\t\t\t\treturn applyNew(a);\n\t\t\t}\n\n\t\t\t//this._inherited = {};\n\t\t\t// perform the shaman's rituals of the original declare()\n\t\t\t// 1) call two types of the preamble\n\t\t\tif(ctorSpecial && (a0 && a0.preamble || this.preamble)){\n\t\t\t\t// full blown ritual\n\t\t\t\tpreArgs = new Array(bases.length);\n\t\t\t\t// prepare parameters\n\t\t\t\tpreArgs[0] = a;\n\t\t\t\tfor(i = 0;;){\n\t\t\t\t\t// process the preamble of the 1st argument\n\t\t\t\t\ta0 = a[0];\n\t\t\t\t\tif(a0){\n\t\t\t\t\t\tf = a0.preamble;\n\t\t\t\t\t\tif(f){\n\t\t\t\t\t\t\ta = f.apply(this, a) || a;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t// process the preamble of this class\n\t\t\t\t\tf = bases[i].prototype;\n\t\t\t\t\tf = f.hasOwnProperty(\"preamble\") && f.preamble;\n\t\t\t\t\tif(f){\n\t\t\t\t\t\ta = f.apply(this, a) || a;\n\t\t\t\t\t}\n\t\t\t\t\t// one peculiarity of the preamble:\n\t\t\t\t\t// it is called if it is not needed,\n\t\t\t\t\t// e.g., there is no constructor to call\n\t\t\t\t\t// let's watch for the last constructor\n\t\t\t\t\t// (see ticket #9795)\n\t\t\t\t\tif(++i == l){\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tpreArgs[i] = a;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// 2) call all non-trivial constructors using prepared arguments\n\t\t\tfor(i = l - 1; i >= 0; --i){\n\t\t\t\tf = bases[i];\n\t\t\t\tm = f._meta;\n\t\t\t\tf = m ? m.ctor : f;\n\t\t\t\tif(f){\n\t\t\t\t\tf.apply(this, preArgs ? preArgs[i] : a);\n\t\t\t\t}\n\t\t\t}\n\t\t\t// 3) continue the original ritual: call the postscript\n\t\t\tf = this.postscript;\n\t\t\tif(f){\n\t\t\t\tf.apply(this, args);\n\t\t\t}\n\t\t};\n\t}\n\n\n\t// chained constructor compatible with the legacy declare()\n\tfunction singleConstructor(ctor, ctorSpecial){\n\t\treturn function(){\n\t\t\tvar a = arguments, t = a, a0 = a[0], f;\n\n\t\t\tif(!(this instanceof a.callee)){\n\t\t\t\t// not called via new, so force it\n\t\t\t\treturn applyNew(a);\n\t\t\t}\n\n\t\t\t//this._inherited = {};\n\t\t\t// perform the shaman's rituals of the original declare()\n\t\t\t// 1) call two types of the preamble\n\t\t\tif(ctorSpecial){\n\t\t\t\t// full blown ritual\n\t\t\t\tif(a0){\n\t\t\t\t\t// process the preamble of the 1st argument\n\t\t\t\t\tf = a0.preamble;\n\t\t\t\t\tif(f){\n\t\t\t\t\t\tt = f.apply(this, t) || t;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tf = this.preamble;\n\t\t\t\tif(f){\n\t\t\t\t\t// process the preamble of this class\n\t\t\t\t\tf.apply(this, t);\n\t\t\t\t\t// one peculiarity of the preamble:\n\t\t\t\t\t// it is called even if it is not needed,\n\t\t\t\t\t// e.g., there is no constructor to call\n\t\t\t\t\t// let's watch for the last constructor\n\t\t\t\t\t// (see ticket #9795)\n\t\t\t\t}\n\t\t\t}\n\t\t\t// 2) call a constructor\n\t\t\tif(ctor){\n\t\t\t\tctor.apply(this, a);\n\t\t\t}\n\t\t\t// 3) continue the original ritual: call the postscript\n\t\t\tf = this.postscript;\n\t\t\tif(f){\n\t\t\t\tf.apply(this, a);\n\t\t\t}\n\t\t};\n\t}\n\n\t// plain vanilla constructor (can use inherited() to call its base constructor)\n\tfunction simpleConstructor(bases){\n\t\treturn function(){\n\t\t\tvar a = arguments, i = 0, f, m;\n\n\t\t\tif(!(this instanceof a.callee)){\n\t\t\t\t// not called via new, so force it\n\t\t\t\treturn applyNew(a);\n\t\t\t}\n\n\t\t\t//this._inherited = {};\n\t\t\t// perform the shaman's rituals of the original declare()\n\t\t\t// 1) do not call the preamble\n\t\t\t// 2) call the top constructor (it can use this.inherited())\n\t\t\tfor(; f = bases[i]; ++i){ // intentional assignment\n\t\t\t\tm = f._meta;\n\t\t\t\tf = m ? m.ctor : f;\n\t\t\t\tif(f){\n\t\t\t\t\tf.apply(this, a);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// 3) call the postscript\n\t\t\tf = this.postscript;\n\t\t\tif(f){\n\t\t\t\tf.apply(this, a);\n\t\t\t}\n\t\t};\n\t}\n\n\tfunction chain(name, bases, reversed){\n\t\treturn function(){\n\t\t\tvar b, m, f, i = 0, step = 1;\n\t\t\tif(reversed){\n\t\t\t\ti = bases.length - 1;\n\t\t\t\tstep = -1;\n\t\t\t}\n\t\t\tfor(; b = bases[i]; i += step){ // intentional assignment\n\t\t\t\tm = b._meta;\n\t\t\t\tf = (m ? m.hidden : b.prototype)[name];\n\t\t\t\tif(f){\n\t\t\t\t\tf.apply(this, arguments);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n\n\t// forceNew(ctor)\n\t// return a new object that inherits from ctor.prototype but\n\t// without actually running ctor on the object.\n\tfunction forceNew(ctor){\n\t\t// create object with correct prototype using a do-nothing\n\t\t// constructor\n\t\txtor.prototype = ctor.prototype;\n\t\tvar t = new xtor;\n\t\txtor.prototype = null;\t// clean up\n\t\treturn t;\n\t}\n\n\t// applyNew(args)\n\t// just like 'new ctor()' except that the constructor and its arguments come\n\t// from args, which must be an array or an arguments object\n\tfunction applyNew(args){\n\t\t// create an object with ctor's prototype but without\n\t\t// calling ctor on it.\n\t\tvar ctor = args.callee, t = forceNew(ctor);\n\t\t// execute the real constructor on the new object\n\t\tctor.apply(t, args);\n\t\treturn t;\n\t}\n\n\tfunction declare(className, superclass, props){\n\t\t// summary:\n\t\t//\t\tCreate a feature-rich constructor from compact notation.\n\t\t// className: String?\n\t\t//\t\tThe optional name of the constructor (loosely, a \"class\")\n\t\t//\t\tstored in the \"declaredClass\" property in the created prototype.\n\t\t//\t\tIt will be used as a global name for a created constructor.\n\t\t// superclass: Function|Function[]\n\t\t//\t\tMay be null, a Function, or an Array of Functions. This argument\n\t\t//\t\tspecifies a list of bases (the left-most one is the most deepest\n\t\t//\t\tbase).\n\t\t// props: Object\n\t\t//\t\tAn object whose properties are copied to the created prototype.\n\t\t//\t\tAdd an instance-initialization function by making it a property\n\t\t//\t\tnamed \"constructor\".\n\t\t// returns: dojo/_base/declare.__DeclareCreatedObject\n\t\t//\t\tNew constructor function.\n\t\t// description:\n\t\t//\t\tCreate a constructor using a compact notation for inheritance and\n\t\t//\t\tprototype extension.\n\t\t//\n\t\t//\t\tMixin ancestors provide a type of multiple inheritance.\n\t\t//\t\tPrototypes of mixin ancestors are copied to the new class:\n\t\t//\t\tchanges to mixin prototypes will not affect classes to which\n\t\t//\t\tthey have been mixed in.\n\t\t//\n\t\t//\t\tAncestors can be compound classes created by this version of\n\t\t//\t\tdeclare(). In complex cases all base classes are going to be\n\t\t//\t\tlinearized according to C3 MRO algorithm\n\t\t//\t\t(see http://www.python.org/download/releases/2.3/mro/ for more\n\t\t//\t\tdetails).\n\t\t//\n\t\t//\t\t\"className\" is cached in \"declaredClass\" property of the new class,\n\t\t//\t\tif it was supplied. The immediate super class will be cached in\n\t\t//\t\t\"superclass\" property of the new class.\n\t\t//\n\t\t//\t\tMethods in \"props\" will be copied and modified: \"nom\" property\n\t\t//\t\t(the declared name of the method) will be added to all copied\n\t\t//\t\tfunctions to help identify them for the internal machinery. Be\n\t\t//\t\tvery careful, while reusing methods: if you use the same\n\t\t//\t\tfunction under different names, it can produce errors in some\n\t\t//\t\tcases.\n\t\t//\n\t\t//\t\tIt is possible to use constructors created \"manually\" (without\n\t\t//\t\tdeclare()) as bases. They will be called as usual during the\n\t\t//\t\tcreation of an instance, their methods will be chained, and even\n\t\t//\t\tcalled by \"this.inherited()\".\n\t\t//\n\t\t//\t\tSpecial property \"-chains-\" governs how to chain methods. It is\n\t\t//\t\ta dictionary, which uses method names as keys, and hint strings\n\t\t//\t\tas values. If a hint string is \"after\", this method will be\n\t\t//\t\tcalled after methods of its base classes. If a hint string is\n\t\t//\t\t\"before\", this method will be called before methods of its base\n\t\t//\t\tclasses.\n\t\t//\n\t\t//\t\tIf \"constructor\" is not mentioned in \"-chains-\" property, it will\n\t\t//\t\tbe chained using the legacy mode: using \"after\" chaining,\n\t\t//\t\tcalling preamble() method before each constructor, if available,\n\t\t//\t\tand calling postscript() after all constructors were executed.\n\t\t//\t\tIf the hint is \"after\", it is chained as a regular method, but\n\t\t//\t\tpostscript() will be called after the chain of constructors.\n\t\t//\t\t\"constructor\" cannot be chained \"before\", but it allows\n\t\t//\t\ta special hint string: \"manual\", which means that constructors\n\t\t//\t\tare not going to be chained in any way, and programmer will call\n\t\t//\t\tthem manually using this.inherited(). In the latter case\n\t\t//\t\tpostscript() will be called after the construction.\n\t\t//\n\t\t//\t\tAll chaining hints are \"inherited\" from base classes and\n\t\t//\t\tpotentially can be overridden. Be very careful when overriding\n\t\t//\t\thints! Make sure that all chained methods can work in a proposed\n\t\t//\t\tmanner of chaining.\n\t\t//\n\t\t//\t\tOnce a method was chained, it is impossible to unchain it. The\n\t\t//\t\tonly exception is \"constructor\". You don't need to define a\n\t\t//\t\tmethod in order to supply a chaining hint.\n\t\t//\n\t\t//\t\tIf a method is chained, it cannot use this.inherited() because\n\t\t//\t\tall other methods in the hierarchy will be called automatically.\n\t\t//\n\t\t//\t\tUsually constructors and initializers of any kind are chained\n\t\t//\t\tusing \"after\" and destructors of any kind are chained as\n\t\t//\t\t\"before\". Note that chaining assumes that chained methods do not\n\t\t//\t\treturn any value: any returned value will be discarded.\n\t\t//\n\t\t// example:\n\t\t//\t|\tdeclare(\"my.classes.bar\", my.classes.foo, {\n\t\t//\t|\t\t// properties to be added to the class prototype\n\t\t//\t|\t\tsomeValue: 2,\n\t\t//\t|\t\t// initialization function\n\t\t//\t|\t\tconstructor: function(){\n\t\t//\t|\t\t\tthis.myComplicatedObject = new ReallyComplicatedObject();\n\t\t//\t|\t\t},\n\t\t//\t|\t\t// other functions\n\t\t//\t|\t\tsomeMethod: function(){\n\t\t//\t|\t\t\tdoStuff();\n\t\t//\t|\t\t}\n\t\t//\t|\t});\n\t\t//\n\t\t// example:\n\t\t//\t|\tvar MyBase = declare(null, {\n\t\t//\t|\t\t// constructor, properties, and methods go here\n\t\t//\t|\t\t// ...\n\t\t//\t|\t});\n\t\t//\t|\tvar MyClass1 = declare(MyBase, {\n\t\t//\t|\t\t// constructor, properties, and methods go here\n\t\t//\t|\t\t// ...\n\t\t//\t|\t});\n\t\t//\t|\tvar MyClass2 = declare(MyBase, {\n\t\t//\t|\t\t// constructor, properties, and methods go here\n\t\t//\t|\t\t// ...\n\t\t//\t|\t});\n\t\t//\t|\tvar MyDiamond = declare([MyClass1, MyClass2], {\n\t\t//\t|\t\t// constructor, properties, and methods go here\n\t\t//\t|\t\t// ...\n\t\t//\t|\t});\n\t\t//\n\t\t// example:\n\t\t//\t|\tvar F = function(){ console.log(\"raw constructor\"); };\n\t\t//\t|\tF.prototype.method = function(){\n\t\t//\t|\t\tconsole.log(\"raw method\");\n\t\t//\t|\t};\n\t\t//\t|\tvar A = declare(F, {\n\t\t//\t|\t\tconstructor: function(){\n\t\t//\t|\t\t\tconsole.log(\"A.constructor\");\n\t\t//\t|\t\t},\n\t\t//\t|\t\tmethod: function(){\n\t\t//\t|\t\t\tconsole.log(\"before calling F.method...\");\n\t\t//\t|\t\t\tthis.inherited(arguments);\n\t\t//\t|\t\t\tconsole.log(\"...back in A\");\n\t\t//\t|\t\t}\n\t\t//\t|\t});\n\t\t//\t|\tnew A().method();\n\t\t//\t|\t// will print:\n\t\t//\t|\t// raw constructor\n\t\t//\t|\t// A.constructor\n\t\t//\t|\t// before calling F.method...\n\t\t//\t|\t// raw method\n\t\t//\t|\t// ...back in A\n\t\t//\n\t\t// example:\n\t\t//\t|\tvar A = declare(null, {\n\t\t//\t|\t\t\"-chains-\": {\n\t\t//\t|\t\t\tdestroy: \"before\"\n\t\t//\t|\t\t}\n\t\t//\t|\t});\n\t\t//\t|\tvar B = declare(A, {\n\t\t//\t|\t\tconstructor: function(){\n\t\t//\t|\t\t\tconsole.log(\"B.constructor\");\n\t\t//\t|\t\t},\n\t\t//\t|\t\tdestroy: function(){\n\t\t//\t|\t\t\tconsole.log(\"B.destroy\");\n\t\t//\t|\t\t}\n\t\t//\t|\t});\n\t\t//\t|\tvar C = declare(B, {\n\t\t//\t|\t\tconstructor: function(){\n\t\t//\t|\t\t\tconsole.log(\"C.constructor\");\n\t\t//\t|\t\t},\n\t\t//\t|\t\tdestroy: function(){\n\t\t//\t|\t\t\tconsole.log(\"C.destroy\");\n\t\t//\t|\t\t}\n\t\t//\t|\t});\n\t\t//\t|\tnew C().destroy();\n\t\t//\t|\t// prints:\n\t\t//\t|\t// B.constructor\n\t\t//\t|\t// C.constructor\n\t\t//\t|\t// C.destroy\n\t\t//\t|\t// B.destroy\n\t\t//\n\t\t// example:\n\t\t//\t|\tvar A = declare(null, {\n\t\t//\t|\t\t\"-chains-\": {\n\t\t//\t|\t\t\tconstructor: \"manual\"\n\t\t//\t|\t\t}\n\t\t//\t|\t});\n\t\t//\t|\tvar B = declare(A, {\n\t\t//\t|\t\tconstructor: function(){\n\t\t//\t|\t\t\t// ...\n\t\t//\t|\t\t\t// call the base constructor with new parameters\n\t\t//\t|\t\t\tthis.inherited(arguments, [1, 2, 3]);\n\t\t//\t|\t\t\t// ...\n\t\t//\t|\t\t}\n\t\t//\t|\t});\n\t\t//\n\t\t// example:\n\t\t//\t|\tvar A = declare(null, {\n\t\t//\t|\t\t\"-chains-\": {\n\t\t//\t|\t\t\tm1: \"before\"\n\t\t//\t|\t\t},\n\t\t//\t|\t\tm1: function(){\n\t\t//\t|\t\t\tconsole.log(\"A.m1\");\n\t\t//\t|\t\t},\n\t\t//\t|\t\tm2: function(){\n\t\t//\t|\t\t\tconsole.log(\"A.m2\");\n\t\t//\t|\t\t}\n\t\t//\t|\t});\n\t\t//\t|\tvar B = declare(A, {\n\t\t//\t|\t\t\"-chains-\": {\n\t\t//\t|\t\t\tm2: \"after\"\n\t\t//\t|\t\t},\n\t\t//\t|\t\tm1: function(){\n\t\t//\t|\t\t\tconsole.log(\"B.m1\");\n\t\t//\t|\t\t},\n\t\t//\t|\t\tm2: function(){\n\t\t//\t|\t\t\tconsole.log(\"B.m2\");\n\t\t//\t|\t\t}\n\t\t//\t|\t});\n\t\t//\t|\tvar x = new B();\n\t\t//\t|\tx.m1();\n\t\t//\t|\t// prints:\n\t\t//\t|\t// B.m1\n\t\t//\t|\t// A.m1\n\t\t//\t|\tx.m2();\n\t\t//\t|\t// prints:\n\t\t//\t|\t// A.m2\n\t\t//\t|\t// B.m2\n\n\t\t// crack parameters\n\t\tif(typeof className != \"string\"){\n\t\t\tprops = superclass;\n\t\t\tsuperclass = className;\n\t\t\tclassName = \"\";\n\t\t}\n\t\tprops = props || {};\n\n\t\tvar proto, i, t, ctor, name, bases, chains, mixins = 1, parents = superclass;\n\n\t\t// build a prototype\n\t\tif(opts.call(superclass) == \"[object Array]\"){\n\t\t\t// C3 MRO\n\t\t\tbases = c3mro(superclass, className);\n\t\t\tt = bases[0];\n\t\t\tmixins = bases.length - t;\n\t\t\tsuperclass = bases[mixins];\n\t\t}else{\n\t\t\tbases = [0];\n\t\t\tif(superclass){\n\t\t\t\tif(opts.call(superclass) == \"[object Function]\"){\n\t\t\t\t\tt = superclass._meta;\n\t\t\t\t\tbases = bases.concat(t ? t.bases : superclass);\n\t\t\t\t}else{\n\t\t\t\t\terr(\"base class is not a callable constructor.\", className);\n\t\t\t\t}\n\t\t\t}else if(superclass !== null){\n\t\t\t\terr(\"unknown base class. Did you use dojo.require to pull it in?\", className);\n\t\t\t}\n\t\t}\n\t\tif(superclass){\n\t\t\tfor(i = mixins - 1;; --i){\n\t\t\t\tproto = forceNew(superclass);\n\t\t\t\tif(!i){\n\t\t\t\t\t// stop if nothing to add (the last base)\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\t// mix in properties\n\t\t\t\tt = bases[i];\n\t\t\t\t(t._meta ? mixOwn : mix)(proto, t.prototype);\n\t\t\t\t// chain in new constructor\n\t\t\t\tif (has(\"csp-restrictions\")) {\n\t\t\t\t\tctor = function () {};\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tctor = new Function;\n\t\t\t\t}\n\t\t\t\tctor.superclass = superclass;\n\t\t\t\tctor.prototype = proto;\n\t\t\t\tsuperclass = proto.constructor = ctor;\n\t\t\t}\n\t\t}else{\n\t\t\tproto = {};\n\t\t}\n\t\t// add all properties\n\t\tdeclare.safeMixin(proto, props);\n\t\t// add constructor\n\t\tt = props.constructor;\n\t\tif(t !== op.constructor){\n\t\t\tt.nom = cname;\n\t\t\tproto.constructor = t;\n\t\t}\n\n\t\t// collect chains and flags\n\t\tfor(i = mixins - 1; i; --i){ // intentional assignment\n\t\t\tt = bases[i]._meta;\n\t\t\tif(t && t.chains){\n\t\t\t\tchains = mix(chains || {}, t.chains);\n\t\t\t}\n\t\t}\n\t\tif(proto[\"-chains-\"]){\n\t\t\tchains = mix(chains || {}, proto[\"-chains-\"]);\n\t\t}\n\n\t\tif(superclass && superclass.prototype && superclass.prototype[\"-chains-\"]) {\n\t\t\tchains = mix(chains || {}, superclass.prototype[\"-chains-\"]);\n\t\t}\n\n\t\t// build ctor\n\t\tt = !chains || !chains.hasOwnProperty(cname);\n\t\tbases[0] = ctor = (chains && chains.constructor === \"manual\") ? simpleConstructor(bases) :\n\t\t\t(bases.length == 1 ? singleConstructor(props.constructor, t) : chainedConstructor(bases, t));\n\n\t\t// add meta information to the constructor\n\t\tctor._meta = {bases: bases, hidden: props, chains: chains,\n\t\t\tparents: parents, ctor: props.constructor};\n\t\tctor.superclass = superclass && superclass.prototype;\n\t\tctor.extend = extend;\n\t\tctor.createSubclass = createSubclass;\n\t\tctor.prototype = proto;\n\t\tproto.constructor = ctor;\n\n\t\t// add \"standard\" methods to the prototype\n\t\tproto.getInherited = getInherited;\n\t\tproto.isInstanceOf = isInstanceOf;\n\t\tproto.inherited = inheritedImpl;\n\t\tproto.__inherited = inherited;\n\n\t\t// add name if specified\n\t\tif(className){\n\t\t\tproto.declaredClass = className;\n\t\t\tlang.setObject(className, ctor);\n\t\t}\n\n\t\t// build chains and add them to the prototype\n\t\tif(chains){\n\t\t\tfor(name in chains){\n\t\t\t\tif(proto[name] && typeof chains[name] == \"string\" && name != cname){\n\t\t\t\t\tt = proto[name] = chain(name, bases, chains[name] === \"after\");\n\t\t\t\t\tt.nom = name;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// chained methods do not return values\n\t\t// no need to chain \"invisible\" functions\n\n\t\treturn ctor;\t// Function\n\t}\n\n\t/*=====\n\tdeclare.__DeclareCreatedObject = {\n\t\t// summary:\n\t\t//\t\tdojo/_base/declare() returns a constructor `C`. `new C()` returns an Object with the following\n\t\t//\t\tmethods, in addition to the methods and properties specified via the arguments passed to declare().\n\n\t\tinherited: function(name, caller, args, newArgs){\n\t\t\t// summary:\n\t\t\t//\t\tCalls a super method.\n\t\t\t// name: String?\n\t\t\t//\t\tThe optional method name. Should be the same as the caller's\n\t\t\t//\t\tname. Usually \"name\" is specified in complex dynamic cases, when\n\t\t\t//\t\tthe calling method was dynamically added, undecorated by\n\t\t\t//\t\tdeclare(), and it cannot be determined.\n\t\t\t// caller: Function?\n\t\t\t//\t\tThe reference to the calling function. Required only if the\n\t\t\t//\t\tcall to \"this.inherited\" occurs from within strict-mode code.\n\t\t\t//\t\tIf the caller is omitted within strict-mode code, an error will\n\t\t\t//\t\tbe thrown.\n\t\t\t//\t\tThe best way to obtain a reference to the calling function is to\n\t\t\t//\t\tuse a named function expression (i.e. place a function name\n\t\t\t//\t\tafter the \"function\" keyword and before the open paren, as in\n\t\t\t//\t\t\"function fn(a, b)\"). If the function is parsed as an expression\n\t\t\t//\t\tand not a statement (i.e. it's not by itself on its own line),\n\t\t\t//\t\tthe function name will only be accessible as an identifier from\n\t\t\t//\t\twithin the body of the function.\n\t\t\t// args: Arguments\n\t\t\t//\t\tThe caller supply this argument, which should be the original\n\t\t\t//\t\t\"arguments\".\n\t\t\t// newArgs: Object?\n\t\t\t//\t\tIf \"true\", the found function will be returned without\n\t\t\t//\t\texecuting it.\n\t\t\t//\t\tIf Array, it will be used to call a super method. Otherwise\n\t\t\t//\t\t\"args\" will be used.\n\t\t\t// returns:\n\t\t\t//\t\tWhatever is returned by a super method, or a super method itself,\n\t\t\t//\t\tif \"true\" was specified as newArgs.\n\t\t\t// description:\n\t\t\t//\t\tThis method is used inside method of classes produced with\n\t\t\t//\t\tdeclare() to call a super method (next in the chain). It is\n\t\t\t//\t\tused for manually controlled chaining. Consider using the regular\n\t\t\t//\t\tchaining, because it is faster. Use \"this.inherited()\" only in\n\t\t\t//\t\tcomplex cases.\n\t\t\t//\n\t\t\t//\t\tThis method cannot me called from automatically chained\n\t\t\t//\t\tconstructors including the case of a special (legacy)\n\t\t\t//\t\tconstructor chaining. It cannot be called from chained methods.\n\t\t\t//\n\t\t\t//\t\tIf \"this.inherited()\" cannot find the next-in-chain method, it\n\t\t\t//\t\tdoes nothing and returns \"undefined\". The last method in chain\n\t\t\t//\t\tcan be a default method implemented in Object, which will be\n\t\t\t//\t\tcalled last.\n\t\t\t//\n\t\t\t//\t\tIf \"name\" is specified, it is assumed that the method that\n\t\t\t//\t\treceived \"args\" is the parent method for this call. It is looked\n\t\t\t//\t\tup in the chain list and if it is found the next-in-chain method\n\t\t\t//\t\tis called. If it is not found, the first-in-chain method is\n\t\t\t//\t\tcalled.\n\t\t\t//\n\t\t\t//\t\tIf \"name\" is not specified, it will be derived from the calling\n\t\t\t//\t\tmethod (using a methoid property \"nom\").\n\t\t\t//\n\t\t\t// example:\n\t\t\t//\t|\tvar B = declare(A, {\n\t\t\t//\t|\t\tmethod1: function(a, b, c){\n\t\t\t//\t|\t\t\tthis.inherited(arguments);\n\t\t\t//\t|\t\t},\n\t\t\t//\t|\t\tmethod2: function(a, b){\n\t\t\t//\t|\t\t\treturn this.inherited(arguments, [a + b]);\n\t\t\t//\t|\t\t}\n\t\t\t//\t|\t});\n\t\t\t//\t|\t// next method is not in the chain list because it is added\n\t\t\t//\t|\t// manually after the class was created.\n\t\t\t//\t|\tB.prototype.method3 = function(){\n\t\t\t//\t|\t\tconsole.log(\"This is a dynamically-added method.\");\n\t\t\t//\t|\t\tthis.inherited(\"method3\", arguments);\n\t\t\t//\t|\t};\n\t\t\t// example:\n\t\t\t//\t|\tvar B = declare(A, {\n\t\t\t//\t|\t\tmethod: function(a, b){\n\t\t\t//\t|\t\t\tvar super = this.inherited(arguments, true);\n\t\t\t//\t|\t\t\t// ...\n\t\t\t//\t|\t\t\tif(!super){\n\t\t\t//\t|\t\t\t\tconsole.log(\"there is no super method\");\n\t\t\t//\t|\t\t\t\treturn 0;\n\t\t\t//\t|\t\t\t}\n\t\t\t//\t|\t\t\treturn super.apply(this, arguments);\n\t\t\t//\t|\t\t}\n\t\t\t//\t|\t});\n\t\t\t// example:\n\t\t\t//\t|\t\"use strict\";\n\t\t\t//\t|\t// class is defined in strict-mode code,\n\t\t\t//\t|\t// so caller must be passed before arguments.\n\t\t\t//\t|\tvar B = declare(A, {\n\t\t\t//\t|\t\t// using a named function expression with \"fn\" as the name.\n\t\t\t//\t|\t\tmethod: function fn(a, b) {\n\t\t\t//\t|\t\t\tthis.inherited(fn, arguments);\n\t\t\t//\t|\t\t}\n\t\t\t//\t|\t});\n\t\t\treturn\t{};\t// Object\n\t\t},\n\n\t\tgetInherited: function(name, caller, args){\n\t\t\t// summary:\n\t\t\t//\t\tReturns a super method.\n\t\t\t// name: String?\n\t\t\t//\t\tThe optional method name. Should be the same as the caller's\n\t\t\t//\t\tname. Usually \"name\" is specified in complex dynamic cases, when\n\t\t\t//\t\tthe calling method was dynamically added, undecorated by\n\t\t\t//\t\tdeclare(), and it cannot be determined.\n\t\t\t// caller: Function?\n\t\t\t//\t\tThe caller function. This is required when running in\n\t\t\t//\t\tstrict-mode code. A reference to the caller function\n\t\t\t//\t\tcan be obtained by using a named function expression\n\t\t\t//\t\t(e.g. function fn(a,b) {...}).\n\t\t\t// args: Arguments\n\t\t\t//\t\tThe caller supply this argument, which should be the original\n\t\t\t//\t\t\"arguments\".\n\t\t\t// returns:\n\t\t\t//\t\tReturns a super method (Function) or \"undefined\".\n\t\t\t// description:\n\t\t\t//\t\tThis method is a convenience method for \"this.inherited()\".\n\t\t\t//\t\tIt uses the same algorithm but instead of executing a super\n\t\t\t//\t\tmethod, it returns it, or \"undefined\" if not found.\n\t\t\t//\n\t\t\t// example:\n\t\t\t//\t|\tvar B = declare(A, {\n\t\t\t//\t|\t\tmethod: function(a, b){\n\t\t\t//\t|\t\t\tvar super = this.getInherited(arguments);\n\t\t\t//\t|\t\t\t// ...\n\t\t\t//\t|\t\t\tif(!super){\n\t\t\t//\t|\t\t\t\tconsole.log(\"there is no super method\");\n\t\t\t//\t|\t\t\t\treturn 0;\n\t\t\t//\t|\t\t\t}\n\t\t\t//\t|\t\t\treturn super.apply(this, arguments);\n\t\t\t//\t|\t\t}\n\t\t\t//\t|\t});\n\t\t\t// example:\n\t\t\t//\t|\t\"use strict;\" // first line of function or file\n\t\t\t//\t|\t//...\n\t\t\t//\t|\tvar B = declare(A, {\n\t\t\t//\t|\t\t// Using a named function expression with \"fn\" as the name,\n\t\t\t//\t|\t\t// since we're in strict mode.\n\t\t\t//\t|\t\tmethod: function fn(a, b){\n\t\t\t//\t|\t\t\tvar super = this.getInherited(fn, arguments);\n\t\t\t//\t|\t\t\tif(super){\n\t\t\t//\t|\t\t\t\treturn super.apply(this, arguments);\n\t\t\t//\t|\t\t\t}\n\t\t\t//\t|\t\t}\n\t\t\t//\t|\t});\n\t\t\treturn\t{};\t// Object\n\t\t},\n\n\t\tisInstanceOf: function(cls){\n\t\t\t// summary:\n\t\t\t//\t\tChecks the inheritance chain to see if it is inherited from this\n\t\t\t//\t\tclass.\n\t\t\t// cls: Function\n\t\t\t//\t\tClass constructor.\n\t\t\t// returns:\n\t\t\t//\t\t\"true\", if this object is inherited from this class, \"false\"\n\t\t\t//\t\totherwise.\n\t\t\t// description:\n\t\t\t//\t\tThis method is used with instances of classes produced with\n\t\t\t//\t\tdeclare() to determine of they support a certain interface or\n\t\t\t//\t\tnot. It models \"instanceof\" operator.\n\t\t\t//\n\t\t\t// example:\n\t\t\t//\t|\tvar A = declare(null, {\n\t\t\t//\t|\t\t// constructor, properties, and methods go here\n\t\t\t//\t|\t\t// ...\n\t\t\t//\t|\t});\n\t\t\t//\t|\tvar B = declare(null, {\n\t\t\t//\t|\t\t// constructor, properties, and methods go here\n\t\t\t//\t|\t\t// ...\n\t\t\t//\t|\t});\n\t\t\t//\t|\tvar C = declare([A, B], {\n\t\t\t//\t|\t\t// constructor, properties, and methods go here\n\t\t\t//\t|\t\t// ...\n\t\t\t//\t|\t});\n\t\t\t//\t|\tvar D = declare(A, {\n\t\t\t//\t|\t\t// constructor, properties, and methods go here\n\t\t\t//\t|\t\t// ...\n\t\t\t//\t|\t});\n\t\t\t//\t|\n\t\t\t//\t|\tvar a = new A(), b = new B(), c = new C(), d = new D();\n\t\t\t//\t|\n\t\t\t//\t|\tconsole.log(a.isInstanceOf(A)); // true\n\t\t\t//\t|\tconsole.log(b.isInstanceOf(A)); // false\n\t\t\t//\t|\tconsole.log(c.isInstanceOf(A)); // true\n\t\t\t//\t|\tconsole.log(d.isInstanceOf(A)); // true\n\t\t\t//\t|\n\t\t\t//\t|\tconsole.log(a.isInstanceOf(B)); // false\n\t\t\t//\t|\tconsole.log(b.isInstanceOf(B)); // true\n\t\t\t//\t|\tconsole.log(c.isInstanceOf(B)); // true\n\t\t\t//\t|\tconsole.log(d.isInstanceOf(B)); // false\n\t\t\t//\t|\n\t\t\t//\t|\tconsole.log(a.isInstanceOf(C)); // false\n\t\t\t//\t|\tconsole.log(b.isInstanceOf(C)); // false\n\t\t\t//\t|\tconsole.log(c.isInstanceOf(C)); // true\n\t\t\t//\t|\tconsole.log(d.isInstanceOf(C)); // false\n\t\t\t//\t|\n\t\t\t//\t|\tconsole.log(a.isInstanceOf(D)); // false\n\t\t\t//\t|\tconsole.log(b.isInstanceOf(D)); // false\n\t\t\t//\t|\tconsole.log(c.isInstanceOf(D)); // false\n\t\t\t//\t|\tconsole.log(d.isInstanceOf(D)); // true\n\t\t\treturn\t{};\t// Object\n\t\t},\n\n\t\textend: function(source){\n\t\t\t// summary:\n\t\t\t//\t\tAdds all properties and methods of source to constructor's\n\t\t\t//\t\tprototype, making them available to all instances created with\n\t\t\t//\t\tconstructor. This method is specific to constructors created with\n\t\t\t//\t\tdeclare().\n\t\t\t// source: Object\n\t\t\t//\t\tSource object which properties are going to be copied to the\n\t\t\t//\t\tconstructor's prototype.\n\t\t\t// description:\n\t\t\t//\t\tAdds source properties to the constructor's prototype. It can\n\t\t\t//\t\toverride existing properties.\n\t\t\t//\n\t\t\t//\t\tThis method is similar to dojo.extend function, but it is specific\n\t\t\t//\t\tto constructors produced by declare(). It is implemented\n\t\t\t//\t\tusing dojo.safeMixin, and it skips a constructor property,\n\t\t\t//\t\tand properly decorates copied functions.\n\t\t\t//\n\t\t\t// example:\n\t\t\t//\t|\tvar A = declare(null, {\n\t\t\t//\t|\t\tm1: function(){},\n\t\t\t//\t|\t\ts1: \"Popokatepetl\"\n\t\t\t//\t|\t});\n\t\t\t//\t|\tA.extend({\n\t\t\t//\t|\t\tm1: function(){},\n\t\t\t//\t|\t\tm2: function(){},\n\t\t\t//\t|\t\tf1: true,\n\t\t\t//\t|\t\td1: 42\n\t\t\t//\t|\t});\n\t\t},\n\n\t\tcreateSubclass: function(mixins, props){\n\t\t\t// summary:\n\t\t\t//\t\tCreate a subclass of the declared class from a list of base classes.\n\t\t\t// mixins: Function[]\n\t\t\t//\t\tSpecifies a list of bases (the left-most one is the most deepest\n\t\t\t//\t\tbase).\n\t\t\t// props: Object?\n\t\t\t//\t\tAn optional object whose properties are copied to the created prototype.\n\t\t\t// returns: dojo/_base/declare.__DeclareCreatedObject\n\t\t\t//\t\tNew constructor function.\n\t\t\t// description:\n\t\t\t//\t\tCreate a constructor using a compact notation for inheritance and\n\t\t\t//\t\tprototype extension.\n\t\t\t//\n\t\t\t//\t\tMixin ancestors provide a type of multiple inheritance.\n\t\t\t//\t\tPrototypes of mixin ancestors are copied to the new class:\n\t\t\t//\t\tchanges to mixin prototypes will not affect classes to which\n\t\t\t//\t\tthey have been mixed in.\n\t\t\t//\n\t\t\t// example:\n\t\t\t//\t|\tvar A = declare(null, {\n\t\t\t//\t|\t\tm1: function(){},\n\t\t\t//\t|\t\ts1: \"bar\"\n\t\t\t//\t|\t});\n\t\t\t//\t|\tvar B = declare(null, {\n\t\t\t//\t|\t\tm2: function(){},\n\t\t\t//\t|\t\ts2: \"foo\"\n\t\t\t//\t|\t});\n\t\t\t//\t|\tvar C = declare(null, {\n\t\t\t//\t|\t});\n\t\t\t//\t|\tvar D1 = A.createSubclass([B, C], {\n\t\t\t//\t|\t\tm1: function(){},\n\t\t\t//\t|\t\td1: 42\n\t\t\t//\t|\t});\n\t\t\t//\t|\tvar d1 = new D1();\n\t\t\t//\t|\n\t\t\t//\t|\t// this is equivalent to:\n\t\t\t//\t|\tvar D2 = declare([A, B, C], {\n\t\t\t//\t|\t\tm1: function(){},\n\t\t\t//\t|\t\td1: 42\n\t\t\t//\t|\t});\n\t\t\t//\t|\tvar d2 = new D2();\n\t\t}\n\t};\n\t=====*/\n\n\t// For back-compat, remove for 2.0\n\tdojo.safeMixin = declare.safeMixin = safeMixin;\n\tdojo.declare = declare;\n\n\treturn declare;\n});\n","define([\"../global\", \"../has\", \"./config\", \"require\", \"module\"], function(global, has, config, require, module){\n\t// module:\n\t//\t\tdojo/_base/kernel\n\n\t// This module is the foundational module of the dojo boot sequence; it defines the dojo object.\n\n\tvar\n\t\t// loop variables for this module\n\t\ti, p,\n\n\t\t// create dojo, dijit, and dojox\n\t\t// FIXME: in 2.0 remove dijit, dojox being created by dojo\n\t\tdijit = {},\n\t\tdojox = {},\n\t\tdojo = {\n\t\t\t// summary:\n\t\t\t//\t\tThis module is the foundational module of the dojo boot sequence; it defines the dojo object.\n\n\t\t\t// notice dojo takes ownership of the value of the config module\n\t\t\tconfig:config,\n\t\t\tglobal:global,\n\t\t\tdijit:dijit,\n\t\t\tdojox:dojox\n\t\t};\n\n\n\t// Configure the scope map. For a 100% AMD application, the scope map is not needed other than to provide\n\t// a _scopeName property for the dojo, dijit, and dojox root object so those packages can create\n\t// unique names in the global space.\n\t//\n\t// Built, legacy modules use the scope map to allow those modules to be expressed as if dojo, dijit, and dojox,\n\t// where global when in fact they are either global under different names or not global at all. In v1.6-, the\n\t// config variable \"scopeMap\" was used to map names as used within a module to global names. This has been\n\t// subsumed by the AMD map configuration variable which can relocate packages to different names. For backcompat,\n\t// only the \"*\" mapping is supported. See http://livedocs.dojotoolkit.org/developer/design/loader#legacy-cross-domain-mode for details.\n\t//\n\t// The following computations contort the packageMap for this dojo instance into a scopeMap.\n\tvar scopeMap =\n\t\t\t// a map from a name used in a legacy module to the (global variable name, object addressed by that name)\n\t\t\t// always map dojo, dijit, and dojox\n\t\t\t{\n\t\t\t\tdojo:[\"dojo\", dojo],\n\t\t\t\tdijit:[\"dijit\", dijit],\n\t\t\t\tdojox:[\"dojox\", dojox]\n\t\t\t},\n\n\t\tpackageMap =\n\t\t\t// the package map for this dojo instance; note, a foreign loader or no pacakgeMap results in the above default config\n\t\t\t(require.map && require.map[module.id.match(/[^\\/]+/)[0]]),\n\n\t\titem;\n\n\n\t// process all mapped top-level names for this instance of dojo\n\tfor(p in packageMap){\n\t\tif(scopeMap[p]){\n\t\t\t// mapped dojo, dijit, or dojox\n\t\t\tscopeMap[p][0] = packageMap[p];\n\t\t}else{\n\t\t\t// some other top-level name\n\t\t\tscopeMap[p] = [packageMap[p], {}];\n\t\t}\n\t}\n\n\t// publish those names to _scopeName and, optionally, the global namespace\n\tfor(p in scopeMap){\n\t\titem = scopeMap[p];\n\t\titem[1]._scopeName = item[0];\n\t\tif(!config.noGlobals){\n\t\t\tglobal[item[0]] = item[1];\n\t\t}\n\t}\n\tdojo.scopeMap = scopeMap;\n\n\t/*===== dojo.__docParserConfigureScopeMap(scopeMap); =====*/\n\n\t// FIXME: dojo.baseUrl and dojo.config.baseUrl should be deprecated\n\tdojo.baseUrl = dojo.config.baseUrl = require.baseUrl;\n\tdojo.isAsync = !has(\"dojo-loader\") || require.async;\n\tdojo.locale = config.locale;\n\n\tvar rev = \"$Rev:$\".match(/[0-9a-f]{7,}/);\n\tdojo.version = {\n\t\t// summary:\n\t\t//\t\tVersion number of the Dojo Toolkit\n\t\t// description:\n\t\t//\t\tHash about the version, including\n\t\t//\n\t\t//\t\t- major: Integer: Major version. If total version is \"1.2.0beta1\", will be 1\n\t\t//\t\t- minor: Integer: Minor version. If total version is \"1.2.0beta1\", will be 2\n\t\t//\t\t- patch: Integer: Patch version. If total version is \"1.2.0beta1\", will be 0\n\t\t//\t\t- flag: String: Descriptor flag. If total version is \"1.2.0beta1\", will be \"beta1\"\n\t\t//\t\t- revision: Number: The Git rev from which dojo was pulled\n\n\t\tmajor: 1, minor: 17, patch: 1, flag: \"\",\n\t\trevision: rev ? rev[0] : NaN,\n\t\ttoString: function(){\n\t\t\tvar v = dojo.version;\n\t\t\treturn v.major + \".\" + v.minor + \".\" + v.patch + v.flag + \" (\" + v.revision + \")\";\t// String\n\t\t}\n\t};\n\n\t// If has(\"extend-dojo\") is truthy, then as a dojo module is defined it should push it's definitions\n\t// into the dojo object, and conversely. In 2.0, it will likely be unusual to augment another object\n\t// as a result of defining a module. This has feature gives a way to force 2.0 behavior as the code\n\t// is migrated. Absent specific advice otherwise, set extend-dojo to truthy.\n\thas.add(\"extend-dojo\", 1);\n\n\tif(!has(\"csp-restrictions\")){\n\t\t(Function(\"d\", \"d.eval = function(){return d.global.eval ? d.global.eval(arguments[0]) : eval(arguments[0]);}\"))(dojo);\n\t}\n\t/*=====\n\tdojo.eval = function(scriptText){\n\t\t// summary:\n\t\t//\t\tA legacy method created for use exclusively by internal Dojo methods. Do not use this method\n\t\t//\t\tdirectly unless you understand its possibly-different implications on the platforms your are targeting.\n\t\t// description:\n\t\t//\t\tMakes an attempt to evaluate scriptText in the global scope. The function works correctly for browsers\n\t\t//\t\tthat support indirect eval.\n\t\t//\n\t\t//\t\tAs usual, IE does not. On IE, the only way to implement global eval is to\n\t\t//\t\tuse execScript. Unfortunately, execScript does not return a value and breaks some current usages of dojo.eval.\n\t\t//\t\tThis implementation uses the technique of executing eval in the scope of a function that is a single scope\n\t\t//\t\tframe below the global scope; thereby coming close to the global scope. Note carefully that\n\t\t//\n\t\t//\t\tdojo.eval(\"var pi = 3.14;\");\n\t\t//\n\t\t//\t\twill define global pi in non-IE environments, but define pi only in a temporary local scope for IE. If you want\n\t\t//\t\tto define a global variable using dojo.eval, write something like\n\t\t//\n\t\t//\t\tdojo.eval(\"window.pi = 3.14;\")\n\t\t// scriptText:\n\t\t//\t\tThe text to evaluation.\n\t\t// returns:\n\t\t//\t\tThe result of the evaluation. Often `undefined`\n\t};\n\t=====*/\n\n\n\tif(has(\"host-rhino\")){\n\t\tdojo.exit = function(exitcode){\n\t\t\tquit(exitcode);\n\t\t};\n\t}else{\n\t\tdojo.exit = function(){\n\t\t};\n\t}\n\n\tif(!has(\"host-webworker\")){\n\t\t// console is immutable in FF30+, https://bugs.dojotoolkit.org/ticket/18100\n\t\thas.add(\"dojo-guarantee-console\",\n\t\t\t// ensure that console.log, console.warn, etc. are defined\n\t\t\t1\n\t\t);\n\t}\n\n\tif(has(\"dojo-guarantee-console\")){\n\t\t// IE 9 bug: https://bugs.dojotoolkit.org/ticket/18197\n\t\thas.add(\"console-as-object\", function () {\n\t\t\treturn Function.prototype.bind && console && typeof console.log === \"object\";\n\t\t});\n\n\t\ttypeof console != \"undefined\" || (console = {}); // intentional assignment\n\t\t//\tBe careful to leave 'log' always at the end\n\t\tvar cn = [\n\t\t\t\"assert\", \"count\", \"debug\", \"dir\", \"dirxml\", \"error\", \"group\",\n\t\t\t\"groupEnd\", \"info\", \"profile\", \"profileEnd\", \"time\", \"timeEnd\",\n\t\t\t\"trace\", \"warn\", \"log\"\n\t\t];\n\t\tvar tn;\n\t\ti = 0;\n\t\twhile((tn = cn[i++])){\n\t\t\tif(!console[tn]){\n\t\t\t\t(function(){\n\t\t\t\t\tvar tcn = tn + \"\";\n\t\t\t\t\tconsole[tcn] = ('log' in console) ? function(){\n\t\t\t\t\t\tvar a = Array.prototype.slice.call(arguments);\n\t\t\t\t\t\ta.unshift(tcn + \":\");\n\t\t\t\t\t\tconsole[\"log\"](a.join(\" \"));\n\t\t\t\t\t} : function(){};\n\t\t\t\t\tconsole[tcn]._fake = true;\n\t\t\t\t})();\n\t\t\t}else if(has(\"console-as-object\")){\n\t\t\t\tconsole[tn] = Function.prototype.bind.call(console[tn], console);\n\t\t\t}\n\t\t}\n\t}\n\n\thas.add(\"dojo-debug-messages\",\n\t\t// include dojo.deprecated/dojo.experimental implementations\n\t\t!!config.isDebug\n\t);\n\tdojo.deprecated = dojo.experimental = function(){};\n\tif(has(\"dojo-debug-messages\")){\n\t\tdojo.deprecated = function(/*String*/ behaviour, /*String?*/ extra, /*String?*/ removal){\n\t\t\t// summary:\n\t\t\t//\t\tLog a debug message to indicate that a behavior has been\n\t\t\t//\t\tdeprecated.\n\t\t\t// behaviour: String\n\t\t\t//\t\tThe API or behavior being deprecated. Usually in the form\n\t\t\t//\t\tof \"myApp.someFunction()\".\n\t\t\t// extra: String?\n\t\t\t//\t\tText to append to the message. Often provides advice on a\n\t\t\t//\t\tnew function or facility to achieve the same goal during\n\t\t\t//\t\tthe deprecation period.\n\t\t\t// removal: String?\n\t\t\t//\t\tText to indicate when in the future the behavior will be\n\t\t\t//\t\tremoved. Usually a version number.\n\t\t\t// example:\n\t\t\t//\t| dojo.deprecated(\"myApp.getTemp()\", \"use myApp.getLocaleTemp() instead\", \"1.0\");\n\n\t\t\tvar message = \"DEPRECATED: \" + behaviour;\n\t\t\tif(extra){ message += \" \" + extra; }\n\t\t\tif(removal){ message += \" -- will be removed in version: \" + removal; }\n\t\t\tconsole.warn(message);\n\t\t};\n\n\t\tdojo.experimental = function(/* String */ moduleName, /* String? */ extra){\n\t\t\t// summary:\n\t\t\t//\t\tMarks code as experimental.\n\t\t\t// description:\n\t\t\t//\t\tThis can be used to mark a function, file, or module as\n\t\t\t//\t\texperimental.\t Experimental code is not ready to be used, and the\n\t\t\t//\t\tAPIs are subject to change without notice.\tExperimental code may be\n\t\t\t//\t\tcompleted deleted without going through the normal deprecation\n\t\t\t//\t\tprocess.\n\t\t\t// moduleName: String\n\t\t\t//\t\tThe name of a module, or the name of a module file or a specific\n\t\t\t//\t\tfunction\n\t\t\t// extra: String?\n\t\t\t//\t\tsome additional message for the user\n\t\t\t// example:\n\t\t\t//\t| dojo.experimental(\"dojo.data.Result\");\n\t\t\t// example:\n\t\t\t//\t| dojo.experimental(\"dojo.weather.toKelvin()\", \"PENDING approval from NOAA\");\n\n\t\t\tvar message = \"EXPERIMENTAL: \" + moduleName + \" -- APIs subject to change without notice.\";\n\t\t\tif(extra){ message += \" \" + extra; }\n\t\t\tconsole.warn(message);\n\t\t};\n\t}\n\n\thas.add(\"dojo-modulePaths\",\n\t\t// consume dojo.modulePaths processing\n\t\t1\n\t);\n\tif(has(\"dojo-modulePaths\")){\n\t\t// notice that modulePaths won't be applied to any require's before the dojo/_base/kernel factory is run;\n\t\t// this is the v1.6- behavior.\n\t\tif(config.modulePaths){\n\t\t\tdojo.deprecated(\"dojo.modulePaths\", \"use paths configuration\");\n\t\t\tvar paths = {};\n\t\t\tfor(p in config.modulePaths){\n\t\t\t\tpaths[p.replace(/\\./g, \"/\")] = config.modulePaths[p];\n\t\t\t}\n\t\t\trequire({paths:paths});\n\t\t}\n\t}\n\n\thas.add(\"dojo-moduleUrl\",\n\t\t// include dojo.moduleUrl\n\t\t1\n\t);\n\tif(has(\"dojo-moduleUrl\")){\n\t\tdojo.moduleUrl = function(/*String*/module, /*String?*/url){\n\t\t\t// summary:\n\t\t\t//\t\tReturns a URL relative to a module.\n\t\t\t// example:\n\t\t\t//\t|\tvar pngPath = dojo.moduleUrl(\"acme\",\"images/small.png\");\n\t\t\t//\t|\tconsole.dir(pngPath); // list the object properties\n\t\t\t//\t|\t// create an image and set it's source to pngPath's value:\n\t\t\t//\t|\tvar img = document.createElement(\"img\");\n\t\t\t//\t|\timg.src = pngPath;\n\t\t\t//\t|\t// add our image to the document\n\t\t\t//\t|\tdojo.body().appendChild(img);\n\t\t\t// example:\n\t\t\t//\t\tyou may de-reference as far as you like down the package\n\t\t\t//\t\thierarchy. This is sometimes handy to avoid lengthy relative\n\t\t\t//\t\turls or for building portable sub-packages. In this example,\n\t\t\t//\t\tthe `acme.widget` and `acme.util` directories may be located\n\t\t\t//\t\tunder different roots (see `dojo.registerModulePath`) but the\n\t\t\t//\t\tthe modules which reference them can be unaware of their\n\t\t\t//\t\trelative locations on the filesystem:\n\t\t\t//\t|\t// somewhere in a configuration block\n\t\t\t//\t|\tdojo.registerModulePath(\"acme.widget\", \"../../acme/widget\");\n\t\t\t//\t|\tdojo.registerModulePath(\"acme.util\", \"../../util\");\n\t\t\t//\t|\n\t\t\t//\t|\t// ...\n\t\t\t//\t|\n\t\t\t//\t|\t// code in a module using acme resources\n\t\t\t//\t|\tvar tmpltPath = dojo.moduleUrl(\"acme.widget\",\"templates/template.html\");\n\t\t\t//\t|\tvar dataPath = dojo.moduleUrl(\"acme.util\",\"resources/data.json\");\n\n\t\t\tdojo.deprecated(\"dojo.moduleUrl()\", \"use require.toUrl\", \"2.0\");\n\n\t\t\t// require.toUrl requires a filetype; therefore, just append the suffix \"/*.*\" to guarantee a filetype, then\n\t\t\t// remove the suffix from the result. This way clients can request a url w/out a filetype. This should be\n\t\t\t// rare, but it maintains backcompat for the v1.x line (note: dojo.moduleUrl will be removed in v2.0).\n\t\t\t// Notice * is an illegal filename so it won't conflict with any real path map that may exist the paths config.\n\t\t\tvar result = null;\n\t\t\tif(module){\n\t\t\t\tresult = require.toUrl(module.replace(/\\./g, \"/\") + (url ? (\"/\" + url) : \"\") + \"/*.*\").replace(/\\/\\*\\.\\*/, \"\") + (url ? \"\" : \"/\");\n\t\t\t}\n\t\t\treturn result;\n\t\t};\n\t}\n\n\tdojo._hasResource = {}; // for backward compatibility with layers built with 1.6 tooling\n\n\treturn dojo;\n});\n","define([\"./global\", \"require\", \"module\"], function(global, require, module){\n\t// module:\n\t//\t\tdojo/has\n\t// summary:\n\t//\t\tDefines the has.js API and several feature tests used by dojo.\n\t// description:\n\t//\t\tThis module defines the has API as described by the project has.js with the following additional features:\n\t//\n\t//\t\t- the has test cache is exposed at has.cache.\n\t//\t\t- the method has.add includes a forth parameter that controls whether or not existing tests are replaced\n\t//\t\t- the loader's has cache may be optionally copied into this module's has cahce.\n\t//\n\t//\t\tThis module adopted from https://github.com/phiggins42/has.js; thanks has.js team!\n\n\t// try to pull the has implementation from the loader; both the dojo loader and bdLoad provide one\n\t// if using a foreign loader, then the has cache may be initialized via the config object for this module\n\t// WARNING: if a foreign loader defines require.has to be something other than the has.js API, then this implementation fail\n\tvar has = require.has || function(){};\n\tif(!has(\"dojo-has-api\")){\n\t\tvar\n\t\t\tisBrowser =\n\t\t\t\t// the most fundamental decision: are we in the browser?\n\t\t\t\ttypeof window != \"undefined\" &&\n\t\t\t\ttypeof location != \"undefined\" &&\n\t\t\t\ttypeof document != \"undefined\" &&\n\t\t\t\twindow.location == location && window.document == document,\n\n\t\t\t// has API variables\n\t\t\tdoc = isBrowser && document,\n\t\t\telement = doc && doc.createElement(\"DiV\"),\n\t\t\tcache = (module.config && module.config()) || {};\n\n\t\thas = function(name){\n\t\t\t// summary:\n\t\t\t//\t\tReturn the current value of the named feature.\n\t\t\t//\n\t\t\t// name: String|Integer\n\t\t\t//\t\tThe name (if a string) or identifier (if an integer) of the feature to test.\n\t\t\t//\n\t\t\t// description:\n\t\t\t//\t\tReturns the value of the feature named by name. The feature must have been\n\t\t\t//\t\tpreviously added to the cache by has.add.\n\n\t\t\treturn typeof cache[name] == \"function\" ? (cache[name] = cache[name](global, doc, element)) : cache[name]; // Boolean\n\t\t};\n\n\t\thas.cache = cache;\n\n\t\thas.add = function(name, test, now, force){\n\t\t\t// summary:\n\t\t\t//\t \tRegister a new feature test for some named feature.\n\t\t\t// name: String|Integer\n\t\t\t//\t \tThe name (if a string) or identifier (if an integer) of the feature to test.\n\t\t\t// test: Function\n\t\t\t//\t\t A test function to register. If a function, queued for testing until actually\n\t\t\t//\t\t needed. The test function should return a boolean indicating\n\t\t\t//\t \tthe presence of a feature or bug.\n\t\t\t// now: Boolean?\n\t\t\t//\t\t Optional. Omit if `test` is not a function. Provides a way to immediately\n\t\t\t//\t\t run the test and cache the result.\n\t\t\t// force: Boolean?\n\t\t\t//\t \tOptional. If the test already exists and force is truthy, then the existing\n\t\t\t//\t \ttest will be replaced; otherwise, add does not replace an existing test (that\n\t\t\t//\t \tis, by default, the first test advice wins).\n\t\t\t// example:\n\t\t\t//\t\tA redundant test, testFn with immediate execution:\n\t\t\t//\t|\thas.add(\"javascript\", function(){ return true; }, true);\n\t\t\t//\n\t\t\t// example:\n\t\t\t//\t\tAgain with the redundantness. You can do this in your tests, but we should\n\t\t\t//\t\tnot be doing this in any internal has.js tests\n\t\t\t//\t|\thas.add(\"javascript\", true);\n\t\t\t//\n\t\t\t// example:\n\t\t\t//\t\tThree things are passed to the testFunction. `global`, `document`, and a generic element\n\t\t\t//\t\tfrom which to work your test should the need arise.\n\t\t\t//\t|\thas.add(\"bug-byid\", function(g, d, el){\n\t\t\t//\t|\t\t// g\t== global, typically window, yadda yadda\n\t\t\t//\t|\t\t// d\t== document object\n\t\t\t//\t|\t\t// el == the generic element. a `has` element.\n\t\t\t//\t|\t\treturn false; // fake test, byid-when-form-has-name-matching-an-id is slightly longer\n\t\t\t//\t|\t});\n\n\t\t\t(typeof cache[name]==\"undefined\" || force) && (cache[name]= test);\n\t\t\treturn now && has(name);\n\t\t};\n\n\t\t// since we're operating under a loader that doesn't provide a has API, we must explicitly initialize\n\t\t// has as it would have otherwise been initialized by the dojo loader; use has.add to the builder\n\t\t// can optimize these away iff desired\n\t\thas.add(\"host-browser\", isBrowser);\n\t\thas.add(\"host-node\", (typeof process == \"object\" && process.versions && process.versions.node && process.versions.v8));\n\t\thas.add(\"host-rhino\", (typeof load == \"function\" && (typeof Packages == \"function\" || typeof Packages == \"object\")));\n\t\thas.add(\"dom\", isBrowser);\n\t\thas.add(\"dojo-dom-ready-api\", 1);\n\t\thas.add(\"dojo-sniff\", 1);\n\t}\n\n\tif(has(\"host-browser\")){\n\t\t// Common application level tests\n\t\thas.add(\"dom-addeventlistener\", !!document.addEventListener);\n\n\t\t// Do the device and browser have touch capability?\n\t\thas.add(\"touch\", \"ontouchstart\" in document\n\t\t\t|| (\"onpointerdown\" in document && navigator.maxTouchPoints > 0)\n\t\t\t|| window.navigator.msMaxTouchPoints);\n\n\t\t// Touch events support\n\t\thas.add(\"touch-events\", \"ontouchstart\" in document);\n\n\t\t// Test if pointer events are supported and enabled, with either standard names (\"pointerdown\" etc.) or\n\t\t// IE specific names (\"MSPointerDown\" etc.). Tests are designed to work on embedded C# WebBrowser Controls\n\t\t// in addition to IE, Edge, and future versions of Firefox and Chrome.\n\t\t// Note that on IE11, has(\"pointer-events\") and has(\"MSPointer\") are both true.\n\t\thas.add(\"pointer-events\", \"pointerEnabled\" in window.navigator ?\n\t\t\t\twindow.navigator.pointerEnabled : \"PointerEvent\" in window);\n\t\thas.add(\"MSPointer\", window.navigator.msPointerEnabled);\n\t\t// The \"pointermove\"\" event is only continuously emitted in a touch environment if\n\t\t// the target node's \"touch-action\"\" CSS property is set to \"none\"\n\t\t// https://www.w3.org/TR/pointerevents/#the-touch-action-css-property\n\t\thas.add(\"touch-action\", has(\"touch\") && has(\"pointer-events\"));\n\n\t\t// I don't know if any of these tests are really correct, just a rough guess\n\t\thas.add(\"device-width\", screen.availWidth || innerWidth);\n\n\t\t// Tests for DOMNode.attributes[] behavior:\n\t\t//\t - dom-attributes-explicit - attributes[] only lists explicitly user specified attributes\n\t\t//\t - dom-attributes-specified-flag (IE8) - need to check attr.specified flag to skip attributes user didn't specify\n\t\t//\t - Otherwise, in IE6-7. attributes[] will list hundreds of values, so need to do outerHTML to get attrs instead.\n\t\tvar form = document.createElement(\"form\");\n\t\thas.add(\"dom-attributes-explicit\", form.attributes.length == 0); // W3C\n\t\thas.add(\"dom-attributes-specified-flag\", form.attributes.length > 0 && form.attributes.length < 40);\t// IE8\n\t}\n\n\thas.clearElement = function(element){\n\t\t// summary:\n\t\t//\t Deletes the contents of the element passed to test functions.\n\t\telement.innerHTML= \"\";\n\t\treturn element;\n\t};\n\n\thas.normalize = function(id, toAbsMid){\n\t\t// summary:\n\t\t//\t Resolves id into a module id based on possibly-nested tenary expression that branches on has feature test value(s).\n\t\t//\n\t\t// toAbsMid: Function\n\t\t//\t Resolves a relative module id into an absolute module id\n\t\tvar\n\t\t\ttokens = id.match(/[\\?:]|[^:\\?]*/g), i = 0,\n\t\t\tget = function(skip){\n\t\t\t\tvar term = tokens[i++];\n\t\t\t\tif(term == \":\"){\n\t\t\t\t\t// empty string module name, resolves to 0\n\t\t\t\t\treturn 0;\n\t\t\t\t}else{\n\t\t\t\t\t// postfixed with a ? means it is a feature to branch on, the term is the name of the feature\n\t\t\t\t\tif(tokens[i++] == \"?\"){\n\t\t\t\t\t\tif(!skip && has(term)){\n\t\t\t\t\t\t\t// matched the feature, get the first value from the options\n\t\t\t\t\t\t\treturn get();\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t// did not match, get the second value, passing over the first\n\t\t\t\t\t\t\tget(true);\n\t\t\t\t\t\t\treturn get(skip);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t// a module\n\t\t\t\t\treturn term || 0;\n\t\t\t\t}\n\t\t\t};\n\t\tid = get();\n\t\treturn id && toAbsMid(id);\n\t};\n\n\thas.load = function(id, parentRequire, loaded){\n\t\t// summary:\n\t\t//\t\tConditional loading of AMD modules based on a has feature test value.\n\t\t// id: String\n\t\t//\t\tGives the resolved module id to load.\n\t\t// parentRequire: Function\n\t\t//\t\tThe loader require function with respect to the module that contained the plugin resource in it's\n\t\t//\t\tdependency list.\n\t\t// loaded: Function\n\t\t//\t Callback to loader that consumes result of plugin demand.\n\n\t\tif(id){\n\t\t\tparentRequire([id], loaded);\n\t\t}else{\n\t\t\tloaded();\n\t\t}\n\t};\n\n\treturn has;\n});\n","define([\"./has\"], function(has){\n\t// module:\n\t//\t\tdojo/sniff\n\n\t/*=====\n\treturn function(){\n\t\t// summary:\n\t\t//\t\tThis module sets has() flags based on the current browser.\n\t\t//\t\tIt returns the has() function.\n\t};\n\t=====*/\n\n\tif(has(\"host-browser\")){\n\t\tvar n = navigator,\n\t\t\tdua = n.userAgent,\n\t\t\tdav = n.appVersion,\n\t\t\ttv = parseFloat(dav);\n\t\thas.add(\"air\", dua.indexOf(\"AdobeAIR\") >= 0);\n\t\thas.add(\"wp\", parseFloat(dua.split(\"Windows Phone\")[1]) || undefined);\n\t\thas.add(\"msapp\", parseFloat(dua.split(\"MSAppHost/\")[1]) || undefined);\n\t\thas.add(\"khtml\", dav.indexOf(\"Konqueror\") >= 0 ? tv : undefined);\n\t\thas.add(\"edge\", parseFloat(dua.split(\"Edge/\")[1]) || undefined);\n\t\thas.add(\"opr\", parseFloat(dua.split(\"OPR/\")[1]) || undefined);\n\t\t// NOTE: https://dev.opera.com/blog/opera-user-agent-strings-opera-15-and-beyond/\n\t\thas.add(\"webkit\", !has(\"wp\") // NOTE: necessary since Windows Phone 8.1 Update 1, see #18540\n\t\t\t&& !has(\"edge\") && parseFloat(dua.split(\"WebKit/\")[1]) || undefined);\n\t\thas.add(\"chrome\", !has(\"edge\") && !has(\"opr\")\n\t\t\t\t&& parseFloat(dua.split(\"Chrome/\")[1]) || undefined);\n\t\thas.add(\"android\", !has(\"wp\") // NOTE: necessary since Windows Phone 8.1 Update 1, see #18528\n\t\t\t\t&& parseFloat(dua.split(\"Android \")[1]) || undefined);\n\t\thas.add(\"safari\", dav.indexOf(\"Safari\") >= 0\n\t\t\t\t&& !has(\"wp\") // NOTE: necessary since Windows Phone 8.1 Update 1, see #18540\n\t\t\t\t&& !has(\"chrome\") && !has(\"android\") && !has(\"edge\") && !has(\"opr\") ?\n\t\t\tparseFloat(dav.split(\"Version/\")[1]) : undefined);\n\t\thas.add(\"mac\", dav.indexOf(\"Macintosh\") >= 0);\n\t\thas.add(\"quirks\", document.compatMode == \"BackCompat\");\n\t\tif(!has(\"wp\") // NOTE: necessary since Windows Phone 8.1 Update 1, see #18528\n\t\t\t\t&& dua.match(/(iPhone|iPod|iPad)/)){\n\t\t\tvar p = RegExp.$1.replace(/P/, \"p\");\n\t\t\tvar v = dua.match(/OS ([\\d_]+)/) ? RegExp.$1 : \"1\";\n\t\t\tvar os = parseFloat(v.replace(/_/, \".\").replace(/_/g, \"\"));\n\t\t\thas.add(p, os);\t\t// \"iphone\", \"ipad\" or \"ipod\"\n\t\t\thas.add(\"ios\", os);\n\t\t}\n\t\thas.add(\"bb\", (dua.indexOf(\"BlackBerry\") >= 0 || dua.indexOf(\"BB10\") >= 0) && parseFloat(dua.split(\"Version/\")[1]) || undefined);\n\t\thas.add(\"trident\", parseFloat(dav.split(\"Trident/\")[1]) || undefined);\n\n\t\thas.add(\"svg\", typeof SVGAngle !== \"undefined\");\n\n\t\tif(!has(\"webkit\")){\n\t\t\t// Opera\n\t\t\tif(dua.indexOf(\"Opera\") >= 0){\n\t\t\t\t// see http://dev.opera.com/articles/view/opera-ua-string-changes and http://www.useragentstring.com/pages/Opera/\n\t\t\t\t// 9.8 has both styles; <9.8, 9.9 only old style\n\t\t\t\thas.add(\"opera\", tv >= 9.8 ? parseFloat(dua.split(\"Version/\")[1]) || tv : tv);\n\t\t\t}\n\n\t\t\t// Mozilla and firefox\n\t\t\tif(dua.indexOf(\"Gecko\") >= 0 && !has(\"wp\") // NOTE: necessary since Windows Phone 8.1 Update 1\n\t\t\t\t\t&& !has(\"khtml\") && !has(\"trident\") && !has(\"edge\")){\n\t\t\t\thas.add(\"mozilla\", tv);\n\t\t\t}\n\t\t\tif(has(\"mozilla\")){\n\t\t\t\t//We really need to get away from this. Consider a sane isGecko approach for the future.\n\t\t\t\thas.add(\"ff\", parseFloat(dua.split(\"Firefox/\")[1] || dua.split(\"Minefield/\")[1]) || undefined);\n\t\t\t}\n\n\t\t\t// IE\n\t\t\tif(document.all && !has(\"opera\")){\n\t\t\t\tvar isIE = parseFloat(dav.split(\"MSIE \")[1]) || undefined;\n\n\t\t\t\t//In cases where the page has an HTTP header or META tag with\n\t\t\t\t//X-UA-Compatible, then it is in emulation mode.\n\t\t\t\t//Make sure isIE reflects the desired version.\n\t\t\t\t//document.documentMode of 5 means quirks mode.\n\t\t\t\t//Only switch the value if documentMode's major version\n\t\t\t\t//is different from isIE's major version.\n\t\t\t\tvar mode = document.documentMode;\n\t\t\t\tif(mode && mode != 5 && Math.floor(isIE) != mode){\n\t\t\t\t\tisIE = mode;\n\t\t\t\t}\n\n\t\t\t\thas.add(\"ie\", isIE);\n\t\t\t}\n\n\t\t\t// Wii\n\t\t\thas.add(\"wii\", typeof opera != \"undefined\" && opera.wiiremote);\n\t\t}\n\t}\n\n\treturn has;\n});\n","define([], function(){\n\n\t// module:\n\t//\t\tdojo/aspect\n\n\t\"use strict\";\n\tvar undefined;\n\tfunction advise(dispatcher, type, advice, receiveArguments){\n\t\tvar previous = dispatcher[type];\n\t\tvar around = type == \"around\";\n\t\tvar signal;\n\t\tif(around){\n\t\t\tvar advised = advice(function(){\n\t\t\t\treturn previous.advice(this, arguments);\n\t\t\t});\n\t\t\tsignal = {\n\t\t\t\tremove: function(){\n\t\t\t\t\tif(advised){\n\t\t\t\t\t\tadvised = dispatcher = advice = null;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tadvice: function(target, args){\n\t\t\t\t\treturn advised ?\n\t\t\t\t\t\tadvised.apply(target, args) : // called the advised function\n\t\t\t\t\t\tprevious.advice(target, args); // cancelled, skip to next one\n\t\t\t\t}\n\t\t\t};\n\t\t}else{\n\t\t\t// create the remove handler\n\t\t\tsignal = {\n\t\t\t\tremove: function(){\n\t\t\t\t\tif(signal.advice){\n\t\t\t\t\t\tvar previous = signal.previous;\n\t\t\t\t\t\tvar next = signal.next;\n\t\t\t\t\t\tif(!next && !previous){\n\t\t\t\t\t\t\tdelete dispatcher[type];\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tif(previous){\n\t\t\t\t\t\t\t\tprevious.next = next;\n\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\tdispatcher[type] = next;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(next){\n\t\t\t\t\t\t\t\tnext.previous = previous;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// remove the advice to signal that this signal has been removed\n\t\t\t\t\t\tdispatcher = advice = signal.advice = null;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tid: dispatcher.nextId++,\n\t\t\t\tadvice: advice,\n\t\t\t\treceiveArguments: receiveArguments\n\t\t\t};\n\t\t}\n\t\tif(previous && !around){\n\t\t\tif(type == \"after\"){\n\t\t\t\t// add the listener to the end of the list\n\t\t\t\t// note that we had to change this loop a little bit to workaround a bizarre IE10 JIT bug\n\t\t\t\twhile(previous.next && (previous = previous.next)){}\n\t\t\t\tprevious.next = signal;\n\t\t\t\tsignal.previous = previous;\n\t\t\t}else if(type == \"before\"){\n\t\t\t\t// add to beginning\n\t\t\t\tdispatcher[type] = signal;\n\t\t\t\tsignal.next = previous;\n\t\t\t\tprevious.previous = signal;\n\t\t\t}\n\t\t}else{\n\t\t\t// around or first one just replaces\n\t\t\tdispatcher[type] = signal;\n\t\t}\n\t\treturn signal;\n\t}\n\tfunction aspect(type){\n\t\treturn function(target, methodName, advice, receiveArguments){\n\t\t\tvar existing = target[methodName], dispatcher;\n\t\t\tif(!existing || existing.target != target){\n\t\t\t\t// no dispatcher in place\n\t\t\t\ttarget[methodName] = dispatcher = function(){\n\t\t\t\t\tvar executionId = dispatcher.nextId;\n\t\t\t\t\t// before advice\n\t\t\t\t\tvar args = arguments;\n\t\t\t\t\tvar before = dispatcher.before;\n\t\t\t\t\twhile(before){\n\t\t\t\t\t\tif(before.advice){\n\t\t\t\t\t\t\targs = before.advice.apply(this, args) || args;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbefore = before.next;\n\t\t\t\t\t}\n\t\t\t\t\t// around advice\n\t\t\t\t\tif(dispatcher.around){\n\t\t\t\t\t\tvar results = dispatcher.around.advice(this, args);\n\t\t\t\t\t}\n\t\t\t\t\t// after advice\n\t\t\t\t\tvar after = dispatcher.after;\n\t\t\t\t\twhile(after && after.id < executionId){\n\t\t\t\t\t\tif(after.advice){\n\t\t\t\t\t\t\tif(after.receiveArguments){\n\t\t\t\t\t\t\t\tvar newResults = after.advice.apply(this, args);\n\t\t\t\t\t\t\t\t// change the return value only if a new value was returned\n\t\t\t\t\t\t\t\tresults = newResults === undefined ? results : newResults;\n\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\tresults = after.advice.call(this, results, args);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tafter = after.next;\n\t\t\t\t\t}\n\t\t\t\t\treturn results;\n\t\t\t\t};\n\t\t\t\tif(existing){\n\t\t\t\t\tdispatcher.around = {advice: function(target, args){\n\t\t\t\t\t\treturn existing.apply(target, args);\n\t\t\t\t\t}};\n\t\t\t\t}\n\t\t\t\tdispatcher.target = target;\n\t\t\t\tdispatcher.nextId = dispatcher.nextId || 0;\n\t\t\t}\n\t\t\tvar results = advise((dispatcher || existing), type, advice, receiveArguments);\n\t\t\tadvice = null;\n\t\t\treturn results;\n\t\t};\n\t}\n\n\t// TODOC: after/before/around return object\n\n\tvar after = aspect(\"after\");\n\t/*=====\n\tafter = function(target, methodName, advice, receiveArguments){\n\t\t// summary:\n\t\t//\t\tThe \"after\" export of the aspect module is a function that can be used to attach\n\t\t//\t\t\"after\" advice to a method. This function will be executed after the original method\n\t\t//\t\tis executed. By default the function will be called with a single argument, the return\n\t\t//\t\tvalue of the original method, or the the return value of the last executed advice (if a previous one exists).\n\t\t//\t\tThe fourth (optional) argument can be set to true to so the function receives the original\n\t\t//\t\targuments (from when the original method was called) rather than the return value.\n\t\t//\t\tIf there are multiple \"after\" advisors, they are executed in the order they were registered.\n\t\t// target: Object\n\t\t//\t\tThis is the target object\n\t\t// methodName: String\n\t\t//\t\tThis is the name of the method to attach to.\n\t\t// advice: Function\n\t\t//\t\tThis is function to be called after the original method\n\t\t// receiveArguments: Boolean?\n\t\t//\t\tIf this is set to true, the advice function receives the original arguments (from when the original mehtod\n\t\t//\t\twas called) rather than the return value of the original/previous method.\n\t\t// returns:\n\t\t//\t\tA signal object that can be used to cancel the advice. If remove() is called on this signal object, it will\n\t\t//\t\tstop the advice function from being executed.\n\t};\n\t=====*/\n\n\tvar before = aspect(\"before\");\n\t/*=====\n\tbefore = function(target, methodName, advice){\n\t\t// summary:\n\t\t//\t\tThe \"before\" export of the aspect module is a function that can be used to attach\n\t\t//\t\t\"before\" advice to a method. This function will be executed before the original method\n\t\t//\t\tis executed. This function will be called with the arguments used to call the method.\n\t\t//\t\tThis function may optionally return an array as the new arguments to use to call\n\t\t//\t\tthe original method (or the previous, next-to-execute before advice, if one exists).\n\t\t//\t\tIf the before method doesn't return anything (returns undefined) the original arguments\n\t\t//\t\twill be preserved.\n\t\t//\t\tIf there are multiple \"before\" advisors, they are executed in the reverse order they were registered.\n\t\t// target: Object\n\t\t//\t\tThis is the target object\n\t\t// methodName: String\n\t\t//\t\tThis is the name of the method to attach to.\n\t\t// advice: Function\n\t\t//\t\tThis is function to be called before the original method\n\t};\n\t=====*/\n\n\tvar around = aspect(\"around\");\n\t/*=====\n\t around = function(target, methodName, advice){\n\t\t// summary:\n\t\t//\t\tThe \"around\" export of the aspect module is a function that can be used to attach\n\t\t//\t\t\"around\" advice to a method. The advisor function is immediately executed when\n\t\t//\t\tthe around() is called, is passed a single argument that is a function that can be\n\t\t//\t\tcalled to continue execution of the original method (or the next around advisor).\n\t\t//\t\tThe advisor function should return a function, and this function will be called whenever\n\t\t//\t\tthe method is called. It will be called with the arguments used to call the method.\n\t\t//\t\tWhatever this function returns will be returned as the result of the method call (unless after advise changes it).\n\t\t// example:\n\t\t//\t\tIf there are multiple \"around\" advisors, the most recent one is executed first,\n\t\t//\t\twhich can then delegate to the next one and so on. For example:\n\t\t//\t\t|\taround(obj, \"foo\", function(originalFoo){\n\t\t//\t\t|\t\treturn function(){\n\t\t//\t\t|\t\t\tvar start = new Date().getTime();\n\t\t//\t\t|\t\t\tvar results = originalFoo.apply(this, arguments); // call the original\n\t\t//\t\t|\t\t\tvar end = new Date().getTime();\n\t\t//\t\t|\t\t\tconsole.log(\"foo execution took \" + (end - start) + \" ms\");\n\t\t//\t\t|\t\t\treturn results;\n\t\t//\t\t|\t\t};\n\t\t//\t\t|\t});\n\t\t// target: Object\n\t\t//\t\tThis is the target object\n\t\t// methodName: String\n\t\t//\t\tThis is the name of the method to attach to.\n\t\t// advice: Function\n\t\t//\t\tThis is function to be called around the original method\n\t};\n\t=====*/\n\n\treturn {\n\t\t// summary:\n\t\t//\t\tprovides aspect oriented programming functionality, allowing for\n\t\t//\t\tone to add before, around, or after advice on existing methods.\n\t\t// example:\n\t\t//\t|\tdefine([\"dojo/aspect\"], function(aspect){\n\t\t//\t|\t\tvar signal = aspect.after(targetObject, \"methodName\", function(someArgument){\n\t\t//\t|\t\t\tthis will be called when targetObject.methodName() is called, after the original function is called\n\t\t//\t|\t\t});\n\t\t//\n\t\t// example:\n\t\t//\tThe returned signal object can be used to cancel the advice.\n\t\t//\t|\tsignal.remove(); // this will stop the advice from being executed anymore\n\t\t//\t|\taspect.before(targetObject, \"methodName\", function(someArgument){\n\t\t//\t|\t\t// this will be called when targetObject.methodName() is called, before the original function is called\n\t\t//\t|\t });\n\n\t\tbefore: before,\n\t\taround: around,\n\t\tafter: after\n\t};\n});\n","define([\"./sniff\", \"./_base/window\", \"./_base/kernel\"],\n\t\tfunction(has, win, kernel){\n\t// module:\n\t//\t\tdojo/dom\n\n\t// FIXME: need to add unit tests for all the semi-public methods\n\n\tif(has(\"ie\") <= 7){\n\t\ttry{\n\t\t\tdocument.execCommand(\"BackgroundImageCache\", false, true);\n\t\t}catch(e){\n\t\t\t// sane browsers don't have cache \"issues\"\n\t\t}\n\t}\n\n\t// =============================\n\t// DOM Functions\n\t// =============================\n\n\t// the result object\n\tvar dom = {\n\t\t// summary:\n\t\t//\t\tThis module defines the core dojo DOM API.\n\t};\n\n\tif(has(\"ie\")){\n\t\tdom.byId = function(id, doc){\n\t\t\tif(typeof id != \"string\"){\n\t\t\t\treturn id || null;\n\t\t\t}\n\t\t\tvar _d = doc || win.doc, te = id && _d.getElementById(id);\n\t\t\t// attributes.id.value is better than just id in case the\n\t\t\t// user has a name=id inside a form\n\t\t\tif(te && (te.attributes.id.value == id || te.id == id)){\n\t\t\t\treturn te;\n\t\t\t}else{\n\t\t\t\tvar eles = _d.all[id];\n\t\t\t\tif(!eles || eles.nodeName){\n\t\t\t\t\teles = [eles];\n\t\t\t\t}\n\t\t\t\t// if more than 1, choose first with the correct id\n\t\t\t\tvar i = 0;\n\t\t\t\twhile((te = eles[i++])){\n\t\t\t\t\tif((te.attributes && te.attributes.id && te.attributes.id.value == id) || te.id == id){\n\t\t\t\t\t\treturn te;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn null;\n\t\t};\n\t}else{\n\t\tdom.byId = function(id, doc){\n\t\t\t// inline'd type check.\n\t\t\t// be sure to return null per documentation, to match IE branch.\n\t\t\treturn ((typeof id == \"string\") ? (doc || win.doc).getElementById(id) : id) || null; // DOMNode\n\t\t};\n\t}\n\t/*=====\n\t dom.byId = function(id, doc){\n\t\t// summary:\n\t\t//\t\tReturns DOM node with matching `id` attribute or falsy value (ex: null or undefined)\n\t\t//\t\tif not found. If `id` is a DomNode, this function is a no-op.\n\t\t//\n\t\t// id: String|DOMNode\n\t\t//\t\tA string to match an HTML id attribute or a reference to a DOM Node\n\t\t//\n\t\t// doc: Document?\n\t\t//\t\tDocument to work in. Defaults to the current value of\n\t\t//\t\tdojo/_base/window.doc. Can be used to retrieve\n\t\t//\t\tnode references from other documents.\n\t\t//\n\t\t// example:\n\t\t//\t\tLook up a node by ID:\n\t\t//\t|\trequire([\"dojo/dom\"], function(dom){\n\t\t//\t|\t\tvar n = dom.byId(\"foo\");\n\t\t//\t|\t});\n\t\t//\n\t\t// example:\n\t\t//\t\tCheck if a node exists, and use it.\n\t\t//\t|\trequire([\"dojo/dom\"], function(dom){\n\t\t//\t|\t\tvar n = dom.byId(\"bar\");\n\t\t//\t|\t\tif(n){ doStuff() ... }\n\t\t//\t|\t});\n\t\t//\n\t\t// example:\n\t\t//\t\tAllow string or DomNode references to be passed to a custom function:\n\t\t//\t|\trequire([\"dojo/dom\"], function(dom){\n\t\t//\t|\t\tvar foo = function(nodeOrId){\n\t\t//\t|\t\t\tnodeOrId = dom.byId(nodeOrId);\n\t\t//\t|\t\t\t// ... more stuff\n\t\t//\t|\t\t}\n\t\t//\t|\t});\n\t };\n\t =====*/\n\n\t// Test for DOMNode.contains() method, available everywhere except FF8-\n\t// and IE8-, where it's available in general, but not on document itself,\n\t// and also problems when either ancestor or node are text nodes.\n\n\tvar doc = kernel.global[\"document\"] || null;\n\thas.add(\"dom-contains\", !!(doc && doc.contains));\n\tdom.isDescendant = \n\t \t// MATHWORKS REMOVED BELOW - ISSUE with ancestor not always being a NODE!\n\t\t// has(\"dom-contains\") ?\n\t\t// FF9+, IE9+, webkit, opera, iOS, Android, Edge, etc.\n\t\t// function(/*DOMNode|String*/ node, /*DOMNode|String*/ ancestor){\n\t\t//\treturn !!( (ancestor = dom.byId(ancestor)) && ancestor.contains(dom.byId(node)) );\n\t\t// } : \n\t\tfunction(/*DOMNode|String*/ node, /*DOMNode|String*/ ancestor){\n\t\t\t// summary:\n\t\t\t//\t\tReturns true if node is a descendant of ancestor\n\t\t\t// node: DOMNode|String\n\t\t\t//\t\tstring id or node reference to test\n\t\t\t// ancestor: DOMNode|String\n\t\t\t//\t\tstring id or node reference of potential parent to test against\n\t\t\t//\n\t\t\t// example:\n\t\t\t//\t\tTest is node id=\"bar\" is a descendant of node id=\"foo\"\n\t\t\t//\t|\trequire([\"dojo/dom\"], function(dom){\n\t\t\t//\t|\t\tif(dom.isDescendant(\"bar\", \"foo\")){ ... }\n\t\t\t//\t|\t});\n\n\t\t\ttry{\n\t\t\t\tnode = dom.byId(node);\n\t\t\t\tancestor = dom.byId(ancestor);\n\t\t\t\twhile(node){\n\t\t\t\t\tif(node == ancestor){\n\t\t\t\t\t\treturn true; // Boolean\n\t\t\t\t\t}\n\t\t\t\t\tnode = node.parentNode;\n\t\t\t\t}\n\t\t\t}catch(e){ /* squelch, return false */ }\n\t\t\treturn false; // Boolean\n\t\t};\n\n\t// TODO: do we need setSelectable in the base?\n\n\t// Add feature test for user-select CSS property\n\t// (currently known to work in all but IE < 10 and Opera)\n\t// TODO: The user-select CSS property as of May 2014 is no longer part of\n\t// any CSS specification. In IE, -ms-user-select does not do the same thing\n\t// as the unselectable attribute on elements; namely, dijit Editor buttons\n\t// do not properly prevent the content of the editable content frame from\n\t// unblurring. As a result, the -ms- prefixed version is omitted here.\n\thas.add(\"css-user-select\", function(global, doc, element){\n\t\t// Avoid exception when dom.js is loaded in non-browser environments\n\t\tif(!element){ return false; }\n\n\t\tvar style = element.style;\n\t\tvar prefixes = [\"Khtml\", \"O\", \"Moz\", \"Webkit\"],\n\t\t\ti = prefixes.length,\n\t\t\tname = \"userSelect\",\n\t\t\tprefix;\n\n\t\t// Iterate prefixes from most to least likely\n\t\tdo{\n\t\t\tif(typeof style[name] !== \"undefined\"){\n\t\t\t\t// Supported; return property name\n\t\t\t\treturn name;\n\t\t\t}\n\t\t}while(i-- && (name = prefixes[i] + \"UserSelect\"));\n\n\t\t// Not supported if we didn't return before now\n\t\treturn false;\n\t});\n\n\t/*=====\n\tdom.setSelectable = function(node, selectable){\n\t\t// summary:\n\t\t//\t\tEnable or disable selection on a node\n\t\t// node: DOMNode|String\n\t\t//\t\tid or reference to node\n\t\t// selectable: Boolean\n\t\t//\t\tstate to put the node in. false indicates unselectable, true\n\t\t//\t\tallows selection.\n\t\t// example:\n\t\t//\t\tMake the node id=\"bar\" unselectable\n\t\t//\t|\trequire([\"dojo/dom\"], function(dom){\n\t\t//\t|\t\tdom.setSelectable(\"bar\");\n\t\t//\t|\t});\n\t\t// example:\n\t\t//\t\tMake the node id=\"bar\" selectable\n\t\t//\t|\trequire([\"dojo/dom\"], function(dom){\n\t\t//\t|\t\tdom.setSelectable(\"bar\", true);\n\t\t//\t|\t});\n\t};\n\t=====*/\n\n\tvar cssUserSelect = has(\"css-user-select\");\n\tdom.setSelectable = cssUserSelect ? function(node, selectable){\n\t\t// css-user-select returns a (possibly vendor-prefixed) CSS property name\n\t\tdom.byId(node).style[cssUserSelect] = selectable ? \"\" : \"none\";\n\t} : function(node, selectable){\n\t\tnode = dom.byId(node);\n\n\t\t// (IE < 10 / Opera) Fall back to setting/removing the\n\t\t// unselectable attribute on the element and all its children\n\t\tvar nodes = node.getElementsByTagName(\"*\"),\n\t\t\ti = nodes.length;\n\n\t\tif(selectable){\n\t\t\tnode.removeAttribute(\"unselectable\");\n\t\t\twhile(i--){\n\t\t\t\tnodes[i].removeAttribute(\"unselectable\");\n\t\t\t}\n\t\t}else{\n\t\t\tnode.setAttribute(\"unselectable\", \"on\");\n\t\t\twhile(i--){\n\t\t\t\tnodes[i].setAttribute(\"unselectable\", \"on\");\n\t\t\t}\n\t\t}\n\t};\n\n\treturn dom;\n});\n","define([\"./has!dom-addeventlistener?:./aspect\", \"./_base/kernel\", \"./sniff\"], function(aspect, dojo, has){\n\n\t\"use strict\";\n\tif(has(\"dom\")){ // check to make sure we are in a browser, this module should work anywhere\n\t\tvar major = window.ScriptEngineMajorVersion;\n\t\thas.add(\"jscript\", major && (major() + ScriptEngineMinorVersion() / 10));\n\t\thas.add(\"event-orientationchange\", has(\"touch\") && !has(\"android\")); // TODO: how do we detect this?\n\t\thas.add(\"event-stopimmediatepropagation\", window.Event && !!window.Event.prototype && !!window.Event.prototype.stopImmediatePropagation);\n\t\thas.add(\"event-focusin\", function(global, doc, element){\n\t\t\treturn 'onfocusin' in element;\n\t\t});\n\n\t\tif(has(\"touch\")){\n\t\t\thas.add(\"touch-can-modify-event-delegate\", function(){\n\t\t\t\t// This feature test checks whether deleting a property of an event delegate works\n\t\t\t\t// for a touch-enabled device. If it works, event delegation can be used as fallback\n\t\t\t\t// for browsers such as Safari in older iOS where deleting properties of the original\n\t\t\t\t// event does not work.\n\t\t\t\tvar EventDelegate = function(){};\n\t\t\t\tEventDelegate.prototype =\n\t\t\t\t\tdocument.createEvent(\"MouseEvents\"); // original event\n\t\t\t\t// Attempt to modify a property of an event delegate and check if\n\t\t\t\t// it succeeds. Depending on browsers and on whether dojo/on's\n\t\t\t\t// strict mode is stripped in a Dojo build, there are 3 known behaviors:\n\t\t\t\t// it may either succeed, or raise an error, or fail to set the property\n\t\t\t\t// without raising an error.\n\t\t\t\ttry{\n\t\t\t\t\tvar eventDelegate = new EventDelegate;\n\t\t\t\t\teventDelegate.target = null;\n\t\t\t\t\treturn eventDelegate.target === null;\n\t\t\t\t}catch(e){\n\t\t\t\t\treturn false; // cannot use event delegation\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\tvar on = function(target, type, listener, dontFix){\n\t\t// summary:\n\t\t//\t\tA function that provides core event listening functionality. With this function\n\t\t//\t\tyou can provide a target, event type, and listener to be notified of\n\t\t//\t\tfuture matching events that are fired.\n\t\t// target: Element|Object\n\t\t//\t\tThis is the target object or DOM element that to receive events from\n\t\t// type: String|Function\n\t\t//\t\tThis is the name of the event to listen for or an extension event type.\n\t\t// listener: Function\n\t\t//\t\tThis is the function that should be called when the event fires.\n\t\t// returns: Object\n\t\t//\t\tAn object with a remove() method that can be used to stop listening for this\n\t\t//\t\tevent.\n\t\t// description:\n\t\t//\t\tTo listen for \"click\" events on a button node, we can do:\n\t\t//\t\t|\tdefine([\"dojo/on\"], function(on){\n\t\t//\t\t|\t\ton(button, \"click\", clickHandler);\n\t\t//\t\t|\t\t...\n\t\t//\t\tEvented JavaScript objects can also have their own events.\n\t\t//\t\t|\tvar obj = new Evented;\n\t\t//\t\t|\ton(obj, \"foo\", fooHandler);\n\t\t//\t\tAnd then we could publish a \"foo\" event:\n\t\t//\t\t|\ton.emit(obj, \"foo\", {key: \"value\"});\n\t\t//\t\tWe can use extension events as well. For example, you could listen for a tap gesture:\n\t\t//\t\t|\tdefine([\"dojo/on\", \"dojo/gesture/tap\", function(on, tap){\n\t\t//\t\t|\t\ton(button, tap, tapHandler);\n\t\t//\t\t|\t\t...\n\t\t//\t\twhich would trigger fooHandler. Note that for a simple object this is equivalent to calling:\n\t\t//\t\t|\tobj.onfoo({key:\"value\"});\n\t\t//\t\tIf you use on.emit on a DOM node, it will use native event dispatching when possible.\n\n\t\tif(typeof target.on == \"function\" && typeof type != \"function\" && !target.nodeType){\n\t\t\t// delegate to the target's on() method, so it can handle it's own listening if it wants (unless it\n\t\t\t// is DOM node and we may be dealing with jQuery or Prototype's incompatible addition to the\n\t\t\t// Element prototype\n\t\t\treturn target.on(type, listener);\n\t\t}\n\t\t// delegate to main listener code\n\t\treturn on.parse(target, type, listener, addListener, dontFix, this);\n\t};\n\ton.pausable = function(target, type, listener, dontFix){\n\t\t// summary:\n\t\t//\t\tThis function acts the same as on(), but with pausable functionality. The\n\t\t//\t\treturned signal object has pause() and resume() functions. Calling the\n\t\t//\t\tpause() method will cause the listener to not be called for future events. Calling the\n\t\t//\t\tresume() method will cause the listener to again be called for future events.\n\t\tvar paused;\n\t\tvar signal = on(target, type, function(){\n\t\t\tif(!paused){\n\t\t\t\treturn listener.apply(this, arguments);\n\t\t\t}\n\t\t}, dontFix);\n\t\tsignal.pause = function(){\n\t\t\tpaused = true;\n\t\t};\n\t\tsignal.resume = function(){\n\t\t\tpaused = false;\n\t\t};\n\t\treturn signal;\n\t};\n\ton.once = function(target, type, listener, dontFix){\n\t\t// summary:\n\t\t//\t\tThis function acts the same as on(), but will only call the listener once. The\n\t\t//\t\tlistener will be called for the first\n\t\t//\t\tevent that takes place and then listener will automatically be removed.\n\t\tvar signal = on(target, type, function(){\n\t\t\t// remove this listener\n\t\t\tsignal.remove();\n\t\t\t// proceed to call the listener\n\t\t\treturn listener.apply(this, arguments);\n\t\t});\n\t\treturn signal;\n\t};\n\ton.parse = function(target, type, listener, addListener, dontFix, matchesTarget){\n\t\tvar events;\n\t\tif(type.call){\n\t\t\t// event handler function\n\t\t\t// on(node, touch.press, touchListener);\n\t\t\treturn type.call(matchesTarget, target, listener);\n\t\t}\n\n\t\tif(type instanceof Array){\n\t\t\t// allow an array of event names (or event handler functions)\n\t\t\tevents = type;\n\t\t}else if(type.indexOf(\",\") > -1){\n\t\t\t// we allow comma delimited event names, so you can register for multiple events at once\n\t\t\tevents = type.split(/\\s*,\\s*/);\n\t\t}\n\t\tif(events){\n\t\t\tvar handles = [];\n\t\t\tvar i = 0;\n\t\t\tvar eventName;\n\t\t\twhile(eventName = events[i++]){ // intentional assignment\n\t\t\t\thandles.push(on.parse(target, eventName, listener, addListener, dontFix, matchesTarget));\n\t\t\t}\n\t\t\thandles.remove = function(){\n\t\t\t\tfor(var i = 0; i < handles.length; i++){\n\t\t\t\t\thandles[i].remove();\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn handles;\n\t\t}\n\t\treturn addListener(target, type, listener, dontFix, matchesTarget);\n\t};\n\tvar touchEvents = /^touch/;\n\tfunction addListener(target, type, listener, dontFix, matchesTarget){\n\t\t// event delegation:\n\t\tvar selector = type.match(/(.*):(.*)/);\n\t\t// if we have a selector:event, the last one is interpreted as an event, and we use event delegation\n\t\tif(selector){\n\t\t\ttype = selector[2];\n\t\t\tselector = selector[1];\n\t\t\t// create the extension event for selectors and directly call it\n\t\t\treturn on.selector(selector, type).call(matchesTarget, target, listener);\n\t\t}\n\t\t// test to see if it a touch event right now, so we don't have to do it every time it fires\n\t\tif(has(\"touch\")){\n\t\t\tif(touchEvents.test(type)){\n\t\t\t\t// touch event, fix it\n\t\t\t\tlistener = fixTouchListener(listener);\n\t\t\t}\n\t\t\tif(!has(\"event-orientationchange\") && (type == \"orientationchange\")){\n\t\t\t\t//\"orientationchange\" not supported <= Android 2.1,\n\t\t\t\t//but works through \"resize\" on window\n\t\t\t\ttype = \"resize\";\n\t\t\t\ttarget = window;\n\t\t\t\tlistener = fixTouchListener(listener);\n\t\t\t}\n\t\t}\n\t\tif(addStopImmediate){\n\t\t\t// add stopImmediatePropagation if it doesn't exist\n\t\t\tlistener = addStopImmediate(listener);\n\t\t}\n\t\t// normal path, the target is |this|\n\t\tif(target.addEventListener){\n\t\t\t// the target has addEventListener, which should be used if available (might or might not be a node, non-nodes can implement this method as well)\n\t\t\t// check for capture conversions\n\t\t\tvar capture = type in captures,\n\t\t\t\tadjustedType = capture ? captures[type] : type;\n\t\t\ttarget.addEventListener(adjustedType, listener, capture);\n\t\t\t// create and return the signal\n\t\t\treturn {\n\t\t\t\tremove: function(){\n\t\t\t\t\ttarget.removeEventListener(adjustedType, listener, capture);\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\ttype = \"on\" + type;\n\t\tif(fixAttach && target.attachEvent){\n\t\t\treturn fixAttach(target, type, listener);\n\t\t}\n\t\tthrow new Error(\"Target must be an event emitter\");\n\t}\n\ton.matches = function(node, selector, context, children, matchesTarget) {\n\t\t// summary:\n\t\t//\t\tCheck if a node match the current selector within the constraint of a context\n\t\t// node: DOMNode\n\t\t//\t\tThe node that originate the event\n\t\t// selector: String\n\t\t//\t\tThe selector to check against\n\t\t// context: DOMNode\n\t\t//\t\tThe context to search in.\n\t\t// children: Boolean\n\t\t//\t\tIndicates if children elements of the selector should be allowed. This defaults to\n\t\t//\t\ttrue\n\t\t// matchesTarget: Object|dojo/query?\n\t\t//\t\tAn object with a property \"matches\" as a function. Default is dojo/query.\n\t\t//\t\tMatching DOMNodes will be done against this function\n\t\t//\t\tThe function must return a Boolean.\n\t\t//\t\tIt will have 3 arguments: \"node\", \"selector\" and \"context\"\n\t\t//\t\tTrue is expected if \"node\" is matching the current \"selector\" in the passed \"context\"\n\t\t// returns: DOMNode?\n\t\t//\t\tThe matching node, if any. Else you get false\n\n\t\t// see if we have a valid matchesTarget or default to dojo/query\n\t\tmatchesTarget = matchesTarget && (typeof matchesTarget.matches == \"function\") ? matchesTarget : dojo.query;\n\t\tchildren = children !== false;\n\t\t// there is a selector, so make sure it matches\n\t\tif(node.nodeType != 1){\n\t\t\t// text node will fail in native match selector\n\t\t\tnode = node.parentNode;\n\t\t}\n\t\twhile(!matchesTarget.matches(node, selector, context)){\n\t\t\tif(node == context || children === false || !(node = node.parentNode) || node.nodeType != 1){ // intentional assignment\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn node;\n\t};\n\ton.selector = function(selector, eventType, children){\n\t\t// summary:\n\t\t//\t\tCreates a new extension event with event delegation. This is based on\n\t\t//\t\tthe provided event type (can be extension event) that\n\t\t//\t\tonly calls the listener when the CSS selector matches the target of the event.\n\t\t//\n\t\t//\t\tThe application must require() an appropriate level of dojo/query to handle the selector.\n\t\t// selector:\n\t\t//\t\tThe CSS selector to use for filter events and determine the |this| of the event listener.\n\t\t// eventType:\n\t\t//\t\tThe event to listen for\n\t\t// children:\n\t\t//\t\tIndicates if children elements of the selector should be allowed. This defaults to\n\t\t//\t\ttrue\n\t\t// example:\n\t\t// |\trequire([\"dojo/on\", \"dojo/mouse\", \"dojo/query!css2\"], function(on, mouse){\n\t\t// |\t\ton(node, on.selector(\".my-class\", mouse.enter), handlerForMyHover);\n\t\treturn function(target, listener){\n\t\t\t// if the selector is function, use it to select the node, otherwise use the matches method\n\t\t\tvar matchesTarget = typeof selector == \"function\" ? {matches: selector} : this,\n\t\t\t\tbubble = eventType.bubble;\n\t\t\tfunction select(eventTarget){\n\t\t\t\treturn on.matches(eventTarget, selector, target, children, matchesTarget);\n\t\t\t}\n\t\t\tif(bubble){\n\t\t\t\t// the event type doesn't naturally bubble, but has a bubbling form, use that, and give it the selector so it can perform the select itself\n\t\t\t\treturn on(target, bubble(select), listener);\n\t\t\t}\n\t\t\t// standard event delegation\n\t\t\treturn on(target, eventType, function(event){\n\t\t\t\t// call select to see if we match\n\t\t\t\tvar eventTarget = select(event.target);\n\t\t\t\t// if it matches we call the listener\n\t\t\t\tif (eventTarget) {\n\t\t\t\t\t// We save the matching target into the event, so it can be accessed even when hitching (see #18355)\n\t\t\t\t\tevent.selectorTarget = eventTarget;\n\t\t\t\t\treturn listener.call(eventTarget, event);\n\t\t\t\t}\n\t\t\t});\n\t\t};\n\t};\n\n\tfunction syntheticPreventDefault(){\n\t\tthis.cancelable = false;\n\t\tthis.defaultPrevented = true;\n\t}\n\tfunction syntheticStopPropagation(){\n\t\tthis.bubbles = false;\n\t}\n\tvar slice = [].slice,\n\t\tsyntheticDispatch = on.emit = function(target, type, event){\n\t\t// summary:\n\t\t//\t\tFires an event on the target object.\n\t\t// target:\n\t\t//\t\tThe target object to fire the event on. This can be a DOM element or a plain\n\t\t//\t\tJS object. If the target is a DOM element, native event emitting mechanisms\n\t\t//\t\tare used when possible.\n\t\t// type:\n\t\t//\t\tThe event type name. You can emulate standard native events like \"click\" and\n\t\t//\t\t\"mouseover\" or create custom events like \"open\" or \"finish\".\n\t\t// event:\n\t\t//\t\tAn object that provides the properties for the event. See https://developer.mozilla.org/en/DOM/event.initEvent\n\t\t//\t\tfor some of the properties. These properties are copied to the event object.\n\t\t//\t\tOf particular importance are the cancelable and bubbles properties. The\n\t\t//\t\tcancelable property indicates whether or not the event has a default action\n\t\t//\t\tthat can be cancelled. The event is cancelled by calling preventDefault() on\n\t\t//\t\tthe event object. The bubbles property indicates whether or not the\n\t\t//\t\tevent will bubble up the DOM tree. If bubbles is true, the event will be called\n\t\t//\t\ton the target and then each parent successively until the top of the tree\n\t\t//\t\tis reached or stopPropagation() is called. Both bubbles and cancelable\n\t\t//\t\tdefault to false.\n\t\t// returns:\n\t\t//\t\tIf the event is cancelable and the event is not cancelled,\n\t\t//\t\temit will return true. If the event is cancelable and the event is cancelled,\n\t\t//\t\temit will return false.\n\t\t// details:\n\t\t//\t\tNote that this is designed to emit events for listeners registered through\n\t\t//\t\tdojo/on. It should actually work with any event listener except those\n\t\t//\t\tadded through IE's attachEvent (IE8 and below's non-W3C event emitting\n\t\t//\t\tdoesn't support custom event types). It should work with all events registered\n\t\t//\t\tthrough dojo/on. Also note that the emit method does do any default\n\t\t//\t\taction, it only returns a value to indicate if the default action should take\n\t\t//\t\tplace. For example, emitting a keypress event would not cause a character\n\t\t//\t\tto appear in a textbox.\n\t\t// example:\n\t\t//\t\tTo fire our own click event\n\t\t//\t|\trequire([\"dojo/on\", \"dojo/dom\"\n\t\t//\t|\t], function(on, dom){\n\t\t//\t|\t\ton.emit(dom.byId(\"button\"), \"click\", {\n\t\t//\t|\t\t\tcancelable: true,\n\t\t//\t|\t\t\tbubbles: true,\n\t\t//\t|\t\t\tscreenX: 33,\n\t\t//\t|\t\t\tscreenY: 44\n\t\t//\t|\t\t});\n\t\t//\t\tWe can also fire our own custom events:\n\t\t//\t|\t\ton.emit(dom.byId(\"slider\"), \"slide\", {\n\t\t//\t|\t\t\tcancelable: true,\n\t\t//\t|\t\t\tbubbles: true,\n\t\t//\t|\t\t\tdirection: \"left-to-right\"\n\t\t//\t|\t\t});\n\t\t//\t|\t});\n\t\tvar args = slice.call(arguments, 2);\n\t\tvar method = \"on\" + type;\n\t\tif(\"parentNode\" in target){\n\t\t\t// node (or node-like), create event controller methods\n\t\t\tvar newEvent = args[0] = {};\n\t\t\tfor(var i in event){\n\t\t\t\tnewEvent[i] = event[i];\n\t\t\t}\n\t\t\tnewEvent.preventDefault = syntheticPreventDefault;\n\t\t\tnewEvent.stopPropagation = syntheticStopPropagation;\n\t\t\tnewEvent.target = target;\n\t\t\tnewEvent.type = type;\n\t\t\tevent = newEvent;\n\t\t}\n\t\tdo{\n\t\t\t// call any node which has a handler (note that ideally we would try/catch to simulate normal event propagation but that causes too much pain for debugging)\n\t\t\ttarget[method] && target[method].apply(target, args);\n\t\t\t// and then continue up the parent node chain if it is still bubbling (if started as bubbles and stopPropagation hasn't been called)\n\t\t}while(event && event.bubbles && (target = target.parentNode));\n\t\treturn event && event.cancelable && event; // if it is still true (was cancelable and was cancelled), return the event to indicate default action should happen\n\t};\n\tvar captures = has(\"event-focusin\") ? {} : {focusin: \"focus\", focusout: \"blur\"};\n\tif(!has(\"event-stopimmediatepropagation\")){\n\t\tvar stopImmediatePropagation =function(){\n\t\t\tthis.immediatelyStopped = true;\n\t\t\tthis.modified = true; // mark it as modified so the event will be cached in IE\n\t\t};\n\t\tvar addStopImmediate = function(listener){\n\t\t\treturn function(event){\n\t\t\t\tif(!event.immediatelyStopped){// check to make sure it hasn't been stopped immediately\n\t\t\t\t\tevent.stopImmediatePropagation = stopImmediatePropagation;\n\t\t\t\t\treturn listener.apply(this, arguments);\n\t\t\t\t}\n\t\t\t};\n\t\t};\n\t}\n\tif(has(\"dom-addeventlistener\")){\n\t\t// emitter that works with native event handling\n\t\ton.emit = function(target, type, event){\n\t\t\tif(target.dispatchEvent && document.createEvent){\n\t\t\t\t// use the native event emitting mechanism if it is available on the target object\n\t\t\t\t// create a generic event\n\t\t\t\t// we could create branch into the different types of event constructors, but\n\t\t\t\t// that would be a lot of extra code, with little benefit that I can see, seems\n\t\t\t\t// best to use the generic constructor and copy properties over, making it\n\t\t\t\t// easy to have events look like the ones created with specific initializers\n\t\t\t\tvar ownerDocument = target.ownerDocument || document;\n\t\t\t\tvar nativeEvent = ownerDocument.createEvent(\"HTMLEvents\");\n\t\t\t\tnativeEvent.initEvent(type, !!event.bubbles, !!event.cancelable);\n\t\t\t\t// and copy all our properties over\n\t\t\t\tfor(var i in event){\n\t\t\t\t\tif(!(i in nativeEvent)){\n\t\t\t\t\t\tnativeEvent[i] = event[i];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn target.dispatchEvent(nativeEvent) && nativeEvent;\n\t\t\t}\n\t\t\treturn syntheticDispatch.apply(on, arguments); // emit for a non-node\n\t\t};\n\t}else{\n\t\t// no addEventListener, basically old IE event normalization\n\t\ton._fixEvent = function(evt, sender){\n\t\t\t// summary:\n\t\t\t//\t\tnormalizes properties on the event object including event\n\t\t\t//\t\tbubbling methods, keystroke normalization, and x/y positions\n\t\t\t// evt:\n\t\t\t//\t\tnative event object\n\t\t\t// sender:\n\t\t\t//\t\tnode to treat as \"currentTarget\"\n\t\t\tif(!evt){\n\t\t\t\tvar w = sender && (sender.ownerDocument || sender.document || sender).parentWindow || window;\n\t\t\t\tevt = w.event;\n\t\t\t}\n\t\t\tif(!evt){return evt;}\n\t\t\ttry{\n\t\t\t\tif(lastEvent && evt.type == lastEvent.type && evt.srcElement == lastEvent.target){\n\t\t\t\t\t// should be same event, reuse event object (so it can be augmented);\n\t\t\t\t\t// accessing evt.srcElement rather than evt.target since evt.target not set on IE until fixup below\n\t\t\t\t\tevt = lastEvent;\n\t\t\t\t}\n\t\t\t}catch(e){\n\t\t\t\t// will occur on IE on lastEvent.type reference if lastEvent points to a previous event that already\n\t\t\t\t// finished bubbling, but the setTimeout() to clear lastEvent hasn't fired yet\n\t\t\t}\n\t\t\tif(!evt.target){ // check to see if it has been fixed yet\n\t\t\t\tevt.target = evt.srcElement;\n\t\t\t\tevt.currentTarget = (sender || evt.srcElement);\n\t\t\t\tif(evt.type == \"mouseover\"){\n\t\t\t\t\tevt.relatedTarget = evt.fromElement;\n\t\t\t\t}\n\t\t\t\tif(evt.type == \"mouseout\"){\n\t\t\t\t\tevt.relatedTarget = evt.toElement;\n\t\t\t\t}\n\t\t\t\tif(!evt.stopPropagation){\n\t\t\t\t\tevt.stopPropagation = stopPropagation;\n\t\t\t\t\tevt.preventDefault = preventDefault;\n\t\t\t\t}\n\t\t\t\tswitch(evt.type){\n\t\t\t\t\tcase \"keypress\":\n\t\t\t\t\t\tvar c = (\"charCode\" in evt ? evt.charCode : evt.keyCode);\n\t\t\t\t\t\tif (c==10){\n\t\t\t\t\t\t\t// CTRL-ENTER is CTRL-ASCII(10) on IE, but CTRL-ENTER on Mozilla\n\t\t\t\t\t\t\tc=0;\n\t\t\t\t\t\t\tevt.keyCode = 13;\n\t\t\t\t\t\t}else if(c==13||c==27){\n\t\t\t\t\t\t\tc=0; // Mozilla considers ENTER and ESC non-printable\n\t\t\t\t\t\t}else if(c==3){\n\t\t\t\t\t\t\tc=99; // Mozilla maps CTRL-BREAK to CTRL-c\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Mozilla sets keyCode to 0 when there is a charCode\n\t\t\t\t\t\t// but that stops the event on IE.\n\t\t\t\t\t\tevt.charCode = c;\n\t\t\t\t\t\t_setKeyChar(evt);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn evt;\n\t\t};\n\t\tvar lastEvent, IESignal = function(handle){\n\t\t\tthis.handle = handle;\n\t\t};\n\t\tIESignal.prototype.remove = function(){\n\t\t\tdelete _dojoIEListeners_[this.handle];\n\t\t};\n\t\tvar fixListener = function(listener){\n\t\t\t// this is a minimal function for closing on the previous listener with as few as variables as possible\n\t\t\treturn function(evt){\n\t\t\t\tevt = on._fixEvent(evt, this);\n\t\t\t\tvar result = listener.call(this, evt);\n\t\t\t\tif(evt.modified){\n\t\t\t\t\t// cache the last event and reuse it if we can\n\t\t\t\t\tif(!lastEvent){\n\t\t\t\t\t\tsetTimeout(function(){\n\t\t\t\t\t\t\tlastEvent = null;\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tlastEvent = evt;\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t};\n\t\t};\n\t\tvar fixAttach = function(target, type, listener){\n\t\t\tlistener = fixListener(listener);\n\t\t\tif(((target.ownerDocument ? target.ownerDocument.parentWindow : target.parentWindow || target.window || window) != top ||\n\t\t\t\t\t\thas(\"jscript\") < 5.8) &&\n\t\t\t\t\t!has(\"config-_allow_leaks\")){\n\t\t\t\t// IE will leak memory on certain handlers in frames (IE8 and earlier) and in unattached DOM nodes for JScript 5.7 and below.\n\t\t\t\t// Here we use global redirection to solve the memory leaks\n\t\t\t\tif(typeof _dojoIEListeners_ == \"undefined\"){\n\t\t\t\t\t_dojoIEListeners_ = [];\n\t\t\t\t}\n\t\t\t\tvar emitter = target[type];\n\t\t\t\tif(!emitter || !emitter.listeners){\n\t\t\t\t\tvar oldListener = emitter;\n\t\t\t\t\temitter = Function('event', 'var callee = arguments.callee; for(var i = 0; i<callee.listeners.length; i++){var listener = _dojoIEListeners_[callee.listeners[i]]; if(listener){listener.call(this,event);}}');\n\t\t\t\t\temitter.listeners = [];\n\t\t\t\t\ttarget[type] = emitter;\n\t\t\t\t\temitter.global = this;\n\t\t\t\t\tif(oldListener){\n\t\t\t\t\t\temitter.listeners.push(_dojoIEListeners_.push(oldListener) - 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tvar handle;\n\t\t\t\temitter.listeners.push(handle = (emitter.global._dojoIEListeners_.push(listener) - 1));\n\t\t\t\treturn new IESignal(handle);\n\t\t\t}\n\t\t\treturn aspect.after(target, type, listener, true);\n\t\t};\n\n\t\tvar _setKeyChar = function(evt){\n\t\t\tevt.keyChar = evt.charCode ? String.fromCharCode(evt.charCode) : '';\n\t\t\tevt.charOrCode = evt.keyChar || evt.keyCode;\t// TODO: remove for 2.0\n\t\t};\n\t\t// Called in Event scope\n\t\tvar stopPropagation = function(){\n\t\t\tthis.cancelBubble = true;\n\t\t};\n\t\tvar preventDefault = on._preventDefault = function(){\n\t\t\t// Setting keyCode to 0 is the only way to prevent certain keypresses (namely\n\t\t\t// ctrl-combinations that correspond to menu accelerator keys).\n\t\t\t// Otoh, it prevents upstream listeners from getting this information\n\t\t\t// Try to split the difference here by clobbering keyCode only for ctrl\n\t\t\t// combinations. If you still need to access the key upstream, bubbledKeyCode is\n\t\t\t// provided as a workaround.\n\t\t\tthis.bubbledKeyCode = this.keyCode;\n\t\t\tif(this.ctrlKey){\n\t\t\t\ttry{\n\t\t\t\t\t// squelch errors when keyCode is read-only\n\t\t\t\t\t// (e.g. if keyCode is ctrl or shift)\n\t\t\t\t\tthis.keyCode = 0;\n\t\t\t\t}catch(e){\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.defaultPrevented = true;\n\t\t\tthis.returnValue = false;\n\t\t\tthis.modified = true; // mark it as modified (for defaultPrevented flag) so the event will be cached in IE\n\t\t};\n\t}\n\tif(has(\"touch\")){\n\t\tvar EventDelegate = function(){};\n\t\tvar windowOrientation = window.orientation;\n\t\tvar fixTouchListener = function(listener){\n\t\t\treturn function(originalEvent){\n\t\t\t\t//Event normalization(for ontouchxxx and resize):\n\t\t\t\t//1.incorrect e.pageX|pageY in iOS\n\t\t\t\t//2.there are no \"e.rotation\", \"e.scale\" and \"onorientationchange\" in Android\n\t\t\t\t//3.More TBD e.g. force | screenX | screenX | clientX | clientY | radiusX | radiusY\n\n\t\t\t\t// see if it has already been corrected\n\t\t\t\tvar event = originalEvent.corrected;\n\t\t\t\tif(!event){\n\t\t\t\t\tvar type = originalEvent.type;\n\t\t\t\t\ttry{\n\t\t\t\t\t\tdelete originalEvent.type; // on some JS engines (android), deleting properties makes them mutable\n\t\t\t\t\t}catch(e){}\n\t\t\t\t\tif(originalEvent.type){\n\t\t\t\t\t\t// Deleting the property of the original event did not work (this is the case of\n\t\t\t\t\t\t// browsers such as older Safari iOS), hence fallback:\n\t\t\t\t\t\tif(has(\"touch-can-modify-event-delegate\")){\n\t\t\t\t\t\t\t// If deleting properties of delegated event works, use event delegation:\n\t\t\t\t\t\t\tEventDelegate.prototype = originalEvent;\n\t\t\t\t\t\t\tevent = new EventDelegate;\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t// Otherwise last fallback: other browsers, such as mobile Firefox, do not like\n\t\t\t\t\t\t\t// delegated properties, so we have to copy\n\t\t\t\t\t\t\tevent = {};\n\t\t\t\t\t\t\tfor(var name in originalEvent){\n\t\t\t\t\t\t\t\tevent[name] = originalEvent[name];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// have to delegate methods to make them work\n\t\t\t\t\t\tevent.preventDefault = function(){\n\t\t\t\t\t\t\toriginalEvent.preventDefault();\n\t\t\t\t\t\t};\n\t\t\t\t\t\tevent.stopPropagation = function(){\n\t\t\t\t\t\t\toriginalEvent.stopPropagation();\n\t\t\t\t\t\t};\n\t\t\t\t\t}else{\n\t\t\t\t\t\t// deletion worked, use property as is\n\t\t\t\t\t\tevent = originalEvent;\n\t\t\t\t\t\tevent.type = type;\n\t\t\t\t\t}\n\t\t\t\t\toriginalEvent.corrected = event;\n\t\t\t\t\tif(type == 'resize'){\n\t\t\t\t\t\tif(windowOrientation == window.orientation){\n\t\t\t\t\t\t\treturn null;//double tap causes an unexpected 'resize' in Android\n\t\t\t\t\t\t}\n\t\t\t\t\t\twindowOrientation = window.orientation;\n\t\t\t\t\t\tevent.type = \"orientationchange\";\n\t\t\t\t\t\treturn listener.call(this, event);\n\t\t\t\t\t}\n\t\t\t\t\t// We use the original event and augment, rather than doing an expensive mixin operation\n\t\t\t\t\tif(!(\"rotation\" in event)){ // test to see if it has rotation\n\t\t\t\t\t\tevent.rotation = 0;\n\t\t\t\t\t\tevent.scale = 1;\n\t\t\t\t\t}\n\t\t\t\t\tif (window.TouchEvent && originalEvent instanceof TouchEvent) {\n\t\t\t\t\t\t// use event.changedTouches[0].pageX|pageY|screenX|screenY|clientX|clientY|target\n\t\t\t\t\t\tvar firstChangeTouch = event.changedTouches[0];\n\t\t\t\t\t\tfor(var i in firstChangeTouch){ // use for-in, we don't need to have dependency on dojo/_base/lang here\n\t\t\t\t\t\t\tdelete event[i]; // delete it first to make it mutable\n\t\t\t\t\t\t\tevent[i] = firstChangeTouch[i];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn listener.call(this, event);\n\t\t\t};\n\t\t};\n\t}\n\treturn on;\n});\n","define([\"./kernel\", \"../has\", \"./lang\"], function(dojo, has, lang){\n\t// module:\n\t//\t\tdojo/_base/array\n\n\t// our old simple function builder stuff\n\tvar cache = {}, u;\n\n\tvar buildFn;\n\tif(!has(\"csp-restrictions\")){\n\t\tbuildFn = function (fn){\n\t\t\treturn cache[fn] = new Function(\"item\", \"index\", \"array\", fn); // Function\n\t\t};\n\t}\n\n\t// magic snippet: if(typeof fn == \"string\") fn = cache[fn] || buildFn(fn);\n\n\t// every & some\n\n\tfunction everyOrSome(some){\n\t\tvar every = !some;\n\t\treturn function(a, fn, o){\n\t\t\tvar i = 0, l = a && a.length || 0, result;\n\t\t\tif(l && typeof a == \"string\") a = a.split(\"\");\n\t\t\tif(typeof fn == \"string\"){\n\t\t\t\tif(has(\"csp-restrictions\")){\n\t\t\t\t\tthrow new TypeError(\"callback must be a function\");\n\t\t\t\t}\n\t\t\t\telse{\n\t\t\t\t\tfn = cache[fn] || buildFn(fn);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(o){\n\t\t\t\tfor(; i < l; ++i){\n\t\t\t\t\tresult = !fn.call(o, a[i], i, a);\n\t\t\t\t\tif(some ^ result){\n\t\t\t\t\t\treturn !result;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tfor(; i < l; ++i){\n\t\t\t\t\tresult = !fn(a[i], i, a);\n\t\t\t\t\tif(some ^ result){\n\t\t\t\t\t\treturn !result;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn every; // Boolean\n\t\t};\n\t}\n\n\t// indexOf, lastIndexOf\n\n\tfunction index(up){\n\t\tvar delta = 1, lOver = 0, uOver = 0;\n\t\tif(!up){\n\t\t\tdelta = lOver = uOver = -1;\n\t\t}\n\t\treturn function(a, x, from, last){\n\t\t\tif(last && delta > 0){\n\t\t\t\t// TODO: why do we use a non-standard signature? why do we need \"last\"?\n\t\t\t\treturn array.lastIndexOf(a, x, from);\n\t\t\t}\n\t\t\tvar l = a && a.length || 0, end = up ? l + uOver : lOver, i;\n\t\t\tif(from === u){\n\t\t\t\ti = up ? lOver : l + uOver;\n\t\t\t}else{\n\t\t\t\tif(from < 0){\n\t\t\t\t\ti = l + from;\n\t\t\t\t\tif(i < 0){\n\t\t\t\t\t\ti = lOver;\n\t\t\t\t\t}\n\t\t\t\t}else{\n\t\t\t\t\ti = from >= l ? l + uOver : from;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(l && typeof a == \"string\") a = a.split(\"\");\n\t\t\tfor(; i != end; i += delta){\n\t\t\t\tif(a[i] == x){\n\t\t\t\t\treturn i; // Number\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn -1; // Number\n\t\t};\n\t}\n\n\tvar array = {\n\t\t// summary:\n\t\t//\t\tThe Javascript v1.6 array extensions.\n\n\t\tevery: everyOrSome(false),\n\t\t/*=====\n\t\t every: function(arr, callback, thisObject){\n\t\t\t // summary:\n\t\t\t //\t\tDetermines whether or not every item in arr satisfies the\n\t\t\t //\t\tcondition implemented by callback.\n\t\t\t // arr: Array|String\n\t\t\t //\t\tthe array to iterate on. If a string, operates on individual characters.\n\t\t\t // callback: Function|String\n\t\t\t //\t\ta function is invoked with three arguments: item, index,\n\t\t\t //\t\tand array and returns true if the condition is met.\n\t\t\t // thisObject: Object?\n\t\t\t //\t\tmay be used to scope the call to callback\n\t\t\t // returns: Boolean\n\t\t\t // description:\n\t\t\t //\t\tThis function corresponds to the JavaScript 1.6 Array.every() method, with one difference: when\n\t\t\t //\t\trun over sparse arrays, this implementation passes the \"holes\" in the sparse array to\n\t\t\t //\t\tthe callback function with a value of undefined. JavaScript 1.6's every skips the holes in the sparse array.\n\t\t\t //\t\tFor more details, see:\n\t\t\t //\t\thttps://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/every\n\t\t\t // example:\n\t\t\t //\t|\t// returns false\n\t\t\t //\t|\tarray.every([1, 2, 3, 4], function(item){ return item>1; });\n\t\t\t // example:\n\t\t\t //\t|\t// returns true\n\t\t\t //\t|\tarray.every([1, 2, 3, 4], function(item){ return item>0; });\n\t\t },\n\t\t =====*/\n\n\t\tsome: everyOrSome(true),\n\t\t/*=====\n\t\tsome: function(arr, callback, thisObject){\n\t\t\t// summary:\n\t\t\t//\t\tDetermines whether or not any item in arr satisfies the\n\t\t\t//\t\tcondition implemented by callback.\n\t\t\t// arr: Array|String\n\t\t\t//\t\tthe array to iterate over. If a string, operates on individual characters.\n\t\t\t// callback: Function|String\n\t\t\t//\t\ta function is invoked with three arguments: item, index,\n\t\t\t//\t\tand array and returns true if the condition is met.\n\t\t\t// thisObject: Object?\n\t\t\t//\t\tmay be used to scope the call to callback\n\t\t\t// returns: Boolean\n\t\t\t// description:\n\t\t\t//\t\tThis function corresponds to the JavaScript 1.6 Array.some() method, with one difference: when\n\t\t\t//\t\trun over sparse arrays, this implementation passes the \"holes\" in the sparse array to\n\t\t\t//\t\tthe callback function with a value of undefined. JavaScript 1.6's some skips the holes in the sparse array.\n\t\t\t//\t\tFor more details, see:\n\t\t\t//\t\thttps://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/some\n\t\t\t// example:\n\t\t\t//\t| // is true\n\t\t\t//\t| array.some([1, 2, 3, 4], function(item){ return item>1; });\n\t\t\t// example:\n\t\t\t//\t| // is false\n\t\t\t//\t| array.some([1, 2, 3, 4], function(item){ return item<1; });\n\t\t},\n\t\t=====*/\n\n\t\tindexOf: index(true),\n\t\t/*=====\n\t\tindexOf: function(arr, value, fromIndex, findLast){\n\t\t\t// summary:\n\t\t\t//\t\tlocates the first index of the provided value in the\n\t\t\t//\t\tpassed array. If the value is not found, -1 is returned.\n\t\t\t// description:\n\t\t\t//\t\tThis method corresponds to the JavaScript 1.6 Array.indexOf method, with two differences:\n\t\t\t//\n\t\t\t//\t\t1. when run over sparse arrays, the Dojo function invokes the callback for every index\n\t\t\t//\t\t whereas JavaScript 1.6's indexOf skips the holes in the sparse array.\n\t\t\t//\t\t2. uses equality (==) rather than strict equality (===)\n\t\t\t//\n\t\t\t//\t\tFor details on this method, see:\n\t\t\t//\t\thttps://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/indexOf\n\t\t\t// arr: Array\n\t\t\t// value: Object\n\t\t\t// fromIndex: Integer?\n\t\t\t// findLast: Boolean?\n\t\t\t//\t\tMakes indexOf() work like lastIndexOf(). Used internally; not meant for external usage.\n\t\t\t// returns: Number\n\t\t},\n\t\t=====*/\n\n\t\tlastIndexOf: index(false),\n\t\t/*=====\n\t\tlastIndexOf: function(arr, value, fromIndex){\n\t\t\t// summary:\n\t\t\t//\t\tlocates the last index of the provided value in the passed\n\t\t\t//\t\tarray. If the value is not found, -1 is returned.\n\t\t\t// description:\n\t\t \t//\t\tThis method corresponds to the JavaScript 1.6 Array.lastIndexOf method, with two differences:\n\t\t \t//\n\t\t \t//\t\t1. when run over sparse arrays, the Dojo function invokes the callback for every index\n\t\t \t//\t\t whereas JavaScript 1.6's lasIndexOf skips the holes in the sparse array.\n\t\t \t//\t\t2. uses equality (==) rather than strict equality (===)\n\t\t \t//\n\t\t \t//\t\tFor details on this method, see:\n\t\t \t//\t\thttps://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/lastIndexOf\n\t\t\t// arr: Array,\n\t\t\t// value: Object,\n\t\t\t// fromIndex: Integer?\n\t\t\t// returns: Number\n\t\t},\n\t\t=====*/\n\n\t\tforEach: function(arr, callback, thisObject){\n\t\t\t// summary:\n\t\t\t//\t\tfor every item in arr, callback is invoked. Return values are ignored.\n\t\t\t//\t\tIf you want to break out of the loop, consider using array.every() or array.some().\n\t\t\t//\t\tforEach does not allow breaking out of the loop over the items in arr.\n\t\t\t// arr:\n\t\t\t//\t\tthe array to iterate over. If a string, operates on individual characters.\n\t\t\t// callback:\n\t\t\t//\t\ta function is invoked with three arguments: item, index, and array\n\t\t\t// thisObject:\n\t\t\t//\t\tmay be used to scope the call to callback\n\t\t\t// description:\n\t\t\t//\t\tThis function corresponds to the JavaScript 1.6 Array.forEach() method, with one difference: when\n\t\t\t//\t\trun over sparse arrays, this implementation passes the \"holes\" in the sparse array to\n\t\t\t//\t\tthe callback function with a value of undefined. JavaScript 1.6's forEach skips the holes in the sparse array.\n\t\t\t//\t\tFor more details, see:\n\t\t\t//\t\thttps://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/forEach\n\t\t\t// example:\n\t\t\t//\t| // log out all members of the array:\n\t\t\t//\t| array.forEach(\n\t\t\t//\t|\t\t[ \"thinger\", \"blah\", \"howdy\", 10 ],\n\t\t\t//\t|\t\tfunction(item){\n\t\t\t//\t|\t\t\tconsole.log(item);\n\t\t\t//\t|\t\t}\n\t\t\t//\t| );\n\t\t\t// example:\n\t\t\t//\t| // log out the members and their indexes\n\t\t\t//\t| array.forEach(\n\t\t\t//\t|\t\t[ \"thinger\", \"blah\", \"howdy\", 10 ],\n\t\t\t//\t|\t\tfunction(item, idx, arr){\n\t\t\t//\t|\t\t\tconsole.log(item, \"at index:\", idx);\n\t\t\t//\t|\t\t}\n\t\t\t//\t| );\n\t\t\t// example:\n\t\t\t//\t| // use a scoped object member as the callback\n\t\t\t//\t|\n\t\t\t//\t| var obj = {\n\t\t\t//\t|\t\tprefix: \"logged via obj.callback:\",\n\t\t\t//\t|\t\tcallback: function(item){\n\t\t\t//\t|\t\t\tconsole.log(this.prefix, item);\n\t\t\t//\t|\t\t}\n\t\t\t//\t| };\n\t\t\t//\t|\n\t\t\t//\t| // specifying the scope function executes the callback in that scope\n\t\t\t//\t| array.forEach(\n\t\t\t//\t|\t\t[ \"thinger\", \"blah\", \"howdy\", 10 ],\n\t\t\t//\t|\t\tobj.callback,\n\t\t\t//\t|\t\tobj\n\t\t\t//\t| );\n\t\t\t//\t|\n\t\t\t//\t| // alternately, we can accomplish the same thing with lang.hitch()\n\t\t\t//\t| array.forEach(\n\t\t\t//\t|\t\t[ \"thinger\", \"blah\", \"howdy\", 10 ],\n\t\t\t//\t|\t\tlang.hitch(obj, \"callback\")\n\t\t\t//\t| );\n\t\t\t// arr: Array|String\n\t\t\t// callback: Function|String\n\t\t\t// thisObject: Object?\n\n\t\t\tvar i = 0, l = arr && arr.length || 0;\n\t\t\tif(l && typeof arr == \"string\") arr = arr.split(\"\");\n\t\t\tif(typeof callback == \"string\"){\n\t\t\t\tif(has(\"csp-restrictions\")){\n\t\t\t\t\tthrow new TypeError(\"callback must be a function\");\n\t\t\t\t}\n\t\t\t\telse{\n\t\t\t\t\tcallback = cache[callback] || buildFn(callback);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(thisObject){\n\t\t\t\tfor(; i < l; ++i){\n\t\t\t\t\tcallback.call(thisObject, arr[i], i, arr);\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tfor(; i < l; ++i){\n\t\t\t\t\tcallback(arr[i], i, arr);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tmap: function(arr, callback, thisObject, Ctr){\n\t\t\t// summary:\n\t\t\t//\t\tapplies callback to each element of arr and returns\n\t\t\t//\t\tan Array with the results\n\t\t\t// arr: Array|String\n\t\t\t//\t\tthe array to iterate on. If a string, operates on\n\t\t\t//\t\tindividual characters.\n\t\t\t// callback: Function|String\n\t\t\t//\t\ta function is invoked with three arguments, (item, index,\n\t\t\t//\t\tarray),\t and returns a value\n\t\t\t// thisObject: Object?\n\t\t\t//\t\tmay be used to scope the call to callback\n\t\t\t// returns: Array\n\t\t\t// description:\n\t\t\t//\t\tThis function corresponds to the JavaScript 1.6 Array.map() method, with one difference: when\n\t\t\t//\t\trun over sparse arrays, this implementation passes the \"holes\" in the sparse array to\n\t\t\t//\t\tthe callback function with a value of undefined. JavaScript 1.6's map skips the holes in the sparse array.\n\t\t\t//\t\tFor more details, see:\n\t\t\t//\t\thttps://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/map\n\t\t\t// example:\n\t\t\t//\t| // returns [2, 3, 4, 5]\n\t\t\t//\t| array.map([1, 2, 3, 4], function(item){ return item+1 });\n\n\t\t\t// TODO: why do we have a non-standard signature here? do we need \"Ctr\"?\n\t\t\tvar i = 0, l = arr && arr.length || 0, out = new (Ctr || Array)(l);\n\t\t\tif(l && typeof arr == \"string\") arr = arr.split(\"\");\n\t\t\tif(typeof callback == \"string\"){\n\t\t\t\tif(has(\"csp-restrictions\")){\n\t\t\t\t\tthrow new TypeError(\"callback must be a function\");\n\t\t\t\t}\n\t\t\t\telse{\n\t\t\t\t\tcallback = cache[callback] || buildFn(callback);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(thisObject){\n\t\t\t\tfor(; i < l; ++i){\n\t\t\t\t\tout[i] = callback.call(thisObject, arr[i], i, arr);\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tfor(; i < l; ++i){\n\t\t\t\t\tout[i] = callback(arr[i], i, arr);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn out; // Array\n\t\t},\n\n\t\tfilter: function(arr, callback, thisObject){\n\t\t\t// summary:\n\t\t\t//\t\tReturns a new Array with those items from arr that match the\n\t\t\t//\t\tcondition implemented by callback.\n\t\t\t// arr: Array\n\t\t\t//\t\tthe array to iterate over.\n\t\t\t// callback: Function|String\n\t\t\t//\t\ta function that is invoked with three arguments (item,\n\t\t\t//\t\tindex, array). The return of this function is expected to\n\t\t\t//\t\tbe a boolean which determines whether the passed-in item\n\t\t\t//\t\twill be included in the returned array.\n\t\t\t// thisObject: Object?\n\t\t\t//\t\tmay be used to scope the call to callback\n\t\t\t// returns: Array\n\t\t\t// description:\n\t\t\t//\t\tThis function corresponds to the JavaScript 1.6 Array.filter() method, with one difference: when\n\t\t\t//\t\trun over sparse arrays, this implementation passes the \"holes\" in the sparse array to\n\t\t\t//\t\tthe callback function with a value of undefined. JavaScript 1.6's filter skips the holes in the sparse array.\n\t\t\t//\t\tFor more details, see:\n\t\t\t//\t\thttps://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/filter\n\t\t\t// example:\n\t\t\t//\t| // returns [2, 3, 4]\n\t\t\t//\t| array.filter([1, 2, 3, 4], function(item){ return item>1; });\n\n\t\t\t// TODO: do we need \"Ctr\" here like in map()?\n\t\t\tvar i = 0, l = arr && arr.length || 0, out = [], value;\n\t\t\tif(l && typeof arr == \"string\") arr = arr.split(\"\");\n\t\t\tif(typeof callback == \"string\"){\n\t\t\t\tif(has(\"csp-restrictions\")){\n\t\t\t\t\tthrow new TypeError(\"callback must be a function\");\n\t\t\t\t}\n\t\t\t\telse{\n\t\t\t\t\tcallback = cache[callback] || buildFn(callback);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(thisObject){\n\t\t\t\tfor(; i < l; ++i){\n\t\t\t\t\tvalue = arr[i];\n\t\t\t\t\tif(callback.call(thisObject, value, i, arr)){\n\t\t\t\t\t\tout.push(value);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tfor(; i < l; ++i){\n\t\t\t\t\tvalue = arr[i];\n\t\t\t\t\tif(callback(value, i, arr)){\n\t\t\t\t\t\tout.push(value);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn out; // Array\n\t\t},\n\n\t\tclearCache: function(){\n\t\t\tcache = {};\n\t\t}\n\t};\n\n\n\thas(\"extend-dojo\") && lang.mixin(dojo, array);\n\n\treturn array;\n});\n","define([\n\t\"./kernel\",\n\t\"../Deferred\",\n\t\"../promise/Promise\",\n\t\"../errors/CancelError\",\n\t\"../has\",\n\t\"./lang\",\n\t\"../when\"\n], function(dojo, NewDeferred, Promise, CancelError, has, lang, when){\n\t// module:\n\t//\t\tdojo/_base/Deferred\n\n\tvar mutator = function(){};\n\tvar freeze = Object.freeze || function(){};\n\t// A deferred provides an API for creating and resolving a promise.\n\tvar Deferred = dojo.Deferred = function(/*Function?*/ canceller){\n\t\t// summary:\n\t\t//\t\tDeprecated. This module defines the legacy dojo/_base/Deferred API.\n\t\t//\t\tNew code should use dojo/Deferred instead.\n\t\t// description:\n\t\t//\t\tThe Deferred API is based on the concept of promises that provide a\n\t\t//\t\tgeneric interface into the eventual completion of an asynchronous action.\n\t\t//\t\tThe motivation for promises fundamentally is about creating a\n\t\t//\t\tseparation of concerns that allows one to achieve the same type of\n\t\t//\t\tcall patterns and logical data flow in asynchronous code as can be\n\t\t//\t\tachieved in synchronous code. Promises allows one\n\t\t//\t\tto be able to call a function purely with arguments needed for\n\t\t//\t\texecution, without conflating the call with concerns of whether it is\n\t\t//\t\tsync or async. One shouldn't need to alter a call's arguments if the\n\t\t//\t\timplementation switches from sync to async (or vice versa). By having\n\t\t//\t\tasync functions return promises, the concerns of making the call are\n\t\t//\t\tseparated from the concerns of asynchronous interaction (which are\n\t\t//\t\thandled by the promise).\n\t\t//\n\t\t//\t\tThe Deferred is a type of promise that provides methods for fulfilling the\n\t\t//\t\tpromise with a successful result or an error. The most important method for\n\t\t//\t\tworking with Dojo's promises is the then() method, which follows the\n\t\t//\t\tCommonJS proposed promise API. An example of using a Dojo promise:\n\t\t//\n\t\t//\t\t|\tvar resultingPromise = someAsyncOperation.then(function(result){\n\t\t//\t\t|\t\t... handle result ...\n\t\t//\t\t|\t},\n\t\t//\t\t|\tfunction(error){\n\t\t//\t\t|\t\t... handle error ...\n\t\t//\t\t|\t});\n\t\t//\n\t\t//\t\tThe .then() call returns a new promise that represents the result of the\n\t\t//\t\texecution of the callback. The callbacks will never affect the original promises value.\n\t\t//\n\t\t//\t\tThe Deferred instances also provide the following functions for backwards compatibility:\n\t\t//\n\t\t//\t\t- addCallback(handler)\n\t\t//\t\t- addErrback(handler)\n\t\t//\t\t- callback(result)\n\t\t//\t\t- errback(result)\n\t\t//\n\t\t//\t\tCallbacks are allowed to return promises themselves, so\n\t\t//\t\tyou can build complicated sequences of events with ease.\n\t\t//\n\t\t//\t\tThe creator of the Deferred may specify a canceller. The canceller\n\t\t//\t\tis a function that will be called if Deferred.cancel is called\n\t\t//\t\tbefore the Deferred fires. You can use this to implement clean\n\t\t//\t\taborting of an XMLHttpRequest, etc. Note that cancel will fire the\n\t\t//\t\tdeferred with a CancelledError (unless your canceller returns\n\t\t//\t\tanother kind of error), so the errbacks should be prepared to\n\t\t//\t\thandle that error for cancellable Deferreds.\n\t\t// example:\n\t\t//\t|\tvar deferred = new Deferred();\n\t\t//\t|\tsetTimeout(function(){ deferred.callback({success: true}); }, 1000);\n\t\t//\t|\treturn deferred;\n\t\t// example:\n\t\t//\t\tDeferred objects are often used when making code asynchronous. It\n\t\t//\t\tmay be easiest to write functions in a synchronous manner and then\n\t\t//\t\tsplit code using a deferred to trigger a response to a long-lived\n\t\t//\t\toperation. For example, instead of register a callback function to\n\t\t//\t\tdenote when a rendering operation completes, the function can\n\t\t//\t\tsimply return a deferred:\n\t\t//\n\t\t//\t\t|\t// callback style:\n\t\t//\t\t|\tfunction renderLotsOfData(data, callback){\n\t\t//\t\t|\t\tvar success = false\n\t\t//\t\t|\t\ttry{\n\t\t//\t\t|\t\t\tfor(var x in data){\n\t\t//\t\t|\t\t\t\trenderDataitem(data[x]);\n\t\t//\t\t|\t\t\t}\n\t\t//\t\t|\t\t\tsuccess = true;\n\t\t//\t\t|\t\t}catch(e){ }\n\t\t//\t\t|\t\tif(callback){\n\t\t//\t\t|\t\t\tcallback(success);\n\t\t//\t\t|\t\t}\n\t\t//\t\t|\t}\n\t\t//\n\t\t//\t\t|\t// using callback style\n\t\t//\t\t|\trenderLotsOfData(someDataObj, function(success){\n\t\t//\t\t|\t\t// handles success or failure\n\t\t//\t\t|\t\tif(!success){\n\t\t//\t\t|\t\t\tpromptUserToRecover();\n\t\t//\t\t|\t\t}\n\t\t//\t\t|\t});\n\t\t//\t\t|\t// NOTE: no way to add another callback here!!\n\t\t// example:\n\t\t//\t\tUsing a Deferred doesn't simplify the sending code any, but it\n\t\t//\t\tprovides a standard interface for callers and senders alike,\n\t\t//\t\tproviding both with a simple way to service multiple callbacks for\n\t\t//\t\tan operation and freeing both sides from worrying about details\n\t\t//\t\tsuch as \"did this get called already?\". With Deferreds, new\n\t\t//\t\tcallbacks can be added at any time.\n\t\t//\n\t\t//\t\t|\t// Deferred style:\n\t\t//\t\t|\tfunction renderLotsOfData(data){\n\t\t//\t\t|\t\tvar d = new Deferred();\n\t\t//\t\t|\t\ttry{\n\t\t//\t\t|\t\t\tfor(var x in data){\n\t\t//\t\t|\t\t\t\trenderDataitem(data[x]);\n\t\t//\t\t|\t\t\t}\n\t\t//\t\t|\t\t\td.callback(true);\n\t\t//\t\t|\t\t}catch(e){\n\t\t//\t\t|\t\t\td.errback(new Error(\"rendering failed\"));\n\t\t//\t\t|\t\t}\n\t\t//\t\t|\t\treturn d;\n\t\t//\t\t|\t}\n\t\t//\n\t\t//\t\t|\t// using Deferred style\n\t\t//\t\t|\trenderLotsOfData(someDataObj).then(null, function(){\n\t\t//\t\t|\t\tpromptUserToRecover();\n\t\t//\t\t|\t});\n\t\t//\t\t|\t// NOTE: addErrback and addCallback both return the Deferred\n\t\t//\t\t|\t// again, so we could chain adding callbacks or save the\n\t\t//\t\t|\t// deferred for later should we need to be notified again.\n\t\t// example:\n\t\t//\t\tIn this example, renderLotsOfData is synchronous and so both\n\t\t//\t\tversions are pretty artificial. Putting the data display on a\n\t\t//\t\ttimeout helps show why Deferreds rock:\n\t\t//\n\t\t//\t\t|\t// Deferred style and async func\n\t\t//\t\t|\tfunction renderLotsOfData(data){\n\t\t//\t\t|\t\tvar d = new Deferred();\n\t\t//\t\t|\t\tsetTimeout(function(){\n\t\t//\t\t|\t\t\ttry{\n\t\t//\t\t|\t\t\t\tfor(var x in data){\n\t\t//\t\t|\t\t\t\t\trenderDataitem(data[x]);\n\t\t//\t\t|\t\t\t\t}\n\t\t//\t\t|\t\t\t\td.callback(true);\n\t\t//\t\t|\t\t\t}catch(e){\n\t\t//\t\t|\t\t\t\td.errback(new Error(\"rendering failed\"));\n\t\t//\t\t|\t\t\t}\n\t\t//\t\t|\t\t}, 100);\n\t\t//\t\t|\t\treturn d;\n\t\t//\t\t|\t}\n\t\t//\n\t\t//\t\t|\t// using Deferred style\n\t\t//\t\t|\trenderLotsOfData(someDataObj).then(null, function(){\n\t\t//\t\t|\t\tpromptUserToRecover();\n\t\t//\t\t|\t});\n\t\t//\n\t\t//\t\tNote that the caller doesn't have to change his code at all to\n\t\t//\t\thandle the asynchronous case.\n\n\t\tvar result, finished, canceled, fired, isError, head, nextListener;\n\t\tvar promise = (this.promise = new Promise());\n\n\t\tfunction complete(value){\n\t\t\tif(finished){\n\t\t\t\tthrow new Error(\"This deferred has already been resolved\");\n\t\t\t}\n\t\t\tresult = value;\n\t\t\tfinished = true;\n\t\t\tnotify();\n\t\t}\n\t\tfunction notify(){\n\t\t\tvar mutated;\n\t\t\twhile(!mutated && nextListener){\n\t\t\t\tvar listener = nextListener;\n\t\t\t\tnextListener = nextListener.next;\n\t\t\t\tif((mutated = (listener.progress == mutator))){ // assignment and check\n\t\t\t\t\tfinished = false;\n\t\t\t\t}\n\n\t\t\t\tvar func = (isError ? listener.error : listener.resolved);\n\t\t\t\tif(has(\"config-useDeferredInstrumentation\")){\n\t\t\t\t\tif(isError && NewDeferred.instrumentRejected){\n\t\t\t\t\t\tNewDeferred.instrumentRejected(result, !!func);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(func){\n\t\t\t\t\ttry{\n\t\t\t\t\t\tvar newResult = func(result);\n\t\t\t\t\t\tif (newResult && typeof newResult.then === \"function\"){\n\t\t\t\t\t\t\tnewResult.then(lang.hitch(listener.deferred, \"resolve\"), lang.hitch(listener.deferred, \"reject\"), lang.hitch(listener.deferred, \"progress\"));\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvar unchanged = mutated && newResult === undefined;\n\t\t\t\t\t\tif(mutated && !unchanged){\n\t\t\t\t\t\t\tisError = newResult instanceof Error;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlistener.deferred[unchanged && isError ? \"reject\" : \"resolve\"](unchanged ? result : newResult);\n\t\t\t\t\t}catch(e){\n\t\t\t\t\t\tlistener.deferred.reject(e);\n\t\t\t\t\t}\n\t\t\t\t}else{\n\t\t\t\t\tif(isError){\n\t\t\t\t\t\tlistener.deferred.reject(result);\n\t\t\t\t\t}else{\n\t\t\t\t\t\tlistener.deferred.resolve(result);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.isResolved = promise.isResolved = function(){\n\t\t\t// summary:\n\t\t\t//\t\tChecks whether the deferred has been resolved.\n\t\t\t// returns: Boolean\n\n\t\t\treturn fired == 0;\n\t\t};\n\n\t\tthis.isRejected = promise.isRejected = function(){\n\t\t\t// summary:\n\t\t\t//\t\tChecks whether the deferred has been rejected.\n\t\t\t// returns: Boolean\n\n\t\t\treturn fired == 1;\n\t\t};\n\n\t\tthis.isFulfilled = promise.isFulfilled = function(){\n\t\t\t// summary:\n\t\t\t//\t\tChecks whether the deferred has been resolved or rejected.\n\t\t\t// returns: Boolean\n\n\t\t\treturn fired >= 0;\n\t\t};\n\n\t\tthis.isCanceled = promise.isCanceled = function(){\n\t\t\t// summary:\n\t\t\t//\t\tChecks whether the deferred has been canceled.\n\t\t\t// returns: Boolean\n\n\t\t\treturn canceled;\n\t\t};\n\n\t\t// calling resolve will resolve the promise\n\t\tthis.resolve = this.callback = function(value){\n\t\t\t// summary:\n\t\t\t//\t\tFulfills the Deferred instance successfully with the provide value\n\t\t\tthis.fired = fired = 0;\n\t\t\tthis.results = [value, null];\n\t\t\tcomplete(value);\n\t\t};\n\n\n\t\t// calling error will indicate that the promise failed\n\t\tthis.reject = this.errback = function(error){\n\t\t\t// summary:\n\t\t\t//\t\tFulfills the Deferred instance as an error with the provided error\n\t\t\tisError = true;\n\t\t\tthis.fired = fired = 1;\n\t\t\tif(has(\"config-useDeferredInstrumentation\")){\n\t\t\t\tif(NewDeferred.instrumentRejected){\n\t\t\t\t\tNewDeferred.instrumentRejected(error, !!nextListener);\n\t\t\t\t}\n\t\t\t}\n\t\t\tcomplete(error);\n\t\t\tthis.results = [null, error];\n\t\t};\n\t\t// call progress to provide updates on the progress on the completion of the promise\n\t\tthis.progress = function(update){\n\t\t\t// summary:\n\t\t\t//\t\tSend progress events to all listeners\n\t\t\tvar listener = nextListener;\n\t\t\twhile(listener){\n\t\t\t\tvar progress = listener.progress;\n\t\t\t\tprogress && progress(update);\n\t\t\t\tlistener = listener.next;\n\t\t\t}\n\t\t};\n\t\tthis.addCallbacks = function(callback, errback){\n\t\t\t// summary:\n\t\t\t//\t\tAdds callback and error callback for this deferred instance.\n\t\t\t// callback: Function?\n\t\t\t//\t\tThe callback attached to this deferred object.\n\t\t\t// errback: Function?\n\t\t\t//\t\tThe error callback attached to this deferred object.\n\t\t\t// returns:\n\t\t\t//\t\tReturns this deferred object.\n\t\t\tthis.then(callback, errback, mutator);\n\t\t\treturn this;\t// Deferred\n\t\t};\n\t\t// provide the implementation of the promise\n\t\tpromise.then = this.then = function(/*Function?*/resolvedCallback, /*Function?*/errorCallback, /*Function?*/progressCallback){\n\t\t\t// summary:\n\t\t\t//\t\tAdds a fulfilledHandler, errorHandler, and progressHandler to be called for\n\t\t\t//\t\tcompletion of a promise. The fulfilledHandler is called when the promise\n\t\t\t//\t\tis fulfilled. The errorHandler is called when a promise fails. The\n\t\t\t//\t\tprogressHandler is called for progress events. All arguments are optional\n\t\t\t//\t\tand non-function values are ignored. The progressHandler is not only an\n\t\t\t//\t\toptional argument, but progress events are purely optional. Promise\n\t\t\t//\t\tproviders are not required to ever create progress events.\n\t\t\t//\n\t\t\t//\t\tThis function will return a new promise that is fulfilled when the given\n\t\t\t//\t\tfulfilledHandler or errorHandler callback is finished. This allows promise\n\t\t\t//\t\toperations to be chained together. The value returned from the callback\n\t\t\t//\t\thandler is the fulfillment value for the returned promise. If the callback\n\t\t\t//\t\tthrows an error, the returned promise will be moved to failed state.\n\t\t\t//\n\t\t\t// returns:\n\t\t\t//\t\tReturns a new promise that represents the result of the\n\t\t\t//\t\texecution of the callback. The callbacks will never affect the original promises value.\n\t\t\t// example:\n\t\t\t//\t\tAn example of using a CommonJS compliant promise:\n\t\t\t//\t\t|\tasyncComputeTheAnswerToEverything().\n\t\t\t//\t\t|\t\tthen(addTwo).\n\t\t\t//\t\t|\t\tthen(printResult, onError);\n\t\t\t//\t\t|\t>44\n\t\t\t//\n\t\t\tvar returnDeferred = progressCallback == mutator ? this : new Deferred(promise.cancel);\n\t\t\tvar listener = {\n\t\t\t\tresolved: resolvedCallback,\n\t\t\t\terror: errorCallback,\n\t\t\t\tprogress: progressCallback,\n\t\t\t\tdeferred: returnDeferred\n\t\t\t};\n\t\t\tif(nextListener){\n\t\t\t\thead = head.next = listener;\n\t\t\t}\n\t\t\telse{\n\t\t\t\tnextListener = head = listener;\n\t\t\t}\n\t\t\tif(finished){\n\t\t\t\tnotify();\n\t\t\t}\n\t\t\treturn returnDeferred.promise; // Promise\n\t\t};\n\t\tvar deferred = this;\n\t\tpromise.cancel = this.cancel = function(){\n\t\t\t// summary:\n\t\t\t//\t\tCancels the asynchronous operation\n\t\t\tif(!finished){\n\t\t\t\tvar error = canceller && canceller(deferred);\n\t\t\t\tif(!finished){\n\t\t\t\t\tif (!(error instanceof Error)){\n\t\t\t\t\t\terror = new CancelError(error);\n\t\t\t\t\t}\n\t\t\t\t\terror.log = false;\n\t\t\t\t\tdeferred.reject(error);\n\t\t\t\t}\n\t\t\t}\n\t\t\tcanceled = true;\n\t\t};\n\t\tfreeze(promise);\n\t};\n\tlang.extend(Deferred, {\n\t\taddCallback: function(/*Function*/ callback){\n\t\t\t// summary:\n\t\t\t//\t\tAdds successful callback for this deferred instance.\n\t\t\t// returns:\n\t\t\t//\t\tReturns this deferred object.\n\t\t\treturn this.addCallbacks(lang.hitch.apply(dojo, arguments));\t// Deferred\n\t\t},\n\n\t\taddErrback: function(/*Function*/ errback){\n\t\t\t// summary:\n\t\t\t//\t\tAdds error callback for this deferred instance.\n\t\t\t// returns:\n\t\t\t//\t\tReturns this deferred object.\n\t\t\treturn this.addCallbacks(null, lang.hitch.apply(dojo, arguments));\t// Deferred\n\t\t},\n\n\t\taddBoth: function(/*Function*/ callback){\n\t\t\t// summary:\n\t\t\t//\t\tAdd handler as both successful callback and error callback for this deferred instance.\n\t\t\t// returns:\n\t\t\t//\t\tReturns this deferred object.\n\t\t\tvar enclosed = lang.hitch.apply(dojo, arguments);\n\t\t\treturn this.addCallbacks(enclosed, enclosed);\t// Deferred\n\t\t},\n\t\tfired: -1\n\t});\n\n\tDeferred.when = dojo.when = when;\n\n\treturn Deferred;\n});\n","define([\"./kernel\", \"./lang\", \"../sniff\"], function(dojo, lang, has){\n// module:\n//\t\tdojo/_base/window\n\nvar ret = {\n\t// summary:\n\t//\t\tAPI to save/set/restore the global/document scope.\n\n\tglobal: dojo.global,\n\t/*=====\n\t global: {\n\t\t // summary:\n\t\t //\t\tAlias for the current window. 'global' can be modified\n\t\t //\t\tfor temporary context shifting. See also withGlobal().\n\t\t // description:\n\t\t //\t\tUse this rather than referring to 'window' to ensure your code runs\n\t\t //\t\tcorrectly in managed contexts.\n\t },\n\t =====*/\n\n\tdoc: dojo.global[\"document\"] || null,\n\t/*=====\n\tdoc: {\n\t\t// summary:\n\t\t//\t\tAlias for the current document. 'doc' can be modified\n\t\t//\t\tfor temporary context shifting. See also withDoc().\n\t\t// description:\n\t\t//\t\tUse this rather than referring to 'window.document' to ensure your code runs\n\t\t//\t\tcorrectly in managed contexts.\n\t\t// example:\n\t\t//\t|\tn.appendChild(dojo.doc.createElement('div'));\n\t},\n\t=====*/\n\n\tbody: function(/*Document?*/ doc){\n\t\t// summary:\n\t\t//\t\tReturn the body element of the specified document or of dojo/_base/window::doc.\n\t\t// example:\n\t\t//\t|\twin.body().appendChild(dojo.doc.createElement('div'));\n\n\t\t// Note: document.body is not defined for a strict xhtml document\n\t\t// Would like to memoize this, but dojo.doc can change vi dojo.withDoc().\n\t\tdoc = doc || dojo.doc;\n\t\treturn doc.body || doc.getElementsByTagName(\"body\")[0]; // Node\n\t},\n\n\tsetContext: function(/*Object*/ globalObject, /*DocumentElement*/ globalDocument){\n\t\t// summary:\n\t\t//\t\tchanges the behavior of many core Dojo functions that deal with\n\t\t//\t\tnamespace and DOM lookup, changing them to work in a new global\n\t\t//\t\tcontext (e.g., an iframe). The varibles dojo.global and dojo.doc\n\t\t//\t\tare modified as a result of calling this function and the result of\n\t\t//\t\t`dojo.body()` likewise differs.\n\t\tdojo.global = ret.global = globalObject;\n\t\tdojo.doc = ret.doc = globalDocument;\n\t},\n\n\twithGlobal: function(\t/*Object*/ globalObject,\n\t\t\t\t\t\t\t/*Function*/ callback,\n\t\t\t\t\t\t\t/*Object?*/ thisObject,\n\t\t\t\t\t\t\t/*Array?*/ cbArguments){\n\t\t// summary:\n\t\t//\t\tInvoke callback with globalObject as dojo.global and\n\t\t//\t\tglobalObject.document as dojo.doc.\n\t\t// description:\n\t\t//\t\tInvoke callback with globalObject as dojo.global and\n\t\t//\t\tglobalObject.document as dojo.doc. If provided, globalObject\n\t\t//\t\twill be executed in the context of object thisObject\n\t\t//\t\tWhen callback() returns or throws an error, the dojo.global\n\t\t//\t\tand dojo.doc will be restored to its previous state.\n\n\t\tvar oldGlob = dojo.global;\n\t\ttry{\n\t\t\tdojo.global = ret.global = globalObject;\n\t\t\treturn ret.withDoc.call(null, globalObject.document, callback, thisObject, cbArguments);\n\t\t}finally{\n\t\t\tdojo.global = ret.global = oldGlob;\n\t\t}\n\t},\n\n\twithDoc: function(\t/*DocumentElement*/ documentObject,\n\t\t\t\t\t\t/*Function*/ callback,\n\t\t\t\t\t\t/*Object?*/ thisObject,\n\t\t\t\t\t\t/*Array?*/ cbArguments){\n\t\t// summary:\n\t\t//\t\tInvoke callback with documentObject as dojo/_base/window::doc.\n\t\t// description:\n\t\t//\t\tInvoke callback with documentObject as dojo/_base/window::doc. If provided,\n\t\t//\t\tcallback will be executed in the context of object thisObject\n\t\t//\t\tWhen callback() returns or throws an error, the dojo/_base/window::doc will\n\t\t//\t\tbe restored to its previous state.\n\n\t\tvar oldDoc = ret.doc,\n\t\t\toldQ = has(\"quirks\"),\n\t\t\toldIE = has(\"ie\"), isIE, mode, pwin;\n\n\t\ttry{\n\t\t\tdojo.doc = ret.doc = documentObject;\n\t\t\t// update dojo.isQuirks and the value of the has feature \"quirks\".\n\t\t\t// remove setting dojo.isQuirks and dojo.isIE for 2.0\n\t\t\tdojo.isQuirks = has.add(\"quirks\", dojo.doc.compatMode == \"BackCompat\", true, true); // no need to check for QuirksMode which was Opera 7 only\n\n\t\t\tif(has(\"ie\")){\n\t\t\t\tif((pwin = documentObject.parentWindow) && pwin.navigator){\n\t\t\t\t\t// re-run IE detection logic and update dojo.isIE / has(\"ie\")\n\t\t\t\t\t// (the only time parentWindow/navigator wouldn't exist is if we were not\n\t\t\t\t\t// passed an actual legitimate document object)\n\t\t\t\t\tisIE = parseFloat(pwin.navigator.appVersion.split(\"MSIE \")[1]) || undefined;\n\t\t\t\t\tmode = documentObject.documentMode;\n\t\t\t\t\tif(mode && mode != 5 && Math.floor(isIE) != mode){\n\t\t\t\t\t\tisIE = mode;\n\t\t\t\t\t}\n\t\t\t\t\tdojo.isIE = has.add(\"ie\", isIE, true, true);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif(thisObject && typeof callback == \"string\"){\n\t\t\t\tcallback = thisObject[callback];\n\t\t\t}\n\n\t\t\treturn callback.apply(thisObject, cbArguments || []);\n\t\t}finally{\n\t\t\tdojo.doc = ret.doc = oldDoc;\n\t\t\tdojo.isQuirks = has.add(\"quirks\", oldQ, true, true);\n\t\t\tdojo.isIE = has.add(\"ie\", oldIE, true, true);\n\t\t}\n\t}\n};\n\nhas(\"extend-dojo\") && lang.mixin(dojo, ret);\n\nreturn ret;\n\n});\n","\"use strict\";\n\n// Copyright 2015-2020 The MathWorks, Inc.\ndefine(['./EndPointsManager'], function (EndPointsManager) {\n var _instance = null;\n\n var getInstance = function getInstance() {\n if (_instance === null) {\n _instance = new EndPointsManager();\n }\n\n return _instance;\n };\n\n return getInstance();\n});\n//# sourceMappingURL=RemoteEndPointsManager.js.map\n","define([\n\t\"./has\",\n\t\"./_base/lang\",\n\t\"./errors/CancelError\",\n\t\"./promise/Promise\",\n\t\"./has!config-deferredInstrumentation?./promise/instrumentation\"\n], function(has, lang, CancelError, Promise, instrumentation){\n\t\"use strict\";\n\n\t// module:\n\t//\t\tdojo/Deferred\n\n\tvar PROGRESS = 0,\n\t\t\tRESOLVED = 1,\n\t\t\tREJECTED = 2;\n\tvar FULFILLED_ERROR_MESSAGE = \"This deferred has already been fulfilled.\";\n\n\tvar freezeObject = Object.freeze || function(){};\n\n\tvar signalWaiting = function(waiting, type, result, rejection, deferred){\n\t\tif(has(\"config-deferredInstrumentation\")){\n\t\t\tif(type === REJECTED && Deferred.instrumentRejected && waiting.length === 0){\n\t\t\t\tDeferred.instrumentRejected(result, false, rejection, deferred);\n\t\t\t}\n\t\t}\n\n\t\tfor(var i = 0; i < waiting.length; i++){\n\t\t\tsignalListener(waiting[i], type, result, rejection);\n\t\t}\n\t};\n\n\tvar signalListener = function(listener, type, result, rejection){\n\t\tvar func = listener[type];\n\t\tvar deferred = listener.deferred;\n\t\tif(func){\n\t\t\ttry{\n\t\t\t\tvar newResult = func(result);\n\t\t\t\tif(type === PROGRESS){\n\t\t\t\t\tif(typeof newResult !== \"undefined\"){\n\t\t\t\t\t\tsignalDeferred(deferred, type, newResult);\n\t\t\t\t\t}\n\t\t\t\t}else{\n\t\t\t\t\tif(newResult && typeof newResult.then === \"function\"){\n\t\t\t\t\t\tlistener.cancel = newResult.cancel;\n\t\t\t\t\t\tnewResult.then(\n\t\t\t\t\t\t\t\t// Only make resolvers if they're actually going to be used\n\t\t\t\t\t\t\t\tmakeDeferredSignaler(deferred, RESOLVED),\n\t\t\t\t\t\t\t\tmakeDeferredSignaler(deferred, REJECTED),\n\t\t\t\t\t\t\t\tmakeDeferredSignaler(deferred, PROGRESS));\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tsignalDeferred(deferred, RESOLVED, newResult);\n\t\t\t\t}\n\t\t\t}catch(error){\n\t\t\t\tsignalDeferred(deferred, REJECTED, error);\n\t\t\t}\n\t\t}else{\n\t\t\tsignalDeferred(deferred, type, result);\n\t\t}\n\n\t\tif(has(\"config-deferredInstrumentation\")){\n\t\t\tif(type === REJECTED && Deferred.instrumentRejected){\n\t\t\t\tDeferred.instrumentRejected(result, !!func, rejection, deferred.promise);\n\t\t\t}\n\t\t}\n\t};\n\n\tvar makeDeferredSignaler = function(deferred, type){\n\t\treturn function(value){\n\t\t\tsignalDeferred(deferred, type, value);\n\t\t};\n\t};\n\n\tvar signalDeferred = function(deferred, type, result){\n\t\tif(!deferred.isCanceled()){\n\t\t\tswitch(type){\n\t\t\t\tcase PROGRESS:\n\t\t\t\t\tdeferred.progress(result);\n\t\t\t\t\tbreak;\n\t\t\t\tcase RESOLVED:\n\t\t\t\t\tdeferred.resolve(result);\n\t\t\t\t\tbreak;\n\t\t\t\tcase REJECTED:\n\t\t\t\t\tdeferred.reject(result);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar Deferred = function(canceler){\n\t\t// summary:\n\t\t//\t\tCreates a new deferred. This API is preferred over\n\t\t//\t\t`dojo/_base/Deferred`.\n\t\t// description:\n\t\t//\t\tCreates a new deferred, as an abstraction over (primarily)\n\t\t//\t\tasynchronous operations. The deferred is the private interface\n\t\t//\t\tthat should not be returned to calling code. That's what the\n\t\t//\t\t`promise` is for. See `dojo/promise/Promise`.\n\t\t// canceler: Function?\n\t\t//\t\tWill be invoked if the deferred is canceled. The canceler\n\t\t//\t\treceives the reason the deferred was canceled as its argument.\n\t\t//\t\tThe deferred is rejected with its return value, or a new\n\t\t//\t\t`dojo/errors/CancelError` instance.\n\n\t\t// promise: dojo/promise/Promise\n\t\t//\t\tThe public promise object that clients can add callbacks to. \n\t\tvar promise = this.promise = new Promise();\n\n\t\tvar deferred = this;\n\t\tvar fulfilled, result, rejection;\n\t\tvar canceled = false;\n\t\tvar waiting = [];\n\n\t\tif(has(\"config-deferredInstrumentation\") && Error.captureStackTrace){\n\t\t\tError.captureStackTrace(deferred, Deferred);\n\t\t\tError.captureStackTrace(promise, Deferred);\n\t\t}\n\n\t\tthis.isResolved = promise.isResolved = function(){\n\t\t\t// summary:\n\t\t\t//\t\tChecks whether the deferred has been resolved.\n\t\t\t// returns: Boolean\n\n\t\t\treturn fulfilled === RESOLVED;\n\t\t};\n\n\t\tthis.isRejected = promise.isRejected = function(){\n\t\t\t// summary:\n\t\t\t//\t\tChecks whether the deferred has been rejected.\n\t\t\t// returns: Boolean\n\n\t\t\treturn fulfilled === REJECTED;\n\t\t};\n\n\t\tthis.isFulfilled = promise.isFulfilled = function(){\n\t\t\t// summary:\n\t\t\t//\t\tChecks whether the deferred has been resolved or rejected.\n\t\t\t// returns: Boolean\n\n\t\t\treturn !!fulfilled;\n\t\t};\n\n\t\tthis.isCanceled = promise.isCanceled = function(){\n\t\t\t// summary:\n\t\t\t//\t\tChecks whether the deferred has been canceled.\n\t\t\t// returns: Boolean\n\n\t\t\treturn canceled;\n\t\t};\n\n\t\tthis.progress = function(update, strict){\n\t\t\t// summary:\n\t\t\t//\t\tEmit a progress update on the deferred.\n\t\t\t// description:\n\t\t\t//\t\tEmit a progress update on the deferred. Progress updates\n\t\t\t//\t\tcan be used to communicate updates about the asynchronous\n\t\t\t//\t\toperation before it has finished.\n\t\t\t// update: any\n\t\t\t//\t\tThe progress update. Passed to progbacks.\n\t\t\t// strict: Boolean?\n\t\t\t//\t\tIf strict, will throw an error if the deferred has already\n\t\t\t//\t\tbeen fulfilled and consequently no progress can be emitted.\n\t\t\t// returns: dojo/promise/Promise\n\t\t\t//\t\tReturns the original promise for the deferred.\n\n\t\t\tif(!fulfilled){\n\t\t\t\tsignalWaiting(waiting, PROGRESS, update, null, deferred);\n\t\t\t\treturn promise;\n\t\t\t}else if(strict === true){\n\t\t\t\tthrow new Error(FULFILLED_ERROR_MESSAGE);\n\t\t\t}else{\n\t\t\t\treturn promise;\n\t\t\t}\n\t\t};\n\n\t\tthis.resolve = function(value, strict){\n\t\t\t// summary:\n\t\t\t//\t\tResolve the deferred.\n\t\t\t// description:\n\t\t\t//\t\tResolve the deferred, putting it in a success state.\n\t\t\t// value: any\n\t\t\t//\t\tThe result of the deferred. Passed to callbacks.\n\t\t\t// strict: Boolean?\n\t\t\t//\t\tIf strict, will throw an error if the deferred has already\n\t\t\t//\t\tbeen fulfilled and consequently cannot be resolved.\n\t\t\t// returns: dojo/promise/Promise\n\t\t\t//\t\tReturns the original promise for the deferred.\n\n\t\t\tif(!fulfilled){\n\t\t\t\t// Set fulfilled, store value. After signaling waiting listeners unset\n\t\t\t\t// waiting.\n\t\t\t\tsignalWaiting(waiting, fulfilled = RESOLVED, result = value, null, deferred);\n\t\t\t\twaiting = null;\n\t\t\t\treturn promise;\n\t\t\t}else if(strict === true){\n\t\t\t\tthrow new Error(FULFILLED_ERROR_MESSAGE);\n\t\t\t}else{\n\t\t\t\treturn promise;\n\t\t\t}\n\t\t};\n\n\t\tvar reject = this.reject = function(error, strict){\n\t\t\t// summary:\n\t\t\t//\t\tReject the deferred.\n\t\t\t// description:\n\t\t\t//\t\tReject the deferred, putting it in an error state.\n\t\t\t// error: any\n\t\t\t//\t\tThe error result of the deferred. Passed to errbacks.\n\t\t\t// strict: Boolean?\n\t\t\t//\t\tIf strict, will throw an error if the deferred has already\n\t\t\t//\t\tbeen fulfilled and consequently cannot be rejected.\n\t\t\t// returns: dojo/promise/Promise\n\t\t\t//\t\tReturns the original promise for the deferred.\n\n\t\t\tif(!fulfilled){\n\t\t\t\tif(has(\"config-deferredInstrumentation\") && Error.captureStackTrace){\n\t\t\t\t\tError.captureStackTrace(rejection = {}, reject);\n\t\t\t\t}\n\t\t\t\tsignalWaiting(waiting, fulfilled = REJECTED, result = error, rejection, deferred);\n\t\t\t\twaiting = null;\n\t\t\t\treturn promise;\n\t\t\t}else if(strict === true){\n\t\t\t\tthrow new Error(FULFILLED_ERROR_MESSAGE);\n\t\t\t}else{\n\t\t\t\treturn promise;\n\t\t\t}\n\t\t};\n\n\t\tthis.then = promise.then = function(callback, errback, progback){\n\t\t\t// summary:\n\t\t\t//\t\tAdd new callbacks to the deferred.\n\t\t\t// description:\n\t\t\t//\t\tAdd new callbacks to the deferred. Callbacks can be added\n\t\t\t//\t\tbefore or after the deferred is fulfilled.\n\t\t\t// callback: Function?\n\t\t\t//\t\tCallback to be invoked when the promise is resolved.\n\t\t\t//\t\tReceives the resolution value.\n\t\t\t// errback: Function?\n\t\t\t//\t\tCallback to be invoked when the promise is rejected.\n\t\t\t//\t\tReceives the rejection error.\n\t\t\t// progback: Function?\n\t\t\t//\t\tCallback to be invoked when the promise emits a progress\n\t\t\t//\t\tupdate. Receives the progress update.\n\t\t\t// returns: dojo/promise/Promise\n\t\t\t//\t\tReturns a new promise for the result of the callback(s).\n\t\t\t//\t\tThis can be used for chaining many asynchronous operations.\n\n\t\t\tvar listener = [progback, callback, errback];\n\t\t\t// Ensure we cancel the promise we're waiting for, or if callback/errback\n\t\t\t// have returned a promise, cancel that one.\n\t\t\tlistener.cancel = promise.cancel;\n\t\t\tlistener.deferred = new Deferred(function(reason){\n\t\t\t\t// Check whether cancel is really available, returned promises are not\n\t\t\t\t// required to expose `cancel`\n\t\t\t\treturn listener.cancel && listener.cancel(reason);\n\t\t\t});\n\t\t\tif(fulfilled && !waiting){\n\t\t\t\tsignalListener(listener, fulfilled, result, rejection);\n\t\t\t}else{\n\t\t\t\twaiting.push(listener);\n\t\t\t}\n\t\t\treturn listener.deferred.promise;\n\t\t};\n\n\t\tthis.cancel = promise.cancel = function(reason, strict){\n\t\t\t// summary:\n\t\t\t//\t\tInform the deferred it may cancel its asynchronous operation.\n\t\t\t// description:\n\t\t\t//\t\tInform the deferred it may cancel its asynchronous operation.\n\t\t\t//\t\tThe deferred's (optional) canceler is invoked and the\n\t\t\t//\t\tdeferred will be left in a rejected state. Can affect other\n\t\t\t//\t\tpromises that originate with the same deferred.\n\t\t\t// reason: any\n\t\t\t//\t\tA message that may be sent to the deferred's canceler,\n\t\t\t//\t\texplaining why it's being canceled.\n\t\t\t// strict: Boolean?\n\t\t\t//\t\tIf strict, will throw an error if the deferred has already\n\t\t\t//\t\tbeen fulfilled and consequently cannot be canceled.\n\t\t\t// returns: any\n\t\t\t//\t\tReturns the rejection reason if the deferred was canceled\n\t\t\t//\t\tnormally.\n\n\t\t\tif(!fulfilled){\n\t\t\t\t// Cancel can be called even after the deferred is fulfilled\n\t\t\t\tif(canceler){\n\t\t\t\t\tvar returnedReason = canceler(reason);\n\t\t\t\t\treason = typeof returnedReason === \"undefined\" ? reason : returnedReason;\n\t\t\t\t}\n\t\t\t\tcanceled = true;\n\t\t\t\tif(!fulfilled){\n\t\t\t\t\t// Allow canceler to provide its own reason, but fall back to a CancelError\n\t\t\t\t\tif(typeof reason === \"undefined\"){\n\t\t\t\t\t\treason = new CancelError();\n\t\t\t\t\t}\n\t\t\t\t\treject(reason);\n\t\t\t\t\treturn reason;\n\t\t\t\t}else if(fulfilled === REJECTED && result === reason){\n\t\t\t\t\treturn reason;\n\t\t\t\t}\n\t\t\t}else if(strict === true){\n\t\t\t\tthrow new Error(FULFILLED_ERROR_MESSAGE);\n\t\t\t}\n\t\t};\n\n\t\tfreezeObject(promise);\n\t};\n\n\tDeferred.prototype.toString = function(){\n\t\t// returns: String\n\t\t//\t\tReturns `[object Deferred]`.\n\n\t\treturn \"[object Deferred]\";\n\t};\n\n\tif(instrumentation){\n\t\tinstrumentation(Deferred);\n\t}\n\n\treturn Deferred;\n});\n","define(['../global', '../has', 'require'], function (global, has, require) {\n // module:\n //\t\tdojo/_base/config\n\n /* =====\nreturn {\n\t// summary:\n\t//\t\tThis module defines the user configuration during bootstrap.\n\t// description:\n\t//\t\tBy defining user configuration as a module value, an entire configuration can be specified in a build,\n\t//\t\tthereby eliminating the need for sniffing and or explicitly setting in the global variable dojoConfig.\n\t//\t\tAlso, when multiple instances of dojo exist in a single application, each will necessarily be located\n\t//\t\tat an unique absolute module identifier as given by the package configuration. Implementing configuration\n\t//\t\tas a module allows for specifying unique, per-instance configurations.\n\t// example:\n\t//\t\tCreate a second instance of dojo with a different, instance-unique configuration (assume the loader and\n\t//\t\tdojo.js are already loaded).\n\t//\t\t|\t// specify a configuration that creates a new instance of dojo at the absolute module identifier \"myDojo\"\n\t//\t\t|\trequire({\n\t//\t\t|\t\tpackages:[{\n\t//\t\t|\t\t\tname:\"myDojo\",\n\t//\t\t|\t\t\tlocation:\".\", //assume baseUrl points to dojo.js\n\t//\t\t|\t\t}]\n\t//\t\t|\t});\n\t//\t\t|\n\t//\t\t|\t// specify a configuration for the myDojo instance\n\t//\t\t|\tdefine(\"myDojo/config\", {\n\t//\t\t|\t\t// normal configuration variables go here, e.g.,\n\t//\t\t|\t\tlocale:\"fr-ca\"\n\t//\t\t|\t});\n\t//\t\t|\n\t//\t\t|\t// load and use the new instance of dojo\n\t//\t\t|\trequire([\"myDojo\"], function(dojo){\n\t//\t\t|\t\t// dojo is the new instance of dojo\n\t//\t\t|\t\t// use as required\n\t//\t\t|\t});\n\n\t// isDebug: Boolean\n\t//\t\tDefaults to `false`. If set to `true`, ensures that Dojo provides\n\t//\t\textended debugging feedback to the console.\n\tisDebug: false,\n\n\t// locale: String\n\t//\t\tThe locale to assume for loading localized resources in this page,\n\t//\t\tspecified according to [RFC 3066](http://www.ietf.org/rfc/rfc3066.txt).\n\t//\t\tMust be specified entirely in lowercase, e.g. `en-us` and `zh-cn`.\n\t//\t\tSee the documentation for `dojo.i18n` and `dojo.requireLocalization`\n\t//\t\tfor details on loading localized resources. If no locale is specified,\n\t//\t\tDojo assumes the locale of the user agent, according to `navigator.userLanguage`\n\t//\t\tor `navigator.language` properties.\n\tlocale: undefined,\n\n\t// extraLocale: Array\n\t//\t\tNo default value. Specifies additional locales whose\n\t//\t\tresources should also be loaded alongside the default locale when\n\t//\t\tcalls to `dojo.requireLocalization()` are processed.\n\textraLocale: undefined,\n\n\t// baseUrl: String\n\t//\t\tThe directory in which `dojo.js` is located. Under normal\n\t//\t\tconditions, Dojo auto-detects the correct location from which it\n\t//\t\twas loaded. You may need to manually configure `baseUrl` in cases\n\t//\t\twhere you have renamed `dojo.js` or in which `<base>` tags confuse\n\t//\t\tsome browsers (e.g. IE 6). The variable `dojo.baseUrl` is assigned\n\t//\t\teither the value of `djConfig.baseUrl` if one is provided or the\n\t//\t\tauto-detected root if not. Other modules are located relative to\n\t//\t\tthis path. The path should end in a slash.\n\tbaseUrl: undefined,\n\n\t// modulePaths: [deprecated] Object\n\t//\t\tA map of module names to paths relative to `dojo.baseUrl`. The\n\t//\t\tkey/value pairs correspond directly to the arguments which\n\t//\t\t`dojo.registerModulePath` accepts. Specifying\n\t//\t\t`djConfig.modulePaths = { \"foo\": \"../../bar\" }` is the equivalent\n\t//\t\tof calling `dojo.registerModulePath(\"foo\", \"../../bar\");`. Multiple\n\t//\t\tmodules may be configured via `djConfig.modulePaths`.\n\tmodulePaths: {},\n\n\t// addOnLoad: Function|Array\n\t//\t\tAdds a callback via dojo/ready. Useful when Dojo is added after\n\t//\t\tthe page loads and djConfig.afterOnLoad is true. Supports the same\n\t//\t\targuments as dojo/ready. When using a function reference, use\n\t//\t\t`djConfig.addOnLoad = function(){};`. For object with function name use\n\t//\t\t`djConfig.addOnLoad = [myObject, \"functionName\"];` and for object with\n\t//\t\tfunction reference use\n\t//\t\t`djConfig.addOnLoad = [myObject, function(){}];`\n\taddOnLoad: null,\n\n\t// parseOnLoad: Boolean\n\t//\t\tRun the parser after the page is loaded\n\tparseOnLoad: false,\n\n\t// require: String[]\n\t//\t\tAn array of module names to be loaded immediately after dojo.js has been included\n\t//\t\tin a page.\n\trequire: [],\n\n\t// defaultDuration: Number\n\t//\t\tDefault duration, in milliseconds, for wipe and fade animations within dijits.\n\t//\t\tAssigned to dijit.defaultDuration.\n\tdefaultDuration: 200,\n\n\t// dojoBlankHtmlUrl: String\n\t//\t\tUsed by some modules to configure an empty iframe. Used by dojo/io/iframe and\n\t//\t\tdojo/back, and dijit/popup support in IE where an iframe is needed to make sure native\n\t//\t\tcontrols do not bleed through the popups. Normally this configuration variable\n\t//\t\tdoes not need to be set, except when using cross-domain/CDN Dojo builds.\n\t//\t\tSave dojo/resources/blank.html to your domain and set `djConfig.dojoBlankHtmlUrl`\n\t//\t\tto the path on your domain your copy of blank.html.\n\tdojoBlankHtmlUrl: undefined,\n\n\t// ioPublish: Boolean?\n\t//\t\tSet this to true to enable publishing of topics for the different phases of\n\t//\t\tIO operations. Publishing is done via dojo/topic.publish(). See dojo/main.__IoPublish for a list\n\t//\t\tof topics that are published.\n\tioPublish: false,\n\n\t// transparentColor: Array\n\t//\t\tArray containing the r, g, b components used as transparent color in dojo.Color;\n\t//\t\tif undefined, [255,255,255] (white) will be used.\n\ttransparentColor: undefined,\n\n\t// deps: Function|Array\n\t//\t\tDefines dependencies to be used before the loader has been loaded.\n\t//\t\tWhen provided, they cause the loader to execute require(deps, callback)\n\t//\t\tonce it has finished loading. Should be used with callback.\n\tdeps: undefined,\n\n\t// callback: Function|Array\n\t//\t\tDefines a callback to be used when dependencies are defined before\n\t//\t\tthe loader has been loaded. When provided, they cause the loader to\n\t//\t\texecute require(deps, callback) once it has finished loading.\n\t//\t\tShould be used with deps.\n\tcallback: undefined,\n\n\t// deferredInstrumentation: Boolean\n\t//\t\tWhether deferred instrumentation should be loaded or included\n\t//\t\tin builds.\n\tdeferredInstrumentation: true,\n\n\t// useDeferredInstrumentation: Boolean|String\n\t//\t\tWhether the deferred instrumentation should be used.\n\t//\n\t//\t\t* `\"report-rejections\"`: report each rejection as it occurs.\n\t//\t\t* `true` or `1` or `\"report-unhandled-rejections\"`: wait 1 second\n\t//\t\t\tin an attempt to detect unhandled rejections.\n\tuseDeferredInstrumentation: \"report-unhandled-rejections\"\n};\n===== */\n\n var result = {};\n if (has('dojo-config-api')) {\n // must be the dojo loader; take a shallow copy of require.rawConfig\n var src = require.rawConfig; var p;\n for (p in src) {\n result[p] = src[p];\n }\n } else {\n var adviseHas = function (featureSet, prefix, booting) {\n for (p in featureSet) {\n p != 'has' && has.add(prefix + p, featureSet[p], 0, booting);\n }\n };\n result = has('dojo-loader')\n // must be a built version of the dojo loader; all config stuffed in require.rawConfig\n ? require.rawConfig\n // a foreign loader\n : global.dojoConfig || global.djConfig || {};\n adviseHas(result, 'config', 1);\n adviseHas(result.has, '', 1);\n }\n\n // MATHWORKS ADDED\n result.updateLocale = function (supportedLocales, navigatorLanguage) {\n var firstPart;\n var language;\n var root = 'en-us';\n if (supportedLocales.indexOf(navigatorLanguage) >= 0 && navigatorLanguage !== 'zh') {\n result.locale = navigatorLanguage;\n return;\n }\n\n firstPart = navigatorLanguage.split('-')[0];\n\n if (firstPart === 'zh') {\n result.locale = root.toLocaleLowerCase();\n return;\n }\n\n for (var index = 0; index < supportedLocales.length; index = index + 1) {\n language = supportedLocales[index].split('-')[0];\n if (firstPart === language) {\n result.locale = supportedLocales[index];\n break;\n }\n }\n\n if (!result.locale) {\n result.locale = root.toLowerCase();\n }\n };\n // MATHWORKS ADDED END\n\n if (!result.locale && typeof navigator !== 'undefined') {\n // Default locale for browsers (ensure it's read from user-settings not download locale).\n var language = (navigator.languages && navigator.languages.length) ? navigator.languages[0]\n : (navigator.language || navigator.userLanguage);\n\n // MATHWORKS ADDED next Line\n language = result._testLanguageOverride || language;\n if (language) {\n language = language.toLowerCase(); // MATHWORKS changed from result.local = to language =\n // MATHWORKS ADDED\n if (result.supportedLocales) {\n result.updateLocale(result.supportedLocales, language);\n }\n // END MATHWORKS ADDED\n }\n }\n // MATHWORKS ADDED\n if (!result.locale) {\n result.locale = 'en-us';\n }\n // END MATHWORKS ADDED\n\n return result;\n});\n","/*\r\n * (C) Copyright IBM Corp. 2012, 2016 All Rights Reserved.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nmodule.exports = undefined;\r\n","define([\"./create\"], function(create){\n\t// module:\n\t//\t\tdojo/errors/CancelError\n\n\t/*=====\n\treturn function(){\n\t\t// summary:\n\t\t//\t\tDefault error if a promise is canceled without a reason.\n\t};\n\t=====*/\n\n\treturn create(\"CancelError\", null, null, { dojoType: \"cancel\", log: false });\n});\n","define([\n\t\"../_base/lang\"\n], function(lang){\n\t\"use strict\";\n\n\t// module:\n\t//\t\tdojo/promise/Promise\n\n\tfunction throwAbstract(){\n\t\tthrow new TypeError(\"abstract\");\n\t}\n\n\treturn lang.extend(function Promise(){\n\t\t// summary:\n\t\t//\t\tThe public interface to a deferred.\n\t\t// description:\n\t\t//\t\tThe public interface to a deferred. All promises in Dojo are\n\t\t//\t\tinstances of this class.\n\t}, {\n\t\tthen: function(callback, errback, progback){\n\t\t\t// summary:\n\t\t\t//\t\tAdd new callbacks to the promise.\n\t\t\t// description:\n\t\t\t//\t\tAdd new callbacks to the deferred. Callbacks can be added\n\t\t\t//\t\tbefore or after the deferred is fulfilled.\n\t\t\t// callback: Function?\n\t\t\t//\t\tCallback to be invoked when the promise is resolved.\n\t\t\t//\t\tReceives the resolution value.\n\t\t\t// errback: Function?\n\t\t\t//\t\tCallback to be invoked when the promise is rejected.\n\t\t\t//\t\tReceives the rejection error.\n\t\t\t// progback: Function?\n\t\t\t//\t\tCallback to be invoked when the promise emits a progress\n\t\t\t//\t\tupdate. Receives the progress update.\n\t\t\t// returns: dojo/promise/Promise\n\t\t\t//\t\tReturns a new promise for the result of the callback(s).\n\t\t\t//\t\tThis can be used for chaining many asynchronous operations.\n\n\t\t\tthrowAbstract();\n\t\t},\n\n\t\tcancel: function(reason, strict){\n\t\t\t// summary:\n\t\t\t//\t\tInform the deferred it may cancel its asynchronous operation.\n\t\t\t// description:\n\t\t\t//\t\tInform the deferred it may cancel its asynchronous operation.\n\t\t\t//\t\tThe deferred's (optional) canceler is invoked and the\n\t\t\t//\t\tdeferred will be left in a rejected state. Can affect other\n\t\t\t//\t\tpromises that originate with the same deferred.\n\t\t\t// reason: any\n\t\t\t//\t\tA message that may be sent to the deferred's canceler,\n\t\t\t//\t\texplaining why it's being canceled.\n\t\t\t// strict: Boolean?\n\t\t\t//\t\tIf strict, will throw an error if the deferred has already\n\t\t\t//\t\tbeen fulfilled and consequently cannot be canceled.\n\t\t\t// returns: any\n\t\t\t//\t\tReturns the rejection reason if the deferred was canceled\n\t\t\t//\t\tnormally.\n\n\t\t\tthrowAbstract();\n\t\t},\n\n\t\tisResolved: function(){\n\t\t\t// summary:\n\t\t\t//\t\tChecks whether the promise has been resolved.\n\t\t\t// returns: Boolean\n\n\t\t\tthrowAbstract();\n\t\t},\n\n\t\tisRejected: function(){\n\t\t\t// summary:\n\t\t\t//\t\tChecks whether the promise has been rejected.\n\t\t\t// returns: Boolean\n\n\t\t\tthrowAbstract();\n\t\t},\n\n\t\tisFulfilled: function(){\n\t\t\t// summary:\n\t\t\t//\t\tChecks whether the promise has been resolved or rejected.\n\t\t\t// returns: Boolean\n\n\t\t\tthrowAbstract();\n\t\t},\n\n\t\tisCanceled: function(){\n\t\t\t// summary:\n\t\t\t//\t\tChecks whether the promise has been canceled.\n\t\t\t// returns: Boolean\n\n\t\t\tthrowAbstract();\n\t\t},\n\n\t\t\"finally\": function(callback) {\n\t\t\t// summary:\n\t\t\t//\t\tAdd a callback to the promise that will fire whether it\n\t\t\t//\t\tresolves or rejects.\n\t\t\t// description:\n\t\t\t//\t\tConforms to ES2018's `Promise.prototype.finally`.\n\t\t\t//\t\tAdd a callback to the promise that will fire whether it\n\t\t\t//\t\tresolves or rejects. No value is passed to the callback.\n\t\t\t//\t\tReturns a promise that reflects the state of the original promise,\n\t\t\t//\t\twith two exceptions:\n\t\t\t//\t\t- If the callback return a promise, the outer promise will wait\n\t\t\t//\t\tuntil the returned promise is resolved, then it will resolve\n\t\t\t//\t\twith the original value.\n\t\t\t//\t\t- If the callback throws an exception or returns a promise that\n\t\t\t//\t\tis rejected (or rejects later), the outer promise will reject\n\t\t\t//\t\twith the inner promise's rejection reason.\n\t\t\t// callback: Function?\n\t\t\t//\t\tCallback to be invoked when the promise is resolved\n\t\t\t//\t\tor rejected. Doesn't receive any value.\n\t\t\t// returns: dojo/promise/Promise\n\t\t\t//\t\tReturns a new promise that reflects the state of the original promise,\n\t\t\t//\t\twith two small exceptions (see description).\n\t\t\t//\n\n\t\t\treturn this.then(function (value){\n\t\t\t\tvar valueOrPromise = callback();\n\t\t\t\tif (valueOrPromise && typeof valueOrPromise.then === \"function\"){\n\t\t\t\t\treturn valueOrPromise.then(function (){\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn value;\n\t\t\t}, function(reason) {\n\t\t\t\tvar valueOrPromise = callback();\n\t\t\t\tif (valueOrPromise && typeof valueOrPromise.then === \"function\"){\n\t\t\t\t\treturn valueOrPromise.then(function (){\n\t\t\t\t\t\tthrow reason;\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tthrow reason;\n\t\t\t});\n\t\t},\n\n\t\talways: function(callbackOrErrback){\n\t\t\t// summary:\n\t\t\t//\t\tAdd a callback to be invoked when the promise is resolved\n\t\t\t//\t\tor rejected.\n\t\t\t// callbackOrErrback: Function?\n\t\t\t//\t\tA function that is used both as a callback and errback.\n\t\t\t// returns: dojo/promise/Promise\n\t\t\t//\t\tReturns a new promise for the result of the callback/errback.\n\n\t\t\treturn this.then(callbackOrErrback, callbackOrErrback);\n\t\t},\n\n\t\t\"catch\": function(errback){\n\t\t // summary:\n\t\t //\t\tAdd new errbacks to the promise. Follows ECMA specification naming.\n\t\t // errback: Function?\n\t\t //\t\tCallback to be invoked when the promise is rejected.\n\t\t // returns: dojo/promise/Promise\n\t\t //\t\tReturns a new promise for the result of the errback.\n\n\t\t return this.then(null, errback);\n\t\t},\n\n\t\totherwise: function(errback){\n\t\t\t// summary:\n\t\t\t//\t\tAdd new errbacks to the promise.\n\t\t\t// errback: Function?\n\t\t\t//\t\tCallback to be invoked when the promise is rejected.\n\t\t\t// returns: dojo/promise/Promise\n\t\t\t//\t\tReturns a new promise for the result of the errback.\n\n\t\t\treturn this.then(null, errback);\n\t\t},\n\n\t\ttrace: function(){\n\t\t\treturn this;\n\t\t},\n\n\t\ttraceRejected: function(){\n\t\t\treturn this;\n\t\t},\n\n\t\ttoString: function(){\n\t\t\t// returns: string\n\t\t\t//\t\tReturns `[object Promise]`.\n\n\t\t\treturn \"[object Promise]\";\n\t\t}\n\t});\n});\n","\ndefine([\n \"dojo/_base/declare\"\n], function (declare) {\n\n return declare([], {\n\n constructor: function (args) {\n this.name = \"\";\n this.context = {};\n this.triggerHandler = args.triggerHandler || function () {}; // safeMixin won't\n // do functions :(\n declare.safeMixin(this, args);\n },\n\n enable: function () {\n },\n\n disable: function () {\n }\n });\n});","define([\"exports\", \"./_base/kernel\", \"./sniff\", \"./_base/window\", \"./dom\", \"./dom-attr\"],\n\t\tfunction(exports, dojo, has, win, dom, attr){\n\t// module:\n\t//\t\tdojo/dom-construct\n\t// summary:\n\t//\t\tThis module defines the core dojo DOM construction API.\n\n\t// TODOC: summary not showing up in output, see https://github.com/csnover/js-doc-parse/issues/42\n\n\t// support stuff for toDom()\n\tvar tagWrap = {\n\t\t\toption: [\"select\"],\n\t\t\ttbody: [\"table\"],\n\t\t\tthead: [\"table\"],\n\t\t\ttfoot: [\"table\"],\n\t\t\ttr: [\"table\", \"tbody\"],\n\t\t\ttd: [\"table\", \"tbody\", \"tr\"],\n\t\t\tth: [\"table\", \"thead\", \"tr\"],\n\t\t\tlegend: [\"fieldset\"],\n\t\t\tcaption: [\"table\"],\n\t\t\tcolgroup: [\"table\"],\n\t\t\tcol: [\"table\", \"colgroup\"],\n\t\t\tli: [\"ul\"]\n\t\t},\n\t\treTag = /<\\s*([\\w\\:]+)/,\n\t\tmasterNode = {}, masterNum = 0,\n\t\tmasterName = \"__\" + dojo._scopeName + \"ToDomId\";\n\n\t// generate start/end tag strings to use\n\t// for the injection for each special tag wrap case.\n\tfor(var param in tagWrap){\n\t\tif(tagWrap.hasOwnProperty(param)){\n\t\t\tvar tw = tagWrap[param];\n\t\t\ttw.pre = param == \"option\" ? '<select multiple=\"multiple\">' : \"<\" + tw.join(\"><\") + \">\";\n\t\t\ttw.post = \"</\" + tw.reverse().join(\"></\") + \">\";\n\t\t\t// the last line is destructive: it reverses the array,\n\t\t\t// but we don't care at this point\n\t\t}\n\t}\n\n\tvar html5domfix;\n\tif(has(\"ie\") <= 8){\n\t\thtml5domfix = function(doc){\n\t\t\tdoc.__dojo_html5_tested = \"yes\";\n\t\t\tvar div = create('div', {innerHTML: \"<nav>a</nav>\", style: {visibility: \"hidden\"}}, doc.body);\n\t\t\tif(div.childNodes.length !== 1){\n\t\t\t\t('abbr article aside audio canvas details figcaption figure footer header ' +\n\t\t\t\t'hgroup mark meter nav output progress section summary time video').replace(\n\t\t\t\t\t/\\b\\w+\\b/g, function(n){\n\t\t\t\t\t\tdoc.createElement(n);\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t}\n\t\t\tdestroy(div);\n\t\t}\n\t}\n\n\tfunction _insertBefore(/*DomNode*/ node, /*DomNode*/ ref){\n\t\tvar parent = ref.parentNode;\n\t\tif(parent){\n\t\t\tparent.insertBefore(node, ref);\n\t\t}\n\t}\n\n\tfunction _insertAfter(/*DomNode*/ node, /*DomNode*/ ref){\n\t\t// summary:\n\t\t//\t\tTry to insert node after ref\n\t\tvar parent = ref.parentNode;\n\t\tif(parent){\n\t\t\tif(parent.lastChild == ref){\n\t\t\t\tparent.appendChild(node);\n\t\t\t}else{\n\t\t\t\tparent.insertBefore(node, ref.nextSibling);\n\t\t\t}\n\t\t}\n\t}\n\n\texports.toDom = function toDom(frag, doc){\n\t\t// summary:\n\t\t//\t\tinstantiates an HTML fragment returning the corresponding DOM.\n\t\t// frag: String\n\t\t//\t\tthe HTML fragment\n\t\t// doc: DocumentNode?\n\t\t//\t\toptional document to use when creating DOM nodes, defaults to\n\t\t//\t\tdojo/_base/window.doc if not specified.\n\t\t// returns:\n\t\t//\t\tDocument fragment, unless it's a single node in which case it returns the node itself\n\t\t// example:\n\t\t//\t\tCreate a table row:\n\t\t//\t|\trequire([\"dojo/dom-construct\"], function(domConstruct){\n\t\t//\t|\t\tvar tr = domConstruct.toDom(\"<tr><td>First!</td></tr>\");\n\t\t//\t|\t});\n\n\t\tdoc = doc || win.doc;\n\t\tvar masterId = doc[masterName];\n\t\tif(!masterId){\n\t\t\tdoc[masterName] = masterId = ++masterNum + \"\";\n\t\t\tmasterNode[masterId] = doc.createElement(\"div\");\n\t\t}\n\n\t\tif(has(\"ie\") <= 8){\n\t\t\tif(!doc.__dojo_html5_tested && doc.body){\n\t\t\t\thtml5domfix(doc);\n\t\t\t}\n\t\t}\n\n\t\t// make sure the frag is a string.\n\t\tfrag += \"\";\n\n\t\t// find the starting tag, and get node wrapper\n\t\tvar match = frag.match(reTag),\n\t\t\ttag = match ? match[1].toLowerCase() : \"\",\n\t\t\tmaster = masterNode[masterId],\n\t\t\twrap, i, fc, df;\n\t\tif(match && tagWrap[tag]){\n\t\t\twrap = tagWrap[tag];\n\t\t\tmaster.innerHTML = wrap.pre + frag + wrap.post;\n\t\t\tfor(i = wrap.length; i; --i){\n\t\t\t\tmaster = master.firstChild;\n\t\t\t}\n\t\t}else{\n\t\t\tmaster.innerHTML = frag;\n\t\t}\n\n\t\t// one node shortcut => return the node itself\n\t\tif(master.childNodes.length == 1){\n\t\t\treturn master.removeChild(master.firstChild); // DOMNode\n\t\t}\n\n\t\t// return multiple nodes as a document fragment\n\t\tdf = doc.createDocumentFragment();\n\t\twhile((fc = master.firstChild)){ // intentional assignment\n\t\t\tdf.appendChild(fc);\n\t\t}\n\t\treturn df; // DocumentFragment\n\t};\n\n\texports.place = function place(node, refNode, position){\n\t\t// summary:\n\t\t//\t\tAttempt to insert node into the DOM, choosing from various positioning options.\n\t\t//\t\tReturns the first argument resolved to a DOM node.\n\t\t// node: DOMNode|DocumentFragment|String\n\t\t//\t\tid or node reference, or HTML fragment starting with \"<\" to place relative to refNode\n\t\t// refNode: DOMNode|String\n\t\t//\t\tid or node reference to use as basis for placement\n\t\t// position: String|Number?\n\t\t//\t\tstring noting the position of node relative to refNode or a\n\t\t//\t\tnumber indicating the location in the childNodes collection of refNode.\n\t\t//\t\tAccepted string values are:\n\t\t//\n\t\t//\t\t- before\n\t\t//\t\t- after\n\t\t//\t\t- replace\n\t\t//\t\t- only\n\t\t//\t\t- first\n\t\t//\t\t- last\n\t\t//\n\t\t//\t\t\"first\" and \"last\" indicate positions as children of refNode, \"replace\" replaces refNode,\n\t\t//\t\t\"only\" replaces all children. position defaults to \"last\" if not specified\n\t\t// returns: DOMNode\n\t\t//\t\tReturned values is the first argument resolved to a DOM node.\n\t\t//\n\t\t//\t\t.place() is also a method of `dojo/NodeList`, allowing `dojo/query` node lookups.\n\t\t// example:\n\t\t//\t\tPlace a node by string id as the last child of another node by string id:\n\t\t//\t|\trequire([\"dojo/dom-construct\"], function(domConstruct){\n\t\t//\t|\t\tdomConstruct.place(\"someNode\", \"anotherNode\");\n\t\t//\t|\t});\n\t\t// example:\n\t\t//\t\tPlace a node by string id before another node by string id\n\t\t//\t|\trequire([\"dojo/dom-construct\"], function(domConstruct){\n\t\t//\t|\t\tdomConstruct.place(\"someNode\", \"anotherNode\", \"before\");\n\t\t//\t|\t});\n\t\t// example:\n\t\t//\t\tCreate a Node, and place it in the body element (last child):\n\t\t//\t|\trequire([\"dojo/dom-construct\", \"dojo/_base/window\"\n\t\t//\t|\t], function(domConstruct, win){\n\t\t//\t|\t\tdomConstruct.place(\"<div></div>\", win.body());\n\t\t//\t|\t});\n\t\t// example:\n\t\t//\t\tPut a new LI as the first child of a list by id:\n\t\t//\t|\trequire([\"dojo/dom-construct\"], function(domConstruct){\n\t\t//\t|\t\tdomConstruct.place(\"<li></li>\", \"someUl\", \"first\");\n\t\t//\t|\t});\n\n\t\trefNode = dom.byId(refNode);\n\t\tif(typeof node == \"string\"){ // inline'd type check\n\t\t\tnode = /^\\s*</.test(node) ? exports.toDom(node, refNode.ownerDocument) : dom.byId(node);\n\t\t}\n\t\tif(typeof position == \"number\"){ // inline'd type check\n\t\t\tvar cn = refNode.childNodes;\n\t\t\tif(!cn.length || cn.length <= position){\n\t\t\t\trefNode.appendChild(node);\n\t\t\t}else{\n\t\t\t\t_insertBefore(node, cn[position < 0 ? 0 : position]);\n\t\t\t}\n\t\t}else{\n\t\t\tswitch(position){\n\t\t\t\tcase \"before\":\n\t\t\t\t\t_insertBefore(node, refNode);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"after\":\n\t\t\t\t\t_insertAfter(node, refNode);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"replace\":\n\t\t\t\t\trefNode.parentNode.replaceChild(node, refNode);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"only\":\n\t\t\t\t\texports.empty(refNode);\n\t\t\t\t\trefNode.appendChild(node);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"first\":\n\t\t\t\t\tif(refNode.firstChild){\n\t\t\t\t\t\t_insertBefore(node, refNode.firstChild);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\t// else fallthrough...\n\t\t\t\tdefault: // aka: last\n\t\t\t\t\trefNode.appendChild(node);\n\t\t\t}\n\t\t}\n\t\treturn node; // DomNode\n\t};\n\n\tvar create = exports.create = function create(/*DOMNode|String*/ tag, /*Object*/ attrs, /*DOMNode|String?*/ refNode, /*String?*/ pos){\n\t\t// summary:\n\t\t//\t\tCreate an element, allowing for optional attribute decoration\n\t\t//\t\tand placement.\n\t\t// description:\n\t\t//\t\tA DOM Element creation function. A shorthand method for creating a node or\n\t\t//\t\ta fragment, and allowing for a convenient optional attribute setting step,\n\t\t//\t\tas well as an optional DOM placement reference.\n\t\t//\n\t\t//\t\tAttributes are set by passing the optional object through `dojo/dom-attr.set`.\n\t\t//\t\tSee `dojo/dom-attr.set` for noted caveats and nuances, and API if applicable.\n\t\t//\n\t\t//\t\tPlacement is done via `dojo/dom-construct.place`, assuming the new node to be\n\t\t//\t\tthe action node, passing along the optional reference node and position.\n\t\t// tag: DOMNode|String\n\t\t//\t\tA string of the element to create (eg: \"div\", \"a\", \"p\", \"li\", \"script\", \"br\"),\n\t\t//\t\tor an existing DOM node to process.\n\t\t// attrs: Object\n\t\t//\t\tAn object-hash of attributes to set on the newly created node.\n\t\t//\t\tCan be null, if you don't want to set any attributes/styles.\n\t\t//\t\tSee: `dojo/dom-attr.set` for a description of available attributes.\n\t\t// refNode: DOMNode|String?\n\t\t//\t\tOptional reference node. Used by `dojo/dom-construct.place` to place the newly created\n\t\t//\t\tnode somewhere in the dom relative to refNode. Can be a DomNode reference\n\t\t//\t\tor String ID of a node.\n\t\t// pos: String?\n\t\t//\t\tOptional positional reference. Defaults to \"last\" by way of `dojo/domConstruct.place`,\n\t\t//\t\tthough can be set to \"first\",\"after\",\"before\",\"last\", \"replace\" or \"only\"\n\t\t//\t\tto further control the placement of the new node relative to the refNode.\n\t\t//\t\t'refNode' is required if a 'pos' is specified.\n\t\t// example:\n\t\t//\t\tCreate a DIV:\n\t\t//\t|\trequire([\"dojo/dom-construct\"], function(domConstruct){\n\t\t//\t|\t\tvar n = domConstruct.create(\"div\");\n\t\t//\t|\t});\n\t\t//\n\t\t// example:\n\t\t//\t\tCreate a DIV with content:\n\t\t//\t|\trequire([\"dojo/dom-construct\"], function(domConstruct){\n\t\t//\t|\t\tvar n = domConstruct.create(\"div\", { innerHTML:\"<p>hi</p>\" });\n\t\t//\t|\t});\n\t\t//\n\t\t// example:\n\t\t//\t\tPlace a new DIV in the BODY, with no attributes set\n\t\t//\t|\trequire([\"dojo/dom-construct\", \"dojo/_base/window\"], function(domConstruct, win){\n\t\t//\t|\t\tvar n = domConstruct.create(\"div\", null, win.body());\n\t\t//\t|\t});\n\t\t//\n\t\t// example:\n\t\t//\t\tCreate an UL, and populate it with LI's. Place the list as the first-child of a\n\t\t//\t\tnode with id=\"someId\":\n\t\t//\t|\trequire([\"dojo/dom-construct\", \"dojo/_base/array\"],\n\t\t//\t|\tfunction(domConstruct, arrayUtil){\n\t\t//\t|\t\tvar ul = domConstruct.create(\"ul\", null, \"someId\", \"first\");\n\t\t//\t|\t\tvar items = [\"one\", \"two\", \"three\", \"four\"];\n\t\t//\t|\t\tarrayUtil.forEach(items, function(data){\n\t\t//\t|\t\t\tdomConstruct.create(\"li\", { innerHTML: data }, ul);\n\t\t//\t|\t\t});\n\t\t//\t|\t});\n\t\t//\n\t\t// example:\n\t\t//\t\tCreate an anchor, with an href. Place in BODY:\n\t\t//\t|\trequire([\"dojo/dom-construct\", \"dojo/_base/window\"], function(domConstruct, win){\n\t\t//\t|\t\tdomConstruct.create(\"a\", { href:\"foo.html\", title:\"Goto FOO!\" }, win.body());\n\t\t//\t|\t});\n\n\t\tvar doc = win.doc;\n\t\tif(refNode){\n\t\t\trefNode = dom.byId(refNode);\n\t\t\tdoc = refNode.ownerDocument;\n\t\t}\n\t\tif(typeof tag == \"string\"){ // inline'd type check\n\t\t\ttag = doc.createElement(tag);\n\t\t}\n\t\tif(attrs){ attr.set(tag, attrs); }\n\t\tif(refNode){ exports.place(tag, refNode, pos); }\n\t\treturn tag; // DomNode\n\t};\n\n\tfunction _empty(/*DomNode*/ node){\n\t\t// TODO: remove this if() block in 2.0 when we no longer have to worry about IE memory leaks,\n\t\t// and then uncomment the emptyGrandchildren() test case from html.html.\n\t\t// Note that besides fixing #16957, using removeChild() is actually faster than setting node.innerHTML,\n\t\t// see http://jsperf.com/clear-dom-node.\n\t\tif(\"innerHTML\" in node){\n\t\t\ttry{\n\t\t\t\t// fast path\n\t\t\t\tnode.innerHTML = \"\";\n\t\t\t\treturn;\n\t\t\t}catch(e){\n\t\t\t\t// innerHTML is readOnly (e.g. TABLE (sub)elements in quirks mode)\n\t\t\t\t// Fall through (saves bytes)\n\t\t\t}\n\t\t}\n\n\t\t// SVG/strict elements don't support innerHTML\n\t\tfor(var c; c = node.lastChild;){ // intentional assignment\n\t\t\tnode.removeChild(c);\n\t\t}\n\t}\n\n\texports.empty = function empty(/*DOMNode|String*/ node){\n\t\t// summary:\n\t\t//\t\tsafely removes all children of the node.\n\t\t// node: DOMNode|String\n\t\t//\t\ta reference to a DOM node or an id.\n\t\t// example:\n\t\t//\t\tDestroy node's children byId:\n\t\t//\t|\trequire([\"dojo/dom-construct\"], function(domConstruct){\n\t\t//\t|\t\tdomConstruct.empty(\"someId\");\n\t\t//\t|\t});\n\n\t\t_empty(dom.byId(node));\n\t};\n\n\n\tfunction _destroy(/*DomNode*/ node, /*DomNode*/ parent){\n\t\t// in IE quirks, node.canHaveChildren can be false but firstChild can be non-null (OBJECT/APPLET)\n\t\tif(node.firstChild){\n\t\t\t_empty(node);\n\t\t}\n\t\tif(parent){\n\t\t\t// removeNode(false) doesn't leak in IE 6+, but removeChild() and removeNode(true) are known to leak under IE 8- while 9+ is TBD.\n\t\t\t// In IE quirks mode, PARAM nodes as children of OBJECT/APPLET nodes have a removeNode method that does nothing and\n\t\t\t// the parent node has canHaveChildren=false even though removeChild correctly removes the PARAM children.\n\t\t\t// In IE, SVG/strict nodes don't have a removeNode method nor a canHaveChildren boolean.\n\t\t\thas(\"ie\") && parent.canHaveChildren && \"removeNode\" in node ? node.removeNode(false) : parent.removeChild(node);\n\t\t}\n\t}\n\tvar destroy = exports.destroy = function destroy(/*DOMNode|String*/ node){\n\t\t// summary:\n\t\t//\t\tRemoves a node from its parent, clobbering it and all of its\n\t\t//\t\tchildren.\n\t\t//\n\t\t// description:\n\t\t//\t\tRemoves a node from its parent, clobbering it and all of its\n\t\t//\t\tchildren. Function only works with DomNodes, and returns nothing.\n\t\t//\n\t\t// node: DOMNode|String\n\t\t//\t\tA String ID or DomNode reference of the element to be destroyed\n\t\t//\n\t\t// example:\n\t\t//\t\tDestroy a node byId:\n\t\t//\t|\trequire([\"dojo/dom-construct\"], function(domConstruct){\n\t\t//\t|\t\tdomConstruct.destroy(\"someId\");\n\t\t//\t|\t});\n\n\t\tnode = dom.byId(node);\n\t\tif(!node){ return; }\n\t\t_destroy(node, node.parentNode);\n\t};\n});\n","define([\n\t'exports',\n\t'../errors/RequestError',\n\t'../errors/CancelError',\n\t'../Deferred',\n\t'../io-query',\n\t'../_base/array',\n\t'../_base/lang',\n\t'../promise/Promise',\n\t'../has'\n], function(exports, RequestError, CancelError, Deferred, ioQuery, array, lang, Promise, has){\n\n\tfunction isArrayBuffer(value) {\n\t\treturn has('native-arraybuffer') && value instanceof ArrayBuffer\n\t}\n\n\tfunction isBlob(value) {\n\t\treturn has('native-blob') && value instanceof Blob\n\t}\n\t\n\tfunction isElement(value) {\n\t\tif(typeof Element !== 'undefined') { //all other\n\t\t\treturn value instanceof Element;\n\t\t}\n\n\t\t//IE<=7\n\t\treturn value.nodeType === 1;\n\t}\n\n\tfunction isFormData(value) {\n\t\treturn has('native-formdata') && value instanceof FormData;\n\t}\n\n\tfunction shouldDeepCopy(value) {\n\t\treturn value &&\n\t\t\ttypeof value === 'object' &&\n\t\t\t!isFormData(value) &&\n\t\t\t!isElement(value) &&\n\t\t\t!isBlob(value) &&\n\t\t\t!isArrayBuffer(value)\n\t}\n\n\texports.deepCopy = function(target, source) {\n\t\tfor (var name in source) {\n\t\t\tvar tval = target[name],\n \t\t\t sval = source[name];\n\t\t\tif (name !== '__proto__' && tval !== sval) {\n\t\t\t\tif (shouldDeepCopy(sval)) {\n\t\t\t\t\tif (Object.prototype.toString.call(sval) === '[object Date]') { // use this date test to handle crossing frame boundaries\n\t\t\t\t\t\ttarget[name] = new Date(sval);\n\t\t\t\t\t} else if (lang.isArray(sval)) {\n \t\t\t\t\t\t target[name] = exports.deepCopyArray(sval);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (tval && typeof tval === 'object') {\n\t\t\t\t\t\t\texports.deepCopy(tval, sval);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttarget[name] = exports.deepCopy({}, sval);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\ttarget[name] = sval;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn target;\n\t};\n\n\texports.deepCopyArray = function(source) {\n\t\tvar clonedArray = [];\n\t\tfor (var i = 0, l = source.length; i < l; i++) {\n\t\t\tvar svalItem = source[i];\n\t\t\tif (typeof svalItem === 'object') {\n\t\t\t\tclonedArray.push(exports.deepCopy({}, svalItem));\n\t\t\t} else {\n\t\t\t\tclonedArray.push(svalItem);\n\t\t\t}\n\t\t}\n\n\t\treturn clonedArray;\n\t};\n\n\texports.deepCreate = function deepCreate(source, properties){\n\t\tproperties = properties || {};\n\t\tvar target = lang.delegate(source),\n\t\t\tname, value;\n\n\t\tfor(name in source){\n\t\t\tvalue = source[name];\n\n\t\t\tif(value && typeof value === 'object'){\n\t\t\t\ttarget[name] = exports.deepCreate(value, properties[name]);\n\t\t\t}\n\t\t}\n\t\treturn exports.deepCopy(target, properties);\n\t};\n\n\tvar freeze = Object.freeze || function(obj){ return obj; };\n\tfunction okHandler(response){\n\t\treturn freeze(response);\n\t}\n\tfunction dataHandler (response) {\n\t\treturn response.data !== undefined ? response.data : response.text;\n\t}\n\n\texports.deferred = function deferred(response, cancel, isValid, isReady, handleResponse, last){\n\t\tvar def = new Deferred(function(reason){\n\t\t\tcancel && cancel(def, response);\n\n\t\t\tif(!reason || !(reason instanceof RequestError) && !(reason instanceof CancelError)){\n\t\t\t\treturn new CancelError('Request canceled', response);\n\t\t\t}\n\t\t\treturn reason;\n\t\t});\n\n\t\tdef.response = response;\n\t\tdef.isValid = isValid;\n\t\tdef.isReady = isReady;\n\t\tdef.handleResponse = handleResponse;\n\n\t\tfunction errHandler(error){\n\t\t\terror.response = response;\n\t\t\tthrow error;\n\t\t}\n\t\tvar responsePromise = def.then(okHandler).otherwise(errHandler);\n\n\t\tif(exports.notify){\n\t\t\tresponsePromise.then(\n\t\t\t\tlang.hitch(exports.notify, 'emit', 'load'),\n\t\t\t\tlang.hitch(exports.notify, 'emit', 'error')\n\t\t\t);\n\t\t}\n\n\t\tvar dataPromise = responsePromise.then(dataHandler);\n\n\t\t// http://bugs.dojotoolkit.org/ticket/16794\n\t\t// The following works around a leak in IE9 through the\n\t\t// prototype using lang.delegate on dataPromise and\n\t\t// assigning the result a property with a reference to\n\t\t// responsePromise.\n\t\tvar promise = new Promise();\n\t\tfor (var prop in dataPromise) {\n\t\t\tif (dataPromise.hasOwnProperty(prop)) {\n\t\t\t\tpromise[prop] = dataPromise[prop];\n\t\t\t}\n\t\t}\n\t\tpromise.response = responsePromise;\n\t\tfreeze(promise);\n\t\t// End leak fix\n\n\n\t\tif(last){\n\t\t\tdef.then(function(response){\n\t\t\t\tlast.call(def, response);\n\t\t\t}, function(error){\n\t\t\t\tlast.call(def, response, error);\n\t\t\t});\n\t\t}\n\n\t\tdef.promise = promise;\n\t\tdef.then = promise.then;\n\n\t\treturn def;\n\t};\n\n\texports.addCommonMethods = function addCommonMethods(provider, methods){\n\t\tarray.forEach(methods||['GET', 'POST', 'PUT', 'DELETE'], function(method){\n\t\t\tprovider[(method === 'DELETE' ? 'DEL' : method).toLowerCase()] = function(url, options){\n\t\t\t\toptions = lang.delegate(options||{});\n\t\t\t\toptions.method = method;\n\t\t\t\treturn provider(url, options);\n\t\t\t};\n\t\t});\n\t};\n\n\texports.parseArgs = function parseArgs(url, options, skipData){\n\t\tvar data = options.data,\n\t\t\tquery = options.query;\n\n\t\tif(data && !skipData){\n\t\t\tif(typeof data === 'object' && (!(has('native-xhr2')) || !(isArrayBuffer(data) || isBlob(data) ))){\n\t\t\t\toptions.data = ioQuery.objectToQuery(data);\n\t\t\t}\n\t\t}\n\n\t\tif(query){\n\t\t\tif(typeof query === 'object'){\n\t\t\t\tquery = ioQuery.objectToQuery(query);\n\t\t\t}\n\t\t\tif(options.preventCache){\n\t\t\t\tquery += (query ? '&' : '') + 'request.preventCache=' + (+(new Date));\n\t\t\t}\n\t\t}else if(options.preventCache){\n\t\t\tquery = 'request.preventCache=' + (+(new Date));\n\t\t}\n\n\t\tif(url && query){\n\t\t\turl += (~url.indexOf('?') ? '&' : '?') + query;\n\t\t}\n\n\t\treturn {\n\t\t\turl: url,\n\t\t\toptions: options,\n\t\t\tgetHeader: function(headerName){ return null; }\n\t\t};\n\t};\n\n\texports.checkStatus = function(stat){\n\t\tstat = stat || 0;\n\t\treturn (stat >= 200 && stat < 300) || // allow any 2XX response code\n\t\t\tstat === 304 || // or, get it out of the cache\n\t\t\tstat === 1223 || // or, Internet Explorer mangled the status code\n\t\t\t!stat; // or, we're Titanium/browser chrome/chrome extension requesting a local file\n\t};\n});\n","define([\"./_base/lang\"], function(lang){\n\n\t// module:\n\t//\t\tdojo/io-query\n\n\tvar backstop = {};\n\n\treturn {\n\t\t// summary:\n\t\t//\t\tThis module defines query string processing functions.\n\n\t\tobjectToQuery: function objectToQuery(/*Object*/ map){\n\t\t\t// summary:\n\t\t\t//\t\ttakes a name/value mapping object and returns a string representing\n\t\t\t//\t\ta URL-encoded version of that object.\n\t\t\t// example:\n\t\t\t//\t\tthis object:\n\t\t\t//\n\t\t\t//\t|\t{\n\t\t\t//\t|\t\tblah: \"blah\",\n\t\t\t//\t|\t\tmulti: [\n\t\t\t//\t|\t\t\t\"thud\",\n\t\t\t//\t|\t\t\t\"thonk\"\n\t\t\t//\t|\t\t]\n\t\t\t//\t|\t};\n\t\t\t//\n\t\t\t//\t\tyields the following query string:\n\t\t\t//\n\t\t\t//\t|\t\"blah=blah&multi=thud&multi=thonk\"\n\n\t\t\t// FIXME: need to implement encodeAscii!!\n\t\t\tvar enc = encodeURIComponent, pairs = [];\n\t\t\tfor(var name in map){\n\t\t\t\tvar value = map[name];\n\t\t\t\tif(value != backstop[name]){\n\t\t\t\t\tvar assign = enc(name) + \"=\";\n\t\t\t\t\tif(lang.isArray(value)){\n\t\t\t\t\t\tfor(var i = 0, l = value.length; i < l; ++i){\n\t\t\t\t\t\t\tpairs.push(assign + enc(value[i]));\n\t\t\t\t\t\t}\n\t\t\t\t\t}else{\n\t\t\t\t\t\tpairs.push(assign + enc(value));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn pairs.join(\"&\"); // String\n\t\t},\n\n\t\tqueryToObject: function queryToObject(/*String*/ str){\n\t\t\t// summary:\n\t\t\t//\t\tCreate an object representing a de-serialized query section of a\n\t\t\t//\t\tURL. Query keys with multiple values are returned in an array.\n\t\t\t//\n\t\t\t// example:\n\t\t\t//\t\tThis string:\n\t\t\t//\n\t\t\t//\t|\t\t\"foo=bar&foo=baz&thinger=%20spaces%20=blah&zonk=blarg&\"\n\t\t\t//\n\t\t\t//\t\tresults in this object structure:\n\t\t\t//\n\t\t\t//\t|\t\t{\n\t\t\t//\t|\t\t\tfoo: [ \"bar\", \"baz\" ],\n\t\t\t//\t|\t\t\tthinger: \" spaces =blah\",\n\t\t\t//\t|\t\t\tzonk: \"blarg\"\n\t\t\t//\t|\t\t}\n\t\t\t//\n\t\t\t//\t\tNote that spaces and other urlencoded entities are correctly\n\t\t\t//\t\thandled.\n\n \tvar dec = decodeURIComponent, qp = str.split(\"&\"), ret = {}, name, val;\n\t\t\tfor(var i = 0, l = qp.length, item; i < l; ++i){\n\t\t\t\titem = qp[i];\n\t\t\t\tif(item.length){\n\t\t\t\t\tvar s = item.indexOf(\"=\");\n\t\t\t\t\tif(s < 0){\n\t\t\t\t\t\tname = dec(item);\n\t\t\t\t\t\tval = \"\";\n\t\t\t\t\t}else{\n\t\t\t\t\t\tname = dec(item.slice(0, s));\n\t\t\t\t\t\tval = dec(item.slice(s + 1));\n\t\t\t\t\t}\n\t\t\t\t\tif(typeof ret[name] == \"string\"){ // inline'd type check\n\t\t\t\t\t\tret[name] = [ret[name]];\n\t\t\t\t\t}\n\n\t\t\t\t\tif(lang.isArray(ret[name])){\n\t\t\t\t\t\tret[name].push(val);\n\t\t\t\t\t}else{\n\t\t\t\t\t\tret[name] = val;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn ret; // Object\n\t\t}\n\t};\n});","define([\"./has\"], function(has){\n\t\"use strict\";\n\tvar hasJSON = typeof JSON != \"undefined\";\n\thas.add(\"json-parse\", hasJSON); // all the parsers work fine\n\t\t// Firefox 3.5/Gecko 1.9 fails to use replacer in stringify properly https://bugzilla.mozilla.org/show_bug.cgi?id=509184\n\thas.add(\"json-stringify\", hasJSON && JSON.stringify({a:0}, function(k,v){return v||1;}) == '{\"a\":1}');\n\n\t/*=====\n\treturn {\n\t\t// summary:\n\t\t//\t\tFunctions to parse and serialize JSON\n\n\t\tparse: function(str, strict){\n\t\t\t// summary:\n\t\t\t//\t\tParses a [JSON](http://json.org) string to return a JavaScript object.\n\t\t\t// description:\n\t\t\t//\t\tThis function follows [native JSON API](https://developer.mozilla.org/en/JSON)\n\t\t\t//\t\tThrows for invalid JSON strings. This delegates to eval() if native JSON\n\t\t\t//\t\tsupport is not available. By default this will evaluate any valid JS expression.\n\t\t\t//\t\tWith the strict parameter set to true, the parser will ensure that only\n\t\t\t//\t\tvalid JSON strings are parsed (otherwise throwing an error). Without the strict\n\t\t\t//\t\tparameter, the content passed to this method must come\n\t\t\t//\t\tfrom a trusted source.\n\t\t\t// str:\n\t\t\t//\t\ta string literal of a JSON item, for instance:\n\t\t\t//\t\t`'{ \"foo\": [ \"bar\", 1, { \"baz\": \"thud\" } ] }'`\n\t\t\t// strict:\n\t\t\t//\t\tWhen set to true, this will ensure that only valid, secure JSON is ever parsed.\n\t\t\t//\t\tMake sure this is set to true for untrusted content. Note that on browsers/engines\n\t\t\t//\t\twithout native JSON support, setting this to true will run slower.\n\t\t},\n\t\tstringify: function(value, replacer, spacer){\n\t\t\t// summary:\n\t\t\t//\t\tReturns a [JSON](http://json.org) serialization of an object.\n\t\t\t// description:\n\t\t\t//\t\tReturns a [JSON](http://json.org) serialization of an object.\n\t\t\t//\t\tThis function follows [native JSON API](https://developer.mozilla.org/en/JSON)\n\t\t\t//\t\tNote that this doesn't check for infinite recursion, so don't do that!\n\t\t\t// value:\n\t\t\t//\t\tA value to be serialized.\n\t\t\t// replacer:\n\t\t\t//\t\tA replacer function that is called for each value and can return a replacement\n\t\t\t// spacer:\n\t\t\t//\t\tA spacer string to be used for pretty printing of JSON\n\t\t\t// example:\n\t\t\t//\t\tsimple serialization of a trivial object\n\t\t\t//\t|\tdefine([\"dojo/json\"], function(JSON){\n\t\t\t// \t|\t\tvar jsonStr = JSON.stringify({ howdy: \"stranger!\", isStrange: true });\n\t\t\t//\t|\t\tdoh.is('{\"howdy\":\"stranger!\",\"isStrange\":true}', jsonStr);\n\t\t}\n\t};\n\t=====*/\n\n\tif(has(\"json-stringify\")){\n\t\treturn JSON;\n\t}else{\n\t\tvar escapeString = function(/*String*/str){\n\t\t\t// summary:\n\t\t\t//\t\tAdds escape sequences for non-visual characters, double quote and\n\t\t\t//\t\tbackslash and surrounds with double quotes to form a valid string\n\t\t\t//\t\tliteral.\n\t\t\treturn ('\"' + str.replace(/([\"\\\\])/g, '\\\\$1') + '\"').\n\t\t\t\treplace(/[\\f]/g, \"\\\\f\").replace(/[\\b]/g, \"\\\\b\").replace(/[\\n]/g, \"\\\\n\").\n\t\t\t\treplace(/[\\t]/g, \"\\\\t\").replace(/[\\r]/g, \"\\\\r\"); // string\n\t\t};\n\t\treturn {\n\t\t\tparse: has(\"json-parse\") ? JSON.parse : function(str, strict){\n\t\t\t\tif(strict && !/^([\\s\\[\\{]*(?:\"(?:\\\\.|[^\"])*\"|-?\\d[\\d\\.]*(?:[Ee][+-]?\\d+)?|null|true|false|)[\\s\\]\\}]*(?:,|:|$))+$/.test(str)){\n\t\t\t\t\tthrow new SyntaxError(\"Invalid characters in JSON\");\n\t\t\t\t}\n\t\t\t\treturn eval('(' + str + ')');\n\t\t\t},\n\t\t\tstringify: function(value, replacer, spacer){\n\t\t\t\tvar undef;\n\t\t\t\tif(typeof replacer == \"string\"){\n\t\t\t\t\tspacer = replacer;\n\t\t\t\t\treplacer = null;\n\t\t\t\t}\n\t\t\t\tfunction stringify(it, indent, key){\n\t\t\t\t\tif(replacer){\n\t\t\t\t\t\tit = replacer(key, it);\n\t\t\t\t\t}\n\t\t\t\t\tvar val, objtype = typeof it;\n\t\t\t\t\tif(objtype == \"number\"){\n\t\t\t\t\t\treturn isFinite(it) ? it + \"\" : \"null\";\n\t\t\t\t\t}\n\t\t\t\t\tif(objtype == \"boolean\"){\n\t\t\t\t\t\treturn it + \"\";\n\t\t\t\t\t}\n\t\t\t\t\tif(it === null){\n\t\t\t\t\t\treturn \"null\";\n\t\t\t\t\t}\n\t\t\t\t\tif(typeof it == \"string\"){\n\t\t\t\t\t\treturn escapeString(it);\n\t\t\t\t\t}\n\t\t\t\t\tif(objtype == \"function\" || objtype == \"undefined\"){\n\t\t\t\t\t\treturn undef; // undefined\n\t\t\t\t\t}\n\t\t\t\t\t// short-circuit for objects that support \"json\" serialization\n\t\t\t\t\t// if they return \"self\" then just pass-through...\n\t\t\t\t\tif(typeof it.toJSON == \"function\"){\n\t\t\t\t\t\treturn stringify(it.toJSON(key), indent, key);\n\t\t\t\t\t}\n\t\t\t\t\tif(it instanceof Date){\n\t\t\t\t\t\treturn '\"{FullYear}-{Month+}-{Date}T{Hours}:{Minutes}:{Seconds}Z\"'.replace(/\\{(\\w+)(\\+)?\\}/g, function(t, prop, plus){\n\t\t\t\t\t\t\tvar num = it[\"getUTC\" + prop]() + (plus ? 1 : 0);\n\t\t\t\t\t\t\treturn num < 10 ? \"0\" + num : num;\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tif(it.valueOf() !== it){\n\t\t\t\t\t\t// primitive wrapper, try again unwrapped:\n\t\t\t\t\t\treturn stringify(it.valueOf(), indent, key);\n\t\t\t\t\t}\n\t\t\t\t\tvar nextIndent= spacer ? (indent + spacer) : \"\";\n\t\t\t\t\t/* we used to test for DOM nodes and throw, but FF serializes them as {}, so cross-browser consistency is probably not efficiently attainable */ \n\t\t\t\t\n\t\t\t\t\tvar sep = spacer ? \" \" : \"\";\n\t\t\t\t\tvar newLine = spacer ? \"\\n\" : \"\";\n\t\t\t\t\n\t\t\t\t\t// array\n\t\t\t\t\tif(it instanceof Array){\n\t\t\t\t\t\tvar itl = it.length, res = [];\n\t\t\t\t\t\tfor(key = 0; key < itl; key++){\n\t\t\t\t\t\t\tvar obj = it[key];\n\t\t\t\t\t\t\tval = stringify(obj, nextIndent, key);\n\t\t\t\t\t\t\tif(typeof val != \"string\"){\n\t\t\t\t\t\t\t\tval = \"null\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tres.push(newLine + nextIndent + val);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn \"[\" + res.join(\",\") + newLine + indent + \"]\";\n\t\t\t\t\t}\n\t\t\t\t\t// generic object code path\n\t\t\t\t\tvar output = [];\n\t\t\t\t\tfor(key in it){\n\t\t\t\t\t\tvar keyStr;\n\t\t\t\t\t\tif(it.hasOwnProperty(key)){\n\t\t\t\t\t\t\tif(typeof key == \"number\"){\n\t\t\t\t\t\t\t\tkeyStr = '\"' + key + '\"';\n\t\t\t\t\t\t\t}else if(typeof key == \"string\"){\n\t\t\t\t\t\t\t\tkeyStr = escapeString(key);\n\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\t// skip non-string or number keys\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tval = stringify(it[key], nextIndent, key);\n\t\t\t\t\t\t\tif(typeof val != \"string\"){\n\t\t\t\t\t\t\t\t// skip non-serializable values\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// At this point, the most non-IE browsers don't get in this branch \n\t\t\t\t\t\t\t// (they have native JSON), so push is definitely the way to\n\t\t\t\t\t\t\toutput.push(newLine + nextIndent + keyStr + \":\" + sep + val);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn \"{\" + output.join(\",\") + newLine + indent + \"}\"; // String\n\t\t\t\t}\n\t\t\t\treturn stringify(value, \"\", \"\");\n\t\t\t}\n\t\t};\n\t}\n});\n","define([\"exports\",\"../reactive-element/reactive-element\",\"../lit-html/lit-html\"],(function(t,e,i){\"use strict\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */var l,n;const s=e.ReactiveElement,r=e.ReactiveElement;class o extends r{constructor(){super(...arguments),this.renderOptions={host:this},this._$Dt=void 0}createRenderRoot(){var t,e;const i=super.createRenderRoot();return null!==(t=(e=this.renderOptions).renderBefore)&&void 0!==t||(e.renderBefore=i.firstChild),i}update(t){const e=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(t),this._$Dt=i.render(e,this.renderRoot,this.renderOptions)}connectedCallback(){var t;super.connectedCallback(),null===(t=this._$Dt)||void 0===t||t.setConnected(!0)}disconnectedCallback(){var t;super.disconnectedCallback(),null===(t=this._$Dt)||void 0===t||t.setConnected(!1)}render(){return i.noChange}}o.finalized=!0,o._$litElement$=!0,null===(l=globalThis.litElementHydrateSupport)||void 0===l||l.call(globalThis,{LitElement:o});const u=globalThis.litElementPolyfillSupport;null==u||u({LitElement:o}),(null!==(n=globalThis.litElementVersions)&&void 0!==n?n:globalThis.litElementVersions=[]).push(\"3.0.1\"),t.LitElement=o,t.UpdatingElement=s,t.t={_$AK:(t,e,i)=>{t._$AK(e,i)},_$AL:t=>t._$AL},Object.keys(e).forEach((function(i){\"default\"===i||t.hasOwnProperty(i)||Object.defineProperty(t,i,{enumerable:!0,get:function(){return e[i]}})})),Object.keys(i).forEach((function(e){\"default\"===e||t.hasOwnProperty(e)||Object.defineProperty(t,e,{enumerable:!0,get:function(){return i[e]}})})),Object.defineProperty(t,\"i\",{value:!0})}));\n//# sourceMappingURL=lit-element.js.map\n","define([\"mw-log/Log\"], function (Log) {\n \"use strict\";\n\n var _exports = {};\n // Copyright 2022-2023 The MathWorks, Inc.\n\n /**\n * Defines the common interface implemented by the MatlabSender and DirectSender sub classes.\n * @private\n */\n class Sender {\n start(properties) {}\n stop() {}\n sendEvent(eventType, event) {\n Log.warn('Sender.sendEvent not overridden');\n }\n }\n _exports.default = Sender;\n return _exports.default;\n});\n//# sourceMappingURL=Sender.js.map\n","define(function(){\n if (typeof global !== 'undefined' && typeof global !== 'function') {\n // global spec defines a reference to the global object called 'global'\n // https://github.com/tc39/proposal-global\n // `global` is also defined in NodeJS\n return global;\n }\n else if (typeof window !== 'undefined') {\n // window is defined in browsers\n return window;\n }\n else if (typeof self !== 'undefined') {\n // self is defined in WebWorkers\n return self;\n }\n return this;\n});\n","define([\"../_base/lang\"], function(lang){\n\treturn function(name, ctor, base, props){\n\t\tbase = base || Error;\n\n\t\tvar ErrorCtor = function(message){\n\t\t\tif(base === Error){\n\t\t\t\tif(Error.captureStackTrace){\n\t\t\t\t\tError.captureStackTrace(this, ErrorCtor);\n\t\t\t\t}\n\n\t\t\t\t// Error.call() operates on the returned error\n\t\t\t\t// object rather than operating on |this|\n\t\t\t\tvar err = Error.call(this, message),\n\t\t\t\t\tprop;\n\n\t\t\t\t// Copy own properties from err to |this|\n\t\t\t\tfor(prop in err){\n\t\t\t\t\tif(err.hasOwnProperty(prop)){\n\t\t\t\t\t\tthis[prop] = err[prop];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// messsage is non-enumerable in ES5\n\t\t\t\tthis.message = message;\n\t\t\t\t// stack is non-enumerable in at least Firefox\n\t\t\t\tthis.stack = err.stack;\n\t\t\t}else{\n\t\t\t\tbase.apply(this, arguments);\n\t\t\t}\n\t\t\tif(ctor){\n\t\t\t\tctor.apply(this, arguments);\n\t\t\t}\n\t\t};\n\n\t\tErrorCtor.prototype = lang.delegate(base.prototype, props);\n\t\tErrorCtor.prototype.name = name;\n\t\tErrorCtor.prototype.constructor = ErrorCtor;\n\n\t\treturn ErrorCtor;\n\t};\n});\n","\"use strict\";\n\n// Copyright 2011-2022 The MathWorks, Inc.\n\n/* global WebSocket */\ndefine(['dojo/_base/connect', 'dojo/_base/declare', 'dojo/_base/Deferred', 'dojo/_base/lang', 'dojo/aspect', 'dojo/dom-construct', 'mw-log/Log', './CheckUrlService'], function (connect, declare, Deferred, lang, aspect, domConstruct, Log, CheckUrlService) {\n var IframeProxyClient = declare([], {\n /*\n As of 23b, the remote/proxy component and iframe handling has been removed.\n TODO: all naming conventions related to iframe must be updated\n */\n constructor: function constructor() {\n this._messageId = 0;\n this._loaded = false;\n this._pendingQueue = [];\n this._transactions = {};\n this._uploadTargetCallbacks = {};\n this._checkUrl = null;\n this._loadTimeoutHandle = null;\n this._checkUrlTimeout = null;\n this._errorRate = 0;\n this._inFlightTransactions = {};\n this._webSocket = null;\n },\n\n /**\n * Creates an new iframe for remote communication and sets the src URL\n * the iframe. If this function was already called, it only creates a new\n * iframe if the existing iframe's src would have to change.\n *\n * @param {string} host e.g. https://something.com/ -\n * undefined and \"\" are normalized to \"/\"\n * if host does not end in a trailing slash it is\n * normalized to have a trailing slash\n * @param {string} key Sets \"routingkey\" on url. Used by the workerrouter\n * to route to a worker. Treats undefined and \"\"\n * the same.\n * @param {string} computerToken no longer used. Pass \"\"\n * if refactoring - remove computeToken\n * @param {string} proxyUrl a path that overrides the standard \"remote/proxy\" path\n * if proxyUrl is set and not \"\", the iframe src will\n * point to: host+proxyUrl\n * @param {object} options options object for passing additional parameters\n * @param {object} options.withCredentials if true, we always post credentials to the endpoint\n * when using CORS / direct XHR requests (e.g not\n * through an iFrame)\n *\n */\n setRemotePageHost: function setRemotePageHost(host, key, computeToken, proxyUrl) {\n var options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {};\n host = this._combineUriPaths(host || '', '/');\n key = key || '';\n proxyUrl = proxyUrl || '';\n this.computeToken = computeToken; // withCredentials default is false, unless already set.\n\n this._withCredentials = this._withCredentials || false;\n\n if (!(typeof options.withCredentials === 'undefined' || options.withCredentials === null)) {\n // option object contains 'withCredentials' and is setting them to a value so use it.\n this._withCredentials = !!options.withCredentials;\n }\n\n if (host === this._host && key === this._key && proxyUrl === this._proxyUrl) {\n return;\n }\n\n this._errorLoading = false;\n this._host = host;\n this._key = key;\n this._proxyUrl = proxyUrl;\n\n this._cleanupFailureChecks();\n\n this._loaded = true;\n\n this._flushPending();\n },\n setLatency: function setLatency(latency) {\n this._latency = latency;\n },\n setErrorRate: function setErrorRate(errorRate) {\n this._errorRate = errorRate;\n },\n sendMessage: function sendMessage(message, endpoint, options) {\n var that = this;\n var id;\n var data;\n var transaction;\n\n if (this.computeToken) {\n options = options || {};\n options.headers = options.headers || {};\n options.headers.computeToken = this.computeToken;\n }\n\n var optionHeaders = options || {};\n id = this._getNewMessageId(); // Replace String\n\n data = {\n 'action': 'sendMessage',\n 'id': id,\n 'endpoint': endpoint,\n 'options': optionHeaders,\n 'message': message\n };\n\n function canceler() {\n data = {\n action: 'abort',\n id: id\n };\n\n that._postMessage(data);\n }\n\n transaction = {\n deferred: new Deferred(canceler),\n id: id\n };\n\n if (this._errorLoading) {\n transaction.deferred.reject('Error loading: ' + this._url);\n } else {\n this._transactions[id] = transaction;\n\n this._postMessage(data);\n }\n\n return transaction.deferred;\n },\n _postMessage: function _postMessage(data) {\n if (this._loaded) {\n this._postMessageNow(data);\n } else {\n this._pendingQueue.push(data);\n }\n },\n _handleMessage: function _handleMessage(event) {\n var action, id, messageData;\n var closeEvent, msgEvent; // event.data {} format:\n // action: case\n // id: id\n // message: data\n // Handled actions:\n // ready\n // sendMessageResponse;<id>;<response type>;<response text>\n // uploadIframeMessage;<iframe id>;<data>\n\n action = event.data.action;\n\n if (!action) {\n throw new Error('Client unable to parse message, no action specified: ' + JSON.stringify(event.data));\n }\n\n switch (action) {\n case 'ready':\n this._cleanupFailureChecks();\n\n this._loaded = true;\n\n this._flushPending();\n\n break;\n\n case 'sendMessageResponse':\n this._sendMessageResponse(event);\n\n break;\n\n case 'uploadIframeMessage':\n id = event.data.id;\n messageData = event.data.message;\n\n this._uploadTargetCallbacks[id](messageData);\n\n break;\n\n case 'websocketOpened':\n this.onWebsocketOpen();\n break;\n\n case 'websocketClosed':\n closeEvent = event.data.message;\n this.onWebsocketClose(closeEvent);\n break;\n\n case 'websocketMsg':\n msgEvent = event.data.message;\n this.onWebsocketMsg(msgEvent);\n break;\n\n case 'websocketError':\n this.onWebsocketError();\n break;\n\n default:\n throw new Error('Unknown action: ' + action + ', data: ' + JSON.stringify(event.data));\n }\n },\n _sendMessageResponse: function _sendMessageResponse(event) {\n // NOTE: If changing this code, you may need to change:\n // _postMessageNow\n var transaction, message;\n var id = event.data.id;\n var responseType = event.data.responseType;\n var messageData = event.data.message;\n\n if (!id || !responseType) {\n throw new Error('Invalid message: ' + JSON.stringify(event.data));\n }\n\n transaction = this._transactions[id];\n\n if (!transaction) {\n throw new Error('Unknown transaction id: ' + id + ': ' + JSON.stringify(event.data));\n }\n\n delete this._transactions[id];\n\n if (!transaction.deferred.isCanceled()) {\n if (responseType === 'success') {\n try {\n // Convert from JSON if there is messageData success is\n // usually JSON but just in case, wrap it in a try/catch\n message = messageData && JSON.parse(messageData);\n } catch (e) {\n message = messageData;\n }\n\n message = message === '' ? {} : message;\n transaction.deferred.resolve(message);\n return;\n }\n\n this.onError(messageData); // Errors are just strings\n // HTTP Status Code if present is added to string object\n\n transaction.deferred.reject(messageData);\n }\n },\n _cleanupFailureChecks: function _cleanupFailureChecks() {\n if (this._checkUrlTimeout) {\n clearTimeout(this._checkUrlTimeout);\n }\n\n if (this._loadTimeoutHandle) {\n clearTimeout(this._loadTimeoutHandle);\n }\n\n if (this._checkUrl && !this._checkUrl.isFulfilled()) {\n this._checkUrl.cancel('Timeout Occurred', false);\n }\n\n this._checkUrlTimeout = null;\n this._loadTimeoutHandle = null;\n this._checkUrl = null;\n },\n _handleLoadTimeout: function _handleLoadTimeout() {\n var fault, transaction, transactions;\n\n if (this._loaded) {\n return;\n }\n\n fault = {\n code: 'IframeLoadTimeout',\n description: 'Iframe proxy loading failed due to an HTTP error',\n message: ''\n };\n transactions = this._transactions;\n this._transactions = {};\n this._pendingQueue = [];\n\n for (transaction in transactions) {\n if (transactions.hasOwnProperty(transaction)) {\n transactions[transaction].deferred.reject('Timeout: ' + this._url + ' at ' + new Date());\n }\n }\n\n this._errorLoading = true;\n this.onError(fault);\n },\n _handleXhrResponse: function _handleXhrResponse(id, response) {\n var data = {\n action: 'sendMessageResponse',\n id: id,\n responseType: 'success',\n message: response\n };\n\n this._handleMessage({\n data: data\n });\n },\n _handleXhrFault: function _handleXhrFault(id, response) {\n var data = {\n action: 'sendMessageResponse',\n id: id,\n responseType: 'fault',\n message: response\n };\n\n this._handleMessage({\n data: data\n });\n },\n _sendXHRNow: function _sendXHRNow(event) {\n var _this = this;\n\n var id, endpoint, messageData, options;\n var xhr, complete, header;\n var action = event.data.action;\n\n if (!action) {\n throw new Error('Unable to parse message, no action specified: ' + JSON.stringify(event.data));\n }\n\n switch (action) {\n case 'sendMessage':\n id = event.data.id;\n endpoint = event.data.endpoint;\n options = event.data.options;\n messageData = event.data.message;\n\n if (id && endpoint && messageData) {\n try {\n xhr = new XMLHttpRequest();\n this._inFlightTransactions[id] = {\n xhr: xhr\n };\n complete = false;\n\n xhr.onreadystatechange = function () {\n var status;\n\n if (xhr.readyState === 0) {\n complete = true;\n\n _this.handleXhrFault(id, 'XHR readyState 0');\n } else if (xhr.readyState === 4 && !complete) {\n complete = true;\n status = xhr.status || 0;\n\n if (status >= 200 && status < 300 || status === 304) {\n _this._handleXhrResponse(id, xhr.responseText);\n } else {\n _this._handleXhrFault(id, xhr.responseText);\n }\n }\n\n if (complete && xhr) {\n // memory leak prevention\n xhr.onreadystatechange = _this._noop;\n xhr = null;\n delete _this._inFlightTransactions[id].xhr;\n delete _this._inFlightTransactions[id];\n }\n };\n\n xhr.open('POST', endpoint, true);\n xhr.withCredentials = this._withCredentials;\n xhr.setRequestHeader('Content-Type', options.contentType ? options.contentType : 'application/json');\n xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\n\n if (options.headers) {\n for (header in options.headers) {\n if (Object.prototype.hasOwnProperty.call(options.headers, header)) {\n xhr.setRequestHeader(header, options.headers[header]);\n }\n }\n }\n\n xhr.send(messageData);\n } catch (e) {\n this.handleXhrFault(id, 'Unable to send data: ' + e.toString());\n }\n } else {\n throw new Error('Invalid message to send: ' + JSON.stringify(event.data));\n }\n\n break;\n\n case 'abort':\n id = event.data.id;\n\n if (this._inFlightTransactions[id]) {\n this._inFlightTransactions[id].xhr.abort();\n }\n\n break;\n\n case 'connectWebsocket':\n var url = event.data.url;\n this._webSocket = new WebSocket(url);\n\n this._webSocket.onopen = function () {\n _this.onWebsocketOpen();\n };\n\n this._webSocket.onmessage = function (msg) {\n _this.onWebsocketMsg(msg);\n };\n\n this._webSocket.onclose = function (event) {\n var closeEvent = {\n code: event.code,\n reason: event.reason,\n wasClean: event.wasClean\n };\n\n _this.onWebsocketClose(closeEvent);\n };\n\n this._webSocket.onerror = function () {\n _this.onWebsocketError();\n };\n\n break;\n\n case 'websocketSend':\n this._webSocket.send(event.data.data);\n\n break;\n\n case 'closeWebsocket':\n this._webSocket.close();\n\n break;\n\n default:\n throw new Error('Unknown action: ' + action);\n }\n },\n _postMessageNow: function _postMessageNow(data) {\n // NOTE: If changing this code, you may need to change:\n // _sendMessageResponse\n var that = this;\n var id, transaction;\n\n function doPost() {\n // generate an error response instead of do the real postMessage call\n if (that._errorRate > 0 && Math.random() < that._errorRate && data.action === 'sendMessage') {\n id = data.id;\n transaction = that._transactions[id];\n\n if (transaction) {\n delete that._transactions[id];\n Log.error('Generating simulated error. Request was: ', JSON.stringify(data));\n var error = '403 Forbidden;403';\n that.onError(error); // Errors are just strings\n // HTTP Status Code if present is added to string object\n\n transaction.deferred.reject(error);\n }\n } else {\n that._sendXHRNow({\n data: data\n });\n }\n }\n\n if (this._latency) {\n setTimeout(doPost, this._latency);\n } else {\n doPost();\n }\n },\n _flushPending: function _flushPending() {\n this._pendingQueue.forEach(this._postMessageNow, this);\n\n this._pendingQueue = [];\n },\n _getNewMessageId: function _getNewMessageId() {\n this._messageId += 1;\n return this._messageId.toString();\n },\n\n /**\n * onError event is fired when a xhr fault is received\n * Designed to aspect on\n * @params fault - a fault object\n * @returns {void}\n */\n onError: function onError()\n /* fault */\n {},\n onWebsocketOpen: function onWebsocketOpen() {},\n onWebsocketMsg: function onWebsocketMsg()\n /* msg */\n {},\n onWebsocketClose: function onWebsocketClose()\n /* event */\n {},\n onWebsocketError: function onWebsocketError() {},\n\n /**\n * Computes a valid Uri path from valid Uri segments\n * Usage:\n * _combineUriPaths('/s1/s2/', '/s3/','s4','s5','', 'f1.html?q=1')\n * Will return:\n * '/s1/s2/s3/s4/s5/f1.html?q=1'\n *\n * If a parameter is not valid Uri path on its own, the returned Uri is not\n * going to be valid.\n * So parameters like \"x//y\", \"x y/\", \"d%d\" would all result in a bad Uri.\n *\n * @param {...string} s - an argument list of path strings to combine\n * @returns {string} a combined uri from the arg list\n */\n _combineUriPaths: function _combineUriPaths()\n /* args */\n {\n var args = Array.prototype.slice.call(arguments);\n var combinedUri = args.reduce(function (a, b) {\n if (a.length === 0) {\n return b;\n } else if (b.length > 0) {\n if (b[0] === '/' && a.lastIndexOf('/') === a.length - 1) {\n b = b.substring(1);\n } else if (b[0] !== '/' && a.lastIndexOf('/') !== a.length - 1) {\n a += '/';\n }\n }\n\n return a + b;\n });\n return combinedUri;\n }\n });\n IframeProxyClient.WebSocket = declare([], {\n constructor: function constructor(url) {\n var that = this;\n this.proxyClient = IframeProxyClient.WebSocket.proxyClient;\n\n if (this.proxyClient.computeToken && url.indexOf('?') >= 0) {\n url = url + '&computeToken=' + this.proxyClient.computeToken;\n }\n\n var data = {\n action: 'connectWebsocket',\n url: url\n };\n\n this.proxyClient._postMessage(data);\n\n aspect.after(this.proxyClient, 'onWebsocketOpen', function () {\n that.onopen.apply(that, arguments);\n }, true);\n aspect.after(this.proxyClient, 'onWebsocketMsg', function () {\n that.onmessage.apply(that, arguments);\n }, true);\n aspect.after(this.proxyClient, 'onWebsocketClose', function () {\n that.onclose.apply(that, arguments);\n }, true);\n aspect.after(this.proxyClient, 'onWebsocketError', function () {\n // Notify MessageService NOT cometd RE: Errors\n // Let MessageService clean up and reset after a\n // MessageService Failure\n that.onerror.apply(that, arguments);\n that.proxyClient.onError.apply(that.proxyClient, arguments);\n }, true);\n },\n onopen: function onopen() {},\n onmessage: function onmessage()\n /* msg */\n {},\n onclose: function onclose()\n /* event */\n {},\n onerror: function onerror()\n /* event */\n {},\n send: function send(msg) {\n var data = {\n action: 'websocketSend',\n data: msg\n };\n\n this.proxyClient._postMessage(data);\n },\n close: function close() {\n var data = {\n action: 'closeWebsocket'\n };\n\n this.proxyClient._postMessage(data);\n }\n });\n return IframeProxyClient;\n});\n//# sourceMappingURL=IframeProxyClient.js.map\n","define([\"./sniff\", \"./dom\", \"./_base/window\"], function(has, dom, win){\n\t// module:\n\t//\t\tdojo/dom-style\n\n\t// =============================\n\t// Style Functions\n\t// =============================\n\n\t// getComputedStyle drives most of the style code.\n\t// Wherever possible, reuse the returned object.\n\t//\n\t// API functions below that need to access computed styles accept an\n\t// optional computedStyle parameter.\n\t// If this parameter is omitted, the functions will call getComputedStyle themselves.\n\t// This way, calling code can access computedStyle once, and then pass the reference to\n\t// multiple API functions.\n\n\t// Although we normally eschew argument validation at this\n\t// level, here we test argument 'node' for (duck)type,\n\t// by testing nodeType, ecause 'document' is the 'parentNode' of 'body'\n\t// it is frequently sent to this function even\n\t// though it is not Element.\n\tvar getComputedStyle, style = {\n\t\t// summary:\n\t\t//\t\tThis module defines the core dojo DOM style API.\n\t};\n\tif(has(\"webkit\")){\n\t\tgetComputedStyle = function(/*DomNode*/ node){\n\t\t\tvar s;\n\t\t\tif(node.nodeType == 1){\n\t\t\t\tvar dv = node.ownerDocument.defaultView;\n\t\t\t\ts = dv.getComputedStyle(node, null);\n\t\t\t\tif(!s && node.style){\n\t\t\t\t\tnode.style.display = \"\";\n\t\t\t\t\ts = dv.getComputedStyle(node, null);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn s || {};\n\t\t};\n\t}else if(has(\"ie\") && (has(\"ie\") < 9 || has(\"quirks\"))){\n\t\tgetComputedStyle = function(node){\n\t\t\t// IE (as of 7) doesn't expose Element like sane browsers\n\t\t\t// currentStyle can be null on IE8!\n\t\t\treturn node.nodeType == 1 /* ELEMENT_NODE*/ && node.currentStyle ? node.currentStyle : {};\n\t\t};\n\t}else{\n\t\tgetComputedStyle = function(node){\n\t\t\tif(node.nodeType === 1 /* ELEMENT_NODE*/){\n\t\t\t\tvar dv = node.ownerDocument.defaultView,\n\t\t\t\t\tw = dv.opener ? dv : win.global.window;\n\t\t\t\t// MATHWORKS ADDED || {} on next line\n\t\t\t\treturn w.getComputedStyle(node, null) || {};\n\t\t\t}\n\t\t\treturn {};\n\t\t};\n\t}\n\tstyle.getComputedStyle = getComputedStyle;\n\t/*=====\n\tstyle.getComputedStyle = function(node){\n\t\t// summary:\n\t\t//\t\tReturns a \"computed style\" object.\n\t\t//\n\t\t// description:\n\t\t//\t\tGets a \"computed style\" object which can be used to gather\n\t\t//\t\tinformation about the current state of the rendered node.\n\t\t//\n\t\t//\t\tNote that this may behave differently on different browsers.\n\t\t//\t\tValues may have different formats and value encodings across\n\t\t//\t\tbrowsers.\n\t\t//\n\t\t//\t\tNote also that this method is expensive. Wherever possible,\n\t\t//\t\treuse the returned object.\n\t\t//\n\t\t//\t\tUse the dojo/dom-style.get() method for more consistent (pixelized)\n\t\t//\t\treturn values.\n\t\t//\n\t\t// node: DOMNode\n\t\t//\t\tA reference to a DOM node. Does NOT support taking an\n\t\t//\t\tID string for speed reasons.\n\t\t// example:\n\t\t//\t|\trequire([\"dojo/dom-style\", \"dojo/dom\"], function(domStyle, dom){\n\t\t//\t|\t\tdomStyle.getComputedStyle(dom.byId('foo')).borderWidth;\n\t\t//\t|\t});\n\t\t//\n\t\t// example:\n\t\t//\t\tReusing the returned object, avoiding multiple lookups:\n\t\t//\t|\trequire([\"dojo/dom-style\", \"dojo/dom\"], function(domStyle, dom){\n\t\t//\t|\t\tvar cs = domStyle.getComputedStyle(dom.byId(\"someNode\"));\n\t\t//\t|\t\tvar w = cs.width, h = cs.height;\n\t\t//\t|\t});\n\t\treturn; // CSS2Properties\n\t};\n\t=====*/\n\n\tvar toPixel;\n\tif(!has(\"ie\")){\n\t\ttoPixel = function(element, value){\n\t\t\t// style values can be floats, client code may want\n\t\t\t// to round for integer pixels.\n\t\t\treturn parseFloat(value) || 0;\n\t\t};\n\t}else{\n\t\ttoPixel = function(element, avalue){\n\t\t\tif(!avalue){ return 0; }\n\t\t\t// on IE7, medium is usually 4 pixels\n\t\t\tif(avalue == \"medium\"){ return 4; }\n\t\t\t// style values can be floats, client code may\n\t\t\t// want to round this value for integer pixels.\n\t\t\tif(avalue.slice && avalue.slice(-2) == 'px'){ return parseFloat(avalue); }\n\t\t\tvar s = element.style, rs = element.runtimeStyle, cs = element.currentStyle,\n\t\t\t\tsLeft = s.left, rsLeft = rs.left;\n\t\t\trs.left = cs.left;\n\t\t\ttry{\n\t\t\t\t// 'avalue' may be incompatible with style.left, which can cause IE to throw\n\t\t\t\t// this has been observed for border widths using \"thin\", \"medium\", \"thick\" constants\n\t\t\t\t// those particular constants could be trapped by a lookup\n\t\t\t\t// but perhaps there are more\n\t\t\t\ts.left = avalue;\n\t\t\t\tavalue = s.pixelLeft;\n\t\t\t}catch(e){\n\t\t\t\tavalue = 0;\n\t\t\t}\n\t\t\ts.left = sLeft;\n\t\t\trs.left = rsLeft;\n\t\t\treturn avalue;\n\t\t};\n\t}\n\tstyle.toPixelValue = toPixel;\n\t/*=====\n\tstyle.toPixelValue = function(node, value){\n\t\t// summary:\n\t\t//\t\tconverts style value to pixels on IE or return a numeric value.\n\t\t// node: DOMNode\n\t\t// value: String\n\t\t// returns: Number\n\t};\n\t=====*/\n\n\t// FIXME: there opacity quirks on FF that we haven't ported over. Hrm.\n\n\tvar astr = \"DXImageTransform.Microsoft.Alpha\";\n\tvar af = function(n, f){\n\t\ttry{\n\t\t\treturn n.filters.item(astr);\n\t\t}catch(e){\n\t\t\treturn f ? {} : null;\n\t\t}\n\t};\n\n\tvar _getOpacity =\n\t\thas(\"ie\") < 9 || (has(\"ie\") < 10 && has(\"quirks\")) ? function(node){\n\t\t\ttry{\n\t\t\t\treturn af(node).Opacity / 100; // Number\n\t\t\t}catch(e){\n\t\t\t\treturn 1; // Number\n\t\t\t}\n\t\t} :\n\t\tfunction(node){\n\t\t\treturn getComputedStyle(node).opacity;\n\t\t};\n\n\tvar _setOpacity =\n\t\thas(\"ie\") < 9 || (has(\"ie\") < 10 && has(\"quirks\")) ? function(/*DomNode*/ node, /*Number*/ opacity){\n\t\t\tif(opacity === \"\"){ opacity = 1; }\n\t\t\tvar ov = opacity * 100, fullyOpaque = opacity === 1;\n\n\t\t\t// on IE7 Alpha(Filter opacity=100) makes text look fuzzy so disable it altogether (bug #2661),\n\t\t\t// but still update the opacity value so we can get a correct reading if it is read later:\n\t\t\t// af(node, 1).Enabled = !fullyOpaque;\n\n\t\t\tif(fullyOpaque){\n\t\t\t\tnode.style.zoom = \"\";\n\t\t\t\tif(af(node)){\n\t\t\t\t\tnode.style.filter = node.style.filter.replace(\n\t\t\t\t\t\tnew RegExp(\"\\\\s*progid:\" + astr + \"\\\\([^\\\\)]+?\\\\)\", \"i\"), \"\");\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tnode.style.zoom = 1;\n\t\t\t\tif(af(node)){\n\t\t\t\t\taf(node, 1).Opacity = ov;\n\t\t\t\t}else{\n\t\t\t\t\tnode.style.filter += \" progid:\" + astr + \"(Opacity=\" + ov + \")\";\n\t\t\t\t}\n\t\t\t\taf(node, 1).Enabled = true;\n\t\t\t}\n\n\t\t\tif(node.tagName.toLowerCase() == \"tr\"){\n\t\t\t\tfor(var td = node.firstChild; td; td = td.nextSibling){\n\t\t\t\t\tif(td.tagName.toLowerCase() == \"td\"){\n\t\t\t\t\t\t_setOpacity(td, opacity);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn opacity;\n\t\t} :\n\t\tfunction(node, opacity){\n\t\t\treturn node.style.opacity = opacity;\n\t\t};\n\n\tvar _pixelNamesCache = {\n\t\tleft: true, top: true\n\t};\n\tvar _pixelRegExp = /margin|padding|width|height|max|min|offset/; // |border\n\tfunction _toStyleValue(node, type, value){\n\t\t//TODO: should we really be doing string case conversion here? Should we cache it? Need to profile!\n\t\ttype = type.toLowerCase();\n\n\t\t// Adjustments for IE and Edge\n\t\tif(value == \"auto\"){\n\t\t\tif(type == \"height\"){ return node.offsetHeight; }\n\t\t\tif(type == \"width\"){ return node.offsetWidth; }\n\t\t}\n\t\tif(type == \"fontweight\"){\n\t\t\tswitch(value){\n\t\t\t\tcase 700: return \"bold\";\n\t\t\t\tcase 400:\n\t\t\t\tdefault: return \"normal\";\n\t\t\t}\n\t\t}\n\n\t\tif(!(type in _pixelNamesCache)){\n\t\t\t_pixelNamesCache[type] = _pixelRegExp.test(type);\n\t\t}\n\t\treturn _pixelNamesCache[type] ? toPixel(node, value) : value;\n\t}\n\n\tvar _floatAliases = {cssFloat: 1, styleFloat: 1, \"float\": 1};\n\n\t// public API\n\n\tstyle.get = function getStyle(/*DOMNode|String*/ node, /*String?*/ name){\n\t\t// summary:\n\t\t//\t\tAccesses styles on a node.\n\t\t// description:\n\t\t//\t\tGetting the style value uses the computed style for the node, so the value\n\t\t//\t\twill be a calculated value, not just the immediate node.style value.\n\t\t//\t\tAlso when getting values, use specific style names,\n\t\t//\t\tlike \"borderBottomWidth\" instead of \"border\" since compound values like\n\t\t//\t\t\"border\" are not necessarily reflected as expected.\n\t\t//\t\tIf you want to get node dimensions, use `dojo/dom-geometry.getMarginBox()`,\n\t\t//\t\t`dojo/dom-geometry.getContentBox()` or `dojo/dom-geometry.getPosition()`.\n\t\t// node: DOMNode|String\n\t\t//\t\tid or reference to node to get style for\n\t\t// name: String?\n\t\t//\t\tthe style property to get\n\t\t// example:\n\t\t//\t\tPassing only an ID or node returns the computed style object of\n\t\t//\t\tthe node:\n\t\t//\t|\trequire([\"dojo/dom-style\", \"dojo/dom\"], function(domStyle, dom){\n\t\t//\t|\t\tdomStyle.get(\"thinger\");\n\t\t//\t|\t});\n\t\t// example:\n\t\t//\t\tPassing a node and a style property returns the current\n\t\t//\t\tnormalized, computed value for that property:\n\t\t//\t|\trequire([\"dojo/dom-style\", \"dojo/dom\"], function(domStyle, dom){\n\t\t//\t|\t\tdomStyle.get(\"thinger\", \"opacity\"); // 1 by default\n\t\t//\t|\t});\n\n\t\tvar n = dom.byId(node), l = arguments.length, op = (name == \"opacity\");\n\t\tif(l == 2 && op){\n\t\t\treturn _getOpacity(n);\n\t\t}\n\t\tname = _floatAliases[name] ? \"cssFloat\" in n.style ? \"cssFloat\" : \"styleFloat\" : name;\n\t\tvar s = style.getComputedStyle(n);\n\t\treturn (l == 1) ? s : _toStyleValue(n, name, s[name] || n.style[name]); /* CSS2Properties||String||Number */\n\t};\n\n\tstyle.set = function setStyle(/*DOMNode|String*/ node, /*String|Object*/ name, /*String?*/ value){\n\t\t// summary:\n\t\t//\t\tSets styles on a node.\n\t\t// node: DOMNode|String\n\t\t//\t\tid or reference to node to set style for\n\t\t// name: String|Object\n\t\t//\t\tthe style property to set in DOM-accessor format\n\t\t//\t\t(\"borderWidth\", not \"border-width\") or an object with key/value\n\t\t//\t\tpairs suitable for setting each property.\n\t\t// value: String?\n\t\t//\t\tIf passed, sets value on the node for style, handling\n\t\t//\t\tcross-browser concerns. When setting a pixel value,\n\t\t//\t\tbe sure to include \"px\" in the value. For instance, top: \"200px\".\n\t\t//\t\tOtherwise, in some cases, some browsers will not apply the style.\n\t\t//\n\t\t// example:\n\t\t//\t\tPassing a node, a style property, and a value changes the\n\t\t//\t\tcurrent display of the node and returns the new computed value\n\t\t//\t|\trequire([\"dojo/dom-style\"], function(domStyle){\n\t\t//\t|\t\tdomStyle.set(\"thinger\", \"opacity\", 0.5); // == 0.5\n\t\t//\t|\t});\n\t\t//\n\t\t// example:\n\t\t//\t\tPassing a node, an object-style style property sets each of the values in turn and returns the computed style object of the node:\n\t\t//\t|\trequire([\"dojo/dom-style\"], function(domStyle){\n\t\t//\t|\t\tdomStyle.set(\"thinger\", {\n\t\t//\t|\t\t\t\"opacity\": 0.5,\n\t\t//\t|\t\t\t\"border\": \"3px solid black\",\n\t\t//\t|\t\t\t\"height\": \"300px\"\n\t\t//\t|\t\t});\n\t\t//\t|\t});\n\t\t//\n\t\t// example:\n\t\t//\t\tWhen the CSS style property is hyphenated, the JavaScript property is camelCased.\n\t\t//\t\tfont-size becomes fontSize, and so on.\n\t\t//\t|\trequire([\"dojo/dom-style\", \"dojo/dom\"], function(domStyle, dom){\n\t\t//\t|\t\tdomStyle.set(\"thinger\",{\n\t\t//\t|\t\t\tfontSize:\"14pt\",\n\t\t//\t|\t\t\tletterSpacing:\"1.2em\"\n\t\t//\t|\t\t});\n\t\t//\t|\t});\n\t\t//\n\t\t// example:\n\t\t//\t\tdojo/NodeList implements .style() using the same syntax, omitting the \"node\" parameter, calling\n\t\t//\t\tdojo/dom-style.get() on every element of the list. See: `dojo/query` and `dojo/NodeList`\n\t\t//\t|\trequire([\"dojo/dom-style\", \"dojo/query\", \"dojo/NodeList-dom\"],\n\t\t//\t|\tfunction(domStyle, query){\n\t\t//\t|\t\tquery(\".someClassName\").style(\"visibility\",\"hidden\");\n\t\t//\t|\t\t// or\n\t\t//\t|\t\tquery(\"#baz > div\").style({\n\t\t//\t|\t\t\topacity:0.75,\n\t\t//\t|\t\t\tfontSize:\"13pt\"\n\t\t//\t|\t\t});\n\t\t//\t|\t});\n\n\t\tvar n = dom.byId(node), l = arguments.length, op = (name == \"opacity\");\n\t\tname = _floatAliases[name] ? \"cssFloat\" in n.style ? \"cssFloat\" : \"styleFloat\" : name;\n\t\tif(l == 3){\n\t\t\treturn op ? _setOpacity(n, value) : n.style[name] = value; // Number\n\t\t}\n\t\tfor(var x in name){\n\t\t\tstyle.set(node, x, name[x]);\n\t\t}\n\t\treturn style.getComputedStyle(n);\n\t};\n\n\treturn style;\n});\n","define([\n\t'./util',\n\t'../errors/RequestTimeoutError',\n\t'../errors/CancelError',\n\t'../_base/array',\n\t'../has!host-browser?../_base/window:',\n\t'../has!host-browser?dom-addeventlistener?:../on:'\n], function(util, RequestTimeoutError, CancelError, array, win, on){\n\t// avoid setting a timer per request. It degrades performance on IE\n\t// something fierece if we don't use unified loops.\n\tvar _inFlightIntvl = null,\n\t\t_inFlight = [];\n\n\tfunction watchInFlight(){\n\t\t// summary:\n\t\t//\t\tinternal method that checks each inflight XMLHttpRequest to see\n\t\t//\t\tif it has completed or if the timeout situation applies.\n\n\t\tvar now = +(new Date);\n\n\t\t// we need manual loop because we often modify _inFlight (and therefore 'i') while iterating\n\t\tfor(var i = 0, dfd; i < _inFlight.length && (dfd = _inFlight[i]); i++){\n\t\t\tvar response = dfd.response,\n\t\t\t\toptions = response.options;\n\t\t\tif((dfd.isCanceled && dfd.isCanceled()) || (dfd.isValid && !dfd.isValid(response))){\n\t\t\t\t_inFlight.splice(i--, 1);\n\t\t\t\twatch._onAction && watch._onAction();\n\t\t\t}else if(dfd.isReady && dfd.isReady(response)){\n\t\t\t\t_inFlight.splice(i--, 1);\n\t\t\t\tdfd.handleResponse(response);\n\t\t\t\twatch._onAction && watch._onAction();\n\t\t\t}else if(dfd.startTime){\n\t\t\t\t// did we timeout?\n\t\t\t\tif(dfd.startTime + (options.timeout || 0) < now){\n\t\t\t\t\t_inFlight.splice(i--, 1);\n\t\t\t\t\t// Cancel the request so the io module can do appropriate cleanup.\n\t\t\t\t\tdfd.cancel(new RequestTimeoutError('Timeout exceeded', response));\n\t\t\t\t\twatch._onAction && watch._onAction();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\twatch._onInFlight && watch._onInFlight(dfd);\n\n\t\tif(!_inFlight.length){\n\t\t\tclearInterval(_inFlightIntvl);\n\t\t\t_inFlightIntvl = null;\n\t\t}\n\t}\n\n\tfunction watch(dfd){\n\t\t// summary:\n\t\t//\t\tWatches the io request represented by dfd to see if it completes.\n\t\t// dfd: Deferred\n\t\t//\t\tThe Deferred object to watch.\n\t\t// response: Object\n\t\t//\t\tThe object used as the value of the request promise.\n\t\t// validCheck: Function\n\t\t//\t\tFunction used to check if the IO request is still valid. Gets the dfd\n\t\t//\t\tobject as its only argument.\n\t\t// ioCheck: Function\n\t\t//\t\tFunction used to check if basic IO call worked. Gets the dfd\n\t\t//\t\tobject as its only argument.\n\t\t// resHandle: Function\n\t\t//\t\tFunction used to process response. Gets the dfd\n\t\t//\t\tobject as its only argument.\n\t\tif(dfd.response.options.timeout){\n\t\t\tdfd.startTime = +(new Date);\n\t\t}\n\n\t\tif(dfd.isFulfilled()){\n\t\t\t// bail out if the deferred is already fulfilled\n\t\t\treturn;\n\t\t}\n\n\t\t_inFlight.push(dfd);\n\t\tif(!_inFlightIntvl){\n\t\t\t_inFlightIntvl = setInterval(watchInFlight, 50);\n\t\t}\n\n\t\t// handle sync requests separately from async:\n\t\t// http://bugs.dojotoolkit.org/ticket/8467\n\t\tif(dfd.response.options.sync){\n\t\t\twatchInFlight();\n\t\t}\n\t}\n\n\twatch.cancelAll = function cancelAll(){\n\t\t// summary:\n\t\t//\t\tCancels all pending IO requests, regardless of IO type\n\t\ttry{\n\t\t\tarray.forEach(_inFlight, function(dfd){\n\t\t\t\ttry{\n\t\t\t\t\tdfd.cancel(new CancelError('All requests canceled.'));\n\t\t\t\t}catch(e){}\n\t\t\t});\n\t\t}catch(e){}\n\t};\n\n\tif(win && on && win.doc.attachEvent){\n\t\t// Automatically call cancel all io calls on unload in IE\n\t\t// http://bugs.dojotoolkit.org/ticket/2357\n\t\ton(win.global, 'unload', function(){\n\t\t\twatch.cancelAll();\n\t\t});\n\t}\n\n\treturn watch;\n});\n","define(['./create'], function(create){\n\t// module:\n\t//\t\tdojo/errors/RequestError\n\n\t/*=====\n\t return function(){\n\t\t // summary:\n\t\t //\t\tTODOC\n\t };\n\t =====*/\n\n\treturn create(\"RequestError\", function(message, response){\n\t\tthis.response = response;\n\t});\n});\n","\"use strict\";\n\n// Copyright 2012-2020 The MathWorks, Inc.\ndefine(['dojo/_base/declare', 'dojo/_base/Deferred', 'dojo/_base/lang', 'mw-remote/RemoteEndPointsManager', 'mw-utils/Utils'], function (declare, Deferred, lang, RemoteEndPointsManager, Utils) {\n /**\n * Internal private class used by the RequestManager, ResponseManager, and FaultManager.\n */\n return declare([], {\n constructor: function constructor(args) {\n args = args || {};\n this.requestMessages = args.requestMessages || {};\n this.responseMessages = args.responseMessages || {};\n this.context = args.context;\n this.computeToken = args.computeToken;\n this.uuidClassifierMap = args.uuidClassifierMap || {};\n this.endPointName = args.endPointName || null;\n this.allowedMessages = args.allowedMessages || [];\n this.ignoreMessageTypes = args.ignoreMessageTypes || [];\n this.sendMessage = args.sendMessage;\n },\n\n /**\n * Add a request message to the transaction.\n * @param type Type of message.\n * @param value A message object or array of message objects.\n * @param classifier An optional string to classifier this particular message.\n */\n addRequestMessage: function addRequestMessage(type, value, classifier) {\n if (!value) {\n return;\n }\n\n var isMessageContainerBased = RemoteEndPointsManager.isEndpointMessageContainerBased(this.endPointName);\n\n if (!this.requestMessages[type]) {\n this.requestMessages[type] = [];\n }\n\n if (lang.isArray(value)) {\n value.forEach(function (val) {\n this.addRequestMessage(type, val, classifier);\n }, this);\n } else {\n if (!isMessageContainerBased) {\n this.requestMessages[type] = value;\n } else {\n value.uuid = value.uuid || this._generateUuid();\n\n if (classifier) {\n this.uuidClassifierMap[value.uuid] = classifier;\n }\n\n this.requestMessages[type].push(value);\n }\n }\n\n this.requestMessages = this._filterMessages(this.requestMessages);\n },\n\n /**\n * Filter out disallowed messages. This is useful for input mode, and while unauthorized.\n * @param originalMessages\n * @return Filtered messages\n */\n _filterMessages: function _filterMessages(originalMessages) {\n var filteredMessages = {};\n this.getRequestMessageTypes().forEach(function (type) {\n if (this.allowedMessages.length === 0 || this.allowedMessages.indexOf(type) >= 0) {\n filteredMessages[type] = originalMessages[type];\n }\n }, this);\n return filteredMessages;\n },\n\n /**\n * Get an array of response message types in this transaction. This is useful for iteration\n * through responses.\n */\n getResponseMessageTypes: function getResponseMessageTypes() {\n var type;\n var types = [];\n\n for (type in this.responseMessages) {\n if (this.responseMessages.hasOwnProperty(type)) {\n types.push(type);\n }\n }\n\n return types;\n },\n\n /**\n * Get an array of request message type\n */\n getRequestMessageTypes: function getRequestMessageTypes() {\n var type;\n var types = [];\n\n for (type in this.requestMessages) {\n if (this.requestMessages.hasOwnProperty(type)) {\n types.push(type);\n }\n }\n\n return types;\n },\n\n /**\n * Get the message classifier for a particular message (request or response).\n * @param message Message from this transaction.\n */\n getMessageClassifier: function getMessageClassifier(message) {\n if (message && message.uuid && this.uuidClassifierMap.hasOwnProperty(message.uuid)) {\n return this.uuidClassifierMap[message.uuid];\n } else {\n return '';\n }\n },\n\n /**\n * Private function to send a transaction. It handles converting the data into the type\n * required by the transport (String). It also sets the Deferred into the transaction.\n */\n send: function send() {\n this._removeEmptyMessages();\n\n if (!this._isEmpty(this.requestMessages)) {\n this.startTime = new Date().getTime();\n this.deferred = this._doSend(this._getRequest(this.requestMessages));\n this.deferred.addCallback(this, this._processResponse);\n this.deferred.addErrback(this, this._processFault);\n } else {\n this.deferred = new Deferred();\n this.deferred.callback();\n }\n },\n addIgnoreMessageType: function addIgnoreMessageType(type, classifier) {\n if (this.getRequestMessageTypes().indexOf(type) > -1) {\n if (classifier) {\n var uuid;\n\n for (uuid in this.uuidClassifierMap) {\n if (this.uuidClassifierMap.hasOwnProperty(uuid) && classifier && this.uuidClassifierMap[uuid] === classifier) {\n this.ignoreMessageTypes.push(type + ':' + classifier);\n }\n }\n } else {\n this.ignoreMessageTypes.push(type);\n }\n }\n },\n // todo: Move this check to an early stage\n _removeEmptyMessages: function _removeEmptyMessages() {\n if (!this._isEmpty(this.requestMessages)) {\n var messageType;\n\n for (messageType in this.requestMessages) {\n if (this.requestMessages.hasOwnProperty(messageType)) {\n if (lang.isArray(this.requestMessages[messageType]) && Utils.getArrayLength(this.requestMessages[messageType]) === 0) {\n delete this.requestMessages[messageType];\n }\n }\n }\n }\n },\n\n /**\n * Utility function to determine if an object is empty (has no enumerable properties)\n */\n _isEmpty: function _isEmpty(obj) {\n var prop;\n\n for (prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n return false;\n }\n }\n\n return true;\n },\n _generateUuid: function _generateUuid() {\n return Utils.generateUuid();\n }\n });\n});\n//# sourceMappingURL=Transaction.js.map\n","define([\"mw-deprecation-utils/deprecation\"], function (deprecation) {\n \"use strict\";\n\n var _exports = {};\n /**\n * # mw-utils/Utils\n *\n * This module defines a series of utility functions, mainly surrounding Array and Set operations.\n *\n * @module mw-utils/Utils\n * @copyright Copyright 2011-2024 The MathWorks, Inc.\n */\n _exports.default = {\n /**\n * @static\n * @description Generates a random string of 8 characters, where each character is a valid\n * hexadecimal digit (0-9, A-F). Alphabetic characters are capitalized. Note this does not\n * generate a standard UUID v4 string.\n *\n * For this 32-bit UUID, one would need to generate about 9300 UUIDs to have a 1% probability\n * of at least one collision.\n *\n * > **Important Note:** This function makes use of Math.random() to generate the random UUIDs for simplicity\n * > and performance. Please DO NOT use this UUID generator for any applications that require\n * > cryptographic security.\n * @returns {string} The new UUID string\n * @example\n * let uuid = Utils.generateUuid() // -> returns a string like 'A89B05F3'\n */\n generateUuid: function () {\n const template = 'xxxxxxxx';\n return this._uuidFromTemplate(template).toUpperCase();\n },\n /**\n * @static\n * @description Generates a random, 36-character, standard UUID v4 string. This string\n * is of the form 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.\n *\n * For this 122-bit UUID (128 bit, but 4 bits reserved for the 4 and 2 bits reserved for\n * the \"variant\"), one would need to generate about 327 quadrillion (3.27 * 10^17) UUIDs\n * to have a 1% probability of at least one collision.\n *\n * > **Important Note:** This function makes use of Math.random() to generate the random UUIDs for simplicity\n * > and performance. Please DO NOT use this UUID generator for any applications that require\n * > cryptographic security.\n * @returns {string} The new UUID string\n * @example\n * let uuid = Utils.generateUUIDv4() // -> returns a string like 'e7546e1c-a919-4805-9a20-48ca0dbb48e5'\n */\n generateUUIDv4: function () {\n const template = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx';\n return this._uuidFromTemplate(template);\n },\n // Given a template string of x's and y's, generate a UUID by randomly generating hex\n // values to replace the x's and y's.\n _uuidFromTemplate: function (template) {\n return template.replace(/[xy]/g, function (c) {\n // Generate a random integer from 0-15\n const r = Math.random() * 16 | 0;\n // x's use the random integer, y's have their integer mutated: (int)%4+8\n const v = c === 'x' ? r : r & 0x3 | 0x8;\n return v.toString(16);\n });\n },\n /**\n * @static\n * @description Returns true if the given object is a dojo ImageData object or if it has\n * the expected width, height, and data properties, false otherwise.\n * @param {object} obj - The object to test\n * @returns {boolean}\n */\n isImageData: function (obj) {\n // Firefox does not have an ImageData class for data returned by getImageData\n return !!obj && (typeof window === 'object' && window.ImageData && obj instanceof window.ImageData || Object.prototype.hasOwnProperty.call(obj, 'width') && Object.prototype.hasOwnProperty.call(obj, 'height') && Object.prototype.hasOwnProperty.call(obj, 'data'));\n },\n /**\n * @static\n * @description Checks if an object is an array without making use of instanceof. instanceof\n * can yield unexpected results when used with multiple contexts, e.g. passing objects between\n * iframes.\n *\n * > **This API is deprecated. Use [Array.isArray()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray)\n * > instead.**\n *\n * @deprecated (g1444368) Use Array.isArray() instead.\n * @param {*} obj - The object to check\n * @returns {boolean} True if obj is an Array, false otherwise\n */\n isArray: function (obj) {\n deprecation.deprecated({\n deprecated: {\n module: 'mw-utils/Utils',\n method: 'isArray'\n },\n geckNumber: 1444368\n });\n return Array.isArray(obj);\n },\n /**\n * @static\n * @description Get the number of non-undefined array elements. If the provided object\n * is not an Array, returns false.\n * @param {any[]} arr - The array whose elements we wish to count\n * @returns {number|boolean} If arr is an Array, returns the number of non-undefined\n * elements in arr. Returns false otherwise.\n */\n getArrayLength: function (arr) {\n let length = 0;\n if (!Array.isArray(arr)) {\n return false;\n }\n arr.forEach(function (item) {\n if (item) {\n length += 1;\n }\n });\n return length;\n },\n /**\n * @static\n * @description Returns true if the given text has only whitespace characters. `LINE_FEED`,\n * `CARRIAGE_RETURN`, and `TAB` are treated as whitespace characters. Empty string is treated\n * as non whitespace.\n *\n * @param {string} text - A string of characters\n * @returns {boolean} True if the text is whitespace, false otherwise.\n */\n isWhitespace: function (text) {\n const regex = /^\\s+$/;\n return regex.test(text);\n },\n /**\n * @static\n * @description Removes leading and trailing newline characters from string.\n * @param {string} text - A string of characters\n * @returns {string} The input text without leading or trailing newline characters.\n */\n removeSurroundingNewLines: function (text) {\n while (text.charAt(0) === '\\n') {\n text = text.substring(1);\n }\n while (text.charAt(text.length - 1) === '\\n') {\n text = text.substring(0, text.length - 1);\n }\n return text;\n },\n /**\n * @static\n * @description Finds the first element of array2 that is not an element of array1.\n * @param {any[]} array1 - Array to check elements against\n * @param {any[]} array2 - Array to find unique element within\n * @returns {*|null} First unique element of array2, null if no unique elements\n */\n getFirstUniqueElement: function (array1, array2) {\n let unique = null;\n array2.some(function (elem) {\n if (array1.indexOf(elem) === -1) {\n unique = elem;\n return true;\n }\n return false;\n });\n return unique;\n },\n /**\n * @static\n * @description Finds the union of the two sets of string words (provided either as Arrays\n * or Strings separated by spaces) and returns a set of unique words\n * @param {string|string[]} set1 - The first set of strings, e.g. \"word1\" or \"word1 word2\"\n * | [\"word1\"] or [\"word1\", \"word2\"]\n * @param {string|string[]} set2 - The second set of strings, e.g. \"word1\" or \"word1 word2\"\n * | [\"word1\"] or [\"word1\", \"word2\"]\n * @param {boolean} [asString] - Set to true if the set union should be returned as a\n * space-separated String. If set to false or unspecified, set union is returned as\n * an Array.\n * @returns {string|string[]} Unique set of words that were contained in either set\n */\n unionOfWordSets: function (set1, set2, asString) {\n set1 = this._stringToArray(set1);\n set2 = this._stringToArray(set2);\n const union = this.unionOfArrays(set1, set2);\n return asString ? union.join(' ') : union;\n },\n /**\n * @static\n * @description Finds the intersection of the two sets of string words (provided either\n * as Arrays or Strings separated by spaces) and returns a set of unique words\n * @param {string|string[]} set1 - The first set of strings, e.g. \"word1\" or \"word1 word2\"\n * | [\"word1\"] or [\"word1\", \"word2\"]\n * @param {string|string[]} set2 - The second set of strings, e.g. \"word1\" or \"word1 word2\"\n * | [\"word1\"] or [\"word1\", \"word2\"]\n * @param {boolean} [asString] - Set to true if the set intersection should be returned as a\n * space-separated String. If set to false or unspecified, set intersection is returned as\n * an Array.\n * @returns {string|string[]} Unique set of words that were contained in both sets\n */\n intersectionOfWordSets: function (set1, set2, asString) {\n set1 = this._stringToArray(set1);\n set2 = this._stringToArray(set2);\n const intersection = this.intersectionOfArrays(set1, set2);\n return asString ? intersection.join(' ') : intersection;\n },\n /**\n * @static\n * @description Finds the difference of of the two sets of string words (the complement of set2\n * in set1, all elements that are in set1 that are not in set2). Returns a set of unique words\n * @param {string|string[]} set1 - The first set of strings, e.g. \"word1\" or \"word1 word2\"\n * | [\"word1\"] or [\"word1\", \"word2\"]\n * @param {string|string[]} set2 - The second set of strings, e.g. \"word1\" or \"word1 word2\"\n * | [\"word1\"] or [\"word1\", \"word2\"]\n * @param {boolean} [asString] - Set to true if the set difference should be returned as a\n * space-separated String. If set to false or unspecified, set difference is returned as\n * an Array.\n * @returns {string|string[]} Unique set of words that were contained only in set1\n */\n differenceOfWordSets: function (set1, set2, asString) {\n set1 = this._stringToArray(set1);\n set2 = this._stringToArray(set2);\n const difference = this.unique(this.differenceOfArrays(set1, set2));\n return asString ? difference.join(' ') : difference;\n },\n /**\n * @static\n * @description Finds the union of the two Arrays (elements that are in either array\n * and duplicates are only represented once)\n * @param {any[]} arr1 - The first array\n * @param {any[]} arr2 - The second array\n * @returns {any[]} The union of the two arrays\n */\n unionOfArrays: function (arr1, arr2) {\n return this.unique(arr1.concat(arr2));\n },\n /**\n * @static\n * @description Finds the intersection of the two Arrays (elements that are contained\n * in both arrays and duplicates are only represented once)\n * @param {any[]} arr1 - The first array\n * @param {any[]} arr2 - The second array\n * @returns {any[]} The intersection of the two arrays\n */\n intersectionOfArrays: function (arr1, arr2) {\n return this.nonunique(arr1.concat(arr2));\n },\n /**\n * @static\n * @description Finds the difference of arr2 in arr1 (elements that are in arr1 that are\n * not in arr2)\n * @param {any[]} arr1 - The first array\n * @param {any[]} arr2 - The second array\n * @returns {any[]} The difference of the two arrays\n */\n differenceOfArrays: function (arr1, arr2) {\n if (window.Map === undefined) {\n // g1512937 Not all clients have support for the Map API.\n // Fall back to a slower implementation.\n return this._legacyDifferenceOfArrays(arr1, arr2);\n }\n let isInBothArrays, elementInArray1, i;\n const mapOfArray2 = new Map();\n const result = [];\n\n // Convert arr2 into a map\n for (i = 0; i < arr2.length; i++) {\n mapOfArray2.set(arr2[i], null);\n }\n\n // Push elements in arr1, but not in arr2, into the result\n for (i = 0; i < arr1.length; i++) {\n elementInArray1 = arr1[i];\n isInBothArrays = mapOfArray2.has(elementInArray1);\n if (!isInBothArrays) {\n result.push(elementInArray1);\n }\n }\n return result;\n },\n /**\n * @static\n * @description Finds the difference of arr2 in arr1 (elements that are in arr1 that are\n * not in arr2). This is a slower implementation compared to\n * [differenceOfArrays]{@link module:mw-utils/Utils.differenceOfArrays} that does not make use\n * of the Map API.\n * @param {any[]} arr1 - The first array\n * @param {any[]} arr2 - The second array\n * @returns {any[]} The difference of the two arrays\n */\n _legacyDifferenceOfArrays: function (arr1, arr2) {\n return this.unique(arr1.filter(function (elem) {\n return arr2.indexOf(elem) === -1;\n }));\n },\n /**\n * @static\n * @description Returns a shallow copy of the given array with all duplicate elements\n * removed.\n * @param {any[]} array\n * @returns {any[]}\n */\n unique: function (array) {\n return array.filter(function (elem, idx) {\n return array.indexOf(elem) === idx;\n });\n },\n /**\n * @static\n * @description Returns a shallow copy of the given array with all unique elements removed.\n * Note that the resulting array will have duplicates removed. For example, nonunique([1, 2, 2, 3])\n * will return [2].\n * @param {any[]} array\n * @returns {any[]}\n */\n nonunique: function (array) {\n return this.unique(array.filter(function (elem, idx) {\n return array.indexOf(elem) !== idx;\n }));\n },\n /**\n * @static\n * @description Performs element-wise equality check on two arrays. Will always be true when `===`\n * is true. Can also return true even when `===` returns `false`. Default element comparator is `===`.\n * @param {any[]} array1 - The first array\n * @param {any[]} array2 - The second array\n * @param {Function} [compareFunction] Optional comparison function that accepts two elements,\n * and returns true if the elements are \"equal\", false if not.\n * @returns {boolean}\n */\n arrayEquals: function (array1, array2, compareFunction) {\n if (array1 === array2) {\n return true;\n }\n if (array1.length !== array2.length) {\n return false;\n }\n if (!compareFunction) {\n compareFunction = function (elem1, elem2) {\n return elem1 === elem2;\n };\n }\n for (let i = 0, len = array1.length; i < len; i++) {\n if (!compareFunction(array1[i], array2[i])) {\n return false;\n }\n }\n // if we get here, all elements were the same\n return true;\n },\n /**\n * @static\n * @description Returns a shallow copy of the given array with all \"empty\" elements\n * removed. \"Empty\" elements are empty strings and null or undefined values.\n * @param {any[]} array\n * @returns {any[]}\n */\n removeEmptyElements: function (array) {\n return array.filter(function (elem) {\n return !(elem === '' || elem === null || elem === undefined);\n });\n },\n _stringToArray: function (str) {\n if (!this._isString(str)) {\n return str;\n }\n return this.removeEmptyElements(str.split(' '));\n },\n _isString: function (str) {\n return typeof str === 'string' || str instanceof String;\n }\n };\n return _exports.default;\n});\n//# sourceMappingURL=Utils.js.map\n","\"use strict\";\n\ndefine(['mw-remote/RemoteEndPointsManager', 'dojo/_base/Deferred'], function (RemoteEndPointsManager, Deferred) {\n var sendDataUsingIFrame = function sendDataUsingIFrame(data, endPoint, options) {\n var iframeProxyClient = RemoteEndPointsManager.getIframeProxyClientForEndPoint(endPoint);\n return iframeProxyClient.sendMessage(data, RemoteEndPointsManager.getRemoteUrlForEndPoint(endPoint), options);\n };\n /**\n * Utility function to select the implementation to be used to send data to the server\n * Determines whether or not IFrame is needed for a partciular endpoint.\n */\n\n\n return {\n /**\n * This method is used to send thoptionse data. It fetches iframeProxyClient from the\n * RemoteEndPointsManager and\n * sends the message.\n * @param {object} data - data to send\n * @param {object} endPoint - endPoint to which the data is to be sent\n * @param {object} options - optional headers\n * @return {*} a promise\n */\n sendPayload: function sendPayload(data, endPoint, options) {\n var messageResponse = new Deferred();\n var result = sendDataUsingIFrame(data, endPoint, options);\n result.then(function (responseData) {\n messageResponse.resolve(responseData);\n });\n return messageResponse;\n }\n };\n});\n//# sourceMappingURL=SendMessageUtil.js.map\n","/*\r\n * (C) Copyright HCL Technologies Ltd. 2019\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\ndefine([], function() {\r\n\treturn function(ldr, name, req, async) {\r\n\t\tvar resolveFn, result, resultSet;\r\n\t\tldr.load(name, req, function(data) {\r\n\t\t\tresult = data;\r\n\t\t\tresultSet = true;\r\n\t\t\tif (resolveFn) {\r\n\t\t\t\tresolveFn(data);\r\n\t\t\t}\r\n\t\t}, {isBuild:true});\r\n\t\tif (resultSet) {\r\n\t\t\treturn result;\r\n\t\t} else if (!async) {\r\n\t\t\tthrow new Error(name + ' unavailable');\r\n\t\t}\r\n\t\tresult = new Promise(function(resolve) {\r\n\t\t\tresolveFn = resolve;\r\n\t\t});\r\n\t\tresult.__DOJO_WEBPACK_DEFINE_PROMISE__ = true;\r\n\t\treturn result;\r\n\t};\r\n});\r\n","define([], function () {\n \"use strict\";\n\n var _exports = {};\n /*\n * Copyright (c) 2008-2022 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n /* CometD Version ${project.version} */\n\n /**\n * Browsers may throttle the Window scheduler,\n * so we may replace it with a Worker scheduler.\n */\n function Scheduler() {\n let _ids = 0;\n const _tasks = {};\n this.register = funktion => {\n const id = ++_ids;\n _tasks[id] = funktion;\n return id;\n };\n this.unregister = id => {\n const funktion = _tasks[id];\n delete _tasks[id];\n return funktion;\n };\n this.setTimeout = (funktion, delay) => window.setTimeout(funktion, delay);\n this.clearTimeout = id => {\n window.clearTimeout(id);\n };\n }\n\n /**\n * The scheduler code that will run in the Worker.\n * Workers have a built-in `self` variable similar to `window`.\n */\n function WorkerScheduler() {\n const _tasks = {};\n self.onmessage = e => {\n const cmd = e.data;\n const id = _tasks[cmd.id];\n switch (cmd.type) {\n case 'setTimeout':\n _tasks[cmd.id] = self.setTimeout(() => {\n delete _tasks[cmd.id];\n self.postMessage({\n id: cmd.id\n });\n }, cmd.delay);\n break;\n case 'clearTimeout':\n delete _tasks[cmd.id];\n if (id) {\n self.clearTimeout(id);\n }\n break;\n default:\n throw 'Unknown command ' + cmd.type;\n }\n };\n }\n\n /**\n * Utility functions.\n */\n const Utils = {\n isString: value => {\n if (value === undefined || value === null) {\n return false;\n }\n return typeof value === 'string' || value instanceof String;\n }\n };\n\n /**\n * A registry for transports used by the CometD object.\n */\n function TransportRegistry() {\n let _types = [];\n let _transports = {};\n this.getTransportTypes = () => _types.slice(0);\n this.findTransportTypes = (version, crossDomain, url) => {\n const result = [];\n for (let i = 0; i < _types.length; ++i) {\n const type = _types[i];\n if (_transports[type].accept(version, crossDomain, url) === true) {\n result.push(type);\n }\n }\n return result;\n };\n this.negotiateTransport = (types, version, crossDomain, url) => {\n for (let i = 0; i < _types.length; ++i) {\n const type = _types[i];\n for (let j = 0; j < types.length; ++j) {\n if (type === types[j]) {\n const transport = _transports[type];\n if (transport.accept(version, crossDomain, url) === true) {\n return transport;\n }\n }\n }\n }\n return null;\n };\n this.add = (type, transport, index) => {\n let existing = false;\n for (let i = 0; i < _types.length; ++i) {\n if (_types[i] === type) {\n existing = true;\n break;\n }\n }\n if (!existing) {\n if (typeof index !== 'number') {\n _types.push(type);\n } else {\n _types.splice(index, 0, type);\n }\n _transports[type] = transport;\n }\n return !existing;\n };\n this.find = type => {\n for (let i = 0; i < _types.length; ++i) {\n if (_types[i] === type) {\n return _transports[type];\n }\n }\n return null;\n };\n this.remove = type => {\n for (let i = 0; i < _types.length; ++i) {\n if (_types[i] === type) {\n _types.splice(i, 1);\n const transport = _transports[type];\n delete _transports[type];\n return transport;\n }\n }\n return null;\n };\n this.clear = () => {\n _types = [];\n _transports = {};\n };\n this.reset = init => {\n for (let i = 0; i < _types.length; ++i) {\n _transports[_types[i]].reset(init);\n }\n };\n }\n\n /**\n * Base object with the common functionality for transports.\n */\n function Transport() {\n let _type;\n let _cometd;\n let _url;\n\n /**\n * Function invoked just after a transport has been successfully registered.\n * @param type the type of transport (for example 'long-polling')\n * @param cometd the cometd object this transport has been registered to\n * @see #unregistered()\n */\n this.registered = (type, cometd) => {\n _type = type;\n _cometd = cometd;\n };\n\n /**\n * Function invoked just after a transport has been successfully unregistered.\n * @see #registered(type, cometd)\n */\n this.unregistered = () => {\n _type = null;\n _cometd = null;\n };\n this._notifyTransportTimeout = function (messages) {\n const callbacks = _cometd._getTransportListeners('timeout');\n if (callbacks) {\n for (let i = 0; i < callbacks.length; ++i) {\n const listener = callbacks[i];\n try {\n const result = listener.call(this, messages);\n if (typeof result === 'number' && result > 0) {\n return result;\n }\n } catch (x) {\n this._info('Exception during execution of transport listener', listener, x);\n }\n }\n }\n return 0;\n };\n this._debug = function () {\n _cometd._debug.apply(_cometd, arguments);\n };\n this._info = function () {\n _cometd._info.apply(_cometd, arguments);\n };\n this._mixin = function () {\n return _cometd._mixin.apply(_cometd, arguments);\n };\n this.getConfiguration = () => _cometd.getConfiguration();\n this.getAdvice = () => _cometd.getAdvice();\n this.setTimeout = (funktion, delay) => _cometd.setTimeout(funktion, delay);\n this.clearTimeout = id => {\n _cometd.clearTimeout(id);\n };\n this.convertToJSON = function (messages) {\n const maxSize = this.getConfiguration().maxSendBayeuxMessageSize;\n let result = '[';\n for (let i = 0; i < messages.length; ++i) {\n if (i > 0) {\n result += ',';\n }\n const message = messages[i];\n const json = JSON.stringify(message);\n if (json.length > maxSize) {\n throw 'maxSendBayeuxMessageSize ' + maxSize + ' exceeded';\n }\n result += json;\n }\n result += ']';\n return result;\n };\n\n /**\n * Converts the given response into an array of bayeux messages\n * @param response the response to convert\n * @return an array of bayeux messages obtained by converting the response\n */\n this.convertToMessages = function (response) {\n if (Utils.isString(response)) {\n try {\n return JSON.parse(response);\n } catch (x) {\n this._debug('Could not convert to JSON the following string', '\"' + response + '\"');\n throw x;\n }\n }\n if (Array.isArray(response)) {\n return response;\n }\n if (response === undefined || response === null) {\n return [];\n }\n if (response instanceof Object) {\n return [response];\n }\n throw 'Conversion Error ' + response + ', typeof ' + typeof response;\n };\n\n /**\n * Returns whether this transport can work for the given version and cross domain communication case.\n * @param version a string indicating the transport version\n * @param crossDomain a boolean indicating whether the communication is cross domain\n * @param url the URL to connect to\n * @return true if this transport can work for the given version and cross domain communication case,\n * false otherwise\n */\n this.accept = (version, crossDomain, url) => {\n throw 'Abstract';\n };\n\n /**\n * Returns the type of this transport.\n * @see #registered(type, cometd)\n */\n this.getType = () => _type;\n this.getURL = () => _url;\n this.setURL = url => {\n _url = url;\n };\n this.send = (envelope, metaConnect) => {\n throw 'Abstract';\n };\n this.reset = function (init) {\n this._debug('Transport', _type, 'reset', init ? 'initial' : 'retry');\n };\n this.abort = function () {\n this._debug('Transport', _type, 'aborted');\n };\n this.toString = function () {\n return this.getType();\n };\n }\n Transport.derive = baseObject => {\n function F() {}\n F.prototype = baseObject;\n return new F();\n };\n\n /**\n * Base object with the common functionality for transports based on requests.\n * The key responsibility is to allow at most 2 outstanding requests to the server,\n * to avoid that requests are sent behind a long poll.\n * To achieve this, we have one reserved request for the long poll, and all other\n * requests are serialized one after the other.\n */\n function RequestTransport() {\n const _super = new Transport();\n const _self = Transport.derive(_super);\n let _requestIds = 0;\n let _metaConnectRequest = null;\n let _requests = [];\n let _envelopes = [];\n function _coalesceEnvelopes(envelope) {\n while (_envelopes.length > 0) {\n const envelopeAndRequest = _envelopes[0];\n const newEnvelope = envelopeAndRequest[0];\n const newRequest = envelopeAndRequest[1];\n if (newEnvelope.url === envelope.url && newEnvelope.sync === envelope.sync) {\n _envelopes.shift();\n envelope.messages = envelope.messages.concat(newEnvelope.messages);\n this._debug('Coalesced', newEnvelope.messages.length, 'messages from request', newRequest.id);\n continue;\n }\n break;\n }\n }\n function _onTransportTimeout(envelope, request, delay) {\n const result = this._notifyTransportTimeout(envelope.messages);\n if (result > 0) {\n this._debug('Transport', this.getType(), 'extended waiting for message replies of request', request.id, ':', result, 'ms');\n request.timeout = this.setTimeout(() => {\n _onTransportTimeout.call(this, envelope, request, delay + result);\n }, result);\n } else {\n request.expired = true;\n const errorMessage = 'Transport ' + this.getType() + ' expired waiting for message replies of request ' + request.id + ': ' + delay + ' ms';\n const failure = {\n reason: errorMessage\n };\n const xhr = request.xhr;\n failure.httpCode = this.xhrStatus(xhr);\n this.abortXHR(xhr);\n this._debug(errorMessage);\n this.complete(request, false, request.metaConnect);\n envelope.onFailure(xhr, envelope.messages, failure);\n }\n }\n function _transportSend(envelope, request) {\n if (this.transportSend(envelope, request)) {\n request.expired = false;\n if (!envelope.sync) {\n let delay = this.getConfiguration().maxNetworkDelay;\n if (request.metaConnect === true) {\n delay += this.getAdvice().timeout;\n }\n this._debug('Transport', this.getType(), 'started waiting for message replies of request', request.id, ':', delay, 'ms');\n request.timeout = this.setTimeout(() => {\n _onTransportTimeout.call(this, envelope, request, delay);\n }, delay);\n }\n }\n }\n function _queueSend(envelope) {\n const requestId = ++_requestIds;\n const request = {\n id: requestId,\n metaConnect: false,\n envelope: envelope\n };\n\n // Consider the /meta/connect requests which should always be present.\n if (_requests.length < this.getConfiguration().maxConnections - 1) {\n _requests.push(request);\n _transportSend.call(this, envelope, request);\n } else {\n this._debug('Transport', this.getType(), 'queueing request', requestId, 'envelope', envelope);\n _envelopes.push([envelope, request]);\n }\n }\n function _metaConnectComplete(request) {\n const requestId = request.id;\n this._debug('Transport', this.getType(), '/meta/connect complete, request', requestId);\n if (_metaConnectRequest !== null && _metaConnectRequest.id !== requestId) {\n throw '/meta/connect request mismatch, completing request ' + requestId;\n }\n _metaConnectRequest = null;\n }\n function _complete(request, success) {\n const index = _requests.indexOf(request);\n // The index can be negative if the request has been aborted\n if (index >= 0) {\n _requests.splice(index, 1);\n }\n if (_envelopes.length > 0) {\n const envelopeAndRequest = _envelopes.shift();\n const nextEnvelope = envelopeAndRequest[0];\n const nextRequest = envelopeAndRequest[1];\n this._debug('Transport dequeued request', nextRequest.id);\n if (success) {\n if (this.getConfiguration().autoBatch) {\n _coalesceEnvelopes.call(this, nextEnvelope);\n }\n _queueSend.call(this, nextEnvelope);\n this._debug('Transport completed request', request.id, nextEnvelope);\n } else {\n // Keep the semantic of calling callbacks asynchronously.\n this.setTimeout(() => {\n this.complete(nextRequest, false, nextRequest.metaConnect);\n const failure = {\n reason: 'Previous request failed'\n };\n const xhr = nextRequest.xhr;\n failure.httpCode = this.xhrStatus(xhr);\n nextEnvelope.onFailure(xhr, nextEnvelope.messages, failure);\n }, 0);\n }\n }\n }\n _self.complete = function (request, success, metaConnect) {\n if (metaConnect) {\n _metaConnectComplete.call(this, request);\n } else {\n _complete.call(this, request, success);\n }\n };\n\n /**\n * Performs the actual send depending on the transport type details.\n * @param envelope the envelope to send\n * @param request the request information\n * @return {boolean} whether the send succeeded\n */\n _self.transportSend = (envelope, request) => {\n throw 'Abstract';\n };\n _self.transportSuccess = function (envelope, request, responses) {\n if (!request.expired) {\n this.clearTimeout(request.timeout);\n this._debug('Transport', this.getType(), 'cancelled waiting for message replies');\n this.complete(request, true, request.metaConnect);\n if (responses && responses.length > 0) {\n envelope.onSuccess(responses);\n } else {\n envelope.onFailure(request.xhr, envelope.messages, {\n httpCode: 204\n });\n }\n }\n };\n _self.transportFailure = function (envelope, request, failure) {\n if (!request.expired) {\n this.clearTimeout(request.timeout);\n this._debug('Transport', this.getType(), 'cancelled waiting for failed message replies');\n this.complete(request, false, request.metaConnect);\n envelope.onFailure(request.xhr, envelope.messages, failure);\n }\n };\n function _metaConnectSend(envelope) {\n if (_metaConnectRequest !== null) {\n throw 'Concurrent /meta/connect requests not allowed, request id=' + _metaConnectRequest.id + ' not yet completed';\n }\n const requestId = ++_requestIds;\n this._debug('Transport', this.getType(), '/meta/connect send, request', requestId, 'envelope', envelope);\n const request = {\n id: requestId,\n metaConnect: true,\n envelope: envelope\n };\n _transportSend.call(this, envelope, request);\n _metaConnectRequest = request;\n }\n _self.send = function (envelope, metaConnect) {\n if (metaConnect) {\n _metaConnectSend.call(this, envelope);\n } else {\n _queueSend.call(this, envelope);\n }\n };\n _self.abort = function () {\n _super.abort();\n for (let i = 0; i < _requests.length; ++i) {\n const request = _requests[i];\n if (request) {\n this._debug('Aborting request', request);\n if (!this.abortXHR(request.xhr)) {\n this.transportFailure(request.envelope, request, {\n reason: 'abort'\n });\n }\n }\n }\n const metaConnectRequest = _metaConnectRequest;\n if (metaConnectRequest) {\n this._debug('Aborting /meta/connect request', metaConnectRequest);\n if (!this.abortXHR(metaConnectRequest.xhr)) {\n this.transportFailure(metaConnectRequest.envelope, metaConnectRequest, {\n reason: 'abort'\n });\n }\n }\n this.reset(true);\n };\n _self.reset = init => {\n _super.reset(init);\n _metaConnectRequest = null;\n _requests = [];\n _envelopes = [];\n };\n _self.abortXHR = function (xhr) {\n if (xhr) {\n try {\n const state = xhr.readyState;\n xhr.abort();\n return state !== window.XMLHttpRequest.UNSENT;\n } catch (x) {\n this._debug(x);\n }\n }\n return false;\n };\n _self.xhrStatus = function (xhr) {\n if (xhr) {\n try {\n return xhr.status;\n } catch (x) {\n this._debug(x);\n }\n }\n return -1;\n };\n return _self;\n }\n function LongPollingTransport() {\n const _super = new RequestTransport();\n const _self = Transport.derive(_super);\n // By default, support cross domain\n let _supportsCrossDomain = true;\n _self.accept = (version, crossDomain, url) => _supportsCrossDomain || !crossDomain;\n _self.newXMLHttpRequest = () => new window.XMLHttpRequest();\n function _copyContext(xhr) {\n try {\n // Copy external context, to be used in other environments.\n xhr.context = _self.context;\n } catch (e) {\n // May happen if XHR is wrapped by Object.seal(),\n // Object.freeze(), or Object.preventExtensions().\n _self._debug('Could not copy transport context into XHR', e);\n }\n }\n _self.xhrSend = packet => {\n const xhr = _self.newXMLHttpRequest();\n _copyContext(xhr);\n xhr.withCredentials = true;\n xhr.open('POST', packet.url, packet.sync !== true);\n const headers = packet.headers;\n if (headers) {\n for (let headerName in headers) {\n if (headers.hasOwnProperty(headerName)) {\n xhr.setRequestHeader(headerName, headers[headerName]);\n }\n }\n }\n xhr.setRequestHeader('Content-Type', 'application/json;charset=UTF-8');\n xhr.onload = () => {\n if (xhr.status === 200) {\n packet.onSuccess(xhr.responseText);\n } else {\n packet.onError(xhr.statusText);\n }\n };\n xhr.onabort = xhr.onerror = () => {\n packet.onError(xhr.statusText);\n };\n xhr.send(packet.body);\n return xhr;\n };\n _self.transportSend = function (envelope, request) {\n this._debug('Transport', this.getType(), 'sending request', request.id, 'envelope', envelope);\n try {\n let sameStack = true;\n request.xhr = this.xhrSend({\n transport: this,\n url: envelope.url,\n sync: envelope.sync,\n headers: this.getConfiguration().requestHeaders,\n body: this.convertToJSON(envelope.messages),\n onSuccess: response => {\n this._debug('Transport', this.getType(), 'received response', response);\n let success = false;\n try {\n const received = this.convertToMessages(response);\n if (received.length === 0) {\n _supportsCrossDomain = false;\n this.transportFailure(envelope, request, {\n httpCode: 204\n });\n } else {\n success = true;\n this.transportSuccess(envelope, request, received);\n }\n } catch (x) {\n this._debug(x);\n if (!success) {\n _supportsCrossDomain = false;\n const failure = {\n exception: x\n };\n failure.httpCode = this.xhrStatus(request.xhr);\n this.transportFailure(envelope, request, failure);\n }\n }\n },\n onError: (reason, exception) => {\n this._debug('Transport', this.getType(), 'received error', reason, exception);\n _supportsCrossDomain = false;\n const failure = {\n reason: reason,\n exception: exception\n };\n failure.httpCode = this.xhrStatus(request.xhr);\n if (sameStack) {\n // Keep the semantic of calling callbacks asynchronously.\n this.setTimeout(() => {\n this.transportFailure(envelope, request, failure);\n }, 0);\n } else {\n this.transportFailure(envelope, request, failure);\n }\n }\n });\n sameStack = false;\n return true;\n } catch (x) {\n this._debug('Transport', this.getType(), 'exception:', x);\n _supportsCrossDomain = false;\n // Keep the semantic of calling callbacks asynchronously.\n this.setTimeout(() => {\n this.transportFailure(envelope, request, {\n exception: x\n });\n }, 0);\n return false;\n }\n };\n _self.reset = init => {\n _super.reset(init);\n _supportsCrossDomain = true;\n };\n return _self;\n }\n function CallbackPollingTransport() {\n const _super = new RequestTransport();\n const _self = Transport.derive(_super);\n let jsonp = 0;\n _self.accept = (version, crossDomain, url) => true;\n _self.jsonpSend = packet => {\n const head = document.getElementsByTagName('head')[0];\n const script = document.createElement('script');\n const callbackName = '_cometd_jsonp_' + jsonp++;\n window[callbackName] = responseText => {\n head.removeChild(script);\n delete window[callbackName];\n packet.onSuccess(responseText);\n };\n let url = packet.url;\n url += url.indexOf('?') < 0 ? '?' : '&';\n url += 'jsonp=' + callbackName;\n url += '&message=' + encodeURIComponent(packet.body);\n script.src = url;\n script.async = packet.sync !== true;\n script.type = 'application/javascript';\n script.onerror = e => {\n packet.onError('jsonp ' + e.type);\n };\n head.appendChild(script);\n };\n function _failTransportFn(envelope, request, x) {\n return () => {\n this.transportFailure(envelope, request, 'error', x);\n };\n }\n _self.transportSend = function (envelope, request) {\n // Microsoft Internet Explorer has a 2083 URL max length\n // We must ensure that we stay within that length\n let start = 0;\n let length = envelope.messages.length;\n const lengths = [];\n while (length > 0) {\n // Encode the messages because all brackets, quotes, commas, colons, etc\n // present in the JSON will be URL encoded, taking many more characters\n const json = JSON.stringify(envelope.messages.slice(start, start + length));\n const urlLength = envelope.url.length + encodeURI(json).length;\n const maxLength = this.getConfiguration().maxURILength;\n if (urlLength > maxLength) {\n if (length === 1) {\n const x = 'Bayeux message too big (' + urlLength + ' bytes, max is ' + maxLength + ') ' + 'for transport ' + this.getType();\n // Keep the semantic of calling callbacks asynchronously.\n this.setTimeout(_failTransportFn.call(this, envelope, request, x), 0);\n return;\n }\n --length;\n continue;\n }\n lengths.push(length);\n start += length;\n length = envelope.messages.length - start;\n }\n\n // Here we are sure that the messages can be sent within the URL limit\n\n let envelopeToSend = envelope;\n if (lengths.length > 1) {\n let begin = 0;\n let end = lengths[0];\n this._debug('Transport', this.getType(), 'split', envelope.messages.length, 'messages into', lengths.join(' + '));\n envelopeToSend = this._mixin(false, {}, envelope);\n envelopeToSend.messages = envelope.messages.slice(begin, end);\n envelopeToSend.onSuccess = envelope.onSuccess;\n envelopeToSend.onFailure = envelope.onFailure;\n for (let i = 1; i < lengths.length; ++i) {\n const nextEnvelope = this._mixin(false, {}, envelope);\n begin = end;\n end += lengths[i];\n nextEnvelope.messages = envelope.messages.slice(begin, end);\n nextEnvelope.onSuccess = envelope.onSuccess;\n nextEnvelope.onFailure = envelope.onFailure;\n this.send(nextEnvelope, request.metaConnect);\n }\n }\n this._debug('Transport', this.getType(), 'sending request', request.id, 'envelope', envelopeToSend);\n try {\n let sameStack = true;\n this.jsonpSend({\n transport: this,\n url: envelopeToSend.url,\n sync: envelopeToSend.sync,\n headers: this.getConfiguration().requestHeaders,\n body: JSON.stringify(envelopeToSend.messages),\n onSuccess: responses => {\n let success = false;\n try {\n const received = this.convertToMessages(responses);\n if (received.length === 0) {\n this.transportFailure(envelopeToSend, request, {\n httpCode: 204\n });\n } else {\n success = true;\n this.transportSuccess(envelopeToSend, request, received);\n }\n } catch (x) {\n this._debug(x);\n if (!success) {\n this.transportFailure(envelopeToSend, request, {\n exception: x\n });\n }\n }\n },\n onError: (reason, exception) => {\n const failure = {\n reason: reason,\n exception: exception\n };\n if (sameStack) {\n // Keep the semantic of calling callbacks asynchronously.\n this.setTimeout(() => {\n this.transportFailure(envelopeToSend, request, failure);\n }, 0);\n } else {\n this.transportFailure(envelopeToSend, request, failure);\n }\n }\n });\n sameStack = false;\n return true;\n } catch (xx) {\n // Keep the semantic of calling callbacks asynchronously.\n this.setTimeout(() => {\n this.transportFailure(envelopeToSend, request, {\n exception: xx\n });\n }, 0);\n return false;\n }\n };\n return _self;\n }\n function WebSocketTransport() {\n const _super = new Transport();\n const _self = Transport.derive(_super);\n let _cometd;\n // By default WebSocket is supported\n let _webSocketSupported = true;\n // Whether we were able to establish a WebSocket connection\n let _webSocketConnected = false;\n let _stickyReconnect = true;\n // The context contains the envelopes that have been sent\n // and the timeouts for the messages that have been sent.\n let _context = null;\n let _connecting = null;\n let _connected = false;\n let _successCallback = null;\n _self.reset = init => {\n _super.reset(init);\n _webSocketSupported = true;\n if (init) {\n _webSocketConnected = false;\n }\n _stickyReconnect = true;\n if (init) {\n _context = null;\n }\n _connecting = null;\n _connected = false;\n };\n function _forceClose(context, event) {\n if (context) {\n this.webSocketClose(context, event.code, event.reason);\n // Force immediate failure of pending messages to trigger reconnect.\n // This is needed because the server may not reply to our close()\n // and therefore the onclose function is never called.\n this.onClose(context, event);\n }\n }\n function _sameContext(context) {\n return context === _connecting || context === _context;\n }\n function _storeEnvelope(context, envelope, metaConnect) {\n const messageIds = [];\n for (let i = 0; i < envelope.messages.length; ++i) {\n const message = envelope.messages[i];\n if (message.id) {\n messageIds.push(message.id);\n }\n }\n context.envelopes[messageIds.join(',')] = [envelope, metaConnect];\n this._debug('Transport', this.getType(), 'stored envelope, envelopes', context.envelopes);\n }\n function _removeEnvelope(context, messageIds) {\n let removed = false;\n const envelopes = context.envelopes;\n for (let j = 0; j < messageIds.length; ++j) {\n const id = messageIds[j];\n for (let key in envelopes) {\n if (envelopes.hasOwnProperty(key)) {\n const ids = key.split(',');\n const index = ids.indexOf(id);\n if (index >= 0) {\n removed = true;\n ids.splice(index, 1);\n const envelope = envelopes[key][0];\n const metaConnect = envelopes[key][1];\n delete envelopes[key];\n if (ids.length > 0) {\n envelopes[ids.join(',')] = [envelope, metaConnect];\n }\n break;\n }\n }\n }\n }\n if (removed) {\n this._debug('Transport', this.getType(), 'removed envelope, envelopes', envelopes);\n }\n }\n function _websocketConnect(context) {\n // We may have multiple attempts to open a WebSocket\n // connection, for example a /meta/connect request that\n // may take time, along with a user-triggered publish.\n // Early return if we are already connecting.\n if (_connecting) {\n return;\n }\n\n // Mangle the URL, changing the scheme from 'http' to 'ws'.\n const url = _cometd.getURL().replace(/^http/, 'ws');\n this._debug('Transport', this.getType(), 'connecting to URL', url);\n try {\n const protocol = _cometd.getConfiguration().protocol;\n context.webSocket = protocol ? new window.WebSocket(url, protocol) : new window.WebSocket(url);\n _connecting = context;\n } catch (x) {\n _webSocketSupported = false;\n this._debug('Exception while creating WebSocket object', x);\n throw x;\n }\n\n // By default use sticky reconnects.\n _stickyReconnect = _cometd.getConfiguration().stickyReconnect !== false;\n const connectTimeout = _cometd.getConfiguration().connectTimeout;\n if (connectTimeout > 0) {\n context.connectTimer = this.setTimeout(() => {\n _cometd._debug('Transport', this.getType(), 'timed out while connecting to URL', url, ':', connectTimeout, 'ms');\n // The connection was not opened, close anyway.\n _forceClose.call(this, context, {\n code: 1000,\n reason: 'Connect Timeout'\n });\n }, connectTimeout);\n }\n const onopen = () => {\n _cometd._debug('WebSocket onopen', context);\n if (context.connectTimer) {\n this.clearTimeout(context.connectTimer);\n }\n if (_sameContext(context)) {\n _connecting = null;\n _context = context;\n _webSocketConnected = true;\n this.onOpen(context);\n } else {\n // We have a valid connection already, close this one.\n _cometd._warn('Closing extra WebSocket connection', this, 'active connection', _context);\n _forceClose.call(this, context, {\n code: 1000,\n reason: 'Extra Connection'\n });\n }\n };\n\n // This callback is invoked when the server sends the close frame.\n // The close frame for a connection may arrive *after* another\n // connection has been opened, so we must make sure that actions\n // are performed only if it's the same connection.\n const onclose = event => {\n event = event || {\n code: 1000\n };\n _cometd._debug('WebSocket onclose', context, event, 'connecting', _connecting, 'current', _context);\n if (context.connectTimer) {\n this.clearTimeout(context.connectTimer);\n }\n this.onClose(context, event);\n };\n const onmessage = wsMessage => {\n _cometd._debug('WebSocket onmessage', wsMessage, context);\n this.onMessage(context, wsMessage);\n };\n context.webSocket.onopen = onopen;\n context.webSocket.onclose = onclose;\n context.webSocket.onerror = () => {\n // Clients should call onclose(), but if they do not we do it here for safety.\n onclose({\n code: 1000,\n reason: 'Error'\n });\n };\n context.webSocket.onmessage = onmessage;\n this._debug('Transport', this.getType(), 'configured callbacks on', context);\n }\n function _onTransportTimeout(context, message, delay) {\n const result = this._notifyTransportTimeout([message]);\n if (result > 0) {\n this._debug('Transport', this.getType(), 'extended waiting for message replies:', result, 'ms');\n context.timeouts[message.id] = this.setTimeout(() => {\n _onTransportTimeout.call(this, context, message, delay + result);\n }, result);\n } else {\n this._debug('Transport', this.getType(), 'expired waiting for message reply', message.id, ':', delay, 'ms');\n _forceClose.call(this, context, {\n code: 1000,\n reason: 'Message Timeout'\n });\n }\n }\n function _webSocketSend(context, envelope, metaConnect) {\n let json;\n try {\n json = this.convertToJSON(envelope.messages);\n } catch (x) {\n this._debug('Transport', this.getType(), 'exception:', x);\n const mIds = [];\n for (let j = 0; j < envelope.messages.length; ++j) {\n const m = envelope.messages[j];\n mIds.push(m.id);\n }\n _removeEnvelope.call(this, context, mIds);\n // Keep the semantic of calling callbacks asynchronously.\n this.setTimeout(() => {\n this._notifyFailure(envelope.onFailure, context, envelope.messages, {\n exception: x\n });\n }, 0);\n return;\n }\n context.webSocket.send(json);\n this._debug('Transport', this.getType(), 'sent', envelope, '/meta/connect =', metaConnect);\n\n // Manage the timeout waiting for the response.\n let delay = this.getConfiguration().maxNetworkDelay;\n if (metaConnect) {\n delay += this.getAdvice().timeout;\n _connected = true;\n }\n const messageIds = [];\n for (let i = 0; i < envelope.messages.length; ++i) {\n const message = envelope.messages[i];\n if (message.id) {\n messageIds.push(message.id);\n context.timeouts[message.id] = this.setTimeout(() => {\n _onTransportTimeout.call(this, context, message, delay);\n }, delay);\n }\n }\n this._debug('Transport', this.getType(), 'started waiting for message replies', delay, 'ms, messageIds:', messageIds, ', timeouts:', context.timeouts);\n }\n _self._notifySuccess = function (fn, messages) {\n fn.call(this, messages);\n };\n _self._notifyFailure = function (fn, context, messages, failure) {\n fn.call(this, context, messages, failure);\n };\n function _send(context, envelope, metaConnect) {\n try {\n if (context === null) {\n context = _connecting || {\n envelopes: {},\n timeouts: {}\n };\n _storeEnvelope.call(this, context, envelope, metaConnect);\n _websocketConnect.call(this, context);\n } else {\n _storeEnvelope.call(this, context, envelope, metaConnect);\n _webSocketSend.call(this, context, envelope, metaConnect);\n }\n } catch (x) {\n // Keep the semantic of calling callbacks asynchronously.\n this.setTimeout(() => {\n _forceClose.call(this, context, {\n code: 1000,\n reason: 'Exception',\n exception: x\n });\n }, 0);\n }\n }\n _self.onOpen = function (context) {\n const envelopes = context.envelopes;\n this._debug('Transport', this.getType(), 'opened', context, 'pending messages', envelopes);\n for (let key in envelopes) {\n if (envelopes.hasOwnProperty(key)) {\n const element = envelopes[key];\n const envelope = element[0];\n const metaConnect = element[1];\n // Store the success callback, which is independent from the envelope,\n // so that it can be used to notify arrival of messages.\n _successCallback = envelope.onSuccess;\n _webSocketSend.call(this, context, envelope, metaConnect);\n }\n }\n };\n _self.onMessage = function (context, wsMessage) {\n this._debug('Transport', this.getType(), 'received websocket message', wsMessage, context);\n let close = false;\n const messages = this.convertToMessages(wsMessage.data);\n const messageIds = [];\n for (let i = 0; i < messages.length; ++i) {\n const message = messages[i];\n\n // Detect if the message is a response to a request we made.\n // If it's a meta message, for sure it's a response; otherwise it's\n // a publish message and publish responses don't have the data field.\n if (/^\\/meta\\//.test(message.channel) || message.data === undefined) {\n if (message.id) {\n messageIds.push(message.id);\n const timeout = context.timeouts[message.id];\n if (timeout) {\n this.clearTimeout(timeout);\n delete context.timeouts[message.id];\n this._debug('Transport', this.getType(), 'removed timeout for message', message.id, ', timeouts', context.timeouts);\n }\n }\n }\n if ('/meta/connect' === message.channel) {\n _connected = false;\n }\n if ('/meta/disconnect' === message.channel && !_connected) {\n close = true;\n }\n }\n\n // Remove the envelope corresponding to the messages.\n _removeEnvelope.call(this, context, messageIds);\n this._notifySuccess(_successCallback, messages);\n if (close) {\n this.webSocketClose(context, 1000, 'Disconnect');\n }\n };\n _self.onClose = function (context, event) {\n this._debug('Transport', this.getType(), 'closed', context, event);\n if (_sameContext(context)) {\n // Remember if we were able to connect.\n // This close event could be due to server shutdown,\n // and if it restarts we want to try websocket again.\n _webSocketSupported = _stickyReconnect && _webSocketConnected;\n _connecting = null;\n _context = null;\n }\n const timeouts = context.timeouts;\n context.timeouts = {};\n for (let id in timeouts) {\n if (timeouts.hasOwnProperty(id)) {\n this.clearTimeout(timeouts[id]);\n }\n }\n const envelopes = context.envelopes;\n context.envelopes = {};\n for (let key in envelopes) {\n if (envelopes.hasOwnProperty(key)) {\n const envelope = envelopes[key][0];\n const metaConnect = envelopes[key][1];\n if (metaConnect) {\n _connected = false;\n }\n const failure = {\n websocketCode: event.code,\n reason: event.reason\n };\n if (event.exception) {\n failure.exception = event.exception;\n }\n this._notifyFailure(envelope.onFailure, context, envelope.messages, failure);\n }\n }\n };\n _self.registered = (type, cometd) => {\n _super.registered(type, cometd);\n _cometd = cometd;\n };\n _self.accept = function (version, crossDomain, url) {\n this._debug('Transport', this.getType(), 'accept, supported:', _webSocketSupported);\n // Using !! to return a boolean (and not the WebSocket object).\n return _webSocketSupported && !!window.WebSocket && _cometd.websocketEnabled !== false;\n };\n _self.send = function (envelope, metaConnect) {\n this._debug('Transport', this.getType(), 'sending', envelope, '/meta/connect =', metaConnect);\n _send.call(this, _context, envelope, metaConnect);\n };\n _self.webSocketClose = function (context, code, reason) {\n try {\n if (context.webSocket) {\n context.webSocket.close(code, reason);\n }\n } catch (x) {\n this._debug(x);\n }\n };\n _self.abort = function () {\n _super.abort();\n _forceClose.call(this, _context, {\n code: 1000,\n reason: 'Abort'\n });\n this.reset(true);\n };\n return _self;\n }\n\n /**\n * The constructor for a CometD object, identified by an optional name.\n * The default name is the string 'default'.\n * @param name the optional name of this cometd object\n */\n function CometD(name) {\n const _scheduler = new Scheduler();\n const _cometd = this;\n const _name = name || 'default';\n let _crossDomain = false;\n const _transports = new TransportRegistry();\n let _transport;\n let _status = 'disconnected';\n let _messageId = 0;\n let _clientId = null;\n let _batch = 0;\n let _messageQueue = [];\n let _internalBatch = false;\n let _listenerId = 0;\n let _listeners = {};\n const _transportListeners = {};\n let _backoff = 0;\n let _scheduledSend = null;\n const _extensions = [];\n let _advice = {};\n let _handshakeProps;\n let _handshakeCallback;\n const _callbacks = {};\n const _remoteCalls = {};\n let _reestablish = false;\n let _connected = false;\n let _unconnectTime = 0;\n let _handshakeMessages = 0;\n let _metaConnect = null;\n let _config = {\n useWorkerScheduler: true,\n protocol: null,\n stickyReconnect: true,\n connectTimeout: 0,\n maxConnections: 2,\n backoffIncrement: 1000,\n maxBackoff: 60000,\n logLevel: 'info',\n maxNetworkDelay: 10000,\n requestHeaders: {},\n appendMessageTypeToURL: true,\n autoBatch: false,\n urls: {},\n maxURILength: 2000,\n maxSendBayeuxMessageSize: 8192,\n advice: {\n timeout: 60000,\n interval: 0,\n reconnect: undefined,\n maxInterval: 0\n }\n };\n function _fieldValue(object, name) {\n try {\n return object[name];\n } catch (x) {\n return undefined;\n }\n }\n\n /**\n * Mixes in the given objects into the target object by copying the properties.\n * @param deep if the copy must be deep\n * @param target the target object\n * @param objects the objects whose properties are copied into the target\n */\n this._mixin = function (deep, target, objects) {\n const result = target || {};\n\n // Skip first 2 parameters (deep and target), and loop over the others\n for (let i = 2; i < arguments.length; ++i) {\n const object = arguments[i];\n if (object === undefined || object === null) {\n continue;\n }\n for (let propName in object) {\n if (object.hasOwnProperty(propName)) {\n const prop = _fieldValue(object, propName);\n const targ = _fieldValue(result, propName);\n\n // Avoid infinite loops\n if (prop === target) {\n continue;\n }\n // Do not mixin undefined values\n if (prop === undefined) {\n continue;\n }\n if (deep && typeof prop === 'object' && prop !== null) {\n if (prop instanceof Array) {\n result[propName] = this._mixin(deep, targ instanceof Array ? targ : [], prop);\n } else {\n const source = typeof targ === 'object' && !(targ instanceof Array) ? targ : {};\n result[propName] = this._mixin(deep, source, prop);\n }\n } else {\n result[propName] = prop;\n }\n }\n }\n }\n return result;\n };\n function _isString(value) {\n return Utils.isString(value);\n }\n function _isAlpha(char) {\n if (char >= 'A' && char <= 'Z') {\n return true;\n }\n return char >= 'a' && char <= 'z';\n }\n function _isNumeric(char) {\n return char >= '0' && char <= '9';\n }\n function _isAllowed(char) {\n switch (char) {\n case ' ':\n case '!':\n case '#':\n case '$':\n case '(':\n case ')':\n case '*':\n case '+':\n case '-':\n case '.':\n case '/':\n case '@':\n case '_':\n case '{':\n case '~':\n case '}':\n case ':': // MathWorks Added - some teams use \":\" in their channels\n case '\\\\': // MathWorks Added - some teams use \"\\\" in their channels\n case ',':\n // MathWorks Added - some teams use \",\" in their channels\n return true;\n default:\n return false;\n }\n }\n function _isValidChannel(value) {\n if (!_isString(value)) {\n return false;\n }\n if (value.length < 2) {\n return false;\n }\n if (value.charAt(0) !== '/') {\n return false;\n }\n for (let i = 1; i < value.length; ++i) {\n const char = value.charAt(i);\n if (_isAlpha(char) || _isNumeric(char) || _isAllowed(char)) {\n continue;\n }\n return false;\n }\n return true;\n }\n function _isFunction(value) {\n if (value === undefined || value === null) {\n return false;\n }\n return typeof value === 'function';\n }\n function _zeroPad(value, length) {\n let result = '';\n while (--length > 0) {\n if (value >= Math.pow(10, length)) {\n break;\n }\n result += '0';\n }\n result += value;\n return result;\n }\n function _log(level, args) {\n if (window.console) {\n const logger = window.console[level];\n if (_isFunction(logger)) {\n const now = new Date();\n [].splice.call(args, 0, 0, _zeroPad(now.getHours(), 2) + ':' + _zeroPad(now.getMinutes(), 2) + ':' + _zeroPad(now.getSeconds(), 2) + '.' + _zeroPad(now.getMilliseconds(), 3));\n logger.apply(window.console, args);\n }\n }\n }\n this._warn = function () {\n _log('warn', arguments);\n };\n this._info = function () {\n if (_config.logLevel !== 'warn') {\n _log('info', arguments);\n }\n };\n this._debug = function () {\n if (_config.logLevel === 'debug') {\n _log('debug', arguments);\n }\n };\n function _splitURL(url) {\n // [1] = protocol://,\n // [2] = host:port,\n // [3] = host,\n // [4] = IPv6_host,\n // [5] = IPv4_host,\n // [6] = :port,\n // [7] = port,\n // [8] = uri,\n // [9] = rest (query / fragment)\n return new RegExp('(^https?://)?(((\\\\[[^\\\\]]+])|([^:/?#]+))(:(\\\\d+))?)?([^?#]*)(.*)?').exec(url);\n }\n\n /**\n * Returns whether the given hostAndPort is cross domain.\n * The default implementation checks against window.location.host\n * but this function can be overridden to make it work in non-browser\n * environments.\n *\n * @param hostAndPort the host and port in format host:port\n * @return whether the given hostAndPort is cross domain\n */\n this._isCrossDomain = hostAndPort => {\n if (window.location && window.location.host) {\n if (hostAndPort) {\n return hostAndPort !== window.location.host;\n }\n }\n return false;\n };\n function _configure(configuration) {\n _cometd._debug('Configuring cometd object with', configuration);\n // Support old style param, where only the Bayeux server URL was passed.\n if (_isString(configuration)) {\n configuration = {\n url: configuration\n };\n }\n if (!configuration) {\n configuration = {};\n }\n _config = _cometd._mixin(false, _config, configuration);\n const url = _cometd.getURL();\n if (!url) {\n throw 'Missing required configuration parameter \\'url\\' specifying the Bayeux server URL';\n }\n\n // Check if we're cross domain.\n const urlParts = _splitURL(url);\n const hostAndPort = urlParts[2];\n const uri = urlParts[8];\n const afterURI = urlParts[9];\n _crossDomain = _cometd._isCrossDomain(hostAndPort);\n\n // Check if appending extra path is supported.\n if (_config.appendMessageTypeToURL) {\n if (afterURI !== undefined && afterURI.length > 0) {\n _cometd._info('Appending message type to URI ' + uri + afterURI + ' is not supported, disabling \\'appendMessageTypeToURL\\' configuration');\n _config.appendMessageTypeToURL = false;\n } else {\n const uriSegments = uri.split('/');\n let lastSegmentIndex = uriSegments.length - 1;\n if (uri.match(/\\/$/)) {\n lastSegmentIndex -= 1;\n }\n if (uriSegments[lastSegmentIndex].indexOf('.') >= 0) {\n // Very likely the CometD servlet's URL pattern is mapped to an extension, such as *.cometd\n // It will be difficult to add the extra path in this case\n _cometd._info('Appending message type to URI ' + uri + ' is not supported, disabling \\'appendMessageTypeToURL\\' configuration');\n _config.appendMessageTypeToURL = false;\n }\n }\n }\n if (window.Worker && window.Blob && window.URL && _config.useWorkerScheduler) {\n let code = WorkerScheduler.toString();\n // Remove the function declaration, the opening brace and the closing brace.\n code = code.substring(code.indexOf('{') + 1, code.lastIndexOf('}'));\n const blob = new window.Blob([code], {\n type: 'application/json'\n });\n const blobURL = window.URL.createObjectURL(blob);\n const worker = new window.Worker(blobURL);\n _scheduler.setTimeout = (funktion, delay) => {\n const id = _scheduler.register(funktion);\n worker.postMessage({\n id: id,\n type: 'setTimeout',\n delay: delay\n });\n return id;\n };\n _scheduler.clearTimeout = id => {\n _scheduler.unregister(id);\n worker.postMessage({\n id: id,\n type: 'clearTimeout'\n });\n };\n worker.onmessage = e => {\n const id = e.data.id;\n const funktion = _scheduler.unregister(id);\n if (funktion) {\n funktion();\n }\n };\n }\n }\n function _removeListener(subscription) {\n if (subscription) {\n const subscriptions = _listeners[subscription.channel];\n if (subscriptions && subscriptions[subscription.id]) {\n delete subscriptions[subscription.id];\n _cometd._debug('Removed', subscription.listener ? 'listener' : 'subscription', subscription);\n }\n }\n }\n function _removeSubscription(subscription) {\n if (subscription && !subscription.listener) {\n _removeListener(subscription);\n }\n }\n function _clearSubscriptions() {\n for (let channel in _listeners) {\n if (_listeners.hasOwnProperty(channel)) {\n const subscriptions = _listeners[channel];\n if (subscriptions) {\n for (let id in subscriptions) {\n if (subscriptions.hasOwnProperty(id)) {\n _removeSubscription(subscriptions[id]);\n }\n }\n }\n }\n }\n }\n function _setStatus(newStatus) {\n if (_status !== newStatus) {\n _cometd._debug('Status', _status, '->', newStatus);\n _status = newStatus;\n }\n }\n function _isDisconnected() {\n return _status === 'disconnecting' || _status === 'disconnected';\n }\n function _nextMessageId() {\n const result = ++_messageId;\n return '' + result;\n }\n function _applyExtension(scope, callback, name, message, outgoing) {\n try {\n return callback.call(scope, message);\n } catch (x) {\n const handler = _cometd.onExtensionException;\n if (_isFunction(handler)) {\n _cometd._debug('Invoking extension exception handler', name, x);\n try {\n handler.call(_cometd, x, name, outgoing, message);\n } catch (xx) {\n _cometd._info('Exception during execution of extension exception handler', name, xx);\n }\n } else {\n _cometd._info('Exception during execution of extension', name, x);\n }\n return message;\n }\n }\n function _applyIncomingExtensions(message) {\n for (let i = 0; i < _extensions.length; ++i) {\n if (message === undefined || message === null) {\n break;\n }\n const extension = _extensions[i];\n const callback = extension.extension.incoming;\n if (_isFunction(callback)) {\n const result = _applyExtension(extension.extension, callback, extension.name, message, false);\n message = result === undefined ? message : result;\n }\n }\n return message;\n }\n function _applyOutgoingExtensions(message) {\n for (let i = _extensions.length - 1; i >= 0; --i) {\n if (message === undefined || message === null) {\n break;\n }\n const extension = _extensions[i];\n const callback = extension.extension.outgoing;\n if (_isFunction(callback)) {\n const result = _applyExtension(extension.extension, callback, extension.name, message, true);\n message = result === undefined ? message : result;\n }\n }\n return message;\n }\n function _notify(channel, message) {\n const subscriptions = _listeners[channel];\n if (subscriptions) {\n for (let id in subscriptions) {\n if (subscriptions.hasOwnProperty(id)) {\n const subscription = subscriptions[id];\n // Subscriptions may come and go, so the array may have 'holes'\n if (subscription) {\n try {\n subscription.callback.call(subscription.scope, message);\n } catch (x) {\n const handler = _cometd.onListenerException;\n if (_isFunction(handler)) {\n _cometd._debug('Invoking listener exception handler', subscription, x);\n try {\n handler.call(_cometd, x, subscription, subscription.listener, message);\n } catch (xx) {\n _cometd._info('Exception during execution of listener exception handler', subscription, xx);\n }\n } else {\n _cometd._info('Exception during execution of listener', subscription, message, x);\n }\n }\n }\n }\n }\n }\n }\n function _notifyListeners(channel, message) {\n // Notify direct listeners\n _notify(channel, message);\n\n // Notify the globbing listeners\n const channelParts = channel.split('/');\n const last = channelParts.length - 1;\n for (let i = last; i > 0; --i) {\n let channelPart = channelParts.slice(0, i).join('/') + '/*';\n // We don't want to notify /foo/* if the channel is /foo/bar/baz,\n // so we stop at the first non recursive globbing\n if (i === last) {\n _notify(channelPart, message);\n }\n // Add the recursive globber and notify\n channelPart += '*';\n _notify(channelPart, message);\n }\n }\n function _cancelDelayedSend() {\n if (_scheduledSend !== null) {\n _cometd.clearTimeout(_scheduledSend);\n }\n _scheduledSend = null;\n }\n function _delayedSend(operation, delay) {\n _cancelDelayedSend();\n const time = _advice.interval + delay;\n _cometd._debug('Function scheduled in', time, 'ms, interval =', _advice.interval, 'backoff =', _backoff, operation);\n _scheduledSend = _cometd.setTimeout(operation, time);\n }\n\n // Needed to break cyclic dependencies between function definitions\n let _handleMessages;\n let _handleFailure;\n\n /**\n * Delivers the messages to the CometD server\n * @param messages the array of messages to send\n * @param metaConnect true if this send is on /meta/connect\n * @param extraPath an extra path to append to the Bayeux server URL\n */\n function _send(messages, metaConnect, extraPath) {\n // We must be sure that the messages have a clientId.\n // This is not guaranteed since the handshake may take time to return\n // (and hence the clientId is not known yet) and the application\n // may create other messages.\n for (let i = 0; i < messages.length; ++i) {\n let message = messages[i];\n const messageId = message.id;\n if (_clientId) {\n message.clientId = _clientId;\n }\n message = _applyOutgoingExtensions(message);\n if (message !== undefined && message !== null) {\n // Extensions may have modified the message id, but we need to own it.\n message.id = messageId;\n messages[i] = message;\n } else {\n delete _callbacks[messageId];\n messages.splice(i--, 1);\n }\n }\n if (messages.length === 0) {\n return;\n }\n if (metaConnect) {\n _metaConnect = messages[0];\n }\n let url = _cometd.getURL();\n if (_config.appendMessageTypeToURL) {\n // If url does not end with '/', then append it\n if (!url.match(/\\/$/)) {\n url = url + '/';\n }\n if (extraPath) {\n url = url + extraPath;\n }\n }\n const envelope = {\n url: url,\n sync: false,\n messages: messages,\n onSuccess: rcvdMessages => {\n try {\n _handleMessages.call(_cometd, rcvdMessages);\n } catch (x) {\n _cometd._info('Exception during handling of messages', x);\n }\n },\n onFailure: (conduit, messages, failure) => {\n try {\n const transport = _cometd.getTransport();\n failure.connectionType = transport ? transport.getType() : \"unknown\";\n _handleFailure.call(_cometd, conduit, messages, failure);\n } catch (x) {\n _cometd._info('Exception during handling of failure', x);\n }\n }\n };\n _cometd._debug('Send', envelope);\n _transport.send(envelope, metaConnect);\n }\n function _queueSend(message) {\n if (_batch > 0 || _internalBatch === true) {\n _messageQueue.push(message);\n } else {\n _send([message], false);\n }\n }\n\n /**\n * Sends a complete bayeux message.\n * This method is exposed as a public so that extensions may use it\n * to send bayeux message directly, for example in case of re-sending\n * messages that have already been sent but that for some reason must\n * be resent.\n */\n this.send = _queueSend;\n function _resetBackoff() {\n _backoff = 0;\n }\n function _increaseBackoff() {\n if (_backoff < _config.maxBackoff) {\n _backoff += _config.backoffIncrement;\n }\n return _backoff;\n }\n\n /**\n * Starts a the batch of messages to be sent in a single request.\n * @see #_endBatch(sendMessages)\n */\n function _startBatch() {\n ++_batch;\n _cometd._debug('Starting batch, depth', _batch);\n }\n function _flushBatch() {\n const messages = _messageQueue;\n _messageQueue = [];\n if (messages.length > 0) {\n _send(messages, false);\n }\n }\n\n /**\n * Ends the batch of messages to be sent in a single request,\n * optionally sending messages present in the message queue depending\n * on the given argument.\n * @see _startBatch()\n */\n function _endBatch() {\n --_batch;\n _cometd._debug('Ending batch, depth', _batch);\n if (_batch < 0) {\n throw 'Calls to startBatch() and endBatch() are not paired';\n }\n if (_batch === 0 && !_isDisconnected() && !_internalBatch) {\n _flushBatch();\n }\n }\n\n /**\n * Sends the connect message\n */\n function _connect() {\n if (!_isDisconnected()) {\n const bayeuxMessage = {\n id: _nextMessageId(),\n channel: '/meta/connect',\n connectionType: _transport.getType()\n };\n\n // In case of reload or temporary loss of connection\n // we want the next successful connect to return immediately\n // instead of being held by the server, so that connect listeners\n // can be notified that the connection has been re-established\n if (!_connected) {\n bayeuxMessage.advice = {\n timeout: 0\n };\n }\n _setStatus('connecting');\n _cometd._debug('Connect sent', bayeuxMessage);\n _send([bayeuxMessage], true, 'connect');\n _setStatus('connected');\n }\n }\n function _delayedConnect(delay) {\n _setStatus('connecting');\n _delayedSend(() => {\n _connect();\n }, delay);\n }\n function _updateAdvice(newAdvice) {\n if (newAdvice) {\n _advice = _cometd._mixin(false, {}, _config.advice, newAdvice);\n _cometd._debug('New advice', _advice);\n }\n }\n function _disconnect(abort) {\n _cancelDelayedSend();\n if (abort && _transport) {\n _transport.abort();\n }\n _crossDomain = false;\n _transport = null;\n _setStatus('disconnected');\n _clientId = null;\n _batch = 0;\n _resetBackoff();\n _reestablish = false;\n _connected = false;\n _unconnectTime = 0;\n _metaConnect = null;\n\n // Fail any existing queued message\n if (_messageQueue.length > 0) {\n const messages = _messageQueue;\n _messageQueue = [];\n _handleFailure.call(_cometd, undefined, messages, {\n reason: 'Disconnected'\n });\n }\n }\n function _notifyTransportException(oldTransport, newTransport, failure) {\n const handler = _cometd.onTransportException;\n if (_isFunction(handler)) {\n _cometd._debug('Invoking transport exception handler', oldTransport, newTransport, failure);\n try {\n handler.call(_cometd, failure, oldTransport, newTransport);\n } catch (x) {\n _cometd._info('Exception during execution of transport exception handler', x);\n }\n }\n }\n\n /**\n * Sends the initial handshake message\n */\n function _handshake(handshakeProps, handshakeCallback) {\n if (_isFunction(handshakeProps)) {\n handshakeCallback = handshakeProps;\n handshakeProps = undefined;\n }\n _clientId = null;\n _clearSubscriptions();\n\n // Reset the transports if we're not retrying the handshake\n if (_isDisconnected()) {\n _transports.reset(true);\n }\n\n // Reset the advice.\n _updateAdvice({});\n _batch = 0;\n\n // Mark the start of an internal batch.\n // This is needed because handshake and connect are async.\n // It may happen that the application calls init() then subscribe()\n // and the subscribe message is sent before the connect message, if\n // the subscribe message is not held until the connect message is sent.\n // So here we start a batch to hold temporarily any message until\n // the connection is fully established.\n _internalBatch = true;\n\n // Save the properties provided by the user, so that\n // we can reuse them during automatic re-handshake\n _handshakeProps = handshakeProps;\n _handshakeCallback = handshakeCallback;\n const version = '1.0';\n\n // Figure out the transports to send to the server\n const url = _cometd.getURL();\n const transportTypes = _transports.findTransportTypes(version, _crossDomain, url);\n const bayeuxMessage = {\n id: _nextMessageId(),\n version: version,\n minimumVersion: version,\n channel: '/meta/handshake',\n supportedConnectionTypes: transportTypes,\n advice: {\n timeout: _advice.timeout,\n interval: _advice.interval\n }\n };\n // Do not allow the user to override important fields.\n const message = _cometd._mixin(false, {}, _handshakeProps, bayeuxMessage);\n\n // Save the callback.\n _cometd._putCallback(message.id, handshakeCallback);\n\n // Pick up the first available transport as initial transport\n // since we don't know if the server supports it\n if (!_transport) {\n _transport = _transports.negotiateTransport(transportTypes, version, _crossDomain, url);\n if (!_transport) {\n const failure = 'Could not find initial transport among: ' + _transports.getTransportTypes();\n _cometd._warn(failure);\n throw failure;\n }\n }\n _cometd._debug('Initial transport is', _transport.getType());\n\n // We started a batch to hold the application messages,\n // so here we must bypass it and send immediately.\n _setStatus('handshaking');\n _cometd._debug('Handshake sent', message);\n _send([message], false, 'handshake');\n }\n function _delayedHandshake(delay) {\n _setStatus('handshaking');\n\n // We will call _handshake() which will reset _clientId, but we want to avoid\n // that between the end of this method and the call to _handshake() someone may\n // call publish() (or other methods that call _queueSend()).\n _internalBatch = true;\n _delayedSend(() => {\n _handshake(_handshakeProps, _handshakeCallback);\n }, delay);\n }\n function _notifyCallback(callback, message) {\n try {\n callback.call(_cometd, message);\n } catch (x) {\n const handler = _cometd.onCallbackException;\n if (_isFunction(handler)) {\n _cometd._debug('Invoking callback exception handler', x);\n try {\n handler.call(_cometd, x, message);\n } catch (xx) {\n _cometd._info('Exception during execution of callback exception handler', xx);\n }\n } else {\n _cometd._info('Exception during execution of message callback', x);\n }\n }\n }\n this._getCallback = messageId => _callbacks[messageId];\n this._putCallback = function (messageId, callback) {\n const result = this._getCallback(messageId);\n if (_isFunction(callback)) {\n _callbacks[messageId] = callback;\n }\n return result;\n };\n function _handleCallback(message) {\n const callback = _cometd._getCallback([message.id]);\n if (_isFunction(callback)) {\n delete _callbacks[message.id];\n _notifyCallback(callback, message);\n }\n }\n function _handleRemoteCall(message) {\n const context = _remoteCalls[message.id];\n delete _remoteCalls[message.id];\n if (context) {\n _cometd._debug('Handling remote call response for', message, 'with context', context);\n\n // Clear the timeout, if present.\n const timeout = context.timeout;\n if (timeout) {\n _cometd.clearTimeout(timeout);\n }\n const callback = context.callback;\n if (_isFunction(callback)) {\n _notifyCallback(callback, message);\n return true;\n }\n }\n return false;\n }\n this.onTransportFailure = function (message, failureInfo, failureHandler) {\n this._debug('Transport failure', failureInfo, 'for', message);\n const transports = this.getTransportRegistry();\n const url = this.getURL();\n const crossDomain = this._isCrossDomain(_splitURL(url)[2]);\n const version = '1.0';\n const transportTypes = transports.findTransportTypes(version, crossDomain, url);\n if (failureInfo.action === 'none') {\n if (message.channel === '/meta/handshake') {\n if (!failureInfo.transport) {\n const failure = 'Could not negotiate transport, client=[' + transportTypes + '], server=[' + message.supportedConnectionTypes + ']';\n this._warn(failure);\n _notifyTransportException(_transport.getType(), null, {\n reason: failure,\n connectionType: _transport.getType(),\n transport: _transport\n });\n }\n }\n } else {\n failureInfo.delay = this.getBackoffPeriod();\n // Different logic depending on whether we are handshaking or connecting.\n if (message.channel === '/meta/handshake') {\n if (!failureInfo.transport) {\n // The transport is invalid, try to negotiate again.\n const oldTransportType = _transport ? _transport.getType() : null;\n const newTransport = transports.negotiateTransport(transportTypes, version, crossDomain, url);\n if (!newTransport) {\n this._warn('Could not negotiate transport, client=[' + transportTypes + ']');\n _notifyTransportException(oldTransportType, null, message.failure);\n failureInfo.action = 'none';\n } else {\n const newTransportType = newTransport.getType();\n this._debug('Transport', oldTransportType, '->', newTransportType);\n _notifyTransportException(oldTransportType, newTransportType, message.failure);\n failureInfo.action = 'handshake';\n failureInfo.transport = newTransport;\n }\n }\n if (failureInfo.action !== 'none') {\n this.increaseBackoffPeriod();\n }\n } else {\n const now = new Date().getTime();\n if (_unconnectTime === 0) {\n _unconnectTime = now;\n }\n if (failureInfo.action === 'retry') {\n failureInfo.delay = this.increaseBackoffPeriod();\n // Check whether we may switch to handshaking.\n const maxInterval = _advice.maxInterval;\n if (maxInterval > 0) {\n const expiration = _advice.timeout + _advice.interval + maxInterval;\n const unconnected = now - _unconnectTime;\n if (unconnected + _backoff > expiration) {\n failureInfo.action = 'handshake';\n }\n }\n }\n if (failureInfo.action === 'handshake') {\n failureInfo.delay = 0;\n transports.reset(false);\n this.resetBackoffPeriod();\n }\n }\n }\n failureHandler.call(_cometd, failureInfo);\n };\n function _handleTransportFailure(failureInfo) {\n _cometd._debug('Transport failure handling', failureInfo);\n if (failureInfo.transport) {\n _transport = failureInfo.transport;\n }\n if (failureInfo.url) {\n _transport.setURL(failureInfo.url);\n }\n const action = failureInfo.action;\n const delay = failureInfo.delay || 0;\n switch (action) {\n case 'handshake':\n _delayedHandshake(delay);\n break;\n case 'retry':\n _delayedConnect(delay);\n break;\n case 'none':\n _disconnect(true);\n break;\n default:\n throw 'Unknown action ' + action;\n }\n }\n function _failHandshake(message, failureInfo) {\n _handleCallback(message);\n _notifyListeners('/meta/handshake', message);\n _notifyListeners('/meta/unsuccessful', message);\n\n // The listeners may have disconnected.\n if (_isDisconnected()) {\n failureInfo.action = 'none';\n }\n _cometd.onTransportFailure.call(_cometd, message, failureInfo, _handleTransportFailure);\n }\n function _handshakeResponse(message) {\n const url = _cometd.getURL();\n if (message.successful) {\n const crossDomain = _cometd._isCrossDomain(_splitURL(url)[2]);\n const newTransport = _transports.negotiateTransport(message.supportedConnectionTypes, message.version, crossDomain, url);\n if (newTransport === null) {\n message.successful = false;\n _failHandshake(message, {\n cause: 'negotiation',\n action: 'none',\n transport: null\n });\n return;\n } else if (_transport !== newTransport) {\n _cometd._debug('Transport', _transport.getType(), '->', newTransport.getType());\n _transport = newTransport;\n }\n _clientId = message.clientId;\n\n // End the internal batch and allow held messages from the application\n // to go to the server (see _handshake() where we start the internal batch).\n _internalBatch = false;\n _flushBatch();\n\n // Here the new transport is in place, as well as the clientId, so\n // the listeners can perform a publish() if they want.\n // Notify the listeners before the connect below.\n message.reestablish = _reestablish;\n _reestablish = true;\n _handleCallback(message);\n _notifyListeners('/meta/handshake', message);\n _handshakeMessages = message['x-messages'] || 0;\n const action = _isDisconnected() ? 'none' : _advice.reconnect || 'retry';\n switch (action) {\n case 'retry':\n _resetBackoff();\n if (_handshakeMessages === 0) {\n _delayedConnect(0);\n } else {\n _cometd._debug('Processing', _handshakeMessages, 'handshake-delivered messages');\n }\n break;\n case 'none':\n _disconnect(true);\n break;\n default:\n throw 'Unrecognized advice action ' + action;\n }\n } else {\n _failHandshake(message, {\n cause: 'unsuccessful',\n action: _advice.reconnect || 'handshake',\n transport: _transport\n });\n }\n }\n function _handshakeFailure(message) {\n _failHandshake(message, {\n cause: 'failure',\n action: 'handshake',\n transport: null\n });\n }\n function _matchMetaConnect(connect) {\n if (_status === 'disconnected') {\n return true;\n }\n if (_metaConnect && _metaConnect.id === connect.id) {\n _metaConnect = null;\n return true;\n }\n return false;\n }\n function _failConnect(message, failureInfo) {\n // Notify the listeners after the status change but before the next action.\n _notifyListeners('/meta/connect', message);\n _notifyListeners('/meta/unsuccessful', message);\n\n // The listeners may have disconnected.\n if (_isDisconnected()) {\n failureInfo.action = 'none';\n }\n _cometd.onTransportFailure.call(_cometd, message, failureInfo, _handleTransportFailure);\n }\n function _connectResponse(message) {\n if (_matchMetaConnect(message)) {\n _connected = message.successful;\n if (_connected) {\n _notifyListeners('/meta/connect', message);\n\n // Normally, the advice will say \"reconnect: 'retry', interval: 0\"\n // and the server will hold the request, so when a response returns\n // we immediately call the server again (long polling).\n // Listeners can call disconnect(), so check the state after they run.\n const action = _isDisconnected() ? 'none' : _advice.reconnect || 'retry';\n switch (action) {\n case 'retry':\n _resetBackoff();\n _delayedConnect(_backoff);\n break;\n case 'none':\n _disconnect(false);\n break;\n default:\n throw 'Unrecognized advice action ' + action;\n }\n } else {\n _failConnect(message, {\n cause: 'unsuccessful',\n action: _advice.reconnect || 'retry',\n transport: _transport\n });\n }\n } else {\n _cometd._debug('Mismatched /meta/connect reply', message);\n }\n }\n function _connectFailure(message) {\n if (_matchMetaConnect(message)) {\n _connected = false;\n _failConnect(message, {\n cause: 'failure',\n action: 'retry',\n transport: null\n });\n } else {\n _cometd._debug('Mismatched /meta/connect failure', message);\n }\n }\n function _failDisconnect(message) {\n _disconnect(true);\n _handleCallback(message);\n _notifyListeners('/meta/disconnect', message);\n _notifyListeners('/meta/unsuccessful', message);\n }\n function _disconnectResponse(message) {\n if (message.successful) {\n // Wait for the /meta/connect to arrive.\n _disconnect(false);\n _handleCallback(message);\n _notifyListeners('/meta/disconnect', message);\n } else {\n _failDisconnect(message);\n }\n }\n function _disconnectFailure(message) {\n _failDisconnect(message);\n }\n function _failSubscribe(message) {\n const subscriptions = _listeners[message.subscription];\n if (subscriptions) {\n for (let id in subscriptions) {\n if (subscriptions.hasOwnProperty(id)) {\n const subscription = subscriptions[id];\n if (subscription && !subscription.listener) {\n delete subscriptions[id];\n _cometd._debug('Removed failed subscription', subscription);\n }\n }\n }\n }\n _handleCallback(message);\n _notifyListeners('/meta/subscribe', message);\n _notifyListeners('/meta/unsuccessful', message);\n }\n function _subscribeResponse(message) {\n if (message.successful) {\n _handleCallback(message);\n _notifyListeners('/meta/subscribe', message);\n } else {\n _failSubscribe(message);\n }\n }\n function _subscribeFailure(message) {\n _failSubscribe(message);\n }\n function _failUnsubscribe(message) {\n _handleCallback(message);\n _notifyListeners('/meta/unsubscribe', message);\n _notifyListeners('/meta/unsuccessful', message);\n }\n function _unsubscribeResponse(message) {\n if (message.successful) {\n _handleCallback(message);\n _notifyListeners('/meta/unsubscribe', message);\n } else {\n _failUnsubscribe(message);\n }\n }\n function _unsubscribeFailure(message) {\n _failUnsubscribe(message);\n }\n function _failMessage(message) {\n if (!_handleRemoteCall(message)) {\n _handleCallback(message);\n _notifyListeners('/meta/publish', message);\n _notifyListeners('/meta/unsuccessful', message);\n }\n }\n function _messageResponse(message) {\n if (message.data !== undefined) {\n if (!_handleRemoteCall(message)) {\n _notifyListeners(message.channel, message);\n if (_handshakeMessages > 0) {\n --_handshakeMessages;\n if (_handshakeMessages === 0) {\n _cometd._debug('Processed last handshake-delivered message');\n _delayedConnect(0);\n }\n }\n }\n } else {\n if (message.successful === undefined) {\n _cometd._warn('Unknown Bayeux Message', message);\n } else {\n if (message.successful) {\n _handleCallback(message);\n _notifyListeners('/meta/publish', message);\n } else {\n _failMessage(message);\n }\n }\n }\n }\n function _messageFailure(failure) {\n _failMessage(failure);\n }\n function _receive(message) {\n _unconnectTime = 0;\n message = _applyIncomingExtensions(message);\n if (message === undefined || message === null) {\n return;\n }\n _updateAdvice(message.advice);\n const channel = message.channel;\n switch (channel) {\n case '/meta/handshake':\n _handshakeResponse(message);\n break;\n case '/meta/connect':\n _connectResponse(message);\n break;\n case '/meta/disconnect':\n _disconnectResponse(message);\n break;\n case '/meta/subscribe':\n _subscribeResponse(message);\n break;\n case '/meta/unsubscribe':\n _unsubscribeResponse(message);\n break;\n default:\n _messageResponse(message);\n break;\n }\n }\n\n /**\n * Receives a message.\n * This method is exposed as a public so that extensions may inject\n * messages simulating that they had been received.\n */\n this.receive = _receive;\n _handleMessages = rcvdMessages => {\n _cometd._debug('Received', rcvdMessages);\n for (let i = 0; i < rcvdMessages.length; ++i) {\n const message = rcvdMessages[i];\n _receive(message);\n }\n };\n _handleFailure = (conduit, messages, failure) => {\n _cometd._debug('handleFailure', conduit, messages, failure);\n failure.transport = conduit;\n for (let i = 0; i < messages.length; ++i) {\n const message = messages[i];\n const failureMessage = {\n id: message.id,\n successful: false,\n channel: message.channel,\n failure: failure\n };\n failure.message = message;\n switch (message.channel) {\n case '/meta/handshake':\n _handshakeFailure(failureMessage);\n break;\n case '/meta/connect':\n _connectFailure(failureMessage);\n break;\n case '/meta/disconnect':\n _disconnectFailure(failureMessage);\n break;\n case '/meta/subscribe':\n failureMessage.subscription = message.subscription;\n _subscribeFailure(failureMessage);\n break;\n case '/meta/unsubscribe':\n failureMessage.subscription = message.subscription;\n _unsubscribeFailure(failureMessage);\n break;\n default:\n _messageFailure(failureMessage);\n break;\n }\n }\n };\n function _hasSubscriptions(channel) {\n const subscriptions = _listeners[channel];\n if (subscriptions) {\n for (let id in subscriptions) {\n if (subscriptions.hasOwnProperty(id)) {\n if (subscriptions[id]) {\n return true;\n }\n }\n }\n }\n return false;\n }\n function _resolveScopedCallback(scope, callback) {\n const delegate = {\n scope: scope,\n method: callback\n };\n if (_isFunction(scope)) {\n delegate.scope = undefined;\n delegate.method = scope;\n } else {\n if (_isString(callback)) {\n if (!scope) {\n throw 'Invalid scope ' + scope;\n }\n delegate.method = scope[callback];\n if (!_isFunction(delegate.method)) {\n throw 'Invalid callback ' + callback + ' for scope ' + scope;\n }\n } else if (!_isFunction(callback)) {\n throw 'Invalid callback ' + callback;\n }\n }\n return delegate;\n }\n function _addListener(channel, scope, callback, isListener) {\n // The data structure is a map<channel, subscription[]>, where each subscription\n // holds the callback to be called and its scope.\n\n const delegate = _resolveScopedCallback(scope, callback);\n _cometd._debug('Adding', isListener ? 'listener' : 'subscription', 'on', channel, 'with scope', delegate.scope, 'and callback', delegate.method);\n const id = ++_listenerId;\n const subscription = {\n id: id,\n channel: channel,\n scope: delegate.scope,\n callback: delegate.method,\n listener: isListener\n };\n let subscriptions = _listeners[channel];\n if (!subscriptions) {\n subscriptions = {};\n _listeners[channel] = subscriptions;\n }\n subscriptions[id] = subscription;\n _cometd._debug('Added', isListener ? 'listener' : 'subscription', subscription);\n return subscription;\n }\n\n //\n // PUBLIC API\n //\n\n /**\n * Registers the given transport under the given transport type.\n * The optional index parameter specifies the \"priority\" at which the\n * transport is registered (where 0 is the max priority).\n * If a transport with the same type is already registered, this function\n * does nothing and returns false.\n * @param type the transport type\n * @param transport the transport object\n * @param index the index at which this transport is to be registered\n * @return true if the transport has been registered, false otherwise\n * @see #unregisterTransport(type)\n */\n this.registerTransport = function (type, transport, index) {\n const result = _transports.add(type, transport, index);\n if (result) {\n this._debug('Registered transport', type);\n if (_isFunction(transport.registered)) {\n transport.registered(type, this);\n }\n }\n return result;\n };\n\n /**\n * Unregisters the transport with the given transport type.\n * @param type the transport type to unregister\n * @return the transport that has been unregistered,\n * or null if no transport was previously registered under the given transport type\n */\n this.unregisterTransport = function (type) {\n const transport = _transports.remove(type);\n if (transport !== null) {\n this._debug('Unregistered transport', type);\n if (_isFunction(transport.unregistered)) {\n transport.unregistered();\n }\n }\n return transport;\n };\n this.unregisterTransports = () => {\n _transports.clear();\n };\n\n /**\n * @return an array of all registered transport types\n */\n this.getTransportTypes = () => _transports.getTransportTypes();\n this.findTransport = name => _transports.find(name);\n\n /**\n * @returns the TransportRegistry object\n */\n this.getTransportRegistry = () => _transports;\n\n /**\n * Configures the initial Bayeux communication with the Bayeux server.\n * Configuration is passed via an object that must contain a mandatory field <code>url</code>\n * of type string containing the URL of the Bayeux server.\n * @param configuration the configuration object\n */\n this.configure = function (configuration) {\n _configure.call(this, configuration);\n };\n\n /**\n * Configures and establishes the Bayeux communication with the Bayeux server\n * via a handshake and a subsequent connect.\n * @param configuration the configuration object\n * @param handshakeProps an object to be merged with the handshake message\n * @see #configure(configuration)\n * @see #handshake(handshakeProps)\n */\n this.init = function (configuration, handshakeProps) {\n this.configure(configuration);\n this.handshake(handshakeProps);\n };\n\n /**\n * Establishes the Bayeux communication with the Bayeux server\n * via a handshake and a subsequent connect.\n * @param handshakeProps an object to be merged with the handshake message\n * @param handshakeCallback a function to be invoked when the handshake is acknowledged\n */\n this.handshake = (handshakeProps, handshakeCallback) => {\n if (_status !== 'disconnected') {\n throw 'Illegal state: handshaken';\n }\n _handshake(handshakeProps, handshakeCallback);\n };\n\n /**\n * Disconnects from the Bayeux server.\n * @param disconnectProps an object to be merged with the disconnect message\n * @param disconnectCallback a function to be invoked when the disconnect is acknowledged\n */\n this.disconnect = function (disconnectProps, disconnectCallback) {\n if (_isDisconnected()) {\n return;\n }\n if (_isFunction(disconnectProps)) {\n disconnectCallback = disconnectProps;\n disconnectProps = undefined;\n }\n const bayeuxMessage = {\n id: _nextMessageId(),\n channel: '/meta/disconnect'\n };\n // Do not allow the user to override important fields.\n const message = this._mixin(false, {}, disconnectProps, bayeuxMessage);\n\n // Save the callback.\n _cometd._putCallback(message.id, disconnectCallback);\n _setStatus('disconnecting');\n _send([message], false, 'disconnect');\n };\n\n /**\n * Marks the start of a batch of application messages to be sent to the server\n * in a single request, obtaining a single response containing (possibly) many\n * application reply messages.\n * Messages are held in a queue and not sent until {@link #endBatch()} is called.\n * If startBatch() is called multiple times, then an equal number of endBatch()\n * calls must be made to close and send the batch of messages.\n * @see #endBatch()\n */\n this.startBatch = () => {\n _startBatch();\n };\n\n /**\n * Marks the end of a batch of application messages to be sent to the server\n * in a single request.\n * @see #startBatch()\n */\n this.endBatch = () => {\n _endBatch();\n };\n\n /**\n * Executes the given callback in the given scope, surrounded by a {@link #startBatch()}\n * and {@link #endBatch()} calls.\n * @param scope the scope of the callback, may be omitted\n * @param callback the callback to be executed within {@link #startBatch()} and {@link #endBatch()} calls\n */\n this.batch = function (scope, callback) {\n const delegate = _resolveScopedCallback(scope, callback);\n this.startBatch();\n try {\n delegate.method.call(delegate.scope);\n this.endBatch();\n } catch (x) {\n this._info('Exception during execution of batch', x);\n this.endBatch();\n throw x;\n }\n };\n\n /**\n * Adds a transport listener for the specified transport event,\n * executing the given callback when the event happens.\n *\n * The currently supported event is `timeout`.\n *\n * The callback function takes an array of messages for which\n * the event happened.\n *\n * For the 'timeout' event, the callback function may return a\n * positive value that extends the wait for message replies by\n * the returned amount, in milliseconds.\n *\n * @param {String} event the type of transport event\n * @param {Function} callback the function associate to the given transport event\n * @see #removeTransportListener\n */\n this.addTransportListener = (event, callback) => {\n if (event !== 'timeout') {\n throw 'Unsupported event ' + event;\n }\n let callbacks = _transportListeners[event];\n if (!callbacks) {\n _transportListeners[event] = callbacks = [];\n }\n callbacks.push(callback);\n };\n\n /**\n * Removes the transport listener for the specified transport event.\n * @param {String} event the type of transport event\n * @param {Function} callback the function disassociate from the given transport event\n * @return {boolean} whether the disassociation was successful\n * @see #addTransportListener\n */\n this.removeTransportListener = (event, callback) => {\n const callbacks = _transportListeners[event];\n if (callbacks) {\n const index = callbacks.indexOf(callback);\n if (index >= 0) {\n callbacks.splice(index, 1);\n return true;\n }\n }\n return false;\n };\n this._getTransportListeners = event => _transportListeners[event];\n\n /**\n * Adds a listener for bayeux messages, performing the given callback in the given scope\n * when a message for the given channel arrives.\n * @param channel the channel the listener is interested to\n * @param scope the scope of the callback, may be omitted\n * @param callback the callback to call when a message is sent to the channel\n * @returns the subscription handle to be passed to {@link #removeListener(object)}\n * @see #removeListener(subscription)\n */\n this.addListener = function (channel, scope, callback) {\n if (arguments.length < 2) {\n throw 'Illegal arguments number: required 2, got ' + arguments.length;\n }\n if (!_isString(channel)) {\n throw 'Illegal argument type: channel must be a string';\n }\n return _addListener(channel, scope, callback, true);\n };\n\n /**\n * Removes the subscription obtained with a call to {@link #addListener(string, object, function)}.\n * @param subscription the subscription to unsubscribe.\n * @see #addListener(channel, scope, callback)\n */\n this.removeListener = subscription => {\n // Beware of subscription.id == 0, which is falsy => cannot use !subscription.id\n if (!subscription || !subscription.channel || !(\"id\" in subscription)) {\n throw 'Invalid argument: expected subscription, not ' + subscription;\n }\n _removeListener(subscription);\n };\n\n /**\n * Removes all listeners registered with {@link #addListener(channel, scope, callback)} or\n * {@link #subscribe(channel, scope, callback)}.\n */\n this.clearListeners = () => {\n _listeners = {};\n };\n\n /**\n * Subscribes to the given channel, performing the given callback in the given scope\n * when a message for the channel arrives.\n * @param channel the channel to subscribe to\n * @param scope the scope of the callback, may be omitted\n * @param callback the callback to call when a message is sent to the channel\n * @param subscribeProps an object to be merged with the subscribe message\n * @param subscribeCallback a function to be invoked when the subscription is acknowledged\n * @return the subscription handle to be passed to {@link #unsubscribe(object)}\n */\n this.subscribe = function (channel, scope, callback, subscribeProps, subscribeCallback) {\n if (arguments.length < 2) {\n throw 'Illegal arguments number: required 2, got ' + arguments.length;\n }\n if (!_isValidChannel(channel)) {\n throw 'Illegal argument: invalid channel ' + channel;\n }\n if (_isDisconnected()) {\n throw 'Illegal state: disconnected';\n }\n\n // Normalize arguments\n if (_isFunction(scope)) {\n subscribeCallback = subscribeProps;\n subscribeProps = callback;\n callback = scope;\n scope = undefined;\n }\n if (_isFunction(subscribeProps)) {\n subscribeCallback = subscribeProps;\n subscribeProps = undefined;\n }\n\n // Only send the message to the server if this client has not yet subscribed to the channel\n const send = !_hasSubscriptions(channel);\n const subscription = _addListener(channel, scope, callback, false);\n if (send) {\n // Send the subscription message after the subscription registration to avoid\n // races where the server would send a message to the subscribers, but here\n // on the client the subscription has not been added yet to the data structures\n const bayeuxMessage = {\n id: _nextMessageId(),\n channel: '/meta/subscribe',\n subscription: channel\n };\n // Do not allow the user to override important fields.\n const message = this._mixin(false, {}, subscribeProps, bayeuxMessage);\n\n // Save the callback.\n _cometd._putCallback(message.id, subscribeCallback);\n _queueSend(message);\n } else {\n if (_isFunction(subscribeCallback)) {\n // Keep the semantic of calling callbacks asynchronously.\n _cometd.setTimeout(() => {\n _notifyCallback(subscribeCallback, {\n id: _nextMessageId(),\n successful: true,\n channel: '/meta/subscribe',\n subscription: channel\n });\n }, 0);\n }\n }\n return subscription;\n };\n\n /**\n * Unsubscribes the subscription obtained with a call to {@link #subscribe(string, object, function)}.\n * @param subscription the subscription to unsubscribe.\n * @param unsubscribeProps an object to be merged with the unsubscribe message\n * @param unsubscribeCallback a function to be invoked when the unsubscription is acknowledged\n */\n this.unsubscribe = function (subscription, unsubscribeProps, unsubscribeCallback) {\n if (arguments.length < 1) {\n throw 'Illegal arguments number: required 1, got ' + arguments.length;\n }\n if (_isDisconnected()) {\n throw 'Illegal state: disconnected';\n }\n if (_isFunction(unsubscribeProps)) {\n unsubscribeCallback = unsubscribeProps;\n unsubscribeProps = undefined;\n }\n\n // Remove the local listener before sending the message\n // This ensures that if the server fails, this client does not get notifications\n this.removeListener(subscription);\n const channel = subscription.channel;\n // Only send the message to the server if this client unsubscribes the last subscription\n if (!_hasSubscriptions(channel)) {\n const bayeuxMessage = {\n id: _nextMessageId(),\n channel: '/meta/unsubscribe',\n subscription: channel\n };\n // Do not allow the user to override important fields.\n const message = this._mixin(false, {}, unsubscribeProps, bayeuxMessage);\n\n // Save the callback.\n _cometd._putCallback(message.id, unsubscribeCallback);\n _queueSend(message);\n } else {\n if (_isFunction(unsubscribeCallback)) {\n // Keep the semantic of calling callbacks asynchronously.\n _cometd.setTimeout(() => {\n _notifyCallback(unsubscribeCallback, {\n id: _nextMessageId(),\n successful: true,\n channel: '/meta/unsubscribe',\n subscription: channel\n });\n }, 0);\n }\n }\n };\n this.resubscribe = function (subscription, subscribeProps) {\n _removeSubscription(subscription);\n if (subscription) {\n return this.subscribe(subscription.channel, subscription.scope, subscription.callback, subscribeProps);\n }\n return undefined;\n };\n\n /**\n * Removes all subscriptions added via {@link #subscribe(channel, scope, callback, subscribeProps)},\n * but does not remove the listeners added via {@link addListener(channel, scope, callback)}.\n */\n this.clearSubscriptions = () => {\n _clearSubscriptions();\n };\n\n /**\n * Publishes a message on the given channel, containing the given content.\n * @param channel the channel to publish the message to\n * @param content the content of the message\n * @param publishProps an object to be merged with the publish message\n * @param publishCallback a function to be invoked when the publish is acknowledged by the server\n */\n this.publish = function (channel, content, publishProps, publishCallback) {\n if (arguments.length < 1) {\n throw 'Illegal arguments number: required 1, got ' + arguments.length;\n }\n if (!_isValidChannel(channel)) {\n throw 'Illegal argument: invalid channel ' + channel;\n }\n if (/^\\/meta\\//.test(channel)) {\n throw 'Illegal argument: cannot publish to meta channels';\n }\n if (_isDisconnected()) {\n throw 'Illegal state: disconnected';\n }\n if (_isFunction(content)) {\n publishCallback = content;\n content = {};\n publishProps = undefined;\n } else if (_isFunction(publishProps)) {\n publishCallback = publishProps;\n publishProps = undefined;\n }\n const bayeuxMessage = {\n id: _nextMessageId(),\n channel: channel,\n data: content\n };\n // Do not allow the user to override important fields.\n const message = this._mixin(false, {}, publishProps, bayeuxMessage);\n\n // Save the callback.\n _cometd._putCallback(message.id, publishCallback);\n _queueSend(message);\n };\n\n /**\n * Publishes a message with binary data on the given channel.\n * The binary data chunk may be an ArrayBuffer, a DataView, a TypedArray\n * (such as Uint8Array) or a plain integer array.\n * The meta data object may contain additional application data such as\n * a file name, a mime type, etc.\n * @param channel the channel to publish the message to\n * @param data the binary data to publish\n * @param last whether the binary data chunk is the last\n * @param meta an object containing meta data associated to the binary chunk\n * @param publishProps an object to be merged with the publish message\n * @param publishCallback a function to be invoked when the publish is acknowledged by the server\n */\n this.publishBinary = function (channel, data, last, meta, publishProps, publishCallback) {\n if (_isFunction(data)) {\n publishCallback = data;\n data = new ArrayBuffer(0);\n last = true;\n meta = undefined;\n publishProps = undefined;\n } else if (_isFunction(last)) {\n publishCallback = last;\n last = true;\n meta = undefined;\n publishProps = undefined;\n } else if (_isFunction(meta)) {\n publishCallback = meta;\n meta = undefined;\n publishProps = undefined;\n } else if (_isFunction(publishProps)) {\n publishCallback = publishProps;\n publishProps = undefined;\n }\n const content = {\n meta: meta,\n data: data,\n last: last\n };\n const ext = this._mixin(false, publishProps, {\n ext: {\n binary: {}\n }\n });\n this.publish(channel, content, ext, publishCallback);\n };\n\n /**\n * Performs a remote call, a request with a response, to the given target with the given data.\n * The response returned by the server is notified the given callback function.\n * The invocation may specify a timeout in milliseconds, after which the call is aborted on\n * the client-side, causing a failed response to be passed to the given callback function.\n * @param target the remote call target\n * @param content the remote call content\n * @param timeout the remote call timeout, or 0 for no timeout\n * @param callProps an object to be merged with the remote call message\n * @param callback the function to be invoked with the response\n */\n this.remoteCall = function (target, content, timeout, callProps, callback) {\n if (arguments.length < 1) {\n throw 'Illegal arguments number: required 1, got ' + arguments.length;\n }\n if (!_isString(target)) {\n throw 'Illegal argument type: target must be a string';\n }\n if (_isDisconnected()) {\n throw 'Illegal state: disconnected';\n }\n if (_isFunction(content)) {\n callback = content;\n content = {};\n timeout = _config.maxNetworkDelay;\n callProps = undefined;\n } else if (_isFunction(timeout)) {\n callback = timeout;\n timeout = _config.maxNetworkDelay;\n callProps = undefined;\n } else if (_isFunction(callProps)) {\n callback = callProps;\n callProps = undefined;\n }\n if (typeof timeout !== 'number') {\n throw 'Illegal argument type: timeout must be a number';\n }\n if (!target.match(/^\\//)) {\n target = '/' + target;\n }\n const channel = '/service' + target;\n if (!_isValidChannel(channel)) {\n throw 'Illegal argument: invalid target ' + target;\n }\n const bayeuxMessage = {\n id: _nextMessageId(),\n channel: channel,\n data: content\n };\n const message = this._mixin(false, {}, callProps, bayeuxMessage);\n const context = {\n callback: callback\n };\n if (timeout > 0) {\n context.timeout = _cometd.setTimeout(() => {\n _cometd._debug('Timing out remote call', message, 'after', timeout, 'ms');\n _failMessage({\n id: message.id,\n error: '406::timeout',\n successful: false,\n failure: {\n message: message,\n reason: 'Remote Call Timeout'\n }\n });\n }, timeout);\n _cometd._debug('Scheduled remote call timeout', message, 'in', timeout, 'ms');\n }\n _remoteCalls[message.id] = context;\n _queueSend(message);\n };\n\n /**\n * Performs a remote call with binary data.\n * @param target the remote call target\n * @param data the remote call binary data\n * @param last whether the binary data chunk is the last\n * @param meta an object containing meta data associated to the binary chunk\n * @param timeout the remote call timeout, or 0 for no timeout\n * @param callProps an object to be merged with the remote call message\n * @param callback the function to be invoked with the response\n */\n this.remoteCallBinary = function (target, data, last, meta, timeout, callProps, callback) {\n if (_isFunction(data)) {\n callback = data;\n data = new ArrayBuffer(0);\n last = true;\n meta = undefined;\n timeout = _config.maxNetworkDelay;\n callProps = undefined;\n } else if (_isFunction(last)) {\n callback = last;\n last = true;\n meta = undefined;\n timeout = _config.maxNetworkDelay;\n callProps = undefined;\n } else if (_isFunction(meta)) {\n callback = meta;\n meta = undefined;\n timeout = _config.maxNetworkDelay;\n callProps = undefined;\n } else if (_isFunction(timeout)) {\n callback = timeout;\n timeout = _config.maxNetworkDelay;\n callProps = undefined;\n } else if (_isFunction(callProps)) {\n callback = callProps;\n callProps = undefined;\n }\n const content = {\n meta: meta,\n data: data,\n last: last\n };\n const ext = this._mixin(false, callProps, {\n ext: {\n binary: {}\n }\n });\n this.remoteCall(target, content, timeout, ext, callback);\n };\n\n /**\n * Returns a string representing the status of the bayeux communication with the Bayeux server.\n */\n this.getStatus = () => _status;\n\n /**\n * Returns whether this instance has been disconnected.\n */\n this.isDisconnected = _isDisconnected;\n\n /**\n * Sets the backoff period used to increase the backoff time when retrying an unsuccessful or failed message.\n * Default value is 1 second, which means if there is a persistent failure the retries will happen\n * after 1 second, then after 2 seconds, then after 3 seconds, etc. So for example with 15 seconds of\n * elapsed time, there will be 5 retries (at 1, 3, 6, 10 and 15 seconds elapsed).\n * @param period the backoff period to set\n * @see #getBackoffIncrement()\n */\n this.setBackoffIncrement = period => {\n _config.backoffIncrement = period;\n };\n\n /**\n * Returns the backoff period used to increase the backoff time when retrying an unsuccessful or failed message.\n * @see #setBackoffIncrement(period)\n */\n this.getBackoffIncrement = () => _config.backoffIncrement;\n\n /**\n * Returns the backoff period to wait before retrying an unsuccessful or failed message.\n */\n this.getBackoffPeriod = () => _backoff;\n\n /**\n * Increases the backoff period up to the maximum value configured.\n * @returns the backoff period after increment\n * @see getBackoffIncrement\n */\n this.increaseBackoffPeriod = () => _increaseBackoff();\n\n /**\n * Resets the backoff period to zero.\n */\n this.resetBackoffPeriod = () => {\n _resetBackoff();\n };\n\n /**\n * Sets the log level for console logging.\n * Valid values are the strings 'error', 'warn', 'info' and 'debug', from\n * less verbose to more verbose.\n * @param level the log level string\n */\n this.setLogLevel = level => {\n _config.logLevel = level;\n };\n\n /**\n * Registers an extension whose callbacks are called for every incoming message\n * (that comes from the server to this client implementation) and for every\n * outgoing message (that originates from this client implementation for the\n * server).\n * The format of the extension object is the following:\n * <pre>\n * {\n * incoming: message => { ... },\n * outgoing: message => { ... }\n * }\n * </pre>\n * Both properties are optional, but if they are present they will be called\n * respectively for each incoming message and for each outgoing message.\n * @param name the name of the extension\n * @param extension the extension to register\n * @return true if the extension was registered, false otherwise\n * @see #unregisterExtension(name)\n */\n this.registerExtension = function (name, extension) {\n if (arguments.length < 2) {\n throw 'Illegal arguments number: required 2, got ' + arguments.length;\n }\n if (!_isString(name)) {\n throw 'Illegal argument type: extension name must be a string';\n }\n let existing = false;\n for (let i = 0; i < _extensions.length; ++i) {\n const existingExtension = _extensions[i];\n if (existingExtension.name === name) {\n existing = true;\n break;\n }\n }\n if (!existing) {\n _extensions.push({\n name: name,\n extension: extension\n });\n this._debug('Registered extension', name);\n\n // Callback for extensions\n if (_isFunction(extension.registered)) {\n extension.registered(name, this);\n }\n return true;\n } else {\n this._info('Could not register extension with name', name, 'since another extension with the same name already exists');\n return false;\n }\n };\n\n /**\n * Unregister an extension previously registered with\n * {@link #registerExtension(name, extension)}.\n * @param name the name of the extension to unregister.\n * @return true if the extension was unregistered, false otherwise\n */\n this.unregisterExtension = function (name) {\n if (!_isString(name)) {\n throw 'Illegal argument type: extension name must be a string';\n }\n let unregistered = false;\n for (let i = 0; i < _extensions.length; ++i) {\n const extension = _extensions[i];\n if (extension.name === name) {\n _extensions.splice(i, 1);\n unregistered = true;\n this._debug('Unregistered extension', name);\n\n // Callback for extensions\n const ext = extension.extension;\n if (_isFunction(ext.unregistered)) {\n ext.unregistered();\n }\n break;\n }\n }\n return unregistered;\n };\n\n /**\n * Find the extension registered with the given name.\n * @param name the name of the extension to find\n * @return the extension found or null if no extension with the given name has been registered\n */\n this.getExtension = name => {\n for (let i = 0; i < _extensions.length; ++i) {\n const extension = _extensions[i];\n if (extension.name === name) {\n return extension.extension;\n }\n }\n return null;\n };\n\n /**\n * Returns the name assigned to this CometD object, or the string 'default'\n * if no name has been explicitly passed as parameter to the constructor.\n */\n this.getName = () => _name;\n\n /**\n * Returns the clientId assigned by the Bayeux server during handshake.\n */\n this.getClientId = () => _clientId;\n\n /**\n * Returns the URL of the Bayeux server.\n */\n this.getURL = () => {\n if (_transport) {\n let url = _transport.getURL();\n if (url) {\n return url;\n }\n url = _config.urls[_transport.getType()];\n if (url) {\n return url;\n }\n }\n return _config.url;\n };\n this.getTransport = () => _transport;\n this.getConfiguration = function () {\n return this._mixin(true, {}, _config);\n };\n this.getAdvice = function () {\n return this._mixin(true, {}, _advice);\n };\n this.setTimeout = (funktion, delay) => _scheduler.setTimeout(() => {\n try {\n _cometd._debug('Invoking timed function', funktion);\n funktion();\n } catch (x) {\n _cometd._debug('Exception invoking timed function', funktion, x);\n }\n }, delay);\n this.clearTimeout = id => {\n _scheduler.clearTimeout(id);\n };\n\n // Initialize transports.\n if (window.WebSocket) {\n this.registerTransport('websocket', new WebSocketTransport());\n }\n this.registerTransport('long-polling', new LongPollingTransport());\n this.registerTransport('callback-polling', new CallbackPollingTransport());\n }\n const _z85EncodeTable = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '.', '-', ':', '+', '=', '^', '!', '/', '*', '?', '&', '<', '>', '(', ')', '[', ']', '{', '}', '@', '%', '$', '#'];\n const _z85DecodeTable = [0x00, 0x44, 0x00, 0x54, 0x53, 0x52, 0x48, 0x00, 0x4B, 0x4C, 0x46, 0x41, 0x00, 0x3F, 0x3E, 0x45, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x40, 0x00, 0x49, 0x42, 0x4A, 0x47, 0x51, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x4D, 0x00, 0x4E, 0x43, 0x00, 0x00, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x4F, 0x00, 0x50, 0x00, 0x00];\n /**\n * Z85 encoding/decoding as specified by https://rfc.zeromq.org/spec/32/.\n * Z85 encodes binary data to a string that may be sent as JSON payload,\n * and decodes strings to binary data.\n */\n const Z85 = {\n /**\n * Encodes the given bytes to a string.\n * @param bytes the bytes to encode, either a number[], or an ArrayBuffer, or a TypedArray.\n * @return {string} the bytes encoded as a string\n */\n encode: bytes => {\n let buffer = null;\n if (bytes instanceof ArrayBuffer) {\n buffer = bytes;\n } else if (bytes.buffer instanceof ArrayBuffer) {\n buffer = bytes.buffer;\n } else if (Array.isArray(bytes)) {\n buffer = new Uint8Array(bytes).buffer;\n }\n if (buffer == null) {\n throw 'Cannot Z85 encode ' + bytes;\n }\n const length = buffer.byteLength;\n const remainder = length % 4;\n const padding = 4 - (remainder === 0 ? 4 : remainder);\n const view = new DataView(buffer);\n let result = '';\n let value = 0;\n for (let i = 0; i < length + padding; ++i) {\n const isPadding = i >= length;\n value = value * 256 + (isPadding ? 0 : view.getUint8(i));\n if ((i + 1) % 4 === 0) {\n let divisor = 85 * 85 * 85 * 85;\n for (let j = 5; j > 0; --j) {\n if (!isPadding || j > padding) {\n const code = Math.floor(value / divisor) % 85;\n result += _z85EncodeTable[code];\n }\n divisor /= 85;\n }\n value = 0;\n }\n }\n return result;\n },\n /**\n * Decodes the given string into an ArrayBuffer.\n * @param string the string to decode\n * @return {ArrayBuffer} the decoded bytes\n */\n decode: string => {\n const remainder = string.length % 5;\n const padding = 5 - (remainder === 0 ? 5 : remainder);\n for (let p = 0; p < padding; ++p) {\n string += _z85EncodeTable[_z85EncodeTable.length - 1];\n }\n const length = string.length;\n const buffer = new ArrayBuffer(length * 4 / 5 - padding);\n const view = new DataView(buffer);\n let value = 0;\n let charIdx = 0;\n let byteIdx = 0;\n for (let i = 0; i < length; ++i) {\n const code = string.charCodeAt(charIdx++) - 32;\n value = value * 85 + _z85DecodeTable[code];\n if (charIdx % 5 === 0) {\n let divisor = 256 * 256 * 256;\n while (divisor >= 1) {\n if (byteIdx < view.byteLength) {\n view.setUint8(byteIdx++, Math.floor(value / divisor) % 256);\n }\n divisor /= 256;\n }\n value = 0;\n }\n }\n return buffer;\n }\n };\n _exports.default = {\n // MathWorks Added - convert source code to ECMAScript Modules\n CometD,\n Transport,\n RequestTransport,\n LongPollingTransport,\n CallbackPollingTransport,\n WebSocketTransport,\n Utils,\n Z85\n };\n return _exports.default;\n});\n//# sourceMappingURL=cometd.js.map\n","define([], function () {\n \"use strict\";\n\n var _exports = {};\n _exports.default = {\n APP_SERVICE_HOST: {\n name: 'APP_SERVICE_HOST',\n BASE_PREFIX: '/matlab',\n BASE_END_POINT: 'messageservice/async/blue'\n },\n MATLAB_SERVICE_HOST: {\n name: 'MATLAB_SERVICE_HOST',\n BASE_PREFIX: '/matlab',\n BASE_END_POINT: 'messageservice/async'\n }\n };\n return _exports.default;\n});\n//# sourceMappingURL=instanceEnums.js.map\n","\"use strict\";\n\n// Copyright 2017-2020 The MathWorks, Inc.\ndefine(['./facade/LitElement'], function (LitElement) {\n 'use strict'; // no-op (no operation) function\n\n const noOp = function () {};\n\n class WidgetBase extends LitElement {\n // Turn on/off shadow root based on the `_experimentalUseShadowDom` property\n createRenderRoot() {\n return window.ShadowRoot && this._experimentalUseShadowDom ? super.createRenderRoot() : this;\n }\n /**\n * Emits custom events from the widget.\n *\n * @param {string} eventName name of the event\n * @param {object} data an object with the\n * data that should be attached to the event\n * this ends up in the event's detail\n * @param {object} options an options object.\n * Can specify cancelable, bubbles (defaults\n * bubbles: false, canceable: false)\n */\n\n\n emit(eventName, data, options = {}) {\n let bubbles = options.bubbles || false;\n let cancelable = options.cancelable || false;\n let eventObj = new CustomEvent(eventName, {\n detail: data || {},\n bubbles: bubbles,\n cancelable: cancelable\n });\n this.dispatchEvent(eventObj);\n }\n /**\n * Listens on events that the widget throws.\n * @param {string} eventName The name of the event to listen on\n * @param {function} callback The function to call when the event occurs\n * @param {object} options an object that specifies if the event should be\n * passive, capture (defaults - passive: browser/event dependent,\n * capture: false)\n * @returns {object} - object with a remove function. Calling remove twice\n * does nothing\n */\n\n\n on(eventName, callback, options = {}) {\n this.addEventListener(eventName, callback, options);\n let removeFn = this.removeEventListener.bind(this, eventName, callback, options);\n return {\n remove: function () {\n removeFn();\n removeFn = noOp;\n }\n };\n }\n\n }\n\n return WidgetBase;\n});\n//# sourceMappingURL=WidgetBase.js.map\n","\"use strict\";\n\n// Copyright 2017-2020 The MathWorks, Inc.\ndefine([], function () {\n 'use strict';\n /**\n * @typedef widgetDefinition\n * @property {string} name Registered name of the widget. Used\n * by the browser when intantiating a widget via HTML or\n * document.createElement. Needs to be a kebab-case string starting\n * with \"mw-\" e.g. mw-some-widget\n * @property {instanceOf} widgetClass the class used as\n * the widget class. Should extend from WidgetBase\n */\n\n /**\n * Defines a Widget, registers the widget with\n * the browser, and returns a factory that can be\n * used to instantiate a widget programmatically.\n * @param {widgetDefinition} widgetDefinition\n * @returns CreateWidgetFunction\n */\n\n let defineWidget = function (widgetDefinition) {\n if (!widgetDefinition.widgetClass) {\n throw new Error('The widgetClass object must have a widget widgetClass property');\n }\n\n if (!widgetDefinition.name) {\n throw new Error('The widgetDefinition object must have a name property');\n }\n\n if (widgetDefinition.name.length < 3 || widgetDefinition.name.substring(0, 3) !== 'mw-') {\n throw new Error('The widgetDefinition object must have a name' + \"property starting with 'mw-'\");\n }\n\n let WidgetClass = widgetDefinition.widgetClass;\n\n if (WidgetClass._observedAttributes) {\n // Copy _observedAttributes from\n // Widget widgetClass to avoid accidental mutation\n // at runtime. Then define the\n // observedAttributes static getter\n // Backwards compatability with original WidgetBase API\n let observedAttributes = WidgetClass._observedAttributes.slice(0);\n\n Object.defineProperty(WidgetClass, 'observedAttributes', {\n enumerable: false,\n get: function get() {\n return observedAttributes;\n }\n });\n }\n\n customElements.define(widgetDefinition.name, WidgetClass); // Return a function that applies parameters to an instance of\n // the Widget\n\n return function create(params) {\n if (this instanceof create) {\n throw new Error(\"Do not use 'w = new Widget()' to create a widget instance. \" + \"Just use 'w = Widget()'\");\n }\n\n let widget = new WidgetClass();\n\n for (let prop in params) {\n if (Object.prototype.hasOwnProperty.call(params, prop)) {\n widget[prop] = params[prop];\n }\n }\n\n return widget;\n };\n };\n\n return defineWidget;\n});\n//# sourceMappingURL=defineWidget.js.map\n","\"use strict\";\n\n// Copyright 2018-2020 The MathWorks, Inc.\ndefine(['lit/lit-element/lit-element.bundled'], function (litElementComponents) {\n 'use strict'; // Since this is a wrapper function, if we need to modify it for bug fixes.\n // We should be able to just return a different function with the modifications\n // before or after the call. No one should be looking at the prototype chain here.\n // since we are not a newable object.\n\n return litElementComponents.html;\n});\n//# sourceMappingURL=html.js.map\n","module.exports = function(userConfig, defaultConfig, global, window) { this.loaderVersion = \"1.17.1\"; (function(\n\tuserConfig,\n\tdefaultConfig\n){\n\t// summary:\n\t//\t\tThis is the \"source loader\" and is the entry point for Dojo during development. You may also load Dojo with\n\t//\t\tany AMD-compliant loader via the package main module dojo/main.\n\t// description:\n\t//\t\tThis is the \"source loader\" for Dojo. It provides an AMD-compliant loader that can be configured\n\t//\t\tto operate in either synchronous or asynchronous modes. After the loader is defined, dojo is loaded\n\t//\t\tIAW the package main module dojo/main. In the event you wish to use a foreign loader, you may load dojo as a package\n\t//\t\tvia the package main module dojo/main and this loader is not required; see dojo/package.json for details.\n\t//\n\t//\t\tIn order to keep compatibility with the v1.x line, this loader includes additional machinery that enables\n\t//\t\tthe dojo.provide, dojo.require et al API. This machinery is loaded by default, but may be dynamically removed\n\t//\t\tvia the has.js API and statically removed via the build system.\n\t//\n\t//\t\tThis loader includes sniffing machinery to determine the environment; the following environments are supported:\n\t//\n\t//\t\t- browser\n\t//\t\t- node.js\n\t//\t\t- rhino\n\t//\n\t//\t\tThis is the so-called \"source loader\". As such, it includes many optional features that may be discarded by\n\t//\t\tbuilding a customized version with the build system.\n\n\t// Design and Implementation Notes\n\t//\n\t// This is a dojo-specific adaption of bdLoad, donated to the dojo foundation by Altoviso LLC.\n\t//\n\t// This function defines an AMD-compliant (http://wiki.commonjs.org/wiki/Modules/AsynchronousDefinition)\n\t// loader that can be configured to operate in either synchronous or asynchronous modes.\n\t//\n\t// Since this machinery implements a loader, it does not have the luxury of using a load system and/or\n\t// leveraging a utility library. This results in an unpleasantly long file; here is a road map of the contents:\n\t//\n\t//\t 1. Small library for use implementing the loader.\n\t//\t 2. Define the has.js API; this is used throughout the loader to bracket features.\n\t//\t 3. Define the node.js and rhino sniffs and sniff.\n\t//\t 4. Define the loader's data.\n\t//\t 5. Define the configuration machinery.\n\t//\t 6. Define the script element sniffing machinery and sniff for configuration data.\n\t//\t 7. Configure the loader IAW the provided user, default, and sniffing data.\n\t//\t 8. Define the global require function.\n\t//\t 9. Define the module resolution machinery.\n\t//\t10. Define the module and plugin module definition machinery\n\t//\t11. Define the script injection machinery.\n\t//\t12. Define the window load detection.\n\t//\t13. Define the logging API.\n\t//\t14. Define the tracing API.\n\t//\t16. Define the AMD define function.\n\t//\t17. Define the dojo v1.x provide/require machinery--so called \"legacy\" modes.\n\t//\t18. Publish global variables.\n\t//\n\t// Language and Acronyms and Idioms\n\t//\n\t// moduleId: a CJS module identifier, (used for public APIs)\n\t// mid: moduleId (used internally)\n\t// packageId: a package identifier (used for public APIs)\n\t// pid: packageId (used internally); the implied system or default package has pid===\"\"\n\t// pack: package is used internally to reference a package object (since javascript has reserved words including \"package\")\n\t// prid: plugin resource identifier\n\t// The integer constant 1 is used in place of true and 0 in place of false.\n\t//\n\t// The \"foreign-loader\" has condition is defined if another loader is being used (e.g. webpack) and this code is only\n\t// needed for resolving module identifiers based on the config. In this case, only the functions require.toUrl and \n\t// require.toAbsMid are supported. The require and define functions are not supported.\n\n\t// define global\n\tvar globalObject = (function(){\n\t\tif (typeof global !== 'undefined' && typeof global !== 'function') {\n\t\t\t// global spec defines a reference to the global object called 'global'\n\t\t\t// https://github.com/tc39/proposal-global\n\t\t\t// `global` is also defined in NodeJS\n\t\t\treturn global;\n\t\t}\n\t\telse if (typeof window !== 'undefined') {\n\t\t\t// window is defined in browsers\n\t\t\t// MATHWORKS ADDED \n\t\t\t// Fix for loader issues in QUnitNode: g2700506\n\t\t\tif (this && this.dojoConfig && !window.dojoConfig) {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\t// MATHWORKS ADDED END\n\t\t\treturn window;\n\t\t}\n\t\telse if (typeof self !== 'undefined') {\n\t\t\t// self is defined in WebWorkers\n\t\t\treturn self;\n\t\t}\n\t\treturn this;\n\t})();\n\n\t// define a minimal library to help build the loader\n\tvar noop = function(){\n\t\t},\n\n\t\tisEmpty = function(it){\n\t\t\tfor(var p in it){\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t\treturn 1;\n\t\t},\n\n\t\ttoString = {}.toString,\n\n\t\tisFunction = function(it){\n\t\t\treturn toString.call(it) == \"[object Function]\";\n\t\t},\n\n\t\tisString = function(it){\n\t\t\treturn toString.call(it) == \"[object String]\";\n\t\t},\n\n\t\tisArray = function(it){\n\t\t\treturn toString.call(it) == \"[object Array]\";\n\t\t},\n\n\t\tforEach = function(vector, callback){\n\t\t\tif(vector){\n\t\t\t\tfor(var i = 0; i < vector.length;){\n\t\t\t\t\tcallback(vector[i++]);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tmix = function(dest, src){\n\t\t\tfor(var p in src){\n\t\t\t\tdest[p] = src[p];\n\t\t\t}\n\t\t\treturn dest;\n\t\t},\n\n\t\tmakeError = function(error, info){\n\t\t\treturn mix(new Error(error), {src:\"dojoLoader\", info:info});\n\t\t},\n\n\t\tuidSeed = 1,\n\n\t\tuid = function(){\n\t\t\t// Returns a unique identifier (within the lifetime of the document) of the form /_d+/.\n\t\t\treturn \"_\" + uidSeed++;\n\t\t},\n\n\t\t// FIXME: how to doc window.require() api\n\n\t\t// this will be the global require function; define it immediately so we can start hanging things off of it\n\t\treq = function(\n\t\t\tconfig,\t\t //(object, optional) hash of configuration properties\n\t\t\tdependencies, //(array of commonjs.moduleId, optional) list of modules to be loaded before applying callback\n\t\t\tcallback\t //(function, optional) lambda expression to apply to module values implied by dependencies\n\t\t){\n\t\t\treturn contextRequire(config, dependencies, callback, 0, req);\n\t\t},\n\n\t\t// the loader uses the has.js API to control feature inclusion/exclusion; define then use throughout\n\t\tglobal = globalObject,\n\n\t\tdoc = global.document,\n\n\t\telement = doc && doc.createElement(\"DiV\"),\n\n\t\thas = req.has = function(name){\n\t\t\treturn isFunction(hasCache[name]) ? (hasCache[name] = hasCache[name](global, doc, element)) : hasCache[name];\n\t\t},\n\n\t\thasCache = has.cache = defaultConfig.hasCache;\n\n\tif (isFunction(userConfig)) {\n\t\tuserConfig = userConfig(globalObject);\n\t}\n\n\thas.add = function(name, test, now, force){\n\t\t(hasCache[name]===undefined || force) && (hasCache[name] = test);\n\t\treturn now && has(name);\n\t};\n\n\t 0 && has.add(\"host-node\", userConfig.has && \"host-node\" in userConfig.has ?\n\t\tuserConfig.has[\"host-node\"] :\n\t\t(typeof process == \"object\" && process.versions && process.versions.node && process.versions.v8));\n\tif( 0 ){\n\t\t// fixup the default config for node.js environment\n\t\trequire(\"./_base/configNode.js\").config(defaultConfig);\n\t\t// remember node's require (with respect to baseUrl==dojo's root)\n\t\tdefaultConfig.loaderPatch.nodeRequire = require;\n\t}\n\n\t 0 && has.add(\"host-rhino\", userConfig.has && \"host-rhino\" in userConfig.has ?\n\t\tuserConfig.has[\"host-rhino\"] :\n\t\t(typeof load == \"function\" && (typeof Packages == \"function\" || typeof Packages == \"object\")));\n\tif( 0 ){\n\t\t// owing to rhino's lame feature that hides the source of the script, give the user a way to specify the baseUrl...\n\t\tfor(var baseUrl = userConfig.baseUrl || \".\", arg, rhinoArgs = this.arguments, i = 0; i < rhinoArgs.length;){\n\t\t\targ = (rhinoArgs[i++] + \"\").split(\"=\");\n\t\t\tif(arg[0] == \"baseUrl\"){\n\t\t\t\tbaseUrl = arg[1];\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tload(baseUrl + \"/_base/configRhino.js\");\n\t\trhinoDojoConfig(defaultConfig, baseUrl, rhinoArgs);\n\t}\n\n\t 0 && has.add(\"host-webworker\", ((typeof WorkerGlobalScope !== 'undefined') && (self instanceof WorkerGlobalScope)));\n\tif( 0 ){\n\t\tmix(defaultConfig.hasCache, {\n\t\t\t\"host-browser\": 0,\n\t\t\t\"dom\": 0,\n\t\t\t\"dojo-dom-ready-api\": 0,\n\t\t\t\"dojo-sniff\": 0,\n\t\t\t\"dojo-inject-api\": 1,\n\t\t\t\"host-webworker\": 1,\n\t\t\t\"dojo-guarantee-console\": 0 // console is immutable in FF30+, see https://bugs.dojotoolkit.org/ticket/18100\n\t\t});\n\n\t\tdefaultConfig.loaderPatch = {\n\t\t\tinjectUrl: function(url, callback){\n\t\t\t\t// TODO:\n\t\t\t\t//\t\tThis is not async, nor can it be in Webworkers. It could be made better by passing\n\t\t\t\t//\t\tthe entire require array into importScripts at. This way the scripts are loaded in\n\t\t\t\t//\t\tasync mode; even if the callbacks are ran in sync. It is not a major issue as webworkers\n\t\t\t\t//\t\ttend to be long running where initial startup is not a major factor.\n\n\t\t\t\ttry{\n\t\t\t\t\timportScripts(url);\n\t\t\t\t\tcallback();\n\t\t\t\t}catch(e){\n\t\t\t\t\tconsole.info(\"failed to load resource (\" + url + \")\");\n\t\t\t\t\tconsole.error(e);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n\n\t// userConfig has tests override defaultConfig has tests; do this after the environment detection because\n\t// the environment detection usually sets some has feature values in the hasCache.\n\tfor(var p in userConfig.has){\n\t\thas.add(p, userConfig.has[p], 0, 1);\n\t}\n\n\t//\n\t// define the loader data\n\t//\n\n\t// the loader will use these like symbols if the loader has the traceApi; otherwise\n\t// define magic numbers so that modules can be provided as part of defaultConfig\n\tvar requested = 1,\n\t\tarrived = 2,\n\t\tnonmodule = 3,\n\t\texecuting = 4,\n\t\texecuted = 5;\n\n\tif( 0 ){\n\t\t// these make debugging nice; but using strings for symbols is a gross rookie error; don't do it for production code\n\t\trequested = \"requested\";\n\t\tarrived = \"arrived\";\n\t\tnonmodule = \"not-a-module\";\n\t\texecuting = \"executing\";\n\t\texecuted = \"executed\";\n\t}\n\n\tvar legacyMode = 0,\n\t\tsync = \"sync\",\n\t\txd = \"xd\",\n\t\tsyncExecStack = [],\n\t\tdojoRequirePlugin = 0,\n\t\tcheckDojoRequirePlugin = noop,\n\t\ttransformToAmd = noop,\n\t\tgetXhr;\n\tif( 0 ){\n\t\treq.isXdUrl = noop;\n\n\t\treq.initSyncLoader = function(dojoRequirePlugin_, checkDojoRequirePlugin_, transformToAmd_){\n\t\t\t// the first dojo/_base/loader loaded gets to define these variables; they are designed to work\n\t\t\t// in the presence of zero to many mapped dojo/_base/loaders\n\t\t\tif(!dojoRequirePlugin){\n\t\t\t\tdojoRequirePlugin = dojoRequirePlugin_;\n\t\t\t\tcheckDojoRequirePlugin = checkDojoRequirePlugin_;\n\t\t\t\ttransformToAmd = transformToAmd_;\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tsync:sync,\n\t\t\t\trequested:requested,\n\t\t\t\tarrived:arrived,\n\t\t\t\tnonmodule:nonmodule,\n\t\t\t\texecuting:executing,\n\t\t\t\texecuted:executed,\n\t\t\t\tsyncExecStack:syncExecStack,\n\t\t\t\tmodules:modules,\n\t\t\t\texecQ:execQ,\n\t\t\t\tgetModule:getModule,\n\t\t\t\tinjectModule:injectModule,\n\t\t\t\tsetArrived:setArrived,\n\t\t\t\tsignal:signal,\n\t\t\t\tfinishExec:finishExec,\n\t\t\t\texecModule:execModule,\n\t\t\t\tdojoRequirePlugin:dojoRequirePlugin,\n\t\t\t\tgetLegacyMode:function(){return legacyMode;},\n\t\t\t\tguardCheckComplete:guardCheckComplete\n\t\t\t};\n\t\t};\n\n\t\tif( 0 || 0 ){\n\t\t\t// in legacy sync mode, the loader needs a minimal XHR library\n\n\t\t\tvar locationProtocol = location.protocol,\n\t\t\t\tlocationHost = location.host;\n\t\t\treq.isXdUrl = function(url){\n\t\t\t\tif(/^\\./.test(url)){\n\t\t\t\t\t// begins with a dot is always relative to page URL; therefore not xdomain\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tif(/^\\/\\//.test(url)){\n\t\t\t\t\t// for v1.6- backcompat, url starting with // indicates xdomain\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\t// get protocol and host\n\t\t\t\t// \\/+ takes care of the typical file protocol that looks like file:///drive/path/to/file\n\t\t\t\t// locationHost is falsy if file protocol => if locationProtocol matches and is \"file:\", || will return false\n\t\t\t\tvar match = url.match(/^([^\\/\\:]+\\:)\\/+([^\\/]+)/);\n\t\t\t\treturn match && (match[1] != locationProtocol || (locationHost && match[2] != locationHost));\n\t\t\t};\n\n\n\t\t\t// note: to get the file:// protocol to work in FF, you must set security.fileuri.strict_origin_policy to false in about:config\n\t\t\t 1 || has.add(\"dojo-xhr-factory\", 1);\n\t\t\t 0 && has.add(\"dojo-force-activex-xhr\", 1 && !doc.addEventListener && window.location.protocol == \"file:\");\n\t\t\thas.add(\"native-xhr\", typeof XMLHttpRequest != \"undefined\");\n\t\t\tif(has(\"native-xhr\") && ! 0 ){\n\t\t\t\tgetXhr = function(){\n\t\t\t\t\treturn new XMLHttpRequest();\n\t\t\t\t};\n\t\t\t}else{\n\t\t\t\t// if in the browser an old IE; find an xhr\n\t\t\t\tfor(var XMLHTTP_PROGIDS = ['Msxml2.XMLHTTP', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP.4.0'], progid, i = 0; i < 3;){\n\t\t\t\t\ttry{\n\t\t\t\t\t\tprogid = XMLHTTP_PROGIDS[i++];\n\t\t\t\t\t\tif(new ActiveXObject(progid)){\n\t\t\t\t\t\t\t// this progid works; therefore, use it from now on\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}catch(e){\n\t\t\t\t\t\t// squelch; we're just trying to find a good ActiveX progid\n\t\t\t\t\t\t// if they all fail, then progid ends up as the last attempt and that will signal the error\n\t\t\t\t\t\t// the first time the client actually tries to exec an xhr\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tgetXhr = function(){\n\t\t\t\t\treturn new ActiveXObject(progid);\n\t\t\t\t};\n\t\t\t}\n\t\t\treq.getXhr = getXhr;\n\n\t\t\thas.add(\"dojo-gettext-api\", 1);\n\t\t\treq.getText = function(url, async, onLoad){\n\t\t\t\tvar xhr = getXhr();\n\t\t\t\txhr.open('GET', fixupUrl(url), false);\n\t\t\t\txhr.send(null);\n\t\t\t\tif(xhr.status == 200 || (!location.host && !xhr.status)){\n\t\t\t\t\tif(onLoad){\n\t\t\t\t\t\tonLoad(xhr.responseText, async);\n\t\t\t\t\t}\n\t\t\t\t}else{\n\t\t\t\t\tthrow makeError(\"xhrFailed\", xhr.status);\n\t\t\t\t}\n\t\t\t\treturn xhr.responseText;\n\t\t\t};\n\t\t}\n\t}else{\n\t\treq.async = 1;\n\t}\n\n\t//\n\t// loader eval\n\t//\n\tvar eval_ = 1 ?\n\t\t// noop eval if there are csp restrictions\n\t\tfunction(){} :\n\t\t// use the function constructor so our eval is scoped close to (but not in) in the global space with minimal pollution\n\t\tnew Function('return eval(arguments[0]);');\n\n\treq.eval =\n\t\tfunction(text, hint){\n\t\t\treturn eval_(text + \"\\r\\n//# sourceURL=\" + hint);\n\t\t};\n\n\t//\n\t// loader micro events API\n\t//\n\tvar listenerQueues = {},\n\t\terror = \"error\",\n\t\tsignal = req.signal = function(type, args){\n\t\t\tvar queue = listenerQueues[type];\n\t\t\t// notice we run a copy of the queue; this allows listeners to add/remove\n\t\t\t// other listeners without affecting this particular signal\n\t\t\tforEach(queue && queue.slice(0), function(listener){\n\t\t\t\tlistener.apply(null, isArray(args) ? args : [args]);\n\t\t\t});\n\t\t},\n\t\ton = req.on = function(type, listener){\n\t\t\t// notice a queue is not created until a client actually connects\n\t\t\tvar queue = listenerQueues[type] || (listenerQueues[type] = []);\n\t\t\tqueue.push(listener);\n\t\t\treturn {\n\t\t\t\tremove:function(){\n\t\t\t\t\tfor(var i = 0; i<queue.length; i++){\n\t\t\t\t\t\tif(queue[i]===listener){\n\t\t\t\t\t\t\tqueue.splice(i, 1);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t};\n\n\t// configuration machinery; with an optimized/built defaultConfig, all configuration machinery can be discarded\n\t// lexical variables hold key loader data structures to help with minification; these may be completely,\n\t// one-time initialized by defaultConfig for optimized/built versions\n\tvar\n\t\taliases\n\t\t\t// a vector of pairs of [regexs or string, replacement] => (alias, actual)\n\t\t\t= [],\n\n\t\tpaths\n\t\t\t// CommonJS paths\n\t\t\t= {},\n\n\t\tpathsMapProg\n\t\t\t// list of (from-path, to-path, regex, length) derived from paths;\n\t\t\t// a \"program\" to apply paths; see computeMapProg\n\t\t\t= [],\n\n\t\tpacks\n\t\t\t// a map from packageId to package configuration object; see fixupPackageInfo\n\t\t\t= {},\n\n\t\tmap = req.map\n\t\t\t// AMD map config variable; dojo/_base/kernel needs req.map to figure out the scope map\n\t\t\t= {},\n\n\t\tmapProgs\n\t\t\t// vector of quads as described by computeMapProg; map-key is AMD map key, map-value is AMD map value\n\t\t\t= [],\n\n\t\tmodules\n\t\t\t// A hash:(mid) --> (module-object) the module namespace\n\t\t\t//\n\t\t\t// pid: the package identifier to which the module belongs (e.g., \"dojo\"); \"\" indicates the system or default package\n\t\t\t// mid: the fully-resolved (i.e., mappings have been applied) module identifier without the package identifier (e.g., \"dojo/io/script\")\n\t\t\t// url: the URL from which the module was retrieved\n\t\t\t// pack: the package object of the package to which the module belongs\n\t\t\t// executed: 0 => not executed; executing => in the process of traversing deps and running factory; executed => factory has been executed\n\t\t\t// deps: the dependency vector for this module (vector of modules objects)\n\t\t\t// def: the factory for this module\n\t\t\t// result: the result of the running the factory for this module\n\t\t\t// injected: (0 | requested | arrived) the status of the module; nonmodule means the resource did not call define\n\t\t\t// load: plugin load function; applicable only for plugins\n\t\t\t//\n\t\t\t// Modules go through several phases in creation:\n\t\t\t//\n\t\t\t// 1. Requested: some other module's definition or a require application contained the requested module in\n\t\t\t//\t its dependency vector or executing code explicitly demands a module via req.require.\n\t\t\t//\n\t\t\t// 2. Injected: a script element has been appended to the insert-point element demanding the resource implied by the URL\n\t\t\t//\n\t\t\t// 3. Loaded: the resource injected in [2] has been evaluated.\n\t\t\t//\n\t\t\t// 4. Defined: the resource contained a define statement that advised the loader about the module. Notice that some\n\t\t\t//\t resources may just contain a bundle of code and never formally define a module via define\n\t\t\t//\n\t\t\t// 5. Evaluated: the module was defined via define and the loader has evaluated the factory and computed a result.\n\t\t\t= {},\n\n\t\tcacheBust\n\t\t\t// query string to append to module URLs to bust browser cache\n\t\t\t= \"\",\n\n\t\tcache\n\t\t\t// hash:(mid | url)-->(function | string)\n\t\t\t//\n\t\t\t// A cache of resources. The resources arrive via a config.cache object, which is a hash from either mid --> function or\n\t\t\t// url --> string. The url key is distinguished from the mid key by always containing the prefix \"url:\". url keys as provided\n\t\t\t// by config.cache always have a string value that represents the contents of the resource at the given url. mid keys as provided\n\t\t\t// by configl.cache always have a function value that causes the same code to execute as if the module was script injected.\n\t\t\t//\n\t\t\t// Both kinds of key-value pairs are entered into cache via the function consumePendingCache, which may relocate keys as given\n\t\t\t// by any mappings *iff* the config.cache was received as part of a module resource request.\n\t\t\t//\n\t\t\t// Further, for mid keys, the implied url is computed and the value is entered into that key as well. This allows mapped modules\n\t\t\t// to retrieve cached items that may have arrived consequent to another namespace.\n\t\t\t//\n\t\t\t = {},\n\n\t\turlKeyPrefix\n\t\t\t// the prefix to prepend to a URL key in the cache.\n\t\t\t= \"url:\",\n\n\t\tpendingCacheInsert\n\t\t\t// hash:(mid)-->(function)\n\t\t\t//\n\t\t\t// Gives a set of cache modules pending entry into cache. When cached modules are published to the loader, they are\n\t\t\t// entered into pendingCacheInsert; modules are then pressed into cache upon (1) AMD define or (2) upon receiving another\n\t\t\t// independent set of cached modules. (1) is the usual case, and this case allows normalizing mids given in the pending\n\t\t\t// cache for the local configuration, possibly relocating modules.\n\t\t\t = {},\n\n\t\tdojoSniffConfig\n\t\t\t// map of configuration variables\n\t\t\t// give the data-dojo-config as sniffed from the document (if any)\n\t\t\t= {},\n\n\t\tinsertPointSibling\n\t\t\t// the nodes used to locate where scripts are injected into the document\n\t\t\t= 0;\n\n\tif( 1 ){\n\t\tif (! 1 ) {\n\t\t\tvar consumePendingCacheInsert = function(referenceModule, clear){\n\t\t\t\t\tclear = clear !== false;\n\t\t\t\t\tvar p, item, match, now, m;\n\t\t\t\t\tfor(p in pendingCacheInsert){\n\t\t\t\t\t\titem = pendingCacheInsert[p];\n\t\t\t\t\t\tmatch = p.match(/^url\\:(.+)/);\n\t\t\t\t\t\tif(match){\n\t\t\t\t\t\t\tcache[urlKeyPrefix + toUrl(match[1], referenceModule)] = item;\n\t\t\t\t\t\t}else if(p==\"*now\"){\n\t\t\t\t\t\t\tnow = item;\n\t\t\t\t\t\t}else if(p!=\"*noref\"){\n\t\t\t\t\t\t\tm = getModuleInfo(p, referenceModule, true);\n\t\t\t\t\t\t\tcache[m.mid] = cache[urlKeyPrefix + m.url] = item;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif(now){\n\t\t\t\t\t\tnow(createRequire(referenceModule));\n\t\t\t\t\t}\n\t\t\t\t\tif(clear){\n\t\t\t\t\t\tpendingCacheInsert = {};\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t}\n\t\tvar escapeString = function(s){\n\t\t\t\treturn s.replace(/([\\.$?*|{}\\(\\)\\[\\]\\\\\\/\\+^])/g, function(c){ return \"\\\\\" + c; });\n\t\t\t},\n\n\t\t\tcomputeMapProg = function(map, dest){\n\t\t\t\t// This routine takes a map as represented by a JavaScript object and initializes dest, a vector of\n\t\t\t\t// quads of (map-key, map-value, refex-for-map-key, length-of-map-key), sorted decreasing by length-\n\t\t\t\t// of-map-key. The regex looks for the map-key followed by either \"/\" or end-of-string at the beginning\n\t\t\t\t// of a the search source. Notice the map-value is irrelevant to the algorithm\n\t\t\t\tdest.splice(0, dest.length);\n\t\t\t\tfor(var p in map){\n\t\t\t\t\tdest.push([\n\t\t\t\t\t\tp,\n\t\t\t\t\t\tmap[p],\n\t\t\t\t\t\tnew RegExp(\"^\" + escapeString(p) + \"(\\/|$)\"),\n\t\t\t\t\t\tp.length]);\n\t\t\t\t}\n\t\t\t\tdest.sort(function(lhs, rhs){ return rhs[3] - lhs[3]; });\n\t\t\t\treturn dest;\n\t\t\t},\n\n\t\t\tcomputeAliases = function(config, dest){\n\t\t\t\tforEach(config, function(pair){\n\t\t\t\t\t// take a fixed-up copy...\n\t\t\t\t\tdest.push([isString(pair[0]) ? new RegExp(\"^\" + escapeString(pair[0]) + \"$\") : pair[0], pair[1]]);\n\t\t\t\t});\n\t\t\t},\n\n\n\t\t\tfixupPackageInfo = function(packageInfo){\n\t\t\t\t// calculate the precise (name, location, main, mappings) for a package\n\t\t\t\tvar name = packageInfo.name;\n\t\t\t\tif(!name){\n\t\t\t\t\t// packageInfo must be a string that gives the name\n\t\t\t\t\tname = packageInfo;\n\t\t\t\t\tpackageInfo = {name:name};\n\t\t\t\t}\n\t\t\t\tpackageInfo = mix({main:\"main\"}, packageInfo);\n\t\t\t\tpackageInfo.location = packageInfo.location ? packageInfo.location : name;\n\n\t\t\t\t// packageMap is deprecated in favor of AMD map\n\t\t\t\tif(packageInfo.packageMap){\n\t\t\t\t\tmap[name] = packageInfo.packageMap;\n\t\t\t\t}\n\n\t\t\t\tif(!packageInfo.main.indexOf(\"./\")){\n\t\t\t\t\tpackageInfo.main = packageInfo.main.substring(2);\n\t\t\t\t}\n\n\t\t\t\t// now that we've got a fully-resolved package object, push it into the configuration\n\t\t\t\tpacks[name] = packageInfo;\n\t\t\t},\n\n\t\t\tdelayedModuleConfig\n\t\t\t\t// module config cannot be consumed until the loader is completely initialized; therefore, all\n\t\t\t\t// module config detected during booting is memorized and applied at the end of loader initialization\n\t\t\t\t// TODO: this is a bit of a kludge; all config should be moved to end of loader initialization, but\n\t\t\t\t// we'll delay this chore and do it with a final loader 1.x cleanup after the 2.x loader prototyping is complete\n\t\t\t\t= [],\n\n\n\t\t\tconfig = function(config, booting, referenceModule){\n\t\t\t\tfor(var p in config){\n\t\t\t\t\tif(p==\"waitSeconds\"){\n\t\t\t\t\t\treq.waitms = (config[p] || 0) * 1000;\n\t\t\t\t\t}\n\t\t\t\t\tif(p==\"cacheBust\"){\n\t\t\t\t\t\tcacheBust = config[p] ? (isString(config[p]) ? config[p] : (new Date()).getTime() + \"\") : \"\";\n\t\t\t\t\t}\n\t\t\t\t\tif(p==\"baseUrl\" || p==\"combo\"){\n\t\t\t\t\t\treq[p] = config[p];\n\t\t\t\t\t}\n\t\t\t\t\tif( 0 && p==\"async\"){\n\t\t\t\t\t\t// falsy or \"sync\" => legacy sync loader\n\t\t\t\t\t\t// \"xd\" => sync but loading xdomain tree and therefore loading asynchronously (not configurable, set automatically by the loader)\n\t\t\t\t\t\t// \"legacyAsync\" => permanently in \"xd\" by choice\n\t\t\t\t\t\t// \"debugAtAllCosts\" => trying to load everything via script injection (not implemented)\n\t\t\t\t\t\t// otherwise, must be truthy => AMD\n\t\t\t\t\t\t// legacyMode: sync | legacyAsync | xd | false\n\t\t\t\t\t\tvar mode = config[p];\n\t\t\t\t\t\treq.legacyMode = legacyMode = (isString(mode) && /sync|legacyAsync/.test(mode) ? mode : (!mode ? sync : false));\n\t\t\t\t\t\treq.async = !legacyMode;\n\t\t\t\t\t}\n\t\t\t\t\tif(config[p]!==hasCache){\n\t\t\t\t\t\t// accumulate raw config info for client apps which can use this to pass their own config\n\t\t\t\t\t\treq.rawConfig[p] = config[p];\n\t\t\t\t\t\tp!=\"has\" && has.add(\"config-\"+p, config[p], 0, booting);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// make sure baseUrl exists\n\t\t\t\tif(!req.baseUrl){\n\t\t\t\t\treq.baseUrl = \"./\";\n\t\t\t\t}\n\t\t\t\t// make sure baseUrl ends with a slash\n\t\t\t\tif(!/\\/$/.test(req.baseUrl)){\n\t\t\t\t\treq.baseUrl += \"/\";\n\t\t\t\t}\n\n\t\t\t\t// now do the special work for has, packages, packagePaths, paths, aliases, and cache\n\n\t\t\t\tfor(p in config.has){\n\t\t\t\t\thas.add(p, config.has[p], 0, booting);\n\t\t\t\t}\n\n\t\t\t\t// for each package found in any packages config item, augment the packs map owned by the loader\n\t\t\t\tforEach(config.packages, fixupPackageInfo);\n\n\t\t\t\t// for each packagePath found in any packagePaths config item, augment the packageConfig\n\t\t\t\t// packagePaths is deprecated; remove in 2.0\n\t\t\t\tfor(var baseUrl in config.packagePaths){\n\t\t\t\t\tforEach(config.packagePaths[baseUrl], function(packageInfo){\n\t\t\t\t\t\tvar location = baseUrl + \"/\" + packageInfo;\n\t\t\t\t\t\tif(isString(packageInfo)){\n\t\t\t\t\t\t\tpackageInfo = {name:packageInfo};\n\t\t\t\t\t\t}\n\t\t\t\t\t\tpackageInfo.location = location;\n\t\t\t\t\t\tfixupPackageInfo(packageInfo);\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t// notice that computeMapProg treats the dest as a reference; therefore, if/when that variable\n\t\t\t\t// is published (see dojo-publish-privates), the published variable will always hold a valid value.\n\n\t\t\t\t// this must come after all package processing since package processing may mutate map\n\t\t\t\tcomputeMapProg(mix(map, config.map), mapProgs);\n\t\t\t\tforEach(mapProgs, function(item){\n\t\t\t\t\titem[1] = computeMapProg(item[1], []);\n\t\t\t\t\tif(item[0]==\"*\"){\n\t\t\t\t\t\tmapProgs.star = item;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\t// push in any paths and recompute the internal pathmap\n\t\t\t\tcomputeMapProg(mix(paths, config.paths), pathsMapProg);\n\n\t\t\t\t// aliases\n\t\t\t\tcomputeAliases(config.aliases, aliases);\n\n\t\t\t\tif (! 1 ) {\n\t\t\t\t\tif(booting){\n\t\t\t\t\t\tdelayedModuleConfig.push({config:config.config});\n\t\t\t\t\t}else{\n\t\t\t\t\t\tfor(p in config.config){\n\t\t\t\t\t\t\tvar module = getModule(p, referenceModule);\n\t\t\t\t\t\t\tmodule.config = mix(module.config || {}, config.config[p]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// push in any new cache values\n\t\t\t\t\tif(config.cache){\n\t\t\t\t\t\tconsumePendingCacheInsert();\n\t\t\t\t\t\tpendingCacheInsert = config.cache;\n\t\t\t\t\t\t//inject now all depencies so cache is available for mapped module\n\t\t\t\t\t\tconsumePendingCacheInsert(0, !!config.cache[\"*noref\"]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tsignal(\"config\", [config, req.rawConfig]);\n\t\t\t};\n\n\t\t//\n\t\t// execute the various sniffs; userConfig can override and value\n\t\t//\n\n\t\tif( 0 || 0 ){\n\t\t\t// the sniff regex looks for a src attribute ending in dojo.js, optionally preceded with a path.\n\t\t\t// match[3] returns the path to dojo.js (if any) without the trailing slash. This is used for the\n\t\t\t// dojo location on CDN deployments and baseUrl when either/both of these are not provided\n\t\t\t// explicitly in the config data; this is the 1.6- behavior.\n\n\t\t\tvar scripts = doc.getElementsByTagName(\"script\"),\n\t\t\t\ti = 0,\n\t\t\t\tscript, dojoDir, src, match;\n\t\t\twhile(i < scripts.length){\n\t\t\t\tscript = scripts[i++];\n\t\t\t\tif((src = script.getAttribute(\"src\")) && (match = src.match(/(((.*)\\/)|^)dojo\\.js(\\W|$)/i))){\n\t\t\t\t\t// sniff dojoDir and baseUrl\n\t\t\t\t\tdojoDir = match[3] || \"\";\n\t\t\t\t\tdefaultConfig.baseUrl = defaultConfig.baseUrl || dojoDir;\n\n\t\t\t\t\t// remember an insertPointSibling\n\t\t\t\t\tinsertPointSibling = script;\n\t\t\t\t}\n\n\t\t\t\t// sniff configuration on attribute in script element\n\t\t\t\tif((src = (script.getAttribute(\"data-dojo-config\") || script.getAttribute(\"djConfig\")))){\n\t\t\t\t\tdojoSniffConfig = req.eval(\"({ \" + src + \" })\", \"data-dojo-config\");\n\n\t\t\t\t\t// remember an insertPointSibling\n\t\t\t\t\tinsertPointSibling = script;\n\t\t\t\t}\n\n\t\t\t\t// sniff requirejs attribute\n\t\t\t\tif( 0 ){\n\t\t\t\t\tif((src = script.getAttribute(\"data-main\"))){\n\t\t\t\t\t\tdojoSniffConfig.deps = dojoSniffConfig.deps || [src];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif( 0 ){\n\t\t\t// pass down doh.testConfig from parent as if it were a data-dojo-config\n\t\t\ttry{\n\t\t\t\tif(window.parent != window && window.parent.require){\n\t\t\t\t\tvar doh = window.parent.require(\"doh\");\n\t\t\t\t\tdoh && mix(dojoSniffConfig, doh.testConfig);\n\t\t\t\t}\n\t\t\t}catch(e){}\n\t\t}\n\n\t\t// configure the loader; let the user override defaults\n\t\treq.rawConfig = {};\n\t\tconfig(defaultConfig, 1);\n\n\t\t// do this before setting userConfig/sniffConfig to allow userConfig/sniff overrides\n\t\tif( 0 ){\n\t\t\tpacks.dojo.location = dojoDir;\n\t\t\tif(dojoDir){\n\t\t\t\tdojoDir += \"/\";\n\t\t\t}\n\t\t\tpacks.dijit.location = dojoDir + \"../dijit/\";\n\t\t\tpacks.dojox.location = dojoDir + \"../dojox/\";\n\t\t}\n\n\t\tconfig(userConfig, 1);\n\t\tconfig(dojoSniffConfig, 1);\n\n\t}else{\n\t\t// no config API, assume defaultConfig has everything the loader needs...for the entire lifetime of the application\n\t\tpaths = defaultConfig.paths;\n\t\tpathsMapProg = defaultConfig.pathsMapProg;\n\t\tpacks = defaultConfig.packs;\n\t\taliases = defaultConfig.aliases;\n\t\tmapProgs = defaultConfig.mapProgs;\n\t\tmodules = defaultConfig.modules;\n\t\tcache = defaultConfig.cache;\n\t\tcacheBust = defaultConfig.cacheBust;\n\n\t\t// remember the default config for other processes (e.g., dojo/config)\n\t\treq.rawConfig = defaultConfig;\n\t}\n\n\n\tif (! 1 ) {\n\t\tif( 0 ){\n\t\t\treq.combo = req.combo || {add:noop};\n\t\t\tvar comboPending = 0,\n\t\t\t\tcombosPending = [],\n\t\t\t\tcomboPendingTimer = null;\n\t\t}\n\t\t\n\n\t\t// build the loader machinery iaw configuration, including has feature tests\n\t\tvar injectDependencies = function(module){\n\t\t\t\t// checkComplete!=0 holds the idle signal; we're not idle if we're injecting dependencies\n\t\t\t\tguardCheckComplete(function(){\n\t\t\t\t\tforEach(module.deps, injectModule);\n\t\t\t\t\tif( 0 && comboPending && !comboPendingTimer){\n\t\t\t\t\t\tcomboPendingTimer = setTimeout(function() {\n\t\t\t\t\t\t\tcomboPending = 0;\n\t\t\t\t\t\t\tcomboPendingTimer = null;\n\t\t\t\t\t\t\treq.combo.done(function(mids, url) {\n\t\t\t\t\t\t\t\tvar onLoadCallback= function(){\n\t\t\t\t\t\t\t\t\t// defQ is a vector of module definitions 1-to-1, onto mids\n\t\t\t\t\t\t\t\t\trunDefQ(0, mids);\n\t\t\t\t\t\t\t\t\tcheckComplete();\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\tcombosPending.push(mids);\n\t\t\t\t\t\t\t\tinjectingModule = mids;\n\t\t\t\t\t\t\t\treq.injectUrl(url, onLoadCallback, mids);\n\t\t\t\t\t\t\t\tinjectingModule = 0;\n\t\t\t\t\t\t\t}, req);\n\t\t\t\t\t\t}, 0);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t},\n\n\t\t\tcontextRequire = function(a1, a2, a3, referenceModule, contextRequire){\n\t\t\t\tvar module, syntheticMid;\n\t\t\t\tif(isString(a1)){\n\t\t\t\t\t// signature is (moduleId)\n\t\t\t\t\tmodule = getModule(a1, referenceModule, true);\n\t\t\t\t\tif(module && module.executed){\n\t\t\t\t\t\treturn module.result;\n\t\t\t\t\t}\n\n\t\t\t\t\t// MATHWORKS ADDED IF\n\t\t\t\t\t// If loading i18n bundle, ignore failure\n\t\t\t\t\tif (referenceModule.mid === \"dojo/i18n\") {\n \treturn;\n \t}\n\t\n\t\t\t\t\tthrow makeError(\"undefinedModule\", a1);\n\t\t\t\t}\n\t\t\t\tif(!isArray(a1)){\n\t\t\t\t\t// a1 is a configuration\n\t\t\t\t\tconfig(a1, 0, referenceModule);\n\n\t\t\t\t\t// juggle args; (a2, a3) may be (dependencies, callback)\n\t\t\t\t\ta1 = a2;\n\t\t\t\t\ta2 = a3;\n\t\t\t\t}\n\t\t\t\tif(isArray(a1)){\n\t\t\t\t\t// signature is (requestList [,callback])\n\t\t\t\t\tif(!a1.length){\n\t\t\t\t\t\ta2 && a2();\n\t\t\t\t\t}else{\n\t\t\t\t\t\tsyntheticMid = \"require*\" + uid();\n\n\t\t\t\t\t\t// resolve the request list with respect to the reference module\n\t\t\t\t\t\tfor(var mid, deps = [], i = 0; i < a1.length;){\n\t\t\t\t\t\t\tmid = a1[i++];\n\t\t\t\t\t\t\tdeps.push(getModule(mid, referenceModule));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// construct a synthetic module to control execution of the requestList, and, optionally, callback\n\t\t\t\t\t\tmodule = mix(makeModuleInfo(\"\", syntheticMid, 0, \"\"), {\n\t\t\t\t\t\t\tinjected: arrived,\n\t\t\t\t\t\t\tdeps: deps,\n\t\t\t\t\t\t\tdef: a2 || noop,\n\t\t\t\t\t\t\trequire: referenceModule ? referenceModule.require : req,\n\t\t\t\t\t\t\tgc: 1 //garbage collect\n\t\t\t\t\t\t});\n\t\t\t\t\t\tmodules[module.mid] = module;\n\n\t\t\t\t\t\t// checkComplete!=0 holds the idle signal; we're not idle if we're injecting dependencies\n\t\t\t\t\t\tinjectDependencies(module);\n\n\t\t\t\t\t\t// try to immediately execute\n\t\t\t\t\t\t// if already traversing a factory tree, then strict causes circular dependency to abort the execution; maybe\n\t\t\t\t\t\t// it's possible to execute this require later after the current traversal completes and avoid the circular dependency.\n\t\t\t\t\t\t// ...but *always* insist on immediate in synch mode\n\t\t\t\t\t\tvar strict = checkCompleteGuard && legacyMode!=sync;\n\t\t\t\t\t\tguardCheckComplete(function(){\n\t\t\t\t\t\t\texecModule(module, strict);\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif(!module.executed){\n\t\t\t\t\t\t\t// some deps weren't on board or circular dependency detected and strict; therefore, push into the execQ\n\t\t\t\t\t\t\texecQ.push(module);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcheckComplete();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn contextRequire;\n\t\t\t},\n\n\t\t\tcreateRequire = function(module){\n\t\t\t\tif(!module){\n\t\t\t\t\treturn req;\n\t\t\t\t}\n\t\t\t\tvar result = module.require;\n\t\t\t\tif(!result){\n\t\t\t\t\tresult = function(a1, a2, a3){\n\t\t\t\t\t\treturn contextRequire(a1, a2, a3, module, result);\n\t\t\t\t\t};\n\t\t\t\t\tmodule.require = mix(result, req);\n\t\t\t\t\tresult.module = module;\n\t\t\t\t\tresult.toUrl = function(name){\n\t\t\t\t\t\treturn toUrl(name, module);\n\t\t\t\t\t};\n\t\t\t\t\tresult.toAbsMid = function(mid){\n\t\t\t\t\t\treturn toAbsMid(mid, module);\n\t\t\t\t\t};\n\t\t\t\t\tif( 0 ){\n\t\t\t\t\t\tresult.undef = function(mid){\n\t\t\t\t\t\t\treq.undef(mid, module);\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\tif( 0 ){\n\t\t\t\t\t\tresult.syncLoadNls = function(mid){\n\t\t\t\t\t\t\tvar nlsModuleInfo = getModuleInfo(mid, module),\n\t\t\t\t\t\t\t\tnlsModule = modules[nlsModuleInfo.mid];\n\t\t\t\t\t\t\tif(!nlsModule || !nlsModule.executed){\n\t\t\t\t\t\t\t\tcached = cache[nlsModuleInfo.mid] || cache[urlKeyPrefix + nlsModuleInfo.url];\n\t\t\t\t\t\t\t\tif(cached){\n\t\t\t\t\t\t\t\t\tevalModuleText(cached);\n\t\t\t\t\t\t\t\t\tnlsModule = modules[nlsModuleInfo.mid];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn nlsModule && nlsModule.executed && nlsModule.result;\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t},\n\n\t\t execQ =\n\t\t\t\t// The list of modules that need to be evaluated.\n\t\t\t\t[],\n\n\t\t\tdefQ =\n\t\t\t\t// The queue of define arguments sent to loader.\n\t\t\t\t[],\n\n\t\t\twaiting =\n\t\t\t\t// The set of modules upon which the loader is waiting for definition to arrive\n\t\t\t\t{},\n\n\t\t\tsetRequested = function(module){\n\t\t\t\tmodule.injected = requested;\n\t\t\t\twaiting[module.mid] = 1;\n\t\t\t\tif(module.url){\n\t\t\t\t\twaiting[module.url] = module.pack || 1;\n\t\t\t\t}\n\t\t\t\tstartTimer();\n\t\t\t},\n\n\t\t\tsetArrived = function(module){\n\t\t\t\tmodule.injected = arrived;\n\t\t\t\tdelete waiting[module.mid];\n\t\t\t\tif(module.url){\n\t\t\t\t\tdelete waiting[module.url];\n\t\t\t\t}\n\t\t\t\tif(isEmpty(waiting)){\n\t\t\t\t\tclearTimer();\n\t\t\t\t\t 0 && legacyMode==xd && (legacyMode = sync);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\texecComplete = req.idle =\n\t\t\t\t// says the loader has completed (or not) its work\n\t\t\t\tfunction(){\n\t\t\t\t\treturn !defQ.length && isEmpty(waiting) && !execQ.length && !checkCompleteGuard;\n\t\t\t\t};\n\t}\n\n\tvar runMapProg = function(targetMid, map){\n\t\t\t// search for targetMid in map; return the map item if found; falsy otherwise\n\t\t\tif(map){\n\t\t\tfor(var i = 0; i < map.length; i++){\n\t\t\t\tif(map[i][2].test(targetMid)){\n\t\t\t\t\treturn map[i];\n\t\t\t\t}\n\t\t\t}\n\t\t\t}\n\t\t\treturn 0;\n\t\t},\n\n\t\tcompactPath = function(path){\n\t\t\tvar result = [],\n\t\t\t\tsegment, lastSegment;\n\t\t\tpath = path.replace(/\\\\/g, '/').split('/');\n\t\t\twhile(path.length){\n\t\t\t\tsegment = path.shift();\n\t\t\t\tif(segment==\"..\" && result.length && lastSegment!=\"..\"){\n\t\t\t\t\tresult.pop();\n\t\t\t\t\tlastSegment = result[result.length - 1];\n\t\t\t\t}else if(segment!=\".\"){\n\t\t\t\t\tresult.push(lastSegment= segment);\n\t\t\t\t} // else ignore \".\"\n\t\t\t}\n\t\t\treturn result.join(\"/\");\n\t\t},\n\n\t\tmakeModuleInfo = function(pid, mid, pack, url){\n\t\t\tif( 0 ){\n\t\t\t\tvar xd= req.isXdUrl(url);\n\t\t\t\treturn {pid:pid, mid:mid, pack:pack, url:url, executed:0, def:0, isXd:xd, isAmd:!!(xd || (packs[pid] && packs[pid].isAmd))};\n\t\t\t}else{\n\t\t\t\treturn {pid:pid, mid:mid, pack:pack, url:url, executed:0, def:0};\n\t\t\t}\n\t\t},\n\n\t\tgetModuleInfo_ = function(mid, referenceModule, packs, modules, baseUrl, mapProgs, pathsMapProg, aliases, alwaysCreate, fromPendingCache){\n\t\t\t// arguments are passed instead of using lexical variables so that this function my be used independent of the loader (e.g., the builder)\n\t\t\t// alwaysCreate is useful in this case so that getModuleInfo never returns references to real modules owned by the loader\n\t\t\tvar pid, pack, midInPackage, mapItem, url, result, isRelative, requestedMid;\n\t\t\trequestedMid = mid;\n\t\t\tisRelative = /^\\./.test(mid);\n\t\t\tif(/(^\\/)|(\\:)|(\\.js$)/.test(mid) || (isRelative && !referenceModule)){\n\t\t\t\t// absolute path or protocol of .js filetype, or relative path but no reference module and therefore relative to page\n\t\t\t\t// whatever it is, it's not a module but just a URL of some sort\n\t\t\t\t// note: pid===0 indicates the routine is returning an unmodified mid\n\n\t\t\t\treturn makeModuleInfo(0, mid, 0, mid);\n\t\t\t}else{\n\t\t\t\t// relative module ids are relative to the referenceModule; get rid of any dots\n\t\t\t\tmid = compactPath(isRelative ? (referenceModule.mid + \"/../\" + mid) : mid);\n\t\t\t\tif(/^\\./.test(mid)){\n\t\t\t\t\tthrow makeError(\"irrationalPath\", mid);\n\t\t\t\t}\n\t\t\t\t// at this point, mid is an absolute mid\n\n\t\t\t\t// map the mid\n\t\t\t\tif(!fromPendingCache && !isRelative && mapProgs.star){\n\t\t\t\t\tmapItem = runMapProg(mid, mapProgs.star[1]);\n\t\t\t\t}\n\t\t\t\tif(!mapItem && referenceModule){\n\t\t\t\t\tmapItem = runMapProg(referenceModule.mid, mapProgs);\n\t\t\t\t\tmapItem = mapItem && runMapProg(mid, mapItem[1]);\n\t\t\t\t}\n\n\t\t\t\tif(mapItem){\n\t\t\t\t\tmid = mapItem[1] + mid.substring(mapItem[3]);\n\t\t\t\t\t}\n\n\t\t\t\tmatch = mid.match(/^([^\\/]+)(\\/(.+))?$/);\n\t\t\t\tpid = match ? match[1] : \"\";\n\t\t\t\tif((pack = packs[pid])){\n\t\t\t\t\tmid = pid + \"/\" + (midInPackage = (match[3] || pack.main));\n\t\t\t\t}else{\n\t\t\t\t\tpid = \"\";\n\t\t\t\t}\n\n\t\t\t\t// search aliases\n\t\t\t\tvar candidateLength = 0,\n\t\t\t\t\tcandidate = 0;\n\t\t\t\tforEach(aliases, function(pair){\n\t\t\t\t\tvar match = mid.match(pair[0]);\n\t\t\t\t\tif(match && match.length>candidateLength){\n\t\t\t\t\t\tcandidate = isFunction(pair[1]) ? mid.replace(pair[0], pair[1]) : pair[1];\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tif(candidate){\n\t\t\t\t\treturn getModuleInfo_(candidate, 0, packs, modules, baseUrl, mapProgs, pathsMapProg, aliases, alwaysCreate);\n\t\t\t\t}\n\n\t\t\t\tresult = modules[mid];\n\t\t\t\tif(result){\n\t\t\t\t\treturn alwaysCreate ? makeModuleInfo(result.pid, result.mid, result.pack, result.url) : modules[mid];\n\t\t\t\t}\n\t\t\t}\n\t\t\t// get here iff the sought-after module does not yet exist; therefore, we need to compute the URL given the\n\t\t\t// fully resolved (i.e., all relative indicators and package mapping resolved) module id\n\n\t\t\t// note: pid!==0 indicates the routine is returning a url that has .js appended unmodified mid\n\t\t\tmapItem = runMapProg(mid, pathsMapProg);\n\t\t\tif(mapItem){\n\t\t\t\turl = mapItem[1] + mid.substring(mapItem[3]);\n\t\t\t}else if(pid){\n\t\t\t\turl = (pack.location.slice(-1) === '/' ? pack.location.slice(0, -1) : pack.location) + \"/\" + midInPackage;\n\t\t\t}else if( 0 ){\n\t\t\t\turl = \"../\" + mid;\n\t\t\t}else{\n\t\t\t\turl = mid;\n\t\t\t}\n\t\t\t// if result is not absolute, add baseUrl\n\t\t\tif(!(/(^\\/)|(\\:)/.test(url))){\n\t\t\t\turl = baseUrl + url;\n\t\t\t}\n\t\t\turl += \".js\";\n\t\t\treturn makeModuleInfo(pid, mid, pack, compactPath(url));\n\t\t},\n\n\t\tgetModuleInfo = function(mid, referenceModule, fromPendingCache){\n\t\t\treturn getModuleInfo_(mid, referenceModule, packs, modules, req.baseUrl, mapProgs, pathsMapProg, aliases, undefined, fromPendingCache);\n\t\t};\n\n\tif (! 1 ) {\n\t\tvar resolvePluginResourceId = function(plugin, prid, referenceModule){\n\t\t\t\treturn plugin.normalize ? plugin.normalize(prid, function(mid){return toAbsMid(mid, referenceModule);}) : toAbsMid(prid, referenceModule);\n\t\t\t},\n\n\t\t\tdynamicPluginUidGenerator = 0,\n\n\t\t\tgetModule = function(mid, referenceModule, immediate){\n\t\t\t\t// compute and optionally construct (if necessary) the module implied by the mid with respect to referenceModule\n\t\t\t\tvar match, plugin, prid, result;\n\t\t\t\tmatch = mid.match(/^(.+?)\\!(.*)$/);\n\t\t\t\tif(match){\n\t\t\t\t\t// name was <plugin-module>!<plugin-resource-id>\n\t\t\t\t\tplugin = getModule(match[1], referenceModule, immediate);\n\n\t\t\t\t\tif( 0 && legacyMode == sync && !plugin.executed){\n\t\t\t\t\t\tinjectModule(plugin);\n\t\t\t\t\t\tif(plugin.injected===arrived && !plugin.executed){\n\t\t\t\t\t\t\tguardCheckComplete(function(){\n\t\t\t\t\t\t\t\texecModule(plugin);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(plugin.executed){\n\t\t\t\t\t\t\tpromoteModuleToPlugin(plugin);\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t// we are in xdomain mode for some reason\n\t\t\t\t\t\t\texecQ.unshift(plugin);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\n\n\t\t\t\t\tif(plugin.executed === executed && !plugin.load){\n\t\t\t\t\t\t// executed the module not knowing it was a plugin\n\t\t\t\t\t\tpromoteModuleToPlugin(plugin);\n\t\t\t\t\t}\n\n\t\t\t\t\t// if the plugin has not been loaded, then can't resolve the prid and must assume this plugin is dynamic until we find out otherwise\n\t\t\t\t\tif(plugin.load){\n\t\t\t\t\t\tprid = resolvePluginResourceId(plugin, match[2], referenceModule);\n\t\t\t\t\t\tmid = (plugin.mid + \"!\" + (plugin.dynamic ? ++dynamicPluginUidGenerator + \"!\" : \"\") + prid);\n\t\t\t\t\t}else{\n\t\t\t\t\t\tprid = match[2];\n\t\t\t\t\t\tmid = plugin.mid + \"!\" + (++dynamicPluginUidGenerator) + \"!waitingForPlugin\";\n\t\t\t\t\t}\n\t\t\t\t\tresult = {plugin:plugin, mid:mid, req:createRequire(referenceModule), prid:prid};\n\t\t\t\t}else{\n\t\t\t\t\tresult = getModuleInfo(mid, referenceModule);\n\t\t\t\t}\n\t\t\t\treturn modules[result.mid] || (!immediate && (modules[result.mid] = result));\n\t\t\t};\n\t}\n\n\tvar toAbsMid = req.toAbsMid = function(mid, referenceModule){\n\t\t\treturn getModuleInfo(mid, referenceModule).mid;\n\t\t},\n\n\t\ttoUrl = req.toUrl = function(name, referenceModule){\n\t\t\tvar moduleInfo = getModuleInfo(name+\"/x\", referenceModule),\n\t\t\t\turl= moduleInfo.url;\n\t\t\treturn fixupUrl(moduleInfo.pid===0 ?\n\t\t\t\t// if pid===0, then name had a protocol or absolute path; either way, toUrl is the identify function in such cases\n\t\t\t\tname :\n\t\t\t\t// \"/x.js\" since getModuleInfo automatically appends \".js\" and we appended \"/x\" to make name look like a module id\n\t\t\t\turl.substring(0, url.length-5)\n\t\t\t);\n\t\t};\n\n\tif (! 1 ) {\n\t\tvar nonModuleProps = {\n\t\t\t\tinjected: arrived,\n\t\t\t\texecuted: executed,\n\t\t\t\tdef: nonmodule,\n\t\t\t\tresult: nonmodule\n\t\t\t},\n\n\t\t\tmakeCjs = function(mid){\n\t\t\t\treturn modules[mid] = mix({mid:mid}, nonModuleProps);\n\t\t\t},\n\n\t\t\tcjsRequireModule = makeCjs(\"require\"),\n\t\t\tcjsExportsModule = makeCjs(\"exports\"),\n\t\t\tcjsModuleModule = makeCjs(\"module\"),\n\n\t\t\trunFactory = function(module, args){\n\t\t\t\treq.trace(\"loader-run-factory\", [module.mid]);\n\t\t\t\tvar factory = module.def,\n\t\t\t\t\tresult;\n\t\t\t\t 0 && syncExecStack.unshift(module);\n\t\t\t\tif( 0 ){\n\t\t\t\t\ttry{\n\t\t\t\t\t\tresult= isFunction(factory) ? factory.apply(null, args) : factory;\n\t\t\t\t\t}catch(e){\n\t\t\t\t\t\tsignal(error, module.result = makeError(\"factoryThrew\", [module, e]));\n\t\t\t\t\t}\n\t\t\t\t}else{\n\t\t\t\t\tresult= isFunction(factory) ? factory.apply(null, args) : factory;\n\t\t\t\t}\n\t\t\t\tmodule.result = result===undefined && module.cjs ? module.cjs.exports : result;\n\t\t\t\t 0 && syncExecStack.shift(module);\n\t\t\t},\n\n\t\t\tabortExec = {},\n\n\t\t\tdefOrder = 0,\n\n\t\t\tpromoteModuleToPlugin = function(pluginModule){\n\t\t\t\tvar plugin = pluginModule.result;\n\t\t\t\tpluginModule.dynamic = plugin.dynamic;\n\t\t\t\tpluginModule.normalize = plugin.normalize;\n\t\t\t\tpluginModule.load = plugin.load;\n\t\t\t\treturn pluginModule;\n\t\t\t},\n\n\t\t\tresolvePluginLoadQ = function(plugin){\n\t\t\t\t// plugins is a newly executed module that has a loadQ waiting to run\n\n\t\t\t\t// step 1: traverse the loadQ and fixup the mid and prid; remember the map from original mid to new mid\n\t\t\t\t// recall the original mid was created before the plugin was on board and therefore it was impossible to\n\t\t\t\t// compute the final mid; accordingly, prid may or may not change, but the mid will definitely change\n\t\t\t\tvar map = {};\n\t\t\t\tforEach(plugin.loadQ, function(pseudoPluginResource){\n\t\t\t\t\t// manufacture and insert the real module in modules\n\t\t\t\t\tvar prid = resolvePluginResourceId(plugin, pseudoPluginResource.prid, pseudoPluginResource.req.module),\n\t\t\t\t\t\tmid = plugin.dynamic ? pseudoPluginResource.mid.replace(/waitingForPlugin$/, prid) : (plugin.mid + \"!\" + prid),\n\t\t\t\t\t\tpluginResource = mix(mix({}, pseudoPluginResource), {mid:mid, prid:prid, injected:0});\n\t\t\t\t\tif(!modules[mid] || !modules[mid].injected /*for require.undef*/){\n\t\t\t\t\t\t// create a new (the real) plugin resource and inject it normally now that the plugin is on board\n\t\t\t\t\t\tinjectPlugin(modules[mid] = pluginResource);\n\t\t\t\t\t} // else this was a duplicate request for the same (plugin, rid) for a nondynamic plugin\n\n\t\t\t\t\t// pluginResource is really just a placeholder with the wrong mid (because we couldn't calculate it until the plugin was on board)\n\t\t\t\t\t// mark is as arrived and delete it from modules; the real module was requested above\n\t\t\t\t\tmap[pseudoPluginResource.mid] = modules[mid];\n\t\t\t\t\tsetArrived(pseudoPluginResource);\n\t\t\t\t\tdelete modules[pseudoPluginResource.mid];\n\t\t\t\t});\n\t\t\t\tplugin.loadQ = 0;\n\n\t\t\t\t// step2: replace all references to any placeholder modules with real modules\n\t\t\t\tvar substituteModules = function(module){\n\t\t\t\t\tfor(var replacement, deps = module.deps || [], i = 0; i<deps.length; i++){\n\t\t\t\t\t\treplacement = map[deps[i].mid];\n\t\t\t\t\t\tif(replacement){\n\t\t\t\t\t\t\tdeps[i] = replacement;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tfor(var p in modules){\n\t\t\t\t\tsubstituteModules(modules[p]);\n\t\t\t\t}\n\t\t\t\tforEach(execQ, substituteModules);\n\t\t\t},\n\n\t\t\tfinishExec = function(module){\n\t\t\t\treq.trace(\"loader-finish-exec\", [module.mid]);\n\t\t\t\tmodule.executed = executed;\n\t\t\t\tmodule.defOrder = defOrder++;\n\t\t\t\t 0 && forEach(module.provides, function(cb){ cb(); });\n\t\t\t\tif(module.loadQ){\n\t\t\t\t\t// the module was a plugin\n\t\t\t\t\tpromoteModuleToPlugin(module);\n\t\t\t\t\tresolvePluginLoadQ(module);\n\t\t\t\t}\n\t\t\t\t// remove all occurrences of this module from the execQ\n\t\t\t\tfor(i = 0; i < execQ.length;){\n\t\t\t\t\tif(execQ[i] === module){\n\t\t\t\t\t\texecQ.splice(i, 1);\n\t\t\t\t\t}else{\n\t\t\t\t\t\ti++;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// delete references to synthetic modules\n\t\t\t\tif (/^require\\*/.test(module.mid)) {\n\t\t\t\t\tdelete modules[module.mid];\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tcircleTrace = [],\n\n\t\t\texecModule = function(module, strict){\n\t\t\t\t// run the dependency vector, then run the factory for module\n\t\t\t\tif(module.executed === executing){\n\t\t\t\t\treq.trace(\"loader-circular-dependency\", [circleTrace.concat(module.mid).join(\"->\")]);\n\t\t\t\t\treturn (!module.def || strict) ? abortExec : (module.cjs && module.cjs.exports);\n\t\t\t\t}\n\t\t\t\t// at this point the module is either not executed or fully executed\n\n\n\t\t\t\tif(!module.executed){\n\t\t\t\t\tif(!module.def){\n\t\t\t\t\t\treturn abortExec;\n\t\t\t\t\t}\n\t\t\t\t\tvar mid = module.mid,\n\t\t\t\t\t\tdeps = module.deps || [],\n\t\t\t\t\t\targ, argResult,\n\t\t\t\t\t\targs = [],\n\t\t\t\t\t\ti = 0;\n\n\t\t\t\t\tif( 0 ){\n\t\t\t\t\t\tcircleTrace.push(mid);\n\t\t\t\t\t\treq.trace(\"loader-exec-module\", [\"exec\", circleTrace.length, mid]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// for circular dependencies, assume the first module encountered was executed OK\n\t\t\t\t\t// modules that circularly depend on a module that has not run its factory will get\n\t\t\t\t\t// the pre-made cjs.exports===module.result. They can take a reference to this object and/or\n\t\t\t\t\t// add properties to it. When the module finally runs its factory, the factory can\n\t\t\t\t\t// read/write/replace this object. Notice that so long as the object isn't replaced, any\n\t\t\t\t\t// reference taken earlier while walking the deps list is still valid.\n\t\t\t\t\tmodule.executed = executing;\n\t\t\t\t\twhile((arg = deps[i++])){\n\t\t\t\t\t\targResult = ((arg === cjsRequireModule) ? createRequire(module) :\n\t\t\t\t\t\t\t\t\t\t((arg === cjsExportsModule) ? module.cjs.exports :\n\t\t\t\t\t\t\t\t\t\t\t((arg === cjsModuleModule) ? module.cjs :\n\t\t\t\t\t\t\t\t\t\t\t\texecModule(arg, strict))));\n\t\t\t\t\t\tif(argResult === abortExec){\n\t\t\t\t\t\t\tmodule.executed = 0;\n\t\t\t\t\t\t\treq.trace(\"loader-exec-module\", [\"abort\", mid]);\n\t\t\t\t\t\t\t 0 && circleTrace.pop();\n\t\t\t\t\t\t\treturn abortExec;\n\t\t\t\t\t\t}\n\t\t\t\t\t\targs.push(argResult);\n\t\t\t\t\t}\n\t\t\t\t\trunFactory(module, args);\n\t\t\t\t\tfinishExec(module);\n\t\t\t\t\t 0 && circleTrace.pop();\n\t\t\t\t}\n\t\t\t\t// at this point the module is guaranteed fully executed\n\n\t\t\t\treturn module.result;\n\t\t\t},\n\n\n\t\t\tcheckCompleteGuard = 0,\n\n\t\t\tguardCheckComplete = function(proc){\n\t\t\t\ttry{\n\t\t\t\t\tcheckCompleteGuard++;\n\t\t\t\t\tproc();\n\t\t\t\t}catch(e){\n\t\t\t\t\t// https://bugs.dojotoolkit.org/ticket/16617\n\t\t\t\t\tthrow e;\n\t\t\t\t}finally{\n\t\t\t\t\tcheckCompleteGuard--;\n\t\t\t\t}\n\t\t\t\tif(execComplete()){\n\t\t\t\t\tsignal(\"idle\", []);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tcheckComplete = function(){\n\t\t\t\t// keep going through the execQ as long as at least one factory is executed\n\t\t\t\t// plugins, recursion, cached modules all make for many execution path possibilities\n\t\t\t\tif(checkCompleteGuard){\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tguardCheckComplete(function(){\n\t\t\t\t\tcheckDojoRequirePlugin();\n\t\t\t\t\tfor(var currentDefOrder, module, i = 0; i < execQ.length;){\n\t\t\t\t\t\tcurrentDefOrder = defOrder;\n\t\t\t\t\t\tmodule = execQ[i];\n\t\t\t\t\t\texecModule(module);\n\t\t\t\t\t\tif(currentDefOrder!=defOrder){\n\t\t\t\t\t\t\t// defOrder was bumped one or more times indicating something was executed (note, this indicates\n\t\t\t\t\t\t\t// the execQ was modified, maybe a lot (for example a later module causes an earlier module to execute)\n\t\t\t\t\t\t\tcheckDojoRequirePlugin();\n\t\t\t\t\t\t\ti = 0;\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t// nothing happened; check the next module in the exec queue\n\t\t\t\t\t\t\ti++;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t};\n\t}\n\n\tvar fixupUrl= typeof userConfig.fixupUrl == \"function\" ? userConfig.fixupUrl : function(url){\n\t\t\turl += \"\"; // make sure url is a Javascript string (some paths may be a Java string)\n\t\t\treturn url + (cacheBust ? ((/\\?/.test(url) ? \"&\" : \"?\") + cacheBust) : \"\");\n\t\t};\n\n\n\n\tif( 0 ){\n\t\treq.undef = function(moduleId, referenceModule){\n\t\t\t// In order to reload a module, it must be undefined (this routine) and then re-requested.\n\t\t\t// This is useful for testing frameworks (at least).\n\t\t\tvar module = getModule(moduleId, referenceModule);\n\t\t\tsetArrived(module);\n\t\t\tmix(module, {def:0, executed:0, injected:0, node:0, load:0});\n\t\t};\n\t}\n\n\tif( false ){\n\t\tif( 0 ===undefined){\n\t\t\t 0 && has.add(\"dojo-loader-eval-hint-url\", 1);\n\t\t}\n\n\t\tvar injectPlugin = function(\n\t\t\t\tmodule\n\t\t\t){\n\t\t\t\t// injects the plugin module given by module; may have to inject the plugin itself\n\t\t\t\tvar plugin = module.plugin;\n\n\t\t\t\tif(plugin.executed === executed && !plugin.load){\n\t\t\t\t\t// executed the module not knowing it was a plugin\n\t\t\t\t\tpromoteModuleToPlugin(plugin);\n\t\t\t\t}\n\n\t\t\t\tvar onLoad = function(def){\n\t\t\t\t\t\tmodule.result = def;\n\t\t\t\t\t\tsetArrived(module);\n\t\t\t\t\t\tfinishExec(module);\n\t\t\t\t\t\tcheckComplete();\n\t\t\t\t\t};\n\n\t\t\t\tif(plugin.load){\n\t\t\t\t\tplugin.load(module.prid, module.req, onLoad);\n\t\t\t\t}else if(plugin.loadQ){\n\t\t\t\t\tplugin.loadQ.push(module);\n\t\t\t\t}else{\n\t\t\t\t\t// the unshift instead of push is important: we don't want plugins to execute as\n\t\t\t\t\t// dependencies of some other module because this may cause circles when the plugin\n\t\t\t\t\t// loadQ is run; also, generally, we want plugins to run early since they may load\n\t\t\t\t\t// several other modules and therefore can potentially unblock many modules\n\t\t\t\t\tplugin.loadQ = [module];\n\t\t\t\t\texecQ.unshift(plugin);\n\t\t\t\t\tinjectModule(plugin);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// for IE, injecting a module may result in a recursive execution if the module is in the cache\n\n\t\t\tcached = 0,\n\n\t\t\tinjectingModule = 0,\n\n\t\t\tinjectingCachedModule = 0,\n\n\t\t\tevalModuleText = function(text, module){\n\n\t\t\t\t//Added by Mathworks\n\t\t\t\tif (\"function\" === typeof userConfig.moduleTextTransform) {\n\t\t\t\t\ttext = userConfig.moduleTextTransform(text, module);\n\t\t\t\t}\n\n\t\t\t\t// see def() for the injectingCachedModule bracket; it simply causes a short, safe circuit\n\t\t\t\tif( 0 ){\n\t\t\t\t\ttext = text.replace(/([\"'])use strict\\1/g, '');\n\t\t\t\t}\n\t\t\t\tinjectingCachedModule = 1;\n\t\t\t\tif( 0 ){\n\t\t\t\t\ttry{\n\t\t\t\t\t\tif(text===cached){\n\t\t\t\t\t\t\tcached.call(null);\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\treq.eval(text, 0 ? module.url : module.mid);\n\t\t\t\t\t\t}\n\t\t\t\t\t}catch(e){\n\t\t\t\t\t\tsignal(error, makeError(\"evalModuleThrew\", module));\n\t\t\t\t\t}\n\t\t\t\t}else{\n\t\t\t\t\tif(text===cached){\n\t\t\t\t\t\tcached.call(null);\n\t\t\t\t\t}else{\n\t\t\t\t\t\treq.eval(text, 0 ? module.url : module.mid);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tinjectingCachedModule = 0;\n\t\t\t},\n\n\t\t\tinjectModule = function(module){\n\t\t\t\t// Inject the module. In the browser environment, this means appending a script element into\n\t\t\t\t// the document; in other environments, it means loading a file.\n\t\t\t\t//\n\t\t\t\t// If in synchronous mode, then get the module synchronously if it's not xdomainLoading.\n\n\t\t\t\tvar mid = module.mid,\n\t\t\t\t\turl = module.url;\n\t\t\t\tif(module.executed || module.injected || waiting[mid] || (module.url && ((module.pack && waiting[module.url]===module.pack) || waiting[module.url]==1))){\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tsetRequested(module);\n\n\t\t\t\tif( 0 ){\n\t\t\t\t\tvar viaCombo = 0;\n\t\t\t\t\tif(module.plugin && module.plugin.isCombo){\n\t\t\t\t\t\t// a combo plugin; therefore, must be handled by combo service\n\t\t\t\t\t\t// the prid should have already been converted to a URL (if required by the plugin) during\n\t\t\t\t\t\t// the normalize process; in any event, there is no way for the loader to know how to\n\t\t\t\t\t\t// to the conversion; therefore the third argument is zero\n\t\t\t\t\t\treq.combo.add(module.plugin.mid, module.prid, 0, req);\n\t\t\t\t\t\tviaCombo = 1;\n\t\t\t\t\t}else if(!module.plugin){\n\t\t\t\t\t\tviaCombo = req.combo.add(0, module.mid, module.url, req);\n\t\t\t\t\t}\n\t\t\t\t\tif(viaCombo){\n\t\t\t\t\t\tcomboPending= 1;\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif(module.plugin){\n\t\t\t\t\tinjectPlugin(module);\n\t\t\t\t\treturn;\n\t\t\t\t} // else a normal module (not a plugin)\n\n\n\t\t\t\tvar onLoadCallback = function(){\n\t\t\t\t\trunDefQ(module);\n\t\t\t\t\tif(module.injected !== arrived){\n\t\t\t\t\t\t// the script that contained the module arrived and has been executed yet\n\t\t\t\t\t\t// nothing was added to the defQ (so it wasn't an AMD module) and the module\n\t\t\t\t\t\t// wasn't marked as arrived by dojo.provide (so it wasn't a v1.6- module);\n\t\t\t\t\t\t// therefore, it must not have been a module; adjust state accordingly\n\t\t\t\t\t\tif( 0 ){\n\t\t\t\t\t\t\tsignal(error, makeError(\"noDefine\", module));\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsetArrived(module);\n\t\t\t\t\t\tmix(module, nonModuleProps);\n\t\t\t\t\t\treq.trace(\"loader-define-nonmodule\", [module.url]);\n\t\t\t\t\t}\n\n\t\t\t\t\tif( 0 && legacyMode){\n\t\t\t\t\t\t// must call checkComplete even in for sync loader because we may be in xdomainLoading mode;\n\t\t\t\t\t\t// but, if xd loading, then don't call checkComplete until out of the current sync traversal\n\t\t\t\t\t\t// in order to preserve order of execution of the dojo.required modules\n\t\t\t\t\t\t!syncExecStack.length && checkComplete();\n\t\t\t\t\t}else{\n\t\t\t\t\t\tcheckComplete();\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tcached = cache[mid] || cache[urlKeyPrefix + module.url];\n\t\t\t\tif(cached){\n\t\t\t\t\treq.trace(\"loader-inject\", [\"cache\", module.mid, url]);\n\t\t\t\t\tevalModuleText(cached, module);\n\t\t\t\t\tonLoadCallback();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif( 0 && legacyMode){\n\t\t\t\t\tif(module.isXd){\n\t\t\t\t\t\t// switch to async mode temporarily; if current legacyMode!=sync, then is must be one of {legacyAsync, xd, false}\n\t\t\t\t\t\tlegacyMode==sync && (legacyMode = xd);\n\t\t\t\t\t\t// fall through and load via script injection\n\t\t\t\t\t}else if(module.isAmd && legacyMode!=sync){\n\t\t\t\t\t\t// fall through and load via script injection\n\t\t\t\t\t}else{\n\t\t\t\t\t\t// mode may be sync, xd/legacyAsync, or async; module may be AMD or legacy; but module is always located on the same domain\n\t\t\t\t\t\tvar xhrCallback = function(text){\n\t\t\t\t\t\t\tif(legacyMode==sync){\n\t\t\t\t\t\t\t\t// the top of syncExecStack gives the current synchronously executing module; the loader needs\n\t\t\t\t\t\t\t\t// to know this if it has to switch to async loading in the middle of evaluating a legacy module\n\t\t\t\t\t\t\t\t// this happens when a modules dojo.require's a module that must be loaded async because it's xdomain\n\t\t\t\t\t\t\t\t// (using unshift/shift because there is no back() methods for Javascript arrays)\n\t\t\t\t\t\t\t\tsyncExecStack.unshift(module);\n\t\t\t\t\t\t\t\tevalModuleText(text, module);\n\t\t\t\t\t\t\t\tsyncExecStack.shift();\n\n\t\t\t\t\t\t\t\t// maybe the module was an AMD module\n\t\t\t\t\t\t\t\trunDefQ(module);\n\n\t\t\t\t\t\t\t\t// legacy modules never get to defineModule() => cjs and injected never set; also evaluation implies executing\n\t\t\t\t\t\t\t\tif(!module.cjs){\n\t\t\t\t\t\t\t\t\tsetArrived(module);\n\t\t\t\t\t\t\t\t\tfinishExec(module);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif(module.finish){\n\t\t\t\t\t\t\t\t\t// while synchronously evaluating this module, dojo.require was applied referencing a module\n\t\t\t\t\t\t\t\t\t// that had to be loaded async; therefore, the loader stopped answering all dojo.require\n\t\t\t\t\t\t\t\t\t// requests so they could be answered completely in the correct sequence; module.finish gives\n\t\t\t\t\t\t\t\t\t// the list of dojo.requires that must be re-applied once all target modules are available;\n\t\t\t\t\t\t\t\t\t// make a synthetic module to execute the dojo.require's in the correct order\n\n\t\t\t\t\t\t\t\t\t// compute a guaranteed-unique mid for the synthetic finish module; remember the finish vector; remove it from the reference module\n\t\t\t\t\t\t\t\t\t// TODO: can we just leave the module.finish...what's it hurting?\n\t\t\t\t\t\t\t\t\tvar finishMid = mid + \"*finish\",\n\t\t\t\t\t\t\t\t\t\tfinish = module.finish;\n\t\t\t\t\t\t\t\t\tdelete module.finish;\n\n\t\t\t\t\t\t\t\t\tdef(finishMid, [\"dojo\", (\"dojo/require!\" + finish.join(\",\")).replace(/\\./g, \"/\")], function(dojo){\n\t\t\t\t\t\t\t\t\t\tforEach(finish, function(mid){ dojo.require(mid); });\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t// unshift, not push, which causes the current traversal to be reattempted from the top\n\t\t\t\t\t\t\t\t\texecQ.unshift(getModule(finishMid));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tonLoadCallback();\n\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\ttext = transformToAmd(module, text);\n\t\t\t\t\t\t\t\tif(text){\n\t\t\t\t\t\t\t\t\tevalModuleText(text, module);\n\t\t\t\t\t\t\t\t\tonLoadCallback();\n\t\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\t\t// if transformToAmd returned falsy, then the module was already AMD and it can be script-injected\n\t\t\t\t\t\t\t\t\t// do so to improve debugability(even though it means another download...which probably won't happen with a good browser cache)\n\t\t\t\t\t\t\t\t\tinjectingModule = module;\n\t\t\t\t\t\t\t\t\treq.injectUrl(fixupUrl(url), onLoadCallback, module);\n\t\t\t\t\t\t\t\t\tinjectingModule = 0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\treq.trace(\"loader-inject\", [\"xhr\", module.mid, url, legacyMode!=sync]);\n\t\t\t\t\t\tif( 0 ){\n\t\t\t\t\t\t\ttry{\n\t\t\t\t\t\t\t\treq.getText(url, legacyMode!=sync, xhrCallback);\n\t\t\t\t\t\t\t}catch(e){\n\t\t\t\t\t\t\t\tsignal(error, makeError(\"xhrInjectFailed\", [module, e]));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\treq.getText(url, legacyMode!=sync, xhrCallback);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t} // else async mode or fell through in xdomain loading mode; either way, load by script injection\n\t\t\t\treq.trace(\"loader-inject\", [\"script\", module.mid, url]);\n\t\t\t\tinjectingModule = module;\n\t\t\t\treq.injectUrl(fixupUrl(url), onLoadCallback, module);\n\t\t\t\tinjectingModule = 0;\n\t\t\t},\n\n\t\t\tdefineModule = function(module, deps, def){\n\t\t\t\treq.trace(\"loader-define-module\", [module.mid, deps]);\n\n\t\t\t\tif( 0 && module.plugin && module.plugin.isCombo){\n\t\t\t\t\t// the module is a plugin resource loaded by the combo service\n\t\t\t\t\t// note: check for module.plugin should be enough since normal plugin resources should\n\t\t\t\t\t// not follow this path; module.plugin.isCombo is future-proofing belt and suspenders\n\t\t\t\t\tmodule.result = isFunction(def) ? def() : def;\n\t\t\t\t\tsetArrived(module);\n\t\t\t\t\tfinishExec(module);\n\t\t\t\t\treturn module;\n\t\t\t\t}\n\n\t\t\t\tvar mid = module.mid;\n\t\t\t\tif(module.injected === arrived){\n\t\t\t\t\tsignal(error, makeError(\"multipleDefine\", module));\n\t\t\t\t\treturn module;\n\t\t\t\t}\n\t\t\t\tmix(module, {\n\t\t\t\t\tdeps: deps,\n\t\t\t\t\tdef: def,\n\t\t\t\t\tcjs: {\n\t\t\t\t\t\tid: module.mid,\n\t\t\t\t\t\turi: module.url,\n\t\t\t\t\t\texports: (module.result = {}),\n\t\t\t\t\t\tsetExports: function(exports){\n\t\t\t\t\t\t\tmodule.cjs.exports = exports;\n\t\t\t\t\t\t},\n\t\t\t\t\t\tconfig:function(){\n\t\t\t\t\t\t\treturn module.config;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\t// resolve deps with respect to this module\n\t\t\t\tfor(var i = 0; deps[i]; i++){\n\t\t\t\t\tdeps[i] = getModule(deps[i], module);\n\t\t\t\t}\n\n\t\t\t\tif( 0 && legacyMode && !waiting[mid]){\n\t\t\t\t\t// the module showed up without being asked for; it was probably in a <script> element\n\t\t\t\t\tinjectDependencies(module);\n\t\t\t\t\texecQ.push(module);\n\t\t\t\t\tcheckComplete();\n\t\t\t\t}\n\t\t\t\tsetArrived(module);\n\n\t\t\t\tif(!isFunction(def) && !deps.length){\n\t\t\t\t\tmodule.result = def;\n\t\t\t\t\tfinishExec(module);\n\t\t\t\t}\n\n\t\t\t\treturn module;\n\t\t\t},\n\n\t\t\trunDefQ = function(referenceModule, mids){\n\t\t\t\t// defQ is an array of [id, dependencies, factory]\n\t\t\t\t// mids (if any) is a vector of mids given by a combo service\n\t\t\t\tvar definedModules = [],\n\t\t\t\t\tmodule, args;\n\t\t\t\twhile(defQ.length){\n\t\t\t\t\targs = defQ.shift();\n\t\t\t\t\tmids && (args[0]= mids.shift());\n\t\t\t\t\t// explicit define indicates possible multiple modules in a single file; delay injecting dependencies until defQ fully\n\t\t\t\t\t// processed since modules earlier in the queue depend on already-arrived modules that are later in the queue\n\t\t\t\t\t// TODO: what if no args[0] and no referenceModule\n\t\t\t\t\tmodule = (args[0] && getModule(args[0])) || referenceModule;\n\t\t\t\t\tdefinedModules.push([module, args[1], args[2]]);\n\t\t\t\t}\n\t\t\t\tconsumePendingCacheInsert(referenceModule);\n\t\t\t\tforEach(definedModules, function(args){\n\t\t\t\t\tinjectDependencies(defineModule.apply(null, args));\n\t\t\t\t});\n\t\t\t};\n\t}\n\n\tvar timerId = 0,\n\t\tclearTimer = noop,\n\t\tstartTimer = noop;\n\tif( 0 ){\n\t\t// Timer machinery that monitors how long the loader is waiting and signals an error when the timer runs out.\n\t\tclearTimer = function(){\n\t\t\ttimerId && clearTimeout(timerId);\n\t\t\ttimerId = 0;\n\t\t};\n\n\t\tstartTimer = function(){\n\t\t\tclearTimer();\n\t\t\tif(req.waitms){\n\t\t\t\ttimerId = global.setTimeout(function(){\n\t\t\t\t\tclearTimer();\n\t\t\t\t\tsignal(error, makeError(\"timeout\", waiting));\n\t\t\t\t}, req.waitms);\n\t\t\t}\n\t\t};\n\t}\n\n\tif ( 0 ) {\n\t\t// Test for IE's different way of signaling when scripts finish loading. Note that according to\n\t\t// http://bugs.dojotoolkit.org/ticket/15096#comment:14, IE9 also needs to follow the\n\t\t// IE specific code path even though it has an addEventListener() method.\n\t\t// Unknown if special path needed on IE10+, which also has a document.attachEvent() method.\n\t\t// Should evaluate to false for Opera and Windows 8 apps, even though they document.attachEvent()\n\t\t// is defined in both those environments.\n\t\t 0 && has.add(\"ie-event-behavior\", doc.attachEvent && typeof Windows === \"undefined\" &&\n\t\t\t(typeof opera === \"undefined\" || opera.toString() != \"[object Opera]\"));\n\t}\n\n\tif( 0 && ( false || 1 )){\n\t\tvar domOn = function(node, eventName, ieEventName, handler){\n\t\t\t\t// Add an event listener to a DOM node using the API appropriate for the current browser;\n\t\t\t\t// return a function that will disconnect the listener.\n\t\t\t\tif(! 0 ){\n\t\t\t\t\tnode.addEventListener(eventName, handler, false);\n\t\t\t\t\treturn function(){\n\t\t\t\t\t\tnode.removeEventListener(eventName, handler, false);\n\t\t\t\t\t};\n\t\t\t\t}else{\n\t\t\t\t\tnode.attachEvent(ieEventName, handler);\n\t\t\t\t\treturn function(){\n\t\t\t\t\t\tnode.detachEvent(ieEventName, handler);\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t},\n\t\t\twindowOnLoadListener = domOn(window, \"load\", \"onload\", function(){\n\t\t\t\treq.pageLoaded = 1;\n\t\t\t\t// https://bugs.dojotoolkit.org/ticket/16248\n\t\t\t\ttry{\n\t\t\t\t\tdoc.readyState!=\"complete\" && (doc.readyState = \"complete\");\n\t\t\t\t}catch(e){\n\t\t\t\t}\n\t\t\t\twindowOnLoadListener();\n\t\t\t});\n\n\t\tif( false ){\n\t\t\t// if the loader is on the page, there must be at least one script element\n\t\t\t// getting its parent and then doing insertBefore solves the \"Operation Aborted\"\n\t\t\t// error in IE from appending to a node that isn't properly closed; see\n\t\t\t// dojo/tests/_base/loader/requirejs/simple-badbase.html for an example\n\t\t\t// don't use scripts with type dojo/... since these may be removed; see #15809\n\t\t\t// prefer to use the insertPoint computed during the config sniff in case a script is removed; see #16958\n\t\t\tvar scripts = doc.getElementsByTagName(\"script\"),\n\t\t\t\ti = 0,\n\t\t\t\tscript;\n\t\t\twhile(!insertPointSibling){\n\t\t\t\tif(!/^dojo/.test((script = scripts[i++]) && script.type)){\n\t\t\t\t\tinsertPointSibling= script;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treq.injectUrl = function(url, callback, owner){\n\t\t\t\t// insert a script element to the insert-point element with src=url;\n\t\t\t\t// apply callback upon detecting the script has loaded.\n\n\t\t\t\tvar node = owner.node = doc.createElement(\"script\"),\n\t\t\t\t\tonLoad = function(e){\n\t\t\t\t\t\te = e || window.event;\n\t\t\t\t\t\tvar node = e.target || e.srcElement;\n\t\t\t\t\t\tif(e.type === \"load\" || /complete|loaded/.test(node.readyState)){\n\t\t\t\t\t\t\tloadDisconnector();\n\t\t\t\t\t\t\terrorDisconnector();\n\t\t\t\t\t\t\tcallback && callback();\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tloadDisconnector = domOn(node, \"load\", \"onreadystatechange\", onLoad),\n\t\t\t\t\terrorDisconnector = domOn(node, \"error\", \"onerror\", function(e){\n\t\t\t\t\t\tloadDisconnector();\n\t\t\t\t\t\terrorDisconnector();\n\t\t\t\t\t\tsignal(error, makeError(\"scriptError: \" + url, [url, e]));\n\t\t\t\t\t});\n\n\t\t\t\tnode.type = \"text/javascript\";\n\t\t\t\tnode.charset = \"utf-8\";\n\t\t\t\tnode.src = url;\n\t\t\t\tinsertPointSibling.parentNode.insertBefore(node, insertPointSibling);\n\t\t\t\treturn node;\n\t\t\t};\n\t\t}\n\t}\n\n\tif( 0 ){\n\t\treq.log = function(){\n\t\t\ttry{\n\t\t\t\tfor(var i = 0; i < arguments.length; i++){\n\t\t\t\t\tconsole.log(arguments[i]);\n\t\t\t\t}\n\t\t\t}catch(e){}\n\t\t};\n\t}else{\n\t\treq.log = noop;\n\t}\n\n\tif( 0 ){\n\t\tvar trace = req.trace = function(\n\t\t\tgroup,\t// the trace group to which this application belongs\n\t\t\targs\t// the contents of the trace\n\t\t){\n\t\t\t///\n\t\t\t// Tracing interface by group.\n\t\t\t//\n\t\t\t// Sends the contents of args to the console iff (req.trace.on && req.trace[group])\n\n\t\t\tif(trace.on && trace.group[group]){\n\t\t\t\tsignal(\"trace\", [group, args]);\n\t\t\t\tfor(var arg, dump = [], text= \"trace:\" + group + (args.length ? (\":\" + args[0]) : \"\"), i= 1; i<args.length;){\n\t\t\t\t\targ = args[i++];\n\t\t\t\t\tif(isString(arg)){\n\t\t\t\t\t\ttext += \", \" + arg;\n\t\t\t\t\t}else{\n\t\t\t\t\t\tdump.push(arg);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treq.log(text);\n\t\t\t\tdump.length && dump.push(\".\");\n\t\t\t\treq.log.apply(req, dump);\n\t\t\t}\n\t\t};\n\t\tmix(trace, {\n\t\t\ton:1,\n\t\t\tgroup:{},\n\t\t\tset:function(group, value){\n\t\t\t\tif(isString(group)){\n\t\t\t\t\ttrace.group[group]= value;\n\t\t\t\t}else{\n\t\t\t\t\tmix(trace.group, group);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\ttrace.set(mix(mix(mix({}, defaultConfig.trace), userConfig.trace), dojoSniffConfig.trace));\n\t\ton(\"config\", function(config){\n\t\t\tconfig.trace && trace.set(config.trace);\n\t\t});\n\t}else{\n\t\treq.trace = noop;\n\t}\n\tif (! 1 ) {\n\t\tvar def = function(\n\t\t\tmid,\t\t //(commonjs.moduleId, optional)\n\t\t\tdependencies, //(array of commonjs.moduleId, optional) list of modules to be loaded before running factory\n\t\t\tfactory\t\t //(any)\n\t\t){\n\t\t\t///\n\t\t\t// Advises the loader of a module factory. //Implements http://wiki.commonjs.org/wiki/Modules/AsynchronousDefinition.\n\t\t\t///\n\t\t\t//note\n\t\t\t// CommonJS factory scan courtesy of http://requirejs.org\n\n\t\t\tvar arity = arguments.length,\n\t\t\t\tdefaultDeps = [\"require\", \"exports\", \"module\"],\n\t\t\t\t// the predominate signature...\n\t\t\t\targs = [0, mid, dependencies];\n\t\t\tif(arity==1){\n\t\t\t\targs = [0, (isFunction(mid) ? defaultDeps : []), mid];\n\t\t\t}else if(arity==2 && isString(mid)){\n\t\t\t\targs = [mid, (isFunction(dependencies) ? defaultDeps : []), dependencies];\n\t\t\t}else if(arity==3){\n\t\t\t\targs = [mid, dependencies, factory];\n\t\t\t}\n\n\t\t\tif( 0 && args[1]===defaultDeps){\n\t\t\t\targs[2].toString()\n\t\t\t\t\t.replace(/(\\/\\*([\\s\\S]*?)\\*\\/|\\/\\/(.*)$)/mg, \"\")\n\t\t\t\t\t.replace(/require\\([\"']([\\w\\!\\-_\\.\\/]+)[\"']\\)/g, function(match, dep){\n\t\t\t\t\targs[1].push(dep);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treq.trace(\"loader-define\", args.slice(0, 2));\n\t\t\tvar targetModule = args[0] && getModule(args[0]),\n\t\t\t\tmodule;\n\t\t\tif(targetModule && !waiting[targetModule.mid]){\n\t\t\t\t// given a mid that hasn't been requested; therefore, defined through means other than injecting\n\t\t\t\t// consequent to a require() or define() application; examples include defining modules on-the-fly\n\t\t\t\t// due to some code path or including a module in a script element. In any case,\n\t\t\t\t// there is no callback waiting to finish processing and nothing to trigger the defQ and the\n\t\t\t\t// dependencies are never requested; therefore, do it here.\n\t\t\t\tinjectDependencies(defineModule(targetModule, args[1], args[2]));\n\t\t\t}else if(! 0 || ! 1 || injectingCachedModule){\n\t\t\t\t// not IE path: anonymous module and therefore must have been injected; therefore, onLoad will fire immediately\n\t\t\t\t// after script finishes being evaluated and the defQ can be run from that callback to detect the module id\n\t\t\t\tdefQ.push(args);\n\t\t\t}else{\n\t\t\t\t// IE path: possibly anonymous module and therefore injected; therefore, cannot depend on 1-to-1,\n\t\t\t\t// in-order exec of onLoad with script eval (since it's IE) and must manually detect here\n\t\t\t\ttargetModule = targetModule || injectingModule;\n\t\t\t\tif(!targetModule){\n\t\t\t\t\tfor(mid in waiting){\n\t\t\t\t\t\tmodule = modules[mid];\n\t\t\t\t\t\tif(module && module.node && module.node.readyState === 'interactive'){\n\t\t\t\t\t\t\ttargetModule = module;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif( 0 && !targetModule){\n\t\t\t\t\t\tfor(var i = 0; i<combosPending.length; i++){\n\t\t\t\t\t\t\ttargetModule = combosPending[i];\n\t\t\t\t\t\t\tif(targetModule.node && targetModule.node.readyState === 'interactive'){\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttargetModule= 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif( 0 && isArray(targetModule)){\n\t\t\t\t\tinjectDependencies(defineModule(getModule(targetModule.shift()), args[1], args[2]));\n\t\t\t\t\tif(!targetModule.length){\n\t\t\t\t\t\tcombosPending.splice(i, 1);\n\t\t\t\t\t}\n\t\t\t\t}else if(targetModule){\n\t\t\t\t\tconsumePendingCacheInsert(targetModule);\n\t\t\t\t\tinjectDependencies(defineModule(targetModule, args[1], args[2]));\n\t\t\t\t}else{\n\t\t\t\t\tsignal(error, makeError(\"ieDefineFailed\", args[0]));\n\t\t\t\t}\n\t\t\t\tcheckComplete();\n\t\t\t}\n\t\t};\n\t\tdef.amd = {\n\t\t\tvendor:\"dojotoolkit.org\"\n\t\t};\n\n\t\tif( 0 ){\n\t\t\treq.def = def;\n\t\t}\n\t} else {\n\t\tvar def = noop;\n\t}\n\t// allow config to override default implementation of named functions; this is useful for\n\t// non-browser environments, e.g., overriding injectUrl, getText, log, etc. in node.js, Rhino, etc.\n\t// also useful for testing and monkey patching loader\n\tmix(mix(req, defaultConfig.loaderPatch), userConfig.loaderPatch);\n\n\t// now that req is fully initialized and won't change, we can hook it up to the error signal\n\ton(error, function(arg){\n\t\ttry{\n\t\t\tconsole.error(arg);\n\t\t\tif(arg instanceof Error){\n\t\t\t\tfor(var p in arg){\n\t\t\t\t\tconsole.log(p + \":\", arg[p]);\n\t\t\t\t}\n\t\t\t\tconsole.log(\".\");\n\t\t\t}\n\t\t}catch(e){}\n\t});\n\n\t// always publish these\n\tmix(req, {\n\t\tuid:uid,\n\t\tcache:cache,\n\t\tpacks:packs\n\t});\n\n\n\tif( 0 ){\n\t\tmix(req, {\n\t\t\t// these may be interesting to look at when debugging\n\t\t\tpaths:paths,\n\t\t\taliases:aliases,\n\t\t\tmodules:modules,\n\t\t\tlegacyMode:legacyMode,\n\t\t\texecQ:execQ,\n\t\t\tdefQ:defQ,\n\t\t\twaiting:waiting,\n\n\t\t\t// these are used for testing\n\t\t\t// TODO: move testing infrastructure to a different has feature\n\t\t\tpacks:packs,\n\t\t\tmapProgs:mapProgs,\n\t\t\tpathsMapProg:pathsMapProg,\n\t\t\tlistenerQueues:listenerQueues,\n\n\t\t\t// these are used by the builder (at least)\n\t\t\tcomputeMapProg:computeMapProg,\n\t\t\tcomputeAliases:computeAliases,\n\t\t\trunMapProg:runMapProg,\n\t\t\tcompactPath:compactPath,\n\t\t\tgetModuleInfo:getModuleInfo_\n\t\t});\n\t}\n\n\t// the loader can be defined exactly once; look for global define which is the symbol AMD loaders are\n\t// *required* to define (as opposed to require, which is optional)\n\tif(global.define){\n\t\tif( 0 ){\n\t\t\tsignal(error, makeError(\"defineAlreadyDefined\", 0));\n\t\t}\n\t\treturn;\n\t}else{\n\t\tglobal.define = def;\n\t\tglobal.require = req;\n\t\tif( 0 ){\n\t\t\trequire = req;\n\t\t}\n\t}\n\n\tif( 0 && req.combo && req.combo.plugins){\n\t\tvar plugins = req.combo.plugins,\n\t\t\tpluginName;\n\t\tfor(pluginName in plugins){\n\t\t\tmix(mix(getModule(pluginName), plugins[pluginName]), {isCombo:1, executed:\"executed\", load:1});\n\t\t}\n\t}\n\n\tif( 1 && ! 1 ){\n\t\tforEach(delayedModuleConfig, function(c){ config(c); });\n\t\tvar bootDeps = dojoSniffConfig.deps ||\tuserConfig.deps || defaultConfig.deps,\n\t\t\tbootCallback = dojoSniffConfig.callback || userConfig.callback || defaultConfig.callback;\n\t\treq.boot = (bootDeps || bootCallback) ? [bootDeps || [], bootCallback] : 0;\n\t}\n\tif(! 1 ){\n\t\t!req.async && req([\"dojo\"]);\n\t\treq.boot && req.apply(null, req.boot);\n\t}\n})\n.call(this, userConfig, defaultConfig);};","\"use strict\";\n\ndefine([], function () {\n const modes = {\n DEVELOPMENT: 'DEVELOPMENT',\n PRODUCTION: 'PRODUCTION'\n };\n Object.freeze(modes);\n return modes;\n});\n//# sourceMappingURL=Modes.js.map\n","\"use strict\";\n\ndefine(['mw-log/impl/Modes'], function (Modes) {\n const utils = {};\n\n utils.objectValues = function (object) {\n let arr = [];\n\n for (let key in object) {\n if (object.hasOwnProperty(key)) {\n arr.push(object[key]);\n }\n }\n\n return arr;\n };\n\n utils.makeReadOnlyProperty = function (object, key, value) {\n Object.defineProperty(object, key, {\n value: value,\n writable: false\n });\n };\n\n utils.execCallbacks = function (callbacks, message) {\n const cbList = utils.objectValues(callbacks);\n\n for (let i in cbList) {\n cbList[i](message);\n }\n };\n\n utils.currentTimeString = function () {\n const now = new Date();\n return now.toLocaleTimeString('en-US', {\n hour12: false,\n hour: 'numeric',\n minute: 'numeric',\n second: 'numeric'\n }) + '.' + now.getTime() % 1000;\n };\n\n utils.printToConsole = function (method, args, mode) {\n // check for production mode\n // in production mode, still show errors\n if (mode !== Modes.PRODUCTION || method === 'error') {\n console[method].apply(console, args);\n }\n };\n\n return utils;\n});\n//# sourceMappingURL=LogUtils.js.map\n","define([\"mw-messageservice/messageserviceimpl/createMessageServiceDefaultInstance\", \"mw-messageservice/messageserviceimpl/MessageServiceAsync\", \"mw-messageservice/messageserviceimpl/instanceEnums\", \"mw-messageservice/messageserviceimpl/messageServiceFactory\", \"mw-remote/Remote\"], function (createMessageServiceDefaultInstance, MessageServiceAsync, instanceEnums, messageServiceFactory, Remote) {\n \"use strict\";\n\n var _exports = {};\n /* Copyright 2012-2024 The MathWorks, Inc. */\n\n /**\n *\n * @param defaultInstance\n * @param appServiceHostInstance\n */\n function rewireStartStop(defaultInstance, appServiceHostInstance) {\n // Hook up Start/Stop from To Both Instances\n // - long term we need to manage start ourselves -\n // instead of having teams call it. So we don't\n // \"expose\" it from the new create API\n\n // _startFunction is used by internalMotwDisableStart\n // so we need to handle cases where internalMotwDisableStart\n // was called and we are rewiring before it is re-enabled.\n // if _startFunction is defined use it - if not, use the\n // standard start function\n const appStart = appServiceHostInstance._startFunction || appServiceHostInstance.start;\n const appStop = appServiceHostInstance.stop;\n const defaultStart = defaultInstance._startFunction || defaultInstance.start;\n const defaultStop = defaultInstance.stop;\n const newStart = function () {\n defaultStart.call(defaultInstance, []);\n appStart.call(appServiceHostInstance, []);\n };\n const newStop = function () {\n appStop.call(appServiceHostInstance, []);\n defaultStop.call(defaultInstance, []);\n };\n if (appServiceHostInstance._startFunction) {\n appServiceHostInstance._startFunction = newStart;\n } else {\n appServiceHostInstance.start = newStart;\n }\n if (defaultInstance._startFunction) {\n defaultInstance._startFunction = newStart;\n } else {\n defaultInstance.start = newStart;\n }\n appServiceHostInstance.stop = newStop;\n defaultInstance.stop = newStop;\n }\n const defaultInstance = createMessageServiceDefaultInstance(new MessageServiceAsync(Remote, null, null, null, {\n instanceType: instanceEnums.MATLAB_SERVICE_HOST.name\n }));\n\n // We should change this to get this information from EndPointManager\n // or the discovery service, once we understand the requirements around discovery\n // Right now we assume that AppServiceHost is on the same machine as\n // MATLAB Compute Host (aka Worker) and uses the same authentication scheme.\n // This will not be true for the long term.\n const delegate = new MessageServiceAsync(Remote, null, null, null, {\n instanceType: instanceEnums.APP_SERVICE_HOST.name\n });\n let appServiceHostInstance;\n\n // See g1219276 for refactor details - removing old implimentation\n Remote.enableServerOnWorkerAsync = function () {};\n Remote.disableServerOnWorkerAsync = function () {};\n const instances = {};\n instances[instanceEnums.APP_SERVICE_HOST.name] = () => {\n if (!appServiceHostInstance) {\n // Don't start the appServiceHostInstance\n // until someone creates one\n appServiceHostInstance = createMessageServiceDefaultInstance(delegate);\n if (defaultInstance.isStarted()) {\n appServiceHostInstance.start();\n }\n rewireStartStop(defaultInstance, appServiceHostInstance);\n }\n return appServiceHostInstance;\n };\n instances[instanceEnums.MATLAB_SERVICE_HOST.name] = () => defaultInstance;\n defaultInstance.create = function (options) {\n return messageServiceFactory(instances, options);\n };\n\n // Add create to the default instance\n // and return it for backwards compatibility\n _exports.default = defaultInstance;\n return _exports.default;\n});\n//# sourceMappingURL=MessageService.js.map\n","define([\"./aspect\", \"./on\"], function(aspect, on){\n\t// module:\n\t//\t\tdojo/Evented\n\n \t\"use strict\";\n \tvar after = aspect.after;\n\tfunction Evented(){\n\t\t// summary:\n\t\t//\t\tA class that can be used as a mixin or base class,\n\t\t//\t\tto add on() and emit() methods to a class\n\t\t//\t\tfor listening for events and emitting events:\n\t\t// example:\n\t\t//\t\t|\tdefine([\"dojo/Evented\", \"dojo/_base/declare\", \"dojo/Stateful\"\n\t\t//\t\t|\t], function(Evented, declare, Stateful){\n\t\t//\t\t|\t\tvar EventedStateful = declare([Evented, Stateful], {...});\n\t\t//\t\t|\t\tvar instance = new EventedStateful();\n\t\t//\t\t|\t\tinstance.on(\"open\", function(event){\n\t\t//\t\t|\t\t... do something with event\n\t\t//\t\t|\t });\n\t\t//\t\t|\n\t\t//\t\t|\tinstance.emit(\"open\", {name:\"some event\", ...});\n\t}\n\tEvented.prototype = {\n\t\ton: function(type, listener){\n\t\t\treturn on.parse(this, type, listener, function(target, type){\n\t\t\t\treturn after(target, 'on' + type, listener, true);\n\t\t\t});\n\t\t},\n\t\temit: function(type, event){\n\t\t\tvar args = [this];\n\t\t\targs.push.apply(args, arguments);\n\t\t\treturn on.emit.apply(on, args);\n\t\t}\n\t};\n\treturn Evented;\n});\n","define([\"./Evented\"], function(Evented){\n\n\t// module:\n\t//\t\tdojo/topic\n\n\tvar hub = new Evented;\n\treturn {\n\t\t// summary:\n\t\t//\t\tPubsub hub.\n\t\t// example:\n\t\t//\t\t| \ttopic.subscribe(\"some/topic\", function(event){\n\t\t//\t\t|\t... do something with event\n\t\t//\t\t|\t});\n\t\t//\t\t|\ttopic.publish(\"some/topic\", {name:\"some event\", ...});\n\n\t\tpublish: function(topic, event){\n\t\t\t// summary:\n\t\t\t//\t\tPublishes a message to a topic on the pub/sub hub. All arguments after\n\t\t\t//\t\tthe first will be passed to the subscribers, so any number of arguments\n\t\t\t//\t\tcan be provided (not just event).\n\t\t\t// topic: String\n\t\t\t//\t\tThe name of the topic to publish to\n\t\t\t// event: Object\n\t\t\t//\t\tAn event to distribute to the topic listeners\n\t\t\treturn hub.emit.apply(hub, arguments);\n\t\t},\n\n\t\tsubscribe: function(topic, listener){\n\t\t\t// summary:\n\t\t\t//\t\tSubscribes to a topic on the pub/sub hub\n\t\t\t// topic: String\n\t\t\t//\t\tThe topic to subscribe to\n\t\t\t// listener: Function\n\t\t\t//\t\tA function to call when a message is published to the given topic\n\t\t\treturn hub.on.apply(hub, arguments);\n\t\t}\n\t};\n});\n","\"use strict\";\n\n// Copyright 2010-2022 The MathWorks, Inc.\n\n/**\n * This is the main entry point to the remote layer. It instantiates all the objects and presents\n * a facade API for consumers to use (data services).\n */\ndefine(['dojo/_base/lang', 'dojo/_base/Deferred', 'dojo/aspect', './iframeproxy/IframeProxyClient', './impl/FaultManager', './impl/RequestManager', './impl/ResponseManager', './impl/Transaction', './impl/AutoDetectedTransaction', './RemoteEndPointsManager', './utils/SendMessageUtil', './UploadToWorker', 'mw-log/Log', 'mw-remote/utils/RemoteUrlUtils', './serviceRegistryLookup!'], function (lang, Deferred, aspect, IframeProxyClient, FaultManager, RequestManager, ResponseManager, Transaction, AutoDetectedTransaction, RemoteEndPointsManager, SendMessageUtil, UploadToWorker, Log, RemoteUrlUtils, serviceRegistryLookup) {\n var remote; // use a setup method to help unit tests reset this singleton.\n\n remote = {\n reset: function reset() {\n var allowedMessages = [];\n var faultManager = new FaultManager();\n var responseManager = new ResponseManager({\n faultManager: faultManager\n });\n var requestManager = new RequestManager({\n responseManager: responseManager\n });\n remote.faultManager = faultManager;\n remote.responseManager = responseManager;\n remote.requestManager = requestManager;\n remote._serviceRegistryLookup = serviceRegistryLookup;\n remote._uploadParameters = {};\n var proxyClient = remote.proxyClient = new IframeProxyClient();\n remote.createUploadIframeTarget = lang.hitch(proxyClient, proxyClient.createUploadIframeTarget);\n remote.cancelUpload = lang.hitch(proxyClient, proxyClient.cancelUpload);\n RemoteEndPointsManager.setIframeProxyClientForEndPoint(RemoteEndPointsManager.getEndPointNames().ROUTER_LEAF_SECURE_ENDPOINT, proxyClient);\n RemoteEndPointsManager.setIframeProxyClientForEndPoint(RemoteEndPointsManager.getEndPointNames().ROUTER_LEAF_INSECURE_ENDPOINT, proxyClient); // todo: have some way to select the transaction implementation. for example, use XHR for\n // MatlabFacade.\n\n Transaction.construct = function (args) {\n args = args || {};\n\n if (!RemoteEndPointsManager.getRoutingHost(RemoteEndPointsManager.getEndPointNames().ROUTER_LEAF_INSECURE_ENDPOINT)) {\n remote.setEndpoint();\n }\n\n args.allowedMessages = allowedMessages;\n args.sendMessage = remote.sendMessage;\n args.computeSessionId = remote.getComputeSessionId;\n return new AutoDetectedTransaction(args);\n };\n /**\n * Function gives flexibility to add top level fault handling per iframeProxyClient.\n * IframeProxyClient's onError gets invoked when there is 400 level or 500 level errors.\n * @param serviceEndPoint\n * @param faultHandler\n * @param scope\n */\n\n\n remote.registerEndpointLevelFaultHandler = lang.hitch(faultManager, faultManager.registerEndpointLevelFaultHandler); // create a facade on the remote object for easy access to the main api of the remote layer.\n // Send a message to the server\n\n remote.sendMessage = lang.hitch(requestManager, requestManager.sendMessage); // Send Payload to the server, used my mw-messageservice for a Transactionless way to send the data to the server.\n\n remote.sendPayload = SendMessageUtil.sendPayload; // Register a default request factory function\n\n remote.registerDefaultMessageFactory = lang.hitch(requestManager, requestManager.registerDefaultMessageFactory);\n remote.deregisterDefaultMessageFactory = lang.hitch(requestManager, requestManager.deregisterDefaultMessageFactory); // Register a response handler for a specific type\n\n remote.registerResponseHandler = lang.hitch(responseManager, responseManager.registerResponseHandler);\n remote.deregisterResponseHandler = lang.hitch(responseManager, responseManager.deregisterResponseHandler); // Register a response handler which is called when the specified type is in the request\n // which resulted in an fault\n\n remote.registerFaultHandler = lang.hitch(faultManager, faultManager.registerFaultHandler);\n remote.deregisterFaultHandler = lang.hitch(faultManager, faultManager.deregisterFaultHandler); // Register a response handler which is called when the specified fault code matches\n\n remote.registerTopLevelFaultHandler = lang.hitch(faultManager, faultManager.registerTopLevelFaultHandler);\n remote.deregisterTopLevelFaultHandler = lang.hitch(faultManager, faultManager.deregisterTopLevelFaultHandler);\n /**\n * This function is used to set routingHost and Key for other services like\n * USAGE_DATA_ROUTER_ENDPOINT\n * @param serviceName : This is the service Name. Currently supported serviceNames are\n * following\n * USAGE_DATA_ROUTER_ENDPOINT | WORKER_ENDPOINT | ROUTER_LEAF_SECURE_ENDPOINT |\n * ROUTER_LEAF_INSECURE_ENDPOINT\n * @param routingHost\n * @param routingKey\n */\n\n remote.setServiceEndPoint = function (serviceName, routingHost, routingKey) {\n RemoteEndPointsManager.setRoutingHostAndRoutingKey(serviceName, routingHost, routingKey);\n };\n /**\n * This function is used to set pathSuffix for other services like HELP_DATA_ROUTER_ENDPOINT\n * @param serviceName : This is the service Name. Currently supported serviceNames are\n * following HELP_DATA_ROUTER_ENDPOINT\n * @param serviceName\n * @param pathSuffix\n */\n\n\n remote.setServicePathSuffixForEndPoint = function (serviceName, pathSuffix) {\n RemoteEndPointsManager.setPathSuffixForEndPoint(serviceName, pathSuffix);\n }; // Ignore faults that match the specified fault code.\n\n\n remote.ignoreTopLevelFault = remote.registerTopLevelFaultHandler; // Set a compute token to be sent with all requests\n\n remote.setComputeToken = function (token) {\n remote._uploadParameters.computeToken = token.computeSessionId;\n requestManager.computeToken = token;\n }; // todo: simplify the endpoint management. we have worker, leaf, router, worker routing key\n\n\n remote.setWorkerEndpoint = function (newRoutingHost, newRoutingKey) {\n remote._uploadParameters.routingKey = newRoutingKey;\n RemoteEndPointsManager.setRoutingHostAndRoutingKey(RemoteEndPointsManager.getEndPointNames().WORKER_ENDPOINT, newRoutingHost, newRoutingKey);\n }; // Set the base endpoint to use for all transactions\n\n\n remote.setEndpoint = function (newEndpoint) {\n if (!newEndpoint) {\n var endpoint = remote._serviceRegistryLookup.getServiceRegistryEndpoint('primary');\n\n if (endpoint) {\n newEndpoint = endpoint;\n } else {\n Log.info('ServiceRegistryLookup is empty, falling back to localhost');\n newEndpoint = '/';\n }\n }\n\n if (!newEndpoint || newEndpoint === '/') {\n var baseHref = (document.getElementsByTagName('base')[0] || {}).href;\n\n if (baseHref !== undefined) {\n var fakeLink = document.createElement('a');\n fakeLink.display = 'none';\n fakeLink.href = baseHref;\n newEndpoint = fakeLink.protocol + '//' + fakeLink.hostname + (fakeLink.port ? ':' + fakeLink.port : '') + '/';\n } else {\n newEndpoint = window.location.protocol + '//' + window.location.host + '/';\n }\n } // Set both secure's and insecure's host name\n\n\n RemoteEndPointsManager.setRoutingHostAndRoutingKey(RemoteEndPointsManager.getEndPointNames().ROUTER_LEAF_SECURE_ENDPOINT, newEndpoint);\n RemoteEndPointsManager.setRoutingHostAndRoutingKey(RemoteEndPointsManager.getEndPointNames().ROUTER_LEAF_INSECURE_ENDPOINT, newEndpoint);\n proxyClient.setRemotePageHost(newEndpoint, undefined, undefined, undefined, {\n withCredentials: RemoteEndPointsManager.endPointsCollection[RemoteEndPointsManager.getEndPointNames().ROUTER_LEAF_SECURE_ENDPOINT].withCredentials\n });\n };\n\n remote.setAllowedMessages = function (newAllowedMessages) {\n allowedMessages = newAllowedMessages;\n };\n\n remote.allowAllMessages = function () {\n allowedMessages = [];\n }; // Though it says endPoint, it actually means the Router/Leaf Host name.\n // TODO change the name here.\n\n\n remote.getEndPoint = function () {\n return RemoteEndPointsManager.getRoutingHost(RemoteEndPointsManager.getEndPointNames().ROUTER_LEAF_SECURE_ENDPOINT);\n };\n\n remote.getComputeSessionId = function () {\n return requestManager.computeToken ? requestManager.computeToken.computeSessionId : null;\n };\n /**\n * Returns routingHost set during WRA workflow. Else, returns current location\n */\n\n\n remote.getWorkerRoutingHost = function () {\n var workerRoutingHost = RemoteEndPointsManager.getRoutingHost(RemoteEndPointsManager.getEndPointNames().WORKER_ENDPOINT);\n /**\n * Expectation:\n * We use mre query parameter to configure Remote layer's \"primary\" endpoint.\n * This endpoint signifies where to find MATLAB\n * If Worker endpoint has been set already, then we want that to be returned.\n * However, if not, we want the value of \"primary\" endpoint to be returned\n * And if even that is not configured, then return the URL where Remote layer is being served from\n * should be returned\n * Reason:\n * On Desktop/localhost: primary endpoint is also the Worker endpoint\n * On Cloud stacks, the \"mre\" query parameter is used to provide information on where MATLAB is\n * by setting the \"primary\" endpoint so we want that information returned if it exists, instead\n * of where Remote is hosted\n */\n\n if (workerRoutingHost) {\n return workerRoutingHost;\n } else {\n workerRoutingHost = remote._serviceRegistryLookup.getServiceRegistryEndpoint('primary'); // If the serviceregistry has primary endpoint as \"/\" and no mre query parameter was passed then we get \"/\" back\n // However, This is not a valid value and should be translated to https://localhost:31515/\n\n if (!workerRoutingHost || workerRoutingHost === '/') {\n var baseHref = (document.getElementsByTagName('base')[0] || {}).href;\n\n if (baseHref !== undefined) {\n var fakeLink = document.createElement('a');\n fakeLink.display = 'none';\n fakeLink.href = baseHref;\n workerRoutingHost = fakeLink.protocol + '//' + fakeLink.hostname + (fakeLink.port ? ':' + fakeLink.port : '') + '/';\n } else {\n workerRoutingHost = window.location.protocol + '//' + window.location.host + '/';\n }\n }\n\n return workerRoutingHost;\n }\n };\n /**\n * Return routingKey set during WRA workflow. Else returns default routingKey ,\n * This is used by MessageServiceAsync to get the routingKey and routing Host set. These\n * are either unset or set to worker endPoints. Hence This method explicitly returns the\n * workerEndPointRoutingKey\n */\n\n\n remote.getWorkerRoutingKey = function () {\n return RemoteEndPointsManager.getRoutingKey(RemoteEndPointsManager.getEndPointNames().WORKER_ENDPOINT);\n };\n /**\n * This function is used to get a worker compatible download Url\n * @param filepath : absolute location to the file that is needed for download\n */\n\n\n remote.getDownloadUrlForFile = function (filepath) {\n if (!filepath) {\n throw new Error('Invalid input arguments provided!');\n }\n\n var getDownloadurlResponse = new Deferred();\n var downloadUrl = new URL(remote.getWorkerRoutingHost() + 'download' + filepath);\n var csrfTokenResponseProm = SendMessageUtil.sendPayload(JSON.stringify({\n messages: {\n CreateCsrfToken: [{}]\n }\n }), RemoteEndPointsManager.getEndPointNames().WORKER_ENDPOINT);\n csrfTokenResponseProm.then(function (responses) {\n responses.messages.CreateCsrfTokenResponse.forEach(function (response) {\n if (response.messageFaults && response.messageFaults.length > 0) {// No op\n } else {\n // set the csrf token for secure downloads\n downloadUrl.searchParams.set('csrfToken', response.csrfToken);\n getDownloadurlResponse.resolve(downloadUrl);\n }\n });\n });\n return getDownloadurlResponse;\n };\n /**\n * Upload artifacts provided to Worker\n *\n * @param {FileList} artifactsList - List of files that have to be uploaded\n * @param {string} destination - File system location where the file has to be uploaded\n * @return {*} a deferred\n */\n\n\n remote.upload = function (artifactsList, destination) {\n return new UploadToWorker().upload(artifactsList, destination, {\n endpoint: remote.getWorkerRoutingHost(),\n uploadParams: remote._uploadParameters\n });\n };\n /**\n * Creates a remote worker URL to access a resource\n *\n * @param {String} path - path to resource being accessed\n * @return {String} Remote URL to access resource on worker\n */\n\n\n remote.createWorkerRoutingHostUrl = function (path) {\n return RemoteUrlUtils.createWorkerRoutingHostUrl(path, {\n host: remote.getWorkerRoutingHost(),\n sessionId: remote.getComputeSessionId(),\n routingKey: remote.getWorkerRoutingKey()\n });\n };\n /**\n * Returns the endpoint from: /serviceregistrylookup/1/service\n * If endpoint does not exist or the file is non-existant returns\n * it returns \"\" otherwise an absolute OR root relative URL.\n *\n * @param {string} name - Name of the ServiceRegistry key\n * @returns {string} - absolute OR root relative endpoint URL\n */\n\n\n remote.getServiceRegistryEndpoint = function (name) {\n return remote._serviceRegistryLookup.getServiceRegistryEndpoint(name);\n };\n /**\n * @desc Turns on Server on Worker Async - Which is on by default\n * And should never be off\n * @deprecated Planning on removal - no one should be using this. g1219276\n * @returns {void}\n */\n\n\n remote.enableServerOnWorkerAsync = function () {\n RemoteEndPointsManager.enableEndPoint(RemoteEndPointsManager.getEndPointNames().WORKER_ASYNC_ENDPOINT);\n };\n /**\n * @desc Turns off Server on Worker Async - Which is on by default\n * And should never be off\n * @deprecated Planning on removal - no one should be using this. g1219276\n * @returns {void}\n */\n\n\n remote.disableServerOnWorkerAsync = function () {\n RemoteEndPointsManager.disableEndPoint(RemoteEndPointsManager.getEndPointNames().WORKER_ASYNC_ENDPOINT);\n };\n /**\n * @desc Checks status of Server on Worker Async- Which is on by default\n * And should never be off\n * @deprecated Planning on removal - no one should be using this. g1219276\n * @returns {void}\n */\n\n\n remote.isServerOnWorkerAsyncEnabled = function () {\n return RemoteEndPointsManager.isEndPointEnabled(RemoteEndPointsManager.getEndPointNames().WORKER_ASYNC_ENDPOINT);\n };\n /**\n * @desc enableServerOnWorker - turns on Server on Worker\n * This *should* be turned on by Default and is likely\n * only being called by MOTW.\n * @deprecated Planning on removal, and setting WORKER_ENDPONT true by default. g1219276\n * @returns {void}\n */\n\n\n remote.enableServerOnWorker = function () {\n RemoteEndPointsManager.enableEndPoint(RemoteEndPointsManager.getEndPointNames().WORKER_ENDPOINT);\n };\n /**\n * @desc disableServerOnWorker - turns off Server on Worker\n * This *should* be turned on by Default and is likely never called by anyone\n * @deprecated Planning on removal, and setting WORKER_ENDPONT true by default. g1219276\n * @returns {void}\n */\n\n\n remote.disableServerOnWorker = function () {\n RemoteEndPointsManager.disableEndPoint(RemoteEndPointsManager.getEndPointNames().WORKER_ENDPOINT);\n };\n /**\n * @desc isWorkerEndpointEnabled - Checks to see status of server on worker\n * This *should* be turned on by Default and is likely\n * only being called by MOTW.\n * @deprecated Planning on removal, and setting WORKER_ENDPONT true by default. g1219276\n * @returns {void}\n */\n\n\n remote.isWorkerEndpointEnabled = function () {\n return RemoteEndPointsManager.isEndPointEnabled(RemoteEndPointsManager.getEndPointNames().WORKER_ENDPOINT);\n };\n\n remote.setWorkerOnlyMessageTypes = function (messages) {\n RemoteEndPointsManager.setMessageTypesToEndPoint(RemoteEndPointsManager.getEndPointNames().WORKER_ENDPOINT, messages);\n };\n\n aspect.after(proxyClient, 'onError', function (fault) {\n if (fault) {\n faultManager.handleNonTransactionFault(fault);\n }\n }, true);\n /**\n * This method can be used to create an endPoint during runtime.\n * @param endPointName : Name of the endPoint\n * @param isEnabled : During the initialization, the endPoint can be enabled or disabled\n * using this param\n * @param pathSuffix : This is the suffix of the URL to which we post messages.\n * @param IframeProxyName: Name of the iframe created.\n * @param isMessageContainerBased: This endpoint can be used to determine if it is message container Based or not\n */\n\n remote.createNewEndPoint = function (endPointName, isEnabled, pathSuffix, IframeProxyName, isMessageContainerBased) {\n var endPoint = this.getEndPointByName(endPointName);\n\n if (!endPoint) {\n RemoteEndPointsManager.setUpNewEndPoint(endPointName, isEnabled, pathSuffix, IframeProxyName, isMessageContainerBased);\n }\n };\n /**\n * Returns complete URL to which we must post messages.\n * @param endPointName\n * @return {*} String\n */\n\n\n remote.getUrlForEndPoint = function (endPointName) {\n return RemoteEndPointsManager.getRemoteUrlForEndPoint(endPointName);\n };\n /**\n * This method returns the endPointName from the the EndPoint Collection of EndPointManager\n * @returns {*} String\n */\n\n\n remote.getEndPointByName = function (endpointName) {\n return RemoteEndPointsManager.getEndPointNames()[endpointName];\n };\n }\n };\n remote.reset();\n return remote;\n});\n//# sourceMappingURL=Remote.js.map\n","define([\"./kernel\", \"../on\", \"../topic\", \"../aspect\", \"./event\", \"../mouse\", \"./sniff\", \"./lang\", \"../keys\"], function(dojo, on, hub, aspect, eventModule, mouse, has, lang){\n// module:\n//\t\tdojo/_base/connect\n\nhas.add(\"events-keypress-typed\", function(){ // keypresses should only occur a printable character is hit\n\tvar testKeyEvent = {charCode: 0};\n\ttry{\n\t\ttestKeyEvent = document.createEvent(\"KeyboardEvent\");\n\t\t(testKeyEvent.initKeyboardEvent || testKeyEvent.initKeyEvent).call(testKeyEvent, \"keypress\", true, true, null, false, false, false, false, 9, 3);\n\t}catch(e){}\n\treturn testKeyEvent.charCode == 0 && !has(\"opera\");\n});\n\nfunction connect_(obj, event, context, method, dontFix){\n\tmethod = lang.hitch(context, method);\n\tif(!obj || !(obj.addEventListener || obj.attachEvent)){\n\t\t// it is a not a DOM node and we are using the dojo.connect style of treating a\n\t\t// method like an event, must go right to aspect\n\t\treturn aspect.after(obj || dojo.global, event, method, true);\n\t}\n\tif(typeof event == \"string\" && event.substring(0, 2) == \"on\"){\n\t\tevent = event.substring(2);\n\t}\n\tif(!obj){\n\t\tobj = dojo.global;\n\t}\n\tif(!dontFix){\n\t\tswitch(event){\n\t\t\t// dojo.connect has special handling for these event types\n\t\t\tcase \"keypress\":\n\t\t\t\tevent = keypress;\n\t\t\t\tbreak;\n\t\t\tcase \"mouseenter\":\n\t\t\t\tevent = mouse.enter;\n\t\t\t\tbreak;\n\t\t\tcase \"mouseleave\":\n\t\t\t\tevent = mouse.leave;\n\t\t\t\tbreak;\n\t\t}\n\t}\n\treturn on(obj, event, method, dontFix);\n}\n\nvar _punctMap = {\n\t106:42,\n\t111:47,\n\t186:59,\n\t187:43,\n\t188:44,\n\t189:45,\n\t190:46,\n\t191:47,\n\t192:96,\n\t219:91,\n\t220:92,\n\t221:93,\n\t222:39,\n\t229:113\n};\nvar evtCopyKey = has(\"mac\") ? \"metaKey\" : \"ctrlKey\";\n\n\nvar _synthesizeEvent = function(evt, props){\n\tvar faux = lang.mixin({}, evt, props);\n\tsetKeyChar(faux);\n\t// FIXME: would prefer to use lang.hitch: lang.hitch(evt, evt.preventDefault);\n\t// but it throws an error when preventDefault is invoked on Safari\n\t// does Event.preventDefault not support \"apply\" on Safari?\n\tfaux.preventDefault = function(){ evt.preventDefault(); };\n\tfaux.stopPropagation = function(){ evt.stopPropagation(); };\n\treturn faux;\n};\nfunction setKeyChar(evt){\n\tevt.keyChar = evt.charCode ? String.fromCharCode(evt.charCode) : '';\n\tevt.charOrCode = evt.keyChar || evt.keyCode;\n}\nvar keypress;\nif(has(\"events-keypress-typed\")){\n\t// this emulates Firefox's keypress behavior where every keydown can correspond to a keypress\n\tvar _trySetKeyCode = function(e, code){\n\t\ttry{\n\t\t\t// squelch errors when keyCode is read-only\n\t\t\t// (e.g. if keyCode is ctrl or shift)\n\t\t\treturn (e.keyCode = code);\n\t\t}catch(e){\n\t\t\treturn 0;\n\t\t}\n\t};\n\tkeypress = function(object, listener){\n\t\tvar keydownSignal = on(object, \"keydown\", function(evt){\n\t\t\t// munge key/charCode\n\t\t\tvar k=evt.keyCode;\n\t\t\t// These are Windows Virtual Key Codes\n\t\t\t// http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/WinUI/WindowsUserInterface/UserInput/VirtualKeyCodes.asp\n\t\t\tvar unprintable = (k!=13) && k!=32 && (k!=27||!has(\"ie\")) && (k<48||k>90) && (k<96||k>111) && (k<186||k>192) && (k<219||k>222) && k!=229;\n\t\t\t// synthesize keypress for most unprintables and CTRL-keys\n\t\t\tif(unprintable||evt.ctrlKey){\n\t\t\t\tvar c = unprintable ? 0 : k;\n\t\t\t\tif(evt.ctrlKey){\n\t\t\t\t\tif(k==3 || k==13){\n\t\t\t\t\t\treturn listener.call(evt.currentTarget, evt); // IE will post CTRL-BREAK, CTRL-ENTER as keypress natively\n\t\t\t\t\t}else if(c>95 && c<106){\n\t\t\t\t\t\tc -= 48; // map CTRL-[numpad 0-9] to ASCII\n\t\t\t\t\t}else if((!evt.shiftKey)&&(c>=65&&c<=90)){\n\t\t\t\t\t\tc += 32; // map CTRL-[A-Z] to lowercase\n\t\t\t\t\t}else{\n\t\t\t\t\t\tc = _punctMap[c] || c; // map other problematic CTRL combinations to ASCII\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// simulate a keypress event\n\t\t\t\tvar faux = _synthesizeEvent(evt, {type: 'keypress', faux: true, charCode: c});\n\t\t\t\tlistener.call(evt.currentTarget, faux);\n\t\t\t\tif(has(\"ie\")){\n\t\t\t\t\t_trySetKeyCode(evt, faux.keyCode);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\tvar keypressSignal = on(object, \"keypress\", function(evt){\n\t\t\tvar c = evt.charCode;\n\t\t\tc = c>=32 ? c : 0;\n\t\t\tevt = _synthesizeEvent(evt, {charCode: c, faux: true});\n\t\t\treturn listener.call(this, evt);\n\t\t});\n\t\treturn {\n\t\t\tremove: function(){\n\t\t\t\tkeydownSignal.remove();\n\t\t\t\tkeypressSignal.remove();\n\t\t\t}\n\t\t};\n\t};\n}else{\n\tif(has(\"opera\")){\n\t\tkeypress = function(object, listener){\n\t\t\treturn on(object, \"keypress\", function(evt){\n\t\t\t\tvar c = evt.which;\n\t\t\t\tif(c==3){\n\t\t\t\t\tc=99; // Mozilla maps CTRL-BREAK to CTRL-c\n\t\t\t\t}\n\t\t\t\t// can't trap some keys at all, like INSERT and DELETE\n\t\t\t\t// there is no differentiating info between DELETE and \".\", or INSERT and \"-\"\n\t\t\t\tc = c<32 && !evt.shiftKey ? 0 : c;\n\t\t\t\tif(evt.ctrlKey && !evt.shiftKey && c>=65 && c<=90){\n\t\t\t\t\t// lowercase CTRL-[A-Z] keys\n\t\t\t\t\tc += 32;\n\t\t\t\t}\n\t\t\t\treturn listener.call(this, _synthesizeEvent(evt, { charCode: c }));\n\t\t\t});\n\t\t};\n\t}else{\n\t\tkeypress = function(object, listener){\n\t\t\treturn on(object, \"keypress\", function(evt){\n\t\t\t\tsetKeyChar(evt);\n\t\t\t\treturn listener.call(this, evt);\n\t\t\t});\n\t\t};\n\t}\n}\n\nvar connect = {\n\t// summary:\n\t//\t\tThis module defines the dojo.connect API.\n\t//\t\tThis modules also provides keyboard event handling helpers.\n\t//\t\tThis module exports an extension event for emulating Firefox's keypress handling.\n\t//\t\tHowever, this extension event exists primarily for backwards compatibility and\n\t//\t\tis not recommended. WebKit and IE uses an alternate keypress handling (only\n\t//\t\tfiring for printable characters, to distinguish from keydown events), and most\n\t//\t\tconsider the WebKit/IE behavior more desirable.\n\n\t_keypress:keypress,\n\n\tconnect:function(obj, event, context, method, dontFix){\n\t\t// summary:\n\t\t//\t\t`dojo.connect` is a deprecated event handling and delegation method in\n\t\t//\t\tDojo. It allows one function to \"listen in\" on the execution of\n\t\t//\t\tany other, triggering the second whenever the first is called. Many\n\t\t//\t\tlisteners may be attached to a function, and source functions may\n\t\t//\t\tbe either regular function calls or DOM events.\n\t\t//\n\t\t// description:\n\t\t//\t\tConnects listeners to actions, so that after event fires, a\n\t\t//\t\tlistener is called with the same arguments passed to the original\n\t\t//\t\tfunction.\n\t\t//\n\t\t//\t\tSince `dojo.connect` allows the source of events to be either a\n\t\t//\t\t\"regular\" JavaScript function or a DOM event, it provides a uniform\n\t\t//\t\tinterface for listening to all the types of events that an\n\t\t//\t\tapplication is likely to deal with though a single, unified\n\t\t//\t\tinterface. DOM programmers may want to think of it as\n\t\t//\t\t\"addEventListener for everything and anything\".\n\t\t//\n\t\t//\t\tWhen setting up a connection, the `event` parameter must be a\n\t\t//\t\tstring that is the name of the method/event to be listened for. If\n\t\t//\t\t`obj` is null, `kernel.global` is assumed, meaning that connections\n\t\t//\t\tto global methods are supported but also that you may inadvertently\n\t\t//\t\tconnect to a global by passing an incorrect object name or invalid\n\t\t//\t\treference.\n\t\t//\n\t\t//\t\t`dojo.connect` generally is forgiving. If you pass the name of a\n\t\t//\t\tfunction or method that does not yet exist on `obj`, connect will\n\t\t//\t\tnot fail, but will instead set up a stub method. Similarly, null\n\t\t//\t\targuments may simply be omitted such that fewer than 4 arguments\n\t\t//\t\tmay be required to set up a connection See the examples for details.\n\t\t//\n\t\t//\t\tThe return value is a handle that is needed to\n\t\t//\t\tremove this connection with `dojo.disconnect`.\n\t\t//\n\t\t// obj: Object?\n\t\t//\t\tThe source object for the event function.\n\t\t//\t\tDefaults to `kernel.global` if null.\n\t\t//\t\tIf obj is a DOM node, the connection is delegated\n\t\t//\t\tto the DOM event manager (unless dontFix is true).\n\t\t//\n\t\t// event: String\n\t\t//\t\tString name of the event function in obj.\n\t\t//\t\tI.e. identifies a property `obj[event]`.\n\t\t//\n\t\t// context: Object|null\n\t\t//\t\tThe object that method will receive as \"this\".\n\t\t//\n\t\t//\t\tIf context is null and method is a function, then method\n\t\t//\t\tinherits the context of event.\n\t\t//\n\t\t//\t\tIf method is a string then context must be the source\n\t\t//\t\tobject object for method (context[method]). If context is null,\n\t\t//\t\tkernel.global is used.\n\t\t//\n\t\t// method: String|Function\n\t\t//\t\tA function reference, or name of a function in context.\n\t\t//\t\tThe function identified by method fires after event does.\n\t\t//\t\tmethod receives the same arguments as the event.\n\t\t//\t\tSee context argument comments for information on method's scope.\n\t\t//\n\t\t// dontFix: Boolean?\n\t\t//\t\tIf obj is a DOM node, set dontFix to true to prevent delegation\n\t\t//\t\tof this connection to the DOM event manager.\n\t\t//\n\t\t// example:\n\t\t//\t\tWhen obj.onchange(), do ui.update():\n\t\t//\t|\tdojo.connect(obj, \"onchange\", ui, \"update\");\n\t\t//\t|\tdojo.connect(obj, \"onchange\", ui, ui.update); // same\n\t\t//\n\t\t// example:\n\t\t//\t\tUsing return value for disconnect:\n\t\t//\t|\tvar link = dojo.connect(obj, \"onchange\", ui, \"update\");\n\t\t//\t|\t...\n\t\t//\t|\tdojo.disconnect(link);\n\t\t//\n\t\t// example:\n\t\t//\t\tWhen onglobalevent executes, watcher.handler is invoked:\n\t\t//\t|\tdojo.connect(null, \"onglobalevent\", watcher, \"handler\");\n\t\t//\n\t\t// example:\n\t\t//\t\tWhen ob.onCustomEvent executes, customEventHandler is invoked:\n\t\t//\t|\tdojo.connect(ob, \"onCustomEvent\", null, \"customEventHandler\");\n\t\t//\t|\tdojo.connect(ob, \"onCustomEvent\", \"customEventHandler\"); // same\n\t\t//\n\t\t// example:\n\t\t//\t\tWhen ob.onCustomEvent executes, customEventHandler is invoked\n\t\t//\t\twith the same scope (this):\n\t\t//\t|\tdojo.connect(ob, \"onCustomEvent\", null, customEventHandler);\n\t\t//\t|\tdojo.connect(ob, \"onCustomEvent\", customEventHandler); // same\n\t\t//\n\t\t// example:\n\t\t//\t\tWhen globalEvent executes, globalHandler is invoked\n\t\t//\t\twith the same scope (this):\n\t\t//\t|\tdojo.connect(null, \"globalEvent\", null, globalHandler);\n\t\t//\t|\tdojo.connect(\"globalEvent\", globalHandler); // same\n\n\t\t// normalize arguments\n\t\tvar a=arguments, args=[], i=0;\n\t\t// if a[0] is a String, obj was omitted\n\t\targs.push(typeof a[0] == \"string\" ? null : a[i++], a[i++]);\n\t\t// if the arg-after-next is a String or Function, context was NOT omitted\n\t\tvar a1 = a[i+1];\n\t\targs.push(typeof a1 == \"string\" || typeof a1 == \"function\" ? a[i++] : null, a[i++]);\n\t\t// absorb any additional arguments\n\t\tfor(var l=a.length; i<l; i++){\targs.push(a[i]); }\n\t\treturn connect_.apply(this, args);\n\t},\n\n\tdisconnect:function(handle){\n\t\t// summary:\n\t\t//\t\tRemove a link created by dojo.connect.\n\t\t// description:\n\t\t//\t\tRemoves the connection between event and the method referenced by handle.\n\t\t// handle: Handle\n\t\t//\t\tthe return value of the dojo.connect call that created the connection.\n\n\t\tif(handle){\n\t\t\thandle.remove();\n\t\t}\n\t},\n\n\tsubscribe:function(topic, context, method){\n\t\t// summary:\n\t\t//\t\tAttach a listener to a named topic. The listener function is invoked whenever the\n\t\t//\t\tnamed topic is published (see: dojo.publish).\n\t\t//\t\tReturns a handle which is needed to unsubscribe this listener.\n\t\t// topic: String\n\t\t//\t\tThe topic to which to subscribe.\n\t\t// context: Object?\n\t\t//\t\tScope in which method will be invoked, or null for default scope.\n\t\t// method: String|Function\n\t\t//\t\tThe name of a function in context, or a function reference. This is the function that\n\t\t//\t\tis invoked when topic is published.\n\t\t// example:\n\t\t//\t|\tdojo.subscribe(\"alerts\", null, function(caption, message){ alert(caption + \"\\n\" + message); });\n\t\t//\t|\tdojo.publish(\"alerts\", [ \"read this\", \"hello world\" ]);\n\t\treturn hub.subscribe(topic, lang.hitch(context, method));\n\t},\n\n\tpublish:function(topic, args){\n\t\t// summary:\n\t\t//\t\tInvoke all listener method subscribed to topic.\n\t\t// topic: String\n\t\t//\t\tThe name of the topic to publish.\n\t\t// args: Array?\n\t\t//\t\tAn array of arguments. The arguments will be applied\n\t\t//\t\tto each topic subscriber (as first class parameters, via apply).\n\t\t// example:\n\t\t//\t|\tdojo.subscribe(\"alerts\", null, function(caption, message){ alert(caption + \"\\n\" + message); };\n\t\t//\t|\tdojo.publish(\"alerts\", [ \"read this\", \"hello world\" ]);\n\t\treturn hub.publish.apply(hub, [topic].concat(args));\n\t},\n\n\tconnectPublisher:function(topic, obj, event){\n\t\t// summary:\n\t\t//\t\tEnsure that every time obj.event() is called, a message is published\n\t\t//\t\ton the topic. Returns a handle which can be passed to\n\t\t//\t\tdojo.disconnect() to disable subsequent automatic publication on\n\t\t//\t\tthe topic.\n\t\t// topic: String\n\t\t//\t\tThe name of the topic to publish.\n\t\t// obj: Object?\n\t\t//\t\tThe source object for the event function. Defaults to kernel.global\n\t\t//\t\tif null.\n\t\t// event: String\n\t\t//\t\tThe name of the event function in obj.\n\t\t//\t\tI.e. identifies a property obj[event].\n\t\t// example:\n\t\t//\t|\tdojo.connectPublisher(\"/ajax/start\", dojo, \"xhrGet\");\n\t\tvar pf = function(){ connect.publish(topic, arguments); };\n\t\treturn event ? connect.connect(obj, event, pf) : connect.connect(obj, pf); //Handle\n\t},\n\n\tisCopyKey: function(e){\n\t\t// summary:\n\t\t//\t\tChecks an event for the copy key (meta on Mac, and ctrl anywhere else)\n\t\t// e: Event\n\t\t//\t\tEvent object to examine\n\t\treturn e[evtCopyKey];\t// Boolean\n\t}\n};\n\nconnect.unsubscribe = connect.disconnect;\n/*=====\n connect.unsubscribe = function(handle){\n\t // summary:\n\t //\t\tRemove a topic listener.\n\t // handle: Handle\n\t //\t\tThe handle returned from a call to subscribe.\n\t // example:\n\t //\t|\tvar alerter = dojo.subscribe(\"alerts\", null, function(caption, message){ alert(caption + \"\\n\" + message); };\n\t //\t|\t...\n\t //\t|\tdojo.unsubscribe(alerter);\n };\n =====*/\n\nhas(\"extend-dojo\") && lang.mixin(dojo, connect);\nreturn connect;\n\n});\n\n\n","define([\"./kernel\", \"./lang\", \"../sniff\"], function(dojo, lang, has){\n\t// module:\n\t//\t\tdojo/_base/sniff\n\n\t/*=====\n\treturn {\n\t\t// summary:\n\t\t//\t\tDeprecated. New code should use dojo/sniff.\n\t\t//\t\tThis module populates the dojo browser version sniffing properties like dojo.isIE.\n\t};\n\t=====*/\n\n\tif(!has(\"host-browser\")){\n\t\treturn has;\n\t}\n\n\t// no idea what this is for, or if it's used\n\tdojo._name = \"browser\";\n\n\tlang.mixin(dojo, {\n\t\t// isBrowser: Boolean\n\t\t//\t\tTrue if the client is a web-browser\n\t\tisBrowser: true,\n\n\t\t// isFF: Number|undefined\n\t\t//\t\tVersion as a Number if client is FireFox. undefined otherwise. Corresponds to\n\t\t//\t\tmajor detected FireFox version (1.5, 2, 3, etc.)\n\t\tisFF: has(\"ff\"),\n\n\t\t// isIE: Number|undefined\n\t\t//\t\tVersion as a Number if client is MSIE(PC). undefined otherwise. Corresponds to\n\t\t//\t\tmajor detected IE version (6, 7, 8, etc.)\n\t\tisIE: has(\"ie\"),\n\n\t\t// isKhtml: Number|undefined\n\t\t//\t\tVersion as a Number if client is a KHTML browser. undefined otherwise. Corresponds to major\n\t\t//\t\tdetected version.\n\t\tisKhtml: has(\"khtml\"),\n\n\t\t// isWebKit: Number|undefined\n\t\t//\t\tVersion as a Number if client is a WebKit-derived browser (Konqueror,\n\t\t//\t\tSafari, Chrome, etc.). undefined otherwise.\n\t\tisWebKit: has(\"webkit\"),\n\n\t\t// isMozilla: Number|undefined\n\t\t//\t\tVersion as a Number if client is a Mozilla-based browser (Firefox,\n\t\t//\t\tSeaMonkey). undefined otherwise. Corresponds to major detected version.\n\t\tisMozilla: has(\"mozilla\"),\n\t\t// isMoz: Number|undefined\n\t\t//\t\tVersion as a Number if client is a Mozilla-based browser (Firefox,\n\t\t//\t\tSeaMonkey). undefined otherwise. Corresponds to major detected version.\n\t\tisMoz: has(\"mozilla\"),\n\n\t\t// isOpera: Number|undefined\n\t\t//\t\tVersion as a Number if client is Opera. undefined otherwise. Corresponds to\n\t\t//\t\tmajor detected version.\n\t\tisOpera: has(\"opera\"),\n\n\t\t// isSafari: Number|undefined\n\t\t//\t\tVersion as a Number if client is Safari or iPhone. undefined otherwise.\n\t\tisSafari: has(\"safari\"),\n\n\t\t// isChrome: Number|undefined\n\t\t//\t\tVersion as a Number if client is Chrome browser. undefined otherwise.\n\t\tisChrome: has(\"chrome\"),\n\n\t\t// isMac: Boolean\n\t\t//\t\tTrue if the client runs on Mac\n\t\tisMac: has(\"mac\"),\n\n\t\t// isIos: Number|undefined\n\t\t//\t\tVersion as a Number if client is iPhone, iPod, or iPad. undefined otherwise.\n\t\tisIos: has(\"ios\"),\n\n\t\t// isAndroid: Number|undefined\n\t\t//\t\tVersion as a Number if client is android browser. undefined otherwise.\n\t\tisAndroid: has(\"android\"),\n\n\t\t// isWii: Boolean\n\t\t//\t\tTrue if client is Wii\n\t\tisWii: has(\"wii\"),\n\n\t\t// isQuirks: Boolean\n\t\t//\t\tPage is in quirks mode.\n\t\tisQuirks: has(\"quirks\"),\n\n\t\t// isAir: Boolean\n\t\t//\t\tTrue if client is Adobe Air\n\t\tisAir: has(\"air\")\n\t});\n\n\treturn has;\n});\n","\ndefine([\n \"dojo/_base/config\",\n \"mw-log/Log\"\n], function (dojoConfiguration, Log) {\n /**\n * @desc This module provides a <code>deprecated()</code> method that can be used to deprecate\n * all or some parts of an AMD module's API. It constructs a consistent deprecation message\n * based on the configuration parameters.\n *\n * @copyright Copyright 2015 The MathWorks, Inc.\n * @exports MW/utils/deprecation\n */\n var deprecation = {\n\n /**\n * @desc\n * Constructs the deprecated message and logs it to the console.\n *\n * @param {Object} config - This is a configuration object to specify all the properties\n * for logging a informational deprecation message.\n * @param {Object} config.deprecated - This parameter specifies detials about the behavior\n * being deprecated\n * @param {String} config.deprecated.module - Module to which the deprecated behavior\n * belongs to\n * @param {String} config.deprecated.method - Method name being deprecated.\n * @param {Object} config.replacement - This is an optional property used to specify\n * details of behavior to which web widgets author wants to migrate his consumers to.\n * @param {String} config.replacement.module - Module to which the consumers should migrate\n * to\n * @param {String} config.replacement.method - Method to which the consumers should migrate\n * to\n * @param {String} config.removalVersion - Version in which the behavior is expected to be\n * deleted\n * @param {Number} config.geckNumber - Geck number associated with this deprecation. Note\n * that 'g' will be prepended to the number passed.\n * @param {String} config.deprecationLevel - Either deprecation.WARN or deprecation.ERROR.\n * Defaults to deprecation.WARN.\n * @param {String} config.additionalInformation - Any other additional information that\n * user wants to put in.\n * @param {Boolean} window.showDeprecationsAsErrors - If this parameter is set to true, all\n * the deprecation message will be logged as errors.\n * @example <caption> Deprecation API usage to replace a module</caption>\n * deprecation.deprecated({\n * deprecated: {module: \"dijit/button\"},\n * removalVersion: \"R2015b\",\n * replacement: {module: \"MW/button\"},\n * geckNumber: 1206088\n * });\n * @static\n * @returns {void} Logs a deprecation error or message to console.\n */\n deprecated: function (config) {\n\n var message, consoleLevel,\n displayDeprecationMessages = !!dojoConfiguration.isDebug ||\n !!window.showDeprecationsAsErrors;\n\n if (displayDeprecationMessages && this._isConfigValid(config)) {\n\n consoleLevel = ((!!window.showDeprecationsAsErrors ||\n config.deprecationLevel === this.ERROR) ? this.ERROR : this.WARN);\n\n //construct deprecation warning using various parameters\n message = \"DEPRECATED: \";\n\n // Step1: Construct FQN\n if (config.deprecated) {\n\n message += config.deprecated.module;\n\n if (config.deprecated.method) {\n message += \".\" + config.deprecated.method + \"()\";\n }\n message += \".\";\n }\n\n //Step2: Construct replacement\n if (config.replacement) {\n\n message += \" Use \" + config.replacement.module;\n\n if (config.replacement.method) {\n message += \".\" + config.replacement.method + \"()\";\n }\n message += \" instead.\";\n }\n if (config.removalVersion) {\n message += \" Will be removed in version: \" + config.removalVersion + \".\";\n }\n\n if (config.geckNumber) {\n message += \" Please use g\" + config.geckNumber + \" to track latest \" +\n \"information regarding this deprecation\";\n }\n\n if (config.additionalInformation) {\n message += \" \" + config.additionalInformation;\n }\n\n Log[consoleLevel](message);\n }\n },\n\n /**\n * @desc This function verifies that the consumer of this API sets the required properties\n * correctly.\n * @param {Object} deprecationConfig - Deprecation configuration passed\n * @returns {boolean|*}\n * @private\n */\n _isConfigValid: function (deprecationConfig) {\n var isConfigurationValid = !!deprecationConfig.deprecated &&\n typeof deprecationConfig.deprecated === \"object\" &&\n deprecationConfig.deprecated.hasOwnProperty(\"module\");\n\n if (deprecationConfig.replacement) {\n isConfigurationValid = isConfigurationValid\n && typeof deprecationConfig.replacement === \"object\" &&\n deprecationConfig.replacement.hasOwnProperty(\"module\");\n }\n\n if (deprecationConfig.geckNumber) {\n isConfigurationValid = isConfigurationValid\n && typeof deprecationConfig.geckNumber === \"number\";\n }\n\n if (!isConfigurationValid) {\n Log.error(\"Supplied deprecationConfig properties are not valid. Please refer to \" +\n \"http://inside.mathworks.com/wiki/Web_Widgets_Deprecation_API \" +\n \"for right API\");\n }\n return isConfigurationValid;\n }\n };\n\n Object.defineProperties(deprecation, {\n WARN: {\n value: \"warn\",\n enumerable: true\n },\n ERROR: {\n value: \"error\",\n enumerable: true\n }\n });\n\n return deprecation;\n});\n","define([\n\t\"./kernel\",\n\t\"./sniff\",\n\t\"require\",\n\t\"../io-query\",\n\t/*===== \"./declare\", =====*/\n\t\"../dom\",\n\t\"../dom-form\",\n\t\"./Deferred\",\n\t\"./config\",\n\t\"./json\",\n\t\"./lang\",\n\t\"./array\",\n\t\"../on\",\n\t\"../aspect\",\n\t\"../request/watch\",\n\t\"../request/xhr\",\n\t\"../request/util\"\n], function(dojo, has, require, ioq, /*===== declare, =====*/ dom, domForm, Deferred, config, json, lang, array, on, aspect, watch, _xhr, util){\n\t// module:\n\t//\t\tdojo/_base/xhr\n\n\t/*=====\n\tdojo._xhrObj = function(){\n\t\t// summary:\n\t\t//\t\tdoes the work of portably generating a new XMLHTTPRequest object.\n\t};\n\t=====*/\n\tdojo._xhrObj = _xhr._create;\n\n\tvar cfg = dojo.config;\n\n\t// mix in io-query and dom-form\n\tdojo.objectToQuery = ioq.objectToQuery;\n\tdojo.queryToObject = ioq.queryToObject;\n\tdojo.fieldToObject = domForm.fieldToObject;\n\tdojo.formToObject = domForm.toObject;\n\tdojo.formToQuery = domForm.toQuery;\n\tdojo.formToJson = domForm.toJson;\n\n\t// need to block async callbacks from snatching this thread as the result\n\t// of an async callback might call another sync XHR, this hangs khtml forever\n\t// must checked by watchInFlight()\n\n\tdojo._blockAsync = false;\n\n\t// MOW: remove dojo._contentHandlers alias in 2.0\n\tvar handlers = dojo._contentHandlers = dojo.contentHandlers = {\n\t\t// summary:\n\t\t//\t\tA map of available XHR transport handle types. Name matches the\n\t\t//\t\t`handleAs` attribute passed to XHR calls.\n\t\t// description:\n\t\t//\t\tA map of available XHR transport handle types. Name matches the\n\t\t//\t\t`handleAs` attribute passed to XHR calls. Each contentHandler is\n\t\t//\t\tcalled, passing the xhr object for manipulation. The return value\n\t\t//\t\tfrom the contentHandler will be passed to the `load` or `handle`\n\t\t//\t\tfunctions defined in the original xhr call.\n\t\t// example:\n\t\t//\t\tCreating a custom content-handler:\n\t\t//\t|\txhr.contentHandlers.makeCaps = function(xhr){\n\t\t//\t|\t\treturn xhr.responseText.toUpperCase();\n\t\t//\t|\t}\n\t\t//\t|\t// and later:\n\t\t//\t|\tdojo.xhrGet({\n\t\t//\t|\t\turl:\"foo.txt\",\n\t\t//\t|\t\thandleAs:\"makeCaps\",\n\t\t//\t|\t\tload: function(data){ /* data is a toUpper version of foo.txt */ }\n\t\t//\t|\t});\n\n\t\t\"text\": function(xhr){\n\t\t\t// summary:\n\t\t\t//\t\tA contentHandler which simply returns the plaintext response data\n\t\t\treturn xhr.responseText;\n\t\t},\n\t\t\"json\": function(xhr){\n\t\t\t// summary:\n\t\t\t//\t\tA contentHandler which returns a JavaScript object created from the response data\n\t\t\treturn json.fromJson(xhr.responseText || null);\n\t\t},\n\t\t\"json-comment-filtered\": function(xhr){\n\t\t\t// summary:\n\t\t\t//\t\tA contentHandler which expects comment-filtered JSON.\n\t\t\t// description:\n\t\t\t//\t\tA contentHandler which expects comment-filtered JSON.\n\t\t\t//\t\tthe json-comment-filtered option was implemented to prevent\n\t\t\t//\t\t\"JavaScript Hijacking\", but it is less secure than standard JSON. Use\n\t\t\t//\t\tstandard JSON instead. JSON prefixing can be used to subvert hijacking.\n\t\t\t//\n\t\t\t//\t\tWill throw a notice suggesting to use application/json mimetype, as\n\t\t\t//\t\tjson-commenting can introduce security issues. To decrease the chances of hijacking,\n\t\t\t//\t\tuse the standard `json` contentHandler, and prefix your \"JSON\" with: {}&&\n\t\t\t//\n\t\t\t//\t\tuse djConfig.useCommentedJson = true to turn off the notice\n\t\t\tif(!config.useCommentedJson){\n\t\t\t\tconsole.warn(\"Consider using the standard mimetype:application/json.\"\n\t\t\t\t\t+ \" json-commenting can introduce security issues. To\"\n\t\t\t\t\t+ \" decrease the chances of hijacking, use the standard the 'json' handler and\"\n\t\t\t\t\t+ \" prefix your json with: {}&&\\n\"\n\t\t\t\t\t+ \"Use djConfig.useCommentedJson=true to turn off this message.\");\n\t\t\t}\n\n\t\t\tvar value = xhr.responseText;\n\t\t\tvar cStartIdx = value.indexOf(\"\\/*\");\n\t\t\tvar cEndIdx = value.lastIndexOf(\"*\\/\");\n\t\t\tif(cStartIdx == -1 || cEndIdx == -1){\n\t\t\t\tthrow new Error(\"JSON was not comment filtered\");\n\t\t\t}\n\t\t\treturn json.fromJson(value.substring(cStartIdx+2, cEndIdx));\n\t\t},\n\t\t\"javascript\": function(xhr){\n\t\t\t// summary:\n\t\t\t//\t\tA contentHandler which evaluates the response data, expecting it to be valid JavaScript\n\n\t\t\t// FIXME: try Moz and IE specific eval variants?\n\t\t\treturn dojo.eval(xhr.responseText);\n\t\t},\n\t\t\"xml\": function(xhr){\n\t\t\t// summary:\n\t\t\t//\t\tA contentHandler returning an XML Document parsed from the response data\n\t\t\tvar result = xhr.responseXML;\n\n\t\t\tif(result && has(\"dom-qsa2.1\") && !result.querySelectorAll && has(\"dom-parser\")){\n\t\t\t\t// http://bugs.dojotoolkit.org/ticket/15631\n\t\t\t\t// IE9 supports a CSS3 querySelectorAll implementation, but the DOM implementation\n\t\t\t\t// returned by IE9 xhr.responseXML does not. Manually create the XML DOM to gain\n\t\t\t\t// the fuller-featured implementation and avoid bugs caused by the inconsistency\n\t\t\t\tresult = new DOMParser().parseFromString(xhr.responseText, \"application/xml\");\n\t\t\t}\n\n\t\t\tif(has(\"ie\")){\n\t\t\t\tif((!result || !result.documentElement)){\n\t\t\t\t\t//WARNING: this branch used by the xml handling in dojo.io.iframe,\n\t\t\t\t\t//so be sure to test dojo.io.iframe if making changes below.\n\t\t\t\t\tvar ms = function(n){ return \"MSXML\" + n + \".DOMDocument\"; };\n\t\t\t\t\tvar dp = [\"Microsoft.XMLDOM\", ms(6), ms(4), ms(3), ms(2)];\n\t\t\t\t\tarray.some(dp, function(p){\n\t\t\t\t\t\ttry{\n\t\t\t\t\t\t\tvar dom = new ActiveXObject(p);\n\t\t\t\t\t\t\tdom.async = false;\n\t\t\t\t\t\t\tdom.loadXML(xhr.responseText);\n\t\t\t\t\t\t\tresult = dom;\n\t\t\t\t\t\t}catch(e){ return false; }\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn result; // DOMDocument\n\t\t},\n\t\t\"json-comment-optional\": function(xhr){\n\t\t\t// summary:\n\t\t\t//\t\tA contentHandler which checks the presence of comment-filtered JSON and\n\t\t\t//\t\talternates between the `json` and `json-comment-filtered` contentHandlers.\n\t\t\tif(xhr.responseText && /^[^{\\[]*\\/\\*/.test(xhr.responseText)){\n\t\t\t\treturn handlers[\"json-comment-filtered\"](xhr);\n\t\t\t}else{\n\t\t\t\treturn handlers[\"json\"](xhr);\n\t\t\t}\n\t\t}\n\t};\n\n\t/*=====\n\n\t// kwargs function parameter definitions. Assigning to dojo namespace rather than making them local variables\n\t// because they are used by dojo/io modules too\n\n\tdojo.__IoArgs = declare(null, {\n\t\t// url: String\n\t\t//\t\tURL to server endpoint.\n\t\t// content: Object?\n\t\t//\t\tContains properties with string values. These\n\t\t//\t\tproperties will be serialized as name1=value2 and\n\t\t//\t\tpassed in the request.\n\t\t// timeout: Integer?\n\t\t//\t\tMilliseconds to wait for the response. If this time\n\t\t//\t\tpasses, the then error callbacks are called.\n\t\t// form: DOMNode?\n\t\t//\t\tDOM node for a form. Used to extract the form values\n\t\t//\t\tand send to the server.\n\t\t// preventCache: Boolean?\n\t\t//\t\tDefault is false. If true, then a\n\t\t//\t\t\"dojo.preventCache\" parameter is sent in the request\n\t\t//\t\twith a value that changes with each request\n\t\t//\t\t(timestamp). Useful only with GET-type requests.\n\t\t// handleAs: String?\n\t\t//\t\tAcceptable values depend on the type of IO\n\t\t//\t\ttransport (see specific IO calls for more information).\n\t\t// rawBody: String?\n\t\t//\t\tSets the raw body for an HTTP request. If this is used, then the content\n\t\t//\t\tproperty is ignored. This is mostly useful for HTTP methods that have\n\t\t//\t\ta body to their requests, like PUT or POST. This property can be used instead\n\t\t//\t\tof postData and putData for dojo/_base/xhr.rawXhrPost and dojo/_base/xhr.rawXhrPut respectively.\n\t\t// ioPublish: Boolean?\n\t\t//\t\tSet this explicitly to false to prevent publishing of topics related to\n\t\t//\t\tIO operations. Otherwise, if djConfig.ioPublish is set to true, topics\n\t\t//\t\twill be published via dojo/topic.publish() for different phases of an IO operation.\n\t\t//\t\tSee dojo/main.__IoPublish for a list of topics that are published.\n\n\t\tload: function(response, ioArgs){\n\t\t\t// summary:\n\t\t\t//\t\tThis function will be\n\t\t\t//\t\tcalled on a successful HTTP response code.\n\t \t\t// ioArgs: dojo/main.__IoCallbackArgs\n\t\t\t//\t\tProvides additional information about the request.\n\t\t\t// response: Object\n\t\t\t//\t\tThe response in the format as defined with handleAs.\n\t\t},\n\n\t\terror: function(response, ioArgs){\n\t\t\t// summary:\n\t\t\t//\t\tThis function will\n\t\t\t//\t\tbe called when the request fails due to a network or server error, the url\n\t\t\t//\t\tis invalid, etc. It will also be called if the load or handle callback throws an\n\t\t\t//\t\texception, unless djConfig.debugAtAllCosts is true.\t This allows deployed applications\n\t\t\t//\t\tto continue to run even when a logic error happens in the callback, while making\n\t\t\t//\t\tit easier to troubleshoot while in debug mode.\n\t\t\t// ioArgs: dojo/main.__IoCallbackArgs\n\t\t\t//\t\tProvides additional information about the request.\n\t\t\t// response: Object\n\t\t\t//\t\tThe response in the format as defined with handleAs.\n\t\t},\n\n\t\thandle: function(loadOrError, response, ioArgs){\n\t\t\t// summary:\n\t \t\t//\t\tThis function will\n\t \t\t//\t\tbe called at the end of every request, whether or not an error occurs.\n\t\t\t// loadOrError: String\n\t\t\t//\t\tProvides a string that tells you whether this function\n\t\t\t//\t\twas called because of success (load) or failure (error).\n\t\t\t// response: Object\n\t\t\t//\t\tThe response in the format as defined with handleAs.\n\t\t\t// ioArgs: dojo/main.__IoCallbackArgs\n\t\t\t//\t\tProvides additional information about the request.\n\t\t}\n\t});\n\n\tdojo.__IoCallbackArgs = declare(null, {\n\t\t// args: Object\n\t\t//\t\tthe original object argument to the IO call.\n\t\t// xhr: XMLHttpRequest\n\t\t//\t\tFor XMLHttpRequest calls only, the\n\t\t//\t\tXMLHttpRequest object that was used for the\n\t\t//\t\trequest.\n\t\t// url: String\n\t\t//\t\tThe final URL used for the call. Many times it\n\t\t//\t\twill be different than the original args.url\n\t\t//\t\tvalue.\n\t\t// query: String\n\t\t//\t\tFor non-GET requests, the\n\t\t//\t\tname1=value1&name2=value2 parameters sent up in\n\t\t//\t\tthe request.\n\t\t// handleAs: String\n\t\t//\t\tThe final indicator on how the response will be\n\t\t//\t\thandled.\n\t\t// id: String\n\t\t//\t\tFor dojo/io/script calls only, the internal\n\t\t//\t\tscript ID used for the request.\n\t\t// canDelete: Boolean\n\t\t//\t\tFor dojo/io/script calls only, indicates\n\t\t//\t\twhether the script tag that represents the\n\t\t//\t\trequest can be deleted after callbacks have\n\t\t//\t\tbeen called. Used internally to know when\n\t\t//\t\tcleanup can happen on JSONP-type requests.\n\t\t// json: Object\n\t\t//\t\tFor dojo/io/script calls only: holds the JSON\n\t\t//\t\tresponse for JSONP-type requests. Used\n\t\t//\t\tinternally to hold on to the JSON responses.\n\t\t//\t\tYou should not need to access it directly --\n\t\t//\t\tthe same object should be passed to the success\n\t\t//\t\tcallbacks directly.\n\t});\n\n\tdojo.__IoPublish = declare(null, {\n\t\t// summary:\n\t\t//\t\tThis is a list of IO topics that can be published\n\t\t//\t\tif djConfig.ioPublish is set to true. IO topics can be\n\t\t//\t\tpublished for any Input/Output, network operation. So,\n\t\t//\t\tdojo.xhr, dojo.io.script and dojo.io.iframe can all\n\t\t//\t\ttrigger these topics to be published.\n\t\t// start: String\n\t\t//\t\t\"/dojo/io/start\" is sent when there are no outstanding IO\n\t\t//\t\trequests, and a new IO request is started. No arguments\n\t\t//\t\tare passed with this topic.\n\t\t// send: String\n\t\t//\t\t\"/dojo/io/send\" is sent whenever a new IO request is started.\n\t\t//\t\tIt passes the dojo.Deferred for the request with the topic.\n\t\t// load: String\n\t\t//\t\t\"/dojo/io/load\" is sent whenever an IO request has loaded\n\t\t//\t\tsuccessfully. It passes the response and the dojo.Deferred\n\t\t//\t\tfor the request with the topic.\n\t\t// error: String\n\t\t//\t\t\"/dojo/io/error\" is sent whenever an IO request has errored.\n\t\t//\t\tIt passes the error and the dojo.Deferred\n\t\t//\t\tfor the request with the topic.\n\t\t// done: String\n\t\t//\t\t\"/dojo/io/done\" is sent whenever an IO request has completed,\n\t\t//\t\teither by loading or by erroring. It passes the error and\n\t\t//\t\tthe dojo.Deferred for the request with the topic.\n\t\t// stop: String\n\t\t//\t\t\"/dojo/io/stop\" is sent when all outstanding IO requests have\n\t\t//\t\tfinished. No arguments are passed with this topic.\n\t});\n\t=====*/\n\n\n\tdojo._ioSetArgs = function(/*dojo/main.__IoArgs*/args,\n\t\t\t/*Function*/canceller,\n\t\t\t/*Function*/okHandler,\n\t\t\t/*Function*/errHandler){\n\t\t// summary:\n\t\t//\t\tsets up the Deferred and ioArgs property on the Deferred so it\n\t\t//\t\tcan be used in an io call.\n\t\t// args:\n\t\t//\t\tThe args object passed into the public io call. Recognized properties on\n\t\t//\t\tthe args object are:\n\t\t// canceller:\n\t\t//\t\tThe canceller function used for the Deferred object. The function\n\t\t//\t\twill receive one argument, the Deferred object that is related to the\n\t\t//\t\tcanceller.\n\t\t// okHandler:\n\t\t//\t\tThe first OK callback to be registered with Deferred. It has the opportunity\n\t\t//\t\tto transform the OK response. It will receive one argument -- the Deferred\n\t\t//\t\tobject returned from this function.\n\t\t// errHandler:\n\t\t//\t\tThe first error callback to be registered with Deferred. It has the opportunity\n\t\t//\t\tto do cleanup on an error. It will receive two arguments: error (the\n\t\t//\t\tError object) and dfd, the Deferred object returned from this function.\n\n\t\tvar ioArgs = {args: args, url: args.url};\n\n\t\t//Get values from form if requested.\n\t\tvar formObject = null;\n\t\tif(args.form){\n\t\t\tvar form = dom.byId(args.form);\n\t\t\t//IE requires going through getAttributeNode instead of just getAttribute in some form cases,\n\t\t\t//so use it for all. See #2844\n\t\t\tvar actnNode = form.getAttributeNode(\"action\");\n\t\t\tioArgs.url = ioArgs.url || (actnNode ? actnNode.value : (dojo.doc ? dojo.doc.URL : null));\n\t\t\tformObject = domForm.toObject(form);\n\t\t}\n\n\t\t// set up the query params\n\t\tvar miArgs = {};\n\n\t\tif(formObject){\n\t\t\t// potentially over-ride url-provided params w/ form values\n\t\t\tlang.mixin(miArgs, formObject);\n\t\t}\n\t\tif(args.content){\n\t\t\t// stuff in content over-rides what's set by form\n\t\t\tlang.mixin(miArgs, args.content);\n\t\t}\n\t\tif(args.preventCache){\n\t\t\tmiArgs[\"dojo.preventCache\"] = new Date().valueOf();\n\t\t}\n\t\tioArgs.query = ioq.objectToQuery(miArgs);\n\n\t\t// .. and the real work of getting the deferred in order, etc.\n\t\tioArgs.handleAs = args.handleAs || \"text\";\n\t\tvar d = new Deferred(function(dfd){\n\t\t\tdfd.canceled = true;\n\t\t\tcanceller && canceller(dfd);\n\n\t\t\tvar err = dfd.ioArgs.error;\n\t\t\tif(!err){\n\t\t\t\terr = new Error(\"request cancelled\");\n\t\t\t\terr.dojoType=\"cancel\";\n\t\t\t\tdfd.ioArgs.error = err;\n\t\t\t}\n\t\t\treturn err;\n\t\t});\n\t\td.addCallback(okHandler);\n\n\t\t//Support specifying load, error and handle callback functions from the args.\n\t\t//For those callbacks, the \"this\" object will be the args object.\n\t\t//The callbacks will get the deferred result value as the\n\t\t//first argument and the ioArgs object as the second argument.\n\t\tvar ld = args.load;\n\t\tif(ld && lang.isFunction(ld)){\n\t\t\td.addCallback(function(value){\n\t\t\t\treturn ld.call(args, value, ioArgs);\n\t\t\t});\n\t\t}\n\t\tvar err = args.error;\n\t\tif(err && lang.isFunction(err)){\n\t\t\td.addErrback(function(value){\n\t\t\t\treturn err.call(args, value, ioArgs);\n\t\t\t});\n\t\t}\n\t\tvar handle = args.handle;\n\t\tif(handle && lang.isFunction(handle)){\n\t\t\td.addBoth(function(value){\n\t\t\t\treturn handle.call(args, value, ioArgs);\n\t\t\t});\n\t\t}\n\n\t\t// Attach error handler last (not including topic publishing)\n\t\t// to catch any errors that may have been generated from load\n\t\t// or handle functions.\n\t\td.addErrback(function(error){\n\t\t\treturn errHandler(error, d);\n\t\t});\n\n\t\t//Plug in topic publishing, if dojo.publish is loaded.\n\t\tif(cfg.ioPublish && dojo.publish && ioArgs.args.ioPublish !== false){\n\t\t\td.addCallbacks(\n\t\t\t\tfunction(res){\n\t\t\t\t\tdojo.publish(\"/dojo/io/load\", [d, res]);\n\t\t\t\t\treturn res;\n\t\t\t\t},\n\t\t\t\tfunction(res){\n\t\t\t\t\tdojo.publish(\"/dojo/io/error\", [d, res]);\n\t\t\t\t\treturn res;\n\t\t\t\t}\n\t\t\t);\n\t\t\td.addBoth(function(res){\n\t\t\t\tdojo.publish(\"/dojo/io/done\", [d, res]);\n\t\t\t\treturn res;\n\t\t\t});\n\t\t}\n\n\t\td.ioArgs = ioArgs;\n\n\t\t// FIXME: need to wire up the xhr object's abort method to something\n\t\t// analogous in the Deferred\n\t\treturn d;\n\t};\n\n\tvar _deferredOk = function(/*Deferred*/dfd){\n\t\t// summary:\n\t\t//\t\tokHandler function for dojo._ioSetArgs call.\n\n\t\tvar ret = handlers[dfd.ioArgs.handleAs](dfd.ioArgs.xhr);\n\t\treturn ret === undefined ? null : ret;\n\t};\n\tvar _deferError = function(/*Error*/error, /*Deferred*/dfd){\n\t\t// summary:\n\t\t//\t\terrHandler function for dojo._ioSetArgs call.\n\n\t\tif(!dfd.ioArgs.args.failOk){\n\t\t\tconsole.error(error);\n\t\t}\n\t\treturn error;\n\t};\n\n\t//Use a separate count for knowing if we are starting/stopping io calls.\n\tvar _checkPubCount = function(dfd){\n\t\tif(_pubCount <= 0){\n\t\t\t_pubCount = 0;\n\t\t\tif(cfg.ioPublish && dojo.publish && (!dfd || dfd && dfd.ioArgs.args.ioPublish !== false)){\n\t\t\t\tdojo.publish(\"/dojo/io/stop\");\n\t\t\t}\n\t\t}\n\t};\n\n\tvar _pubCount = 0;\n\taspect.after(watch, \"_onAction\", function(){\n\t\t_pubCount -= 1;\n\t});\n\taspect.after(watch, \"_onInFlight\", _checkPubCount);\n\n\tdojo._ioCancelAll = watch.cancelAll;\n\t/*=====\n\tdojo._ioCancelAll = function(){\n\t\t// summary:\n\t\t//\t\tCancels all pending IO requests, regardless of IO type\n\t\t//\t\t(xhr, script, iframe).\n\t};\n\t=====*/\n\n\tdojo._ioNotifyStart = function(/*Deferred*/dfd){\n\t\t// summary:\n\t\t//\t\tIf dojo.publish is available, publish topics\n\t\t//\t\tabout the start of a request queue and/or the\n\t\t//\t\tthe beginning of request.\n\t\t//\n\t\t//\t\tUsed by IO transports. An IO transport should\n\t\t//\t\tcall this method before making the network connection.\n\t\tif(cfg.ioPublish && dojo.publish && dfd.ioArgs.args.ioPublish !== false){\n\t\t\tif(!_pubCount){\n\t\t\t\tdojo.publish(\"/dojo/io/start\");\n\t\t\t}\n\t\t\t_pubCount += 1;\n\t\t\tdojo.publish(\"/dojo/io/send\", [dfd]);\n\t\t}\n\t};\n\n\tdojo._ioWatch = function(dfd, validCheck, ioCheck, resHandle){\n\t\t// summary:\n\t\t//\t\tWatches the io request represented by dfd to see if it completes.\n\t\t// dfd: Deferred\n\t\t//\t\tThe Deferred object to watch.\n\t\t// validCheck: Function\n\t\t//\t\tFunction used to check if the IO request is still valid. Gets the dfd\n\t\t//\t\tobject as its only argument.\n\t\t// ioCheck: Function\n\t\t//\t\tFunction used to check if basic IO call worked. Gets the dfd\n\t\t//\t\tobject as its only argument.\n\t\t// resHandle: Function\n\t\t//\t\tFunction used to process response. Gets the dfd\n\t\t//\t\tobject as its only argument.\n\n\t\tvar args = dfd.ioArgs.options = dfd.ioArgs.args;\n\t\tlang.mixin(dfd, {\n\t\t\tresponse: dfd.ioArgs,\n\t\t\tisValid: function(response){\n\t\t\t\treturn validCheck(dfd);\n\t\t\t},\n\t\t\tisReady: function(response){\n\t\t\t\treturn ioCheck(dfd);\n\t\t\t},\n\t\t\thandleResponse: function(response){\n\t\t\t\treturn resHandle(dfd);\n\t\t\t}\n\t\t});\n\t\twatch(dfd);\n\n\t\t_checkPubCount(dfd);\n\t};\n\n\tvar _defaultContentType = \"application/x-www-form-urlencoded\";\n\n\tdojo._ioAddQueryToUrl = function(/*dojo.__IoCallbackArgs*/ioArgs){\n\t\t// summary:\n\t\t//\t\tAdds query params discovered by the io deferred construction to the URL.\n\t\t//\t\tOnly use this for operations which are fundamentally GET-type operations.\n\t\tif(ioArgs.query.length){\n\t\t\tioArgs.url += (ioArgs.url.indexOf(\"?\") == -1 ? \"?\" : \"&\") + ioArgs.query;\n\t\t\tioArgs.query = null;\n\t\t}\n\t};\n\n\t/*=====\n\tdojo.__XhrArgs = declare(dojo.__IoArgs, {\n\t\t// summary:\n\t\t//\t\tIn addition to the properties listed for the dojo._IoArgs type,\n\t\t//\t\tthe following properties are allowed for dojo.xhr* methods.\n\t\t// handleAs: String?\n\t\t//\t\tAcceptable values are: text (default), json, json-comment-optional,\n\t\t//\t\tjson-comment-filtered, javascript, xml. See `dojo/_base/xhr.contentHandlers`\n\t \t// sync: Boolean?\n\t\t//\t\tfalse is default. Indicates whether the request should\n\t\t//\t\tbe a synchronous (blocking) request.\n\t\t// headers: Object?\n\t\t//\t\tAdditional HTTP headers to send in the request.\n\t\t// failOk: Boolean?\n\t\t//\t\tfalse is default. Indicates whether a request should be\n\t\t//\t\tallowed to fail (and therefore no console error message in\n\t\t//\t\tthe event of a failure)\n\t\t// contentType: String|Boolean\n\t\t//\t\t\"application/x-www-form-urlencoded\" is default. Set to false to\n\t\t//\t\tprevent a Content-Type header from being sent, or to a string\n\t\t//\t\tto send a different Content-Type.\n\t });\n\t=====*/\n\n\tdojo.xhr = function(/*String*/ method, /*dojo.__XhrArgs*/ args, /*Boolean?*/ hasBody){\n\t\t// summary:\n\t\t//\t\tDeprecated. Use dojo/request instead.\n\t\t// description:\n\t\t//\t\tSends an HTTP request with the given method.\n\t\t//\t\tSee also dojo.xhrGet(), xhrPost(), xhrPut() and dojo.xhrDelete() for shortcuts\n\t\t//\t\tfor those HTTP methods. There are also methods for \"raw\" PUT and POST methods\n\t\t//\t\tvia dojo.rawXhrPut() and dojo.rawXhrPost() respectively.\n\t\t// method:\n\t\t//\t\tHTTP method to be used, such as GET, POST, PUT, DELETE. Should be uppercase.\n\t\t// hasBody:\n\t\t//\t\tIf the request has an HTTP body, then pass true for hasBody.\n\n\t\tvar rDfd;\n\t\t//Make the Deferred object for this xhr request.\n\t\tvar dfd = dojo._ioSetArgs(args, function(dfd){\n\t\t\trDfd && rDfd.cancel();\n\t\t}, _deferredOk, _deferError);\n\t\tvar ioArgs = dfd.ioArgs;\n\n\t\t//Allow for specifying the HTTP body completely.\n\t\tif(\"postData\" in args){\n\t\t\tioArgs.query = args.postData;\n\t\t}else if(\"putData\" in args){\n\t\t\tioArgs.query = args.putData;\n\t\t}else if(\"rawBody\" in args){\n\t\t\tioArgs.query = args.rawBody;\n\t\t}else if((arguments.length > 2 && !hasBody) || \"POST|PUT\".indexOf(method.toUpperCase()) === -1){\n\t\t\t//Check for hasBody being passed. If no hasBody,\n\t\t\t//then only append query string if not a POST or PUT request.\n\t\t\tdojo._ioAddQueryToUrl(ioArgs);\n\t\t}\n\n\t\tvar options = {\n\t\t\tmethod: method,\n\t\t\thandleAs: \"text\",\n\t\t\ttimeout: args.timeout,\n\t\t\twithCredentials: args.withCredentials,\n\t\t\tioArgs: ioArgs\n\t\t};\n\n\t\tif(typeof args.headers !== 'undefined'){\n\t\t\toptions.headers = args.headers;\n\t\t}\n\t\tif(typeof args.contentType !== 'undefined'){\n\t\t\tif(!options.headers){\n\t\t\t\toptions.headers = {};\n\t\t\t}\n\t\t\toptions.headers['Content-Type'] = args.contentType;\n\t\t}\n\t\tif(typeof ioArgs.query !== 'undefined'){\n\t\t\toptions.data = ioArgs.query;\n\t\t}\n\t\tif(typeof args.sync !== 'undefined'){\n\t\t\toptions.sync = args.sync;\n\t\t}\n\n\t\tdojo._ioNotifyStart(dfd);\n\t\ttry{\n\t\t\trDfd = _xhr(ioArgs.url, options, true);\n\t\t}catch(e){\n\t\t\t// If XHR creation fails, dojo/request/xhr throws\n\t\t\t// When this happens, cancel the deferred\n\t\t\tdfd.cancel();\n\t\t\treturn dfd;\n\t\t}\n\n\t\t// sync ioArgs\n\t\tdfd.ioArgs.xhr = rDfd.response.xhr;\n\n\t\trDfd.then(function(){\n\t\t\tdfd.resolve(dfd);\n\t\t}).otherwise(function(error){\n\t\t\tioArgs.error = error;\n\t\t\tif(error.response){\n\t\t\t\terror.status = error.response.status;\n\t\t\t\terror.responseText = error.response.text;\n\t\t\t\terror.xhr = error.response.xhr;\n\t\t\t}\n\t\t\tdfd.reject(error);\n\t\t});\n\t\treturn dfd; // dojo/_base/Deferred\n\t};\n\n\tdojo.xhrGet = function(/*dojo.__XhrArgs*/ args){\n\t\t// summary:\n\t\t//\t\tSends an HTTP GET request to the server.\n\t\treturn dojo.xhr(\"GET\", args); // dojo/_base/Deferred\n\t};\n\n\tdojo.rawXhrPost = dojo.xhrPost = function(/*dojo.__XhrArgs*/ args){\n\t\t// summary:\n\t\t//\t\tSends an HTTP POST request to the server. In addition to the properties\n\t\t//\t\tlisted for the dojo.__XhrArgs type, the following property is allowed:\n\t\t// postData:\n\t\t//\t\tString. Send raw data in the body of the POST request.\n\t\treturn dojo.xhr(\"POST\", args, true); // dojo/_base/Deferred\n\t};\n\n\tdojo.rawXhrPut = dojo.xhrPut = function(/*dojo.__XhrArgs*/ args){\n\t\t// summary:\n\t\t//\t\tSends an HTTP PUT request to the server. In addition to the properties\n\t\t//\t\tlisted for the dojo.__XhrArgs type, the following property is allowed:\n\t\t// putData:\n\t\t//\t\tString. Send raw data in the body of the PUT request.\n\t\treturn dojo.xhr(\"PUT\", args, true); // dojo/_base/Deferred\n\t};\n\n\tdojo.xhrDelete = function(/*dojo.__XhrArgs*/ args){\n\t\t// summary:\n\t\t//\t\tSends an HTTP DELETE request to the server.\n\t\treturn dojo.xhr(\"DELETE\", args); // dojo/_base/Deferred\n\t};\n\n\t/*\n\tdojo.wrapForm = function(formNode){\n\t\t// summary:\n\t\t//\t\tA replacement for FormBind, but not implemented yet.\n\n\t\t// FIXME: need to think harder about what extensions to this we might\n\t\t// want. What should we allow folks to do w/ this? What events to\n\t\t// set/send?\n\t\tthrow new Error(\"dojo.wrapForm not yet implemented\");\n\t}\n\t*/\n\n\tdojo._isDocumentOk = function(x){\n\t\treturn util.checkStatus(x.status);\n\t};\n\n\tdojo._getText = function(url){\n\t\tvar result;\n\t\tdojo.xhrGet({url:url, sync:true, load:function(text){\n\t\t\tresult = text;\n\t\t}});\n\t\treturn result;\n\t};\n\n\t// Add aliases for static functions to dojo.xhr since dojo.xhr is what's returned from this module\n\tlang.mixin(dojo.xhr, {\n\t\t_xhrObj: dojo._xhrObj,\n\t\tfieldToObject: domForm.fieldToObject,\n\t\tformToObject: domForm.toObject,\n\t\tobjectToQuery: ioq.objectToQuery,\n\t\tformToQuery: domForm.toQuery,\n\t\tformToJson: domForm.toJson,\n\t\tqueryToObject: ioq.queryToObject,\n\t\tcontentHandlers: handlers,\n\t\t_ioSetArgs: dojo._ioSetArgs,\n\t\t_ioCancelAll: dojo._ioCancelAll,\n\t\t_ioNotifyStart: dojo._ioNotifyStart,\n\t\t_ioWatch: dojo._ioWatch,\n\t\t_ioAddQueryToUrl: dojo._ioAddQueryToUrl,\n\t\t_isDocumentOk: dojo._isDocumentOk,\n\t\t_getText: dojo._getText,\n\t\tget: dojo.xhrGet,\n\t\tpost: dojo.xhrPost,\n\t\tput: dojo.xhrPut,\n\t\tdel: dojo.xhrDelete\t// because \"delete\" is a reserved word\n\t});\n\n\treturn dojo.xhr;\n});\n","define([\n\t'../errors/RequestError',\n\t'./watch',\n\t'./handlers',\n\t'./util',\n\t'../has'/*=====,\n\t'../request',\n\t'../_base/declare' =====*/\n], function(RequestError, watch, handlers, util, has/*=====, request, declare =====*/){\n\thas.add('native-xhr', function(){\n\t\t// if true, the environment has a native XHR implementation\n\t\treturn typeof XMLHttpRequest !== 'undefined';\n\t});\n\thas.add('dojo-force-activex-xhr', function(){\n\t\treturn has('activex') && window.location.protocol === 'file:';\n\t});\n\n\thas.add('native-xhr2', function(){\n\t\tif(!has('native-xhr') || has('dojo-force-activex-xhr')){ return; }\n\t\tvar x = new XMLHttpRequest();\n\t\treturn typeof x['addEventListener'] !== 'undefined' &&\n\t\t\t(typeof opera === 'undefined' || typeof x['upload'] !== 'undefined');\n\t});\n\n\thas.add('native-formdata', function(){\n\t\t// if true, the environment has a native FormData implementation\n\t\treturn typeof FormData !== 'undefined';\n\t});\n\n\thas.add('native-blob', function(){\n\t\t// if true, the environment has a native Blob implementation\n\t\treturn typeof Blob !== 'undefined';\n\t});\n\n\thas.add('native-arraybuffer', function(){\n\t\t// if true, the environment has a native ArrayBuffer implementation\n\t\treturn typeof ArrayBuffer !== 'undefined';\n\t});\n\n\thas.add('native-response-type', function(){\n\t\treturn has('native-xhr') && typeof new XMLHttpRequest().responseType !== 'undefined';\n\t});\n\n\thas.add('native-xhr2-blob', function(){\n\t\tif(!has('native-response-type')){ return; }\n\t\t\n\t\t// MATHWORKS START (added comment block and return true)\n\t\t/*\n\t\tvar x = new XMLHttpRequest();\n\t\t// The URL used here does not have to be reachable as the XHR's `send` method is never called.\n\t\t// It does need to be parsable/resolvable in all cases, so it should be an absolute URL.\n\t\t// XMLHttpRequest within a Worker created from a Blob does not support relative URL paths.\n\t\tx.open('GET', 'https://dojotoolkit.org/', true);\n\t\tx.responseType = 'blob';\n\t\t// will not be set if unsupported\n\t\tvar responseType = x.responseType;\n\t\tx.abort();\n\t\treturn responseType === 'blob';\n\t\t*/\n\t\treturn true;\n\t\t// MATHWORKS END\n\t});\n\n\t// Google Chrome doesn't support \"json\" response type\n\t// up to version 30, so it's intentionally not included here\n\tvar nativeResponseTypes = {\n\t\t'blob': has('native-xhr2-blob') ? 'blob' : 'arraybuffer',\n\t\t'document': 'document',\n\t\t'arraybuffer': 'arraybuffer'\n\t};\n\n\tfunction handleResponse(response, error){\n\t\tvar _xhr = response.xhr;\n\t\tresponse.status = response.xhr.status;\n\n\t\ttry {\n\t\t\t// Firefox throws an error when trying to access\n\t\t\t// xhr.responseText if response isn't text\n\t\t\tresponse.text = _xhr.responseText;\n\t\t} catch (e) {}\n\n\t\tif(response.options.handleAs === 'xml'){\n\t\t\tresponse.data = _xhr.responseXML;\n\t\t}\n\n\t\tvar handleError;\n\t\tif(error){\n\t\t\tthis.reject(error);\n\t\t}else{\n\t\t\ttry{\n\t\t\t\thandlers(response);\n\t\t\t}catch(e){\n\t\t\t\thandleError = e;\n\t\t\t}\n\t\t\tif(util.checkStatus(_xhr.status)){\n\t\t\t\tif(!handleError){\n\t\t\t\t\tthis.resolve(response);\n\t\t\t\t}else{\n\t\t\t\t\tthis.reject(handleError);\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tif(!handleError){\n\t\t\t\t\terror = new RequestError('Unable to load ' + response.url + ' status: ' + _xhr.status, response);\n\t\t\t\t\tthis.reject(error);\n\t\t\t\t}else{\n\t\t\t\t\terror = new RequestError('Unable to load ' + response.url + ' status: ' + _xhr.status +\n\t\t\t\t\t\t' and an error in handleAs: transformation of response', response);\n\t\t\t\t\tthis.reject(error);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tvar isValid, isReady, addListeners, cancel;\n\tif(has('native-xhr2')){\n\t\t// Any platform with XHR2 will only use the watch mechanism for timeout.\n\n\t\tisValid = function(response){\n\t\t\t// summary:\n\t\t\t//\t\tCheck to see if the request should be taken out of the watch queue\n\t\t\treturn !this.isFulfilled();\n\t\t};\n\t\tcancel = function(dfd, response){\n\t\t\t// summary:\n\t\t\t//\t\tCanceler for deferred\n\t\t\tresponse.xhr.abort();\n\t\t};\n\t\taddListeners = function(_xhr, dfd, response, uploadProgress){\n\t\t\t// summary:\n\t\t\t//\t\tAdds event listeners to the XMLHttpRequest object\n\t\t\tfunction onLoad(evt){\n\t\t\t\tdfd.handleResponse(response);\n\t\t\t}\n\t\t\tfunction onError(evt){\n\t\t\t\tvar _xhr = evt.target;\n\t\t\t\tvar error = new RequestError('Unable to load ' + response.url + ' status: ' + _xhr.status, response);\n\t\t\t\tdfd.handleResponse(response, error);\n\t\t\t}\n\n\t\t\tfunction onProgress(transferType, evt){\n\t\t\t\tresponse.transferType = transferType;\n\t\t\t\tif(evt.lengthComputable){\n\t\t\t\t\tresponse.loaded = evt.loaded;\n\t\t\t\t\tresponse.total = evt.total;\n\t\t\t\t\tdfd.progress(response);\n\t\t\t\t} else if(response.xhr.readyState === 3){\n\t\t\t\t\tresponse.loaded = ('loaded' in evt) ? evt.loaded : evt.position;\n\t\t\t\t\tdfd.progress(response);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction onDownloadProgress(evt) {\n\t\t\t\treturn onProgress('download', evt);\n\t\t\t}\n\n\t\t\tfunction onUploadProgress(evt) {\n\t\t\t\treturn onProgress('upload', evt);\n\t\t\t}\n\n\t\t\t_xhr.addEventListener('load', onLoad, false);\n\t\t\t_xhr.addEventListener('error', onError, false);\n\t\t\t_xhr.addEventListener('progress', onDownloadProgress, false);\n\n\t\t\tif (uploadProgress && _xhr.upload) {\n\t\t\t\t_xhr.upload.addEventListener('progress', onUploadProgress, false);\n\t\t\t}\n\n\t\t\treturn function(){\n\t\t\t\t_xhr.removeEventListener('load', onLoad, false);\n\t\t\t\t_xhr.removeEventListener('error', onError, false);\n\t\t\t\t_xhr.removeEventListener('progress', onDownloadProgress, false);\n\t\t\t\t_xhr.upload.removeEventListener('progress', onUploadProgress, false);\n\t\t\t\t_xhr = null;\n\t\t\t};\n\t\t};\n\t}else{\n\t\tisValid = function(response){\n\t\t\treturn response.xhr.readyState; //boolean\n\t\t};\n\t\tisReady = function(response){\n\t\t\treturn 4 === response.xhr.readyState; //boolean\n\t\t};\n\t\tcancel = function(dfd, response){\n\t\t\t// summary:\n\t\t\t//\t\tcanceller function for util.deferred call.\n\t\t\tvar xhr = response.xhr;\n\t\t\tvar _at = typeof xhr.abort;\n\t\t\tif(_at === 'function' || _at === 'object' || _at === 'unknown'){\n\t\t\t\txhr.abort();\n\t\t\t}\n\t\t};\n\t}\n\n\tfunction getHeader(headerName){\n\t\treturn this.xhr.getResponseHeader(headerName);\n\t}\n\n\tvar undefined,\n\t\tdefaultOptions = {\n\t\t\tdata: null,\n\t\t\tquery: null,\n\t\t\tsync: false,\n\t\t\tmethod: 'GET'\n\t\t};\n\tfunction xhr(url, options, returnDeferred){\n\t\tvar isFormData = has('native-formdata') && options && options.data && options.data instanceof FormData;\n\t\tvar response = util.parseArgs(\n\t\t\turl,\n\t\t\tutil.deepCreate(defaultOptions, options),\n\t\t\tisFormData\n\t\t);\n\t\turl = response.url;\n\t\toptions = response.options;\n\t\tvar hasNoData = !options.data && options.method !== 'POST' && options.method !== 'PUT';\n\n\t\tif(has('ie') <= 10){\n\t\t\t// older IE breaks point 9 in http://www.w3.org/TR/XMLHttpRequest/#the-open()-method and sends fragment, so strip it\n\t\t\turl = url.split('#')[0];\n\t\t}\n\n\t\tvar remover,\n\t\t\tlast = function(){\n\t\t\t\tremover && remover();\n\t\t\t};\n\n\t\t//Make the Deferred object for this xhr request.\n\t\tvar dfd = util.deferred(\n\t\t\tresponse,\n\t\t\tcancel,\n\t\t\tisValid,\n\t\t\tisReady,\n\t\t\thandleResponse,\n\t\t\tlast\n\t\t);\n\t\tvar _xhr = response.xhr = xhr._create();\n\n\t\tif(!_xhr){\n\t\t\t// If XHR factory somehow returns nothings,\n\t\t\t// cancel the deferred.\n\t\t\tdfd.cancel(new RequestError('XHR was not created'));\n\t\t\treturn returnDeferred ? dfd : dfd.promise;\n\t\t}\n\n\t\tresponse.getHeader = getHeader;\n\n\t\tif(addListeners){\n\t\t\tremover = addListeners(_xhr, dfd, response, options.uploadProgress);\n\t\t}\n\n\t\t// IE11 treats data: undefined different than other browsers\n\t\tvar data = typeof(options.data) === 'undefined' ? null : options.data,\n\t\t\tasync = !options.sync,\n\t\t\tmethod = options.method;\n\n\t\ttry{\n\t\t\t// IE6 won't let you call apply() on the native function.\n\t\t\t_xhr.open(method, url, async, options.user || undefined, options.password || undefined);\n\n\t\t\tif(options.withCredentials){\n\t\t\t\t_xhr.withCredentials = options.withCredentials;\n\t\t\t}\n\n\t\t\tif(has('native-response-type') && options.handleAs in nativeResponseTypes) {\n\t\t\t\t_xhr.responseType = nativeResponseTypes[options.handleAs];\n\t\t\t}\n\n\t\t\tvar headers = options.headers,\n\t\t\t\tcontentType = (isFormData || hasNoData) ? false : 'application/x-www-form-urlencoded';\n\t\t\tif(headers){\n\t\t\t\tfor(var hdr in headers){\n\t\t\t\t\tif(hdr.toLowerCase() === 'content-type'){\n\t\t\t\t\t\tcontentType = headers[hdr];\n\t\t\t\t\t}else if(headers[hdr]){\n\t\t\t\t\t\t//Only add header if it has a value. This allows for instance, skipping\n\t\t\t\t\t\t//insertion of X-Requested-With by specifying empty value.\n\t\t\t\t\t\t_xhr.setRequestHeader(hdr, headers[hdr]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif(contentType && contentType !== false){\n\t\t\t\t_xhr.setRequestHeader('Content-Type', contentType);\n\t\t\t}\n\t\t\tif(!headers || !('X-Requested-With' in headers)){\n\t\t\t\t_xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\n\t\t\t}\n\n\t\t\tif(util.notify){\n\t\t\t\tutil.notify.emit('send', response, dfd.promise.cancel);\n\t\t\t}\n\t\t\t_xhr.send(data);\n\t\t}catch(e){\n\t\t\tdfd.reject(e);\n\t\t}\n\n\t\twatch(dfd);\n\t\t_xhr = null;\n\n\t\treturn returnDeferred ? dfd : dfd.promise;\n\t}\n\n\t/*=====\n\txhr = function(url, options){\n\t\t// summary:\n\t\t//\t\tSends a request using XMLHttpRequest with the given URL and options.\n\t\t// url: String\n\t\t//\t\tURL to request\n\t\t// options: dojo/request/xhr.__Options?\n\t\t//\t\tOptions for the request.\n\t\t// returns: dojo/request.__Promise\n\t};\n\txhr.__BaseOptions = declare(request.__BaseOptions, {\n\t\t// sync: Boolean?\n\t\t//\t\tWhether to make a synchronous request or not. Default\n\t\t//\t\tis `false` (asynchronous).\n\t\t// data: String|Object|FormData?\n\t\t//\t\tData to transfer. This is ignored for GET and DELETE\n\t\t//\t\trequests.\n\t\t// headers: Object?\n\t\t//\t\tHeaders to use for the request.\n\t\t// user: String?\n\t\t//\t\tUsername to use during the request.\n\t\t// password: String?\n\t\t//\t\tPassword to use during the request.\n\t\t// withCredentials: Boolean?\n\t\t//\t\tFor cross-site requests, whether to send credentials\n\t\t//\t\tor not.\n\t\t// uploadProgress: Boolean?\n\t\t//\t\tUpload progress events cause preflighted requests. This\n\t\t//\t\toption enables upload progress event support but also\n\t\t//\t\tcauses all requests to be preflighted.\n\t});\n\txhr.__MethodOptions = declare(null, {\n\t\t// method: String?\n\t\t//\t\tThe HTTP method to use to make the request. Must be\n\t\t//\t\tuppercase. Default is `\"GET\"`.\n\t});\n\txhr.__Options = declare([xhr.__BaseOptions, xhr.__MethodOptions]);\n\n\txhr.get = function(url, options){\n\t\t// summary:\n\t\t//\t\tSend an HTTP GET request using XMLHttpRequest with the given URL and options.\n\t\t// url: String\n\t\t//\t\tURL to request\n\t\t// options: dojo/request/xhr.__BaseOptions?\n\t\t//\t\tOptions for the request.\n\t\t// returns: dojo/request.__Promise\n\t};\n\txhr.post = function(url, options){\n\t\t// summary:\n\t\t//\t\tSend an HTTP POST request using XMLHttpRequest with the given URL and options.\n\t\t// url: String\n\t\t//\t\tURL to request\n\t\t// options: dojo/request/xhr.__BaseOptions?\n\t\t//\t\tOptions for the request.\n\t\t// returns: dojo/request.__Promise\n\t};\n\txhr.put = function(url, options){\n\t\t// summary:\n\t\t//\t\tSend an HTTP PUT request using XMLHttpRequest with the given URL and options.\n\t\t// url: String\n\t\t//\t\tURL to request\n\t\t// options: dojo/request/xhr.__BaseOptions?\n\t\t//\t\tOptions for the request.\n\t\t// returns: dojo/request.__Promise\n\t};\n\txhr.del = function(url, options){\n\t\t// summary:\n\t\t//\t\tSend an HTTP DELETE request using XMLHttpRequest with the given URL and options.\n\t\t// url: String\n\t\t//\t\tURL to request\n\t\t// options: dojo/request/xhr.__BaseOptions?\n\t\t//\t\tOptions for the request.\n\t\t// returns: dojo/request.__Promise\n\t};\n\t=====*/\n\txhr._create = function(){\n\t\t// summary:\n\t\t//\t\tdoes the work of portably generating a new XMLHTTPRequest object.\n\t\tthrow new Error('XMLHTTP not available');\n\t};\n\tif(has('native-xhr') && !has('dojo-force-activex-xhr')){\n\t\txhr._create = function(){\n\t\t\treturn new XMLHttpRequest();\n\t\t};\n\t}else if(has('activex')){\n\t\ttry{\n\t\t\tnew ActiveXObject('Msxml2.XMLHTTP');\n\t\t\txhr._create = function(){\n\t\t\t\treturn new ActiveXObject('Msxml2.XMLHTTP');\n\t\t\t};\n\t\t}catch(e){\n\t\t\ttry{\n\t\t\t\tnew ActiveXObject('Microsoft.XMLHTTP');\n\t\t\t\txhr._create = function(){\n\t\t\t\t\treturn new ActiveXObject('Microsoft.XMLHTTP');\n\t\t\t\t};\n\t\t\t}catch(e){}\n\t\t}\n\t}\n\n\tutil.addCommonMethods(xhr);\n\n\treturn xhr;\n});\n","'use strict';\n\n/* Copyright 2015-2018 The MathWorks, Inc. */\ndefine(['dojo/io-query', 'mw-html-utils/_parseHtml/sanitize', 'mw-deprecation-utils/deprecation'], function (ioQuery, sanitize, deprecation) {\n return {\n\n HYPERLINK_ESCAPE_REGEXP: /<a\\s+href\\s*=\\s*\"[^\"]*\"[^>]*>[\\s\\S]*?<\\/a>/g,\n HYPERLINK_WITH_PARENTHESIS_ESCAPE_REGEXP: /<a\\s+href\\s*=\\s*\"([^\"]*)\"([^>]*)>([\\s\\S]*?)<\\/a>/g,\n STRONG_ESCAPE_REGEXP: /<strong>|<\\/strong>/g,\n BOLD_LINK_ATTRIBUTE_REGEX: /\\bstyle\\s*=\\s*\"[^\"]*\\bfont-weight\\s*:\\s*bold\\b[^\"]*\"/,\n\n /**\n * Parses query string and returns an object with each name value pair on it. This routine\n * will also decode query values that have been encoded with %bytes per the contract of\n * [dojo/io].queryToObject\n */\n parseQueryString: function parseQueryString() {\n var queryString = window.location.search.substr(1, window.location.search.length);\n\n return this._parseQueryString(queryString);\n },\n\n /**\n * Utility method with explicit query string parsing functionality, broken out for testing\n * purposes.\n *\n * @private\n */\n _parseQueryString: function _parseQueryString(queryString) {\n return ioQuery.queryToObject(queryString);\n },\n\n /**\n * Parses url into parts\n *\n * @param url {string} valid url, if URL is empty will implicitly use window.location\n * @returns {object} with protocol, hostname, port, pathname, search, and hash.\n */\n parseUrl: function parseUrl(url) {\n // Switch to URL Object when tech stablizes.\n // https://developer.mozilla.org/en-US/docs/Web/API/URL\n var a = document.createElement('a');\n a.display = 'none';\n a.href = url || window.location.href;\n a.href = a.href; // IE will expand any relative hrefs when calling the href \"getter\"\n // Therefore this reassigns the href with the fully qualified version\n var parsedUrl = {\n protocol: a.protocol,\n hostname: a.hostname,\n port: a.port,\n pathname: a.pathname,\n search: a.search,\n hash: a.hash\n };\n\n if ((parsedUrl.protocol === 'https:' || parsedUrl.protocol === 'http:') && parsedUrl.pathname.indexOf('/') !== 0) {\n // IE does not include \"/\" in start of pathname, normalize to other browsers\n parsedUrl.pathname = '/' + parsedUrl.pathname;\n }\n if (parsedUrl.protocol === 'https:' && parsedUrl.port === '443' && url.indexOf('https://' + parsedUrl.hostname + ':443') !== 0) {\n // IE returns 443 as port when using HTTPS even if port\n // was not specified in URL, normalize to other browsers\n parsedUrl.port = '';\n }\n return parsedUrl;\n },\n\n /**\n * Translates the given string into one where all required HTML entity characters have\n * been escaped. E.g., \"this > that\" becomes \"this > that\".<br /><br />\n *\n * Leaves chars alone on the assumption the browser is able to display them\n * properly already - since the JS string should contain valid code points.\n * Any data should have come via a UTF-8 encoded string or pasted and processed\n * into a valid JavaScript string representation.<br /><br />\n *\n * There was code originally to escape certain code points > 128 (g1103331)\n * But that has been removed per g1777495<br /><br />\n *\n * @param {string} string - the string to escape\n * @returns {string} as HTML with appropriate entities escaped.\n */\n escapeHtml: function escapeHtml(string) {\n var div = document.createElement('div');\n div.textContent = string;\n\n var newString = div.innerHTML;\n return newString;\n },\n\n /**\n * This function prevents the links from being escaped out.\n * Use treatHtmlLikeCommandWindow instead.\n * @deprecated @see {@link treatHtmlLikeCommandWindow}\n * @param {string} string - the string to perform escaping on\n * @param {boolean} escapeLinks - if this parameter is set to false, this function prevents\n * escaping the links.\n * @returns {string} a new string after escaping html and without escaping links\n * and strong tags\n */\n escapeLinksAndHtml: function escapeLinksAndHtml(string, escapeLinks) {\n deprecation.deprecated({\n deprecated: {\n module: 'mw-html-utils/HtmlUtils',\n method: 'escapeLinksAndHtml'\n },\n replacement: {\n module: 'mw-html-utils/HtmlUtils',\n method: 'treatHtmlLikeCommandWindow'\n } });\n var newString = '';\n var normalStrings = string.split(this.HYPERLINK_ESCAPE_REGEXP);\n var aTags = string.match(this.HYPERLINK_ESCAPE_REGEXP);\n var newHyperLink = '';\n var that = this;\n var i = 0;\n var regexpReplaceFunction = function regexpReplaceFunction(match, linkUrl, remainder, linkLabel) {\n var protocol = that.parseUrl(linkUrl).protocol;\n // Only allow linkUrl that has designated protocol,\n // otherwise replace the url with \"#\"\n if (protocol !== 'http:' && protocol !== 'https:' && protocol !== 'matlab:') {\n linkUrl = '#';\n }\n linkUrl = that.escapeHtml(linkUrl);\n linkLabel = that._strongNotEscaped(linkLabel, true);\n newHyperLink = '<a href=\"' + linkUrl + '\">' + linkLabel + '</a>';\n };\n\n if (!escapeLinks) {\n if (normalStrings[0] !== '') {\n newString = this._strongNotEscaped(normalStrings[0], true);\n }\n\n if (aTags !== null && aTags.length !== 0) {\n for (i = 0; i < aTags.length; i = i + 1) {\n aTags[i].replace(this.HYPERLINK_WITH_PARENTHESIS_ESCAPE_REGEXP, regexpReplaceFunction);\n if (normalStrings[i + 1] !== '') {\n normalStrings[i + 1] = this._strongNotEscaped(normalStrings[i + 1], true);\n }\n\n newString += newHyperLink + normalStrings[i + 1];\n }\n }\n } else {\n newString = this.escapeHtml(string);\n newString = this.escapeWhitespace(newString);\n }\n\n return newString;\n },\n\n /**\n * This function treats HTML like the MATLAB Command window\n * It safely escapes HTML to avoid XSS, but still allows links\n * (if escape links is true), and still allows strong tags.\n *\n * @param {string} string - the string to perform escaping on\n * @param {boolean} escapeLinks - true if you want this function to escape any links,\n * false if you want the links to stay. It will still filter out unsafe\n * links/attributes.\n * @param {object} options - options parameter\n * @param {boolean} options.addPreTagToPreserveWhiteSpace- adds a span tag around the HTML\n * so that whitespace is preserved. If this is false and you want\n * whitespace to be preserved, set the style: white-space: pre\n * on an element.\n * @returns {string} a new string after escaping html and without escaping links\n * and strong tags\n */\n treatHtmlLikeCommandWindow: function treatHtmlLikeCommandWindow(string, escapeLinks, options) {\n if (typeof string !== 'string') {\n return '';\n }\n var newString = '';\n var normalStrings = string.split(this.HYPERLINK_ESCAPE_REGEXP);\n var aTags = string.match(this.HYPERLINK_ESCAPE_REGEXP);\n var newHyperLink = '';\n var that = this;\n var i = 0;\n options = options || {};\n var regexpReplaceFunction = function regexpReplaceFunction(match, linkUrl, remainder, linkLabel) {\n var protocol = that.parseUrl(linkUrl).protocol;\n var addBold = '';\n // Only allow linkUrl that has designated protocol,\n // otherwise replace the url with \"#\"\n if (protocol !== 'http:' && protocol !== 'https:' && protocol !== 'matlab:') {\n linkUrl = '#';\n }\n linkUrl = that.escapeHtml(linkUrl);\n linkLabel = that._strongNotEscaped(linkLabel, false);\n if (that.BOLD_LINK_ATTRIBUTE_REGEX.test(remainder)) {\n addBold = ' style=\"font-weight:bold\"';\n }\n newHyperLink = '<a href=\"' + linkUrl + '\"' + addBold + '>' + linkLabel + '</a>';\n };\n\n if (!escapeLinks) {\n if (normalStrings[0] !== '') {\n newString = this._strongNotEscaped(normalStrings[0], false);\n }\n\n if (aTags !== null && aTags.length !== 0) {\n for (i = 0; i < aTags.length; i = i + 1) {\n aTags[i].replace(this.HYPERLINK_WITH_PARENTHESIS_ESCAPE_REGEXP, regexpReplaceFunction);\n if (normalStrings[i + 1] !== '') {\n normalStrings[i + 1] = this._strongNotEscaped(normalStrings[i + 1], false);\n }\n\n newString += newHyperLink + normalStrings[i + 1];\n }\n }\n } else {\n newString = this.escapeHtml(string);\n }\n\n if (options.addPreTagToPreserveWhiteSpace) {\n newString = '<span style=\"white-space: pre\">' + newString + '</span>';\n }\n return newString;\n },\n\n /**\n * This function prevents the strong tag from being escaped out.\n *\n * @private\n *\n * @param {string} string - the string to perform escaping on\n * @param {boolean} escapeWhitespace - call the deprecated escapeWhitespace function\n * this is not needed if you are using the pre style.\n * @returns {string} a new string escaping HTML but not whitespace\n */\n _strongNotEscaped: function _strongNotEscaped(string, escapeWhitespace) {\n var newString = '';\n var strongMatches = string.match(this.STRONG_ESCAPE_REGEXP);\n var strongSplits = string.split(this.STRONG_ESCAPE_REGEXP);\n var whiteSpaceEscapeFunction = function noOp(s) {\n return s;\n };\n if (escapeWhitespace) {\n whiteSpaceEscapeFunction = this.escapeWhitespace;\n }\n\n var i = 0;\n if (strongMatches !== null && strongMatches.length !== 0) {\n newString = whiteSpaceEscapeFunction(this.escapeHtml(strongSplits[0]));\n for (i = 0; i < strongMatches.length; i = i + 1) {\n newString += strongMatches[i] + whiteSpaceEscapeFunction(this.escapeHtml(strongSplits[i + 1]));\n }\n } else {\n newString = whiteSpaceEscapeFunction(this.escapeHtml(string));\n }\n\n return newString;\n },\n\n /**\n * This function escapes multiple spaces and \"\\n\" with\n * and <br>, however it is far better to use\n * <span style=\"white-space: pre\">...</span>\n * To perform this work, as it will properly allow the browser\n * to show all whitepace including \"\\t\" properly, and should be\n * faster than using Regexs, while still preserving the other HTML\n * elements in your code.\n * @deprecated use <span style=\"white-space: pre\">...</span>\n * @param {string} string - the string to perform escaping on\n */\n escapeWhitespace: function escapeWhitespace(string) {\n deprecation.deprecated({\n deprecated: {\n module: 'mw-html-utils/HtmlUtils',\n method: 'escapeWhitespace'\n },\n replacement: {\n module: 'Plain HTML',\n method: 'Set class as white-space: pre' + ' or use <span style=\"white-space: pre\">...</span>'\n } });\n string = string || '';\n return string.replace(/\\n/g, '<br>').replace(/ {2}/g, ' ');\n },\n\n /**\n * This function handles anchor tags. If the link is MATLAB help, the callback function\n * is invoked. A call back function is responsible for the special handling for helpLinks.\n * For example, the commmandModule and VariableEditorModule pass the command to\n * executionService.\n * The executionService intercepts the request and opens the help documentation in a\n * separate window.\n * @param {function} helpCallback\n * @param {event} event\n */\n handleAnchors: function handleAnchors(helpCallback, event) {\n // Check if href attribute is available\n if (event.target.href) {\n event.preventDefault();\n event.stopPropagation();\n var href = event.target.href;\n\n if (href.indexOf('matlab:') !== -1) {\n var sub = href.substring(0, 7);\n if (sub === 'matlab:') {\n var command = event.target.href.substring(7);\n helpCallback(window.unescape(command));\n }\n } else {\n window.open(event.target.href);\n }\n }\n },\n\n /**\n * Checks if DOM element content is overflown\n * @param element\n * @returns {boolean}\n */\n isElementOverflown: function isElementOverflown(element) {\n return element.scrollHeight > element.clientHeight || element.scrollWidth > element.clientWidth;\n },\n\n /**\n * Takes in an HTML String, returns an HTML string\n * without any JavaScript executable code. But still\n * allows the matlab: protocol. This particular function\n * is designed for sanitization for HTML that would normally\n * be consumed by Java Swing for display purposes.\n * @param {string} dirtyHtml An string containing unsafe html\n * @returns {documentFragment} a document fragment sanitized from dirtyHtml\n */\n sanitizeHtmlFromJava: sanitize.sanitizeHtmlFromJava\n };\n});\n//# sourceMappingURL=HtmlUtils.js.map\n","define([], function () {\n \"use strict\";\n\n var _exports = {};\n _exports.default = {\n UNKNOWN: 'unknown',\n LONG_POLLING: 'long-polling',\n WEBSOCKET: 'websocket'\n };\n return _exports.default;\n});\n//# sourceMappingURL=transportEnums.js.map\n","/* Copyright 2020-2022 The MathWorks, Inc. */\ndefine(['mw-widget-api/WidgetBase',\n 'mw-widget-api/defineWidget',\n 'mw-widget-api/facade/render',\n 'mw-widget-api/facade/html',\n 'mw-widget-api/facade/svg',\n 'dojo/i18n!./nls/main'\n], function (WidgetBase, defineWidget, render, html, svg, i18n) {\n 'use strict';\n\n const LOCALIZED_STRINGS = {\n stars: [i18n.star0, i18n.star1, i18n.star2, i18n.star3, i18n.star4, i18n.star5],\n rating: i18n.rating\n };\n\n const RATING_NAME_PREFIX = 'mw_rating_';\n const RATING_HOVER_OVERRIDE_CLASS = 'mwRatingHoverOverride';\n\n const STAR_SVG_ID = `${RATING_NAME_PREFIX}staricon`;\n const STAR_SVG = svg`<svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\">\n <symbol id=\"${STAR_SVG_ID}\" viewBox=\"-1 -1 18 18\">\n <path d=\"M5 6h-5l4 4-1 6 5-4 5 4-1-6 4-4h-5l-3-6z\" />\n </symbol>\n </svg>`;\n\n let nameCounter = 0;\n function generateName () {\n // Return a string, that will be unique.\n nameCounter += 1;\n return `${RATING_NAME_PREFIX}${nameCounter}`;\n }\n\n function booleanToString (bool) {\n return bool ? 'true' : 'false';\n }\n\n function noFocusChange (widget, evt) {\n if (!widget.contains(evt.relatedTarget)) {\n return true;\n }\n }\n\n function isRealClickEvent (evt) {\n // For legacy reasons, radio buttons emit\n // click events when changes happen\n // even if the change was due\n // to a keyboard event.\n // This event is hard to differentiate.\n // But there are some differences.\n // Mainly all the major coords will be 0\n // - this could potentially happen if the click\n // - happens on a page that is in the upper\n // - left corner in a doc pinned to the upper\n // - left corner of the screen.\n if (evt.type === 'click') {\n if (evt.clientX === 0 &&\n evt.clientY === 0 &&\n evt.pageX === 0 &&\n evt.pageY === 0 &&\n evt.screenX === 0 &&\n evt.screenY === 0) {\n return false;\n }\n return true;\n }\n return false;\n }\n\n class Rating extends WidgetBase {\n static get properties () {\n return {\n value: {\n reflect: true,\n type: Number\n },\n doesDisplayRating: {\n reflect: true,\n type: Boolean\n },\n readOnly: {\n reflect: true,\n type: Boolean\n },\n disabled: {\n reflect: true,\n type: Boolean\n },\n minimumRating: {\n reflect: true,\n type: Boolean\n },\n name: {\n reflect: true,\n type: String\n },\n dataTestId: {\n reflect: true,\n type: String,\n attribute: 'data-test-id'\n }\n };\n }\n\n /**\n * Creates a mw-rating widget\n * @param options {Object} - Initial Object State\n * @param options.value {Integer|String} - Set star rating of widget - 1-5 inclusive and '' for no rating.\n * @param options.doesDisplayRating {Boolean} - Widget displays a rating number text as well as the stars\n * @param options.readOnly {Boolean} - Rating widget is focusable, but does not allow value changes\n * @param options.disabled {Boolean} - Rating widget is dimmed and not focusable.\n * @param options.minimumRating {Boolean} - When set you cannot clear the rating back to no stars interactively\n * @param options.name {String} - User specified string that participates in HTML form POSTs\n */\n constructor () {\n super();\n this._name = generateName();\n this.value = '';\n this._mouseHoveredOnRating = false;\n this.readOnly = false;\n this.disabled = false;\n this.doesDisplayRating = false;\n this.minimumRating = false;\n }\n\n /**\n * g2837904, Set/Get readonly of the widget.\n * We provide readOnly property, which is the same as readonly,\n * only that the camelCase readOnly confirms with naming guidelines.\n * For backward compatibility, we provide readOnly alongside to readonly.\n */\n get readonly () {\n return this.readOnly;\n }\n\n set readonly (value) {\n this.readOnly = value;\n }\n\n /**\n * Set/Get star rating value of widget - 1-5 inclusive and '' for no rating.\n * @type {String|Integer}\n */\n get value () {\n return this._value;\n }\n\n set value (value) {\n let oldValue = this._value;\n if (value === '' || value < 1) {\n this._value = '';\n } else if (value > 5) {\n this._value = 5;\n } else {\n let tmp = parseInt(value);\n if (isNaN(tmp)) {\n tmp = '';\n }\n this._value = tmp;\n }\n this.requestUpdate('value', oldValue);\n }\n\n /**\n * Widget displays a rating number text as well as the stars\n * @member doesDisplayRating {Boolean}\n * @memberof Rating\n * @instance\n */\n\n /**\n * Rating widget is focusable, but does not allow value changes\n * @member readOnly {Boolean}\n * @memberof Rating\n * @instance\n */\n\n /**\n * Rating widget is dimmed and not focusable.\n * @member disabled {Boolean}\n * @memberof Rating\n * @instance\n */\n\n /**\n * When set you cannot clear the rating back to no stars interactively\n * @member minimumRating {Boolean}\n * @memberof Rating\n * @instance\n */\n\n /**\n * User specified string that participates in HTML form POSTs\n * @member name {String}\n * @memberof Rating\n * @instance\n */\n\n /**\n * A user specified id used for testing, reflects to 'data-test-id'\n * @member name {String}\n * @memberof Rating\n * @instance\n */\n\n get _overrideRatingHover () {\n return this.__overrideRatingHover;\n }\n\n set _overrideRatingHover (value) {\n let oldValue = this.__overrideRatingHover;\n this.__overrideRatingHover = value;\n this.requestUpdate('_overrideRatingHover', oldValue);\n }\n\n get _noInput () {\n return this.readOnly || this.disabled;\n }\n\n firstUpdated () {\n this._addSVGTemplate();\n this.setAttribute('role', 'radiogroup');\n }\n\n updated (changedProperties) {\n if (changedProperties.has('disabled')) {\n if (this.disabled) {\n // Firefox doesn't clear focus on radio\n // buttons when they are disabled\n let focusedElem = document.activeElement;\n if (this.contains(focusedElem)) {\n focusedElem.blur();\n }\n }\n }\n\n if (changedProperties.has('value')) {\n // Show the new value, rather than a hover\n // preview of what would happen if you click\n this._overrideRatingHover = true;\n this.setAttribute('aria-valuenow', this.value);\n }\n if (changedProperties.has('disabled')) {\n this.setAttribute('aria-disabled', booleanToString(this.disabled));\n }\n if (changedProperties.has('readOnly')) {\n this.setAttribute('aria-readonly', booleanToString(this.readOnly));\n }\n\n if (this._wasCommit && this._focusedValue !== this.value) {\n // \"committed changes\" (Focus Loss and Click)\n this.emit('change', {\n oldValue: this._focusedValue,\n newValue: this.value\n }, { bubbles: true, cancelable: false }\n );\n this._saveFocusedValue();\n }\n this._wasCommit = false;\n }\n\n _addSVGTemplate () {\n // This remains in the DOM for the life of the application\n // once added. If needed we could track if \"no star ratings\"\n // are left, and remove from DOM. Since this is shared across\n // all instances of the widget, we cannot just remove it on\n // disconnected and add on connected. We would need to\n // reference count.\n if (!document.getElementById(STAR_SVG_ID)) {\n let div = document.createElement('div');\n div.style.display = 'none';\n document.body.appendChild(div);\n render(STAR_SVG, div);\n }\n }\n\n _handleRadioButtonChange (evt) {\n let oldValue = this.value;\n this.value = evt.target.value;\n\n // If we accept input,\n // this was a click event\n // with the primary mouse button\n if (!this._noInput && isRealClickEvent(evt)) {\n // This is a potential commit if the value changed.\n this._radioCommit();\n } else if (evt.type === 'change' ||\n evt.type === 'input' ||\n evt.type === 'input'\n ) {\n // mw-rating emits its own change and input event,\n // so we want to hide the internal event.\n\n // For click, if it is a real click we don't eat the event\n // but we eat the fake clicks emitted by arrow keys changing\n // the radio button\n this._eatInternalEvent(evt);\n }\n\n this.updateComplete.then(() => {\n if (oldValue !== this.value) {\n // Emit input on all changes - not just\n // \"committed changes (Focus Loss and Click)\"\n this.emit('input', {\n oldValue: oldValue,\n newValue: this.value\n }, { bubbles: true, cancelable: false }\n );\n }\n });\n }\n\n _saveFocusedValue () {\n // Saves the value when the user gives the control\n // focus. Used to deturmine if we should emit a change\n // event on commit (focusout, click)\n this._focusedValue = this.value;\n }\n\n _handleRadioContainerFocusIn (evt) {\n if (noFocusChange(this, evt)) {\n this._saveFocusedValue();\n }\n }\n\n _handleRadioContainerFocusOut (evt) {\n if (noFocusChange(this, evt)) {\n // Focus Out may fire on each element in the radio container\n // So only commit if relatedTarget is outside the widget\n this._radioCommit();\n }\n }\n\n _radioCommit () {\n // Called when a change event needs to be\n // emitted if a value changed due to this\n // action\n this._wasCommit = true;\n\n // Force a request update to pick up any\n // changes since focusin or click.\n // If there are we want to emit change.\n this.requestUpdate();\n }\n\n _handleRatingHovered (evt) {\n // We turn off the override if we just moved the mouse, allowing standard hover\n // preview to work.\n // When this is on (like we just changed the value but have not moved the mouse) we\n // want the new value to appear not the hover preview.\n //\n // Important when user has clicked/hovered over the rating, and then uses the\n // keyboard to change values. We want those new values to be shown, not the hover\n // preview.\n this._overrideRatingHover = false;\n }\n\n _eatInternalEvent (evt) {\n // RadioButton emits a click event, even when using keyboard.\n // Prevent this event\n\n // RadioButton emits a change event, we don't want downstream\n // seeing that because we emit our own.\n\n // We eat both events by calling stopPropagation on them.\n // ShadowDOM would do this automatically for us.\n evt.stopPropagation();\n }\n\n _assignChildFocus () {\n let checkedButton = this.querySelector('input:checked');\n if (checkedButton) {\n checkedButton.focus();\n }\n }\n\n _ratingButtonRenderer (ratingConfig, number) {\n let id = `${ratingConfig.name}_${number}`;\n let radioValue = number;\n let starSvgRef = svg`<svg aria-hidden='true' focusable='false'><use href=\"#${STAR_SVG_ID}\"/></svg>`;\n\n let isDisabled = this._noInput;\n\n if (number === 0) {\n starSvgRef = html``;\n radioValue = '';\n if (this.minimumRating && this.value !== '') {\n // Don't allow selection of radio button 0, if not checked\n // It if is checked allow it to be changed into a non-empty\n // value\n isDisabled = true;\n }\n }\n\n let isChecked = radioValue === this.value;\n if (isChecked && this.readOnly) {\n // Allow only selected radio button\n // to have focus when readOnly\n isDisabled = false;\n }\n\n // Label has a 'tab-index because otherwise focus-within was 'losing focus'\n // When we clicked on the star.\n // See: https://stackoverflow.com/questions/49662769/focus-within-styles-flash-when-clicking-an-input-label\n\n // Also special case disabled alone, we don't\n // want label to be focusable even with a click\n // if the whole widget is disabled.\n let tabindexAttr = this.disabled ? '' : '-1';\n return html`<input \n type='radio' \n class='mwRatingInput' \n name='${ratingConfig.name}' \n id='${id}' \n value='${radioValue}'\n .disabled=${isDisabled}\n .checked=${isChecked}\n @input=${this._noInput ? null : this._handleRadioButtonChange}\n @change=${this._noInput ? null : this._handleRadioButtonChange}\n @click=${this._noInput ? null : this._handleRadioButtonChange}\n /><label tabindex='${tabindexAttr}' for='${id}' class='mwRatingLabel'>\n ${starSvgRef}<span>${LOCALIZED_STRINGS.stars[number]}</span>\n </label>`;\n }\n\n _ratingValueRenderer (number) {\n if (number > 0) {\n return html`<span @click=${this.focus} aria-label=\"${LOCALIZED_STRINGS.rating}\" class='mwRatingDisplay'>(${number})</span>`;\n }\n return null;\n }\n\n /**\n * Sets focus to the widget\n */\n focus () {\n if (!this.disabled) {\n this._assignChildFocus();\n }\n }\n\n render () {\n let doesDisplayRating = null;\n let hoverOverrideClass = '';\n if (this.doesDisplayRating) {\n doesDisplayRating = this._ratingValueRenderer(this.value);\n }\n if (this._overrideRatingHover || this._noInput) {\n hoverOverrideClass = RATING_HOVER_OVERRIDE_CLASS;\n }\n\n // Use this.name if valid and specified otherwise use our default\n // Usually only set if we need to participate in form submission\n if (this._name !== this.name && this.name && this.name.trim() !== '') {\n this._name = this.name.trim();\n }\n\n let ratingConfig = { name: this._name };\n let ratings = [\n this._ratingButtonRenderer(ratingConfig, 0),\n this._ratingButtonRenderer(ratingConfig, 1),\n this._ratingButtonRenderer(ratingConfig, 2),\n this._ratingButtonRenderer(ratingConfig, 3),\n this._ratingButtonRenderer(ratingConfig, 4),\n this._ratingButtonRenderer(ratingConfig, 5)\n ];\n\n return html`<div class='mwRatingLayout'><div\n @mousemove=${this._noInput ? null : this._handleRatingHovered}\n @focusin=${this._handleRadioContainerFocusIn}\n @focusout=${this._noInput ? null : this._handleRadioContainerFocusOut}\n class='mwRatingContainer ${hoverOverrideClass}'\n @click=${this._eatInternalEvent}\n @input=${this._eatInternalEvent}\n @change=${this._eatInternalEvent}\n >${ratings}</div\n >${doesDisplayRating}</div>`;\n }\n }\n return defineWidget({\n name: 'mw-rating',\n widgetClass: Rating\n });\n});\n","define([\"./_base/kernel\", \"require\", \"./has\", \"./_base/array\", \"./_base/config\", \"./_base/lang\", \"./has!host-browser?./_base/xhr\", \"./json\", \"module\"],\n\tfunction(dojo, require, has, array, config, lang, xhr, json, module){\n\n\t// module:\n\t//\t\tdojo/i18n\n\n\thas.add(\"dojo-preload-i18n-Api\",\n\t\t// if true, define the preload localizations machinery\n\t\t1\n\t);\n\n\thas.add(\"dojo-v1x-i18n-Api\",\n\t\t// if true, define the v1.x i18n functions\n\t\t1\n\t);\n\n\tvar\n\t\tthisModule = dojo.i18n =\n\t\t\t{\n\t\t\t\t// summary:\n\t\t\t\t//\t\tThis module implements the dojo/i18n! plugin and the v1.6- i18n API\n\t\t\t\t// description:\n\t\t\t\t//\t\tWe choose to include our own plugin to leverage functionality already contained in dojo\n\t\t\t\t//\t\tand thereby reduce the size of the plugin compared to various loader implementations. Also, this\n\t\t\t\t//\t\tallows foreign AMD loaders to be used without their plugins.\n\t\t\t},\n\n\t\tnlsRe =\n\t\t\t// regexp for reconstructing the master bundle name from parts of the regexp match\n\t\t\t// nlsRe.exec(\"foo/bar/baz/nls/en-ca/foo\") gives:\n\t\t\t// [\"foo/bar/baz/nls/en-ca/foo\", \"foo/bar/baz/nls/\", \"/\", \"/\", \"en-ca\", \"foo\"]\n\t\t\t// nlsRe.exec(\"foo/bar/baz/nls/foo\") gives:\n\t\t\t// [\"foo/bar/baz/nls/foo\", \"foo/bar/baz/nls/\", \"/\", \"/\", \"foo\", \"\"]\n\t\t\t// so, if match[5] is blank, it means this is the top bundle definition.\n\t\t\t// courtesy of http://requirejs.org\n\t\t\t/(^.*(^|\\/)nls)(\\/|$)([^\\/]*)\\/?([^\\/]*)/,\n\n\t\tgetAvailableLocales = function(\n\t\t\troot,\n\t\t\tlocale,\n\t\t\tbundlePath,\n\t\t\tbundleName\n\t\t){\n\t\t\t// summary:\n\t\t\t//\t\treturn a vector of module ids containing all available locales with respect to the target locale\n\t\t\t//\t\tFor example, assuming:\n\t\t\t//\n\t\t\t//\t\t- the root bundle indicates specific bundles for \"fr\" and \"fr-ca\",\n\t\t\t//\t\t- bundlePath is \"myPackage/nls\"\n\t\t\t//\t\t- bundleName is \"myBundle\"\n\t\t\t//\n\t\t\t//\t\tThen a locale argument of \"fr-ca\" would return\n\t\t\t//\n\t\t\t//\t\t\t[\"myPackage/nls/myBundle\", \"myPackage/nls/fr/myBundle\", \"myPackage/nls/fr-ca/myBundle\"]\n\t\t\t//\n\t\t\t//\t\tNotice that bundles are returned least-specific to most-specific, starting with the root.\n\t\t\t//\n\t\t\t//\t\tIf root===false indicates we're working with a pre-AMD i18n bundle that doesn't tell about the available locales;\n\t\t\t//\t\ttherefore, assume everything is available and get 404 errors that indicate a particular localization is not available\n\n\t\t\tfor(var result = [bundlePath + bundleName], localeParts = locale.split(\"-\"), current = \"\", i = 0; i<localeParts.length; i++){\n\t\t\t\tcurrent += (current ? \"-\" : \"\") + localeParts[i];\n\t\t\t\tif(!root || root[current]){\n\t\t\t\t\tresult.push(bundlePath + current + \"/\" + bundleName);\n\t\t\t\t\tresult.specificity = current;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn result;\n\t\t},\n\n\t\tcache = {},\n\n\t\tgetBundleName = function(moduleName, bundleName, locale){\n\t\t\tlocale = locale ? locale.toLowerCase() : dojo.locale;\n\t\t\tmoduleName = moduleName.replace(/\\./g, \"/\");\n\t\t\tbundleName = bundleName.replace(/\\./g, \"/\");\n\t\t\treturn (/root/i.test(locale)) ?\n\t\t\t\t(moduleName + \"/nls/\" + bundleName) :\n\t\t\t\t(moduleName + \"/nls/\" + locale + \"/\" + bundleName);\n\t\t},\n\n\t\tgetL10nName = dojo.getL10nName = function(moduleName, bundleName, locale){\n\t\t\treturn moduleName = module.id + \"!\" + getBundleName(moduleName, bundleName, locale);\n\t\t},\n\n\t\tdoLoad = function(require, bundlePathAndName, bundlePath, bundleName, locale, load){\n\t\t\t// summary:\n\t\t\t//\t\tget the root bundle which instructs which other bundles are required to construct the localized bundle\n\t\t\trequire([bundlePathAndName], function(root){\n\t\t\t\tvar current = lang.clone(root.root || root.ROOT),// 1.6 built bundle defined ROOT\n\t\t\t\t\tavailableLocales = getAvailableLocales(!root._v1x && root, locale, bundlePath, bundleName);\n\t\t\t\trequire(availableLocales, function(){\n\t\t\t\t\tfor (var i = 1; i<availableLocales.length; i++){\n\t\t\t\t\t\tcurrent = lang.mixin(lang.clone(current), arguments[i]);\n\t\t\t\t\t}\n\t\t\t\t\t// target may not have been resolve (e.g., maybe only \"fr\" exists when \"fr-ca\" was requested)\n\t\t\t\t\tvar target = bundlePathAndName + \"/\" + locale;\n\t\t\t\t\tcache[target] = current;\n\t\t\t\t\tcurrent.$locale = availableLocales.specificity;\n\t\t\t\t\tload();\n\t\t\t\t});\n\t\t\t});\n\t\t},\n\n\t\tnormalize = function(id, toAbsMid){\n\t\t\t// summary:\n\t\t\t//\t\tid may be relative.\n\t\t\t//\t\tpreload has form `*preload*<path>/nls/<module>*<flattened locales>` and\n\t\t\t//\t\ttherefore never looks like a relative\n\t\t\treturn /^\\./.test(id) ? toAbsMid(id) : id;\n\t\t},\n\n\t\tgetLocalesToLoad = function(targetLocale){\n\t\t\tvar list = config.extraLocale || [];\n\t\t\tlist = lang.isArray(list) ? list : [list];\n\t\t\tlist.push(targetLocale);\n\t\t\treturn list;\n\t\t},\n\n\t\tload = function(id, require, load){\n\t\t\t// summary:\n\t\t\t//\t\tid is in one of the following formats\n\t\t\t//\n\t\t\t//\t\t1. <path>/nls/<bundle>\n\t\t\t//\t\t\t=> load the bundle, localized to config.locale; load all bundles localized to\n\t\t\t//\t\t\tconfig.extraLocale (if any); return the loaded bundle localized to config.locale.\n\t\t\t//\n\t\t\t//\t\t2. <path>/nls/<locale>/<bundle>\n\t\t\t//\t\t\t=> load then return the bundle localized to <locale>\n\t\t\t//\n\t\t\t//\t\t3. *preload*<path>/nls/<module>*<JSON array of available locales>\n\t\t\t//\t\t\t=> for config.locale and all config.extraLocale, load all bundles found\n\t\t\t//\t\t\tin the best-matching bundle rollup. A value of 1 is returned, which\n\t\t\t//\t\t\tis meaningless other than to say the plugin is executing the requested\n\t\t\t//\t\t\tpreloads\n\t\t\t//\n\t\t\t//\t\tIn cases 1 and 2, <path> is always normalized to an absolute module id upon entry; see\n\t\t\t//\t\tnormalize. In case 3, it <path> is assumed to be absolute; this is arranged by the builder.\n\t\t\t//\n\t\t\t//\t\tTo load a bundle means to insert the bundle into the plugin's cache and publish the bundle\n\t\t\t//\t\tvalue to the loader. Given <path>, <bundle>, and a particular <locale>, the cache key\n\t\t\t//\n\t\t\t//\t\t\t<path>/nls/<bundle>/<locale>\n\t\t\t//\n\t\t\t//\t\twill hold the value. Similarly, then plugin will publish this value to the loader by\n\t\t\t//\n\t\t\t//\t\t\tdefine(\"<path>/nls/<bundle>/<locale>\", <bundle-value>);\n\t\t\t//\n\t\t\t//\t\tGiven this algorithm, other machinery can provide fast load paths be preplacing\n\t\t\t//\t\tvalues in the plugin's cache, which is public. When a load is demanded the\n\t\t\t//\t\tcache is inspected before starting any loading. Explicitly placing values in the plugin\n\t\t\t//\t\tcache is an advanced/experimental feature that should not be needed; use at your own risk.\n\t\t\t//\n\t\t\t//\t\tFor the normal AMD algorithm, the root bundle is loaded first, which instructs the\n\t\t\t//\t\tplugin what additional localized bundles are required for a particular locale. These\n\t\t\t//\t\tadditional locales are loaded and a mix of the root and each progressively-specific\n\t\t\t//\t\tlocale is returned. For example:\n\t\t\t//\n\t\t\t//\t\t1. The client demands \"dojo/i18n!some/path/nls/someBundle\n\t\t\t//\n\t\t\t//\t\t2. The loader demands load(some/path/nls/someBundle)\n\t\t\t//\n\t\t\t//\t\t3. This plugin require's \"some/path/nls/someBundle\", which is the root bundle.\n\t\t\t//\n\t\t\t//\t\t4. Assuming config.locale is \"ab-cd-ef\" and the root bundle indicates that localizations\n\t\t\t//\t\tare available for \"ab\" and \"ab-cd-ef\" (note the missing \"ab-cd\", then the plugin\n\t\t\t//\t\trequires \"some/path/nls/ab/someBundle\" and \"some/path/nls/ab-cd-ef/someBundle\"\n\t\t\t//\n\t\t\t//\t\t5. Upon receiving all required bundles, the plugin constructs the value of the bundle\n\t\t\t//\t\tab-cd-ef as...\n\t\t\t//\n\t\t\t//\t\t\t\tmixin(mixin(mixin({}, require(\"some/path/nls/someBundle\"),\n\t\t\t//\t\t \t\t\trequire(\"some/path/nls/ab/someBundle\")),\n\t\t\t//\t\t\t\t\trequire(\"some/path/nls/ab-cd-ef/someBundle\"));\n\t\t\t//\n\t\t\t//\t\tThis value is inserted into the cache and published to the loader at the\n\t\t\t//\t\tkey/module-id some/path/nls/someBundle/ab-cd-ef.\n\t\t\t//\n\t\t\t//\t\tThe special preload signature (case 3) instructs the plugin to stop servicing all normal requests\n\t\t\t//\t\t(further preload requests will be serviced) until all ongoing preloading has completed.\n\t\t\t//\n\t\t\t//\t\tThe preload signature instructs the plugin that a special rollup module is available that contains\n\t\t\t//\t\tone or more flattened, localized bundles. The JSON array of available locales indicates which locales\n\t\t\t//\t\tare available. Here is an example:\n\t\t\t//\n\t\t\t//\t\t\t*preload*some/path/nls/someModule*[\"root\", \"ab\", \"ab-cd-ef\"]\n\t\t\t//\n\t\t\t//\t\tThis indicates the following rollup modules are available:\n\t\t\t//\n\t\t\t//\t\t\tsome/path/nls/someModule_ROOT\n\t\t\t//\t\t\tsome/path/nls/someModule_ab\n\t\t\t//\t\t\tsome/path/nls/someModule_ab-cd-ef\n\t\t\t//\n\t\t\t//\t\tEach of these modules is a normal AMD module that contains one or more flattened bundles in a hash.\n\t\t\t//\t\tFor example, assume someModule contained the bundles some/bundle/path/someBundle and\n\t\t\t//\t\tsome/bundle/path/someOtherBundle, then some/path/nls/someModule_ab would be expressed as follows:\n\t\t\t//\n\t\t\t//\t\t\tdefine({\n\t\t\t//\t\t\t\tsome/bundle/path/someBundle:<value of someBundle, flattened with respect to locale ab>,\n\t\t\t//\t\t\t\tsome/bundle/path/someOtherBundle:<value of someOtherBundle, flattened with respect to locale ab>,\n\t\t\t//\t\t\t});\n\t\t\t//\n\t\t\t//\t\tE.g., given this design, preloading for locale==\"ab\" can execute the following algorithm:\n\t\t\t//\n\t\t\t//\t\t\trequire([\"some/path/nls/someModule_ab\"], function(rollup){\n\t\t\t//\t\t\t\tfor(var p in rollup){\n\t\t\t//\t\t\t\t\tvar id = p + \"/ab\",\n\t\t\t//\t\t\t\t\tcache[id] = rollup[p];\n\t\t\t//\t\t\t\t\tdefine(id, rollup[p]);\n\t\t\t//\t\t\t\t}\n\t\t\t//\t\t\t});\n\t\t\t//\n\t\t\t//\t\tSimilarly, if \"ab-cd\" is requested, the algorithm can determine that \"ab\" is the best available and\n\t\t\t//\t\tload accordingly.\n\t\t\t//\n\t\t\t//\t\tThe builder will write such rollups for every layer if a non-empty localeList profile property is\n\t\t\t//\t\tprovided. Further, the builder will include the following cache entry in the cache associated with\n\t\t\t//\t\tany layer.\n\t\t\t//\n\t\t\t//\t\t\t\"*now\":function(r){r(['dojo/i18n!*preload*<path>/nls/<module>*<JSON array of available locales>']);}\n\t\t\t//\n\t\t\t//\t\tThe *now special cache module instructs the loader to apply the provided function to context-require\n\t\t\t//\t\twith respect to the particular layer being defined. This causes the plugin to hold all normal service\n\t\t\t//\t\trequests until all preloading is complete.\n\t\t\t//\n\t\t\t//\t\tNotice that this algorithm is rarely better than the standard AMD load algorithm. Consider the normal case\n\t\t\t//\t\twhere the target locale has a single segment and a layer depends on a single bundle:\n\t\t\t//\n\t\t\t//\t\tWithout Preloads:\n\t\t\t//\n\t\t\t//\t\t1. Layer loads root bundle.\n\t\t\t//\t\t2. bundle is demanded; plugin loads single localized bundle.\n\t\t\t//\n\t\t\t//\t\tWith Preloads:\n\t\t\t//\n\t\t\t//\t\t1. Layer causes preloading of target bundle.\n\t\t\t//\t\t2. bundle is demanded; service is delayed until preloading complete; bundle is returned.\n\t\t\t//\n\t\t\t//\t\tIn each case a single transaction is required to load the target bundle. In cases where multiple bundles\n\t\t\t//\t\tare required and/or the locale has multiple segments, preloads still requires a single transaction whereas\n\t\t\t//\t\tthe normal path requires an additional transaction for each additional bundle/locale-segment. However all\n\t\t\t//\t\tof these additional transactions can be done concurrently. Owing to this analysis, the entire preloading\n\t\t\t//\t\talgorithm can be discard during a build by setting the has feature dojo-preload-i18n-Api to false.\n\n\t\t\tvar match = nlsRe.exec(id),\n\t\t\t\tbundlePath = match[1] + \"/\",\n\t\t\t\tbundleName = match[5] || match[4],\n\t\t\t\tbundlePathAndName = bundlePath + bundleName,\n\t\t\t\tlocaleSpecified = (match[5] && match[4]),\n\t\t\t\ttargetLocale =\tlocaleSpecified || dojo.locale || \"\",\n\t\t\t\tloadTarget = bundlePathAndName + \"/\" + targetLocale,\n\t\t\t\tloadList = localeSpecified ? [targetLocale] : getLocalesToLoad(targetLocale),\n\t\t\t\tremaining = loadList.length,\n\t\t\t\tfinish = function(){\n\t\t\t\t\tif(!--remaining){\n\t\t\t\t\t\tload(lang.delegate(cache[loadTarget]));\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tsplit = id.split(\"*\"),\n\t\t\t\tpreloadDemand = split[1] == \"preload\";\n\n\t\t\tif(has(\"dojo-preload-i18n-Api\")){\n\t\t\t\tif(preloadDemand){\n\t\t\t\t\tif(!cache[id]){\n\t\t\t\t\t\t// use cache[id] to prevent multiple preloads of the same preload; this shouldn't happen, but\n\t\t\t\t\t\t// who knows what over-aggressive human optimizers may attempt\n\t\t\t\t\t\tcache[id] = 1;\n\t\t\t\t\t\tpreloadL10n(split[2], json.parse(split[3]), 1, require);\n\t\t\t\t\t}\n\t\t\t\t\t// don't stall the loader!\n\t\t\t\t\tload(1);\n\t\t\t\t}\n\t\t\t\tif(preloadDemand || (waitForPreloads(id, require, load) && !cache[loadTarget])){\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (preloadDemand) {\n\t\t\t\t// If a build is created with nls resources and 'dojo-preload-i18n-Api' has not been set to false,\n\t\t\t\t// the built file will include a preload in the cache (which looks about like so:)\n\t\t\t\t// '*now':function(r){r(['dojo/i18n!*preload*dojo/nls/dojo*[\"ar\",\"ca\",\"cs\",\"da\",\"de\",\"el\",\"en-gb\",\"en-us\",\"es-es\",\"fi-fi\",\"fr-fr\",\"he-il\",\"hu\",\"it-it\",\"ja-jp\",\"ko-kr\",\"nl-nl\",\"nb\",\"pl\",\"pt-br\",\"pt-pt\",\"ru\",\"sk\",\"sl\",\"sv\",\"th\",\"tr\",\"zh-tw\",\"zh-cn\",\"ROOT\"]']);}\n\t\t\t\t// If the consumer of the build sets 'dojo-preload-i18n-Api' to false in the Dojo config, the cached\n\t\t\t\t// preload will not be parsed and will result in an attempt to call 'require' passing it the unparsed\n\t\t\t\t// preload, which is not a valid module id.\n\t\t\t\t// In this case we should skip this request.\n\t\t\t\tload(1);\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tarray.forEach(loadList, function(locale){\n\t\t\t\tvar target = bundlePathAndName + \"/\" + locale;\n\t\t\t\tif(has(\"dojo-preload-i18n-Api\")){\n\t\t\t\t\tcheckForLegacyModules(target);\n\t\t\t\t}\n\t\t\t\tif(!cache[target]){\n\t\t\t\t\tdoLoad(require, bundlePathAndName, bundlePath, bundleName, locale, finish);\n\t\t\t\t}else{\n\t\t\t\t\tfinish();\n\t\t\t\t}\n\t\t\t});\n\t\t};\n\n\tif(has(\"dojo-preload-i18n-Api\") || has(\"dojo-v1x-i18n-Api\")){\n\t\tvar normalizeLocale = thisModule.normalizeLocale = function(locale){\n\t\t\t\tvar result = locale ? locale.toLowerCase() : dojo.locale;\n\t\t\t\treturn result == \"root\" ? \"ROOT\" : result;\n\t\t\t},\n\n\t\t\tisXd = function(mid, contextRequire){\n\t\t\t\treturn (has(\"dojo-sync-loader\") && has(\"dojo-v1x-i18n-Api\")) ?\n\t\t\t\t\tcontextRequire.isXdUrl(require.toUrl(mid + \".js\")) :\n\t\t\t\t\ttrue;\n\t\t\t},\n\n\t\t\tpreloading = 0,\n\n\t\t\tpreloadWaitQueue = [],\n\n\t\t\tpreloadL10n = thisModule._preloadLocalizations = function(/*String*/bundlePrefix, /*Array*/localesGenerated, /*boolean?*/ guaranteedAmdFormat, /*function?*/ contextRequire){\n\t\t\t\t// summary:\n\t\t\t\t//\t\tLoad available flattened resource bundles associated with a particular module for dojo/locale and all dojo/config.extraLocale (if any)\n\t\t\t\t// description:\n\t\t\t\t//\t\tOnly called by built layer files. The entire locale hierarchy is loaded. For example,\n\t\t\t\t//\t\tif locale==\"ab-cd\", then ROOT, \"ab\", and \"ab-cd\" are loaded. This is different than v1.6-\n\t\t\t\t//\t\tin that the v1.6- would only load ab-cd...which was *always* flattened.\n\t\t\t\t//\n\t\t\t\t//\t\tIf guaranteedAmdFormat is true, then the module can be loaded with require thereby circumventing the detection algorithm\n\t\t\t\t//\t\tand the extra possible extra transaction.\n\n\t\t\t\t// If this function is called from legacy code, then guaranteedAmdFormat and contextRequire will be undefined. Since the function\n\t\t\t\t// needs a require in order to resolve module ids, fall back to the context-require associated with this dojo/i18n module, which\n\t\t\t\t// itself may have been mapped.\n\t\t\t\tcontextRequire = contextRequire || require;\n\n\t\t\t\tfunction doRequire(mid, callback){\n\t\t\t\t\tif(isXd(mid, contextRequire) || guaranteedAmdFormat){\n\t\t\t\t\t\tcontextRequire([mid], callback);\n\t\t\t\t\t}else{\n\t\t\t\t\t\tsyncRequire([mid], callback, contextRequire);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tfunction forEachLocale(locale, func){\n\t\t\t\t\t// given locale= \"ab-cd-ef\", calls func on \"ab-cd-ef\", \"ab-cd\", \"ab\", \"ROOT\"; stops calling the first time func returns truthy\n\t\t\t\t\tvar parts = locale.split(\"-\");\n\t\t\t\t\twhile(parts.length){\n\t\t\t\t\t\tif(func(parts.join(\"-\"))){\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tparts.pop();\n\t\t\t\t\t}\n\t\t\t\t\tfunc(\"ROOT\");\n\t\t\t\t}\n\n\t\t\t\t\tfunction preloadingAddLock(){\n\t\t\t\t\t\tpreloading++;\n\t\t\t\t\t}\n\n\t\t\t\t\tfunction preloadingRelLock(){\n\t\t\t\t\t\t--preloading;\n\t\t\t\t\t\twhile(!preloading && preloadWaitQueue.length){\n\t\t\t\t\t\t\tload.apply(null, preloadWaitQueue.shift());\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tfunction cacheId(path, name, loc, require){\n\t\t\t\t\t\t// path is assumed to have a trailing \"/\"\n\t\t\t\t\t\treturn require.toAbsMid(path + name + \"/\" + loc)\n\t\t\t\t\t}\n\n\t\t\t\t\tfunction preload(locale){\n\t\t\t\t\t\tlocale = normalizeLocale(locale);\n\t\t\t\t\t\tforEachLocale(locale, function(loc){\n\t\t\t\t\t\t\tif(array.indexOf(localesGenerated, loc) >= 0){\n\t\t\t\t\t\t\t\tvar mid = bundlePrefix.replace(/\\./g, \"/\") + \"_\" + loc;\n\t\t\t\t\t\t\t\tpreloadingAddLock();\n\t\t\t\t\t\t\t\tdoRequire(mid, function(rollup){\n\t\t\t\t\t\t\t\t\tfor(var p in rollup){\n\t\t\t\t\t\t\t\t\t\tvar bundle = rollup[p],\n\t\t\t\t\t\t\t\t\t\t\tmatch = p.match(/(.+)\\/([^\\/]+)$/),\n\t\t\t\t\t\t\t\t\t\t\tbundleName, bundlePath;\n\n\t\t\t\t\t\t\t\t\t\t\t// If there is no match, the bundle is not a regular bundle from an AMD layer.\n\t\t\t\t\t\t\t\t\t\t\tif (!match){continue;}\n\n\t\t\t\t\t\t\t\t\t\t\tbundleName = match[2];\n\t\t\t\t\t\t\t\t\t\t\tbundlePath = match[1] + \"/\";\n\n\t\t\t\t\t\t\t\t\t\t// backcompat\n\t\t\t\t\t\t\t\t\t\tif(!bundle._localized){continue;}\n\n\t\t\t\t\t\t\t\t\t\tvar localized;\n\t\t\t\t\t\t\t\t\t\tif(loc === \"ROOT\"){\n\t\t\t\t\t\t\t\t\t\t\tvar root = localized = bundle._localized;\n\t\t\t\t\t\t\t\t\t\t\tdelete bundle._localized;\n\t\t\t\t\t\t\t\t\t\t\troot.root = bundle;\n\t\t\t\t\t\t\t\t\t\t\tcache[require.toAbsMid(p)] = root;\n\t\t\t\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\t\t\t\tlocalized = bundle._localized;\n\t\t\t\t\t\t\t\t\t\t\tcache[cacheId(bundlePath, bundleName, loc, require)] = bundle;\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif(loc !== locale){\n\t\t\t\t\t\t\t\t\t\t\t// capture some locale variables\n\t\t\t\t\t\t\t\t\t\t\tvar improveBundle = function improveBundle(bundlePath, bundleName, bundle, localized){\n\t\t\t\t\t\t\t\t\t\t\t\t// locale was not flattened and we've fallen back to a less-specific locale that was flattened\n\t\t\t\t\t\t\t\t\t\t\t\t// for example, we had a flattened 'fr', a 'fr-ca' is available for at least this bundle, and\n\t\t\t\t\t\t\t\t\t\t\t\t// locale==='fr-ca'; therefore, we must improve the bundle as retrieved from the rollup by\n\t\t\t\t\t\t\t\t\t\t\t\t// manually loading the fr-ca version of the bundle and mixing this into the already-retrieved 'fr'\n\t\t\t\t\t\t\t\t\t\t\t\t// version of the bundle.\n\t\t\t\t\t\t\t\t\t\t\t\t//\n\t\t\t\t\t\t\t\t\t\t\t\t// Remember, different bundles may have different sets of locales available.\n\t\t\t\t\t\t\t\t\t\t\t\t//\n\t\t\t\t\t\t\t\t\t\t\t\t// we are really falling back on the regular algorithm here, but--hopefully--starting with most\n\t\t\t\t\t\t\t\t\t\t\t\t// of the required bundles already on board as given by the rollup and we need to \"manually\" load\n\t\t\t\t\t\t\t\t\t\t\t\t// only one locale from a few bundles...or even better...we won't find anything better to load.\n\t\t\t\t\t\t\t\t\t\t\t\t// This algorithm ensures there is nothing better to load even when we can only load a less-specific rollup.\n\t\t\t\t\t\t\t\t\t\t\t\t//\n\t\t\t\t\t\t\t\t\t\t\t\t// note: this feature is only available in async mode\n\n\t\t\t\t\t\t\t\t\t\t\t\t// inspect the loaded bundle that came from the rollup to see if something better is available\n\t\t\t\t\t\t\t\t\t\t\t\t// for any bundle in a rollup, more-specific available locales are given at localized.\n\t\t\t\t\t\t\t\t\t\t\t\tvar requiredBundles = [],\n\t\t\t\t\t\t\t\t\t\t\t\t\tcacheIds = [];\n\t\t\t\t\t\t\t\t\t\t\t\tforEachLocale(locale, function(loc){\n\t\t\t\t\t\t\t\t\t\t\t\t\tif(localized[loc]){\n\t\t\t\t\t\t\t\t\t\t\t\t\t\trequiredBundles.push(require.toAbsMid(bundlePath + loc + \"/\" + bundleName));\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tcacheIds.push(cacheId(bundlePath, bundleName, loc, require));\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\t\t\t\t\tif(requiredBundles.length){\n\t\t\t\t\t\t\t\t\t\t\t\t\tpreloadingAddLock();\n\t\t\t\t\t\t\t\t\t\t\t\t\tcontextRequire(requiredBundles, function(){\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t// requiredBundles was constructed by forEachLocale so it contains locales from\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t// less specific to most specific.\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t// the loop starts with the most specific locale, the last one.\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor(var i = requiredBundles.length - 1; i >= 0 ; i--){\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbundle = lang.mixin(lang.clone(bundle), arguments[i]);\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcache[cacheIds[i]] = bundle;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t// this is the best possible (maybe a perfect match, maybe not), accept it\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tcache[cacheId(bundlePath, bundleName, locale, require)] = lang.clone(bundle);\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tpreloadingRelLock();\n\t\t\t\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\t\t\t\t\t\t// this is the best possible (definitely not a perfect match), accept it\n\t\t\t\t\t\t\t\t\t\t\t\t\tcache[cacheId(bundlePath, bundleName, locale, require)] = bundle;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\t\t\timproveBundle(bundlePath, bundleName, bundle, localized);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tpreloadingRelLock();\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\tpreload();\n\t\t\t\tarray.forEach(dojo.config.extraLocale, preload);\n\t\t\t},\n\n\t\t\twaitForPreloads = function(id, require, load){\n\t\t\t\tif(preloading){\n\t\t\t\t\tpreloadWaitQueue.push([id, require, load]);\n\t\t\t\t}\n\t\t\t\treturn preloading;\n\t\t\t},\n\n\t\t\tcheckForLegacyModules = function()\n\t\t\t\t{};\n\t}\n\n\tif(has(\"dojo-v1x-i18n-Api\")){\n\t\t// this code path assumes the dojo loader and won't work with a standard AMD loader\n\t\tvar amdValue = {},\n\t\t\tl10nCache = {},\n\t\t\tevalBundle,\n\n\t\t\tsyncRequire = function(deps, callback, require){\n\t\t\t\tvar results = [];\n\t\t\t\tarray.forEach(deps, function(mid){\n\t\t\t\t\tvar url = require.toUrl(mid + \".js\");\n\n\t\t\t\t\tfunction load(text){\n\t\t\t\t\t\tif (!evalBundle) {\n\t\t\t\t\t\t\t// use the function ctor to keep the minifiers away (also come close to global scope, but this is secondary)\n\t\t\t\t\t\t\tevalBundle = new Function(\n\t\t\t\t\t\t\t\t\"__bundle\",\t\t\t\t // the bundle to evalutate\n\t\t\t\t\t\t\t\t\"__checkForLegacyModules\", // a function that checks if __bundle defined __mid in the global space\n\t\t\t\t\t\t\t\t\"__mid\",\t\t\t\t // the mid that __bundle is intended to define\n\t\t\t\t\t\t\t\t\"__amdValue\",\n\n\t\t\t\t\t\t\t\t// returns one of:\n\t\t\t\t\t\t\t\t//\t\t1 => the bundle was an AMD bundle\n\t\t\t\t\t\t\t\t//\t\ta legacy bundle object that is the value of __mid\n\t\t\t\t\t\t\t\t//\t\tinstance of Error => could not figure out how to evaluate bundle\n\n\t\t\t\t\t\t\t\t// used to detect when __bundle calls define\n\t\t\t\t\t\t\t\t\"var define = function(mid, factory){define.called = 1; __amdValue.result = factory || mid;},\"\n\t\t\t\t\t\t\t\t+ \"\t require = function(){define.called = 1;};\"\n\n\t\t\t\t\t\t\t\t+ \"try{\"\n\t\t\t\t\t\t\t\t+\t\t\"define.called = 0;\"\n\t\t\t\t\t\t\t\t+\t\t\"eval(__bundle);\"\n\t\t\t\t\t\t\t\t+\t\t\"if(define.called==1)\"\n\t\t\t\t\t\t\t\t\t\t\t// bundle called define; therefore signal it's an AMD bundle\n\t\t\t\t\t\t\t\t+\t\t\t\"return __amdValue;\"\n\n\t\t\t\t\t\t\t\t+\t\t\"if((__checkForLegacyModules = __checkForLegacyModules(__mid)))\"\n\t\t\t\t\t\t\t\t\t\t\t// bundle was probably a v1.6- built NLS flattened NLS bundle that defined __mid in the global space\n\t\t\t\t\t\t\t\t+\t\t\t\"return __checkForLegacyModules;\"\n\n\t\t\t\t\t\t\t\t+ \"}catch(e){}\"\n\t\t\t\t\t\t\t\t// evaulating the bundle was *neither* an AMD *nor* a legacy flattened bundle\n\t\t\t\t\t\t\t\t// either way, re-eval *after* surrounding with parentheses\n\n\t\t\t\t\t\t\t\t+ \"try{\"\n\t\t\t\t\t\t\t\t+\t\t\"return eval('('+__bundle+')');\"\n\t\t\t\t\t\t\t\t+ \"}catch(e){\"\n\t\t\t\t\t\t\t\t+\t\t\"return e;\"\n\t\t\t\t\t\t\t\t+ \"}\"\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvar result = evalBundle(text, checkForLegacyModules, mid, amdValue);\n\t\t\t\t\t\tif(result===amdValue){\n\t\t\t\t\t\t\t// the bundle was an AMD module; re-inject it through the normal AMD path\n\t\t\t\t\t\t\t// we gotta do this since it could be an anonymous module and simply evaluating\n\t\t\t\t\t\t\t// the text here won't provide the loader with the context to know what\n\t\t\t\t\t\t\t// module is being defined()'d. With browser caching, this should be free; further\n\t\t\t\t\t\t\t// this entire code path can be circumvented by using the AMD format to begin with\n\t\t\t\t\t\t\tresults.push(cache[url] = amdValue.result);\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tif(result instanceof Error){\n\t\t\t\t\t\t\t\tconsole.error(\"failed to evaluate i18n bundle; url=\" + url, result);\n\t\t\t\t\t\t\t\tresult = {};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// nls/<locale>/<bundle-name> indicates not the root.\n\t\t\t\t\t\t\tresults.push(cache[url] = (/nls\\/[^\\/]+\\/[^\\/]+$/.test(url) ? result : {root:result, _v1x:1}));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif(cache[url]){\n\t\t\t\t\t\tresults.push(cache[url]);\n\t\t\t\t\t}else{\n\t\t\t\t\t\tvar bundle = require.syncLoadNls(mid);\n\t\t\t\t\t\t// need to check for legacy module here because there might be a legacy module for a\n\t\t\t\t\t\t// less specific locale (which was not looked up during the first checkForLegacyModules\n\t\t\t\t\t\t// call in load()).\n\t\t\t\t\t\t// Also need to reverse the locale and the module name in the mid because syncRequire\n\t\t\t\t\t\t// deps parameters uses the AMD style package/nls/locale/module while legacy code uses\n\t\t\t\t\t\t// package/nls/module/locale.\n\t\t\t\t\t\tif(!bundle){\n\t\t\t\t\t\t\tbundle = checkForLegacyModules(mid.replace(/nls\\/([^\\/]*)\\/([^\\/]*)$/, \"nls/$2/$1\"));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(bundle){\n\t\t\t\t\t\t\tresults.push(bundle);\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tif(!xhr){\n\t\t\t\t\t\t\t\ttry{\n\t\t\t\t\t\t\t\t\trequire.getText(url, true, load);\n\t\t\t\t\t\t\t\t}catch(e){\n\t\t\t\t\t\t\t\t\tresults.push(cache[url] = {});\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\txhr.get({\n\t\t\t\t\t\t\t\t\turl:url,\n\t\t\t\t\t\t\t\t\tsync:true,\n\t\t\t\t\t\t\t\t\tload:load,\n\t\t\t\t\t\t\t\t\terror:function(){\n\t\t\t\t\t\t\t\t\t\tresults.push(cache[url] = {});\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tcallback && callback.apply(null, results);\n\t\t\t};\n\n\t\tcheckForLegacyModules = function(target){\n\t\t\t// legacy code may have already loaded [e.g] the raw bundle x/y/z at x.y.z; when true, push into the cache\n\t\t\tfor(var result, names = target.split(\"/\"), object = dojo.global[names[0]], i = 1; object && i<names.length-1; object = object[names[i++]]){}\n\t\t\tif(object){\n\t\t\t\tresult = object[names[i]];\n\t\t\t\tif(!result){\n\t\t\t\t\t// fallback for incorrect bundle build of 1.6\n\t\t\t\t\tresult = object[names[i].replace(/-/g,\"_\")];\n\t\t\t\t}\n\t\t\t\tif(result){\n\t\t\t\t\tcache[target] = result;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn result;\n\t\t};\n\n\t\tthisModule.getLocalization = function(moduleName, bundleName, locale){\n\t\t\tvar result,\n\t\t\t\tl10nName = getBundleName(moduleName, bundleName, locale);\n\n\t\t\tif (l10nCache[l10nName]) {\n\t\t\t\treturn l10nCache[l10nName];\n\t\t\t}\n\n\t\t\tload(\n\t\t\t\tl10nName,\n\n\t\t\t\t// isXd() and syncRequire() need a context-require in order to resolve the mid with respect to a reference module.\n\t\t\t\t// Since this legacy function does not have the concept of a reference module, resolve with respect to this\n\t\t\t\t// dojo/i18n module, which, itself may have been mapped.\n\t\t\t\t(!isXd(l10nName, require) ? function(deps, callback){ syncRequire(deps, callback, require); } : require),\n\n\t\t\t\tfunction(result_){\n\t\t\t\t\tl10nCache[l10nName] = result_;\n\t\t\t\t\tresult = result_;\n\t\t\t\t}\n\t\t\t);\n\t\t\treturn result;\n\t\t};\n\t}\n\telse {\n\t\tthisModule.getLocalization = function(moduleName, bundleName, locale){\n\t\t\tvar key = moduleName.replace(/\\./g, '/') + '/nls/' + bundleName + '/' + (locale || config.locale);\n\t\t\treturn this.cache[key];\n\t\t};\n\t}\n\n\treturn lang.mixin(thisModule, {\n\t\tdynamic:true,\n\t\tnormalize:normalize,\n\t\tload:load,\n\t\tcache:cache,\n\t\tgetL10nName: getL10nName\n\t});\n});\n","// Copyright 2021-2025 The MathWorks, Inc.\n\n/* require([\n 'docsurvey-ui/js/start',\n 'dojo/domReady!'\n], async (startPromise) => {\n const startModule = await startPromise;\n startModule.start();\n}); */\n\ndefine([\n 'mw-ddux/UsageLogger',\n 'mw-messageservice/MessageService',\n 'mw-rating/Rating',\n 'mw-rating-feedback/RatingFeedback',\n 'mw-utils/Utils'\n], function (UsageLogger, MessageService, Rating, RatingFeedback, Utils) {\n let feedbackId = Utils.generateUuid();\n let widget = document.querySelector('mw-rating-feedback');\n let pageURL = window.location.href;\n let docURL = pageURL;\n let docURLTemp = '';\n let docLang = '';\n let docLangNode = document.getElementById('doc_center_content');\n if (docLangNode) {\n docLang = document.getElementById('doc_center_content').dataset.language;\n }\n let ratingValue;\n let commentValue;\n let pattern = '&surveyParams=';\n let g11nStr = '-G11N-';\n // If feedback is submitted through an iframe (18b-21b docs), the doc page's URL (encoded) and locale will\n // be captured.\n // If feedback is submitted through a Yes/No button (18a and earlier docs), only the doc page's URL will be captured.\n if (pageURL.indexOf(pattern) >= 0) {\n docURL = pageURL.substring(pageURL.indexOf(pattern) + pattern.length);\n if (docURL.indexOf(g11nStr) >= 0) {\n docURLTemp = docURL;\n docURL = docURL.substring(0, docURL.indexOf(g11nStr));\n docLang = docURLTemp.substring(docURLTemp.indexOf(g11nStr) + g11nStr.length);\n }\n docURL = decodeURIComponent(docURL);\n }\n\n\n // For any of the 30 pilot pages, display the pilot version of survey. Otherwise, display the default survey.\n\n const urlSubstrings = [\n '/help/matlab/learn_matlab/desktop.html',\n '/help/matlab/learn_matlab/matrices-and-arrays.html',\n '/help/matlab/learn_matlab/help.html',\n '/help/matlab/learn_matlab/array-indexing.html',\n '/help/matlab/learn_matlab/plots.html',\n '/help/matlab/learn_matlab/workspace.html',\n '/help/matlab/matlab_prog/compatible-array-sizes-for-basic-operations.html',\n '/help/matlab/learn_matlab/calling-functions.html',\n '/help/matlab/learn_matlab/character-strings.html',\n '/help/matlab/matlab_prog/array-vs-matrix-operations.html',\n '/help/matlab/learn_matlab/scripts.html',\n '/help/matlab/ref/plot.html',\n '/help/simulink/gs/simulink-block-diagrams.html',\n '/help/matlab/ref/fft.html',\n '/help/matlab/ref/for.html',\n '/help/matlab/math/basic-matrix-operations.html',\n '/help/matlab/ref/function.html',\n '/help/matlab/matlab_prog/continue-long-statements-on-multiple-lines.html',\n '/help/matlab/ref/double.linspace.html',\n '/help/images/image-import-and-export.html',\n '/help/matlab/ref/input.html',\n '/help/matlab/creating_plots/types-of-matlab-plots.html',\n '/help/matlab/matlab_env/check-for-software-updates.html',\n '/help/signal/gs/impulse-step-and-ramp-functions.html',\n '/help/matlab/creating_plots/interactively-explore-plotted-data.html',\n '/help/matlab/ref/double.sin.html',\n '/help/matlab/creating_plots/specify-line-and-marker-appearance-in-plots.html',\n '/help/matlabmobile/ug/creating-matrices-and-arrays.html',\n '/help/matlab/math/fourier-transforms.html',\n '/help/matlab/visualize/creating-3-d-plots.html',\n '/help/releases/R2024b/matlab/learn_matlab/desktop.html',\n '/help/releases/R2024b/matlab/learn_matlab/matrices-and-arrays.html',\n '/help/releases/R2024b/matlab/learn_matlab/help.html',\n '/help/releases/R2024b/matlab/learn_matlab/array-indexing.html',\n '/help/releases/R2024b/matlab/learn_matlab/plots.html',\n '/help/releases/R2024b/matlab/learn_matlab/workspace.html',\n '/help/releases/R2024b/matlab/matlab_prog/compatible-array-sizes-for-basic-operations.html',\n '/help/releases/R2024b/matlab/learn_matlab/calling-functions.html',\n '/help/releases/R2024b/matlab/learn_matlab/character-strings.html',\n '/help/releases/R2024b/matlab/matlab_prog/array-vs-matrix-operations.html',\n '/help/releases/R2024b/matlab/learn_matlab/scripts.html',\n '/help/releases/R2024b/matlab/ref/plot.html',\n '/help/releases/R2024b/simulink/gs/simulink-block-diagrams.html',\n '/help/releases/R2024b/matlab/ref/fft.html',\n '/help/releases/R2024b/matlab/ref/for.html',\n '/help/releases/R2024b/matlab/math/basic-matrix-operations.html',\n '/help/releases/R2024b/matlab/ref/function.html',\n '/help/releases/R2024b/matlab/matlab_prog/continue-long-statements-on-multiple-lines.html',\n '/help/releases/R2024b/matlab/ref/double.linspace.html',\n '/help/releases/R2024b/images/image-import-and-export.html',\n '/help/releases/R2024b/matlab/ref/input.html',\n '/help/releases/R2024b/matlab/creating_plots/types-of-matlab-plots.html',\n '/help/releases/R2024b/matlab/matlab_env/check-for-software-updates.html',\n '/help/releases/R2024b/signal/gs/impulse-step-and-ramp-functions.html',\n '/help/releases/R2024b/matlab/creating_plots/interactively-explore-plotted-data.html',\n '/help/releases/R2024b/matlab/ref/double.sin.html',\n '/help/releases/R2024b/matlab/creating_plots/specify-line-and-marker-appearance-in-plots.html',\n '/help/releases/R2024b/matlabmobile/ug/creating-matrices-and-arrays.html',\n '/help/releases/R2024b/matlab/math/fourier-transforms.html',\n '/help/releases/R2024b/matlab/visualize/creating-3-d-plots.html'\n ];\n\n // Before the R2025a GR, we don't need to do anything with the following URLs:\n /*\n '/help/releases/R2025a/matlab/learn_matlab/desktop.html' \n '/help/releases/R2025a/matlab/learn_matlab/matrices-and-arrays.html',\n '/help/releases/R2025a/matlab/learn_matlab/help.html',\n '/help/releases/R2025a/matlab/learn_matlab/array-indexing.html',\n '/help/releases/R2025a/matlab/learn_matlab/plots.html',\n '/help/releases/R2025a/matlab/learn_matlab/workspace.html',\n '/help/releases/R2025a/matlab/matlab_prog/compatible-array-sizes-for-basic-operations.html',\n '/help/releases/R2025a/matlab/learn_matlab/calling-functions.html',\n '/help/releases/R2025a/matlab/learn_matlab/character-strings.html',\n '/help/releases/R2025a/matlab/matlab_prog/array-vs-matrix-operations.html',\n '/help/releases/R2025a/matlab/learn_matlab/scripts.html',\n '/help/releases/R2025a/matlab/ref/plot.html',\n '/help/releases/R2025a/simulink/gs/simulink-block-diagrams.html',\n '/help/releases/R2025a/matlab/ref/fft.html',\n '/help/releases/R2025a/matlab/ref/for.html',\n '/help/releases/R2025a/matlab/math/basic-matrix-operations.html',\n '/help/releases/R2025a/matlab/ref/function.html',\n '/help/releases/R2025a/matlab/matlab_prog/continue-long-statements-on-multiple-lines.html',\n '/help/releases/R2025a/matlab/ref/double.linspace.html',\n '/help/releases/R2025a/images/image-import-and-export.html',\n '/help/releases/R2025a/matlab/ref/input.html',\n '/help/releases/R2025a/matlab/creating_plots/types-of-matlab-plots.html',\n '/help/releases/R2025a/matlab/matlab_env/check-for-software-updates.html',\n '/help/releases/R2025a/signal/gs/impulse-step-and-ramp-functions.html',\n '/help/releases/R2025a/matlab/creating_plots/interactively-explore-plotted-data.html',\n '/help/releases/R2025a/matlab/ref/double.sin.html',\n '/help/releases/R2025a/matlab/creating_plots/specify-line-and-marker-appearance-in-plots.html',\n '/help/releases/R2025a/matlabmobile/ug/creating-matrices-and-arrays.html',\n '/help/releases/R2025a/matlab/math/fourier-transforms.html',\n '/help/releases/R2025a/matlab/visualize/creating-3-d-plots.html'\n\n */\n\n // Check if the URL contains any of the specified substrings\n const currentPath = window.location.pathname;\n const isPilotPage = docLang === \"en\" && urlSubstrings.some(substring => currentPath.includes(substring));\n\n if (isPilotPage) {\n let surveyState = '';\n let surveyBtn = document.getElementById('feedback_actuator');\n\n surveyBtn.addEventListener('click', function() {\n\n // Start UsageLogger lazily. If it was already started as part of application startup\n // this is unnecessary. However, it won't do any harm since redundant starts are ignored.\n // Configure the UsageLogger to send data directly to the DDUX server unless the page was server up from localhost.\n // The DDUX server won't accept cross origin posts from other than mathworks.com. Presumably, if the hostname\n // is localhost the page was served up by MATLAB which can send the data to the DDUX server.\n let sendDirect = ((window.location.hostname !== 'localhost') && (window.location.hostname !== '127.0.0.1'));\n\n if (!sendDirect) {\n MessageService.start();\n }\n UsageLogger.start({\n applicationName: 'DOC_FEEDBACK',\n applicationVersion: '1.0',\n sendDirect: sendDirect\n });\n\n surveyState = 'opened';\n\n UsageLogger.logData({\n rating: ratingValue,\n comment: commentValue,\n feedbackId: feedbackId,\n context: docURL,\n context2: '{language: ' + docLang + ', state: ' + surveyState + ', design_condition: B}'\n }, {\n eventKey: 'CUSTOMER_FEEDBACK'\n });\n\n\n // If the modal is closed, the survey state is 'dismissed'.\n $('#feedback_modal').on('hidden.bs.modal', function () {\n surveyState = 'dismissed';\n UsageLogger.logData({\n rating: ratingValue,\n comment: commentValue,\n feedbackId: feedbackId,\n context: docURL,\n context2: '{language: ' + docLang + ', state: ' + surveyState + ', design_condition: B}'\n }, {\n eventKey: 'CUSTOMER_FEEDBACK'\n });\n });\n\n widget.addEventListener('ratingstepchange', (evt) => {\n UsageLogger.logData({\n rating: evt.detail.values.rating,\n comment: evt.detail.values.comment,\n feedbackId: feedbackId,\n context: docURL,\n context2: '{language: ' + docLang + ', state: ' + surveyState + ', design_condition: B}'\n }, {\n eventKey: 'CUSTOMER_FEEDBACK'\n });\n\n ratingValue = evt.detail.values.rating;\n commentValue = evt.detail.values.comment;\n\n if (evt.detail.step === 1) {\n setTimeout(function() {\n $('#feedback_modal').modal('hide');\n }, 1500);\n }\n });\n });\n } else {\n widget.addEventListener('ratingstepchange', (evt) => {\n if (evt.detail.step === 0) {\n // Got rating but no comment yet. Log the rating immediatly since the comment\n // is optional and therefore may never arrive.\n // Start UsageLogger lazily. If it was already started as part of application startup\n // this is unnecessary. However, it won't do any harm since redundant starts are ignored.\n // Configure the UsageLogger to send data directly to the DDUX server.\n const sendDirect = true;\n UsageLogger.start({\n applicationName: 'DOC_FEEDBACK',\n applicationVersion: '1.0',\n sendDirect: sendDirect\n });\n // Generate a random id that can be used to tie the rating with a subsequent comment\n feedbackId = Utils.generateUuid();\n }\n UsageLogger.logData({\n rating: evt.detail.values.rating,\n comment: evt.detail.values.comment,\n feedbackId: feedbackId,\n context: docURL,\n context2: docLang\n }, {\n eventKey: 'CUSTOMER_FEEDBACK'\n });\n });\n }\n\n \n});\n","define([\"./DirectSender\", \"./MatlabSender\", \"./StubSender\", \"mw-log/Log\"], function (DirectSender, MatlabSender, StubSender, Log) {\n \"use strict\";\n\n var _exports = {};\n /**\n * <p>Defines an API for logging product usage as part of the Data Driven User Experience (DDUX) program.\n * There are three primary logging methods, each targeting a distinct use case. They are:</P>\n *\n * <ol>\n * <li>logData - used for general-purpose logging of key-value pairs</li>\n * <li>logEvent - used to log user interactions with the UI, such as clicks and key presses</li>\n * <li>logComposition - used to log the composition of user-produced artifacts such as live editor scripts or Simulink models.</li>\n * </ol>\n *\n * <p>The UsageLogger can be utilized in either a standalone web application or a web application backed by\n * a server-side MATLAB. In the first case logged data is sent directly to a DDUX server, while in\n * the second it is sent to the backend MATLAB which will relay it to the DDUX server. Refer to the\n * \"start\" method for details on how to configure the UsageLogger for a particular web application.</p>\n *\n * <p><b>IMPORTANT</b></P>\n *\n * <p>Before adding logging for a product or extending existing logging you must submit a \"DDUX data collection proposal\"\n * via the MathWorks Proposal Center and obtain approval.</p>\n *\n * @copyright 2018-2024 The MathWorks, Inc.\n * @module mw-ddux/UsageLogger\n */\n\n let _sender;\n let _uiEventDefaults;\n let _telemetryDefaults;\n let _compositionDefaults;\n let _selectedContext;\n const _elementIdPrefixes = {};\n const _taps = [];\n const hasWindow = function () {\n return typeof window !== 'undefined';\n };\n const UsageLogger = {\n _isRunning: false,\n allowProductScopeOverride: false,\n /**\n * Initializes usage logging. Logging calls made before start are dropped.\n *\n * @function start\n * @static\n *\n * @param loggerProperties {object} supplies properties that control the behavior of the logger.\n * These can include default values for various event identification attributes.\n * @param loggerProperties.product {string} identifies the product for all UI event and\n * telemetry logs unless overridden\n * @param loggerProperties.scope {string} identifies the scope for all UI event logs\n * unless overridden.\n * @param loggerProperties.appComponent {string} identifies the appComponent for all\n * telemetry logs unless overridden. \"scope\" and \"appComponent\" play a similar roll\n * in UI event logs and telemetry logs, respectively. If the same value should be used\n * for both you may specify either rather than both.\n * @param loggerProperties.eventKey {string} identifies the telemetry stream for all\n * telemetry logs unless overridden\n * @param loggerProperties.artifactType {string} identifies the type of artifact associated with all\n * artifact composition logs unless overridden.\n * @param loggerProperties.allowProductScopeOverride {boolean} should be set true if\n * products and scopes other than those specified above can exist in the same window.\n * In this case the UsageLogger will look for annotations on the DOM that can be used\n * to override the default product and scope.\n * @param loggerProperties.dontSend {boolean} true if logged data should not be sent (indented for testing)\n * @param loggerProperties.sendDirect {boolean} true if logged data should be sent directly to the DDUX\n * server rather than via a MATLAB backend.\n * @param loggerProperties.applicationName {string} the name of the application logging data\n * @param loggerProperties.applicationVersion {string} the version of the application logging data\n * @param loggerProperties.sendToDev when sending directly to the DDUX server, specifies data should go to\n * the development (dev) or production (prod) URL. If not specified data goes to prod if the\n * page hostname is \"mathworks.com\" (optional)\n * @param loggerProperties.release {string} The mathworks product release such as 'R2020b'. If specified\n * the release is used to determine the dev endpoint for direct send. (optional)\n * @param loggerProperties.endPointNumber {number} 1, 2 or 3 indicating which \"integ\" endpoint to send to.\n * If specified this overrides the release-based dev endpoint selection (optional)\n * @param LoggerProperties.endPointUrl {string} URL to which logged data should be posted when sending\n * directly to the DDUX sercer (optional). Takes precedence over other properties that contribute to\n * determining the end point URL including \"sendToDev\", \"release\" and \"endPointNumber\"\n */\n start: function (loggerProperties) {\n if (this._isRunning) {\n return;\n }\n this._isRunning = true;\n if (hasWindow()) {\n window.UsageLogger = this;\n }\n loggerProperties = loggerProperties || {};\n _uiEventDefaults = {\n product: loggerProperties.product,\n scope: loggerProperties.scope || loggerProperties.appComponent\n };\n _telemetryDefaults = {\n product: loggerProperties.product,\n appComponent: loggerProperties.appComponent || loggerProperties.scope,\n eventKey: loggerProperties.eventKey\n };\n _compositionDefaults = {\n product: loggerProperties.product,\n appComponent: loggerProperties.appComponent || loggerProperties.scope,\n artifactType: loggerProperties.artifactType,\n artifactId: loggerProperties.artifactId\n };\n this.allowProductScopeOverride = loggerProperties.allowProductScopeOverride;\n _sender = loggerProperties.dontSend ? new StubSender() : loggerProperties.sendDirect ? new DirectSender(loggerProperties) : new MatlabSender(loggerProperties);\n },\n /**\n * Terminates usage logging. Logging calls made after stop are dropped.\n *\n * @function stop\n * @static\n */\n stop: function () {\n if (this._isRunning) {\n this._isRunning = false;\n _sender.stop();\n _sender = undefined;\n }\n },\n /**\n * Indicates whether the usage logger is running, i.e. has been started but not stopped.\n *\n * @function isRunning\n * @static\n * @returns {boolean} true if running\n */\n isRunning: function () {\n return this._isRunning;\n },\n /**\n * Sets default properties applied when logging UI events, data or artifact composition, overriding\n * any values specified upon start.\n *\n * @function setDefaults\n * @static\n * @param updatedProperties {object} replacement property values\n * @param loggerProperties.product {string}\n * @param loggerProperties.scope {string}\n * @param loggerProperties.appComponent {string}\n * @param loggerProperties.eventKey {string}\n * @param loggerProperties.artifactType {string}\n */\n setDefaults: function (updatedProperties) {\n _uiEventDefaults.product = updatedProperties.product || _uiEventDefaults.product;\n _uiEventDefaults.scope = updatedProperties.scope || updatedProperties.appComponent || _uiEventDefaults.scope;\n _telemetryDefaults.product = updatedProperties.product || _telemetryDefaults.product;\n _telemetryDefaults.appComponent = updatedProperties.scope || updatedProperties.appComponent || _telemetryDefaults.appComponent;\n _telemetryDefaults.eventKey = updatedProperties.eventKey || _telemetryDefaults.eventKey;\n _compositionDefaults.product = updatedProperties.product || _compositionDefaults.product;\n _compositionDefaults.appComponent = updatedProperties.scope || updatedProperties.appComponent || _compositionDefaults.appComponent;\n _compositionDefaults.artifactType = updatedProperties.artifactType || _compositionDefaults.artifactType;\n _compositionDefaults.artifactId = updatedProperties.artifactId || _compositionDefaults.artifactId;\n },\n /**\n * Logs arbitrary key-value pairs. This is the most general purpose logging method.\n *\n * @function logData\n * @static\n * @param data {object} arbitrary key value pairs to be logged\n * @param identification {object} optional properties that identify the data source, overriding the\n * defaults specified via start\n * @param identification.product {string} identifies the product with which the data is associated\n * @param identification.appComponent {string} identifies the app component with which the data is associated\n * @param identification.eventKey {string} identifies the data stream\n */\n logData: function (data, identification) {\n if (!this._isRunning) {\n const ancestorLogger = this._getRunningAncestor();\n if (ancestorLogger) {\n ancestorLogger.logData(data, identification);\n return;\n } else if (!(hasWindow() && window.UsageLogger)) {\n Log.info('UsageLogger start must be called before logging data');\n return;\n }\n }\n // Defer so that if this event was triggered by a UI click that click will be sent first\n const that = this;\n const doSend = function () {\n that._sendEvent('telemetry', that._composeTelemetryEvent(data, identification));\n };\n if (_taps.length > 0) {\n doSend();\n } else {\n setTimeout(doSend, 0);\n }\n },\n /**\n * Logs a UI event\n *\n * @function logUIEvent\n * @static\n * @param eventData {object} an object that contains at a minimum eventType and elementId properties but may also contain elementType and additional string-valued properties\n * @param eventData.eventType {string} identifies the type of event. Can be any of the following:\n * \"cell_edit\",\n * \"clicked\",\n * \"closed\",\n * \"column_description_changed\",\n * \"column_dragged\",\n * \"column_sorted\",\n * \"deselected\",\n * \"docked\",\n * \"double_clicked\",\n * \"dragged\",\n * \"key_pressed\",\n * \"location_changed\",\n * \"maximized\",\n * \"menu_item_selected\",\n * \"minimized\",\n * \"opened\",\n * \"restored\",\n * \"scrolled\",\n * \"selected\",\n * \"selection_changed\",\n * \"undocked\",\n * \"units_changed\",\n * \"variable_opened\",\n * @param eventData.elementId {string} identifies the UI element the user interacted with\n * @param eventData.elementType {string} identifies the type of UI element the user interactive with. Can be any of the following:\n * \"app\",\n * \"button\",\n * \"combo_box\",\n * \"document\",\n * \"document_group\",\n * \"drop_down\",\n * \"list\",\n * \"list_item\",\n * \"menu\",\n * \"menu_item\",\n * \"slider\",\n * \"spinner\",\n * \"table\",\n * \"text field\",\n * \"text area\",\n * \"panel\",\n * \"toolstrip\",\n * \"toolstrip tab\"\n */\n logUIEvent: function (eventData) {\n if (!this._isRunning) {\n const ancestorLogger = this._getRunningAncestor();\n if (ancestorLogger) {\n ancestorLogger.logEvent(eventData);\n return;\n } else if (!(hasWindow() && window.UsageLogger)) {\n Log.info('UsageLogger start must be called before logging data');\n return;\n }\n }\n Log.assert(eventData.eventType, 'eventType must be defined');\n if (eventData.elementType) {\n if (!eventData.elementId) {\n Log.warn('Can\\'t log ' + eventData.elementType + ' ' + eventData.eventType + ' without elementId');\n return;\n }\n }\n eventData.product = eventData.product || _uiEventDefaults.product;\n eventData.scope = eventData.scope || _uiEventDefaults.scope;\n const that = this;\n const doLogEvent = function () {\n let attributes;\n try {\n that._filterElementId(eventData);\n // Include the selected context if the event is a keypress or a toolstrip event\n if (_selectedContext && (eventData.eventType === 'keypress' || attributes && attributes.subscope === 'toolstrip')) {\n eventData.selection = _selectedContext;\n }\n that._sendEvent('uiEvent', eventData);\n } catch (error) {\n Log.warn('Error while logging event: ' + error.message);\n }\n that._uiEventInProgress = false;\n };\n // Defer event processing of events other than clicks. The intent is to have events triggered by a click follow\n // the click event itself\n if (eventData.eventType === 'click' || _taps.length > 0) {\n doLogEvent();\n } else {\n this._uiEventInProgress = true;\n setTimeout(doLogEvent, 0);\n }\n },\n /**\n * Alias for LogUIEvent\n * @param eventData\n */\n logEvent: function (eventData) {\n this.logUIEvent(eventData);\n },\n /**\n * Specifies a context that may be helpful in interpreting keyboard or toolstrip UI events.\n * For example the caller could provide the id associated with the selected region of the UI.\n * This id will be included in subsequent UI event logs as the \"selected\" field when relevant.\n *\n * @function setSelectedContext\n * @static\n * @param context\n */\n setSelectedContext: function (context) {\n _selectedContext = context;\n },\n setPrefixesOfElementIdsToRedact: function (prefixes, product, scope) {\n _elementIdPrefixes[this._productAndScopeKey(product || _uiEventDefaults.product, scope || _uiEventDefaults.scope)] = prefixes;\n },\n /**\n * Logs artifact composition.\n *\n * @function logComposition\n * @static\n * @param identification {object} properties that identify the data source and artifact, overriding the\n * defaults, if any, specified via start\n * @param identification.product {string} identifies the product with which the artifact is associated\n * @param identification.appComponent {string} identifies the app component with which the artifact is associated\n * @param identification.artifactType {string} indicated the type of artifact\n * @param identification.artifactId {string} uniquely identifies the artifact. This string will be hashed so that any\n * contained IP or PII will be obscured.\n * @param properties {object} artifact property names and values to be logged. The values may be string, boolean or number\n * @param componentCounts {object} artifact component types and corresponding non-zero counts\n * @param componentProperties {array} of objects, each conmtaining:\n * @param componentProperties.componentType\n * @param componentProperties.propertyName\n * @param componentProperties.propertyValue\n */\n logComposition: function (identification, properties, componentCounts, componentProperties) {\n if (!this._isRunning) {\n const ancestorLogger = this._getRunningAncestor();\n if (ancestorLogger) {\n ancestorLogger.logComposition(identification, properties, componentCounts, componentProperties);\n return;\n } else if (!(hasWindow() && window.UsageLogger)) {\n Log.info('UsageLogger start must be called before logging data');\n return;\n }\n }\n identification = identification || {};\n // Compose event\n const event = {\n product: identification.product || _compositionDefaults.product,\n appComponent: identification.appComponent || _compositionDefaults.appComponent,\n artifactType: identification.artifactType || _compositionDefaults.artifactType,\n artifactId: identification.artifactId || _compositionDefaults.artifactId,\n properties: properties,\n componentCounts: componentCounts,\n componentProperties: componentProperties\n };\n Log.assert(event.product, 'product must be defined');\n Log.assert(event.appComponent, 'appComponent must be defined');\n Log.assert(event.artifactType, 'artifactType must be defined');\n Log.assert(event.artifactId, 'artifactId must be defined');\n\n // Defer so that if this event was triggered by a UI click that click will be sent first\n const that = this;\n const doSend = function () {\n that._sendEvent('composition', event);\n };\n if (_taps.length > 0) {\n doSend();\n } else {\n setTimeout(doSend, 0);\n }\n },\n /**\n * Supports \"taping\", i.e. listening in on, the ddux log stream for test.\n *\n * @function addTap\n * @static\n * @param matchProperties {object} determines which ddux logs are sent to the given tapFunction.\n * matchProperties can contain any set of properties and values (including empty) that may\n * appear in the ddux logs. Logs matching all the specified properties will be passed to the\n * tapFunction. If matchProperties is empty then all logs will be passed. An example\n * matchProperties value might be {product: \"Image Processing Toolbox\", scope: \"Camera Calibrator\"}.\n *\n * Note taps added using this method only \"see\" events logged via the same UsageLogger.\n * If you need to see all DDUX events logged within MATLAB you'll need to use either the MATLAB\n * or C++ add tap capabilities.\n *\n * @param tapFunction {function (object)} function to which matching logs will be passed.\n * @param blockDefault {boolean} if true then data sent to the tap function will not be sent on down the pipe.\n * @return an object whose remove() function can be called to remove the tap\n */\n addTap: function (matchProperties, tapFunction, blockDefault) {\n const tap = {\n matchProperties: matchProperties,\n tapFunction: tapFunction,\n blockDefault: blockDefault\n };\n _taps.push(tap);\n return {\n remove: function () {\n const index = _taps.indexOf(tap);\n if (index >= 0) {\n _taps.splice(index, 1);\n }\n }\n };\n },\n _composeTelemetryEvent: function (data, identification) {\n identification = identification || {};\n const event = {\n product: identification.product || _telemetryDefaults.product,\n appComponent: identification.appComponent || _telemetryDefaults.appComponent,\n eventKey: identification.eventKey || _telemetryDefaults.eventKey,\n data: data\n };\n Log.assert(event.eventKey, 'eventKey must be defined');\n return event;\n },\n _sendEvent: function (eventType, event) {\n // Send to matching taps\n let blocked = false;\n _taps.forEach(function (tap) {\n const matchKeys = Object.keys(tap.matchProperties);\n let allMatch = true;\n for (let k = 0; k < matchKeys.length && allMatch; k++) {\n const key = matchKeys[k];\n allMatch = tap.matchProperties[key] === event[key];\n }\n if (allMatch) {\n tap.tapFunction(event);\n if (tap.blockDefault) {\n blocked = true;\n }\n }\n });\n if (!blocked) {\n _sender.sendEvent(eventType, event);\n }\n },\n _getRunningAncestor: function () {\n if (hasWindow()) {\n let ancestor = window.opener;\n while (ancestor) {\n const ancestorLogger = ancestor.UsageLogger;\n if (ancestorLogger && ancestorLogger._isRunning) {\n return ancestorLogger;\n }\n ancestor = ancestor.opener;\n }\n }\n return null;\n },\n _filterElementId: function (eventData) {\n const product = eventData.product || _uiEventDefaults.product;\n const scope = eventData.scope || _uiEventDefaults.scope;\n const prefixes = _elementIdPrefixes[this._productAndScopeKey(product, scope)];\n const isNumber = function (s) {\n return !/\\D/.test(s);\n };\n if (prefixes) {\n let i, prefix;\n for (i = 0; i < prefixes.length; i++) {\n prefix = prefixes[i];\n if (eventData.elementId.startsWith(prefix)) {\n const remainder = eventData.elementId.slice(prefix.length);\n eventData.elementId = prefix + ':redacted';\n if (remainder.length > 0) {\n const c = remainder.charAt(0);\n if (c === ':' || c === '.') {\n eventData.redactedHash = this.hashString(remainder);\n } else if (isNumber(remainder)) {\n eventData.redactedHash = remainder;\n }\n }\n break;\n }\n }\n }\n },\n _productAndScopeKey: function (product, scope) {\n return product + ':' + scope;\n },\n // TODO: replace with something standard like MD5.\n hashString: function (s) {\n let hash = 0;\n for (let i = 0; i < s.length; i++) {\n hash += Math.pow(s.charCodeAt(i) * 31, s.length - i);\n hash &= hash;\n }\n return Math.abs(hash).toString(16);\n }\n };\n _exports.default = UsageLogger;\n return _exports.default;\n});\n//# sourceMappingURL=UsageLogger.js.map\n","define([\"mw-log/Log\", \"./Sender\", \"./DirectSendFunction\"], function (Log, Sender, sendEventToServer) {\n \"use strict\";\n\n var _exports = {};\n // Copyright 2022-2023 The MathWorks, Inc.\n\n const hasWindow = function () {\n return typeof window !== 'undefined';\n };\n const getIntegNumberForRelease = function (release) {\n const indexToIntegMap = [1, 3, 2];\n if (release && release.length === 6) {\n const year = parseInt(release.substring(1, 5));\n const aorb = release.charAt(5);\n const index = ((year - 2016) * 2 + (aorb === 'a' ? 0 : 1)) % 3;\n return indexToIntegMap[index];\n }\n };\n const generateSessionKey = function () {\n // This code is copied from mw-utils/Utils.generateUuid which only generates 8 characters.\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n /* jslint bitwise: false */\n const r = Math.random() * 16 | 0;\n const v = c === 'x' ? r : r & 0x3 | 0x8;\n /* jslint bitwise: true */\n return v.toString(16);\n });\n };\n\n /**\n * Defines class that sends DDUX data directly to the DDUX server\n * @private\n */\n class DirectSender extends Sender {\n /**\n * Constructor - Initializes by storing relevant properties\n *\n * @param properties {object} supplies information needed to communicate with the server\n * and optional event bundling control parameters\n * @param properties.applicationName the name of the application logging data (required)\n * @param properties.applicationVersion the version of the application logging data (required)\n * @param properties.applicationKey the server API key corresponding to the applicationName (optional, because\n * keys for known applicationNames are built in)\n * @param properties.sendToDev specifies whether logged data should be send to the devevelopment (dev)\n * or production (prod) URL. If not specified data goes to prod if the page hostname contains \"mathworks.\"\n * (optional)\n * @param properties.sendFromWorker if true data will be sent from a web worker\n */\n constructor(properties) {\n super();\n Log.assert(properties.applicationName, 'applicationName must be supplied for direct send');\n Log.assert(properties.applicationVersion, 'applicationVersion must be supplied for direct send');\n this._sendProperties = {\n applicationName: properties.applicationName,\n applicationVersion: properties.applicationVersion,\n applicationKey: properties.applicationKey,\n sessionKey: generateSessionKey(),\n postUrl: DirectSender.getPostUrlFromQueryParameter(hasWindow() ? window.location.href : '') || DirectSender.getPostUrlFromPropertiesAndHostname(properties, hasWindow() ? window.location.hostname : '')\n };\n if (properties.sendFromWorker && hasWindow() && window.Worker) {\n this._worker = new window.Worker('../../main/DirectSendWorker.js', {\n type: 'module'\n });\n this._worker.postMessage({\n action: 'setup',\n sendProperties: this._sendProperties\n });\n }\n }\n stop() {\n // Nothing to do\n }\n sendEvent(eventType, event) {\n if (this._worker) {\n this._worker.postMessage({\n action: 'send',\n eventType: eventType,\n event: event\n });\n } else {\n sendEventToServer(eventType, event, this._sendProperties);\n }\n }\n static getPostUrlFromQueryParameter(pageUrl) {\n let queryIndex = pageUrl.indexOf('?');\n if (queryIndex >= 0) {\n queryIndex = pageUrl.indexOf('dduxUrlOverride', queryIndex + 1);\n if (queryIndex > 0) {\n queryIndex = pageUrl.indexOf('=', queryIndex + 1);\n let endIndex = pageUrl.indexOf('&', queryIndex + 1);\n if (endIndex < 0) {\n endIndex = pageUrl.length;\n }\n return pageUrl.substring(queryIndex + 1, endIndex);\n }\n }\n return undefined;\n }\n static getPostUrlFromPropertiesAndHostname(properties, hostname) {\n if (properties.endPointUrl) {\n return properties.endPointUrl;\n }\n let postURL = 'https://udc-service';\n let sendToDev = properties.sendToDev;\n let integNumber;\n if (sendToDev !== false) {\n // If hostname contains \"integ\" send to dev and also extract the integ number (if present)\n const integIndex = hostname.indexOf('integ');\n if (integIndex >= 0) {\n sendToDev = true;\n integNumber = hostname.substring(integIndex + 5, integIndex + 6);\n if (!(integNumber === '1' || integNumber === '2' || integNumber === '3')) {\n integNumber = undefined;\n }\n } else {\n // Send to prod if hostname contains \"mathworks.\" (but not \"integ\")\n // Note: \"mathworks.\" covers both \"mathworks.com\" and \"mathworks.cn\"\n sendToDev = !hostname.includes('mathworks.');\n }\n if (sendToDev) {\n integNumber = properties.endPointNumber || integNumber || getIntegNumberForRelease(properties.release) || 1;\n postURL += '-integ' + integNumber;\n }\n }\n postURL += '.mathworks.com/udc/service/v1/events';\n return postURL;\n }\n }\n _exports.default = DirectSender;\n return _exports.default;\n});\n//# sourceMappingURL=DirectSender.js.map\n","\"use strict\";\n\ndefine([], function () {\n const levels = {\n DEBUG: 5,\n LOG: 4,\n TABLE: 4,\n TIME: 4,\n DIR: 4,\n INFO: 3,\n WARN: 2,\n ASSERT: 1,\n ERROR: 1\n };\n Object.freeze(levels);\n return levels;\n});\n//# sourceMappingURL=Levels.js.map\n","\"use strict\";\n\ndefine(['mw-log/util/LogUtils'], function (LogUtils) {\n function createBacklog(size) {\n let backlog = {};\n let messages = [];\n LogUtils.makeReadOnlyProperty(backlog, 'size', size);\n let index = 0;\n\n backlog.add = function (message) {\n messages[index] = message;\n index = (index + 1) % backlog.size;\n };\n\n backlog.applyCallback = function (callback) {\n let start = index + 1;\n\n if (messages[start] === undefined) {\n start = 0;\n }\n\n let count = 0;\n let i = start;\n\n while (count < backlog.size && messages[i] !== undefined) {\n callback(messages[i]);\n i = (i + 1) % size;\n count++;\n }\n };\n\n return backlog;\n }\n\n let backlogMaker = {};\n backlogMaker.create = createBacklog;\n return backlogMaker;\n});\n//# sourceMappingURL=Backlog.js.map\n","define([\"mw-log/Log\"], function (Log) {\n \"use strict\";\n\n var _exports = {};\n // Copyright 2023 The MathWorks, Inc.\n\n const cleanUpEventType = function (eventType) {\n if (!eventType || eventType === 'click') {\n return 'clicked';\n }\n return eventType.replaceAll('_', ' ');\n };\n const cleanUpElementType = function (elementType) {\n if (!elementType) {\n return 'none';\n }\n return elementType.replaceAll('_', ' ');\n };\n const apiKeys = {\n AIRD1_INSIDE: '03d6be60-1a46-434e-be92-c17c9a50f094',\n CLOUD_CENTER: 'fdefc29f-b188-499a-890d-30a4f7e20292',\n CRASHPAD: 'c9da4ed6-644a-4894-bcec-3b89ca1004b4',\n DDUX_CLIENT: '043d5149-7660-4d1f-b76d-7ad796d9e93f',\n DESIGN_CLOUD: 'c3f23819-d508-4150-908e-ba277b1ccf14',\n DESKTOP_MATLAB: 'd8c22ba3-fc0f-4beb-99fc-a109fe9abba9',\n DESKTOP_MSH: '6a221899-611e-4316-ac1c-fbe5ea3a73e6',\n DOC_FEEDBACK: '5bbcb96c-9bb4-4aa2-8ac5-e9f6901ce151',\n GDS: '4b6b6a6b-9f97-4cd5-a3d9-5ddd4884bb9e',\n INSTALLER: '8d12fc5b-5fe5-4643-9b52-10faf10df251',\n MATLABCONNECTOR: 'd9bcd6e7-62b6-4373-b730-3099fef5ca76',\n MATLAB_BATCH: '79afbc4d-971b-452e-acdf-f74571bed523',\n MATLAB_EXTENSION_FOR_VSCODE: '9f77ade3-ae53-4257-8ce9-31f102b34679',\n MATLAB_HOME: '0e53a0f2-a207-4268-90c0-0af01305332c',\n MATLAB_MOBILE: 'c576cb32-359d-4404-856e-cc5d1be06ce0',\n MATLAB_ONLINE: '86d464a0-b0c4-4c8d-a2bd-fa21d43f91f9',\n MATLAB_PACKAGE_MANAGER: '60a2d7f8-da8e-4751-927c-718c4d3d89c5',\n MATLAB_PLAYGROUND: '4f11a381-8a6f-4ac1-a9e1-83691100993c',\n MODELSCAPE: '48973898-99b8-417e-9511-10826c84146c',\n MOSH: 'd4401310-6800-49c2-978a-d80f1d51edd4',\n MOSH_MSH: '426f34b7-48e4-4518-87ba-6b1f0dd43ac0',\n MPI: 'e3847681-5030-46fe-8f73-e64bf7ed5538',\n ONLINE_COURSES: '96d79d60-e6f9-48da-8fc6-7358f335406a',\n POLYSPACE: 'af6fa465-294f-4b72-a942-b53571cbd423',\n PRODUCT_INSTALLER_V2: '86aa5b7b-e4b6-4b3f-9226-7d816bea98aa',\n PRODUCT_UNINSTALLER: '36703c42-9391-4aec-b2f6-3adbf00fb51c',\n SEGV: '6dbe05e3-59cc-4267-ae52-f094e1b643c8',\n SSI: '51dd5d17-5788-4df6-827c-389ff6198cf6',\n UNIFIED_ADDON_INSTALLER: 'b09519c4-8e49-4dee-b1eb-a03e4b11627a',\n UPDATES_INSTALLER: '15af626c-7fc5-42ca-9d1e-ba3e3ddc6cac',\n UPDATE_INSTALLER_V2: 'af238f5a-6efa-4f62-a77e-66b9c72f4b1f',\n VRD: 'a96ba611-1db2-44cc-a4a8-d12835c2903a',\n WEB_PAGE_METRICS: '2369b91c-a64f-11ec-b909-0242ac120002'\n };\n const sendEventToServer = function (eventType, event, sendProperties) {\n let eventData;\n let eventKey;\n if (eventType === 'telemetry') {\n /* Example telemetry event data\n \"eventData\": {\n \"logDDUXData\": {\n \"product\": \"ML\",\n \"keyValues\": {\n \"activityState\": \"active\",\n \"activityType\": \"UI\",\n \"previousState\": \"idle\",\n \"transitionTime\": \"2020-12-24T13:32:41.876\"\n }\n }\n }\n */\n eventData = {\n logDDUXData: {\n product: event.product,\n keyValues: event.data\n }\n };\n eventKey = event.eventKey;\n } else if (eventType === 'uiEvent') {\n /* Example UI event data\n \"eventData\": {\n \"uiEvent\": {\n \"productName\": \"MATLAB\",\n \"uiScope\": \"App Designer\",\n \"elementId\": \"appDesignerToolstrip.layoutTab.tab\",\n \"elementType\": \"toolstrip tab\",\n \"eventType\": \"clicked\",\n \"values\": {\n \"entry\": [\n {\"key\": \"subscope\",\n \"value\": \"toolstrip\"\n }\n ]\n }\n }\n */\n eventData = {\n uiEvent: {\n productName: event.product,\n uiScope: event.scope,\n elementId: event.elementId,\n elementType: cleanUpElementType(event.elementType),\n eventType: cleanUpEventType(event.eventType)\n }\n };\n eventKey = 'MATLAB_DDUX_UI_EVENT';\n // Find and store any key-value pairs other than the above standard pairs\n const keyValuePairs = [];\n let key;\n let value;\n for ([key, value] of Object.entries(event)) {\n if (key !== 'product' && key !== 'scope' && key !== 'elementId' && key !== 'elementType' && key !== 'eventType') {\n if (key === 'subScope') {\n key = 'subscope';\n }\n keyValuePairs.push({\n key: key,\n value: value\n });\n }\n }\n if (keyValuePairs.length > 0) {\n eventData.values = {\n entry: keyValuePairs\n };\n }\n } else {\n Log.info('Direct send to server not yet supported for ' + eventType + ' events');\n return;\n }\n const eventDataString = JSON.stringify(eventData);\n const eventEntry = {\n sessionKey: sendProperties.sessionKey,\n eventKey: eventKey,\n eventDate: new Date().toISOString().slice(0, 23),\n // Slice off trailing 'Z'\n eventData: eventDataString\n };\n if (event.appComponent) {\n eventEntry.applicationComponent = event.appComponent;\n }\n const message = {\n Event: [eventEntry]\n };\n fetch(sendProperties.postUrl, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'x-mw-udc-client-version': '1.0',\n 'x-mw-udc-application-name': sendProperties.applicationName,\n 'x-mw-udc-application-version': sendProperties.applicationVersion,\n 'x-mw-authentication': sendProperties.applicationKey || apiKeys[sendProperties.applicationName]\n },\n body: JSON.stringify(message)\n }).then(response => {\n if (!response.ok) {\n Log.warn('DDUX post failed, code = ' + response.status + ' (' + response.statusText + ')');\n }\n }).catch(error => {\n Log.warn('DDUX post error ' + error);\n });\n };\n _exports.default = sendEventToServer;\n return _exports.default;\n});\n//# sourceMappingURL=DirectSendFunction.js.map\n","define([\"mw-messageservice/MessageService\", \"./Sender\", \"mw-utils/Utils\"], function (MessageService, Sender, Utils) {\n \"use strict\";\n\n var _exports = {};\n /**\n * Copyright 2018-2023 The MathWorks, Inc.\n */\n\n const USAGE_SETUP_CHANNEL = '/UsageSetup';\n const USAGE_DATA_CHANNEL = '/UsageData';\n const USAGE_RESPONSE_CHANNEL = '/UsageResponse';\n\n /**\n * Defines class that sends DDUX data via backend NATLAB\n * @private\n */\n class MatlabSender extends Sender {\n /**\n * Constructor - Initiates communication with the backend MATLAB\n *\n * @param loggerProperties {object} supplies default values for certain event attributes.\n * @param loggerProperties.product {string} identifies the product for all UI event and\n * telemetry logs unless overriden\n * @param loggerProperties.scope {string} identifies the scope for all UI event logs\n * unless overridden.\n * @param loggerProperties.applicationName {string} the name of the application logging data. Optional,\n * if not specified the application will that of the back end MATLAB.\n * @param loggerProperties.applicationVersion {string} the version of the application logging data;\n * Optional, if not specified the application version will be that of the backed MATLAB.\n */\n constructor(loggerProperties) {\n super();\n MessageService.start();\n this._channel = USAGE_DATA_CHANNEL + '/' + Utils.generateUuid();\n this._responseChannel = USAGE_RESPONSE_CHANNEL + '/' + Utils.generateUuid();\n const message = {\n type: 'start',\n product: loggerProperties.product,\n scope: loggerProperties.scope,\n channel: this._channel,\n responseChannel: this._responseChannel,\n url: typeof window !== 'undefined' ? window.location.href : 'unknown URL',\n title: document.title\n };\n if (loggerProperties.applicationName) {\n message.applicationName = loggerProperties.applicationName;\n }\n if (loggerProperties.applicationVersion) {\n message.applicationVersion = loggerProperties.applicationVersion;\n }\n MessageService.publish(USAGE_SETUP_CHANNEL, message);\n }\n\n /**\n * Terminates communication with the backend MATLAB\n */\n stop() {\n MessageService.publish(USAGE_SETUP_CHANNEL, {\n type: 'stop',\n channel: this._channel,\n responseChannel: this._responseChannel\n });\n }\n\n /**\n * Sends an event to the MATLAB backend\n *\n * @param eventType \"telemetry\", \"uiEvent\" or \"composition\"\n * @param event the attributes that define the event\n */\n sendEvent(eventType, event) {\n // To Consider: Either use wrapper to convey 'messageType' or change to a name unlikely\n // to conflict, such as _messageType.\n event.messageType = eventType;\n MessageService.publish(this._channel, event);\n }\n }\n _exports.default = MatlabSender;\n return _exports.default;\n});\n//# sourceMappingURL=MatlabSender.js.map\n","define([\"dojo/_base/lang\", \"dojo/aspect\", \"dojo/on\", \"./MessageServiceBase\"], function (lang, aspect, on, MessageServiceBase) {\n \"use strict\";\n\n var _exports = {};\n // Copyright 2021-2024 The MathWorks, Inc.\n // Used for Backwards compatiblility\n /**\n *\n * @param messageServiceDelgateInstance\n */\n _exports.default = function createMessageServiceDefaultInstance(messageServiceDelgateInstance) {\n const service = new MessageServiceBase();\n const messageServiceInstance = {\n messageService: service,\n subscribe: lang.hitch(service, 'subscribe'),\n unsubscribe: lang.hitch(service, 'unsubscribe'),\n publish: lang.hitch(service, 'publish'),\n start: lang.hitch(service, 'start'),\n stop: lang.hitch(service, 'stop'),\n isRunning: lang.hitch(service, 'isStarted'),\n // backwards compatibility isRunning==isStarted\n isStarted: lang.hitch(service, 'isStarted'),\n isConnected: lang.hitch(service, 'isConnected'),\n isFatallyDisconnected: lang.hitch(service, 'isFatallyDisconnected'),\n isDisconnected: lang.hitch(service, 'isDisconnected'),\n // for testing/debugging purposes\n setLatency: lang.hitch(service, 'setLatency'),\n setErrorRate: lang.hitch(service, 'setErrorRate'),\n getTransport: lang.hitch(service, 'getTransport'),\n onConnected: function () {},\n onDisconnected: function () {},\n onReconnected: function () {},\n onFatallyDisconnected: function () {},\n onNotConnected: function () {},\n on: function (event, handler) {\n return on(this.messageService, event, handler);\n },\n handleMessage: lang.hitch(service, 'handleMessage'),\n // Used in MotwApplication to turn off start until Worker is Available.\n internalMotwDisableStart: function () {\n this._startFunction = this.start;\n this.start = function () {};\n },\n // Used in MotwApplication to turn on start once Worker is Available.\n internalMotwEnableStart: function () {\n if (this._startFunction) {\n this.start = this._startFunction;\n this._startFunction = null;\n }\n }\n };\n aspect.after(service, 'onConnected', lang.hitch(messageServiceInstance, 'onConnected'), true);\n aspect.after(service, 'onDisconnected', lang.hitch(messageServiceInstance, 'onDisconnected'), true);\n aspect.after(service, 'onReconnected', lang.hitch(messageServiceInstance, 'onReconnected'), true);\n aspect.after(service, 'onFatallyDisconnected', lang.hitch(messageServiceInstance, 'onFatallyDisconnected'), true);\n aspect.after(service, 'onNotConnected', lang.hitch(messageServiceInstance, 'onNotConnected'), true);\n service.setDelegate(messageServiceDelgateInstance);\n return messageServiceInstance;\n };\n return _exports.default;\n});\n//# sourceMappingURL=createMessageServiceDefaultInstance.js.map\n","define([\"dojo/_base/declare\", \"dojo/_base/lang\", \"dojo/aspect\", \"dojo/Deferred\", \"mw-log/Log\", \"./MessageServiceState\", \"./isValidChannel\", \"./transportEnums\"], function (declare, lang, aspect, Deferred, Log, MessageServiceState, isValidChannel, transportEnums) {\n \"use strict\";\n\n var _exports = {};\n /* Copyright 2012-2024 The MathWorks, Inc. */\n /**\n * This is the base implementation of the message service. It is responsible for lifecycle state\n * and subscription dispatching. It has a delegate message service which it uses to perform\n * actions. The delegate has very little state and returns promises and a couple events to\n * signal to this class.\n */\n _exports.default = declare([MessageServiceState], {\n logSubscriptions: false,\n constructor: function () {\n this.batching = true;\n this.typeSerializers = [];\n this.typeDeserializers = {};\n this.channelSubscriptions = {}; // keep track of subscriptions\n this._queuedOps = [];\n\n // Used to track if messageservice connected\n // Many teams start MessageService when there is no\n // server available. If we reject messages in this\n // situation we will cause a lot of test failures in\n // bat - so make sure that we have \"connected\" at least\n // once before rejecting messages on a disconnect\n this._hasConnected = false;\n },\n setDelegate: function setDelegate(delegate) {\n this.inherited('setDelegate', setDelegate, arguments);\n aspect.after(this._delegate, 'onMessage', lang.hitch(this, this.handleMessage), true);\n },\n /**\n * Publish a message to a channel\n * @param {string} channel The channel to publish to\n * @param {any} data The message\n * @returns {Promise}\n */\n publish: function (channel, data) {\n if (!isValidChannel(channel)) {\n throw new Error(`Illegal argument: invalid channel name ${channel}`);\n }\n if (this.isConnected()) {\n const promise = this._queuePublish(channel, this.serialize(data));\n this._deferProcessQueue();\n return promise;\n } else {\n return this._queuePublish(channel, this.serialize(data));\n }\n },\n /**\n * Subscribe to a channel\n * @param {string} channel The channel to subscribe to\n * @param {Function} handler Handler function (can be a string if the scope is specified)\n * @param scope Scope to execute the handler function in\n * @returns {Promise}\n */\n subscribe: function (channel, handler, scope) {\n if (!isValidChannel(channel)) {\n throw new Error(`Illegal argument: invalid channel name ${channel}`);\n }\n if (this.logSubscriptions) {\n Log.info('MessageService subscribe: ' + channel, handler, scope);\n }\n const promise = this._queueSubscribe(channel, handler, scope);\n // Always add handler up front becuase we will remove in unsubscribe\n // even if the the underlying doSubscribe fails\n this._addHandler(this.channelSubscriptions, channel, handler, scope);\n promise.catch(() => {\n // We don't care if the handler is already removed or gone.\n // this is just for cleanup and it might have been cleaned up\n // before the promise was fulfilled.\n if (promise.isCanceled()) {\n // some downstream team app would explicitly cancel this promise;\n // in such case, do not remove the channel from channelSubscriptions list\n // Also note that cancel API is in dojo/deferred, but not in native Promise\n return;\n }\n this._removeHandler(this.channelSubscriptions, channel, handler, scope);\n });\n if (this.isConnected()) {\n this._deferProcessQueue();\n }\n return promise;\n },\n /**\n * Unsubscribe from a channel. The arguments must be the exact same as used to subscribe.\n * @param {string} channel The channel to unsubscribe from\n * @param {Function} handler Handler function (can be a string if the scope is specified)\n * @param scope Scope used to execute the handler function in\n */\n unsubscribe: function (channel, handler, scope) {\n if (!isValidChannel(channel)) {\n throw new Error(`Illegal argument: invalid channel name ${channel}`);\n }\n if (this.logSubscriptions) {\n Log.info('MessageService unsubscribe: ' + channel, handler, scope);\n }\n const exists = this._removeHandler(this.channelSubscriptions, channel, handler, scope);\n if (exists) {\n if (this._removeQueuedMatchingSubscribe(channel, handler, scope)) {\n return new Deferred().resolve();\n } else {\n if (this.isConnected()) {\n const promise = this._queueUnsubscribe(channel, handler, scope);\n this._deferProcessQueue();\n return promise;\n } else {\n return new Deferred().resolve();\n }\n }\n } else {\n Log.error('Not subscribed to channel: ' + channel + \", can't unsubscribe.\");\n return new Deferred().reject('Not subscribed to channel: ' + channel + \", can't unsubscribe.\");\n }\n },\n /**\n * Manually flush any queued operations (subscribe, unsubscribe, publish).\n */\n flush: function () {\n if (this.isConnected()) {\n this._processQueue();\n } else {\n throw new Error('Can only manually flush the queue when connected.');\n }\n },\n setLatency: function (latency) {\n if (this._delegate && this._delegate.doSetLatency) {\n this._delegate.doSetLatency(latency);\n }\n },\n setErrorRate: function (errorRate) {\n if (this._delegate && this._delegate.doSetErrorRate) {\n this._delegate.doSetErrorRate(errorRate);\n }\n },\n /**\n * Returns transport type if we are connected\n * This is \"unknown\", \"long-polling\", or \"websockets\"\n * New transports may be added in which case additional\n * return values will be possible.\n * @returns {string} Name of the transport used by messageservice to communicate\n */\n getTransport: function () {\n if (this._delegate && this._delegate.getTransport) {\n return this._delegate.getTransport();\n }\n return transportEnums.UNKNOWN;\n },\n _enterDisconnected: function _enterDisconnected() {\n this.inherited('_enterDisconnected', _enterDisconnected, arguments);\n this._rejectQueue();\n },\n _enterConnecting: function _enterConnecting() {\n this.inherited('_enterConnecting', _enterConnecting, arguments);\n // clear the flag that says if we subscribed or not yet\n Object.keys(this.channelSubscriptions).forEach(subscription => {\n this.channelSubscriptions[subscription].subscribed = false;\n });\n },\n _enterConnected: function _enterConnected() {\n this._hasConnected = true;\n this.inherited('_enterConnected', _enterConnected, arguments);\n this._processQueue();\n },\n _enterDisconnecting: function _enterDisconnecting() {\n this._processQueue();\n this.inherited('_enterDisconnecting', _enterDisconnecting, arguments);\n },\n _enterFatallyDisconnected: function _enterFatallyDisconnected() {\n this.inherited('_enterFatallyDisconnected', _enterFatallyDisconnected, arguments);\n this._rejectQueue();\n },\n _queuePublish: function (channel, data) {\n const deferred = new Deferred();\n this._queuedOps.push({\n type: 'publish',\n channel,\n data,\n deferred\n });\n return deferred.promise;\n },\n _queueSubscribe: function (channel, handler, scope) {\n const deferred = new Deferred();\n this._queuedOps.push({\n type: 'subscribe',\n channel,\n handler,\n scope,\n deferred\n });\n return deferred.promise;\n },\n /**\n * Looks for an exising subscription in the queue (working backwards)\n * If a subscription exists the function removes it from the queue,\n * fulfills the promise, and returns true.\n *\n * If no matching subscription exists in the queue return false.\n * @private\n * @param {*} channel\n * @param {*} handler\n * @param {*} scope\n * @returns {boolean} True is subscribe is found in queue, false otherwise\n */\n _removeQueuedMatchingSubscribe: function (channel, handler, scope) {\n let queuedItem;\n for (let i = this._queuedOps.length - 1; i >= 0; i -= 1) {\n queuedItem = this._queuedOps[i];\n if (queuedItem.type === 'subscribe' && queuedItem.channel === channel && queuedItem.handler === handler && queuedItem.scope === scope) {\n // This unsubscribe is being requested while the \"subscribe\" is still in the\n // Queue. Don't bother queuing the unsubscribe, and just fulfull the subscribe.\n this._queuedOps.splice(i, 1);\n const delegateConnected = this._delegate && this._delegate.delegateConnected();\n const connected = this.isConnected() && delegateConnected;\n if (connected) {\n // Resolve if we are connected\n queuedItem.deferred.resolve();\n } else {\n // Normally we would reject subscribe, but this would\n // cause an incompatability, as teams are not expecting\n // rejections due to an unsubscribe before starting MessageService\n\n // We could resolve the subscription, but this would also cause an incompatability.\n // since resolving the subscription could indicate that we are \"connected\"\n\n // Behavior is tested and locked down that these \"lost\" subscriptions just\n // have their promises \"left hanging\" - neither resolved nor rejected.\n }\n return true;\n }\n }\n },\n _queueUnsubscribe: function (channel, handler, scope) {\n const deferred = new Deferred();\n this._queuedOps.push({\n type: 'unsubscribe',\n channel,\n handler,\n scope,\n deferred\n });\n return deferred.promise;\n },\n _processQueue: function () {\n const delegateConnected = this._delegate && this._delegate.delegateConnected();\n const connected = this.isConnected() && delegateConnected;\n if (!connected && this._currentState !== 'disconnecting') {\n // don't process the queue if we don't have a connection to the server\n return;\n }\n this._delegate.doStartBatch();\n const queue = this._queuedOps;\n this._queuedOps = [];\n queue.forEach(function (op) {\n let promise;\n if (op.type === 'publish') {\n promise = this._delegate.doPublish(op.channel, op.data);\n } else if (op.type === 'subscribe') {\n promise = this._doSubscribe(op.channel, op.handler, op.scope);\n } else if (op.type === 'unsubscribe') {\n promise = this._doUnsubscribe(op.channel, op.handler, op.scope);\n }\n\n // connect the callbacks of the promise to the supplied deferred to pass along the\n // result.\n promise.then(op.deferred.resolve, op.deferred.reject);\n }, this);\n this._delegate.doEndBatch();\n },\n _rejectQueue: function () {\n // Many teams start MessageService when there is no\n // server available. If we reject messages in this\n // situation we will cause a lot of test failures in\n // bat - so make sure that we have \"connected\" at least\n // once before rejecting messages on a disconnect\n if (this._hasConnected) {\n for (let i = 0; i < this._queuedOps.length; i += 1) {\n const queuedItem = this._queuedOps[i];\n queuedItem.deferred.reject(new Error('MessageService disconnected. Discarding queued message'));\n }\n this._queuedOps = [];\n }\n this._hasConnected = false;\n },\n _deferProcessQueue: function () {\n if (this.batching && !this._deferredTimeout) {\n const that = this;\n this._deferredTimeout = setTimeout(function () {\n that._deferredTimeout = false;\n that._processQueue();\n }, 0);\n } else if (!this.batching) {\n this._processQueue();\n }\n },\n _doSubscribe: function (channel) {\n if (this.channelSubscriptions[channel].subscribed) {\n return new Deferred().resolve();\n } else {\n const result = this._delegate.doSubscribe(channel);\n this.channelSubscriptions[channel].subscribed = true;\n result.catch(() => {\n // Only unset this if we failed to subscribe\n // So the next request will try to resubscribe\n this.channelSubscriptions[channel].subscribed = false;\n });\n return result;\n }\n },\n _doUnsubscribe: function (channel) {\n if (!this.channelSubscriptions[channel]) {\n // No channels are listed when no one is listening\n // for this channel anymore - the channelSubscription\n // is removed before this is called.\n return this._delegate.doUnsubscribe(channel);\n } else {\n return new Deferred().resolve();\n }\n },\n /**\n * Handle messages from the server.\n * @param {object} message The message to be handled\n */\n handleMessage: function (message) {\n let i;\n if (message && message.channel) {\n if (message.data) {\n message.data = this.deserialize(message.data);\n }\n const pathParts = message.channel.split('/');\n for (i = 1; i <= pathParts.length; i += 1) {\n // call any subscribers are registered with a **\n this._callHandlers(this.channelSubscriptions, pathParts.slice(0, i).concat('**').join('/'), message);\n }\n\n // call any subs with * in their channel (/chan1/* matches /chan1/star)\n this._callHandlers(this.channelSubscriptions, pathParts.slice(0, pathParts.length - 1).concat('*').join('/'), message);\n // the base of the channel should match as well (/chan1/* matches /chan1)\n this._callHandlers(this.channelSubscriptions, pathParts.concat('*').join('/'), message);\n\n // call exact match subscribers\n this._callHandlers(this.channelSubscriptions, message.channel, message);\n }\n },\n /**\n * Register a message service to handle all messages published on a particular channel.\n * @param {string} channel The channel to redirect to the mock message service.\n * @param {Function} handler The message service handler (can be a string if the scope is specified).\n * @param scope The scope to execute the handler with.\n */\n registerMessageHandler: function (channel, handler, scope) {\n Log.error('registerMessageHandler is not supported any more.');\n },\n /**\n * Deregister a message service handler.\n * @param {string} channel The channel to redirect to the mock message service.\n * @param {Function} handler The message service handler (can be a string if the scope is specified).\n * @param scope The scope to execute the handler with.\n */\n deregisterMessageHandler: function (channel, handler, scope) {\n Log.error('deregisterMessageHandler is not supported any more.');\n },\n registerTypeSerializer: function (typeMatcher, type, serializer) {\n this.typeSerializers.push({\n typeMatcher,\n type,\n serializer\n });\n },\n registerTypeDeserializer: function (type, deserializer) {\n this.typeDeserializers[type] = deserializer;\n },\n serialize: function (data) {\n if (Array.isArray(data)) {\n return this._serializeArray(data);\n } else if (data === null || data === undefined || typeof data === 'number' || typeof data === 'boolean' || lang.isString(data)) {\n return data;\n } else {\n return this._serializeObject(data);\n }\n },\n deserialize: function (data) {\n if (Array.isArray(data)) {\n return this._deserializeArray(data);\n } else if (typeof data === 'number' || typeof data === 'boolean' || lang.isString(data)) {\n return data;\n } else {\n return this._deserializeObject(data);\n }\n },\n _addHandler: function (channelHandlers, channel, handler, scope) {\n scope = scope || this;\n if (typeof handler === 'string' && typeof scope[handler] !== 'function') {\n // not a valid handler\n Log.warn('Not adding invalid handler: ' + handler);\n return;\n }\n let subscriptions = channelHandlers[channel];\n if (!subscriptions) {\n subscriptions = [];\n channelHandlers[channel] = subscriptions;\n }\n const subscription = {\n channel,\n handler,\n scope\n };\n subscriptions.push(subscription);\n subscriptions.sort(function (a) {\n return a.exclusive ? -1 : 0;\n });\n },\n _removeHandler: function (channelHandlers, channel, handler, scope) {\n scope = scope || this;\n const subscriptions = channelHandlers[channel];\n const index = this._getHandlerIndex(subscriptions, {\n handler,\n scope\n });\n if (index >= 0) {\n subscriptions.splice(index, 1);\n }\n if (!subscriptions || subscriptions.length === 0) {\n delete channelHandlers[channel]; // clean up the array\n }\n return index >= 0;\n },\n _callHandlers: function (channelHandlers, channel, message) {\n let subscriptions;\n let i;\n if (Object.prototype.hasOwnProperty.call(channelHandlers, channel)) {\n subscriptions = channelHandlers[channel];\n for (i = 0; i < subscriptions.length; i += 1) {\n try {\n if (typeof subscriptions[i].handler === 'string') {\n // This next line is not a useless call\n // the \"this\" param in here is:\n // - subscriptions[i].scope\n // If we used a regular function call, this would be:\n // - subscriptions[i].scope[subscriptions[i].handler]\n subscriptions[i].scope[subscriptions[i].handler].call(\n // eslint-disable-line no-useless-call\n subscriptions[i].scope, message);\n } else {\n subscriptions[i].handler.call(subscriptions[i].scope, message);\n }\n } catch (e) {\n const jsonIndentation = 2;\n Log.error('Error while executing message handler on channel: ' + channel + ', message: ' + JSON.stringify(message, null, jsonIndentation) + ', error: ', e);\n }\n }\n }\n },\n _getHandlerIndex: function (handlers, handler) {\n if (!handlers) {\n return -1;\n }\n let i;\n for (i = 0; i < handlers.length; i += 1) {\n if (handler.handler === handlers[i].handler && handler.scope === handlers[i].scope) {\n return i;\n }\n }\n return -1;\n },\n _serializeObject: function (data) {\n let i;\n for (i = 0; i < this.typeSerializers.length; i += 1) {\n const serializer = this.typeSerializers[i];\n if (serializer.typeMatcher(data)) {\n return {\n __type__: serializer.type,\n __value__: serializer.serializer.call(this, data)\n };\n }\n }\n if (data instanceof window.Image) {\n // ignore images\n return data;\n }\n\n // ESM has strict mode on by default, which does not allow modifying an object if it's defined with Object.freeze(data);\n // so we need to make a new object and clone the property over.\n const returnedData = {};\n for (const key in data) {\n if (Object.prototype.hasOwnProperty.call(data, key)) {\n // CometD uses JSON.stringify, which only serialize own properties\n returnedData[key] = this.serialize(data[key]);\n }\n }\n return returnedData;\n },\n _serializeArray: function (data) {\n // array can also be read only, so make a copy\n const returnedArray = Array.from(data);\n let i;\n const len = returnedArray.length;\n for (i = 0; i < len; i += 1) {\n returnedArray[i] = this.serialize(returnedArray[i]);\n }\n return returnedArray;\n },\n _deserializeObject: function (data) {\n let key;\n if (data === undefined || data === null) {\n return null;\n }\n if (Object.prototype.hasOwnProperty.call(data, '__type__') && Object.prototype.hasOwnProperty.call(data, '__value__')) {\n try {\n return this.typeDeserializers[data.__type__].call(this, data.__value__);\n } catch (e) {\n Log.error('Error while trying to deserialize: ', data, 'Error: ', e);\n }\n }\n for (key in data) {\n if (Object.prototype.hasOwnProperty.call(data, key) && data[key] !== null && data[key] !== undefined) {\n data[key] = this.deserialize(data[key]);\n }\n }\n return data;\n },\n _deserializeArray: function (data) {\n let i;\n const len = data.length;\n for (i = 0; i < len; i += 1) {\n data[i] = this.deserialize(data[i]);\n }\n return data;\n }\n });\n return _exports.default;\n});\n//# sourceMappingURL=MessageServiceBase.js.map\n","define([\"dojo/_base/declare\", \"dojo/Evented\", \"dojo/_base/lang\", \"dojo/aspect\", \"mw-statemachine/StateMachine\", \"mw-log/Log\"], function (declare, Evented, lang, aspect, StateMachine, Log) {\n \"use strict\";\n\n var _exports = {};\n /* Copyright 2012-2024 The MathWorks, Inc. */\n /**\n * This is the base implementation of the message service. Other message service implementations\n * can register with it to provide the specific type of transport (ie: request/response, cometd,\n * etc).\n */\n _exports.default = declare([Evented], {\n logStateChanges: false,\n constructor: function () {\n this._stateOptions = {\n context: this,\n name: 'WraDataService',\n namespace: 'MOTW.wra',\n defaultSubstate: 'disconnected',\n substates: {\n disconnected: {\n transitions: {\n onEnterState: this._enterDisconnected,\n start: 'connecting'\n }\n },\n connecting: {\n transitions: {\n onEnterState: this._enterConnecting,\n _connectSuccess: 'connected',\n _connectFailure: 'fatallyDisconnected',\n stop: 'disconnected'\n }\n },\n connected: {\n transitions: {\n onEnterState: this._enterConnected,\n _reconnect: 'connecting',\n stop: 'disconnecting'\n }\n },\n disconnecting: {\n transitions: {\n onEnterState: this._enterDisconnecting,\n _disconnectSuccess: 'disconnected',\n _disconnectFailure: 'disconnected',\n 'timeout 2': 'disconnected'\n }\n },\n fatallyDisconnected: {\n transitions: {\n onEnterState: this._enterFatallyDisconnected,\n stop: 'disconnected'\n }\n }\n }\n };\n },\n setDelegate: function (delegate) {\n // only update the delegate if it has changed\n if (this._delegate !== delegate) {\n this._delegate = delegate;\n this._states = new StateMachine(this._stateOptions);\n aspect.after(this._states, 'onEnterState', lang.hitch(this, this._enterState), true);\n this._states.start();\n }\n const that = this;\n aspect.after(this._delegate, 'onConnectionError', function () {\n that._changeStateToConnecting();\n }, true);\n aspect.after(this._delegate, 'onConnectionFails', function () {\n that._currentState = 'fatallyDisconnected';\n that._enterFatallyDisconnected();\n }, true);\n aspect.after(this._delegate, 'onConnectionSuccess', function () {\n that._currentState = 'connected';\n that._enterConnected();\n }, true);\n },\n _changeStateToConnecting: function () {\n Log.info('something wrong with connection, so changing state to connecting now, cometd is trying to connect again on its own');\n this._currentState = 'connecting';\n this.onNotConnected();\n },\n // this isn't the obj that registered events, see MessageServiceBase.js\n onConnected: function () {\n this.emit('connected');\n },\n // connected for the first time or a reconnect\n\n onNewlyConnected: function () {},\n // connected for the first time (since last disconnect)\n\n onDisconnected: function () {\n this.emit('disconnected');\n },\n // entered the disconnected state\n\n onReconnected: function () {\n this.emit('reconnected');\n },\n // reconnected after first being connected\n\n onFatallyDisconnected: function () {\n this.emit('fatallyDisconnected');\n },\n // error state\n\n onNotConnected: function () {\n this.emit('notConnected');\n },\n // no longer connected\n\n isStarted: function () {\n return this._currentState !== 'disconnecting' && this._currentState !== 'disconnected';\n },\n isConnected: function () {\n return this._currentState === 'connected';\n },\n isFatallyDisconnected: function () {\n return this._currentState === 'fatallyDisconnected';\n },\n isDisconnected: function () {\n return this._currentState === 'disconnected';\n },\n start: function () {\n this._forceStop = false;\n },\n stop: function () {\n this._forceStop = true;\n },\n _enterState: function (newState) {\n const oldState = this._currentState;\n this._currentState = newState;\n if (this.logStateChanges) {\n Log.info('MessageService state change: ' + oldState + ' -> ' + newState);\n }\n if (oldState === 'connected') {\n this.onNotConnected();\n }\n if (newState === 'connected' && this._previouslyConnected) {\n this.onReconnected();\n } else if (newState === 'connected' && !this._previouslyConnected) {\n this.onNewlyConnected();\n }\n },\n _enterDisconnected: function () {\n this._previouslyConnected = false;\n this._delegate.cleanup();\n if (this._forceStop) {\n this._delegate.destructCometd();\n }\n this.onDisconnected();\n },\n _enterConnecting: function () {\n this._delegate.cleanup(); // cleanup happens when entering \"reconnecting\", and now all reconnecting is wired to \"connecting\"\n this._delegate.connect(this.channelSubscriptions).then(this._connectSuccess, this._connectFailure);\n },\n _reconnect: function () {},\n _connectSuccess: function () {},\n _connectFailure: function () {},\n _timeoutAction: function () {\n if (this.logStateChanges) {\n Log.info('MessageService timeout:', arguments);\n }\n },\n _enterConnected: function () {\n if (this._previouslyConnected) {\n Log.info('Successfully connected.');\n }\n this._previouslyConnected = true;\n this.onConnected();\n },\n _enterFatallyDisconnected: function () {\n this.onFatallyDisconnected();\n },\n _enterDisconnecting: function () {\n this._delegate.disconnect().then(this._disconnectSuccess, this._disconnectFailure);\n },\n _disconnectSuccess: function () {},\n _disconnectFailure: function () {}\n });\n return _exports.default;\n});\n//# sourceMappingURL=MessageServiceState.js.map\n","\ndefine([\n \"dojo/_base/declare\",\n\n \"./statemachineimpl/State\"\n], function (declare, State) {\n\n //noinspection JSUnusedLocalSymbols\n /**\n * The StateMachine class is the main entry point into the state system. Construct one of these\n * by passing it a declarative structure which defines the states, and transitions of the\n * system. See the StateMachineTest suite of tests for examples of how to declare a state\n * machine.\n *\n * One example would be:\n var stateOptions = {\n context: mockContext,\n name: \"widget1\",\n namespace: \"MW.gui\",\n defaultSubstate: \"state1\",\n substates: {\n \"state1\": {\n transitions: {\n \"onEnterState\": \"enterStateFunction\",\n \"onExitState\": this.exitStateFunction,\n \"event1\": \"state2\",\n \"subscribe gotoState2\": \"state2\",\n \"subscribe gotoState3\": \"state3\"\n },\n data: {\n enteredState: 0,\n exitedState: 0\n }\n },\n \"state2\": {\n transitions: {\n \"onEnterState\": function (trigger, data) {data.enteredState += 1},\n \"subscribe gotoState3\": \"state3\"\n },\n data: {\n enteredState: 0\n }\n },\n \"state3\": {\n transitions: {\n \"event2\": \"state1\"\n }\n }\n }\n };\n var stateMachine = new StateMachine(stateOptions);\n *\n */\n return declare([], {\n constructor: function (args) {\n args.stateMachine = this;\n this.state = new State(args);\n },\n\n start: function () {\n this.state.enter();\n },\n\n stop: function () {\n this.state.exit();\n },\n\n _changeState: function (newState, otherArguments) {\n this.state.enter(newState, otherArguments);\n },\n\n onEnterState: function (newState) {},\n onExitState: function (oldState) {}\n });\n});","define([\n \"dojo/_base/declare\",\n \"dojo/_base/lang\",\n\n \"mw-log/Log\",\n\n \"./EventTrigger\",\n \"./MessageTrigger\",\n \"./RemoteTrigger\",\n \"./TimeoutTrigger\",\n \"./Transition\"\n], function (declare, lang, Log, EventTrigger, MessageTrigger, RemoteTrigger, TimeoutTrigger,\n Transition) {\n\n var State;\n State = declare([], {\n\n constructor: function (args) {\n this.stateMachine = args.stateMachine || {\n _changeState: function () {\n },\n onEnterState: function () {\n },\n onExitState: function () {\n }\n };\n\n this.namespace = args.namespace || \"\";\n this.name = args.name || this.getDefaultName();\n this.context = args.context || {};\n this.data = args.data || {};\n this.composition = args.composition || \"XOR\";\n this.defaultSubstate = args.defaultSubstate || \"\";\n this.constructSubstates(args.substates);\n this.constructTriggersAndTransitions(args.transitions);\n this.active = args.active || false;\n },\n\n getDefaultName: function () {\n var nameParts, name;\n if (this.namespace.length > 0) {\n nameParts = this.namespace.split(\".\");\n name = nameParts.pop(); // last element\n } else {\n Log.warn(\"State: state name is not specified.\");\n }\n\n return name || \"\";\n },\n\n constructSubstates: function (substates) {\n var newSubstates = {}, name, substate;\n\n for (name in substates) {\n if (substates.hasOwnProperty(name)) {\n substate = substates[name];\n if (substate.name && substate.name !== name) {\n Log.error(\"State: error constructing substate: \" + name +\n \", the specified names don't match: \" + substate.name);\n }\n substate.name = name;\n substate.namespace =\n substate.namespace || [this.namespace, this.name].join(\".\");\n substate.stateMachine = substate.stateMachine || this.stateMachine;\n substate.context = substate.context || this.context;\n\n newSubstates[substate.name] = new State(substate);\n }\n }\n\n this.substates = newSubstates;\n },\n\n constructTriggersAndTransitions: function (transitions) {\n var triggerName, newTransitions = {},\n newTriggers = [], newTrigger;\n\n for (triggerName in transitions) {\n if (transitions.hasOwnProperty(triggerName)) {\n\n newTrigger = this.constructTrigger(triggerName);\n if (newTrigger) {\n // only add new triggers if the trigger is required\n newTriggers.push(newTrigger);\n }\n\n newTransitions[triggerName] =\n this.constructTransition(triggerName, transitions[triggerName]);\n }\n }\n\n this.transitions = newTransitions;\n this.triggers = newTriggers;\n },\n\n constructTrigger: function (triggerName) {\n var nameParts, newTrigger, TriggerConstructor;\n\n nameParts = triggerName.split(\" \");\n\n if (nameParts.length === 2) {\n if (nameParts[0] === \"subscribe\") {\n TriggerConstructor = MessageTrigger;\n } else if (nameParts[0] === \"response\" || nameParts[0] === \"fault\") {\n TriggerConstructor = RemoteTrigger;\n } else if (nameParts[0] === \"timeout\") {\n TriggerConstructor = TimeoutTrigger;\n }\n\n } else if (triggerName !== \"onEnterState\" || triggerName !== \"onExitState\") {\n // onEnterState and onExitState are no-ops\n // these are internally generated so we don't need trigger objects for them\n TriggerConstructor = EventTrigger;\n }\n\n if (TriggerConstructor) {\n newTrigger = new TriggerConstructor({\n name: triggerName,\n context: this.context,\n triggerHandler: lang.hitch(this, this.handleTrigger)\n });\n }\n return newTrigger;\n },\n\n constructTransition: function (triggerName, transition) {\n var action, nextState;\n\n if (lang.isFunction(transition) || lang.isString(transition) ||\n lang.isArray(transition)) {\n\n if (triggerName === \"onEnterState\" || triggerName === \"onExitState\") {\n action = transition;\n transition = {};\n transition.action = action;\n transition.target = \"\";\n } else {\n nextState = transition;\n transition = {};\n transition.target = nextState;\n }\n }\n transition.state = this;\n\n return new Transition(transition);\n },\n\n enter: function (nextState, otherArguments) {\n if (!this.active) {\n this.active = true;\n this.enableTriggers();\n this.stateMachine.onEnterState(this.name);\n this.handleTrigger.apply(this, [\"onEnterState\"].concat(otherArguments));\n }\n if (nextState) {\n this.changeSubstates(nextState, otherArguments);\n } else {\n this.changeToDefaultSubstate(otherArguments);\n }\n },\n\n exit: function () {\n var active = this.activeSubstates();\n\n this.active = false;\n // disable triggers before exiting substates to help prevent event loops\n this.disableTriggers();\n\n active.forEach(function (substate) {\n substate.exit();\n });\n\n this.handleTrigger(\"onExitState\");\n\n this.stateMachine.onExitState(this.name);\n },\n\n enableTriggers: function () {\n this.triggers.forEach(function (trigger) {\n trigger.enable();\n });\n },\n\n disableTriggers: function () {\n this.triggers.forEach(function (trigger) {\n trigger.disable();\n });\n },\n\n handleTrigger: function (triggerName) {\n var nextState, otherArguments;\n if (this.transitions[triggerName]) {\n otherArguments = Array.prototype.slice.call(arguments, 1, arguments.length);\n nextState =\n this.transitions[triggerName].handleTrigger(triggerName, otherArguments);\n\n // only change state if the transition specified a new state.\n // this prevents a loop in onExitState.\n if (nextState) {\n\n // if the trigger function returns something other than a string,\n // pull out the arguments property and use it as the arguments for the next\n // state.\n if (!lang.isString(nextState)) {\n otherArguments = nextState.args;\n nextState = nextState.target;\n }\n\n this.stateMachine._changeState(nextState, otherArguments);\n }\n }\n },\n\n changeSubstates: function (nextState, otherArguments) {\n var active = this.activeSubstates();\n\n if (this.substates[nextState]) {\n if (active.length >= 0 && active[0].name !== nextState) {\n active.forEach(function (substate) {\n substate.exit();\n });\n }\n\n this.substates[nextState].enter(undefined, otherArguments);\n }\n },\n\n changeToDefaultSubstate: function (otherArguments) {\n if (this.activeSubstates().length === 0 && this.substates[this.defaultSubstate]) {\n this.substates[this.defaultSubstate].enter(undefined, otherArguments);\n }\n },\n\n activeSubstates: function () {\n var active = [], name;\n for (name in this.substates) {\n if (this.substates.hasOwnProperty(name) && this.substates[name].active) {\n active.push(this.substates[name]);\n }\n }\n return active;\n }\n });\n\n return State;\n});","\ndefine([\n \"dojo/_base/declare\",\n \"dojo/_base/lang\",\n \"dojo/aspect\",\n\n \"mw-log/Log\",\n \"./Trigger\"\n], function (declare, lang, aspect, Log, Trigger) {\n\n return declare(Trigger, {\n constructor: function () {\n this.connection = {};\n },\n\n enable: function () {\n // connect to the event 'name' on the context object and use hitch to ensure that the\n // name of this trigger is passed as a parameter.\n if (lang.isFunction(this.context[this.name])) {\n this.cachedFunction = this.context[this.name];\n }\n this.connection = aspect.after(\n this.context,\n this.name,\n lang.hitch(null, this.triggerHandler, this.name),\n true\n );\n },\n\n disable: function () {\n this.connection.remove();\n if (this.cachedFunction) {\n this.context[this.name] = this.cachedFunction;\n }\n }\n });\n});","\ndefine([\n \"dojo/_base/declare\",\n \"dojo/_base/lang\",\n \"dojo/topic\",\n\n \"mw-log/Log\",\n \"./Trigger\"\n], function (declare, lang, topic, Log, Trigger) {\n\n return declare(Trigger, {\n constructor: function () {\n var nameParts = this.name.split(\" \");\n if (nameParts.length < 2 || nameParts[0] !== \"subscribe\") {\n Log.error(\"Invalid trigger name for a MessageTrigger. \" +\n \"Could not parse out the message name.\");\n }\n this.messageId = nameParts[1] || \"\";\n this.subscrition = {};\n },\n\n enable: function () {\n this.subscription = topic.subscribe(this.messageId,\n lang.hitch(null, this.triggerHandler, this.name));\n },\n\n disable: function () {\n this.subscription.remove();\n }\n });\n});","\ndefine([\n \"dojo/_base/declare\",\n \"dojo/_base/lang\",\n\n \"mw-log/Log\",\n \"mw-remote/Remote\",\n \"./Trigger\"\n], function (declare, lang, Log, Remote, Trigger) {\n\n return declare(Trigger, {\n constructor: function () {\n var nameParts = this.name.split(\" \");\n if (nameParts.length < 2 || (nameParts[0] !== \"response\" && nameParts[0] !== \"fault\")) {\n Log.error(\"Invalid trigger name for a RemoteTrigger. \" +\n \"Could not parse out the type of handler.\");\n }\n if (!Remote.registerResponseHandler || !Remote.registerFaultHandler) {\n Log.error(\"The remote package is not available, \" +\n \"this type of trigger will not work.\");\n }\n this.messageId = nameParts[1] || \"\";\n this.handlerType = nameParts[0];\n },\n\n enable: function () {\n if (this.handlerType === \"response\") {\n Remote.registerResponseHandler(this.messageId,\n lang.hitch(null, this.triggerHandler, this.name));\n } else {\n Remote.registerFaultHandler(this.messageId,\n lang.hitch(null, this.triggerHandler, this.name));\n }\n },\n\n disable: function () {\n if (this.handlerType === \"response\") {\n Remote.deregisterResponseHandler(this.messageId);\n } else {\n Remote.deregisterFaultHandler(this.messageId);\n }\n }\n });\n});","define([\n\t\"./Deferred\",\n\t\"./promise/Promise\"\n], function(Deferred, Promise){\n\t\"use strict\";\n\n\t// module:\n\t//\t\tdojo/when\n\n\treturn function when(valueOrPromise, callback, errback, progback){\n\t\t// summary:\n\t\t//\t\tTransparently applies callbacks to values and/or promises.\n\t\t// description:\n\t\t//\t\tAccepts promises but also transparently handles non-promises. If no\n\t\t//\t\tcallbacks are provided returns a promise, regardless of the initial\n\t\t//\t\tvalue. Foreign promises are converted.\n\t\t//\n\t\t//\t\tIf callbacks are provided and the initial value is not a promise,\n\t\t//\t\tthe callback is executed immediately with no error handling. Returns\n\t\t//\t\ta promise if the initial value is a promise, or the result of the\n\t\t//\t\tcallback otherwise.\n\t\t// valueOrPromise:\n\t\t//\t\tEither a regular value or an object with a `then()` method that\n\t\t//\t\tfollows the Promises/A specification.\n\t\t// callback: Function?\n\t\t//\t\tCallback to be invoked when the promise is resolved, or a non-promise\n\t\t//\t\tis received.\n\t\t// errback: Function?\n\t\t//\t\tCallback to be invoked when the promise is rejected.\n\t\t// progback: Function?\n\t\t//\t\tCallback to be invoked when the promise emits a progress update.\n\t\t// returns: dojo/promise/Promise\n\t\t//\t\tPromise, or if a callback is provided, the result of the callback.\n\n\t\tvar receivedPromise = valueOrPromise && typeof valueOrPromise.then === \"function\";\n\t\tvar nativePromise = receivedPromise && valueOrPromise instanceof Promise;\n\n\t\tif(!receivedPromise){\n\t\t\tif(arguments.length > 1){\n\t\t\t\treturn callback ? callback(valueOrPromise) : valueOrPromise;\n\t\t\t}else{\n\t\t\t\treturn new Deferred().resolve(valueOrPromise);\n\t\t\t}\n\t\t}else if(!nativePromise){\n\t\t\tvar deferred = new Deferred(valueOrPromise.cancel);\n\t\t\tvalueOrPromise.then(deferred.resolve, deferred.reject, deferred.progress);\n\t\t\tvalueOrPromise = deferred.promise;\n\t\t}\n\n\t\tif(callback || errback || progback){\n\t\t\treturn valueOrPromise.then(callback, errback, progback);\n\t\t}\n\t\treturn valueOrPromise;\n\t};\n});\n","define([\"./kernel\", \"../on\", \"../has\", \"../dom-geometry\"], function(dojo, on, has, dom){\n\t// module:\n\t//\t\tdojo/_base/event\n\n\tif(on._fixEvent){\n\t\tvar fixEvent = on._fixEvent;\n\t\ton._fixEvent = function(evt, se){\n\t\t\t// add some additional normalization for back-compat, this isn't in on.js because it is somewhat more expensive\n\t\t\tevt = fixEvent(evt, se);\n\t\t\tif(evt){\n\t\t\t\tdom.normalizeEvent(evt);\n\t\t\t}\n\t\t\treturn evt;\n\t\t};\t\t\n\t}\n\t\n\tvar ret = {\n\t\t// summary:\n\t\t//\t\tThis module defines dojo DOM event API. Usually you should use dojo/on, and evt.stopPropagation() +\n\t\t//\t\tevt.preventDefault(), rather than this module.\n\n\t\tfix: function(/*Event*/ evt, /*DOMNode*/ sender){\n\t\t\t// summary:\n\t\t\t//\t\tnormalizes properties on the event object including event\n\t\t\t//\t\tbubbling methods, keystroke normalization, and x/y positions\n\t\t\t// evt: Event\n\t\t\t//\t\tnative event object\n\t\t\t// sender: DOMNode\n\t\t\t//\t\tnode to treat as \"currentTarget\"\n\t\t\tif(on._fixEvent){\n\t\t\t\treturn on._fixEvent(evt, sender);\n\t\t\t}\n\t\t\treturn evt;\t// Event\n\t\t},\n\t\n\t\tstop: function(/*Event*/ evt){\n\t\t\t// summary:\n\t\t\t//\t\tprevents propagation and clobbers the default action of the\n\t\t\t//\t\tpassed event\n\t\t\t// evt: Event\n\t\t\t//\t\tThe event object. If omitted, window.event is used on IE.\n\t\t\tif(has(\"dom-addeventlistener\") || (evt && evt.preventDefault)){\n\t\t\t\tevt.preventDefault();\n\t\t\t\tevt.stopPropagation();\n\t\t\t}else{\n\t\t\t\tevt = evt || window.event;\n\t\t\t\tevt.cancelBubble = true;\n\t\t\t\ton._preventDefault.call(evt);\n\t\t\t}\n\t\t}\n\t};\n\n\tif(has(\"extend-dojo\")){\n\t\tdojo.fixEvent = ret.fix;\n\t\tdojo.stopEvent = ret.stop;\n\t}\n\n\treturn ret;\n});\n","define([\"./sniff\", \"./_base/window\",\"./dom\", \"./dom-style\"],\n\t\tfunction(has, win, dom, style){\n\t// module:\n\t//\t\tdojo/dom-geometry\n\n\t// the result object\n\tvar geom = {\n\t\t// summary:\n\t\t//\t\tThis module defines the core dojo DOM geometry API.\n\t};\n\n\t// Box functions will assume this model.\n\t// On IE/Opera, BORDER_BOX will be set if the primary document is in quirks mode.\n\t// Can be set to change behavior of box setters.\n\n\t// can be either:\n\t//\t\"border-box\"\n\t//\t\"content-box\" (default)\n\tgeom.boxModel = \"content-box\";\n\n\t// We punt per-node box mode testing completely.\n\t// If anybody cares, we can provide an additional (optional) unit\n\t// that overrides existing code to include per-node box sensitivity.\n\n\t// Opera documentation claims that Opera 9 uses border-box in BackCompat mode.\n\t// but experiments (Opera 9.10.8679 on Windows Vista) indicate that it actually continues to use content-box.\n\t// IIRC, earlier versions of Opera did in fact use border-box.\n\t// Opera guys, this is really confusing. Opera being broken in quirks mode is not our fault.\n\n\tif(has(\"ie\") /*|| has(\"opera\")*/){\n\t\t// client code may have to adjust if compatMode varies across iframes\n\t\tgeom.boxModel = document.compatMode == \"BackCompat\" ? \"border-box\" : \"content-box\";\n\t}\n\n\tgeom.getPadExtents = function getPadExtents(/*DomNode*/ node, /*Object*/ computedStyle){\n\t\t// summary:\n\t\t//\t\tReturns object with special values specifically useful for node\n\t\t//\t\tfitting.\n\t\t// description:\n\t\t//\t\tReturns an object with `w`, `h`, `l`, `t` properties:\n\t\t//\t|\t\tl/t/r/b = left/top/right/bottom padding (respectively)\n\t\t//\t|\t\tw = the total of the left and right padding\n\t\t//\t|\t\th = the total of the top and bottom padding\n\t\t//\t\tIf 'node' has position, l/t forms the origin for child nodes.\n\t\t//\t\tThe w/h are used for calculating boxes.\n\t\t//\t\tNormally application code will not need to invoke this\n\t\t//\t\tdirectly, and will use the ...box... functions instead.\n\t\t// node: DOMNode\n\t\t// computedStyle: Object?\n\t\t//\t\tThis parameter accepts computed styles object.\n\t\t//\t\tIf this parameter is omitted, the functions will call\n\t\t//\t\tdojo/dom-style.getComputedStyle to get one. It is a better way, calling\n\t\t//\t\tdojo/dom-style.getComputedStyle once, and then pass the reference to this\n\t\t//\t\tcomputedStyle parameter. Wherever possible, reuse the returned\n\t\t//\t\tobject of dojo/dom-style.getComputedStyle().\n\n\t\tnode = dom.byId(node);\n\t\tvar s = computedStyle || style.getComputedStyle(node), px = style.toPixelValue,\n\t\t\tl = px(node, s.paddingLeft), t = px(node, s.paddingTop), r = px(node, s.paddingRight), b = px(node, s.paddingBottom);\n\t\treturn {l: l, t: t, r: r, b: b, w: l + r, h: t + b};\n\t};\n\n\tvar none = \"none\";\n\n\tgeom.getBorderExtents = function getBorderExtents(/*DomNode*/ node, /*Object*/ computedStyle){\n\t\t// summary:\n\t\t//\t\treturns an object with properties useful for noting the border\n\t\t//\t\tdimensions.\n\t\t// description:\n\t\t//\t\t- l/t/r/b = the sum of left/top/right/bottom border (respectively)\n\t\t//\t\t- w = the sum of the left and right border\n\t\t//\t\t- h = the sum of the top and bottom border\n\t\t//\n\t\t//\t\tThe w/h are used for calculating boxes.\n\t\t//\t\tNormally application code will not need to invoke this\n\t\t//\t\tdirectly, and will use the ...box... functions instead.\n\t\t// node: DOMNode\n\t\t// computedStyle: Object?\n\t\t//\t\tThis parameter accepts computed styles object.\n\t\t//\t\tIf this parameter is omitted, the functions will call\n\t\t//\t\tdojo/dom-style.getComputedStyle to get one. It is a better way, calling\n\t\t//\t\tdojo/dom-style.getComputedStyle once, and then pass the reference to this\n\t\t//\t\tcomputedStyle parameter. Wherever possible, reuse the returned\n\t\t//\t\tobject of dojo/dom-style.getComputedStyle().\n\n\t\tnode = dom.byId(node);\n\t\tvar px = style.toPixelValue, s = computedStyle || style.getComputedStyle(node),\n\t\t\tl = s.borderLeftStyle != none ? px(node, s.borderLeftWidth) : 0,\n\t\t\tt = s.borderTopStyle != none ? px(node, s.borderTopWidth) : 0,\n\t\t\tr = s.borderRightStyle != none ? px(node, s.borderRightWidth) : 0,\n\t\t\tb = s.borderBottomStyle != none ? px(node, s.borderBottomWidth) : 0;\n\t\treturn {l: l, t: t, r: r, b: b, w: l + r, h: t + b};\n\t};\n\n\tgeom.getPadBorderExtents = function getPadBorderExtents(/*DomNode*/ node, /*Object*/ computedStyle){\n\t\t// summary:\n\t\t//\t\tReturns object with properties useful for box fitting with\n\t\t//\t\tregards to padding.\n\t\t// description:\n\t\t//\t\t- l/t/r/b = the sum of left/top/right/bottom padding and left/top/right/bottom border (respectively)\n\t\t//\t\t- w = the sum of the left and right padding and border\n\t\t//\t\t- h = the sum of the top and bottom padding and border\n\t\t//\n\t\t//\t\tThe w/h are used for calculating boxes.\n\t\t//\t\tNormally application code will not need to invoke this\n\t\t//\t\tdirectly, and will use the ...box... functions instead.\n\t\t// node: DOMNode\n\t\t// computedStyle: Object?\n\t\t//\t\tThis parameter accepts computed styles object.\n\t\t//\t\tIf this parameter is omitted, the functions will call\n\t\t//\t\tdojo/dom-style.getComputedStyle to get one. It is a better way, calling\n\t\t//\t\tdojo/dom-style.getComputedStyle once, and then pass the reference to this\n\t\t//\t\tcomputedStyle parameter. Wherever possible, reuse the returned\n\t\t//\t\tobject of dojo/dom-style.getComputedStyle().\n\n\t\tnode = dom.byId(node);\n\t\tvar s = computedStyle || style.getComputedStyle(node),\n\t\t\tp = geom.getPadExtents(node, s),\n\t\t\tb = geom.getBorderExtents(node, s);\n\t\treturn {\n\t\t\tl: p.l + b.l,\n\t\t\tt: p.t + b.t,\n\t\t\tr: p.r + b.r,\n\t\t\tb: p.b + b.b,\n\t\t\tw: p.w + b.w,\n\t\t\th: p.h + b.h\n\t\t};\n\t};\n\n\tgeom.getMarginExtents = function getMarginExtents(node, computedStyle){\n\t\t// summary:\n\t\t//\t\treturns object with properties useful for box fitting with\n\t\t//\t\tregards to box margins (i.e., the outer-box).\n\t\t//\n\t\t//\t\t- l/t = marginLeft, marginTop, respectively\n\t\t//\t\t- w = total width, margin inclusive\n\t\t//\t\t- h = total height, margin inclusive\n\t\t//\n\t\t//\t\tThe w/h are used for calculating boxes.\n\t\t//\t\tNormally application code will not need to invoke this\n\t\t//\t\tdirectly, and will use the ...box... functions instead.\n\t\t// node: DOMNode\n\t\t// computedStyle: Object?\n\t\t//\t\tThis parameter accepts computed styles object.\n\t\t//\t\tIf this parameter is omitted, the functions will call\n\t\t//\t\tdojo/dom-style.getComputedStyle to get one. It is a better way, calling\n\t\t//\t\tdojo/dom-style.getComputedStyle once, and then pass the reference to this\n\t\t//\t\tcomputedStyle parameter. Wherever possible, reuse the returned\n\t\t//\t\tobject of dojo/dom-style.getComputedStyle().\n\n\t\tnode = dom.byId(node);\n\t\tvar s = computedStyle || style.getComputedStyle(node), px = style.toPixelValue,\n\t\t\tl = px(node, s.marginLeft), t = px(node, s.marginTop), r = px(node, s.marginRight), b = px(node, s.marginBottom);\n\t\treturn {l: l, t: t, r: r, b: b, w: l + r, h: t + b};\n\t};\n\n\t// Box getters work in any box context because offsetWidth/clientWidth\n\t// are invariant wrt box context\n\t//\n\t// They do *not* work for display: inline objects that have padding styles\n\t// because the user agent ignores padding (it's bogus styling in any case)\n\t//\n\t// Be careful with IMGs because they are inline or block depending on\n\t// browser and browser mode.\n\n\t// Although it would be easier to read, there are not separate versions of\n\t// _getMarginBox for each browser because:\n\t// 1. the branching is not expensive\n\t// 2. factoring the shared code wastes cycles (function call overhead)\n\t// 3. duplicating the shared code wastes bytes\n\n\t// MATHWORKS START - ROLLBACK \"BUGFIX\" CHANGES from Dojo\n\tgeom.getMarginBox = function getMarginBox(/*DomNode*/ node, /*Object*/ computedStyle){\n\t\t// summary:\n\t\t//\t\treturns an object that encodes the width, height, left and top\n\t\t//\t\tpositions of the node's margin box.\n\t\t// node: DOMNode\n\t\t// computedStyle: Object?\n\t\t//\t\tThis parameter accepts computed styles object.\n\t\t//\t\tIf this parameter is omitted, the functions will call\n\t\t//\t\tdojo/dom-style.getComputedStyle to get one. It is a better way, calling\n\t\t//\t\tdojo/dom-style.getComputedStyle once, and then pass the reference to this\n\t\t//\t\tcomputedStyle parameter. Wherever possible, reuse the returned\n\t\t//\t\tobject of dojo/dom-style.getComputedStyle().\n\n\t\tnode = dom.byId(node);\n\t\tvar s = computedStyle || style.getComputedStyle(node), me = geom.getMarginExtents(node, s),\n\t\t\tl = node.offsetLeft - me.l, t = node.offsetTop - me.t, p = node.parentNode, px = style.toPixelValue, pcs;\n\t\tif(has(\"mozilla\")){\n\t\t\t// Mozilla:\n\t\t\t// If offsetParent has a computed overflow != visible, the offsetLeft is decreased\n\t\t\t// by the parent's border.\n\t\t\t// We don't want to compute the parent's style, so instead we examine node's\n\t\t\t// computed left/top which is more stable.\n\t\t\tvar sl = parseFloat(s.left), st = parseFloat(s.top);\n\t\t\tif(!isNaN(sl) && !isNaN(st)){\n\t\t\t\tl = sl;\n\t\t\t\tt = st;\n\t\t\t}else{\n\t\t\t\t// If child's computed left/top are not parseable as a number (e.g. \"auto\"), we\n\t\t\t\t// have no choice but to examine the parent's computed style.\n\t\t\t\tif(p && p.style){\n\t\t\t\t\tpcs = style.getComputedStyle(p);\n\t\t\t\t\tif(pcs.overflow != \"visible\"){\n\t\t\t\t\t\tl += pcs.borderLeftStyle != none ? px(node, pcs.borderLeftWidth) : 0;\n\t\t\t\t\t\tt += pcs.borderTopStyle != none ? px(node, pcs.borderTopWidth) : 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}else if(has(\"opera\") || (has(\"ie\") == 8 && !has(\"quirks\"))){\n\t\t\t// On Opera and IE 8, offsetLeft/Top includes the parent's border\n\t\t\tif(p){\n\t\t\t\tpcs = style.getComputedStyle(p);\n\t\t\t\tl -= pcs.borderLeftStyle != none ? px(node, pcs.borderLeftWidth) : 0;\n\t\t\t\tt -= pcs.borderTopStyle != none ? px(node, pcs.borderTopWidth) : 0;\n\t\t\t}\n\t\t}\n\t\treturn {l: l, t: t, w: node.offsetWidth + me.w, h: node.offsetHeight + me.h};\n\t};\n\n\tgeom.getContentBox = function getContentBox(node, computedStyle){\n\t\t// summary:\n\t\t//\t\tReturns an object that encodes the width, height, left and top\n\t\t//\t\tpositions of the node's content box, irrespective of the\n\t\t//\t\tcurrent box model.\n\t\t// node: DOMNode\n\t\t// computedStyle: Object?\n\t\t//\t\tThis parameter accepts computed styles object.\n\t\t//\t\tIf this parameter is omitted, the functions will call\n\t\t//\t\tdojo/dom-style.getComputedStyle to get one. It is a better way, calling\n\t\t//\t\tdojo/dom-style.getComputedStyle once, and then pass the reference to this\n\t\t//\t\tcomputedStyle parameter. Wherever possible, reuse the returned\n\t\t//\t\tobject of dojo/dom-style.getComputedStyle().\n\n\t\t// clientWidth/Height are important since the automatically account for scrollbars\n\t\t// fallback to offsetWidth/Height for special cases (see #3378)\n\t\tnode = dom.byId(node);\n\t\tvar s = computedStyle || style.getComputedStyle(node), w = node.clientWidth, h,\n\t\t\tpe = geom.getPadExtents(node, s), be = geom.getBorderExtents(node, s);\n\t\tif(!w){\n\t\t\tw = node.offsetWidth;\n\t\t\th = node.offsetHeight;\n\t\t}else{\n\t\t\th = node.clientHeight;\n\t\t\tbe.w = be.h = 0;\n\t\t}\n\t\t// On Opera, offsetLeft includes the parent's border\n\t\tif(has(\"opera\")){\n\t\t\tpe.l += be.l;\n\t\t\tpe.t += be.t;\n\t\t}\n\t\treturn {l: pe.l, t: pe.t, w: w - pe.w - be.w, h: h - pe.h - be.h};\n\t};\n\t// MATHWORKS END - ROLLBACK \"BUGFIX\" CHANGES from Dojo\n\n\t// Box setters depend on box context because interpretation of width/height styles\n\t// vary wrt box context.\n\t//\n\t// The value of boxModel is used to determine box context.\n\t// boxModel can be set directly to change behavior.\n\t//\n\t// Beware of display: inline objects that have padding styles\n\t// because the user agent ignores padding (it's a bogus setup anyway)\n\t//\n\t// Be careful with IMGs because they are inline or block depending on\n\t// browser and browser mode.\n\t//\n\t// Elements other than DIV may have special quirks, like built-in\n\t// margins or padding, or values not detectable via computedStyle.\n\t// In particular, margins on TABLE do not seems to appear\n\t// at all in computedStyle on Mozilla.\n\n\tfunction setBox(/*DomNode*/ node, /*Number?*/ l, /*Number?*/ t, /*Number?*/ w, /*Number?*/ h, /*String?*/ u){\n\t\t// summary:\n\t\t//\t\tsets width/height/left/top in the current (native) box-model\n\t\t//\t\tdimensions. Uses the unit passed in u.\n\t\t// node:\n\t\t//\t\tDOM Node reference. Id string not supported for performance\n\t\t//\t\treasons.\n\t\t// l:\n\t\t//\t\tleft offset from parent.\n\t\t// t:\n\t\t//\t\ttop offset from parent.\n\t\t// w:\n\t\t//\t\twidth in current box model.\n\t\t// h:\n\t\t//\t\twidth in current box model.\n\t\t// u:\n\t\t//\t\tunit measure to use for other measures. Defaults to \"px\".\n\t\tu = u || \"px\";\n\t\tvar s = node.style;\n\t\tif(!isNaN(l)){\n\t\t\ts.left = l + u;\n\t\t}\n\t\tif(!isNaN(t)){\n\t\t\ts.top = t + u;\n\t\t}\n\t\tif(w >= 0){\n\t\t\ts.width = w + u;\n\t\t}\n\t\tif(h >= 0){\n\t\t\ts.height = h + u;\n\t\t}\n\t}\n\n\tfunction isButtonTag(/*DomNode*/ node){\n\t\t// summary:\n\t\t//\t\tTrue if the node is BUTTON or INPUT.type=\"button\".\n\t\treturn node.tagName.toLowerCase() == \"button\" ||\n\t\t\tnode.tagName.toLowerCase() == \"input\" && (node.getAttribute(\"type\") || \"\").toLowerCase() == \"button\"; // boolean\n\t}\n\n\tfunction usesBorderBox(/*DomNode*/ node){\n\t\t// summary:\n\t\t//\t\tTrue if the node uses border-box layout.\n\n\t\t// We could test the computed style of node to see if a particular box\n\t\t// has been specified, but there are details and we choose not to bother.\n\n\t\t// TABLE and BUTTON (and INPUT type=button) are always border-box by default.\n\t\t// If you have assigned a different box to either one via CSS then\n\t\t// box functions will break.\n\n\t\treturn geom.boxModel == \"border-box\" || node.tagName.toLowerCase() == \"table\" || isButtonTag(node); // boolean\n\t}\n\n\tfunction getBoundingClientRect(/*DomNode*/ node) {\n\t\t// summary:\n\t\t//\t\tGets the bounding client rectangle for a dom node.\n\t\t// node: DOMNode\n\n\t\t// This will return the result of node.getBoundingClientRect if node is in the dom, and\n\t\t// {x:0, y:0, width:0, height:0, top:0, right:0, bottom:0, left:0} if it throws an error or the node is not on the dom\n\t\t// This will handle when IE throws an error or Edge returns an empty object when node is not on the dom\n\n\t\tvar retEmpty = { x: 0, y: 0, width: 0, height: 0, top: 0, right: 0, bottom: 0, left: 0 },\n\t\t\tret;\n\n\t\ttry {\n\t\t\tret = node.getBoundingClientRect();\n\t\t} catch (e) {\n\t\t\t// IE throws an Unspecified Error if the node is not in the dom. Handle this by returning an object with 0 values\n\t\t\treturn retEmpty;\n\t\t}\n\n\t\t// Edge returns an empty object if the node is not in the dom. Handle this by returning an object with 0 values\n\t\tif (typeof ret.left === \"undefined\") { return retEmpty; }\n\n\t\treturn ret;\n\t}\n\n\tgeom.setContentSize = function setContentSize(/*DomNode*/ node, /*Object*/ box, /*Object*/ computedStyle){\n\t\t// summary:\n\t\t//\t\tSets the size of the node's contents, irrespective of margins,\n\t\t//\t\tpadding, or borders.\n\t\t// node: DOMNode\n\t\t// box: Object\n\t\t//\t\thash with optional \"w\", and \"h\" properties for \"width\", and \"height\"\n\t\t//\t\trespectively. All specified properties should have numeric values in whole pixels.\n\t\t// computedStyle: Object?\n\t\t//\t\tThis parameter accepts computed styles object.\n\t\t//\t\tIf this parameter is omitted, the functions will call\n\t\t//\t\tdojo/dom-style.getComputedStyle to get one. It is a better way, calling\n\t\t//\t\tdojo/dom-style.getComputedStyle once, and then pass the reference to this\n\t\t//\t\tcomputedStyle parameter. Wherever possible, reuse the returned\n\t\t//\t\tobject of dojo/dom-style.getComputedStyle().\n\n\t\tnode = dom.byId(node);\n\t\tvar w = box.w, h = box.h;\n\t\tif(usesBorderBox(node)){\n\t\t\tvar pb = geom.getPadBorderExtents(node, computedStyle);\n\t\t\tif(w >= 0){\n\t\t\t\tw += pb.w;\n\t\t\t}\n\t\t\tif(h >= 0){\n\t\t\t\th += pb.h;\n\t\t\t}\n\t\t}\n\t\tsetBox(node, NaN, NaN, w, h);\n\t};\n\n\tvar nilExtents = {l: 0, t: 0, w: 0, h: 0};\n\n\tgeom.setMarginBox = function setMarginBox(/*DomNode*/ node, /*Object*/ box, /*Object*/ computedStyle){\n\t\t// summary:\n\t\t//\t\tsets the size of the node's margin box and placement\n\t\t//\t\t(left/top), irrespective of box model. Think of it as a\n\t\t//\t\tpassthrough to setBox that handles box-model vagaries for\n\t\t//\t\tyou.\n\t\t// node: DOMNode\n\t\t// box: Object\n\t\t//\t\thash with optional \"l\", \"t\", \"w\", and \"h\" properties for \"left\", \"right\", \"width\", and \"height\"\n\t\t//\t\trespectively. All specified properties should have numeric values in whole pixels.\n\t\t// computedStyle: Object?\n\t\t//\t\tThis parameter accepts computed styles object.\n\t\t//\t\tIf this parameter is omitted, the functions will call\n\t\t//\t\tdojo/dom-style.getComputedStyle to get one. It is a better way, calling\n\t\t//\t\tdojo/dom-style.getComputedStyle once, and then pass the reference to this\n\t\t//\t\tcomputedStyle parameter. Wherever possible, reuse the returned\n\t\t//\t\tobject of dojo/dom-style.getComputedStyle().\n\n\t\tnode = dom.byId(node);\n\t\tvar s = computedStyle || style.getComputedStyle(node), w = box.w, h = box.h,\n\t\t// Some elements have special padding, margin, and box-model settings.\n\t\t// To use box functions you may need to set padding, margin explicitly.\n\t\t// Controlling box-model is harder, in a pinch you might set dojo/dom-geometry.boxModel.\n\t\t\tpb = usesBorderBox(node) ? nilExtents : geom.getPadBorderExtents(node, s),\n\t\t\tmb = geom.getMarginExtents(node, s);\n\t\tif(has(\"webkit\")){\n\t\t\t// on Safari (3.1.2), button nodes with no explicit size have a default margin\n\t\t\t// setting an explicit size eliminates the margin.\n\t\t\t// We have to swizzle the width to get correct margin reading.\n\t\t\tif(isButtonTag(node)){\n\t\t\t\tvar ns = node.style;\n\t\t\t\tif(w >= 0 && !ns.width){\n\t\t\t\t\tns.width = \"4px\";\n\t\t\t\t}\n\t\t\t\tif(h >= 0 && !ns.height){\n\t\t\t\t\tns.height = \"4px\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif(w >= 0){\n\t\t\tw = Math.max(w - pb.w - mb.w, 0);\n\t\t}\n\t\tif(h >= 0){\n\t\t\th = Math.max(h - pb.h - mb.h, 0);\n\t\t}\n\t\tsetBox(node, box.l, box.t, w, h);\n\t};\n\n\t// =============================\n\t// Positioning\n\t// =============================\n\n\tgeom.isBodyLtr = function isBodyLtr(/*Document?*/ doc){\n\t\t// summary:\n\t\t//\t\tReturns true if the current language is left-to-right, and false otherwise.\n\t\t// doc: Document?\n\t\t//\t\tOptional document to query. If unspecified, use win.doc.\n\t\t// returns: Boolean\n\n\t\tdoc = doc || win.doc;\n\t\treturn (win.body(doc).dir || doc.documentElement.dir || \"ltr\").toLowerCase() == \"ltr\"; // Boolean\n\t};\n\n\tgeom.docScroll = function docScroll(/*Document?*/ doc){\n\t\t// summary:\n\t\t//\t\tReturns an object with {node, x, y} with corresponding offsets.\n\t\t// doc: Document?\n\t\t//\t\tOptional document to query. If unspecified, use win.doc.\n\t\t// returns: Object\n\n\t\tdoc = doc || win.doc;\n\t\tvar node = doc.parentWindow || doc.defaultView; // use UI window, not dojo.global window. TODO: use dojo/window::get() except for circular dependency problem\n\t\treturn \"pageXOffset\" in node ? {x: node.pageXOffset, y: node.pageYOffset } :\n\t\t\t(node = has(\"quirks\") ? win.body(doc) : doc.documentElement) &&\n\t\t\t\t{x: geom.fixIeBiDiScrollLeft(node.scrollLeft || 0, doc), y: node.scrollTop || 0 };\n\t};\n\n\tgeom.getIeDocumentElementOffset = function(/*Document?*/ doc){\n\t\t// summary:\n\t\t//\t\tDeprecated method previously used for IE6-IE7. Now, just returns `{x:0, y:0}`.\n\t\treturn {\n\t\t\tx: 0,\n\t\t\ty: 0\n\t\t};\n\t};\n\n\tgeom.fixIeBiDiScrollLeft = function fixIeBiDiScrollLeft(/*Integer*/ scrollLeft, /*Document?*/ doc){\n\t\t// summary:\n\t\t//\t\tIn RTL direction, scrollLeft should be a negative value, but IE\n\t\t//\t\treturns a positive one. All codes using documentElement.scrollLeft\n\t\t//\t\tmust call this function to fix this error, otherwise the position\n\t\t//\t\twill offset to right when there is a horizontal scrollbar.\n\t\t// scrollLeft: Number\n\t\t// doc: Document?\n\t\t//\t\tOptional document to query. If unspecified, use win.doc.\n\t\t// returns: Number\n\n\t\t// In RTL direction, scrollLeft should be a negative value, but IE\n\t\t// returns a positive one. All codes using documentElement.scrollLeft\n\t\t// must call this function to fix this error, otherwise the position\n\t\t// will offset to right when there is a horizontal scrollbar.\n\n\t\tdoc = doc || win.doc;\n\t\tvar ie = has(\"ie\");\n\t\tif(ie && !geom.isBodyLtr(doc)){\n\t\t\tvar qk = has(\"quirks\"),\n\t\t\t\tde = qk ? win.body(doc) : doc.documentElement,\n\t\t\t\tpwin = win.global;\t// TODO: use winUtils.get(doc) after resolving circular dependency b/w dom-geometry.js and dojo/window.js\n\t\t\tif(ie == 6 && !qk && pwin.frameElement && de.scrollHeight > de.clientHeight){\n\t\t\t\tscrollLeft += de.clientLeft; // workaround ie6+strict+rtl+iframe+vertical-scrollbar bug where clientWidth is too small by clientLeft pixels\n\t\t\t}\n\t\t\treturn (ie < 8 || qk) ? (scrollLeft + de.clientWidth - de.scrollWidth) : -scrollLeft; // Integer\n\t\t}\n\t\treturn scrollLeft; // Integer\n\t};\n\n\tgeom.position = function(/*DomNode*/ node, /*Boolean?*/ includeScroll){\n\t\t// summary:\n\t\t//\t\tGets the position and size of the passed element relative to\n\t\t//\t\tthe viewport (if includeScroll==false), or relative to the\n\t\t//\t\tdocument root (if includeScroll==true).\n\t\t//\n\t\t// description:\n\t\t//\t\tReturns an object of the form:\n\t\t//\t\t`{ x: 100, y: 300, w: 20, h: 15 }`.\n\t\t//\t\tIf includeScroll==true, the x and y values will include any\n\t\t//\t\tdocument offsets that may affect the position relative to the\n\t\t//\t\tviewport.\n\t\t//\t\tUses the border-box model (inclusive of border and padding but\n\t\t//\t\tnot margin). Does not act as a setter.\n\t\t// node: DOMNode|String\n\t\t// includeScroll: Boolean?\n\t\t// returns: Object\n\n\t\tnode = dom.byId(node);\n\t\tvar\tdb = win.body(node.ownerDocument),\n\t\t\tret= getBoundingClientRect(node);\n\t\tret = {x: ret.left, y: ret.top, w: ret.right - ret.left, h: ret.bottom - ret.top};\n\n\t\tif(has(\"ie\") < 9){\n\t\t\t// fixes the position in IE, quirks mode\n\t\t\tret.x -= (has(\"quirks\") ? db.clientLeft + db.offsetLeft : 0);\n\t\t\tret.y -= (has(\"quirks\") ? db.clientTop + db.offsetTop : 0);\n\t\t}\n\n\t\t// account for document scrolling\n\t\t// if offsetParent is used, ret value already includes scroll position\n\t\t// so we may have to actually remove that value if !includeScroll\n\t\tif(includeScroll){\n\t\t\tvar scroll = geom.docScroll(node.ownerDocument);\n\t\t\tret.x += scroll.x;\n\t\t\tret.y += scroll.y;\n\t\t}\n\n\t\treturn ret; // Object\n\t};\n\n\t// random \"private\" functions wildly used throughout the toolkit\n\n\tgeom.getMarginSize = function getMarginSize(/*DomNode*/ node, /*Object*/ computedStyle){\n\t\t// summary:\n\t\t//\t\treturns an object that encodes the width and height of\n\t\t//\t\tthe node's margin box\n\t\t// node: DOMNode|String\n\t\t// computedStyle: Object?\n\t\t//\t\tThis parameter accepts computed styles object.\n\t\t//\t\tIf this parameter is omitted, the functions will call\n\t\t//\t\tdojo/dom-style.getComputedStyle to get one. It is a better way, calling\n\t\t//\t\tdojo/dom-style.getComputedStyle once, and then pass the reference to this\n\t\t//\t\tcomputedStyle parameter. Wherever possible, reuse the returned\n\t\t//\t\tobject of dojo/dom-style.getComputedStyle().\n\n\t\tnode = dom.byId(node);\n\t\tvar me = geom.getMarginExtents(node, computedStyle || style.getComputedStyle(node));\n\t\tvar size = getBoundingClientRect(node);\n\t\treturn {\n\t\t\tw: (size.right - size.left) + me.w,\n\t\t\th: (size.bottom - size.top) + me.h\n\t\t};\n\t};\n\n\tgeom.normalizeEvent = function(event){\n\t\t// summary:\n\t\t//\t\tNormalizes the geometry of a DOM event, normalizing the pageX, pageY,\n\t\t//\t\toffsetX, offsetY, layerX, and layerX properties\n\t\t// event: Object\n\t\tif(!(\"layerX\" in event)){\n\t\t\tevent.layerX = event.offsetX;\n\t\t\tevent.layerY = event.offsetY;\n\t\t}\n\n\t\tif(!(\"pageX\" in event)){\n\t\t\t// FIXME: scroll position query is duped from dojo/_base/html to\n\t\t\t// avoid dependency on that entire module. Now that HTML is in\n\t\t\t// Base, we should convert back to something similar there.\n\t\t\tvar se = event.target;\n\t\t\tvar doc = (se && se.ownerDocument) || document;\n\t\t\t// DO NOT replace the following to use dojo/_base/window.body(), in IE, document.documentElement should be used\n\t\t\t// here rather than document.body\n\t\t\tvar docBody = has(\"quirks\") ? doc.body : doc.documentElement;\n\t\t\tevent.pageX = event.clientX + geom.fixIeBiDiScrollLeft(docBody.scrollLeft || 0, doc);\n\t\t\tevent.pageY = event.clientY + (docBody.scrollTop || 0);\n\t\t}\n\t};\n\n\t// TODO: evaluate separate getters/setters for position and sizes?\n\n\treturn geom;\n});\n","define([\"./_base/kernel\", \"./on\", \"./has\", \"./dom\", \"./_base/window\"], function(dojo, on, has, dom, win){\n\n\t// module:\n\t//\t\tdojo/mouse\n\n has.add(\"dom-quirks\", win.doc && win.doc.compatMode == \"BackCompat\");\n\thas.add(\"events-mouseenter\", win.doc && \"onmouseenter\" in win.doc.createElement(\"div\"));\n\thas.add(\"events-mousewheel\", win.doc && 'onmousewheel' in win.doc);\n\n\tvar mouseButtons;\n\tif((has(\"dom-quirks\") && has(\"ie\")) || !has(\"dom-addeventlistener\")){\n\t\tmouseButtons = {\n\t\t\tLEFT: 1,\n\t\t\tMIDDLE: 4,\n\t\t\tRIGHT: 2,\n\t\t\t// helper functions\n\t\t\tisButton: function(e, button){ return e.button & button; },\n\t\t\tisLeft: function(e){ return e.button & 1; },\n\t\t\tisMiddle: function(e){ return e.button & 4; },\n\t\t\tisRight: function(e){ return e.button & 2; }\n\t\t};\n\t}else{\n\t\tmouseButtons = {\n\t\t\tLEFT: 0,\n\t\t\tMIDDLE: 1,\n\t\t\tRIGHT: 2,\n\t\t\t// helper functions\n\t\t\tisButton: function(e, button){ return e.button == button; },\n\t\t\tisLeft: function(e){ return e.button == 0; },\n\t\t\tisMiddle: function(e){ return e.button == 1; },\n\t\t\tisRight: function(e){ return e.button == 2; }\n\t\t};\n\t}\n\tdojo.mouseButtons = mouseButtons;\n\n/*=====\n\tdojo.mouseButtons = {\n\t\t// LEFT: Number\n\t\t//\t\tNumeric value of the left mouse button for the platform.\n\t\tLEFT: 0,\n\t\t// MIDDLE: Number\n\t\t//\t\tNumeric value of the middle mouse button for the platform.\n\t\tMIDDLE: 1,\n\t\t// RIGHT: Number\n\t\t//\t\tNumeric value of the right mouse button for the platform.\n\t\tRIGHT: 2,\n\n\t\tisButton: function(e, button){\n\t\t\t// summary:\n\t\t\t//\t\tChecks an event object for a pressed button\n\t\t\t// e: Event\n\t\t\t//\t\tEvent object to examine\n\t\t\t// button: Number\n\t\t\t//\t\tThe button value (example: dojo.mouseButton.LEFT)\n\t\t\treturn e.button == button; // Boolean\n\t\t},\n\t\tisLeft: function(e){\n\t\t\t// summary:\n\t\t\t//\t\tChecks an event object for the pressed left button\n\t\t\t// e: Event\n\t\t\t//\t\tEvent object to examine\n\t\t\treturn e.button == 0; // Boolean\n\t\t},\n\t\tisMiddle: function(e){\n\t\t\t// summary:\n\t\t\t//\t\tChecks an event object for the pressed middle button\n\t\t\t// e: Event\n\t\t\t//\t\tEvent object to examine\n\t\t\treturn e.button == 1; // Boolean\n\t\t},\n\t\tisRight: function(e){\n\t\t\t// summary:\n\t\t\t//\t\tChecks an event object for the pressed right button\n\t\t\t// e: Event\n\t\t\t//\t\tEvent object to examine\n\t\t\treturn e.button == 2; // Boolean\n\t\t}\n\t};\n=====*/\n\n\tfunction eventHandler(type, selectHandler){\n\t\t// emulation of mouseenter/leave with mouseover/out using descendant checking\n\t\tvar handler = function(node, listener){\n\t\t\treturn on(node, type, function(evt){\n\t\t\t\tif(selectHandler){\n\t\t\t\t\treturn selectHandler(evt, listener);\n\t\t\t\t}\n\t\t\t\tif(!dom.isDescendant(evt.relatedTarget, node)){\n\t\t\t\t\treturn listener.call(this, evt);\n\t\t\t\t}\n\t\t\t});\n\t\t};\n\t\thandler.bubble = function(select){\n\t\t\treturn eventHandler(type, function(evt, listener){\n\t\t\t\t// using a selector, use the select function to determine if the mouse moved inside the selector and was previously outside the selector\n\t\t\t\tvar target = select(evt.target);\n\t\t\t\tvar relatedTarget = evt.relatedTarget;\n\t\t\t\tif(target && (target != (relatedTarget && relatedTarget.nodeType == 1 && select(relatedTarget)))){\n\t\t\t\t\treturn listener.call(target, evt);\n\t\t\t\t} \n\t\t\t});\n\t\t};\n\t\treturn handler;\n\t}\n\tvar wheel;\n\tif(has(\"events-mousewheel\")){\n\t\twheel = 'mousewheel';\n\t}else{ //firefox\n\t\twheel = function(node, listener){\n\t\t\treturn on(node, 'DOMMouseScroll', function(evt){\n\t\t\t\tevt.wheelDelta = -evt.detail;\n\t\t\t\tlistener.call(this, evt);\n\t\t\t});\n\t\t};\n\t}\n\treturn {\n\t\t// summary:\n\t\t//\t\tThis module provide mouse event handling utility functions and exports\n\t\t//\t\tmouseenter and mouseleave event emulation.\n\t\t// example:\n\t\t//\t\tTo use these events, you register a mouseenter like this:\n\t\t//\t\t|\tdefine([\"dojo/on\", \"dojo/mouse\"], function(on, mouse){\n\t\t//\t\t|\t\ton(targetNode, mouse.enter, function(event){\n\t\t//\t\t|\t\t\tdojo.addClass(targetNode, \"highlighted\");\n\t\t//\t\t|\t\t});\n\t\t//\t\t|\t\ton(targetNode, mouse.leave, function(event){\n\t\t//\t\t|\t\t\tdojo.removeClass(targetNode, \"highlighted\");\n\t\t//\t\t|\t\t});\n\n\t\t_eventHandler: eventHandler,\t\t// for dojo/touch\n\n\t\t// enter: Synthetic Event\n\t\t//\t\tThis is an extension event for the mouseenter that IE provides, emulating the\n\t\t//\t\tbehavior on other browsers.\n\t\tenter: eventHandler(\"mouseover\"),\n\n\t\t// leave: Synthetic Event\n\t\t//\t\tThis is an extension event for the mouseleave that IE provides, emulating the\n\t\t//\t\tbehavior on other browsers.\n\t\tleave: eventHandler(\"mouseout\"),\n\n\t\t// wheel: Normalized Mouse Wheel Event\n\t\t//\t\tThis is an extension event for the mousewheel that non-Mozilla browsers provide,\n\t\t//\t\temulating the behavior on Mozilla based browsers.\n\t\twheel: wheel,\n\n\t\tisLeft: mouseButtons.isLeft,\n\t\t/*=====\n\t\tisLeft: function(){\n\t\t\t// summary:\n\t\t\t//\t\tTest an event object (from a mousedown event) to see if the left button was pressed.\n\t\t},\n\t\t=====*/\n\n\t\tisMiddle: mouseButtons.isMiddle,\n\t\t/*=====\n\t\t isMiddle: function(){\n\t\t\t // summary:\n\t\t\t //\t\tTest an event object (from a mousedown event) to see if the middle button was pressed.\n\t\t },\n\t\t =====*/\n\n\t\tisRight: mouseButtons.isRight\n\t\t/*=====\n\t\t , isRight: function(){\n\t\t\t // summary:\n\t\t\t //\t\tTest an event object (from a mousedown event) to see if the right button was pressed.\n\t\t }\n\t\t =====*/\n\t};\n});\n","define([\"./_base/kernel\", \"./sniff\"], function(dojo, has){\n\n\t// module:\n\t//\t\tdojo/keys\n\n\treturn dojo.keys = {\n\t\t// summary:\n\t\t//\t\tDefinitions for common key values. Client code should test keyCode against these named constants,\n\t\t//\t\tas the actual codes can vary by browser.\n\n\t\tBACKSPACE: 8,\n\t\tTAB: 9,\n\t\tCLEAR: 12,\n\t\tENTER: 13,\n\t\tSHIFT: 16,\n\t\tCTRL: 17,\n\t\tALT: 18,\n\t\tMETA: has(\"webkit\") ? 91 : 224,\t\t// the apple key on macs\n\t\tPAUSE: 19,\n\t\tCAPS_LOCK: 20,\n\t\tESCAPE: 27,\n\t\tSPACE: 32,\n\t\tPAGE_UP: 33,\n\t\tPAGE_DOWN: 34,\n\t\tEND: 35,\n\t\tHOME: 36,\n\t\tLEFT_ARROW: 37,\n\t\tUP_ARROW: 38,\n\t\tRIGHT_ARROW: 39,\n\t\tDOWN_ARROW: 40,\n\t\tINSERT: 45,\n\t\tDELETE: 46,\n\t\tHELP: 47,\n\t\tLEFT_WINDOW: 91,\n\t\tRIGHT_WINDOW: 92,\n\t\tSELECT: 93,\n\t\tNUMPAD_0: 96,\n\t\tNUMPAD_1: 97,\n\t\tNUMPAD_2: 98,\n\t\tNUMPAD_3: 99,\n\t\tNUMPAD_4: 100,\n\t\tNUMPAD_5: 101,\n\t\tNUMPAD_6: 102,\n\t\tNUMPAD_7: 103,\n\t\tNUMPAD_8: 104,\n\t\tNUMPAD_9: 105,\n\t\tNUMPAD_MULTIPLY: 106,\n\t\tNUMPAD_PLUS: 107,\n\t\tNUMPAD_ENTER: 108,\n\t\tNUMPAD_MINUS: 109,\n\t\tNUMPAD_PERIOD: 110,\n\t\tNUMPAD_DIVIDE: 111,\n\t\tF1: 112,\n\t\tF2: 113,\n\t\tF3: 114,\n\t\tF4: 115,\n\t\tF5: 116,\n\t\tF6: 117,\n\t\tF7: 118,\n\t\tF8: 119,\n\t\tF9: 120,\n\t\tF10: 121,\n\t\tF11: 122,\n\t\tF12: 123,\n\t\tF13: 124,\n\t\tF14: 125,\n\t\tF15: 126,\n\t\tNUM_LOCK: 144,\n\t\tSCROLL_LOCK: 145,\n\t\tUP_DPAD: 175,\n\t\tDOWN_DPAD: 176,\n\t\tLEFT_DPAD: 177,\n\t\tRIGHT_DPAD: 178,\n\t\t// virtual key mapping\n\t\tcopyKey: has(\"mac\") && !has(\"air\") ? (has(\"safari\") ? 91 : 224 ) : 17\n\t};\n});\n","define([\"exports\", \"./sniff\", \"./_base/lang\", \"./dom\", \"./dom-style\", \"./dom-prop\"],\n\t\tfunction(exports, has, lang, dom, style, prop){\n\t// module:\n\t//\t\tdojo/dom-attr\n\t// summary:\n\t//\t\tThis module defines the core dojo DOM attributes API.\n\n\t// TODOC: summary not showing up in output see https://github.com/csnover/js-doc-parse/issues/42\n\n\t// =============================\n\t// Element attribute Functions\n\t// =============================\n\n\t// This module will be obsolete soon. Use dojo/prop instead.\n\n\t// dojo/dom-attr.get() should conform to http://www.w3.org/TR/DOM-Level-2-Core/\n\n\t// attribute-related functions (to be obsolete soon)\n\tvar forcePropNames = {\n\t\t\tinnerHTML:\t1,\n\t\t\ttextContent:1,\n\t\t\tclassName:\t1,\n\t\t\thtmlFor:\thas(\"ie\") ? 1 : 0,\n\t\t\tvalue:\t\t1\n\t\t},\n\t\tattrNames = {\n\t\t\t// original attribute names\n\t\t\tclassname: \"class\",\n\t\t\thtmlfor: \"for\",\n\t\t\t// for IE\n\t\t\ttabindex: \"tabIndex\",\n\t\t\treadonly: \"readOnly\"\n\t\t};\n\n\tfunction _hasAttr(node, name){\n\t\tvar attr = node.getAttributeNode && node.getAttributeNode(name);\n\t\treturn !!attr && attr.specified; // Boolean\n\t}\n\t\n\t// There is a difference in the presence of certain properties and their default values\n\t// between browsers. For example, on IE \"disabled\" is present on all elements,\n\t// but it is value is \"false\"; \"tabIndex\" of <div> returns 0 by default on IE, yet other browsers\n\t// can return -1.\n\n\texports.has = function hasAttr(/*DOMNode|String*/ node, /*String*/ name){\n\t\t// summary:\n\t\t//\t\tReturns true if the requested attribute is specified on the\n\t\t//\t\tgiven element, and false otherwise.\n\t\t// node: DOMNode|String\n\t\t//\t\tid or reference to the element to check\n\t\t// name: String\n\t\t//\t\tthe name of the attribute\n\t\t// returns: Boolean\n\t\t//\t\ttrue if the requested attribute is specified on the\n\t\t//\t\tgiven element, and false otherwise\n\n\t\tvar lc = name.toLowerCase();\n\t\treturn !!forcePropNames[prop.names[lc] || name] || _hasAttr(dom.byId(node), attrNames[lc] || name);\t// Boolean\n\t};\n\n\texports.get = function getAttr(/*DOMNode|String*/ node, /*String*/ name){\n\t\t// summary:\n\t\t//\t\tGets an attribute on an HTML element.\n\t\t// description:\n\t\t//\t\tHandles normalized getting of attributes on DOM Nodes.\n\t\t// node: DOMNode|String\n\t\t//\t\tid or reference to the element to get the attribute on\n\t\t// name: String\n\t\t//\t\tthe name of the attribute to get.\n\t\t// returns:\n\t\t//\t\tthe value of the requested attribute or null if that attribute does not have a specified or\n\t\t//\t\tdefault value;\n\t\t//\n\t\t// example:\n\t\t//\t|\t// get the current value of the \"foo\" attribute on a node\n\t\t//\t|\trequire([\"dojo/dom-attr\", \"dojo/dom\"], function(domAttr, dom){\n\t\t//\t|\t\tdomAttr.get(dom.byId(\"nodeId\"), \"foo\");\n\t\t//\t|\t\t// or we can just pass the id:\n\t\t//\t|\t\tdomAttr.get(\"nodeId\", \"foo\");\n\t\t//\t|\t});\t\n\t\t//\t|\t\n\n\t\tnode = dom.byId(node);\n\t\tvar lc = name.toLowerCase(),\n\t\t\tpropName = prop.names[lc] || name,\n\t\t\tforceProp = forcePropNames[propName],\n\t\t\tvalue = node[propName];\t\t// should we access this attribute via a property or via getAttribute()?\n\n\t\tif(forceProp && typeof value != \"undefined\"){\n\t\t\t// node's property\n\t\t\treturn value;\t// Anything\n\t\t}\n\t\t\n\t\tif(propName == \"textContent\"){\n\t\t\treturn prop.get(node, propName);\n\t\t}\n\t\t\n\t\tif(propName != \"href\" && (typeof value == \"boolean\" || lang.isFunction(value))){\n\t\t\t// node's property\n\t\t\treturn value;\t// Anything\n\t\t}\n\t\t// node's attribute\n\t\t// we need _hasAttr() here to guard against IE returning a default value\n\t\tvar attrName = attrNames[lc] || name;\n\t\treturn _hasAttr(node, attrName) ? node.getAttribute(attrName) : null; // Anything\n\t};\n\n\texports.set = function setAttr(/*DOMNode|String*/ node, /*String|Object*/ name, /*String?*/ value){\n\t\t// summary:\n\t\t//\t\tSets an attribute on an HTML element.\n\t\t// description:\n\t\t//\t\tHandles normalized setting of attributes on DOM Nodes.\n\t\t//\n\t\t//\t\tWhen passing functions as values, note that they will not be\n\t\t//\t\tdirectly assigned to slots on the node, but rather the default\n\t\t//\t\tbehavior will be removed and the new behavior will be added\n\t\t//\t\tusing `dojo.connect()`, meaning that event handler properties\n\t\t//\t\twill be normalized and that some caveats with regards to\n\t\t//\t\tnon-standard behaviors for onsubmit apply. Namely that you\n\t\t//\t\tshould cancel form submission using `dojo.stopEvent()` on the\n\t\t//\t\tpassed event object instead of returning a boolean value from\n\t\t//\t\tthe handler itself.\n\t\t// node: DOMNode|String\n\t\t//\t\tid or reference to the element to set the attribute on\n\t\t// name: String|Object\n\t\t//\t\tthe name of the attribute to set, or a hash of key-value pairs to set.\n\t\t// value: String?\n\t\t//\t\tthe value to set for the attribute, if the name is a string.\n\t\t// returns:\n\t\t//\t\tthe DOM node\n\t\t//\n\t\t// example:\n\t\t//\t|\t// use attr() to set the tab index\n\t\t//\t|\trequire([\"dojo/dom-attr\"], function(domAttr){\n\t\t//\t|\t\tdomAttr.set(\"nodeId\", \"tabIndex\", 3);\n\t\t//\t|\t});\n\t\t//\n\t\t// example:\n\t\t//\tSet multiple values at once, including event handlers:\n\t\t//\t|\trequire([\"dojo/dom-attr\"],\n\t\t//\t|\tfunction(domAttr){\n\t\t//\t|\t\tdomAttr.set(\"formId\", {\n\t\t//\t|\t\t\t\"foo\": \"bar\",\n\t\t//\t|\t\t\t\"tabIndex\": -1,\n\t\t//\t|\t\t\t\"method\": \"POST\"\n\t\t//\t|\t\t}\n\t\t//\t|\t});\n\n\t\tnode = dom.byId(node);\n\t\tif(arguments.length == 2){ // inline'd type check\n\t\t\t// the object form of setter: the 2nd argument is a dictionary\n\t\t\tfor(var x in name){\n\t\t\t\texports.set(node, x, name[x]);\n\t\t\t}\n\t\t\treturn node; // DomNode\n\t\t}\n\t\tvar lc = name.toLowerCase(),\n\t\t\tpropName = prop.names[lc] || name,\n\t\t\tforceProp = forcePropNames[propName];\n\t\tif(propName == \"style\" && typeof value != \"string\"){ // inline'd type check\n\t\t\t// special case: setting a style\n\t\t\tstyle.set(node, value);\n\t\t\treturn node; // DomNode\n\t\t}\n\t\tif(forceProp || typeof value == \"boolean\" || lang.isFunction(value)){\n\t\t\treturn prop.set(node, name, value);\n\t\t}\n\t\t// node's attribute\n\t\tnode.setAttribute(attrNames[lc] || name, value);\n\t\treturn node; // DomNode\n\t};\n\n\texports.remove = function removeAttr(/*DOMNode|String*/ node, /*String*/ name){\n\t\t// summary:\n\t\t//\t\tRemoves an attribute from an HTML element.\n\t\t// node: DOMNode|String\n\t\t//\t\tid or reference to the element to remove the attribute from\n\t\t// name: String\n\t\t//\t\tthe name of the attribute to remove\n\n\t\tdom.byId(node).removeAttribute(attrNames[name.toLowerCase()] || name);\n\t};\n\n\texports.getNodeProp = function getNodeProp(/*DomNode|String*/ node, /*String*/ name){\n\t\t// summary:\n\t\t//\t\tReturns an effective value of a property or an attribute.\n\t\t// node: DOMNode|String\n\t\t//\t\tid or reference to the element to remove the attribute from\n\t\t// name: String\n\t\t//\t\tthe name of the attribute\n\t\t// returns:\n\t\t//\t\tthe value of the attribute\n\n\t\tnode = dom.byId(node);\n\t\tvar lc = name.toLowerCase(), propName = prop.names[lc] || name;\n\t\tif((propName in node) && propName != \"href\"){\n\t\t\t// node's property\n\t\t\treturn node[propName];\t// Anything\n\t\t}\n\t\t// node's attribute\n\t\tvar attrName = attrNames[lc] || name;\n\t\treturn _hasAttr(node, attrName) ? node.getAttribute(attrName) : null; // Anything\n\t};\n});\n","define([\"exports\", \"./_base/kernel\", \"./sniff\", \"./_base/lang\", \"./dom\", \"./dom-style\", \"./dom-construct\", \"./_base/connect\"],\n\t\tfunction(exports, dojo, has, lang, dom, style, ctr, conn){\n\t// module:\n\t//\t\tdojo/dom-prop\n\t// summary:\n\t//\t\tThis module defines the core dojo DOM properties API.\n\n\t// TODOC: summary not showing up in output, see https://github.com/csnover/js-doc-parse/issues/42\n\n\t// =============================\n\t// Element properties Functions\n\t// =============================\n\n\t// helper to connect events\n\tvar _evtHdlrMap = {}, _ctr = 1, _attrId = dojo._scopeName + \"attrid\";\n\thas.add('dom-textContent', function (global, doc, element) { return 'textContent' in element; });\n\n\texports.names = {\n\t\t// properties renamed to avoid clashes with reserved words\n\t\t\"class\": \"className\",\n\t\t\"for\": \"htmlFor\",\n\t\t// properties written as camelCase\n\t\ttabindex: \"tabIndex\",\n\t\treadonly: \"readOnly\",\n\t\tcolspan: \"colSpan\",\n\t\tframeborder: \"frameBorder\",\n\t\trowspan: \"rowSpan\",\n\t\ttextcontent: \"textContent\",\n\t\tvaluetype: \"valueType\"\n\t};\n\t\n\tfunction getText(/*DOMNode*/node){\n\t\t// summary:\n\t\t//\t\trecursion method for get('textContent') to use. Gets text value for a node.\n\t\t// description:\n\t\t//\t\tJuse uses nodedValue so things like <br/> tags do not end up in\n\t\t//\t\tthe text as any sort of line return.\n\t\tvar text = \"\", ch = node.childNodes;\n\t\tfor(var i = 0, n; n = ch[i]; i++){\n\t\t\t//Skip comments.\n\t\t\tif(n.nodeType != 8){\n\t\t\t\tif(n.nodeType == 1){\n\t\t\t\t\ttext += getText(n);\n\t\t\t\t}else{\n\t\t\t\t\ttext += n.nodeValue;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn text;\n\t}\n\n\texports.get = function getProp(/*DOMNode|String*/ node, /*String*/ name){\n\t\t// summary:\n\t\t//\t\tGets a property on an HTML element.\n\t\t// description:\n\t\t//\t\tHandles normalized getting of properties on DOM nodes.\n\t\t//\n\t\t// node: DOMNode|String\n\t\t//\t\tid or reference to the element to get the property on\n\t\t// name: String\n\t\t//\t\tthe name of the property to get.\n\t\t// returns:\n\t\t//\t\tthe value of the requested property or its default value\n\t\t//\n\t\t// example:\n\t\t//\t|\t// get the current value of the \"foo\" property on a node\n\t\t//\t|\trequire([\"dojo/dom-prop\", \"dojo/dom\"], function(domProp, dom){\n\t\t//\t|\t\tdomProp.get(dom.byId(\"nodeId\"), \"foo\");\n\t\t//\t|\t\t// or we can just pass the id:\n\t\t//\t|\t\tdomProp.get(\"nodeId\", \"foo\");\n\t\t//\t|\t});\n\n\t\tnode = dom.byId(node);\n\t\tvar lc = name.toLowerCase(), propName = exports.names[lc] || name;\n\t\t\n\t\tif(propName == \"textContent\" && !has(\"dom-textContent\")){\n\t\t\treturn getText(node);\n\t\t}\n\t\t\n\t\treturn node[propName];\t// Anything\n\t};\n\n\texports.set = function setProp(/*DOMNode|String*/ node, /*String|Object*/ name, /*String?*/ value){\n\t\t// summary:\n\t\t//\t\tSets a property on an HTML element.\n\t\t// description:\n\t\t//\t\tHandles normalized setting of properties on DOM nodes.\n\t\t//\n\t\t//\t\tWhen passing functions as values, note that they will not be\n\t\t//\t\tdirectly assigned to slots on the node, but rather the default\n\t\t//\t\tbehavior will be removed and the new behavior will be added\n\t\t//\t\tusing `dojo.connect()`, meaning that event handler properties\n\t\t//\t\twill be normalized and that some caveats with regards to\n\t\t//\t\tnon-standard behaviors for onsubmit apply. Namely that you\n\t\t//\t\tshould cancel form submission using `dojo.stopEvent()` on the\n\t\t//\t\tpassed event object instead of returning a boolean value from\n\t\t//\t\tthe handler itself.\n\t\t// node: DOMNode|String\n\t\t//\t\tid or reference to the element to set the property on\n\t\t// name: String|Object\n\t\t//\t\tthe name of the property to set, or a hash object to set\n\t\t//\t\tmultiple properties at once.\n\t\t// value: String?\n\t\t//\t\tThe value to set for the property\n\t\t// returns:\n\t\t//\t\tthe DOM node\n\t\t//\n\t\t// example:\n\t\t//\t|\t// use prop() to set the tab index\n\t\t//\t|\trequire([\"dojo/dom-prop\"], function(domProp){\n\t\t//\t|\t\tdomProp.set(\"nodeId\", \"tabIndex\", 3);\n\t\t//\t|\t});\n\t\t//\n\t\t// example:\n\t\t//\tSet multiple values at once, including event handlers:\n\t\t//\t|\trequire([\"dojo/dom-prop\"], function(domProp){\n\t\t//\t|\t\tdomProp.set(\"formId\", {\n\t\t//\t|\t\t\t\"foo\": \"bar\",\n\t\t//\t|\t\t\t\"tabIndex\": -1,\n\t\t//\t|\t\t\t\"method\": \"POST\",\n\t\t//\t|\t\t});\n\t\t//\t|\t});\n\n\t\tnode = dom.byId(node);\n\t\tvar l = arguments.length;\n\t\tif(l == 2 && typeof name != \"string\"){ // inline'd type check\n\t\t\t// the object form of setter: the 2nd argument is a dictionary\n\t\t\tfor(var x in name){\n\t\t\t\texports.set(node, x, name[x]);\n\t\t\t}\n\t\t\treturn node; // DomNode\n\t\t}\n\t\tvar lc = name.toLowerCase(), propName = exports.names[lc] || name;\n\t\tif(propName == \"style\" && typeof value != \"string\"){ // inline'd type check\n\t\t\t// special case: setting a style\n\t\t\tstyle.set(node, value);\n\t\t\treturn node; // DomNode\n\t\t}\n\t\tif(propName == \"innerHTML\"){\n\t\t\t// special case: assigning HTML\n\t\t\t// the hash lists elements with read-only innerHTML on IE\n\t\t\tif(has(\"ie\") && node.tagName.toLowerCase() in {col: 1, colgroup: 1,\n\t\t\t\t\t\ttable: 1, tbody: 1, tfoot: 1, thead: 1, tr: 1, title: 1}){\n\t\t\t\tctr.empty(node);\n\t\t\t\tnode.appendChild(ctr.toDom(value, node.ownerDocument));\n\t\t\t}else{\n\t\t\t\tnode[propName] = value;\n\t\t\t}\n\t\t\treturn node; // DomNode\n\t\t}\n\t\tif(propName == \"textContent\" && !has(\"dom-textContent\")) {\n\t\t\tctr.empty(node);\n\t\t\tnode.appendChild(node.ownerDocument.createTextNode(value));\n\t\t\treturn node;\n\t\t}\n\t\tif(lang.isFunction(value)){\n\t\t\t// special case: assigning an event handler\n\t\t\t// clobber if we can\n\t\t\tvar attrId = node[_attrId];\n\t\t\tif(!attrId){\n\t\t\t\tattrId = _ctr++;\n\t\t\t\tnode[_attrId] = attrId;\n\t\t\t}\n\t\t\tif(!_evtHdlrMap[attrId]){\n\t\t\t\t_evtHdlrMap[attrId] = {};\n\t\t\t}\n\t\t\tvar h = _evtHdlrMap[attrId][propName];\n\t\t\tif(h){\n\t\t\t\t//h.remove();\n\t\t\t\tconn.disconnect(h);\n\t\t\t}else{\n\t\t\t\ttry{\n\t\t\t\t\tdelete node[propName];\n\t\t\t\t}catch(e){}\n\t\t\t}\n\t\t\t// ensure that event objects are normalized, etc.\n\t\t\tif(value){\n\t\t\t\t//_evtHdlrMap[attrId][propName] = on(node, propName, value);\n\t\t\t\t_evtHdlrMap[attrId][propName] = conn.connect(node, propName, value);\n\t\t\t}else{\n\t\t\t\tnode[propName] = null;\n\t\t\t}\n\t\t\treturn node; // DomNode\n\t\t}\n\t\tnode[propName] = value;\n\t\treturn node;\t// DomNode\n\t};\n});\n","\"use strict\";\n\n/* Copyright 2015-2020 The MathWorks, Inc. */\ndefine(['dojo/dom', 'dojo/on', 'dojo/request/script', 'mw-log/Log'], function (dom, on, script, Log) {\n 'use strict';\n /**\n * Checks to make sure we can load the js file specified by: urlToEmptyJs\n * Usage:\n * var checkUrlObj = checkUrlService(url).then(successCallback, errorCallback);\n * To cancel:\n * checkUrlObj.cancel(\"Don't want to wait anymore - or another message\", false);\n * Do not call cancel if the object has already been resolved. If unsure:\n * isFulfilled() => is true (cancelled, rejected/error, completed)\n *\n * @param {string} urlToEmptyJsFile - url to a JS file that should have no executable code\n * (since otherwise it will execute)\n * @return {promise} A promise that has a true (if it loaded), error if the script\n * could not be loaded calling cancel (see above), on the promise\n * will clean it up.\n */\n\n function checkUrl(urlToEmptyJsFile) {\n var options, errorEvent, deferred, node, handle;\n\n if (!urlToEmptyJsFile) {\n throw new Error('Expected a valid url in urlToEmptyJsFile');\n } // options.framedoc is used internally when locating script tag\n // explicitly set it is clear the script is in the default frame.\n\n\n options = {};\n options.framedoc = null;\n errorEvent = 'error';\n deferred = script.get(urlToEmptyJsFile, options, true);\n node = dom.byId(deferred.id, options.frameDoc);\n handle = on(node, errorEvent, function (evt) {\n Log.info('CheckUrlService detected an error accessing url: ' + urlToEmptyJsFile);\n deferred.handleResponse(null, evt);\n handle.remove();\n });\n return deferred.promise;\n }\n\n return checkUrl;\n});\n//# sourceMappingURL=CheckUrlService.js.map\n","define([\n\t'module',\n\t'./watch',\n\t'./util',\n\t'../_base/kernel',\n\t'../_base/array',\n\t'../_base/lang',\n\t'../on',\n\t'../dom',\n\t'../dom-construct',\n\t'../has',\n\t'../_base/window'/*=====,\n\t'../request',\n\t'../_base/declare' =====*/\n], function(module, watch, util, kernel, array, lang, on, dom, domConstruct, has, win/*=====, request, declare =====*/){\n\thas.add('script-readystatechange', function(global, document){\n\t\tvar script = document.createElement('script');\n\t\treturn typeof script['onreadystatechange'] !== 'undefined' &&\n\t\t\t(typeof global['opera'] === 'undefined' || global['opera'].toString() !== '[object Opera]');\n\t});\n\n\tvar mid = module.id.replace(/[\\/\\.\\-]/g, '_'),\n\t\tcounter = 0,\n\t\tloadEvent = has('script-readystatechange') ? 'readystatechange' : 'load',\n\t\treadyRegExp = /complete|loaded/,\n\t\tcallbacks = kernel.global[mid + '_callbacks'] = {},\n\t\tdeadScripts = [];\n\n\tfunction attach(id, url, frameDoc, errorHandler){\n\t\tvar doc = (frameDoc || win.doc),\n\t\t\telement = doc.createElement('script');\n\n\t\tif (errorHandler) {\n\t\t\ton.once(element, 'error', errorHandler);\n\t\t}\n\n\t\telement.type = 'text/javascript';\n\t\ttry {\n\t\t\telement.src = url;\n\t\t} catch(err) {\n\t\t\terrorHandler && errorHandler(element);\n\t\t}\n\n\t\telement.id = id;\n\t\telement.async = true;\n\t\telement.charset = 'utf-8';\n\n\t\treturn doc.getElementsByTagName('head')[0].appendChild(element);\n\t}\n\n\tfunction remove(id, frameDoc, cleanup){\n\t\tdomConstruct.destroy(dom.byId(id, frameDoc));\n\n\t\tif(callbacks[id]){\n\t\t\tif(cleanup){\n\t\t\t\t// set callback to a function that deletes itself so requests that\n\t\t\t\t// are in-flight don't error out when returning and also\n\t\t\t\t// clean up after themselves\n\t\t\t\tcallbacks[id] = function(){\n\t\t\t\t\tdelete callbacks[id];\n\t\t\t\t};\n\t\t\t}else{\n\t\t\t\tdelete callbacks[id];\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction _addDeadScript(dfd){\n\t\t// Be sure to check ioArgs because it can dynamically change in the dojox/io plugins.\n\t\t// See http://bugs.dojotoolkit.org/ticket/15890.\n\t\tvar options = dfd.response.options,\n\t\t\tframeDoc = options.ioArgs ? options.ioArgs.frameDoc : options.frameDoc;\n\n\t\tdeadScripts.push({ id: dfd.id, frameDoc: frameDoc });\n\n\t\tif(options.ioArgs){\n\t\t\toptions.ioArgs.frameDoc = null;\n\t\t}\n\t\toptions.frameDoc = null;\n\t}\n\n\tfunction canceler(dfd, response){\n\t\tif(dfd.canDelete){\n\t\t\t//For timeouts and cancels, remove the script element immediately to\n\t\t\t//avoid a response from it coming back later and causing trouble.\n\t\t\tscript._remove(dfd.id, response.options.frameDoc, true);\n\t\t}\n\t}\n\tfunction isValid(response){\n\t\t//Do script cleanup here. We wait for one inflight pass\n\t\t//to make sure we don't get any weird things by trying to remove a script\n\t\t//tag that is part of the call chain (IE 6 has been known to\n\t\t//crash in that case).\n\t\tif(deadScripts && deadScripts.length){\n\t\t\tarray.forEach(deadScripts, function(_script){\n\t\t\t\tscript._remove(_script.id, _script.frameDoc);\n\t\t\t\t_script.frameDoc = null;\n\t\t\t});\n\t\t\tdeadScripts = [];\n\t\t}\n\n\t\treturn response.options.jsonp ? !response.data : true;\n\t}\n\tfunction isReadyScript(response){\n\t\treturn !!this.scriptLoaded;\n\t}\n\tfunction isReadyCheckString(response){\n\t\tvar checkString = response.options.checkString;\n\n\t\treturn checkString && eval('typeof(' + checkString + ') !== \"undefined\"');\n\t}\n\tfunction handleResponse(response, error){\n\t\tif(this.canDelete){\n\t\t\t_addDeadScript(this);\n\t\t}\n\t\tif(error){\n\t\t\tthis.reject(error);\n\t\t}else{\n\t\t\tthis.resolve(response);\n\t\t}\n\t}\n\n\tfunction script(url, options, returnDeferred){\n\t\tvar response = util.parseArgs(url, util.deepCopy({}, options));\n\t\turl = response.url;\n\t\toptions = response.options;\n\n\t\tvar dfd = util.deferred(\n\t\t\tresponse,\n\t\t\tcanceler,\n\t\t\tisValid,\n\t\t\toptions.jsonp ? null : (options.checkString ? isReadyCheckString : isReadyScript),\n\t\t\thandleResponse\n\t\t);\n\n\t\tlang.mixin(dfd, {\n\t\t\tid: mid + (counter++),\n\t\t\tcanDelete: false\n\t\t});\n\n\t\tif(options.jsonp){\n\t\t\tvar queryParameter = new RegExp('[?&]' + options.jsonp + '=');\n\t\t\tif(!queryParameter.test(url)){\n\t\t\t\turl += (~url.indexOf('?') ? '&' : '?') +\n\t\t\t\t\toptions.jsonp + '=' +\n\t\t\t\t\t(options.frameDoc ? 'parent.' : '') +\n\t\t\t\t\tmid + '_callbacks.' + dfd.id;\n\t\t\t}\n\n\t\t\tdfd.canDelete = true;\n\t\t\tcallbacks[dfd.id] = function(json){\n\t\t\t\tresponse.data = json;\n\t\t\t\tdfd.handleResponse(response);\n\t\t\t};\n\t\t}\n\n\t\tif(util.notify){\n\t\t\tutil.notify.emit('send', response, dfd.promise.cancel);\n\t\t}\n\n\t\tif(!options.canAttach || options.canAttach(dfd)){\n\t\t\tvar node = script._attach(dfd.id, url, options.frameDoc, function (error) {\n\t\t\t\tif (!(error instanceof Error)) {\n\t\t\t\t\tvar newError = new Error('Error loading ' + (error.target ? error.target.src : 'script'));\n\t\t\t\t\tnewError.source = error;\n\t\t\t\t\terror = newError;\n\t\t\t\t}\n\t\t\t\tdfd.reject(error);\n\t\t\t\tscript._remove(dfd.id, options.frameDoc, true);\n\t\t\t});\n\n\t\t\tif(!options.jsonp && !options.checkString){\n\t\t\t\tvar handle = on(node, loadEvent, function(evt){\n\t\t\t\t\tif(evt.type === 'load' || readyRegExp.test(node.readyState)){\n\t\t\t\t\t\thandle.remove();\n\t\t\t\t\t\tdfd.scriptLoaded = evt;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\twatch(dfd);\n\n\t\treturn returnDeferred ? dfd : dfd.promise;\n\t}\n\tscript.get = script;\n\t/*=====\n\tscript = function(url, options){\n\t\t// summary:\n\t\t//\t\tSends a request using a script element with the given URL and options.\n\t\t// url: String\n\t\t//\t\tURL to request\n\t\t// options: dojo/request/script.__Options?\n\t\t//\t\tOptions for the request.\n\t\t// returns: dojo/request.__Promise\n\t};\n\tscript.__BaseOptions = declare(request.__BaseOptions, {\n\t\t// jsonp: String?\n\t\t//\t\tThe URL parameter name that indicates the JSONP callback string.\n\t\t//\t\tFor instance, when using Yahoo JSONP calls it is normally,\n\t\t//\t\tjsonp: \"callback\". For AOL JSONP calls it is normally\n\t\t//\t\tjsonp: \"c\".\n\t\t// checkString: String?\n\t\t//\t\tA string of JavaScript that when evaluated like so:\n\t\t//\t\t\"typeof(\" + checkString + \") != 'undefined'\"\n\t\t//\t\tbeing true means that the script fetched has been loaded.\n\t\t//\t\tDo not use this if doing a JSONP type of call (use `jsonp` instead).\n\t\t// frameDoc: Document?\n\t\t//\t\tThe Document object of a child iframe. If this is passed in, the script\n\t\t//\t\twill be attached to that document. This can be helpful in some comet long-polling\n\t\t//\t\tscenarios with Firefox and Opera.\n\t});\n\tscript.__MethodOptions = declare(null, {\n\t\t// method: String?\n\t\t//\t\tThis option is ignored. All requests using this transport are\n\t\t//\t\tGET requests.\n\t});\n\tscript.__Options = declare([script.__BaseOptions, script.__MethodOptions]);\n\n\tscript.get = function(url, options){\n\t\t// summary:\n\t\t//\t\tSend an HTTP GET request using a script element with the given URL and options.\n\t\t// url: String\n\t\t//\t\tURL to request\n\t\t// options: dojo/request/script.__BaseOptions?\n\t\t//\t\tOptions for the request.\n\t\t// returns: dojo/request.__Promise\n\t};\n\t=====*/\n\n\t// TODO: Remove in 2.0\n\tscript._attach = attach;\n\tscript._remove = remove;\n\tscript._callbacksProperty = mid + '_callbacks';\n\n\treturn script;\n});\n","define(['./create', './RequestError'], function(create, RequestError){\n\t// module:\n\t//\t\tdojo/errors/RequestTimeoutError\n\n\t/*=====\n\t return function(){\n\t\t // summary:\n\t\t //\t\tTODOC\n\t };\n\t =====*/\n\n\treturn create(\"RequestTimeoutError\", null, RequestError, {\n\t\tdojoType: \"timeout\"\n\t});\n});\n","\"use strict\";\n\n// Copyright 2012-2020 The MathWorks, Inc.\ndefine(['dojo/_base/array', 'dojo/_base/declare', 'dojo/_base/lang'], function (array, declare, lang) {\n /**\n * The FaultManager is responsible for handling transport and container level faults. These\n * faults are given to the fault manager through the \"handleFault\" method. The fault is passed\n * to registered fault handlers so that other parts of the application can have a chance to\n * clean up or perform other actions.\n */\n return declare([], {\n constructor: function constructor(args) {\n args = args || {};\n this.faultHandlers = args.faultHandlers || {};\n this.topLevelHandlers = args.topLevelHandlers || [];\n this.endPointLevelHandlers = args.endPointLevelHandlers || {};\n },\n\n /**\n * Register a handler function which is called to handle container or transport faults\n * related to the specified request message type. If a fault occurs while processing a\n * transaction with the specified type of message in it, the handler will be called.\n * @param messageType Type of message to register a fault handler for.\n * @param handlerFunction Function object to call. This will be passed the request context\n * and the fault.\n * @param scope Optional scope to bind the function to.\n */\n registerFaultHandler: function registerFaultHandler(messageType, handlerFunction, scope) {\n if (scope) {\n handlerFunction = lang.hitch(scope, handlerFunction);\n }\n\n this.faultHandlers[messageType] = handlerFunction;\n },\n\n /**\n * Deregisters a message fault handler.\n * @param messageType Type of message.\n */\n deregisterFaultHandler: function deregisterFaultHandler(messageType) {\n delete this.faultHandlers[messageType];\n },\n\n /**\n * Register a handler function which is called to handle container or transport faults for.\n * @param faultMatcher A query string to match against the fault code. This supports \"*\" for\n * wild carding and \"||\" for multiple conditions.\n * @param handlerFunction Function object to call. This will be passed the request context\n * and the fault object. If no handler is specified, the matching fault will be ignored.\n * @param scope Optional scope to bind the function to.\n * @return Returns a token which can be used to deregister the handler.\n */\n registerTopLevelFaultHandler: function registerTopLevelFaultHandler(faultMatcher, handlerFunction, scope) {\n var handler;\n\n if (scope) {\n handlerFunction = lang.hitch(scope, handlerFunction);\n }\n\n if (lang.isString(faultMatcher)) {\n if (faultMatcher === '*') {\n handler = {\n matcher: faultMatcher,\n handler: handlerFunction\n };\n this.defaultTopLevelHandler = handlerFunction;\n return handler;\n }\n\n faultMatcher = this._constructMatcherFromQuery(faultMatcher);\n }\n\n handler = {\n matcher: faultMatcher,\n handler: handlerFunction\n };\n this.topLevelHandlers.push(handler);\n return handler;\n },\n registerEndpointLevelFaultHandler: function registerEndpointLevelFaultHandler(endPoint, faultMatcher, handlerFunction, scope) {\n var handler;\n\n if (scope) {\n handlerFunction = lang.hitch(scope, handlerFunction);\n }\n\n if (lang.isString(faultMatcher)) {\n faultMatcher = this._constructMatcherFromQuery(faultMatcher);\n }\n\n handler = {\n matcher: faultMatcher,\n handler: handlerFunction\n };\n\n if (!this.endPointLevelHandlers[endPoint]) {\n this.endPointLevelHandlers[endPoint] = [];\n }\n\n this.endPointLevelHandlers[endPoint].push(handler);\n return handler;\n },\n\n /**\n * Deregisters a message fault handler.\n * @param registrationToken Token returned by the registration function.\n */\n deregisterTopLevelFaultHandler: function deregisterTopLevelFaultHandler(registrationToken) {\n var index = this.topLevelHandlers.indexOf(registrationToken);\n\n if (index > -1) {\n this.topLevelHandlers.splice(index, 1);\n } else if (registrationToken.matcher === '*') {\n delete this.defaultTopLevelHandler;\n }\n },\n\n /**\n * Construct a matcher function based on a query string which includes wild card(s).\n * @param query A query string.\n */\n _constructMatcherFromQuery: function _constructMatcherFromQuery(query) {\n var terms = query.split('||');\n var regexs = [];\n terms.forEach(function (term) {\n term = lang.trim(term);\n term = term.replace(/([.])/g, '\\\\$1');\n term = term.replace(/\\*/g, '.*');\n regexs.push(new RegExp('^' + term + '$'));\n });\n return function (fault) {\n return array.some(regexs, function (regex) {\n return regex.test(fault.faultCode || fault.code || '');\n });\n };\n },\n\n /**\n * Method used by the ResponseManager to pass off handling of any faults. All registered\n * fault handlers with messages in the request will be called.\n * @param transaction Transaction containing the fault.\n */\n handleFault: function handleFault(transaction) {\n var type;\n\n var handleWithClassifier = function handleWithClassifier(type, message) {\n var typeWithClassifier;\n var classifier = transaction.getMessageClassifier(message);\n\n if (classifier) {\n typeWithClassifier = [type, classifier].join(':');\n\n if (this.faultHandlers[typeWithClassifier]) {\n this.faultHandlers[typeWithClassifier](transaction.fault, transaction.context);\n }\n }\n };\n\n for (type in transaction.requestMessages) {\n if (transaction.requestMessages.hasOwnProperty(type)) {\n if (this.faultHandlers[type]) {\n this.faultHandlers[type](transaction.fault, transaction.context);\n }\n\n var messages = transaction.requestMessages[type];\n\n if (Array.isArray(messages)) {\n messages.forEach(lang.hitch(this, handleWithClassifier, type));\n }\n }\n }\n\n if (this.faultHandlers['*']) {\n this.faultHandlers['*'](transaction.fault, transaction.context);\n }\n\n if (this.endPointLevelHandlers[transaction.endPointName]) {\n this._handleEndpointLevelFault(transaction);\n } else {\n this._handleTopLevelFault(transaction);\n }\n },\n _handleEndpointLevelFault: function _handleEndpointLevelFault(transaction) {\n var isFaultHandled = false; // find all of the handlers which match the fault.\n\n var matching = array.filter(this.endPointLevelHandlers[transaction.endPointName], function (matcherAndHandler) {\n return matcherAndHandler.matcher.call(this, transaction.fault, transaction.context);\n }, this);\n\n if (matching.length > 0 && matching[0].handler) {\n isFaultHandled = true;\n matching[0].handler.call(this, transaction.fault, transaction.context, transaction);\n }\n\n return isFaultHandled;\n },\n _handleTopLevelFault: function _handleTopLevelFault(transaction) {\n // find all of the handlers which match the fault.\n var matching = array.filter(this.topLevelHandlers, function (matcherAndHandler) {\n return matcherAndHandler.matcher.call(this, transaction.fault, transaction.context);\n }, this); // todo: come up with some smarter scheme to handle the case where multiple matchers fit\n // a fault Use the first matching handler, or the default handler if none matched.\n\n var handler = matching.length > 0 ? matching[0].handler : this.defaultTopLevelHandler;\n\n if (handler) {\n handler.call(this, transaction.fault, transaction.context, transaction);\n }\n },\n\n /**\n * Method used by the Remote layer to handle all non transaction faults. Used\n * by IframeProxy load timeout\n * @param fault The fault object\n */\n handleNonTransactionFault: function handleNonTransactionFault(fault) {\n var matching = array.filter(this.topLevelHandlers, function (matcherAndHandler) {\n return matcherAndHandler.matcher.call(this, fault);\n }, this);\n var handler = matching.length > 0 ? matching[0].handler : this.defaultTopLevelHandler;\n\n if (handler) {\n handler.call(this, fault);\n }\n }\n });\n});\n//# sourceMappingURL=FaultManager.js.map\n","\"use strict\";\n\n// Copyright 2012-2020 The MathWorks, Inc.\ndefine(['dojo/_base/array', 'dojo/_base/declare', 'dojo/_base/Deferred', 'dojo/_base/lang', 'mw-remote/RemoteEndPointsManager', 'mw-remote/defaultMessageMapping', './Transaction'], function (array, declare, Deferred, lang, RemoteEndPointsManager, defaultMessageMapping, Transaction) {\n /**\n * The RequestManager is responsible for sending requests to the server. It takes a message and\n * bundles it up with and extra messages that need to be sent along with the main request. It\n * maintains a mapping of request types to extra types which need to be added. It also has a\n * registry of default factory functions which it uses to construct the extra messages\n * (registered with \"registerDefaultMethodFactory\").\n */\n return declare([], {\n defaultMapping: defaultMessageMapping,\n constructor: function constructor(args) {\n args = args || {};\n this.defaultFactories = args.defaultFactories || {};\n this.mockHandlers = args.mockHandlers || {};\n this.mapping = args.mapping || this.defaultMapping;\n this.responseManager = args.responseManager;\n },\n\n /**\n * Register a factor function which constructs messages of the specified type.\n * @param type Type of message that the registered function constructs.\n * @param factoryFunction Function object to call. This will be passed the transaction\n * context which was passed to sendMessage. This function must return an object or array of\n * objects with the specified message schema.\n * @param scope Optional scope to bind the function to.\n */\n registerDefaultMessageFactory: function registerDefaultMessageFactory(type, factoryFunction, scope) {\n if (scope) {\n factoryFunction = lang.hitch(scope, factoryFunction);\n }\n\n this.defaultFactories[type] = factoryFunction;\n },\n\n /**\n * Deregisters a message factory function.\n * @param type Type of message.\n */\n deregisterDefaultMessageFactory: function deregisterDefaultMessageFactory(type) {\n delete this.defaultFactories[type];\n },\n\n /**\n * Registers a function that will generate a mock response for the given message\n * type. If a message in the transaction matches the type, then the response\n * generator function gets called, and the message type is not sent to the remote\n * endpoint.\n *\n * @param type The type of the request message for which we'll generate a mock response.\n * @param mockResponseGenerator The response generator function. This will be called in the\n * context of the request manager, and it will be passed the message array for the\n * registered type and a copy of the transaction object created for the request. The result\n * must be a Deferred which will send the transaction on to the responseManager when it's\n * done.\n */\n registerMockResponseGenerator: function registerMockResponseGenerator(type, mockResponseGenerator, scope) {\n var that = this;\n mockResponseGenerator = lang.hitch(scope || this, mockResponseGenerator);\n\n this.mockHandlers[type] = function (request, transaction) {\n var deferred;\n var transactionCopy = Transaction.construct(transaction);\n deferred = mockResponseGenerator(request, transactionCopy);\n\n if (!deferred) {\n deferred = new Deferred();\n deferred.callback();\n }\n\n deferred.addCallback(function () {\n that.responseManager._processResult(transactionCopy);\n });\n };\n },\n deregisterMockResponseGenerator: function deregisterMockResponseGenerator(type) {\n delete this.mockHandlers[type];\n },\n\n /**\n * Send a message to the server. This will automatically create any extra messages which\n * need to be packaged along with the initial message(s).\n * @param message One or more messages defined in an Object:\n * \\{messageType: \\{param1:\"1\",param2:[1,2,3]\\}\\}, or\n * \\{messageType: \\{param1:\"1\",param2:[1,2,3]\\},\n * type2: \\{param1:\"1\",param2:[1,2,3]\\}\\}, or\n * \\{messageType: [\\{param1:\"1\",param2:[1,2,3]\\}]\\}\n * @param context Optional. Any arbitrary context to associate with the message. This data\n * is not sent to the server, but it is available to the default factory function (s) and\n * the response/fault handlers. This can be used for correlation between request/response\n * within a client of the remote layer.\n * @param classifier Optional. A string classifier for the message. This will be used when\n * there is a response/fault/mock registered with a classifier. This classifier applies to\n * all types in the message parameter.\n */\n sendMessage: function sendMessage(message, context, classifier) {\n var transactions = {};\n var mockTransactions = {};\n var endPointNames;\n var i;\n var endPointName;\n context = context || {}; // Construct and fill the transaction according to the endPoint Types\n\n this._createAndFillTransactions(message, context, classifier, transactions, mockTransactions);\n\n endPointNames = Object.keys(transactions);\n\n for (i = 0; i < endPointNames.length; i = i + 1) {\n endPointName = endPointNames[i];\n\n this._callMocks(mockTransactions[endPointName]);\n\n transactions[endPointName].send();\n this.responseManager.handleTransaction(transactions[endPointName]);\n }\n },\n\n /**\n * This function returns a new transaction.\n * @param endPointName\n * @param context\n * @return {*} transaction.\n * @private\n */\n _getTransaction: function _getTransaction(endPointName, context) {\n var transaction = Transaction.construct({\n context: context,\n computeToken: this.computeToken,\n endPointName: endPointName\n });\n return transaction;\n },\n\n /**\n * This function returns mock transaction.\n * @param endPointName\n * @param context\n * @param uuid\n * @return {*} mockTransaction.\n * @private\n */\n _getMockTransaction: function _getMockTransaction(endPointName, context, uuid) {\n var mockTransaction = Transaction.construct({\n context: context,\n computeToken: this.computeToken,\n endPointName: endPointName,\n uuid: uuid\n });\n return mockTransaction;\n },\n\n /**\n * This function loops through the messages passed. For each message type, it checks the\n * default message mappings and adds relevant messages to transaction. Transactions are\n * constructed per endPoint. Hence this function fills transactions object with transaction\n * per endPoint and messages mapped to each transaction.\n * @param message\n * @param context\n * @param classifier\n * @param transactions\n * @param mockTransactions\n * @private\n */\n _createAndFillTransactions: function _createAndFillTransactions(message, context, classifier, transactions, mockTransactions) {\n var type, classifiedType;\n\n var addToTransaction = function addToTransaction(extraMessageType) {\n var newMessage, typeParts, newMessageType, newClassifier, extraMessageEndPointName, transaction, mockTrans;\n extraMessageEndPointName = RemoteEndPointsManager.getEndPointForMessageType(extraMessageType);\n transaction = transactions[extraMessageEndPointName];\n mockTrans = mockTransactions[extraMessageEndPointName];\n\n if (!transaction) {\n transaction = this._getTransaction(extraMessageEndPointName, context);\n mockTrans = this._getMockTransaction(extraMessageEndPointName, context, transaction.uuid);\n transactions[extraMessageEndPointName] = transaction;\n mockTransactions[extraMessageEndPointName] = mockTrans;\n }\n\n if (this.defaultFactories[extraMessageType]) {\n newMessage = this.defaultFactories[extraMessageType](transaction.context);\n\n if (!newMessage) {\n // skip this message if it is null or undefined\n return;\n } // parse the message type for a classifier\n\n\n typeParts = extraMessageType.split(':');\n newMessageType = typeParts[0];\n newClassifier = typeParts.slice(1, typeParts.length).join(':'); // if there is a mock handler, put the message into a different transaction\n\n if (this.mockHandlers[extraMessageType]) {\n mockTrans.addRequestMessage(newMessageType, newMessage, newClassifier);\n } else {\n transaction.addRequestMessage(newMessageType, newMessage, newClassifier);\n mockTrans.addRequestMessage(newMessageType, newMessage, newClassifier);\n }\n }\n };\n\n var mockTransaction, transaction;\n\n for (type in message) {\n if (message.hasOwnProperty(type)) {\n var endPointName = RemoteEndPointsManager.getEndPointForMessageType(type);\n mockTransaction = mockTransactions[endPointName];\n transaction = transactions[endPointName];\n\n if (!transactions[endPointName]) {\n transaction = this._getTransaction(endPointName, context);\n mockTransaction = this._getMockTransaction(endPointName, context, transaction.uuid);\n transactions[endPointName] = transaction;\n mockTransactions[endPointName] = mockTransaction;\n }\n\n classifiedType = [type, classifier].join(':'); // if there is a mock handler, put the message into a different transaction\n\n if (this.mockHandlers[type] || this.mockHandlers[classifiedType]) {\n mockTransaction.addRequestMessage(type, message[type], classifier);\n } else {\n transaction.addRequestMessage(type, message[type], classifier);\n mockTransaction.addRequestMessage(type, message[type], classifier);\n }\n\n if (this.mapping[classifiedType]) {\n this.mapping[classifiedType].forEach(addToTransaction, this);\n } else if (this.mapping[type]) {\n this.mapping[type].forEach(addToTransaction, this);\n }\n }\n }\n },\n _callMocks: function _callMocks(mockTransaction) {\n var clone, type;\n var context = mockTransaction.context; // Don't clone the context\n\n delete mockTransaction.context;\n\n var callMocksWithClassifiers = function callMocksWithClassifiers(type, message) {\n var typeWithClassifier;\n var classifier = clone.getMessageClassifier(message);\n\n if (classifier) {\n typeWithClassifier = [type, classifier].join(':');\n\n if (this.mockHandlers[typeWithClassifier]) {\n this.mockHandlers[typeWithClassifier]([message], clone);\n }\n }\n }; // loop through and handle the mock request messages.\n\n\n for (type in mockTransaction.requestMessages) {\n if (mockTransaction.requestMessages.hasOwnProperty(type)) {\n // use mixin rather than clone to avoid a deep copy of the iframe proxy client\n // references\n clone = lang.mixin({}, mockTransaction);\n clone.context = context;\n\n if (this.mockHandlers.hasOwnProperty(type)) {\n // handle with the mock\n this.mockHandlers[type](clone.requestMessages[type], clone);\n }\n\n if (Array.isArray(clone.requestMessages[type])) {\n clone.requestMessages[type].forEach(lang.hitch(this, callMocksWithClassifiers, type));\n } else {\n callMocksWithClassifiers(type, clone.requestMessages[type]);\n }\n }\n }\n\n if (this.mockHandlers['*']) {\n this.mockHandlers['*'](type, clone.requestMessages[type], clone);\n }\n }\n });\n});\n//# sourceMappingURL=RequestManager.js.map\n","\"use strict\";\n\n// Copyright 2013-2022 The MathWorks, Inc.\n\n/**\n * This class is responsible for keeping track of all the endPoints with which remote layer\n * communicates. It provides a uniform API to create new endpoint, associate messages with that\n * endpoint, enable or disable the endpoint, create iframeProxy, for the endPoint\n */\ndefine(['dojo/_base/declare', 'dojo/_base/array', 'dojo/_base/Deferred', 'dojo/_base/lang', './iframeproxy/IframeProxyClient'], function (declare, arrayUtils, Deferred, lang, IframeProxyClient) {\n return declare([], {\n /**\n * Initializes the endPoints Collection.\n */\n constructor: function constructor() {\n this._initializeEndPointsCollection();\n },\n\n /**\n * Sets up the endPoints\n * @private\n */\n _initializeEndPointsCollection: function _initializeEndPointsCollection() {\n this.endPointsCollection = {\n ROUTER_LEAF_INSECURE_ENDPOINT: {\n routingHost: '',\n routingKey: '',\n iframeProxy: null,\n enabled: true,\n iframeProxyUrl: '',\n pathSuffix: 'messageservice/json',\n messages: ['RouterLogin', 'CreateAccount', 'CurrentUser', 'Login', 'UpdateAccount', 'ServiceRegistry', 'ClientType', 'AuthorizationDetails', 'AcquireMatlab'],\n iframeProxyName: 'remoteProducer',\n withCredentials: true,\n acceptsMessageContainerMessages: true\n },\n ROUTER_LEAF_SECURE_ENDPOINT: {\n routingHost: '',\n routingKey: '',\n iframeProxy: null,\n enabled: true,\n iframeProxyUrl: '',\n pathSuffix: 'messageservice/json/secure',\n messages: [],\n iframeProxyName: 'remoteProducer',\n withCredentials: true,\n acceptsMessageContainerMessages: true\n },\n WORKER_ENDPOINT: {\n routingHost: '',\n routingKey: '',\n iframeProxy: null,\n enabled: false,\n iframeProxyUrl: '',\n pathSuffix: 'messageservice/json/secure',\n messages: [],\n iframeProxyName: 'remoteWorkerProducer',\n withCredentials: true,\n acceptsMessageContainerMessages: true\n },\n WORKER_ASYNC_ENDPOINT: {\n routingHost: '',\n routingKey: '',\n iframeProxy: null,\n enabled: true,\n iframeProxyUrl: '',\n pathSuffix: 'messageservice/async',\n messages: [],\n iframeProxyName: 'remoteWorkerAsyncProducer',\n withCredentials: true,\n acceptsMessageContainerMessages: true\n },\n USAGE_DATA_ROUTER_ENDPOINT: {\n routingHost: '',\n routingKey: '',\n iframeProxy: null,\n enabled: true,\n iframeProxyUrl: '',\n pathSuffix: 'udc/service/v1/events',\n messages: ['UsageDataEventCollection'],\n iframeProxyName: 'remoteUDCProducer',\n withCredentials: false,\n acceptsMessageContainerMessages: false\n },\n HELP_DATA_ROUTER_ENDPOINT: {\n routingHost: '',\n routingKey: '',\n iframeProxy: null,\n enabled: true,\n iframeProxyUrl: '',\n pathSuffix: '',\n messages: ['HelpDataEventCollection'],\n iframeProxyName: 'doc_center',\n withCredentials: false,\n acceptsMessageContainerMessages: false\n }\n };\n },\n\n /**\n * This function is used to rest the EndPointsManager's endPointsCollection.\n */\n reset: function reset() {\n this._initializeEndPointsCollection();\n },\n\n /**\n * This can be used to set up an endPoint during runtime.\n * @param endPointName : Name of the endPoint\n * @param isEnabled : During the initialization, the endPoint can be enabled or disabled\n * using this param\n * @param pathSuffix : This is the suffix of the URL to which we post messages.\n * @param IframeProxyName: Name of the iframe created.\n * @param isMessageContainerBased: This endpoint can be used to determine if it is message container Based or not\n */\n setUpNewEndPoint: function setUpNewEndPoint(endPointName, isEnabled, pathSuffix, IframeProxyName, isMessageContainerBased) {\n this.endPointsCollection[endPointName] = {\n routingHost: '',\n routingKey: '',\n pathSuffix: pathSuffix,\n enabled: isEnabled,\n messages: [],\n iframeProxy: null,\n iframeProxyName: IframeProxyName,\n acceptsMessageContainerMessages: isMessageContainerBased\n };\n },\n\n /**\n * returns the suffix of endPoint or URL.\n * @param endPointName\n * @return {string}\n */\n getPathSuffixForEndPoint: function getPathSuffixForEndPoint(endPointName) {\n return this.endPointsCollection[endPointName].pathSuffix;\n },\n\n /**\n * set the suffix for endPoint or URL.\n * @param endPointName\n * @param pathSuffix\n */\n setPathSuffixForEndPoint: function setPathSuffixForEndPoint(endPointName, pathSuffix) {\n this.endPointsCollection[endPointName].pathSuffix = pathSuffix;\n },\n\n /**\n * This function returns array of endPoint names. This ensures that endPointsCollection is\n * not modified outside this manager.\n * @return {} - Object containing endPointNames\n */\n getEndPointNames: function getEndPointNames() {\n var endPointsEnumeration = {};\n var endPointName;\n\n for (endPointName in this.endPointsCollection) {\n if (this.endPointsCollection.hasOwnProperty(endPointName)) {\n endPointsEnumeration[endPointName] = endPointName;\n }\n }\n\n return endPointsEnumeration;\n },\n\n /**\n * This function is used to set Routing Host and Routing Key for the endPoint. IframeProxy property\n * is also set up as a part of it.\n * @param endPointName\n * @param routingHost\n * @param routingKey\n */\n setRoutingHostAndRoutingKey: function setRoutingHostAndRoutingKey(endPointName, routingHost, routingKey) {\n if (routingHost && routingHost.lastIndexOf('/') !== routingHost.length - 1) {\n routingHost += '/';\n }\n\n this.endPointsCollection[endPointName].routingHost = routingHost;\n\n if (routingKey) {\n this.endPointsCollection[endPointName].routingKey = routingKey;\n }\n\n this._setIframeRoutingHostAndRoutingkey(endPointName);\n },\n\n /**\n * This function is used to set up the iframe for the endPoint.\n * @param endPointName\n * @private\n */\n _setIframeRoutingHostAndRoutingkey: function _setIframeRoutingHostAndRoutingkey(endPointName) {\n var iframeProxyClient = this.getIframeProxyClientForEndPoint(endPointName);\n\n if (iframeProxyClient) {\n iframeProxyClient.setRemotePageHost(this.endPointsCollection[endPointName].routingHost, this.endPointsCollection[endPointName].routingKey, null, this.endPointsCollection[endPointName].iframeProxyUrl, {\n withCredentials: this.endPointsCollection[endPointName].withCredentials\n });\n }\n },\n\n /**\n * Returns routingHost for the endPoint.\n * @param endPointName\n * @return routingHost\n */\n getRoutingHost: function getRoutingHost(endPointName) {\n return this.endPointsCollection[endPointName].routingHost;\n },\n\n /**\n * Returns Routing Key for the endPoint.\n * @param endPointName\n * @return {}\n */\n getRoutingKey: function getRoutingKey(endPointName) {\n return this.endPointsCollection[endPointName].routingKey;\n },\n\n /**\n * Returns messageTypes that are mapped to endPoint\n * @param endPointName\n * @return {*}\n */\n getMessageTypesMappedToEndPoint: function getMessageTypesMappedToEndPoint(endPointName) {\n return this.endPointsCollection[endPointName].messages;\n },\n\n /**\n * Returns boolean if the endPoint is enabled or not.\n * @param endPointName\n * @return boolean : true | false\n */\n isEndPointEnabled: function isEndPointEnabled(endPointName) {\n return this.endPointsCollection[endPointName].enabled;\n },\n\n /**\n * Maps message types to endPoints\n * @param endPointName\n * @param messages\n */\n setMessageTypesToEndPoint: function setMessageTypesToEndPoint(endPointName, messages) {\n this.endPointsCollection[endPointName].messages = messages;\n },\n\n /**\n * Sets the endPoint's isEnabled status to true\n * @param endPointName\n */\n enableEndPoint: function enableEndPoint(endPointName) {\n this.endPointsCollection[endPointName].enabled = true;\n },\n\n /**\n * Disables endPoint\n * @param endPointName\n */\n disableEndPoint: function disableEndPoint(endPointName) {\n this.endPointsCollection[endPointName].enabled = false;\n },\n\n /**\n * Gets appropriate endPoint based on the messageType passed. If an enabled endPoint is not\n * found, default endpoint ROUTER_LEAF_SECURE_ENDPOINT is returned.\n * @param messageType\n * @return String\n */\n getEndPointForMessageType: function getEndPointForMessageType(messageType) {\n var endPointType = null;\n var endPointName;\n\n for (endPointName in this.endPointsCollection) {\n if (this.endPointsCollection.hasOwnProperty(endPointName)) {\n endPointType = arrayUtils.lastIndexOf(this.endPointsCollection[endPointName].messages, messageType) > -1 ? endPointName : endPointType;\n\n if (endPointType) {\n if (this.isEndPointEnabled(endPointType)) {\n break;\n } else {\n // Set it back to null so that the default routing is applied.\n endPointType = null;\n }\n }\n }\n }\n\n return endPointType || this.getEndPointNames().ROUTER_LEAF_SECURE_ENDPOINT;\n },\n\n /**\n * Returns complete URL to which we must post messages.\n * @param endPointName\n * @return {*} String\n */\n getRemoteUrlForEndPoint: function getRemoteUrlForEndPoint(endPointName) {\n var url = this.endPointsCollection[endPointName].routingHost + this.endPointsCollection[endPointName].pathSuffix;\n\n if (this.endPointsCollection[endPointName].routingKey) {\n url = url + '?routingkey=' + this.endPointsCollection[endPointName].routingKey;\n }\n\n return url;\n },\n\n /**\n * Sets iframeProxyClient for the endPoint.\n * @param endPointName\n * @param iframeProxyClient\n */\n setIframeProxyClientForEndPoint: function setIframeProxyClientForEndPoint(endPointName, iframeProxyClient) {\n this.endPointsCollection[endPointName].iframeProxy = iframeProxyClient;\n },\n\n /**\n * gets IframeProxyClient for the endpoint.\n * @param endPointName\n * @return {*}\n */\n getIframeProxyClientForEndPoint: function getIframeProxyClientForEndPoint(endPointName) {\n var iframeProxyClient = this.endPointsCollection[endPointName].iframeProxy;\n\n if (!iframeProxyClient) {\n iframeProxyClient = new IframeProxyClient(this.endPointsCollection[endPointName].iframeProxyName);\n this.endPointsCollection[endPointName].iframeProxy = iframeProxyClient;\n }\n\n return iframeProxyClient;\n },\n\n /**\n * This function can be used to determine if the endPoint is message container based or not.\n * @param endPointName\n * @return {boolean}\n */\n isEndpointMessageContainerBased: function isEndpointMessageContainerBased(endPointName) {\n if (endPointName && this.endPointsCollection[endPointName]) {\n return this.endPointsCollection[endPointName].acceptsMessageContainerMessages;\n } else {\n return true;\n }\n },\n\n /**\n * Adds messageTypes to the endpoint.\n * @param endPointName\n * @param message\n */\n addMessagesTypesToEndPoint: function addMessagesTypesToEndPoint(endPointName, message) {\n if (this.endPointsCollection[endPointName] && this.endPointsCollection[endPointName].messages.indexOf(message) === -1) {\n this.endPointsCollection[endPointName].messages.push(message);\n }\n },\n\n /**\n * Removes messageTypes from the endPoint.\n * @param endPointName\n * @param message\n */\n removeMessageTypesFromEndPoint: function removeMessageTypesFromEndPoint(endPointName, message) {\n if (this.endPointsCollection[endPointName]) {\n var index = this.endPointsCollection[endPointName].messages.indexOf(message);\n\n if (index > -1) {\n this.endPointsCollection[endPointName].messages.splice(index, 1);\n }\n }\n }\n });\n});\n//# sourceMappingURL=EndPointsManager.js.map\n","\"use strict\";\n\n// Copyright 2012-2020 The MathWorks, Inc.\n\n/**\n * Default request mapping used by the RequestManager\n */\ndefine([], function () {\n return {\n 'Eval': ['CurrentFolder', 'ListFolder'],\n 'Eval:Ping': [],\n // Send nothing else for ping\n 'Eval:RunFile': ['UpdateFile', 'CurrentFolder', 'ListFolder'],\n 'Eval:MlsPublishPre': ['UpdateFile'],\n 'FEval:liveEvalInstrumentCode': [],\n // Request mapping was Workspace -- only used by Old\n // Workspace Browser.\n 'Interrupt': [],\n 'FEval:GetFigures': ['CurrentFolder', 'ListFolder'],\n 'FEval:CloseFigure': ['FEval:GetFigures'],\n 'FEval:SelectFigure': ['FEval:GetFigures'],\n 'FEval:ResetAxes': ['FEval:GetFigures'],\n 'FEval:ResizeFigure': ['FEval:GetFigures'],\n 'FEval:AxesInteraction2D': ['FEval:GetFigures'],\n 'FEval:AxesInteraction3D': ['FEval:GetFigures'],\n 'CurrentUser': ['ServiceRegistry'],\n 'RouterLogin': ['ServiceRegistry'],\n 'CurrentFolder': ['ListFolder'],\n 'MoveFile': ['CurrentFolder'],\n 'Variable': [],\n // Request mapping was Workspace -- only used by Old Workspace Browser.\n 'CloseFile': ['SaveSession'],\n // save the session if a file is closed\n 'UpdateFile': ['SaveSession'],\n // save the session if a file is manually saved\n 'SaveSession': ['UpdateFile'],\n // update files when the session is saved\n 'SaveSessionState': ['UpdateFile'],\n // update files when the session is saved\n 'Logout': ['CloseFile'],\n // close files on logout\n 'UpdateShare': ['ListFolder'],\n // trigger a list folder so badge can update,\n 'AcquireMatlab': ['ServiceRegistry']\n };\n});\n//# sourceMappingURL=defaultMessageMapping.js.map\n","\"use strict\";\n\n// Copyright 2012-2020 The MathWorks, Inc.\ndefine(['dojo/_base/declare', 'dojo/_base/lang', 'mw-log/Log', 'mw-remote/RemoteEndPointsManager'], function (declare, lang, Log, RemoteEndPointsManager) {\n /**\n * The ResponseManager is responsible for handling the response to server requests. The\n * RequestManager hands the ResponseManager a Transaction object which will be un-packed. Each\n * message in the response will be sent to the registered response handler function. Response\n * handlers are registered through the \"registerResponseHandler\" function.\n */\n return declare([], {\n constructor: function constructor(args) {\n args = args || {};\n this.responseHandlers = args.responseHandlers || {};\n this.faultManager = args.faultManager;\n this.transactions = args.transactions || [];\n },\n\n /**\n * Register a handler function which is called to handle any response messages of the\n * specified type.\n * @param type Type of message that the registered function handles.\n * @param handlerFunction Function object to call. This will be passed the request context\n * and the response message.\n * @param scope Optional scope to bind the function to.\n */\n registerResponseHandler: function registerResponseHandler(type, handlerFunction, scope) {\n if (scope) {\n handlerFunction = lang.hitch(scope, handlerFunction);\n }\n\n this.responseHandlers[type] = handlerFunction;\n },\n\n /**\n * Deregisters a message response handler.\n * @param type Type of message.\n */\n deregisterResponseHandler: function deregisterResponseHandler(type) {\n delete this.responseHandlers[type];\n },\n\n /**\n * Handle a transaction. This is used by the RequestManager to hand off the transaction to\n * the response manager.\n * @param transaction The transaction to handle\n */\n handleTransaction: function handleTransaction(transaction) {\n this.transactions.push(transaction); // add the transaction to the stack.\n\n transaction.deferred.addCallback(lang.hitch(this, this._processAll, transaction));\n transaction.deferred.addCallback(lang.hitch(this, this._processResult, transaction));\n transaction.deferred.addErrback(lang.hitch(this, this._processAll, transaction));\n transaction.deferred.addErrback(lang.hitch(this, this._processFault, transaction));\n },\n\n /**\n * Callback added for both success and fault.\n * @param transaction\n */\n _processAll: function _processAll(transaction) {\n var index; // remove the transaction from the array\n\n index = this.transactions.indexOf(transaction);\n\n if (index >= 0) {\n this.transactions.splice(index, 1); // remove the transaction\n }\n },\n\n /**\n * Callback function for transactions.\n * @param transaction Transaction to process.\n */\n _processResult: function _processResult(transaction) {\n transaction.getResponseMessageTypes().forEach(function (responseType) {\n var responseMessages = transaction.responseMessages[responseType];\n var unclassifiedResponses = [];\n\n try {\n if (Array.isArray(responseMessages)) {\n responseMessages.forEach(function (responseMessage) {\n var typeWithClassifier;\n var classifier = transaction.getMessageClassifier(responseMessage);\n\n if (classifier) {\n typeWithClassifier = [responseType, classifier].join(':');\n var that = this;\n var handled = false;\n transaction.getRequestMessageTypes().forEach(function (requestType) {\n var requestMessages = transaction.requestMessages[requestType];\n\n if (Array.isArray(requestMessages)) {\n requestMessages.forEach(function (requestMessage) {\n if (that.responseHandlers[typeWithClassifier] && requestMessage.uuid === responseMessage.uuid) {\n that.responseHandlers[typeWithClassifier]([responseMessage], transaction.context);\n handled = true;\n }\n });\n } else {\n if (that.responseHandlers[typeWithClassifier] && requestMessages.uuid === responseMessage.uuid) {\n that.responseHandlers[typeWithClassifier]([responseMessage], transaction.context);\n handled = true;\n }\n }\n });\n\n if (!handled) {\n // if no classified handler was found, then it should be handled\n // by the registered unclassified response handler.\n unclassifiedResponses.push(responseMessage);\n }\n } else {\n unclassifiedResponses.push(responseMessage);\n }\n }, this); // Only call handlers if there are unclassified responses\n\n if (unclassifiedResponses.length > 0 && this.responseHandlers[responseType]) {\n this.responseHandlers[responseType](unclassifiedResponses, transaction.context);\n }\n\n if (this.responseHandlers['*']) {\n this.responseHandlers['*'](responseType, transaction.responseMessages[responseType], transaction.context);\n }\n }\n } catch (e) {\n var jsonIndentation = 2;\n Log.error('Remote: Fault occurred while processing response.' + '\\nMessage: ' + e.message + '\\nType: ' + responseType + '\\nResponse: ' + JSON.stringify(responseMessages, null, jsonIndentation));\n }\n }, this);\n\n this._processUdcResponses(transaction);\n\n if (transaction.fault) {\n this.faultManager.handleFault(transaction);\n }\n },\n\n /**\n * For non message container based messages, response structure is different. Normal message\n * container based response messages have following structure.\n * {\n \"messages\": {\n \"RouterLoginResponse\": [\n {\n \"userInfo\": null,\n \"messageFaults\": [\n {\n \"message\": \"SecurityService.InvalidLoginCredentials\",\n \"faultCode\": \"SecurityService.InvalidLoginCredentials\"\n }\n ],\n \"uuid\": \"F356A3C4\"\n }\n ]\n }\n }\n where as non message container based messages have following structure\n {\"success\":true,\"messageFaults\":[{\n \"description\": UserNotAuthorized\n \"faultCode\": User_Not_Authorized\n }]}. They are not wrapped inside the response type. Hence we tie response handlers to\n request types.\n * @param transaction\n * @private\n */\n _processUdcResponses: function _processUdcResponses(transaction) {\n var isMessageContainerBased = RemoteEndPointsManager.isEndpointMessageContainerBased(transaction.endPointName);\n\n if (!isMessageContainerBased) {\n var requestType = Object.keys(transaction.requestMessages)[0];\n\n if (this.responseHandlers[requestType]) {\n this.responseHandlers[requestType](transaction.responseMessages);\n }\n }\n },\n\n /**\n * Errback function for transactions.\n * @param transaction Transaction to process.\n */\n _processFault: function _processFault(transaction) {\n this.faultManager.handleFault(transaction);\n }\n });\n});\n//# sourceMappingURL=ResponseManager.js.map\n","\"use strict\";\n\n// Copyright 2019-2020 The MathWorks, Inc.\ndefine(['dojo/_base/declare', 'mw-remote/impl/JsonTransaction', 'mw-remote/utils/SendMessageUtil'], function (declare, JsonTransaction, SendMessageUtil) {\n /**\n * Internal private class to send of data to the server\n * This classs makes use of the Utilty file to send the transaction\n */\n return declare([JsonTransaction], {\n /**\n * This method is used to send the data. It fetches iframeProxyClient from the\n * RemoteEndPointsManager and\n * sends the message.\n * @param {object} data - data to send\n * @param {object} endPointName - endPoint to which the data is to be sent\n * @return {*} a promise\n * @private\n */\n _doSend: function _doSend(data) {\n return SendMessageUtil.sendPayload(data, this.endPointName);\n }\n });\n});\n//# sourceMappingURL=AutoDetectedTransaction.js.map\n","\"use strict\";\n\n// Copyright 2012-2020 The MathWorks, Inc.\ndefine(['dojo/_base/declare', 'dojo/_base/xhr', 'dojo/_base/lang', 'mw-remote/RemoteEndPointsManager', './Transaction'], function (declare, xhr, lang, RemoteEndPointsManager, Transaction) {\n return declare(Transaction, {\n constructor: function constructor(args) {\n args = args || {};\n this.uuid = args.uuid || this._generateUuid();\n },\n\n /**\n * Convert the request messages into a JSON string representation. The request message\n * constructed is different for message container based endPoints Vs Non MessaageContainer\n * based endPoints.\n */\n _getRequest: function _getRequest(messages) {\n var isMessageContainerBased = RemoteEndPointsManager.isEndpointMessageContainerBased(this.endPointName);\n var request = null;\n\n if (isMessageContainerBased) {\n request = {\n uuid: this.uuid,\n messages: messages\n };\n\n if (this.computeToken) {\n request.computeToken = this.computeToken;\n }\n } else {\n var keys = Object.keys(messages);\n keys.forEach(function (key) {\n request = messages[key];\n });\n }\n\n this._sanitizeForJson(request);\n\n return JSON.stringify(request, null, 0);\n },\n _sanitizeForJson: function _sanitizeForJson(data) {\n var key;\n\n if (lang.isArray(data)) {\n data.forEach(this._sanitizeForJson, this);\n } else if (lang.isObject(data)) {\n for (key in data) {\n if (data.hasOwnProperty(key)) {\n if (data[key] === undefined) {\n delete data[key];\n } else if (lang.isObject(data[key]) || lang.isArray(data[key])) {\n this._sanitizeForJson(data[key]);\n }\n }\n }\n }\n },\n\n /**\n * Private function to make the actual XHR request.\n * @param data String data in JSON format.\n * @return Deferred representing the XHR request.\n */\n _doSend: function _doSend(data) {\n return xhr.post({\n url: this._getEndpoint(),\n // set the content type to json so that chrome\n // knows how to display it properly. the server ignores this.\n contentType: 'application/json',\n handleAs: 'json',\n // todo: Determine a way to handle message level timeouts. Some requests need to be\n // unbounded, but not all of them.\n // timeout: 10000,\n postData: data\n });\n },\n\n /**\n * Process the response object for any faults or faults.\n * @param response Object from the server (already converted from JSON into an Object).\n */\n _processResponse: function _processResponse(response) {\n this.stopTime = new Date().getTime();\n\n if (!response) {\n this.fault = {\n faultCode: 'Connection.Fault',\n message: 'Unable to communicate with server, no response.'\n };\n } else {\n if (response.fault) {\n this.fault = response.fault;\n }\n /**\n * For non-message container based messages like UDR, response structure does not\n * have messages bundled.\n */\n\n\n if (response.messages) {\n this.responseMessages = response.messages;\n } else {\n this.responseMessages = response;\n }\n }\n },\n\n /**\n * Add the fault to the fault property.\n * @param fault Remote connection fault.\n */\n _processFault: function _processFault(fault) {\n this.stopTime = new Date().getTime();\n this.fault = {\n faultCode: 'Connection.Fault',\n message: fault\n };\n }\n });\n});\n//# sourceMappingURL=JsonTransaction.js.map\n","define([\"./_base/lang\", \"./dom\", \"./io-query\", \"./json\"], function(lang, dom, ioq, json){\n\t// module:\n\t//\t\tdojo/dom-form\n\n function setValue(/*Object*/ obj, /*String*/ name, /*String*/ value){\n // summary:\n //\t\tFor the named property in object, set the value. If a value\n //\t\talready exists and it is a string, convert the value to be an\n //\t\tarray of values.\n\n // Skip it if there is no value\n if(value === null){\n return;\n }\n\n var val = obj[name];\n if(typeof val == \"string\"){ // inline'd type check\n obj[name] = [val, value];\n }else if(lang.isArray(val)){\n val.push(value);\n }else{\n obj[name] = value;\n }\n }\n\n\tvar exclude = \"file|submit|image|reset|button\";\n\n\tvar form = {\n\t\t// summary:\n\t\t//\t\tThis module defines form-processing functions.\n\n\t\tfieldToObject: function fieldToObject(/*DOMNode|String*/ inputNode){\n\t\t\t// summary:\n\t\t\t//\t\tSerialize a form field to a JavaScript object.\n\t\t\t// description:\n\t\t\t//\t\tReturns the value encoded in a form field as\n\t\t\t//\t\tas a string or an array of strings. Disabled form elements\n\t\t\t//\t\tand unchecked radio and checkboxes are skipped.\tMulti-select\n\t\t\t//\t\telements are returned as an array of string values.\n\t\t\t// inputNode: DOMNode|String\n\t\t\t// returns: Object\n\n\t\t\tvar ret = null;\n\t\t\tinputNode = dom.byId(inputNode);\n\t\t\tif(inputNode){\n\t\t\t\tvar _in = inputNode.name, type = (inputNode.type || \"\").toLowerCase();\n\t\t\t\tif(_in && type && !inputNode.disabled){\n\t\t\t\t\tif(type == \"radio\" || type == \"checkbox\"){\n\t\t\t\t\t\tif(inputNode.checked){\n\t\t\t\t\t\t\tret = inputNode.value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}else if(inputNode.multiple){\n\t\t\t\t\t\tret = [];\n\t\t\t\t\t\tvar nodes = [inputNode.firstChild];\n\t\t\t\t\t\twhile(nodes.length){\n\t\t\t\t\t\t\tfor(var node = nodes.pop(); node; node = node.nextSibling){\n\t\t\t\t\t\t\t\tif(node.nodeType == 1 && node.tagName.toLowerCase() == \"option\"){\n\t\t\t\t\t\t\t\t\tif(node.selected){\n\t\t\t\t\t\t\t\t\t\tret.push(node.value);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\t\tif(node.nextSibling){\n\t\t\t\t\t\t\t\t\t\tnodes.push(node.nextSibling);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tif(node.firstChild){\n\t\t\t\t\t\t\t\t\t\tnodes.push(node.firstChild);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}else{\n\t\t\t\t\t\tret = inputNode.value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn ret; // Object\n\t\t},\n\n\t\ttoObject: function formToObject(/*DOMNode|String*/ formNode){\n\t\t\t// summary:\n\t\t\t//\t\tSerialize a form node to a JavaScript object.\n\t\t\t// description:\n\t\t\t//\t\tReturns the values encoded in an HTML form as\n\t\t\t//\t\tstring properties in an object which it then returns. Disabled form\n\t\t\t//\t\telements, buttons, and other non-value form elements are skipped.\n\t\t\t//\t\tMulti-select elements are returned as an array of string values.\n\t\t\t// formNode: DOMNode|String\n\t\t\t// example:\n\t\t\t//\t\tThis form:\n\t\t\t//\t\t|\t<form id=\"test_form\">\n\t\t\t//\t\t|\t\t<input type=\"text\" name=\"blah\" value=\"blah\">\n\t\t\t//\t\t|\t\t<input type=\"text\" name=\"no_value\" value=\"blah\" disabled>\n\t\t\t//\t\t|\t\t<input type=\"button\" name=\"no_value2\" value=\"blah\">\n\t\t\t//\t\t|\t\t<select type=\"select\" multiple name=\"multi\" size=\"5\">\n\t\t\t//\t\t|\t\t\t<option value=\"blah\">blah</option>\n\t\t\t//\t\t|\t\t\t<option value=\"thud\" selected>thud</option>\n\t\t\t//\t\t|\t\t\t<option value=\"thonk\" selected>thonk</option>\n\t\t\t//\t\t|\t\t</select>\n\t\t\t//\t\t|\t</form>\n\t\t\t//\n\t\t\t//\t\tyields this object structure as the result of a call to\n\t\t\t//\t\tformToObject():\n\t\t\t//\n\t\t\t//\t\t|\t{\n\t\t\t//\t\t|\t\tblah: \"blah\",\n\t\t\t//\t\t|\t\tmulti: [\n\t\t\t//\t\t|\t\t\t\"thud\",\n\t\t\t//\t\t|\t\t\t\"thonk\"\n\t\t\t//\t\t|\t\t]\n\t\t\t//\t\t|\t};\n\n\t\t\tvar ret = {}, elems = dom.byId(formNode).elements;\n\t\t\tfor(var i = 0, l = elems.length; i < l; ++i){\n\t\t\t\tvar item = elems[i], _in = item.name, type = (item.type || \"\").toLowerCase();\n\t\t\t\tif(_in && type && exclude.indexOf(type) < 0 && !item.disabled){\n\t\t\t\t\tsetValue(ret, _in, form.fieldToObject(item));\n\t\t\t\t\tif(type == \"image\"){\n\t\t\t\t\t\tret[_in + \".x\"] = ret[_in + \".y\"] = ret[_in].x = ret[_in].y = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn ret; // Object\n\t\t},\n\n\t\ttoQuery: function formToQuery(/*DOMNode|String*/ formNode){\n\t\t\t// summary:\n\t\t\t//\t\tReturns a URL-encoded string representing the form passed as either a\n\t\t\t//\t\tnode or string ID identifying the form to serialize\n\t\t\t// formNode: DOMNode|String\n\t\t\t// returns: String\n\n\t\t\treturn ioq.objectToQuery(form.toObject(formNode)); // String\n\t\t},\n\n\t\ttoJson: function formToJson(/*DOMNode|String*/ formNode, /*Boolean?*/ prettyPrint){\n\t\t\t// summary:\n\t\t\t//\t\tCreate a serialized JSON string from a form node or string\n\t\t\t//\t\tID identifying the form to serialize\n\t\t\t// formNode: DOMNode|String\n\t\t\t// prettyPrint: Boolean?\n\t\t\t// returns: String\n\n\t\t\treturn json.stringify(form.toObject(formNode), null, prettyPrint ? 4 : 0); // String\n\t\t}\n\t};\n\n return form;\n});\n","define([\"./kernel\", \"../json\"], function(dojo, json){\n\n// module:\n//\t\tdojo/_base/json\n\n/*=====\nreturn {\n\t// summary:\n\t//\t\tThis module defines the dojo JSON API.\n};\n=====*/\n\ndojo.fromJson = function(/*String*/ js){\n\t// summary:\n\t//\t\tParses a JavaScript expression and returns a JavaScript value.\n\t// description:\n\t//\t\tThrows for invalid JavaScript expressions. It does not use a strict JSON parser. It\n\t//\t\talways delegates to eval(). The content passed to this method must therefore come\n\t//\t\tfrom a trusted source.\n\t//\t\tIt is recommend that you use dojo/json's parse function for an\n\t//\t\timplementation uses the (faster) native JSON parse when available.\n\t// js:\n\t//\t\ta string literal of a JavaScript expression, for instance:\n\t//\t\t`'{ \"foo\": [ \"bar\", 1, { \"baz\": \"thud\" } ] }'`\n\n\treturn eval(\"(\" + js + \")\"); // Object\n};\n\n/*=====\ndojo._escapeString = function(){\n\t// summary:\n\t//\t\tAdds escape sequences for non-visual characters, double quote and\n\t//\t\tbackslash and surrounds with double quotes to form a valid string\n\t//\t\tliteral.\n};\n=====*/\ndojo._escapeString = json.stringify; // just delegate to json.stringify\n\ndojo.toJsonIndentStr = \"\\t\";\ndojo.toJson = function(/*Object*/ it, /*Boolean?*/ prettyPrint){\n\t// summary:\n\t//\t\tReturns a [JSON](http://json.org) serialization of an object.\n\t// description:\n\t//\t\tReturns a [JSON](http://json.org) serialization of an object.\n\t//\t\tNote that this doesn't check for infinite recursion, so don't do that!\n\t//\t\tIt is recommend that you use dojo/json's stringify function for an lighter\n\t//\t\tand faster implementation that matches the native JSON API and uses the\n\t//\t\tnative JSON serializer when available.\n\t// it:\n\t//\t\tan object to be serialized. Objects may define their own\n\t//\t\tserialization via a special \"__json__\" or \"json\" function\n\t//\t\tproperty. If a specialized serializer has been defined, it will\n\t//\t\tbe used as a fallback.\n\t//\t\tNote that in 1.6, toJson would serialize undefined, but this no longer supported\n\t//\t\tsince it is not supported by native JSON serializer.\n\t// prettyPrint:\n\t//\t\tif true, we indent objects and arrays to make the output prettier.\n\t//\t\tThe variable `dojo.toJsonIndentStr` is used as the indent string --\n\t//\t\tto use something other than the default (tab), change that variable\n\t//\t\tbefore calling dojo.toJson().\n\t//\t\tNote that if native JSON support is available, it will be used for serialization,\n\t//\t\tand native implementations vary on the exact spacing used in pretty printing.\n\t// returns:\n\t//\t\tA JSON string serialization of the passed-in object.\n\t// example:\n\t//\t\tsimple serialization of a trivial object\n\t//\t\t|\tvar jsonStr = dojo.toJson({ howdy: \"stranger!\", isStrange: true });\n\t//\t\t|\tdoh.is('{\"howdy\":\"stranger!\",\"isStrange\":true}', jsonStr);\n\t// example:\n\t//\t\ta custom serializer for an objects of a particular class:\n\t//\t\t|\tdojo.declare(\"Furby\", null, {\n\t//\t\t|\t\tfurbies: \"are strange\",\n\t//\t\t|\t\tfurbyCount: 10,\n\t//\t\t|\t\t__json__: function(){\n\t//\t\t|\t\t},\n\t//\t\t|\t});\n\n\t// use dojo/json\n\treturn json.stringify(it, function(key, value){\n\t\tif(value){\n\t\t\tvar tf = value.__json__||value.json;\n\t\t\tif(typeof tf == \"function\"){\n\t\t\t\treturn tf.call(value);\n\t\t\t}\n\t\t}\n\t\treturn value;\n\t}, prettyPrint && dojo.toJsonIndentStr);\t// String\n};\n\nreturn dojo;\n});\n","define([\n\t'../json',\n\t'../_base/kernel',\n\t'../_base/array',\n\t'../has',\n\t'../has!dom?../selector/_loader' // only included for has() qsa tests\n], function(JSON, kernel, array, has){\n\thas.add('activex', typeof ActiveXObject !== 'undefined');\n\thas.add('dom-parser', function(global){\n\t\treturn 'DOMParser' in global;\n\t});\n\n\tvar handleXML;\n\tif(has('activex')){\n\t\t// GUIDs obtained from http://msdn.microsoft.com/en-us/library/ms757837(VS.85).aspx\n\t\tvar dp = [\n\t\t\t'Msxml2.DOMDocument.6.0',\n\t\t\t'Msxml2.DOMDocument.4.0',\n\t\t\t'MSXML2.DOMDocument.3.0',\n\t\t\t'MSXML.DOMDocument' // 2.0\n\t\t];\n\t\tvar lastParser;\n\n\t\thandleXML = function(response){\n\t\t\tvar result = response.data;\n\t\t\tvar text = response.text;\n\n\t\t\tif(result && has('dom-qsa2.1') && !result.querySelectorAll && has('dom-parser')){\n\t\t\t\t// http://bugs.dojotoolkit.org/ticket/15631\n\t\t\t\t// IE9 supports a CSS3 querySelectorAll implementation, but the DOM implementation\n\t\t\t\t// returned by IE9 xhr.responseXML does not. Manually create the XML DOM to gain\n\t\t\t\t// the fuller-featured implementation and avoid bugs caused by the inconsistency\n\t\t\t\tresult = new DOMParser().parseFromString(text, 'application/xml');\n\t\t\t}\n\n\t\t\tfunction createDocument(p) {\n\t\t\t\t\ttry{\n\t\t\t\t\t\tvar dom = new ActiveXObject(p);\n\t\t\t\t\t\tdom.async = false;\n\t\t\t\t\t\tdom.loadXML(text);\n\t\t\t\t\t\tresult = dom;\n\t\t\t\t\t\tlastParser = p;\n\t\t\t\t\t}catch(e){ return false; }\n\t\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tif(!result || !result.documentElement){\n\t\t\t\t// The creation of an ActiveX object is expensive, so we cache the\n\t\t\t\t// parser type to avoid trying all parser types each time we handle a\n\t\t\t\t// document. There is some concern that some parser types might fail\n\t\t\t\t// depending on the document being parsed. If parsing using the cached\n\t\t\t\t// parser type fails, we do the more expensive operation of finding one\n\t\t\t\t// that works for the given document.\n\t\t\t\t// https://bugs.dojotoolkit.org/ticket/15246\n\t\t\t\tif(!lastParser || !createDocument(lastParser)) {\n\t\t\t\t\tarray.some(dp, createDocument);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn result;\n\t\t};\n\t}\n\n\tvar handleNativeResponse = function(response) {\n\t\tif(!has('native-xhr2-blob') && response.options.handleAs === 'blob' && typeof Blob !== 'undefined'){\n\t\t\treturn new Blob([ response.xhr.response ], { type: response.xhr.getResponseHeader('Content-Type') });\n\t\t}\n\n\t\treturn response.xhr.response;\n\t}\n\n\tvar handlers = {\n\t\t'javascript': function(response){\n\t\t\treturn kernel.eval(response.text || '');\n\t\t},\n\t\t'json': function(response){\n\t\t\treturn JSON.parse(response.text || null);\n\t\t},\n\t\t'xml': handleXML,\n\t\t'blob': handleNativeResponse,\n\t\t'arraybuffer': handleNativeResponse,\n\t\t'document': handleNativeResponse\n\t};\n\n\tfunction handle(response){\n\t\tvar handler = handlers[response.options.handleAs];\n\n\t\tresponse.data = handler ? handler(response) : (response.data || response.text);\n\n\t\treturn response;\n\t}\n\n\thandle.register = function(name, handler){\n\t\thandlers[name] = handler;\n\t};\n\n\treturn handle;\n});\n","\"use strict\";\n\n/* Copyright 2019-2021 The MathWorks, Inc. */\ndefine(['dojo/_base/declare', 'dojo/Deferred', 'dojo/dom-construct', 'mw-html-utils/HtmlUtils', 'mw-remote/RemoteEndPointsManager', './utils/SendMessageUtil', './ReplaceUploadIframe'], function (declare, Deferred, domConstruct, HtmlUtils, RemoteEndPointsManager, SendMessageUtil, ReplaceUploadIframe) {\n return declare([], {\n constructor: function constructor() {},\n\n /**\n * Upload artifacts provided to Worker\n *\n * @param {FileList} artifactsList - List of files that have to be uploaded\n * @param {string} fsDest - Location where the file has to be uploaded\n * @param {object} endpoint - Contains the following:\n * endpoint: Url of the worker where the upload request is to be sent\n * computeSession and routingKey\n * @return {*} a deferred\n */\n upload: function upload(artifactsList, fsDest, opts) {\n var that = this; // New handle is created for every upload request to aid multiple uploads at a time in the future\n\n this._uploadHandler = new Deferred(function () {\n that.postMessageToUploadIframe('cancelUpload');\n\n that._unloadIframe();\n });\n this._workerEndpoint = opts.endpoint;\n\n if (artifactsList instanceof FileList) {\n var uploadToken = {\n csrfToken: undefined,\n validForMs: undefined\n }; // Get the CsrfToken\n\n var csrfTokenResponseProm = SendMessageUtil.sendPayload(JSON.stringify({\n messages: {\n CreateCsrfToken: [{}]\n }\n }), RemoteEndPointsManager.getEndPointNames().WORKER_ENDPOINT);\n csrfTokenResponseProm.then(function (responses) {\n responses.messages.CreateCsrfTokenResponse.forEach(function (response) {\n if (response.messageFaults && response.messageFaults.length > 0) {// No op\n } else {\n uploadToken = {\n csrfToken: response.csrfToken,\n validForMs: response.validForMs\n };\n }\n });\n var searchParams = opts.uploadParams;\n var computeToken = searchParams.computeToken;\n var routingKey = searchParams.routingKey;\n\n that._initiateUpload(artifactsList, {\n uploadDestinationUrl: that._workerEndpoint + 'upload',\n computeToken: computeToken,\n routingkey: routingKey,\n fileDestination: encodeURIComponent(fsDest),\n csrfToken: encodeURIComponent(uploadToken.csrfToken)\n });\n });\n return this._uploadHandler;\n }\n },\n _initiateUpload: function _initiateUpload(artifactsList, options) {\n var that = this;\n\n this._eventCallBack = function (event) {\n switch (event.data.type) {\n case 'updateProgress':\n // TODO: Fix upload progress incorrect bytes (g2893419), previous fix for g2737289 reverted\n that._uploadHandler.progress({\n loaded: event.data.loaded,\n total: event.data.total\n });\n\n break;\n\n case 'uploadFinished':\n that._uploadHandler.resolve({\n status: event.data.status,\n response: event.data.response\n });\n\n that._unloadIframe();\n\n break;\n\n case 'uploadError':\n that._uploadHandler.reject({\n status: event.data.status,\n response: event.data.response\n });\n\n break;\n\n default:\n break;\n // Do nothing.\n }\n };\n\n options.postMessage = this._eventCallBack;\n this._ReplaceUploadIframe = new ReplaceUploadIframe(options);\n this.postMessageToUploadIframe(artifactsList);\n },\n _unloadIframe: function _unloadIframe() {\n this._ReplaceUploadIframe = null;\n },\n getHostName: function getHostName(url) {\n var parsedUrl = HtmlUtils.parseUrl(url);\n return parsedUrl.hostname;\n },\n postMessageToUploadIframe: function postMessageToUploadIframe(message) {\n if (this._ReplaceUploadIframe) {\n this._ReplaceUploadIframe.handleMessage({\n data: message\n });\n }\n }\n });\n});\n//# sourceMappingURL=UploadToWorker.js.map\n","'use strict';\n\n/* Copyright 2018 The Mathworks, Inc. */\n\ndefine([], function () {\n // Do not add items without additional \"filtering code\"\n\n // https://github.com/leizongmin/js-xss/blob/master/dist/xss.js#L12\n // + Style\n var whiteListJava = {\n A: ['target', 'href', 'title'],\n ABBR: ['title'],\n ADDRESS: [],\n AREA: ['shape', 'coords', 'href', 'alt'],\n ARTICLE: [],\n ASIDE: [],\n AUDIO: ['autoplay', 'controls', 'loop', 'preload', 'src'],\n B: [],\n BDI: ['dir'],\n BDO: ['dir'],\n BIG: [],\n BLOCKQUOTE: ['cite'],\n BR: [],\n CAPTION: [],\n CENTER: [],\n CITE: [],\n CODE: [],\n COL: ['align', 'valign', 'span', 'width'],\n COLGROUP: ['align', 'valign', 'span', 'width'],\n DD: [],\n DEL: ['datetime'],\n DETAILS: ['open'],\n DIV: [],\n DL: [],\n DT: [],\n EM: [],\n FONT: ['color', 'size', 'face'],\n FOOTER: [],\n H1: [],\n H2: [],\n H3: [],\n H4: [],\n H5: [],\n H6: [],\n HEADER: [],\n HR: [],\n I: [],\n IMG: ['src', 'alt', 'title', 'width', 'height'],\n INS: ['datetime'],\n LI: [],\n MARK: [],\n NAV: [],\n OL: [],\n P: [],\n PRE: [],\n S: [],\n SECTION: [],\n SMALL: [],\n SPAN: [],\n SUB: [],\n SUP: [],\n STRONG: [],\n TABLE: ['width', 'border', 'align', 'valign'],\n TBODY: ['align', 'valign'],\n TD: ['width', 'rowspan', 'colspan', 'align', 'valign'],\n TFOOT: ['align', 'valign'],\n TH: ['width', 'rowspan', 'colspan', 'align', 'valign'],\n THEAD: ['align', 'valign'],\n TR: ['rowspan', 'align', 'valign'],\n TT: [],\n U: [],\n UL: [],\n VIDEO: ['autoplay', 'controls', 'loop', 'preload', 'src', 'height', 'width']\n };\n\n var protocolAttrsWhiteListJava = {\n href: {\n 'http:': true,\n 'https:': true,\n 'mailto:': true,\n 'matlab:': true,\n relative: {\n '#': true,\n '/': true\n }\n },\n src: {\n 'http:': true,\n 'https:': true,\n 'mailto:': true,\n relative: {\n '#': true,\n '/': true\n }\n }\n };\n\n // Pull out uncommon styles or styles that support:\n // Urls as options\n // Also pull out styles that would generally allow:\n // Clickjacking attacks\n var whiteListStyles = ['backgroundColor', 'borderBottom', 'borderBottomColor', 'borderBottomLeftRadius', 'borderBottomRightRadius', 'borderBottomStyle', 'borderBottomWidth', 'borderLeft', 'borderLeftColor', 'borderLeftStyle', 'borderLeftWidth', 'borderRadius', 'borderRight', 'borderRightColor', 'borderRightStyle', 'borderRightWidth', 'borderSpacing', 'borderStyle', 'borderTop', 'borderTopColor', 'borderTopLeftRadius', 'borderTopRightRadius', 'borderTopStyle', 'borderTopWidth', 'borderWidth', 'color', 'fontFamily', 'fontSize', 'fontStyle', 'fontWeight', 'height', 'lineHeight', 'margin', 'marginBottom', 'marginLeft', 'marginRight', 'marginTop', 'maxHeight', 'maxWidth', 'minHeight', 'minWidth', 'overflow', 'overflowWrap', 'overflowX', 'overflowY', 'padding', 'paddingBottom', 'paddingLeft', 'paddingRight', 'paddingTop', 'textAlign', 'textAnchor', 'textDecoration', 'textIndent', 'textOverflow', 'textShadow', 'textTransform', 'width'];\n\n var copyAndSanitizeStyles = function copyAndSanitizeStyles(cleanNode, dirtyNode) {\n var wasStyleTagSpecified = dirtyNode.getAttribute('style');\n if (cleanNode.style && wasStyleTagSpecified !== null && wasStyleTagSpecified !== '') {\n for (var i = 0; i < whiteListStyles.length; i += 1) {\n var styleKey = whiteListStyles[i];\n var value = dirtyNode.style[styleKey];\n if (cleanNode.style[styleKey] !== undefined) {\n cleanNode.style[styleKey] = value;\n }\n }\n }\n };\n\n var buildSanitizer = function buildSanitizer(whiteList, whitelistProtocols, allowStyleTag) {\n return function (htmlToClean) {\n var cleanUrl = function cleanUrl(whitelistProtocols, dirtyUrl) {\n var dirtyTrimUrl = String.prototype.trim.call(dirtyUrl);\n var locateColon = dirtyTrimUrl.indexOf(':');\n if (locateColon < 0) {\n // Check Relative\n if (whitelistProtocols.relative[dirtyTrimUrl.charAt(0)]) {\n return dirtyTrimUrl;\n }\n }\n var protocol = dirtyTrimUrl.substring(0, locateColon);\n if (whitelistProtocols[protocol + ':']) {\n return dirtyTrimUrl;\n }\n return '#';\n };\n\n var getCleanAttrs = function getCleanAttrs(whitelistAttrs, dirtyElem) {\n var cleanAttrs = [];\n for (var attrIndex = 0; attrIndex < whitelistAttrs.length; attrIndex += 1) {\n var attrToCheck = whitelistAttrs[attrIndex];\n if (dirtyElem.hasAttribute(attrToCheck)) {\n var dirtyValue = dirtyElem.getAttribute(attrToCheck);\n var cleanValue = '';\n if (whitelistProtocols[attrToCheck]) {\n cleanValue = cleanUrl(whitelistProtocols[attrToCheck], dirtyValue);\n } else {\n cleanValue = dirtyValue;\n }\n cleanAttrs.push({\n key: attrToCheck,\n value: cleanValue\n });\n }\n }\n return cleanAttrs;\n };\n\n var getCleanNode = function getCleanNode(dirtyNode) {\n var cleanNode = void 0;\n if (dirtyNode.nodeType === window.Node.ELEMENT_NODE) {\n var found = whiteList[dirtyNode.tagName];\n if (found) {\n cleanNode = document.createElement(dirtyNode.tagName);\n var whiteListAttr = whiteList[dirtyNode.tagName];\n var cleanAttr = getCleanAttrs(whiteListAttr, dirtyNode);\n cleanAttr.forEach(function (item) {\n cleanNode.setAttribute(item.key, item.value);\n });\n if (allowStyleTag) {\n copyAndSanitizeStyles(cleanNode, dirtyNode);\n }\n } else {\n // We could potentially \"Keep Children\", \"Replace bad node with div\", or \"Discard children\"\n cleanNode = document.createDocumentFragment();\n }\n } else if (dirtyNode.nodeType === window.Node.TEXT_NODE) {\n cleanNode = document.createTextNode(dirtyNode.textContent);\n } else {\n cleanNode = document.createDocumentFragment();\n }\n return cleanNode;\n };\n\n var sanitizeDom = function sanitizeDom(dirtyRoot) {\n var level = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n var cleanNode = document.createDocumentFragment();\n if (level > 150 || !dirtyRoot) {\n // Keep stack a reasonable size\n // (Firefox Limits DOM 200 levels deep)\n // and don't recurse null nodes\n return cleanNode;\n }\n for (var dirtyChild = dirtyRoot.firstChild; dirtyChild; dirtyChild = dirtyChild.nextSibling) {\n var tmpNode = getCleanNode(dirtyChild);\n if (dirtyChild.nodeType === window.Node.ELEMENT_NODE) {\n tmpNode.appendChild(sanitizeDom(dirtyChild, level + 1));\n }\n cleanNode.appendChild(tmpNode);\n }\n return cleanNode;\n };\n\n /* eslint-disable */\n var domParser = new DOMParser();\n /* eslint-enable */\n var dirtyDom = domParser.parseFromString(htmlToClean, 'text/html');\n var cleanDom = void 0;\n if (dirtyDom.body) {\n cleanDom = sanitizeDom(dirtyDom.body);\n } else {\n cleanDom = document.createDocumentFragment();\n }\n return cleanDom;\n };\n };\n\n return {\n sanitizeHtmlFromJava: buildSanitizer(whiteListJava, protocolAttrsWhiteListJava, true)\n };\n});\n//# sourceMappingURL=sanitize.js.map\n","\"use strict\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n/* Copyright 2019-2022 The MathWorks, Inc. */\ndefine([], function () {\n 'use strict'; // Switch out iFrame for direct XHR requests\n // but keeping all the original APIs in place.\n // This is not an ideal implimentation but allows\n // us to remove our dependecy on iFrameProxy HTML files\n // and make sure CORS is working for teams\n\n return /*#__PURE__*/function () {\n function _class(options) {\n _classCallCheck(this, _class);\n\n this._xhr = null;\n this._uploadDestinationUrl = options.uploadDestinationUrl;\n this._computeToken = options.computeToken;\n this._routingkey = options.routingkey;\n this._fileDestination = options.fileDestination;\n this._csrfToken = options.csrfToken;\n\n this._postMessage = function (message) {\n options.postMessage(message);\n };\n }\n\n _createClass(_class, [{\n key: \"_postMessageToParent\",\n value: function _postMessageToParent(message) {\n this._postMessage({\n data: message\n });\n }\n }, {\n key: \"_createFormDataFromFileList\",\n value: function _createFormDataFromFileList(fileList) {\n var formData = new window.FormData();\n var FORM_DATA_FIELD_NAME = 'uploadFileName'; // The server requires this particular name.\n\n for (var i = 0; i < fileList.length; i++) {\n var file = fileList[i];\n formData.append(FORM_DATA_FIELD_NAME, file, file.name);\n }\n\n return formData;\n }\n }, {\n key: \"_createAndSendXhr\",\n value: function _createAndSendXhr(formData) {\n var _this = this;\n\n this._xhr = new XMLHttpRequest();\n\n this._xhr.upload.onprogress = function (event) {\n _this._postMessageToParent({\n type: 'updateProgress',\n loaded: event.loaded,\n total: event.total\n });\n };\n\n this._xhr.onload = function () {\n _this._postMessageToParent({\n type: 'uploadFinished',\n status: _this._xhr.status,\n response: _this._xhr.response\n });\n };\n\n this._xhr.onerror = function () {\n _this._postMessageToParent({\n type: 'uploadError',\n status: _this._xhr.status,\n response: _this._xhr.response\n });\n };\n\n this._xhr.open('POST', \"\".concat(this._uploadDestinationUrl, \"?dest=\").concat(this._fileDestination, \"&computeToken=\").concat(this._computeToken, \"&routingkey=\").concat(this._routingkey, \"&csrfToken=\").concat(this._csrfToken), true);\n\n this._xhr.withCredentials = true;\n\n this._xhr.send(formData);\n }\n }, {\n key: \"handleMessage\",\n value: function handleMessage(event) {\n if (event.data instanceof FileList) {\n var formData = this._createFormDataFromFileList(event.data);\n\n this._createAndSendXhr(formData);\n\n return;\n }\n\n if (event.data === 'cancelUpload') {\n if (this._xhr) {\n this._xhr.abort();\n }\n\n this._postMessageToParent({\n type: 'uploadCanceled'\n });\n }\n }\n }]);\n\n return _class;\n }();\n});\n//# sourceMappingURL=ReplaceUploadIframe.js.map\n","\"use strict\";\n\n// Copyright 2012-2022 The MathWorks, Inc.\ndefine(['mw-log/Log'], function (Log) {\n var absoluteUrlRegex = new RegExp('^(?:[a-z]+:)?//', 'i');\n var ALLOWED_LOCAL_DOMAINS = ['localhost', '127.0.0.1', '[::1]'];\n return {\n /**\n * Motivation: The reason we need to do this is because every client which uses connector to get a URL to a resource or an app gets back\n * a localhost based URL. However, in MATLAB Online and other remote environemnts localhost based url cannot be used to acces remote resources.\n * This API is responsible for converting the localhost based URL into a Remote Worker URL which can be used to talk to remote resource.\n */\n\n /**\n * JSDoc\n * Returns absolute url that can be used to access resource on worker.\n * Also adds query parameters to url\n * @param {String} url - Absolute localhost based url or path to resource being accessed\n * @param {Object} opts - This object contains metadata to be used by the API:\n * opts.host: Endpoint to the worker\n * opts.sessionId: Session ID for the current MO session\n * opts.routingKey: IP Adddress and port number to reach the MATLAB on opts.host\n */\n createWorkerRoutingHostUrl: function createWorkerRoutingHostUrl(url, opts) {\n var absRemoteUrl = url;\n var remoteHost = '';\n var localhostUrl = '';\n var host = opts.host;\n var sessionId = opts.sessionId;\n var routingKey = opts.routingKey; // flag to see if we need to add query parameters\n\n var shouldAddQueryParams = true;\n\n try {\n // Get the remote origin\n remoteHost = new URL(host); // Check if absolute url, then check for local host\n\n if (this.isAbsoluteUrl(url)) {\n // convert to URL object to see if localhost url\n localhostUrl = new URL(url); // Checking valid origin prevents issues when url is malformed like invalid protocol: https://foo.com\n\n if (localhostUrl.origin && ALLOWED_LOCAL_DOMAINS.includes(localhostUrl.hostname)) {\n var localhostPath = localhostUrl.pathname; // Use the remote URL as base url (context root gets ignored when used as base, so this avoids duplication)\n\n absRemoteUrl = new URL(localhostPath, remoteHost).href; // Add all the search strings back\n\n absRemoteUrl = absRemoteUrl + localhostUrl.search;\n } else if (localhostUrl.origin && localhostUrl.hostname !== remoteHost.hostname) {\n // it's an absolute URL but not a local URL or a remote worker URL so we don't need to add query params\n shouldAddQueryParams = false;\n }\n } else {\n // Remove starting / if present\n if (url && url.startsWith('/')) {\n absRemoteUrl = remoteHost + url.substr(1, url.length);\n } else {\n absRemoteUrl = remoteHost + url;\n }\n } // Add the mandatory mre query parameter.\n\n /**\n * Note: Ideally this can be done by using URL contrsuctor and appending query params, but this will encode/escape the query parameters\n * And am not certain that all teams actually decode the values before they use them.\n * So using the same implementation from IframeContainerConnectionUtil.\n *\n * //TODO: In the future look to update code below to be something like this:\n * absRemoteUrl = new URL(absRemoteUrl);\n * absRemoteUrl.searchParams.append(\"mre\", remoteHost);\n */\n // Check if query parameters should be added or not\n\n\n if (!shouldAddQueryParams) {\n return absRemoteUrl;\n }\n\n absRemoteUrl += (absRemoteUrl.indexOf('?') >= 0 ? '&' : '?') + 'mre=' + encodeURIComponent(remoteHost); // Add additional query parameters if present\n\n if (routingKey && sessionId) {\n // Do not URI Encode Routing key -\n // connector doesn't know what to do with the encoded \":\" (colon)\n // this is probably a bug (g2671961)\n absRemoteUrl += '&routingkey=' + routingKey + '&computeToken=' + encodeURIComponent(sessionId);\n }\n\n return absRemoteUrl;\n } catch (error) {\n Log.error('Input URL is malformed');\n }\n\n return absRemoteUrl;\n },\n\n /**\n * JSDoc\n * Returns whether a URL is absolute or relative.\n * @param {String} url - Relative or absolute URL\n */\n isAbsoluteUrl: function isAbsoluteUrl(url) {\n if (absoluteUrlRegex.test(url)) {\n return true;\n }\n\n return false;\n }\n };\n});\n//# sourceMappingURL=RemoteUrlUtils.js.map\n","define([\"mw-remote/serviceRegistryLookup\",\"/mathworks/devel/sandbox/csun/workspaces/docsurvey/node_modules/dojo-webpack-plugin/loaders/dojo/runner.js\",\"\"], function(loader, runner) {\n return runner(loader, \"\", __webpack_require__.dj.c(), true);\n});","\"use strict\";\n\n// Copyright 2014-2020 The MathWorks, Inc.\ndefine(['dojo/request/xhr', 'mw-html-utils/HtmlUtils'], function (xhr, HtmlUtils) {\n var attemptedResolution = false;\n var service = {};\n service._serviceData = {};\n\n service.getServiceRegistryEndpoint = function (name) {\n if (service._serviceData.serviceregistry) {\n var numServices;\n var i;\n numServices = service._serviceData.serviceregistry.length;\n\n for (i = 0; i < numServices; i += 1) {\n if (service._serviceData.serviceregistry[i].name === name) {\n return service._serviceData.serviceregistry[i].endpoint;\n }\n }\n }\n\n return '';\n };\n\n var overrideDefaultRemoteEndpoint = function overrideDefaultRemoteEndpoint(serviceRegistryData) {\n var defaultRemoteEndpoint = HtmlUtils.parseQueryString()['mre'];\n\n if (defaultRemoteEndpoint) {\n // Since we will only allow the domain that is loading this JavaScript as a safe domain,\n // then if queryVal is just a relative URL, then use the same domain where this JavaScript is loaded\n var url = new URL(defaultRemoteEndpoint, window.location.href);\n\n if (_checkIfDomainIsAllowed(url)) {\n // If same domain, then use it\n defaultRemoteEndpoint = url.href;\n var newServiceRegistry = serviceRegistryData.serviceregistry;\n newServiceRegistry = Array.isArray(newServiceRegistry) ? newServiceRegistry : [];\n /**\n * Check if there is an endpoint called 'primary'\n * If yes, Update it with value from mre query param\n * If no, Add another entry into serviceregistry\n */\n\n var foundPrimaryEndpoint = false;\n newServiceRegistry.forEach(function (entry) {\n if (entry.name && entry.name === 'primary') {\n entry.endpoint = defaultRemoteEndpoint;\n foundPrimaryEndpoint = true;\n }\n });\n\n if (!foundPrimaryEndpoint) {\n newServiceRegistry.push({\n name: 'primary',\n endpoint: defaultRemoteEndpoint\n }); // Add object back to serviceRegistryData\n\n serviceRegistryData.serviceregistry = newServiceRegistry;\n }\n }\n }\n\n return serviceRegistryData;\n };\n\n var _checkIfDomainIsAllowed = function _checkIfDomainIsAllowed(queryVal) {\n if (queryVal.origin === window.location.origin || _doSubDomainCheck(queryVal)) {\n return true;\n }\n\n return false;\n };\n\n var _doSubDomainCheck = function _doSubDomainCheck(incomingDomain) {\n var incomingOriginStr = incomingDomain.origin;\n\n if (incomingDomain.port) {\n // No need to verify port number as it is owned by the hostname\n // Due to a bug in Safari Webkit(https://bugs.webkit.org/show_bug.cgi?id=127958), we can't set port to empty string\n incomingOriginStr = incomingDomain.origin.replace(':' + incomingDomain.port, '');\n }\n\n var acceptableDomains = ['.mathworks.com', '.mathworks.cn'];\n\n for (var index in acceptableDomains) {\n var domain = acceptableDomains[index];\n\n if (incomingOriginStr.endsWith(domain)) {\n return true;\n }\n }\n\n return false;\n };\n\n var result = {\n _doXhr: function _doXhr(url, sync) {\n return xhr(url, {\n handleAs: 'json',\n failOk: true,\n method: 'GET',\n timeout: 15000,\n sync: sync\n });\n },\n _reset: function _reset() {\n attemptedResolution = false;\n service._serviceData = {};\n },\n load: function load(id, require, callback) {\n if (attemptedResolution) {\n callback(service);\n } else {\n // Legacy Loader from 1.x does not support async - See dojo/text\n // This was failing on dojo.require(\"MW.remote.MessageService\") type loads\n var sync = !require.async;\n\n result._doXhr('/serviceregistrylookup/1/service', sync).then(function (json) {\n if (!(json instanceof Object)) {\n json = {};\n }\n\n service._serviceData = overrideDefaultRemoteEndpoint(json);\n attemptedResolution = true;\n callback(service);\n }, function () {\n service._serviceData = overrideDefaultRemoteEndpoint({});\n attemptedResolution = true;\n callback(service);\n });\n }\n }\n };\n return result;\n});\n//# sourceMappingURL=serviceRegistryLookup.js.map\n","\ndefine([\n \"dojo/_base/declare\",\n \"dojo/_base/lang\",\n \"mw-log/Log\",\n \"./Trigger\"\n], function (declare, lang, Log, Trigger) {\n\n return declare(Trigger, {\n constructor: function () {\n var nameParts = this.name.split(\" \");\n if (nameParts.length < 2 || nameParts[0] !== \"timeout\") {\n Log.error(\"Invalid trigger name for a TimeoutTrigger. \" +\n \"Could not parse out the type of handler.\");\n }\n this.timeoutInSeconds = parseFloat(nameParts[1]);\n this.handlerType = nameParts[0];\n },\n\n enable: function () {\n this.disable(); // clear the timeout just in case one already is setup.\n this.timeoutHandle = setTimeout(\n lang.hitch(null, this.triggerHandler, this.name),\n this.timeoutInSeconds * 1000\n );\n },\n\n disable: function () {\n if (this.timeoutHandle) {\n clearTimeout(this.timeoutHandle);\n this.timeoutHandle = null;\n }\n }\n });\n});","define([\n \"dojo/_base/declare\",\n \"dojo/_base/lang\",\n\n \"mw-log/Log\"\n], function (declare, lang, Log) {\n\n return declare([], {\n\n constructor: function (args) {\n this.state = {};\n this.target = \"\";\n this.condition = null;\n this.action = null;\n\n declare.safeMixin(this, args);\n },\n\n handleTrigger: function (trigger, otherArguments) {\n var nextState = \"\";\n if (this.checkCondition(trigger, otherArguments)) {\n this.runAction(trigger, otherArguments);\n nextState = this.getTarget(trigger, this.target, otherArguments);\n }\n return nextState;\n },\n\n checkCondition: function (trigger, otherArguments) {\n if (!this.condition) {\n // if condition is null or undefined then its assumed to be true\n return true;\n }\n // Create a function which will run in the state's context.\n // This will accept either a function object or a string.\n var conditionFunction = lang.hitch(this.state.context, this.condition);\n return conditionFunction.apply(null, [trigger, this.state.data].concat(otherArguments));\n },\n\n // run an action asynchronously\n runAction: function (trigger, otherArguments) {\n var actionFunction, that = this;\n if (this.action) {\n // Create a function which will run in the state's context.\n // This will accept either a function object or a string.\n actionFunction = lang.hitch(this.state.context, this.action);\n actionFunction.apply(null, [trigger, that.state.data].concat(otherArguments));\n }\n },\n\n getTarget: function (trigger, target, otherArguments) {\n var i, targetState, targetFunction, partialTargetState;\n if (lang.isString(target)) {\n targetState = target;\n } else if (lang.isFunction(target)) {\n targetFunction = lang.hitch(this.state.context, target);\n targetState = targetFunction.apply(null,\n [trigger, this.state.data].concat(otherArguments));\n } else if (lang.isArray(target)) {\n for (i = 0; i < target.length; i += 1) {\n targetState = this.getTarget(trigger, target[i], otherArguments);\n // If no next state or target was specified, then we need to recurse\n if (lang.isString(targetState)) {\n targetState = {target: targetState};\n lang.mixin(targetState, partialTargetState);\n break; // found the next state, stop searching\n }\n if (targetState && targetState.target) {\n lang.mixin(targetState, partialTargetState);\n break; // found the next state, stop searching\n }\n // Keep track of the results of the getTarget call so that we can combine\n // properties\n partialTargetState = targetState || {};\n }\n } else {\n Log.warn(\"Transition: improper target: \", target);\n }\n return targetState;\n }\n });\n});","define([\"cometd/cometd\"], function (cometd) {\n \"use strict\";\n\n var _exports = {};\n // This code is from cometd's channel validation logic\n\n // This code is from cometd's channel validation logic,\n // but is private to CometD.\n // We use it in MessageServiceAsync to validate the channels\n // This code depends on CometD so we do have the license included.\n // This code also is somewhat trivial - it loops through a\n // string and checks for characters.\n /**\n *\n * @param value\n */\n function _isString(value) {\n return cometd.Utils.isString(value);\n }\n /**\n *\n * @param char\n */\n function _isAlpha(char) {\n if (char >= 'A' && char <= 'Z') {\n return true;\n }\n return char >= 'a' && char <= 'z';\n }\n /**\n *\n * @param char\n */\n function _isNumeric(char) {\n return char >= '0' && char <= '9';\n }\n /**\n *\n * @param char\n */\n function _isAllowed(char) {\n switch (char) {\n case ' ':\n case '!':\n case '#':\n case '$':\n case '(':\n case ')':\n case '*':\n case '+':\n case '-':\n case '.':\n case '/':\n case '@':\n case '_':\n case '{':\n case '~':\n case '}':\n case ':': // MathWorks Added - some teams use \":\" in their channels\n case '\\\\': // MathWorks Added - some teams use \"\\\" in their channels\n case ',':\n // MathWorks Added - some teams use \",\" in their channels\n return true;\n default:\n return false;\n }\n }\n /**\n *\n * @param value\n */\n function _isValidChannel(value) {\n if (!_isString(value)) {\n return false;\n }\n if (value.length < 2) {\n return false;\n }\n if (value.charAt(0) !== '/') {\n return false;\n }\n for (let i = 1; i < value.length; ++i) {\n const char = value.charAt(i);\n if (_isAlpha(char) || _isNumeric(char) || _isAllowed(char)) {\n continue;\n }\n return false;\n }\n return true;\n }\n\n // Clearly expose this as a public variable\n // Avoid changing the \"look and feel\" of code\n // that originally came from the privates of cometd.\n const isValidChannel = function (channel) {\n // We prefix channel name with a base channel - so\n // to that here for validation purposes\n return _isValidChannel('/matlab' + channel);\n };\n _exports.default = isValidChannel;\n return _exports.default;\n});\n//# sourceMappingURL=isValidChannel.js.map\n","define([\"dojo/_base/declare\", \"dojo/_base/config\", \"dojo/Deferred\", \"cometd/cometd\", \"cometd/AckExtension\", \"./transportEnums\", \"./instanceEnums\", \"mw-log/Log\", \"mw-remote/iframeproxy/IframeProxyClient\"], function (declare, config, Deferred, cometd, AckExtension, transportEnums, instanceEnums, Log, IframeProxyClient) {\n \"use strict\";\n\n var _exports = {};\n /* Copyright 2012-2024 The MathWorks, Inc. */\n\n const oldSetTimeout = cometd.setTimeout;\n const oldClearTimeout = cometd.clearTimeout;\n const DEFAULT_MAX_NETWORK_DELAY = 20000;\n\n // If connection fails and CometD starts to reconnect on its own,\n // we would stop the retry after 30 times (approximate 60 seconds),\n // because CometD does not stop retry on its own.\n const RETRY_LIMIT = 30;\n\n // Feature switch for whether message service should consider using\n // mw-remote's new \"sendPayload\" functionality (and thus potentially\n // avoid the iframe proxy)\n const _CONSIDER_DIRECT_XHR = false;\n\n // count time using a 200 ms interval and execute registered functions\n // this is used to override the cometd timeout code to better handle\n // the browser/MATLAB process being debugged for longer than the timeout.\n // g1142859\n let tick = 0;\n let timeoutHandleCount = 0;\n const timeoutFunctions = {};\n const MS_PER_TICK = 200;\n setInterval(function () {\n tick += MS_PER_TICK;\n Object.keys(timeoutFunctions).forEach(function (handle) {\n const timeout = timeoutFunctions[handle];\n // Check to see if timeout still exists\n // Before checking for execTime.\n // May have been cleared out by other\n // \"Handle\"'s func() call\n if (timeout && timeout.execTime <= tick) {\n timeout.func();\n delete timeoutFunctions[handle];\n }\n });\n }, MS_PER_TICK);\n\n // g1142859 - Override the cometd actual setTimeout function used by cometd\n cometd.setTimeout = function (func, delay) {\n if (delay === 0) {\n return oldSetTimeout(func, delay);\n } else {\n timeoutHandleCount += 1;\n const timeoutHandle = `t-${timeoutHandleCount}`;\n timeoutFunctions[timeoutHandle] = {\n func: function () {\n // this is similar to the setTimeout function defined in cometd.js\n try {\n func();\n } catch (x) {\n Log.warn('Exception invoking timed function in callback\\n, this is likely an issue with code calling MessageService', func, x);\n }\n },\n execTime: tick + delay\n };\n return timeoutHandle;\n }\n };\n cometd.clearTimeout = function (handle) {\n if (typeof handle === 'number') {\n oldClearTimeout(handle);\n } else {\n delete timeoutFunctions[handle];\n }\n };\n const constructCometD = function (name, proxyClient, transports, endPointInfo, remote) {\n const motwCometD = new cometd.CometD(name);\n motwCometD.registerExtension('ack', new AckExtension());\n return motwCometD;\n };\n const processMessageAcknowledgement = function (message, deferred) {\n if (message.successful) {\n deferred.resolve(message);\n } else {\n Log.warn('Message failed: ', message);\n deferred.reject(message);\n }\n };\n const MessageServiceAsync = declare([], {\n BASE_PREFIX: '/matlab',\n BASE_END_POINT: 'messageservice/async',\n logCometdLifecycle: false,\n logCometdSubscriptions: false,\n constructor: function (remote, constructCometDOverride, iframeProxyClient, cometdProperties, options) {\n options = options || {};\n this.remote = remote;\n this.constructCometD = constructCometDOverride || constructCometD;\n\n // workerProxyAsyncClient is being removed, but left to keep tests working\n // Trying to release fix for g2980041\n // So don't want to redo all the tests yet\n // But backported changes to allow existing CometD version\n // To do Direct XHR\n this.workerProxyAsyncClient = iframeProxyClient || new IframeProxyClient('remoteWorkerAsyncProducer');\n const instanceType = instanceEnums[options.instanceType];\n if (instanceType) {\n this.BASE_PREFIX = instanceType.BASE_PREFIX;\n this.BASE_END_POINT = instanceType.BASE_END_POINT;\n }\n this.cometdProperties = cometdProperties || {\n useWorkerScheduler: false,\n // Non-Default - using Ticks\n // protocol: null, // Not listed in the Config Options\n stickyReconnect: true,\n // Stay with WebSockets if we connected ok, otherwise fallback\n connectTimeout: 5000,\n // Non-Default\n maxConnections: 2,\n backoffIncrement: 2000,\n // Non-Default - Matches Max Backoff\n maxBackoff: 2000,\n // Non-Default - Always wait 2s before trying to reconnect\n logLevel: 'warn',\n maxNetworkDelay: DEFAULT_MAX_NETWORK_DELAY,\n // Non-Default\n requestHeaders: {},\n appendMessageTypeToURL: false,\n // Non-Default\n autoBatch: true,\n // Non-Default\n urls: {},\n maxURILength: 2000,\n maxSendBayeuxMessageSize: Number.MAX_SAFE_INTEGER // Non-Default\n };\n\n // Get Additional Config from DojoConfig\n const dojoConfigOverrides = ['maxNetworkDelay', 'connectTimeout', 'logLevel'];\n const dojoConfigCometdProps = config.cometdProperties;\n if (dojoConfigCometdProps) {\n for (let i = 0; i < dojoConfigOverrides.length; i += 1) {\n const key = dojoConfigOverrides[i];\n if (dojoConfigCometdProps[key] !== undefined) {\n this.cometdProperties[key] = dojoConfigCometdProps[key];\n }\n }\n }\n this.subscriptions = {};\n\n // used to keep track of messages which have already been handled\n this.recentMessages = [];\n // construct this closure up front so that it doesn't get recreated all the time\n this._deferredCleanupFunction = () => {\n this._deferredCleanup = false;\n this.recentMessages = [];\n };\n\n // configure endpoint and construct cometd\n this.routingHost = MessageServiceAsync.workerHostOverride || this.remote.getWorkerRoutingHost();\n this.routingKey = this.remote.getWorkerRoutingKey();\n this.computeToken = this.remote.getComputeSessionId();\n const asyncWorkerEndPoint = this.remote.getEndPointByName('WORKER_ASYNC_ENDPOINT');\n this.withCredentials = asyncWorkerEndPoint ? asyncWorkerEndPoint.withCredentials : false;\n const endPointInfo = this._setUpEndPoint();\n if (this.computeToken) {\n endPointInfo.computeToken = this.computeToken;\n }\n this.cometdProperties.url = endPointInfo.url;\n this.cometdProperties.requestHeaders = {\n computeToken: endPointInfo.computeToken\n };\n this.cometd = null;\n this._connectedAtLeastOnce = false;\n if (this.logCometdLifecycle) {\n Log.info('MessageServiceAsync will construct new cometd instance when connecting.');\n }\n },\n onMessage: function (message) {},\n onConnectionError: function /* error */ () {},\n onConnectionFails: function /* error */ () {},\n onConnectionSuccess: function /* message */ () {},\n connect: function (channelSubscriptions) {\n // If App Service Host and MATLAB Compute Service Host\n // operate across machines or have different auth tokens\n // we will need to update mw-remote endpoints or Discovery\n // service to support this. Right now we assume both\n // App Service + MATLAB Compute Service Host are\n // using the same auth and are on the same machine\n this.routingHost = MessageServiceAsync.workerHostOverride || this.remote.getWorkerRoutingHost();\n this.routingKey = this.remote.getWorkerRoutingKey();\n this.computeToken = this.remote.getComputeSessionId();\n const asyncWorkerEndPoint = this.remote.getEndPointByName('WORKER_ASYNC_ENDPOINT');\n this.withCredentials = asyncWorkerEndPoint ? asyncWorkerEndPoint.withCredentials : false;\n const endPointInfo = this._setUpEndPoint();\n if (this.computeToken) {\n endPointInfo.computeToken = this.computeToken;\n }\n this.cometdProperties.url = endPointInfo.url;\n this.cometdProperties.requestHeaders = {\n computeToken: endPointInfo.computeToken\n };\n\n // if service stop, cometd will be destroyed (this.cometd = null).\n // in this case, we should create a new instance of cometd\n if (!this.cometd) {\n this.cometd = this.constructCometD('messageService', this.workerProxyAsyncClient, {\n websocket: MessageServiceAsync.enableWebsocket\n }, endPointInfo, this.remote);\n this.registerTransports({\n websocket: MessageServiceAsync.enableWebsocket\n });\n if (this.logCometdLifecycle) {\n Log.info('MessageServiceAsync constructing new cometd instance.');\n }\n }\n const deferred = new Deferred();\n let retryConnectCount = 0;\n this.cleanupListeners();\n this._handshakeHandle = this.cometd.addListener('/meta/handshake', message => {\n if (message.successful === true) {\n // subscribe if handshake is success\n retryConnectCount = 0;\n let channel, subscriptions;\n const deferreds = [];\n this.doStartBatch();\n for (channel in channelSubscriptions) {\n if (Object.prototype.hasOwnProperty.call(channelSubscriptions, channel)) {\n subscriptions = channelSubscriptions[channel];\n deferreds.push(this.doSubscribe(channel));\n subscriptions.subscribed = true;\n }\n }\n this.doEndBatch();\n Promise.all(deferreds).then(result => {\n this._connectedAtLeastOnce = true;\n if (!deferred.isFulfilled()) {\n deferred.resolve(result); // connected and all subscriptions subscribed\n } else if (this.cometd) {\n // when this channel is notified, messageService may have been stopped and cometd destroyed\n this.onConnectionSuccess();\n }\n }, () => {\n // if subscription fails, retry once.\n let channel, subscriptions;\n const deferreds = [];\n this.doStartBatch();\n for (channel in channelSubscriptions) {\n if (Object.prototype.hasOwnProperty.call(channelSubscriptions, channel)) {\n subscriptions = channelSubscriptions[channel];\n deferreds.push(this.doSubscribe(channel));\n subscriptions.subscribed = true;\n }\n }\n this.doEndBatch();\n Promise.all(deferreds).then(result => {\n this._connectedAtLeastOnce = true;\n if (!deferred.isFulfilled()) {\n deferred.resolve(result); // connected and all subscriptions subscribed\n } else if (this.cometd) {\n // when this channel is notified, messageService may have been stopped and cometd destroyed\n this.onConnectionSuccess();\n }\n }, error => {\n // if fails again, reject, go to fatally disconnected.\n deferred.reject(error);\n });\n });\n }\n });\n\n // the timing of this channel being notified is late\n this._connectHandle = this.cometd.addListener('/meta/connect', message => {\n if (message.successful === true) {\n if (retryConnectCount > 0) {\n // Move state machine back to connected\n // from connecting. Since we were\n // currently retrying.\n // Success means we reconnected.\n // This should also force a queue flush\n // Without this the queue stays on the\n // client instead of sending out the messages\n if (this.cometd) {\n this.onConnectionSuccess();\n }\n }\n retryConnectCount = 0;\n }\n });\n this._unsuccessHandle = this.cometd.addListener('/meta/unsuccessful', error => {\n // 1. From \"/meta/handshake\": transport does not have websocket or long-polling, cometd does not retry connection\n\n // 2. From \"/meta/handshake\": cometd will try connection, need to force disconnect if retried x number of times\n\n // 3. From \"/meta/disconnect\": for some reason, disconnect is not success\n\n // 4. From \"/meta/subscribe\": subscription fails, we should try to subscribe again, for at most y number of times.\n if ((error.channel === '/meta/handshake' || error.channel === '/meta/connect' || error.advice && error.advice.reconnect === 'handshake') && retryConnectCount < RETRY_LIMIT) {\n retryConnectCount += 1;\n if (retryConnectCount === 1) {\n this.onConnectionError();\n }\n } else if (error.channel === '/meta/disconnect') {\n if (deferred && !deferred.isFulfilled()) {\n deferred.reject(error);\n }\n } else if (retryConnectCount >= RETRY_LIMIT) {\n const disconnectPromise = this.doDisconnect();\n if (!this._connectedAtLeastOnce) {\n disconnectPromise.catch(() => {\n // only catch rejected promise if we never connected with the server, otherwise, let error go through to the console\n Log.info('MessageService never got connected to the server, and the attempt to disconnect also fails. Suppressing console error with this info log');\n });\n }\n if (deferred && !deferred.isFulfilled()) {\n deferred.reject(error);\n } else {\n this.onConnectionFails();\n }\n }\n });\n this.cometd.init(this.cometdProperties);\n return deferred.promise;\n },\n registerTransports: function (transports) {\n const longPollTransport = new cometd.LongPollingTransport();\n // override this accept methid because long-polling will not retry if previous\n // connection is not successful and request is cross-origin;\n // not sure if in actual use case there is cross origin request\n longPollTransport.accept = () => {\n return true;\n };\n const webSocketTransport = new cometd.WebSocketTransport();\n this.cometd.unregisterTransports();\n if (transports[transportEnums.WEBSOCKET]) {\n this.cometd.registerTransport(transportEnums.WEBSOCKET, webSocketTransport, 0);\n }\n this.cometd.registerTransport(transportEnums.LONG_POLLING, longPollTransport, 1);\n },\n disconnect: function () {\n if (this.logCometdLifecycle) {\n Log.info('MessageServiceAsync disconnecting cometd due to disconnect call.', this.cometd.getClientId());\n }\n const promise = this._createOneShotMessagePromise('/meta/disconnect');\n this.cometd.disconnect();\n return promise;\n },\n destructCometd: function () {\n if (this.cometd) {\n this.cleanupListeners();\n this.cometd = null;\n if (this.logCometdLifecycle) {\n Log.info('MessageServiceAsync destroying cometd instance.');\n }\n }\n },\n cleanup: function () {\n if (this.cometd) {\n if (this.logCometdLifecycle) {\n Log.info('MessageServiceAsync disconnecting cometd due to cleanup call.', this.cometd, this.cometd && this.cometd.getClientId());\n }\n this.cometd.disconnect();\n }\n },\n cleanupListeners: function () {\n if (this._handshakeHandle) {\n this.cometd.removeListener(this._handshakeHandle);\n }\n if (this._connectHandle) {\n this.cometd.removeListener(this._connectHandle);\n }\n if (this._unsuccessHandle) {\n this.cometd.removeListener(this._unsuccessHandle);\n }\n },\n delegateConnected: function () {\n if (this.cometd) {\n return !this.cometd.isDisconnected() &&\n // When handshaking we cannot send messages.\n // They will be rejected\n this.cometd.getStatus() !== 'handshaking';\n } else {\n return false;\n }\n },\n doPublish: function (channel, data) {\n const deferred = new Deferred();\n this.cometd.publish(this._getRequestChannel(channel), data, {}, function (message) {\n processMessageAcknowledgement(message, deferred);\n });\n return deferred.promise;\n },\n doSubscribe: function (channel) {\n if (this.logCometdSubscriptions) {\n Log.info('MessageServiceAsync subscribing cometd to channel: ' + channel);\n }\n const promise = this._createOneShotMessagePromise('/meta/subscribe');\n this.subscriptions[channel] = this.cometd.subscribe(this._getRequestChannel(channel), this, this._handleCometResponse);\n return promise;\n },\n doDisconnect: function () {\n if (this.logCometdSubscriptions) {\n Log.info('MessageServiceAsync sending disconnect to cometd');\n }\n const promise = this._createOneShotMessagePromise('/meta/disconnect');\n this.cometd.disconnect(true);\n return promise;\n },\n doUnsubscribe: function (channel) {\n if (this.subscriptions[channel]) {\n if (this.logCometdSubscriptions) {\n Log.info('MessageServiceAsync unsubscribing cometd from channel: ' + channel);\n }\n const promise = this._createOneShotMessagePromise('/meta/unsubscribe');\n this.cometd.unsubscribe(this.subscriptions[channel]);\n delete this.subscriptions[channel];\n return promise;\n } else {\n return new Deferred().resolve({\n successful: true\n });\n }\n },\n doStartBatch: function () {\n this.cometd.startBatch();\n },\n doEndBatch: function () {\n this.cometd.endBatch();\n },\n doSetLatency: function (latency) {\n this.workerProxyAsyncClient.setLatency(latency);\n },\n doSetErrorRate: function (errorRate) {\n this.workerProxyAsyncClient.setErrorRate(errorRate);\n },\n /**\n * Returns transport type if we are connected\n * This is \"unknown\", \"long-polling\", or \"websockets\"\n * New transports may be added in which case additional\n * return values will be possible.\n * @returns {string} Name of the transport used by messageservice to communicate\n */\n getTransport: function () {\n if (this.cometd && !this.cometd.isDisconnected()) {\n return this.cometd.getTransport().getType();\n } else {\n return transportEnums.UNKNOWN;\n }\n },\n _handleCometResponse: function (response) {\n if (this._shouldHandleMessage(response)) {\n this.onMessage(this._stripBasePrefixAndConvertToJson(response));\n }\n },\n _shouldHandleMessage: function (response) {\n // client to server messages should be ignored\n if (response.id) {\n return false;\n }\n\n // keep a list of recent messages so that dupes can be ignored\n // this gets cleared out using a timer once all the new messages are handled\n // this is necessary because cometd does it's own dispatching of * and ** subscriptions\n // which duplicates the code in MessageServiceBase\n if (this.recentMessages.indexOf(response) < 0) {\n this.recentMessages.push(response);\n this._deferRecentMessagesCleanup();\n return true;\n } else {\n return false;\n }\n },\n _deferRecentMessagesCleanup: function () {\n if (!this._deferredCleanup) {\n this._deferredCleanup = setTimeout(this._deferredCleanupFunction, 0);\n }\n },\n _createOneShotMessagePromise: function (channel) {\n const deferred = new Deferred();\n this._addOneShotListener(channel, function (message) {\n processMessageAcknowledgement(message, deferred);\n });\n return deferred.promise;\n },\n _addOneShotListener: function (channel, callback) {\n const that = this;\n const cometd = this.cometd;\n const handle = this.cometd.addListener(channel, function (message) {\n // be sure to removeListener from the original cometd instance, not the current on\n // stored in \"that\"\n cometd.removeListener(handle);\n callback.apply(that, arguments);\n });\n },\n _setUpEndPoint: function () {\n let url;\n let remoteSupportsSendPayload = false;\n const endPointName = 'MESSAGE_SERVICE_ASYNC_ENDPOINT';\n const isEnabled = true;\n const isMessageContainerBased = true;\n let endPointAllowsDirectXhr;\n // Check to see if the mw-remote version being used supports the sendPayload API\n // else we use the existing functionality of sending message using IFrame\n if (_CONSIDER_DIRECT_XHR && typeof this.remote.sendPayload === 'function') {\n remoteSupportsSendPayload = true;\n\n // Create a new Endpoint which is used for sending data using mw-remote sendPayload API\n this.remote.createNewEndPoint(endPointName, isEnabled, this.BASE_END_POINT, 'remoteWorkerAsyncProducer', isMessageContainerBased);\n\n // Set the routingHost and routingKey for the endPoint\n this.remote.setServiceEndPoint(endPointName, this.routingHost, this.routingKey);\n url = this.remote.getUrlForEndPoint(endPointName);\n\n // Check whether direct Xhr is allowed for the endPoint\n endPointAllowsDirectXhr = this.remote.getEndPointAllowsDirectXhr(endPointName);\n } else {\n // this.routingHost may not be set, and if it is,\n // it may not end in slash. Add the slash so that\n // it may be combined with BASE_END_POINT\n url = this.routingHost || '/';\n if (url.slice(-1) !== '/') {\n url += '/';\n }\n url += this.BASE_END_POINT;\n if (this.routingKey) {\n url += '?routingkey=' + this.routingKey;\n }\n }\n return {\n remoteSupportsSendPayload,\n url,\n endPointName,\n endPointAllowsDirectXhr\n };\n },\n _getRequestChannel: function (channel) {\n return this.BASE_PREFIX + channel;\n },\n _stripBasePrefixAndConvertToJson: function (message) {\n return {\n channel: message.channel.substring(this.BASE_PREFIX.length),\n data: message.data\n };\n }\n });\n MessageServiceAsync.enableWebsocket = false;\n MessageServiceAsync.workerHostOverride = false;\n if (window.location.search.indexOf('websocket=on') >= 0) {\n MessageServiceAsync.enableWebsocket = true;\n }\n _exports.default = MessageServiceAsync;\n return _exports.default;\n});\n//# sourceMappingURL=MessageServiceAsync.js.map\n","define([\"./cometd\"], function (cometdModule) {\n \"use strict\";\n\n var _exports = {};\n /*\n * Copyright (c) 2008-2022 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n // MathWorks Added - convert source code to ECMAScript Modules\n /**\n * This client-side extension enables the client to acknowledge to the server\n * the messages that the client has received.\n * For the acknowledgement to work, the server must be configured with the\n * correspondent server-side ack extension. If both client and server support\n * the ack extension, then the ack functionality will take place automatically.\n * By enabling this extension, all messages arriving from the server will arrive\n * via /meta/connect, so the comet communication will be slightly chattier.\n * The fact that all messages will return via /meta/connect means also that the\n * messages will arrive with total order, which is not guaranteed if messages\n * can arrive via both /meta/connect and normal response.\n * Messages are not acknowledged one by one, but instead a batch of messages is\n * acknowledged when the /meta/connect returns.\n */\n _exports.default = cometdModule.AckExtension = function () {\n // MathWorks Added - convert source code to ECMAScript Modules\n let _cometd;\n let _serverSupportsAcks = false;\n let _batch;\n function _debug(text, args) {\n _cometd._debug(text, args);\n }\n this.registered = (name, cometd) => {\n _cometd = cometd;\n _debug('AckExtension: executing registration callback');\n };\n this.unregistered = () => {\n _debug('AckExtension: executing unregistration callback');\n _cometd = null;\n };\n this.incoming = message => {\n const channel = message.channel;\n const ext = message.ext;\n if (channel === '/meta/handshake') {\n if (ext) {\n const ackField = ext.ack;\n if (typeof ackField === 'object') {\n // New format.\n _serverSupportsAcks = ackField.enabled === true;\n const batch = ackField.batch;\n if (typeof batch === 'number') {\n _batch = batch;\n }\n } else {\n // Old format.\n _serverSupportsAcks = ackField === true;\n }\n }\n _debug('AckExtension: server supports acknowledgements', _serverSupportsAcks);\n } else if (channel === '/meta/connect' && message.successful && _serverSupportsAcks) {\n if (ext && typeof ext.ack === 'number') {\n _batch = ext.ack;\n _debug('AckExtension: server sent batch', _batch);\n }\n }\n return message;\n };\n this.outgoing = message => {\n const channel = message.channel;\n if (!message.ext) {\n message.ext = {};\n }\n if (channel === '/meta/handshake') {\n message.ext.ack = _cometd && _cometd.ackEnabled !== false;\n _serverSupportsAcks = false;\n _batch = 0;\n } else if (channel === '/meta/connect') {\n if (_serverSupportsAcks) {\n message.ext.ack = _batch;\n _debug('AckExtension: client sending batch', _batch);\n }\n }\n return message;\n };\n };\n return _exports.default;\n});\n//# sourceMappingURL=AckExtension.js.map\n","define([\"./instanceEnums\"], function (instanceEnums) {\n \"use strict\";\n\n var _exports = {};\n /* Copyright 2021-2024 The MathWorks, Inc. */\n\n const serviceHostRegEx = /AppServiceHost/i;\n const isAppServiceHost = options => {\n return options.serviceName.match(serviceHostRegEx) !== null;\n };\n const getInstance = (messageServiceInstances, options) => {\n if (isAppServiceHost(options)) {\n return messageServiceInstances[instanceEnums.APP_SERVICE_HOST.name]();\n }\n return messageServiceInstances[instanceEnums.MATLAB_SERVICE_HOST.name]();\n };\n\n /**\n *\n * @param messageServiceInstances\n * @param options\n */\n _exports.default = function messageServiceFactory(messageServiceInstances, options) {\n if (!options.serviceName) {\n throw new Error('Must provide a serviceName');\n } else if (!options.serviceName.length || options.serviceName.length < 5) {\n throw new Error('serviceName must be longer than 4 characters');\n }\n const instance = getInstance(messageServiceInstances, options);\n const newInstance = {};\n // Decrease instance API area to:\n ['subscribe', 'unsubscribe', 'publish', 'isStarted', 'isConnected', 'isFatallyDisconnected', 'isDisconnected', 'setLatency', 'setErrorRate', 'getTransport', 'on', 'onConnected', 'onDisconnected'].forEach(method => {\n newInstance[method] = instance[method].bind(instance);\n });\n\n // Add messageService = this is a obj - so don't use\n // bind.\n newInstance.messageService = instance.messageService;\n return newInstance;\n };\n return _exports.default;\n});\n//# sourceMappingURL=messageServiceFactory.js.map\n","define([\"mw-log/Log\", \"./Sender\"], function (Log, Sender) {\n \"use strict\";\n\n var _exports = {};\n // Copyright 2022-2023 The MathWorks, Inc.\n\n /**\n * Defines class that drops events rather than sending them\n * @private\n */\n class StubSender extends Sender {\n constructor(properties) {\n super();\n }\n stop() {\n // Nothing to do\n }\n sendEvent(eventType, event) {\n Log.info('StubSender dropping event');\n }\n }\n _exports.default = StubSender;\n return _exports.default;\n});\n//# sourceMappingURL=StubSender.js.map\n","\"use strict\";\n\n// Copyright 2018-2020 The MathWorks, Inc.\ndefine(['lit/lit-element/lit-element.bundled'], function (litElementComponents) {\n 'use strict'; // Dummy Extend to allow us to patches to LitElement.\n // E.g. Bug fixes\n // If this is in place up-front, no one walking the prototype chain\n // Gets suprised if we need to modify functionality at this level\n // We should also decide whether we need this level of indirection,\n // if we already have \"Widget Base\"\n\n class MWLitElement extends litElementComponents.LitElement {}\n\n return MWLitElement;\n});\n//# sourceMappingURL=LitElement.js.map\n","define([\"exports\",\"./css-tag\",\"./custom-elements-es5-adapter\"],(function(t,i,s){\"use strict\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */var e;const r=window.reactiveElementPolyfillSupport,n={toAttribute(t,i){switch(i){case Boolean:t=t?\"\":null;break;case Object:case Array:t=null==t?t:JSON.stringify(t)}return t},fromAttribute(t,i){let s=t;switch(i){case Boolean:s=null!==t;break;case Number:s=null===t?null:Number(t);break;case Object:case Array:try{s=JSON.parse(t)}catch(t){s=null}}return s}},h=(t,i)=>i!==t&&(i==i||t==t),o={attribute:!0,type:String,converter:n,reflect:!1,hasChanged:h};class l extends HTMLElement{constructor(){super(),this._$Et=new Map,this.isUpdatePending=!1,this.hasUpdated=!1,this._$Ei=null,this.o()}static addInitializer(t){var i;null!==(i=this.l)&&void 0!==i||(this.l=[]),this.l.push(t)}static get observedAttributes(){this.finalize();const t=[];return this.elementProperties.forEach(((i,s)=>{const e=this._$Eh(s,i);void 0!==e&&(this._$Eu.set(e,s),t.push(e))})),t}static createProperty(t,i=o){if(i.state&&(i.attribute=!1),this.finalize(),this.elementProperties.set(t,i),!i.noAccessor&&!this.prototype.hasOwnProperty(t)){const s=\"symbol\"==typeof t?Symbol():\"__\"+t,e=this.getPropertyDescriptor(t,s,i);void 0!==e&&Object.defineProperty(this.prototype,t,e)}}static getPropertyDescriptor(t,i,s){return{get(){return this[i]},set(e){const r=this[t];this[i]=e,this.requestUpdate(t,r,s)},configurable:!0,enumerable:!0}}static getPropertyOptions(t){return this.elementProperties.get(t)||o}static finalize(){if(this.hasOwnProperty(\"finalized\"))return!1;this.finalized=!0;const t=Object.getPrototypeOf(this);if(t.finalize(),this.elementProperties=new Map(t.elementProperties),this._$Eu=new Map,this.hasOwnProperty(\"properties\")){const t=this.properties,i=[...Object.getOwnPropertyNames(t),...Object.getOwnPropertySymbols(t)];for(const s of i)this.createProperty(s,t[s])}return this.elementStyles=this.finalizeStyles(this.styles),!0}static finalizeStyles(t){const s=[];if(Array.isArray(t)){const e=new Set(t.flat(1/0).reverse());for(const t of e)s.unshift(i.getCompatibleStyle(t))}else void 0!==t&&s.push(i.getCompatibleStyle(t));return s}static _$Eh(t,i){const s=i.attribute;return!1===s?void 0:\"string\"==typeof s?s:\"string\"==typeof t?t.toLowerCase():void 0}o(){var t;this._$Ev=new Promise((t=>this.enableUpdating=t)),this._$AL=new Map,this._$Ep(),this.requestUpdate(),null===(t=this.constructor.l)||void 0===t||t.forEach((t=>t(this)))}addController(t){var i,s;(null!==(i=this._$Em)&&void 0!==i?i:this._$Em=[]).push(t),void 0!==this.renderRoot&&this.isConnected&&(null===(s=t.hostConnected)||void 0===s||s.call(t))}removeController(t){var i;null===(i=this._$Em)||void 0===i||i.splice(this._$Em.indexOf(t)>>>0,1)}_$Ep(){this.constructor.elementProperties.forEach(((t,i)=>{this.hasOwnProperty(i)&&(this._$Et.set(i,this[i]),delete this[i])}))}createRenderRoot(){var t;const s=null!==(t=this.shadowRoot)&&void 0!==t?t:this.attachShadow(this.constructor.shadowRootOptions);return i.adoptStyles(s,this.constructor.elementStyles),s}connectedCallback(){var t;void 0===this.renderRoot&&(this.renderRoot=this.createRenderRoot()),this.enableUpdating(!0),null===(t=this._$Em)||void 0===t||t.forEach((t=>{var i;return null===(i=t.hostConnected)||void 0===i?void 0:i.call(t)}))}enableUpdating(t){}disconnectedCallback(){var t;null===(t=this._$Em)||void 0===t||t.forEach((t=>{var i;return null===(i=t.hostDisconnected)||void 0===i?void 0:i.call(t)}))}attributeChangedCallback(t,i,s){this._$AK(t,s)}_$Eg(t,i,s=o){var e,r;const h=this.constructor._$Eh(t,s);if(void 0!==h&&!0===s.reflect){const o=(null!==(r=null===(e=s.converter)||void 0===e?void 0:e.toAttribute)&&void 0!==r?r:n.toAttribute)(i,s.type);this._$Ei=t,null==o?this.removeAttribute(h):this.setAttribute(h,o),this._$Ei=null}}_$AK(t,i){var s,e,r;const h=this.constructor,o=h._$Eu.get(t);if(void 0!==o&&this._$Ei!==o){const t=h.getPropertyOptions(o),l=t.converter,a=null!==(r=null!==(e=null===(s=l)||void 0===s?void 0:s.fromAttribute)&&void 0!==e?e:\"function\"==typeof l?l:null)&&void 0!==r?r:n.fromAttribute;this._$Ei=o,this[o]=a(i,t.type),this._$Ei=null}}requestUpdate(t,i,s){let e=!0;void 0!==t&&(((s=s||this.constructor.getPropertyOptions(t)).hasChanged||h)(this[t],i)?(this._$AL.has(t)||this._$AL.set(t,i),!0===s.reflect&&this._$Ei!==t&&(void 0===this._$ES&&(this._$ES=new Map),this._$ES.set(t,s))):e=!1),!this.isUpdatePending&&e&&(this._$Ev=this._$ET())}_$ET(){return t=this,i=void 0,e=function*(){this.isUpdatePending=!0;try{yield this._$Ev}catch(t){Promise.reject(t)}const t=this.scheduleUpdate();return null!=t&&(yield t),!this.isUpdatePending},new((s=void 0)||(s=Promise))((function(r,n){function h(t){try{l(e.next(t))}catch(t){n(t)}}function o(t){try{l(e.throw(t))}catch(t){n(t)}}function l(t){var i;t.done?r(t.value):(i=t.value,i instanceof s?i:new s((function(t){t(i)}))).then(h,o)}l((e=e.apply(t,i||[])).next())}));var t,i,s,e}scheduleUpdate(){return this.performUpdate()}performUpdate(){var t;if(!this.isUpdatePending)return;this.hasUpdated,this._$Et&&(this._$Et.forEach(((t,i)=>this[i]=t)),this._$Et=void 0);let i=!1;const s=this._$AL;try{i=this.shouldUpdate(s),i?(this.willUpdate(s),null===(t=this._$Em)||void 0===t||t.forEach((t=>{var i;return null===(i=t.hostUpdate)||void 0===i?void 0:i.call(t)})),this.update(s)):this._$EC()}catch(t){throw i=!1,this._$EC(),t}i&&this._$AE(s)}willUpdate(t){}_$AE(t){var i;null===(i=this._$Em)||void 0===i||i.forEach((t=>{var i;return null===(i=t.hostUpdated)||void 0===i?void 0:i.call(t)})),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(t)),this.updated(t)}_$EC(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$Ev}shouldUpdate(t){return!0}update(t){void 0!==this._$ES&&(this._$ES.forEach(((t,i)=>this._$Eg(i,this[i],t))),this._$ES=void 0),this._$EC()}updated(t){}firstUpdated(t){}}l.finalized=!0,l.elementProperties=new Map,l.elementStyles=[],l.shadowRootOptions={mode:\"open\"},null==r||r({ReactiveElement:l}),(null!==(e=globalThis.reactiveElementVersions)&&void 0!==e?e:globalThis.reactiveElementVersions=[]).push(\"1.0.1\"),t.CSSResult=i.CSSResult,t.adoptStyles=i.adoptStyles,t.css=i.css,t.getCompatibleStyle=i.getCompatibleStyle,t.supportsAdoptingStyleSheets=i.supportsAdoptingStyleSheets,t.unsafeCSS=i.unsafeCSS,t.ReactiveElement=l,t.defaultConverter=n,t.notEqual=h,Object.defineProperty(t,\"t\",{value:!0})}));\n//# sourceMappingURL=reactive-element.js.map\n","define([\"exports\"],(function(e){\"use strict\";\n/**\n * @license\n * Copyright 2019 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const t=window.ShadowRoot&&(void 0===window.ShadyCSS||window.ShadyCSS.nativeShadow)&&\"adoptedStyleSheets\"in Document.prototype&&\"replace\"in CSSStyleSheet.prototype,n=Symbol(),s=new Map;class o{constructor(e,t){if(this._$cssResult$=!0,t!==n)throw Error(\"CSSResult is not constructable. Use `unsafeCSS` or `css` instead.\");this.cssText=e}get styleSheet(){let e=s.get(this.cssText);return t&&void 0===e&&(s.set(this.cssText,e=new CSSStyleSheet),e.replaceSync(this.cssText)),e}toString(){return this.cssText}}const r=e=>new o(\"string\"==typeof e?e:e+\"\",n),i=t?e=>e:e=>e instanceof CSSStyleSheet?(e=>{let t=\"\";for(const n of e.cssRules)t+=n.cssText;return r(t)})(e):e;e.CSSResult=o,e.adoptStyles=(e,n)=>{t?e.adoptedStyleSheets=n.map((e=>e instanceof CSSStyleSheet?e:e.styleSheet)):n.forEach((t=>{const n=document.createElement(\"style\"),s=window.litNonce;void 0!==s&&n.setAttribute(\"nonce\",s),n.textContent=t.cssText,e.appendChild(n)}))},e.css=(e,...t)=>{const s=1===e.length?e[0]:t.reduce(((t,n,s)=>t+(e=>{if(!0===e._$cssResult$)return e.cssText;if(\"number\"==typeof e)return e;throw Error(\"Value passed to 'css' function must be a 'css' function result: \"+e+\". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.\")})(n)+e[s+1]),e[0]);return new o(s,n)},e.getCompatibleStyle=i,e.supportsAdoptingStyleSheets=t,e.unsafeCSS=r,Object.defineProperty(e,\"t\",{value:!0})}));\n//# sourceMappingURL=css-tag.js.map\n","define((function(){\n \"use strict\";!function(){if(void 0===window.Reflect||void 0===window.customElements||window.customElements.polyfillWrapFlushCallback)return;const n=HTMLElement;window.HTMLElement=function(){return Reflect.construct(n,[],this.constructor)},HTMLElement.prototype=n.prototype,HTMLElement.prototype.constructor=HTMLElement,Object.setPrototypeOf(HTMLElement,n)}()\n return {};\n}));\n//# sourceMappingURL=custom-elements-es5-adapter.js.map\n","define([\"exports\"],(function(t){\"use strict\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */var i;const s=globalThis.trustedTypes,e=s?s.createPolicy(\"lit-html\",{createHTML:t=>t}):void 0,o=\"$lit$\",n=`lit$${(Math.random()+\"\").slice(9)}$`,l=\"?\"+n,h=`<${l}>`,r=document,u=(t=\"\")=>r.createComment(t),d=t=>null===t||\"object\"!=typeof t&&\"function\"!=typeof t,c=Array.isArray,v=t=>{var i;return c(t)||\"function\"==typeof(null===(i=t)||void 0===i?void 0:i[Symbol.iterator])},a=/<(?:(!--|\\/[^a-zA-Z])|(\\/?[a-zA-Z][^>\\s]*)|(\\/?$))/g,f=/-->/g,_=/>/g,m=/>|[ \t\\n\f\\r](?:([^\\s\"'>=/]+)([ \t\\n\f\\r]*=[ \t\\n\f\\r]*(?:[^ \t\\n\f\\r\"'`<>=]|(\"|')|))|$)/g,g=/'/g,p=/\"/g,$=/^(?:script|style|textarea)$/i,y=t=>(i,...s)=>({_$litType$:t,strings:i,values:s}),b=y(1),T=y(2),x=Symbol.for(\"lit-noChange\"),w=Symbol.for(\"lit-nothing\"),A=new WeakMap,C=r.createTreeWalker(r,129,null,!1),P=(t,i)=>{const s=t.length-1,l=[];let r,u=2===i?\"<svg>\":\"\",d=a;for(let i=0;i<s;i++){const s=t[i];let e,c,v=-1,y=0;for(;y<s.length&&(d.lastIndex=y,c=d.exec(s),null!==c);)y=d.lastIndex,d===a?\"!--\"===c[1]?d=f:void 0!==c[1]?d=_:void 0!==c[2]?($.test(c[2])&&(r=RegExp(\"</\"+c[2],\"g\")),d=m):void 0!==c[3]&&(d=m):d===m?\">\"===c[0]?(d=null!=r?r:a,v=-1):void 0===c[1]?v=-2:(v=d.lastIndex-c[2].length,e=c[1],d=void 0===c[3]?m:'\"'===c[3]?p:g):d===p||d===g?d=m:d===f||d===_?d=a:(d=m,r=void 0);const b=d===m&&t[i+1].startsWith(\"/>\")?\" \":\"\";u+=d===a?s+h:v>=0?(l.push(e),s.slice(0,v)+o+s.slice(v)+n+b):s+n+(-2===v?(l.push(void 0),i):b)}const c=u+(t[s]||\"<?>\")+(2===i?\"</svg>\":\"\");return[void 0!==e?e.createHTML(c):c,l]};class V{constructor({strings:t,_$litType$:i},e){let h;this.parts=[];let r=0,d=0;const c=t.length-1,v=this.parts,[a,f]=P(t,i);if(this.el=V.createElement(a,e),C.currentNode=this.el.content,2===i){const t=this.el.content,i=t.firstChild;i.remove(),t.append(...i.childNodes)}for(;null!==(h=C.nextNode())&&v.length<c;){if(1===h.nodeType){if(h.hasAttributes()){const t=[];for(const i of h.getAttributeNames())if(i.endsWith(o)||i.startsWith(n)){const s=f[d++];if(t.push(i),void 0!==s){const t=h.getAttribute(s.toLowerCase()+o).split(n),i=/([.?@])?(.*)/.exec(s);v.push({type:1,index:r,name:i[2],strings:t,ctor:\".\"===i[1]?k:\"?\"===i[1]?H:\"@\"===i[1]?I:S})}else v.push({type:6,index:r})}for(const i of t)h.removeAttribute(i)}if($.test(h.tagName)){const t=h.textContent.split(n),i=t.length-1;if(i>0){h.textContent=s?s.emptyScript:\"\";for(let s=0;s<i;s++)h.append(t[s],u()),C.nextNode(),v.push({type:2,index:++r});h.append(t[i],u())}}}else if(8===h.nodeType)if(h.data===l)v.push({type:2,index:r});else{let t=-1;for(;-1!==(t=h.data.indexOf(n,t+1));)v.push({type:7,index:r}),t+=n.length-1}r++}}static createElement(t,i){const s=r.createElement(\"template\");return s.innerHTML=t,s}}function E(t,i,s=t,e){var o,n,l,h;if(i===x)return i;let r=void 0!==e?null===(o=s._$Cl)||void 0===o?void 0:o[e]:s._$Cu;const u=d(i)?void 0:i._$litDirective$;return(null==r?void 0:r.constructor)!==u&&(null===(n=null==r?void 0:r._$AO)||void 0===n||n.call(r,!1),void 0===u?r=void 0:(r=new u(t),r._$AT(t,s,e)),void 0!==e?(null!==(l=(h=s)._$Cl)&&void 0!==l?l:h._$Cl=[])[e]=r:s._$Cu=r),void 0!==r&&(i=E(t,r._$AS(t,i.values),r,e)),i}class M{constructor(t,i){this.v=[],this._$AN=void 0,this._$AD=t,this._$AM=i}get parentNode(){return this._$AM.parentNode}get _$AU(){return this._$AM._$AU}p(t){var i;const{el:{content:s},parts:e}=this._$AD,o=(null!==(i=null==t?void 0:t.creationScope)&&void 0!==i?i:r).importNode(s,!0);C.currentNode=o;let n=C.nextNode(),l=0,h=0,u=e[0];for(;void 0!==u;){if(l===u.index){let i;2===u.type?i=new N(n,n.nextSibling,this,t):1===u.type?i=new u.ctor(n,u.name,u.strings,this,t):6===u.type&&(i=new L(n,this,t)),this.v.push(i),u=e[++h]}l!==(null==u?void 0:u.index)&&(n=C.nextNode(),l++)}return o}m(t){let i=0;for(const s of this.v)void 0!==s&&(void 0!==s.strings?(s._$AI(t,s,i),i+=s.strings.length-2):s._$AI(t[i])),i++}}class N{constructor(t,i,s,e){var o;this.type=2,this._$AH=w,this._$AN=void 0,this._$AA=t,this._$AB=i,this._$AM=s,this.options=e,this._$Cg=null===(o=null==e?void 0:e.isConnected)||void 0===o||o}get _$AU(){var t,i;return null!==(i=null===(t=this._$AM)||void 0===t?void 0:t._$AU)&&void 0!==i?i:this._$Cg}get parentNode(){let t=this._$AA.parentNode;const i=this._$AM;return void 0!==i&&11===t.nodeType&&(t=i.parentNode),t}get startNode(){return this._$AA}get endNode(){return this._$AB}_$AI(t,i=this){t=E(this,t,i),d(t)?t===w||null==t||\"\"===t?(this._$AH!==w&&this._$AR(),this._$AH=w):t!==this._$AH&&t!==x&&this.$(t):void 0!==t._$litType$?this.T(t):void 0!==t.nodeType?this.S(t):v(t)?this.P(t):this.$(t)}M(t,i=this._$AB){return this._$AA.parentNode.insertBefore(t,i)}S(t){this._$AH!==t&&(this._$AR(),this._$AH=this.M(t))}$(t){this._$AH!==w&&d(this._$AH)?this._$AA.nextSibling.data=t:this.S(r.createTextNode(t)),this._$AH=t}T(t){var i;const{values:s,_$litType$:e}=t,o=\"number\"==typeof e?this._$AC(t):(void 0===e.el&&(e.el=V.createElement(e.h,this.options)),e);if((null===(i=this._$AH)||void 0===i?void 0:i._$AD)===o)this._$AH.m(s);else{const t=new M(o,this),i=t.p(this.options);t.m(s),this.S(i),this._$AH=t}}_$AC(t){let i=A.get(t.strings);return void 0===i&&A.set(t.strings,i=new V(t)),i}P(t){c(this._$AH)||(this._$AH=[],this._$AR());const i=this._$AH;let s,e=0;for(const o of t)e===i.length?i.push(s=new N(this.M(u()),this.M(u()),this,this.options)):s=i[e],s._$AI(o),e++;e<i.length&&(this._$AR(s&&s._$AB.nextSibling,e),i.length=e)}_$AR(t=this._$AA.nextSibling,i){var s;for(null===(s=this._$AP)||void 0===s||s.call(this,!1,!0,i);t&&t!==this._$AB;){const i=t.nextSibling;t.remove(),t=i}}setConnected(t){var i;void 0===this._$AM&&(this._$Cg=t,null===(i=this._$AP)||void 0===i||i.call(this,t))}}class S{constructor(t,i,s,e,o){this.type=1,this._$AH=w,this._$AN=void 0,this.element=t,this.name=i,this._$AM=e,this.options=o,s.length>2||\"\"!==s[0]||\"\"!==s[1]?(this._$AH=Array(s.length-1).fill(new String),this.strings=s):this._$AH=w}get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}_$AI(t,i=this,s,e){const o=this.strings;let n=!1;if(void 0===o)t=E(this,t,i,0),n=!d(t)||t!==this._$AH&&t!==x,n&&(this._$AH=t);else{const e=t;let l,h;for(t=o[0],l=0;l<o.length-1;l++)h=E(this,e[s+l],i,l),h===x&&(h=this._$AH[l]),n||(n=!d(h)||h!==this._$AH[l]),h===w?t=w:t!==w&&(t+=(null!=h?h:\"\")+o[l+1]),this._$AH[l]=h}n&&!e&&this.C(t)}C(t){t===w?this.element.removeAttribute(this.name):this.element.setAttribute(this.name,null!=t?t:\"\")}}class k extends S{constructor(){super(...arguments),this.type=3}C(t){this.element[this.name]=t===w?void 0:t}}class H extends S{constructor(){super(...arguments),this.type=4}C(t){t&&t!==w?this.element.setAttribute(this.name,\"\"):this.element.removeAttribute(this.name)}}class I extends S{constructor(t,i,s,e,o){super(t,i,s,e,o),this.type=5}_$AI(t,i=this){var s;if((t=null!==(s=E(this,t,i,0))&&void 0!==s?s:w)===x)return;const e=this._$AH,o=t===w&&e!==w||t.capture!==e.capture||t.once!==e.once||t.passive!==e.passive,n=t!==w&&(e===w||o);o&&this.element.removeEventListener(this.name,this,e),n&&this.element.addEventListener(this.name,this,t),this._$AH=t}handleEvent(t){var i,s;\"function\"==typeof this._$AH?this._$AH.call(null!==(s=null===(i=this.options)||void 0===i?void 0:i.host)&&void 0!==s?s:this.element,t):this._$AH.handleEvent(t)}}class L{constructor(t,i,s){this.element=t,this.type=6,this._$AN=void 0,this._$AM=i,this.options=s}get _$AU(){return this._$AM._$AU}_$AI(t){E(this,t)}}const R={k:o,V:n,L:l,I:1,N:P,R:M,D:v,j:E,H:N,O:S,F:H,B:I,W:k,Z:L},j=window.litHtmlPolyfillSupport;null==j||j(V,N),(null!==(i=globalThis.litHtmlVersions)&&void 0!==i?i:globalThis.litHtmlVersions=[]).push(\"2.0.1\"),t.t=R,t.html=b,t.noChange=x,t.nothing=w,t.render=(t,i,s)=>{var e,o;const n=null!==(e=null==s?void 0:s.renderBefore)&&void 0!==e?e:i;let l=n._$litPart$;if(void 0===l){const t=null!==(o=null==s?void 0:s.renderBefore)&&void 0!==o?o:null;n._$litPart$=l=new N(i.insertBefore(u(),t),t,void 0,null!=s?s:{})}return l._$AI(t),l},t.svg=T,Object.defineProperty(t,\"i\",{value:!0})}));\n//# sourceMappingURL=lit-html.js.map\n","\"use strict\";\n\n// Copyright 2018-2020 The MathWorks, Inc.\ndefine(['lit/lit-element/lit-element.bundled'], function (litElementComponents) {\n 'use strict'; // Since this is a wrapper function, if we need to modify it for bug fixes.\n // We should be able to just return a different function with the modifications\n // before or after the call. No one should be looking at the prototype chain here.\n // since we are not a newable object.\n\n return (result, container, options = {}) => {\n if (options.scopeName) {\n throw new Error('scopeName should not be set in render options, use WidgetBase for scoped rendering');\n }\n\n return litElementComponents.render(result, container, options);\n };\n});\n//# sourceMappingURL=render.js.map\n","\"use strict\";\n\n// Copyright 2019-2020 The MathWorks, Inc.\ndefine(['lit/lit-element/lit-element.bundled'], function (litElementComponents) {\n 'use strict'; // Since this is a decorator function, if we need to modify it for bug fixes.\n // We should be able to just return a different function with the modifications\n // before or after the call. No one should be looking at the prototype chain here.\n // since we are not a newable object.\n\n return litElementComponents.svg;\n});\n//# sourceMappingURL=svg.js.map\n","define([\"dojo/i18n\", \"/mathworks/devel/sandbox/csun/workspaces/docsurvey/node_modules/dojo-webpack-plugin/loaders/dojo/runner.js\"\n,\"/mathworks/devel/sandbox/csun/workspaces/docsurvey/target/debug/2P/derived/ui/mw-rating/nls/main.js?absMid=mw-rating/nls/main\"\n], function(loader, runner) {\n return runner(loader, \"mw-rating/nls/main\", __webpack_require__.dj.c(), true);\n});","define({\n 'root': {\n 'star0': 'Unrated',\n 'star1': '1 star',\n 'star2': '2 stars',\n 'star3': '3 stars',\n 'star4': '4 stars',\n 'star5': '5 stars',\n 'rating': 'rating'\n }\n});\n","/* Copyright 2020-2021 The MathWorks, Inc. */\ndefine(['mw-widget-api/WidgetBase',\n 'mw-widget-api/defineWidget',\n 'mw-widget-api/facade/html',\n 'dojo/i18n!mw-rating-feedback/nls/main',\n 'mw-log/Log',\n 'mw-rating-feedback/impl/RatingFeedbackStep',\n 'mw-rating/Rating'\n], function (WidgetBase, defineWidget, html, l10n, log) {\n 'use strict';\n\n const RATING_FEEDBACK_NAME_PREFIX = 'mw_rating_feedback_';\n const RATING_FEEDBACK_CLASS_PREFIX = 'mwRatingFeedback-';\n const VALUE_WIDGET_CLASS_IDENTIFIER = `${RATING_FEEDBACK_CLASS_PREFIX}Value`;\n\n const HIDDEN_CLASS = `${RATING_FEEDBACK_CLASS_PREFIX}Hidden`;\n\n const NAME_SEPARATOR = '__';\n\n const MAX_STEPS = 3;\n\n const STEP_RATING = 0;\n const STEP_COMMENT = 1;\n const STEP_COMPLETE = 2;\n\n let idCounter = 0;\n function generateId () {\n // Return a string that will be unique.\n idCounter += 1;\n return `${RATING_FEEDBACK_NAME_PREFIX}${idCounter}`;\n }\n\n const STEP_TEMPLATES = [];\n const BUTTON_TEMPLATE = (feedbackWidget, isVisible) => {\n return html`<button .disabled=${!isVisible} class=\"${RATING_FEEDBACK_CLASS_PREFIX}NextButton\" aria-label=\"${feedbackWidget.forwardLabelAria || l10n.forwardLabelAria}\" @click=${feedbackWidget._handleNext}>${feedbackWidget.forwardLabel || l10n.forwardLabel}</button>`;\n };\n\n // We keep all the steps in the DOM so we can use\n // CSS transitions to go between them.\n // But this means we cannot set them to display: none,\n // since this is not animatable. It also means we can't\n // use visible: hidden - since we want it to fade out\n // we could use animation listeners to address those items\n // but that complicates the widget logic more.\n // Instead we hide the content from screen readers using\n // aria-hidden=\"true\" - since the user can't see it either\n // and set the widgets to disabled to avoid \"focus\" problems\n STEP_TEMPLATES[STEP_RATING] = (feedbackWidget) => {\n let id = generateId();\n let isVisible = feedbackWidget.step === STEP_RATING;\n\n // Use of @keyup for mw-rating is intentional for handing Commit key.\n // If keydown is used comment area see the keyup and inserts a new line.\n return html`\n <div \n class=\"${isVisible ? '' : HIDDEN_CLASS}\"\n aria-hidden=\"${!isVisible}\"\n >\n <label class=\"${RATING_FEEDBACK_CLASS_PREFIX}Label\" id=\"${id}\">${feedbackWidget.steps[STEP_RATING]}</label>\n <mw-rating \n .doesDisplayRating=${false} \n aria-labelledby=\"${id}\"\n .disabled=${!isVisible} \n class=\"${VALUE_WIDGET_CLASS_IDENTIFIER}\" \n name=\"${id}${NAME_SEPARATOR}rating\" \n @change=${feedbackWidget._handleNext} \n @keyup=${feedbackWidget._handleKeyCommitsForRating}>\n </mw-rating>\n </div>`;\n };\n STEP_TEMPLATES[STEP_COMMENT] = (feedbackWidget) => {\n let id = generateId();\n let isVisible = feedbackWidget.step === STEP_COMMENT;\n\n return html`\n <div \n class=\"${isVisible ? '' : HIDDEN_CLASS}\"\n aria-hidden=\"${!isVisible}\"\n >\n <label class=\"${RATING_FEEDBACK_CLASS_PREFIX}Label\" for=\"${id}\">${feedbackWidget.steps[STEP_COMMENT]}</label>\n <textarea .disabled=${!isVisible} id=\"${id}\" class=\"${VALUE_WIDGET_CLASS_IDENTIFIER}\" name=\"${id}${NAME_SEPARATOR}comment\" spellcheck></textarea>\n ${BUTTON_TEMPLATE(feedbackWidget, isVisible)}\n </div>`;\n };\n STEP_TEMPLATES[STEP_COMPLETE] = (feedbackWidget) => {\n let isVisible = feedbackWidget.step === STEP_COMPLETE;\n\n // Using hidden so NVDA announces last step\n // this prevents the animation because you cannot\n // animate 'hidden'. Adding an animation would be difficult\n // without some directives (or writing a state machine).\n // to \"delay the draw\" of some of the classes or the\n // step content 1 frame.\n // Therefore, turning off the animation on the last step\n // to be more accessible.\n return html`\n <div \n role=\"alert\"\n class=\"${isVisible ? '' : HIDDEN_CLASS}\"\n aria-hidden=\"${!isVisible}\"\n .hidden=${!isVisible}\n >\n <div>${feedbackWidget.steps[STEP_COMPLETE]}</div>\n </div>`;\n };\n\n class RatingFeedback extends WidgetBase {\n static get properties () {\n return {\n step: {\n reflect: true,\n type: Number\n },\n forwardLabel: {\n reflect: true,\n type: String\n },\n forwardLabelAria: {\n reflect: true,\n type: String\n },\n steps: {\n reflect: false,\n type: Array\n },\n dataTestId: {\n reflect: true,\n type: String,\n attribute: 'data-test-id'\n }\n };\n }\n\n /**\n * Creates a mw-rating-feedback widget\n * @param options {Object} - Initial Object State\n * @param options.step {Number} - The step to start displaying first - default is 0.\n * @param options.steps {Array} - An array of steps to display. Each item should be\n * a DOM Node or Document Fragment. Can also be specified via <mw-rating-step step=\"0\"> children\n * @param options.forwardLabel {String} Get/Set the visible label on the button to go to the next step\n * the default is in the nls package as \"forwardLabel\" and is set to \">\"\n * @param options.forwardLabelAria {String} Get/Set the aria label on the button to go to the next step\n * the default is in the nls package as \"forwardLabelAria\" and is set to \"Next\"\n * @param options.dataTestId {String} A user specified id used for testing, reflects to 'data-test-id'\n */\n constructor () {\n super();\n this.step = 0;\n this.forwardLabel = l10n.forwardLabel;\n this.forwardLabelAria = l10n.forwardLabelAria;\n this._steps = [];\n this._currentValues = { };\n this._updateValues(this._currentValues, { emit: false });\n }\n\n /**\n * Get/Set the visible label on the button to go to the next step\n * the default is in the nls package as \"forwardLabel\" and\n * is set to \">\"\n * @member forwardLabel {String}\n * @memberof RatingFeedback\n * @instance\n */\n\n /**\n * Get/Set the aria label on the button to go to the next step\n * the default is in the nls package as \"forwardLabelAria\" and\n * is set to \"Next\"\n * @member forwardLabelAria {String}\n * @memberof RatingFeedback\n * @instance\n */\n\n /**\n * A user specified id used for testing, reflects to 'data-test-id'\n * @member dataTestId {String}\n * @memberof RatingFeedback\n * @instance\n */\n\n connectedCallback () {\n this.steps = this._processDomSteps(this._getStepsFromDom());\n super.connectedCallback();\n }\n\n _getStepsFromDom () {\n let rawSteps = Array.from(this.querySelectorAll('mw-rating-feedback-step'));\n return rawSteps;\n }\n\n _getWidgetValues () {\n let values = Array.from(this.querySelectorAll(`.${VALUE_WIDGET_CLASS_IDENTIFIER}`));\n let results = {};\n values.forEach((node) => {\n if (node.name) {\n let name = node.name;\n if (name.indexOf(NAME_SEPARATOR) >= 0) {\n name = name.split(NAME_SEPARATOR)[1];\n }\n results[name] = node.value;\n }\n });\n return results;\n }\n\n _parseFeedbackStep (feedbackStep) {\n // Convert step to numeric\n let integerStep = Math.floor(feedbackStep.step);\n if (isNaN(integerStep)) {\n log.warn(`Could not parse step value: ${feedbackStep.step}`);\n return null;\n } else if (integerStep >= MAX_STEPS) {\n log.warn(`Max step number (${MAX_STEPS - 1}) exceeded: ${feedbackStep.step}`);\n return null;\n } else if (integerStep < 0) {\n log.warn(`Negative step numbers are not allowed: ${feedbackStep.step}`);\n return null;\n }\n feedbackStep.step = integerStep;\n return feedbackStep;\n }\n _extractDomContentToDocFragment (domNode) {\n let range = document.createRange();\n range.selectNodeContents(domNode);\n let docFragment = range.extractContents();\n return docFragment;\n }\n\n _processDomSteps (rawSteps) {\n let processedSteps = [\n this._steps[0] || document.createDocumentFragment(),\n this._steps[1] || document.createDocumentFragment(),\n this._steps[2] || document.createDocumentFragment()\n ];\n rawSteps.forEach((feedbackStep) => {\n let parsedFeedback = this._parseFeedbackStep(feedbackStep);\n let stepContents = this._extractDomContentToDocFragment(parsedFeedback);\n processedSteps[parsedFeedback.step] = stepContents;\n });\n\n return processedSteps;\n }\n\n /**\n * Set or Get the current step number.\n * @type {Integer}\n */\n get step () {\n return this._step;\n }\n\n set step (value) {\n let oldVal = this._step;\n this._step = Math.min(Math.max(value, STEP_RATING), STEP_COMPLETE);\n this.requestUpdate('step', oldVal);\n }\n\n /**\n * Set or Get an array of steps. Each array items should be a\n * document fragment or node. The item is content displayed\n * for each step of the process.\n *\n * step[0] = Rating\n * step[1] = Commment\n * step[2] = Complete\n *\n * No more than 3 steps should be provided.\n * @type {Array}\n */\n get steps () {\n // Copy array, so we don't ever expose our internal array\n // push and pop would break this widget.\n // instead set the whole steps array when modifying\n return [...this._steps];\n }\n\n set steps (rawSteps) {\n let oldVal = this._steps;\n if (rawSteps.length !== MAX_STEPS) {\n log.warn(`${MAX_STEPS} steps must be provided to the widget, number provided: ${rawSteps.length}`);\n }\n for (let i = 0; i < MAX_STEPS; i += 1) {\n if (rawSteps[i]) {\n if (!(rawSteps[i] instanceof window.Node)) {\n log.warn(`Step ${i} is not a DOM node, ignoring`);\n this._steps[i] = document.createDocumentFragment();\n } else {\n this._steps[i] = rawSteps[i];\n }\n }\n }\n this.requestUpdate('steps', oldVal);\n }\n\n /**\n *\n * @returns {Object} currentValues The currently set values of the widget\n * @returns {Boolean} currentValues.complete The user completed the entire workflow (all steps)\n * @returns {Number} currentValues.rating The rating the user selected\n * @returns {String} currentValues.comment The comment the user entered\n */\n getValues () {\n return this._currentValues;\n }\n\n _updateValues (values, options = { emit: true }) {\n Object.assign(this._currentValues, values);\n this._currentValues.complete = false;\n if (this.step === STEP_COMPLETE) {\n this._currentValues.complete = true;\n }\n if (options.emit) {\n this.emit('ratingstepchange', {\n values: this._currentValues,\n step: this.step - 1\n });\n if (this._currentValues.complete) {\n this.emit('ratingcomplete', {\n values: this._currentValues\n });\n }\n }\n }\n\n _handleKeyCommitsForRating (evt) {\n if (evt.isComposing || evt.keyCode === 229) {\n // Ignore any IME input\n return;\n }\n if (evt.key === 'Enter') {\n // Force commit by leaving widget, unless no stars selected\n // g2451317\n if (evt.currentTarget.value > 0) {\n evt.target.blur();\n }\n }\n }\n\n _handleNext (evt) {\n this._moveToNextStep();\n }\n\n _moveToNextStep () {\n let values = this._getWidgetValues();\n this.step += 1;\n this._updateValues(values);\n }\n\n updated (changedProperties) {\n if (changedProperties.has('step')) {\n // Set Focus to new widget if step just changed.\n if (this.step !== changedProperties.get('step')) {\n let widget = this.querySelector(`.${VALUE_WIDGET_CLASS_IDENTIFIER}`);\n if (widget) {\n widget.focus();\n }\n }\n }\n }\n\n render () {\n let litTemplates = STEP_TEMPLATES\n .map((template) =>\n template(this)\n );\n\n // Reverse the order, we want the newer template on top\n // as we move through, since the newer template is growing\n // during animation, and the older template is shrinking\n // The older template will appear in the view shrinking\n // newer template will expand above the older template\n // taking the place of the older template as it shrinks to\n // nothing\n return html`${litTemplates.reverse()}`;\n }\n }\n return defineWidget({\n name: 'mw-rating-feedback',\n widgetClass: RatingFeedback\n });\n});\n","define([\"dojo/i18n\", \"/mathworks/devel/sandbox/csun/workspaces/docsurvey/node_modules/dojo-webpack-plugin/loaders/dojo/runner.js\"\n,\"/mathworks/devel/sandbox/csun/workspaces/docsurvey/target/debug/2P/derived/ui/mw-rating-feedback/nls/main.js?absMid=mw-rating-feedback/nls/main\"\n], function(loader, runner) {\n return runner(loader, \"mw-rating-feedback/nls/main\", __webpack_require__.dj.c(), true);\n});","define({\n root: {\n forwardLabel: '>',\n forwardLabelAria: 'Next'\n }\n});\n","/* Copyright 2020 The MathWorks, Inc. */\ndefine(['mw-widget-api/WidgetBase',\n 'mw-widget-api/defineWidget',\n 'mw-widget-api/facade/html'], function (WidgetBase, defineWidget, html) {\n 'use strict';\n\n class RatingFeedbackStep extends WidgetBase {\n static get properties () {\n return {\n step: {\n reflect: true,\n type: Number\n }\n };\n }\n\n constructor () {\n super();\n this.step = 0;\n }\n }\n return defineWidget({\n name: 'mw-rating-feedback-step',\n widgetClass: RatingFeedbackStep\n });\n});\n"],"sourceRoot":""}