{"version":3,"sources":["node_modules/@firebase/polyfill/node_modules/whatwg-fetch/fetch.js","node_modules/@firebase/polyfill/dist/index.esm.js","node_modules/tslib/tslib.es6.js","node_modules/@firebase/util/dist/index.cjs.js","node_modules/@firebase/app/dist/index.cjs.js","node_modules/firebase/app/dist/index.cjs.js","node_modules/@firebase/messaging/dist/index.esm.js","node_modules/firebase/messaging/dist/index.esm.js","firebase-messaging-sw.js"],"names":["setTimeoutFunc","setTimeout","noop","bind","fn","thisArg","apply","arguments","Promise","TypeError","_state","_handled","_value","undefined","_deferreds","doResolve","handle","self","deferred","push","_immediateFn","cb","onFulfilled","onRejected","resolve","reject","promise","ret","e","newValue","then","finale","length","_unhandledRejectionFn","i","len","Handler","done","value","reason","ex","prototype","prom","constructor","callback","all","arr","args","Array","slice","call","remaining","res","val","race","values","setImmediate","err","console","warn","globalNS","window","global","Error","createCommonjsModule","module","exports","_global","Math","Function","__g","_core","core","version","__e","_core_1","_isObject","it","_anObject","_fails","exec","_descriptors","Object","defineProperty","get","a","document","is","createElement","_domCreate","_ie8DomDefine","_toPrimitive","S","toString","valueOf","dP","f","O","P","Attributes","_objectDp","_propertyDesc","bitmap","enumerable","configurable","writable","_hide","object","key","hasOwnProperty","_has","id","px","random","_uid","concat","_redefine","SRC","TO_STRING","$toString","TPL","split","inspectSource","safe","isFunction","join","String","_aFunction","_ctx","that","b","c","PROTOTYPE","$export","type","name","source","IS_FORCED","F","IS_GLOBAL","G","IS_STATIC","IS_PROTO","IS_BIND","B","target","expProto","own","out","exp","U","W","R","_export","_cof","_iobject","propertyIsEnumerable","_defined","_toObject","ceil","floor","_toInteger","isNaN","min","_toLength","_isArray","isArray","arg","SHARED","store","_shared","_wks","Symbol","USE_SYMBOL","$exports","SPECIES","_arraySpeciesConstructor","original","C","_arraySpeciesCreate","_arrayMethods","TYPE","$create","IS_MAP","IS_FILTER","IS_SOME","IS_EVERY","IS_FIND_INDEX","NO_HOLES","create","$this","callbackfn","index","result","UNSCOPABLES","ArrayProto","_addToUnscopables","$find","KEY","forced","find","$find$1","KEY$1","forced$1","findIndex","_toIobject","max","min$1","_toAbsoluteIndex","_arrayIncludes","IS_INCLUDES","el","fromIndex","shared","_sharedKey","arrayIndexOf","IE_PROTO","_objectKeysInternal","names","_enumBugKeys","_objectKeys","keys","f$1","getOwnPropertySymbols","_objectGops","f$2","_objectPie","$assign","assign","_objectAssign","A","K","forEach","k","T","aLen","getSymbols","isEnum","j","MATCH","_isRegexp","isRegExp","_stringContext","searchString","NAME","MATCH$1","_failsIsRegexp","re","STARTS_WITH","$startsWith","startsWith","search","_stringRepeat","repeat","count","str","n","Infinity","RangeError","_meta","META","setDesc","isExtensible","FREEZE","preventExtensions","setMeta","w","fastKey","getWeak","onFreeze","meta","NEED","_meta_1","_meta_2","_meta_3","_meta_4","_meta_5","def","TAG","_setToStringTag","tag","stat","f$3","_wksExt","_library","_wksDefine","$Symbol","charAt","_enumKeys","symbols","_objectDps","defineProperties","Properties","document$1","_html","documentElement","IE_PROTO$1","Empty","PROTOTYPE$1","createDict","iframe","lt","gt","iframeDocument","style","display","appendChild","src","contentWindow","open","write","close","_objectCreate","hiddenKeys","f$4","getOwnPropertyNames","_objectGopn","gOPN","toString$1","windowNames","getWindowNames","f$5","_objectGopnExt","gOPD","getOwnPropertyDescriptor","f$6","_objectGopd","gOPD$1","dP$1","gOPN$1","$JSON","JSON","_stringify","stringify","PROTOTYPE$2","HIDDEN","TO_PRIMITIVE","SymbolRegistry","AllSymbols","OPSymbols","ObjectProto","USE_NATIVE","QObject","setter","findChild","setSymbolDesc","D","protoDesc","wrap","sym","_k","isSymbol","iterator","$defineProperty","$defineProperties","l","$propertyIsEnumerable","E","$getOwnPropertyDescriptor","$getOwnPropertyNames","$getOwnPropertySymbols","IS_OP","$set","set","es6Symbols","wellKnownSymbols","keyFor","useSetter","useSimple","replacer","$replacer","TAG$1","ARG","tryGet","_classof","callee","test","symbol","_stringAt","pos","s","charCodeAt","_iterators","IteratorPrototype","_iterCreate","Constructor","next","IE_PROTO$2","ObjectProto$1","_objectGpo","getPrototypeOf","ITERATOR","BUGGY","FF_ITERATOR","KEYS","VALUES","returnThis","_iterDefine","Base","DEFAULT","IS_SET","FORCED","getMethod","kind","proto","entries","DEF_VALUES","VALUES_BUG","$native","$default","$entries","$anyNative","methods","$at","iterated","_t","_i","point","_iterStep","es6_array_iterator","Arguments","ITERATOR$1","TO_STRING_TAG","ArrayValues","DOMIterables","CSSRuleList","CSSStyleDeclaration","CSSValueList","ClientRectList","DOMRectList","DOMStringList","DOMTokenList","DataTransferItemList","FileList","HTMLAllCollection","HTMLCollection","HTMLFormElement","HTMLSelectElement","MediaList","MimeTypeArray","NamedNodeMap","NodeList","PaintRequestList","Plugin","PluginArray","SVGLengthList","SVGNumberList","SVGPathSegList","SVGPointList","SVGStringList","SVGTransformList","SourceBufferList","StyleSheetList","TextTrackCueList","TextTrackList","TouchList","collections","explicit","Collection","extendStatics","setPrototypeOf","__proto__","d","p","__extends","__","__assign","t","__rest","indexOf","__decorate","decorators","desc","r","Reflect","decorate","__param","paramIndex","decorator","__metadata","metadataKey","metadataValue","metadata","__awaiter","_arguments","generator","fulfilled","step","rejected","__generator","body","_","label","sent","trys","ops","y","g","verb","v","op","pop","__exportStar","m","__values","o","__read","ar","error","__spread","__await","__asyncGenerator","asyncIterator","q","resume","settle","fulfill","shift","__asyncDelegator","__asyncValues","__makeTemplateObject","cooked","raw","__importStar","mod","__esModule","default","__importDefault","ERROR_CODES","AVAILABLE_IN_WINDOW","AVAILABLE_IN_SW","SHOULD_BE_INHERITED","BAD_SENDER_ID","INCORRECT_GCM_SENDER_ID","PERMISSION_DEFAULT","PERMISSION_BLOCKED","UNSUPPORTED_BROWSER","NOTIFICATIONS_BLOCKED","FAILED_DEFAULT_REGISTRATION","SW_REGISTRATION_EXPECTED","GET_SUBSCRIPTION_FAILED","INVALID_SAVED_TOKEN","SW_REG_REDUNDANT","TOKEN_SUBSCRIBE_FAILED","TOKEN_SUBSCRIBE_NO_TOKEN","TOKEN_SUBSCRIBE_NO_PUSH_SET","TOKEN_UNSUBSCRIBE_FAILED","TOKEN_UPDATE_FAILED","TOKEN_UPDATE_NO_TOKEN","USE_SW_BEFORE_GET_TOKEN","INVALID_DELETE_TOKEN","DELETE_TOKEN_NOT_FOUND","DELETE_SCOPE_NOT_FOUND","BG_HANDLER_FUNCTION_EXPECTED","NO_WINDOW_CLIENT_TO_MSG","UNABLE_TO_RESUBSCRIBE","NO_FCM_TOKEN_FOR_RESUBSCRIBE","FAILED_TO_DELETE_TOKEN","NO_SW_IN_REG","BAD_SCOPE","BAD_VAPID_KEY","BAD_SUBSCRIPTION","BAD_TOKEN","BAD_PUSH_SET","FAILED_DELETE_VAPID_KEY","INVALID_PUBLIC_VAPID_KEY","USE_PUBLIC_KEY_BEFORE_GET_TOKEN","PUBLIC_KEY_DECRYPTION_FAILED","ERROR_MAP","_a","errorFactory","ErrorFactory","DEFAULT_PUBLIC_VAPID_KEY","Uint8Array","ENDPOINT","MessageParameter","MessageType","isArrayBufferEqual","byteLength","viewA","DataView","viewB","getUint8","toBase64","arrayBuffer","uint8Version","btoa","fromCharCode","arrayBufferToBase64","base64String","replace","IidModel","getToken","senderId","subscription","publicVapidKey","p256dh","auth","fcmSubscribeBody","applicationPubKey","headers","subscribeOptions","responseData","response","err_1","message","getKey","endpoint","buffer","Headers","append","method","fetch","json","token","pushSet","updateToken","fcmToken","fcmPushSet","fcmUpdateBody","updateOptions","err_2","deleteToken","fcmUnsubscribeBody","unsubscribeOptions","err_3","base64ToArrayBuffer","padding","base64","rawData","atob","outputArray","OLD_DB_NAME","OLD_OBJECT_STORE_NAME","handleDb","db","objectStoreNames","contains","transaction","objectStore","iidModel","openCursorRequest","openCursor","onerror","event","onsuccess","cursor","tokenDetails","fcmSenderId","continue","indexedDB","deleteDatabase","cleanV1","request","DbInterface","dbPromise","createTransaction","getIndex","runRequest","idbIndex","put","delete","closeDatabase","mode","getDb","objectStoreName","promisify","oncomplete","_this","dbName","dbVersion","onupgradeneeded","onDbUpgrade","TokenDetailsModel","_super","oldVersion","createObjectStore","keyPath","createIndex","unique","cursorRequest_1","createTime","Date","now","vapidKey","update","getTokenDetailsFromToken","validateInputs","getTokenDetailsFromSWScope","swScope","saveTokenDetails","details","input","ArrayBuffer","UNCOMPRESSED_PUBLIC_KEY_SIZE","VapidDetailsModel","getVapidFromSWScope","saveVapidDetails","deleteVapidDetails","SENDER_ID_OPTION_NAME","TOKEN_EXPIRATION_MILLIS","BaseController","app","options","messagingSenderId","tokenDetailsModel","vapidDetailsModel","INTERNAL","currentPermission","swReg","pushSubscription","getNotificationPermission_","getSWRegistration_","getPublicVapidKey_","getPushSubscription","scope","manageExistingToken","getNewToken","isTokenValid","isTokenStillValid","deleteTokenFromDB","updatedToken","allDetails","e_1","registration","pushManager","getSubscription","unsubscribe","swRegistration","subscribe","userVisibleOnly","applicationServerKey","requestPermission","useServiceWorker","usePublicVapidKey","b64PublicKey","onMessage","nextOrObserver","completed","onTokenRefresh","setBackgroundMessageHandler","Notification","permission","getTokenDetailsModel","getVapidDetailsModel","getIidModel","isEndpointEqual","isAuthEqual","isP256dhEqual","FCM_MSG","SwController","bgMessageHandler","addEventListener","onPush","onSubChange","onNotificationClick","waitUntil","onPush_","onSubChange_","onNotificationClick_","msgPayload","hasVisibleClients","notificationDetails","notificationTitle","reg","actions","maxActions","data","hasVisibleClients_","sendMessageToWindowClients_","getNotificationData_","title","showNotification","link","windowClient","internalMsg","notification","action","stopImmediatePropagation","fcmOptions","click_action","getWindowClient_","clients","openWindow","focus","createNewMsg","NOTIFICATION_CLICKED","attemptToMessageClient_","notificationInformation","url","parsedURL","clientList","suitableClient","parsedClientUrl","URL","location","href","getClientList","client","postMessage","some","visibilityState","PUSH_MSG_RECEIVED","map","vapidKeyFromDatabase","matchAll","includeUncontrolled","msgType","msgData","TYPE_OF_MSG","DATA","DEFAULT_SW_PATH","DEFAULT_SW_SCOPE","WindowController","registrationToUse","publicVapidKeyToUse","manifestCheckPromise","messageObserver","tokenRefreshObserver","onMessageInternal","observer","onTokenRefreshInternal","setupSWMessageListener_","manifestCheck","permissionResult","ServiceWorkerRegistration","publicKey","parsedKey","waitForRegistrationToActivate_","serviceWorker","installing","waiting","active","state","stateChangeListener","removeEventListener","navigator","register","catch","browserErrorMessage","workerPageMessage","pushMessage","manifestTag","manifestContent","querySelector","gcm_sender_id","registerMessaging","instance","messagingName","factoryMethod","isSupported","namespaceExports","registerService","firebase","isSWControllerSupported","isWindowControllerSupported","cookieEnabled","PushSubscription","firebaseConfig","apiKey","authDomain","databaseURL","projectId","storageBucket","fb","initializeApp","fbMessage","messaging"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC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GAA1B,GAAgC;AAAEE,IAAAA,OAAO,EAAEF;AAAX,GAAvC;AACH;;ACjLD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChvDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA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","file":"firebase-messaging-sw.map","sourceRoot":"..","sourcesContent":["(function(self) {\n  'use strict';\n\n  if (self.fetch) {\n    return\n  }\n\n  var support = {\n    searchParams: 'URLSearchParams' in self,\n    iterable: 'Symbol' in self && 'iterator' in Symbol,\n    blob: 'FileReader' in self && 'Blob' in self && (function() {\n      try {\n        new Blob()\n        return true\n      } catch(e) {\n        return false\n      }\n    })(),\n    formData: 'FormData' in self,\n    arrayBuffer: 'ArrayBuffer' in self\n  }\n\n  if (support.arrayBuffer) {\n    var viewClasses = [\n      '[object Int8Array]',\n      '[object Uint8Array]',\n      '[object Uint8ClampedArray]',\n      '[object Int16Array]',\n      '[object Uint16Array]',\n      '[object Int32Array]',\n      '[object Uint32Array]',\n      '[object Float32Array]',\n      '[object Float64Array]'\n    ]\n\n    var isDataView = function(obj) {\n      return obj && DataView.prototype.isPrototypeOf(obj)\n    }\n\n    var isArrayBufferView = ArrayBuffer.isView || function(obj) {\n      return obj && viewClasses.indexOf(Object.prototype.toString.call(obj)) > -1\n    }\n  }\n\n  function normalizeName(name) {\n    if (typeof name !== 'string') {\n      name = String(name)\n    }\n    if (/[^a-z0-9\\-#$%&'*+.\\^_`|~]/i.test(name)) {\n      throw new TypeError('Invalid character in header field name')\n    }\n    return name.toLowerCase()\n  }\n\n  function normalizeValue(value) {\n    if (typeof value !== 'string') {\n      value = String(value)\n    }\n    return value\n  }\n\n  // Build a destructive iterator for the value list\n  function iteratorFor(items) {\n    var iterator = {\n      next: function() {\n        var value = items.shift()\n        return {done: value === undefined, value: value}\n      }\n    }\n\n    if (support.iterable) {\n      iterator[Symbol.iterator] = function() {\n        return iterator\n      }\n    }\n\n    return iterator\n  }\n\n  function Headers(headers) {\n    this.map = {}\n\n    if (headers instanceof Headers) {\n      headers.forEach(function(value, name) {\n        this.append(name, value)\n      }, this)\n    } else if (Array.isArray(headers)) {\n      headers.forEach(function(header) {\n        this.append(header[0], header[1])\n      }, this)\n    } else if (headers) {\n      Object.getOwnPropertyNames(headers).forEach(function(name) {\n        this.append(name, headers[name])\n      }, this)\n    }\n  }\n\n  Headers.prototype.append = function(name, value) {\n    name = normalizeName(name)\n    value = normalizeValue(value)\n    var oldValue = this.map[name]\n    this.map[name] = oldValue ? oldValue+','+value : value\n  }\n\n  Headers.prototype['delete'] = function(name) {\n    delete this.map[normalizeName(name)]\n  }\n\n  Headers.prototype.get = function(name) {\n    name = normalizeName(name)\n    return this.has(name) ? this.map[name] : null\n  }\n\n  Headers.prototype.has = function(name) {\n    return this.map.hasOwnProperty(normalizeName(name))\n  }\n\n  Headers.prototype.set = function(name, value) {\n    this.map[normalizeName(name)] = normalizeValue(value)\n  }\n\n  Headers.prototype.forEach = function(callback, thisArg) {\n    for (var name in this.map) {\n      if (this.map.hasOwnProperty(name)) {\n        callback.call(thisArg, this.map[name], name, this)\n      }\n    }\n  }\n\n  Headers.prototype.keys = function() {\n    var items = []\n    this.forEach(function(value, name) { items.push(name) })\n    return iteratorFor(items)\n  }\n\n  Headers.prototype.values = function() {\n    var items = []\n    this.forEach(function(value) { items.push(value) })\n    return iteratorFor(items)\n  }\n\n  Headers.prototype.entries = function() {\n    var items = []\n    this.forEach(function(value, name) { items.push([name, value]) })\n    return iteratorFor(items)\n  }\n\n  if (support.iterable) {\n    Headers.prototype[Symbol.iterator] = Headers.prototype.entries\n  }\n\n  function consumed(body) {\n    if (body.bodyUsed) {\n      return Promise.reject(new TypeError('Already read'))\n    }\n    body.bodyUsed = true\n  }\n\n  function fileReaderReady(reader) {\n    return new Promise(function(resolve, reject) {\n      reader.onload = function() {\n        resolve(reader.result)\n      }\n      reader.onerror = function() {\n        reject(reader.error)\n      }\n    })\n  }\n\n  function readBlobAsArrayBuffer(blob) {\n    var reader = new FileReader()\n    var promise = fileReaderReady(reader)\n    reader.readAsArrayBuffer(blob)\n    return promise\n  }\n\n  function readBlobAsText(blob) {\n    var reader = new FileReader()\n    var promise = fileReaderReady(reader)\n    reader.readAsText(blob)\n    return promise\n  }\n\n  function readArrayBufferAsText(buf) {\n    var view = new Uint8Array(buf)\n    var chars = new Array(view.length)\n\n    for (var i = 0; i < view.length; i++) {\n      chars[i] = String.fromCharCode(view[i])\n    }\n    return chars.join('')\n  }\n\n  function bufferClone(buf) {\n    if (buf.slice) {\n      return buf.slice(0)\n    } else {\n      var view = new Uint8Array(buf.byteLength)\n      view.set(new Uint8Array(buf))\n      return view.buffer\n    }\n  }\n\n  function Body() {\n    this.bodyUsed = false\n\n    this._initBody = function(body) {\n      this._bodyInit = body\n      if (!body) {\n        this._bodyText = ''\n      } else if (typeof body === 'string') {\n        this._bodyText = body\n      } else if (support.blob && Blob.prototype.isPrototypeOf(body)) {\n        this._bodyBlob = body\n      } else if (support.formData && FormData.prototype.isPrototypeOf(body)) {\n        this._bodyFormData = body\n      } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n        this._bodyText = body.toString()\n      } else if (support.arrayBuffer && support.blob && isDataView(body)) {\n        this._bodyArrayBuffer = bufferClone(body.buffer)\n        // IE 10-11 can't handle a DataView body.\n        this._bodyInit = new Blob([this._bodyArrayBuffer])\n      } else if (support.arrayBuffer && (ArrayBuffer.prototype.isPrototypeOf(body) || isArrayBufferView(body))) {\n        this._bodyArrayBuffer = bufferClone(body)\n      } else {\n        throw new Error('unsupported BodyInit type')\n      }\n\n      if (!this.headers.get('content-type')) {\n        if (typeof body === 'string') {\n          this.headers.set('content-type', 'text/plain;charset=UTF-8')\n        } else if (this._bodyBlob && this._bodyBlob.type) {\n          this.headers.set('content-type', this._bodyBlob.type)\n        } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n          this.headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8')\n        }\n      }\n    }\n\n    if (support.blob) {\n      this.blob = function() {\n        var rejected = consumed(this)\n        if (rejected) {\n          return rejected\n        }\n\n        if (this._bodyBlob) {\n          return Promise.resolve(this._bodyBlob)\n        } else if (this._bodyArrayBuffer) {\n          return Promise.resolve(new Blob([this._bodyArrayBuffer]))\n        } else if (this._bodyFormData) {\n          throw new Error('could not read FormData body as blob')\n        } else {\n          return Promise.resolve(new Blob([this._bodyText]))\n        }\n      }\n\n      this.arrayBuffer = function() {\n        if (this._bodyArrayBuffer) {\n          return consumed(this) || Promise.resolve(this._bodyArrayBuffer)\n        } else {\n          return this.blob().then(readBlobAsArrayBuffer)\n        }\n      }\n    }\n\n    this.text = function() {\n      var rejected = consumed(this)\n      if (rejected) {\n        return rejected\n      }\n\n      if (this._bodyBlob) {\n        return readBlobAsText(this._bodyBlob)\n      } else if (this._bodyArrayBuffer) {\n        return Promise.resolve(readArrayBufferAsText(this._bodyArrayBuffer))\n      } else if (this._bodyFormData) {\n        throw new Error('could not read FormData body as text')\n      } else {\n        return Promise.resolve(this._bodyText)\n      }\n    }\n\n    if (support.formData) {\n      this.formData = function() {\n        return this.text().then(decode)\n      }\n    }\n\n    this.json = function() {\n      return this.text().then(JSON.parse)\n    }\n\n    return this\n  }\n\n  // HTTP methods whose capitalization should be normalized\n  var methods = ['DELETE', 'GET', 'HEAD', 'OPTIONS', 'POST', 'PUT']\n\n  function normalizeMethod(method) {\n    var upcased = method.toUpperCase()\n    return (methods.indexOf(upcased) > -1) ? upcased : method\n  }\n\n  function Request(input, options) {\n    options = options || {}\n    var body = options.body\n\n    if (input instanceof Request) {\n      if (input.bodyUsed) {\n        throw new TypeError('Already read')\n      }\n      this.url = input.url\n      this.credentials = input.credentials\n      if (!options.headers) {\n        this.headers = new Headers(input.headers)\n      }\n      this.method = input.method\n      this.mode = input.mode\n      if (!body && input._bodyInit != null) {\n        body = input._bodyInit\n        input.bodyUsed = true\n      }\n    } else {\n      this.url = String(input)\n    }\n\n    this.credentials = options.credentials || this.credentials || 'omit'\n    if (options.headers || !this.headers) {\n      this.headers = new Headers(options.headers)\n    }\n    this.method = normalizeMethod(options.method || this.method || 'GET')\n    this.mode = options.mode || this.mode || null\n    this.referrer = null\n\n    if ((this.method === 'GET' || this.method === 'HEAD') && body) {\n      throw new TypeError('Body not allowed for GET or HEAD requests')\n    }\n    this._initBody(body)\n  }\n\n  Request.prototype.clone = function() {\n    return new Request(this, { body: this._bodyInit })\n  }\n\n  function decode(body) {\n    var form = new FormData()\n    body.trim().split('&').forEach(function(bytes) {\n      if (bytes) {\n        var split = bytes.split('=')\n        var name = split.shift().replace(/\\+/g, ' ')\n        var value = split.join('=').replace(/\\+/g, ' ')\n        form.append(decodeURIComponent(name), decodeURIComponent(value))\n      }\n    })\n    return form\n  }\n\n  function parseHeaders(rawHeaders) {\n    var headers = new Headers()\n    // Replace instances of \\r\\n and \\n followed by at least one space or horizontal tab with a space\n    // https://tools.ietf.org/html/rfc7230#section-3.2\n    var preProcessedHeaders = rawHeaders.replace(/\\r?\\n[\\t ]+/g, ' ')\n    preProcessedHeaders.split(/\\r?\\n/).forEach(function(line) {\n      var parts = line.split(':')\n      var key = parts.shift().trim()\n      if (key) {\n        var value = parts.join(':').trim()\n        headers.append(key, value)\n      }\n    })\n    return headers\n  }\n\n  Body.call(Request.prototype)\n\n  function Response(bodyInit, options) {\n    if (!options) {\n      options = {}\n    }\n\n    this.type = 'default'\n    this.status = options.status === undefined ? 200 : options.status\n    this.ok = this.status >= 200 && this.status < 300\n    this.statusText = 'statusText' in options ? options.statusText : 'OK'\n    this.headers = new Headers(options.headers)\n    this.url = options.url || ''\n    this._initBody(bodyInit)\n  }\n\n  Body.call(Response.prototype)\n\n  Response.prototype.clone = function() {\n    return new Response(this._bodyInit, {\n      status: this.status,\n      statusText: this.statusText,\n      headers: new Headers(this.headers),\n      url: this.url\n    })\n  }\n\n  Response.error = function() {\n    var response = new Response(null, {status: 0, statusText: ''})\n    response.type = 'error'\n    return response\n  }\n\n  var redirectStatuses = [301, 302, 303, 307, 308]\n\n  Response.redirect = function(url, status) {\n    if (redirectStatuses.indexOf(status) === -1) {\n      throw new RangeError('Invalid status code')\n    }\n\n    return new Response(null, {status: status, headers: {location: url}})\n  }\n\n  self.Headers = Headers\n  self.Request = Request\n  self.Response = Response\n\n  self.fetch = function(input, init) {\n    return new Promise(function(resolve, reject) {\n      var request = new Request(input, init)\n      var xhr = new XMLHttpRequest()\n\n      xhr.onload = function() {\n        var options = {\n          status: xhr.status,\n          statusText: xhr.statusText,\n          headers: parseHeaders(xhr.getAllResponseHeaders() || '')\n        }\n        options.url = 'responseURL' in xhr ? xhr.responseURL : options.headers.get('X-Request-URL')\n        var body = 'response' in xhr ? xhr.response : xhr.responseText\n        resolve(new Response(body, options))\n      }\n\n      xhr.onerror = function() {\n        reject(new TypeError('Network request failed'))\n      }\n\n      xhr.ontimeout = function() {\n        reject(new TypeError('Network request failed'))\n      }\n\n      xhr.open(request.method, request.url, true)\n\n      if (request.credentials === 'include') {\n        xhr.withCredentials = true\n      } else if (request.credentials === 'omit') {\n        xhr.withCredentials = false\n      }\n\n      if ('responseType' in xhr && support.blob) {\n        xhr.responseType = 'blob'\n      }\n\n      request.headers.forEach(function(value, name) {\n        xhr.setRequestHeader(name, value)\n      })\n\n      xhr.send(typeof request._bodyInit === 'undefined' ? null : request._bodyInit)\n    })\n  }\n  self.fetch.polyfill = true\n})(typeof self !== 'undefined' ? self : this);\n","import 'whatwg-fetch';\n\n// Store setTimeout reference so promise-polyfill will be unaffected by\n// other code modifying setTimeout (like sinon.useFakeTimers())\nvar setTimeoutFunc = setTimeout;\n\nfunction noop() {}\n\n// Polyfill for Function.prototype.bind\nfunction bind(fn, thisArg) {\n  return function() {\n    fn.apply(thisArg, arguments);\n  };\n}\n\nfunction Promise(fn) {\n  if (!(this instanceof Promise))\n    throw new TypeError('Promises must be constructed via new');\n  if (typeof fn !== 'function') throw new TypeError('not a function');\n  this._state = 0;\n  this._handled = false;\n  this._value = undefined;\n  this._deferreds = [];\n\n  doResolve(fn, this);\n}\n\nfunction handle(self, deferred) {\n  while (self._state === 3) {\n    self = self._value;\n  }\n  if (self._state === 0) {\n    self._deferreds.push(deferred);\n    return;\n  }\n  self._handled = true;\n  Promise._immediateFn(function() {\n    var cb = self._state === 1 ? deferred.onFulfilled : deferred.onRejected;\n    if (cb === null) {\n      (self._state === 1 ? resolve : reject)(deferred.promise, self._value);\n      return;\n    }\n    var ret;\n    try {\n      ret = cb(self._value);\n    } catch (e) {\n      reject(deferred.promise, e);\n      return;\n    }\n    resolve(deferred.promise, ret);\n  });\n}\n\nfunction resolve(self, newValue) {\n  try {\n    // Promise Resolution Procedure: https://github.com/promises-aplus/promises-spec#the-promise-resolution-procedure\n    if (newValue === self)\n      throw new TypeError('A promise cannot be resolved with itself.');\n    if (\n      newValue &&\n      (typeof newValue === 'object' || typeof newValue === 'function')\n    ) {\n      var then = newValue.then;\n      if (newValue instanceof Promise) {\n        self._state = 3;\n        self._value = newValue;\n        finale(self);\n        return;\n      } else if (typeof then === 'function') {\n        doResolve(bind(then, newValue), self);\n        return;\n      }\n    }\n    self._state = 1;\n    self._value = newValue;\n    finale(self);\n  } catch (e) {\n    reject(self, e);\n  }\n}\n\nfunction reject(self, newValue) {\n  self._state = 2;\n  self._value = newValue;\n  finale(self);\n}\n\nfunction finale(self) {\n  if (self._state === 2 && self._deferreds.length === 0) {\n    Promise._immediateFn(function() {\n      if (!self._handled) {\n        Promise._unhandledRejectionFn(self._value);\n      }\n    });\n  }\n\n  for (var i = 0, len = self._deferreds.length; i < len; i++) {\n    handle(self, self._deferreds[i]);\n  }\n  self._deferreds = null;\n}\n\nfunction Handler(onFulfilled, onRejected, promise) {\n  this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;\n  this.onRejected = typeof onRejected === 'function' ? onRejected : null;\n  this.promise = promise;\n}\n\n/**\n * Take a potentially misbehaving resolver function and make sure\n * onFulfilled and onRejected are only called once.\n *\n * Makes no guarantees about asynchrony.\n */\nfunction doResolve(fn, self) {\n  var done = false;\n  try {\n    fn(\n      function(value) {\n        if (done) return;\n        done = true;\n        resolve(self, value);\n      },\n      function(reason) {\n        if (done) return;\n        done = true;\n        reject(self, reason);\n      }\n    );\n  } catch (ex) {\n    if (done) return;\n    done = true;\n    reject(self, ex);\n  }\n}\n\nPromise.prototype['catch'] = function(onRejected) {\n  return this.then(null, onRejected);\n};\n\nPromise.prototype.then = function(onFulfilled, onRejected) {\n  var prom = new this.constructor(noop);\n\n  handle(this, new Handler(onFulfilled, onRejected, prom));\n  return prom;\n};\n\nPromise.prototype['finally'] = function(callback) {\n  var constructor = this.constructor;\n  return this.then(\n    function(value) {\n      return constructor.resolve(callback()).then(function() {\n        return value;\n      });\n    },\n    function(reason) {\n      return constructor.resolve(callback()).then(function() {\n        return constructor.reject(reason);\n      });\n    }\n  );\n};\n\nPromise.all = function(arr) {\n  return new Promise(function(resolve, reject) {\n    if (!arr || typeof arr.length === 'undefined')\n      throw new TypeError('Promise.all accepts an array');\n    var args = Array.prototype.slice.call(arr);\n    if (args.length === 0) return resolve([]);\n    var remaining = args.length;\n\n    function res(i, val) {\n      try {\n        if (val && (typeof val === 'object' || typeof val === 'function')) {\n          var then = val.then;\n          if (typeof then === 'function') {\n            then.call(\n              val,\n              function(val) {\n                res(i, val);\n              },\n              reject\n            );\n            return;\n          }\n        }\n        args[i] = val;\n        if (--remaining === 0) {\n          resolve(args);\n        }\n      } catch (ex) {\n        reject(ex);\n      }\n    }\n\n    for (var i = 0; i < args.length; i++) {\n      res(i, args[i]);\n    }\n  });\n};\n\nPromise.resolve = function(value) {\n  if (value && typeof value === 'object' && value.constructor === Promise) {\n    return value;\n  }\n\n  return new Promise(function(resolve) {\n    resolve(value);\n  });\n};\n\nPromise.reject = function(value) {\n  return new Promise(function(resolve, reject) {\n    reject(value);\n  });\n};\n\nPromise.race = function(values) {\n  return new Promise(function(resolve, reject) {\n    for (var i = 0, len = values.length; i < len; i++) {\n      values[i].then(resolve, reject);\n    }\n  });\n};\n\n// Use polyfill for setImmediate for performance gains\nPromise._immediateFn =\n  (typeof setImmediate === 'function' &&\n    function(fn) {\n      setImmediate(fn);\n    }) ||\n  function(fn) {\n    setTimeoutFunc(fn, 0);\n  };\n\nPromise._unhandledRejectionFn = function _unhandledRejectionFn(err) {\n  if (typeof console !== 'undefined' && console) {\n    console.warn('Possible Unhandled Promise Rejection:', err); // eslint-disable-line no-console\n  }\n};\n\nvar globalNS = (function() {\n  // the only reliable means to get the global object is\n  // `Function('return this')()`\n  // However, this causes CSP violations in Chrome apps.\n  if (typeof self !== 'undefined') {\n    return self;\n  }\n  if (typeof window !== 'undefined') {\n    return window;\n  }\n  if (typeof global !== 'undefined') {\n    return global;\n  }\n  throw new Error('unable to locate global object');\n})();\n\nif (!globalNS.Promise) {\n  globalNS.Promise = Promise;\n}\n\nfunction createCommonjsModule(fn, module) {\n\treturn module = { exports: {} }, fn(module, module.exports), module.exports;\n}\n\nvar _global = createCommonjsModule(function (module) {\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n  ? window : typeof self != 'undefined' && self.Math == Math ? self\n  // eslint-disable-next-line no-new-func\n  : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n});\n\nvar _core = createCommonjsModule(function (module) {\nvar core = module.exports = { version: '2.5.5' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n});\nvar _core_1 = _core.version;\n\nvar _isObject = function (it) {\n  return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n\nvar _anObject = function (it) {\n  if (!_isObject(it)) throw TypeError(it + ' is not an object!');\n  return it;\n};\n\nvar _fails = function (exec) {\n  try {\n    return !!exec();\n  } catch (e) {\n    return true;\n  }\n};\n\n// Thank's IE8 for his funny defineProperty\nvar _descriptors = !_fails(function () {\n  return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n\nvar document = _global.document;\n// typeof document.createElement is 'object' in old IE\nvar is = _isObject(document) && _isObject(document.createElement);\nvar _domCreate = function (it) {\n  return is ? document.createElement(it) : {};\n};\n\nvar _ie8DomDefine = !_descriptors && !_fails(function () {\n  return Object.defineProperty(_domCreate('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n\n// 7.1.1 ToPrimitive(input [, PreferredType])\n\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nvar _toPrimitive = function (it, S) {\n  if (!_isObject(it)) return it;\n  var fn, val;\n  if (S && typeof (fn = it.toString) == 'function' && !_isObject(val = fn.call(it))) return val;\n  if (typeof (fn = it.valueOf) == 'function' && !_isObject(val = fn.call(it))) return val;\n  if (!S && typeof (fn = it.toString) == 'function' && !_isObject(val = fn.call(it))) return val;\n  throw TypeError(\"Can't convert object to primitive value\");\n};\n\nvar dP = Object.defineProperty;\n\nvar f = _descriptors ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n  _anObject(O);\n  P = _toPrimitive(P, true);\n  _anObject(Attributes);\n  if (_ie8DomDefine) try {\n    return dP(O, P, Attributes);\n  } catch (e) { /* empty */ }\n  if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n  if ('value' in Attributes) O[P] = Attributes.value;\n  return O;\n};\n\nvar _objectDp = {\n\tf: f\n};\n\nvar _propertyDesc = function (bitmap, value) {\n  return {\n    enumerable: !(bitmap & 1),\n    configurable: !(bitmap & 2),\n    writable: !(bitmap & 4),\n    value: value\n  };\n};\n\nvar _hide = _descriptors ? function (object, key, value) {\n  return _objectDp.f(object, key, _propertyDesc(1, value));\n} : function (object, key, value) {\n  object[key] = value;\n  return object;\n};\n\nvar hasOwnProperty = {}.hasOwnProperty;\nvar _has = function (it, key) {\n  return hasOwnProperty.call(it, key);\n};\n\nvar id = 0;\nvar px = Math.random();\nvar _uid = function (key) {\n  return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n\nvar _redefine = createCommonjsModule(function (module) {\nvar SRC = _uid('src');\nvar TO_STRING = 'toString';\nvar $toString = Function[TO_STRING];\nvar TPL = ('' + $toString).split(TO_STRING);\n\n_core.inspectSource = function (it) {\n  return $toString.call(it);\n};\n\n(module.exports = function (O, key, val, safe) {\n  var isFunction = typeof val == 'function';\n  if (isFunction) _has(val, 'name') || _hide(val, 'name', key);\n  if (O[key] === val) return;\n  if (isFunction) _has(val, SRC) || _hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n  if (O === _global) {\n    O[key] = val;\n  } else if (!safe) {\n    delete O[key];\n    _hide(O, key, val);\n  } else if (O[key]) {\n    O[key] = val;\n  } else {\n    _hide(O, key, val);\n  }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString() {\n  return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n});\n\nvar _aFunction = function (it) {\n  if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n  return it;\n};\n\n// optional / simple context binding\n\nvar _ctx = function (fn, that, length) {\n  _aFunction(fn);\n  if (that === undefined) return fn;\n  switch (length) {\n    case 1: return function (a) {\n      return fn.call(that, a);\n    };\n    case 2: return function (a, b) {\n      return fn.call(that, a, b);\n    };\n    case 3: return function (a, b, c) {\n      return fn.call(that, a, b, c);\n    };\n  }\n  return function (/* ...args */) {\n    return fn.apply(that, arguments);\n  };\n};\n\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n  var IS_FORCED = type & $export.F;\n  var IS_GLOBAL = type & $export.G;\n  var IS_STATIC = type & $export.S;\n  var IS_PROTO = type & $export.P;\n  var IS_BIND = type & $export.B;\n  var target = IS_GLOBAL ? _global : IS_STATIC ? _global[name] || (_global[name] = {}) : (_global[name] || {})[PROTOTYPE];\n  var exports = IS_GLOBAL ? _core : _core[name] || (_core[name] = {});\n  var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\n  var key, own, out, exp;\n  if (IS_GLOBAL) source = name;\n  for (key in source) {\n    // contains in native\n    own = !IS_FORCED && target && target[key] !== undefined;\n    // export native or passed\n    out = (own ? target : source)[key];\n    // bind timers to global for call from export context\n    exp = IS_BIND && own ? _ctx(out, _global) : IS_PROTO && typeof out == 'function' ? _ctx(Function.call, out) : out;\n    // extend global\n    if (target) _redefine(target, key, out, type & $export.U);\n    // export\n    if (exports[key] != out) _hide(exports, key, exp);\n    if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n  }\n};\n_global.core = _core;\n// type bitmap\n$export.F = 1;   // forced\n$export.G = 2;   // global\n$export.S = 4;   // static\n$export.P = 8;   // proto\n$export.B = 16;  // bind\n$export.W = 32;  // wrap\n$export.U = 64;  // safe\n$export.R = 128; // real proto method for `library`\nvar _export = $export;\n\nvar toString = {}.toString;\n\nvar _cof = function (it) {\n  return toString.call(it).slice(8, -1);\n};\n\n// fallback for non-array-like ES3 and non-enumerable old V8 strings\n\n// eslint-disable-next-line no-prototype-builtins\nvar _iobject = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n  return _cof(it) == 'String' ? it.split('') : Object(it);\n};\n\n// 7.2.1 RequireObjectCoercible(argument)\nvar _defined = function (it) {\n  if (it == undefined) throw TypeError(\"Can't call method on  \" + it);\n  return it;\n};\n\n// 7.1.13 ToObject(argument)\n\nvar _toObject = function (it) {\n  return Object(_defined(it));\n};\n\n// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nvar _toInteger = function (it) {\n  return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n\n// 7.1.15 ToLength\n\nvar min = Math.min;\nvar _toLength = function (it) {\n  return it > 0 ? min(_toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n\n// 7.2.2 IsArray(argument)\n\nvar _isArray = Array.isArray || function isArray(arg) {\n  return _cof(arg) == 'Array';\n};\n\nvar SHARED = '__core-js_shared__';\nvar store = _global[SHARED] || (_global[SHARED] = {});\nvar _shared = function (key) {\n  return store[key] || (store[key] = {});\n};\n\nvar _wks = createCommonjsModule(function (module) {\nvar store = _shared('wks');\n\nvar Symbol = _global.Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n  return store[name] || (store[name] =\n    USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : _uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n});\n\nvar SPECIES = _wks('species');\n\nvar _arraySpeciesConstructor = function (original) {\n  var C;\n  if (_isArray(original)) {\n    C = original.constructor;\n    // cross-realm fallback\n    if (typeof C == 'function' && (C === Array || _isArray(C.prototype))) C = undefined;\n    if (_isObject(C)) {\n      C = C[SPECIES];\n      if (C === null) C = undefined;\n    }\n  } return C === undefined ? Array : C;\n};\n\n// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\n\n\nvar _arraySpeciesCreate = function (original, length) {\n  return new (_arraySpeciesConstructor(original))(length);\n};\n\n// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\n\n\n\n\n\nvar _arrayMethods = function (TYPE, $create) {\n  var IS_MAP = TYPE == 1;\n  var IS_FILTER = TYPE == 2;\n  var IS_SOME = TYPE == 3;\n  var IS_EVERY = TYPE == 4;\n  var IS_FIND_INDEX = TYPE == 6;\n  var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n  var create = $create || _arraySpeciesCreate;\n  return function ($this, callbackfn, that) {\n    var O = _toObject($this);\n    var self = _iobject(O);\n    var f = _ctx(callbackfn, that, 3);\n    var length = _toLength(self.length);\n    var index = 0;\n    var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n    var val, res;\n    for (;length > index; index++) if (NO_HOLES || index in self) {\n      val = self[index];\n      res = f(val, index, O);\n      if (TYPE) {\n        if (IS_MAP) result[index] = res;   // map\n        else if (res) switch (TYPE) {\n          case 3: return true;             // some\n          case 5: return val;              // find\n          case 6: return index;            // findIndex\n          case 2: result.push(val);        // filter\n        } else if (IS_EVERY) return false; // every\n      }\n    }\n    return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n  };\n};\n\n// 22.1.3.31 Array.prototype[@@unscopables]\nvar UNSCOPABLES = _wks('unscopables');\nvar ArrayProto = Array.prototype;\nif (ArrayProto[UNSCOPABLES] == undefined) _hide(ArrayProto, UNSCOPABLES, {});\nvar _addToUnscopables = function (key) {\n  ArrayProto[UNSCOPABLES][key] = true;\n};\n\n// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)\n\nvar $find = _arrayMethods(5);\nvar KEY = 'find';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n_export(_export.P + _export.F * forced, 'Array', {\n  find: function find(callbackfn /* , that = undefined */) {\n    return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\n_addToUnscopables(KEY);\n\nvar find = _core.Array.find;\n\n// 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined)\n\nvar $find$1 = _arrayMethods(6);\nvar KEY$1 = 'findIndex';\nvar forced$1 = true;\n// Shouldn't skip holes\nif (KEY$1 in []) Array(1)[KEY$1](function () { forced$1 = false; });\n_export(_export.P + _export.F * forced$1, 'Array', {\n  findIndex: function findIndex(callbackfn /* , that = undefined */) {\n    return $find$1(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\n_addToUnscopables(KEY$1);\n\nvar findIndex = _core.Array.findIndex;\n\n// to indexed object, toObject with fallback for non-array-like ES3 strings\n\n\nvar _toIobject = function (it) {\n  return _iobject(_defined(it));\n};\n\nvar max = Math.max;\nvar min$1 = Math.min;\nvar _toAbsoluteIndex = function (index, length) {\n  index = _toInteger(index);\n  return index < 0 ? max(index + length, 0) : min$1(index, length);\n};\n\n// false -> Array#indexOf\n// true  -> Array#includes\n\n\n\nvar _arrayIncludes = function (IS_INCLUDES) {\n  return function ($this, el, fromIndex) {\n    var O = _toIobject($this);\n    var length = _toLength(O.length);\n    var index = _toAbsoluteIndex(fromIndex, length);\n    var value;\n    // Array#includes uses SameValueZero equality algorithm\n    // eslint-disable-next-line no-self-compare\n    if (IS_INCLUDES && el != el) while (length > index) {\n      value = O[index++];\n      // eslint-disable-next-line no-self-compare\n      if (value != value) return true;\n    // Array#indexOf ignores holes, Array#includes - not\n    } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n      if (O[index] === el) return IS_INCLUDES || index || 0;\n    } return !IS_INCLUDES && -1;\n  };\n};\n\nvar shared = _shared('keys');\n\nvar _sharedKey = function (key) {\n  return shared[key] || (shared[key] = _uid(key));\n};\n\nvar arrayIndexOf = _arrayIncludes(false);\nvar IE_PROTO = _sharedKey('IE_PROTO');\n\nvar _objectKeysInternal = function (object, names) {\n  var O = _toIobject(object);\n  var i = 0;\n  var result = [];\n  var key;\n  for (key in O) if (key != IE_PROTO) _has(O, key) && result.push(key);\n  // Don't enum bug & hidden keys\n  while (names.length > i) if (_has(O, key = names[i++])) {\n    ~arrayIndexOf(result, key) || result.push(key);\n  }\n  return result;\n};\n\n// IE 8- don't enum bug keys\nvar _enumBugKeys = (\n  'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n\n// 19.1.2.14 / 15.2.3.14 Object.keys(O)\n\n\n\nvar _objectKeys = Object.keys || function keys(O) {\n  return _objectKeysInternal(O, _enumBugKeys);\n};\n\nvar f$1 = Object.getOwnPropertySymbols;\n\nvar _objectGops = {\n\tf: f$1\n};\n\nvar f$2 = {}.propertyIsEnumerable;\n\nvar _objectPie = {\n\tf: f$2\n};\n\n// 19.1.2.1 Object.assign(target, source, ...)\n\n\n\n\n\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nvar _objectAssign = !$assign || _fails(function () {\n  var A = {};\n  var B = {};\n  // eslint-disable-next-line no-undef\n  var S = Symbol();\n  var K = 'abcdefghijklmnopqrst';\n  A[S] = 7;\n  K.split('').forEach(function (k) { B[k] = k; });\n  return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n  var T = _toObject(target);\n  var aLen = arguments.length;\n  var index = 1;\n  var getSymbols = _objectGops.f;\n  var isEnum = _objectPie.f;\n  while (aLen > index) {\n    var S = _iobject(arguments[index++]);\n    var keys = getSymbols ? _objectKeys(S).concat(getSymbols(S)) : _objectKeys(S);\n    var length = keys.length;\n    var j = 0;\n    var key;\n    while (length > j) if (isEnum.call(S, key = keys[j++])) T[key] = S[key];\n  } return T;\n} : $assign;\n\n// 19.1.3.1 Object.assign(target, source)\n\n\n_export(_export.S + _export.F, 'Object', { assign: _objectAssign });\n\nvar assign = _core.Object.assign;\n\n// 7.2.8 IsRegExp(argument)\n\n\nvar MATCH = _wks('match');\nvar _isRegexp = function (it) {\n  var isRegExp;\n  return _isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : _cof(it) == 'RegExp');\n};\n\n// helper for String#{startsWith, endsWith, includes}\n\n\n\nvar _stringContext = function (that, searchString, NAME) {\n  if (_isRegexp(searchString)) throw TypeError('String#' + NAME + \" doesn't accept regex!\");\n  return String(_defined(that));\n};\n\nvar MATCH$1 = _wks('match');\nvar _failsIsRegexp = function (KEY) {\n  var re = /./;\n  try {\n    '/./'[KEY](re);\n  } catch (e) {\n    try {\n      re[MATCH$1] = false;\n      return !'/./'[KEY](re);\n    } catch (f) { /* empty */ }\n  } return true;\n};\n\nvar STARTS_WITH = 'startsWith';\nvar $startsWith = ''[STARTS_WITH];\n\n_export(_export.P + _export.F * _failsIsRegexp(STARTS_WITH), 'String', {\n  startsWith: function startsWith(searchString /* , position = 0 */) {\n    var that = _stringContext(this, searchString, STARTS_WITH);\n    var index = _toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n    var search = String(searchString);\n    return $startsWith\n      ? $startsWith.call(that, search, index)\n      : that.slice(index, index + search.length) === search;\n  }\n});\n\nvar startsWith = _core.String.startsWith;\n\nvar _stringRepeat = function repeat(count) {\n  var str = String(_defined(this));\n  var res = '';\n  var n = _toInteger(count);\n  if (n < 0 || n == Infinity) throw RangeError(\"Count can't be negative\");\n  for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) res += str;\n  return res;\n};\n\n_export(_export.P, 'String', {\n  // 21.1.3.13 String.prototype.repeat(count)\n  repeat: _stringRepeat\n});\n\nvar repeat = _core.String.repeat;\n\nvar _meta = createCommonjsModule(function (module) {\nvar META = _uid('meta');\n\n\nvar setDesc = _objectDp.f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n  return true;\n};\nvar FREEZE = !_fails(function () {\n  return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n  setDesc(it, META, { value: {\n    i: 'O' + ++id, // object ID\n    w: {}          // weak collections IDs\n  } });\n};\nvar fastKey = function (it, create) {\n  // return primitive with prefix\n  if (!_isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n  if (!_has(it, META)) {\n    // can't set metadata to uncaught frozen object\n    if (!isExtensible(it)) return 'F';\n    // not necessary to add metadata\n    if (!create) return 'E';\n    // add missing metadata\n    setMeta(it);\n  // return object ID\n  } return it[META].i;\n};\nvar getWeak = function (it, create) {\n  if (!_has(it, META)) {\n    // can't set metadata to uncaught frozen object\n    if (!isExtensible(it)) return true;\n    // not necessary to add metadata\n    if (!create) return false;\n    // add missing metadata\n    setMeta(it);\n  // return hash weak collections IDs\n  } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n  if (FREEZE && meta.NEED && isExtensible(it) && !_has(it, META)) setMeta(it);\n  return it;\n};\nvar meta = module.exports = {\n  KEY: META,\n  NEED: false,\n  fastKey: fastKey,\n  getWeak: getWeak,\n  onFreeze: onFreeze\n};\n});\nvar _meta_1 = _meta.KEY;\nvar _meta_2 = _meta.NEED;\nvar _meta_3 = _meta.fastKey;\nvar _meta_4 = _meta.getWeak;\nvar _meta_5 = _meta.onFreeze;\n\nvar def = _objectDp.f;\n\nvar TAG = _wks('toStringTag');\n\nvar _setToStringTag = function (it, tag, stat) {\n  if (it && !_has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n\nvar f$3 = _wks;\n\nvar _wksExt = {\n\tf: f$3\n};\n\nvar _library = false;\n\nvar defineProperty = _objectDp.f;\nvar _wksDefine = function (name) {\n  var $Symbol = _core.Symbol || (_core.Symbol = _library ? {} : _global.Symbol || {});\n  if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: _wksExt.f(name) });\n};\n\n// all enumerable object keys, includes symbols\n\n\n\nvar _enumKeys = function (it) {\n  var result = _objectKeys(it);\n  var getSymbols = _objectGops.f;\n  if (getSymbols) {\n    var symbols = getSymbols(it);\n    var isEnum = _objectPie.f;\n    var i = 0;\n    var key;\n    while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n  } return result;\n};\n\nvar _objectDps = _descriptors ? Object.defineProperties : function defineProperties(O, Properties) {\n  _anObject(O);\n  var keys = _objectKeys(Properties);\n  var length = keys.length;\n  var i = 0;\n  var P;\n  while (length > i) _objectDp.f(O, P = keys[i++], Properties[P]);\n  return O;\n};\n\nvar document$1 = _global.document;\nvar _html = document$1 && document$1.documentElement;\n\n// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\n\n\n\nvar IE_PROTO$1 = _sharedKey('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE$1 = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n  // Thrash, waste and sodomy: IE GC bug\n  var iframe = _domCreate('iframe');\n  var i = _enumBugKeys.length;\n  var lt = '<';\n  var gt = '>';\n  var iframeDocument;\n  iframe.style.display = 'none';\n  _html.appendChild(iframe);\n  iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n  // createDict = iframe.contentWindow.Object;\n  // html.removeChild(iframe);\n  iframeDocument = iframe.contentWindow.document;\n  iframeDocument.open();\n  iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n  iframeDocument.close();\n  createDict = iframeDocument.F;\n  while (i--) delete createDict[PROTOTYPE$1][_enumBugKeys[i]];\n  return createDict();\n};\n\nvar _objectCreate = Object.create || function create(O, Properties) {\n  var result;\n  if (O !== null) {\n    Empty[PROTOTYPE$1] = _anObject(O);\n    result = new Empty();\n    Empty[PROTOTYPE$1] = null;\n    // add \"__proto__\" for Object.getPrototypeOf polyfill\n    result[IE_PROTO$1] = O;\n  } else result = createDict();\n  return Properties === undefined ? result : _objectDps(result, Properties);\n};\n\n// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\n\nvar hiddenKeys = _enumBugKeys.concat('length', 'prototype');\n\nvar f$4 = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n  return _objectKeysInternal(O, hiddenKeys);\n};\n\nvar _objectGopn = {\n\tf: f$4\n};\n\n// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\n\nvar gOPN = _objectGopn.f;\nvar toString$1 = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n  ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n  try {\n    return gOPN(it);\n  } catch (e) {\n    return windowNames.slice();\n  }\n};\n\nvar f$5 = function getOwnPropertyNames(it) {\n  return windowNames && toString$1.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(_toIobject(it));\n};\n\nvar _objectGopnExt = {\n\tf: f$5\n};\n\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nvar f$6 = _descriptors ? gOPD : function getOwnPropertyDescriptor(O, P) {\n  O = _toIobject(O);\n  P = _toPrimitive(P, true);\n  if (_ie8DomDefine) try {\n    return gOPD(O, P);\n  } catch (e) { /* empty */ }\n  if (_has(O, P)) return _propertyDesc(!_objectPie.f.call(O, P), O[P]);\n};\n\nvar _objectGopd = {\n\tf: f$6\n};\n\n// ECMAScript 6 symbols shim\n\n\n\n\n\nvar META = _meta.KEY;\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar gOPD$1 = _objectGopd.f;\nvar dP$1 = _objectDp.f;\nvar gOPN$1 = _objectGopnExt.f;\nvar $Symbol = _global.Symbol;\nvar $JSON = _global.JSON;\nvar _stringify = $JSON && $JSON.stringify;\nvar PROTOTYPE$2 = 'prototype';\nvar HIDDEN = _wks('_hidden');\nvar TO_PRIMITIVE = _wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = _shared('symbol-registry');\nvar AllSymbols = _shared('symbols');\nvar OPSymbols = _shared('op-symbols');\nvar ObjectProto = Object[PROTOTYPE$2];\nvar USE_NATIVE = typeof $Symbol == 'function';\nvar QObject = _global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE$2] || !QObject[PROTOTYPE$2].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = _descriptors && _fails(function () {\n  return _objectCreate(dP$1({}, 'a', {\n    get: function () { return dP$1(this, 'a', { value: 7 }).a; }\n  })).a != 7;\n}) ? function (it, key, D) {\n  var protoDesc = gOPD$1(ObjectProto, key);\n  if (protoDesc) delete ObjectProto[key];\n  dP$1(it, key, D);\n  if (protoDesc && it !== ObjectProto) dP$1(ObjectProto, key, protoDesc);\n} : dP$1;\n\nvar wrap = function (tag) {\n  var sym = AllSymbols[tag] = _objectCreate($Symbol[PROTOTYPE$2]);\n  sym._k = tag;\n  return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n  return typeof it == 'symbol';\n} : function (it) {\n  return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n  if (it === ObjectProto) $defineProperty(OPSymbols, key, D);\n  _anObject(it);\n  key = _toPrimitive(key, true);\n  _anObject(D);\n  if (_has(AllSymbols, key)) {\n    if (!D.enumerable) {\n      if (!_has(it, HIDDEN)) dP$1(it, HIDDEN, _propertyDesc(1, {}));\n      it[HIDDEN][key] = true;\n    } else {\n      if (_has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n      D = _objectCreate(D, { enumerable: _propertyDesc(0, false) });\n    } return setSymbolDesc(it, key, D);\n  } return dP$1(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P) {\n  _anObject(it);\n  var keys = _enumKeys(P = _toIobject(P));\n  var i = 0;\n  var l = keys.length;\n  var key;\n  while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n  return it;\n};\nvar $create = function create(it, P) {\n  return P === undefined ? _objectCreate(it) : $defineProperties(_objectCreate(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n  var E = isEnum.call(this, key = _toPrimitive(key, true));\n  if (this === ObjectProto && _has(AllSymbols, key) && !_has(OPSymbols, key)) return false;\n  return E || !_has(this, key) || !_has(AllSymbols, key) || _has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n  it = _toIobject(it);\n  key = _toPrimitive(key, true);\n  if (it === ObjectProto && _has(AllSymbols, key) && !_has(OPSymbols, key)) return;\n  var D = gOPD$1(it, key);\n  if (D && _has(AllSymbols, key) && !(_has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n  return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n  var names = gOPN$1(_toIobject(it));\n  var result = [];\n  var i = 0;\n  var key;\n  while (names.length > i) {\n    if (!_has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n  } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n  var IS_OP = it === ObjectProto;\n  var names = gOPN$1(IS_OP ? OPSymbols : _toIobject(it));\n  var result = [];\n  var i = 0;\n  var key;\n  while (names.length > i) {\n    if (_has(AllSymbols, key = names[i++]) && (IS_OP ? _has(ObjectProto, key) : true)) result.push(AllSymbols[key]);\n  } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif (!USE_NATIVE) {\n  $Symbol = function Symbol() {\n    if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n    var tag = _uid(arguments.length > 0 ? arguments[0] : undefined);\n    var $set = function (value) {\n      if (this === ObjectProto) $set.call(OPSymbols, value);\n      if (_has(this, HIDDEN) && _has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n      setSymbolDesc(this, tag, _propertyDesc(1, value));\n    };\n    if (_descriptors && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });\n    return wrap(tag);\n  };\n  _redefine($Symbol[PROTOTYPE$2], 'toString', function toString() {\n    return this._k;\n  });\n\n  _objectGopd.f = $getOwnPropertyDescriptor;\n  _objectDp.f = $defineProperty;\n  _objectGopn.f = _objectGopnExt.f = $getOwnPropertyNames;\n  _objectPie.f = $propertyIsEnumerable;\n  _objectGops.f = $getOwnPropertySymbols;\n\n  if (_descriptors && !_library) {\n    _redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n  }\n\n  _wksExt.f = function (name) {\n    return wrap(_wks(name));\n  };\n}\n\n_export(_export.G + _export.W + _export.F * !USE_NATIVE, { Symbol: $Symbol });\n\nfor (var es6Symbols = (\n  // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n  'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), j = 0; es6Symbols.length > j;)_wks(es6Symbols[j++]);\n\nfor (var wellKnownSymbols = _objectKeys(_wks.store), k = 0; wellKnownSymbols.length > k;) _wksDefine(wellKnownSymbols[k++]);\n\n_export(_export.S + _export.F * !USE_NATIVE, 'Symbol', {\n  // 19.4.2.1 Symbol.for(key)\n  'for': function (key) {\n    return _has(SymbolRegistry, key += '')\n      ? SymbolRegistry[key]\n      : SymbolRegistry[key] = $Symbol(key);\n  },\n  // 19.4.2.5 Symbol.keyFor(sym)\n  keyFor: function keyFor(sym) {\n    if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n    for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n  },\n  useSetter: function () { setter = true; },\n  useSimple: function () { setter = false; }\n});\n\n_export(_export.S + _export.F * !USE_NATIVE, 'Object', {\n  // 19.1.2.2 Object.create(O [, Properties])\n  create: $create,\n  // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n  defineProperty: $defineProperty,\n  // 19.1.2.3 Object.defineProperties(O, Properties)\n  defineProperties: $defineProperties,\n  // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n  getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n  // 19.1.2.7 Object.getOwnPropertyNames(O)\n  getOwnPropertyNames: $getOwnPropertyNames,\n  // 19.1.2.8 Object.getOwnPropertySymbols(O)\n  getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && _export(_export.S + _export.F * (!USE_NATIVE || _fails(function () {\n  var S = $Symbol();\n  // MS Edge converts symbol values to JSON as {}\n  // WebKit converts symbol values to JSON as null\n  // V8 throws on boxed symbols\n  return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n  stringify: function stringify(it) {\n    var args = [it];\n    var i = 1;\n    var replacer, $replacer;\n    while (arguments.length > i) args.push(arguments[i++]);\n    $replacer = replacer = args[1];\n    if (!_isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n    if (!_isArray(replacer)) replacer = function (key, value) {\n      if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n      if (!isSymbol(value)) return value;\n    };\n    args[1] = replacer;\n    return _stringify.apply($JSON, args);\n  }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE$2][TO_PRIMITIVE] || _hide($Symbol[PROTOTYPE$2], TO_PRIMITIVE, $Symbol[PROTOTYPE$2].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\n_setToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\n_setToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\n_setToStringTag(_global.JSON, 'JSON', true);\n\n// getting tag from 19.1.3.6 Object.prototype.toString()\n\nvar TAG$1 = _wks('toStringTag');\n// ES3 wrong here\nvar ARG = _cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n  try {\n    return it[key];\n  } catch (e) { /* empty */ }\n};\n\nvar _classof = function (it) {\n  var O, T, B;\n  return it === undefined ? 'Undefined' : it === null ? 'Null'\n    // @@toStringTag case\n    : typeof (T = tryGet(O = Object(it), TAG$1)) == 'string' ? T\n    // builtinTag case\n    : ARG ? _cof(O)\n    // ES3 arguments fallback\n    : (B = _cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n\n// 19.1.3.6 Object.prototype.toString()\n\nvar test = {};\ntest[_wks('toStringTag')] = 'z';\nif (test + '' != '[object z]') {\n  _redefine(Object.prototype, 'toString', function toString() {\n    return '[object ' + _classof(this) + ']';\n  }, true);\n}\n\n_wksDefine('asyncIterator');\n\n_wksDefine('observable');\n\nvar symbol = _core.Symbol;\n\n// true  -> String#at\n// false -> String#codePointAt\nvar _stringAt = function (TO_STRING) {\n  return function (that, pos) {\n    var s = String(_defined(that));\n    var i = _toInteger(pos);\n    var l = s.length;\n    var a, b;\n    if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n    a = s.charCodeAt(i);\n    return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n      ? TO_STRING ? s.charAt(i) : a\n      : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n  };\n};\n\nvar _iterators = {};\n\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\n_hide(IteratorPrototype, _wks('iterator'), function () { return this; });\n\nvar _iterCreate = function (Constructor, NAME, next) {\n  Constructor.prototype = _objectCreate(IteratorPrototype, { next: _propertyDesc(1, next) });\n  _setToStringTag(Constructor, NAME + ' Iterator');\n};\n\n// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\n\n\nvar IE_PROTO$2 = _sharedKey('IE_PROTO');\nvar ObjectProto$1 = Object.prototype;\n\nvar _objectGpo = Object.getPrototypeOf || function (O) {\n  O = _toObject(O);\n  if (_has(O, IE_PROTO$2)) return O[IE_PROTO$2];\n  if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n    return O.constructor.prototype;\n  } return O instanceof Object ? ObjectProto$1 : null;\n};\n\nvar ITERATOR = _wks('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nvar _iterDefine = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n  _iterCreate(Constructor, NAME, next);\n  var getMethod = function (kind) {\n    if (!BUGGY && kind in proto) return proto[kind];\n    switch (kind) {\n      case KEYS: return function keys() { return new Constructor(this, kind); };\n      case VALUES: return function values() { return new Constructor(this, kind); };\n    } return function entries() { return new Constructor(this, kind); };\n  };\n  var TAG = NAME + ' Iterator';\n  var DEF_VALUES = DEFAULT == VALUES;\n  var VALUES_BUG = false;\n  var proto = Base.prototype;\n  var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n  var $default = $native || getMethod(DEFAULT);\n  var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n  var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n  var methods, key, IteratorPrototype;\n  // Fix native\n  if ($anyNative) {\n    IteratorPrototype = _objectGpo($anyNative.call(new Base()));\n    if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n      // Set @@toStringTag to native iterators\n      _setToStringTag(IteratorPrototype, TAG, true);\n      // fix for some old engines\n      if (!_library && typeof IteratorPrototype[ITERATOR] != 'function') _hide(IteratorPrototype, ITERATOR, returnThis);\n    }\n  }\n  // fix Array#{values, @@iterator}.name in V8 / FF\n  if (DEF_VALUES && $native && $native.name !== VALUES) {\n    VALUES_BUG = true;\n    $default = function values() { return $native.call(this); };\n  }\n  // Define iterator\n  if ((!_library || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n    _hide(proto, ITERATOR, $default);\n  }\n  // Plug for library\n  _iterators[NAME] = $default;\n  _iterators[TAG] = returnThis;\n  if (DEFAULT) {\n    methods = {\n      values: DEF_VALUES ? $default : getMethod(VALUES),\n      keys: IS_SET ? $default : getMethod(KEYS),\n      entries: $entries\n    };\n    if (FORCED) for (key in methods) {\n      if (!(key in proto)) _redefine(proto, key, methods[key]);\n    } else _export(_export.P + _export.F * (BUGGY || VALUES_BUG), NAME, methods);\n  }\n  return methods;\n};\n\nvar $at = _stringAt(true);\n\n// 21.1.3.27 String.prototype[@@iterator]()\n_iterDefine(String, 'String', function (iterated) {\n  this._t = String(iterated); // target\n  this._i = 0;                // next index\n// 21.1.5.2.1 %StringIteratorPrototype%.next()\n}, function () {\n  var O = this._t;\n  var index = this._i;\n  var point;\n  if (index >= O.length) return { value: undefined, done: true };\n  point = $at(O, index);\n  this._i += point.length;\n  return { value: point, done: false };\n});\n\nvar _iterStep = function (done, value) {\n  return { value: value, done: !!done };\n};\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nvar es6_array_iterator = _iterDefine(Array, 'Array', function (iterated, kind) {\n  this._t = _toIobject(iterated); // target\n  this._i = 0;                   // next index\n  this._k = kind;                // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n  var O = this._t;\n  var kind = this._k;\n  var index = this._i++;\n  if (!O || index >= O.length) {\n    this._t = undefined;\n    return _iterStep(1);\n  }\n  if (kind == 'keys') return _iterStep(0, index);\n  if (kind == 'values') return _iterStep(0, O[index]);\n  return _iterStep(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\n_iterators.Arguments = _iterators.Array;\n\n_addToUnscopables('keys');\n_addToUnscopables('values');\n_addToUnscopables('entries');\n\nvar ITERATOR$1 = _wks('iterator');\nvar TO_STRING_TAG = _wks('toStringTag');\nvar ArrayValues = _iterators.Array;\n\nvar DOMIterables = {\n  CSSRuleList: true, // TODO: Not spec compliant, should be false.\n  CSSStyleDeclaration: false,\n  CSSValueList: false,\n  ClientRectList: false,\n  DOMRectList: false,\n  DOMStringList: false,\n  DOMTokenList: true,\n  DataTransferItemList: false,\n  FileList: false,\n  HTMLAllCollection: false,\n  HTMLCollection: false,\n  HTMLFormElement: false,\n  HTMLSelectElement: false,\n  MediaList: true, // TODO: Not spec compliant, should be false.\n  MimeTypeArray: false,\n  NamedNodeMap: false,\n  NodeList: true,\n  PaintRequestList: false,\n  Plugin: false,\n  PluginArray: false,\n  SVGLengthList: false,\n  SVGNumberList: false,\n  SVGPathSegList: false,\n  SVGPointList: false,\n  SVGStringList: false,\n  SVGTransformList: false,\n  SourceBufferList: false,\n  StyleSheetList: true, // TODO: Not spec compliant, should be false.\n  TextTrackCueList: false,\n  TextTrackList: false,\n  TouchList: false\n};\n\nfor (var collections = _objectKeys(DOMIterables), i = 0; i < collections.length; i++) {\n  var NAME = collections[i];\n  var explicit = DOMIterables[NAME];\n  var Collection = _global[NAME];\n  var proto = Collection && Collection.prototype;\n  var key;\n  if (proto) {\n    if (!proto[ITERATOR$1]) _hide(proto, ITERATOR$1, ArrayValues);\n    if (!proto[TO_STRING_TAG]) _hide(proto, TO_STRING_TAG, NAME);\n    _iterators[NAME] = ArrayValues;\n    if (explicit) for (key in es6_array_iterator) if (!proto[key]) _redefine(proto, key, es6_array_iterator[key], true);\n  }\n}\n\nvar iterator = _wksExt.f('iterator');\n\n/**\r\n * Copyright 2017 Google Inc.\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 */\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = Object.setPrototypeOf ||\r\n    ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n    function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n\r\nexport function __extends(d, b) {\r\n    extendStatics(d, b);\r\n    function __() { this.constructor = d; }\r\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = Object.assign || function __assign(t) {\r\n    for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n        s = arguments[i];\r\n        for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n    }\r\n    return t;\r\n}\r\n\r\nexport function __rest(s, e) {\r\n    var t = {};\r\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n        t[p] = s[p];\r\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0)\r\n            t[p[i]] = s[p[i]];\r\n    return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n    return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n    return new (P || (P = Promise))(function (resolve, reject) {\r\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n    });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n    function verb(n) { return function (v) { return step([n, v]); }; }\r\n    function step(op) {\r\n        if (f) throw new TypeError(\"Generator is already executing.\");\r\n        while (_) try {\r\n            if (f = 1, y && (t = y[op[0] & 2 ? \"return\" : op[0] ? \"throw\" : \"next\"]) && !(t = t.call(y, op[1])).done) return t;\r\n            if (y = 0, t) op = [0, t.value];\r\n            switch (op[0]) {\r\n                case 0: case 1: t = op; break;\r\n                case 4: _.label++; return { value: op[1], done: false };\r\n                case 5: _.label++; y = op[1]; op = [0]; continue;\r\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n                default:\r\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n                    if (t[2]) _.ops.pop();\r\n                    _.trys.pop(); continue;\r\n            }\r\n            op = body.call(thisArg, _);\r\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n    }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n    for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n    if (m) return m.call(o);\r\n    return {\r\n        next: function () {\r\n            if (o && i >= o.length) o = void 0;\r\n            return { value: o && o[i++], done: !o };\r\n        }\r\n    };\r\n}\r\n\r\nexport function __read(o, n) {\r\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n    if (!m) return o;\r\n    var i = m.call(o), r, ar = [], e;\r\n    try {\r\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n    }\r\n    catch (error) { e = { error: error }; }\r\n    finally {\r\n        try {\r\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n        }\r\n        finally { if (e) throw e.error; }\r\n    }\r\n    return ar;\r\n}\r\n\r\nexport function __spread() {\r\n    for (var ar = [], i = 0; i < arguments.length; i++)\r\n        ar = ar.concat(__read(arguments[i]));\r\n    return ar;\r\n}\r\n\r\nexport function __await(v) {\r\n    return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n    return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n    function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n    function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n    function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r);  }\r\n    function fulfill(value) { resume(\"next\", value); }\r\n    function reject(value) { resume(\"throw\", value); }\r\n    function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n    var i, p;\r\n    return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n    function verb(n, f) { if (o[n]) i[n] = function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; }; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var m = o[Symbol.asyncIterator];\r\n    return m ? m.call(o) : typeof __values === \"function\" ? __values(o) : o[Symbol.iterator]();\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n    if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n    return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n    if (mod && mod.__esModule) return mod;\r\n    var result = {};\r\n    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n    result.default = mod;\r\n    return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n    return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar tslib_1 = require('tslib');\n\n/**\r\n * Copyright 2017 Google Inc.\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\n/**\r\n * @fileoverview Firebase constants.  Some of these (@defines) can be overridden at compile-time.\r\n */\r\nvar CONSTANTS = {\r\n    /**\r\n     * @define {boolean} Whether this is the client Node.js SDK.\r\n     */\r\n    NODE_CLIENT: false,\r\n    /**\r\n     * @define {boolean} Whether this is the Admin Node.js SDK.\r\n     */\r\n    NODE_ADMIN: false,\r\n    /**\r\n     * Firebase SDK Version\r\n     */\r\n    SDK_VERSION: '${JSCORE_VERSION}'\r\n};\n\n/**\r\n * Copyright 2017 Google Inc.\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\n/**\r\n * Throws an error if the provided assertion is falsy\r\n * @param {*} assertion The assertion to be tested for falsiness\r\n * @param {!string} message The message to display if the check fails\r\n */\r\nvar assert = function (assertion, message) {\r\n    if (!assertion) {\r\n        throw assertionError(message);\r\n    }\r\n};\r\n/**\r\n * Returns an Error object suitable for throwing.\r\n * @param {string} message\r\n * @return {!Error}\r\n */\r\nvar assertionError = function (message) {\r\n    return new Error('Firebase Database (' +\r\n        CONSTANTS.SDK_VERSION +\r\n        ') INTERNAL ASSERT FAILED: ' +\r\n        message);\r\n};\n\n/**\r\n * Copyright 2017 Google Inc.\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\nvar stringToByteArray = function (str) {\r\n    // TODO(user): Use native implementations if/when available\r\n    var out = [], p = 0;\r\n    for (var i = 0; i < str.length; i++) {\r\n        var c = str.charCodeAt(i);\r\n        if (c < 128) {\r\n            out[p++] = c;\r\n        }\r\n        else if (c < 2048) {\r\n            out[p++] = (c >> 6) | 192;\r\n            out[p++] = (c & 63) | 128;\r\n        }\r\n        else if ((c & 0xfc00) == 0xd800 &&\r\n            i + 1 < str.length &&\r\n            (str.charCodeAt(i + 1) & 0xfc00) == 0xdc00) {\r\n            // Surrogate Pair\r\n            c = 0x10000 + ((c & 0x03ff) << 10) + (str.charCodeAt(++i) & 0x03ff);\r\n            out[p++] = (c >> 18) | 240;\r\n            out[p++] = ((c >> 12) & 63) | 128;\r\n            out[p++] = ((c >> 6) & 63) | 128;\r\n            out[p++] = (c & 63) | 128;\r\n        }\r\n        else {\r\n            out[p++] = (c >> 12) | 224;\r\n            out[p++] = ((c >> 6) & 63) | 128;\r\n            out[p++] = (c & 63) | 128;\r\n        }\r\n    }\r\n    return out;\r\n};\r\n/**\r\n * Turns an array of numbers into the string given by the concatenation of the\r\n * characters to which the numbers correspond.\r\n * @param {Array<number>} bytes Array of numbers representing characters.\r\n * @return {string} Stringification of the array.\r\n */\r\nvar byteArrayToString = function (bytes) {\r\n    // TODO(user): Use native implementations if/when available\r\n    var out = [], pos = 0, c = 0;\r\n    while (pos < bytes.length) {\r\n        var c1 = bytes[pos++];\r\n        if (c1 < 128) {\r\n            out[c++] = String.fromCharCode(c1);\r\n        }\r\n        else if (c1 > 191 && c1 < 224) {\r\n            var c2 = bytes[pos++];\r\n            out[c++] = String.fromCharCode(((c1 & 31) << 6) | (c2 & 63));\r\n        }\r\n        else if (c1 > 239 && c1 < 365) {\r\n            // Surrogate Pair\r\n            var c2 = bytes[pos++];\r\n            var c3 = bytes[pos++];\r\n            var c4 = bytes[pos++];\r\n            var u = (((c1 & 7) << 18) | ((c2 & 63) << 12) | ((c3 & 63) << 6) | (c4 & 63)) -\r\n                0x10000;\r\n            out[c++] = String.fromCharCode(0xd800 + (u >> 10));\r\n            out[c++] = String.fromCharCode(0xdc00 + (u & 1023));\r\n        }\r\n        else {\r\n            var c2 = bytes[pos++];\r\n            var c3 = bytes[pos++];\r\n            out[c++] = String.fromCharCode(((c1 & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));\r\n        }\r\n    }\r\n    return out.join('');\r\n};\r\n// Static lookup maps, lazily populated by init_()\r\nvar base64 = {\r\n    /**\r\n     * Maps bytes to characters.\r\n     * @type {Object}\r\n     * @private\r\n     */\r\n    byteToCharMap_: null,\r\n    /**\r\n     * Maps characters to bytes.\r\n     * @type {Object}\r\n     * @private\r\n     */\r\n    charToByteMap_: null,\r\n    /**\r\n     * Maps bytes to websafe characters.\r\n     * @type {Object}\r\n     * @private\r\n     */\r\n    byteToCharMapWebSafe_: null,\r\n    /**\r\n     * Maps websafe characters to bytes.\r\n     * @type {Object}\r\n     * @private\r\n     */\r\n    charToByteMapWebSafe_: null,\r\n    /**\r\n     * Our default alphabet, shared between\r\n     * ENCODED_VALS and ENCODED_VALS_WEBSAFE\r\n     * @type {string}\r\n     */\r\n    ENCODED_VALS_BASE: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' + 'abcdefghijklmnopqrstuvwxyz' + '0123456789',\r\n    /**\r\n     * Our default alphabet. Value 64 (=) is special; it means \"nothing.\"\r\n     * @type {string}\r\n     */\r\n    get ENCODED_VALS() {\r\n        return this.ENCODED_VALS_BASE + '+/=';\r\n    },\r\n    /**\r\n     * Our websafe alphabet.\r\n     * @type {string}\r\n     */\r\n    get ENCODED_VALS_WEBSAFE() {\r\n        return this.ENCODED_VALS_BASE + '-_.';\r\n    },\r\n    /**\r\n     * Whether this browser supports the atob and btoa functions. This extension\r\n     * started at Mozilla but is now implemented by many browsers. We use the\r\n     * ASSUME_* variables to avoid pulling in the full useragent detection library\r\n     * but still allowing the standard per-browser compilations.\r\n     *\r\n     * @type {boolean}\r\n     */\r\n    HAS_NATIVE_SUPPORT: typeof atob === 'function',\r\n    /**\r\n     * Base64-encode an array of bytes.\r\n     *\r\n     * @param {Array<number>|Uint8Array} input An array of bytes (numbers with\r\n     *     value in [0, 255]) to encode.\r\n     * @param {boolean=} opt_webSafe Boolean indicating we should use the\r\n     *     alternative alphabet.\r\n     * @return {string} The base64 encoded string.\r\n     */\r\n    encodeByteArray: function (input, opt_webSafe) {\r\n        if (!Array.isArray(input)) {\r\n            throw Error('encodeByteArray takes an array as a parameter');\r\n        }\r\n        this.init_();\r\n        var byteToCharMap = opt_webSafe\r\n            ? this.byteToCharMapWebSafe_\r\n            : this.byteToCharMap_;\r\n        var output = [];\r\n        for (var i = 0; i < input.length; i += 3) {\r\n            var byte1 = input[i];\r\n            var haveByte2 = i + 1 < input.length;\r\n            var byte2 = haveByte2 ? input[i + 1] : 0;\r\n            var haveByte3 = i + 2 < input.length;\r\n            var byte3 = haveByte3 ? input[i + 2] : 0;\r\n            var outByte1 = byte1 >> 2;\r\n            var outByte2 = ((byte1 & 0x03) << 4) | (byte2 >> 4);\r\n            var outByte3 = ((byte2 & 0x0f) << 2) | (byte3 >> 6);\r\n            var outByte4 = byte3 & 0x3f;\r\n            if (!haveByte3) {\r\n                outByte4 = 64;\r\n                if (!haveByte2) {\r\n                    outByte3 = 64;\r\n                }\r\n            }\r\n            output.push(byteToCharMap[outByte1], byteToCharMap[outByte2], byteToCharMap[outByte3], byteToCharMap[outByte4]);\r\n        }\r\n        return output.join('');\r\n    },\r\n    /**\r\n     * Base64-encode a string.\r\n     *\r\n     * @param {string} input A string to encode.\r\n     * @param {boolean=} opt_webSafe If true, we should use the\r\n     *     alternative alphabet.\r\n     * @return {string} The base64 encoded string.\r\n     */\r\n    encodeString: function (input, opt_webSafe) {\r\n        // Shortcut for Mozilla browsers that implement\r\n        // a native base64 encoder in the form of \"btoa/atob\"\r\n        if (this.HAS_NATIVE_SUPPORT && !opt_webSafe) {\r\n            return btoa(input);\r\n        }\r\n        return this.encodeByteArray(stringToByteArray(input), opt_webSafe);\r\n    },\r\n    /**\r\n     * Base64-decode a string.\r\n     *\r\n     * @param {string} input to decode.\r\n     * @param {boolean=} opt_webSafe True if we should use the\r\n     *     alternative alphabet.\r\n     * @return {string} string representing the decoded value.\r\n     */\r\n    decodeString: function (input, opt_webSafe) {\r\n        // Shortcut for Mozilla browsers that implement\r\n        // a native base64 encoder in the form of \"btoa/atob\"\r\n        if (this.HAS_NATIVE_SUPPORT && !opt_webSafe) {\r\n            return atob(input);\r\n        }\r\n        return byteArrayToString(this.decodeStringToByteArray(input, opt_webSafe));\r\n    },\r\n    /**\r\n     * Base64-decode a string.\r\n     *\r\n     * In base-64 decoding, groups of four characters are converted into three\r\n     * bytes.  If the encoder did not apply padding, the input length may not\r\n     * be a multiple of 4.\r\n     *\r\n     * In this case, the last group will have fewer than 4 characters, and\r\n     * padding will be inferred.  If the group has one or two characters, it decodes\r\n     * to one byte.  If the group has three characters, it decodes to two bytes.\r\n     *\r\n     * @param {string} input Input to decode.\r\n     * @param {boolean=} opt_webSafe True if we should use the web-safe alphabet.\r\n     * @return {!Array<number>} bytes representing the decoded value.\r\n     */\r\n    decodeStringToByteArray: function (input, opt_webSafe) {\r\n        this.init_();\r\n        var charToByteMap = opt_webSafe\r\n            ? this.charToByteMapWebSafe_\r\n            : this.charToByteMap_;\r\n        var output = [];\r\n        for (var i = 0; i < input.length;) {\r\n            var byte1 = charToByteMap[input.charAt(i++)];\r\n            var haveByte2 = i < input.length;\r\n            var byte2 = haveByte2 ? charToByteMap[input.charAt(i)] : 0;\r\n            ++i;\r\n            var haveByte3 = i < input.length;\r\n            var byte3 = haveByte3 ? charToByteMap[input.charAt(i)] : 64;\r\n            ++i;\r\n            var haveByte4 = i < input.length;\r\n            var byte4 = haveByte4 ? charToByteMap[input.charAt(i)] : 64;\r\n            ++i;\r\n            if (byte1 == null || byte2 == null || byte3 == null || byte4 == null) {\r\n                throw Error();\r\n            }\r\n            var outByte1 = (byte1 << 2) | (byte2 >> 4);\r\n            output.push(outByte1);\r\n            if (byte3 != 64) {\r\n                var outByte2 = ((byte2 << 4) & 0xf0) | (byte3 >> 2);\r\n                output.push(outByte2);\r\n                if (byte4 != 64) {\r\n                    var outByte3 = ((byte3 << 6) & 0xc0) | byte4;\r\n                    output.push(outByte3);\r\n                }\r\n            }\r\n        }\r\n        return output;\r\n    },\r\n    /**\r\n     * Lazy static initialization function. Called before\r\n     * accessing any of the static map variables.\r\n     * @private\r\n     */\r\n    init_: function () {\r\n        if (!this.byteToCharMap_) {\r\n            this.byteToCharMap_ = {};\r\n            this.charToByteMap_ = {};\r\n            this.byteToCharMapWebSafe_ = {};\r\n            this.charToByteMapWebSafe_ = {};\r\n            // We want quick mappings back and forth, so we precompute two maps.\r\n            for (var i = 0; i < this.ENCODED_VALS.length; i++) {\r\n                this.byteToCharMap_[i] = this.ENCODED_VALS.charAt(i);\r\n                this.charToByteMap_[this.byteToCharMap_[i]] = i;\r\n                this.byteToCharMapWebSafe_[i] = this.ENCODED_VALS_WEBSAFE.charAt(i);\r\n                this.charToByteMapWebSafe_[this.byteToCharMapWebSafe_[i]] = i;\r\n                // Be forgiving when decoding and correctly decode both encodings.\r\n                if (i >= this.ENCODED_VALS_BASE.length) {\r\n                    this.charToByteMap_[this.ENCODED_VALS_WEBSAFE.charAt(i)] = i;\r\n                    this.charToByteMapWebSafe_[this.ENCODED_VALS.charAt(i)] = i;\r\n                }\r\n            }\r\n        }\r\n    }\r\n};\r\n/**\r\n * URL-safe base64 encoding\r\n * @param {!string} str\r\n * @return {!string}\r\n */\r\nvar base64Encode = function (str) {\r\n    var utf8Bytes = stringToByteArray(str);\r\n    return base64.encodeByteArray(utf8Bytes, true);\r\n};\r\n/**\r\n * URL-safe base64 decoding\r\n *\r\n * NOTE: DO NOT use the global atob() function - it does NOT support the\r\n * base64Url variant encoding.\r\n *\r\n * @param {string} str To be decoded\r\n * @return {?string} Decoded result, if possible\r\n */\r\nvar base64Decode = function (str) {\r\n    try {\r\n        return base64.decodeString(str, true);\r\n    }\r\n    catch (e) {\r\n        console.error('base64Decode failed: ', e);\r\n    }\r\n    return null;\r\n};\n\n/**\r\n * Copyright 2017 Google Inc.\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\n/**\r\n * Do a deep-copy of basic JavaScript Objects or Arrays.\r\n */\r\nfunction deepCopy(value) {\r\n    return deepExtend(undefined, value);\r\n}\r\n/**\r\n * Copy properties from source to target (recursively allows extension\r\n * of Objects and Arrays).  Scalar values in the target are over-written.\r\n * If target is undefined, an object of the appropriate type will be created\r\n * (and returned).\r\n *\r\n * We recursively copy all child properties of plain Objects in the source- so\r\n * that namespace- like dictionaries are merged.\r\n *\r\n * Note that the target can be a function, in which case the properties in\r\n * the source Object are copied onto it as static properties of the Function.\r\n */\r\nfunction deepExtend(target, source) {\r\n    if (!(source instanceof Object)) {\r\n        return source;\r\n    }\r\n    switch (source.constructor) {\r\n        case Date:\r\n            // Treat Dates like scalars; if the target date object had any child\r\n            // properties - they will be lost!\r\n            var dateValue = source;\r\n            return new Date(dateValue.getTime());\r\n        case Object:\r\n            if (target === undefined) {\r\n                target = {};\r\n            }\r\n            break;\r\n        case Array:\r\n            // Always copy the array source and overwrite the target.\r\n            target = [];\r\n            break;\r\n        default:\r\n            // Not a plain Object - treat it as a scalar.\r\n            return source;\r\n    }\r\n    for (var prop in source) {\r\n        if (!source.hasOwnProperty(prop)) {\r\n            continue;\r\n        }\r\n        target[prop] = deepExtend(target[prop], source[prop]);\r\n    }\r\n    return target;\r\n}\r\n// TODO: Really needed (for JSCompiler type checking)?\r\nfunction patchProperty(obj, prop, value) {\r\n    obj[prop] = value;\r\n}\n\n/**\r\n * Copyright 2017 Google Inc.\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\nvar Deferred = /** @class */ (function () {\r\n    function Deferred() {\r\n        var _this = this;\r\n        this.promise = new Promise(function (resolve, reject) {\r\n            _this.resolve = resolve;\r\n            _this.reject = reject;\r\n        });\r\n    }\r\n    /**\r\n     * Our API internals are not promiseified and cannot because our callback APIs have subtle expectations around\r\n     * invoking promises inline, which Promises are forbidden to do. This method accepts an optional node-style callback\r\n     * and returns a node-style callback which will resolve or reject the Deferred's promise.\r\n     * @param {((?function(?(Error)): (?|undefined))| (?function(?(Error),?=): (?|undefined)))=} callback\r\n     * @return {!function(?(Error), ?=)}\r\n     */\r\n    Deferred.prototype.wrapCallback = function (callback) {\r\n        var _this = this;\r\n        return function (error, value) {\r\n            if (error) {\r\n                _this.reject(error);\r\n            }\r\n            else {\r\n                _this.resolve(value);\r\n            }\r\n            if (typeof callback === 'function') {\r\n                // Attaching noop handler just in case developer wasn't expecting\r\n                // promises\r\n                _this.promise.catch(function () { });\r\n                // Some of our callbacks don't expect a value and our own tests\r\n                // assert that the parameter length is 1\r\n                if (callback.length === 1) {\r\n                    callback(error);\r\n                }\r\n                else {\r\n                    callback(error, value);\r\n                }\r\n            }\r\n        };\r\n    };\r\n    return Deferred;\r\n}());\n\n/**\r\n * Copyright 2017 Google Inc.\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\n/**\r\n * Returns navigator.userAgent string or '' if it's not defined.\r\n * @return {string} user agent string\r\n */\r\nvar getUA = function () {\r\n    if (typeof navigator !== 'undefined' &&\r\n        typeof navigator['userAgent'] === 'string') {\r\n        return navigator['userAgent'];\r\n    }\r\n    else {\r\n        return '';\r\n    }\r\n};\r\n/**\r\n * Detect Cordova / PhoneGap / Ionic frameworks on a mobile device.\r\n *\r\n * Deliberately does not rely on checking `file://` URLs (as this fails PhoneGap in the Ripple emulator) nor\r\n * Cordova `onDeviceReady`, which would normally wait for a callback.\r\n *\r\n * @return {boolean} isMobileCordova\r\n */\r\nvar isMobileCordova = function () {\r\n    return (typeof window !== 'undefined' &&\r\n        !!(window['cordova'] || window['phonegap'] || window['PhoneGap']) &&\r\n        /ios|iphone|ipod|ipad|android|blackberry|iemobile/i.test(getUA()));\r\n};\r\n/**\r\n * Detect React Native.\r\n *\r\n * @return {boolean} True if ReactNative environment is detected.\r\n */\r\nvar isReactNative = function () {\r\n    return (typeof navigator === 'object' && navigator['product'] === 'ReactNative');\r\n};\r\n/**\r\n * Detect Node.js.\r\n *\r\n * @return {boolean} True if Node.js environment is detected.\r\n */\r\nvar isNodeSdk = function () {\r\n    return CONSTANTS.NODE_CLIENT === true || CONSTANTS.NODE_ADMIN === true;\r\n};\n\nvar ERROR_NAME = 'FirebaseError';\r\nvar captureStackTrace = Error\r\n    .captureStackTrace;\r\n// Export for faking in tests\r\nfunction patchCapture(captureFake) {\r\n    var result = captureStackTrace;\r\n    captureStackTrace = captureFake;\r\n    return result;\r\n}\r\nvar FirebaseError = /** @class */ (function () {\r\n    function FirebaseError(code, message) {\r\n        this.code = code;\r\n        this.message = message;\r\n        // We want the stack value, if implemented by Error\r\n        if (captureStackTrace) {\r\n            // Patches this.stack, omitted calls above ErrorFactory#create\r\n            captureStackTrace(this, ErrorFactory.prototype.create);\r\n        }\r\n        else {\r\n            try {\r\n                // In case of IE11, stack will be set only after error is raised.\r\n                // https://docs.microsoft.com/en-us/scripting/javascript/reference/stack-property-error-javascript\r\n                throw Error.apply(this, arguments);\r\n            }\r\n            catch (err) {\r\n                this.name = ERROR_NAME;\r\n                // Make non-enumerable getter for the property.\r\n                Object.defineProperty(this, 'stack', {\r\n                    get: function () {\r\n                        return err.stack;\r\n                    }\r\n                });\r\n            }\r\n        }\r\n    }\r\n    return FirebaseError;\r\n}());\r\n// Back-door inheritance\r\nFirebaseError.prototype = Object.create(Error.prototype);\r\nFirebaseError.prototype.constructor = FirebaseError;\r\nFirebaseError.prototype.name = ERROR_NAME;\r\nvar ErrorFactory = /** @class */ (function () {\r\n    function ErrorFactory(service, serviceName, errors) {\r\n        this.service = service;\r\n        this.serviceName = serviceName;\r\n        this.errors = errors;\r\n        // Matches {$name}, by default.\r\n        this.pattern = /\\{\\$([^}]+)}/g;\r\n        // empty\r\n    }\r\n    ErrorFactory.prototype.create = function (code, data) {\r\n        if (data === undefined) {\r\n            data = {};\r\n        }\r\n        var template = this.errors[code];\r\n        var fullCode = this.service + '/' + code;\r\n        var message;\r\n        if (template === undefined) {\r\n            message = 'Error';\r\n        }\r\n        else {\r\n            message = template.replace(this.pattern, function (match, key) {\r\n                var value = data[key];\r\n                return value !== undefined ? value.toString() : '<' + key + '?>';\r\n            });\r\n        }\r\n        // Service: Error message (service/code).\r\n        message = this.serviceName + ': ' + message + ' (' + fullCode + ').';\r\n        var err = new FirebaseError(fullCode, message);\r\n        // Populate the Error object with message parts for programmatic\r\n        // accesses (e.g., e.file).\r\n        for (var prop in data) {\r\n            if (!data.hasOwnProperty(prop) || prop.slice(-1) === '_') {\r\n                continue;\r\n            }\r\n            err[prop] = data[prop];\r\n        }\r\n        return err;\r\n    };\r\n    return ErrorFactory;\r\n}());\n\n/**\r\n * Copyright 2017 Google Inc.\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\n/**\r\n * Evaluates a JSON string into a javascript object.\r\n *\r\n * @param {string} str A string containing JSON.\r\n * @return {*} The javascript object representing the specified JSON.\r\n */\r\nfunction jsonEval(str) {\r\n    return JSON.parse(str);\r\n}\r\n/**\r\n * Returns JSON representing a javascript object.\r\n * @param {*} data Javascript object to be stringified.\r\n * @return {string} The JSON contents of the object.\r\n */\r\nfunction stringify(data) {\r\n    return JSON.stringify(data);\r\n}\n\n/**\r\n * Copyright 2017 Google Inc.\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\n/**\r\n * Decodes a Firebase auth. token into constituent parts.\r\n *\r\n * Notes:\r\n * - May return with invalid / incomplete claims if there's no native base64 decoding support.\r\n * - Doesn't check if the token is actually valid.\r\n *\r\n * @param {?string} token\r\n * @return {{header: *, claims: *, data: *, signature: string}}\r\n */\r\nvar decode = function (token) {\r\n    var header = {}, claims = {}, data = {}, signature = '';\r\n    try {\r\n        var parts = token.split('.');\r\n        header = jsonEval(base64Decode(parts[0]) || '');\r\n        claims = jsonEval(base64Decode(parts[1]) || '');\r\n        signature = parts[2];\r\n        data = claims['d'] || {};\r\n        delete claims['d'];\r\n    }\r\n    catch (e) { }\r\n    return {\r\n        header: header,\r\n        claims: claims,\r\n        data: data,\r\n        signature: signature\r\n    };\r\n};\r\n/**\r\n * Decodes a Firebase auth. token and checks the validity of its time-based claims. Will return true if the\r\n * token is within the time window authorized by the 'nbf' (not-before) and 'iat' (issued-at) claims.\r\n *\r\n * Notes:\r\n * - May return a false negative if there's no native base64 decoding support.\r\n * - Doesn't check if the token is actually valid.\r\n *\r\n * @param {?string} token\r\n * @return {boolean}\r\n */\r\nvar isValidTimestamp = function (token) {\r\n    var claims = decode(token).claims, now = Math.floor(new Date().getTime() / 1000), validSince, validUntil;\r\n    if (typeof claims === 'object') {\r\n        if (claims.hasOwnProperty('nbf')) {\r\n            validSince = claims['nbf'];\r\n        }\r\n        else if (claims.hasOwnProperty('iat')) {\r\n            validSince = claims['iat'];\r\n        }\r\n        if (claims.hasOwnProperty('exp')) {\r\n            validUntil = claims['exp'];\r\n        }\r\n        else {\r\n            // token will expire after 24h by default\r\n            validUntil = validSince + 86400;\r\n        }\r\n    }\r\n    return (now && validSince && validUntil && now >= validSince && now <= validUntil);\r\n};\r\n/**\r\n * Decodes a Firebase auth. token and returns its issued at time if valid, null otherwise.\r\n *\r\n * Notes:\r\n * - May return null if there's no native base64 decoding support.\r\n * - Doesn't check if the token is actually valid.\r\n *\r\n * @param {?string} token\r\n * @return {?number}\r\n */\r\nvar issuedAtTime = function (token) {\r\n    var claims = decode(token).claims;\r\n    if (typeof claims === 'object' && claims.hasOwnProperty('iat')) {\r\n        return claims['iat'];\r\n    }\r\n    return null;\r\n};\r\n/**\r\n * Decodes a Firebase auth. token and checks the validity of its format. Expects a valid issued-at time.\r\n *\r\n * Notes:\r\n * - May return a false negative if there's no native base64 decoding support.\r\n * - Doesn't check if the token is actually valid.\r\n *\r\n * @param {?string} token\r\n * @return {boolean}\r\n */\r\nvar isValidFormat = function (token) {\r\n    var decoded = decode(token), claims = decoded.claims;\r\n    return !!claims && typeof claims === 'object' && claims.hasOwnProperty('iat');\r\n};\r\n/**\r\n * Attempts to peer into an auth token and determine if it's an admin auth token by looking at the claims portion.\r\n *\r\n * Notes:\r\n * - May return a false negative if there's no native base64 decoding support.\r\n * - Doesn't check if the token is actually valid.\r\n *\r\n * @param {?string} token\r\n * @return {boolean}\r\n */\r\nvar isAdmin = function (token) {\r\n    var claims = decode(token).claims;\r\n    return typeof claims === 'object' && claims['admin'] === true;\r\n};\n\n/**\r\n * Copyright 2017 Google Inc.\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\n// See http://www.devthought.com/2012/01/18/an-object-is-not-a-hash/\r\nvar contains = function (obj, key) {\r\n    return Object.prototype.hasOwnProperty.call(obj, key);\r\n};\r\nvar safeGet = function (obj, key) {\r\n    if (Object.prototype.hasOwnProperty.call(obj, key))\r\n        return obj[key];\r\n    // else return undefined.\r\n};\r\n/**\r\n * Enumerates the keys/values in an object, excluding keys defined on the prototype.\r\n *\r\n * @param {?Object.<K,V>} obj Object to enumerate.\r\n * @param {!function(K, V)} fn Function to call for each key and value.\r\n * @template K,V\r\n */\r\nvar forEach = function (obj, fn) {\r\n    for (var key in obj) {\r\n        if (Object.prototype.hasOwnProperty.call(obj, key)) {\r\n            fn(key, obj[key]);\r\n        }\r\n    }\r\n};\r\n/**\r\n * Copies all the (own) properties from one object to another.\r\n * @param {!Object} objTo\r\n * @param {!Object} objFrom\r\n * @return {!Object} objTo\r\n */\r\nvar extend = function (objTo, objFrom) {\r\n    forEach(objFrom, function (key, value) {\r\n        objTo[key] = value;\r\n    });\r\n    return objTo;\r\n};\r\n/**\r\n * Returns a clone of the specified object.\r\n * @param {!Object} obj\r\n * @return {!Object} cloned obj.\r\n */\r\nvar clone = function (obj) {\r\n    return extend({}, obj);\r\n};\r\n/**\r\n * Returns true if obj has typeof \"object\" and is not null.  Unlike goog.isObject(), does not return true\r\n * for functions.\r\n *\r\n * @param obj {*} A potential object.\r\n * @returns {boolean} True if it's an object.\r\n */\r\nvar isNonNullObject = function (obj) {\r\n    return typeof obj === 'object' && obj !== null;\r\n};\r\nvar isEmpty = function (obj) {\r\n    for (var key in obj) {\r\n        return false;\r\n    }\r\n    return true;\r\n};\r\nvar getCount = function (obj) {\r\n    var rv = 0;\r\n    for (var key in obj) {\r\n        rv++;\r\n    }\r\n    return rv;\r\n};\r\nvar map = function (obj, f, opt_obj) {\r\n    var res = {};\r\n    for (var key in obj) {\r\n        res[key] = f.call(opt_obj, obj[key], key, obj);\r\n    }\r\n    return res;\r\n};\r\nvar findKey = function (obj, fn, opt_this) {\r\n    for (var key in obj) {\r\n        if (fn.call(opt_this, obj[key], key, obj)) {\r\n            return key;\r\n        }\r\n    }\r\n    return undefined;\r\n};\r\nvar findValue = function (obj, fn, opt_this) {\r\n    var key = findKey(obj, fn, opt_this);\r\n    return key && obj[key];\r\n};\r\nvar getAnyKey = function (obj) {\r\n    for (var key in obj) {\r\n        return key;\r\n    }\r\n};\r\nvar getValues = function (obj) {\r\n    var res = [];\r\n    var i = 0;\r\n    for (var key in obj) {\r\n        res[i++] = obj[key];\r\n    }\r\n    return res;\r\n};\r\n/**\r\n * Tests whether every key/value pair in an object pass the test implemented\r\n * by the provided function\r\n *\r\n * @param {?Object.<K,V>} obj Object to test.\r\n * @param {!function(K, V)} fn Function to call for each key and value.\r\n * @template K,V\r\n */\r\nvar every = function (obj, fn) {\r\n    for (var key in obj) {\r\n        if (Object.prototype.hasOwnProperty.call(obj, key)) {\r\n            if (!fn(key, obj[key])) {\r\n                return false;\r\n            }\r\n        }\r\n    }\r\n    return true;\r\n};\n\n/**\r\n * Copyright 2017 Google Inc.\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\n/**\r\n * Returns a querystring-formatted string (e.g. &arg=val&arg2=val2) from a params\r\n * object (e.g. {arg: 'val', arg2: 'val2'})\r\n * Note: You must prepend it with ? when adding it to a URL.\r\n *\r\n * @param {!Object} querystringParams\r\n * @return {string}\r\n */\r\nvar querystring = function (querystringParams) {\r\n    var params = [];\r\n    forEach(querystringParams, function (key, value) {\r\n        if (Array.isArray(value)) {\r\n            value.forEach(function (arrayVal) {\r\n                params.push(encodeURIComponent(key) + '=' + encodeURIComponent(arrayVal));\r\n            });\r\n        }\r\n        else {\r\n            params.push(encodeURIComponent(key) + '=' + encodeURIComponent(value));\r\n        }\r\n    });\r\n    return params.length ? '&' + params.join('&') : '';\r\n};\r\n/**\r\n * Decodes a querystring (e.g. ?arg=val&arg2=val2) into a params object (e.g. {arg: 'val', arg2: 'val2'})\r\n *\r\n * @param {string} querystring\r\n * @return {!Object}\r\n */\r\nvar querystringDecode = function (querystring) {\r\n    var obj = {};\r\n    var tokens = querystring.replace(/^\\?/, '').split('&');\r\n    tokens.forEach(function (token) {\r\n        if (token) {\r\n            var key = token.split('=');\r\n            obj[key[0]] = key[1];\r\n        }\r\n    });\r\n    return obj;\r\n};\n\n/**\r\n * Copyright 2017 Google Inc.\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\n// Copyright 2011 The Closure Library Authors. 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\n * @fileoverview Abstract cryptographic hash interface.\r\n *\r\n * See Sha1 and Md5 for sample implementations.\r\n *\r\n */\r\n/**\r\n * Create a cryptographic hash instance.\r\n *\r\n * @constructor\r\n * @struct\r\n */\r\nvar Hash = /** @class */ (function () {\r\n    function Hash() {\r\n        /**\r\n         * The block size for the hasher.\r\n         * @type {number}\r\n         */\r\n        this.blockSize = -1;\r\n    }\r\n    return Hash;\r\n}());\n\n/**\r\n * Copyright 2017 Google Inc.\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\n/**\r\n * @fileoverview SHA-1 cryptographic hash.\r\n * Variable names follow the notation in FIPS PUB 180-3:\r\n * http://csrc.nist.gov/publications/fips/fips180-3/fips180-3_final.pdf.\r\n *\r\n * Usage:\r\n *   var sha1 = new sha1();\r\n *   sha1.update(bytes);\r\n *   var hash = sha1.digest();\r\n *\r\n * Performance:\r\n *   Chrome 23:   ~400 Mbit/s\r\n *   Firefox 16:  ~250 Mbit/s\r\n *\r\n */\r\n/**\r\n * SHA-1 cryptographic hash constructor.\r\n *\r\n * The properties declared here are discussed in the above algorithm document.\r\n * @constructor\r\n * @extends {Hash}\r\n * @final\r\n * @struct\r\n */\r\nvar Sha1 = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Sha1, _super);\r\n    function Sha1() {\r\n        var _this = _super.call(this) || this;\r\n        /**\r\n         * Holds the previous values of accumulated variables a-e in the compress_\r\n         * function.\r\n         * @type {!Array<number>}\r\n         * @private\r\n         */\r\n        _this.chain_ = [];\r\n        /**\r\n         * A buffer holding the partially computed hash result.\r\n         * @type {!Array<number>}\r\n         * @private\r\n         */\r\n        _this.buf_ = [];\r\n        /**\r\n         * An array of 80 bytes, each a part of the message to be hashed.  Referred to\r\n         * as the message schedule in the docs.\r\n         * @type {!Array<number>}\r\n         * @private\r\n         */\r\n        _this.W_ = [];\r\n        /**\r\n         * Contains data needed to pad messages less than 64 bytes.\r\n         * @type {!Array<number>}\r\n         * @private\r\n         */\r\n        _this.pad_ = [];\r\n        /**\r\n         * @private {number}\r\n         */\r\n        _this.inbuf_ = 0;\r\n        /**\r\n         * @private {number}\r\n         */\r\n        _this.total_ = 0;\r\n        _this.blockSize = 512 / 8;\r\n        _this.pad_[0] = 128;\r\n        for (var i = 1; i < _this.blockSize; ++i) {\r\n            _this.pad_[i] = 0;\r\n        }\r\n        _this.reset();\r\n        return _this;\r\n    }\r\n    Sha1.prototype.reset = function () {\r\n        this.chain_[0] = 0x67452301;\r\n        this.chain_[1] = 0xefcdab89;\r\n        this.chain_[2] = 0x98badcfe;\r\n        this.chain_[3] = 0x10325476;\r\n        this.chain_[4] = 0xc3d2e1f0;\r\n        this.inbuf_ = 0;\r\n        this.total_ = 0;\r\n    };\r\n    /**\r\n     * Internal compress helper function.\r\n     * @param {!Array<number>|!Uint8Array|string} buf Block to compress.\r\n     * @param {number=} opt_offset Offset of the block in the buffer.\r\n     * @private\r\n     */\r\n    Sha1.prototype.compress_ = function (buf, opt_offset) {\r\n        if (!opt_offset) {\r\n            opt_offset = 0;\r\n        }\r\n        var W = this.W_;\r\n        // get 16 big endian words\r\n        if (typeof buf === 'string') {\r\n            for (var i = 0; i < 16; i++) {\r\n                // TODO(user): [bug 8140122] Recent versions of Safari for Mac OS and iOS\r\n                // have a bug that turns the post-increment ++ operator into pre-increment\r\n                // during JIT compilation.  We have code that depends heavily on SHA-1 for\r\n                // correctness and which is affected by this bug, so I've removed all uses\r\n                // of post-increment ++ in which the result value is used.  We can revert\r\n                // this change once the Safari bug\r\n                // (https://bugs.webkit.org/show_bug.cgi?id=109036) has been fixed and\r\n                // most clients have been updated.\r\n                W[i] =\r\n                    (buf.charCodeAt(opt_offset) << 24) |\r\n                        (buf.charCodeAt(opt_offset + 1) << 16) |\r\n                        (buf.charCodeAt(opt_offset + 2) << 8) |\r\n                        buf.charCodeAt(opt_offset + 3);\r\n                opt_offset += 4;\r\n            }\r\n        }\r\n        else {\r\n            for (var i = 0; i < 16; i++) {\r\n                W[i] =\r\n                    (buf[opt_offset] << 24) |\r\n                        (buf[opt_offset + 1] << 16) |\r\n                        (buf[opt_offset + 2] << 8) |\r\n                        buf[opt_offset + 3];\r\n                opt_offset += 4;\r\n            }\r\n        }\r\n        // expand to 80 words\r\n        for (var i = 16; i < 80; i++) {\r\n            var t = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16];\r\n            W[i] = ((t << 1) | (t >>> 31)) & 0xffffffff;\r\n        }\r\n        var a = this.chain_[0];\r\n        var b = this.chain_[1];\r\n        var c = this.chain_[2];\r\n        var d = this.chain_[3];\r\n        var e = this.chain_[4];\r\n        var f, k;\r\n        // TODO(user): Try to unroll this loop to speed up the computation.\r\n        for (var i = 0; i < 80; i++) {\r\n            if (i < 40) {\r\n                if (i < 20) {\r\n                    f = d ^ (b & (c ^ d));\r\n                    k = 0x5a827999;\r\n                }\r\n                else {\r\n                    f = b ^ c ^ d;\r\n                    k = 0x6ed9eba1;\r\n                }\r\n            }\r\n            else {\r\n                if (i < 60) {\r\n                    f = (b & c) | (d & (b | c));\r\n                    k = 0x8f1bbcdc;\r\n                }\r\n                else {\r\n                    f = b ^ c ^ d;\r\n                    k = 0xca62c1d6;\r\n                }\r\n            }\r\n            var t = (((a << 5) | (a >>> 27)) + f + e + k + W[i]) & 0xffffffff;\r\n            e = d;\r\n            d = c;\r\n            c = ((b << 30) | (b >>> 2)) & 0xffffffff;\r\n            b = a;\r\n            a = t;\r\n        }\r\n        this.chain_[0] = (this.chain_[0] + a) & 0xffffffff;\r\n        this.chain_[1] = (this.chain_[1] + b) & 0xffffffff;\r\n        this.chain_[2] = (this.chain_[2] + c) & 0xffffffff;\r\n        this.chain_[3] = (this.chain_[3] + d) & 0xffffffff;\r\n        this.chain_[4] = (this.chain_[4] + e) & 0xffffffff;\r\n    };\r\n    Sha1.prototype.update = function (bytes, opt_length) {\r\n        // TODO(johnlenz): tighten the function signature and remove this check\r\n        if (bytes == null) {\r\n            return;\r\n        }\r\n        if (opt_length === undefined) {\r\n            opt_length = bytes.length;\r\n        }\r\n        var lengthMinusBlock = opt_length - this.blockSize;\r\n        var n = 0;\r\n        // Using local instead of member variables gives ~5% speedup on Firefox 16.\r\n        var buf = this.buf_;\r\n        var inbuf = this.inbuf_;\r\n        // The outer while loop should execute at most twice.\r\n        while (n < opt_length) {\r\n            // When we have no data in the block to top up, we can directly process the\r\n            // input buffer (assuming it contains sufficient data). This gives ~25%\r\n            // speedup on Chrome 23 and ~15% speedup on Firefox 16, but requires that\r\n            // the data is provided in large chunks (or in multiples of 64 bytes).\r\n            if (inbuf == 0) {\r\n                while (n <= lengthMinusBlock) {\r\n                    this.compress_(bytes, n);\r\n                    n += this.blockSize;\r\n                }\r\n            }\r\n            if (typeof bytes === 'string') {\r\n                while (n < opt_length) {\r\n                    buf[inbuf] = bytes.charCodeAt(n);\r\n                    ++inbuf;\r\n                    ++n;\r\n                    if (inbuf == this.blockSize) {\r\n                        this.compress_(buf);\r\n                        inbuf = 0;\r\n                        // Jump to the outer loop so we use the full-block optimization.\r\n                        break;\r\n                    }\r\n                }\r\n            }\r\n            else {\r\n                while (n < opt_length) {\r\n                    buf[inbuf] = bytes[n];\r\n                    ++inbuf;\r\n                    ++n;\r\n                    if (inbuf == this.blockSize) {\r\n                        this.compress_(buf);\r\n                        inbuf = 0;\r\n                        // Jump to the outer loop so we use the full-block optimization.\r\n                        break;\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        this.inbuf_ = inbuf;\r\n        this.total_ += opt_length;\r\n    };\r\n    /** @override */\r\n    Sha1.prototype.digest = function () {\r\n        var digest = [];\r\n        var totalBits = this.total_ * 8;\r\n        // Add pad 0x80 0x00*.\r\n        if (this.inbuf_ < 56) {\r\n            this.update(this.pad_, 56 - this.inbuf_);\r\n        }\r\n        else {\r\n            this.update(this.pad_, this.blockSize - (this.inbuf_ - 56));\r\n        }\r\n        // Add # bits.\r\n        for (var i = this.blockSize - 1; i >= 56; i--) {\r\n            this.buf_[i] = totalBits & 255;\r\n            totalBits /= 256; // Don't use bit-shifting here!\r\n        }\r\n        this.compress_(this.buf_);\r\n        var n = 0;\r\n        for (var i = 0; i < 5; i++) {\r\n            for (var j = 24; j >= 0; j -= 8) {\r\n                digest[n] = (this.chain_[i] >> j) & 255;\r\n                ++n;\r\n            }\r\n        }\r\n        return digest;\r\n    };\r\n    return Sha1;\r\n}(Hash));\n\n/**\r\n * Helper to make a Subscribe function (just like Promise helps make a\r\n * Thenable).\r\n *\r\n * @param executor Function which can make calls to a single Observer\r\n *     as a proxy.\r\n * @param onNoObservers Callback when count of Observers goes to zero.\r\n */\r\nfunction createSubscribe(executor, onNoObservers) {\r\n    var proxy = new ObserverProxy(executor, onNoObservers);\r\n    return proxy.subscribe.bind(proxy);\r\n}\r\n/**\r\n * Implement fan-out for any number of Observers attached via a subscribe\r\n * function.\r\n */\r\nvar ObserverProxy = /** @class */ (function () {\r\n    /**\r\n     * @param executor Function which can make calls to a single Observer\r\n     *     as a proxy.\r\n     * @param onNoObservers Callback when count of Observers goes to zero.\r\n     */\r\n    function ObserverProxy(executor, onNoObservers) {\r\n        var _this = this;\r\n        this.observers = [];\r\n        this.unsubscribes = [];\r\n        this.observerCount = 0;\r\n        // Micro-task scheduling by calling task.then().\r\n        this.task = Promise.resolve();\r\n        this.finalized = false;\r\n        this.onNoObservers = onNoObservers;\r\n        // Call the executor asynchronously so subscribers that are called\r\n        // synchronously after the creation of the subscribe function\r\n        // can still receive the very first value generated in the executor.\r\n        this.task\r\n            .then(function () {\r\n            executor(_this);\r\n        })\r\n            .catch(function (e) {\r\n            _this.error(e);\r\n        });\r\n    }\r\n    ObserverProxy.prototype.next = function (value) {\r\n        this.forEachObserver(function (observer) {\r\n            observer.next(value);\r\n        });\r\n    };\r\n    ObserverProxy.prototype.error = function (error) {\r\n        this.forEachObserver(function (observer) {\r\n            observer.error(error);\r\n        });\r\n        this.close(error);\r\n    };\r\n    ObserverProxy.prototype.complete = function () {\r\n        this.forEachObserver(function (observer) {\r\n            observer.complete();\r\n        });\r\n        this.close();\r\n    };\r\n    /**\r\n     * Subscribe function that can be used to add an Observer to the fan-out list.\r\n     *\r\n     * - We require that no event is sent to a subscriber sychronously to their\r\n     *   call to subscribe().\r\n     */\r\n    ObserverProxy.prototype.subscribe = function (nextOrObserver, error, complete) {\r\n        var _this = this;\r\n        var observer;\r\n        if (nextOrObserver === undefined &&\r\n            error === undefined &&\r\n            complete === undefined) {\r\n            throw new Error('Missing Observer.');\r\n        }\r\n        // Assemble an Observer object when passed as callback functions.\r\n        if (implementsAnyMethods(nextOrObserver, ['next', 'error', 'complete'])) {\r\n            observer = nextOrObserver;\r\n        }\r\n        else {\r\n            observer = {\r\n                next: nextOrObserver,\r\n                error: error,\r\n                complete: complete\r\n            };\r\n        }\r\n        if (observer.next === undefined) {\r\n            observer.next = noop;\r\n        }\r\n        if (observer.error === undefined) {\r\n            observer.error = noop;\r\n        }\r\n        if (observer.complete === undefined) {\r\n            observer.complete = noop;\r\n        }\r\n        var unsub = this.unsubscribeOne.bind(this, this.observers.length);\r\n        // Attempt to subscribe to a terminated Observable - we\r\n        // just respond to the Observer with the final error or complete\r\n        // event.\r\n        if (this.finalized) {\r\n            this.task.then(function () {\r\n                try {\r\n                    if (_this.finalError) {\r\n                        observer.error(_this.finalError);\r\n                    }\r\n                    else {\r\n                        observer.complete();\r\n                    }\r\n                }\r\n                catch (e) {\r\n                    // nothing\r\n                }\r\n                return;\r\n            });\r\n        }\r\n        this.observers.push(observer);\r\n        return unsub;\r\n    };\r\n    // Unsubscribe is synchronous - we guarantee that no events are sent to\r\n    // any unsubscribed Observer.\r\n    ObserverProxy.prototype.unsubscribeOne = function (i) {\r\n        if (this.observers === undefined || this.observers[i] === undefined) {\r\n            return;\r\n        }\r\n        delete this.observers[i];\r\n        this.observerCount -= 1;\r\n        if (this.observerCount === 0 && this.onNoObservers !== undefined) {\r\n            this.onNoObservers(this);\r\n        }\r\n    };\r\n    ObserverProxy.prototype.forEachObserver = function (fn) {\r\n        if (this.finalized) {\r\n            // Already closed by previous event....just eat the additional values.\r\n            return;\r\n        }\r\n        // Since sendOne calls asynchronously - there is no chance that\r\n        // this.observers will become undefined.\r\n        for (var i = 0; i < this.observers.length; i++) {\r\n            this.sendOne(i, fn);\r\n        }\r\n    };\r\n    // Call the Observer via one of it's callback function. We are careful to\r\n    // confirm that the observe has not been unsubscribed since this asynchronous\r\n    // function had been queued.\r\n    ObserverProxy.prototype.sendOne = function (i, fn) {\r\n        var _this = this;\r\n        // Execute the callback asynchronously\r\n        this.task.then(function () {\r\n            if (_this.observers !== undefined && _this.observers[i] !== undefined) {\r\n                try {\r\n                    fn(_this.observers[i]);\r\n                }\r\n                catch (e) {\r\n                    // Ignore exceptions raised in Observers or missing methods of an\r\n                    // Observer.\r\n                    // Log error to console. b/31404806\r\n                    if (typeof console !== 'undefined' && console.error) {\r\n                        console.error(e);\r\n                    }\r\n                }\r\n            }\r\n        });\r\n    };\r\n    ObserverProxy.prototype.close = function (err) {\r\n        var _this = this;\r\n        if (this.finalized) {\r\n            return;\r\n        }\r\n        this.finalized = true;\r\n        if (err !== undefined) {\r\n            this.finalError = err;\r\n        }\r\n        // Proxy is no longer needed - garbage collect references\r\n        this.task.then(function () {\r\n            _this.observers = undefined;\r\n            _this.onNoObservers = undefined;\r\n        });\r\n    };\r\n    return ObserverProxy;\r\n}());\r\n/** Turn synchronous function into one called asynchronously. */\r\nfunction async(fn, onError) {\r\n    return function () {\r\n        var args = [];\r\n        for (var _i = 0; _i < arguments.length; _i++) {\r\n            args[_i] = arguments[_i];\r\n        }\r\n        Promise.resolve(true)\r\n            .then(function () {\r\n            fn.apply(void 0, args);\r\n        })\r\n            .catch(function (error) {\r\n            if (onError) {\r\n                onError(error);\r\n            }\r\n        });\r\n    };\r\n}\r\n/**\r\n * Return true if the object passed in implements any of the named methods.\r\n */\r\nfunction implementsAnyMethods(obj, methods) {\r\n    if (typeof obj !== 'object' || obj === null) {\r\n        return false;\r\n    }\r\n    for (var _i = 0, methods_1 = methods; _i < methods_1.length; _i++) {\r\n        var method = methods_1[_i];\r\n        if (method in obj && typeof obj[method] === 'function') {\r\n            return true;\r\n        }\r\n    }\r\n    return false;\r\n}\r\nfunction noop() {\r\n    // do nothing\r\n}\n\n/**\r\n * Copyright 2017 Google Inc.\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\n/**\r\n * Check to make sure the appropriate number of arguments are provided for a public function.\r\n * Throws an error if it fails.\r\n *\r\n * @param {!string} fnName The function name\r\n * @param {!number} minCount The minimum number of arguments to allow for the function call\r\n * @param {!number} maxCount The maximum number of argument to allow for the function call\r\n * @param {!number} argCount The actual number of arguments provided.\r\n */\r\nvar validateArgCount = function (fnName, minCount, maxCount, argCount) {\r\n    var argError;\r\n    if (argCount < minCount) {\r\n        argError = 'at least ' + minCount;\r\n    }\r\n    else if (argCount > maxCount) {\r\n        argError = maxCount === 0 ? 'none' : 'no more than ' + maxCount;\r\n    }\r\n    if (argError) {\r\n        var error = fnName +\r\n            ' failed: Was called with ' +\r\n            argCount +\r\n            (argCount === 1 ? ' argument.' : ' arguments.') +\r\n            ' Expects ' +\r\n            argError +\r\n            '.';\r\n        throw new Error(error);\r\n    }\r\n};\r\n/**\r\n * Generates a string to prefix an error message about failed argument validation\r\n *\r\n * @param {!string} fnName The function name\r\n * @param {!number} argumentNumber The index of the argument\r\n * @param {boolean} optional Whether or not the argument is optional\r\n * @return {!string} The prefix to add to the error thrown for validation.\r\n */\r\nfunction errorPrefix(fnName, argumentNumber, optional) {\r\n    var argName = '';\r\n    switch (argumentNumber) {\r\n        case 1:\r\n            argName = optional ? 'first' : 'First';\r\n            break;\r\n        case 2:\r\n            argName = optional ? 'second' : 'Second';\r\n            break;\r\n        case 3:\r\n            argName = optional ? 'third' : 'Third';\r\n            break;\r\n        case 4:\r\n            argName = optional ? 'fourth' : 'Fourth';\r\n            break;\r\n        default:\r\n            throw new Error('errorPrefix called with argumentNumber > 4.  Need to update it?');\r\n    }\r\n    var error = fnName + ' failed: ';\r\n    error += argName + ' argument ';\r\n    return error;\r\n}\r\n/**\r\n * @param {!string} fnName\r\n * @param {!number} argumentNumber\r\n * @param {!string} namespace\r\n * @param {boolean} optional\r\n */\r\nfunction validateNamespace(fnName, argumentNumber, namespace, optional) {\r\n    if (optional && !namespace)\r\n        return;\r\n    if (typeof namespace !== 'string') {\r\n        //TODO: I should do more validation here. We only allow certain chars in namespaces.\r\n        throw new Error(errorPrefix(fnName, argumentNumber, optional) +\r\n            'must be a valid firebase namespace.');\r\n    }\r\n}\r\nfunction validateCallback(fnName, argumentNumber, callback, optional) {\r\n    if (optional && !callback)\r\n        return;\r\n    if (typeof callback !== 'function')\r\n        throw new Error(errorPrefix(fnName, argumentNumber, optional) +\r\n            'must be a valid function.');\r\n}\r\nfunction validateContextObject(fnName, argumentNumber, context, optional) {\r\n    if (optional && !context)\r\n        return;\r\n    if (typeof context !== 'object' || context === null)\r\n        throw new Error(errorPrefix(fnName, argumentNumber, optional) +\r\n            'must be a valid context object.');\r\n}\n\n/**\r\n * Copyright 2017 Google Inc.\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\n// Code originally came from goog.crypt.stringToUtf8ByteArray, but for some reason they\r\n// automatically replaced '\\r\\n' with '\\n', and they didn't handle surrogate pairs,\r\n// so it's been modified.\r\n// Note that not all Unicode characters appear as single characters in JavaScript strings.\r\n// fromCharCode returns the UTF-16 encoding of a character - so some Unicode characters\r\n// use 2 characters in Javascript.  All 4-byte UTF-8 characters begin with a first\r\n// character in the range 0xD800 - 0xDBFF (the first character of a so-called surrogate\r\n// pair).\r\n// See http://www.ecma-international.org/ecma-262/5.1/#sec-15.1.3\r\n/**\r\n * @param {string} str\r\n * @return {Array}\r\n */\r\nvar stringToByteArray$1 = function (str) {\r\n    var out = [], p = 0;\r\n    for (var i = 0; i < str.length; i++) {\r\n        var c = str.charCodeAt(i);\r\n        // Is this the lead surrogate in a surrogate pair?\r\n        if (c >= 0xd800 && c <= 0xdbff) {\r\n            var high = c - 0xd800; // the high 10 bits.\r\n            i++;\r\n            assert(i < str.length, 'Surrogate pair missing trail surrogate.');\r\n            var low = str.charCodeAt(i) - 0xdc00; // the low 10 bits.\r\n            c = 0x10000 + (high << 10) + low;\r\n        }\r\n        if (c < 128) {\r\n            out[p++] = c;\r\n        }\r\n        else if (c < 2048) {\r\n            out[p++] = (c >> 6) | 192;\r\n            out[p++] = (c & 63) | 128;\r\n        }\r\n        else if (c < 65536) {\r\n            out[p++] = (c >> 12) | 224;\r\n            out[p++] = ((c >> 6) & 63) | 128;\r\n            out[p++] = (c & 63) | 128;\r\n        }\r\n        else {\r\n            out[p++] = (c >> 18) | 240;\r\n            out[p++] = ((c >> 12) & 63) | 128;\r\n            out[p++] = ((c >> 6) & 63) | 128;\r\n            out[p++] = (c & 63) | 128;\r\n        }\r\n    }\r\n    return out;\r\n};\r\n/**\r\n * Calculate length without actually converting; useful for doing cheaper validation.\r\n * @param {string} str\r\n * @return {number}\r\n */\r\nvar stringLength = function (str) {\r\n    var p = 0;\r\n    for (var i = 0; i < str.length; i++) {\r\n        var c = str.charCodeAt(i);\r\n        if (c < 128) {\r\n            p++;\r\n        }\r\n        else if (c < 2048) {\r\n            p += 2;\r\n        }\r\n        else if (c >= 0xd800 && c <= 0xdbff) {\r\n            // Lead surrogate of a surrogate pair.  The pair together will take 4 bytes to represent.\r\n            p += 4;\r\n            i++; // skip trail surrogate.\r\n        }\r\n        else {\r\n            p += 3;\r\n        }\r\n    }\r\n    return p;\r\n};\n\n/**\r\n * Copyright 2017 Google Inc.\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 */\n\nexports.assert = assert;\nexports.assertionError = assertionError;\nexports.base64 = base64;\nexports.base64Decode = base64Decode;\nexports.base64Encode = base64Encode;\nexports.CONSTANTS = CONSTANTS;\nexports.deepCopy = deepCopy;\nexports.deepExtend = deepExtend;\nexports.patchProperty = patchProperty;\nexports.Deferred = Deferred;\nexports.getUA = getUA;\nexports.isMobileCordova = isMobileCordova;\nexports.isNodeSdk = isNodeSdk;\nexports.isReactNative = isReactNative;\nexports.ErrorFactory = ErrorFactory;\nexports.FirebaseError = FirebaseError;\nexports.patchCapture = patchCapture;\nexports.jsonEval = jsonEval;\nexports.stringify = stringify;\nexports.decode = decode;\nexports.isAdmin = isAdmin;\nexports.issuedAtTime = issuedAtTime;\nexports.isValidFormat = isValidFormat;\nexports.isValidTimestamp = isValidTimestamp;\nexports.clone = clone;\nexports.contains = contains;\nexports.every = every;\nexports.extend = extend;\nexports.findKey = findKey;\nexports.findValue = findValue;\nexports.forEach = forEach;\nexports.getAnyKey = getAnyKey;\nexports.getCount = getCount;\nexports.getValues = getValues;\nexports.isEmpty = isEmpty;\nexports.isNonNullObject = isNonNullObject;\nexports.map = map;\nexports.safeGet = safeGet;\nexports.querystring = querystring;\nexports.querystringDecode = querystringDecode;\nexports.Sha1 = Sha1;\nexports.async = async;\nexports.createSubscribe = createSubscribe;\nexports.errorPrefix = errorPrefix;\nexports.validateArgCount = validateArgCount;\nexports.validateCallback = validateCallback;\nexports.validateContextObject = validateContextObject;\nexports.validateNamespace = validateNamespace;\nexports.stringLength = stringLength;\nexports.stringToByteArray = stringToByteArray$1;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar util = require('@firebase/util');\n\n/**\r\n * Copyright 2017 Google Inc.\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\nvar contains = function (obj, key) {\r\n    return Object.prototype.hasOwnProperty.call(obj, key);\r\n};\r\nvar DEFAULT_ENTRY_NAME = '[DEFAULT]';\r\n// An array to capture listeners before the true auth functions\r\n// exist\r\nvar tokenListeners = [];\r\n/**\r\n * Global context object for a collection of services using\r\n * a shared authentication state.\r\n */\r\nvar FirebaseAppImpl = /** @class */ (function () {\r\n    function FirebaseAppImpl(options, config, firebase_) {\r\n        this.firebase_ = firebase_;\r\n        this.isDeleted_ = false;\r\n        this.services_ = {};\r\n        this.name_ = config.name;\r\n        this._automaticDataCollectionEnabled =\r\n            config.automaticDataCollectionEnabled || false;\r\n        this.options_ = util.deepCopy(options);\r\n        this.INTERNAL = {\r\n            getUid: function () { return null; },\r\n            getToken: function () { return Promise.resolve(null); },\r\n            addAuthTokenListener: function (callback) {\r\n                tokenListeners.push(callback);\r\n                // Make sure callback is called, asynchronously, in the absence of the auth module\r\n                setTimeout(function () { return callback(null); }, 0);\r\n            },\r\n            removeAuthTokenListener: function (callback) {\r\n                tokenListeners = tokenListeners.filter(function (listener) { return listener !== callback; });\r\n            }\r\n        };\r\n    }\r\n    Object.defineProperty(FirebaseAppImpl.prototype, \"automaticDataCollectionEnabled\", {\r\n        get: function () {\r\n            this.checkDestroyed_();\r\n            return this._automaticDataCollectionEnabled;\r\n        },\r\n        set: function (val) {\r\n            this.checkDestroyed_();\r\n            this._automaticDataCollectionEnabled = val;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(FirebaseAppImpl.prototype, \"name\", {\r\n        get: function () {\r\n            this.checkDestroyed_();\r\n            return this.name_;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(FirebaseAppImpl.prototype, \"options\", {\r\n        get: function () {\r\n            this.checkDestroyed_();\r\n            return this.options_;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    FirebaseAppImpl.prototype.delete = function () {\r\n        var _this = this;\r\n        return new Promise(function (resolve) {\r\n            _this.checkDestroyed_();\r\n            resolve();\r\n        })\r\n            .then(function () {\r\n            _this.firebase_.INTERNAL.removeApp(_this.name_);\r\n            var services = [];\r\n            Object.keys(_this.services_).forEach(function (serviceKey) {\r\n                Object.keys(_this.services_[serviceKey]).forEach(function (instanceKey) {\r\n                    services.push(_this.services_[serviceKey][instanceKey]);\r\n                });\r\n            });\r\n            return Promise.all(services.map(function (service) {\r\n                return service.INTERNAL.delete();\r\n            }));\r\n        })\r\n            .then(function () {\r\n            _this.isDeleted_ = true;\r\n            _this.services_ = {};\r\n        });\r\n    };\r\n    /**\r\n     * Return a service instance associated with this app (creating it\r\n     * on demand), identified by the passed instanceIdentifier.\r\n     *\r\n     * NOTE: Currently storage is the only one that is leveraging this\r\n     * functionality. They invoke it by calling:\r\n     *\r\n     * ```javascript\r\n     * firebase.app().storage('STORAGE BUCKET ID')\r\n     * ```\r\n     *\r\n     * The service name is passed to this already\r\n     * @internal\r\n     */\r\n    FirebaseAppImpl.prototype._getService = function (name, instanceIdentifier) {\r\n        if (instanceIdentifier === void 0) { instanceIdentifier = DEFAULT_ENTRY_NAME; }\r\n        this.checkDestroyed_();\r\n        if (!this.services_[name]) {\r\n            this.services_[name] = {};\r\n        }\r\n        if (!this.services_[name][instanceIdentifier]) {\r\n            /**\r\n             * If a custom instance has been defined (i.e. not '[DEFAULT]')\r\n             * then we will pass that instance on, otherwise we pass `null`\r\n             */\r\n            var instanceSpecifier = instanceIdentifier !== DEFAULT_ENTRY_NAME\r\n                ? instanceIdentifier\r\n                : undefined;\r\n            var service = this.firebase_.INTERNAL.factories[name](this, this.extendApp.bind(this), instanceSpecifier);\r\n            this.services_[name][instanceIdentifier] = service;\r\n        }\r\n        return this.services_[name][instanceIdentifier];\r\n    };\r\n    /**\r\n     * Callback function used to extend an App instance at the time\r\n     * of service instance creation.\r\n     */\r\n    FirebaseAppImpl.prototype.extendApp = function (props) {\r\n        var _this = this;\r\n        // Copy the object onto the FirebaseAppImpl prototype\r\n        util.deepExtend(this, props);\r\n        /**\r\n         * If the app has overwritten the addAuthTokenListener stub, forward\r\n         * the active token listeners on to the true fxn.\r\n         *\r\n         * TODO: This function is required due to our current module\r\n         * structure. Once we are able to rely strictly upon a single module\r\n         * implementation, this code should be refactored and Auth should\r\n         * provide these stubs and the upgrade logic\r\n         */\r\n        if (props.INTERNAL && props.INTERNAL.addAuthTokenListener) {\r\n            tokenListeners.forEach(function (listener) {\r\n                _this.INTERNAL.addAuthTokenListener(listener);\r\n            });\r\n            tokenListeners = [];\r\n        }\r\n    };\r\n    /**\r\n     * This function will throw an Error if the App has already been deleted -\r\n     * use before performing API actions on the App.\r\n     */\r\n    FirebaseAppImpl.prototype.checkDestroyed_ = function () {\r\n        if (this.isDeleted_) {\r\n            error('app-deleted', { name: this.name_ });\r\n        }\r\n    };\r\n    return FirebaseAppImpl;\r\n}());\r\n// Prevent dead-code elimination of these methods w/o invalid property\r\n// copying.\r\n(FirebaseAppImpl.prototype.name && FirebaseAppImpl.prototype.options) ||\r\n    FirebaseAppImpl.prototype.delete ||\r\n    console.log('dc');\r\n/**\r\n * Return a firebase namespace object.\r\n *\r\n * In production, this will be called exactly once and the result\r\n * assigned to the 'firebase' global.  It may be called multiple times\r\n * in unit tests.\r\n */\r\nfunction createFirebaseNamespace() {\r\n    var apps_ = {};\r\n    var factories = {};\r\n    var appHooks = {};\r\n    // A namespace is a plain JavaScript Object.\r\n    var namespace = {\r\n        // Hack to prevent Babel from modifying the object returned\r\n        // as the firebase namespace.\r\n        __esModule: true,\r\n        initializeApp: initializeApp,\r\n        app: app,\r\n        apps: null,\r\n        Promise: Promise,\r\n        SDK_VERSION: '5.5.0',\r\n        INTERNAL: {\r\n            registerService: registerService,\r\n            createFirebaseNamespace: createFirebaseNamespace,\r\n            extendNamespace: extendNamespace,\r\n            createSubscribe: util.createSubscribe,\r\n            ErrorFactory: util.ErrorFactory,\r\n            removeApp: removeApp,\r\n            factories: factories,\r\n            useAsService: useAsService,\r\n            Promise: Promise,\r\n            deepExtend: util.deepExtend\r\n        }\r\n    };\r\n    // Inject a circular default export to allow Babel users who were previously\r\n    // using:\r\n    //\r\n    //   import firebase from 'firebase';\r\n    //   which becomes: var firebase = require('firebase').default;\r\n    //\r\n    // instead of\r\n    //\r\n    //   import * as firebase from 'firebase';\r\n    //   which becomes: var firebase = require('firebase');\r\n    util.patchProperty(namespace, 'default', namespace);\r\n    // firebase.apps is a read-only getter.\r\n    Object.defineProperty(namespace, 'apps', {\r\n        get: getApps\r\n    });\r\n    /**\r\n     * Called by App.delete() - but before any services associated with the App\r\n     * are deleted.\r\n     */\r\n    function removeApp(name) {\r\n        var app = apps_[name];\r\n        callAppHooks(app, 'delete');\r\n        delete apps_[name];\r\n    }\r\n    /**\r\n     * Get the App object for a given name (or DEFAULT).\r\n     */\r\n    function app(name) {\r\n        name = name || DEFAULT_ENTRY_NAME;\r\n        if (!contains(apps_, name)) {\r\n            error('no-app', { name: name });\r\n        }\r\n        return apps_[name];\r\n    }\r\n    util.patchProperty(app, 'App', FirebaseAppImpl);\r\n    function initializeApp(options, rawConfig) {\r\n        if (rawConfig === void 0) { rawConfig = {}; }\r\n        if (typeof rawConfig !== 'object' || rawConfig === null) {\r\n            var name_1 = rawConfig;\r\n            rawConfig = { name: name_1 };\r\n        }\r\n        var config = rawConfig;\r\n        if (config.name === undefined) {\r\n            config.name = DEFAULT_ENTRY_NAME;\r\n        }\r\n        var name = config.name;\r\n        if (typeof name !== 'string' || !name) {\r\n            error('bad-app-name', { name: name + '' });\r\n        }\r\n        if (contains(apps_, name)) {\r\n            error('duplicate-app', { name: name });\r\n        }\r\n        var app = new FirebaseAppImpl(options, config, namespace);\r\n        apps_[name] = app;\r\n        callAppHooks(app, 'create');\r\n        return app;\r\n    }\r\n    /*\r\n     * Return an array of all the non-deleted FirebaseApps.\r\n     */\r\n    function getApps() {\r\n        // Make a copy so caller cannot mutate the apps list.\r\n        return Object.keys(apps_).map(function (name) { return apps_[name]; });\r\n    }\r\n    /*\r\n     * Register a Firebase Service.\r\n     *\r\n     * firebase.INTERNAL.registerService()\r\n     *\r\n     * TODO: Implement serviceProperties.\r\n     */\r\n    function registerService(name, createService, serviceProperties, appHook, allowMultipleInstances) {\r\n        // Cannot re-register a service that already exists\r\n        if (factories[name]) {\r\n            error('duplicate-service', { name: name });\r\n        }\r\n        // Capture the service factory for later service instantiation\r\n        factories[name] = createService;\r\n        // Capture the appHook, if passed\r\n        if (appHook) {\r\n            appHooks[name] = appHook;\r\n            // Run the **new** app hook on all existing apps\r\n            getApps().forEach(function (app) {\r\n                appHook('create', app);\r\n            });\r\n        }\r\n        // The Service namespace is an accessor function ...\r\n        var serviceNamespace = function (appArg) {\r\n            if (appArg === void 0) { appArg = app(); }\r\n            if (typeof appArg[name] !== 'function') {\r\n                // Invalid argument.\r\n                // This happens in the following case: firebase.storage('gs:/')\r\n                error('invalid-app-argument', { name: name });\r\n            }\r\n            // Forward service instance lookup to the FirebaseApp.\r\n            return appArg[name]();\r\n        };\r\n        // ... and a container for service-level properties.\r\n        if (serviceProperties !== undefined) {\r\n            util.deepExtend(serviceNamespace, serviceProperties);\r\n        }\r\n        // Monkey-patch the serviceNamespace onto the firebase namespace\r\n        namespace[name] = serviceNamespace;\r\n        // Patch the FirebaseAppImpl prototype\r\n        FirebaseAppImpl.prototype[name] = function () {\r\n            var args = [];\r\n            for (var _i = 0; _i < arguments.length; _i++) {\r\n                args[_i] = arguments[_i];\r\n            }\r\n            var serviceFxn = this._getService.bind(this, name);\r\n            return serviceFxn.apply(this, allowMultipleInstances ? args : []);\r\n        };\r\n        return serviceNamespace;\r\n    }\r\n    /**\r\n     * Patch the top-level firebase namespace with additional properties.\r\n     *\r\n     * firebase.INTERNAL.extendNamespace()\r\n     */\r\n    function extendNamespace(props) {\r\n        util.deepExtend(namespace, props);\r\n    }\r\n    function callAppHooks(app, eventName) {\r\n        Object.keys(factories).forEach(function (serviceName) {\r\n            // Ignore virtual services\r\n            var factoryName = useAsService(app, serviceName);\r\n            if (factoryName === null) {\r\n                return;\r\n            }\r\n            if (appHooks[factoryName]) {\r\n                appHooks[factoryName](eventName, app);\r\n            }\r\n        });\r\n    }\r\n    // Map the requested service to a registered service name\r\n    // (used to map auth to serverAuth service when needed).\r\n    function useAsService(app, name) {\r\n        if (name === 'serverAuth') {\r\n            return null;\r\n        }\r\n        var useService = name;\r\n        var options = app.options;\r\n        return useService;\r\n    }\r\n    return namespace;\r\n}\r\nfunction error(code, args) {\r\n    throw appErrors.create(code, args);\r\n}\r\n// TypeScript does not support non-string indexes!\r\n// let errors: {[code: AppError: string} = {\r\nvar errors = {\r\n    'no-app': \"No Firebase App '{$name}' has been created - \" +\r\n        'call Firebase App.initializeApp()',\r\n    'bad-app-name': \"Illegal App name: '{$name}\",\r\n    'duplicate-app': \"Firebase App named '{$name}' already exists\",\r\n    'app-deleted': \"Firebase App named '{$name}' already deleted\",\r\n    'duplicate-service': \"Firebase service named '{$name}' already registered\",\r\n    'sa-not-supported': 'Initializing the Firebase SDK with a service ' +\r\n        'account is only allowed in a Node.js environment. On client ' +\r\n        'devices, you should instead initialize the SDK with an api key and ' +\r\n        'auth domain',\r\n    'invalid-app-argument': 'firebase.{$name}() takes either no argument or a ' +\r\n        'Firebase App instance.'\r\n};\r\nvar appErrors = new util.ErrorFactory('app', 'Firebase', errors);\n\n/**\r\n * Copyright 2017 Google Inc.\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\nvar firebase = createFirebaseNamespace();\n\nexports.firebase = firebase;\nexports.default = firebase;\n","'use strict';\n\nfunction _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }\n\nrequire('@firebase/polyfill');\nvar firebase = _interopDefault(require('@firebase/app'));\n\n/**\r\n * Copyright 2018 Google Inc.\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 */\n\nmodule.exports = firebase;\n","import { ErrorFactory, createSubscribe } from '@firebase/util';\nimport { __extends, __awaiter, __generator, __assign } from 'tslib';\nimport firebase from '@firebase/app';\n\n/**\r\n * Copyright 2018 Google Inc.\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 */\n\n/**\r\n * Copyright 2017 Google Inc.\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\nvar ERROR_CODES = {\r\n    AVAILABLE_IN_WINDOW: 'only-available-in-window',\r\n    AVAILABLE_IN_SW: 'only-available-in-sw',\r\n    SHOULD_BE_INHERITED: 'should-be-overriden',\r\n    BAD_SENDER_ID: 'bad-sender-id',\r\n    INCORRECT_GCM_SENDER_ID: 'incorrect-gcm-sender-id',\r\n    PERMISSION_DEFAULT: 'permission-default',\r\n    PERMISSION_BLOCKED: 'permission-blocked',\r\n    UNSUPPORTED_BROWSER: 'unsupported-browser',\r\n    NOTIFICATIONS_BLOCKED: 'notifications-blocked',\r\n    FAILED_DEFAULT_REGISTRATION: 'failed-serviceworker-registration',\r\n    SW_REGISTRATION_EXPECTED: 'sw-registration-expected',\r\n    GET_SUBSCRIPTION_FAILED: 'get-subscription-failed',\r\n    INVALID_SAVED_TOKEN: 'invalid-saved-token',\r\n    SW_REG_REDUNDANT: 'sw-reg-redundant',\r\n    TOKEN_SUBSCRIBE_FAILED: 'token-subscribe-failed',\r\n    TOKEN_SUBSCRIBE_NO_TOKEN: 'token-subscribe-no-token',\r\n    TOKEN_SUBSCRIBE_NO_PUSH_SET: 'token-subscribe-no-push-set',\r\n    TOKEN_UNSUBSCRIBE_FAILED: 'token-unsubscribe-failed',\r\n    TOKEN_UPDATE_FAILED: 'token-update-failed',\r\n    TOKEN_UPDATE_NO_TOKEN: 'token-update-no-token',\r\n    USE_SW_BEFORE_GET_TOKEN: 'use-sw-before-get-token',\r\n    INVALID_DELETE_TOKEN: 'invalid-delete-token',\r\n    DELETE_TOKEN_NOT_FOUND: 'delete-token-not-found',\r\n    DELETE_SCOPE_NOT_FOUND: 'delete-scope-not-found',\r\n    BG_HANDLER_FUNCTION_EXPECTED: 'bg-handler-function-expected',\r\n    NO_WINDOW_CLIENT_TO_MSG: 'no-window-client-to-msg',\r\n    UNABLE_TO_RESUBSCRIBE: 'unable-to-resubscribe',\r\n    NO_FCM_TOKEN_FOR_RESUBSCRIBE: 'no-fcm-token-for-resubscribe',\r\n    FAILED_TO_DELETE_TOKEN: 'failed-to-delete-token',\r\n    NO_SW_IN_REG: 'no-sw-in-reg',\r\n    BAD_SCOPE: 'bad-scope',\r\n    BAD_VAPID_KEY: 'bad-vapid-key',\r\n    BAD_SUBSCRIPTION: 'bad-subscription',\r\n    BAD_TOKEN: 'bad-token',\r\n    BAD_PUSH_SET: 'bad-push-set',\r\n    FAILED_DELETE_VAPID_KEY: 'failed-delete-vapid-key',\r\n    INVALID_PUBLIC_VAPID_KEY: 'invalid-public-vapid-key',\r\n    USE_PUBLIC_KEY_BEFORE_GET_TOKEN: 'use-public-key-before-get-token',\r\n    PUBLIC_KEY_DECRYPTION_FAILED: 'public-vapid-key-decryption-failed'\r\n};\r\nvar ERROR_MAP = (_a = {}, _a[ERROR_CODES.AVAILABLE_IN_WINDOW] = 'This method is available in a Window context.', _a[ERROR_CODES.AVAILABLE_IN_SW] = 'This method is available in a service worker ' + 'context.', _a[ERROR_CODES.SHOULD_BE_INHERITED] = 'This method should be overriden by ' + 'extended classes.', _a[ERROR_CODES.BAD_SENDER_ID] = \"Please ensure that 'messagingSenderId' is set \" +\r\n        'correctly in the options passed into firebase.initializeApp().', _a[ERROR_CODES.PERMISSION_DEFAULT] = 'The required permissions were not granted and ' + 'dismissed instead.', _a[ERROR_CODES.PERMISSION_BLOCKED] = 'The required permissions were not granted and ' + 'blocked instead.', _a[ERROR_CODES.UNSUPPORTED_BROWSER] = \"This browser doesn't support the API's \" +\r\n        'required to use the firebase SDK.', _a[ERROR_CODES.NOTIFICATIONS_BLOCKED] = 'Notifications have been blocked.', _a[ERROR_CODES.FAILED_DEFAULT_REGISTRATION] = 'We are unable to register the ' +\r\n        'default service worker. {$browserErrorMessage}', _a[ERROR_CODES.SW_REGISTRATION_EXPECTED] = 'A service worker registration was the ' + 'expected input.', _a[ERROR_CODES.GET_SUBSCRIPTION_FAILED] = 'There was an error when trying to get ' +\r\n        'any existing Push Subscriptions.', _a[ERROR_CODES.INVALID_SAVED_TOKEN] = 'Unable to access details of the saved token.', _a[ERROR_CODES.SW_REG_REDUNDANT] = 'The service worker being used for push was made ' + 'redundant.', _a[ERROR_CODES.TOKEN_SUBSCRIBE_FAILED] = 'A problem occured while subscribing the ' + 'user to FCM: {$message}', _a[ERROR_CODES.TOKEN_SUBSCRIBE_NO_TOKEN] = 'FCM returned no token when subscribing ' + 'the user to push.', _a[ERROR_CODES.TOKEN_SUBSCRIBE_NO_PUSH_SET] = 'FCM returned an invalid response ' + 'when getting an FCM token.', _a[ERROR_CODES.TOKEN_UNSUBSCRIBE_FAILED] = 'A problem occured while unsubscribing the ' + 'user from FCM: {$message}', _a[ERROR_CODES.TOKEN_UPDATE_FAILED] = 'A problem occured while updating the ' + 'user from FCM: {$message}', _a[ERROR_CODES.TOKEN_UPDATE_NO_TOKEN] = 'FCM returned no token when updating ' + 'the user to push.', _a[ERROR_CODES.USE_SW_BEFORE_GET_TOKEN] = 'The useServiceWorker() method may only be called once and must be ' +\r\n        'called before calling getToken() to ensure your service worker is used.', _a[ERROR_CODES.INVALID_DELETE_TOKEN] = 'You must pass a valid token into ' +\r\n        'deleteToken(), i.e. the token from getToken().', _a[ERROR_CODES.DELETE_TOKEN_NOT_FOUND] = 'The deletion attempt for token could not ' +\r\n        'be performed as the token was not found.', _a[ERROR_CODES.DELETE_SCOPE_NOT_FOUND] = 'The deletion attempt for service worker ' +\r\n        'scope could not be performed as the scope was not found.', _a[ERROR_CODES.BG_HANDLER_FUNCTION_EXPECTED] = 'The input to ' + 'setBackgroundMessageHandler() must be a function.', _a[ERROR_CODES.NO_WINDOW_CLIENT_TO_MSG] = 'An attempt was made to message a ' + 'non-existant window client.', _a[ERROR_CODES.UNABLE_TO_RESUBSCRIBE] = 'There was an error while re-subscribing ' +\r\n        'the FCM token for push messaging. Will have to resubscribe the ' +\r\n        'user on next visit. {$message}', _a[ERROR_CODES.NO_FCM_TOKEN_FOR_RESUBSCRIBE] = 'Could not find an FCM token ' +\r\n        'and as a result, unable to resubscribe. Will have to resubscribe the ' +\r\n        'user on next visit.', _a[ERROR_CODES.FAILED_TO_DELETE_TOKEN] = 'Unable to delete the currently saved token.', _a[ERROR_CODES.NO_SW_IN_REG] = 'Even though the service worker registration was ' +\r\n        'successful, there was a problem accessing the service worker itself.', _a[ERROR_CODES.INCORRECT_GCM_SENDER_ID] = \"Please change your web app manifest's \" +\r\n        \"'gcm_sender_id' value to '103953800507' to use Firebase messaging.\", _a[ERROR_CODES.BAD_SCOPE] = 'The service worker scope must be a string with at ' +\r\n        'least one character.', _a[ERROR_CODES.BAD_VAPID_KEY] = 'The public VAPID key is not a Uint8Array with 65 bytes.', _a[ERROR_CODES.BAD_SUBSCRIPTION] = 'The subscription must be a valid ' + 'PushSubscription.', _a[ERROR_CODES.BAD_TOKEN] = 'The FCM Token used for storage / lookup was not ' +\r\n        'a valid token string.', _a[ERROR_CODES.BAD_PUSH_SET] = 'The FCM push set used for storage / lookup was not ' +\r\n        'not a valid push set string.', _a[ERROR_CODES.FAILED_DELETE_VAPID_KEY] = 'The VAPID key could not be deleted.', _a[ERROR_CODES.INVALID_PUBLIC_VAPID_KEY] = 'The public VAPID key must be a string.', _a[ERROR_CODES.PUBLIC_KEY_DECRYPTION_FAILED] = 'The public VAPID key did not equal ' + '65 bytes when decrypted.', _a);\r\nvar errorFactory = new ErrorFactory('messaging', 'Messaging', ERROR_MAP);\r\nvar _a;\n\n/**\r\n * Copyright 2017 Google Inc.\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\nvar DEFAULT_PUBLIC_VAPID_KEY = new Uint8Array([\r\n    0x04,\r\n    0x33,\r\n    0x94,\r\n    0xf7,\r\n    0xdf,\r\n    0xa1,\r\n    0xeb,\r\n    0xb1,\r\n    0xdc,\r\n    0x03,\r\n    0xa2,\r\n    0x5e,\r\n    0x15,\r\n    0x71,\r\n    0xdb,\r\n    0x48,\r\n    0xd3,\r\n    0x2e,\r\n    0xed,\r\n    0xed,\r\n    0xb2,\r\n    0x34,\r\n    0xdb,\r\n    0xb7,\r\n    0x47,\r\n    0x3a,\r\n    0x0c,\r\n    0x8f,\r\n    0xc4,\r\n    0xcc,\r\n    0xe1,\r\n    0x6f,\r\n    0x3c,\r\n    0x8c,\r\n    0x84,\r\n    0xdf,\r\n    0xab,\r\n    0xb6,\r\n    0x66,\r\n    0x3e,\r\n    0xf2,\r\n    0x0c,\r\n    0xd4,\r\n    0x8b,\r\n    0xfe,\r\n    0xe3,\r\n    0xf9,\r\n    0x76,\r\n    0x2f,\r\n    0x14,\r\n    0x1c,\r\n    0x63,\r\n    0x08,\r\n    0x6a,\r\n    0x6f,\r\n    0x2d,\r\n    0xb1,\r\n    0x1a,\r\n    0x95,\r\n    0xb0,\r\n    0xce,\r\n    0x37,\r\n    0xc0,\r\n    0x9c,\r\n    0x6e\r\n]);\r\nvar ENDPOINT = 'https://fcm.googleapis.com';\n\n/**\r\n * Copyright 2017 Google Inc.\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\nvar MessageParameter;\r\n(function (MessageParameter) {\r\n    MessageParameter[\"TYPE_OF_MSG\"] = \"firebase-messaging-msg-type\";\r\n    MessageParameter[\"DATA\"] = \"firebase-messaging-msg-data\";\r\n})(MessageParameter || (MessageParameter = {}));\r\nvar MessageType;\r\n(function (MessageType) {\r\n    MessageType[\"PUSH_MSG_RECEIVED\"] = \"push-msg-received\";\r\n    MessageType[\"NOTIFICATION_CLICKED\"] = \"notification-clicked\";\r\n})(MessageType || (MessageType = {}));\n\n/**\r\n * Copyright 2018 Google Inc.\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\nfunction isArrayBufferEqual(a, b) {\r\n    if (a == null || b == null) {\r\n        return false;\r\n    }\r\n    if (a === b) {\r\n        return true;\r\n    }\r\n    if (a.byteLength !== b.byteLength) {\r\n        return false;\r\n    }\r\n    var viewA = new DataView(a);\r\n    var viewB = new DataView(b);\r\n    for (var i = 0; i < a.byteLength; i++) {\r\n        if (viewA.getUint8(i) !== viewB.getUint8(i)) {\r\n            return false;\r\n        }\r\n    }\r\n    return true;\r\n}\n\n/**\r\n * Copyright 2017 Google Inc.\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\nfunction toBase64(arrayBuffer) {\r\n    var uint8Version = new Uint8Array(arrayBuffer);\r\n    return btoa(String.fromCharCode.apply(null, uint8Version));\r\n}\r\nfunction arrayBufferToBase64(arrayBuffer) {\r\n    var base64String = toBase64(arrayBuffer);\r\n    return base64String\r\n        .replace(/=/g, '')\r\n        .replace(/\\+/g, '-')\r\n        .replace(/\\//g, '_');\r\n}\n\n/**\r\n * Copyright 2017 Google Inc.\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\nvar IidModel = /** @class */ (function () {\r\n    function IidModel() {\r\n    }\r\n    IidModel.prototype.getToken = function (senderId, subscription, publicVapidKey) {\r\n        return __awaiter(this, void 0, void 0, function () {\r\n            var p256dh, auth, fcmSubscribeBody, applicationPubKey, headers, subscribeOptions, responseData, response, err_1, message;\r\n            return __generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0:\r\n                        p256dh = arrayBufferToBase64(subscription.getKey('p256dh'));\r\n                        auth = arrayBufferToBase64(subscription.getKey('auth'));\r\n                        fcmSubscribeBody = \"authorized_entity=\" + senderId + \"&\" +\r\n                            (\"endpoint=\" + subscription.endpoint + \"&\") +\r\n                            (\"encryption_key=\" + p256dh + \"&\") +\r\n                            (\"encryption_auth=\" + auth);\r\n                        if (!isArrayBufferEqual(publicVapidKey.buffer, DEFAULT_PUBLIC_VAPID_KEY.buffer)) {\r\n                            applicationPubKey = arrayBufferToBase64(publicVapidKey);\r\n                            fcmSubscribeBody += \"&application_pub_key=\" + applicationPubKey;\r\n                        }\r\n                        headers = new Headers();\r\n                        headers.append('Content-Type', 'application/x-www-form-urlencoded');\r\n                        subscribeOptions = {\r\n                            method: 'POST',\r\n                            headers: headers,\r\n                            body: fcmSubscribeBody\r\n                        };\r\n                        _a.label = 1;\r\n                    case 1:\r\n                        _a.trys.push([1, 4, , 5]);\r\n                        return [4 /*yield*/, fetch(ENDPOINT + '/fcm/connect/subscribe', subscribeOptions)];\r\n                    case 2:\r\n                        response = _a.sent();\r\n                        return [4 /*yield*/, response.json()];\r\n                    case 3:\r\n                        responseData = _a.sent();\r\n                        return [3 /*break*/, 5];\r\n                    case 4:\r\n                        err_1 = _a.sent();\r\n                        throw errorFactory.create(ERROR_CODES.TOKEN_SUBSCRIBE_FAILED);\r\n                    case 5:\r\n                        if (responseData.error) {\r\n                            message = responseData.error.message;\r\n                            throw errorFactory.create(ERROR_CODES.TOKEN_SUBSCRIBE_FAILED, {\r\n                                message: message\r\n                            });\r\n                        }\r\n                        if (!responseData.token) {\r\n                            throw errorFactory.create(ERROR_CODES.TOKEN_SUBSCRIBE_NO_TOKEN);\r\n                        }\r\n                        if (!responseData.pushSet) {\r\n                            throw errorFactory.create(ERROR_CODES.TOKEN_SUBSCRIBE_NO_PUSH_SET);\r\n                        }\r\n                        return [2 /*return*/, {\r\n                                token: responseData.token,\r\n                                pushSet: responseData.pushSet\r\n                            }];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    /**\r\n     * Update the underlying token details for fcmToken.\r\n     */\r\n    IidModel.prototype.updateToken = function (senderId, fcmToken, fcmPushSet, subscription, publicVapidKey) {\r\n        return __awaiter(this, void 0, void 0, function () {\r\n            var p256dh, auth, fcmUpdateBody, applicationPubKey, headers, updateOptions, responseData, response, err_2, message;\r\n            return __generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0:\r\n                        p256dh = arrayBufferToBase64(subscription.getKey('p256dh'));\r\n                        auth = arrayBufferToBase64(subscription.getKey('auth'));\r\n                        fcmUpdateBody = \"push_set=\" + fcmPushSet + \"&\" +\r\n                            (\"token=\" + fcmToken + \"&\") +\r\n                            (\"authorized_entity=\" + senderId + \"&\") +\r\n                            (\"endpoint=\" + subscription.endpoint + \"&\") +\r\n                            (\"encryption_key=\" + p256dh + \"&\") +\r\n                            (\"encryption_auth=\" + auth);\r\n                        if (!isArrayBufferEqual(publicVapidKey.buffer, DEFAULT_PUBLIC_VAPID_KEY.buffer)) {\r\n                            applicationPubKey = arrayBufferToBase64(publicVapidKey);\r\n                            fcmUpdateBody += \"&application_pub_key=\" + applicationPubKey;\r\n                        }\r\n                        headers = new Headers();\r\n                        headers.append('Content-Type', 'application/x-www-form-urlencoded');\r\n                        updateOptions = {\r\n                            method: 'POST',\r\n                            headers: headers,\r\n                            body: fcmUpdateBody\r\n                        };\r\n                        _a.label = 1;\r\n                    case 1:\r\n                        _a.trys.push([1, 4, , 5]);\r\n                        return [4 /*yield*/, fetch(ENDPOINT + '/fcm/connect/subscribe', updateOptions)];\r\n                    case 2:\r\n                        response = _a.sent();\r\n                        return [4 /*yield*/, response.json()];\r\n                    case 3:\r\n                        responseData = _a.sent();\r\n                        return [3 /*break*/, 5];\r\n                    case 4:\r\n                        err_2 = _a.sent();\r\n                        throw errorFactory.create(ERROR_CODES.TOKEN_UPDATE_FAILED);\r\n                    case 5:\r\n                        if (responseData.error) {\r\n                            message = responseData.error.message;\r\n                            throw errorFactory.create(ERROR_CODES.TOKEN_UPDATE_FAILED, {\r\n                                message: message\r\n                            });\r\n                        }\r\n                        if (!responseData.token) {\r\n                            throw errorFactory.create(ERROR_CODES.TOKEN_UPDATE_NO_TOKEN);\r\n                        }\r\n                        return [2 /*return*/, responseData.token];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    /**\r\n     * Given a fcmToken, pushSet and messagingSenderId, delete an FCM token.\r\n     */\r\n    IidModel.prototype.deleteToken = function (senderId, fcmToken, fcmPushSet) {\r\n        return __awaiter(this, void 0, void 0, function () {\r\n            var fcmUnsubscribeBody, headers, unsubscribeOptions, response, responseData, message, err_3;\r\n            return __generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0:\r\n                        fcmUnsubscribeBody = \"authorized_entity=\" + senderId + \"&\" +\r\n                            (\"token=\" + fcmToken + \"&\") +\r\n                            (\"pushSet=\" + fcmPushSet);\r\n                        headers = new Headers();\r\n                        headers.append('Content-Type', 'application/x-www-form-urlencoded');\r\n                        unsubscribeOptions = {\r\n                            method: 'POST',\r\n                            headers: headers,\r\n                            body: fcmUnsubscribeBody\r\n                        };\r\n                        _a.label = 1;\r\n                    case 1:\r\n                        _a.trys.push([1, 4, , 5]);\r\n                        return [4 /*yield*/, fetch(ENDPOINT + '/fcm/connect/unsubscribe', unsubscribeOptions)];\r\n                    case 2:\r\n                        response = _a.sent();\r\n                        return [4 /*yield*/, response.json()];\r\n                    case 3:\r\n                        responseData = _a.sent();\r\n                        if (responseData.error) {\r\n                            message = responseData.error.message;\r\n                            throw errorFactory.create(ERROR_CODES.TOKEN_UNSUBSCRIBE_FAILED, {\r\n                                message: message\r\n                            });\r\n                        }\r\n                        return [3 /*break*/, 5];\r\n                    case 4:\r\n                        err_3 = _a.sent();\r\n                        throw errorFactory.create(ERROR_CODES.TOKEN_UNSUBSCRIBE_FAILED);\r\n                    case 5: return [2 /*return*/];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    return IidModel;\r\n}());\n\n/**\r\n * Copyright 2017 Google Inc.\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\nfunction base64ToArrayBuffer(base64String) {\r\n    var padding = '='.repeat((4 - base64String.length % 4) % 4);\r\n    var base64 = (base64String + padding)\r\n        .replace(/\\-/g, '+')\r\n        .replace(/_/g, '/');\r\n    var rawData = atob(base64);\r\n    var outputArray = new Uint8Array(rawData.length);\r\n    for (var i = 0; i < rawData.length; ++i) {\r\n        outputArray[i] = rawData.charCodeAt(i);\r\n    }\r\n    return outputArray;\r\n}\n\n/**\r\n * Copyright 2017 Google Inc.\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\nvar OLD_DB_NAME = 'undefined';\r\nvar OLD_OBJECT_STORE_NAME = 'fcm_token_object_Store';\r\nfunction handleDb(db) {\r\n    if (!db.objectStoreNames.contains(OLD_OBJECT_STORE_NAME)) {\r\n        // We found a database with the name 'undefined', but our expected object\r\n        // store isn't defined.\r\n        return;\r\n    }\r\n    var transaction = db.transaction(OLD_OBJECT_STORE_NAME);\r\n    var objectStore = transaction.objectStore(OLD_OBJECT_STORE_NAME);\r\n    var iidModel = new IidModel();\r\n    var openCursorRequest = objectStore.openCursor();\r\n    openCursorRequest.onerror = function (event) {\r\n        // NOOP - Nothing we can do.\r\n        console.warn('Unable to cleanup old IDB.', event);\r\n    };\r\n    openCursorRequest.onsuccess = function () {\r\n        var cursor = openCursorRequest.result;\r\n        if (cursor) {\r\n            // cursor.value contains the current record being iterated through\r\n            // this is where you'd do something with the result\r\n            var tokenDetails = cursor.value;\r\n            iidModel.deleteToken(tokenDetails.fcmSenderId, tokenDetails.fcmToken, tokenDetails.fcmPushSet);\r\n            cursor.continue();\r\n        }\r\n        else {\r\n            db.close();\r\n            indexedDB.deleteDatabase(OLD_DB_NAME);\r\n        }\r\n    };\r\n}\r\nfunction cleanV1() {\r\n    var request = indexedDB.open(OLD_DB_NAME);\r\n    request.onerror = function (event) {\r\n        // NOOP - Nothing we can do.\r\n    };\r\n    request.onsuccess = function (event) {\r\n        var db = request.result;\r\n        handleDb(db);\r\n    };\r\n}\n\n/**\r\n * Copyright 2017 Google Inc.\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\nvar DbInterface = /** @class */ (function () {\r\n    function DbInterface() {\r\n        this.dbPromise = null;\r\n    }\r\n    /** Gets record(s) from the objectStore that match the given key. */\r\n    DbInterface.prototype.get = function (key) {\r\n        return this.createTransaction(function (objectStore) { return objectStore.get(key); });\r\n    };\r\n    /** Gets record(s) from the objectStore that match the given index. */\r\n    DbInterface.prototype.getIndex = function (index, key) {\r\n        function runRequest(objectStore) {\r\n            var idbIndex = objectStore.index(index);\r\n            return idbIndex.get(key);\r\n        }\r\n        return this.createTransaction(runRequest);\r\n    };\r\n    /** Assigns or overwrites the record for the given value. */\r\n    // tslint:disable-next-line:no-any IndexedDB values are of type \"any\"\r\n    DbInterface.prototype.put = function (value) {\r\n        return this.createTransaction(function (objectStore) { return objectStore.put(value); }, 'readwrite');\r\n    };\r\n    /** Deletes record(s) from the objectStore that match the given key. */\r\n    DbInterface.prototype.delete = function (key) {\r\n        return this.createTransaction(function (objectStore) { return objectStore.delete(key); }, 'readwrite');\r\n    };\r\n    /**\r\n     * Close the currently open database.\r\n     */\r\n    DbInterface.prototype.closeDatabase = function () {\r\n        return __awaiter(this, void 0, void 0, function () {\r\n            var db;\r\n            return __generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0:\r\n                        if (!this.dbPromise) return [3 /*break*/, 2];\r\n                        return [4 /*yield*/, this.dbPromise];\r\n                    case 1:\r\n                        db = _a.sent();\r\n                        db.close();\r\n                        this.dbPromise = null;\r\n                        _a.label = 2;\r\n                    case 2: return [2 /*return*/];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    /**\r\n     * Creates an IndexedDB Transaction and passes its objectStore to the\r\n     * runRequest function, which runs the database request.\r\n     *\r\n     * @return Promise that resolves with the result of the runRequest function\r\n     */\r\n    DbInterface.prototype.createTransaction = function (runRequest, mode) {\r\n        if (mode === void 0) { mode = 'readonly'; }\r\n        return __awaiter(this, void 0, void 0, function () {\r\n            var db, transaction, request, result;\r\n            return __generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0: return [4 /*yield*/, this.getDb()];\r\n                    case 1:\r\n                        db = _a.sent();\r\n                        transaction = db.transaction(this.objectStoreName, mode);\r\n                        request = transaction.objectStore(this.objectStoreName);\r\n                        return [4 /*yield*/, promisify(runRequest(request))];\r\n                    case 2:\r\n                        result = _a.sent();\r\n                        return [2 /*return*/, new Promise(function (resolve, reject) {\r\n                                transaction.oncomplete = function () {\r\n                                    resolve(result);\r\n                                };\r\n                                transaction.onerror = function () {\r\n                                    reject(transaction.error);\r\n                                };\r\n                            })];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    /** Gets the cached db connection or opens a new one. */\r\n    DbInterface.prototype.getDb = function () {\r\n        var _this = this;\r\n        if (!this.dbPromise) {\r\n            this.dbPromise = new Promise(function (resolve, reject) {\r\n                var request = indexedDB.open(_this.dbName, _this.dbVersion);\r\n                request.onsuccess = function () {\r\n                    resolve(request.result);\r\n                };\r\n                request.onerror = function () {\r\n                    _this.dbPromise = null;\r\n                    reject(request.error);\r\n                };\r\n                request.onupgradeneeded = function (event) { return _this.onDbUpgrade(request, event); };\r\n            });\r\n        }\r\n        return this.dbPromise;\r\n    };\r\n    return DbInterface;\r\n}());\r\n/** Promisifies an IDBRequest. Resolves with the IDBRequest's result. */\r\nfunction promisify(request) {\r\n    return new Promise(function (resolve, reject) {\r\n        request.onsuccess = function () {\r\n            resolve(request.result);\r\n        };\r\n        request.onerror = function () {\r\n            reject(request.error);\r\n        };\r\n    });\r\n}\n\n/**\r\n * Copyright 2017 Google Inc.\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\nvar TokenDetailsModel = /** @class */ (function (_super) {\r\n    __extends(TokenDetailsModel, _super);\r\n    function TokenDetailsModel() {\r\n        var _this = _super !== null && _super.apply(this, arguments) || this;\r\n        _this.dbName = 'fcm_token_details_db';\r\n        _this.dbVersion = 3;\r\n        _this.objectStoreName = 'fcm_token_object_Store';\r\n        return _this;\r\n    }\r\n    TokenDetailsModel.prototype.onDbUpgrade = function (request, event) {\r\n        var db = request.result;\r\n        // Lack of 'break' statements is intentional.\r\n        switch (event.oldVersion) {\r\n            case 0: {\r\n                // New IDB instance\r\n                var objectStore = db.createObjectStore(this.objectStoreName, {\r\n                    keyPath: 'swScope'\r\n                });\r\n                // Make sure the sender ID can be searched\r\n                objectStore.createIndex('fcmSenderId', 'fcmSenderId', {\r\n                    unique: false\r\n                });\r\n                objectStore.createIndex('fcmToken', 'fcmToken', { unique: true });\r\n            }\r\n            case 1: {\r\n                // Prior to version 2, we were using either 'fcm_token_details_db'\r\n                // or 'undefined' as the database name due to bug in the SDK\r\n                // So remove the old tokens and databases.\r\n                cleanV1();\r\n            }\r\n            case 2: {\r\n                var objectStore = request.transaction.objectStore(this.objectStoreName);\r\n                var cursorRequest_1 = objectStore.openCursor();\r\n                cursorRequest_1.onsuccess = function () {\r\n                    var cursor = cursorRequest_1.result;\r\n                    if (cursor) {\r\n                        var value = cursor.value;\r\n                        var newValue = __assign({}, value);\r\n                        if (!value.createTime) {\r\n                            newValue.createTime = Date.now();\r\n                        }\r\n                        if (typeof value.vapidKey === 'string') {\r\n                            newValue.vapidKey = base64ToArrayBuffer(value.vapidKey);\r\n                        }\r\n                        if (typeof value.auth === 'string') {\r\n                            newValue.auth = base64ToArrayBuffer(value.auth).buffer;\r\n                        }\r\n                        if (typeof value.auth === 'string') {\r\n                            newValue.p256dh = base64ToArrayBuffer(value.p256dh).buffer;\r\n                        }\r\n                        cursor.update(newValue);\r\n                        cursor.continue();\r\n                    }\r\n                };\r\n            }\r\n        }\r\n    };\r\n    /**\r\n     * Given a token, this method will look up the details in indexedDB.\r\n     */\r\n    TokenDetailsModel.prototype.getTokenDetailsFromToken = function (fcmToken) {\r\n        return __awaiter(this, void 0, void 0, function () {\r\n            return __generator(this, function (_a) {\r\n                if (!fcmToken) {\r\n                    throw errorFactory.create(ERROR_CODES.BAD_TOKEN);\r\n                }\r\n                validateInputs({ fcmToken: fcmToken });\r\n                return [2 /*return*/, this.getIndex('fcmToken', fcmToken)];\r\n            });\r\n        });\r\n    };\r\n    /**\r\n     * Given a service worker scope, this method will look up the details in\r\n     * indexedDB.\r\n     * @return The details associated with that token.\r\n     */\r\n    TokenDetailsModel.prototype.getTokenDetailsFromSWScope = function (swScope) {\r\n        return __awaiter(this, void 0, void 0, function () {\r\n            return __generator(this, function (_a) {\r\n                if (!swScope) {\r\n                    throw errorFactory.create(ERROR_CODES.BAD_SCOPE);\r\n                }\r\n                validateInputs({ swScope: swScope });\r\n                return [2 /*return*/, this.get(swScope)];\r\n            });\r\n        });\r\n    };\r\n    /**\r\n     * Save the details for the fcm token for re-use at a later date.\r\n     * @param input A plain js object containing args to save.\r\n     */\r\n    TokenDetailsModel.prototype.saveTokenDetails = function (tokenDetails) {\r\n        return __awaiter(this, void 0, void 0, function () {\r\n            return __generator(this, function (_a) {\r\n                if (!tokenDetails.swScope) {\r\n                    throw errorFactory.create(ERROR_CODES.BAD_SCOPE);\r\n                }\r\n                if (!tokenDetails.vapidKey) {\r\n                    throw errorFactory.create(ERROR_CODES.BAD_VAPID_KEY);\r\n                }\r\n                if (!tokenDetails.endpoint || !tokenDetails.auth || !tokenDetails.p256dh) {\r\n                    throw errorFactory.create(ERROR_CODES.BAD_SUBSCRIPTION);\r\n                }\r\n                if (!tokenDetails.fcmSenderId) {\r\n                    throw errorFactory.create(ERROR_CODES.BAD_SENDER_ID);\r\n                }\r\n                if (!tokenDetails.fcmToken) {\r\n                    throw errorFactory.create(ERROR_CODES.BAD_TOKEN);\r\n                }\r\n                if (!tokenDetails.fcmPushSet) {\r\n                    throw errorFactory.create(ERROR_CODES.BAD_PUSH_SET);\r\n                }\r\n                validateInputs(tokenDetails);\r\n                return [2 /*return*/, this.put(tokenDetails)];\r\n            });\r\n        });\r\n    };\r\n    /**\r\n     * This method deletes details of the current FCM token.\r\n     * It's returning a promise in case we need to move to an async\r\n     * method for deleting at a later date.\r\n     *\r\n     * @return Resolves once the FCM token details have been deleted and returns\r\n     * the deleted details.\r\n     */\r\n    TokenDetailsModel.prototype.deleteToken = function (token) {\r\n        return __awaiter(this, void 0, void 0, function () {\r\n            var details;\r\n            return __generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0:\r\n                        if (typeof token !== 'string' || token.length === 0) {\r\n                            return [2 /*return*/, Promise.reject(errorFactory.create(ERROR_CODES.INVALID_DELETE_TOKEN))];\r\n                        }\r\n                        return [4 /*yield*/, this.getTokenDetailsFromToken(token)];\r\n                    case 1:\r\n                        details = _a.sent();\r\n                        if (!details) {\r\n                            throw errorFactory.create(ERROR_CODES.DELETE_TOKEN_NOT_FOUND);\r\n                        }\r\n                        return [4 /*yield*/, this.delete(details.swScope)];\r\n                    case 2:\r\n                        _a.sent();\r\n                        return [2 /*return*/, details];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    return TokenDetailsModel;\r\n}(DbInterface));\r\n/**\r\n * This method takes an object and will check for known arguments and\r\n * validate the input.\r\n * @return Promise that resolves if input is valid, rejects otherwise.\r\n */\r\nfunction validateInputs(input) {\r\n    if (input.fcmToken) {\r\n        if (typeof input.fcmToken !== 'string' || input.fcmToken.length === 0) {\r\n            throw errorFactory.create(ERROR_CODES.BAD_TOKEN);\r\n        }\r\n    }\r\n    if (input.swScope) {\r\n        if (typeof input.swScope !== 'string' || input.swScope.length === 0) {\r\n            throw errorFactory.create(ERROR_CODES.BAD_SCOPE);\r\n        }\r\n    }\r\n    if (input.vapidKey) {\r\n        if (!(input.vapidKey instanceof Uint8Array) ||\r\n            input.vapidKey.length !== 65) {\r\n            throw errorFactory.create(ERROR_CODES.BAD_VAPID_KEY);\r\n        }\r\n    }\r\n    if (input.endpoint) {\r\n        if (typeof input.endpoint !== 'string' || input.endpoint.length === 0) {\r\n            throw errorFactory.create(ERROR_CODES.BAD_SUBSCRIPTION);\r\n        }\r\n    }\r\n    if (input.auth) {\r\n        if (!(input.auth instanceof ArrayBuffer)) {\r\n            throw errorFactory.create(ERROR_CODES.BAD_SUBSCRIPTION);\r\n        }\r\n    }\r\n    if (input.p256dh) {\r\n        if (!(input.p256dh instanceof ArrayBuffer)) {\r\n            throw errorFactory.create(ERROR_CODES.BAD_SUBSCRIPTION);\r\n        }\r\n    }\r\n    if (input.fcmSenderId) {\r\n        if (typeof input.fcmSenderId !== 'string' ||\r\n            input.fcmSenderId.length === 0) {\r\n            throw errorFactory.create(ERROR_CODES.BAD_SENDER_ID);\r\n        }\r\n    }\r\n    if (input.fcmPushSet) {\r\n        if (typeof input.fcmPushSet !== 'string' || input.fcmPushSet.length === 0) {\r\n            throw errorFactory.create(ERROR_CODES.BAD_PUSH_SET);\r\n        }\r\n    }\r\n}\n\n/**\r\n * Copyright 2017 Google Inc.\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\nvar UNCOMPRESSED_PUBLIC_KEY_SIZE = 65;\r\nvar VapidDetailsModel = /** @class */ (function (_super) {\r\n    __extends(VapidDetailsModel, _super);\r\n    function VapidDetailsModel() {\r\n        var _this = _super !== null && _super.apply(this, arguments) || this;\r\n        _this.dbName = 'fcm_vapid_details_db';\r\n        _this.dbVersion = 1;\r\n        _this.objectStoreName = 'fcm_vapid_object_Store';\r\n        return _this;\r\n    }\r\n    VapidDetailsModel.prototype.onDbUpgrade = function (request) {\r\n        var db = request.result;\r\n        db.createObjectStore(this.objectStoreName, { keyPath: 'swScope' });\r\n    };\r\n    /**\r\n     * Given a service worker scope, this method will look up the vapid key\r\n     * in indexedDB.\r\n     */\r\n    VapidDetailsModel.prototype.getVapidFromSWScope = function (swScope) {\r\n        return __awaiter(this, void 0, void 0, function () {\r\n            var result;\r\n            return __generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0:\r\n                        if (typeof swScope !== 'string' || swScope.length === 0) {\r\n                            throw errorFactory.create(ERROR_CODES.BAD_SCOPE);\r\n                        }\r\n                        return [4 /*yield*/, this.get(swScope)];\r\n                    case 1:\r\n                        result = _a.sent();\r\n                        return [2 /*return*/, result ? result.vapidKey : undefined];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    /**\r\n     * Save a vapid key against a swScope for later date.\r\n     */\r\n    VapidDetailsModel.prototype.saveVapidDetails = function (swScope, vapidKey) {\r\n        return __awaiter(this, void 0, void 0, function () {\r\n            var details;\r\n            return __generator(this, function (_a) {\r\n                if (typeof swScope !== 'string' || swScope.length === 0) {\r\n                    throw errorFactory.create(ERROR_CODES.BAD_SCOPE);\r\n                }\r\n                if (vapidKey === null || vapidKey.length !== UNCOMPRESSED_PUBLIC_KEY_SIZE) {\r\n                    throw errorFactory.create(ERROR_CODES.BAD_VAPID_KEY);\r\n                }\r\n                details = {\r\n                    swScope: swScope,\r\n                    vapidKey: vapidKey\r\n                };\r\n                return [2 /*return*/, this.put(details)];\r\n            });\r\n        });\r\n    };\r\n    /**\r\n     * This method deletes details of the current FCM VAPID key for a SW scope.\r\n     * Resolves once the scope/vapid details have been deleted and returns the\r\n     * deleted vapid key.\r\n     */\r\n    VapidDetailsModel.prototype.deleteVapidDetails = function (swScope) {\r\n        return __awaiter(this, void 0, void 0, function () {\r\n            var vapidKey;\r\n            return __generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0: return [4 /*yield*/, this.getVapidFromSWScope(swScope)];\r\n                    case 1:\r\n                        vapidKey = _a.sent();\r\n                        if (!vapidKey) {\r\n                            throw errorFactory.create(ERROR_CODES.DELETE_SCOPE_NOT_FOUND);\r\n                        }\r\n                        return [4 /*yield*/, this.delete(swScope)];\r\n                    case 2:\r\n                        _a.sent();\r\n                        return [2 /*return*/, vapidKey];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    return VapidDetailsModel;\r\n}(DbInterface));\n\n/**\r\n * Copyright 2017 Google Inc.\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\nvar SENDER_ID_OPTION_NAME = 'messagingSenderId';\r\n// Database cache should be invalidated once a week.\r\nvar TOKEN_EXPIRATION_MILLIS = 7 * 24 * 60 * 60 * 1000; // 7 days\r\nvar BaseController = /** @class */ (function () {\r\n    /**\r\n     * An interface of the Messaging Service API\r\n     */\r\n    function BaseController(app) {\r\n        var _this = this;\r\n        if (!app.options[SENDER_ID_OPTION_NAME] ||\r\n            typeof app.options[SENDER_ID_OPTION_NAME] !== 'string') {\r\n            throw errorFactory.create(ERROR_CODES.BAD_SENDER_ID);\r\n        }\r\n        this.messagingSenderId = app.options[SENDER_ID_OPTION_NAME];\r\n        this.tokenDetailsModel = new TokenDetailsModel();\r\n        this.vapidDetailsModel = new VapidDetailsModel();\r\n        this.iidModel = new IidModel();\r\n        this.app = app;\r\n        this.INTERNAL = {\r\n            delete: function () { return _this.delete(); }\r\n        };\r\n    }\r\n    /**\r\n     * @export\r\n     */\r\n    BaseController.prototype.getToken = function () {\r\n        return __awaiter(this, void 0, void 0, function () {\r\n            var currentPermission, swReg, publicVapidKey, pushSubscription, tokenDetails;\r\n            return __generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0:\r\n                        currentPermission = this.getNotificationPermission_();\r\n                        if (currentPermission === 'denied') {\r\n                            throw errorFactory.create(ERROR_CODES.NOTIFICATIONS_BLOCKED);\r\n                        }\r\n                        else if (currentPermission !== 'granted') {\r\n                            // We must wait for permission to be granted\r\n                            return [2 /*return*/, null];\r\n                        }\r\n                        return [4 /*yield*/, this.getSWRegistration_()];\r\n                    case 1:\r\n                        swReg = _a.sent();\r\n                        return [4 /*yield*/, this.getPublicVapidKey_()];\r\n                    case 2:\r\n                        publicVapidKey = _a.sent();\r\n                        return [4 /*yield*/, this.getPushSubscription(swReg, publicVapidKey)];\r\n                    case 3:\r\n                        pushSubscription = _a.sent();\r\n                        return [4 /*yield*/, this.tokenDetailsModel.getTokenDetailsFromSWScope(swReg.scope)];\r\n                    case 4:\r\n                        tokenDetails = _a.sent();\r\n                        if (tokenDetails) {\r\n                            return [2 /*return*/, this.manageExistingToken(swReg, pushSubscription, publicVapidKey, tokenDetails)];\r\n                        }\r\n                        return [2 /*return*/, this.getNewToken(swReg, pushSubscription, publicVapidKey)];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    /**\r\n     * manageExistingToken is triggered if there's an existing FCM token in the\r\n     * database and it can take 3 different actions:\r\n     * 1) Retrieve the existing FCM token from the database.\r\n     * 2) If VAPID details have changed: Delete the existing token and create a\r\n     * new one with the new VAPID key.\r\n     * 3) If the database cache is invalidated: Send a request to FCM to update\r\n     * the token, and to check if the token is still valid on FCM-side.\r\n     */\r\n    BaseController.prototype.manageExistingToken = function (swReg, pushSubscription, publicVapidKey, tokenDetails) {\r\n        return __awaiter(this, void 0, void 0, function () {\r\n            var isTokenValid, now;\r\n            return __generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0:\r\n                        isTokenValid = isTokenStillValid(pushSubscription, publicVapidKey, tokenDetails);\r\n                        if (isTokenValid) {\r\n                            now = Date.now();\r\n                            if (now < tokenDetails.createTime + TOKEN_EXPIRATION_MILLIS) {\r\n                                return [2 /*return*/, tokenDetails.fcmToken];\r\n                            }\r\n                            else {\r\n                                return [2 /*return*/, this.updateToken(swReg, pushSubscription, publicVapidKey, tokenDetails)];\r\n                            }\r\n                        }\r\n                        // If the token is no longer valid (for example if the VAPID details\r\n                        // have changed), delete the existing token from the FCM client and server\r\n                        // database. No need to unsubscribe from the Service Worker as we have a\r\n                        // good push subscription that we'd like to use in getNewToken.\r\n                        return [4 /*yield*/, this.deleteTokenFromDB(tokenDetails.fcmToken)];\r\n                    case 1:\r\n                        // If the token is no longer valid (for example if the VAPID details\r\n                        // have changed), delete the existing token from the FCM client and server\r\n                        // database. No need to unsubscribe from the Service Worker as we have a\r\n                        // good push subscription that we'd like to use in getNewToken.\r\n                        _a.sent();\r\n                        return [2 /*return*/, this.getNewToken(swReg, pushSubscription, publicVapidKey)];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    BaseController.prototype.updateToken = function (swReg, pushSubscription, publicVapidKey, tokenDetails) {\r\n        return __awaiter(this, void 0, void 0, function () {\r\n            var updatedToken, allDetails, e_1;\r\n            return __generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0:\r\n                        _a.trys.push([0, 4, , 6]);\r\n                        return [4 /*yield*/, this.iidModel.updateToken(this.messagingSenderId, tokenDetails.fcmToken, tokenDetails.fcmPushSet, pushSubscription, publicVapidKey)];\r\n                    case 1:\r\n                        updatedToken = _a.sent();\r\n                        allDetails = {\r\n                            swScope: swReg.scope,\r\n                            vapidKey: publicVapidKey,\r\n                            fcmSenderId: this.messagingSenderId,\r\n                            fcmToken: updatedToken,\r\n                            fcmPushSet: tokenDetails.fcmPushSet,\r\n                            createTime: Date.now(),\r\n                            endpoint: pushSubscription.endpoint,\r\n                            auth: pushSubscription.getKey('auth'),\r\n                            p256dh: pushSubscription.getKey('p256dh')\r\n                        };\r\n                        return [4 /*yield*/, this.tokenDetailsModel.saveTokenDetails(allDetails)];\r\n                    case 2:\r\n                        _a.sent();\r\n                        return [4 /*yield*/, this.vapidDetailsModel.saveVapidDetails(swReg.scope, publicVapidKey)];\r\n                    case 3:\r\n                        _a.sent();\r\n                        return [2 /*return*/, updatedToken];\r\n                    case 4:\r\n                        e_1 = _a.sent();\r\n                        return [4 /*yield*/, this.deleteToken(tokenDetails.fcmToken)];\r\n                    case 5:\r\n                        _a.sent();\r\n                        throw e_1;\r\n                    case 6: return [2 /*return*/];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    BaseController.prototype.getNewToken = function (swReg, pushSubscription, publicVapidKey) {\r\n        return __awaiter(this, void 0, void 0, function () {\r\n            var tokenDetails, allDetails;\r\n            return __generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0: return [4 /*yield*/, this.iidModel.getToken(this.messagingSenderId, pushSubscription, publicVapidKey)];\r\n                    case 1:\r\n                        tokenDetails = _a.sent();\r\n                        allDetails = {\r\n                            swScope: swReg.scope,\r\n                            vapidKey: publicVapidKey,\r\n                            fcmSenderId: this.messagingSenderId,\r\n                            fcmToken: tokenDetails.token,\r\n                            fcmPushSet: tokenDetails.pushSet,\r\n                            createTime: Date.now(),\r\n                            endpoint: pushSubscription.endpoint,\r\n                            auth: pushSubscription.getKey('auth'),\r\n                            p256dh: pushSubscription.getKey('p256dh')\r\n                        };\r\n                        return [4 /*yield*/, this.tokenDetailsModel.saveTokenDetails(allDetails)];\r\n                    case 2:\r\n                        _a.sent();\r\n                        return [4 /*yield*/, this.vapidDetailsModel.saveVapidDetails(swReg.scope, publicVapidKey)];\r\n                    case 3:\r\n                        _a.sent();\r\n                        return [2 /*return*/, tokenDetails.token];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    /**\r\n     * This method deletes tokens that the token manager looks after,\r\n     * unsubscribes the token from FCM  and then unregisters the push\r\n     * subscription if it exists. It returns a promise that indicates\r\n     * whether or not the unsubscribe request was processed successfully.\r\n     */\r\n    BaseController.prototype.deleteToken = function (token) {\r\n        return __awaiter(this, void 0, void 0, function () {\r\n            var registration, pushSubscription;\r\n            return __generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0: \r\n                    // Delete the token details from the database.\r\n                    return [4 /*yield*/, this.deleteTokenFromDB(token)];\r\n                    case 1:\r\n                        // Delete the token details from the database.\r\n                        _a.sent();\r\n                        return [4 /*yield*/, this.getSWRegistration_()];\r\n                    case 2:\r\n                        registration = _a.sent();\r\n                        if (!registration) return [3 /*break*/, 4];\r\n                        return [4 /*yield*/, registration.pushManager.getSubscription()];\r\n                    case 3:\r\n                        pushSubscription = _a.sent();\r\n                        if (pushSubscription) {\r\n                            return [2 /*return*/, pushSubscription.unsubscribe()];\r\n                        }\r\n                        _a.label = 4;\r\n                    case 4: \r\n                    // If there's no SW, consider it a success.\r\n                    return [2 /*return*/, true];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    /**\r\n     * This method will delete the token from the client database, and make a\r\n     * call to FCM to remove it from the server DB. Does not temper with the\r\n     * push subscription.\r\n     */\r\n    BaseController.prototype.deleteTokenFromDB = function (token) {\r\n        return __awaiter(this, void 0, void 0, function () {\r\n            var details;\r\n            return __generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0: return [4 /*yield*/, this.tokenDetailsModel.deleteToken(token)];\r\n                    case 1:\r\n                        details = _a.sent();\r\n                        return [4 /*yield*/, this.iidModel.deleteToken(details.fcmSenderId, details.fcmToken, details.fcmPushSet)];\r\n                    case 2:\r\n                        _a.sent();\r\n                        return [2 /*return*/];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    /**\r\n     * Gets a PushSubscription for the current user.\r\n     */\r\n    BaseController.prototype.getPushSubscription = function (swRegistration, publicVapidKey) {\r\n        return swRegistration.pushManager.getSubscription().then(function (subscription) {\r\n            if (subscription) {\r\n                return subscription;\r\n            }\r\n            return swRegistration.pushManager.subscribe({\r\n                userVisibleOnly: true,\r\n                applicationServerKey: publicVapidKey\r\n            });\r\n        });\r\n    };\r\n    //\r\n    // The following methods should only be available in the window.\r\n    //\r\n    BaseController.prototype.requestPermission = function () {\r\n        throw errorFactory.create(ERROR_CODES.AVAILABLE_IN_WINDOW);\r\n    };\r\n    BaseController.prototype.useServiceWorker = function (registration) {\r\n        throw errorFactory.create(ERROR_CODES.AVAILABLE_IN_WINDOW);\r\n    };\r\n    BaseController.prototype.usePublicVapidKey = function (b64PublicKey) {\r\n        throw errorFactory.create(ERROR_CODES.AVAILABLE_IN_WINDOW);\r\n    };\r\n    BaseController.prototype.onMessage = function (nextOrObserver, error, completed) {\r\n        throw errorFactory.create(ERROR_CODES.AVAILABLE_IN_WINDOW);\r\n    };\r\n    BaseController.prototype.onTokenRefresh = function (nextOrObserver, error, completed) {\r\n        throw errorFactory.create(ERROR_CODES.AVAILABLE_IN_WINDOW);\r\n    };\r\n    //\r\n    // The following methods are used by the service worker only.\r\n    //\r\n    BaseController.prototype.setBackgroundMessageHandler = function (callback) {\r\n        throw errorFactory.create(ERROR_CODES.AVAILABLE_IN_SW);\r\n    };\r\n    //\r\n    // The following methods are used by the service themselves and not exposed\r\n    // publicly or not expected to be used by developers.\r\n    //\r\n    /**\r\n     * This method is required to adhere to the Firebase interface.\r\n     * It closes any currently open indexdb database connections.\r\n     */\r\n    BaseController.prototype.delete = function () {\r\n        return __awaiter(this, void 0, void 0, function () {\r\n            return __generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0: return [4 /*yield*/, Promise.all([\r\n                            this.tokenDetailsModel.closeDatabase(),\r\n                            this.vapidDetailsModel.closeDatabase()\r\n                        ])];\r\n                    case 1:\r\n                        _a.sent();\r\n                        return [2 /*return*/];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    /**\r\n     * Returns the current Notification Permission state.\r\n     */\r\n    BaseController.prototype.getNotificationPermission_ = function () {\r\n        // TODO: Remove the cast when this issue is fixed:\r\n        // https://github.com/Microsoft/TypeScript/issues/14701\r\n        // tslint:disable-next-line no-any\r\n        return Notification.permission;\r\n    };\r\n    BaseController.prototype.getTokenDetailsModel = function () {\r\n        return this.tokenDetailsModel;\r\n    };\r\n    BaseController.prototype.getVapidDetailsModel = function () {\r\n        return this.vapidDetailsModel;\r\n    };\r\n    // Visible for testing\r\n    // TODO: make protected\r\n    BaseController.prototype.getIidModel = function () {\r\n        return this.iidModel;\r\n    };\r\n    return BaseController;\r\n}());\r\n/**\r\n * Checks if the tokenDetails match the details provided in the clients.\r\n */\r\nfunction isTokenStillValid(pushSubscription, publicVapidKey, tokenDetails) {\r\n    if (!tokenDetails.vapidKey ||\r\n        !isArrayBufferEqual(publicVapidKey.buffer, tokenDetails.vapidKey.buffer)) {\r\n        return false;\r\n    }\r\n    var isEndpointEqual = pushSubscription.endpoint === tokenDetails.endpoint;\r\n    var isAuthEqual = isArrayBufferEqual(pushSubscription.getKey('auth'), tokenDetails.auth);\r\n    var isP256dhEqual = isArrayBufferEqual(pushSubscription.getKey('p256dh'), tokenDetails.p256dh);\r\n    return isEndpointEqual && isAuthEqual && isP256dhEqual;\r\n}\n\n/**\r\n * Copyright 2017 Google Inc.\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\nvar FCM_MSG = 'FCM_MSG';\r\nvar SwController = /** @class */ (function (_super) {\r\n    __extends(SwController, _super);\r\n    function SwController(app) {\r\n        var _this = _super.call(this, app) || this;\r\n        _this.bgMessageHandler = null;\r\n        self.addEventListener('push', function (e) {\r\n            _this.onPush(e);\r\n        });\r\n        self.addEventListener('pushsubscriptionchange', function (e) {\r\n            _this.onSubChange(e);\r\n        });\r\n        self.addEventListener('notificationclick', function (e) {\r\n            _this.onNotificationClick(e);\r\n        });\r\n        return _this;\r\n    }\r\n    // Visible for testing\r\n    // TODO: Make private\r\n    SwController.prototype.onPush = function (event) {\r\n        event.waitUntil(this.onPush_(event));\r\n    };\r\n    // Visible for testing\r\n    // TODO: Make private\r\n    SwController.prototype.onSubChange = function (event) {\r\n        event.waitUntil(this.onSubChange_(event));\r\n    };\r\n    // Visible for testing\r\n    // TODO: Make private\r\n    SwController.prototype.onNotificationClick = function (event) {\r\n        event.waitUntil(this.onNotificationClick_(event));\r\n    };\r\n    /**\r\n     * A handler for push events that shows notifications based on the content of\r\n     * the payload.\r\n     *\r\n     * The payload must be a JSON-encoded Object with a `notification` key. The\r\n     * value of the `notification` property will be used as the NotificationOptions\r\n     * object passed to showNotification. Additionally, the `title` property of the\r\n     * notification object will be used as the title.\r\n     *\r\n     * If there is no notification data in the payload then no notification will be\r\n     * shown.\r\n     */\r\n    SwController.prototype.onPush_ = function (event) {\r\n        return __awaiter(this, void 0, void 0, function () {\r\n            var msgPayload, hasVisibleClients, notificationDetails, notificationTitle, reg, actions, maxActions;\r\n            return __generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0:\r\n                        if (!event.data) {\r\n                            return [2 /*return*/];\r\n                        }\r\n                        try {\r\n                            msgPayload = event.data.json();\r\n                        }\r\n                        catch (err) {\r\n                            // Not JSON so not an FCM message\r\n                            return [2 /*return*/];\r\n                        }\r\n                        return [4 /*yield*/, this.hasVisibleClients_()];\r\n                    case 1:\r\n                        hasVisibleClients = _a.sent();\r\n                        if (hasVisibleClients) {\r\n                            // App in foreground. Send to page.\r\n                            return [2 /*return*/, this.sendMessageToWindowClients_(msgPayload)];\r\n                        }\r\n                        notificationDetails = this.getNotificationData_(msgPayload);\r\n                        if (!notificationDetails) return [3 /*break*/, 3];\r\n                        notificationTitle = notificationDetails.title || '';\r\n                        return [4 /*yield*/, this.getSWRegistration_()];\r\n                    case 2:\r\n                        reg = _a.sent();\r\n                        actions = notificationDetails.actions;\r\n                        maxActions = Notification.maxActions;\r\n                        // tslint:enable no-any\r\n                        if (actions && maxActions && actions.length > maxActions) {\r\n                            console.warn(\"This browser only supports \" + maxActions + \" actions.\" +\r\n                                \"The remaining actions will not be displayed.\");\r\n                        }\r\n                        return [2 /*return*/, reg.showNotification(notificationTitle, notificationDetails)];\r\n                    case 3:\r\n                        if (!this.bgMessageHandler) return [3 /*break*/, 5];\r\n                        return [4 /*yield*/, this.bgMessageHandler(msgPayload)];\r\n                    case 4:\r\n                        _a.sent();\r\n                        return [2 /*return*/];\r\n                    case 5: return [2 /*return*/];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    SwController.prototype.onSubChange_ = function (event) {\r\n        return __awaiter(this, void 0, void 0, function () {\r\n            var registration, err_1, err_2, tokenDetailsModel, tokenDetails;\r\n            return __generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0:\r\n                        _a.trys.push([0, 2, , 3]);\r\n                        return [4 /*yield*/, this.getSWRegistration_()];\r\n                    case 1:\r\n                        registration = _a.sent();\r\n                        return [3 /*break*/, 3];\r\n                    case 2:\r\n                        err_1 = _a.sent();\r\n                        throw errorFactory.create(ERROR_CODES.UNABLE_TO_RESUBSCRIBE, {\r\n                            message: err_1\r\n                        });\r\n                    case 3:\r\n                        _a.trys.push([3, 5, , 8]);\r\n                        return [4 /*yield*/, registration.pushManager.getSubscription()];\r\n                    case 4:\r\n                        _a.sent();\r\n                        return [3 /*break*/, 8];\r\n                    case 5:\r\n                        err_2 = _a.sent();\r\n                        tokenDetailsModel = this.getTokenDetailsModel();\r\n                        return [4 /*yield*/, tokenDetailsModel.getTokenDetailsFromSWScope(registration.scope)];\r\n                    case 6:\r\n                        tokenDetails = _a.sent();\r\n                        if (!tokenDetails) {\r\n                            // This should rarely occure, but could if indexedDB\r\n                            // is corrupted or wiped\r\n                            throw err_2;\r\n                        }\r\n                        // Attempt to delete the token if we know it's bad\r\n                        return [4 /*yield*/, this.deleteToken(tokenDetails.fcmToken)];\r\n                    case 7:\r\n                        // Attempt to delete the token if we know it's bad\r\n                        _a.sent();\r\n                        throw err_2;\r\n                    case 8: return [2 /*return*/];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    SwController.prototype.onNotificationClick_ = function (event) {\r\n        return __awaiter(this, void 0, void 0, function () {\r\n            var msgPayload, link, windowClient, internalMsg;\r\n            return __generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0:\r\n                        if (!event.notification ||\r\n                            !event.notification.data ||\r\n                            !event.notification.data[FCM_MSG]) {\r\n                            // Not an FCM notification, do nothing.\r\n                            return [2 /*return*/];\r\n                        }\r\n                        else if (event.action) {\r\n                            // User clicked on an action button.\r\n                            // This will allow devs to act on action button clicks by using a custom\r\n                            // onNotificationClick listener that they define.\r\n                            return [2 /*return*/];\r\n                        }\r\n                        // Prevent other listeners from receiving the event\r\n                        event.stopImmediatePropagation();\r\n                        event.notification.close();\r\n                        msgPayload = event.notification.data[FCM_MSG];\r\n                        if (!msgPayload.notification) {\r\n                            // Nothing to do.\r\n                            return [2 /*return*/];\r\n                        }\r\n                        link = (msgPayload.fcmOptions && msgPayload.fcmOptions.link) ||\r\n                            msgPayload.notification.click_action;\r\n                        if (!link) {\r\n                            // Nothing to do.\r\n                            return [2 /*return*/];\r\n                        }\r\n                        return [4 /*yield*/, this.getWindowClient_(link)];\r\n                    case 1:\r\n                        windowClient = _a.sent();\r\n                        if (!!windowClient) return [3 /*break*/, 3];\r\n                        return [4 /*yield*/, self.clients.openWindow(link)];\r\n                    case 2:\r\n                        // Unable to find window client so need to open one.\r\n                        windowClient = _a.sent();\r\n                        return [3 /*break*/, 5];\r\n                    case 3: return [4 /*yield*/, windowClient.focus()];\r\n                    case 4:\r\n                        windowClient = _a.sent();\r\n                        _a.label = 5;\r\n                    case 5:\r\n                        if (!windowClient) {\r\n                            // Window Client will not be returned if it's for a third party origin.\r\n                            return [2 /*return*/];\r\n                        }\r\n                        // Delete notification and fcmOptions data from payload before sending to\r\n                        // the page.\r\n                        delete msgPayload.notification;\r\n                        delete msgPayload.fcmOptions;\r\n                        internalMsg = createNewMsg(MessageType.NOTIFICATION_CLICKED, msgPayload);\r\n                        // Attempt to send a message to the client to handle the data\r\n                        // Is affected by: https://github.com/slightlyoff/ServiceWorker/issues/728\r\n                        return [2 /*return*/, this.attemptToMessageClient_(windowClient, internalMsg)];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    // Visible for testing\r\n    // TODO: Make private\r\n    SwController.prototype.getNotificationData_ = function (msgPayload) {\r\n        if (!msgPayload) {\r\n            return;\r\n        }\r\n        if (typeof msgPayload.notification !== 'object') {\r\n            return;\r\n        }\r\n        var notificationInformation = __assign({}, msgPayload.notification);\r\n        // Put the message payload under FCM_MSG name so we can identify the\r\n        // notification as being an FCM notification vs a notification from\r\n        // somewhere else (i.e. normal web push or developer generated\r\n        // notification).\r\n        notificationInformation.data = __assign({}, msgPayload.notification.data, (_a = {}, _a[FCM_MSG] = msgPayload, _a));\r\n        return notificationInformation;\r\n        var _a;\r\n    };\r\n    /**\r\n     * Calling setBackgroundMessageHandler will opt in to some specific\r\n     * behaviours.\r\n     * 1.) If a notification doesn't need to be shown due to a window already\r\n     * being visible, then push messages will be sent to the page.\r\n     * 2.) If a notification needs to be shown, and the message contains no\r\n     * notification data this method will be called\r\n     * and the promise it returns will be passed to event.waitUntil.\r\n     * If you do not set this callback then all push messages will let and the\r\n     * developer can handle them in a their own 'push' event callback\r\n     *\r\n     * @param callback The callback to be called when a push message is received\r\n     * and a notification must be shown. The callback will be given the data from\r\n     * the push message.\r\n     */\r\n    SwController.prototype.setBackgroundMessageHandler = function (callback) {\r\n        if (!callback || typeof callback !== 'function') {\r\n            throw errorFactory.create(ERROR_CODES.BG_HANDLER_FUNCTION_EXPECTED);\r\n        }\r\n        this.bgMessageHandler = callback;\r\n    };\r\n    /**\r\n     * @param url The URL to look for when focusing a client.\r\n     * @return Returns an existing window client or a newly opened WindowClient.\r\n     */\r\n    // Visible for testing\r\n    // TODO: Make private\r\n    SwController.prototype.getWindowClient_ = function (url) {\r\n        return __awaiter(this, void 0, void 0, function () {\r\n            var parsedURL, clientList, suitableClient, i, parsedClientUrl;\r\n            return __generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0:\r\n                        parsedURL = new URL(url, self.location.href).href;\r\n                        return [4 /*yield*/, getClientList()];\r\n                    case 1:\r\n                        clientList = _a.sent();\r\n                        suitableClient = null;\r\n                        for (i = 0; i < clientList.length; i++) {\r\n                            parsedClientUrl = new URL(clientList[i].url, self.location.href)\r\n                                .href;\r\n                            if (parsedClientUrl === parsedURL) {\r\n                                suitableClient = clientList[i];\r\n                                break;\r\n                            }\r\n                        }\r\n                        return [2 /*return*/, suitableClient];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    /**\r\n     * This message will attempt to send the message to a window client.\r\n     * @param client The WindowClient to send the message to.\r\n     * @param message The message to send to the client.\r\n     * @returns Returns a promise that resolves after sending the message. This\r\n     * does not guarantee that the message was successfully received.\r\n     */\r\n    // Visible for testing\r\n    // TODO: Make private\r\n    SwController.prototype.attemptToMessageClient_ = function (client, message) {\r\n        return __awaiter(this, void 0, void 0, function () {\r\n            return __generator(this, function (_a) {\r\n                // NOTE: This returns a promise in case this API is abstracted later on to\r\n                // do additional work\r\n                if (!client) {\r\n                    throw errorFactory.create(ERROR_CODES.NO_WINDOW_CLIENT_TO_MSG);\r\n                }\r\n                client.postMessage(message);\r\n                return [2 /*return*/];\r\n            });\r\n        });\r\n    };\r\n    /**\r\n     * @returns If there is currently a visible WindowClient, this method will\r\n     * resolve to true, otherwise false.\r\n     */\r\n    // Visible for testing\r\n    // TODO: Make private\r\n    SwController.prototype.hasVisibleClients_ = function () {\r\n        return __awaiter(this, void 0, void 0, function () {\r\n            var clientList;\r\n            return __generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0: return [4 /*yield*/, getClientList()];\r\n                    case 1:\r\n                        clientList = _a.sent();\r\n                        return [2 /*return*/, clientList.some(function (client) { return client.visibilityState === 'visible'; })];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    /**\r\n     * @param msgPayload The data from the push event that should be sent to all\r\n     * available pages.\r\n     * @returns Returns a promise that resolves once the message has been sent to\r\n     * all WindowClients.\r\n     */\r\n    // Visible for testing\r\n    // TODO: Make private\r\n    SwController.prototype.sendMessageToWindowClients_ = function (msgPayload) {\r\n        return __awaiter(this, void 0, void 0, function () {\r\n            var _this = this;\r\n            var clientList, internalMsg;\r\n            return __generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0: return [4 /*yield*/, getClientList()];\r\n                    case 1:\r\n                        clientList = _a.sent();\r\n                        internalMsg = createNewMsg(MessageType.PUSH_MSG_RECEIVED, msgPayload);\r\n                        return [4 /*yield*/, Promise.all(clientList.map(function (client) {\r\n                                return _this.attemptToMessageClient_(client, internalMsg);\r\n                            }))];\r\n                    case 2:\r\n                        _a.sent();\r\n                        return [2 /*return*/];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    /**\r\n     * This will register the default service worker and return the registration.\r\n     * @return he service worker registration to be used for the push service.\r\n     */\r\n    SwController.prototype.getSWRegistration_ = function () {\r\n        return __awaiter(this, void 0, void 0, function () {\r\n            return __generator(this, function (_a) {\r\n                return [2 /*return*/, self.registration];\r\n            });\r\n        });\r\n    };\r\n    /**\r\n     * This will return the default VAPID key or the uint8array version of the\r\n     * public VAPID key provided by the developer.\r\n     */\r\n    SwController.prototype.getPublicVapidKey_ = function () {\r\n        return __awaiter(this, void 0, void 0, function () {\r\n            var swReg, vapidKeyFromDatabase;\r\n            return __generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0: return [4 /*yield*/, this.getSWRegistration_()];\r\n                    case 1:\r\n                        swReg = _a.sent();\r\n                        if (!swReg) {\r\n                            throw errorFactory.create(ERROR_CODES.SW_REGISTRATION_EXPECTED);\r\n                        }\r\n                        return [4 /*yield*/, this.getVapidDetailsModel().getVapidFromSWScope(swReg.scope)];\r\n                    case 2:\r\n                        vapidKeyFromDatabase = _a.sent();\r\n                        if (vapidKeyFromDatabase == null) {\r\n                            return [2 /*return*/, DEFAULT_PUBLIC_VAPID_KEY];\r\n                        }\r\n                        return [2 /*return*/, vapidKeyFromDatabase];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    return SwController;\r\n}(BaseController));\r\nfunction getClientList() {\r\n    return self.clients.matchAll({\r\n        type: 'window',\r\n        includeUncontrolled: true\r\n        // TS doesn't know that \"type: 'window'\" means it'll return WindowClient[]\r\n    });\r\n}\r\nfunction createNewMsg(msgType, msgData) {\r\n    return _a = {}, _a[MessageParameter.TYPE_OF_MSG] = msgType, _a[MessageParameter.DATA] = msgData, _a;\r\n    var _a;\r\n}\n\n/**\r\n * Copyright 2017 Google Inc.\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\nvar DEFAULT_SW_PATH = '/firebase-messaging-sw.js';\r\nvar DEFAULT_SW_SCOPE = '/firebase-cloud-messaging-push-scope';\n\n/**\r\n * Copyright 2017 Google Inc.\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\nvar WindowController = /** @class */ (function (_super) {\r\n    __extends(WindowController, _super);\r\n    /**\r\n     * A service that provides a MessagingService instance.\r\n     */\r\n    function WindowController(app) {\r\n        var _this = _super.call(this, app) || this;\r\n        _this.registrationToUse = null;\r\n        _this.publicVapidKeyToUse = null;\r\n        _this.manifestCheckPromise = null;\r\n        _this.messageObserver = null;\r\n        // @ts-ignore: Unused variable error, this is not implemented yet.\r\n        _this.tokenRefreshObserver = null;\r\n        _this.onMessageInternal = createSubscribe(function (observer) {\r\n            _this.messageObserver = observer;\r\n        });\r\n        _this.onTokenRefreshInternal = createSubscribe(function (observer) {\r\n            _this.tokenRefreshObserver = observer;\r\n        });\r\n        _this.setupSWMessageListener_();\r\n        return _this;\r\n    }\r\n    /**\r\n     * This method returns an FCM token if it can be generated.\r\n     * The return promise will reject if the browser doesn't support\r\n     * FCM, if permission is denied for notifications or it's not\r\n     * possible to generate a token.\r\n     *\r\n     * @return Returns a promise that resolves to an FCM token or null if\r\n     * permission isn't granted.\r\n     */\r\n    WindowController.prototype.getToken = function () {\r\n        return __awaiter(this, void 0, void 0, function () {\r\n            return __generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0:\r\n                        if (!this.manifestCheckPromise) {\r\n                            this.manifestCheckPromise = manifestCheck();\r\n                        }\r\n                        return [4 /*yield*/, this.manifestCheckPromise];\r\n                    case 1:\r\n                        _a.sent();\r\n                        return [2 /*return*/, _super.prototype.getToken.call(this)];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    /**\r\n     * Request permission if it is not currently granted\r\n     *\r\n     * @return Resolves if the permission was granted, otherwise rejects\r\n     */\r\n    WindowController.prototype.requestPermission = function () {\r\n        return __awaiter(this, void 0, void 0, function () {\r\n            var permissionResult;\r\n            return __generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0:\r\n                        if (this.getNotificationPermission_() === 'granted') {\r\n                            return [2 /*return*/];\r\n                        }\r\n                        return [4 /*yield*/, Notification.requestPermission()];\r\n                    case 1:\r\n                        permissionResult = _a.sent();\r\n                        if (permissionResult === 'granted') {\r\n                            return [2 /*return*/];\r\n                        }\r\n                        else if (permissionResult === 'denied') {\r\n                            throw errorFactory.create(ERROR_CODES.PERMISSION_BLOCKED);\r\n                        }\r\n                        else {\r\n                            throw errorFactory.create(ERROR_CODES.PERMISSION_DEFAULT);\r\n                        }\r\n                        return [2 /*return*/];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    /**\r\n     * This method allows a developer to override the default service worker and\r\n     * instead use a custom service worker.\r\n     *\r\n     * @param registration The service worker registration that should be used to\r\n     * receive the push messages.\r\n     */\r\n    WindowController.prototype.useServiceWorker = function (registration) {\r\n        if (!(registration instanceof ServiceWorkerRegistration)) {\r\n            throw errorFactory.create(ERROR_CODES.SW_REGISTRATION_EXPECTED);\r\n        }\r\n        if (this.registrationToUse != null) {\r\n            throw errorFactory.create(ERROR_CODES.USE_SW_BEFORE_GET_TOKEN);\r\n        }\r\n        this.registrationToUse = registration;\r\n    };\r\n    /**\r\n     * This method allows a developer to override the default vapid key\r\n     * and instead use a custom VAPID public key.\r\n     *\r\n     * @param publicKey A URL safe base64 encoded string.\r\n     */\r\n    WindowController.prototype.usePublicVapidKey = function (publicKey) {\r\n        if (typeof publicKey !== 'string') {\r\n            throw errorFactory.create(ERROR_CODES.INVALID_PUBLIC_VAPID_KEY);\r\n        }\r\n        if (this.publicVapidKeyToUse != null) {\r\n            throw errorFactory.create(ERROR_CODES.USE_PUBLIC_KEY_BEFORE_GET_TOKEN);\r\n        }\r\n        var parsedKey = base64ToArrayBuffer(publicKey);\r\n        if (parsedKey.length !== 65) {\r\n            throw errorFactory.create(ERROR_CODES.PUBLIC_KEY_DECRYPTION_FAILED);\r\n        }\r\n        this.publicVapidKeyToUse = parsedKey;\r\n    };\r\n    /**\r\n     * @export\r\n     * @param nextOrObserver An observer object or a function triggered on\r\n     * message.\r\n     * @param error A function triggered on message error.\r\n     * @param completed function triggered when the observer is removed.\r\n     * @return The unsubscribe function for the observer.\r\n     */\r\n    WindowController.prototype.onMessage = function (nextOrObserver, error, completed) {\r\n        if (typeof nextOrObserver === 'function') {\r\n            return this.onMessageInternal(nextOrObserver, error, completed);\r\n        }\r\n        else {\r\n            return this.onMessageInternal(nextOrObserver);\r\n        }\r\n    };\r\n    /**\r\n     * @param nextOrObserver An observer object or a function triggered on token\r\n     * refresh.\r\n     * @param error A function triggered on token refresh error.\r\n     * @param completed function triggered when the observer is removed.\r\n     * @return The unsubscribe function for the observer.\r\n     */\r\n    WindowController.prototype.onTokenRefresh = function (nextOrObserver, error, completed) {\r\n        if (typeof nextOrObserver === 'function') {\r\n            return this.onTokenRefreshInternal(nextOrObserver, error, completed);\r\n        }\r\n        else {\r\n            return this.onTokenRefreshInternal(nextOrObserver);\r\n        }\r\n    };\r\n    /**\r\n     * Given a registration, wait for the service worker it relates to\r\n     * become activer\r\n     * @param registration Registration to wait for service worker to become active\r\n     * @return Wait for service worker registration to become active\r\n     */\r\n    // Visible for testing\r\n    // TODO: Make private\r\n    WindowController.prototype.waitForRegistrationToActivate_ = function (registration) {\r\n        var serviceWorker = registration.installing || registration.waiting || registration.active;\r\n        return new Promise(function (resolve, reject) {\r\n            if (!serviceWorker) {\r\n                // This is a rare scenario but has occured in firefox\r\n                reject(errorFactory.create(ERROR_CODES.NO_SW_IN_REG));\r\n                return;\r\n            }\r\n            // Because the Promise function is called on next tick there is a\r\n            // small chance that the worker became active or redundant already.\r\n            if (serviceWorker.state === 'activated') {\r\n                resolve(registration);\r\n                return;\r\n            }\r\n            if (serviceWorker.state === 'redundant') {\r\n                reject(errorFactory.create(ERROR_CODES.SW_REG_REDUNDANT));\r\n                return;\r\n            }\r\n            var stateChangeListener = function () {\r\n                if (serviceWorker.state === 'activated') {\r\n                    resolve(registration);\r\n                }\r\n                else if (serviceWorker.state === 'redundant') {\r\n                    reject(errorFactory.create(ERROR_CODES.SW_REG_REDUNDANT));\r\n                }\r\n                else {\r\n                    // Return early and wait to next state change\r\n                    return;\r\n                }\r\n                serviceWorker.removeEventListener('statechange', stateChangeListener);\r\n            };\r\n            serviceWorker.addEventListener('statechange', stateChangeListener);\r\n        });\r\n    };\r\n    /**\r\n     * This will register the default service worker and return the registration\r\n     * @return The service worker registration to be used for the push service.\r\n     */\r\n    WindowController.prototype.getSWRegistration_ = function () {\r\n        var _this = this;\r\n        if (this.registrationToUse) {\r\n            return this.waitForRegistrationToActivate_(this.registrationToUse);\r\n        }\r\n        // Make the registration null so we know useServiceWorker will not\r\n        // use a new service worker as registrationToUse is no longer undefined\r\n        this.registrationToUse = null;\r\n        return navigator.serviceWorker\r\n            .register(DEFAULT_SW_PATH, {\r\n            scope: DEFAULT_SW_SCOPE\r\n        })\r\n            .catch(function (err) {\r\n            throw errorFactory.create(ERROR_CODES.FAILED_DEFAULT_REGISTRATION, {\r\n                browserErrorMessage: err.message\r\n            });\r\n        })\r\n            .then(function (registration) {\r\n            return _this.waitForRegistrationToActivate_(registration).then(function () {\r\n                _this.registrationToUse = registration;\r\n                // We update after activation due to an issue with Firefox v49 where\r\n                // a race condition occassionally causes the service work to not\r\n                // install\r\n                registration.update();\r\n                return registration;\r\n            });\r\n        });\r\n    };\r\n    /**\r\n     * This will return the default VAPID key or the uint8array version of the public VAPID key\r\n     * provided by the developer.\r\n     */\r\n    WindowController.prototype.getPublicVapidKey_ = function () {\r\n        return __awaiter(this, void 0, void 0, function () {\r\n            return __generator(this, function (_a) {\r\n                if (this.publicVapidKeyToUse) {\r\n                    return [2 /*return*/, this.publicVapidKeyToUse];\r\n                }\r\n                return [2 /*return*/, DEFAULT_PUBLIC_VAPID_KEY];\r\n            });\r\n        });\r\n    };\r\n    /**\r\n     * This method will set up a message listener to handle\r\n     * events from the service worker that should trigger\r\n     * events in the page.\r\n     */\r\n    // Visible for testing\r\n    // TODO: Make private\r\n    WindowController.prototype.setupSWMessageListener_ = function () {\r\n        var _this = this;\r\n        navigator.serviceWorker.addEventListener('message', function (event) {\r\n            if (!event.data || !event.data[MessageParameter.TYPE_OF_MSG]) {\r\n                // Not a message from FCM\r\n                return;\r\n            }\r\n            var workerPageMessage = event.data;\r\n            switch (workerPageMessage[MessageParameter.TYPE_OF_MSG]) {\r\n                case MessageType.PUSH_MSG_RECEIVED:\r\n                case MessageType.NOTIFICATION_CLICKED:\r\n                    var pushMessage = workerPageMessage[MessageParameter.DATA];\r\n                    if (_this.messageObserver) {\r\n                        _this.messageObserver.next(pushMessage);\r\n                    }\r\n                    break;\r\n                default:\r\n                    // Noop.\r\n                    break;\r\n            }\r\n        }, false);\r\n    };\r\n    return WindowController;\r\n}(BaseController));\r\n/**\r\n * The method checks that a manifest is defined and has the correct GCM\r\n * sender ID.\r\n * @return Returns a promise that resolves if the manifest matches\r\n * our required sender ID\r\n */\r\n// Exported for testing\r\nfunction manifestCheck() {\r\n    return __awaiter(this, void 0, void 0, function () {\r\n        var manifestTag, manifestContent, response, e_1;\r\n        return __generator(this, function (_a) {\r\n            switch (_a.label) {\r\n                case 0:\r\n                    manifestTag = document.querySelector('link[rel=\"manifest\"]');\r\n                    if (!manifestTag) {\r\n                        return [2 /*return*/];\r\n                    }\r\n                    _a.label = 1;\r\n                case 1:\r\n                    _a.trys.push([1, 4, , 5]);\r\n                    return [4 /*yield*/, fetch(manifestTag.href)];\r\n                case 2:\r\n                    response = _a.sent();\r\n                    return [4 /*yield*/, response.json()];\r\n                case 3:\r\n                    manifestContent = _a.sent();\r\n                    return [3 /*break*/, 5];\r\n                case 4:\r\n                    e_1 = _a.sent();\r\n                    // If the download or parsing fails allow check.\r\n                    // We only want to error if we KNOW that the gcm_sender_id is incorrect.\r\n                    return [2 /*return*/];\r\n                case 5:\r\n                    if (!manifestContent || !manifestContent.gcm_sender_id) {\r\n                        return [2 /*return*/];\r\n                    }\r\n                    if (manifestContent.gcm_sender_id !== '103953800507') {\r\n                        throw errorFactory.create(ERROR_CODES.INCORRECT_GCM_SENDER_ID);\r\n                    }\r\n                    return [2 /*return*/];\r\n            }\r\n        });\r\n    });\r\n}\n\n/**\r\n * Copyright 2017 Google Inc.\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\nfunction registerMessaging(instance) {\r\n    var messagingName = 'messaging';\r\n    var factoryMethod = function (app) {\r\n        if (!isSupported()) {\r\n            throw errorFactory.create(ERROR_CODES.UNSUPPORTED_BROWSER);\r\n        }\r\n        if (self && 'ServiceWorkerGlobalScope' in self) {\r\n            // Running in ServiceWorker context\r\n            return new SwController(app);\r\n        }\r\n        else {\r\n            // Assume we are in the window context.\r\n            return new WindowController(app);\r\n        }\r\n    };\r\n    var namespaceExports = {\r\n        isSupported: isSupported\r\n    };\r\n    instance.INTERNAL.registerService(messagingName, factoryMethod, namespaceExports);\r\n}\r\nregisterMessaging(firebase);\r\nfunction isSupported() {\r\n    if (self && 'ServiceWorkerGlobalScope' in self) {\r\n        // Running in ServiceWorker context\r\n        return isSWControllerSupported();\r\n    }\r\n    else {\r\n        // Assume we are in the window context.\r\n        return isWindowControllerSupported();\r\n    }\r\n}\r\n/**\r\n * Checks to see if the required APIs exist.\r\n */\r\nfunction isWindowControllerSupported() {\r\n    return (navigator.cookieEnabled &&\r\n        'serviceWorker' in navigator &&\r\n        'PushManager' in window &&\r\n        'Notification' in window &&\r\n        'fetch' in window &&\r\n        ServiceWorkerRegistration.prototype.hasOwnProperty('showNotification') &&\r\n        PushSubscription.prototype.hasOwnProperty('getKey'));\r\n}\r\n/**\r\n * Checks to see if the required APIs exist within SW Context.\r\n */\r\nfunction isSWControllerSupported() {\r\n    return ('PushManager' in self &&\r\n        'Notification' in self &&\r\n        ServiceWorkerRegistration.prototype.hasOwnProperty('showNotification') &&\r\n        PushSubscription.prototype.hasOwnProperty('getKey'));\r\n}\n\nexport { registerMessaging, isSupported };\n","import '@firebase/messaging';\n\n/**\r\n * Copyright 2017 Google Inc.\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 */\n","import firebase from \"firebase/app\";\nimport \"firebase/messaging\";\n\nconst firebaseConfig = {\n  apiKey: \"AIzaSyDYLkvOoJJCwW2uUeAUxBrJEb-kHOJ5CVc\",\n  authDomain: \"kipboiz-app.firebaseapp.com\",\n  databaseURL: \"https://kipboiz-app.firebaseio.com\",\n  projectId: \"kipboiz-app\",\n  storageBucket: \"kipboiz-app.appspot.com\",\n  messagingSenderId: \"912428603607\"\n};\n\nconst fb = firebase.initializeApp(firebaseConfig);\nconst fbMessage = firebase.messaging();\n"]}